DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_FP_PLANNING_TRANSACTION_PUB

Source


1 PACKAGE body pa_fp_planning_transaction_pub AS
2 /* $Header: PAFPPTPB.pls 120.33.12010000.5 2008/09/22 02:38:26 kmaddi ship $ */
3  g_module_name   VARCHAR2(100) := 'pa.plsql.PA_FP_PLANNING_TRANSACTION_PUB';
4 
5 --This pl/sql table will be used by the method get_rbs_element_id. This should not be used in other procedures
6 -- l_ra_id_rbs_element_id_map_tbl PA_PLSQL_DATATYPES.IdTabTyp;
7 
8 --This pl/sql table will be used by DUP_EXISTS. This should not be used in other APIs
9 l_task_id_rlm_id_dup_tbl  PA_PLSQL_DATATYPES.IdTabTyp;
10 
11 PROCEDURE print_msg(p_msg  varchar2
12 		,p_module_name  Varchar2 Default NULL) IS
13 
14 	--pragma autonomous_transaction ;
15 	l_module_name Varchar2(100) := p_module_name;
16 BEGIN
17 	If l_module_name is NULL Then
18 		l_module_name := g_module_name;
19 	End If;
20 	pa_debug.write( l_module_name,p_msg,3);
21 	/*
22 	--dbms_output.put_line(p_msg);
23 	INSERT INTO PA_FP_CALCULATE_LOG
24 	(SESSIONID
25 	,SEQ_NUMBER
26 	,LOG_MESSAGE)
27 	VALUES
28 	(userenv('sessionid')
29 	,HR.PAY_US_GARN_FEE_RULES_S.nextval
30 	,substr(P_MSG,1,240)
31 	);
32 	COMMIT;
33 	*/
34 END print_msg;
35  --------------------------------
36  --User Defined Exceptions if any
37  --------------------------------
38  --Bug 4152749. The API is changed for the calculate API enhancements. Replaced the existing logic with the new logic to
39  --pass the old/new values for required resource attribs to calcualte API so that it takes care of manipulating the
40  --budget lines based on the changes.
41  --This is private procedure. This replaces the derive_parameters_for_calc_api in the previous API
42  --This API
43  ------1.Will detect the changes in the rbs_element_id and call the reporting lines API to negate the amounts
44  --------for the old rbs_element_id
45  ------2.Prepare pl/sql tbls containing Old/New Values for MFC Cost Type Id, Spread Curve Id, SP Fixed Date,
46  ------- Planning Start/End Dates and another pl/sql tbl which indicates whether a change in RLM has occurred or not.
47  ------3.Gives the new rbs_element_id for each input RA ID as output.
48  --The values for p_context are 'BUDGET', 'FORECAST', 'WORKPLAN' and 'TASK_ASSIGNMENT'
49 PROCEDURE Process_res_chg_Derv_calc_prms
50 (
51      p_context                          IN      VARCHAR2
52     ,p_calling_context                  IN      VARCHAR2 DEFAULT NULL  -- Added for Bug 6856934
53     ,p_budget_version_id                IN      Pa_budget_versions.budget_version_id%TYPE
54     ,p_resource_assignment_id_tbl       IN      SYSTEM.PA_NUM_TBL_TYPE
55     ,p_resource_list_member_id_tbl      IN      SYSTEM.PA_NUM_TBL_TYPE
56     ,p_planning_start_date_tbl          IN      SYSTEM.PA_DATE_TBL_TYPE
57     ,p_planning_end_date_tbl            IN      SYSTEM.PA_DATE_TBL_TYPE
58     ,p_spread_curve_id_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE
59     ,p_sp_fixed_date_tbl                IN      SYSTEM.PA_DATE_TBL_TYPE
60     ,p_txn_currency_code_tbl            IN      SYSTEM.PA_VARCHAR2_15_TBL_TYPE
61     ,p_inventory_item_id_tbl            IN      SYSTEM.PA_NUM_TBL_TYPE
62     ,p_expenditure_type_tbl             IN      SYSTEM.pa_varchar2_30_tbl_type
63     ,p_person_id_tbl                    IN      SYSTEM.PA_NUM_TBL_TYPE
64     ,p_job_id_tbl                       IN      SYSTEM.PA_NUM_TBL_TYPE
65     ,p_organization_id_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE
66     ,p_event_type_tbl                   IN      SYSTEM.pa_varchar2_30_tbl_type
67     ,p_expenditure_category_tbl         IN      SYSTEM.pa_varchar2_30_tbl_type
68     ,p_revenue_category_code_tbl        IN      SYSTEM.pa_varchar2_30_tbl_type
69     ,p_item_category_id_tbl             IN      SYSTEM.PA_NUM_TBL_TYPE
70     ,p_bom_resource_id_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE
71     ,p_project_role_id_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE
72     ,p_person_type_code_tbl             IN      SYSTEM.pa_varchar2_30_tbl_type
73     ,p_supplier_id_tbl                  IN      SYSTEM.PA_NUM_TBL_TYPE
74     ,p_named_role_tbl                   IN      SYSTEM.pa_varchar2_80_tbl_type
75     ,p_mfc_cost_type_id_tbl             IN      SYSTEM.PA_NUM_TBL_TYPE
76     ,p_fixed_date_sp_id                 IN      pa_spread_curves_b.spread_curve_id%TYPE -- Added for Bug 3607061
77     ,px_total_qty_tbl                   IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
78     ,px_total_raw_cost_tbl              IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
79     ,px_total_burdened_cost_tbl         IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
80     ,px_total_revenue_tbl               IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
81     ,px_raw_cost_rate_tbl               IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
82     ,px_b_cost_rate_tbl                 IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
83     ,px_bill_rate_tbl                   IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
84     ,px_raw_cost_override_rate_tbl      IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
85     ,px_b_cost_rate_override_tbl        IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
86     ,px_bill_rate_override_tbl          IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
87     ,x_rbs_element_id_tbl                  OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
88     ,x_txn_accum_header_id_tbl             OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
89     ,x_mfc_cost_type_id_old_tbl            OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
90     ,x_mfc_cost_type_id_new_tbl            OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
91     ,x_spread_curve_id_old_tbl             OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
92     ,x_spread_curve_id_new_tbl             OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
93     ,x_sp_fixed_date_old_tbl               OUT  NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
94     ,x_sp_fixed_date_new_tbl               OUT  NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
95     ,x_plan_start_date_old_tbl             OUT  NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
96     ,x_plan_start_date_new_tbl             OUT  NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
97     ,x_plan_end_date_old_tbl               OUT  NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
98     ,x_plan_end_date_new_tbl               OUT  NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
99     ,x_rlm_id_change_flag_tbl              OUT  NOCOPY SYSTEM.PA_VARCHAR2_1_TBL_TYPE --File.Sql.39 bug 4440895
100     ,x_return_status                       OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
101     ,x_msg_data                            OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
102     ,x_msg_count                           OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
103 ) IS
104 
105       CURSOR c_plan_ver_settings_csr
106       IS
107       SELECT nvl(pfo.cost_resource_list_id, nvl(pfo.revenue_resource_list_id, pfo.all_resource_list_id)) resource_list_id
108             ,pfo.rbs_version_id rbs_version_id
109             ,pbv.ci_id ci_id
110             ,pbv.etc_start_date etc_start_date
111             ,pbv.wp_version_flag wp_version_flag
112       FROM   pa_proj_fp_options pfo
113             ,pa_budget_versions pbv
114       WHERE  pfo.fin_plan_version_id=p_budget_version_id
115       AND    pbv.budget_version_id=p_budget_version_id;
116 
117 
118       CURSOR c_data_in_db_csr(c_resource_asg_id pa_resource_assignments.resource_assignment_id%TYPE)
119       IS
120       SELECT sum(quantity) quantity
121        FROM  pa_budget_lines
122       WHERE resource_assignment_id = c_resource_asg_id;
123 --  ORDER BY resource_assignment_id,txn_currency_code;
124 
125       l_data_in_db_rec    c_data_in_db_csr%ROWTYPE;
126 
127       l_plan_ver_settings_rec c_plan_ver_settings_csr%ROWTYPE;
128 
129   --Start of variables used for debugging
130       l_msg_count                    NUMBER :=0;
131       l_data                         VARCHAR2(2000);
132       l_msg_data                     VARCHAR2(2000);
133       l_error_msg_code               VARCHAR2(30);
134       l_msg_index_out                NUMBER;
135       l_return_status                VARCHAR2(2000);
136       l_debug_mode                   VARCHAR2(30);
137       l_module_name                  VARCHAR2(100):='PAFPPTPB.Process_res_chg_Derv_calc_prms';
138   --End of variables used for debugging
139 
140       l_ra_id_count                  NUMBER := 0;
141       l_rbs_map_index                NUMBER:=0;
142 
143       l_resource_class_code_tbl      SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
144       l_rate_based_flag_tbl          SYSTEM.pa_varchar2_1_tbl_type  :=SYSTEM.pa_varchar2_1_tbl_type();
145       l_ra_id_rbs_prm_tbl            SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
146       l_person_id_rbs_prm_tbl        SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
147       l_job_id_rbs_prm_tbl           SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
148       l_organization_id_rbs_prm_tbl  SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
149       l_event_type_rbs_prm_tbl       SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
150       l_exp_category_rbs_prm_tbl     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
151       l_rev_cat_code_rbs_prm_tbl     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
152       l_inv_item_id_rbs_prm_tbl      SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
153       l_item_cat_id_rbs_prm_tbl      SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
154       l_bom_res_id_rbs_prm_tbl       SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
155       l_per_type_code_rbs_prm_tbl    SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
156       l_supplier_id_rbs_prm_tbl      SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
157       l_rbs_element_id_prm_tbl       SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
158       l_inventory_item_id_tbl        SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
159       l_expenditure_type_tbl         SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
160       l_person_id_tbl                SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
161       l_job_id_tbl                   SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
162       l_organization_id_tbl          SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
163       l_event_type_tbl               SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
164       l_expenditure_category_tbl     SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
165       l_revenue_category_code_tbl    SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
166       l_item_category_id_tbl         SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
167       l_bom_resource_id_tbl          SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
168       l_project_role_id_tbl          SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
169       l_person_type_code_tbl         SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
170       l_supplier_id_tbl              SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
171       l_txn_src_typ_code_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
172       l_exp_type_rbs_prm_tbl         SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
173       l_non_labor_resource_tbl       SYSTEM.pa_varchar2_20_tbl_type :=SYSTEM.pa_varchar2_20_tbl_type();
174       l_non_labor_res_rbs_prm_tbl    SYSTEM.pa_varchar2_20_tbl_type :=SYSTEM.pa_varchar2_20_tbl_type();
175       l_named_role_tbl               SYSTEM.pa_varchar2_80_tbl_type :=SYSTEM.pa_varchar2_80_tbl_type();
176       l_project_role_id_rbs_prm_tbl  SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
177       l_named_role_rbs_prm_tbl       SYSTEM.pa_varchar2_80_tbl_type := SYSTEM.pa_varchar2_80_tbl_type();
178       l_txn_source_id_tbl            SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
179       l_res_list_member_id_tbl       SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
180       l_txn_accum_header_id_prm_tbl  SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
181       l_task_id_tbl                  SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
182       -- Added for Bug 3762278
183       l_project_name                 pa_projects_all.name%TYPE;
184       l_task_name                    pa_proj_elements.name%TYPE;
185       l_resource_name                pa_resource_list_members.alias%TYPE;
186 
187       l_task_id_rbs_prm_tbl          SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
188       l_rbs_elem_id_rbs_prm_tbl      SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
189       l_rbf_rbs_prm_tbl              SYSTEM.pa_varchar2_1_tbl_type  := SYSTEM.pa_varchar2_1_tbl_type();
190       l_res_class_code_rbs_prm_tbl   SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
191 
192       l_txn_currency_code_tbl        SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
193 
194       --Bug 4083605
195       l_actuals_start_date           pa_budget_lines.start_date%TYPE;
196       l_actuals_end_date             pa_budget_lines.start_date%TYPE;
197 
198 	/*Bug fix: 5752337 */
199 	CURSOR get_line_info (p_resource_assignment_id IN NUMBER) IS
200         SELECT ppa.name project_name
201                ,pt.name task_name
202                ,prl.alias resource_name
203         FROM pa_projects_all ppa
204                ,pa_proj_elements pt
205                ,pa_resource_list_members prl
206                ,pa_resource_assignments pra
207         WHERE pra.resource_assignment_id = p_resource_assignment_id
208         AND ppa.project_id = pra.project_id
209         AND pt.proj_element_id(+) = pra.task_id
210         AND prl.resource_list_member_id = pra.resource_list_member_id;
211 
212 	/* Bug fix:5759413 */
213 	CURSOR get_rateOvrds ( p_resource_assignment_id IN NUMBER) IS
214 	SELECT rtx.txn_raw_cost_rate_override
215 		,rtx.txn_burden_cost_rate_override
216 		,rtx.txn_bill_rate_override
217 	FROM pa_resource_asgn_curr rtx
218 	WHERE rtx.resource_assignment_id = p_resource_assignment_id;
219 
220 	l_rtx_rateOvrds_rec  get_rateOvrds%ROWTYPE;
221 
222   BEGIN
223 
224     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
225     l_debug_mode := NVL(l_debug_mode, 'N');
226     x_msg_count := 0;
227     x_return_status := FND_API.G_RET_STS_SUCCESS;
228 IF l_debug_mode = 'Y' THEN
229     PA_DEBUG.Set_Curr_Function( p_function   => 'plan_txn_pub.drv_prms_for_calc',
230                                 p_debug_mode => l_debug_mode );
231 END IF;
232 -----------------------------------------------------------------------------
233 -- Validating input paramters p_context and p_budget_version_id vannot be null
234 -----------------------------------------------------------------------------
235     IF l_debug_mode = 'Y' THEN
236         pa_debug.g_err_stage:='Validating input parameters';
237         print_msg(pa_debug.g_err_stage,l_module_name);
238     END IF;
239 
240     IF ((p_context IS NULL) OR (p_budget_version_id IS NULL))  THEN
241         IF l_debug_mode = 'Y' THEN
242             pa_debug.g_err_stage:='Required parameter is null - p_context : ' || p_context;
243             pa_debug.write(l_module_name ,pa_debug.g_err_stage,5);
244 
245             pa_debug.g_err_stage:='Required parameter is null - p_budget_version_id : ' || p_budget_version_id;
246             pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
247         END IF;
248         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
249                              p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
250                              p_token1         => 'PROCEDURENAME',
251                              p_value1         => l_module_name);
252         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
253     END IF;
254 
255     l_ra_id_count := p_resource_assignment_id_tbl.COUNT;
256 
257     IF l_ra_id_count = 0 THEN
258         IF l_debug_mode = 'Y' THEN
259             pa_debug.g_err_stage:='Validating input parameters - No resource assignment id is passed -raising excp.';
260             print_msg(pa_debug.g_err_stage,l_module_name);
261         END IF;
262 	IF l_debug_mode = 'Y' THEN
263 	        pa_debug.reset_curr_function;
264 	END IF;
265         RETURN;
266     END IF;
267 --dbms_output.put_line('d2');
268     --Extending the output pl/sql tables
269     IF l_debug_mode = 'Y' THEN
270         pa_debug.g_err_stage:='Extending input params';
271         print_msg(pa_debug.g_err_stage,l_module_name);
272     END IF;
273     x_rbs_element_id_tbl       := SYSTEM.PA_NUM_TBL_TYPE();
274     x_txn_accum_header_id_tbl  := SYSTEM.PA_NUM_TBL_TYPE();
275     x_mfc_cost_type_id_old_tbl := SYSTEM.PA_NUM_TBL_TYPE();
276     x_mfc_cost_type_id_new_tbl := SYSTEM.PA_NUM_TBL_TYPE();
277     x_spread_curve_id_old_tbl  := SYSTEM.PA_NUM_TBL_TYPE();
278     x_spread_curve_id_new_tbl  := SYSTEM.PA_NUM_TBL_TYPE();
279     x_sp_fixed_date_old_tbl    := SYSTEM.PA_DATE_TBL_TYPE();
280     x_sp_fixed_date_new_tbl    := SYSTEM.PA_DATE_TBL_TYPE();
281     x_plan_start_date_old_tbl  := SYSTEM.PA_DATE_TBL_TYPE();
282     x_plan_start_date_new_tbl  := SYSTEM.PA_DATE_TBL_TYPE();
283     x_plan_end_date_old_tbl    := SYSTEM.PA_DATE_TBL_TYPE();
284     x_plan_end_date_new_tbl    := SYSTEM.PA_DATE_TBL_TYPE();
285     x_rlm_id_change_flag_tbl   := SYSTEM.pa_varchar2_1_tbl_type();
286 
287     x_rbs_element_id_tbl.extend(p_resource_assignment_id_tbl.last);
288     x_txn_accum_header_id_tbl.extend(p_resource_assignment_id_tbl.last);
289     x_mfc_cost_type_id_old_tbl.extend(p_resource_assignment_id_tbl.last);
290     x_mfc_cost_type_id_new_tbl.extend(p_resource_assignment_id_tbl.last);
291     x_spread_curve_id_old_tbl.extend(p_resource_assignment_id_tbl.last);
292     x_spread_curve_id_new_tbl.extend(p_resource_assignment_id_tbl.last);
293     x_sp_fixed_date_old_tbl.extend(p_resource_assignment_id_tbl.last);
294     x_sp_fixed_date_new_tbl.extend(p_resource_assignment_id_tbl.last);
295     x_plan_start_date_old_tbl.extend(p_resource_assignment_id_tbl.last);
296     x_plan_start_date_new_tbl.extend(p_resource_assignment_id_tbl.last);
297     x_plan_end_date_old_tbl.extend(p_resource_assignment_id_tbl.last);
298     x_plan_end_date_new_tbl.extend(p_resource_assignment_id_tbl.last);
299     x_rlm_id_change_flag_tbl.extend(p_resource_assignment_id_tbl.last);
300 
301     --Open the plan version cursor to get the plan version settings. This will be used in the later part
302     --of the code
303     OPEN c_plan_ver_settings_csr;
304     FETCH c_plan_ver_settings_csr INTO l_plan_ver_settings_rec;
305     IF c_plan_ver_settings_csr%NOTFOUND THEN
306 
307         IF l_debug_mode = 'Y' THEN
308            pa_debug.g_err_stage:='0 rows returned by c_plan_ver_settings_csr';
309            pa_debug.write(l_module_name,pa_debug.g_err_stage, 5);
310         END IF;
311         CLOSE c_plan_ver_settings_csr;
312         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
313 
314     END IF;
315     CLOSE c_plan_ver_settings_csr;
316     --dbms_output.put_line('6.1');
317 
318     ----------------------------------------------------------------------------------------------------------
319     --The logic below is placed to pass the data required by the calculate API. The tbls containing Old/New
320     --values for mfc cost type id, plan start/end dates, spread curve and sp fixed dates are prepared. A tbl
321     --to indicate a changed in rbs mapping is also prepared
322     ---------------------------------------------------------------------------------------------------------
323     l_txn_currency_code_tbl.extend(p_resource_assignment_id_tbl.COUNT);
324 
325     l_inventory_item_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
326     l_expenditure_type_tbl.extend(p_resource_assignment_id_tbl.COUNT);
327     l_person_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
328     l_job_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
329     l_organization_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
330     l_event_type_tbl.extend(p_resource_assignment_id_tbl.COUNT);
331     l_expenditure_category_tbl.extend(p_resource_assignment_id_tbl.COUNT);
332     l_revenue_category_code_tbl.extend(p_resource_assignment_id_tbl.COUNT);
333     l_item_category_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
334     l_bom_resource_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
335     l_project_role_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
336     l_person_type_code_tbl.extend(p_resource_assignment_id_tbl.COUNT);
337     l_supplier_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
338     l_named_role_tbl.extend(p_resource_assignment_id_tbl.COUNT);
339     --              l_rate_func_curr_code_tbl
340     l_resource_class_code_tbl.extend(p_resource_assignment_id_tbl.COUNT);
341     l_rate_based_flag_tbl.extend(p_resource_assignment_id_tbl.COUNT);
342     l_non_labor_resource_tbl.extend(p_resource_assignment_id_tbl.COUNT);
343     l_task_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
344 
345     --Added the check for FND_API.G_MISS_XXX  in the below decodes as the UI can pass input parameters
346     --as FND_API.G_MISS_XXX even if the existing value of the attribute is NULL. NOTE: The input parameter
347     --to update_planning_transactions should be NULL if the corresponding column in pa_resource_assignments
348     --should not be changed and the input parameter should be FND_API.G_MISS_XXX if thhe corresponding column
349     --in pa_resource_assignments should be nulled out.
350     FOR i IN p_resource_assignment_id_tbl.FIRST .. p_resource_assignment_id_tbl.LAST  LOOP
351 
352                    --dbms_output.put_line('6.2 '||p_resource_assignment_id_tbl(i) );
353 
354         IF l_debug_mode = 'Y' THEN
355 
356            pa_debug.g_err_stage:='p_project_role_id_tbl('||i||') is '||p_project_role_id_tbl(i);
357            print_msg(pa_debug.g_err_stage,l_module_name);
358            pa_debug.g_err_stage:='p_resource_list_member_id_tbl('||i||') is '||p_resource_list_member_id_tbl(i);
359            print_msg(pa_debug.g_err_stage,l_module_name);
360            pa_debug.g_err_stage:='p_planning_start_date_tbl('||i||') is '||p_planning_start_date_tbl(i);
361            print_msg(pa_debug.g_err_stage,l_module_name);
362            pa_debug.g_err_stage:='p_planning_end_date_tbl('||i||') is '||p_planning_end_date_tbl(i);
363            print_msg(pa_debug.g_err_stage,l_module_name);
364            pa_debug.g_err_stage:='p_spread_curve_id_tbl('||i||') is '||p_spread_curve_id_tbl(i);
365            print_msg(pa_debug.g_err_stage,l_module_name);
366            pa_debug.g_err_stage:='p_sp_fixed_date_tbl('||i||') is '||p_sp_fixed_date_tbl(i);
367            print_msg(pa_debug.g_err_stage,l_module_name);
368            pa_debug.g_err_stage:='p_mfc_cost_type_id_tbl('||i||') is '||p_mfc_cost_type_id_tbl(i);
369            print_msg(pa_debug.g_err_stage,l_module_name);
370 
371 
372         END IF;
373 
374         --IF NULLs are passed for all the resource attributes, based on which the re-spread/re-derivation of amts will happen, then
375         --NULLs can be passed for both OLD/NEW resource attr parameters of calculate API to indicate that none of the resource
376         --attrs have changed.
377         IF p_project_role_id_tbl(i)         IS NULL AND
378            p_resource_list_member_id_tbl(i) IS NULL AND
379            p_planning_start_date_tbl(i)     IS NULL AND
380            p_planning_end_date_tbl(i)       IS NULL AND
381            p_spread_curve_id_tbl(i)         IS NULL AND
382            p_sp_fixed_date_tbl(i)           IS NULL AND
383            p_mfc_cost_type_id_tbl(i)        IS NULL THEN
384 
385             IF l_debug_mode = 'Y' THEN
386                pa_debug.g_err_stage:='All the resource attrs passed are NULL and hence No change. Not firing the Select';
387                print_msg(pa_debug.g_err_stage,l_module_name);
388             END IF;
389 
390             x_mfc_cost_type_id_old_tbl(i)  := NULL;
391             x_mfc_cost_type_id_new_tbl(i)  := NULL;
392             x_spread_curve_id_old_tbl(i)   := NULL;
393             x_spread_curve_id_new_tbl(i)   := NULL;
394             x_sp_fixed_date_old_tbl(i)     := NULL;
395             x_sp_fixed_date_new_tbl(i)     := NULL;
396             x_plan_start_date_old_tbl(i)   := NULL;
397             x_plan_start_date_new_tbl(i)   := NULL;
398             x_plan_end_date_old_tbl(i)     := NULL;
399             x_plan_end_date_new_tbl(i)     := NULL;
400             x_rlm_id_change_flag_tbl(i)    := 'N';
401             --select the rbs_element_id and txn accum header id so as to pass them to update_planning_transactions API
402             SELECT rbs_element_id,
403                    txn_accum_header_id
404             INTO   x_rbs_element_id_tbl(i),
405                    x_txn_accum_header_id_tbl(i)
406             FROM   pa_resource_assignments
407             WHERE  resource_assignment_id = p_resource_assignment_id_tbl(i);
408 
409         --If Non Null values are passed then the existing values should be compared with the passed values to find out
410         --the changes. The Old Values should be passed in _old_.._tab parameters of calculate API and new values should
411         --be passed in _new_.._tabl parameters of calculate API.
412         ELSE
413 
414             SELECT
415                DECODE(DECODE(NVL(p_project_role_id_tbl(i),project_role_id),
416                               FND_API.G_MISS_NUM, decode(project_role_id,null,0,1),
417                              project_role_id,0,
418                              1)+
419                       DECODE(NVL(p_resource_list_member_id_tbl(i),resource_list_member_id),
420                               FND_API.G_MISS_NUM, decode(resource_list_member_id,null,0,1),
421                               resource_list_member_id, 0,
422                               1),
423                       0, 'N',
424                       'Y'),--Indicates whether the rbs mapping api should be called or not
425                mfc_cost_type_id,
426                NVL(p_mfc_cost_type_id_tbl(i),mfc_cost_type_id),
427                spread_curve_id,
428                NVL(p_spread_curve_id_tbl(i),spread_curve_id),
429                sp_fixed_date,
430                DECODE(nvl(p_spread_curve_id_tbl(i),spread_curve_id),
431                       p_fixed_date_sp_id,DECODE(DECODE(p_sp_fixed_date_tbl(i),
432                                                        FND_API.G_MISS_DATE,to_date(null),
433                                                        nvl(p_sp_fixed_date_tbl(i),sp_fixed_date))
434                                                ,to_date(null),DECODE (p_planning_start_date_tbl(i),
435                                                                       FND_API.G_MISS_DATE,to_date(null),
436                                                                       nvl(p_planning_start_date_tbl(i),planning_start_date))
437                                                ,nvl(p_sp_fixed_date_tbl(i),sp_fixed_date))
438                       ,to_date(null)),
439                planning_start_date,
440                NVL(p_planning_start_date_tbl(i),planning_start_date),
441                planning_end_date,
442                NVL(p_planning_end_date_tbl(i),planning_end_date),
443                DECODE (p_txn_currency_code_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_txn_currency_code_tbl(i),pbl.txn_currency_code)),
444                DECODE (p_inventory_item_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_inventory_item_id_tbl(i),inventory_item_id)) ,
445                DECODE (p_expenditure_type_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_expenditure_type_tbl(i),expenditure_type)),
446                DECODE (p_person_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_person_id_tbl(i),person_id)) ,
447                DECODE (p_job_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_job_id_tbl(i),job_id)) ,
448                DECODE (p_organization_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_organization_id_tbl(i),organization_id)) ,
449                DECODE (p_event_type_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_event_type_tbl(i),event_type)) ,
450                DECODE (p_expenditure_category_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_expenditure_category_tbl(i),expenditure_category)) ,
451                DECODE (p_revenue_category_code_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_revenue_category_code_tbl(i),revenue_category_code)) ,
452                DECODE (p_item_category_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_item_category_id_tbl(i),item_category_id)) ,
453                DECODE (p_bom_resource_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_bom_resource_id_tbl(i),bom_resource_id)) ,
454                DECODE (p_project_role_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_project_role_id_tbl(i),project_role_id)) ,
455                DECODE (p_person_type_code_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_person_type_code_tbl(i),person_type_code)) ,
456                DECODE (p_supplier_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_supplier_id_tbl(i),supplier_id)),
457                DECODE (p_named_role_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_named_role_tbl(i),named_role )),
458                resource_class_code,
459                rate_based_flag,
460                rbs_element_id,
461                non_labor_resource,
462                txn_accum_header_id,
463                task_id
464             INTO
465                x_rlm_id_change_flag_tbl(i),
466                x_mfc_cost_type_id_old_tbl(i),
467                x_mfc_cost_type_id_new_tbl(i),
468                x_spread_curve_id_old_tbl(i),
469                x_spread_curve_id_new_tbl(i),
470                x_sp_fixed_date_old_tbl(i),
471                x_sp_fixed_date_new_tbl(i),
472                x_plan_start_date_old_tbl(i),
473                x_plan_start_date_new_tbl(i),
474                x_plan_end_date_old_tbl(i),
475                x_plan_end_date_new_tbl(i),
476                l_txn_currency_code_tbl(i),
477                l_inventory_item_id_tbl(i),
478                l_expenditure_type_tbl(i),
479                l_person_id_tbl(i),
480                l_job_id_tbl(i),
481                l_organization_id_tbl(i),
482                l_event_type_tbl(i),
483                l_expenditure_category_tbl(i),
484                l_revenue_category_code_tbl(i),
485                l_item_category_id_tbl(i),
486                l_bom_resource_id_tbl(i),
487                l_project_role_id_tbl(i),
488                l_person_type_code_tbl(i),
489                l_supplier_id_tbl(i),
490                l_named_role_tbl(i),
491                l_resource_class_code_tbl(i),
492                l_rate_based_flag_tbl(i),
493                x_rbs_element_id_tbl(i),
494                l_non_labor_resource_tbl(i),
495                x_txn_accum_header_id_tbl(i),
496                l_task_id_tbl(i)
497             FROM  pa_resource_assignments pra,
498                (SELECT pra.resource_assignment_id
499                       ,pbl.txn_currency_code
500                 FROM   pa_budget_lines pbl,
501                        pa_resource_assignments pra
502                 WHERE  pbl.resource_assignment_id(+)=pra.resource_assignment_id
503                 AND    pra.resource_assignment_id=p_resource_assignment_id_tbl(i)
504                 AND    ROWNUM=1) pbl
505             WHERE pra.resource_assignment_id=p_resource_assignment_id_tbl(i);
506 
507             IF l_debug_mode = 'Y' THEN
508 
509                pa_debug.g_err_stage:='x_rlm_id_change_flag_tbl('||i||') is '||x_rlm_id_change_flag_tbl(i);
510                print_msg(pa_debug.g_err_stage,l_module_name);
511                pa_debug.g_err_stage:='x_mfc_cost_type_id_old_tbl('||i||') is '||x_mfc_cost_type_id_old_tbl(i);
512                print_msg(pa_debug.g_err_stage,l_module_name);
513                pa_debug.g_err_stage:='x_mfc_cost_type_id_new_tbl('||i||') is '||x_mfc_cost_type_id_new_tbl(i);
514                print_msg(pa_debug.g_err_stage,l_module_name);
515                pa_debug.g_err_stage:='x_spread_curve_id_old_tbl('||i||') is '||x_spread_curve_id_old_tbl(i);
516                print_msg(pa_debug.g_err_stage,l_module_name);
517                pa_debug.g_err_stage:='x_spread_curve_id_new_tbl('||i||') is '||x_spread_curve_id_new_tbl(i);
518                print_msg(pa_debug.g_err_stage,l_module_name);
519                pa_debug.g_err_stage:='x_sp_fixed_date_old_tbl('||i||') is '||x_sp_fixed_date_old_tbl(i);
520                print_msg(pa_debug.g_err_stage,l_module_name);
521                pa_debug.g_err_stage:='x_sp_fixed_date_new_tbl('||i||') is '||x_sp_fixed_date_new_tbl(i);
522                print_msg(pa_debug.g_err_stage,l_module_name);
523                pa_debug.g_err_stage:='x_plan_start_date_old_tbl('||i||') is '||x_plan_start_date_old_tbl(i);
524                print_msg(pa_debug.g_err_stage,l_module_name);
525                pa_debug.g_err_stage:='x_plan_start_date_new_tbl('||i||') is '||x_plan_start_date_new_tbl(i);
526                print_msg(pa_debug.g_err_stage,l_module_name);
527                pa_debug.g_err_stage:='x_plan_end_date_old_tbl('||i||') is '||x_plan_end_date_old_tbl(i);
528                print_msg(pa_debug.g_err_stage,l_module_name);
529                pa_debug.g_err_stage:='x_plan_end_date_new_tbl('||i||') is '||x_plan_end_date_new_tbl(i);
530                print_msg(pa_debug.g_err_stage,l_module_name);
531 
532 
533             END IF;--IF l_debug_mode = 'Y' THEN
534 
535             --Added Validation for planning_start_date and planning end date
536             IF ((x_plan_start_date_new_tbl(i)=FND_API.G_MISS_DATE) OR
537                 (x_plan_end_date_new_tbl(i) =FND_API.G_MISS_DATE)  OR
538                 (NVL(x_plan_start_date_new_tbl(i),trunc(sysdate))>NVL(x_plan_end_date_new_tbl(i),trunc(sysdate)))) THEN
539 
540                 IF l_debug_mode = 'Y' THEN
541 
542                    pa_debug.g_err_stage:='Invalid Planning Start/End Dates';
543                    pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
544 
545                    pa_debug.g_err_stage:='x_plan_start_date_new_tbl('||i||') is '|| x_plan_start_date_new_tbl(i);
546                    pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
547 
548                    pa_debug.g_err_stage:='x_plan_end_date_new_tbl('||i||') is '|| x_plan_end_date_new_tbl(i);
549                    pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
550 
551                 END IF;
552 		/*Bug Fix:5752337: The meaningful message should be shown when dates are not entered properly
553 		* made use of exisisting message PA_FP_PLAN_START_END_DATE_ERR which is used in the spread api
554                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
555                                      p_msg_name       => 'PA_FP_INV_PARAM_PASSED');
556 		*/
557 		OPEN get_line_info(p_resource_assignment_id_tbl(i));
558                 FETCH get_line_info
559                 INTO l_project_name
560                      , l_task_name
561                      , l_resource_name;
562                 CLOSE get_line_info;
563 		PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
564                                 ,p_msg_name      => 'PA_FP_PLAN_START_END_DATE_ERR'
565                                 ,p_token1         => 'L_PROJECT_NAME'
566                                 ,p_value1         => l_project_name
567                                 ,p_token2         => 'L_TASK_NAME'
568                                 ,p_value2         => l_task_name
569                                 ,p_token3         => 'L_RESOURCE_NAME'
570                                 ,p_value3         => l_resource_name
571                                 ,p_token4         => 'L_LINE_START_DATE'
572                                 ,p_value4         => x_plan_start_date_new_tbl(i)
573                                 ,p_token5        => 'L_LINE_END_DATE'
574                                 ,p_value5        => x_plan_end_date_new_tbl(i)
575 				);
576 		/* end of bug fix: 5752337 */
577 
578 
579                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
580             END IF;--IF ((x_plan_start_date_new_tbl(i)=FND_API.G_MISS_DATE) OR
581 
582             --Bug 4083605. This block of code makes sure that the planning start date is not changed to a date
583             --which falls after the date where actuals exist. Similar validations are done for planning end date too
584 
585             --Bug 4448581
586             IF NVL(l_plan_ver_settings_rec.wp_version_flag,'N') <> 'Y' THEN
587 
588                 IF l_plan_ver_settings_rec.etc_start_date IS NOT NULL AND
589                    (x_plan_start_date_new_tbl(i) <> x_plan_start_date_old_tbl(i) OR
590                      x_plan_end_date_new_tbl(i) <> x_plan_end_date_old_tbl(i)) THEN
591 
592                     IF l_debug_mode = 'Y' THEN
593 
594                        pa_debug.g_err_stage:='Planning Start/End dates have changed. Validating with Etc Start date';
595                        pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
596 
597                     END IF;
598 
599                     SELECT min(start_date), max(end_date)
600                     INTO   l_actuals_start_date, l_actuals_end_date
601                     FROM   pa_budget_lines
602                     WHERE  budget_version_id = p_budget_version_id
603                     AND    resource_assignment_id = p_resource_assignment_id_tbl(i)
604                     AND    end_date < l_plan_ver_settings_rec.etc_start_date;
605 
606                     IF l_debug_mode = 'Y' THEN
607 
608                        pa_debug.g_err_stage:='x_plan_start_date_new_tbl('||i||') is '||x_plan_start_date_new_tbl(i);
609                        pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
610                        pa_debug.g_err_stage:='x_plan_start_date_old_tbl('||i||') is '||x_plan_start_date_old_tbl(i);
611                        pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
612                        pa_debug.g_err_stage:='l_actuals_start_date is '||l_actuals_start_date;
613                        pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
614                        pa_debug.g_err_stage:='x_plan_end_date_new_tbl('||i||') is '||x_plan_end_date_new_tbl(i);
615                        pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
616                        pa_debug.g_err_stage:='x_plan_end_date_old_tbl('||i||') is '||x_plan_end_date_old_tbl(i);
617                        pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
618                        pa_debug.g_err_stage:='l_actuals_end_date is '||l_actuals_end_date;
619                        pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
620 
621                     END IF;
622 
623                     --If either x_plan_start_date_new_tbl or x_plan_end_date_start_tbl is not null then all
624                     --x_plan_start.end_date_new/old_tbls will be not null
625                     IF ( x_plan_start_date_new_tbl(i) <> x_plan_start_date_old_tbl(i) AND
626                          x_plan_start_date_new_tbl(i) > LEAST(NVL(l_actuals_start_date,x_plan_start_date_new_tbl(i) + 1),l_plan_ver_settings_rec.etc_start_date) ) OR
627                        ( x_plan_end_date_new_tbl(i) <> x_plan_end_date_old_tbl(i) AND
628                          x_plan_end_date_new_tbl(i) < GREATEST(NVL(l_actuals_end_date,x_plan_end_date_new_tbl(i) - 1),l_plan_ver_settings_rec.etc_start_date) ) THEN
629 
630                         IF ( x_plan_start_date_new_tbl(i) <> x_plan_start_date_old_tbl(i) AND
631                              x_plan_start_date_new_tbl(i) > LEAST(NVL(l_actuals_start_date,x_plan_start_date_new_tbl(i) + 1),l_plan_ver_settings_rec.etc_start_date) ) THEN
632 
633                             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
634                                                  p_msg_name       => 'PA_FP_PLAN_ST_DT_CHG_ACTL_EXST');
635                         END IF;
636 
637                         IF ( x_plan_end_date_new_tbl(i) <> x_plan_end_date_old_tbl(i) AND
638                              x_plan_end_date_new_tbl(i) < GREATEST(NVL(l_actuals_end_date,x_plan_end_date_new_tbl(i) - 1),l_plan_ver_settings_rec.etc_start_date) ) THEN
639 
640                             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
641                                                  p_msg_name       => 'PA_FP_PLAN_DT_CHG_ACTL_EXST');
642                         END IF;
643 
644                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
645 
646                     END IF;
647 
648 
649                 END IF;--IF l_plan_ver_settings_rec.etc_start_date IS NOT NULL AND
650 
651             END IF;  -- If not a workplan version
652 
653             --Added Validation for sp_fixed_date cannot be null and to be between planning_start_date and
654             --planning end date for fixed date spread curve. -- Added for Bug 3607061
655             --Modified Logic below for Bug 3762278 -- l_spread_curve_id_tbl is the final value of
656             --spread curve id that will be existing in db
657             IF (x_spread_curve_id_new_tbl(i) = p_fixed_date_sp_id) THEN
658 
659                IF p_sp_fixed_date_tbl(i) = FND_API.G_MISS_DATE THEN
660 
661                   IF l_debug_mode = 'Y' THEN
662                      pa_debug.g_err_stage:='Error - cannot nullify sp_fixed_date for Fixed Date Spread curve';
663                      print_msg(pa_debug.g_err_stage,l_module_name);
664                   END IF;
665 
666                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
667                                        p_msg_name       => 'PA_FP_SP_FIXED_DATE_NULL');
668                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
669 
670                -- Added for bug 4247427. Fixed Date cannot be less than the etc_start_date
671                ELSIF (l_plan_ver_settings_rec.etc_start_date IS NOT NULL AND (x_sp_fixed_date_new_tbl(i) BETWEEN                                 x_plan_start_date_new_tbl(i) AND x_plan_end_date_new_tbl(i))) THEN
672                     IF (x_sp_fixed_date_new_tbl(i) < l_plan_ver_settings_rec.etc_start_date) THEN
673                       IF l_debug_mode = 'Y' THEN
674                          pa_debug.g_err_stage :='Sp Fixed Date less than ETC Start date';
675                          print_msg(pa_debug.g_err_stage,l_module_name);
676                       END IF;
677                       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
678                                        p_msg_name       => 'PA_FP_SP_FIXED_DATE_LESS');
679                       RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
680                     END IF;  -- x_sp_fixed_date_new_tbl(i) < l_plan_ver_settings_rec.etc_start_date
681 
682                ELSIF (x_sp_fixed_date_new_tbl(i) NOT BETWEEN x_plan_start_date_new_tbl(i) AND x_plan_end_date_new_tbl(i)) THEN
683 
684                   IF l_debug_mode = 'Y' THEN
685                      pa_debug.g_err_stage :='Sp Fixed Date not between planning start date and End Date';
686                      print_msg(pa_debug.g_err_stage,l_module_name);
687                   END IF;
688 
689                   -- Added for Bug 3762278
690                   -- fetching details for message tokens
691                   BEGIN
692                          SELECT ppa.name project_name
693                                ,pt.name task_name
694                                ,prl.alias resource_name
695                           INTO l_project_name
696                               ,l_task_name
697                               ,l_resource_name
698                           FROM pa_projects_all ppa
699                               ,pa_proj_elements pt
700                               ,pa_resource_list_members prl
701                               ,pa_resource_assignments pra
702                          WHERE pra.resource_assignment_id = p_resource_assignment_id_tbl(i)
703                            AND ppa.project_id = pra.project_id
704                            AND pt.proj_element_id(+) = pra.task_id
705                            /* Bug fix:4200168 AND prl.resource_list_member_id(+) = pra.resource_list_member_id;*/
706                            AND prl.resource_list_member_id = pra.resource_list_member_id;
707                   EXCEPTION
708                          WHEN NO_DATA_FOUND THEN
709                               IF l_debug_mode = 'Y' THEN
710                                  pa_debug.g_err_stage :='Invalid Data PA_FP_FIXED_DATE_NOT_MATCH will have no tokens';
711                                  print_msg(pa_debug.g_err_stage,l_module_name);
712                               END IF;
713                               NULL;
714                   END;
715 
716                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
717                                        p_msg_name       => 'PA_FP_FIXED_DATE_NOT_MATCH',
718                                        p_token1         => 'L_PROJECT_NAME' ,
719                                        p_value1         => l_project_name,
720                                        p_token2         => 'L_TASK_NAME',
721                                        p_value2         => l_task_name,
722                                        p_token3         => 'L_RESOURCE_NAME',
723                                        p_value3         => l_resource_name,
724                                        p_token4         => 'L_LINE_START_DATE',
725                                        p_value4         => x_plan_start_date_new_tbl(i),
726                                        p_token5         => 'L_LINE_END_DATE',
727                                        p_value5         => x_plan_start_date_old_tbl(i));
728                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
729 
730                END IF;--IF x_sp_fixed_date_new_tbl(i) = FND_API.G_MISS_DATE THEN
731 
732             ELSE
733                 -- if the Final Value of spread curve id is either null or not equal to fixed date
734                 -- spread curve then the sp fixed date should be nulled out if it is not already null.
735                 IF l_debug_mode = 'Y' THEN
736                     pa_debug.g_err_stage:='Spread curve id not chosen to be updated and value in db for..';
737                     print_msg(pa_debug.g_err_stage,l_module_name);
738                     pa_debug.g_err_stage:='..spread curve id is either null or <> to fixed date spread curve id';
739                     print_msg(pa_debug.g_err_stage,l_module_name);
740                 END IF;
741 
742                 IF x_sp_fixed_date_old_tbl(i) IS NOT NULL THEN
743 
744                    x_sp_fixed_date_new_tbl(i) := FND_API.G_MISS_DATE;
745 
746                 ELSE
747 
748                    x_sp_fixed_date_new_tbl(i) := NULL;
749 
750                 END IF;
751 
752             END IF;--IF (x_spread_curve_id_new_tbl(i) = p_fixed_date_sp_id) THEN
753 
754 
755             --RBS element Id should be re-derived if the rlm id/Project Role Id have changed.
756             --dbms_output.put_line('7');
757             IF l_debug_mode = 'Y' THEN
758                 pa_debug.g_err_stage:='Finding out whether the RBS re-derivation is required or NOT';
759                 print_msg(pa_debug.g_err_stage,l_module_name);
760             END IF;
761 
762             IF x_rlm_id_change_flag_tbl(i)='Y' THEN
763 
764                 -- An rbs element id can change for a planning transaction only in Task Assignments Flow.
765                 IF p_context <> PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
766 
767                    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
768                                         p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
769                                         p_token1         => 'PROCEDURENAME',
770                                         p_value1         => 'PROCESS_RES_CHG_DERV_CALC_PRMS',
771                                         p_token2         => 'STAGE',
772                                         p_value2         => 'RBS Elem Id change in NON TA context');
773                    RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
774 
775                 END IF;
776                 --dbms_output.put_line('7.1');
777 
778                 l_rbs_map_index:=l_rbs_map_index+1;
779 
780                 l_ra_id_rbs_prm_tbl.extend(1);
781                 l_person_id_rbs_prm_tbl.extend(1);
782                 l_job_id_rbs_prm_tbl.extend(1);
783                 l_organization_id_rbs_prm_tbl.extend(1);
784                 l_event_type_rbs_prm_tbl.extend(1);
785                 l_exp_category_rbs_prm_tbl.extend(1);
786                 l_rev_cat_code_rbs_prm_tbl.extend(1);
787                 l_inv_item_id_rbs_prm_tbl.extend(1);
788                 l_item_cat_id_rbs_prm_tbl.extend(1);
789                 l_bom_res_id_rbs_prm_tbl.extend(1);
790                 l_per_type_code_rbs_prm_tbl.extend(1);
791                 l_supplier_id_rbs_prm_tbl.extend(1);
792                 l_txn_src_typ_code_rbs_prm_tbl.extend(1);
793                 l_exp_type_rbs_prm_tbl.extend(1);
794                 l_project_role_id_rbs_prm_tbl.extend(1);
795                 l_named_role_rbs_prm_tbl.extend(1);
796                 l_non_labor_res_rbs_prm_tbl.extend(1);
797 
798                 --These pl/sql tbls are required as they have to be passed to the delete_planning_transactions API for
799                 --deleting the PJI data for the planning transactions for which the rbs element id has changed
800                 l_task_id_rbs_prm_tbl.extend(1);
801                 l_rbs_elem_id_rbs_prm_tbl.extend(1);
802                 l_rbf_rbs_prm_tbl.extend(1);
803                 l_res_class_code_rbs_prm_tbl.extend(1);
804                 --dbms_output.put_line('7.2');
805 
806                 l_ra_id_rbs_prm_tbl(l_rbs_map_index)            :=  p_resource_assignment_id_tbl(i);
807                 l_person_id_rbs_prm_tbl(l_rbs_map_index)        :=  l_person_id_tbl(i);
808                 l_job_id_rbs_prm_tbl(l_rbs_map_index)           :=  l_job_id_tbl(i);
809                 l_organization_id_rbs_prm_tbl(l_rbs_map_index)  :=  l_organization_id_tbl(i);
810                 l_event_type_rbs_prm_tbl(l_rbs_map_index)       :=  l_event_type_tbl(i);
811                 l_exp_category_rbs_prm_tbl(l_rbs_map_index)     :=  l_expenditure_category_tbl(i);
812                 l_rev_cat_code_rbs_prm_tbl(l_rbs_map_index)     :=  l_revenue_category_code_tbl(i);
813                 l_inv_item_id_rbs_prm_tbl(l_rbs_map_index)      :=  l_inventory_item_id_tbl(i);
814                 l_item_cat_id_rbs_prm_tbl(l_rbs_map_index)      :=  l_item_category_id_tbl(i);
815                 l_bom_res_id_rbs_prm_tbl(l_rbs_map_index)       :=  l_bom_resource_id_tbl(i);
816                 l_per_type_code_rbs_prm_tbl(l_rbs_map_index)    :=  l_person_type_code_tbl(i);
817                 l_supplier_id_rbs_prm_tbl(l_rbs_map_index)      :=  l_supplier_id_tbl(i);
818                 l_txn_src_typ_code_rbs_prm_tbl(l_rbs_map_index) :=  'RES_ASSIGNMENT';
819                 l_exp_type_rbs_prm_tbl(l_rbs_map_index)         :=  l_expenditure_type_tbl(i);
820                 l_project_role_id_rbs_prm_tbl(l_rbs_map_index)  :=  l_project_role_id_tbl(i);
821                 l_named_role_rbs_prm_tbl(l_rbs_map_index)       :=  l_named_role_tbl(i);
822                 l_non_labor_res_rbs_prm_tbl(l_rbs_map_index)    :=  l_non_labor_resource_tbl(i);
823 
824                 l_task_id_rbs_prm_tbl(l_rbs_map_index)          :=  l_task_id_tbl(i);
825                 l_res_class_code_rbs_prm_tbl(l_rbs_map_index)   :=  l_resource_class_code_tbl(i);
826                 --Please note that here rbs element id for which the pji data has to deleted should be passed.
827                 --x_rbs_element_id_tbl contains the old rbs element id and the new rbs element id will be derived only in the
828                 --later part of the code
829                 l_rbs_elem_id_rbs_prm_tbl(l_rbs_map_index)      :=  x_rbs_element_id_tbl(i);
830                 l_rbf_rbs_prm_tbl(l_rbs_map_index)              :=  l_rate_based_flag_tbl(i);
831                 --dbms_output.put_line('7.3');
832 
833 		/* Bug fix: 5759413 */
834 		IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
835 			l_rtx_rateOvrds_rec := NULL;
836 		 	OPEN get_rateOvrds (p_resource_assignment_id_tbl(i));
837 			FETCH get_rateOvrds INTO l_rtx_rateOvrds_rec;
838 			CLOSE get_rateOvrds;
839 		END IF;
840 
841                 -- An rbs element id can change for a planning transaction only in Task Assignments Flow.
842                 -- Resource list member id and project role id are the only two attributes of a planning
843                 -- transaction, which on undergoing a change from the UI, can change the rbs element id
844                 -- of the planning transaction. Quantities and amounts to be passed to calculate api
845                 -- is derved as per the logic below
846                 -- Details - /padev/pa/11.5/docs/CalcAPI_Behavior_Document2.doc
847                 IF l_debug_mode = 'Y' THEN
848                    pa_debug.g_err_stage:='Deriving Amts/Qty for rbs element id change';
849                    print_msg(pa_debug.g_err_stage,l_module_name);
850                 END IF;
851 
852                 IF px_total_qty_tbl(i) IS NOT NULL AND px_total_qty_tbl(i) <> FND_API.G_MISS_NUM THEN
853 
854                     IF l_debug_mode = 'Y' THEN
855                         pa_debug.g_err_stage:='RBS Input Quantity Exists Set Amts to NULL';
856                         print_msg(pa_debug.g_err_stage,l_module_name);
857                     END IF;
858 
859                     px_total_raw_cost_tbl(i)         := NULL;
860                     px_total_burdened_cost_tbl(i)    := NULL;
861                     px_total_revenue_tbl(i)          := NULL;
862                     px_raw_cost_rate_tbl(i)          := NULL;
863                     px_b_cost_rate_tbl(i)            := NULL;
864                     px_bill_rate_tbl(i)              := NULL;
865 
866 		    /* Bug fix: 5759413: Check if the rate override is changed or not: if changed retain
867 		     * the new rate overrides entered by user, if not changed then set it to null
868 		     * so that, rate api derives the new rates for new planning resource
869 		     */
870 		    IF px_raw_cost_override_rate_tbl(i) is NOT NULL AND
871 			px_raw_cost_override_rate_tbl(i) <> FND_API.G_MISS_NUM  Then
872 			IF px_raw_cost_override_rate_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_raw_cost_rate_override,0) Then
873 		    		px_raw_cost_override_rate_tbl(i) := NULL;
874 			END IF;
875 		    End IF;
876 
877 		    IF px_b_cost_rate_override_tbl(i) is NOT NULL AND
878 			px_b_cost_rate_override_tbl(i) <> FND_API.G_MISS_NUM  Then
879 			IF px_b_cost_rate_override_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_burden_cost_rate_override,0) Then
880     		    		px_b_cost_rate_override_tbl(i) := NULL;
881 			END IF;
882 		    END IF;
883 
884                 ELSIF px_total_qty_tbl(i) = FND_API.G_MISS_NUM THEN
885 
886                     IF l_debug_mode = 'Y' THEN
887                         pa_debug.g_err_stage:='RBS Input Quantity IS G_MISS_NUM Set Amts to G_MISS_NUM';
888                         print_msg(pa_debug.g_err_stage,l_module_name);
889                     END IF;
890 
891                     px_total_raw_cost_tbl(i)         := FND_API.G_MISS_NUM;
892                     px_total_burdened_cost_tbl(i)    := FND_API.G_MISS_NUM;
893                     px_total_revenue_tbl(i)          := FND_API.G_MISS_NUM;
894                     px_raw_cost_rate_tbl(i)          := FND_API.G_MISS_NUM;
895                     px_b_cost_rate_tbl(i)            := FND_API.G_MISS_NUM;
896                     px_bill_rate_tbl(i)              := FND_API.G_MISS_NUM;
897 
898 		    /* Bug fix: 5759413 */
899                     IF px_raw_cost_override_rate_tbl(i) is NOT NULL AND
900                         px_raw_cost_override_rate_tbl(i) <> FND_API.G_MISS_NUM  Then
901                         IF px_raw_cost_override_rate_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_raw_cost_rate_override,0) Then
902                                 px_raw_cost_override_rate_tbl(i) := NULL;
903                         END IF;
904                     End IF;
905 
906                     IF px_b_cost_rate_override_tbl(i) is NOT NULL AND
907                         px_b_cost_rate_override_tbl(i) <> FND_API.G_MISS_NUM  Then
908                         IF px_b_cost_rate_override_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_burden_cost_rate_override,0) Then                                    px_b_cost_rate_override_tbl(i) := NULL;
909                         END IF;
910                     END IF;
911 
912 
913                 ELSE -- px_total_qty_tbl IS NULL
914 
915                     IF l_debug_mode = 'Y' THEN
916                         pa_debug.g_err_stage:='RBS Input Quantity IS NULL See in DB';
917                         print_msg(pa_debug.g_err_stage,l_module_name);
918                     END IF;
919                     --dbms_output.put_line('7.3.1');
920 
921                     OPEN c_data_in_db_csr(p_resource_assignment_id_tbl(i));
922 
923                     FETCH c_data_in_db_csr INTO l_data_in_db_rec;
924 
925                     IF c_data_in_db_csr%FOUND THEN
926 
927                         IF l_debug_mode = 'Y' THEN
928                             pa_debug.g_err_stage:='RBS Quantity found in DB, Set Amounts to NULL';
929                             print_msg(pa_debug.g_err_stage,l_module_name);
930                         END IF;
931                         px_total_qty_tbl(i)              := l_data_in_db_rec.quantity;
932                         px_total_raw_cost_tbl(i)         := NULL;
933                         px_total_burdened_cost_tbl(i)    := NULL;
934                         px_total_revenue_tbl(i)          := NULL;
935                         px_raw_cost_rate_tbl(i)          := NULL;
936                         px_b_cost_rate_tbl(i)            := NULL;
937                         px_bill_rate_tbl(i)              := NULL;
938 			/* Bug fix: 5759413 */
939                         IF px_raw_cost_override_rate_tbl(i) is NOT NULL AND
940                           px_raw_cost_override_rate_tbl(i) <> FND_API.G_MISS_NUM  Then
941                           IF px_raw_cost_override_rate_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_raw_cost_rate_override,0) Then
942                                 px_raw_cost_override_rate_tbl(i) := NULL;
943                           END IF;
944                         End IF;
945 
946                         IF px_b_cost_rate_override_tbl(i) is NOT NULL AND
947                           px_b_cost_rate_override_tbl(i) <> FND_API.G_MISS_NUM  Then
948                           IF px_b_cost_rate_override_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_burden_cost_rate_override,0) Then                                    px_b_cost_rate_override_tbl(i) := NULL;
949                           END IF;
950                         END IF;
951 
952                     ELSE -- If c_data_in_db_csr is not FOUND
953 
954                         IF l_debug_mode = 'Y' THEN
955                             pa_debug.g_err_stage:='RBS NO Record in DB';
956                             print_msg(pa_debug.g_err_stage,l_module_name);
957                         END IF;
958 
959                         px_total_qty_tbl(i)              := NULL;
960                         px_total_raw_cost_tbl(i)         := NULL;
961                         px_total_burdened_cost_tbl(i)    := NULL;
962                         px_total_revenue_tbl(i)          := NULL;
963                         px_raw_cost_rate_tbl(i)          := NULL;
964                         px_b_cost_rate_tbl(i)            := NULL;
965                         px_bill_rate_tbl(i)              := NULL;
966 
967 			/* Bug fix: 5759413 */
968                         IF px_raw_cost_override_rate_tbl(i) is NOT NULL AND
969                           px_raw_cost_override_rate_tbl(i) <> FND_API.G_MISS_NUM  Then
970                           IF px_raw_cost_override_rate_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_raw_cost_rate_override,0) Then
971                                 px_raw_cost_override_rate_tbl(i) := NULL;
972                           END IF;
973                         End IF;
974 
975                         IF px_b_cost_rate_override_tbl(i) is NOT NULL AND
976                           px_b_cost_rate_override_tbl(i) <> FND_API.G_MISS_NUM  Then
977                           IF px_b_cost_rate_override_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_burden_cost_rate_override,0) Then                                    px_b_cost_rate_override_tbl(i) := NULL;
978                           END IF;
979                         END IF;
980 
981                     END IF;
982 
983                     CLOSE c_data_in_db_csr;
984                     --dbms_output.put_line('7.4');
985 
986                 END IF;--IF px_total_qty_tbl(i) IS NOT NULL AND px_total_qty_tbl(i) <> FND_API.G_MISS_NUM THEN
987 
988             END IF;--IF x_rlm_id_change_flag_tbl(i)='Y' THEN
989 
990         END IF;--IF p_project_role_id_tbl(i)         IS NULL AND
991 
992     END LOOP;--FOR i IN p_resource_assignment_id_tbl.FIRST
993 
994     IF l_ra_id_rbs_prm_tbl.count > 0 THEN
995 
996         /* Bug 3767322 - If resource list member changes, handling calculate
997          * api call as per Sanjay:
998            If planning resource is changed (resource_list_member_id is changed) then
999            calculate API assumes that the calling API has cleaned up the data by deleting
1000            the entries in reporting data and then also deleted all the budget lines. This
1001            is important as this is one reason of data corruption happening in the reporting
1002            integration. Calculate cannot handle this case as the data seen by calculate is
1003            the changed data and not the old one.
1004                 Pass the following to calculate API: Total QTY, ETC AMT (Plan-Actual)/ ETC
1005            QTY (Plan-actual) as ETC Rate (if qty and amounts are both present), Total
1006            Amount (Raw Cost, Burdened Cost and or Revenue) (These may ( if qty is null) or
1007            may not be passed) . No delete flag is required as all the lines have already
1008            been removed. */
1009 
1010         IF l_debug_mode = 'Y' THEN
1011             pa_debug.g_err_stage:='Calling API delete_planning_transactions ';
1012             pa_debug.write(l_module_name,pa_debug.g_err_stage, 5);
1013         END IF;
1014         --dbms_output.put_line('7.5');
1015 
1016         pa_fp_planning_transaction_pub.delete_planning_transactions
1017         (
1018               p_context                   => p_context
1019              ,p_calling_context           => p_calling_context   -- Added for Bug 6856934
1020              ,p_task_or_res               => 'ASSIGNMENT'
1021              ,p_resource_assignment_tbl   => l_ra_id_rbs_prm_tbl
1022              ,p_validate_delete_flag      => 'N'
1023              ,p_calling_module            => 'PROCESS_RES_CHG_DERV_CALC_PRMS'
1024              ,p_task_id_tbl               => l_task_id_rbs_prm_tbl
1025              ,p_rbs_element_id_tbl        => l_rbs_elem_id_rbs_prm_tbl
1026              ,p_rate_based_flag_tbl       => l_rbf_rbs_prm_tbl
1027              ,p_resource_class_code_tbl   => l_res_class_code_rbs_prm_tbl
1028              ,x_return_status             => x_return_status
1029              ,x_msg_count                 => x_msg_count
1030              ,x_msg_data                  => x_msg_data
1031         );
1032 
1033         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1034 
1035            IF l_debug_mode = 'Y' THEN
1036                  pa_debug.g_err_stage:='Called API delete_planning_transactions returned error';
1037                  pa_debug.write(l_module_name,pa_debug.g_err_stage, 5);
1038            END IF;
1039            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1040 
1041         END IF;
1042         --dbms_output.put_line('7.6');
1043 
1044     END IF;
1045 
1046     --dbms_output.put_line('8');
1047     --Call the rbs mapping api only if there are some resource assignments for which the rbs_element_id can change
1048     IF l_rbs_map_index>0 THEN
1049 
1050         IF l_debug_mode = 'Y' THEN
1051             pa_debug.g_err_stage:='Calling PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs';
1052             print_msg(pa_debug.g_err_stage,l_module_name);
1053         END IF;
1054 
1055         --Extend the output pl/sql tbls l_rbs_element_id_tbl and l_txn_accum_header_id_tbl so that they contatin
1056         --the same no of records as l_eligible_rlm_ids_tbl
1057         l_rbs_element_id_prm_tbl.EXTEND(l_ra_id_rbs_prm_tbl.COUNT);
1058         l_txn_accum_header_id_prm_tbl.EXTEND(l_ra_id_rbs_prm_tbl.COUNT);
1059 
1060         --Call the RBS Mapping API only if the rbs version id is not null
1061         IF l_plan_ver_settings_rec.rbs_version_id IS NOT NULL THEN
1062 
1063             --dbms_output.put_line('7.7');
1064             PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs(
1065              p_budget_version_id           => p_budget_version_id
1066             ,p_resource_list_id            => l_plan_ver_settings_rec.resource_list_id
1067             ,p_rbs_version_id              => l_plan_ver_settings_rec.rbs_version_id
1068             ,p_calling_process             => 'RBS_REFRESH'
1069             ,p_calling_context             => 'PLSQL'
1070             ,p_process_code                => 'RBS_MAP'
1071             ,p_calling_mode                => 'PLSQL_TABLE'
1072             ,p_init_msg_list_flag          => 'N'
1073             ,p_commit_flag                 => 'N'
1074             ,p_TXN_SOURCE_ID_tab           => l_ra_id_rbs_prm_tbl
1075             ,p_TXN_SOURCE_TYPE_CODE_tab    => l_txn_src_typ_code_rbs_prm_tbl
1076             ,p_PERSON_ID_tab               => l_person_id_rbs_prm_tbl
1077             ,p_JOB_ID_tab                  => l_job_id_rbs_prm_tbl
1078             ,p_ORGANIZATION_ID_tab         => l_organization_id_rbs_prm_tbl
1079             ,p_VENDOR_ID_tab               => l_supplier_id_rbs_prm_tbl
1080             ,p_EXPENDITURE_TYPE_tab        => l_exp_type_rbs_prm_tbl
1081             ,p_EVENT_TYPE_tab              => l_event_type_rbs_prm_tbl
1082             ,p_NON_LABOR_RESOURCE_tab      => l_non_labor_res_rbs_prm_tbl
1083             ,p_EXPENDITURE_CATEGORY_tab    => l_exp_category_rbs_prm_tbl
1084             ,p_REVENUE_CATEGORY_CODE_tab   => l_rev_cat_code_rbs_prm_tbl
1085             ,p_PROJECT_ROLE_ID_tab         => l_project_role_id_rbs_prm_tbl
1086             ,p_RESOURCE_CLASS_CODE_tab     => l_res_class_code_rbs_prm_tbl
1087             ,p_ITEM_CATEGORY_ID_tab        => l_item_cat_id_rbs_prm_tbl
1088             ,p_PERSON_TYPE_CODE_tab        => l_per_type_code_rbs_prm_tbl
1089             ,p_BOM_RESOURCE_ID_tab         => l_bom_res_id_rbs_prm_tbl
1090             ,p_INVENTORY_ITEM_ID_tab       => l_inv_item_id_rbs_prm_tbl -- Bug 3698596
1091             ,x_txn_source_id_tab           => l_txn_source_id_tbl
1092             ,x_res_list_member_id_tab      => l_res_list_member_id_tbl
1093             ,x_rbs_element_id_tab          => l_rbs_element_id_prm_tbl
1094             ,x_txn_accum_header_id_tab     => l_txn_accum_header_id_prm_tbl
1095             ,x_return_status               => x_return_status
1096             ,x_msg_count                   => x_msg_count
1097             ,x_msg_data                    => x_msg_data);
1098 
1099             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1100 
1101                  IF l_debug_mode = 'Y' THEN
1102                        pa_debug.g_err_stage:='Called API PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs returned error';
1103                        pa_debug.write(l_module_name,pa_debug.g_err_stage, 5);
1104                  END IF;
1105                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1106 
1107             END IF;
1108             --dbms_output.put_line('7.8');
1109 
1110         END IF;--IF l_plan_ver_settings_rec.rbs_version_id IS NOT NULL THEN
1111 
1112 
1113     END IF;--IF l_rbs_map_index>0 THEN
1114 
1115     IF l_rbs_map_index>0 THEN
1116 
1117         --dbms_output.put_line('7.9');
1118         --Initialise the indexes so that they can be re-used in the loop below
1119         l_rbs_map_index:=1;
1120         IF l_debug_mode = 'Y' THEN
1121            pa_debug.g_err_stage:='About to loop thru to create the pl/sql tables for rbs element id ';
1122            print_msg(pa_debug.g_err_stage,l_module_name);
1123         END IF;
1124         -- Loop thru the input ra id tbl and change the value of rbs_element_id
1125         -- depending on the value returned by the above apis. Here it is assumed that the called APIs
1126         -- returns the output in the order in which the inputs are passed.
1127 
1128         --Null out quantity if the UOM or Rate Based Flag have changed.
1129         FOR i IN p_resource_assignment_id_tbl.FIRST .. p_resource_assignment_id_tbl.LAST LOOP
1130 
1131                 IF p_resource_assignment_id_tbl(i) = l_ra_id_rbs_prm_tbl(l_rbs_map_index) THEN
1132 
1133                     x_rbs_element_id_tbl(i):=l_rbs_element_id_prm_tbl(l_rbs_map_index);
1134                     x_txn_accum_header_id_tbl(i):=l_txn_accum_header_id_prm_tbl(l_rbs_map_index);
1135 
1136                     IF l_ra_id_rbs_prm_tbl.EXISTS(l_rbs_map_index+1) THEN
1137                         l_rbs_map_index:=l_rbs_map_index+1;
1138                     END IF;
1139 
1140                 END IF;
1141 
1142         END LOOP;
1143         --dbms_output.put_line('8.0');
1144     END IF;--IF l_rbs_map_index>0 OR
1145            --dbms_output.put_line('10');
1146 
1147     IF l_debug_mode = 'Y' THEN
1148         pa_debug.g_err_stage:='Leaving Process_res_chg_Derv_calc_prms API';
1149         print_msg(pa_debug.g_err_stage,l_module_name);
1150     pa_debug.reset_curr_function;
1151 	END IF;
1152   EXCEPTION
1153       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1154            l_msg_count := FND_MSG_PUB.count_msg;
1155              IF l_msg_count = 1 THEN
1156                 PA_INTERFACE_UTILS_PUB.get_messages
1157                      (p_encoded        => FND_API.G_TRUE
1158                       ,p_msg_index      => 1
1159                       ,p_msg_count      => l_msg_count
1160                       ,p_msg_data       => l_msg_data
1161                       ,p_data           => l_data
1162                       ,p_msg_index_out  => l_msg_index_out);
1163                 x_msg_data := l_data;
1164                 x_msg_count := l_msg_count;
1165              ELSE
1166                 x_msg_count := l_msg_count;
1167              END IF;
1168            x_return_status := FND_API.G_RET_STS_ERROR;
1169 	IF l_debug_mode = 'Y' THEN
1170            pa_debug.reset_curr_function;
1171 	END IF;
1172      WHEN OTHERS THEN
1173           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1174           x_msg_count     := 1;
1175           x_msg_data      := SQLERRM;
1176           FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'PA_FP_PLANNING_TRANSACTION_PUB'
1177                                   ,p_procedure_name  => 'Process_res_chg_Derv_calc_prms');
1178 
1179            IF l_debug_mode = 'Y' THEN
1180              pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
1181              pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
1182              pa_debug.reset_curr_function;
1183 	END IF;
1184           RAISE;
1185 
1186   END Process_res_chg_Derv_calc_prms;
1187 
1188 
1189 /*=====================================================================
1190 Procedure Name:      add_planning_transactions
1191 Purpose:             This procedure should be called to create planning
1192                      transactions valid values for p_context are 'BUDGET'
1193                      ,'FORECAST', 'WORKPLAN' and 'TASK_ASSIGNMENT'.The
1194                      api will honor only resource list member
1195                      id, resource name and resource class flag in the
1196                      resource rec type and default all the other values
1197                      by calling the get resurce defaults api of resource
1198                      foundation.
1199 
1200                      Creates resource assignments and budget lines for
1201                      workplan/budget/forecast. It is assumed that the
1202                      duplicate rlm ids are not passed . If this API finds
1203                      that there is no corresponding budget version then
1204                      this API goes and creates a budget version for the
1205                      work plan version.
1206 =======================================================================*/
1207 /*******************************************************************************************************
1208 As part of Bug 3749516 All References to Equipment Effort or Equip Resource Class has been removed in
1209 PROCEDURE add_planning_transactions.
1210 p_planned_equip_effort_tbl IN parameter has also been removed as they were not being  used/referred.
1211 ********************************************************************************************************/
1212 
1213 PROCEDURE add_planning_transactions
1214 (
1215        p_context                     IN       VARCHAR2
1216       ,p_calling_context             IN       VARCHAR2 DEFAULT NULL   -- Added for Bug 6856934
1217       ,p_one_to_one_mapping_flag     IN       VARCHAR2 DEFAULT 'N'
1218       ,p_calling_module              IN       VARCHAR2 DEFAULT NULL
1219       ,p_project_id                  IN       Pa_projects_all.project_id%TYPE
1220       ,p_struct_elem_version_id      IN       Pa_proj_element_versions.element_version_id%TYPE   DEFAULT NULL
1221       ,p_budget_version_id           IN       Pa_budget_versions.budget_version_id%TYPE          DEFAULT NULL
1222       ,p_task_elem_version_id_tbl    IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1223       ,p_task_name_tbl               IN       SYSTEM.PA_VARCHAR2_240_TBL_TYPE                    DEFAULT SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
1224       ,p_task_number_tbl             IN       SYSTEM.PA_VARCHAR2_100_TBL_TYPE                    DEFAULT SYSTEM.PA_VARCHAR2_100_TBL_TYPE()
1225       ,p_start_date_tbl              IN       SYSTEM.pa_date_tbl_type                            DEFAULT SYSTEM.PA_DATE_TBL_TYPE()
1226       ,p_end_date_tbl                IN       SYSTEM.pa_date_tbl_type                            DEFAULT SYSTEM.PA_DATE_TBL_TYPE()
1227        -- Bug 3793623 New params p_planning_start_date_tbl and p_planning_end_date_tbl added
1228       ,p_planning_start_date_tbl     IN       SYSTEM.pa_date_tbl_type                            DEFAULT SYSTEM.PA_DATE_TBL_TYPE()
1229       ,p_planning_end_date_tbl       IN       SYSTEM.pa_date_tbl_type                            DEFAULT SYSTEM.PA_DATE_TBL_TYPE()
1230       ,p_planned_people_effort_tbl   IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1231       ,p_latest_eff_pub_flag_tbl     IN       SYSTEM.PA_VARCHAR2_1_TBL_TYPE                      DEFAULT SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
1232       --One record in the above pl/sql tables correspond to all the records in the below pl/sql tables
1233       ,p_resource_list_member_id_tbl IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1234       ,p_project_assignment_id_tbl   IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1235       /* The following columns are not (to be) passed by TA/WP. They are based by Edit Plan page BF case */
1236       ,p_quantity_tbl                IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1237       ,p_currency_code_tbl           IN       SYSTEM.PA_VARCHAR2_15_TBL_TYPE                     DEFAULT SYSTEM.PA_VARCHAR2_15_TBL_TYPE()
1238       ,p_raw_cost_tbl                IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1239       ,p_burdened_cost_tbl           IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1240       ,p_revenue_tbl                 IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1241       ,p_cost_rate_tbl               IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1242       ,p_bill_rate_tbl               IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1243       ,p_burdened_rate_tbl           IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1244       ,p_skip_duplicates_flag        IN       VARCHAR2                                           DEFAULT 'N'
1245       ,p_unplanned_flag_tbl          IN       SYSTEM.PA_VARCHAR2_1_TBL_TYPE                      DEFAULT SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
1246       ,p_pm_product_code             IN       SYSTEM.PA_VARCHAR2_30_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
1247       ,p_pm_res_asgmt_ref            IN       SYSTEM.PA_VARCHAR2_30_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
1248       ,p_attribute_category_tbl      IN       SYSTEM.PA_VARCHAR2_30_TBL_TYPE  DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
1249       ,p_attribute1                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1250       ,p_attribute2                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1251       ,p_attribute3                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1252       ,p_attribute4                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1253       ,p_attribute5                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1254       ,p_attribute6                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1255       ,p_attribute7                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1256       ,p_attribute8                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1257       ,p_attribute9                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1258       ,p_attribute10                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1259       ,p_attribute11                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1260       ,p_attribute12                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1261       ,p_attribute13                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1262       ,p_attribute14                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1263       ,p_attribute15                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1264       ,p_attribute16                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1265       ,p_attribute17                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1266       ,p_attribute18                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1267       ,p_attribute19                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1268       ,p_attribute20                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1269       ,p_attribute21                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1270       ,p_attribute22                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1271       ,p_attribute23                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1272       ,p_attribute24                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1273       ,p_attribute25                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1274       ,p_attribute26                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1275       ,p_attribute27                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1276       ,p_attribute28                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1277       ,p_attribute29                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1278       ,p_attribute30                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1279       ,p_apply_progress_flag         IN       VARCHAR2                        DEFAULT 'N' /* Bug# 3720357 */
1280       ,p_scheduled_delay             IN       SYSTEM.pa_num_tbl_type          DEFAULT SYSTEM.PA_NUM_TBL_TYPE() --For bug 3948128
1281       ,p_pji_rollup_required         IN       VARCHAR2                                           DEFAULT 'Y' /* Bug# 4200168 */
1282       ,x_return_status               OUT      NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1283       ,x_msg_count                   OUT      NOCOPY NUMBER --File.Sql.39 bug 4440895
1284       ,x_msg_data                    OUT      NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1285 ) IS
1286 
1287    l_trace_stage number;
1288 
1289   --Start of variables used for debugging
1290       l_msg_count          NUMBER :=0;
1291       l_data               VARCHAR2(2000);
1292       l_msg_data           VARCHAR2(2000);
1293       l_error_msg_code     VARCHAR2(30);
1294       l_msg_index_out      NUMBER;
1295       l_return_status      VARCHAR2(2000);
1296       l_debug_mode         VARCHAR2(30);
1297   --End of variables used for debugging
1298 
1299       l_budget_version_id               pa_budget_versions.budget_version_id%TYPE;
1300       l_proj_fp_options_id              pa_proj_fp_options.proj_fp_options_id%TYPE;
1301       l_fin_plan_type_id                pa_fin_plan_types_b.fin_plan_type_id%TYPE;
1302       l_rlm_id_tbl_count                NUMBER := 0;
1303       l_elem_version_id_count           NUMBER := 0;
1304       l_resource_list_id                pa_proj_fp_options.all_resource_list_id%TYPE;
1305       l_people_res_class_rlm_id         pa_resource_list_members.resource_list_member_id%TYPE;
1306       l_equip_res_class_rlm_id          pa_resource_list_members.resource_list_member_id%TYPE; -- Bug 3749516 dummy Variable
1307       l_fin_res_class_rlm_id            pa_resource_list_members.resource_list_member_id%TYPE;
1308       l_mat_res_class_rlm_id            pa_resource_list_members.resource_list_member_id%TYPE;
1309       l_eligible_rlm_ids_tbl            SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1310       l_proj_element_id_tbl             SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1311       l_proj_element_id                 pa_proj_element_versions.proj_element_id%TYPE;
1312       l_fixed_date_sp_id                pa_spread_curves_b.spread_curve_id%TYPE; -- bug 3607061
1313 
1314    -- Added for Bug 3719918 -- USED FOR INSERT WHEN p-one-t-one-mapping-flag is Y
1315       l_task_elem_rlm_tbl               SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1316       l_proj_elem_rlm_tbl               SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1317 
1318    -- Bug 3719918, these tables will only be used for insert in B/F context
1319       l_bf_start_date_tbl                 SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1320       l_bf_compl_date_tbl                 SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1321       l_bf_proj_elem_tbl                  SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1322       l_bf_quantity_tbl                   SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1323       l_bf_raw_cost_tbl                   SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1324       l_bf_burdened_cost_tbl              SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1325       l_bf_revenue_tbl                    SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1326       l_bf_currency_code_tbl              SYSTEM.PA_VARCHAR2_15_TBL_TYPE    := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1327       l_bf_cost_rate_tbl                  SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1328       l_bf_bill_rate_tbl                  SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1329       l_bf_burdened_rate_tbl              SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1330       l_dup_flag                          varchar2(1) :='N';
1331       --Bug 4207150. These pl/sql tbls will be used to store the task/rlms that are inserted in B/F Flow
1332       l_bf_ra_id_tbl                      SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1333       l_bf_task_id_tbl                    SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1334       l_bf_rlm_id_tbl                     SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1335       l_bf_ins_quantity_tbl               SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1336       l_bf_ins_raw_cost_tbl               SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1337       l_bf_ins_burdened_cost_tbl          SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1338       l_bf_ins_revenue_tbl                SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1339       l_bf_ins_currency_code_tbl          SYSTEM.PA_VARCHAR2_15_TBL_TYPE    := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1340       l_bf_ins_cost_rate_tbl              SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1341       l_bf_ins_bill_rate_tbl              SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1342       l_bf_ins_burdened_rate_tbl          SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1343       l_temp                              NUMBER;
1344       dml_errors                          EXCEPTION;
1345       PRAGMA exception_init(dml_errors, -24381);
1346 
1347   --Start of variables for Variable for Resource Attributes
1348       l_resource_class_flag_tbl         SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1349       l_resource_class_code_tbl         SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1350       l_resource_class_id_tbl           SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1351       l_res_type_code_tbl               SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1352       l_person_id_tbl                   SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1353       l_job_id_tbl                      SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1354       l_person_type_code_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1355       l_named_role_tbl                  SYSTEM.PA_VARCHAR2_80_TBL_TYPE    := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
1356       l_bom_resource_id_tbl             SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1357       l_non_labor_resource_tbl          SYSTEM.PA_VARCHAR2_20_TBL_TYPE    := SYSTEM.PA_VARCHAR2_20_TBL_TYPE();
1358       l_inventory_item_id_tbl           SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1359       l_item_category_id_tbl            SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1360       l_project_role_id_tbl             SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1361       l_organization_id_tbl             SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1362       l_fc_res_type_code_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1363       l_expenditure_type_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1364       l_expenditure_category_tbl        SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1365       l_event_type_tbl                  SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1366       l_revenue_category_code_tbl       SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1367       l_supplier_id_tbl                 SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1368       l_unit_of_measure_tbl             SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1369       l_spread_curve_id_tbl             SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1370       l_etc_method_code_tbl             SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1371       l_mfc_cost_type_id_tbl            SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1372       l_procure_resource_flag_tbl       SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1373       l_incurred_by_res_flag_tbl        SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1374       l_Incur_by_res_class_code_tbl     SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1375       l_Incur_by_role_id_tbl            SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1376       l_org_id_tbl                      SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1377       l_rate_based_flag_tbl             SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1378       l_rate_expenditure_type_tbl       SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1379       l_rate_func_curr_code_tbl         SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1380       l_incur_by_res_type               SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1381       l_resource_assignment_id_tbl      SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1382       l_assignment_description_tbl      SYSTEM.PA_VARCHAR2_240_TBL_TYPE   := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
1383       l_planning_resource_alias_tbl     SYSTEM.PA_VARCHAR2_80_TBL_TYPE    := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
1384       l_resource_name_tbl               SYSTEM.PA_VARCHAR2_240_TBL_TYPE    := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
1385       l_project_role_name_tbl           SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1386       l_organization_name_tbl           SYSTEM.PA_VARCHAR2_240_TBL_TYPE   := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
1387       l_financial_category_code_tbl     SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1388       l_project_assignment_id_tbl       SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1389       l_use_task_schedule_flag_tbl      SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1390       l_planning_start_date_tbl         SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1391       l_planning_end_date_tbl           SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1392       l_schedule_start_date_tbl         SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1393       l_schedule_end_date_tbl           SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1394       l_total_quantity_tbl              SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1395       l_override_currency_code_tbl      SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1396       l_billable_percent_tbl            SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1397       l_cost_rate_override_tbl          SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1398       l_burdened_rate_override_tbl      SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1399       l_unplanned_flag_tbl              SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1400       l_sp_fixed_date_tbl               SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1401       l_financial_category_name_tbl     SYSTEM.PA_VARCHAR2_80_TBL_TYPE    := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
1402       l_supplier_name_tbl               SYSTEM.PA_VARCHAR2_240_TBL_TYPE   := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
1403       l_pm_product_code_tbl             SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1404       l_pm_res_asgmt_ref_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1405       l_ATTRIBUTE_CATEGORY_tbl          SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1406       l_ATTRIBUTE1_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1407       l_ATTRIBUTE2_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1408       l_ATTRIBUTE3_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1409       l_ATTRIBUTE4_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1410       l_ATTRIBUTE5_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1411       l_ATTRIBUTE6_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1412       l_ATTRIBUTE7_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1413       l_ATTRIBUTE8_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1414       l_ATTRIBUTE9_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1415       l_ATTRIBUTE10_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1416       l_ATTRIBUTE11_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1417       l_ATTRIBUTE12_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1418       l_ATTRIBUTE13_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1419       l_ATTRIBUTE14_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1420       l_ATTRIBUTE15_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1421       l_ATTRIBUTE16_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1422       l_ATTRIBUTE17_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1423       l_ATTRIBUTE18_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1424       l_ATTRIBUTE19_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1425       l_ATTRIBUTE20_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1426       l_ATTRIBUTE21_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1427       l_ATTRIBUTE22_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1428       l_ATTRIBUTE23_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1429       l_ATTRIBUTE24_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1430       l_ATTRIBUTE25_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1431       l_ATTRIBUTE26_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1432       l_ATTRIBUTE27_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1433       l_ATTRIBUTE28_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1434       l_ATTRIBUTE29_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1435       l_ATTRIBUTE30_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1436       --For bug 3948128
1437       l_scheduled_delay                 SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1438   --End of variables for Variable for Resource Attributes
1439 
1440   --Start of variables for Variable for TA Validations for p_context = TASK_ASSIGNMENTS
1441      l_task_rec_tbl                    pa_task_assignment_utils.l_task_rec_tbl_type;
1442      l_resource_rec_tbl                pa_task_assignment_utils.l_resource_rec_tbl_type;
1443      l_del_task_level_rec_code_tbl     SYSTEM.PA_VARCHAR2_30_TBL_TYPE     := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1444      l_ra_id_del_tbl                   SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
1445      l_ra_id_del_count                 NUMBER;
1446   --End of variables for Variable for TA Validations for p_context = TASK_ASSIGNMENTS
1447 
1448      l_time_phased_code                pa_proj_fp_options.all_time_phased_code%TYPE;
1449      l_spread_amounts_for_ver          VARCHAR2(1);
1450      l_index                           NUMBER := 1;
1451      l_spread_amount_flags_tbl         SYSTEM.PA_VARCHAR2_1_TBL_TYPE      := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1452      l_delete_budget_lines_tbl         SYSTEM.PA_VARCHAR2_1_TBL_TYPE      := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1453      l_res_assignment_id_tbl           SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
1454      -- IPM Tables
1455      l_orig_count                      NUMBER; -- bug 5003827 issue 22
1456 --     l_count_index                     NUMBER;
1457      l_ra_id_temp_tbl                  SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
1458      l_curr_code_temp_tbl              SYSTEM.PA_VARCHAR2_15_TBL_TYPE:= SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1459      --
1460      l_res_assignment_id_temp_tbl      SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
1461      l_res_assignment_id               pa_resource_assignments.resource_assignment_id%TYPE;
1462      l_call_calc_api                   VARCHAR2(1);
1463 
1464   -- Start of variable to be used in Calculate API Call
1465      l_line_start_date_tbl             SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1466      l_line_end_date_tbl               SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1467 
1468      l_currency_code_tbl               SYSTEM.PA_VARCHAR2_15_TBL_TYPE:= SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1469      l_quantity_tbl                    SYSTEM.PA_NUM_TBL_TYPE        := SYSTEM.PA_NUM_TBL_TYPE();
1470      l_raw_cost_tbl                    SYSTEM.PA_NUM_TBL_TYPE        := SYSTEM.PA_NUM_TBL_TYPE();
1471      l_burdened_cost_tbl               SYSTEM.PA_NUM_TBL_TYPE        := SYSTEM.PA_NUM_TBL_TYPE();
1472      l_revenue_tbl                     SYSTEM.PA_NUM_TBL_TYPE        := SYSTEM.PA_NUM_TBL_TYPE();
1473      l_cost_rate_tbl                   SYSTEM.PA_NUM_TBL_TYPE        := SYSTEM.PA_NUM_TBL_TYPE();
1474      l_burden_multiplier_tbl           SYSTEM.PA_NUM_TBL_TYPE        := SYSTEM.PA_NUM_TBL_TYPE();
1475      l_bill_rate_tbl                   SYSTEM.PA_NUM_TBL_TYPE        := SYSTEM.PA_NUM_TBL_TYPE();
1476      l_txn_src_typ_code_rbs_prm_tbl    SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
1477      l_txn_source_id_tbl               SYSTEM.pa_num_tbl_type        := SYSTEM.pa_num_tbl_type();
1478      l_res_list_member_id_tbl          SYSTEM.pa_num_tbl_type        := SYSTEM.pa_num_tbl_type();
1479      l_rbs_element_id_tbl              SYSTEM.pa_num_tbl_type        := SYSTEM.pa_num_tbl_type();
1480      l_txn_accum_header_id_tbl         SYSTEM.pa_num_tbl_type        := SYSTEM.pa_num_tbl_type();
1481 
1482   -- End of variable to be used in Calculate API Call
1483 
1484   -- Bug 3749516 Added for insert in Workplan Context
1485      l_ins_proj_element_id_tbl          SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1486      l_ins_task_elem_version_id_tbl     SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1487      l_ins_start_date_tbl               SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1488      l_ins_end_date_tbl                 SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1489      l_ins_cal_people_effort_tbl        SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1490      l_ins_cal_burdened_cost_tbl        SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1491      l_ins_cal_raw_cost_tbl             SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1492      l_ins_index                        NUMBER := 1;
1493 
1494      l_start_date                      pa_resource_assignments.planning_start_date%TYPE    := NULL;
1495      l_compl_date                      pa_resource_assignments.planning_start_date%TYPE    := NULL;
1496      l_start_date_tbl                  SYSTEM.PA_DATE_TBL_TYPE                             := SYSTEM.PA_DATE_TBL_TYPE();
1497      l_compl_date_tbl                  SYSTEM.PA_DATE_TBL_TYPE                             := SYSTEM.PA_DATE_TBL_TYPE();
1498 
1499      l_rlm_id_no_of_rows               NUMBER;
1500      l_elem_ver_id_no_of_rows          NUMBER;
1501      l_ppl_index                       NUMBER;
1502      l_amount_exists                   VARCHAR2(1);
1503      l_rbs_version_id                  pa_proj_fp_options.rbs_version_id%TYPE;
1504 
1505      l_proj_curr_code                  pa_projects_all.project_currency_code%TYPE;
1506      l_proj_func_curr_code             pa_projects_all.projfunc_currency_code%TYPE;
1507 
1508    -- Bug 3836358 -- ADDED for usage when p_skip_duplicates_flag is passed as Y
1509      l_task_id_temp                    PA_RESOURCE_ASSIGNMENTS.TASK_ID%TYPE;
1510      l_pji_rollup_required            VARCHAR2(1);
1511 
1512      l_fp_cols_rec   pa_fp_gen_amount_utils.fp_cols; -- IPM
1513      l_rm_temp_count number;
1514 
1515 
1516     CURSOR get_pc_code IS
1517     SELECT project_currency_code, projfunc_currency_code
1518     FROM   pa_projects_all
1519     WHERE  project_id = p_project_id;
1520 
1521 --------------------------------------------------------------------------
1522 -- This cursor is to be used to retrieve the proj_element_id based on the
1523 -- element_version_id.
1524 -- This might be removed.
1525 --------------------------------------------------------------------------
1526     CURSOR  c_proj_element_id(c_elem_version_id pa_proj_element_versions.element_version_id%TYPE) IS
1527     SELECT  proj_element_id
1528       FROM  pa_proj_element_versions
1529      WHERE  element_version_id = c_elem_version_id;
1530 
1531 BEGIN
1532     l_trace_stage := 10;
1533 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
1534 
1535     SAVEPOINT ADD_PLANNING_TRANS_SP;
1536     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1537     l_debug_mode := NVL(l_debug_mode, 'Y');
1538 
1539     IF p_pji_rollup_required = 'Y' THEN
1540         l_pji_rollup_required := 'Y';
1541     ELSE
1542         l_pji_rollup_required := 'N';
1543     END IF;
1544 
1545     pa_task_assignment_utils.g_require_progress_rollup := 'N';
1546 
1547 
1548 
1549     x_msg_count := 0;
1550     x_return_status := FND_API.G_RET_STS_SUCCESS;
1551 IF l_debug_mode = 'Y' THEN
1552     PA_DEBUG.Set_Curr_Function( p_function   => 'PA_FP_PLAN_TXN_PUB.add_planning_transactions',
1553                                 p_debug_mode => l_debug_mode );
1554 END IF;
1555 
1556     --p_context should never be null
1557     IF p_context IS NULL OR
1558        p_context NOT IN ( PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST
1559                          ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
1560                          ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
1561                          ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET ) THEN
1562 
1563         IF l_debug_mode = 'Y' THEN
1564             pa_debug.g_err_stage:='p_context passed is '||p_context;
1565             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1566         END IF;
1567         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1568                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
1569         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1570 
1571     END IF;
1572 
1573     -- Added for Bug 3719918 -- ONE-TO-ONE MAPPING BETWEEN ELEM_VER-RLM IDS PASSED
1574     -- Validation for p_one_to_one_mapping_flag passed as Y only for Budget/Forecast context
1575     -- Modified Validation Below for Only WORKPLAN Context - Changes for Bug 3665097
1576     IF (p_one_to_one_mapping_flag = 'Y'
1577         AND p_context  = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) THEN
1578         IF l_debug_mode = 'Y' THEN
1579             pa_debug.g_err_stage:='p_one_to_one_mapping_flag passed as Y for WORKPLAN context :'||p_context;
1580             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1581         END IF;
1582         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1583                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
1584         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1585     END IF;
1586 
1587 
1588     -- Added for Bug 3719918 and Bug 3665097
1589     -- Validation that when p_one_to_one_mapping_flag is passed as Y p_task_elem_version_id_tbl
1590     -- and p_resource_list_member_id_tbl should have same table count.
1591     IF (p_one_to_one_mapping_flag = 'Y' AND
1592         p_task_elem_version_id_tbl.COUNT <> p_resource_list_member_id_tbl.COUNT) THEN
1593 
1594         IF l_debug_mode = 'Y' THEN
1595             pa_debug.g_err_stage:='Table Count Mismatch for p_one_to_one_mapping_flag Y in : '||p_context;
1596             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1597         END IF;
1598         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1599                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
1600         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1601 
1602     END IF;
1603 
1604 
1605     -- Bug 3793623 Planning Start Date and Planning End Date can only be passed when
1606     -- p_one_to_one_mapping_flag IS Y
1607     IF (p_one_to_one_mapping_flag = 'N' AND
1608         (p_planning_start_date_tbl.COUNT <> 0 OR p_planning_end_date_tbl.COUNT <> 0)) THEN
1609 
1610         IF l_debug_mode = 'Y' THEN
1611             pa_debug.g_err_stage:='Planning Date Passed when one to one mapping is N';
1612             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1613         END IF;
1614         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1615                              p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1616                              p_token1         => 'PROCEDURENAME',
1617                              p_value1         => 'PAFPPTPB.add_planning_transactions',
1618                              p_token2         => 'STAGE',
1619                              p_value2         => 'Planning Date Passed when one to one mapping is N');
1620         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1621 
1622     END IF;
1623 
1624     -- Bug 3793623 Planning Start Date and Planning End Date Should have the same
1625     -- number of records
1626     IF (p_planning_start_date_tbl.COUNT <> p_planning_end_date_tbl.COUNT) THEN
1627         IF l_debug_mode = 'Y' THEN
1628             pa_debug.g_err_stage:='Planning Start Date - End Date MISMATCH p_context :'||p_context;
1629             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1630         END IF;
1631         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1632                              p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1633                              p_token1         => 'PROCEDURENAME',
1634                              p_value1         => 'PAFPPTPB.add_planning_transactions',
1635                              p_token2         => 'STAGE',
1636                              p_value2         => 'Planning Start Date - End Date MISMATCH');
1637         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1638     END IF;
1639 
1640     -- Bug 3793623 If Planning Start/End Date is passed its should be same as
1641     -- task_elem_version_id COUNT
1642     IF (p_planning_start_date_tbl.COUNT >0) THEN
1643         IF (p_planning_start_date_tbl.COUNT <> p_task_elem_version_id_tbl.COUNT) THEN
1644             IF l_debug_mode = 'Y' THEN
1645                 pa_debug.g_err_stage:='Planning Start Date - Task Elem Mismatch :'||p_context;
1646                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1647             END IF;
1648             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1649                                  p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1650                                  p_token1         => 'PROCEDURENAME',
1651                                  p_value1         => 'PAFPPTPB.add_planning_transactions',
1652                                  p_token2         => 'STAGE',
1653                                  p_value2         => 'Planning Start Date - Task Elem Mismatch');
1654             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1655         END IF;
1656     END IF;
1657 
1658 
1659     -- Added for Bug 3719918 -- when p one to one mapping flag is N
1660     -- duplicate rlm/elem_ver ids cannot be passed
1661     IF p_one_to_one_mapping_flag = 'N' THEN
1662        IF p_skip_duplicates_flag = 'N' THEN
1663           IF l_debug_mode = 'Y' THEN
1664              pa_debug.g_err_stage:='Checking for duplicate rlm ids passed';
1665              pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1666           END IF;
1667           IF p_resource_list_member_id_tbl.COUNT > 0 THEN
1668              FOR i IN p_resource_list_member_id_tbl.FIRST .. (p_resource_list_member_id_tbl.LAST-1) LOOP
1669                  FOR j in (i+1) .. p_resource_list_member_id_tbl.LAST LOOP
1670                      IF p_resource_list_member_id_tbl(j) = p_resource_list_member_id_tbl(i) THEN
1671                         IF l_debug_mode = 'Y' THEN
1672                             pa_debug.g_err_stage:='Dup RLM ID Passed';
1673                             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1674                         END IF;
1675                         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1676                                              p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1677                                              p_token1         => 'PROCEDURENAME',
1678                                              p_value1         => 'PAFPPTPB.add_planning_transactions',
1679                                              p_token2         => 'STAGE',
1680                                              p_value2         => 'Duplicate RLM Id Passed');
1681                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1682                      END IF;
1683                  END LOOP;
1684              END LOOP;
1685           END IF;
1686           IF l_debug_mode = 'Y' THEN
1687              pa_debug.g_err_stage:='Checking for duplicate elem ver ids passed';
1688              pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1689           END IF;
1690           IF p_task_elem_version_id_tbl.COUNT > 0 THEN
1691              FOR i IN p_task_elem_version_id_tbl.FIRST .. (p_task_elem_version_id_tbl.LAST-1) LOOP
1692                  FOR j in (i+1) .. p_task_elem_version_id_tbl.LAST LOOP
1693                      IF p_task_elem_version_id_tbl(j) = p_task_elem_version_id_tbl(i) THEN
1694                         IF l_debug_mode = 'Y' THEN
1695                             pa_debug.g_err_stage:='Dup ELEM VER ID Passed';
1696                             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1697                         END IF;
1698                         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1699                                              p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1700                                              p_token1         => 'PROCEDURENAME',
1701                                              p_value1         => 'PAFPPTPB.add_planning_transactions',
1702                                              p_token2         => 'STAGE',
1703                                              p_value2         => 'Duplicate Task Elem Version Id Passed');
1704                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1705                      END IF;
1706                  END LOOP;
1707              END LOOP;
1708           END IF;
1709        END IF; -- p_skip_duplicate_flag = N
1710     ELSE
1711     -- when p one to one mapping flag is Y
1712     -- FOR B/F Context dup rlm/task elem combination cannot be passed until
1713     -- and unless the currecy code is diff
1714     -- for TA WOKRPLAN dup rlm/task elem combination cannot be passed
1715         IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET) OR
1716             (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
1717             IF p_task_elem_version_id_tbl.COUNT > 1 THEN
1718                FOR i IN p_task_elem_version_id_tbl.FIRST .. (p_task_elem_version_id_tbl.LAST-1) LOOP
1719                    FOR j in (i+1) .. p_task_elem_version_id_tbl.LAST LOOP
1720                        IF ( (p_task_elem_version_id_tbl(i) = p_task_elem_version_id_tbl(j)) AND
1721                             (p_resource_list_member_id_tbl(i) = p_resource_list_member_id_tbl(j)) AND
1722                             (p_currency_code_tbl(i) = p_currency_code_tbl(j))) THEN
1723 
1724                             IF l_debug_mode = 'Y' THEN
1725                                 pa_debug.g_err_stage:='Dup Rec passed - Curr Code (B/F) - will error out in Ins Stat';
1726                                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1727                             END IF;
1728                             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1729                                                  p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1730                                                  p_token1         => 'PROCEDURENAME',
1731                                                  p_value1         => 'PAFPPTPB.add_planning_transactions',
1732                                                  p_token2         => 'STAGE',
1733                                                  p_value2         => 'Duplicate CurrCode/RlmId/TaskId Passed');
1734                             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1735                        END IF;
1736                    END LOOP;
1737                END LOOP;
1738             END IF;
1739         ELSE -- for TA/WOKRPLAN check for currency code is not there planning elements cannot be added using
1740              -- different currencies for Ta/Workplan FLow
1741             IF p_task_elem_version_id_tbl.COUNT > 1 THEN
1742                FOR i IN p_task_elem_version_id_tbl.FIRST .. (p_task_elem_version_id_tbl.LAST-1) LOOP
1743                    FOR j in (i+1) .. p_task_elem_version_id_tbl.LAST LOOP
1744                        IF ( (p_task_elem_version_id_tbl(i) = p_task_elem_version_id_tbl(j)) AND
1745                             (p_resource_list_member_id_tbl(i) = p_resource_list_member_id_tbl(j))) THEN
1746 
1747                             IF l_debug_mode = 'Y' THEN
1748                                 pa_debug.g_err_stage:='Dup Rec passed - will error out in Ins Stat p_context :'||p_context;
1749                                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1750                             END IF;
1751                             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1752                                                  p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1753                                                  p_token1         => 'PROCEDURENAME',
1754                                                  p_value1         => 'PAFPPTPB.add_planning_transactions',
1755                                                  p_token2         => 'STAGE',
1756                                                  p_value2         => 'Duplicate RlmId/TaskId Passed');
1757                             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1758                        END IF;
1759                    END LOOP;
1760                END LOOP;
1761             END IF;
1762         END IF;
1763     END IF;
1764 
1765 
1766     IF l_debug_mode = 'Y' THEN
1767         IF p_task_elem_version_id_tbl.COUNT > 0 THEN
1768            FOR i in p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
1769                 pa_debug.g_err_stage:='p_task_elem_version_id_tbl :'||p_task_elem_version_id_tbl(i);
1770                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1771            END LOOP;
1772         END IF;
1773 
1774         IF p_resource_list_member_id_tbl.COUNT > 0 THEN
1775            FOR i in p_resource_list_member_id_tbl.FIRST .. p_resource_list_member_id_tbl.LAST LOOP
1776                 pa_debug.g_err_stage:='p_resource_list_member_id_tbl :'||p_resource_list_member_id_tbl(i);
1777                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1778            END LOOP;
1779         END IF;
1780 
1781         IF p_currency_code_tbl.COUNT > 0 THEN
1782            FOR i in p_currency_code_tbl.FIRST .. p_currency_code_tbl.LAST LOOP
1783                 pa_debug.g_err_stage:='p_currency_code_tbl :'||p_currency_code_tbl(i);
1784                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1785            END LOOP;
1786         END IF;
1787     END IF;
1788 
1789    -------------------------------------------------------------------------------------------
1790    -- Extending all table lengths to the permissible values they would take.
1791    -------------------------------------------------------------------------------------------
1792 
1793      IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
1794         -- Bug 3749516 only for PEOPLE
1795         l_rlm_id_no_of_rows       := 1;
1796      ELSE
1797         l_rlm_id_no_of_rows       := p_resource_list_member_id_tbl.LAST;
1798      END IF;
1799      l_elem_ver_id_no_of_rows  := p_task_elem_version_id_tbl.LAST;
1800 
1801     l_trace_stage := 20;
1802 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
1803 
1804      IF l_debug_mode = 'Y' THEN
1805          pa_debug.g_err_stage:='Extending all table lengths to the permissible values they would take - p_context = '||p_context;
1806          pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1807      END IF;
1808 
1809     l_task_elem_rlm_tbl.extend(l_rlm_id_no_of_rows);
1810     l_proj_elem_rlm_tbl.extend(l_rlm_id_no_of_rows);
1811 
1812     -- Bug 3719918 -- For Insert in BF Context.
1813     l_bf_start_date_tbl.extend(l_rlm_id_no_of_rows);
1814     l_bf_compl_date_tbl.extend(l_rlm_id_no_of_rows);
1815     l_bf_proj_elem_tbl.extend(l_rlm_id_no_of_rows);
1816     l_bf_quantity_tbl.extend((l_rlm_id_no_of_rows));
1817     l_bf_raw_cost_tbl.extend((l_rlm_id_no_of_rows));
1818     l_bf_burdened_cost_tbl.extend((l_rlm_id_no_of_rows));
1819     l_bf_revenue_tbl.extend((l_rlm_id_no_of_rows));
1820     l_bf_currency_code_tbl.extend((l_rlm_id_no_of_rows));
1821     l_bf_cost_rate_tbl.extend((l_rlm_id_no_of_rows));
1822     l_bf_bill_rate_tbl.extend((l_rlm_id_no_of_rows));
1823     l_bf_burdened_rate_tbl.extend((l_rlm_id_no_of_rows));
1824 
1825     -- End for Bug 3719918
1826 
1827     l_resource_class_flag_tbl.extend(l_rlm_id_no_of_rows);
1828     l_resource_class_code_tbl.extend(l_rlm_id_no_of_rows);
1829     l_resource_class_id_tbl.extend(l_rlm_id_no_of_rows);
1830     l_res_type_code_tbl.extend(l_rlm_id_no_of_rows);
1831     l_person_id_tbl.extend(l_rlm_id_no_of_rows);
1832     l_job_id_tbl.extend(l_rlm_id_no_of_rows);
1833     l_person_type_code_tbl.extend(l_rlm_id_no_of_rows);
1834     l_named_role_tbl.extend(l_rlm_id_no_of_rows);
1835     l_bom_resource_id_tbl.extend(l_rlm_id_no_of_rows);
1836     l_non_labor_resource_tbl.extend(l_rlm_id_no_of_rows);
1837     l_inventory_item_id_tbl.extend(l_rlm_id_no_of_rows);
1838     l_item_category_id_tbl.extend(l_rlm_id_no_of_rows);
1839     l_project_role_id_tbl.extend(l_rlm_id_no_of_rows);
1840     l_organization_id_tbl.extend(l_rlm_id_no_of_rows);
1841     l_fc_res_type_code_tbl.extend(l_rlm_id_no_of_rows);
1842     l_expenditure_type_tbl.extend(l_rlm_id_no_of_rows);
1843     l_expenditure_category_tbl.extend(l_rlm_id_no_of_rows);
1844     l_event_type_tbl.extend(l_rlm_id_no_of_rows);
1845     l_revenue_category_code_tbl.extend(l_rlm_id_no_of_rows);
1846     l_supplier_id_tbl.extend(l_rlm_id_no_of_rows);
1847     l_unit_of_measure_tbl.extend(l_rlm_id_no_of_rows);
1848     l_spread_curve_id_tbl.extend(l_rlm_id_no_of_rows);
1849     l_etc_method_code_tbl.extend(l_rlm_id_no_of_rows);
1850     l_mfc_cost_type_id_tbl.extend(l_rlm_id_no_of_rows);
1851     l_procure_resource_flag_tbl.extend(l_rlm_id_no_of_rows);
1852     l_incurred_by_res_flag_tbl.extend(l_rlm_id_no_of_rows);
1853     l_Incur_by_res_class_code_tbl.extend(l_rlm_id_no_of_rows);
1854     l_Incur_by_role_id_tbl.extend(l_rlm_id_no_of_rows);
1855     l_eligible_rlm_ids_tbl.extend(l_rlm_id_no_of_rows);
1856     l_txn_src_typ_code_rbs_prm_tbl.extend(l_rlm_id_no_of_rows);
1857     l_org_id_tbl.extend(l_rlm_id_no_of_rows);
1858     l_rate_based_flag_tbl.extend(l_rlm_id_no_of_rows);
1859     l_rate_expenditure_type_tbl.extend(l_rlm_id_no_of_rows);
1860     l_rate_func_curr_code_tbl.extend(l_rlm_id_no_of_rows);
1861     l_resource_assignment_id_tbl.extend(l_rlm_id_no_of_rows);
1862     l_assignment_description_tbl.extend(l_rlm_id_no_of_rows);
1863     l_planning_resource_alias_tbl.extend(l_rlm_id_no_of_rows);
1864     l_resource_name_tbl.extend(l_rlm_id_no_of_rows);
1865     l_project_role_name_tbl.extend(l_rlm_id_no_of_rows);
1866     l_organization_name_tbl.extend(l_rlm_id_no_of_rows);
1867     l_financial_category_code_tbl.extend(l_rlm_id_no_of_rows);
1868     l_project_assignment_id_tbl.extend(l_rlm_id_no_of_rows);
1869     l_use_task_schedule_flag_tbl.extend(l_rlm_id_no_of_rows);
1870     l_planning_start_date_tbl.extend(l_rlm_id_no_of_rows);
1871     l_planning_end_date_tbl.extend(l_rlm_id_no_of_rows);
1872     l_schedule_start_date_tbl.extend(l_rlm_id_no_of_rows);
1873     l_schedule_end_date_tbl.extend(l_rlm_id_no_of_rows);
1874     l_total_quantity_tbl.extend(l_rlm_id_no_of_rows);
1875     l_override_currency_code_tbl.extend(l_rlm_id_no_of_rows);
1876     l_billable_percent_tbl.extend(l_rlm_id_no_of_rows);
1877     l_cost_rate_override_tbl.extend(l_rlm_id_no_of_rows);
1878     l_burdened_rate_override_tbl.extend(l_rlm_id_no_of_rows);
1879     IF p_unplanned_flag_tbl.count = 0 THEN
1880          l_unplanned_flag_tbl.extend(l_rlm_id_no_of_rows);
1881     ELSE
1882          l_unplanned_flag_tbl := p_unplanned_flag_tbl;
1883     END IF;
1884     l_sp_fixed_date_tbl.extend(l_rlm_id_no_of_rows);
1885     l_financial_category_name_tbl.extend(l_rlm_id_no_of_rows);
1886     l_supplier_name_tbl.extend(l_rlm_id_no_of_rows);
1887     l_pm_product_code_tbl.extend(l_rlm_id_no_of_rows);
1888     l_pm_res_asgmt_ref_tbl.extend(l_rlm_id_no_of_rows);
1889     l_ATTRIBUTE_CATEGORY_tbl.extend(l_rlm_id_no_of_rows);
1890     l_ATTRIBUTE1_tbl.extend(l_rlm_id_no_of_rows);
1891     l_ATTRIBUTE2_tbl.extend(l_rlm_id_no_of_rows);
1892     l_ATTRIBUTE3_tbl.extend(l_rlm_id_no_of_rows);
1893     l_ATTRIBUTE4_tbl.extend(l_rlm_id_no_of_rows);
1894     l_ATTRIBUTE5_tbl.extend(l_rlm_id_no_of_rows);
1895     l_ATTRIBUTE6_tbl.extend(l_rlm_id_no_of_rows);
1896     l_ATTRIBUTE7_tbl.extend(l_rlm_id_no_of_rows);
1897     l_ATTRIBUTE8_tbl.extend(l_rlm_id_no_of_rows);
1898     l_ATTRIBUTE9_tbl.extend(l_rlm_id_no_of_rows);
1899     l_ATTRIBUTE10_tbl.extend(l_rlm_id_no_of_rows);
1900     l_ATTRIBUTE11_tbl.extend(l_rlm_id_no_of_rows);
1901     l_ATTRIBUTE12_tbl.extend(l_rlm_id_no_of_rows);
1902     l_ATTRIBUTE13_tbl.extend(l_rlm_id_no_of_rows);
1903     l_ATTRIBUTE14_tbl.extend(l_rlm_id_no_of_rows);
1904     l_ATTRIBUTE15_tbl.extend(l_rlm_id_no_of_rows);
1905     l_ATTRIBUTE16_tbl.extend(l_rlm_id_no_of_rows);
1906     l_ATTRIBUTE17_tbl.extend(l_rlm_id_no_of_rows);
1907     l_ATTRIBUTE18_tbl.extend(l_rlm_id_no_of_rows);
1908     l_ATTRIBUTE19_tbl.extend(l_rlm_id_no_of_rows);
1909     l_ATTRIBUTE20_tbl.extend(l_rlm_id_no_of_rows);
1910     l_ATTRIBUTE21_tbl.extend(l_rlm_id_no_of_rows);
1911     l_ATTRIBUTE22_tbl.extend(l_rlm_id_no_of_rows);
1912     l_ATTRIBUTE23_tbl.extend(l_rlm_id_no_of_rows);
1913     l_ATTRIBUTE24_tbl.extend(l_rlm_id_no_of_rows);
1914     l_ATTRIBUTE25_tbl.extend(l_rlm_id_no_of_rows);
1915     l_ATTRIBUTE26_tbl.extend(l_rlm_id_no_of_rows);
1916     l_ATTRIBUTE27_tbl.extend(l_rlm_id_no_of_rows);
1917     l_ATTRIBUTE28_tbl.extend(l_rlm_id_no_of_rows);
1918     l_ATTRIBUTE29_tbl.extend(l_rlm_id_no_of_rows);
1919     l_ATTRIBUTE30_tbl.extend(l_rlm_id_no_of_rows);
1920     --For bug 3948128
1921     l_scheduled_delay.extend(l_rlm_id_no_of_rows);
1922 
1923     l_del_task_level_rec_code_tbl.extend(l_elem_ver_id_no_of_rows);
1924     l_proj_element_id_tbl.extend(l_elem_ver_id_no_of_rows);
1925     l_start_date_tbl.extend(l_elem_ver_id_no_of_rows);
1926     l_compl_date_tbl.extend(l_elem_ver_id_no_of_rows);
1927 
1928     l_ins_proj_element_id_tbl.extend(l_elem_ver_id_no_of_rows);
1929     l_ins_task_elem_version_id_tbl.extend(l_elem_ver_id_no_of_rows);
1930     l_ins_start_date_tbl.extend(l_elem_ver_id_no_of_rows);
1931     l_ins_end_date_tbl.extend(l_elem_ver_id_no_of_rows);
1932     l_ins_cal_people_effort_tbl.extend(l_elem_ver_id_no_of_rows);
1933     l_ins_cal_burdened_cost_tbl.extend(l_elem_ver_id_no_of_rows);
1934     l_ins_cal_raw_cost_tbl.extend(l_elem_ver_id_no_of_rows);
1935 
1936     l_ra_id_del_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1937     l_spread_amount_flags_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1938     l_delete_budget_lines_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1939     l_res_assignment_id_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1940     l_res_assignment_id_temp_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1941     l_currency_code_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1942     l_quantity_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1943     l_raw_cost_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1944     l_burdened_cost_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1945     l_revenue_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1946     l_cost_rate_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1947     l_burden_multiplier_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1948     l_bill_rate_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1949 
1950     l_trace_stage := 30;
1951 --dbms_output.put_line('done with extending');
1952 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
1953 
1954    -------------------------------------------------------------------------------------------
1955    -- validating input parameters
1956    -- 1. , p_task_elem_version_id_tbl table cannot be empty
1957    -------------------------------------------------------------------------------------------
1958 
1959     --If the input tasks table is empty in the context of budget or forecast then return
1960     IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
1961         p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST) THEN
1962         l_elem_version_id_count := p_task_elem_version_id_tbl.COUNT;
1963         l_trace_stage := 140;
1964         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
1965 
1966         IF l_debug_mode = 'Y' THEN
1967             pa_debug.g_err_stage:='Validating input parameters - count of  p_task_elem_version_id_tbl = '||l_elem_version_id_count;
1968             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1969         END IF;
1970 
1971         IF l_elem_version_id_count = 0 THEN
1972             l_trace_stage := 150;
1973             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
1974             IF l_debug_mode = 'Y' THEN
1975                 pa_debug.g_err_stage:='Validating input parameters - elem_version_id table is empty - p_context = '||p_context;
1976                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1977             --dbms_output.put_line('Tasks tbl is empty for BF -- returning');
1978             pa_debug.reset_curr_function;
1979             END IF;
1980             RETURN;
1981         END IF;
1982     END IF;
1983 
1984 
1985     --In the context of workplan the start date and end date tbl count should always be equal to the input
1986     --task tbl count
1987     IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
1988         IF (p_end_date_tbl.COUNT <> p_start_date_tbl.COUNT) OR
1989            (p_start_date_tbl.COUNT <> p_task_elem_version_id_tbl.COUNT) THEN
1990 
1991             IF l_debug_mode = 'Y' THEN
1992                 pa_debug.g_err_stage:='Invalid pl/sql tables for start and end dates';
1993                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1994             END IF;
1995             --dbms_output.put_line('$$$$%%%');
1996             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1997                                   p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
1998             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1999         END IF;
2000     END IF;
2001 
2002 
2003     -------------------------------------------------------------------------------------------
2004     -- Validation - p_resource_list_member_id_tbl can be empty only for p_context = 'WORKPLAN'
2005     -- Otherwise return NULL
2006     -------------------------------------------------------------------------------------------
2007     IF NOT(p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) THEN
2008         l_rlm_id_tbl_count := p_resource_list_member_id_tbl.COUNT;
2009 
2010         IF l_debug_mode = 'Y' THEN
2011             pa_debug.g_err_stage:='Validating input parameters - count of  p_resource_list_member_id_tbl = '||l_rlm_id_tbl_count;
2012             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2013         END IF;
2014 
2015         IF l_rlm_id_tbl_count = 0 THEN
2016 
2017             IF l_debug_mode = 'Y' THEN
2018                 pa_debug.g_err_stage:='Validating input parameters - Resource List Member Id table is empty - p_context = '||p_context;
2019                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2020             --dbms_output.put_line('Rlm tbl is empty for BF -- returning');
2021             pa_debug.reset_curr_function;
2022            END IF;
2023             RETURN;
2024         END IF;
2025 
2026     END IF;
2027 
2028 
2029 
2030     l_trace_stage := 40;
2031 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2032 
2033     IF l_debug_mode = 'Y' THEN
2034        pa_debug.g_err_stage:='Validating input parameters - checking for project id : ' || p_project_id;
2035        pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2036     END IF;
2037 
2038     l_trace_stage := 50;
2039 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2040    -------------------------------------------------------------------------------------------
2041    -- validating input parameters
2042    -- 1. p_project_id cannot be null
2043    -------------------------------------------------------------------------------------------
2044     IF (p_project_id IS NULL) THEN
2045         IF l_debug_mode = 'Y' THEN
2046             pa_debug.g_err_stage:='p_project_id is null';
2047             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2048         END IF;
2049         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2050                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
2051         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2052     END IF;
2053 
2054 --dbms_output.put_line('2');
2055 
2056     l_trace_stage := 60;
2057 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2058    -------------------------------------------------------------------------------------------
2059    -- validating input parameters
2060    -- 1. for p_context ('WORKPLAN','TASK_ASSIGNMENT')- p_struct_elem_version_id cannot be null
2061    -- 2. , p_task_elem_version_id_tbl table cannot be empty
2062    -------------------------------------------------------------------------------------------
2063 
2064     IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK)) THEN
2065 
2066         l_trace_stage := 70;
2067 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2068         IF p_struct_elem_version_id IS NULL THEN
2069 
2070             IF l_debug_mode = 'Y' THEN
2071                 pa_debug.g_err_stage:='p_struct_elem_version_id is NULL and p_context = ' || p_context;
2072                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2073             END IF;
2074             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2075                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
2076              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2077 
2078         ELSE
2079 
2080             l_trace_stage := 80;
2081             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2082 
2083             IF l_debug_mode = 'Y' THEN
2084                 pa_debug.g_err_stage:='calling pa_planning_transaction_utils.get_wp_budget_version_id    p_struct_elem_version_id = ' || p_struct_elem_version_id;
2085                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2086                 pa_debug.g_err_stage:='calling pa_planning_transaction_utils.get_wp_budget_version_id for deriving budget_version_id = ' || p_context;
2087                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2088             END IF;
2089 
2090             l_budget_version_id := pa_planning_transaction_utils.get_wp_budget_version_id(p_struct_elem_version_id);
2091 
2092             l_trace_stage := 90;
2093             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2094             pa_fp_planning_transaction_pub.add_wp_plan_type
2095             (p_src_project_id              => p_project_id
2096             ,p_targ_project_id              => p_project_id
2097             ,x_return_status                => x_return_status
2098             ,x_msg_count                    => x_msg_count
2099             ,x_msg_data                     => x_msg_data);
2100             l_trace_stage := 100;
2101             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2102 
2103             -- 4504452.Added this if codition to get the return status.
2104            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2105               IF l_debug_mode = 'Y' THEN
2106 	             pa_debug.g_err_stage:='Called API pa_fp_planning_transaction_pub.add_wp_plan_type api returned error';
2107                  pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2108                END IF;
2109                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2110            END IF;
2111             -----------------------------------------------------
2112             -- If l_budget_version_id IS NULL then create version
2113             -----------------------------------------------------
2114             IF l_budget_version_id IS NULL THEN
2115                 l_trace_stage := 110;
2116                 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2117 
2118                 IF l_debug_mode = 'Y' THEN
2119                     pa_debug.g_err_stage:='calling pa_fin_plan_pub.create_version api = ' || p_context;
2120                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2121                 END IF;
2122 
2123                 SELECT fin_plan_type_id
2124                 INTO   l_fin_plan_type_id
2125                 FROM   pa_fin_plan_types_b
2126                 WHERE  use_for_workplan_flag ='Y';
2127 
2128                 pa_fin_plan_pub.Create_Version (
2129                  p_project_id               => p_project_id
2130                 ,p_fin_plan_type_id         => l_fin_plan_type_id
2131                 ,p_element_type             => PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST
2132                 ,p_version_name             => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
2133                 ,p_description              => null
2134                 ,p_ci_id                    => null
2135                 ,p_est_proj_raw_cost        => null
2136                 ,p_est_proj_bd_cost         => null
2137                 ,p_est_proj_revenue         => null
2138                 ,p_est_qty                  => null
2139                 ,p_impacted_task_id         => null
2140                 ,p_agreement_id             => null
2141                 ,p_calling_context          => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
2142                 ,p_resource_list_id         => null
2143                 ,p_time_phased_code         => null
2144                 ,p_fin_plan_level_code      => null
2145                 ,p_plan_in_multi_curr_flag  => null
2146                 ,p_amount_set_id            => null
2147                 ,p_attribute_category       => null
2148                 ,p_attribute1               => null
2149                 ,p_attribute2               => null
2150                 ,p_attribute3               => null
2151                 ,p_attribute4               => null
2152                 ,p_attribute5               => null
2153                 ,p_attribute6               => null
2154                 ,p_attribute7               => null
2155                 ,p_attribute8               => null
2156                 ,p_attribute9               => null
2157                 ,p_attribute10              => null
2158                 ,p_attribute11              => null
2159                 ,p_attribute12              => null
2160                 ,p_attribute13              => null
2161                 ,p_attribute14              => null
2162                 ,p_attribute15              => null
2163                 ,p_pji_rollup_required     => l_pji_rollup_required
2164                 ,px_budget_version_id       => l_budget_version_id
2165                 ,p_struct_elem_version_id   => p_struct_elem_version_id
2166                 ,x_proj_fp_option_id        => l_proj_fp_options_id
2167                 ,x_return_status            => l_return_status
2168                 ,x_msg_count                => l_msg_count
2169                 ,x_msg_data                 => l_msg_data );
2170 
2171                 l_trace_stage := 120;
2172                 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2173                 IF l_debug_mode = 'Y' THEN
2174                     pa_debug.g_err_stage:=' API pa_fin_plan_pub.create_version api return Status : '||l_return_status;
2175                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2176                     pa_debug.g_err_stage:=' API pa_fin_plan_pub.create_version api l_budget_version_id : '||l_budget_version_id;
2177                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2178                     pa_debug.g_err_stage:=' API pa_fin_plan_pub.create_version api l_proj_fp_options_id : '||l_proj_fp_options_id;
2179                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2180                 END IF;
2181 
2182                 l_trace_stage := 130;
2183                 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2184 
2185                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2186                     IF l_debug_mode = 'Y' THEN
2187                     pa_debug.g_err_stage:='Called API pa_fin_plan_pub.create_version api returned error';
2188                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2189                     END IF;
2190                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2191                 END IF;
2192 
2193             END IF;
2194 
2195             IF l_debug_mode = 'Y' THEN
2196                 pa_debug.g_err_stage:='l_budget_version_id, l_fin_plan_type_id = '||l_budget_version_id||','|| l_fin_plan_type_id;
2197                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2198             END IF;
2199 
2200         END IF;
2201 
2202         --Get the no of tasks passed . If none are passed then return
2203         l_elem_version_id_count := p_task_elem_version_id_tbl.COUNT;
2204         l_trace_stage := 140;
2205 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2206 
2207         IF l_debug_mode = 'Y' THEN
2208             pa_debug.g_err_stage:='Validating input parameters - count of  p_task_elem_version_id_tbl = '||l_elem_version_id_count;
2209             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2210         END IF;
2211 
2212         IF l_elem_version_id_count = 0 THEN
2213             l_trace_stage := 150;
2214             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2215             IF l_debug_mode = 'Y' THEN
2216                 pa_debug.g_err_stage:='Validating input parameters - elem_version_id table is empty - p_context = '||p_context;
2217                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2218                 pa_debug.reset_curr_function;
2219 	    END IF;
2220             RETURN;
2221         END IF;
2222 
2223         l_trace_stage := 160;
2224         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2225     ELSIF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET) OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
2226 
2227         l_trace_stage := 170;
2228         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2229         IF p_budget_version_id IS NULL THEN
2230 
2231             IF l_debug_mode = 'Y' THEN
2232                   pa_debug.g_err_stage:='p_budget_version_id is null for p_context :' || p_context;
2233                   pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2234             END IF;
2235             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2236                                 p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
2237             --dbms_output.put_line('bv id is null for BF');
2238             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2239         ELSE
2240             l_trace_stage := 180;
2241             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2242             l_budget_version_id := p_budget_version_id;
2243         END IF;
2244 
2245         l_trace_stage := 190;
2246         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2247     END IF;
2248 
2249     IF l_debug_mode = 'Y' THEN
2250         pa_debug.g_err_stage:='Fetching resource List id - l_resource_list_id : ';
2251         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2252     END IF;
2253     l_trace_stage := 200;
2254     --  hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2255     --dbms_output.put_line('2.3 '||l_budget_version_id);
2256 
2257     --Get the required details for the budget version id
2258     SELECT nvl(cost_resource_list_id, nvl(revenue_resource_list_id, all_resource_list_id))
2259           ,rbs_version_id
2260     INTO   l_resource_list_id
2261           ,l_rbs_version_id
2262     FROM   pa_proj_fp_options
2263     WHERE  fin_plan_version_id=l_budget_version_id;
2264 
2265     IF l_debug_mode = 'Y' THEN
2266         pa_debug.g_err_stage:='Fetching resource List id - l_resource_list_id : '|| l_resource_list_id;
2267         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2268     END IF;
2269 
2270 -- Fetching spread curve id for fixed date spread curve : Bug 3607061 - Starts
2271     BEGIN
2272         IF l_debug_mode = 'Y' THEN
2273             pa_debug.g_err_stage:='Fetching spread curve id for fixed date spread curve';
2274             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2275         END IF;
2276         Select spread_curve_id
2277           into l_fixed_date_sp_id
2278           from pa_spread_curves_b
2279          where spread_curve_code = 'FIXED_DATE';
2280 
2281         IF l_debug_mode = 'Y' THEN
2282             pa_debug.g_err_stage:='Fetching spread curve id l_fixed_date_sp_id:'||l_fixed_date_sp_id;
2283             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2284         END IF;
2285 
2286     EXCEPTION
2287         WHEN NO_DATA_FOUND THEN
2288              IF l_debug_mode = 'Y' THEN
2289                 pa_debug.g_err_stage:='Fixed date spread curve not found in system';
2290                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,5);
2291              END IF;
2292              RAISE;
2293     END;
2294 -- Fetching spread curve id for fixed date spread curve : Bug 3607061 - Ends
2295 
2296 
2297     l_trace_stage := 210;
2298     --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2299 
2300     --dbms_output.put_line('2.2');
2301     -----------------------------------------------------------------------------------------------------------------------
2302     -- Fetching the resource class member ids for Class Codes in ('FINANCIAL_ELEMENTS','PEOPLE','EQUIPMENT','MATERIAL')
2303     -- and setting all Cost PLsql tables that will be needed for calling Calculate API as Empty tabs
2304     -- Bug 3749516 Removing rlm id for EQUIPMENT below
2305     -----------------------------------------------------------------------------------------------------------------------
2306 
2307     IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) THEN
2308         l_trace_stage := 220;
2309         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2310 
2311         IF l_debug_mode = 'Y' THEN
2312             pa_debug.g_err_stage:='Calling API pa_planning_transaction_utils.Get_Res_Class_Rlm_Ids';
2313             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2314         END IF;
2315 
2316          pa_planning_transaction_utils.Get_Res_Class_Rlm_Ids
2317         (p_project_id                   =>    p_project_id,
2318          p_resource_list_id             =>    l_resource_list_id,
2319          x_people_res_class_rlm_id      =>    l_people_res_class_rlm_id,
2320          x_equip_res_class_rlm_id       =>    l_equip_res_class_rlm_id,
2321          x_fin_res_class_rlm_id         =>    l_fin_res_class_rlm_id,
2322          x_mat_res_class_rlm_id         =>    l_mat_res_class_rlm_id,
2323          x_return_status                =>    l_return_status,
2324          x_msg_count                    =>    l_msg_count,
2325          x_msg_data                     =>    l_msg_data);
2326         l_trace_stage := 230;
2327         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2328         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2329             IF l_debug_mode = 'Y' THEN
2330                 pa_debug.g_err_stage:='Called API pa_planning_transaction_utils.Get_Res_Class_Rlm_Ids api returned error';
2331                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2332             END IF;
2333         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2334         END IF;
2335 
2336         l_trace_stage := 240;
2337         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2338 
2339         IF l_debug_mode = 'Y' THEN
2340             pa_debug.g_err_stage:='l_people_res_class_rlm_id : '||l_people_res_class_rlm_id;
2341             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2342         END IF;
2343 
2344         l_eligible_rlm_ids_tbl(1) := l_people_res_class_rlm_id;
2345 
2346         l_trace_stage := 250;
2347         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2348     ELSE
2349         --dbms_output.put_line('2.1');
2350         l_trace_stage := 260;
2351         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2352         l_eligible_rlm_ids_tbl := p_resource_list_member_id_tbl;
2353 
2354     END IF;
2355 
2356     /**************** initializing pm product code ************/
2357     IF l_eligible_rlm_ids_tbl.count > 0 Then
2358             FOR i IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST LOOP
2359                             If (NOT p_pm_product_code.EXISTS(i))
2360                             then
2361                                     l_pm_product_code_tbl(i) := null;
2362                             elsif ( p_pm_product_code(i) = fnd_api.g_miss_char)
2363                             Then
2364                                     l_pm_product_code_tbl(i) := null;
2365                             Else
2366                                     l_pm_product_code_tbl(i) := p_pm_product_code(i);
2367                             End If;
2368 
2369                             If (NOT p_pm_res_asgmt_ref.EXISTS(i))
2370                             then
2371                                     l_pm_res_asgmt_ref_tbl(i) := null;
2372                             elsif (p_pm_res_asgmt_ref(i) = fnd_api.g_miss_char)
2373                             Then
2374                                     l_pm_res_asgmt_ref_tbl(i) := null;
2375                             Else
2376                                     l_pm_res_asgmt_ref_tbl(i) := p_pm_res_asgmt_ref(i);
2377                             End If;
2378             END loop;
2379     End IF;
2380 
2381     /**************** end ------------------- initializing pm product code ************/
2382 
2383 
2384     l_trace_stage := 290;
2385     --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2386 
2387     --------------------------------------------------------------------
2388     -- Calling procedure PA_PLANNING_RESOURCE_UTILS.get_resource_defaults
2389     --  to get the resource defaults for the rlm ids passed
2390     -- Please note that this API call will be modified, once the API is
2391     -- finalised.
2392     --                                    - STARTS
2393     --------------------------------------------------------------------
2394 
2395     IF l_debug_mode = 'Y' THEN
2396         pa_debug.g_err_stage:='Calling API PA_PLANNING_RESOURCE_UTILS.get_resource_defaults';
2397         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2398     END IF;
2399 
2400     l_trace_stage := 300;
2401     --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2402     PA_PLANNING_RESOURCE_UTILS.get_resource_defaults(
2403     p_resource_list_members        =>  l_eligible_rlm_ids_tbl,
2404     p_project_id                   =>  p_project_id,
2405     x_resource_class_flag          =>  l_resource_class_flag_tbl,
2406     x_resource_class_code          =>  l_resource_class_code_tbl,
2407     x_resource_class_id            =>  l_resource_class_id_tbl,
2408     x_res_type_code                =>  l_res_type_code_tbl,
2409     x_person_id                    =>  l_person_id_tbl,
2410     x_job_id                       =>  l_job_id_tbl,
2411     x_person_type_code             =>  l_person_type_code_tbl,
2412     x_named_role                   =>  l_named_role_tbl,
2413     x_bom_resource_id              =>  l_bom_resource_id_tbl,
2414     x_non_labor_resource           =>  l_non_labor_resource_tbl,
2415     x_inventory_item_id            =>  l_inventory_item_id_tbl,
2416     x_item_category_id             =>  l_item_category_id_tbl,
2417     x_project_role_id              =>  l_project_role_id_tbl,
2418     x_organization_id              =>  l_organization_id_tbl,
2419     x_fc_res_type_code             =>  l_fc_res_type_code_tbl,
2420     x_expenditure_type             =>  l_expenditure_type_tbl,
2421     x_expenditure_category         =>  l_expenditure_category_tbl,
2422     x_event_type                   =>  l_event_type_tbl,
2423     x_revenue_category_code        =>  l_revenue_category_code_tbl,
2424     x_supplier_id                  =>  l_supplier_id_tbl,
2425     x_unit_of_measure              =>  l_unit_of_measure_tbl,
2426     x_spread_curve_id              =>  l_spread_curve_id_tbl,
2427     x_etc_method_code              =>  l_etc_method_code_tbl,
2428     x_mfc_cost_type_id             =>  l_mfc_cost_type_id_tbl,
2429     x_incurred_by_res_flag         =>  l_incurred_by_res_flag_tbl,
2430     x_incur_by_res_class_code      =>  l_incur_by_res_class_code_tbl,
2431     x_Incur_by_role_id             =>  l_Incur_by_role_id_tbl,
2432     x_org_id                       =>  l_org_id_tbl,
2433     X_rate_based_flag              =>  l_rate_based_flag_tbl,
2434     x_rate_expenditure_type        =>  l_rate_expenditure_type_tbl,
2435     x_rate_func_curr_code          =>  l_rate_func_curr_code_tbl,
2436     x_incur_by_res_type            =>  l_incur_by_res_type ,
2437     x_msg_data                     =>  l_msg_data,
2438     x_msg_count                    =>  l_msg_count,
2439     x_return_status                =>  l_return_status);
2440     l_trace_stage := 310;
2441 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2442 
2443     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2444 
2445         IF l_debug_mode = 'Y' THEN
2446            pa_debug.g_err_stage:='Called APIPA_PLANNING_RESOURCE_UTILS.get_resource_defaults api returned error';
2447            pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2448         END IF;
2449         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2450 
2451     END IF;
2452 
2453     IF l_debug_mode = 'Y' THEN
2454 
2455         IF l_eligible_rlm_ids_tbl.COUNT >0 THEN
2456             pa_debug.g_err_stage:='Parameters to PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs';
2457             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2458 
2459 
2460             pa_debug.g_err_stage:='p_budget_version_id '||l_budget_version_id;
2461             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2462 
2463             pa_debug.g_err_stage:='l_resource_list_id '||l_resource_list_id;
2464             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2465 
2466             pa_debug.g_err_stage:='l_rbs_version_id '||l_rbs_version_id;
2467             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2468 
2469             pa_debug.g_err_stage:='l_eligible_rlm_ids_tbl(1) '||l_eligible_rlm_ids_tbl(1);
2470             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2471 
2472             pa_debug.g_err_stage:='l_txn_src_typ_code_rbs_prm_tbl(1) '||l_txn_src_typ_code_rbs_prm_tbl(1);
2473             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2474 
2475             pa_debug.g_err_stage:='l_person_id_tbl(1) '||l_person_id_tbl(1);
2476             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2477 
2478             pa_debug.g_err_stage:='l_job_id_tbl(1) '||l_job_id_tbl(1);
2479             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2480 
2481             pa_debug.g_err_stage:='l_organization_id_tbl(1) '||l_organization_id_tbl(1);
2482             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2483 
2484             pa_debug.g_err_stage:='l_supplier_id_tbl(1) '||l_supplier_id_tbl(1);
2485             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2486 
2487             pa_debug.g_err_stage:='l_expenditure_type_tbl(1) '||l_expenditure_type_tbl(1);
2488             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2489 
2490             pa_debug.g_err_stage:='l_event_type_tbl(1) '||l_event_type_tbl(1);
2491             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2492 
2493             pa_debug.g_err_stage:='l_expenditure_category_tbl(1) '||l_expenditure_category_tbl(1);
2494             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2495 
2496             pa_debug.g_err_stage:='l_revenue_category_code_tbl(1) '||l_revenue_category_code_tbl(1);
2497             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2498 
2499             pa_debug.g_err_stage:='l_project_role_id_tbl(1) '||l_project_role_id_tbl(1);
2500             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2501 
2502             pa_debug.g_err_stage:='l_resource_class_code_tbl(1) '||l_resource_class_code_tbl(1);
2503             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2504 
2505             pa_debug.g_err_stage:='l_item_category_id_tbl(1) '||l_item_category_id_tbl(1);
2506             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2507 
2508             pa_debug.g_err_stage:='l_person_type_code_tbl(1) '||l_person_type_code_tbl(1);
2509             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2510 
2511             pa_debug.g_err_stage:='l_bom_resource_id_tbl(1) '||l_bom_resource_id_tbl(1);
2512             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2513 
2514         END IF;
2515 
2516 
2517     END IF;
2518 
2519 
2520     --Loop thru the passed rlm id table to prepare the l_txn_src_typ_code_rbs_prm_tbl pl/sql table.
2521     --All the elements in this table should be set to 'RES_ASSIGNMENT'
2522 
2523     --NOTE : This loop is also used to transfer the l_incur_by_res_type(i) to  l_res_type_code_tbl(i) if
2524     --l_incurred_by_res_flag_tbl(i) is Y. Ultimately l_res_type_code_tbl will be used in populationg
2525     --res type code in pa_resource_assignments
2526     l_res_type_code_tbl.EXTEND(l_eligible_rlm_ids_tbl.COUNT-l_res_type_code_tbl.COUNT);
2527     FOR i IN l_eligible_rlm_ids_tbl.FIRST..l_eligible_rlm_ids_tbl.LAST LOOP
2528 
2529        l_txn_src_typ_code_rbs_prm_tbl(i):='RES_ASSIGNMENT';
2530 
2531        IF  l_incurred_by_res_flag_tbl.EXISTS(i) AND nvl(l_incurred_by_res_flag_tbl(i),'N') = 'Y' THEN
2532            IF l_incur_by_res_type.EXISTS(i) THEN
2533               l_res_type_code_tbl(i) := l_incur_by_res_type(i);
2534            ELSE
2535               l_res_type_code_tbl(i) := NULL;
2536            END IF;
2537        END IF;
2538 
2539     END LOOP;
2540 
2541     --Extend the output pl/sql tbls l_rbs_element_id_tbl and l_txn_accum_header_id_tbl so that they contatin
2542     --the same no of records as l_eligible_rlm_ids_tbl
2543     l_rbs_element_id_tbl.EXTEND(l_eligible_rlm_ids_tbl.COUNT);
2544     l_txn_accum_header_id_tbl.EXTEND(l_eligible_rlm_ids_tbl.COUNT);
2545 
2546     --Call the RBS Mapping API only if the rbs version id is not null
2547     IF l_rbs_version_id IS NOT NULL THEN
2548 
2549             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,'before PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs',3);
2550 
2551         PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs(
2552          p_budget_version_id           => l_budget_version_id
2553         ,p_resource_list_id            => l_resource_list_id
2554         ,p_rbs_version_id              => l_rbs_version_id
2555         ,p_calling_process             => 'RBS_REFRESH'
2556         ,p_calling_context             => 'PLSQL'
2557         ,p_process_code                => 'RBS_MAP'
2558         ,p_calling_mode                => 'PLSQL_TABLE'
2559         ,p_init_msg_list_flag          => 'N'
2560         ,p_commit_flag                 => 'N'
2561         ,p_TXN_SOURCE_ID_tab           => l_eligible_rlm_ids_tbl
2562         ,p_TXN_SOURCE_TYPE_CODE_tab    => l_txn_src_typ_code_rbs_prm_tbl
2563         ,p_PERSON_ID_tab               => l_person_id_tbl
2564         ,p_JOB_ID_tab                  => l_job_id_tbl
2565         ,p_ORGANIZATION_ID_tab         => l_organization_id_tbl
2566         ,p_VENDOR_ID_tab               => l_supplier_id_tbl
2567         ,p_EXPENDITURE_TYPE_tab        => l_expenditure_type_tbl
2568         ,p_EVENT_TYPE_tab              => l_event_type_tbl
2569         ,p_EXPENDITURE_CATEGORY_tab    => l_expenditure_category_tbl
2570         ,p_REVENUE_CATEGORY_CODE_tab   => l_revenue_category_code_tbl
2571         ,p_PROJECT_ROLE_ID_tab         => l_project_role_id_tbl
2572         ,p_RESOURCE_CLASS_CODE_tab     => l_resource_class_code_tbl
2573         ,p_ITEM_CATEGORY_ID_tab        => l_item_category_id_tbl
2574         ,p_PERSON_TYPE_CODE_tab        => l_person_type_code_tbl
2575         ,p_BOM_RESOURCE_ID_tab         => l_bom_resource_id_tbl
2576         ,p_NON_LABOR_RESOURCE_tab      => l_non_labor_resource_tbl -- Bug 3711741
2577         ,p_INVENTORY_ITEM_ID_tab       => l_inventory_item_id_tbl -- Bug 3698596
2578         ,x_txn_source_id_tab           => l_txn_source_id_tbl
2579         ,x_res_list_member_id_tab      => l_res_list_member_id_tbl
2580         ,x_rbs_element_id_tab          => l_rbs_element_id_tbl
2581         ,x_txn_accum_header_id_tab     => l_txn_accum_header_id_tbl
2582         ,x_return_status               => x_return_status
2583         ,x_msg_count                   => x_msg_count
2584         ,x_msg_data                    => x_msg_data);
2585 
2586         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2587 
2588             IF l_debug_mode = 'Y' THEN
2589                pa_debug.g_err_stage:='Called API PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs returned error';
2590                pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2591             END IF;
2592             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2593 
2594         END IF;
2595 
2596     END IF; --IF l_rbs_version_id IS NOT NULL THEN
2597 
2598 
2599     --Call the rbs mapping API for the rlm ids obtained above
2600 
2601     l_trace_stage := 320;
2602     --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2603     --------------------------------------------------------------------
2604     -- Calling procedure abcd.get_multiple_resource_defaults to get the
2605     -- resource defaults for the rlm ids passed
2606     -- Please note that this API call will be modified, once the API is
2607     -- finalised.
2608     --                                      - ENDS
2609     --------------------------------------------------------------------
2610 
2611 
2612     -------------------------------------------------------------------------
2613     -- For p_context = TASK_ASSIGNMENTS  - Processing Starts Here
2614     -------------------------------------------------------------------------
2615     l_trace_stage := 330;
2616 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2617     IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
2618     l_trace_stage := 340;
2619 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2620         IF l_debug_mode = 'Y' THEN
2621             pa_debug.g_err_stage:='Doing processing for TASK ASSIGNMENTS : p_context is'|| p_context;
2622             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2623         END IF;
2624         -------------------------------------------------------------------------
2625         -- To call Task Validation API we populate the PLSql tables with task
2626         -- and resource data.
2627         -------------------------------------------------------------------------
2628 
2629         IF l_debug_mode = 'Y' THEN
2630             pa_debug.g_err_stage:='Populating PlSql table with Task Data';
2631             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2632         END IF;
2633 
2634         -----------------------------------------------------------------
2635         -- Populating Table of task_rec_type
2636         -----------------------------------------------------------------
2637         FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
2638             l_trace_stage := 350;
2639             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2640 
2641             l_task_rec_tbl(i).project_id := p_project_id;
2642             l_task_rec_tbl(i).struct_elem_version_id := p_struct_elem_version_id;
2643             l_task_rec_tbl(i).task_elem_version_id := p_task_elem_version_id_tbl(i);
2644             IF p_task_name_tbl.EXISTS(i) THEN
2645                 l_task_rec_tbl(i).task_name := p_task_name_tbl(i);
2646             END IF;
2647 
2648             IF p_task_number_tbl.EXISTS(i) THEN
2649                 l_task_rec_tbl(i).task_number := p_task_number_tbl(i);
2650             END IF;
2651 
2652             IF p_start_date_tbl.EXISTS(i) THEN
2653                 l_task_rec_tbl(i).start_date := p_start_date_tbl(i);
2654             END IF;
2655 
2656             IF p_end_date_tbl.EXISTS(i) THEN
2657                 l_task_rec_tbl(i).end_date  := p_end_date_tbl(i);
2658             END IF;
2659 
2660             IF p_planned_people_effort_tbl.EXISTS(i) THEN
2661                 l_task_rec_tbl(i).planned_people_effort := p_planned_people_effort_tbl(i);
2662             END IF;
2663 
2664             IF p_latest_eff_pub_flag_tbl.EXISTS(i) THEN
2665                 l_task_rec_tbl(i).latest_eff_pub_flag  := p_latest_eff_pub_flag_tbl(i);
2666             END IF;
2667             l_trace_stage := 360;
2668             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2669         END LOOP;
2670         l_trace_stage := 370;
2671         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2672 
2673 
2674         -----------------------------------------------------------------
2675         -- Populating Table of resource_rec_type
2676         -----------------------------------------------------------------
2677 
2678         IF l_debug_mode = 'Y' THEN
2679             pa_debug.g_err_stage:='Populating PlSql table with Resource Data';
2680             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2681         END IF;
2682 
2683         l_trace_stage := 380;
2684         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2685         FOR i IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST LOOP
2686             l_trace_stage := 390;
2687             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2688 
2689             l_resource_rec_tbl(i).resource_list_member_id := l_eligible_rlm_ids_tbl(i);
2690 
2691             IF p_project_assignment_id_tbl.EXISTS(i) THEN
2692                 l_resource_rec_tbl(i).project_assignment_id := p_project_assignment_id_tbl(i);
2693             END IF;
2694 
2695             IF l_resource_class_flag_tbl.EXISTS(i) THEN
2696                 l_resource_rec_tbl(i).resource_class_flag := l_resource_class_flag_tbl(i);
2697             END IF;
2698 
2699             IF l_resource_class_code_tbl.EXISTS(i) THEN
2700                 l_resource_rec_tbl(i).resource_class_code := l_resource_class_code_tbl(i);
2701             END IF;
2702 
2703             IF l_resource_class_id_tbl.EXISTS(i) THEN
2704                l_resource_rec_tbl(i).resource_class_id := l_resource_class_id_tbl(i);
2705             END IF;
2706 
2707             IF l_res_type_code_tbl.EXISTS(i) THEN
2708                l_resource_rec_tbl(i).res_type_code := l_res_type_code_tbl(i);
2709             END IF;
2710 
2711             IF l_person_id_tbl.EXISTS(i) THEN
2712                 l_resource_rec_tbl(i).person_id := l_person_id_tbl(i);
2713             END IF;
2714 
2715             IF l_job_id_tbl.EXISTS(i) THEN
2716                 l_resource_rec_tbl(i).job_id := l_job_id_tbl(i);
2717             END IF;
2718 
2719             IF l_person_type_code_tbl.EXISTS(i) THEN
2720                 l_resource_rec_tbl(i).person_type_code := l_person_type_code_tbl(i);
2721             END IF;
2722 
2723             IF l_bom_resource_id_tbl.EXISTS(i) THEN
2724                l_resource_rec_tbl(i).bom_resource_id := l_bom_resource_id_tbl(i);
2725             END IF;
2726 
2727             IF l_inventory_item_id_tbl.EXISTS(i) THEN
2728                l_resource_rec_tbl(i).inventory_item_id := l_inventory_item_id_tbl(i);
2729             END IF;
2730 
2731             IF l_item_category_id_tbl.EXISTS(i) THEN
2732                l_resource_rec_tbl(i).item_category_id := l_item_category_id_tbl(i);
2733             END IF;
2734 
2735             IF l_project_role_id_tbl.EXISTS(i) THEN
2736                 l_resource_rec_tbl(i).project_role_id := l_project_role_id_tbl(i);
2737             END IF;
2738 
2739             IF l_organization_id_tbl.EXISTS(i) THEN
2740                 l_resource_rec_tbl(i).organization_id := l_organization_id_tbl(i);
2741             END IF;
2742 
2743             IF l_fc_res_type_code_tbl.EXISTS(i) THEN
2744                 l_resource_rec_tbl(i).fc_res_type_code := l_fc_res_type_code_tbl(i);
2745             END IF;
2746 
2747             IF l_expenditure_type_tbl.EXISTS(i) THEN
2748                 l_resource_rec_tbl(i).expenditure_type := l_expenditure_type_tbl(i);
2749             END IF;
2750 
2751             IF l_expenditure_category_tbl.EXISTS(i) THEN
2752                 l_resource_rec_tbl(i).expenditure_category := l_expenditure_category_tbl(i);
2753             END IF;
2754 
2755             IF l_event_type_tbl.EXISTS(i) THEN
2756                 l_resource_rec_tbl(i).event_type := l_event_type_tbl(i);
2757             END IF;
2758 
2759             IF l_revenue_category_code_tbl.EXISTS(i) THEN
2760                 l_resource_rec_tbl(i).revenue_category_code := l_revenue_category_code_tbl(i);
2761             END IF;
2762 
2763             IF l_supplier_id_tbl.EXISTS(i) THEN
2764                 l_resource_rec_tbl(i).supplier_id := l_supplier_id_tbl(i);
2765             END IF;
2766 
2767             IF l_unit_of_measure_tbl.EXISTS(i) THEN
2768                 l_resource_rec_tbl(i).unit_of_measure := l_unit_of_measure_tbl(i);
2769             END IF;
2770 
2771             IF l_spread_curve_id_tbl.EXISTS(i) THEN
2772                 l_resource_rec_tbl(i).spread_curve_id := l_spread_curve_id_tbl(i);
2773             END IF;
2774 
2775             IF l_etc_method_code_tbl.EXISTS(i) THEN
2776                 l_resource_rec_tbl(i).etc_method_code := l_etc_method_code_tbl(i);
2777             END IF;
2778 
2779             IF l_mfc_cost_type_id_tbl.EXISTS(i) THEN
2780                 l_resource_rec_tbl(i).mfc_cost_type_id := l_mfc_cost_type_id_tbl(i);
2781             END IF;
2782 
2783             IF l_incurred_by_res_flag_tbl.EXISTS(i) THEN
2784                 l_resource_rec_tbl(i).incurred_by_res_flag := l_incurred_by_res_flag_tbl(i);
2785             END IF;
2786 
2787             IF l_Incur_by_res_class_code_tbl.EXISTS(i) THEN
2788                 l_resource_rec_tbl(i).Incur_by_res_class_code := l_Incur_by_res_class_code_tbl(i);
2789             END IF;
2790 
2791             IF l_Incur_by_role_id_tbl.EXISTS(i) THEN
2792                 l_resource_rec_tbl(i).Incur_by_role_id := l_Incur_by_role_id_tbl(i);
2793             END IF;
2794 
2795             IF l_named_role_tbl.EXISTS(i) THEN
2796                 l_resource_rec_tbl(i).named_role := l_named_role_tbl(i);
2797             END IF;
2798 
2799             IF l_non_labor_resource_tbl.EXISTS(i) THEN
2800                 l_resource_rec_tbl(i).non_labor_resource := l_non_labor_resource_tbl(i);
2801             END IF;
2802 
2803             IF p_quantity_tbl.EXISTS(i) THEN
2804                 l_resource_rec_tbl(i).total_quantity := p_quantity_tbl(i);
2805             END IF;
2806 
2807             IF l_unplanned_flag_tbl.EXISTS(i) THEN
2808                 l_resource_rec_tbl(i).unplanned_flag := l_unplanned_flag_tbl(i);
2809             END IF;
2810 
2811             -- Bug 3793623
2812             IF p_planning_start_date_tbl.EXISTS(i) THEN
2813                 l_resource_rec_tbl(i).planning_start_date := p_planning_start_date_tbl(i);
2814             END IF;
2815 
2816             IF p_planning_end_date_tbl.EXISTS(i) THEN
2817                 l_resource_rec_tbl(i).planning_end_date := p_planning_end_date_tbl(i);
2818             END IF;
2819 
2820             --For Bug 3877875
2821             IF p_ATTRIBUTE_CATEGORY_tbl.EXISTS(i) THEN
2822                 l_resource_rec_tbl(i).ATTRIBUTE_CATEGORY := p_ATTRIBUTE_CATEGORY_tbl(i);
2823             END IF;
2824 
2825             IF p_ATTRIBUTE1.EXISTS(i) THEN
2826                 l_resource_rec_tbl(i).ATTRIBUTE1 := p_ATTRIBUTE1(i);
2827             END IF;
2828 
2829             IF p_ATTRIBUTE2.EXISTS(i) THEN
2830                 l_resource_rec_tbl(i).ATTRIBUTE2 := p_ATTRIBUTE2(i);
2831             END IF;
2832 
2833             IF p_ATTRIBUTE3.EXISTS(i) THEN
2834                 l_resource_rec_tbl(i).ATTRIBUTE3 := p_ATTRIBUTE3(i);
2835             END IF;
2836 
2837             IF p_ATTRIBUTE4.EXISTS(i) THEN
2838                 l_resource_rec_tbl(i).ATTRIBUTE4 := p_ATTRIBUTE4(i);
2839             END IF;
2840 
2841             IF p_ATTRIBUTE5.EXISTS(i) THEN
2842                 l_resource_rec_tbl(i).ATTRIBUTE5 := p_ATTRIBUTE5(i);
2843             END IF;
2844 
2845             IF p_ATTRIBUTE6.EXISTS(i) THEN
2846                 l_resource_rec_tbl(i).ATTRIBUTE6 := p_ATTRIBUTE6(i);
2847             END IF;
2848 
2849             IF p_ATTRIBUTE7.EXISTS(i) THEN
2850                 l_resource_rec_tbl(i).ATTRIBUTE7 := p_ATTRIBUTE7(i);
2851             END IF;
2852 
2853             IF p_ATTRIBUTE8.EXISTS(i) THEN
2854                 l_resource_rec_tbl(i).ATTRIBUTE8 := p_ATTRIBUTE8(i);
2855             END IF;
2856 
2857             IF p_ATTRIBUTE9.EXISTS(i) THEN
2858                 l_resource_rec_tbl(i).ATTRIBUTE9 := p_ATTRIBUTE9(i);
2859             END IF;
2860 
2861             IF p_ATTRIBUTE10.EXISTS(i) THEN
2862                 l_resource_rec_tbl(i).ATTRIBUTE10 := p_ATTRIBUTE10(i);
2863             END IF;
2864 
2865             IF p_ATTRIBUTE11.EXISTS(i) THEN
2866                 l_resource_rec_tbl(i).ATTRIBUTE11 := p_ATTRIBUTE11(i);
2867             END IF;
2868 
2869             IF p_ATTRIBUTE12.EXISTS(i) THEN
2870                 l_resource_rec_tbl(i).ATTRIBUTE12 := p_ATTRIBUTE12(i);
2871             END IF;
2872 
2873             IF p_ATTRIBUTE13.EXISTS(i) THEN
2874                 l_resource_rec_tbl(i).ATTRIBUTE13 := p_ATTRIBUTE13(i);
2875             END IF;
2876 
2877             IF p_ATTRIBUTE14.EXISTS(i) THEN
2878                 l_resource_rec_tbl(i).ATTRIBUTE14 := p_ATTRIBUTE14(i);
2879             END IF;
2880 
2881             IF p_ATTRIBUTE15.EXISTS(i) THEN
2882                 l_resource_rec_tbl(i).ATTRIBUTE15 := p_ATTRIBUTE15(i);
2883             END IF;
2884 
2885             IF p_ATTRIBUTE16.EXISTS(i) THEN
2886                 l_resource_rec_tbl(i).ATTRIBUTE16 := p_ATTRIBUTE16(i);
2887             END IF;
2888 
2889             IF p_ATTRIBUTE17.EXISTS(i) THEN
2890                 l_resource_rec_tbl(i).ATTRIBUTE17 := p_ATTRIBUTE17(i);
2891             END IF;
2892 
2893             IF p_ATTRIBUTE18.EXISTS(i) THEN
2894                 l_resource_rec_tbl(i).ATTRIBUTE18 := p_ATTRIBUTE18(i);
2895             END IF;
2896 
2897             IF p_ATTRIBUTE19.EXISTS(i) THEN
2898                 l_resource_rec_tbl(i).ATTRIBUTE19 := p_ATTRIBUTE19(i);
2899             END IF;
2900 
2901             IF p_ATTRIBUTE20.EXISTS(i) THEN
2902                 l_resource_rec_tbl(i).ATTRIBUTE20 := p_ATTRIBUTE20(i);
2903             END IF;
2904 
2905             IF p_ATTRIBUTE21.EXISTS(i) THEN
2906                 l_resource_rec_tbl(i).ATTRIBUTE21 := p_ATTRIBUTE21(i);
2907             END IF;
2908 
2909             IF p_ATTRIBUTE22.EXISTS(i) THEN
2910                 l_resource_rec_tbl(i).ATTRIBUTE22 := p_ATTRIBUTE22(i);
2911             END IF;
2912 
2913             IF p_ATTRIBUTE23.EXISTS(i) THEN
2914                 l_resource_rec_tbl(i).ATTRIBUTE23 := p_ATTRIBUTE23(i);
2915             END IF;
2916 
2917             IF p_ATTRIBUTE24.EXISTS(i) THEN
2918                 l_resource_rec_tbl(i).ATTRIBUTE24 := p_ATTRIBUTE24(i);
2919             END IF;
2920 
2921             IF p_ATTRIBUTE25.EXISTS(i) THEN
2922                 l_resource_rec_tbl(i).ATTRIBUTE25 := p_ATTRIBUTE25(i);
2923             END IF;
2924 
2925             IF p_ATTRIBUTE26.EXISTS(i) THEN
2926                 l_resource_rec_tbl(i).ATTRIBUTE26 := p_ATTRIBUTE26(i);
2927             END IF;
2928 
2929             IF p_ATTRIBUTE27.EXISTS(i) THEN
2930                 l_resource_rec_tbl(i).ATTRIBUTE27 := p_ATTRIBUTE27(i);
2931             END IF;
2932 
2933             IF p_ATTRIBUTE28.EXISTS(i) THEN
2934                 l_resource_rec_tbl(i).ATTRIBUTE28 := p_ATTRIBUTE28(i);
2935             END IF;
2936 
2937             IF p_ATTRIBUTE29.EXISTS(i) THEN
2938                 l_resource_rec_tbl(i).ATTRIBUTE29 := p_ATTRIBUTE29(i);
2939             END IF;
2940 
2941             IF p_ATTRIBUTE30.EXISTS(i) THEN
2942                 l_resource_rec_tbl(i).ATTRIBUTE30 := p_ATTRIBUTE30(i);
2943             END IF;
2944             --For bug 3877875
2945 
2946             --For bug 3948128
2947             IF p_scheduled_delay.EXISTS(i) THEN
2948                 l_resource_rec_tbl(i).scheduled_delay := p_scheduled_delay(i);
2949             END IF;
2950 
2951 
2952     l_trace_stage := 400;
2953 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2954 
2955         END LOOP;
2956     l_trace_stage := 410;
2957 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2958 
2959 
2960         -------------------------------------------------
2961         -- Calling Task validation API
2962         -------------------------------------------------
2963         IF l_debug_mode = 'Y' THEN
2964             pa_debug.g_err_stage:='Calling API pa_task_assignment_utils.Validate_Create_Assignment';
2965             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2966         END IF;
2967 
2968         l_trace_stage := 420;
2969         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2970         --dbms_output.put_line('qty bef is '||l_resource_rec_tbl(1).planning_start_Date);
2971         --dbms_output.put_line('qty aft is '||l_resource_rec_tbl(1).planning_end_date);
2972         -- For Bug 3665097 : New param p_one_to_one_mapping_flag added below.
2973         -- This will be synced up with Validate_Create_Assignment changes.
2974         pa_task_assignment_utils.Validate_Create_Assignment(
2975         p_calling_context              => p_calling_context,     -- Added for Bug 6856934
2976         p_one_to_one_mapping_flag      => p_one_to_one_mapping_flag,
2977         p_task_rec_tbl                 => l_task_rec_tbl,
2978         p_task_assignment_tbl          => l_resource_rec_tbl,
2979         x_del_task_level_rec_code_tbl  => l_del_task_level_rec_code_tbl,  --Paramater obsoletted , not in use any more
2980         x_return_status                => l_return_status);
2981         --dbms_output.put_line('qty aft is '||l_resource_rec_tbl(1).planning_start_date);
2982         --dbms_output.put_line('qty aft is '||l_resource_rec_tbl(1).planning_end_date);
2983 
2984         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2985             IF l_debug_mode = 'Y' THEN
2986                 pa_debug.g_err_stage:='Called API pa_task_assignment_utils.Validate_Create_Assignment returned error';
2987                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2988             END IF;
2989             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2990         END IF;
2991         IF l_debug_mode = 'Y' THEN
2992             pa_debug.g_err_stage:='Returned from pa_task_assignment_utils.Validate_Create_Assignment';
2993             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2994         END IF;
2995 
2996         l_trace_stage := 430;
2997         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2998 
2999         -----------------------------------------------------------------------
3000         -- Check if the name of records in l_del_task_level_rec_code_tbl is same
3001         -- as the number of records in   p_task_elem_version_id_tbl - Starts
3002         -----------------------------------------------------------------------
3003 
3004         l_trace_stage := 460;
3005         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3006         -----------------------------------------------------------------------
3007         -- The resource data tables shall be re-populated by the in out parameter
3008         -- parameter l_resource_rec_tbl, in the API call pa_task_assignment_utils.
3009         -- Validate_Create_Assignment above. So deleting alll existing data from
3010         -- the resource data tables.
3011         -----------------------------------------------------------------------
3012 
3013         IF l_debug_mode = 'Y' THEN
3014             pa_debug.g_err_stage:='Deleting Data from all resource PLSql tables';
3015             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3016         END IF;
3017 
3018         l_trace_stage := 450;
3019 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3020 
3021         -----------------------------------------------------------------------
3022         -- Repopulating all the resource data tables from the output parameter
3023         -- table l_resource_rec_tbl of the above API call pa_task_assignment_utils.
3024         -- Validate_Create_Assignment
3025         -----------------------------------------------------------------------
3026 
3027         IF l_debug_mode = 'Y' THEN
3028            pa_debug.g_err_stage:='Populating resource data tables from the output parameter table l_resource_rec_tbl';
3029            pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3030         END IF;
3031 
3032         FOR i IN l_resource_rec_tbl.FIRST .. l_resource_rec_tbl.LAST LOOP
3033             l_trace_stage := 460;
3034             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3035 
3036             IF l_resource_rec_tbl.EXISTS(i) THEN
3037 
3038                 IF l_resource_rec_tbl(i).resource_list_member_id = FND_API.G_MISS_NUM THEN
3039                     l_eligible_rlm_ids_tbl(i) := NULL;
3040                 ELSE
3041                     l_eligible_rlm_ids_tbl(i) := l_resource_rec_tbl(i).resource_list_member_id;
3042                 END IF;
3043 
3044                 IF l_resource_rec_tbl(i).resource_class_flag = FND_API.G_MISS_CHAR THEN
3045                     l_resource_class_flag_tbl(i) := NULL;
3046                 ELSE
3047                     l_resource_class_flag_tbl(i) := l_resource_rec_tbl(i).resource_class_flag;
3048                 END IF;
3049 
3050                 IF l_resource_rec_tbl(i).resource_class_code = FND_API.G_MISS_CHAR THEN
3051                     l_resource_class_code_tbl(i) := NULL;
3052                 ELSE
3053                     l_resource_class_code_tbl(i) := l_resource_rec_tbl(i).resource_class_code;
3054                 END IF;
3055 
3056                 IF l_resource_rec_tbl(i).resource_class_id = FND_API.G_MISS_NUM THEN
3057                     l_resource_class_id_tbl(i) := NULL;
3058                 ELSE
3059                     l_resource_class_id_tbl(i) := l_resource_rec_tbl(i).resource_class_id;
3060                 END IF;
3061 
3062                 IF l_resource_rec_tbl(i).res_type_code = FND_API.G_MISS_CHAR THEN
3063                     l_res_type_code_tbl(i) := NULL;
3064                 ELSE
3065                     l_res_type_code_tbl(i) := l_resource_rec_tbl(i).res_type_code;
3066                 END IF;
3067 
3068                 IF l_resource_rec_tbl(i).person_id = FND_API.G_MISS_NUM THEN
3069                     l_person_id_tbl(i) := NULL;
3070                 ELSE
3071                     l_person_id_tbl(i) := l_resource_rec_tbl(i).person_id;
3072                 END IF;
3073 
3074                 IF l_resource_rec_tbl(i).job_id = FND_API.G_MISS_NUM THEN
3075                     l_job_id_tbl(i) := NULL;
3076                 ELSE
3077                     l_job_id_tbl(i) := l_resource_rec_tbl(i).job_id;
3078                 END IF;
3079 
3080                 IF l_resource_rec_tbl(i).person_type_code = FND_API.G_MISS_CHAR THEN
3081                     l_person_type_code_tbl(i) := NULL;
3082                 ELSE
3083                     l_person_type_code_tbl(i) := l_resource_rec_tbl(i).person_type_code;
3084                 END IF;
3085 
3086                 IF l_resource_rec_tbl(i).bom_resource_id = FND_API.G_MISS_NUM THEN
3087                     l_bom_resource_id_tbl(i) := NULL;
3088                 ELSE
3089                     l_bom_resource_id_tbl(i) := l_resource_rec_tbl(i).bom_resource_id;
3090                 END IF;
3091 
3092                 IF l_resource_rec_tbl(i).inventory_item_id = FND_API.G_MISS_NUM THEN
3093                     l_inventory_item_id_tbl(i) := NULL;
3094                 ELSE
3095                     l_inventory_item_id_tbl(i) := l_resource_rec_tbl(i).inventory_item_id;
3096                 END IF;
3097 
3098                 IF l_resource_rec_tbl(i).item_category_id = FND_API.G_MISS_NUM THEN
3099                     l_item_category_id_tbl(i) := NULL;
3100                 ELSE
3101                     l_item_category_id_tbl(i) := l_resource_rec_tbl(i).item_category_id;
3102                 END IF;
3103 
3104                 IF l_resource_rec_tbl(i).project_role_id = FND_API.G_MISS_NUM THEN
3105                     l_project_role_id_tbl(i) := NULL;
3106                 ELSE
3107                     l_project_role_id_tbl(i) := l_resource_rec_tbl(i).project_role_id;
3108                 END IF;
3109 
3110                 IF l_resource_rec_tbl(i).organization_id = FND_API.G_MISS_NUM THEN
3111                     l_organization_id_tbl(i) := NULL;
3112                 ELSE
3113                     l_organization_id_tbl(i) := l_resource_rec_tbl(i).organization_id;
3114                 END IF;
3115 
3116                 IF l_resource_rec_tbl(i).fc_res_type_code = FND_API.G_MISS_CHAR THEN
3117                     l_fc_res_type_code_tbl(i) := NULL;
3118                 ELSE
3119                     l_fc_res_type_code_tbl(i) := l_resource_rec_tbl(i).fc_res_type_code;
3120                 END IF;
3121 
3122                 IF l_resource_rec_tbl(i).expenditure_type = FND_API.G_MISS_CHAR THEN
3123                     l_expenditure_type_tbl(i) := NULL;
3124                 ELSE
3125                     l_expenditure_type_tbl(i) := l_resource_rec_tbl(i).expenditure_type;
3126                 END IF;
3127 
3128                 IF l_resource_rec_tbl(i).expenditure_category = FND_API.G_MISS_CHAR THEN
3129                     l_expenditure_category_tbl(i) := NULL;
3130                 ELSE
3131                     l_expenditure_category_tbl(i) := l_resource_rec_tbl(i).expenditure_category;
3132                 END IF;
3133 
3134                 IF l_resource_rec_tbl(i).event_type = FND_API.G_MISS_CHAR THEN
3135                     l_event_type_tbl(i) := NULL;
3136                 ELSE
3137                     l_event_type_tbl(i) := l_resource_rec_tbl(i).event_type;
3138                 END IF;
3139 
3140                 IF l_resource_rec_tbl(i).revenue_category_code = FND_API.G_MISS_CHAR THEN
3141                     l_revenue_category_code_tbl(i) := NULL;
3142                 ELSE
3143                     l_revenue_category_code_tbl(i) := l_resource_rec_tbl(i).revenue_category_code;
3144                 END IF;
3145 
3146                 IF l_resource_rec_tbl(i).supplier_id = FND_API.G_MISS_NUM THEN
3147                     l_supplier_id_tbl(i) := NULL;
3148                 ELSE
3149                     l_supplier_id_tbl(i) := l_resource_rec_tbl(i).supplier_id;
3150                 END IF;
3151 
3152                 IF l_resource_rec_tbl(i).unit_of_measure = FND_API.G_MISS_CHAR THEN
3153                     l_unit_of_measure_tbl(i) := NULL;
3154                 ELSE
3155                     l_unit_of_measure_tbl(i) := l_resource_rec_tbl(i).unit_of_measure;
3156                 END IF;
3157 
3158                 IF l_resource_rec_tbl(i).spread_curve_id = FND_API.G_MISS_NUM THEN
3159                     l_spread_curve_id_tbl(i) := NULL;
3160                 ELSE
3161                     l_spread_curve_id_tbl(i) := l_resource_rec_tbl(i).spread_curve_id;
3162                 END IF;
3163 
3164                 IF l_resource_rec_tbl(i).etc_method_code = FND_API.G_MISS_CHAR THEN
3165                     l_etc_method_code_tbl(i) := NULL;
3166                 ELSE
3167                     l_etc_method_code_tbl(i) := l_resource_rec_tbl(i).etc_method_code;
3168                 END IF;
3169 
3170                 IF l_resource_rec_tbl(i).mfc_cost_type_id = FND_API.G_MISS_NUM THEN
3171                     l_mfc_cost_type_id_tbl(i) := NULL;
3172                 ELSE
3173                     l_mfc_cost_type_id_tbl(i) := l_resource_rec_tbl(i).mfc_cost_type_id;
3174                 END IF;
3175 
3176                 IF l_resource_rec_tbl(i).procure_resource_flag = FND_API.G_MISS_CHAR THEN
3177                     l_procure_resource_flag_tbl(i) := NULL;
3178                 ELSE
3179                     l_procure_resource_flag_tbl(i) := l_resource_rec_tbl(i).procure_resource_flag;
3180                 END IF;
3181 
3182                 IF l_resource_rec_tbl(i).incurred_by_res_flag = FND_API.G_MISS_CHAR THEN
3183                     l_incurred_by_res_flag_tbl(i) := NULL;
3184                 ELSE
3185                     l_incurred_by_res_flag_tbl(i) := l_resource_rec_tbl(i).incurred_by_res_flag;
3186                 END IF;
3187 
3188                 IF l_resource_rec_tbl(i).Incur_by_res_class_code = FND_API.G_MISS_CHAR THEN
3189                     l_Incur_by_res_class_code_tbl(i) := NULL;
3190                 ELSE
3191                     l_Incur_by_res_class_code_tbl(i) := l_resource_rec_tbl(i).Incur_by_res_class_code;
3192                 END IF;
3193 
3194                 IF l_resource_rec_tbl(i).Incur_by_role_id = FND_API.G_MISS_NUM THEN
3195                     l_Incur_by_role_id_tbl(i) := NULL;
3196                 ELSE
3197                     l_Incur_by_role_id_tbl(i) := l_resource_rec_tbl(i).Incur_by_role_id;
3198                 END IF;
3199 
3200                 IF l_resource_rec_tbl(i).named_role = FND_API.G_MISS_CHAR THEN
3201                     l_named_role_tbl(i) := NULL;
3202                 ELSE
3203                     l_named_role_tbl(i) := l_resource_rec_tbl(i).named_role;
3204                 END IF;
3205 
3206                 IF l_resource_rec_tbl(i).non_labor_resource = FND_API.G_MISS_CHAR THEN
3207                     l_non_labor_resource_tbl(i) := NULL;
3208                 ELSE
3209                     l_non_labor_resource_tbl(i) := l_resource_rec_tbl(i).non_labor_resource;
3210                 END IF;
3211 
3212                 IF l_resource_rec_tbl(i).resource_assignment_id = FND_API.G_MISS_NUM THEN
3213                     l_resource_assignment_id_tbl(i) := NULL;
3214                 ELSE
3215                     l_resource_assignment_id_tbl(i) := l_resource_rec_tbl(i).resource_assignment_id;
3216                 END IF;
3217 
3218                 IF l_resource_rec_tbl(i).assignment_description = FND_API.G_MISS_CHAR THEN
3219                     l_assignment_description_tbl(i) := NULL;
3220                 ELSE
3221                     l_assignment_description_tbl(i) := l_resource_rec_tbl(i).assignment_description;
3222                 END IF;
3223 
3224                 IF l_resource_rec_tbl(i).planning_resource_alias = FND_API.G_MISS_CHAR THEN
3225                     l_planning_resource_alias_tbl(i) := NULL;
3226                 ELSE
3227                     l_planning_resource_alias_tbl(i) := l_resource_rec_tbl(i).planning_resource_alias;
3228                 END IF;
3229 
3230                 IF l_resource_rec_tbl(i).resource_name = FND_API.G_MISS_CHAR THEN
3231                     l_resource_name_tbl(i) := NULL;
3232                 ELSE
3233                     l_resource_name_tbl(i) := l_resource_rec_tbl(i).resource_name;
3234                 END IF;
3235 
3236                 IF l_resource_rec_tbl(i).project_role_name = FND_API.G_MISS_CHAR THEN
3237                     l_project_role_name_tbl(i) := NULL;
3238                 ELSE
3239                     l_project_role_name_tbl(i) := l_resource_rec_tbl(i).project_role_name;
3240                 END IF;
3241 
3242                 IF l_resource_rec_tbl(i).organization_name = FND_API.G_MISS_CHAR THEN
3243                     l_organization_name_tbl(i) := NULL;
3244                 ELSE
3245                     l_organization_name_tbl(i) := l_resource_rec_tbl(i).organization_name;
3246                 END IF;
3247 
3248                 IF l_resource_rec_tbl(i).financial_category_code = FND_API.G_MISS_CHAR THEN
3249                     l_financial_category_code_tbl(i) := NULL;
3250                 ELSE
3251                     l_financial_category_code_tbl(i) := l_resource_rec_tbl(i).financial_category_code;
3252                 END IF;
3253 
3254                 IF l_resource_rec_tbl(i).project_assignment_id = FND_API.G_MISS_NUM THEN
3255                     l_project_assignment_id_tbl(i) := NULL;
3256                 ELSE
3257                     l_project_assignment_id_tbl(i) := l_resource_rec_tbl(i).project_assignment_id;
3258                 END IF;
3259 
3260                 IF l_resource_rec_tbl(i).use_task_schedule_flag = FND_API.G_MISS_CHAR THEN
3261                     l_use_task_schedule_flag_tbl(i) := NULL;
3262                 ELSE
3263                     l_use_task_schedule_flag_tbl(i) := l_resource_rec_tbl(i).use_task_schedule_flag;
3264                 END IF;
3265 
3266                 IF l_resource_rec_tbl(i).planning_start_date = FND_API.G_MISS_DATE THEN
3267                     l_planning_start_date_tbl(i) := NULL;
3268                 ELSE
3269                     l_planning_start_date_tbl(i) := l_resource_rec_tbl(i).planning_start_date;
3270                 END IF;
3271 
3272                 IF l_resource_rec_tbl(i).planning_end_date = FND_API.G_MISS_DATE THEN
3273                     l_planning_end_date_tbl(i) := NULL;
3274                 ELSE
3275                     l_planning_end_date_tbl(i) := l_resource_rec_tbl(i).planning_end_date;
3276                 END IF;
3277 
3278                 IF l_resource_rec_tbl(i).schedule_start_date = FND_API.G_MISS_DATE THEN
3279                     l_schedule_start_date_tbl(i) := NULL;
3280                 ELSE
3281                     l_schedule_start_date_tbl(i) := l_resource_rec_tbl(i).schedule_start_date;
3282                 END IF;
3283 
3284                 IF l_resource_rec_tbl(i).schedule_end_date = FND_API.G_MISS_DATE THEN
3285                     l_schedule_end_date_tbl(i) := NULL;
3286                 ELSE
3287                     l_schedule_end_date_tbl(i) := l_resource_rec_tbl(i).schedule_end_date;
3288                 END IF;
3289 
3290                 IF l_resource_rec_tbl(i).supplier_name = FND_API.G_MISS_CHAR THEN
3291                     l_supplier_name_tbl(i) := NULL;
3292                 ELSE
3293                     l_supplier_name_tbl(i) := l_resource_rec_tbl(i).supplier_name;
3294                 END IF;
3295 
3296                 IF l_resource_rec_tbl(i).financial_category_name = FND_API.G_MISS_CHAR THEN
3297                     l_financial_category_name_tbl(i) := NULL;
3298                 ELSE
3299                     l_financial_category_name_tbl(i) := l_resource_rec_tbl(i).financial_category_name;
3300                 END IF;
3301 
3302                 IF l_resource_rec_tbl(i).sp_fixed_date = FND_API.G_MISS_DATE THEN
3303                     l_sp_fixed_date_tbl(i) := NULL;
3304                 ELSE
3305                     l_sp_fixed_date_tbl(i) := l_resource_rec_tbl(i).sp_fixed_date;
3306 -- Added validation rule for sp_fixed_date to lie between planning start date and planning end date for
3307 -- fixed curve spread curve id. - Bug 3607061 Starts. Please NOTE that fixed date spread curve id is
3308 -- SEEDED as 6, so we are able to hard code it below
3309 
3310                     IF l_debug_mode = 'Y' THEN
3311                        pa_debug.g_err_stage :='l_spread_curve_id_tbl - '||l_spread_curve_id_tbl(i);
3312                        pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3313 
3314                        pa_debug.g_err_stage :='l_sp_fixed_date_tbl'||l_sp_fixed_date_tbl(i);
3315                        pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3316 
3317                        pa_debug.g_err_stage :='l_planning_start_date_tbl'||l_planning_start_date_tbl(i);
3318                        pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3319 
3320                        pa_debug.g_err_stage :='l_planning_end_date_tbl'||l_planning_end_date_tbl(i);
3321                        pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3322                     END IF;
3323 
3324                     IF ((l_spread_curve_id_tbl(i) = l_fixed_date_sp_id) AND
3325                         (l_sp_fixed_date_tbl(i) IS NOT NULL) AND
3326                         (l_sp_fixed_date_tbl(i) NOT BETWEEN l_planning_start_date_tbl(i) AND l_planning_end_date_tbl(i)))THEN
3327                            IF l_debug_mode = 'Y' THEN
3328                               pa_debug.g_err_stage :='Sp Fixed Date not between planning start date and End Date';
3329                               pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3330                            END IF;
3331                        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3332                                             p_msg_name       => 'PA_FP_SP_FIXED_DATE_OUT');
3333                        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3334                     END IF;
3335 -- Bug 3607061 Ends
3336                 END IF;
3337 
3338                 IF l_resource_rec_tbl(i).burdened_rate_override = FND_API.G_MISS_NUM THEN
3339                     l_burdened_rate_override_tbl(i) := NULL;
3340                 ELSE
3341                     l_burdened_rate_override_tbl(i) := l_resource_rec_tbl(i).burdened_rate_override;
3342                 END IF;
3343 
3344                 IF l_resource_rec_tbl(i).cost_rate_override = FND_API.G_MISS_NUM THEN
3345                     l_cost_rate_override_tbl(i) := NULL;
3346                 ELSE
3347                     l_cost_rate_override_tbl(i) := l_resource_rec_tbl(i).cost_rate_override;
3348                 END IF;
3349 
3350                 IF l_resource_rec_tbl(i).billable_percent = FND_API.G_MISS_NUM THEN
3351                     l_billable_percent_tbl(i) := NULL;
3352                 ELSE
3353                     l_billable_percent_tbl(i) := l_resource_rec_tbl(i).billable_percent;
3354                 END IF;
3355 
3356                 IF l_resource_rec_tbl(i).override_currency_code = FND_API.G_MISS_CHAR THEN
3357                     l_override_currency_code_tbl(i) := NULL;
3358                 ELSE
3359                     l_override_currency_code_tbl(i) := l_resource_rec_tbl(i).override_currency_code;
3360                 END IF;
3361 
3362                 IF l_resource_rec_tbl(i).total_quantity = FND_API.G_MISS_NUM THEN
3363                     l_total_quantity_tbl(i) := NULL;
3364                 ELSE
3365                     l_total_quantity_tbl(i) := l_resource_rec_tbl(i).total_quantity;
3366                 END IF;
3367 
3368                 IF l_resource_rec_tbl(i).ATTRIBUTE_CATEGORY = FND_API.G_MISS_CHAR THEN
3369                     l_ATTRIBUTE_CATEGORY_tbl(i) := NULL;
3370                 ELSE
3371                     l_ATTRIBUTE_CATEGORY_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE_CATEGORY;
3372                 END IF;
3373 
3374                 IF l_resource_rec_tbl(i).ATTRIBUTE1 = FND_API.G_MISS_CHAR THEN
3375                     l_ATTRIBUTE1_tbl(i) := NULL;
3376                 ELSE
3377                     l_ATTRIBUTE1_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE1;
3378                 END IF;
3379 
3380                 IF l_resource_rec_tbl(i).ATTRIBUTE2 = FND_API.G_MISS_CHAR THEN
3381                     l_ATTRIBUTE2_tbl(i) := NULL;
3382                 ELSE
3383                     l_ATTRIBUTE2_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE2;
3384                 END IF;
3385 
3386                 IF l_resource_rec_tbl(i).ATTRIBUTE3 = FND_API.G_MISS_CHAR THEN
3387                     l_ATTRIBUTE3_tbl(i) := NULL;
3388                 ELSE
3389                     l_ATTRIBUTE3_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE3;
3390                 END IF;
3391 
3392                 IF l_resource_rec_tbl(i).ATTRIBUTE4 = FND_API.G_MISS_CHAR THEN
3393                     l_ATTRIBUTE4_tbl(i) := NULL;
3394                 ELSE
3395                     l_ATTRIBUTE4_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE4;
3396                 END IF;
3397 
3398                 IF l_resource_rec_tbl(i).ATTRIBUTE5 = FND_API.G_MISS_CHAR THEN
3399                     l_ATTRIBUTE5_tbl(i) := NULL;
3400                 ELSE
3401                     l_ATTRIBUTE5_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE5;
3402                 END IF;
3403 
3404                 IF l_resource_rec_tbl(i).ATTRIBUTE6 = FND_API.G_MISS_CHAR THEN
3405                     l_ATTRIBUTE6_tbl(i) := NULL;
3406                 ELSE
3407                     l_ATTRIBUTE6_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE6;
3408                 END IF;
3409 
3410                 IF l_resource_rec_tbl(i).ATTRIBUTE7 = FND_API.G_MISS_CHAR THEN
3411                     l_ATTRIBUTE7_tbl(i) := NULL;
3412                 ELSE
3413                     l_ATTRIBUTE7_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE7;
3414                 END IF;
3415 
3416                 IF l_resource_rec_tbl(i).ATTRIBUTE8 = FND_API.G_MISS_CHAR THEN
3417                     l_ATTRIBUTE8_tbl(i) := NULL;
3418                 ELSE
3419                     l_ATTRIBUTE8_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE8;
3420                 END IF;
3421 
3422                 IF l_resource_rec_tbl(i).ATTRIBUTE9 = FND_API.G_MISS_CHAR THEN
3423                     l_ATTRIBUTE9_tbl(i) := NULL;
3424                 ELSE
3425                     l_ATTRIBUTE9_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE9;
3426                 END IF;
3427 
3428                 IF l_resource_rec_tbl(i).ATTRIBUTE10 = FND_API.G_MISS_CHAR THEN
3429                     l_ATTRIBUTE10_tbl(i) := NULL;
3430                 ELSE
3431                     l_ATTRIBUTE10_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE10;
3432                 END IF;
3433 
3434                 IF l_resource_rec_tbl(i).ATTRIBUTE11 = FND_API.G_MISS_CHAR THEN
3435                     l_ATTRIBUTE11_tbl(i) := NULL;
3436                 ELSE
3437                     l_ATTRIBUTE11_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE11;
3438                 END IF;
3439 
3440                 IF l_resource_rec_tbl(i).ATTRIBUTE12 = FND_API.G_MISS_CHAR THEN
3441                     l_ATTRIBUTE12_tbl(i) := NULL;
3442                 ELSE
3443                     l_ATTRIBUTE12_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE12;
3444                 END IF;
3445 
3446                 IF l_resource_rec_tbl(i).ATTRIBUTE13 = FND_API.G_MISS_CHAR THEN
3447                     l_ATTRIBUTE13_tbl(i) := NULL;
3448                 ELSE
3449                     l_ATTRIBUTE13_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE13;
3450                 END IF;
3451 
3452                 IF l_resource_rec_tbl(i).ATTRIBUTE14 = FND_API.G_MISS_CHAR THEN
3453                     l_ATTRIBUTE14_tbl(i) := NULL;
3454                 ELSE
3455                     l_ATTRIBUTE14_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE14;
3456                 END IF;
3457 
3458                 IF l_resource_rec_tbl(i).ATTRIBUTE15 = FND_API.G_MISS_CHAR THEN
3459                     l_ATTRIBUTE15_tbl(i) := NULL;
3460                 ELSE
3461                     l_ATTRIBUTE15_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE15;
3462                 END IF;
3463 
3464                 IF l_resource_rec_tbl(i).ATTRIBUTE16 = FND_API.G_MISS_CHAR THEN
3465                     l_ATTRIBUTE16_tbl(i) := NULL;
3466                 ELSE
3467                     l_ATTRIBUTE16_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE16;
3468                 END IF;
3469 
3470                 IF l_resource_rec_tbl(i).ATTRIBUTE17 = FND_API.G_MISS_CHAR THEN
3471                     l_ATTRIBUTE17_tbl(i) := NULL;
3472                 ELSE
3473                     l_ATTRIBUTE17_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE17;
3474                 END IF;
3475 
3476                 IF l_resource_rec_tbl(i).ATTRIBUTE18 = FND_API.G_MISS_CHAR THEN
3477                     l_ATTRIBUTE18_tbl(i) := NULL;
3478                 ELSE
3479                     l_ATTRIBUTE18_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE18;
3480                 END IF;
3481 
3482                 IF l_resource_rec_tbl(i).ATTRIBUTE19 = FND_API.G_MISS_CHAR THEN
3483                     l_ATTRIBUTE19_tbl(i) := NULL;
3484                 ELSE
3485                     l_ATTRIBUTE19_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE19;
3486                 END IF;
3487 
3488                 IF l_resource_rec_tbl(i).ATTRIBUTE20 = FND_API.G_MISS_CHAR THEN
3489                     l_ATTRIBUTE20_tbl(i) := NULL;
3490                 ELSE
3491                     l_ATTRIBUTE20_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE20;
3492                 END IF;
3493                 IF l_resource_rec_tbl(i).ATTRIBUTE21 = FND_API.G_MISS_CHAR THEN
3494                     l_ATTRIBUTE21_tbl(i) := NULL;
3495                 ELSE
3496                     l_ATTRIBUTE21_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE21;
3497                 END IF;
3498 
3499                 IF l_resource_rec_tbl(i).ATTRIBUTE22 = FND_API.G_MISS_CHAR THEN
3500                     l_ATTRIBUTE22_tbl(i) := NULL;
3501                 ELSE
3502                     l_ATTRIBUTE22_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE22;
3503                 END IF;
3504 
3505                 IF l_resource_rec_tbl(i).ATTRIBUTE23 = FND_API.G_MISS_CHAR THEN
3506                     l_ATTRIBUTE23_tbl(i) := NULL;
3507                 ELSE
3508                     l_ATTRIBUTE23_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE23;
3509                 END IF;
3510 
3511                 IF l_resource_rec_tbl(i).ATTRIBUTE24 = FND_API.G_MISS_CHAR THEN
3512                     l_ATTRIBUTE24_tbl(i) := NULL;
3513                 ELSE
3514                     l_ATTRIBUTE24_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE24;
3515                 END IF;
3516 
3517                 IF l_resource_rec_tbl(i).ATTRIBUTE25 = FND_API.G_MISS_CHAR THEN
3518                     l_ATTRIBUTE25_tbl(i) := NULL;
3519                 ELSE
3520                     l_ATTRIBUTE25_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE25;
3521                 END IF;
3522 
3523                 IF l_resource_rec_tbl(i).ATTRIBUTE26 = FND_API.G_MISS_CHAR THEN
3524                     l_ATTRIBUTE26_tbl(i) := NULL;
3525                 ELSE
3526                     l_ATTRIBUTE26_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE26;
3527                 END IF;
3528 
3529                 IF l_resource_rec_tbl(i).ATTRIBUTE27 = FND_API.G_MISS_CHAR THEN
3530                     l_ATTRIBUTE27_tbl(i) := NULL;
3531                 ELSE
3532                     l_ATTRIBUTE27_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE27;
3533                 END IF;
3534 
3535                 IF l_resource_rec_tbl(i).ATTRIBUTE28 = FND_API.G_MISS_CHAR THEN
3536                     l_ATTRIBUTE28_tbl(i) := NULL;
3537                 ELSE
3538                     l_ATTRIBUTE28_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE28;
3539                 END IF;
3540 
3541                 IF l_resource_rec_tbl(i).ATTRIBUTE29 = FND_API.G_MISS_CHAR THEN
3542                     l_ATTRIBUTE29_tbl(i) := NULL;
3543                 ELSE
3544                     l_ATTRIBUTE29_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE29;
3545                 END IF;
3546 
3547                 IF l_resource_rec_tbl(i).ATTRIBUTE30 = FND_API.G_MISS_CHAR THEN
3548                     l_ATTRIBUTE30_tbl(i) := NULL;
3549                 ELSE
3550                     l_ATTRIBUTE30_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE30;
3551                 END IF;
3552 
3553                 IF l_resource_rec_tbl(i).UNPLANNED_FLAG = FND_API.G_MISS_CHAR THEN
3554                     l_UNPLANNED_FLAG_TBL(i) := NULL;
3555                 ELSE
3556                     l_UNPLANNED_FLAG_TBL(i) := l_resource_rec_tbl(i).UNPLANNED_FLAG;
3557                 END IF;
3558 
3559                 IF l_resource_rec_tbl(i).scheduled_delay = FND_API.G_MISS_NUM THEN
3560                     l_scheduled_delay(i) := NULL;
3561                 ELSE
3562                     l_scheduled_delay(i) := l_resource_rec_tbl(i).scheduled_delay;
3563                 END IF;
3564 
3565 
3566             END IF;
3567             l_trace_stage := 470;
3568         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3569         END LOOP;
3570         l_trace_stage := 480;
3571         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3572 
3573         ----------------------------------------------------------------------------
3574         -- Now derive the resource_assignment id for all the task_element_version_id
3575         -- based on the resource_class_code(l_del_task_level_rec_code_tbl)  to be
3576         -- 'PEOPLE'.
3577         -- The resource_assignment_id is bulk collected into a PLSql table and then
3578         -- All data is deleted in bulk from pa_budget_lines and pa_resource_assignment
3579         -- based on the resource_assignment_id
3580 
3581         --***************************************************************************************
3582         -- Bug 3749516 resource_class_code(l_del_task_level_rec_code_tbl) will not be 'EQUIPMENT'
3583         -- REMOVING CODE BELOW FOR SAME
3584         --***************************************************************************************
3585         ------------------------------------------------------------------------------
3586 
3587         IF l_debug_mode = 'Y' THEN
3588            pa_debug.g_err_stage:='data is deleted in bulk from pa_budget_lines and pa_resource_assignment  based on the resource_assignment_id ';
3589            pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3590         END IF;
3591 
3592     END IF;
3593     --------------------------------------------------------------------------
3594     -- Processing for p_context = TASK_ASSIGNMENTS End Here
3595     --------------------------------------------------------------------------
3596 
3597     ------------------------------------------------------------------------------------------------
3598     -- Deriving Time Phased Code based on the budget version id and setting the spread amount flad
3599     -------------------------------------------------------------------------------------------------
3600     IF l_debug_mode = 'Y' THEN
3601         pa_debug.g_err_stage:='Deriving time phased code ';
3602         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3603     END IF;
3604 
3605     l_time_phased_code := pa_fin_plan_utils.get_time_phased_code(p_budget_version_id);
3606 
3607     IF l_debug_mode = 'Y' THEN
3608         pa_debug.g_err_stage:='Deriving time phased code l_time_phased_code: '||l_time_phased_code;
3609         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3610     END IF;
3611     l_trace_stage := 550;
3612     --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3613 
3614     IF ((l_time_phased_code = PA_FP_CONSTANTS_PKG.G_PERIOD_TYPE_PA) OR (l_time_phased_code = PA_FP_CONSTANTS_PKG.G_PERIOD_TYPE_GL)) THEN
3615         l_spread_amounts_for_ver := 'Y';
3616     ELSE
3617         l_spread_amounts_for_ver := 'N';
3618     END IF;
3619 
3620     l_trace_stage := 560;
3621     --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3622 
3623     ------------------------------------------------------------------------------------------------
3624     -- Deriving Proj Element Id based on element version id
3625     -------------------------------------------------------------------------------------------------
3626     IF l_debug_mode = 'Y' THEN
3627         pa_debug.g_err_stage:='Deriving Proj Element Id based on element version id';
3628         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3629     END IF;
3630 
3631     FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
3632         l_trace_stage := 570;
3633         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3634         IF p_task_elem_version_id_tbl(i) <> 0 THEN
3635             OPEN c_proj_element_id(p_task_elem_version_id_tbl(i));
3636             l_trace_stage := 580;
3637             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3638             FETCH c_proj_element_id INTO l_proj_element_id;
3639             IF l_debug_mode = 'Y' THEN
3640                 pa_debug.g_err_stage:='Deriving Proj Element Id based on element version id l_proj_element_id : '|| l_proj_element_id;
3641                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3642             END IF;
3643             l_proj_element_id_tbl(i) := l_proj_element_id;
3644             CLOSE c_proj_element_id;
3645         ELSE
3646             l_proj_element_id_tbl(i):=0;
3647         END IF;
3648         l_trace_stage := 590;
3649         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3650     END LOOP;
3651 
3652     IF l_debug_mode = 'Y' THEN
3653         pa_debug.g_err_stage:='Deriving Proj Element Id based on element version id l_proj_element_id_tbl cnt : '|| l_proj_element_id_tbl.COUNT;
3654         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3655     END IF;
3656     l_trace_stage := 600;
3657     --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3658 
3659     ---------------------------------------------------------------
3660     -- For p_context = BUDGET or FORECAST
3661     -- Deriving start date and end date for task_element_version_id
3662     ---------------------------------------------------------------
3663     IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET) OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST))  THEN
3664         l_trace_stage := 610;
3665         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3666 
3667         IF l_debug_mode = 'Y' THEN
3668             pa_debug.g_err_stage:='Deriving start date for task_element_version_ids';
3669             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3670         END IF;
3671 
3672         -- Bug 3793623 - Added new params p_planning_start_date_tbl and p_planning_end_date_tbl
3673         PA_PLANNING_TRANSACTION_UTILS.get_default_planning_dates
3674         ( p_project_id                      => p_project_id
3675          ,p_element_version_id_tbl          => p_task_elem_version_id_tbl
3676          ,p_project_structure_version_id    => PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_project_id => p_project_id )
3677          ,p_planning_start_date_tbl         => p_planning_start_date_tbl
3678          ,p_planning_end_date_tbl           => p_planning_end_date_tbl
3679          ,x_planning_start_date_tbl         => l_start_date_tbl
3680          ,x_planning_end_date_tbl           => l_compl_date_tbl
3681          ,x_msg_data                        => x_msg_data
3682          ,x_msg_count                       => x_msg_count
3683          ,x_return_status                   => x_return_status  );
3684 
3685         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3686 
3687              IF l_debug_mode = 'Y' THEN
3688                    pa_debug.g_err_stage:='Called API pafpptub.get_default_planning_dates returned error';
3689                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ',pa_debug.g_err_stage, 3);
3690              END IF;
3691              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3692         END IF;
3693 
3694         l_trace_stage := 710;
3695         --      hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3696     END IF;
3697     l_trace_stage := 720;
3698 --      hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3699 
3700     -----------------------------------------------------------------------------------------------------
3701     -- BULK INSERTING DATA INTO PA_RESOURCE_ASSIGNMENTS--------------------------------------------------
3702     -----------------------------------------------------------------------------------------------------
3703     -- Loop throught the task element version id table and do a bulk insert in to pa_resource_assignments
3704     -- 1. In the context of WORKPLAN, Loop for p_task_element_version_id_tbl, and insert into pa_resource
3705     --    assignment. l_elligble_rlm_ids will only have rlm id for 'PEOPLE' resource class. so a local
3706     --    index l_ppl_index(=1) is used for resource data. Data is inserted in pa_resource_assignments
3707     --    only if quanity dat ais present. this check is done and eligible data to be inserted is fetched
3708     --    in local plsql tables.
3709     --    -- Bug 3749516 removing equipment_quantity reference - refer prev. code in source control for
3710     --    -- reference
3711     -- 2. Else if the context is not workplan then,records is inserted
3712     --    irrespective of the value of quantity.The bulk insert procedure in pa_fp_elements_pub is used
3713     --    for this. If l_spread_amts_for_ver = 'Y'For each record inserted prepare a pl/sql table containing
3714     --   'Y' if the record is inserted and the amount exists(note that this amount can be raw cost, burdened
3715     --   cost, quantity in the case of Budget/Forecast and quantity in the case of Task Assignment).If the
3716     --   amount does not exist then the pl/sql table should contain 'N'. This will be used as the paramter
3717     --   for p_spread_amt_flags parameter in the calculate API (A separate loop may be required for this)
3718     --   Please note that in the context of TASK ASSIGNMENT, if some value is being returned by the TA
3719     --   validation API then that value should be used.
3720     -----------------------------------------------------------------------------------------------------
3721 
3722     IF l_debug_mode = 'Y' THEN
3723         pa_debug.g_err_stage:='BULK INSERTING DATA INTO PA_RESOURCE_ASSIGNMENTS ';
3724         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3725     END IF;
3726 
3727     l_call_calc_api := 'N';
3728 
3729     OPEN  get_pc_code;
3730     FETCH get_pc_code
3731     INTO  l_proj_curr_code, l_proj_func_curr_code;
3732     CLOSE get_pc_code;
3733 
3734     ---------------------------------------------------------------------
3735     -- These _rlm tables have been extented to the length of rlm_id table
3736     -- and they will be used for insert in Budget/Forecast context when
3737     -- One to One Mapping Flag is passed as Y
3738     -- Bug 3719918 and Bug 3665097
3739     ----------------------------------------------------------------------
3740     IF (p_one_to_one_mapping_flag = 'Y' AND
3741        (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR
3742         p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
3743         p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST))THEN
3744         l_task_elem_rlm_tbl := p_task_elem_version_id_tbl;
3745         l_proj_elem_rlm_tbl := l_proj_element_id_tbl;
3746     END IF;
3747 
3748     -- Bug 3719918
3749     -- If One ONe to One Mapping Flag is Y in Bugdet and Forecast Context then ..
3750     -- there might be duplicate decords for resource assignments present in the
3751     -- IN tables correspoinging to different currency code.
3752     -- Eg. p_one_to_one_mapping_flag - 'Y'
3753     --     Task elem ver id - t1,t1,t2
3754     --     RLM              - r1,r1,r2
3755     --     Currency Code    - c1,c2,c2
3756     -- in this case ..2 resource assignments are created - t1r1 and t2r2
3757     -- calculate is called for three lines .. t1r1c1,t1r1c2,t2r2c2
3758     -- the below logic is used in BF context and will reduce the input data to the
3759     -- following form --   Task elem ver id : t1,t2 and RLM : r1,r2
3760     -- This will be used in the insert statment for B/F
3761 
3762     IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
3763         p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST ) THEN
3764 
3765         IF (p_one_to_one_mapping_flag = 'Y') THEN
3766 
3767             l_bf_start_date_tbl        := l_start_date_tbl;
3768             l_bf_compl_date_tbl        := l_compl_date_tbl;
3769             l_bf_proj_elem_tbl         := l_proj_element_id_tbl;
3770             l_bf_quantity_tbl          :=  p_quantity_tbl;
3771             l_bf_currency_code_tbl     :=  p_currency_code_tbl;
3772             l_bf_raw_cost_tbl          :=  p_raw_cost_tbl;
3773             l_bf_burdened_cost_tbl     :=  p_burdened_cost_tbl;
3774             l_bf_revenue_tbl           :=  p_revenue_tbl;
3775             l_bf_cost_rate_tbl         :=  p_cost_rate_tbl;
3776             l_bf_bill_rate_tbl         :=  p_bill_rate_tbl ;
3777             l_bf_burdened_rate_tbl     :=  p_burdened_rate_tbl;
3778 
3779 
3780         END IF;--IF (p_one_to_one_mapping_flag = 'Y') THEN
3781 
3782         --The l_bf<amounts> tbls should have elements equal in no to l_rlm_id_no_of_rows as these tbls will be used
3783         --in the FORALL insert which will loop thru the rlm id pl/sql tbl. Note that they are used only when
3784         --p_one_to_one_mapping_flag is Y
3785 
3786         l_bf_quantity_tbl.extend(l_rlm_id_no_of_rows-l_bf_quantity_tbl.count);
3787         l_bf_currency_code_tbl.extend(l_rlm_id_no_of_rows-l_bf_currency_code_tbl.count);
3788         l_bf_raw_cost_tbl.extend(l_rlm_id_no_of_rows-l_bf_raw_cost_tbl.count);
3789         l_bf_burdened_cost_tbl.extend(l_rlm_id_no_of_rows-l_bf_burdened_cost_tbl.count);
3790         l_bf_revenue_tbl.extend(l_rlm_id_no_of_rows-l_bf_revenue_tbl.count);
3791         l_bf_cost_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_cost_rate_tbl.count);
3792         l_bf_bill_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_bill_rate_tbl.count);
3793         l_bf_burdened_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_burdened_rate_tbl.count);
3794 
3795     END IF; -- IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
3796 
3797     ----------------------------------------------------
3798     -- THESE DEBUG MESSAGES ARE BEING PLACED HERE ONLY FOR
3799     -- REFERENCE SO THAT THEY CAN BE USED WHEN AND WHERE
3800     -- NEEDED FOR DEBUGGIND ISSUE WITH BULK DTA INSERTION.
3801     -----------------------------------------------------
3802                 /*
3803                 pa_debug.g_err_stage:='l_proj_element_id_tbl :'||l_proj_element_id_tbl.COUNT;
3804                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3805                 pa_debug.g_err_stage:='l_unit_of_measure_tbl :'||l_unit_of_measure_tbl.COUNT;
3806                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3807                 pa_debug.g_err_stage:='p_task_elem_version_id_tbl :'||p_task_elem_version_id_tbl.COUNT;
3808                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3809                 pa_debug.g_err_stage:='l_start_date_tbl :'||p_start_date_tbl.COUNT;
3810                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3811                 pa_debug.g_err_stage:='l_end_date_tbl :'||p_end_date_tbl.COUNT;
3812                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3813                 pa_debug.g_err_stage:='l_etc_method_code_tbl :'||l_etc_method_code_tbl.COUNT;
3814                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3815                 pa_debug.g_err_stage:='l_res_type_code_tbl :'||l_res_type_code_tbl.COUNT;
3816                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3817                 pa_debug.g_err_stage:='l_fc_res_type_code_tbl :'||l_fc_res_type_code_tbl.COUNT;
3818                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3819                 pa_debug.g_err_stage:='l_resource_class_code_tbl :'||l_resource_class_code_tbl.COUNT;
3820                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3821                 pa_debug.g_err_stage:='l_organization_id_tbl :'||l_organization_id_tbl.COUNT;
3822                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3823                 pa_debug.g_err_stage:='l_job_id_tbl :'||l_job_id_tbl.COUNT;
3824                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3825                 pa_debug.g_err_stage:='l_person_id_tbl :'||l_person_id_tbl.COUNT;
3826                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3827                 pa_debug.g_err_stage:='l_revenue_category_code_tbl :'||l_revenue_category_code_tbl.COUNT;
3828                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3829                 pa_debug.g_err_stage:='l_expenditure_type_tbl :'||l_expenditure_type_tbl.COUNT;
3830                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3831                 pa_debug.g_err_stage:='l_expenditure_category_tbl :'||l_expenditure_category_tbl.COUNT;
3832                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3833                 pa_debug.g_err_stage:='l_non_labor_resource_tbl :'||l_non_labor_resource_tbl.COUNT;
3834                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3835                 pa_debug.g_err_stage:='l_event_type_tbl :'||l_event_type_tbl.COUNT;
3836                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3837                 pa_debug.g_err_stage:='l_supplier_id_tbl :'||l_supplier_id_tbl.COUNT;
3838                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3839                 pa_debug.g_err_stage:='l_inventory_item_id_tbl :'||l_inventory_item_id_tbl.COUNT;
3840                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3841                 pa_debug.g_err_stage:='l_bom_resource_id_tbl :'||l_bom_resource_id_tbl.COUNT;
3842                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3843                 pa_debug.g_err_stage:='l_inventory_item_id_tbl :'||l_inventory_item_id_tbl.COUNT;
3844                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3845                 pa_debug.g_err_stage:='l_item_category_id_tbl :'||l_item_category_id_tbl.COUNT;
3846                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3847                 pa_debug.g_err_stage:='l_mfc_cost_type_id_tbl :'||l_mfc_cost_type_id_tbl.COUNT;
3848                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3849                 pa_debug.g_err_stage:='l_rate_expenditure_type_tbl :'||l_rate_expenditure_type_tbl.COUNT;
3850                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3851                 pa_debug.g_err_stage:='l_rate_func_curr_code_tbl :'||l_rate_func_curr_code_tbl.COUNT;
3852                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3853                 pa_debug.g_err_stage:='l_rate_based_flag_tbl :'||l_rate_based_flag_tbl.COUNT;
3854                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3855                 pa_debug.g_err_stage:='l_resource_class_flag_tbl :'||l_resource_class_flag_tbl.COUNT;
3856                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3857                 pa_debug.g_err_stage:='l_named_role_tbl :'||l_named_role_tbl.COUNT;
3858                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3859                 pa_debug.g_err_stage:='l_incur_by_res_class_code_tbl :'||l_incur_by_res_class_code_tbl.COUNT;
3860                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3861                 pa_debug.g_err_stage:='l_budget_version_id :'||l_budget_version_id;
3862                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3863                 pa_debug.g_err_stage:='p_project_id :'||p_project_id;
3864                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3865                 pa_debug.g_err_stage:='task_id :'||l_proj_element_id_tbl(i);
3866                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3867                 pa_debug.g_err_stage:='project_assignment_id : -1';
3868                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3869                 pa_debug.g_err_stage:='RESOURCE_LIST_MEMBER_ID :'||l_people_res_class_rlm_id;
3870                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);*/
3871 
3872                 /*    l_trace_stage := 761;
3873                 hr_utility.trace('l_proj_element_id_tbl(i) => '||to_char(l_proj_element_id_tbl(i)));
3874                 hr_utility.trace('l_unit_of_measure_tbl(l_ppl_index) => '||to_char(l_unit_of_measure_tbl(l_ppl_index)));
3875                 hr_utility.trace('p_task_elem_version_id_tbl(i) => '||to_char(p_task_elem_version_id_tbl(i)));
3876                 hr_utility.trace('p_start_date_tbl(i) => '||to_char(p_start_date_tbl(i)));
3877                 hr_utility.trace('p_end_date_tbl(i) => '||to_char(p_end_date_tbl(i)));
3878                 hr_utility.trace(' l_spread_curve_id_tbl(l_ppl_index) => '||to_char(l_spread_curve_id_tbl(l_ppl_index)));
3879                 hr_utility.trace('l_etc_method_code_tbl(l_ppl_index) => '||to_char(l_etc_method_code_tbl(l_ppl_index)));
3880                 hr_utility.trace('l_res_type_code_tbl(l_ppl_index) => '||to_char(l_res_type_code_tbl(l_ppl_index)));
3881                 hr_utility.trace('l_fc_res_type_code_tbl(l_ppl_index) => '||to_char(l_fc_res_type_code_tbl(l_ppl_index)));
3882                 hr_utility.trace('l_resource_class_code_tbl(l_ppl_index) => '||to_char(l_resource_class_code_tbl(l_ppl_index)));
3883                 hr_utility.trace('l_organization_id_tbl(l_ppl_index) => '||to_char(l_organization_id_tbl(l_ppl_index)));
3884                 hr_utility.trace('l_job_id_tbl(l_ppl_index) => '||to_char(l_job_id_tbl(l_ppl_index)));
3885                 hr_utility.trace('l_person_id_tbl(l_ppl_index) => '||to_char(l_person_id_tbl(l_ppl_index)));
3886                 hr_utility.trace('l_expenditure_type_tbl(l_ppl_index) => '||to_char(l_expenditure_type_tbl(l_ppl_index)));
3887                 hr_utility.trace('l_expenditure_category_tbl(l_ppl_index) => '||to_char(l_expenditure_category_tbl(l_ppl_index)));
3888                 hr_utility.trace('l_revenue_category_code_tbl(l_ppl_index) => '||to_char(l_revenue_category_code_tbl(l_ppl_index)));
3889                 hr_utility.trace('l_event_type_tbl(l_ppl_index) => '||to_char(l_event_type_tbl(l_ppl_index)));
3890                 hr_utility.trace('l_supplier_id_tbl(l_ppl_index) => '||to_char(l_supplier_id_tbl(l_ppl_index)));
3891                 hr_utility.trace('l_non_labor_resource_tbl(l_ppl_index) => '||to_char(l_non_labor_resource_tbl(l_ppl_index)));
3892                 hr_utility.trace('l_bom_resource_id_tbl(l_ppl_index) => '||to_char(l_bom_resource_id_tbl(l_ppl_index)));
3893                 hr_utility.trace('l_inventory_item_id_tbl(l_ppl_index) => '||to_char(l_inventory_item_id_tbl(l_ppl_index)));
3894                 hr_utility.trace('l_mfc_cost_type_id_tbl(l_ppl_indexj) => '||to_char(l_mfc_cost_type_id_tbl(l_ppl_indexj)));
3895                 hr_utility.trace('l_rate_expenditure_type_tbl(l_ppl_indexj) => '||to_char(l_rate_expenditure_type_tbl(l_ppl_index)));
3896                 hr_utility.trace('l_rate_based_flag_tbl(l_ppl_index) => '||to_char(l_rate_based_flag_tbl(l_ppl_index)));
3897                 hr_utility.trace('l_rate_func_curr_code_tbl(l_ppl_index) => '||to_char(l_rate_func_curr_code_tbl(l_ppl_index)));
3898                 hr_utility.trace('l_incur_by_res_class_code_tbl(l_ppl_index) => '||to_char(l_incur_by_res_class_code_tbl(l_ppl_index)));
3899                 hr_utility.trace('l_resource_class_flag_tbl(l_ppl_index) => '||to_char(l_resource_class_flag_tbl(l_ppl_index)));
3900                 hr_utility.trace('l_named_role_tbl(l_ppl_index) => '||to_char(l_named_role_tbl(l_ppl_index)));*/
3901 
3902     --------------------------------------------
3903     -- for p_context - WORKPLAN
3904     --------------------------------------------
3905     IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
3906 
3907         -- Bug 3749516 Changing All reference of l_ppl_equip_index to l_ppl_index below
3908         l_ppl_index:=1; --This will be used in the bulk insert for people -- -- Bug 3749516
3909 
3910         IF l_debug_mode = 'Y' THEN
3911             pa_debug.g_err_stage:='BULK INSERTING DATA - p_context - Workplan :'||p_context ;
3912             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3913 
3914             pa_debug.g_err_stage:='BULK INSERTING Workplan DATA - rlm id :'||l_eligible_rlm_ids_tbl(l_ppl_index) ;
3915             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,6);
3916         END IF;
3917 
3918         FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
3919             IF ((p_planned_people_effort_tbl.EXISTS(i)) AND
3920                 (nvl(p_planned_people_effort_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) AND
3921                 /* bug fix:5726773 (p_planned_people_effort_tbl(i) > 0)) THEN*/
3922  	        (p_planned_people_effort_tbl(i) is NOT NULL)) THEN
3923                  l_ins_proj_element_id_tbl(l_ins_index)          :=  l_proj_element_id_tbl(i);
3924                  l_ins_task_elem_version_id_tbl(l_ins_index)     :=  p_task_elem_version_id_tbl(i);
3925                  l_ins_start_date_tbl(l_ins_index)               :=  p_start_date_tbl(i);
3926                  l_ins_end_date_tbl(l_ins_index)                 :=  p_end_date_tbl(i);
3927                  l_ins_cal_people_effort_tbl(l_ins_index)        :=  p_planned_people_effort_tbl(i);
3928                  IF p_burdened_cost_tbl.EXISTS(i) THEN
3929                     l_ins_cal_burdened_cost_tbl(l_ins_index)        :=  p_burdened_cost_tbl(i);
3930                  END IF;
3931                  IF p_raw_cost_tbl.EXISTS(i) THEN
3932                     l_ins_cal_raw_cost_tbl(l_ins_index)             :=  p_raw_cost_tbl(i);
3933                  END IF;
3934                  l_ins_index := l_ins_index + 1;
3935             END IF;
3936         END LOOP;
3937 
3938 
3939         l_ins_proj_element_id_tbl.delete(l_ins_index,l_ins_proj_element_id_tbl.count);
3940         l_ins_task_elem_version_id_tbl.delete(l_ins_index,l_ins_task_elem_version_id_tbl.count);
3941         l_ins_start_date_tbl.delete(l_ins_index,l_ins_start_date_tbl.count);
3942         l_ins_end_date_tbl.delete(l_ins_index,l_ins_end_date_tbl.count);
3943         l_ins_cal_people_effort_tbl.delete(l_ins_index,l_ins_cal_people_effort_tbl.count);
3944         l_ins_cal_burdened_cost_tbl.delete(l_ins_index,l_ins_cal_burdened_cost_tbl.count);
3945         l_ins_cal_raw_cost_tbl.delete(l_ins_index,l_ins_cal_raw_cost_tbl.count);
3946 
3947 
3948         IF l_debug_mode = 'Y' THEN
3949             pa_debug.g_err_stage:='AFTER PREPARING INS DATA :'||p_context ;
3950             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3951 
3952             IF l_ins_task_elem_version_id_tbl.COUNT >0 THEN
3953                FOR i in l_ins_task_elem_version_id_tbl.FIRST .. l_ins_task_elem_version_id_tbl.LAST LOOP
3954                 pa_debug.g_err_stage:='l_ins_proj_element_id_tbl :'||l_ins_proj_element_id_tbl(i) ;
3955                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3956 
3957                 pa_debug.g_err_stage:='l_ins_task_elem_version_id_tbl :'||l_ins_task_elem_version_id_tbl(i) ;
3958                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3959 
3960                 pa_debug.g_err_stage:='l_ins_start_date_tbl :'||l_ins_start_date_tbl(i) ;
3961                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3962 
3963                 pa_debug.g_err_stage:='l_ins_end_date_tbl :'||l_ins_end_date_tbl(i) ;
3964                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3965                END LOOP;
3966             END IF;
3967         END IF;
3968 
3969         IF l_ins_task_elem_version_id_tbl.COUNT > 0 THEN
3970                 FORALL i IN l_ins_task_elem_version_id_tbl.FIRST .. l_ins_task_elem_version_id_tbl.LAST
3971                 INSERT INTO PA_RESOURCE_ASSIGNMENTS (
3972                     RESOURCE_ASSIGNMENT_ID,BUDGET_VERSION_ID,PROJECT_ID,TASK_ID,RESOURCE_LIST_MEMBER_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,CREATION_DATE,CREATED_BY
3973                     ,LAST_UPDATE_LOGIN,UNIT_OF_MEASURE,TRACK_AS_LABOR_FLAG,STANDARD_BILL_RATE,AVERAGE_BILL_RATE,AVERAGE_COST_RATE
3974                     ,PROJECT_ASSIGNMENT_ID,PLAN_ERROR_CODE,TOTAL_PLAN_REVENUE,TOTAL_PLAN_RAW_COST,TOTAL_PLAN_BURDENED_COST,TOTAL_PLAN_QUANTITY
3975                     ,AVERAGE_DISCOUNT_PERCENTAGE,TOTAL_BORROWED_REVENUE,TOTAL_TP_REVENUE_IN,TOTAL_TP_REVENUE_OUT,TOTAL_REVENUE_ADJ
3976                     ,TOTAL_LENT_RESOURCE_COST,TOTAL_TP_COST_IN,TOTAL_TP_COST_OUT,TOTAL_COST_ADJ,TOTAL_UNASSIGNED_TIME_COST
3977                     ,TOTAL_UTILIZATION_PERCENT,TOTAL_UTILIZATION_HOURS,TOTAL_UTILIZATION_ADJ,TOTAL_CAPACITY,TOTAL_HEAD_COUNT
3978                     ,TOTAL_HEAD_COUNT_ADJ,RESOURCE_ASSIGNMENT_TYPE,TOTAL_PROJECT_RAW_COST,TOTAL_PROJECT_BURDENED_COST,TOTAL_PROJECT_REVENUE
3979                     ,PARENT_ASSIGNMENT_ID,WBS_ELEMENT_VERSION_ID,RBS_ELEMENT_ID,PLANNING_START_DATE,PLANNING_END_DATE,SCHEDULE_START_DATE,SCHEDULE_END_DATE
3980                     ,SPREAD_CURVE_ID,ETC_METHOD_CODE,RES_TYPE_CODE,ATTRIBUTE_CATEGORY,ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3,ATTRIBUTE4,ATTRIBUTE5
3981                     ,ATTRIBUTE6,ATTRIBUTE7,ATTRIBUTE8,ATTRIBUTE9,ATTRIBUTE10,ATTRIBUTE11,ATTRIBUTE12,ATTRIBUTE13,ATTRIBUTE14,ATTRIBUTE15
3982                     ,ATTRIBUTE16,ATTRIBUTE17,ATTRIBUTE18,ATTRIBUTE19,ATTRIBUTE20,ATTRIBUTE21,ATTRIBUTE22,ATTRIBUTE23,ATTRIBUTE24,ATTRIBUTE25
3983                     ,ATTRIBUTE26,ATTRIBUTE27,ATTRIBUTE28,ATTRIBUTE29,ATTRIBUTE30,FC_RES_TYPE_CODE,RESOURCE_CLASS_CODE,ORGANIZATION_ID,JOB_ID
3984                     ,PERSON_ID,EXPENDITURE_TYPE,EXPENDITURE_CATEGORY,REVENUE_CATEGORY_CODE,EVENT_TYPE,SUPPLIER_ID,NON_LABOR_RESOURCE
3985                     ,BOM_RESOURCE_ID,INVENTORY_ITEM_ID,ITEM_CATEGORY_ID,RECORD_VERSION_NUMBER,BILLABLE_PERCENT
3986                     ,TRANSACTION_SOURCE_CODE,MFC_COST_TYPE_ID,PROCURE_RESOURCE_FLAG,ASSIGNMENT_DESCRIPTION
3987                     ,INCURRED_BY_RES_FLAG,RATE_JOB_ID,RATE_EXPENDITURE_TYPE,TA_DISPLAY_FLAG
3988                     ,SP_FIXED_DATE,PERSON_TYPE_CODE,RATE_BASED_FLAG,USE_TASK_SCHEDULE_FLAG,RATE_EXP_FUNC_CURR_CODE
3989                     ,RATE_EXPENDITURE_ORG_ID,INCUR_BY_RES_CLASS_CODE,INCUR_BY_ROLE_ID
3990                     ,PROJECT_ROLE_ID,RESOURCE_CLASS_FLAG,NAMED_ROLE,TXN_ACCUM_HEADER_ID
3991                     ,PM_PRODUCT_CODE, PM_RES_ASSIGNMENT_REFERENCE, resource_rate_based_flag)
3992                    VALUES (
3993                          PA_RESOURCE_ASSIGNMENTS_S.NEXTVAL                                -- RESOURCE_ASSIGNMENT_ID
3994                         ,l_budget_version_id                                              -- BUDGET_VERSION_ID
3995                         ,p_project_id                                                     -- PROJECT_ID
3996                         ,l_ins_proj_element_id_tbl(i)                                     -- TASK_ID
3997                         ,l_people_res_class_rlm_id                                        -- RESOURCE_LIST_MEMBER_ID
3998                         ,sysdate                                                          -- LAST_UPDATE_DATE
3999                         ,fnd_global.user_id                                               -- LAST_UPDATED_BY
4000                         ,sysdate                                                          -- CREATION_DATE
4001                         ,fnd_global.user_id                                               -- CREATED_BY
4002                         ,fnd_global.login_id                                              -- LAST_UPDATE_LOGIN
4003                         ,l_unit_of_measure_tbl(l_ppl_index)                               -- UNIT_OF_MEASURE
4004                         ,NULL                                                             -- TRACK_AS_LABOR_FLAG
4005                         ,NULL                                                             -- STANDARD_BILL_RATE
4006                         ,NULL                                                             -- AVERAGE_BILL_RATE
4007                         ,NULL                                                             -- AVERAGE_COST_RATE
4008                         ,-1                                                               -- PROJECT_ASSIGNMENT_ID
4009                         ,NULL                                                             -- PLAN_ERROR_CODE
4010                         ,NULL                                                             -- TOTAL_PLAN_REVENUE
4011                         ,NULL                                                             -- TOTAL_PLAN_RAW_COST
4012                         ,NULL                                                             -- TOTAL_PLAN_BURDENED_COST
4013                         ,NULL                                                             -- TOTAL_PLAN_QUANTITY
4014                         ,NULL                                                             -- AVERAGE_DISCOUNT_PERCENTAGE
4015                         ,NULL                                                             -- TOTAL_BORROWED_REVENUE
4016                         ,NULL                                                             -- TOTAL_TP_REVENUE_IN
4017                         ,NULL                                                             -- TOTAL_TP_REVENUE_OUT
4018                         ,NULL                                                             -- TOTAL_REVENUE_ADJ
4019                         ,NULL                                                             -- TOTAL_LENT_RESOURCE_COST
4020                         ,NULL                                                             -- TOTAL_TP_COST_IN
4021                         ,NULL                                                             -- TOTAL_TP_COST_OUT
4022                         ,NULL                                                             -- TOTAL_COST_ADJ
4023                         ,NULL                                                             -- TOTAL_UNASSIGNED_TIME_COST
4024                         ,NULL                                                             -- TOTAL_UTILIZATION_PERCENT
4025                         ,NULL                                                             -- TOTAL_UTILIZATION_HOURS
4026                         ,NULL                                                             -- TOTAL_UTILIZATION_ADJ
4027                         ,NULL                                                             -- TOTAL_CAPACITY
4028                         ,NULL                                                             -- TOTAL_HEAD_COUNT
4029                         ,NULL                                                             -- TOTAL_HEAD_COUNT_ADJ
4030                         ,'USER_ENTERED'                                                   -- RESOURCE_ASSIGNMENT_TYPE
4031                         ,NULL                                                             -- TOTAL_PROJECT_RAW_COST
4032                         ,NULL                                                             -- TOTAL_PROJECT_BURDENED_COST
4033                         ,NULL                                                             -- TOTAL_PROJECT_REVENUE
4034                         ,NULL                                                             -- PARENT_ASSIGNMENT_ID
4035                         ,l_ins_task_elem_version_id_tbl(i)                                -- WBS_ELEMENT_VERSION_ID
4036                         ,l_rbs_element_id_tbl(l_ppl_index)                                -- RBS_ELEMENT_ID
4037                         ,l_ins_start_date_tbl(i)                                          -- PLANNING_START_DATE
4038                         ,l_ins_end_date_tbl(i)                                            -- PLANNING_END_DATE
4039                         ,l_ins_start_date_tbl(i)                                          -- SCHEDULE_START_DATE
4040                         ,l_ins_end_date_tbl(i)                                            -- SCHEDULE_END_DATE
4041                         ,l_spread_curve_id_tbl(l_ppl_index)                               -- SPREAD_CURVE_ID
4042                         ,l_etc_method_code_tbl(l_ppl_index)                               -- ETC_METHOD_CODE
4043                         ,l_res_type_code_tbl(l_ppl_index)                                 -- RES_TYPE_CODE
4044                         ,NULL                                                             -- ATTRIBUTE_CATEGORY
4045                         ,NULL                                                             -- ATTRIBUTE1
4046                         ,NULL                                                             -- ATTRIBUTE2
4047                         ,NULL                                                             -- ATTRIBUTE3
4048                         ,NULL                                                             -- ATTRIBUTE4
4049                         ,NULL                                                             -- ATTRIBUTE5
4050                         ,NULL                                                             -- ATTRIBUTE6
4051                         ,NULL                                                             -- ATTRIBUTE7
4052                         ,NULL                                                             -- ATTRIBUTE8
4053                         ,NULL                                                             -- ATTRIBUTE9
4054                         ,NULL                                                             -- ATTRIBUTE10
4055                         ,NULL                                                             -- ATTRIBUTE11
4056                         ,NULL                                                             -- ATTRIBUTE12
4057                         ,NULL                                                             -- ATTRIBUTE13
4058                         ,NULL                                                             -- ATTRIBUTE14
4059                         ,NULL                                                             -- ATTRIBUTE15
4060                         ,NULL                                                             -- ATTRIBUTE16
4061                         ,NULL                                                             -- ATTRIBUTE17
4062                         ,NULL                                                             -- ATTRIBUTE18
4063                         ,NULL                                                             -- ATTRIBUTE19
4064                         ,NULL                                                             -- ATTRIBUTE20
4065                         ,NULL                                                             -- ATTRIBUTE21
4066                         ,NULL                                                             -- ATTRIBUTE22
4067                         ,NULL                                                             -- ATTRIBUTE23
4068                         ,NULL                                                             -- ATTRIBUTE24
4069                         ,NULL                                                             -- ATTRIBUTE25
4070                         ,NULL                                                             -- ATTRIBUTE26
4071                         ,NULL                                                             -- ATTRIBUTE27
4072                         ,NULL                                                             -- ATTRIBUTE28
4073                         ,NULL                                                             -- ATTRIBUTE29
4074                         ,NULL                                                             -- ATTRIBUTE30
4075                         ,l_fc_res_type_code_tbl(l_ppl_index)                              -- FC_RES_TYPE_CODE
4076                         ,l_resource_class_code_tbl(l_ppl_index)                           -- RESOURCE_CLASS_CODE
4077                         ,l_organization_id_tbl(l_ppl_index)                               -- ORGANIZATION_ID
4078                         ,l_job_id_tbl(l_ppl_index)                                        -- JOB_ID
4079                         ,l_person_id_tbl(l_ppl_index)                                     -- PERSON_ID
4080                         ,l_expenditure_type_tbl(l_ppl_index)                              -- EXPENDITURE_TYPE
4081                         ,l_expenditure_category_tbl(l_ppl_index)                          -- EXPENDITURE_CATEGORY
4082                         ,l_revenue_category_code_tbl(l_ppl_index)                         -- REVENUE_CATEGORY_CODE
4083                         ,l_event_type_tbl(l_ppl_index)                                    -- EVENT_TYPE
4084                         ,l_supplier_id_tbl(l_ppl_index)                                   -- SUPPLIER_ID
4085                         ,l_non_labor_resource_tbl(l_ppl_index)                            -- NON_LABOR_RESOURCE
4086                         ,l_bom_resource_id_tbl(l_ppl_index)                               -- BOM_RESOURCE_ID
4087                         ,l_inventory_item_id_tbl(l_ppl_index)                             -- INVENTORY_ITEM_ID
4088                         ,l_item_category_id_tbl(l_ppl_index)                              -- ITEM_CATEGORY_ID
4089                         ,1                                                                -- RECORD_VERSION_NUMBER
4090                         ,NULL                                                             -- BILLABLE_PERCENT
4091                         ,NULL                                                             -- TRANSACTION_SOURCE_CODE
4092                         ,l_mfc_cost_type_id_tbl(l_ppl_index)                              -- MFC_COST_TYPE_ID
4093                         ,NULL                                                             -- PROCURE_RESOURCE_FLAG
4094                         ,NULL                                                             -- ASSIGNMENT_DESCRIPTION
4095                         ,l_incurred_by_res_flag_tbl(l_ppl_index)                          -- INCURRED_BY_RES_FLAG
4096                         ,NULL                                                             -- RATE_JOB_ID
4097                         ,l_rate_expenditure_type_tbl(l_ppl_index)                         -- RATE_EXPENDITURE_TYPE
4098                         ,'N'                                                              -- TA_DISPLAY_FLAG
4099                         ,decode(l_spread_curve_id_tbl(l_ppl_index),l_fixed_date_sp_id,l_ins_start_date_tbl(i),null)-- SP_FIXED_DATE -- Bug 3607061
4100                         ,l_person_type_code_tbl(l_ppl_index)                              -- PERSON_TYPE_CODE
4101                         ,l_rate_based_flag_tbl(l_ppl_index)                               -- RATE_BASED_FLAG
4102                         ,NULL                                                             -- USE_TASK_SCHEDULE_FLAG
4103                         ,l_rate_func_curr_code_tbl(l_ppl_index)                           -- RATE_EXP_FUNC_CURR_CODE
4104                         ,l_org_id_tbl(l_ppl_index)                                        -- RATE_EXPENDITURE_ORG_ID
4105                         ,l_incur_by_res_class_code_tbl(l_ppl_index)                       -- INCUR_BY_RES_CLASS_CODE
4106                         ,l_incur_by_role_id_tbl(l_ppl_index)                              -- INCUR_BY_ROLE_ID
4107                         ,l_project_role_id_tbl(l_ppl_index)                               -- PROJECT_ROLE_ID
4108                         ,l_resource_class_flag_tbl(l_ppl_index)                           -- RESOURCE_CLASS_FLAG
4109                         ,l_named_role_tbl(l_ppl_index)                                    -- NAMED_ROLE
4110                         ,l_txn_accum_header_id_tbl(l_ppl_index)                           -- TXN ACCUM HEADER ID
4111                         ,l_pm_product_code_tbl(l_ppl_index)                               -- PM_PRODUCT_CODE
4112                         ,l_pm_res_asgmt_ref_tbl(l_ppl_index)                              -- PM_RES_ASSIGNMENT_REFERENCE
4113                         ,l_rate_based_flag_tbl(l_ppl_index)                               -- RESOURCE_RATE_BASED_FLAG IPM
4114 			)
4115                         RETURNING resource_assignment_id BULK COLLECT INTO l_res_assignment_id_temp_tbl ;
4116     -- IPM changes - copy the RA ID's created so that the new entity
4117     -- can be populated.
4118     l_orig_count :=  l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
4119     l_ra_id_temp_tbl.extend(l_res_assignment_id_temp_tbl.COUNT);
4120     FOR i IN l_orig_count+1 .. l_orig_count+l_res_assignment_id_temp_tbl.COUNT LOOP -- bug 5003827 issue 22
4121       l_ra_id_temp_tbl(i) := l_res_assignment_id_temp_tbl(i-l_orig_count); -- bug 5003827 issue 22
4122     END LOOP; -- bug 5003827 issue 22
4123     -- hr_utility.trace('RMcopy1');
4124     -- hr_utility.trace('l_ra_id_temp_tbl.COUNT IS : ' || l_ra_id_temp_tbl.COUNT);
4125     -- hr_utility.trace('l_res_assignment_id_temp_tbl.COUNT IS : ' || l_res_assignment_id_temp_tbl.COUNT);
4126     -- hr_utility.trace('*****');
4127 
4128             -----------------------------------------------------------------------
4129             -- Populating resource assignments and corresponding spread amount flags
4130             -- in PLSql tables. for IN parameters of Calculate API
4131             -- If Quantity exists in the IN parameter then set it to 'Y'
4132             -- or else set it to 'N'
4133             -----------------------------------------------------------------------
4134              l_index := 1; -- Initialise to avoid incorrect values that might come in
4135                            -- due to any usage of this.
4136 
4137              IF (l_res_assignment_id_temp_tbl.COUNT >0) THEN
4138                 FOR k IN l_res_assignment_id_temp_tbl.FIRST .. l_res_assignment_id_temp_tbl.LAST LOOP
4139                 -----------------------------------------------------------------------
4140                 -- Populating resource assignments and corresponding spread amount flags
4141                 -- in PLSql tables.for IN parameters of Calculate API
4142                 -- If Record is inserted then spread amount flag is set to Y or else it
4143                 -- is set to N
4144                 -----------------------------------------------------------------------
4145                     IF l_res_assignment_id_temp_tbl(k) IS NOT NULL THEN
4146                         l_trace_stage := 780;
4147                         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
4148                         IF l_debug_mode = 'Y' THEN
4149                             pa_debug.g_err_stage:='BULK INSERTING DATA - WORPLAN - PEOPLE '||l_res_assignment_id_temp_tbl(k);
4150                             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4151                         END IF;
4152                         l_quantity_tbl(l_index)          := l_ins_cal_people_effort_tbl(k);
4153                         l_res_assignment_id_tbl(l_index) := l_res_assignment_id_temp_tbl(k);
4154                         --                                  IF l_spread_amounts_for_ver = 'Y' THEN
4155                         l_spread_amount_flags_tbl(l_index) := 'Y';
4156                         l_currency_code_tbl(l_index) :=  l_proj_curr_code;
4157                         --                                  END IF;
4158                         IF l_ins_cal_raw_cost_tbl.EXISTS(k) AND
4159                            NVL(l_ins_cal_raw_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4160                            /* bug fix:Bug fix:5726773 l_ins_cal_raw_cost_tbl(k) <> 0 THEN */
4161  	                    l_ins_cal_raw_cost_tbl(k) is NOT NULL THEN
4162                             l_raw_cost_tbl(l_index)     := l_ins_cal_raw_cost_tbl(k);
4163                         END IF;
4164                         IF l_ins_cal_burdened_cost_tbl.EXISTS(k) AND
4165                            NVL(l_ins_cal_burdened_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4166                            /* bug fix:Bug fix:5726773 l_ins_cal_burdened_cost_tbl(k) <> 0 THEN */
4167  	                    l_ins_cal_burdened_cost_tbl(k) is NOT NULL THEN
4168                             l_burdened_cost_tbl(l_index)     := l_ins_cal_burdened_cost_tbl(k);
4169                         END IF;
4170                         l_call_calc_api := 'Y';
4171                         l_index := l_index + 1;
4172                     END IF;
4173                     l_trace_stage := 790;
4174                     --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
4175                 END LOOP;
4176              END IF;
4177         END IF;
4178 /*  -- Bug 3749516 Removed code below for Equipment resource class Starts refer source control for reference  */
4179     -- Bug 3749516 BULK INSERT FOR WORKPLAN ENDS HERE
4180 
4181     ----------------------------------------------------------------------------------
4182     -- Bug 3749516 BULK INSERT FOR B/F and TA starts here
4183     -----------------------------------------------------------------------------------
4184     -- Please note that the below FOR Loop has a EXIT condition with respect to the
4185     -- BUDGET / FORECAST context. When p_one_to_one_mapping_flag is Passed as Y
4186     -- for BUDGET / FORECAST context we do not have to insert the cartesan product
4187     -- of element_ver_ids and rlm_ids passed to the ADD_PLANNING_TXNS api.
4188     -- In this case there is one-to-one correspondance in the records passed for rlm_ids
4189     -- and elem_ver_ids passed, and we use this data directly for insertion.
4190     -----------------------------------------------------------------------------------
4191     ----------------------------------------------------
4192     -- Loop for all the task_elem_version_id  --- Starts
4193     ----------------------------------------------------
4194     ELSIF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK)
4195         OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET)
4196         OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST))  THEN
4197 
4198       -- Resetting value of l_index
4199       l_index := 1;
4200       FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
4201         l_trace_stage := 730;
4202         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
4203         --------------------------------------------
4204         -- for p_context - TASK_ASSIGNMENTS
4205         --------------------------------------------
4206         IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
4207             IF l_debug_mode = 'Y' THEN
4208                 pa_debug.g_err_stage:='BULK INSERTING DATA - Context TASK p_context : '||p_context;
4209                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4210             END IF;
4211             --dbms_output.put_line('Inserting for TA');
4212             ---------------------------------------------------------
4213             -- BULK Inserting records into pa_resource_assignments
4214             -- by iterating throught elligle resource list member ids
4215             ---------------------------------------------------------
4216             -----------------------------------------------------------------
4217             -- The Insert Statement below has been modified for changes due to
4218             -- Bug 3665097. When p_one_to_one_mapping_flag is passed as Y for
4219             -- TA context. The Bulk insert is run once once for the same index as of rlm_ids.
4220             -- The Exit Condition below takes care of the insert running only once.
4221             -------------------------------------------------------------------
4222             FORALL j IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST
4223                 INSERT INTO PA_RESOURCE_ASSIGNMENTS (
4224                    RESOURCE_ASSIGNMENT_ID,BUDGET_VERSION_ID,PROJECT_ID,TASK_ID,RESOURCE_LIST_MEMBER_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,CREATION_DATE,CREATED_BY
4225                   ,LAST_UPDATE_LOGIN,UNIT_OF_MEASURE,TRACK_AS_LABOR_FLAG,STANDARD_BILL_RATE,AVERAGE_BILL_RATE,AVERAGE_COST_RATE
4226                   ,PROJECT_ASSIGNMENT_ID,PLAN_ERROR_CODE,TOTAL_PLAN_REVENUE,TOTAL_PLAN_RAW_COST,TOTAL_PLAN_BURDENED_COST,TOTAL_PLAN_QUANTITY
4227                   ,AVERAGE_DISCOUNT_PERCENTAGE,TOTAL_BORROWED_REVENUE,TOTAL_TP_REVENUE_IN,TOTAL_TP_REVENUE_OUT,TOTAL_REVENUE_ADJ
4228                   ,TOTAL_LENT_RESOURCE_COST,TOTAL_TP_COST_IN,TOTAL_TP_COST_OUT,TOTAL_COST_ADJ,TOTAL_UNASSIGNED_TIME_COST
4229                   ,TOTAL_UTILIZATION_PERCENT,TOTAL_UTILIZATION_HOURS,TOTAL_UTILIZATION_ADJ,TOTAL_CAPACITY,TOTAL_HEAD_COUNT
4230                   ,TOTAL_HEAD_COUNT_ADJ,RESOURCE_ASSIGNMENT_TYPE,TOTAL_PROJECT_RAW_COST,TOTAL_PROJECT_BURDENED_COST,TOTAL_PROJECT_REVENUE
4231                   ,PARENT_ASSIGNMENT_ID,WBS_ELEMENT_VERSION_ID,RBS_ELEMENT_ID,PLANNING_START_DATE,PLANNING_END_DATE,SCHEDULE_START_DATE,SCHEDULE_END_DATE
4232                   ,SPREAD_CURVE_ID,ETC_METHOD_CODE,RES_TYPE_CODE,ATTRIBUTE_CATEGORY,ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3,ATTRIBUTE4,ATTRIBUTE5
4233                   ,ATTRIBUTE6,ATTRIBUTE7,ATTRIBUTE8,ATTRIBUTE9,ATTRIBUTE10,ATTRIBUTE11,ATTRIBUTE12,ATTRIBUTE13,ATTRIBUTE14,ATTRIBUTE15
4234                   ,ATTRIBUTE16,ATTRIBUTE17,ATTRIBUTE18,ATTRIBUTE19,ATTRIBUTE20,ATTRIBUTE21,ATTRIBUTE22,ATTRIBUTE23,ATTRIBUTE24,ATTRIBUTE25
4235                   ,ATTRIBUTE26,ATTRIBUTE27,ATTRIBUTE28,ATTRIBUTE29,ATTRIBUTE30,FC_RES_TYPE_CODE,RESOURCE_CLASS_CODE,ORGANIZATION_ID,JOB_ID
4236                   ,PERSON_ID,EXPENDITURE_TYPE,EXPENDITURE_CATEGORY,REVENUE_CATEGORY_CODE,EVENT_TYPE,SUPPLIER_ID,NON_LABOR_RESOURCE
4237                   ,BOM_RESOURCE_ID,INVENTORY_ITEM_ID,ITEM_CATEGORY_ID,RECORD_VERSION_NUMBER,BILLABLE_PERCENT
4238                   ,TRANSACTION_SOURCE_CODE,MFC_COST_TYPE_ID,PROCURE_RESOURCE_FLAG,ASSIGNMENT_DESCRIPTION
4239                   ,INCURRED_BY_RES_FLAG,RATE_JOB_ID,RATE_EXPENDITURE_TYPE,TA_DISPLAY_FLAG
4240                   ,SP_FIXED_DATE,PERSON_TYPE_CODE,RATE_BASED_FLAG,USE_TASK_SCHEDULE_FLAG,RATE_EXP_FUNC_CURR_CODE
4241                   ,RATE_EXPENDITURE_ORG_ID,INCUR_BY_RES_CLASS_CODE,INCUR_BY_ROLE_ID
4242                   ,PROJECT_ROLE_ID,RESOURCE_CLASS_FLAG,NAMED_ROLE,TXN_ACCUM_HEADER_ID,UNPLANNED_FLAG
4243                   ,PM_PRODUCT_CODE, PM_RES_ASSIGNMENT_REFERENCE,SCHEDULED_DELAY, resource_rate_based_flag)
4244            VALUES(PA_RESOURCE_ASSIGNMENTS_S.NEXTVAL                        -- RESOURCE_ASSIGNMENT_ID
4245                   ,l_budget_version_id                                     -- BUDGET_VERSION_ID
4246                   ,p_project_id                                            -- PROJECT_ID
4247                   ,decode(p_one_to_one_mapping_flag,'Y',l_proj_elem_rlm_tbl(j)
4248                                                        ,l_proj_element_id_tbl(i))           -- TASK_ID
4249                   ,l_eligible_rlm_ids_tbl(j)                               -- RESOURCE_LIST_MEMBER_ID
4250                   ,sysdate                                                 -- LAST_UPDATE_DATE
4251                   ,fnd_global.user_id                                      -- LAST_UPDATED_BY
4252                   ,sysdate                                                 -- CREATION_DATE
4253                   ,fnd_global.user_id                                      -- CREATED_BY
4254                   ,fnd_global.login_id                                     -- LAST_UPDATE_LOGIN
4255                   ,l_unit_of_measure_tbl(j)                                -- UNIT_OF_MEASURE
4256                   ,NULL                                                    -- TRACK_AS_LABOR_FLAG
4257                   ,NULL                                                    -- STANDARD_BILL_RATE
4258                   ,NULL                                                    -- AVERAGE_BILL_RATE
4259                   ,NULL                                                    -- AVERAGE_COST_RATE
4260                   ,nvl(l_project_assignment_id_tbl(j),-1)                  -- PROJECT_ASSIGNMENT_ID
4261                   ,NULL                                          -- PLAN_ERROR_CODE
4262                   ,NULL                                          -- TOTAL_PLAN_REVENUE
4263                   ,NULL                                          -- TOTAL_PLAN_RAW_COST
4264                   ,NULL                                          -- TOTAL_PLAN_BURDENED_COST
4265                   ,NULL                                          -- TOTAL_PLAN_QUANTITY
4266                   ,NULL                                          -- AVERAGE_DISCOUNT_PERCENTAGE
4267                   ,NULL                                          -- TOTAL_BORROWED_REVENUE
4268                   ,NULL                                          -- TOTAL_TP_REVENUE_IN
4269                   ,NULL                                          -- TOTAL_TP_REVENUE_OUT
4270                   ,NULL                                          -- TOTAL_REVENUE_ADJ
4271                   ,NULL                                          -- TOTAL_LENT_RESOURCE_COST
4272                   ,NULL                                          -- TOTAL_TP_COST_IN
4273                   ,NULL                                          -- TOTAL_TP_COST_OUT
4274                   ,NULL                                          -- TOTAL_COST_ADJ
4275                   ,NULL                                          -- TOTAL_UNASSIGNED_TIME_COST
4276                   ,NULL                                          -- TOTAL_UTILIZATION_PERCENT
4277                   ,NULL                                          -- TOTAL_UTILIZATION_HOURS
4278                   ,NULL                                          -- TOTAL_UTILIZATION_ADJ
4279                   ,NULL                                          -- TOTAL_CAPACITY
4280                   ,NULL                                          -- TOTAL_HEAD_COUNT
4281                   ,NULL                                          -- TOTAL_HEAD_COUNT_ADJ
4282                   ,'USER_ENTERED'                                -- RESOURCE_ASSIGNMENT_TYPE
4283                   ,NULL                                          -- TOTAL_PROJECT_RAW_COST
4284                   ,NULL                                          -- TOTAL_PROJECT_BURDENED_COST
4285                   ,NULL                                          -- TOTAL_PROJECT_REVENUE
4286                   ,NULL                                          -- PARENT_ASSIGNMENT_ID
4287                   ,decode(p_one_to_one_mapping_flag,'Y',l_task_elem_rlm_tbl(j)
4288                                                        ,p_task_elem_version_id_tbl(i))      -- WBS_ELEMENT_VERSION_ID
4289                   ,l_rbs_element_id_tbl(j)                       -- RBS_ELEMENT_ID
4290                   ,l_planning_start_date_tbl(j)                  -- PLANNING_START_DATE
4291                   ,l_planning_end_date_tbl(j)                    -- PLANNING_END_DATE
4292                   ,l_schedule_start_date_tbl(j)                  -- SCHEDULE_START_DATE
4293                   ,l_schedule_end_date_tbl(j)                    -- SCHEDULE_END_DATE
4294                   ,l_spread_curve_id_tbl(j)                      -- SPREAD_CURVE_ID
4295                   ,l_etc_method_code_tbl(j)                      -- ETC_METHOD_CODE
4296                   ,l_res_type_code_tbl(j)                        -- RES_TYPE_CODE
4297                   ,l_attribute_category_tbl(j)                   -- ATTRIBUTE_CATEGORY
4298                   ,l_ATTRIBUTE1_tbl(j)                           -- ATTRIBUTE1
4299                   ,l_ATTRIBUTE2_tbl(j)                           -- ATTRIBUTE2
4300                   ,l_ATTRIBUTE3_tbl(j)                           -- ATTRIBUTE3
4301                   ,l_ATTRIBUTE4_tbl(j)                           -- ATTRIBUTE4
4302                   ,l_ATTRIBUTE5_tbl(j)                           -- ATTRIBUTE5
4303                   ,l_ATTRIBUTE6_tbl(j)                           -- ATTRIBUTE6
4304                   ,l_ATTRIBUTE7_tbl(j)                           -- ATTRIBUTE7
4305                   ,l_ATTRIBUTE8_tbl(j)                           -- ATTRIBUTE8
4306                   ,l_ATTRIBUTE9_tbl(j)                           -- ATTRIBUTE9
4307                   ,l_ATTRIBUTE10_tbl(j)                          -- ATTRIBUTE10
4308                   ,l_ATTRIBUTE11_tbl(j)                          -- ATTRIBUTE11
4309                   ,l_ATTRIBUTE12_tbl(j)                          -- ATTRIBUTE12
4310                   ,l_ATTRIBUTE13_tbl(j)                          -- ATTRIBUTE13
4311                   ,l_ATTRIBUTE14_tbl(j)                          -- ATTRIBUTE14
4312                   ,l_ATTRIBUTE15_tbl(j)                          -- ATTRIBUTE15
4313                   ,l_ATTRIBUTE16_tbl(j)                          -- ATTRIBUTE16
4314                   ,l_ATTRIBUTE17_tbl(j)                          -- ATTRIBUTE17
4315                   ,l_ATTRIBUTE18_tbl(j)                          -- ATTRIBUTE18
4316                   ,l_ATTRIBUTE19_tbl(j)                          -- ATTRIBUTE19
4317                   ,l_ATTRIBUTE20_tbl(j)                          -- ATTRIBUTE20
4318                   ,l_ATTRIBUTE21_tbl(j)                          -- ATTRIBUTE21
4319                   ,l_ATTRIBUTE22_tbl(j)                          -- ATTRIBUTE22
4320                   ,l_ATTRIBUTE23_tbl(j)                          -- ATTRIBUTE23
4321                   ,l_ATTRIBUTE24_tbl(j)                          -- ATTRIBUTE24
4322                   ,l_ATTRIBUTE25_tbl(j)                          -- ATTRIBUTE25
4323                   ,l_ATTRIBUTE26_tbl(j)                          -- ATTRIBUTE26
4324                   ,l_ATTRIBUTE27_tbl(j)                          -- ATTRIBUTE27
4325                   ,l_ATTRIBUTE28_tbl(j)                          -- ATTRIBUTE28
4326                   ,l_ATTRIBUTE29_tbl(j)                          -- ATTRIBUTE29
4327                   ,l_ATTRIBUTE30_tbl(j)                          -- ATTRIBUTE30
4328                   ,l_fc_res_type_code_tbl(j)                     -- FC_RES_TYPE_CODE
4329                   ,l_resource_class_code_tbl(j)                  -- RESOURCE_CLASS_CODE
4330                   ,l_organization_id_tbl(j)                      -- ORGANIZATION_ID
4331                   ,l_job_id_tbl(j)                               -- JOB_ID
4332                   ,l_person_id_tbl(j)                            -- PERSON_ID
4333                   ,l_expenditure_type_tbl(j)                     -- EXPENDITURE_TYPE
4334                   ,l_expenditure_category_tbl(j)                 -- EXPENDITURE_CATEGORY
4335                   ,l_revenue_category_code_tbl(j)                -- REVENUE_CATEGORY_CODE
4336                   ,l_event_type_tbl(j)                           -- EVENT_TYPE
4337                   ,l_supplier_id_tbl(j)                          -- SUPPLIER_ID
4338                   ,l_non_labor_resource_tbl(j)                   -- NON_LABOR_RESOURCE
4339                   ,l_bom_resource_id_tbl(j)                      -- BOM_RESOURCE_ID
4340                   ,l_inventory_item_id_tbl(j)                    -- INVENTORY_ITEM_ID
4341                   ,l_item_category_id_tbl(j)                     -- ITEM_CATEGORY_ID
4342                   ,1                                             -- RECORD_VERSION_NUMBER
4343                   ,l_billable_percent_tbl(j)                     -- BILLABLE_PERCENT
4344                   ,NULL                                          -- TRANSACTION_SOURCE_CODE
4345                   ,l_mfc_cost_type_id_tbl(j)                     -- MFC_COST_TYPE_ID
4346                   ,l_procure_resource_flag_tbl(j)                -- PROCURE_RESOURCE_FLAG
4347                   ,l_assignment_description_tbl(j)               -- ASSIGNMENT_DESCRIPTION
4348                   ,l_incurred_by_res_flag_tbl(j)                 -- INCURRED_BY_RES_FLAG
4349                   ,NULL                                          -- RATE_JOB_ID
4350                   ,l_rate_expenditure_type_tbl(j)                -- RATE_EXPENDITURE_TYPE
4351                   ,'Y'                                           -- TA_DISPLAY_FLAG
4352                   ,decode(l_spread_curve_id_tbl(j),l_fixed_date_sp_id,nvl(l_sp_fixed_date_tbl(j),l_planning_start_date_tbl(j)),null) -- SP_FIXED_DATE -- Bug 3607061
4353                   ,l_person_type_code_tbl(j)                     -- PERSON_TYPE_CODE
4354                   ,l_rate_based_flag_tbl(j)                      -- RATE_BASED_FLAG
4355                   ,l_use_task_schedule_flag_tbl(j)               -- USE_TASK_SCHEDULE_FLAG
4356                   ,l_rate_func_curr_code_tbl(j)                  -- RATE_EXP_FUNC_CURR_CODE
4357                   ,l_org_id_tbl(j)                               -- RATE_EXPENDITURE_ORG_ID
4358                   ,l_incur_by_res_class_code_tbl(j)              -- INCUR_BY_RES_CLASS_CODE
4359                   ,l_incur_by_role_id_tbl(j)                     -- INCUR_BY_ROLE_ID
4360                   ,l_project_role_id_tbl(j)                      -- PROJECT_ROLE_ID
4361                   ,l_resource_class_flag_tbl(j)                  -- RESOURCE_CLASS_FLAG
4362                   ,l_named_role_tbl(j)                           -- NAMED_ROLE
4363                   ,l_txn_accum_header_id_tbl(j)                  -- TXN ACCUM HEADER ID
4364                   ,l_unplanned_flag_tbl(j)                       -- UNPLANNED_FLAG
4365                   ,l_pm_product_code_tbl(j)                      -- PM_PRODUCT_CODE
4366                   ,l_pm_res_asgmt_ref_tbl(j)                     -- PM_RES_ASSIGNMENT_REFERENCE
4367                   ,l_scheduled_delay(j)                          -- SCHEDULED_DELAY. For bug 3948128
4368 		  ,l_rate_based_flag_tbl(j)                      -- resource_RATE_BASED_FLAG
4369                   )
4370                    RETURNING resource_assignment_id
4371 		   BULK COLLECT INTO l_res_assignment_id_temp_tbl ;
4372 
4373             -- IPM changes - copy the RA ID's created so that the new entity
4374             -- can be populated.
4375             l_orig_count :=  l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
4376             l_ra_id_temp_tbl.extend(l_res_assignment_id_temp_tbl.COUNT);
4377             l_curr_code_temp_tbl.extend(l_res_assignment_id_temp_tbl.COUNT);
4378             FOR i IN l_orig_count+1 .. l_orig_count+l_res_assignment_id_temp_tbl.COUNT LOOP -- bug 5003827 issue 22
4379               l_ra_id_temp_tbl(i) := l_res_assignment_id_temp_tbl(i-l_orig_count); -- bug 5003827 issue 22
4380               -- Bug 5003827 issue 1
4381               IF  p_currency_code_tbl.EXISTS(i-l_orig_count) AND
4382                    NVL(p_currency_code_tbl(i-l_orig_count),FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
4383                  l_curr_code_temp_tbl(i) := p_currency_code_tbl(i-l_orig_count);
4384               ELSE
4385                  l_curr_code_temp_tbl(i) := l_proj_curr_code;
4386               END IF;
4387             END LOOP; -- bug 5003827 issue 22
4388 
4389             -------------------------------------------------------------------------------
4390             --No of records in rlm id tbl should be equal to the no of records in ra id tb;
4391             -------------------------------------------------------------------------------
4392 
4393             IF l_res_assignment_id_temp_tbl.COUNT <> l_eligible_rlm_ids_tbl.COUNT THEN
4394                    IF l_debug_mode = 'Y' THEN
4395                       pa_debug.g_err_stage:='For Budget and Forcast p_context - data mismatch';
4396                       pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4397                    END IF;
4398                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4399             END IF;
4400             -----------------------------------------------------------------------
4401             -- Populating resource assignments and corresponding spread amount flags
4402             -- in PLSql tables. for IN parameters of Calculate API
4403             -- If Quantity exists in the IN parameter then set it to 'Y'
4404             -- or else set it to 'N'
4405             -----------------------------------------------------------------------
4406 
4407             IF ( l_res_assignment_id_temp_tbl.COUNT >0) THEN
4408                 FOR k IN l_res_assignment_id_temp_tbl.FIRST .. l_res_assignment_id_temp_tbl.LAST LOOP
4409 
4410                     IF l_debug_mode = 'Y' THEN
4411                         pa_debug.g_err_stage:='BULK INSERTING DATA - TASK Setting DATA - raid count : '||l_res_assignment_id_temp_tbl.COUNT;
4412                         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4413                     END IF;
4414 
4415                     l_res_assignment_id_tbl(l_index) := l_res_assignment_id_temp_tbl(k);
4416 
4417                     IF (((l_total_quantity_tbl.EXISTS(k)) AND (l_total_quantity_tbl.COUNT > 0))
4418                        AND ((nvl(l_total_quantity_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM)
4419  	                         /* bug fix:Bug fix:5726773 AND (l_total_quantity_tbl(k) <> 0))) OR */
4420  	                         AND (l_total_quantity_tbl(k) is NOT NULL ))) OR
4421                        (((p_raw_cost_tbl.EXISTS(k)) AND (p_raw_cost_tbl.COUNT > 0))
4422                        AND ((nvl(p_raw_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM)
4423  	                         /* bug fix:Bug fix:5726773 AND (p_raw_cost_tbl(k) <> 0))) OR */
4424  	                         AND (p_raw_cost_tbl(k) is NOT NULL))) OR
4425                        (((p_burdened_cost_tbl.EXISTS(k)) AND (p_burdened_cost_tbl.COUNT > 0))
4426                        AND ((nvl(p_burdened_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM)
4427  	                         /* bug fix:Bug fix:5726773 AND (p_burdened_cost_tbl(k) <> 0))) THEN */
4428  	                         AND (p_burdened_cost_tbl(k) is NOT NULL))) THEN
4429 
4430                         IF l_debug_mode = 'Y' THEN
4431                             pa_debug.g_err_stage:='BULK INSERTING DATA - TASK spread amount flag';
4432                             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4433                         END IF;
4434                         l_spread_amount_flags_tbl(l_index) := 'Y';
4435                         l_call_calc_api := 'Y';
4436 
4437                         -- Bug 3861653
4438                         IF p_currency_code_tbl.EXISTS(k) AND
4439                            NVL(p_currency_code_tbl(k),FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
4440 
4441                            l_currency_code_tbl(l_index)     := p_currency_code_tbl(k);
4442                         ELSE
4443                            l_currency_code_tbl(l_index)     := l_proj_curr_code;
4444                         END IF;
4445 
4446                         IF l_total_quantity_tbl.EXISTS(k) AND
4447                            NVL(l_total_quantity_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4448                            /* bug fix:Bug fix:5726773 l_total_quantity_tbl(k) <> 0 THEN */
4449  	                   l_total_quantity_tbl(k) is NOT NULL THEN
4450 
4451                            l_quantity_tbl(l_index)     := l_total_quantity_tbl(k);
4452                         END IF;
4453 
4454                         l_cost_rate_tbl(l_index)         := l_cost_rate_override_tbl(k);
4455                         l_burden_multiplier_tbl(l_index) := l_burdened_rate_override_tbl(k);
4456 
4457                         IF p_raw_cost_tbl.EXISTS(k) AND
4458                            NVL(p_raw_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4459                            /* bug fix:Bug fix:5726773 p_raw_cost_tbl(k) <> 0 THEN */
4460  	                   p_raw_cost_tbl(k) is NOT NULL THEN
4461 
4462                            l_raw_cost_tbl(l_index)     := p_raw_cost_tbl(k);
4463                         END IF;
4464 
4465                         IF p_burdened_cost_tbl.EXISTS(k) AND
4466                            NVL(p_burdened_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4467                            /* bug fix:Bug fix:5726773 P_burdened_cost_tbl(k) <> 0 THEN */
4468  	                   P_burdened_cost_tbl(k) is NOT NULL THEN
4469 
4470                            l_burdened_cost_tbl(l_index)     := p_burdened_cost_tbl(k);
4471                         END IF;
4472 
4473                         l_index := l_index + 1;
4474                     END IF;
4475                 END LOOP;
4476             END IF;
4477             -- Bug 3665097
4478             EXIT WHEN p_one_to_one_mapping_flag = 'Y';
4479 
4480         -----------------------------------------------------------
4481         -- For p_context = BUDGET or FORECAST
4482         -----------------------------------------------------------
4483         ELSIF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET) OR
4484                (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST))  THEN
4485 
4486             ---------------------------------------------------------
4487             -- BULK Inserting records into pa_resource_assignments
4488             -- by iterating throught elligle resource list member ids
4489             ---------------------------------------------------------
4490 
4491             ----------------------------------------------------------------
4492             /* Notes to Dev - These changes are only done for B/F Context.
4493                If Skip Duplicate Flag is Passed as Y to Add Planning Transaction API then
4494                if a record already exists in PA_RESOURCE_ASSIGNMENTS for a given Planning
4495                Element passed then the particular record is to be skipped whcile doing a
4496                bulk insert into PA_RESOURCE_ASSIGNMENT.
4497                However If quantity/amounts are passed for the planning elment which has
4498                been skipped for Insert. Calculate API would still be called for it.
4499 
4500                As of Now Version - 115.122, the usage of p_skip_duplicate_flags is from
4501                1) Add task and resource page. When Resources are selected to be added as
4502                   planning elements for multiple tasks. One or Resource Assignments would
4503                   already exists and Insert in RA table would have to be skipped.
4504                   But in this case Quantities/Amounts are not passed so Calculate API is
4505                   not getting called.
4506                2) Edit Plan Page "Add Another Row" feature.
4507                   Consider the following input data.
4508                   1) t1 r1 c1
4509                   2) t1 r1 c2
4510                   3) t2 r2 c2
4511                   4) t3 r3 c2
4512                   5) t4 r4 c4
4513 
4514                   System State is such that RA Already Exists for
4515                   1) t1 r1
4516                   2) t3 r3
4517 
4518                   In this case Only the following RAs will be inserted.
4519                   1)t2 r2 and
4520                   3)t4 r4
4521 
4522                   Basically records 1)2) and 4) have to be skipped.
4523                   However calculate API still Will be called for All the 5 records.
4524                   This will be taken care by using save exceptions clause in the FORALL Insert below
4525             */
4526             ----------------------------------------------------------------
4527 
4528             -----------------------------------------------------------------
4529             -- The Insert Statement below has been modified for changes due to
4530             -- Bug 3719918. When p_one_to_one_mapping_flag is passed as Y for
4531             -- Bugdet/Forecast context. The Bulk insert is run once once for
4532             -- the same index as of rlm_ids.
4533             -- The Exit Condition below takes care of the insert running only once.
4534             -------------------------------------------------------------------
4535 
4536             BEGIN
4537                 IF l_debug_mode = 'Y' THEN
4538                     pa_debug.g_err_stage:='BULK INSERTING DATA - Context TASK p_context : '||p_context;
4539                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4540 
4541                     pa_debug.g_err_stage:='l_eligible_rlm_ids_tbl.count  '||l_eligible_rlm_ids_tbl.count;
4542                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4543 
4544                     pa_debug.g_err_stage:='l_bf_quantity_tbl.count  '||l_bf_quantity_tbl.count;
4545                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4546 
4547                     pa_debug.g_err_stage:='l_bf_raw_cost_tbl.count  '||l_bf_raw_cost_tbl.count;
4548                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4549 
4550                     pa_debug.g_err_stage:='l_bf_burdened_cost_tbl.count  '||l_bf_burdened_cost_tbl.count;
4551                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4552 
4553                     pa_debug.g_err_stage:='l_bf_revenue_tbl.count  '||l_bf_revenue_tbl.count;
4554                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4555 
4556                     pa_debug.g_err_stage:='l_bf_currency_code_tbl.count  '||l_bf_currency_code_tbl.count;
4557                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4558 
4559                     pa_debug.g_err_stage:='l_bf_cost_rate_tbl.count  '||l_bf_cost_rate_tbl.count;
4560                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4561 
4562                     pa_debug.g_err_stage:='l_bf_bill_rate_tbl.count  '||l_bf_bill_rate_tbl.count;
4563                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4564 
4565                     pa_debug.g_err_stage:='l_bf_burdened_rate_tbl.count  '||l_bf_burdened_rate_tbl.count;
4566                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4567 
4568 
4569                 END IF;
4570 
4571 
4572                 FORALL j IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST SAVE EXCEPTIONS
4573                     INSERT INTO PA_RESOURCE_ASSIGNMENTS (
4574                        RESOURCE_ASSIGNMENT_ID,BUDGET_VERSION_ID,PROJECT_ID,TASK_ID,RESOURCE_LIST_MEMBER_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,CREATION_DATE,CREATED_BY
4575                       ,LAST_UPDATE_LOGIN,UNIT_OF_MEASURE,TRACK_AS_LABOR_FLAG,STANDARD_BILL_RATE,AVERAGE_BILL_RATE,AVERAGE_COST_RATE
4576                       ,PROJECT_ASSIGNMENT_ID,PLAN_ERROR_CODE,TOTAL_PLAN_REVENUE,TOTAL_PLAN_RAW_COST,TOTAL_PLAN_BURDENED_COST,TOTAL_PLAN_QUANTITY
4577                       ,AVERAGE_DISCOUNT_PERCENTAGE,TOTAL_BORROWED_REVENUE,TOTAL_TP_REVENUE_IN,TOTAL_TP_REVENUE_OUT,TOTAL_REVENUE_ADJ
4578                       ,TOTAL_LENT_RESOURCE_COST,TOTAL_TP_COST_IN,TOTAL_TP_COST_OUT,TOTAL_COST_ADJ,TOTAL_UNASSIGNED_TIME_COST
4579                       ,TOTAL_UTILIZATION_PERCENT,TOTAL_UTILIZATION_HOURS,TOTAL_UTILIZATION_ADJ,TOTAL_CAPACITY,TOTAL_HEAD_COUNT
4580                       ,TOTAL_HEAD_COUNT_ADJ,RESOURCE_ASSIGNMENT_TYPE,TOTAL_PROJECT_RAW_COST,TOTAL_PROJECT_BURDENED_COST,TOTAL_PROJECT_REVENUE
4581                       ,PARENT_ASSIGNMENT_ID,WBS_ELEMENT_VERSION_ID,RBS_ELEMENT_ID,PLANNING_START_DATE,PLANNING_END_DATE,SCHEDULE_START_DATE,SCHEDULE_END_DATE
4582                       ,SPREAD_CURVE_ID,ETC_METHOD_CODE,RES_TYPE_CODE,ATTRIBUTE_CATEGORY,ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3,ATTRIBUTE4,ATTRIBUTE5
4583                       ,ATTRIBUTE6,ATTRIBUTE7,ATTRIBUTE8,ATTRIBUTE9,ATTRIBUTE10,ATTRIBUTE11,ATTRIBUTE12,ATTRIBUTE13,ATTRIBUTE14,ATTRIBUTE15
4584                       ,ATTRIBUTE16,ATTRIBUTE17,ATTRIBUTE18,ATTRIBUTE19,ATTRIBUTE20,ATTRIBUTE21,ATTRIBUTE22,ATTRIBUTE23,ATTRIBUTE24,ATTRIBUTE25
4585                       ,ATTRIBUTE26,ATTRIBUTE27,ATTRIBUTE28,ATTRIBUTE29,ATTRIBUTE30,FC_RES_TYPE_CODE,RESOURCE_CLASS_CODE,ORGANIZATION_ID,JOB_ID
4586                       ,PERSON_ID,EXPENDITURE_TYPE,EXPENDITURE_CATEGORY,REVENUE_CATEGORY_CODE,EVENT_TYPE,SUPPLIER_ID,NON_LABOR_RESOURCE
4587                       ,BOM_RESOURCE_ID,INVENTORY_ITEM_ID,ITEM_CATEGORY_ID,RECORD_VERSION_NUMBER,BILLABLE_PERCENT
4588                       ,TRANSACTION_SOURCE_CODE,MFC_COST_TYPE_ID,PROCURE_RESOURCE_FLAG,ASSIGNMENT_DESCRIPTION
4589                       ,INCURRED_BY_RES_FLAG,RATE_JOB_ID,RATE_EXPENDITURE_TYPE,TA_DISPLAY_FLAG
4590                       ,SP_FIXED_DATE,PERSON_TYPE_CODE,RATE_BASED_FLAG,USE_TASK_SCHEDULE_FLAG,RATE_EXP_FUNC_CURR_CODE
4591                       ,RATE_EXPENDITURE_ORG_ID,INCUR_BY_RES_CLASS_CODE,INCUR_BY_ROLE_ID
4592                       ,PROJECT_ROLE_ID,RESOURCE_CLASS_FLAG,NAMED_ROLE,TXN_ACCUM_HEADER_ID
4593                       ,PM_PRODUCT_CODE, PM_RES_ASSIGNMENT_REFERENCE, resource_rate_based_flag)
4594                       VALUES
4595                     (  pa_resource_assignments_s.nextval  -- RESOURCE_ASSIGNMENT_ID
4596                       ,l_budget_version_id                -- BUDGET_VERSION_ID
4597                       ,p_project_id                       -- PROJECT_ID
4598                       ,decode(p_one_to_one_mapping_flag,'Y',l_bf_proj_elem_tbl(j)
4599                                                            ,l_proj_element_id_tbl(i))           -- TASK_ID
4600                       ,l_eligible_rlm_ids_tbl(j)          -- RESOURCE_LIST_MEMBER_ID
4601                       ,sysdate                            -- LAST_UPDATE_DATE
4602                       ,fnd_global.user_id                 -- LAST_UPDATED_BY
4603                       ,sysdate                            -- CREATION_DATE
4604                       ,fnd_global.user_id                 -- CREATED_BY
4605                       ,fnd_global.login_id                -- LAST_UPDATE_LOGIN
4606                       ,l_unit_of_measure_tbl(j)           -- UNIT_OF_MEASURE
4607                       ,NULL                               -- TRACK_AS_LABOR_FLAG
4608                       ,NULL                               -- STANDARD_BILL_RATE
4609                       ,NULL                               -- AVERAGE_BILL_RATE
4610                       ,NULL                               -- AVERAGE_COST_RATE
4611                       ,-1                                 -- PROJECT_ASSIGNMENT_ID
4612                       ,NULL                               -- PLAN_ERROR_CODE
4613                       ,NULL                               -- TOTAL_PLAN_REVENUE
4614                       ,NULL                               -- TOTAL_PLAN_RAW_COST
4615                       ,NULL                               -- TOTAL_PLAN_BURDENED_COST
4616                       ,NULL                               -- TOTAL_PLAN_QUANTITY
4617                       ,NULL                               -- AVERAGE_DISCOUNT_PERCENTAGE
4618                       ,NULL                               -- TOTAL_BORROWED_REVENUE
4619                       ,NULL                               -- TOTAL_TP_REVENUE_IN
4620                       ,NULL                               -- TOTAL_TP_REVENUE_OUT
4621                       ,NULL                               -- TOTAL_REVENUE_ADJ
4622                       ,NULL                               -- TOTAL_LENT_RESOURCE_COST
4623                       ,NULL                               -- TOTAL_TP_COST_IN
4624                       ,NULL                               -- TOTAL_TP_COST_OUT
4625                       ,NULL                               -- TOTAL_COST_ADJ
4626                       ,NULL                               -- TOTAL_UNASSIGNED_TIME_COST
4627                       ,NULL                               -- TOTAL_UTILIZATION_PERCENT
4628                       ,NULL                               -- TOTAL_UTILIZATION_HOURS
4629                       ,NULL                               -- TOTAL_UTILIZATION_ADJ
4630                       ,NULL                               -- TOTAL_CAPACITY
4631                       ,NULL                               -- TOTAL_HEAD_COUNT
4632                       ,NULL                               -- TOTAL_HEAD_COUNT_ADJ
4633                       ,'USER_ENTERED'                     -- RESOURCE_ASSIGNMENT_TYPE
4634                       ,NULL                               -- TOTAL_PROJECT_RAW_COST
4635                       ,NULL                               -- TOTAL_PROJECT_BURDENED_COST
4636                       ,NULL                               -- TOTAL_PROJECT_REVENUE
4637                       ,NULL                               -- PARENT_ASSIGNMENT_ID
4638                       ,NULL                               -- WBS_ELEMENT_VERSION_ID --Bug 3546208
4639                       ,l_rbs_element_id_tbl(j)            -- RBS_ELEMENT_ID
4640                       ,decode(p_one_to_one_mapping_flag,'Y',l_bf_start_date_tbl(j)
4641                                                            ,l_start_date_tbl(i))                -- PLANNING_START_DATE
4642                       ,decode(p_one_to_one_mapping_flag,'Y',l_bf_compl_date_tbl(j)
4643                                                            ,l_compl_date_tbl(i))                -- PLANNING_END_DATE
4644                       ,decode(p_one_to_one_mapping_flag,'Y',l_bf_start_date_tbl(j)
4645                                                            ,l_start_date_tbl(i))                -- SCHEDULE_START_DATE
4646                       ,decode(p_one_to_one_mapping_flag,'Y',l_bf_compl_date_tbl(j)
4647                                                            ,l_compl_date_tbl(i))                -- SCHEDULE_END_DATE
4648                       ,l_spread_curve_id_tbl(j)           -- SPREAD_CURVE_ID
4649                       ,l_etc_method_code_tbl(j)           -- ETC_METHOD_CODE
4650                       ,l_res_type_code_tbl(j)             -- RES_TYPE_CODE
4651                       ,NULL                               -- ATTRIBUTE_CATEGORY
4652                       ,NULL                               -- ATTRIBUTE1
4653                       ,NULL                               -- ATTRIBUTE2
4654                       ,NULL                               -- ATTRIBUTE3
4655                       ,NULL                               -- ATTRIBUTE4
4656                       ,NULL                               -- ATTRIBUTE5
4657                       ,NULL                               -- ATTRIBUTE6
4658                       ,NULL                               -- ATTRIBUTE7
4659                       ,NULL                               -- ATTRIBUTE8
4660                       ,NULL                               -- ATTRIBUTE9
4661                       ,NULL                               -- ATTRIBUTE10
4662                       ,NULL                               -- ATTRIBUTE11
4663                       ,NULL                               -- ATTRIBUTE12
4664                       ,NULL                               -- ATTRIBUTE13
4665                       ,NULL                               -- ATTRIBUTE14
4666                       ,NULL                               -- ATTRIBUTE15
4667                       ,NULL                               -- ATTRIBUTE16
4668                       ,NULL                               -- ATTRIBUTE17
4669                       ,NULL                               -- ATTRIBUTE18
4670                       ,NULL                               -- ATTRIBUTE19
4671                       ,NULL                               -- ATTRIBUTE20
4672                       ,NULL                               -- ATTRIBUTE21
4673                       ,NULL                               -- ATTRIBUTE22
4674                       ,NULL                               -- ATTRIBUTE23
4675                       ,NULL                               -- ATTRIBUTE24
4676                       ,NULL                               -- ATTRIBUTE25
4677                       ,NULL                               -- ATTRIBUTE26
4678                       ,NULL                               -- ATTRIBUTE27
4679                       ,NULL                               -- ATTRIBUTE28
4680                       ,NULL                               -- ATTRIBUTE29
4681                       ,NULL                               -- ATTRIBUTE30
4682                       ,l_fc_res_type_code_tbl(j)          -- FC_RES_TYPE_CODE
4683                       ,l_resource_class_code_tbl(j)       -- RESOURCE_CLASS_CODE
4684                       ,l_organization_id_tbl(j)           -- ORGANIZATION_ID
4685                       ,l_job_id_tbl(j)                    -- JOB_ID
4686                       ,l_person_id_tbl(j)                 -- PERSON_ID
4687                       ,l_expenditure_type_tbl(j)          -- EXPENDITURE_TYPE
4688                       ,l_expenditure_category_tbl(j)      -- EXPENDITURE_CATEGORY
4689                       ,l_revenue_category_code_tbl(j)     -- REVENUE_CATEGORY_CODE
4690                       ,l_event_type_tbl(j)                -- EVENT_TYPE
4691                       ,l_supplier_id_tbl(j)               -- SUPPLIER_ID
4692                       ,l_non_labor_resource_tbl(j)        -- NON_LABOR_RESOURCE
4693                       ,l_bom_resource_id_tbl(j)           -- BOM_RESOURCE_ID
4694                       ,l_inventory_item_id_tbl(j)         -- INVENTORY_ITEM_ID
4695                       ,l_item_category_id_tbl(j)          -- ITEM_CATEGORY_ID
4696                       ,1                                  -- RECORD_VERSION_NUMBER
4697                       ,NULL                               -- BILLABLE_PERCENT
4698                       ,NULL                               -- TRANSACTION_SOURCE_CODE
4699                       ,l_mfc_cost_type_id_tbl(j)          -- MFC_COST_TYPE_ID
4700                       ,NULL                               -- PROCURE_RESOURCE_FLAG
4701                       ,NULL                               -- ASSIGNMENT_DESCRIPTION
4702                       ,l_incurred_by_res_flag_tbl(j)      -- INCURRED_BY_RES_FLAG
4703                       ,NULL                               -- RATE_JOB_ID
4704                       ,l_rate_expenditure_type_tbl(j)     -- RATE_EXPENDITURE_TYPE
4705                       ,NULL                               -- TA_DISPLAY_FLAG
4706                       ,decode(p_one_to_one_mapping_flag,'Y',decode(l_spread_curve_id_tbl(j),l_fixed_date_sp_id,l_bf_start_date_tbl(j),null)
4707                                                            ,decode(l_spread_curve_id_tbl(j),l_fixed_date_sp_id,l_start_date_tbl(i),null))  -- SP_FIXED_DATE -- Bug 3607061
4708                       ,l_person_type_code_tbl(j)          -- PERSON_TYPE_CODE
4709                       ,l_rate_based_flag_tbl(j)           -- RATE_BASED_FLAG
4710                       ,l_use_task_schedule_flag_tbl(j)    -- USE_TASK_SCHEDULE_FLAG
4711                       ,l_rate_func_curr_code_tbl(j)       -- RATE_EXP_FUNC_CURR_CODE
4712                       ,l_org_id_tbl(j)                    -- RATE_EXPENDITURE_ORG_ID
4713                       ,l_incur_by_res_class_code_tbl(j)   -- INCUR_BY_RES_CLASS_CODE
4714                       ,l_incur_by_role_id_tbl(j)          -- INCUR_BY_ROLE_ID
4715                       ,l_project_role_id_tbl(j)           -- PROJECT_ROLE_ID
4716                       ,l_resource_class_flag_tbl(j)       -- RESOURCE_CLASS_FLAG
4717                       ,l_named_role_tbl(j)                -- NAMED_ROLE
4718                       ,l_txn_accum_header_id_tbl(j)       -- TXN ACCUM HEADER ID
4719                       ,l_pm_product_code_tbl(j)               -- PM_PRODUCT_CODE
4720                       ,l_pm_res_asgmt_ref_tbl(j)              -- PM_RES_ASSIGNMENT_REFERENCE
4721 		      ,l_rate_based_flag_tbl(j)           -- resource_RATE_BASED_FLAG
4722                       )
4723                       RETURNING
4724                       task_id,
4725                       resource_list_member_id,
4726                       resource_assignment_id,
4727                       l_bf_quantity_tbl(j),
4728                       l_bf_raw_cost_tbl(j),
4729                       l_bf_burdened_cost_tbl(j),
4730                       l_bf_revenue_tbl(j),
4731                       l_bf_currency_code_tbl(j),
4732                       l_bf_cost_rate_tbl(j),
4733                       l_bf_bill_rate_tbl(j),
4734                       l_bf_burdened_rate_tbl(j)
4735                       BULK COLLECT INTO
4736                       l_bf_task_id_tbl,
4737                       l_bf_rlm_id_tbl,
4738                       l_bf_ra_id_tbl,
4739                       l_bf_ins_quantity_tbl,
4740                       l_bf_ins_raw_cost_tbl,
4741                       l_bf_ins_burdened_cost_tbl,
4742                       l_bf_ins_revenue_tbl,
4743                       l_bf_ins_currency_code_tbl,
4744                       l_bf_ins_cost_rate_tbl,
4745                       l_bf_ins_bill_rate_tbl,
4746                       l_bf_ins_burdened_rate_tbl;
4747 
4748     -- IPM changes - copy the RA ID's created so that the new entity
4749     -- can be populated.
4750     l_orig_count :=  l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
4751     l_ra_id_temp_tbl.extend(l_bf_ra_id_tbl.COUNT);
4752     l_curr_code_temp_tbl.extend(l_bf_ins_currency_code_tbl.COUNT);
4753     FOR i IN l_orig_count+1 .. l_orig_count+l_bf_ra_id_tbl.COUNT LOOP -- bug 5003827 issue 22
4754       l_ra_id_temp_tbl(i) := l_bf_ra_id_tbl(i-l_orig_count); -- bug 5003827 issue 22
4755       l_curr_code_temp_tbl(i) := l_bf_ins_currency_code_tbl(i-l_orig_count); -- bug 5003827 issue 22
4756     END LOOP; -- bug 5003827 issue 22
4757 
4758 -- hr_utility.trace('after copy 1');
4759 -- hr_utility.trace('l_ra_id_temp_tbl.COUNT IS : ' || l_ra_id_temp_tbl.COUNT);
4760 -- hr_utility.trace('l_bf_ra_id_tbl.COUNT IS : ' || l_bf_ra_id_tbl.COUNT);
4761 -- hr_utility.trace('l_bf_ins_currency_code_tbl(1) IS : ' || l_bf_ins_currency_code_tbl(1));
4762 -- hr_utility.trace('*****');
4763             EXCEPTION
4764             WHEN dml_errors THEN
4765 
4766                 IF p_skip_duplicates_flag='Y' THEN
4767 
4768                     --If p_one_to_one_mapping_flag is not Y then the amounts will never be passed to this API
4769                     --Hence we can ignore the pl/sql tbls bulk collected above
4770                     IF p_one_to_one_mapping_flag='Y' THEN
4771 
4772                         l_index := l_bf_task_id_tbl.count;
4773 
4774 
4775 
4776                         IF (l_index + SQL%BULK_EXCEPTIONS.COUNT ) <> l_eligible_rlm_ids_tbl.COUNT THEN
4777 
4778                             pa_debug.g_err_stage:='No of inserted records + No. of errored records is not equal to total no. of input records';
4779                             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4780 
4781                             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4782                                                 p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
4783                                                 p_token1         => 'PROCEDURENAME',
4784                                                 p_value1         => 'ADD_PLANNING_TRANSACTIONS',
4785                                                 p_token2         => 'STAGE',
4786                                                 p_value2         => 'Ins Recs + Err Recs <> Total Recs ['||l_index||' , '||SQL%BULK_EXCEPTIONS.COUNT ||' , '||l_eligible_rlm_ids_tbl.COUNT );
4787 
4788                             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4789 
4790                         END IF;
4791 
4792                         l_bf_task_id_tbl.extend(l_rlm_id_no_of_rows-l_bf_task_id_tbl.count);
4793                         l_bf_rlm_id_tbl.extend(l_rlm_id_no_of_rows-l_bf_rlm_id_tbl.count);
4794                         l_bf_ra_id_tbl.extend(l_rlm_id_no_of_rows-l_bf_ra_id_tbl.count);
4795                         l_bf_ins_quantity_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_quantity_tbl.count);
4796                         l_bf_ins_currency_code_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_currency_code_tbl.count);
4797                         l_bf_ins_raw_cost_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_raw_cost_tbl.count);
4798                         l_bf_ins_burdened_cost_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_burdened_cost_tbl.count);
4799                         l_bf_ins_revenue_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_revenue_tbl.count);
4800                         l_bf_ins_cost_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_cost_rate_tbl.count);
4801                         l_bf_ins_bill_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_bill_rate_tbl.count);
4802                         l_bf_ins_burdened_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_burdened_rate_tbl.count);
4803 
4804 
4805                         --Even though the above INSERT statement fails for duplicated records, those records should also be
4806                         --prepared since the calculate API has to be called for those records. This can be done by using
4807                         --SQL%BULK_EXCEPTIONS through which it is possible to identify the iteration in which the dml has
4808                         --failed
4809                         FOR kk IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
4810 
4811 
4812                             l_temp:=SQL%BULK_EXCEPTIONS(kk).ERROR_INDEX;
4813                             SELECT task_id,
4814                                    resource_list_member_id,
4815                                    resource_assignment_id,
4816                                    l_bf_quantity_tbl(l_temp),
4817                                    l_bf_raw_cost_tbl(l_temp),
4818                                    l_bf_burdened_cost_tbl(l_temp),
4819                                    l_bf_revenue_tbl(l_temp),
4820                                    l_bf_currency_code_tbl(l_temp),
4821                                    l_bf_cost_rate_tbl(l_temp),
4822                                    l_bf_bill_rate_tbl(l_temp),
4823                                    l_bf_burdened_rate_tbl(l_temp)
4824                             INTO   l_bf_task_id_tbl(l_index+kk),
4825                                    l_bf_rlm_id_tbl(l_index+kk),
4826                                    l_bf_ra_id_tbl(l_index+kk),
4827                                    l_bf_ins_quantity_tbl(l_index+kk),
4828                                    l_bf_ins_raw_cost_tbl(l_index+kk),
4829                                    l_bf_ins_burdened_cost_tbl(l_index+kk),
4830                                    l_bf_ins_revenue_tbl(l_index+kk),
4831                                    l_bf_ins_currency_code_tbl(l_index+kk),
4832                                    l_bf_ins_cost_rate_tbl(l_index+kk),
4833                                    l_bf_ins_bill_rate_tbl(l_index+kk),
4834                                    l_bf_ins_burdened_rate_tbl(l_index+kk)
4835                             FROM   pa_resource_assignments
4836                             WHERE  project_id=p_project_id
4837                             AND    budget_version_id=l_budget_version_id
4838                             AND    task_id =l_bf_proj_elem_tbl(l_temp)
4839                             AND    resource_list_member_id=l_eligible_rlm_ids_tbl(l_temp)
4840                             AND    project_assignment_id=-1;
4841 
4842 
4843                         END LOOP;
4844 
4845                         --_ins_ tbls are used only for the FORALL Insert above. Copy them back to _bf_ tbls
4846                         --which are used in processing below
4847                         l_bf_quantity_tbl       :=    l_bf_ins_quantity_tbl;
4848                         l_bf_raw_cost_tbl       :=    l_bf_ins_raw_cost_tbl ;
4849                         l_bf_burdened_cost_tbl  :=    l_bf_ins_burdened_cost_tbl;
4850                         l_bf_revenue_tbl        :=    l_bf_ins_revenue_tbl ;
4851                         l_bf_currency_code_tbl  :=    l_bf_ins_currency_code_tbl;
4852                         l_bf_cost_rate_tbl      :=    l_bf_ins_cost_rate_tbl;
4853                         l_bf_bill_rate_tbl      :=    l_bf_ins_bill_rate_tbl;
4854                         l_bf_burdened_rate_tbl  :=    l_bf_ins_burdened_rate_tbl;
4855 
4856     -- IPM changes - copy the RA ID's created so that the new entity
4857     -- can be populated.
4858     l_orig_count :=  l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
4859     l_ra_id_temp_tbl.extend(l_bf_ra_id_tbl.COUNT);
4860     l_curr_code_temp_tbl.extend(l_bf_ins_currency_code_tbl.COUNT);
4861     FOR i IN l_orig_count+1 .. l_orig_count+l_bf_ra_id_tbl.COUNT LOOP -- bug 5003827 issue 22
4862       l_ra_id_temp_tbl(i) := l_bf_ra_id_tbl(i-l_orig_count); -- bug 5003827 issue 22
4863       l_curr_code_temp_tbl(i) := l_bf_ins_currency_code_tbl(i-l_orig_count); -- bug 5003827 issue 22
4864     END LOOP; -- bug 5003827 issue 22
4865 
4866 -- hr_utility.trace('after copy 2');
4867 -- hr_utility.trace('l_ra_id_temp_tbl.COUNT IS : ' || l_ra_id_temp_tbl.COUNT);
4868 -- hr_utility.trace('l_bf_ra_id_tbl.COUNT IS : ' || l_bf_ra_id_tbl.COUNT);
4869 -- hr_utility.trace('*****');
4870                     END IF;--IF p_one_to_one_mapping_flag='Y' THEN
4871 
4872                 ELSE
4873 
4874                     pa_debug.g_err_stage:='No of duplicates found '||SQL%BULK_EXCEPTIONS.COUNT;
4875                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4876 
4877                     RAISE;
4878 
4879                 END IF;
4880 
4881             END;
4882 
4883             IF l_debug_mode = 'Y' THEN
4884                 pa_debug.g_err_stage:='FLAG 2 '||l_bf_ra_id_tbl.COUNT;
4885                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4886             END IF;
4887 
4888             -------------------------------------------------------------------------------
4889             --No of records in rlm id tbl should be equal to the no of records in ra id tb;
4890             -------------------------------------------------------------------------------
4891             IF l_bf_ra_id_tbl.COUNT <> l_eligible_rlm_ids_tbl.COUNT AND
4892                (p_skip_duplicates_flag = 'N') THEN
4893 
4894                 IF l_debug_mode = 'Y' THEN
4895                   pa_debug.g_err_stage:='INSIDE Bulk Data insert for budget/forecast';
4896                   pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4897 
4898                   pa_debug.g_err_stage:='For Budget and Forcast p_context - data mismatch';
4899                   pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4900                 END IF;
4901                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4902 
4903             END IF;
4904 
4905             l_index := 1;
4906 
4907             -----------------------------------------------------------------------
4908             -- Populating resource assignments and corresponding spread amount flags
4909             -- in PLSql tables. for IN parameters of Calculate API
4910             -- If Quantity/Raw_Cost/Burdened_Cost exists in the IN parameter then
4911             -- set it to 'Y'or else set it to 'N'.
4912             --Calculate API will be called only when p_one_to_one_mapping_flag is Y
4913             -----------------------------------------------------------------------
4914             --IF nvl(p_skip_duplicates_flag,'N') = 'N' THEN -- Bug 3836358
4915             IF p_one_to_one_mapping_flag='Y' THEN
4916 
4917                 IF l_bf_ra_id_tbl.COUNT >0 THEN
4918 
4919                     FOR k IN l_bf_ra_id_tbl.FIRST .. l_bf_ra_id_tbl.LAST LOOP
4920 
4921                         l_res_assignment_id_tbl(l_index) := l_bf_ra_id_tbl(k);
4922                         l_amount_exists :='N';
4923 
4924                         IF l_bf_quantity_tbl.EXISTS(k) AND
4925                            NVL(l_bf_quantity_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM  AND
4926                            /* bug fix:Bug fix:5726773 l_bf_quantity_tbl(k) <> 0 THEN */
4927  	                   l_bf_quantity_tbl(k) is NOT NULL THEN
4928                           l_quantity_tbl(l_index)     := l_bf_quantity_tbl(k);
4929                           l_amount_exists := 'Y';
4930                         END IF;
4931 
4932                         IF l_bf_raw_cost_tbl.EXISTS(k) AND
4933                            NVL(l_bf_raw_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4934                            /* bug fix:Bug fix:5726773 l_bf_raw_cost_tbl(k) <> 0 THEN */
4935  	                   l_bf_raw_cost_tbl(k) is NOT NULL THEN
4936                           l_raw_cost_tbl(l_index)     := l_bf_raw_cost_tbl(k);
4937                           l_amount_exists := 'Y';
4938                         END IF;
4939 
4940                         IF l_bf_burdened_cost_tbl.EXISTS(k) AND
4941                            NVL(l_bf_burdened_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4942                            /* bug fix:Bug fix:5726773 l_bf_burdened_cost_tbl(k) <> 0 THEN */
4943  	                   l_bf_burdened_cost_tbl(k) is NOT NULL THEN
4944                           l_burdened_cost_tbl(l_index)     := l_bf_burdened_cost_tbl(k);
4945                           l_amount_exists := 'Y';
4946                         END IF;
4947 
4948                         IF l_bf_revenue_tbl.EXISTS(k) AND
4949                            NVL(l_bf_revenue_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4950                            /* bug fix:Bug fix:5726773 l_bf_revenue_tbl(k) <> 0 THEN */
4951  	                   l_bf_revenue_tbl(k) is NOT NULL THEN
4952                           l_revenue_tbl(l_index)     := l_bf_revenue_tbl(k);
4953                           l_amount_exists := 'Y';
4954                         END IF;
4955 
4956                         IF l_amount_exists ='Y' THEN
4957                             IF l_debug_mode = 'Y' THEN
4958                                pa_debug.g_err_stage:='Amount exists and preparing the tbls for calc API';
4959                                pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4960                             END IF;
4961 
4962                             IF l_bf_currency_code_tbl.EXISTS(k) AND
4963                                NVL(l_bf_currency_code_tbl(k),FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
4964                                l_currency_code_tbl(l_index)     := l_bf_currency_code_tbl(k);
4965                             ELSE
4966 
4967                                 IF l_debug_mode = 'Y' THEN
4968                                     pa_debug.g_err_stage:='Currency code not passed when amounts are passed';
4969                                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4970                                 END IF;
4971                                 --dbms_output.put_line('curr code not passed');
4972                                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4973                                                       p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
4974 
4975                                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4976 
4977                             END IF;
4978 
4979 
4980                             IF l_bf_cost_rate_tbl.EXISTS(k) THEN
4981                               l_cost_rate_tbl(l_index)     := l_bf_cost_rate_tbl(k);
4982                             END IF;
4983 
4984                             IF l_bf_bill_rate_tbl.EXISTS(k) THEN
4985                               l_bill_rate_tbl(l_index)     := l_bf_bill_rate_tbl(k);
4986                             END IF;
4987 
4988                             IF l_bf_burdened_rate_tbl.EXISTS(k) THEN
4989                               l_burden_multiplier_tbl(l_index)     := l_bf_burdened_rate_tbl(k);
4990                             END IF;
4991 
4992                             l_call_calc_api := 'Y';
4993                             l_spread_amount_flags_tbl(l_index) := 'Y';
4994                             l_index := l_index + 1;
4995 
4996                         END IF;
4997 
4998                     END LOOP;
4999 
5000                 END IF;--IF l_bf_ra_id_tbl.COUNT >0 THEN
5001 
5002             END IF;--IF p_one_to_one_mapping_flag='Y' THEN
5003             -- END IF; -- Bug 3836358
5004 
5005             EXIT WHEN p_one_to_one_mapping_flag = 'Y';
5006         END IF; -- if condition for p_context
5007       END LOOP; -- loop for task_element_version_id
5008     END IF; -- p_context in TA/BF
5009     ----------------------------------------------------
5010     -- Loop for all the task_elem_version_id  --- Ends
5011     ----------------------------------------------------
5012 
5013     /* In create version calculate need not and should not be called... */
5014     IF NVL(p_calling_module,'-99') <> 'CREATE_VERSION' AND l_index > 1 THEN
5015         -- Remove the extra records from the input pl/sql tables
5016         l_res_assignment_id_tbl.delete(l_index,l_res_assignment_id_tbl.count);
5017         l_delete_budget_lines_tbl.delete(l_index,l_delete_budget_lines_tbl.count);
5018         l_spread_amount_flags_tbl.delete(l_index,l_spread_amount_flags_tbl.count);
5019         l_currency_code_tbl.delete(l_index,l_currency_code_tbl.count);
5020         l_quantity_tbl.delete(l_index,l_quantity_tbl.count);
5021         l_raw_cost_tbl.delete(l_index,l_raw_cost_tbl.count);
5022         l_burdened_cost_tbl.delete(l_index,l_burdened_cost_tbl.count);
5023         l_revenue_tbl.delete(l_index,l_revenue_tbl.count);
5024         l_cost_rate_tbl.delete(l_index,l_cost_rate_tbl.count);
5025         l_burden_multiplier_tbl.delete(l_index,l_burden_multiplier_tbl.count);
5026         l_bill_rate_tbl.delete(l_index,l_bill_rate_tbl.count);
5027         l_line_start_date_tbl.delete(l_index,l_line_start_date_tbl.count);
5028         l_line_end_date_tbl.delete(l_index,l_line_end_date_tbl.count);
5029 
5030         IF l_debug_mode = 'Y' THEN
5031            IF l_res_assignment_id_tbl.COUNT > 0 THEN
5032               FOR i in l_res_assignment_id_tbl.FIRST .. l_res_assignment_id_tbl.LAST LOOP
5033                    pa_debug.g_err_stage:='CALCULATE PARAM l_res_assignment_id_tbl :'||l_res_assignment_id_tbl(i);
5034                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5035 
5036                    pa_debug.g_err_stage:='CALCULATE PARAM l_quantity_tbl :'||l_quantity_tbl(i);
5037                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5038 
5039                    pa_debug.g_err_stage:='CALCULATE PARAM l_raw_cost_tbl :'||l_raw_cost_tbl(i);
5040                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5041 
5042                    pa_debug.g_err_stage:='CALCULATE PARAM l_burdened_cost_tbl :'||l_burdened_cost_tbl(i);
5043                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5044 
5045                    pa_debug.g_err_stage:='CALCULATE PARAM l_revenue_tbl :'||l_revenue_tbl(i);
5046                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5047 
5048                    pa_debug.g_err_stage:='CALCULATE PARAM l_currency_code_tbl :'||l_currency_code_tbl(i);
5049                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5050 
5051                    pa_debug.g_err_stage:='CALCULATE PARAM l_cost_rate_tbl :'||l_cost_rate_tbl(i);
5052                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5053 
5054                    pa_debug.g_err_stage:='CALCULATE PARAM l_burden_multiplier_tbl :'||l_burden_multiplier_tbl(i);
5055                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5056 
5057                    pa_debug.g_err_stage:='CALCULATE PARAM l_bill_rate_tbl :'||l_bill_rate_tbl(i);
5058                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5059               END LOOP;
5060            END IF;
5061         END IF;
5062 
5063         PA_FP_CALC_PLAN_PKG.calculate(
5064           p_project_id                 =>   p_project_id
5065          ,p_budget_version_id          =>   l_budget_version_id
5066          ,p_source_context             =>   PA_FP_CONSTANTS_PKG.G_CALC_API_RESOURCE_CONTEXT
5067          ,p_resource_assignment_tab    =>   l_res_assignment_id_tbl
5068          ,p_delete_budget_lines_tab    =>   l_delete_budget_lines_tbl
5069          -- bug fix:5726773,p_spread_amts_flag_tab       =>   l_spread_amount_flags_tbl
5070          ,p_txn_currency_code_tab      =>   l_currency_code_tbl -- derive
5071          -- as told by sanjay ,p_txn_currency_override_tab  =>   l_currency_code_tbl
5072          ,p_total_qty_tab              =>   l_quantity_tbl -- derive
5073          ,p_total_raw_cost_tab         =>   l_raw_cost_tbl -- dervie
5074          ,p_total_burdened_cost_tab    =>   l_burdened_cost_tbl -- dervie
5075          ,p_total_revenue_tab          =>   l_revenue_tbl -- derive
5076          ,p_raw_cost_rate_tab          =>   l_cost_rate_tbl -- derive
5077          ,p_rw_cost_rate_override_tab  =>   l_cost_rate_tbl
5078          ,p_b_cost_rate_tab            =>   l_burden_multiplier_tbl -- derive
5079          ,p_b_cost_rate_override_tab   =>   l_burden_multiplier_tbl
5080          ,p_bill_rate_tab              =>   l_bill_rate_tbl -- derive
5081          ,p_bill_rate_override_tab     =>   l_bill_rate_tbl
5082          ,p_line_start_date_tab        =>   l_line_start_date_tbl --PA_PLSQL_DATATYPES.EmptyDateTab
5083          ,p_line_end_date_tab          =>   l_line_end_date_tbl   --PA_PLSQL_DATATYPES.EmptyDateTab
5084          ,p_apply_progress_flag        =>   p_apply_progress_flag
5085          ,p_rollup_required_flag      =>    l_pji_rollup_required --Bug 4200168
5086          ,x_return_status              =>   l_return_status
5087          ,x_msg_count                  =>   l_msg_count
5088          ,x_msg_data                   =>   l_msg_data);
5089 
5090         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5091             IF l_debug_mode = 'Y' THEN
5092                 pa_debug.g_err_stage:='Called API PA_FP_CALC_PLAN_PKG.calculate api returned error';
5093                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5094             END IF;
5095 
5096             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5097         END IF;
5098 
5099 -- Added for bug 4492493, 4548240
5100         IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
5101             AND PA_TASK_ASSIGNMENT_UTILS.Is_Progress_Rollup_Required(p_project_id) = 'Y') OR
5102            (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
5103             AND pa_task_assignment_utils.g_require_progress_rollup = 'Y') THEN
5104 
5105              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
5106                 ( p_calling_context       => 'ASGMT_PLAN_CHANGE'
5107                  ,p_project_id              => p_project_id
5108                  ,p_structure_version_id   => pa_project_structure_utils.get_latest_wp_version(p_project_id)
5109                  ,p_pub_struc_ver_id      => pa_project_structure_utils.get_latest_wp_version(p_project_id)
5110                  ,x_return_status              =>   l_return_status
5111                  ,x_msg_count                  =>   l_msg_count
5112                  ,x_msg_data                   =>   l_msg_data);
5113 
5114                  pa_task_assignment_utils.g_require_progress_rollup := 'N';
5115 
5116 
5117         END IF;
5118 
5119         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5120             IF l_debug_mode = 'Y' THEN
5121                 pa_debug.g_err_stage:='Called API PA_PROJ_TASK_STRUC_PUB.process_wbs_updates_wrp';
5122                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5123             END IF;
5124 
5125             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5126         END IF;
5127 --End bug 4492493
5128 
5129     END IF;
5130 
5131     -- IPM changes - rollup amounts in new entity  /* 7161809 */
5132 
5133     PA_FIN_PLAN_PUB.create_default_plan_txn_rec
5134         (p_budget_version_id => l_budget_version_id,
5135          p_calling_module    => 'UPDATE_PLAN_TRANSACTION',
5136          p_ra_id_tbl         => l_ra_id_temp_tbl,
5137          p_curr_code_tbl     => l_curr_code_temp_tbl,
5138          x_return_status     => x_return_status,
5139          x_msg_count         => x_msg_count,
5140          x_msg_data          => x_msg_data
5141          );
5142 
5143     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5144              IF l_debug_mode = 'Y' THEN
5145                    pa_debug.g_err_stage:='Called API PA_FIN_PLAN_PUB.create_default_plan_txn_rec returned error';
5146                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage, 3);
5147              END IF;
5148              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5149        END IF;      /* 7161809 */
5150 
5151     -- Call the UTIL API to get the financial plan info l_fp_cols_rec
5152 
5153 /*   Commented for bug 7161809
5154 -- hr_utility.trace('p_project_id IS : ' || p_project_id);
5155 -- hr_utility.trace('l_budget_version_id IS : ' || l_budget_version_id);
5156     pa_fp_gen_amount_utils.get_plan_version_dtls
5157         (p_project_id         => p_project_id,
5158          p_budget_version_id  => l_budget_version_id,
5159          x_fp_cols_rec        => l_fp_cols_rec,
5160          x_return_status      => x_return_status,
5161          x_msg_count          => x_msg_count,
5162          x_msg_data           => x_msg_data);
5163 
5164 -- hr_utility.trace('x_return_status IS : ' || x_return_status);
5165 -- hr_utility.trace('x_msg_count IS : ' || x_msg_count);
5166 -- hr_utility.trace('x_msg_data IS : ' || x_msg_data);
5167 
5168     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5169 
5170        IF l_debug_mode = 'Y' THEN
5171           pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
5172           pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage, 3);
5173        END IF;
5174        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5175     END IF;
5176 
5177     -- IPM changes - populate tmp table to use for rollup
5178     delete pa_resource_asgn_curr_tmp;
5179 
5180     IF l_ra_id_temp_tbl.COUNT > 0 THEN
5181        -- IPM - populate the currency code
5182        l_curr_code_temp_tbl.extend(l_ra_id_temp_tbl.COUNT);
5183        FOR j IN l_ra_id_temp_tbl.first .. l_ra_id_temp_tbl.last LOOP
5184           IF p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN,
5185                            PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK) THEN
5186              -- Use project currency for workplan
5187              -- Bug 5003827 Issue 1
5188              l_curr_code_temp_tbl(j) := nvl(l_curr_code_temp_tbl(j),
5189                                             l_proj_curr_code);
5190           ELSE
5191              l_curr_code_temp_tbl(j) := nvl(l_curr_code_temp_tbl(j),
5192                                             l_proj_func_curr_code);
5193 
5194           END IF;
5195        END LOOP;
5196 
5197        FORALL i IN l_ra_id_temp_tbl.first .. l_ra_id_temp_tbl.last
5198           INSERT INTO pa_resource_asgn_curr_tmp
5199              (RA_TXN_ID
5200              ,RESOURCE_ASSIGNMENT_ID
5201              ,TXN_CURRENCY_CODE
5202              ,DELETE_FLAG
5203 	     ,TXN_RAW_COST_RATE_OVERRIDE  -- 6839167
5204 	     ,TXN_BURDEN_COST_RATE_OVERRIDE
5205 	     ,TXN_BILL_RATE_OVERRIDE
5206              )
5207           SELECT pa_resource_asgn_curr_s.nextval
5208                 ,l_ra_id_temp_tbl(i)
5209                 ,l_curr_code_temp_tbl(i)
5210                 ,NULL
5211                 ,prac.TXN_RAW_COST_RATE_OVERRIDE --6839167
5212                 ,prac.TXN_BURDEN_COST_RATE_OVERRIDE
5213 		,prac.TXN_BILL_RATE_OVERRIDE
5214 		 from pa_resource_asgn_curr prac
5215 		 where prac.RESOURCE_ASSIGNMENT_ID=l_ra_id_temp_tbl(i);
5216     END IF;
5217 
5218     pa_res_asg_currency_pub.maintain_data(
5219          p_fp_cols_rec                  => l_fp_cols_rec,
5220          p_calling_module               => 'UPDATE_PLAN_TRANSACTION',
5221          p_delete_flag                  => 'N',
5222          p_copy_flag                    => 'N',
5223          p_src_version_id               => NULL,
5224          p_copy_mode                    => NULL,
5225          p_rollup_flag                  => 'Y',
5226          p_version_level_flag           => 'N',
5227          p_called_mode                  => 'SELF_SERVICE',
5228          x_return_status                => x_return_status,
5229          x_msg_count                    => x_msg_count,
5230          x_msg_data                     => x_msg_data
5231          );
5232 
5233        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5234 
5235              IF l_debug_mode = 'Y' THEN
5236                    pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
5237                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage, 3);
5238              END IF;
5239              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5240        END IF;   */
5241 
5242     IF l_debug_mode = 'Y' THEN
5243         pa_debug.g_err_stage:='CALLED THE PA_FP_CALC_PLAN_PKG.CALCULATE API';
5244         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5245        pa_debug.reset_curr_function;
5246     END IF;
5247 EXCEPTION
5248 
5249      WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
5250            ROLLBACK TO SAVEPOINT ADD_PLANNING_TRANS_SP;
5251            l_msg_count := FND_MSG_PUB.count_msg;
5252              IF l_msg_count = 1 THEN
5253                 PA_INTERFACE_UTILS_PUB.get_messages
5254                      (p_encoded        => FND_API.G_TRUE
5255                       ,p_msg_index      => 1
5256                       ,p_msg_count      => l_msg_count
5257                       ,p_msg_data       => l_msg_data
5258                       ,p_data           => l_data
5259                       ,p_msg_index_out  => l_msg_index_out);
5260                 x_msg_data := l_data;
5261                 x_msg_count := l_msg_count;
5262 
5263              ELSE
5264 
5265                 x_msg_count := l_msg_count;
5266              END IF;
5267            x_return_status := FND_API.G_RET_STS_ERROR;
5268 	IF l_debug_mode = 'Y' THEN
5269            pa_debug.reset_curr_function;
5270 	END IF;
5271      WHEN OTHERS THEN
5272 
5273            ROLLBACK TO SAVEPOINT ADD_PLANNING_TRANS_SP;
5274           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5275           x_msg_count     := 1;
5276           x_msg_data      := SQLERRM;
5277           FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'PA_FP_PLANNING_TRANSACTION_PUB'
5278                                   ,p_procedure_name  => 'add_planning_transactions');
5279 
5280            IF l_debug_mode = 'Y' THEN
5281              pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
5282              pa_debug.write('add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,5);
5283              pa_debug.reset_curr_function;
5284 	   END IF;
5285           RAISE;
5286 
5287 END add_planning_transactions;
5288 
5289 
5290 /*This procedure should be called to update planning transactions
5291   valid values for p_context are 'BUDGET' , 'FORECAST', 'WORKPLAN' and 'TASK_ASSIGNMENT'
5292 */
5293 /*******************************************************************************************************
5294 As part of Bug 3749516 All References to Equipment Effort or Equip Resource Class has been removed in
5295 PROCEDURE update_planning_transactions.
5296 All _addl_ and p_equip_people_effort_tbl IN parameters have also been removed as they were not being
5297  used/referred.
5298 ********************************************************************************************************/
5299 PROCEDURE update_planning_transactions
5300 (
5301        p_context                      IN          VARCHAR2
5302       ,p_calling_context              IN          VARCHAR2 DEFAULT NULL  -- Added for Bug 6856934
5303       ,p_struct_elem_version_id       IN          Pa_proj_element_versions.element_version_id%TYPE
5304       ,p_budget_version_id            IN          Pa_budget_versions.budget_version_id%TYPE
5305       ,p_task_elem_version_id_tbl     IN          SYSTEM.PA_NUM_TBL_TYPE
5306       ,p_task_name_tbl                IN          SYSTEM.PA_VARCHAR2_240_TBL_TYPE
5307       ,p_task_number_tbl              IN          SYSTEM.PA_VARCHAR2_100_TBL_TYPE
5308       ,p_start_date_tbl               IN          SYSTEM.PA_DATE_TBL_TYPE
5309       ,p_end_date_tbl                 IN          SYSTEM.PA_DATE_TBL_TYPE
5310       ,p_planned_people_effort_tbl    IN          SYSTEM.PA_NUM_TBL_TYPE
5311 --    One pl/sql record in          The         Above tables
5312       ,p_resource_assignment_id_tbl   IN          SYSTEM.PA_NUM_TBL_TYPE
5313       ,p_resource_list_member_id_tbl  IN          SYSTEM.PA_NUM_TBL_TYPE
5314       ,p_assignment_description_tbl   IN          SYSTEM.PA_VARCHAR2_240_TBL_TYPE
5315       ,p_project_assignment_id_tbl    IN          SYSTEM.pa_num_tbl_type
5316       ,p_resource_alias_tbl           IN          SYSTEM.PA_VARCHAR2_80_TBL_TYPE
5317       ,p_resource_class_flag_tbl      IN          SYSTEM.PA_VARCHAR2_1_TBL_TYPE
5318       ,p_resource_class_code_tbl      IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5319       ,p_resource_class_id_tbl        IN          SYSTEM.PA_NUM_TBL_TYPE
5320       ,p_res_type_code_tbl            IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5321       ,p_resource_code_tbl            IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5322       ,p_resource_name                IN          SYSTEM.PA_VARCHAR2_240_TBL_TYPE -- bug fix 3461537
5323       ,p_person_id_tbl                IN          SYSTEM.PA_NUM_TBL_TYPE
5324       ,p_job_id_tbl                   IN          SYSTEM.PA_NUM_TBL_TYPE
5325       ,p_person_type_code             IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5326       ,p_bom_resource_id_tbl          IN          SYSTEM.PA_NUM_TBL_TYPE
5327       ,p_non_labor_resource_tbl       IN          SYSTEM.PA_VARCHAR2_20_TBL_TYPE
5328       ,p_inventory_item_id_tbl        IN          SYSTEM.PA_NUM_TBL_TYPE
5329       ,p_item_category_id_tbl         IN          SYSTEM.PA_NUM_TBL_TYPE
5330       ,p_project_role_id_tbl          IN          SYSTEM.PA_NUM_TBL_TYPE
5331       ,p_project_role_name_tbl        IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5332       ,p_organization_id_tbl          IN          SYSTEM.PA_NUM_TBL_TYPE
5333       ,p_organization_name_tbl        IN          SYSTEM.PA_VARCHAR2_240_TBL_TYPE
5334       ,p_fc_res_type_code_tbl         IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5335       ,p_financial_category_code_tbl  IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5336       ,p_expenditure_type_tbl         IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5337       ,p_expenditure_category_tbl     IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5338       ,p_event_type_tbl               IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5339       ,p_revenue_category_code_tbl    IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5340       ,p_supplier_id_tbl              IN          SYSTEM.PA_NUM_TBL_TYPE
5341       ,p_unit_of_measure_tbl          IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5342       ,p_spread_curve_id_tbl          IN          SYSTEM.PA_NUM_TBL_TYPE
5343       ,p_etc_method_code_tbl          IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5344       ,p_mfc_cost_type_id_tbl         IN          SYSTEM.PA_NUM_TBL_TYPE
5345       ,p_procure_resource_flag_tbl    IN          SYSTEM.PA_VARCHAR2_1_TBL_TYPE
5346       ,p_incurred_by_res_flag_tbl     IN          SYSTEM.PA_VARCHAR2_1_TBL_TYPE
5347       ,p_incur_by_resource_code_tbl   IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5348       ,p_incur_by_resource_name_tbl   IN          SYSTEM.PA_VARCHAR2_240_TBL_TYPE
5349       ,p_incur_by_res_class_code_tbl  IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5350       ,p_incur_by_role_id_tbl         IN          SYSTEM.PA_NUM_TBL_TYPE
5351       ,p_use_task_schedule_flag_tbl   IN          SYSTEM.PA_VARCHAR2_1_TBL_TYPE
5352       ,p_planning_start_date_tbl      IN          SYSTEM.PA_DATE_TBL_TYPE
5353       ,p_planning_end_date_tbl        IN          SYSTEM.PA_DATE_TBL_TYPE
5354       ,p_schedule_start_date_tbl      IN          SYSTEM.PA_DATE_TBL_TYPE
5355       ,p_schedule_end_date_tbl        IN          SYSTEM.PA_DATE_TBL_TYPE
5356       ,p_quantity_tbl                 IN          SYSTEM.PA_NUM_TBL_TYPE
5357       ,p_currency_code_tbl            IN          SYSTEM.PA_VARCHAR2_15_TBL_TYPE
5358       ,p_txn_currency_override_tbl    IN          SYSTEM.PA_VARCHAR2_15_TBL_TYPE
5359       ,p_raw_cost_tbl                 IN          SYSTEM.PA_NUM_TBL_TYPE
5360       ,p_burdened_cost_tbl            IN          SYSTEM.PA_NUM_TBL_TYPE
5361       ,p_revenue_tbl                  IN          SYSTEM.PA_NUM_TBL_TYPE
5362       ,p_cost_rate_tbl                IN          SYSTEM.PA_NUM_TBL_TYPE
5363       ,p_cost_rate_override_tbl       IN          SYSTEM.PA_NUM_TBL_TYPE
5364       ,p_burdened_rate_tbl            IN          SYSTEM.PA_NUM_TBL_TYPE
5365       ,p_burdened_rate_override_tbl   IN          SYSTEM.PA_NUM_TBL_TYPE
5366       ,p_bill_rate_tbl                IN          SYSTEM.PA_NUM_TBL_TYPE
5367       ,p_bill_rate_override_tbl       IN          SYSTEM.PA_NUM_TBL_TYPE
5368       ,p_billable_percent_tbl         IN          SYSTEM.PA_NUM_TBL_TYPE
5369       ,p_sp_fixed_date_tbl            IN          SYSTEM.PA_DATE_TBL_TYPE
5370       ,p_named_role_tbl               IN          SYSTEM.PA_VARCHAR2_80_TBL_TYPE
5371       ,p_financial_category_name_tbl  IN          SYSTEM.PA_VARCHAR2_80_TBL_TYPE
5372       ,p_supplier_name_tbl            IN          SYSTEM.PA_VARCHAR2_240_TBL_TYPE
5373       ,p_attribute_category_tbl       IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5374       ,p_attribute1_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5375       ,p_attribute2_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5376       ,p_attribute3_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5377       ,p_attribute4_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5378       ,p_attribute5_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5379       ,p_attribute6_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5380       ,p_attribute7_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5381       ,p_attribute8_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5382       ,p_attribute9_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5383       ,p_attribute10_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5384       ,p_attribute11_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5385       ,p_attribute12_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5386       ,p_attribute13_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5387       ,p_attribute14_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5388       ,p_attribute15_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5389       ,p_attribute16_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5390       ,p_attribute17_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5391       ,p_attribute18_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5392       ,p_attribute19_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5393       ,p_attribute20_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5394       ,p_attribute21_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5395       ,p_attribute22_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5396       ,p_attribute23_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5397       ,p_attribute24_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5398       ,p_attribute25_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5399       ,p_attribute26_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5400       ,p_attribute27_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5401       ,p_attribute28_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5402       ,p_attribute29_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5403       ,p_attribute30_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5404       ,p_apply_progress_flag          IN          VARCHAR2 /* Passed from apply_progress api (sakthi's team) */
5405       ,p_scheduled_delay              IN          SYSTEM.pa_num_tbl_type --For bug 3948128
5406       ,p_pji_rollup_required         IN          VARCHAR2  DEFAULT 'Y' /* Bug# 4200168 */
5407       ,p_upd_cost_amts_too_for_ta_flg IN VARCHAR2 DEFAULT 'N' --Added for bug #4538286
5408       ,p_distrib_amts                 IN          VARCHAR2  DEFAULT 'Y' -- Bug 5684639.
5409       ,x_return_status                OUT         NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5410       ,x_msg_data                     OUT         NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5411       ,x_msg_count                    OUT         NOCOPY NUMBER --File.Sql.39 bug 4440895
5412 ) IS
5413       l_return_status                VARCHAR2(2000);
5414       l_msg_count                    NUMBER := 0;
5415       l_data                         VARCHAR2(2000);
5416       l_msg_data                     VARCHAR2(2000);
5417 
5418       l_msg_index_out                NUMBER;
5419       l_debug_mode                   VARCHAR2(1);
5420       l_debug_level3                 CONSTANT NUMBER := 3;
5421       l_debug_level5                 CONSTANT NUMBER := 5;
5422       l_module_name                  VARCHAR2(100) := 'Update_Planning_Transactions' || 'pa.plsql.pa_fp_planning_transaction_pub';
5423       l_loop_start                   NUMBER;
5424       l_loop_end                     NUMBER;
5425 
5426       l_budget_version_id            pa_budget_versions.budget_version_id%TYPE;
5427       l_project_id                   pa_projects_all.project_id%TYPE;
5428       l_fixed_date_sp_id             pa_spread_curves_b.spread_curve_id%TYPE; -- bug 3607061
5429       l_pji_rollup_required         VARCHAR2(1); --Bug 4200168
5430 
5431 
5432       /* Start of variables for Variable for TA Validations for p_context = TASK_ASSIGNMENTS
5433        */
5434       l_task_rec_tbl                 PA_TASK_ASSIGNMENT_UTILS.l_task_rec_tbl_type;
5435       l_resource_rec_tbl             PA_TASK_ASSIGNMENT_UTILS.l_resource_rec_tbl_type;
5436       /* End of variables for Variable for TA Validations for p_context = TASK_ASSIGNMENTS
5437        */
5438 
5439       /* Start of variables for Variable for Resource Attributes
5440        */
5441       l_resource_assignment_id_tbl   SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5442       l_resource_list_member_id_tbl  SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5443       l_assignment_description_tbl   SYSTEM.PA_VARCHAR2_240_TBL_TYPE   := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
5444       l_planning_resource_alias_tbl  SYSTEM.PA_VARCHAR2_80_TBL_TYPE    := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
5445       l_resource_class_flag_tbl      SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
5446       l_resource_class_code_tbl      SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5447       l_resource_class_id_tbl        SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5448       l_res_type_code_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5449       l_resource_code_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5450       l_person_id_tbl                SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5451       l_job_id_tbl                   SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5452       l_person_type_code_tbl         SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5453       l_bom_resource_id_tbl          SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5454       l_non_labor_resource_tbl       SYSTEM.PA_VARCHAR2_20_TBL_TYPE    := SYSTEM.PA_VARCHAR2_20_TBL_TYPE();
5455       l_inventory_item_id_tbl        SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5456       l_item_category_id_tbl         SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5457       l_project_role_id_tbl          SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5458       l_project_role_name_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5459       l_organization_id_tbl          SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5460    -- bug 3455288, 19-FEB-04, jwhite: Changed varchar2 length to 240 from 30 --------------------------------
5461    --  l_organization_name_tbl        SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5462 
5463        l_organization_name_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE    := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
5464 
5465    -- End, bug 3455288, 19-FEB-04, jwhite:  ------------------------------------------------------------------
5466 
5467       l_fc_res_type_code_tbl         SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5468       l_financial_category_code_tbl  SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5469       l_expenditure_type_tbl         SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5470       l_expenditure_category_tbl     SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5471       l_event_type_tbl               SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5472       l_revenue_category_code_tbl    SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5473       l_supplier_id_tbl              SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5474       l_unit_of_measure_tbl          SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5475       l_spread_curve_id_tbl          SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5476       l_etc_method_code_tbl          SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5477       l_mfc_cost_type_id_tbl         SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5478       l_procure_resource_flag_tbl    SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
5479       l_incurred_by_res_flag_tbl     SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
5480       l_incur_by_resource_name_tbl   SYSTEM.PA_VARCHAR2_240_TBL_TYPE   := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
5481       l_Incur_by_resource_code_tbl   SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5482       l_Incur_by_res_class_code_tbl  SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5483       l_Incur_by_role_id_tbl         SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5484       l_use_task_schedule_flag_tbl   SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
5485       l_planning_start_date_tbl      SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
5486       l_planning_end_date_tbl        SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
5487       l_schedule_start_date_tbl      SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
5488       l_schedule_end_date_tbl        SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
5489       l_total_quantity_tbl           SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5490       l_override_currency_code_tbl   SYSTEM.PA_VARCHAR2_15_TBL_TYPE    := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
5491       l_billable_percent_tbl         SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5492       l_cost_rate_override_tbl       SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5493       l_burdened_rate_override_tbl   SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5494       l_sp_fixed_date_tbl            SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
5495       l_named_role_tbl               SYSTEM.PA_VARCHAR2_80_TBL_TYPE    := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
5496       l_financial_category_name_tbl  SYSTEM.PA_VARCHAR2_80_TBL_TYPE    := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
5497       l_supplier_name_tbl            SYSTEM.PA_VARCHAR2_240_TBL_TYPE   := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
5498       l_wbs_element_version_id_tbl   SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5499       l_project_assignment_id_tbl    SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5500       l_attribute_category_tbl       SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5501       l_attribute1_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5502       l_attribute2_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5503       l_attribute3_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5504       l_attribute4_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5505       l_attribute5_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5506       l_attribute6_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5507       l_attribute7_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5508       l_attribute8_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5509       l_attribute9_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5510       l_attribute10_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5511       l_attribute11_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5512       l_attribute12_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5513       l_attribute13_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5514       l_attribute14_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5515       l_attribute15_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5516       l_attribute16_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5517       l_attribute17_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5518       l_attribute18_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5519       l_attribute19_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5520       l_attribute20_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5521       l_attribute21_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5522       l_attribute22_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5523       l_attribute23_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5524       l_attribute24_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5525       l_attribute25_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5526       l_attribute26_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5527       l_attribute27_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5528       l_attribute28_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5529       l_attribute29_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5530       l_attribute30_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5531       l_bill_rate_override_tbl       SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5532       l_bill_rate_tbl                SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5533       l_b_multiplier_tbl             SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5534       l_raw_cost_rate_tbl            SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5535       l_revenue_tbl                  SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5536       l_burdened_cost_tbl            SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5537       l_total_raw_cost_tbl           SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5538       l_currency_code_tbl            SYSTEM.PA_VARCHAR2_15_TBL_TYPE    := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
5539       --For bug 3948128
5540       l_scheduled_delay              SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5541 
5542       -- Added for bug 3698458
5543       l_rate_exp_org_id_tbl          SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
5544       l_rate_exp_type_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5545       l_rate_func_curr_code_tbl      SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5546       l_incur_by_res_type_tbl        SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5547 
5548       /* End of variables for Variable for Resource Attributes
5549        */
5550       l_spread_amt_flag_tbl          SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
5551       l_delete_budget_lines_tbl      SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
5552       l_currency_code_tmp_tbl        SYSTEM.PA_VARCHAR2_15_TBL_TYPE    := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
5553       l_existing_curr_code           pa_budget_lines.txn_currency_code%TYPE;
5554       l_projfunc_currency_code       pa_budget_lines.txn_currency_code%TYPE;
5555       l_projfunc_currency_code_out   pa_budget_lines.txn_currency_code%TYPE;
5556       l_rbs_element_id_tbl           SYSTEM.pa_num_tbl_type;
5557       l_txn_accum_header_id_tbl      SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
5558 
5559       /* added for bug 3678814 */
5560       l_rate_based_flag_tbl          SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
5561 
5562       l_trace_stage NUMBER;
5563 
5564       -- Added for bug 3817356
5565       l_in_start_date_tbl            SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
5566       l_in_end_date_tbl              SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
5567       l_in_planning_start_date_tbl   SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
5568       l_in_planning_end_date_tbl     SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
5569       l_in_schedule_start_date_tbl   SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
5570       l_in_schedule_end_date_tbl     SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
5571       l_in_sp_fixed_date_tbl         SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
5572       l_temp_gmiss_date              date := to_date('01-01-4712','DD-MM-YYYY');
5573 
5574       --These parameters are introduced for calculate API enhancements tracked thru bug 4152749
5575       l_mfc_cost_type_id_old_tbl     SYSTEM.PA_NUM_TBL_TYPE            :=  SYSTEM.PA_NUM_TBL_TYPE();
5576       l_mfc_cost_type_id_new_tbl     SYSTEM.PA_NUM_TBL_TYPE            :=  SYSTEM.PA_NUM_TBL_TYPE();
5577       l_spread_curve_id_old_tbl      SYSTEM.PA_NUM_TBL_TYPE            :=  SYSTEM.PA_NUM_TBL_TYPE();
5578       l_spread_curve_id_new_tbl      SYSTEM.PA_NUM_TBL_TYPE            :=  SYSTEM.PA_NUM_TBL_TYPE();
5579       l_sp_fixed_date_old_tbl        SYSTEM.PA_DATE_TBL_TYPE           :=  SYSTEM.PA_DATE_TBL_TYPE();
5580       l_sp_fixed_date_new_tbl        SYSTEM.PA_DATE_TBL_TYPE           :=  SYSTEM.PA_DATE_TBL_TYPE();
5581       l_plan_start_date_old_tbl      SYSTEM.PA_DATE_TBL_TYPE           :=  SYSTEM.PA_DATE_TBL_TYPE();
5582       l_plan_start_date_new_tbl      SYSTEM.PA_DATE_TBL_TYPE           :=  SYSTEM.PA_DATE_TBL_TYPE();
5583       l_plan_end_date_old_tbl        SYSTEM.PA_DATE_TBL_TYPE           :=  SYSTEM.PA_DATE_TBL_TYPE();
5584       l_plan_end_date_new_tbl        SYSTEM.PA_DATE_TBL_TYPE           :=  SYSTEM.PA_DATE_TBL_TYPE();
5585       l_rlm_id_change_flag_tbl       SYSTEM.PA_VARCHAR2_1_TBL_TYPE     :=  SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
5586 
5587       --Added for Bug 4200168
5588       l_g_miss_char   CONSTANT      VARCHAR(1)  := FND_API.G_MISS_CHAR;
5589       l_g_miss_num    CONSTANT      NUMBER      := FND_API.G_MISS_NUM;
5590       l_g_miss_date   CONSTANT      DATE        := FND_API.G_MISS_DATE;
5591 
5592       l_fp_cols_rec   pa_fp_gen_amount_utils.fp_cols; -- IPM
5593 
5594 BEGIN
5595 
5596 l_trace_stage := 10;
5597 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
5598 
5599 
5600       x_msg_count     := 0;
5601       x_return_status := FND_API.G_RET_STS_SUCCESS;
5602       l_debug_mode    := 'Y'; --NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
5603 
5604 --Added for Bug 4200168
5605       IF p_pji_rollup_required = 'Y' THEN
5606           l_pji_rollup_required := 'Y';
5607       ELSE
5608           l_pji_rollup_required := 'N';
5609       END IF;
5610 
5611       pa_task_assignment_utils.g_require_progress_rollup := 'N';
5612 
5613       IF l_debug_mode = 'Y' THEN
5614             pa_debug.set_curr_function( p_function   => 'Update_Planning_Transactions',
5615                                         p_debug_mode => l_debug_mode );
5616       END IF;
5617       --dbms_output.put_line('In upd planning txn');
5618 
5619 
5620       /* A savepoint is set
5621        */
5622        SAVEPOINT   Update_Planning_Transactions;
5623 
5624        IF l_debug_mode = 'Y' THEN
5625              pa_debug.g_err_stage := 'Checking for required parameters';
5626              print_msg(pa_debug.g_err_stage,l_module_name);
5627        END IF;
5628 
5629       /* Check for required parameters
5630        */
5631 
5632        IF l_debug_mode = 'Y' THEN
5633              pa_debug.g_err_stage := 'Extending the local pl/sql tables: p_context =>' ||p_context;
5634              print_msg(pa_debug.g_err_stage,l_module_name);
5635        END IF;
5636 
5637 
5638 
5639        IF p_context IS NULL OR
5640           p_context NOT IN ( PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST
5641                             ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
5642                             ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
5643                             ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET ) THEN
5644 
5645             pa_debug.g_err_stage := 'The Context IN parameter is NULL';
5646             pa_debug.write(l_module_name, pa_debug.g_err_stage,l_debug_level5);
5647             --dbms_output.put_line('p_context is null');
5648 
5649             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5650                                  p_msg_name       => 'PA_FP_INV_PARAM_PASSED');
5651             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5652        END IF;
5653        --dbms_output.put_line('U01');
5654 
5655        IF l_debug_mode = 'Y' THEN
5656             pa_debug.g_err_stage:= 'Checking for required parameters';
5657             print_msg(pa_debug.g_err_stage,l_module_name);
5658        END IF;
5659 
5660 
5661       /* Check for business rules violations
5662        */
5663        IF l_debug_mode = 'Y' THEN
5664             pa_debug.g_err_stage:= 'Validating input parameters';
5665             print_msg(pa_debug.g_err_stage,l_module_name);
5666        END IF;
5667 
5668 l_trace_stage := 50;
5669 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
5670 
5671 
5672        /* If the calling Context is Workplan or Task Assignment, the element version Id can't be null
5673         */
5674        IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN OR p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
5675             IF p_struct_elem_version_id IS NULL THEN
5676                   IF l_debug_mode = 'Y' THEN
5677                         pa_debug.g_err_stage:= 'p_struct_elem_version_id is null';
5678                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5679                   END IF;
5680                   --dbms_output.put_line('p_struct_elem_version_id is null');
5681 
5682                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5683                                        p_msg_name       => 'PA_FP_INV_PARAM_PASSED');
5684                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5685             ELSE
5686                   l_budget_version_id := PA_PLANNING_TRANSACTION_UTILS.Get_wp_budget_version_id(p_struct_elem_version_id);
5687                   IF l_budget_version_id IS NULL THEN
5688                       IF l_debug_mode = 'Y' THEN
5689                              pa_debug.g_err_stage:='Calling add plan txn to create the version';
5690                              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5691                       END IF;
5692 
5693                       BEGIN
5694                           SELECT project_id
5695                           INTO   l_project_id
5696                           FROM   pa_struct_task_wbs_v
5697                           WHERE  parent_Structure_version_id=p_struct_elem_version_id
5698                           AND    ROWNUM=1;
5699                       EXCEPTION
5700                       WHEN NO_DATA_FOUND THEN
5701                           IF l_debug_mode = 'Y' THEN
5702                                  pa_debug.g_err_stage:='Invalid value for p_struct_elem_version_id';
5703                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5704                           END IF;
5705                           --dbms_output.put_line('Invalid value for p_struct_elem_version_id');
5706                           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5707                                                p_msg_name       => 'PA_FP_INV_PARAM_PASSED');
5708                           RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5709                       END;
5710 
5711 
5712 
5713                       pa_fp_planning_transaction_pub.add_planning_transactions
5714                       (p_context                =>'WORKPLAN'
5715                       ,p_calling_context        => p_calling_context   -- Added for Bug 6856934
5716                       ,p_project_id             => l_project_id
5717                       ,p_struct_elem_version_id => p_struct_elem_version_id
5718                       ,x_return_status          => l_return_status
5719                       ,x_msg_data               => l_msg_data
5720                       ,x_msg_count              => l_msg_count);
5721                       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5722                                IF l_debug_mode = 'Y' THEN
5723                                      pa_debug.g_err_stage:='Called API pa_fp_planning_transaction_pub.add_planning_transaction api returned error';
5724                                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5725                                END IF;
5726                                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5727                       END IF;
5728                       l_budget_version_id := PA_PLANNING_TRANSACTION_UTILS.Get_wp_budget_version_id(p_struct_elem_version_id);
5729                   END IF;
5730 
5731             END IF;
5732        /* If the calling Context is BUDGET or FORECAST, the budget version Id can't be null
5733         */
5734        ELSIF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST THEN
5735             IF p_budget_version_id IS NULL THEN
5736                   IF l_debug_mode = 'Y' THEN
5737                         pa_debug.g_err_stage:= 'p_budget_version_id is null';
5738                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5739                   END IF;
5740                   --dbms_output.put_line('p_budget_version_id is null');
5741                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5742                                        p_msg_name       => 'PA_FP_INV_PARAM_PASSED');
5743                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5744             ELSE
5745                   l_budget_version_id := p_budget_version_id;
5746             END IF;
5747        END IF;
5748        --dbms_output.put_line('U1');
5749 l_trace_stage := 100;
5750 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
5751 
5752 
5753        /* Validation Done
5754         */
5755        /* Getting the project id for the corresponding budget version
5756         */
5757        BEGIN
5758              SELECT    project_id
5759              INTO      l_project_id
5760              FROM      pa_budget_versions
5761              WHERE     budget_version_id = l_budget_version_id;
5762        EXCEPTION
5763              WHEN OTHERS THEN
5764                   IF l_debug_mode = 'Y' THEN
5765                          pa_debug.g_err_stage:='Select failed on pa_budget_versions.';
5766                          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5767                   END IF;
5768                   RAISE;
5769        END;
5770 
5771        /* Bug 3817356 - We to cannot pass negative date from Java to PLSql hence we are not
5772           able to pass FND_API.G_MISS_DATE ('01-Jan--4712') to this API when called from Java.
5773           Instead when this API is called from Java instead of G_MISS_DATE '01-Jan-4712' is passed.
5774           Added code below to Replace '01-Jan-4712' by FND_API.G_MISS_DATE
5775        */
5776        IF l_debug_mode = 'Y' THEN
5777            pa_debug.g_err_stage:='Processing IN Date Tables for G_MISS_DATE';
5778            pa_debug.write('PA_FP_PLANNING_TXN_PUB.update_planning_transactions:'||l_module_name,pa_debug.g_err_stage,3);
5779        END IF;
5780 
5781        l_in_start_date_tbl          := p_start_date_tbl;
5782        l_in_end_date_tbl            := p_end_date_tbl;
5783        l_in_planning_start_date_tbl := p_planning_start_date_tbl;
5784        l_in_planning_end_date_tbl   := p_planning_end_date_tbl;
5785        l_in_schedule_start_date_tbl := p_schedule_start_date_tbl;
5786        l_in_schedule_end_date_tbl   := p_schedule_end_date_tbl;
5787        l_in_sp_fixed_date_tbl       := p_sp_fixed_date_tbl;
5788        -- Please note that the l_in_ tables will be reference instead of p_ tables in Code Flow
5789        IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
5790          IF p_task_elem_version_id_tbl.COUNT > 0 THEN
5791            FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
5792                  IF p_start_date_tbl.EXISTS(i)
5793                     AND p_start_date_tbl(i) = l_temp_gmiss_date THEN
5794                     l_in_start_date_tbl(i) := FND_API.G_MISS_DATE;
5795                  END IF;
5796                  IF p_end_date_tbl.EXISTS(i)
5797                     AND p_end_date_tbl(i) = l_temp_gmiss_date THEN
5798                     l_in_end_date_tbl(i) := FND_API.G_MISS_DATE;
5799                  END IF;
5800                  IF p_planning_start_date_tbl.EXISTS(i)
5801                     AND p_planning_start_date_tbl(i) = l_temp_gmiss_date THEN
5802                     l_in_planning_start_date_tbl(i) := FND_API.G_MISS_DATE;
5803                  END IF;
5804                  IF p_planning_end_date_tbl.EXISTS(i)
5805                     AND p_planning_end_date_tbl(i) = l_temp_gmiss_date THEN
5806                     l_in_planning_end_date_tbl(i) := FND_API.G_MISS_DATE;
5807                  END IF;
5808                  IF p_schedule_start_date_tbl.EXISTS(i)
5809                     AND p_schedule_start_date_tbl(i) = l_temp_gmiss_date THEN
5810                     l_in_schedule_start_date_tbl(i) := FND_API.G_MISS_DATE;
5811                  END IF;
5812                  IF p_schedule_end_date_tbl.EXISTS(i)
5813                     AND p_schedule_end_date_tbl(i) = l_temp_gmiss_date THEN
5814                     l_in_schedule_end_date_tbl(i) := FND_API.G_MISS_DATE;
5815                  END IF;
5816                  IF p_sp_fixed_date_tbl.EXISTS(i)
5817                     AND p_sp_fixed_date_tbl(i) = l_temp_gmiss_date THEN
5818                     l_in_sp_fixed_date_tbl(i) := FND_API.G_MISS_DATE;
5819                  END IF;
5820            END LOOP;
5821          END IF;
5822        ELSE
5823          IF p_resource_assignment_id_tbl.COUNT > 0 THEN
5824            FOR i IN p_resource_assignment_id_tbl.FIRST .. p_resource_assignment_id_tbl.LAST LOOP
5825                  IF p_start_date_tbl.EXISTS(i)
5826                     AND p_start_date_tbl(i) = l_temp_gmiss_date THEN
5827                     l_in_start_date_tbl(i) := FND_API.G_MISS_DATE;
5828                  END IF;
5829                  IF p_end_date_tbl.EXISTS(i)
5830                     AND p_end_date_tbl(i) = l_temp_gmiss_date THEN
5831                     l_in_end_date_tbl(i) := FND_API.G_MISS_DATE;
5832                  END IF;
5833                  IF p_planning_start_date_tbl.EXISTS(i)
5834                     AND p_planning_start_date_tbl(i) = l_temp_gmiss_date THEN
5835                     l_in_planning_start_date_tbl(i) := FND_API.G_MISS_DATE;
5836                  END IF;
5837                  IF p_planning_end_date_tbl.EXISTS(i)
5838                     AND p_planning_end_date_tbl(i) = l_temp_gmiss_date THEN
5839                     l_in_planning_end_date_tbl(i) := FND_API.G_MISS_DATE;
5840                  END IF;
5841                  IF p_schedule_start_date_tbl.EXISTS(i)
5842                     AND p_schedule_start_date_tbl(i) = l_temp_gmiss_date THEN
5843                     l_in_schedule_start_date_tbl(i) := FND_API.G_MISS_DATE;
5844                  END IF;
5845                  IF p_schedule_end_date_tbl.EXISTS(i)
5846                     AND p_schedule_end_date_tbl(i) = l_temp_gmiss_date THEN
5847                     l_in_schedule_end_date_tbl(i) := FND_API.G_MISS_DATE;
5848                  END IF;
5849                  IF p_sp_fixed_date_tbl.EXISTS(i)
5850                     AND p_sp_fixed_date_tbl(i) = l_temp_gmiss_date THEN
5851                     l_in_sp_fixed_date_tbl(i) := FND_API.G_MISS_DATE;
5852                  END IF;
5853            END LOOP;
5854          END IF;
5855        END IF;
5856 
5857 
5858        /* If the calling context is workplan, then checking, if the passed task info is present or not
5859         * If not present, the called procedure would insert it.
5860         */
5861        --dbms_output.put_line ('pq1 is '||p_planned_people_effort_tbl(1));
5862        IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
5863              check_and_create_task_rec_info
5864              ( p_project_id                 => l_project_id
5865               ,p_struct_elem_version_id     => p_struct_elem_version_id
5866               ,p_element_version_id_tbl     => p_task_elem_version_id_tbl
5867               ,p_planning_start_date_tbl    => l_in_start_date_tbl -- 3817356
5868               ,p_planning_end_date_tbl      => l_in_end_date_tbl -- 3817356
5869               ,p_planned_people_effort_tbl  => p_planned_people_effort_tbl
5870               ,p_raw_cost_tbl               => p_raw_cost_tbl
5871               ,p_burdened_cost_tbl          => p_burdened_cost_tbl
5872               ,p_apply_progress_flag        => p_apply_progress_flag
5873               ,x_element_version_id_tbl     => l_wbs_element_version_id_tbl
5874               ,x_planning_start_date_tbl    => l_planning_start_date_tbl
5875               ,x_planning_end_date_tbl      => l_planning_end_date_tbl
5876               ,x_planned_effort_tbl         => l_total_quantity_tbl
5877               ,x_resource_assignment_id_tbl => l_resource_assignment_id_tbl
5878               ,x_raw_cost_tbl               => l_total_raw_cost_tbl
5879               ,x_burdened_cost_tbl          => l_burdened_cost_tbl
5880               ,x_return_status              => l_return_status
5881               ,x_msg_data                   => l_msg_data
5882               ,x_msg_count                  => l_msg_count);
5883 
5884              IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5885                    IF l_debug_mode = 'Y' THEN
5886                          pa_debug.g_err_stage:='Called API pa_planning_transaction_pub.check_and_create_task_rec_info api returned error';
5887                          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5888                    END IF;
5889                    RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5890              END IF;
5891              --dbms_output.put_line ('pq1 is '||l_total_quantity_tbl(1));
5892 l_trace_stage := 150;
5893 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
5894 
5895 
5896              /* If l ra id tbl count is zero, it means, the check_and_create_task_rec_info
5897                 has called add plan tran api with effort and hence no more prorcessing is required.
5898               */
5899              IF l_resource_assignment_id_tbl.COUNT = 0 THEN
5900                    IF l_debug_mode = 'Y' THEN
5901                           pa_debug.g_err_stage:='No Data Returned from the api-----Returning';
5902                           print_msg(pa_debug.g_err_stage,l_module_name);
5903                    END IF;
5904                    --dbms_output.put_line('No Data Returned from the api-----Returning');
5905                    IF l_debug_mode = 'Y' THEN
5906                           pa_debug.reset_curr_function;
5907                    END IF;
5908                    RETURN;
5909              END IF;
5910 
5911              /* For WP, the sch dates and planning dates are always in synch */
5912 
5913              l_schedule_start_date_tbl := l_planning_start_Date_tbl;
5914              l_schedule_end_date_tbl   := l_planning_end_Date_tbl;
5915 
5916        ELSE
5917              /* The context is of not work plan type
5918               */
5919              --dbms_output.put_line('U3');
5920              IF l_debug_mode = 'Y' THEN
5921                    pa_debug.g_err_stage:='Non Workplan type context';
5922                    print_msg(pa_debug.g_err_stage,l_module_name);
5923              END IF;
5924              IF p_resource_assignment_id_tbl.COUNT =0 THEN
5925                    IF l_debug_mode = 'Y' THEN
5926                         pa_debug.g_err_stage:='Resource Assignment Id table is empty---- Returning';
5927                         print_msg(pa_debug.g_err_stage,l_module_name);
5928                    END IF;
5929                    IF l_debug_mode = 'Y' THEN
5930                         pa_debug.reset_curr_function;
5931                    END IF;
5932                    --dbms_output.put_line('Empty ra id tbl returning');
5933                    RETURN;
5934              ELSE
5935                   -- 3817356 Replacing p_xxxx_date_tbls by l_in_xxxx_date_tbls
5936                   l_resource_assignment_id_tbl := p_resource_assignment_id_tbl;
5937                   IF p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST) THEN
5938                        /* Budgets and forecasts case schedule start/end dates,
5939                         * though not relevant are always kept in synch with planning start and end
5940                         * dates */
5941                        l_schedule_start_date_tbl    := l_in_planning_start_date_tbl;
5942                        l_schedule_end_date_tbl      := l_in_planning_end_date_tbl;
5943                        l_planning_start_date_tbl    := l_in_planning_start_date_tbl;
5944                        l_planning_end_date_tbl      := l_in_planning_end_date_tbl;
5945                   ELSE /* Context is TA */
5946                        l_planning_start_date_tbl    := l_in_planning_start_date_tbl;
5947                        l_planning_end_date_tbl      := l_in_planning_end_date_tbl;
5948                        l_schedule_start_date_tbl    := l_in_schedule_start_date_tbl;
5949                        l_schedule_end_date_tbl      := l_in_schedule_end_date_tbl;
5950                   END IF;
5951                   l_total_quantity_tbl         := p_quantity_tbl;
5952                   --In the context of BUDGET or FORECAST throw an error if the p_currency_code_tbl does not
5953                   --have same no of elements as that p_resource_assignment_id_tbl
5954                   IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST THEN
5955                       IF p_resource_assignment_id_tbl.COUNT <> p_currency_code_tbl.COUNT THEN
5956                             IF l_debug_mode = 'Y' THEN
5957                                 pa_debug.g_err_stage:='the contents of p_currency_code_tbl not equal in number to contents in res assmt tbl';
5958                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5959                             END IF;
5960                             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5961                                                  p_msg_name       => 'PA_FP_INV_PARAM_PASSED');
5962                             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5963                       END IF;
5964                   END IF;
5965              END IF;
5966        END IF;
5967        -- End for calling Context of workplan
5968 
5969 -- Fetching spread curve id for fixed date spread curve : Bug 3607061 - Starts
5970     BEGIN
5971         IF l_debug_mode = 'Y' THEN
5972             pa_debug.g_err_stage:='Fetching spread curve id for fixed date spread curve';
5973             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5974         END IF;
5975         Select spread_curve_id
5976           into l_fixed_date_sp_id
5977           from pa_spread_curves_b
5978          where spread_curve_code = 'FIXED_DATE';
5979 
5980         IF l_debug_mode = 'Y' THEN
5981             pa_debug.g_err_stage:='Fetching spread curve id l_fixed_date_sp_id:'||l_fixed_date_sp_id;
5982             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5983         END IF;
5984 
5985     EXCEPTION
5986         WHEN NO_DATA_FOUND THEN
5987              IF l_debug_mode = 'Y' THEN
5988                 pa_debug.g_err_stage:='Fixed date spread curve not found in system';
5989                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5990              END IF;
5991              RAISE;
5992     END;
5993 -- Fetching spread curve id for fixed date spread curve : Bug 3607061 - Ends
5994 
5995        --Extend all the local pl/sql tables.
5996        IF l_debug_mode = 'Y' THEN
5997              pa_debug.g_err_stage := 'Extending the local pl/sql tables';
5998              print_msg(pa_debug.g_err_stage,l_module_name);
5999        END IF;
6000 
6001        l_trace_stage := 200;
6002        --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6003 
6004        l_resource_list_member_id_tbl.extend(l_resource_assignment_id_tbl.last);
6005 
6006        l_trace_stage := 201;
6007        --hr_uility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6008 
6009        --dbms_output.put_line('2');
6010        l_assignment_description_tbl.extend(l_resource_assignment_id_tbl.last);
6011        l_planning_resource_alias_tbl.extend(l_resource_assignment_id_tbl.last);
6012        l_resource_class_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6013        l_resource_class_code_tbl.extend(l_resource_assignment_id_tbl.last);
6014        l_resource_class_id_tbl.extend(l_resource_assignment_id_tbl.last);
6015        l_res_type_code_tbl.extend(l_resource_assignment_id_tbl.last);
6016        l_resource_code_tbl.extend(l_resource_assignment_id_tbl.last);
6017        l_person_id_tbl.extend(l_resource_assignment_id_tbl.last);
6018        l_job_id_tbl.extend(l_resource_assignment_id_tbl.last);
6019 
6020        l_person_type_code_tbl.extend(l_resource_assignment_id_tbl.last);
6021        l_bom_resource_id_tbl.extend(l_resource_assignment_id_tbl.last);
6022        l_non_labor_resource_tbl.extend(l_resource_assignment_id_tbl.last);
6023        l_inventory_item_id_tbl.extend(l_resource_assignment_id_tbl.last);
6024        l_item_category_id_tbl.extend(l_resource_assignment_id_tbl.last);
6025        l_project_role_id_tbl.extend(l_resource_assignment_id_tbl.last);
6026        l_project_role_name_tbl.extend(l_resource_assignment_id_tbl.last);
6027        l_organization_id_tbl.extend(l_resource_assignment_id_tbl.last);
6028        l_organization_name_tbl.extend(l_resource_assignment_id_tbl.last);
6029        l_fc_res_type_code_tbl.extend(l_resource_assignment_id_tbl.last);
6030        l_financial_category_code_tbl.extend(l_resource_assignment_id_tbl.last);
6031        l_expenditure_type_tbl.extend(l_resource_assignment_id_tbl.last);
6032        l_expenditure_category_tbl.extend(l_resource_assignment_id_tbl.last);
6033 
6034        -- Added for bug 3698458
6035        l_rate_exp_org_id_tbl.extend(l_resource_assignment_id_tbl.last);
6036        l_rate_exp_type_tbl.extend(l_resource_assignment_id_tbl.last);
6037        l_rate_func_curr_code_tbl.extend(l_resource_assignment_id_tbl.last);
6038        l_incur_by_res_type_tbl.extend(l_resource_assignment_id_tbl.last);
6039 
6040        -- Added for bug 3678814
6041        l_rate_based_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6042 
6043        l_trace_stage := 210;
6044        --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6045 
6046        l_event_type_tbl.extend(l_resource_assignment_id_tbl.last);
6047        l_revenue_category_code_tbl.extend(l_resource_assignment_id_tbl.last);
6048        l_supplier_id_tbl.extend(l_resource_assignment_id_tbl.last);
6049        l_unit_of_measure_tbl.extend(l_resource_assignment_id_tbl.last);
6050        l_spread_curve_id_tbl.extend(l_resource_assignment_id_tbl.last);
6051        l_etc_method_code_tbl.extend(l_resource_assignment_id_tbl.last);
6052        l_mfc_cost_type_id_tbl.extend(l_resource_assignment_id_tbl.last);
6053        l_procure_resource_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6054        l_incurred_by_res_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6055        l_incur_by_resource_name_tbl.extend(l_resource_assignment_id_tbl.last);
6056        l_Incur_by_resource_code_tbl.extend(l_resource_assignment_id_tbl.last);
6057        l_Incur_by_res_class_code_tbl.extend(l_resource_assignment_id_tbl.last);
6058        l_Incur_by_role_id_tbl.extend(l_resource_assignment_id_tbl.last);
6059        l_use_task_schedule_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6060        IF l_planning_start_date_tbl.COUNT <> l_resource_assignment_id_tbl.COUNT THEN
6061            l_planning_start_date_tbl.extend(l_resource_assignment_id_tbl.last-l_planning_start_date_tbl.COUNT);
6062        END IF;
6063        IF l_planning_end_date_tbl.COUNT<> l_resource_assignment_id_tbl.COUNT THEN
6064            l_planning_end_date_tbl.extend(l_resource_assignment_id_tbl.last-l_planning_end_date_tbl.COUNT);
6065        END IF;
6066        IF l_schedule_start_date_tbl.COUNT <> l_resource_assignment_id_tbl.COUNT THEN
6067            l_schedule_start_date_tbl.extend(l_resource_assignment_id_tbl.last-l_schedule_start_date_tbl.COUNT);
6068        END IF;
6069        IF l_schedule_end_date_tbl.COUNT<> l_resource_assignment_id_tbl.COUNT THEN
6070            l_schedule_end_date_tbl.extend(l_resource_assignment_id_tbl.last-l_schedule_end_date_tbl.COUNT);
6071        END IF;
6072        IF l_total_quantity_tbl.COUNT<>l_resource_assignment_id_tbl.COUNT THEN
6073            l_total_quantity_tbl.extend(l_resource_assignment_id_tbl.last-l_total_quantity_tbl.COUNT);
6074        END IF;
6075        IF l_burdened_cost_tbl.COUNT<>l_resource_assignment_id_tbl.COUNT THEN
6076           l_burdened_cost_tbl.extend(l_resource_assignment_id_tbl.last);
6077        END IF;
6078        IF l_total_raw_cost_tbl.COUNT<>l_resource_assignment_id_tbl.COUNT THEN
6079           l_total_raw_cost_tbl.extend(l_resource_assignment_id_tbl.last);
6080        END IF;
6081 --dbms_output.put_line('l_total_quantity_tbl.last '||l_total_quantity_tbl.last||' l_total_quantity_tbl(1) '||l_total_quantity_tbl(1));
6082        l_override_currency_code_tbl.extend(l_resource_assignment_id_tbl.last);
6083 
6084 l_trace_stage := 220;
6085 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6086 
6087        l_billable_percent_tbl.extend(l_resource_assignment_id_tbl.last);
6088        l_cost_rate_override_tbl.extend(l_resource_assignment_id_tbl.last);
6089        l_burdened_rate_override_tbl.extend(l_resource_assignment_id_tbl.last);
6090        l_sp_fixed_date_tbl.extend(l_resource_assignment_id_tbl.last);
6091        l_named_role_tbl.extend(l_resource_assignment_id_tbl.last);
6092        l_financial_category_name_tbl.extend(l_resource_assignment_id_tbl.last);
6093        l_supplier_name_tbl.extend(l_resource_assignment_id_tbl.last);
6094        l_wbs_element_version_id_tbl.extend(l_resource_assignment_id_tbl.last);
6095        l_project_assignment_id_tbl.extend(l_resource_assignment_id_tbl.last);
6096        l_attribute_category_tbl.extend(l_resource_assignment_id_tbl.last);
6097        l_attribute1_tbl.extend(l_resource_assignment_id_tbl.last);
6098        l_attribute2_tbl.extend(l_resource_assignment_id_tbl.last);
6099        l_attribute3_tbl.extend(l_resource_assignment_id_tbl.last);
6100        l_attribute4_tbl.extend(l_resource_assignment_id_tbl.last);
6101        l_attribute5_tbl.extend(l_resource_assignment_id_tbl.last);
6102        l_attribute6_tbl.extend(l_resource_assignment_id_tbl.last);
6103        l_attribute7_tbl.extend(l_resource_assignment_id_tbl.last);
6104        l_attribute8_tbl.extend(l_resource_assignment_id_tbl.last);
6105        l_attribute9_tbl.extend(l_resource_assignment_id_tbl.last);
6106        l_attribute10_tbl.extend(l_resource_assignment_id_tbl.last);
6107        l_attribute11_tbl.extend(l_resource_assignment_id_tbl.last);
6108        l_attribute12_tbl.extend(l_resource_assignment_id_tbl.last);
6109        l_attribute13_tbl.extend(l_resource_assignment_id_tbl.last);
6110        l_attribute14_tbl.extend(l_resource_assignment_id_tbl.last);
6111        l_attribute15_tbl.extend(l_resource_assignment_id_tbl.last);
6112        l_attribute16_tbl.extend(l_resource_assignment_id_tbl.last);
6113 l_trace_stage := 230;
6114 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6115 
6116 
6117        l_attribute17_tbl.extend(l_resource_assignment_id_tbl.last);
6118        l_attribute18_tbl.extend(l_resource_assignment_id_tbl.last);
6119        l_attribute19_tbl.extend(l_resource_assignment_id_tbl.last);
6120        l_attribute20_tbl.extend(l_resource_assignment_id_tbl.last);
6121        l_attribute21_tbl.extend(l_resource_assignment_id_tbl.last);
6122        l_attribute22_tbl.extend(l_resource_assignment_id_tbl.last);
6123        l_attribute23_tbl.extend(l_resource_assignment_id_tbl.last);
6124        l_attribute24_tbl.extend(l_resource_assignment_id_tbl.last);
6125        l_attribute25_tbl.extend(l_resource_assignment_id_tbl.last);
6126        l_attribute26_tbl.extend(l_resource_assignment_id_tbl.last);
6127        l_attribute27_tbl.extend(l_resource_assignment_id_tbl.last);
6128        l_attribute28_tbl.extend(l_resource_assignment_id_tbl.last);
6129        l_attribute29_tbl.extend(l_resource_assignment_id_tbl.last);
6130        l_attribute30_tbl.extend(l_resource_assignment_id_tbl.last);
6131        l_bill_rate_override_tbl.extend(l_resource_assignment_id_tbl.last);
6132        l_bill_rate_tbl.extend(l_resource_assignment_id_tbl.last);
6133        l_b_multiplier_tbl.extend(l_resource_assignment_id_tbl.last);
6134        l_raw_cost_rate_tbl.extend(l_resource_assignment_id_tbl.last);
6135        l_revenue_tbl.extend(l_resource_assignment_id_tbl.last);
6136 
6137        l_currency_code_tbl.extend(l_resource_assignment_id_tbl.last);
6138 
6139        --For Bug 3948128.
6140        l_scheduled_delay.extend(l_resource_assignment_id_tbl.last);
6141 l_trace_stage := 240;
6142 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6143 
6144 
6145        -- Assiging all the passed tbls to  record type . This is done because
6146        --        1. TA validation API expects a pl/sql table of records
6147        --        2. BULK update will possible since the values that are not passed will be defaulted to FND_API.G_MISS_XXX
6148 
6149 
6150         IF l_debug_mode = 'Y' THEN
6151               pa_debug.g_err_stage:='About to loop thru for assigning to rec types';
6152               print_msg(pa_debug.g_err_stage,l_module_name);
6153         END IF;
6154 
6155 
6156         FOR i IN l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST LOOP
6157 
6158 
6159               IF l_resource_assignment_id_tbl.EXISTS(i) THEN
6160                     l_resource_rec_tbl(i).resource_assignment_id := l_resource_assignment_id_tbl(i);
6161               END IF;
6162 
6163               IF p_assignment_description_tbl.EXISTS(i) THEN
6164                     l_resource_rec_tbl(i).assignment_description := p_assignment_description_tbl(i);
6165               END IF;
6166               IF p_resource_list_member_id_tbl.EXISTS(i) THEN
6167                   l_resource_rec_tbl(i).resource_list_member_id := p_resource_list_member_id_tbl(i);
6168               END IF;
6169               IF p_project_assignment_id_tbl.EXISTS(i) THEN
6170                   l_resource_rec_tbl(i).project_assignment_id := p_project_assignment_id_tbl(i);
6171               END IF;
6172               IF p_resource_alias_tbl.EXISTS(i) THEN
6173                     l_resource_rec_tbl(i).planning_resource_alias := p_resource_alias_tbl(i);
6174               END IF;
6175               IF p_resource_class_flag_tbl.EXISTS(i) THEN
6176                     l_resource_rec_tbl(i).resource_class_flag := p_resource_class_flag_tbl(i);
6177               END IF;
6178               IF p_resource_class_code_tbl.EXISTS(i) THEN
6179                    l_resource_rec_tbl(i).resource_class_code := p_resource_class_code_tbl(i);
6180               END IF;
6181               IF p_resource_class_id_tbl.EXISTS(i) THEN
6182                    l_resource_rec_tbl(i).resource_class_id := p_resource_class_id_tbl(i);
6183               END IF;
6184               IF p_res_type_code_tbl.EXISTS(i) THEN
6185                    l_resource_rec_tbl(i).res_type_code := p_res_type_code_tbl(i);
6186               END IF;
6187               IF p_resource_code_tbl.EXISTS(i) THEN
6188                    l_resource_rec_tbl(i).resource_code := p_resource_code_tbl(i);
6189               END IF;
6190               IF p_resource_name.EXISTS(i) THEN
6191                     l_resource_rec_tbl(i).resource_name := p_resource_name(i);
6192               END IF;
6193 
6194 l_trace_stage := 250;
6195 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6196 
6197               IF p_person_id_tbl.EXISTS(i) THEN
6198                    l_resource_rec_tbl(i).person_id := p_person_id_tbl(i);
6199               END IF;
6200               IF p_job_id_tbl.EXISTS(i) THEN
6201                    l_resource_rec_tbl(i).job_id := p_job_id_tbl(i);
6202               END IF;
6203               IF p_person_type_code.EXISTS(i) THEN
6204                    l_resource_rec_tbl(i).person_type_code := p_person_type_code(i);
6205               END IF;
6206               IF p_bom_resource_id_tbl.EXISTS(i) THEN
6207                    l_resource_rec_tbl(i).bom_resource_id := p_bom_resource_id_tbl(i);
6208               END IF;
6209               IF p_non_labor_resource_tbl.EXISTS(i) THEN
6210                    l_resource_rec_tbl(i).non_labor_resource := p_non_labor_resource_tbl(i);
6211               END IF;
6212               IF p_inventory_item_id_tbl.EXISTS(i) THEN
6213                    l_resource_rec_tbl(i).inventory_item_id := p_inventory_item_id_tbl(i);
6214               END IF;
6215               IF p_item_category_id_tbl.EXISTS(i) THEN
6216                    l_resource_rec_tbl(i).item_category_id := p_item_category_id_tbl(i);
6217               END IF;
6218               IF p_project_role_id_tbl.EXISTS(i) THEN
6219                    l_resource_rec_tbl(i).project_role_id := p_project_role_id_tbl(i);
6220               END IF;
6221               IF p_project_role_name_tbl.EXISTS(i) THEN
6222                    l_resource_rec_tbl(i).project_role_name := p_project_role_name_tbl(i);
6223               END IF;
6224               IF p_organization_id_tbl.EXISTS(i) THEN
6225                    l_resource_rec_tbl(i).organization_id := p_organization_id_tbl(i);
6226               END IF;
6227 l_trace_stage := 251;
6228 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6229 
6230 
6231               IF p_organization_name_tbl.EXISTS(i) THEN
6232                    l_resource_rec_tbl(i).organization_name := p_organization_name_tbl(i);
6233               END IF;
6234               IF p_fc_res_type_code_tbl.EXISTS(i) THEN
6235                    l_resource_rec_tbl(i).fc_res_type_code := p_fc_res_type_code_tbl(i);
6236               END IF;
6237 
6238 l_trace_stage := 2511;
6239 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6240 
6241               IF p_financial_category_code_tbl.EXISTS(i) THEN
6242                    l_resource_rec_tbl(i).financial_category_code := p_financial_category_code_tbl(i);
6243               END IF;
6244 
6245 l_trace_stage := 2512;
6246 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6247 
6248               IF p_expenditure_type_tbl.EXISTS(i) THEN
6249                    l_resource_rec_tbl(i).expenditure_type := p_expenditure_type_tbl(i);
6250               END IF;
6251 l_trace_stage := 2513;
6252 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6253 
6254               IF p_expenditure_category_tbl.EXISTS(i) THEN
6255                    l_resource_rec_tbl(i).expenditure_category := p_expenditure_category_tbl(i);
6256               END IF;
6257 l_trace_stage := 2514;
6258 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6259 
6260               IF p_event_type_tbl.EXISTS(i) THEN
6261                    l_resource_rec_tbl(i).event_type := p_event_type_tbl(i);
6262               END IF;
6263 l_trace_stage := 2515;
6264 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6265 
6266               IF p_revenue_category_code_tbl.EXISTS(i) THEN
6267                    l_resource_rec_tbl(i).revenue_category_code := p_revenue_category_code_tbl(i);
6268               END IF;
6269 l_trace_stage := 252;
6270 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6271 
6272               IF p_supplier_id_tbl.EXISTS(i) THEN
6273                    l_resource_rec_tbl(i).supplier_id := p_supplier_id_tbl(i);
6274               END IF;
6275               IF p_unit_of_measure_tbl.EXISTS(i) THEN
6276                    l_resource_rec_tbl(i).unit_of_measure := p_unit_of_measure_tbl(i);
6277               END IF;
6278               IF p_spread_curve_id_tbl.EXISTS(i) THEN
6279                    l_resource_rec_tbl(i).spread_curve_id := p_spread_curve_id_tbl(i);
6280               END IF;
6281               IF p_etc_method_code_tbl.EXISTS(i) THEN
6282                    l_resource_rec_tbl(i).etc_method_code := p_etc_method_code_tbl(i);
6283               END IF;
6284               IF p_mfc_cost_type_id_tbl.EXISTS(i) THEN
6285                    l_resource_rec_tbl(i).mfc_cost_type_id := p_mfc_cost_type_id_tbl(i);
6286               END IF;
6287 l_trace_stage := 253;
6288 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6289 
6290 
6291               IF p_procure_resource_flag_tbl.EXISTS(i) THEN
6292                    l_resource_rec_tbl(i).procure_resource_flag := p_procure_resource_flag_tbl(i);
6293               END IF;
6294               IF p_incurred_by_res_flag_tbl.EXISTS(i) THEN
6295                    l_resource_rec_tbl(i).incurred_by_res_flag := p_incurred_by_res_flag_tbl(i);
6296               END IF;
6297               IF p_incur_by_resource_code_tbl.EXISTS(i) THEN
6298                    l_resource_rec_tbl(i).incur_by_resource_code := p_incur_by_resource_code_tbl(i);
6299               END IF;
6300               IF p_incur_by_resource_name_tbl.EXISTS(i) THEN
6301                    l_resource_rec_tbl(i).incur_by_resource_name := p_incur_by_resource_name_tbl(i);
6302               END IF;
6303               IF p_Incur_by_res_class_code_tbl.EXISTS(i) THEN
6304                    l_resource_rec_tbl(i).Incur_by_res_class_code := p_Incur_by_res_class_code_tbl(i);
6305               END IF;
6306               IF p_Incur_by_role_id_tbl.EXISTS(i) THEN
6307                    l_resource_rec_tbl(i).Incur_by_role_id := p_Incur_by_role_id_tbl(i);
6308               END IF;
6309               IF p_use_task_schedule_flag_tbl.EXISTS(i) THEN
6310                    l_resource_rec_tbl(i).use_task_schedule_flag := p_use_task_schedule_flag_tbl(i);
6311               END IF;
6312               IF l_planning_start_date_tbl.EXISTS(i) THEN
6313                    l_resource_rec_tbl(i).planning_start_date := l_planning_start_date_tbl(i);
6314               END IF;
6315               IF l_planning_end_date_tbl.EXISTS(i) THEN
6316                    l_resource_rec_tbl(i).planning_end_date := l_planning_end_date_tbl(i);
6317               END IF;
6318               IF l_schedule_start_date_tbl.EXISTS(i) THEN
6319                    l_resource_rec_tbl(i).schedule_start_date := l_schedule_start_date_tbl(i);
6320               END IF;
6321               IF l_schedule_end_date_tbl.EXISTS(i) THEN
6322                    l_resource_rec_tbl(i).schedule_end_date := l_schedule_end_date_tbl(i);
6323               END IF;
6324 
6325               l_trace_stage := 254;
6326               --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6327 
6328               IF l_total_quantity_tbl.EXISTS(i) THEN
6329                    l_resource_rec_tbl(i).total_quantity := l_total_quantity_tbl(i);
6330               END IF;
6331               IF p_txn_currency_override_tbl.EXISTS(i) THEN
6332                    l_resource_rec_tbl(i).override_currency_code := p_txn_currency_override_tbl(i);
6333               END IF;
6334               IF p_billable_percent_tbl.EXISTS(i) THEN
6335                    l_resource_rec_tbl(i).billable_percent := p_billable_percent_tbl(i);
6336               END IF;
6337               IF p_cost_rate_override_tbl.EXISTS(i) THEN
6338                    l_resource_rec_tbl(i).cost_rate_override := p_cost_rate_override_tbl(i);
6339               END IF;
6340               IF p_burdened_rate_override_tbl.EXISTS(i) THEN
6341                    l_resource_rec_tbl(i).burdened_rate_override := p_burdened_rate_override_tbl(i);
6342               END IF;
6343               -- 3817356 Replacing p_xxxx_date_tbls by l_in_xxxx_date_tbls
6344               IF l_in_sp_fixed_date_tbl.EXISTS(i) THEN
6345                    l_resource_rec_tbl(i).sp_fixed_date := l_in_sp_fixed_date_tbl(i);
6346               END IF;
6347               IF p_financial_category_name_tbl.EXISTS(i) THEN
6348                    l_resource_rec_tbl(i).financial_category_name := p_financial_category_name_tbl(i);
6349               END IF;
6350               IF p_named_role_tbl.EXISTS(i) THEN
6351                    l_resource_rec_tbl(i).named_role := p_named_role_tbl(i);
6352               END IF;
6353               IF p_supplier_name_tbl.EXISTS(i) THEN
6354                    l_resource_rec_tbl(i).supplier_name := p_supplier_name_tbl(i);
6355               END IF;
6356 l_trace_stage := 260;
6357 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6358 
6359 
6360               --Select the element version id for each ra id
6361               SELECT wbs_element_version_id
6362               INTO   l_resource_rec_tbl(i).wbs_element_version_id
6363               FROM   pa_resource_assignments
6364               WHERE  resource_assignment_id = l_resource_assignment_id_tbl(i);
6365 
6366               IF p_attribute_category_tbl.EXISTS(i) THEN
6367                    l_resource_rec_tbl(i).attribute_category := p_attribute_category_tbl(i);
6368               END IF;
6369               IF p_attribute1_tbl.EXISTS(i) THEN
6370                    l_resource_rec_tbl(i).attribute1 := p_attribute1_tbl(i);
6371               END IF;
6372               IF p_attribute2_tbl.EXISTS(i) THEN
6373                    l_resource_rec_tbl(i).attribute2 := p_attribute2_tbl(i);
6374               END IF;
6375               IF p_attribute3_tbl.EXISTS(i) THEN
6376                    l_resource_rec_tbl(i).attribute3 := p_attribute3_tbl(i);
6377               END IF;
6378               IF p_attribute4_tbl.EXISTS(i) THEN
6379                    l_resource_rec_tbl(i).attribute4 := p_attribute4_tbl(i);
6380               END IF;
6381               IF p_attribute5_tbl.EXISTS(i) THEN
6382                    l_resource_rec_tbl(i).attribute5 := p_attribute5_tbl(i);
6383               END IF;
6384               IF p_attribute6_tbl.EXISTS(i) THEN
6385                    l_resource_rec_tbl(i).attribute6 := p_attribute6_tbl(i);
6386               END IF;
6387               IF p_attribute7_tbl.EXISTS(i) THEN
6388                    l_resource_rec_tbl(i).attribute7 := p_attribute7_tbl(i);
6389               END IF;
6390 
6391               IF p_attribute8_tbl.EXISTS(i) THEN
6392                    l_resource_rec_tbl(i).attribute8 := p_attribute8_tbl(i);
6393               END IF;
6394               IF p_attribute9_tbl.EXISTS(i) THEN
6395                    l_resource_rec_tbl(i).attribute9 := p_attribute9_tbl(i);
6396               END IF;
6397               IF p_attribute10_tbl.EXISTS(i) THEN
6398                    l_resource_rec_tbl(i).attribute10 := p_attribute10_tbl(i);
6399               END IF;
6400               IF p_attribute11_tbl.EXISTS(i) THEN
6401                    l_resource_rec_tbl(i).attribute11 := p_attribute11_tbl(i);
6402               END IF;
6403               IF p_attribute12_tbl.EXISTS(i) THEN
6404                    l_resource_rec_tbl(i).attribute12 := p_attribute12_tbl(i);
6405               END IF;
6406               IF p_attribute13_tbl.EXISTS(i) THEN
6407                    l_resource_rec_tbl(i).attribute13 := p_attribute13_tbl(i);
6408               END IF;
6409               IF p_attribute14_tbl.EXISTS(i) THEN
6410                    l_resource_rec_tbl(i).attribute14 := p_attribute14_tbl(i);
6411               END IF;
6412               IF p_attribute15_tbl.EXISTS(i) THEN
6413                    l_resource_rec_tbl(i).attribute15 := p_attribute15_tbl(i);
6414               END IF;
6415               IF p_attribute16_tbl.EXISTS(i) THEN
6416                    l_resource_rec_tbl(i).attribute16 := p_attribute16_tbl(i);
6417               END IF;
6418               IF p_attribute17_tbl.EXISTS(i) THEN
6419                    l_resource_rec_tbl(i).attribute17 := p_attribute17_tbl(i);
6420               END IF;
6421               IF p_attribute18_tbl.EXISTS(i) THEN
6422                    l_resource_rec_tbl(i).attribute18 := p_attribute18_tbl(i);
6423               END IF;
6424               IF p_attribute19_tbl.EXISTS(i) THEN
6425                    l_resource_rec_tbl(i).attribute19 := p_attribute19_tbl(i);
6426               END IF;
6427               IF p_attribute20_tbl.EXISTS(i) THEN
6428                    l_resource_rec_tbl(i).attribute20 := p_attribute20_tbl(i);
6429               END IF;
6430               IF p_attribute21_tbl.EXISTS(i) THEN
6431                    l_resource_rec_tbl(i).attribute21 := p_attribute21_tbl(i);
6432               END IF;
6433               IF p_attribute22_tbl.EXISTS(i) THEN
6434                    l_resource_rec_tbl(i).attribute22 := p_attribute22_tbl(i);
6435               END IF;
6436               IF p_attribute23_tbl.EXISTS(i) THEN
6437                    l_resource_rec_tbl(i).attribute23 := p_attribute23_tbl(i);
6438               END IF;
6439               IF p_attribute24_tbl.EXISTS(i) THEN
6440                    l_resource_rec_tbl(i).attribute24 := p_attribute24_tbl(i);
6441               END IF;
6442               IF p_attribute25_tbl.EXISTS(i) THEN
6443                    l_resource_rec_tbl(i).attribute25 := p_attribute25_tbl(i);
6444               END IF;
6445               IF p_attribute26_tbl.EXISTS(i) THEN
6446                    l_resource_rec_tbl(i).attribute26 := p_attribute26_tbl(i);
6447               END IF;
6448               IF p_attribute27_tbl.EXISTS(i) THEN
6449                    l_resource_rec_tbl(i).attribute27 := p_attribute27_tbl(i);
6450               END IF;
6451               IF p_attribute28_tbl.EXISTS(i) THEN
6452                    l_resource_rec_tbl(i).attribute28 := p_attribute28_tbl(i);
6453               END IF;
6454               IF p_attribute29_tbl.EXISTS(i) THEN
6455                    l_resource_rec_tbl(i).attribute29 := p_attribute29_tbl(i);
6456               END IF;
6457               IF p_attribute30_tbl.EXISTS(i) THEN
6458                    l_resource_rec_tbl(i).attribute30 := p_attribute30_tbl(i);
6459               END IF;
6460 
6461               --For bug 3948128
6462               IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK AND p_scheduled_delay.EXISTS(i) THEN
6463                   l_resource_rec_tbl(i).scheduled_delay := p_scheduled_delay(i);
6464               END IF;
6465         END LOOP;
6466 
6467 l_trace_stage := 2500;
6468 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6469 
6470        --dbms_output.put_line('3');
6471         IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
6472              /*-------------------------------------------------
6473                Calling Task validation API
6474                -------------------------------------------------*/
6475              IF l_debug_mode = 'Y' THEN
6476                    pa_debug.g_err_stage:='Calling API pa_task_assignment_utils.Validate_Update_Assignment';
6477                    pa_debug.write(l_module_name,pa_debug.g_err_stage,
6478                                   l_debug_level3);
6479              END IF;
6480 
6481 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: before calling validate_update_assignment');
6482 
6483 --dbms_output.put_line(' l_resource_rec_tbl(i).cost_rate_override is '|| l_resource_rec_tbl(1).cost_rate_override);
6484              PA_TASK_ASSIGNMENT_UTILS.Validate_Update_Assignment(
6485                p_calling_context              => p_calling_context,   -- Added for Bug 6856934
6486                p_task_assignment_tbl          => l_resource_rec_tbl,
6487                x_return_status                => l_return_status);
6488 --dbms_output.put_line(' l_resource_rec_tbl(i).cost_rate_override is '|| l_resource_rec_tbl(1).cost_rate_override);
6489 
6490 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: after calling validate_update_assignment');
6491 
6492              IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6493                    IF l_debug_mode = 'Y' THEN
6494                          pa_debug.g_err_stage:='Called API PA_TASK_ASSIGNMENT_UTILS.Validate_Update_Assignment returned error';
6495                          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6496                    END IF;
6497                    RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6498              END IF;
6499 
6500              --If the rec tbl returned by validate API does not contain records then return
6501              IF l_resource_rec_tbl.COUNT=0 THEN
6502                    IF l_debug_mode = 'Y' THEN
6503                          pa_debug.g_err_stage:='Validate API returned 0 records';
6504                          print_msg(pa_debug.g_err_stage,l_module_name);
6505                          pa_debug.reset_curr_function;
6506 		   END IF;
6507                    RETURN;
6508              END IF;
6509 
6510 
6511 
6512         END IF;
6513 
6514 
6515         /*------------------------------------------------------------------------
6516         -- Repopulating all the resource data tables from the table l_resource_rec_tbl
6517         -- Now all the parameters not passed will be initialized to FND_API.G_MISS_XXX
6518         ------------------------------------------------------------------------ */
6519         FOR i IN l_resource_rec_tbl.FIRST .. l_resource_rec_tbl.LAST LOOP
6520 
6521              IF l_resource_rec_tbl.EXISTS(i) THEN
6522                   --dbms_output.put_line('E1');
6523 
6524                     l_resource_assignment_id_tbl(i) := l_resource_rec_tbl(i).resource_assignment_id;
6525                     l_resource_list_member_id_tbl(i):= l_resource_rec_tbl(i).resource_list_member_id;
6526                     l_assignment_description_tbl(i) := l_resource_rec_tbl(i).assignment_description;
6527                     l_planning_resource_alias_tbl(i):= l_resource_rec_tbl(i).planning_resource_alias;
6528                     l_resource_class_flag_tbl(i)    := l_resource_rec_tbl(i).resource_class_flag;
6529                     l_resource_class_code_tbl(i)    := l_resource_rec_tbl(i).resource_class_code;
6530                     l_resource_class_id_tbl(i)      := l_resource_rec_tbl(i).resource_class_id;
6531                     -- Added for bug 3698458
6532                     l_rate_exp_org_id_tbl(i)        := l_resource_rec_tbl(i).org_id;
6533                     l_rate_exp_type_tbl(i)          := l_resource_rec_tbl(i).rate_expenditure_type;
6534                     l_rate_func_curr_code_tbl(i)    := l_resource_rec_tbl(i).rate_func_curr_code;
6535                     l_incur_by_res_type_tbl(i)      := l_resource_rec_tbl(i).incur_by_res_type;
6536                     l_incurred_by_res_flag_tbl(i)   := l_resource_rec_tbl(i).incurred_by_res_flag;
6537                     l_res_type_code_tbl(i)          := l_resource_rec_tbl(i).res_type_code;
6538 
6539                     IF  l_incurred_by_res_flag_tbl.EXISTS(i) AND nvl(l_incurred_by_res_flag_tbl(i),'N') = 'Y' THEN
6540                         IF l_incur_by_res_type_tbl.EXISTS(i) THEN
6541                            l_res_type_code_tbl(i) := l_incur_by_res_type_tbl(i);
6542                         ELSE
6543                            l_res_type_code_tbl(i) := NULL;
6544                         END IF;
6545                     END IF;
6546 
6547                     -- The following if-else clause has been added for bug 3678814
6548                     IF  p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
6549                         l_rate_based_flag_tbl(i)    :=  l_resource_rec_tbl(i).rate_based_flag;
6550                     ELSE
6551                         l_rate_based_flag_tbl(i)    :=  null;
6552                     END If;
6553 
6554                     l_resource_code_tbl(i)          := l_resource_rec_tbl(i).resource_code;
6555                     l_person_id_tbl(i)              := l_resource_rec_tbl(i).person_id;
6556                     l_job_id_tbl(i)                 := l_resource_rec_tbl(i).job_id;
6557                     l_person_type_code_tbl(i)       := l_resource_rec_tbl(i).person_type_code;
6558                     l_bom_resource_id_tbl(i)        := l_resource_rec_tbl(i).bom_resource_id;
6559                     l_non_labor_resource_tbl(i)     := l_resource_rec_tbl(i).non_labor_resource;
6560                     l_inventory_item_id_tbl(i)      := l_resource_rec_tbl(i).inventory_item_id;
6561 
6562                     l_item_category_id_tbl(i)       := l_resource_rec_tbl(i).item_category_id;
6563                     l_project_role_id_tbl(i)        := l_resource_rec_tbl(i).project_role_id;
6564                     l_project_role_name_tbl(i)      := l_resource_rec_tbl(i).project_role_name;
6565                     l_organization_id_tbl(i)        := l_resource_rec_tbl(i).organization_id;
6566                     l_organization_name_tbl(i)      := l_resource_rec_tbl(i).organization_name;
6567                     l_fc_res_type_code_tbl(i)       := l_resource_rec_tbl(i).fc_res_type_code;
6568                     l_financial_category_code_tbl(i):= l_resource_rec_tbl(i).financial_category_code;
6569                     l_expenditure_type_tbl(i)       := l_resource_rec_tbl(i).expenditure_type;
6570                     l_expenditure_category_tbl(i)   := l_resource_rec_tbl(i).expenditure_category;
6571                     l_event_type_tbl(i)             := l_resource_rec_tbl(i).event_type;
6572                     l_revenue_category_code_tbl(i)  := l_resource_rec_tbl(i).revenue_category_code;
6573                     l_supplier_id_tbl(i)            := l_resource_rec_tbl(i).supplier_id;
6574                     l_unit_of_measure_tbl(i)        := l_resource_rec_tbl(i).unit_of_measure;
6575                     l_spread_curve_id_tbl(i)        := l_resource_rec_tbl(i).spread_curve_id;
6576                     l_etc_method_code_tbl(i)        := l_resource_rec_tbl(i).etc_method_code;
6577                     l_mfc_cost_type_id_tbl(i)       := l_resource_rec_tbl(i).mfc_cost_type_id;
6578                     l_procure_resource_flag_tbl(i)  := l_resource_rec_tbl(i).procure_resource_flag;
6579                     l_incur_by_resource_code_tbl(i) := l_resource_rec_tbl(i).incur_by_resource_code;
6580                     l_incur_by_resource_name_tbl(i) := l_resource_rec_tbl(i).incur_by_resource_name;
6581                     l_Incur_by_res_class_code_tbl(i):= l_resource_rec_tbl(i).Incur_by_res_class_code;
6582                     l_Incur_by_role_id_tbl(i)       := l_resource_rec_tbl(i).Incur_by_role_id;
6583                     l_use_task_schedule_flag_tbl(i) := l_resource_rec_tbl(i).use_task_schedule_flag;
6584                     l_planning_start_date_tbl(i)    := l_resource_rec_tbl(i).planning_start_date;
6585                     l_planning_end_date_tbl(i)      := l_resource_rec_tbl(i).planning_end_date;
6586                     l_schedule_start_date_tbl(i)    := l_resource_rec_tbl(i).schedule_start_date;
6587                     l_schedule_end_date_tbl(i)      := l_resource_rec_tbl(i).schedule_end_date;
6588                     l_total_quantity_tbl(i)         := l_resource_rec_tbl(i).total_quantity;
6589                     l_override_currency_code_tbl(i) := l_resource_rec_tbl(i).override_currency_code;
6590                     l_billable_percent_tbl(i)       := l_resource_rec_tbl(i).billable_percent;
6591                     l_cost_rate_override_tbl(i)     := l_resource_rec_tbl(i).cost_rate_override;
6592                     l_burdened_rate_override_tbl(i) := l_resource_rec_tbl(i).burdened_rate_override;
6593                     l_sp_fixed_date_tbl(i)          := l_resource_rec_tbl(i).sp_fixed_date;
6594                     l_named_role_tbl(i)             := l_resource_rec_tbl(i).named_role;
6595                     l_financial_category_name_tbl(i):= l_resource_rec_tbl(i).financial_category_name;
6596                     l_supplier_name_tbl(i)          := l_resource_rec_tbl(i).supplier_name;
6597                     l_wbs_element_version_id_tbl(i) := l_resource_rec_tbl(i).wbs_element_version_id;
6598                     l_project_assignment_id_tbl(i)  := l_resource_rec_tbl(i).project_assignment_id;
6599                     l_attribute_category_tbl(i)     := l_resource_rec_tbl(i).ATTRIBUTE_CATEGORY;
6600                     l_attribute1_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE1;
6601                     l_attribute2_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE2;
6602                     l_attribute3_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE3;
6603                     l_attribute4_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE4;
6604                     l_attribute5_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE5;
6605                     l_attribute6_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE6;
6606 
6607                     l_attribute7_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE7;
6608                     l_attribute8_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE8;
6609                     l_attribute9_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE9;
6610                     l_attribute10_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE10;
6611                     l_attribute11_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE11;
6612                     l_attribute12_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE12;
6613                     l_attribute13_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE13;
6614                     l_attribute14_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE14;
6615                     l_attribute15_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE15;
6616                     l_attribute16_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE16;
6617                     l_attribute17_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE17;
6618                     l_attribute18_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE18;
6619                     l_attribute19_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE19;
6620                     l_attribute20_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE20;
6621                     l_attribute21_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE21;
6622                     l_attribute22_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE22;
6623 
6624                     l_attribute23_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE23;
6625                     l_attribute24_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE24;
6626                     l_attribute25_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE25;
6627                     l_attribute26_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE26;
6628                     l_attribute27_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE27;
6629                     l_attribute28_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE28;
6630                     l_attribute29_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE29;
6631                     l_attribute30_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE30;
6632 
6633                     --For bug 3948128
6634                     IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
6635                         l_scheduled_delay(i)            := l_resource_rec_tbl(i).scheduled_delay;
6636                     END IF;
6637              END IF;
6638 /* Commenting out this code for check for spread curve date to be null
6639    since this check will be done in Process_res_chg_Derv_calc_prms 3762278
6640 -- Added for Bug 3607061 - Starts
6641 -- Please not that FIXED DATE SPREAD CURVE ID is SEEDED as 6, so we are able to hard code it below
6642              IF l_debug_mode = 'Y' THEN
6643                     pa_debug.g_err_stage:='Deriving SP Fixed Date';
6644                     print_msg(pa_debug.g_err_stage,l_module_name);
6645              END IF;
6646              IF l_spread_curve_id_tbl(i) = l_fixed_date_sp_id THEN
6647                 IF l_debug_mode = 'Y' THEN
6648                    pa_debug.g_err_stage:='Spread Curve Id is of FIXED_DATE';
6649                    print_msg(pa_debug.g_err_stage,l_module_name);
6650                 END IF;
6651                 IF l_sp_fixed_date_tbl(i) = FND_API.G_MISS_DATE THEN
6652                    IF l_debug_mode = 'Y' THEN
6653                       pa_debug.g_err_stage:='Error - cannot nullify sp_fixed_date for Fixed Date Spread curve';
6654                       print_msg(pa_debug.g_err_stage,l_module_name);
6655                    END IF;
6656                    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6657                                         p_msg_name       => 'PA_FP_SP_FIXED_DATE_NULL');
6658                    RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6659                 END IF;
6660              END IF;
6661 -- Added for Bug 3607061 - Ends
6662 */
6663                                --dbms_output.put_line('E2');
6664 
6665         END LOOP;
6666 
6667 --dbms_output.put_line('l_total_quantity_tbl.last '||l_total_quantity_tbl.last||' l_total_quantity_tbl(1) '||l_total_quantity_tbl(1));
6668 
6669        --Get the project currency so that it can be used in preparing pl/sql tables for calculate api
6670        pa_budget_utils.Get_Project_Currency_Info
6671        (  p_project_id             => l_project_id
6672         , x_projfunc_currency_code => l_projfunc_currency_code_out
6673         , x_project_currency_code  => l_existing_curr_code
6674         , x_txn_currency_code      => l_projfunc_currency_code
6675         , x_msg_count              => x_msg_count
6676         , x_msg_data               => x_msg_data
6677         , x_return_status          => x_return_status);
6678        --dbms_output.put_line('4');
6679        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6680             IF l_debug_mode = 'Y' THEN
6681                pa_debug.g_err_stage:='Cpa_budget_utils.Get_Project_Currency_Info returned error';
6682                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6683             END IF;
6684             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6685        END IF;
6686 
6687        --Derive the tables that are required for Calculate API
6688        IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR p_context = PA_FP_CONSTANTS_PKG.G_PLAN_CLASS_FORECAST THEN
6689 
6690             IF l_debug_mode = 'Y' THEN
6691                pa_debug.g_err_stage:='Preparing the pl/sql tables for calling calc api for BF';
6692                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6693             END IF;
6694 
6695 
6696             l_override_currency_code_tbl := p_txn_currency_override_tbl;
6697             l_bill_rate_override_tbl     := p_bill_rate_override_tbl;
6698             l_bill_rate_tbl              := p_bill_rate_tbl;
6699             l_burdened_rate_override_tbl := p_burdened_rate_override_tbl;
6700             l_b_multiplier_tbl           := p_burdened_rate_tbl;
6701             l_cost_rate_override_tbl     := p_cost_rate_override_tbl;
6702             l_raw_cost_rate_tbl          := p_cost_rate_tbl;
6703             l_revenue_tbl                := p_revenue_tbl;
6704             l_burdened_cost_tbl          := p_burdened_cost_tbl;
6705             l_total_raw_cost_tbl         := p_raw_cost_tbl;
6706             --Added by Xin. Fix Bug 3430136
6707             --Feb-09-2004 Doosan iteration 1
6708             l_currency_code_tbl          := p_currency_code_tbl;
6709 
6710             l_override_currency_code_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_override_currency_code_tbl.COUNT );
6711             l_bill_rate_override_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_bill_rate_override_tbl.COUNT);
6712             l_bill_rate_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_bill_rate_tbl.COUNT);
6713             l_burdened_rate_override_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_burdened_rate_override_tbl.COUNT);
6714             l_b_multiplier_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_b_multiplier_tbl.COUNT);
6715             --dbms_output.put_line('l_cost_rate_override_tbl count is '||l_cost_rate_override_tbl.count);
6716             l_cost_rate_override_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_cost_rate_override_tbl.COUNT);
6717             --dbms_output.put_line('A l_cost_rate_override_tbl count is '||l_cost_rate_override_tbl.count);
6718             l_raw_cost_rate_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_raw_cost_rate_tbl.COUNT);
6719             l_revenue_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_revenue_tbl.COUNT);
6720             l_burdened_cost_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_burdened_cost_tbl.COUNT);
6721             l_total_raw_cost_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_total_raw_cost_tbl.COUNT);
6722             l_currency_code_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_currency_code_tbl.COUNT);
6723 
6724 
6725 
6726        -- In the context of Task Assignment and Workplan, the block below will calculate the additional quantity
6727        -- i.e. the difference between the existing quantity and the quantity passed.
6728        ELSIF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
6729 
6730             IF l_debug_mode = 'Y' THEN
6731                pa_debug.g_err_stage:='About to bulk collect into pl/sql tables req for calc api '||l_override_currency_code_tbl.last;
6732                print_msg(pa_debug.g_err_stage,l_module_name);
6733             END IF;
6734 
6735             /* Preparing PLSql Tables for Rates for Calling Calculate API*/
6736             -- Bug 3760166
6737             l_bill_rate_tbl              := p_bill_rate_tbl;
6738             l_b_multiplier_tbl           := p_burdened_rate_tbl;
6739             l_raw_cost_rate_tbl          := p_cost_rate_tbl;
6740 
6741             l_bill_rate_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_bill_rate_tbl.COUNT);
6742             l_b_multiplier_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_b_multiplier_tbl.COUNT);
6743             l_raw_cost_rate_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_raw_cost_rate_tbl.COUNT);
6744 
6745             /** added for progress upload  **/
6746             -- Bug 3807763. For Workplan Context, check_and_create_task_rec info has already been called.
6747             -- This takes care of populating l_burdened_cost_tbl and l_total_raw_cost_tbl as per the I/P Data.
6748             If ((p_apply_progress_flag = 'Y' AND p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK) OR
6749                         p_upd_cost_amts_too_for_ta_flg = 'Y' ) THEN --Added for bug#4538286.
6750                 --l_revenue_tbl                := p_revenue_tbl;
6751                 l_burdened_cost_tbl          := p_burdened_cost_tbl;
6752                 l_total_raw_cost_tbl         := p_raw_cost_tbl;
6753 
6754                 l_total_raw_cost_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_total_raw_cost_tbl.COUNT);
6755                 l_burdened_cost_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_burdened_cost_tbl.COUNT);
6756             End If;
6757 
6758            --The below LOOP will be used to derive the txn currency code for each task assignment
6759            FOR  i IN l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST LOOP
6760 
6761 		           --Bug 6397725. From FP M RUP3 onwards check should be made against pa_resource_asgn_curr
6762 		           --table
6763 		           /*
6764                SELECT NVL(pbl.txn_currency_code,l_existing_curr_code)
6765                INTO   l_currency_code_tbl(i)
6766                FROM   pa_resource_assignments b,
6767                       (SELECT pbl.txn_currency_code,
6768                               pra.resource_assignment_id
6769                        FROM   pa_budget_lines pbl,
6770                               pa_resource_assignments pra
6771                        WHERE  pbl.resource_assignment_id(+)=pra.resource_assignment_id
6772                        AND    pra.resource_assignment_id=l_resource_assignment_id_tbl(i)
6773                        AND    ROWNUM=1) pbl
6774                WHERE  b.resource_assignment_id=l_resource_assignment_id_tbl(i);*/
6775 
6776                SELECT NVL(rac.txn_currency_code,l_existing_curr_code)
6777  	                INTO   l_currency_code_tbl(i)
6778  	                FROM   pa_resource_asgn_curr rac,
6779  	                       pa_resource_assignments pra
6780  	                WHERE  rac.resource_assignment_id(+)=pra.resource_assignment_id
6781  	                AND    pra.resource_assignment_id=l_resource_assignment_id_tbl(i);
6782 
6783            END LOOP;
6784            /* Note that l_override_currency_code_tbl would be null in case of
6785              * WP which is correct. This can never be edited in WP flow. For TA,
6786              * l_override_curr_code_tbl would be having override curr code that
6787              * got passed from the UI and ultimately returned back by the
6788              * validate TA api */
6789 
6790             IF l_debug_mode = 'Y' THEN
6791                pa_debug.g_err_stage:='Done with preparing the tables';
6792                print_msg(pa_debug.g_err_stage,l_module_name);
6793             END IF;
6794 
6795        END IF;
6796 
6797        /* Calling the api Derive_Parameters_For_Calc_Api
6798         */
6799        IF l_debug_mode = 'Y' THEN
6800               pa_debug.g_err_stage:='Calling API Derive_Parameters_For_Calc_Api';
6801               print_msg(pa_debug.g_err_stage,l_module_name);
6802        END IF;
6803 --dbms_output.put_line('l_b_multiplier_tbl cnt is '||l_burdened_rate_override_tbl.count);
6804        --dbms_output.put_line('5');
6805        Process_res_chg_Derv_calc_prms
6806         (
6807          p_context                         => p_context
6808         ,p_calling_context                 => p_calling_context   -- Added for Bug 6856934
6809         ,p_budget_version_id               => l_budget_version_id
6810         ,p_resource_assignment_id_tbl      => l_resource_assignment_id_tbl
6811         ,p_resource_list_member_id_tbl     => l_resource_list_member_id_tbl
6812         ,p_planning_start_date_tbl         => l_planning_start_date_tbl
6813         ,p_planning_end_date_tbl           => l_planning_end_date_tbl
6814         ,p_spread_curve_id_tbl             => l_spread_curve_id_tbl
6815         ,p_sp_fixed_date_tbl               => l_sp_fixed_date_tbl
6816         ,p_txn_currency_code_tbl           => l_currency_code_tbl
6817         ,p_inventory_item_id_tbl           => l_inventory_item_id_tbl
6818         ,p_expenditure_type_tbl            => l_expenditure_type_tbl
6819         ,p_person_id_tbl                   => l_person_id_tbl
6820         ,p_job_id_tbl                      => l_job_id_tbl
6821         ,p_organization_id_tbl             => l_organization_id_tbl
6822         ,p_event_type_tbl                  => l_event_type_tbl
6823         ,p_expenditure_category_tbl        => l_expenditure_category_tbl
6824         ,p_revenue_category_code_tbl       => l_revenue_category_code_tbl
6825         ,p_item_category_id_tbl            => l_item_category_id_tbl
6826         ,p_bom_resource_id_tbl             => l_bom_resource_id_tbl
6827         ,p_project_role_id_tbl             => l_project_role_id_tbl
6828         ,p_person_type_code_tbl            => l_person_type_code_tbl
6829         ,p_supplier_id_tbl                 => l_supplier_id_tbl
6830         ,p_named_role_tbl                  => l_named_role_tbl
6831         ,p_mfc_cost_type_id_tbl            => l_mfc_cost_type_id_tbl
6832         ,p_fixed_date_sp_id                => l_fixed_date_sp_id
6833         ,px_total_qty_tbl                  => l_total_quantity_tbl
6834         ,px_total_raw_cost_tbl             => l_total_raw_cost_tbl
6835         ,px_total_burdened_cost_tbl        => l_burdened_cost_tbl
6836         ,px_total_revenue_tbl              => l_revenue_tbl
6837         ,px_raw_cost_rate_tbl              => l_raw_cost_rate_tbl
6838         ,px_raw_cost_override_rate_tbl     => l_cost_rate_override_tbl
6839         ,px_b_cost_rate_tbl                => l_b_multiplier_tbl
6840         ,px_b_cost_rate_override_tbl       => l_burdened_rate_override_tbl
6841         ,px_bill_rate_tbl                  => l_bill_rate_tbl
6842         ,px_bill_rate_override_tbl         => l_bill_rate_override_tbl
6843         ,x_rbs_element_id_tbl              => l_rbs_element_id_tbl
6844         ,x_txn_accum_header_id_tbl         => l_txn_accum_header_id_tbl
6845         ,x_mfc_cost_type_id_old_tbl        => l_mfc_cost_type_id_old_tbl
6846         ,x_mfc_cost_type_id_new_tbl        => l_mfc_cost_type_id_new_tbl
6847         ,x_spread_curve_id_old_tbl         => l_spread_curve_id_old_tbl
6848         ,x_spread_curve_id_new_tbl         => l_spread_curve_id_new_tbl
6849         ,x_sp_fixed_date_old_tbl           => l_sp_fixed_date_old_tbl
6850         ,x_sp_fixed_date_new_tbl           => l_sp_fixed_date_new_tbl
6851         ,x_plan_start_date_old_tbl         => l_plan_start_date_old_tbl
6852         ,x_plan_start_date_new_tbl         => l_plan_start_date_new_tbl
6853         ,x_plan_end_date_old_tbl           => l_plan_end_date_old_tbl
6854         ,x_plan_end_date_new_tbl           => l_plan_end_date_new_tbl
6855         ,x_rlm_id_change_flag_tbl          => l_rlm_id_change_flag_tbl
6856         ,x_return_status                   => x_return_status
6857         ,x_msg_data                        => x_msg_data
6858         ,x_msg_count                       => x_msg_count );
6859 
6860        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6861              IF l_debug_mode = 'Y' THEN
6862                    pa_debug.g_err_stage:='Derive_Parameters_For_Calc_Api returned error';
6863                    print_msg(pa_debug.g_err_stage,l_module_name);
6864              END IF;
6865              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6866        END IF;
6867 
6868        --The Sp Fixed Date will be defaulted in Process_res_chg_Derv_calc_prms to planning start date if not passed
6869        --for a resource assignment with fixed spread curve. Hence the value returned should be considered
6870        l_sp_fixed_date_tbl := l_sp_fixed_date_new_tbl;
6871 --dbms_output.put_line(' cccc l_burdened_rate_override_tbl cnt is '||l_burdened_rate_override_tbl.count);
6872        IF l_debug_mode = 'Y' THEN
6873               pa_debug.g_err_stage:='Bulk updating pa_resource_assignments. start '||l_resource_assignment_id_tbl.FIRST ||' end '||l_resource_assignment_id_tbl.LAST;
6874               print_msg(pa_debug.g_err_stage,l_module_name);
6875        END IF;
6876 
6877        --dbms_output.put_line('6');
6878        --Prepare the pl/sql tables for the all columns in pa_resource_assignments to make use of bulk update
6879        FORALL i IN l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST
6880 
6881              UPDATE  PA_RESOURCE_ASSIGNMENTS
6882              SET     resource_list_member_id      = DECODE (l_resource_list_member_id_tbl(i),l_g_miss_num,null,nvl(l_resource_list_member_id_tbl(i),resource_list_member_id))
6883                     ,last_update_date             = sysdate
6884                     ,last_updated_by              = FND_GLOBAL.user_id
6885                     ,last_update_login            = FND_GLOBAL.login_id
6886                     ,unit_of_measure              = DECODE (l_unit_of_measure_tbl(i), l_g_miss_char,null,nvl( l_unit_of_measure_tbl(i),unit_of_measure))
6887                     ,project_assignment_id        = DECODE (l_project_assignment_id_tbl(i), l_g_miss_num,null,nvl(l_project_assignment_id_tbl(i),project_assignment_id))
6888                     ,planning_start_date          = DECODE (l_planning_start_date_tbl(i), l_g_miss_date,null,nvl(l_planning_start_date_tbl(i),planning_start_date))
6889                     ,planning_end_date            = DECODE (l_planning_end_date_tbl(i), l_g_miss_date,null,nvl(l_planning_end_date_tbl(i),planning_end_date))
6890                     ,schedule_start_date          = DECODE (l_schedule_start_date_tbl(i), l_g_miss_date,null,nvl(l_schedule_start_date_tbl(i),schedule_start_date))
6891                     ,schedule_end_date            = DECODE (l_schedule_end_date_tbl(i), l_g_miss_date,null,nvl(l_schedule_end_date_tbl(i),schedule_end_date))
6892                     ,spread_curve_id              = DECODE (l_spread_curve_id_tbl(i), l_g_miss_num,null,nvl(l_spread_curve_id_tbl(i),spread_curve_id ))
6893                     ,etc_method_code              = DECODE (l_etc_method_code_tbl(i), l_g_miss_char,null,nvl(l_etc_method_code_tbl(i),etc_method_code))
6894                     ,res_type_code                = DECODE (l_res_type_code_tbl(i), l_g_miss_char,null,nvl(l_res_type_code_tbl(i),res_type_code))
6895                     ,attribute_category           = DECODE (l_attribute_category_tbl(i), l_g_miss_char,null,nvl(l_attribute_category_tbl(i),attribute_category))
6896                     ,attribute1                   = DECODE (l_attribute1_tbl(i), l_g_miss_char,null,nvl(l_attribute1_tbl(i),attribute1))
6897                     ,attribute2                   = DECODE (l_attribute2_tbl(i), l_g_miss_char,null,nvl(l_attribute2_tbl(i),attribute2))
6898                     ,attribute3                   = DECODE (l_attribute3_tbl(i), l_g_miss_char,null,nvl(l_attribute3_tbl(i),attribute3 ))
6899                     ,attribute4                   = DECODE (l_attribute4_tbl(i), l_g_miss_char,null,nvl(l_attribute4_tbl(i),attribute4))
6900                     ,attribute5                   = DECODE (l_attribute5_tbl(i), l_g_miss_char,null,nvl(l_attribute5_tbl(i),attribute5 ))
6901                     ,attribute6                   = DECODE (l_attribute6_tbl(i), l_g_miss_char,null,nvl(l_attribute6_tbl(i),attribute6 ))
6902                     ,attribute7                   = DECODE (l_attribute7_tbl(i), l_g_miss_char,null,nvl(l_attribute7_tbl(i),attribute7))
6903                     ,attribute8                   = DECODE (l_attribute8_tbl(i), l_g_miss_char,null,nvl(l_attribute8_tbl(i),attribute8))
6904                     ,attribute9                   = DECODE (l_attribute9_tbl(i), l_g_miss_char,null,nvl(l_attribute9_tbl(i),attribute9))
6905                     ,attribute10                  = DECODE (l_attribute10_tbl(i), l_g_miss_char,null, nvl(l_attribute10_tbl(i),attribute10))
6906                     ,attribute11                  = DECODE (l_attribute11_tbl(i), l_g_miss_char,null,nvl(l_attribute11_tbl(i),attribute11))
6907                     ,attribute12                  = DECODE (l_attribute12_tbl(i), l_g_miss_char,null,nvl(l_attribute12_tbl(i),attribute12))
6908                     ,attribute13                  = DECODE (l_attribute13_tbl(i), l_g_miss_char,null,nvl(l_attribute13_tbl(i),attribute13))
6909                     ,attribute14                  = DECODE (l_attribute14_tbl(i), l_g_miss_char,null,nvl(l_attribute14_tbl(i),attribute14))  -- for bug 6944671
6910                     ,attribute15                  = DECODE (l_attribute15_tbl(i), l_g_miss_char,null,nvl(l_attribute15_tbl(i),attribute15))
6911                     ,attribute16                  = DECODE (l_attribute16_tbl(i), l_g_miss_char,null,nvl(l_attribute16_tbl(i),attribute16))
6912                     ,attribute17                  = DECODE (l_attribute17_tbl(i), l_g_miss_char,null,nvl(l_attribute17_tbl(i),attribute17))
6913                     ,attribute18                  = DECODE (l_attribute18_tbl(i), l_g_miss_char,null,nvl(l_attribute18_tbl(i),attribute18))
6914                     ,attribute19                  = DECODE (l_attribute19_tbl(i), l_g_miss_char,null,nvl(l_attribute19_tbl(i),attribute19))
6915                     ,attribute20                  = DECODE (l_attribute20_tbl(i), l_g_miss_char,null,nvl(l_attribute20_tbl(i),attribute20))
6916                     ,attribute21                  = DECODE (l_attribute21_tbl(i), l_g_miss_char,null,nvl(l_attribute21_tbl(i),attribute21))
6917                     ,attribute22                  = DECODE (l_attribute22_tbl(i), l_g_miss_char,null,nvl(l_attribute22_tbl(i),attribute22))
6918                     ,attribute23                  = DECODE (l_attribute23_tbl(i), l_g_miss_char,null,nvl(l_attribute23_tbl(i),attribute23))
6919                     ,attribute24                  = DECODE (l_attribute24_tbl(i), l_g_miss_char,null,nvl(l_attribute24_tbl(i),attribute24))
6920                     ,attribute25                  = DECODE (l_attribute25_tbl(i), l_g_miss_char,null,nvl(l_attribute25_tbl(i),attribute25))
6921                     ,attribute26                  = DECODE (l_attribute26_tbl(i), l_g_miss_char,null,nvl(l_attribute26_tbl(i),attribute26))
6922                     ,attribute27                  = DECODE (l_attribute27_tbl(i), l_g_miss_char,null,nvl(l_attribute27_tbl(i),attribute27))
6923                     ,attribute28                  = DECODE (l_attribute28_tbl(i), l_g_miss_char,null,nvl(l_attribute28_tbl(i),attribute28))
6924                     ,attribute29                  = DECODE (l_attribute29_tbl(i), l_g_miss_char,null,nvl(l_attribute29_tbl(i),attribute29))
6925                     ,attribute30                  = DECODE (l_attribute30_tbl(i), l_g_miss_char,null,nvl(l_attribute30_tbl(i),attribute30))
6926                     ,fc_res_type_code             = DECODE (l_fc_res_type_code_tbl(i), l_g_miss_char,null,nvl(l_fc_res_type_code_tbl(i),fc_res_type_code))
6927                     ,resource_class_code          = DECODE (l_resource_class_code_tbl(i), l_g_miss_char,null,nvl(l_resource_class_code_tbl(i),resource_class_code))
6928                     ,organization_id              = DECODE (l_organization_id_tbl(i), l_g_miss_num,null,nvl(l_organization_id_tbl(i),organization_id))
6929                     ,job_id                       = DECODE (l_job_id_tbl(i), l_g_miss_num,null,nvl(l_job_id_tbl(i),job_id))
6930                     ,person_id                    = DECODE (l_person_id_tbl(i), l_g_miss_num,null,nvl(l_person_id_tbl(i),person_id))
6931                     ,expenditure_type             = DECODE (l_expenditure_type_tbl(i), l_g_miss_char,null,nvl(l_expenditure_type_tbl(i),expenditure_type))
6932                     ,expenditure_category         = DECODE (l_expenditure_category_tbl(i), l_g_miss_char,null,nvl(l_expenditure_category_tbl(i),expenditure_category))
6933                     ,revenue_category_code        = DECODE (l_revenue_category_code_tbl(i), l_g_miss_char,null,nvl(l_revenue_category_code_tbl(i),revenue_category_code))
6934                     ,event_type                   = DECODE (l_event_type_tbl(i), l_g_miss_char,null,nvl(l_event_type_tbl(i),event_type))
6935                     ,supplier_id                  = DECODE (l_supplier_id_tbl(i), l_g_miss_num,null,nvl(l_supplier_id_tbl(i),supplier_id))
6936                     ,non_labor_resource           = DECODE (l_non_labor_resource_tbl(i), l_g_miss_char,null,nvl(l_non_labor_resource_tbl(i),non_labor_resource))
6937                     ,bom_resource_id              = DECODE (l_bom_resource_id_tbl(i), l_g_miss_num,null,nvl(l_bom_resource_id_tbl(i),bom_resource_id))
6938                     ,inventory_item_id            = DECODE (l_inventory_item_id_tbl(i), l_g_miss_num,null,nvl(l_inventory_item_id_tbl(i),inventory_item_id))
6939                     ,item_category_id             = DECODE (l_item_category_id_tbl(i), l_g_miss_num,null,nvl(l_item_category_id_tbl(i),item_category_id))
6940                     ,record_version_number        = nvl(record_version_number,0)+1
6941                     ,billable_percent             = DECODE (l_billable_percent_tbl(i), l_g_miss_num,null,nvl(l_billable_percent_tbl(i),billable_percent))
6942                     ,mfc_cost_type_id             = DECODE (l_mfc_cost_type_id_tbl(i), l_g_miss_num,null,nvl(l_mfc_cost_type_id_tbl(i),mfc_cost_type_id ))
6943                     ,procure_resource_flag        = DECODE (l_procure_resource_flag_tbl(i), l_g_miss_char,null,nvl(l_procure_resource_flag_tbl(i),procure_resource_flag))
6944                     ,assignment_description       = DECODE (l_assignment_description_tbl(i), l_g_miss_char,null,nvl(l_assignment_description_tbl(i),assignment_description))
6945                     ,incurred_by_res_flag         = DECODE (l_incurred_by_res_flag_tbl(i), l_g_miss_char,null,nvl(l_incurred_by_res_flag_tbl(i),incurred_by_res_flag))
6946                     ,sp_fixed_date                = DECODE (l_sp_fixed_date_tbl(i), l_g_miss_date,null,nvl(l_sp_fixed_date_tbl(i),sp_fixed_date))
6947                     ,person_type_code             = DECODE (l_person_type_code_tbl(i), l_g_miss_char,null,nvl(l_person_type_code_tbl(i),person_type_code))
6948                     ,use_task_schedule_flag       = DECODE (l_use_task_schedule_flag_tbl(i), l_g_miss_char,null,nvl(l_use_task_schedule_flag_tbl(i),use_task_schedule_flag))
6949                     ,incur_by_res_class_code      = DECODE (l_Incur_by_res_class_code_tbl(i), l_g_miss_char,null,nvl(l_Incur_by_res_class_code_tbl(i),incur_by_res_class_code ))
6950                     ,incur_by_role_id             = DECODE (l_Incur_by_role_id_tbl(i), l_g_miss_num,null,nvl(l_Incur_by_role_id_tbl(i),incur_by_role_id))
6951                     ,project_role_id              = DECODE (l_project_role_id_tbl(i), l_g_miss_num,null,nvl(l_project_role_id_tbl(i),project_role_id))
6952                     ,resource_class_flag          = DECODE (l_resource_class_flag_tbl(i), l_g_miss_char,null,nvl(l_resource_class_flag_tbl(i),resource_class_flag ))
6953                     ,named_role                   = DECODE (l_named_role_tbl(i), l_g_miss_char,null,nvl(l_named_role_tbl(i),named_role ))
6954                     ,rbs_element_id               = l_rbs_element_id_tbl(i)
6955                     ,txn_accum_header_id          = l_txn_accum_header_id_tbl(i)
6956                     ,rate_expenditure_org_id      = DECODE (p_context
6957                                                            ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
6958                                                            ,DECODE(l_rate_exp_org_id_tbl(i)
6959                                                                   ,l_g_miss_num
6960                                                                   ,null
6961                                                                   ,nvl(l_rate_exp_org_id_tbl(i),rate_expenditure_org_id))
6962                                                            ,rate_expenditure_org_id)
6963                     ,rate_expenditure_type        = DECODE (p_context
6964                                                            ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
6965                                                            ,DECODE(l_rate_exp_type_tbl(i)
6966                                                                   ,l_g_miss_char
6967                                                                   ,null
6968                                                                   ,nvl(l_rate_exp_type_tbl(i),rate_expenditure_type))
6969                                                            ,rate_expenditure_type)
6970                     ,rate_exp_func_curr_code      = DECODE (p_context
6971                                                            ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
6972                                                            ,DECODE(l_rate_func_curr_code_tbl(i)
6973                                                                   ,l_g_miss_char
6974                                                                   ,null
6975                                                                   ,nvl(l_rate_func_curr_code_tbl(i),rate_exp_func_curr_code))
6976                                                            ,rate_exp_func_curr_code)
6977                     ,rate_based_flag              = DECODE (p_context  /* Bug 3678814 */
6978                                                            ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
6979                                                            ,DECODE(l_rate_based_flag_tbl(i),
6980                                                                    l_g_miss_char,'N',
6981                                                                    nvl(l_rate_based_flag_tbl(i),rate_based_flag))
6982                                                            ,rate_based_flag)
6983 		    /* Bug fix:5759413 */
6984 		    ,resource_rate_based_flag     = DECODE (p_context,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
6985 							,DECODE(nvl(l_rlm_id_change_flag_tbl(i),'N'), 'N'
6986 							  ,resource_rate_based_flag
6987 							  ,DECODE(l_rate_based_flag_tbl(i),
6988                                                                    l_g_miss_char,'N',
6989                                                                    nvl(l_rate_based_flag_tbl(i),resource_rate_based_flag)))
6990 							 ,resource_rate_based_flag)
6991                     ,scheduled_delay              = DECODE (p_context  /* Bug 3678814 */
6992                                                            ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
6993                                                            ,DECODE(l_scheduled_delay(i),
6994                                                                    l_g_miss_num,null,
6995                                                                    nvl(l_scheduled_delay(i),scheduled_delay))
6996                                                            ,scheduled_delay)
6997                     WHERE  resource_assignment_id= l_resource_assignment_id_tbl(i);
6998        /*-------------------------------------------------------------------------------
6999          The following block of code to call the api PA_FP_CALC_PLAN_PKG.calculate
7000          is commented as it has to be modified
7001          Calling the api PA_FP_CALC_PLAN_PKG.calculate*/
7002 
7003        /* Start of coding done for Bug 5684639:
7004           If the user has selected not to distribute the amounts, then
7005           pass the l_plan_end_date_old_tbl as l_plan_end_date_new_tbl AND
7006           l_plan_start_date_old_tbl as l_plan_start_date_new_tbl so that there is
7007           no distribution of amounts as the old and the new dates are the same.
7008        */
7009           IF l_debug_mode = 'Y'  THEN
7010              pa_debug.g_err_stage:='p_distrib_amts - '||p_distrib_amts;
7011              pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7012           END IF;
7013           IF (nvl(p_distrib_amts,'Y') = 'N') THEN
7014              l_plan_start_date_old_tbl := l_plan_start_date_new_tbl ;
7015              l_plan_end_date_old_tbl := l_plan_end_date_new_tbl ;
7016           END IF;
7017 
7018         /* End of coding done for Bug 5684639.*/
7019 
7020        IF l_debug_mode = 'Y'  THEN
7021             pa_debug.g_err_stage:='Calling API PA_FP_CALC_PLAN_PKG.calculate';
7022             print_msg(pa_debug.g_err_stage,l_module_name);
7023             pa_debug.g_err_stage:='Parameters to PA_FP_CALC_PLAN_PKG.calculate';
7024             print_msg(pa_debug.g_err_stage,l_module_name);
7025 
7026             IF l_resource_assignment_id_tbl.COUNT>0 THEN
7027 
7028                 FOR i in l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST LOOP
7029 
7030                     pa_debug.g_err_stage:='l_resource_assignment_id_tbl('||i||') is '||l_resource_assignment_id_tbl(i);
7031                     print_msg(pa_debug.g_err_stage,l_module_name);
7032                     --dbms_output.put_line( pa_debug.g_err_stage);
7033 
7034                     pa_debug.g_err_stage:='l_currency_code_tbl('||i||') is '||l_currency_code_tbl(i);
7035                     print_msg(pa_debug.g_err_stage,l_module_name);
7036                     --dbms_output.put_line( pa_debug.g_err_stage);
7037 
7038                     IF p_currency_code_tbl.EXISTS(i) THEN
7039                         pa_debug.g_err_stage:='p_currency_code_tbl('||i||') is '||p_currency_code_tbl(i);
7040                         print_msg(pa_debug.g_err_stage,l_module_name);
7041                     ELSE
7042                         pa_debug.g_err_stage:='p_currency_code_tbl('||i||') does not exist ';
7043                         print_msg(pa_debug.g_err_stage,l_module_name);
7044                     END IF;
7045                     --dbms_output.put_line( pa_debug.g_err_stage);
7046 
7047                     pa_debug.g_err_stage:='l_override_currency_code_tbl('||i||') is '||l_override_currency_code_tbl(i);
7048                     print_msg(pa_debug.g_err_stage,l_module_name);
7049                     --dbms_output.put_line( pa_debug.g_err_stage);
7050 
7051                     IF p_txn_currency_override_tbl.EXISTS(i) THEN
7052                         pa_debug.g_err_stage:='p_txn_currency_override_tbl('||i||') is '||p_txn_currency_override_tbl(i);
7053                         print_msg(pa_debug.g_err_stage,l_module_name);
7054                     ELSE
7055                         pa_debug.g_err_stage:='p_txn_currency_override_tbl('||i||') does not exist ';
7056                         print_msg(pa_debug.g_err_stage,l_module_name);
7057                     END IF;
7058                     --dbms_output.put_line( pa_debug.g_err_stage);
7059 
7060                     pa_debug.g_err_stage:='l_total_quantity_tbl('||i||') is '||l_total_quantity_tbl(i);
7061                     print_msg(pa_debug.g_err_stage,l_module_name);
7062                     --dbms_output.put_line( pa_debug.g_err_stage);
7063 
7064                     IF p_quantity_tbl.EXISTS(i) THEN
7065                         pa_debug.g_err_stage:='p_quantity_tbl('||i||') is '||p_quantity_tbl(i);
7066                         print_msg(pa_debug.g_err_stage,l_module_name);
7067                     ELSE
7068                         pa_debug.g_err_stage:='p_quantity_tbl('||i||') does not exist ';
7069                         print_msg(pa_debug.g_err_stage,l_module_name);
7070                     END IF;
7071                     --dbms_output.put_line( pa_debug.g_err_stage);
7072 
7073                     pa_debug.g_err_stage:='l_total_raw_cost_tbl('||i||') is '||l_total_raw_cost_tbl(i);
7074                     print_msg(pa_debug.g_err_stage,l_module_name);
7075                     --dbms_output.put_line( pa_debug.g_err_stage);
7076 
7077                     IF p_raw_cost_tbl.EXISTS(i) THEN
7078                         pa_debug.g_err_stage:='p_raw_cost_tbl('||i||') is '||p_raw_cost_tbl(i);
7079                         print_msg(pa_debug.g_err_stage,l_module_name);
7080                     ELSE
7081                         pa_debug.g_err_stage:='p_raw_cost_tbl('||i||') does not exist ';
7082                         print_msg(pa_debug.g_err_stage,l_module_name);
7083                     END IF;
7084                     --dbms_output.put_line( pa_debug.g_err_stage);
7085 
7086                     pa_debug.g_err_stage:='l_burdened_cost_tbl('||i||') is '||l_burdened_cost_tbl(i);
7087                     print_msg(pa_debug.g_err_stage,l_module_name);
7088                     --dbms_output.put_line( pa_debug.g_err_stage);
7089 
7090                     IF p_burdened_cost_tbl.EXISTS(i) THEN
7091                         pa_debug.g_err_stage:='p_burdened_cost_tbl('||i||') is '||p_burdened_cost_tbl(i);
7092                         print_msg(pa_debug.g_err_stage,l_module_name);
7093                     ELSE
7094                         pa_debug.g_err_stage:='p_burdened_cost_tbl('||i||') does not exist ';
7095                         print_msg(pa_debug.g_err_stage,l_module_name);
7096                     END IF;
7097                     --dbms_output.put_line( pa_debug.g_err_stage);
7098 
7099                     pa_debug.g_err_stage:='l_revenue_tbl('||i||') is '||l_revenue_tbl(i);
7100                     print_msg(pa_debug.g_err_stage,l_module_name);
7101                     --dbms_output.put_line( pa_debug.g_err_stage);
7102 
7103                     IF p_revenue_tbl.EXISTS(i) THEN
7104                         pa_debug.g_err_stage:='p_revenue_tbl('||i||') is '||p_revenue_tbl(i);
7105                         print_msg(pa_debug.g_err_stage,l_module_name);
7106                     ELSE
7107                         pa_debug.g_err_stage:='p_revenue_tbl('||i||') does not exist ';
7108                         print_msg(pa_debug.g_err_stage,l_module_name);
7109                     END IF;
7110                     --dbms_output.put_line( pa_debug.g_err_stage);
7111 
7112                     pa_debug.g_err_stage:='l_raw_cost_rate_tbl('||i||') is '||l_raw_cost_rate_tbl(i);
7113                     print_msg(pa_debug.g_err_stage,l_module_name);
7114                     --dbms_output.put_line( pa_debug.g_err_stage);
7115 
7116                     IF p_cost_rate_tbl.EXISTS(i) THEN
7117                         pa_debug.g_err_stage:='p_cost_rate_tbl('||i||') is '||p_cost_rate_tbl(i);
7118                         print_msg(pa_debug.g_err_stage,l_module_name);
7119                     ELSE
7120                         pa_debug.g_err_stage:='p_cost_rate_tbl('||i||') does not exist ';
7121                         print_msg(pa_debug.g_err_stage,l_module_name);
7122                     END IF;
7123                     --dbms_output.put_line( pa_debug.g_err_stage);
7124 
7125                     pa_debug.g_err_stage:='l_cost_rate_override_tbl('||i||') is '||l_cost_rate_override_tbl(i);
7126                     print_msg(pa_debug.g_err_stage,l_module_name);
7127                     --dbms_output.put_line( pa_debug.g_err_stage);
7128 
7129                     IF p_cost_rate_override_tbl.EXISTS(i) THEN
7130                         pa_debug.g_err_stage:='p_cost_rate_override_tbl('||i||') is '||p_cost_rate_override_tbl(i);
7131                         print_msg(pa_debug.g_err_stage,l_module_name);
7132                     ELSE
7133                         pa_debug.g_err_stage:='p_cost_rate_override_tbl('||i||') does not exist ';
7134                         print_msg(pa_debug.g_err_stage,l_module_name);
7135                     END IF;
7136                     --dbms_output.put_line( pa_debug.g_err_stage);
7137 
7138                     pa_debug.g_err_stage:='l_b_multiplier_tbl('||i||') is '||l_b_multiplier_tbl(i);
7139                     print_msg(pa_debug.g_err_stage,l_module_name);
7140                     --dbms_output.put_line( pa_debug.g_err_stage);
7141 
7142                     IF p_burdened_rate_tbl.EXISTS(i) THEN
7143                         pa_debug.g_err_stage:='p_burdened_rate_tbl('||i||') is '||p_burdened_rate_tbl(i);
7144                         print_msg(pa_debug.g_err_stage,l_module_name);
7145                     ELSE
7146                         pa_debug.g_err_stage:='p_burdened_rate_tbl('||i||') does not exist ';
7147                         print_msg(pa_debug.g_err_stage,l_module_name);
7148                     END IF;
7149                     --dbms_output.put_line( pa_debug.g_err_stage);
7150 
7151                     pa_debug.g_err_stage:='l_burdened_rate_override_tbl('||i||') is '||l_burdened_rate_override_tbl(i);
7152                     print_msg(pa_debug.g_err_stage,l_module_name);
7153                     --dbms_output.put_line( pa_debug.g_err_stage);
7154 
7155                     IF p_burdened_rate_override_tbl.EXISTS(i) THEN
7156                         pa_debug.g_err_stage:='p_burdened_rate_override_tbl('||i||') is '||p_burdened_rate_override_tbl(i);
7157                         print_msg(pa_debug.g_err_stage,l_module_name);
7158                     ELSE
7159                         pa_debug.g_err_stage:='p_burdened_rate_override_tbl('||i||') does not exist ';
7160                         print_msg(pa_debug.g_err_stage,l_module_name);
7161                     END IF;
7162                     --dbms_output.put_line( pa_debug.g_err_stage);
7163 
7164                     pa_debug.g_err_stage:='l_bill_rate_tbl('||i||') is '||l_bill_rate_tbl(i);
7165                     print_msg(pa_debug.g_err_stage,l_module_name);
7166                     --dbms_output.put_line( pa_debug.g_err_stage);
7167 
7168                     IF p_bill_rate_tbl.EXISTS(i) THEN
7169                         pa_debug.g_err_stage:='p_bill_rate_tbl('||i||') is '||p_bill_rate_tbl(i);
7170                         print_msg(pa_debug.g_err_stage,l_module_name);
7171                     ELSE
7172                         pa_debug.g_err_stage:='p_bill_rate_tbl('||i||') does not exist ';
7173                         print_msg(pa_debug.g_err_stage,l_module_name);
7174                     END IF;
7175                     --dbms_output.put_line( pa_debug.g_err_stage);
7176 
7177                     pa_debug.g_err_stage:='l_bill_rate_override_tbl('||i||') is '||l_bill_rate_override_tbl(i);
7178                     print_msg(pa_debug.g_err_stage,l_module_name);
7179                     --dbms_output.put_line( pa_debug.g_err_stage);
7180 
7181                     IF p_bill_rate_override_tbl.EXISTS(i) THEN
7182                         pa_debug.g_err_stage:='p_bill_rate_override_tbl('||i||') is '||p_bill_rate_override_tbl(i);
7183                         print_msg(pa_debug.g_err_stage,l_module_name);
7184                     ELSE
7185                         pa_debug.g_err_stage:='p_bill_rate_override_tbl('||i||') does not exist ';
7186                         print_msg(pa_debug.g_err_stage,l_module_name);
7187                     END IF;
7188                     --dbms_output.put_line( pa_debug.g_err_stage);
7189 
7190                     pa_debug.g_err_stage:='l_rlm_id_change_flag_tbl('||i||') is '||l_rlm_id_change_flag_tbl(i);
7191                     print_msg(pa_debug.g_err_stage,l_module_name);
7192                     --dbms_output.put_line( pa_debug.g_err_stage);
7193                     pa_debug.g_err_stage:='l_mfc_cost_type_id_old_tbl('||i||') is '||l_mfc_cost_type_id_old_tbl(i);
7194                     print_msg(pa_debug.g_err_stage,l_module_name);
7195                     --dbms_output.put_line( pa_debug.g_err_stage);
7196                     pa_debug.g_err_stage:='l_mfc_cost_type_id_new_tbl('||i||') is '||l_mfc_cost_type_id_new_tbl(i);
7197                     print_msg(pa_debug.g_err_stage,l_module_name);
7198                     --dbms_output.put_line( pa_debug.g_err_stage);
7199                     pa_debug.g_err_stage:='l_spread_curve_id_old_tbl('||i||') is '||l_spread_curve_id_old_tbl(i);
7200                     print_msg(pa_debug.g_err_stage,l_module_name);
7201                     --dbms_output.put_line( pa_debug.g_err_stage);
7202                     pa_debug.g_err_stage:='l_spread_curve_id_new_tbl('||i||') is '||l_spread_curve_id_new_tbl(i);
7203                     print_msg(pa_debug.g_err_stage,l_module_name);
7204                     --dbms_output.put_line( pa_debug.g_err_stage);
7205                     pa_debug.g_err_stage:='l_sp_fixed_date_old_tbl('||i||') is '||l_sp_fixed_date_old_tbl(i);
7206                     print_msg(pa_debug.g_err_stage,l_module_name);
7207                     --dbms_output.put_line( pa_debug.g_err_stage);
7208                     if l_sp_fixed_date_new_tbl(i) = fnd_api.g_miss_date then
7209                         pa_debug.g_err_stage:='l_sp_fixed_date_new_tbl('||i||') is g miss date';
7210                     else
7211                         pa_debug.g_err_stage:='l_sp_fixed_date_new_tbl('||i||') is '||l_sp_fixed_date_new_tbl(i);
7212                     end if;
7213                     print_msg(pa_debug.g_err_stage,l_module_name);
7214                     --dbms_output.put_line( pa_debug.g_err_stage);
7215                     pa_debug.g_err_stage:='l_plan_start_date_old_tbl('||i||') is '||l_plan_start_date_old_tbl(i);
7216                     print_msg(pa_debug.g_err_stage,l_module_name);
7217                     --dbms_output.put_line( pa_debug.g_err_stage);
7218                     if l_plan_start_date_new_tbl(i) = fnd_api.g_miss_date then
7219                         pa_debug.g_err_stage:='l_plan_start_date_new_tbl('||i||') is g miss date';
7220                     else
7221                         pa_debug.g_err_stage:='l_plan_start_date_new_tbl('||i||') is '||l_plan_start_date_new_tbl(i);
7222                     end if;
7223                     print_msg(pa_debug.g_err_stage,l_module_name);
7224                     --dbms_output.put_line( pa_debug.g_err_stage);
7225                     pa_debug.g_err_stage:='l_plan_end_date_old_tbl('||i||') is '||l_plan_end_date_old_tbl(i);
7226                     print_msg(pa_debug.g_err_stage,l_module_name);
7227                     --dbms_output.put_line( pa_debug.g_err_stage);
7228                     if l_plan_end_date_new_tbl(i) = fnd_api.g_miss_date then
7229                         pa_debug.g_err_stage:='l_plan_end_date_new_tbl('||i||') is g miss date';
7230                     else
7231                         pa_debug.g_err_stage:='l_plan_end_date_new_tbl('||i||') is '||l_plan_end_date_new_tbl(i);
7232                     end if;
7233                     print_msg(pa_debug.g_err_stage,l_module_name);
7234                     --dbms_output.put_line( pa_debug.g_err_stage);
7235 
7236                 END LOOP;
7237             END IF;
7238        END IF;
7239 
7240 --dbms_output.put_line('l_resource_assignment_id_tbl(1) is '||l_resource_assignment_id_tbl(1));
7241 --dbms_output.put_line('l_currency_code_tbl(1) is '||l_currency_code_tbl(1));
7242 --dbms_output.put_line('l_override_currency_code_tbl(1) is '||l_override_currency_code_tbl(1));
7243 --dbms_output.put_line('l_total_quantity_tbl(1) is '||l_total_quantity_tbl(1));
7244 --dbms_output.put_line('l_total_raw_cost_tbl(1) is '||l_total_raw_cost_tbl(1));
7245 --dbms_output.put_line('l_burdened_cost_tbl(1) is '||l_burdened_cost_tbl(1));
7246 --dbms_output.put_line('l_revenue_tbl(1) is '||l_revenue_tbl(1));
7247 --dbms_output.put_line('l_raw_cost_rate_tbl(1) is '||l_raw_cost_rate_tbl(1));
7248 --dbms_output.put_line('l_cost_rate_override_tbl(1) is '||l_cost_rate_override_tbl(1));
7249 --dbms_output.put_line('l_b_multiplier_tbl cnt is '||l_b_multiplier_tbl.count);
7250 --dbms_output.put_line('l_b_multiplier_tbl(1) is '||l_b_multiplier_tbl(1));
7251 --dbms_output.put_line('l_burdened_rate_override_tbl cnt is '||l_burdened_rate_override_tbl.count);
7252 --dbms_output.put_line('l_burdened_rate_override_tbl(1) is '||l_burdened_rate_override_tbl(1));
7253 --dbms_output.put_line('l_bill_rate_tbl(1) is '||l_bill_rate_tbl(1));
7254 --dbms_output.put_line('l_bill_rate_override_tbl(1) is '||l_bill_rate_override_tbl(1));
7255 
7256 --dbms_output.put_line('quantity passed to calc is'||l_total_quantity_tbl(1));
7257 --dbms_output.put_line('Calling calc api');
7258         PA_FP_CALC_PLAN_PKG.calculate(
7259           p_project_id                 =>   l_project_id
7260          ,p_budget_version_id          =>   l_budget_version_id
7261          --,p_refresh_rates_flag         =>   'N' --need to pass any variables that are passed from calling API
7262          --,p_refresh_conv_rates_flag    =>   'N' --need to pass any variables that are passed from calling API
7263          --,p_spread_required_flag       =>   'N'
7264          --,p_conv_rates_required_flag   =>   'N'
7265          ,p_source_context             =>   PA_FP_CONSTANTS_PKG.G_CALC_API_RESOURCE_CONTEXT
7266          ,p_resource_assignment_tab    =>   l_resource_assignment_id_tbl
7267          ,p_txn_currency_code_tab      =>   l_currency_code_tbl
7268          ,p_txn_currency_override_tab  =>   l_override_currency_code_tbl
7269          ,p_total_qty_tab              =>   l_total_quantity_tbl
7270          ,p_total_raw_cost_tab         =>   l_total_raw_cost_tbl
7271          ,p_total_burdened_cost_tab    =>   l_burdened_cost_tbl
7272          ,p_total_revenue_tab          =>   l_revenue_tbl
7273          ,p_raw_cost_rate_tab          =>   l_raw_cost_rate_tbl
7274          ,p_rw_cost_rate_override_tab  =>   l_cost_rate_override_tbl
7275          ,p_b_cost_rate_tab            =>   l_b_multiplier_tbl
7276          ,p_b_cost_rate_override_tab   =>   l_burdened_rate_override_tbl
7277          ,p_bill_rate_tab              =>   l_bill_rate_tbl
7278          ,p_bill_rate_override_tab     =>   l_bill_rate_override_tbl
7279          ,p_line_start_date_tab        =>   SYSTEM.PA_DATE_TBL_TYPE()
7280          ,p_line_end_date_tab          =>   SYSTEM.PA_DATE_TBL_TYPE()
7281          ,p_apply_progress_flag        =>   p_apply_progress_flag /* Passed by apply_progress api (sakthi's team) */
7282          --Added for Bug 4152749
7283          ,p_mfc_cost_type_id_old_tab   =>   l_mfc_cost_type_id_old_tbl
7284          ,p_mfc_cost_type_id_new_tab   =>   l_mfc_cost_type_id_new_tbl
7285          ,p_spread_curve_id_old_tab    =>   l_spread_curve_id_old_tbl
7286          ,p_spread_curve_id_new_tab    =>   l_spread_curve_id_new_tbl
7287          ,p_sp_fixed_date_old_tab      =>   l_sp_fixed_date_old_tbl
7288          ,p_sp_fixed_date_new_tab      =>   l_sp_fixed_date_new_tbl
7289          ,p_plan_start_date_old_tab    =>   l_plan_start_date_old_tbl
7290          ,p_plan_start_date_new_tab    =>   l_plan_start_date_new_tbl
7291          ,p_plan_end_date_old_tab      =>   l_plan_end_date_old_tbl
7292          ,p_plan_end_date_new_tab      =>   l_plan_end_date_new_tbl
7293          ,p_rlm_id_change_flag_tab     =>   l_rlm_id_change_flag_tbl
7294          ,p_rollup_required_flag       =>   l_pji_rollup_required   --Bug 4200168
7295          --End of parameters for Bug 4152749
7296          ,x_return_status              =>   x_return_status
7297          ,x_msg_count                  =>   x_msg_count
7298          ,x_msg_data                   =>   x_msg_data);
7299 
7300        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7301 
7302              IF l_debug_mode = 'Y' THEN
7303                    pa_debug.g_err_stage:='Called API PA_FP_CALC_PLAN_PKG.calculate returned error';
7304                    pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7305              END IF;
7306              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7307        END IF;
7308 
7309     -- IPM changes - rollup amounts in new entity
7310 
7311     -- Call the UTIL API to get the financial plan info l_fp_cols_rec
7312 
7313     pa_fp_gen_amount_utils.get_plan_version_dtls
7314         (p_project_id         => l_project_id,
7315          p_budget_version_id  => l_budget_version_id,
7316          x_fp_cols_rec        => l_fp_cols_rec,
7317          x_return_status      => x_return_status,
7318          x_msg_count          => x_msg_count,
7319          x_msg_data           => x_msg_data);
7320 
7321     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7322 
7323        IF l_debug_mode = 'Y' THEN
7324           pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
7325           pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7326        END IF;
7327        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7328     END IF;
7329 
7330     -- IPM changes - populate tmp table to use for update later
7331     /*
7332     IF l_resource_assignment_id_tbl.COUNT > 0 THEN
7333        FORALL i IN l_resource_assignment_id_tbl.first ..
7334                    l_resource_assignment_id_tbl.last
7335           INSERT INTO pa_resource_asgn_curr_tmp
7336              (RA_TXN_ID
7337              ,RESOURCE_ASSIGNMENT_ID
7338              ,TXN_CURRENCY_CODE
7339              ,DELETE_FLAG
7340              )
7341           SELECT pa_resource_asgn_curr_s.nextval
7342                 ,l_resource_assignment_id_tbl(i)
7343                 ,l_currency_code_tbl(i)
7344                 ,NULL
7345             FROM DUAL;
7346     END IF;
7347 
7348     pa_res_asg_currency_pub.maintain_data(
7349          p_fp_cols_rec                  => l_fp_cols_rec,
7350          p_calling_module               => 'UPDATE_PLAN_TRANSACTION',
7351          p_delete_flag                  => 'N',
7352          p_copy_flag                    => 'N',
7353          p_src_version_id               => NULL,
7354          p_copy_mode                    => NULL,
7355          p_rollup_flag                  => 'Y',
7356          p_version_level_flag           => 'N',
7357          p_called_mode                  => 'SELF_SERVICE',
7358          x_return_status                => x_return_status,
7359          x_msg_count                    => x_msg_count,
7360          x_msg_data                     => x_msg_data
7361          );
7362 
7363        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7364 
7365              IF l_debug_mode = 'Y' THEN
7366                    pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
7367                    pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7368              END IF;
7369              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7370        END IF;
7371 	*/
7372 
7373 -- Added for bug 4492493
7374 
7375         IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
7376            AND PA_TASK_ASSIGNMENT_UTILS.Is_Progress_Rollup_Required(l_project_id) = 'Y') OR
7377            (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
7378             AND pa_task_assignment_utils.g_require_progress_rollup = 'Y') THEN
7379 
7380              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
7381                 ( p_calling_context       =>   'ASGMT_PLAN_CHANGE'
7382                  ,p_project_id            =>   l_project_id
7383                  ,p_structure_version_id   =>  p_struct_elem_version_id
7384                  ,p_pub_struc_ver_id      =>   p_struct_elem_version_id
7385                  ,x_return_status         =>   x_return_status
7386                  ,x_msg_count             =>   x_msg_count
7387                  ,x_msg_data              =>   x_msg_data);
7388 
7389              pa_task_assignment_utils.g_require_progress_rollup := 'N';
7390         END IF;
7391 
7392 
7393         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7394             IF l_debug_mode = 'Y' THEN
7395                 pa_debug.g_err_stage:='Called API PA_PROJ_TASK_STRUC_PUB.process_wbs_updates_wrp';
7396                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.update_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
7397             END IF;
7398 
7399             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7400         END IF;
7401 --End bug 4492493
7402 
7403        IF l_debug_mode = 'Y' THEN
7404              pa_debug.reset_curr_function;
7405        END IF;
7406 
7407 EXCEPTION
7408      WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
7409            IF l_debug_mode = 'Y' THEN
7410                   pa_debug.g_err_stage:='In invalid args exception';
7411                    pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7412            END IF;
7413 
7414            l_msg_count := FND_MSG_PUB.count_msg;
7415              IF l_msg_count = 1 THEN
7416 
7417                  IF l_debug_mode = 'Y' THEN
7418                       pa_debug.g_err_stage:='In invalid args exception 1';
7419                       pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7420                  END IF;
7421 
7422                 PA_INTERFACE_UTILS_PUB.get_messages
7423                      ( p_encoded        => FND_API.G_TRUE
7424                       ,p_msg_index      => 1
7425                       ,p_msg_count      => l_msg_count
7426                       ,p_msg_data       => l_msg_data
7427                       ,p_data           => l_data
7428                       ,p_msg_index_out  => l_msg_index_out);
7429                 x_msg_data  := l_data;
7430                 x_msg_count := l_msg_count;
7431              ELSE
7432                  IF l_debug_mode = 'Y' THEN
7433                       pa_debug.g_err_stage:='In invalid args exception 2';
7434                       pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7435                  END IF;
7436 
7437                 x_msg_count := l_msg_count;
7438 
7439              END IF;
7440            ROLLBACK TO Update_Planning_Transactions;
7441            x_return_status := FND_API.G_RET_STS_ERROR;
7442            IF l_debug_mode = 'Y' THEN
7443                pa_debug.g_err_stage:='In invalid args exception 3';
7444                pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7445                pa_debug.reset_curr_function;
7446            END IF;
7447            IF l_debug_mode = 'Y' THEN
7448                   pa_debug.g_err_stage:='In invalid args exception 4    ';
7449                   pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7450            END IF;
7451 
7452 
7453      WHEN OTHERS THEN
7454           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7455           x_msg_count     := 1;
7456           x_msg_data      := SQLERRM;
7457           FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'PA_FP_PLANNING_TRANSACTION_PUB'
7458                                   ,p_procedure_name  => 'Update_Planning_Transactions');
7459 
7460           IF l_debug_mode = 'Y' THEN
7461                pa_debug.g_err_stage:='Unexpected Error' || SQLERRM;
7462                pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7463                pa_debug.reset_curr_function;
7464           END IF;
7465           ROLLBACK TO Update_Planning_Transactions;
7466 
7467           RAISE;
7468 END Update_Planning_Transactions;
7469 
7470 
7471 /*This procedure should be called to copy planning transactions
7472   valid values for p_context are  'WORKPLAN' and 'TASK_ASSIGNMENT'
7473   valid values for p_copy_amt_qty are 'Y' and 'N'
7474 
7475   The parameters
7476       p_copy_people_flag
7477       p_copy_equip_flag
7478       p_copy_mat_item_flag
7479       p_copy_fin_elem_flag
7480   will be used only when the p_context is TASK_ASSIGNMENT.
7481   Irrespective of the context in which the API is called,
7482   the p_src_targ_version_id_tbl should never be empty.
7483   The other parameters can be derived based on the values
7484   in p_src_targ_version_id_tbl table.
7485 
7486   Bug 3615617 Copy External Tasks development changes
7487       validate_copy_assignment api returns target rlm id for target
7488       resource assignment id as part of the output record table. This
7489       should be passed to create_res_task_maps api as input.
7490 */
7491 PROCEDURE copy_planning_transactions
7492 (
7493        p_context                   IN   VARCHAR2
7494       ,p_copy_external_flag        IN   VARCHAR2
7495       ,p_src_project_id            IN   pa_projects_all.project_id%TYPE
7496       ,p_target_project_id         IN   pa_projects_all.project_id%TYPE
7497       ,p_src_budget_version_id     IN   pa_budget_versions.budget_version_id%TYPE DEFAULT NULL
7498       ,p_targ_budget_version_id    IN   pa_budget_versions.budget_version_id%TYPE DEFAULT NULL
7499       ,p_src_version_id_tbl        IN   SYSTEM.PA_NUM_TBL_TYPE
7500       ,p_targ_version_id_tbl       IN   SYSTEM.PA_NUM_TBL_TYPE
7501       ,p_copy_people_flag          IN   VARCHAR2                        := NULL
7502       ,p_copy_equip_flag           IN   VARCHAR2                        := NULL
7503       ,p_copy_mat_item_flag        IN   VARCHAR2                        := NULL
7504       ,p_copy_fin_elem_flag        IN   VARCHAR2                        := NULL
7505 --     Added this field p_pji_rollup_required for the 4200168
7506       ,p_pji_rollup_required      IN   VARCHAR2                     DEFAULT 'Y'
7507       ,x_return_status             OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7508       ,x_msg_count                 OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
7509       ,x_msg_data                  OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7510 
7511 ) IS
7512     --Start of variables used for debugging
7513     l_return_status                            VARCHAR2(1);
7514     l_msg_count                                NUMBER := 0;
7515     l_msg_data                                 VARCHAR2(2000);
7516     l_data                                     VARCHAR2(2000);
7517     l_msg_index_out                            NUMBER;
7518     l_debug_mode                               VARCHAR2(30);
7519     l_debug_level3                    CONSTANT NUMBER :=3;
7520     l_debug_level5                    CONSTANT NUMBER :=5;
7521     --End of variables used for debugging
7522     l_adj_percent                              NUMBER;
7523     i                                          NUMBER;
7524     j                                          NUMBER;
7525     l_row_count                                NUMBER;
7526     l_src_budget_version_id                    pa_budget_versions.budget_version_id%TYPE;
7527     l_targ_budget_version_id                   pa_budget_versions.budget_version_id%TYPE;
7528     l_ra_id_tbl                                SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
7529     l_project_assignment_id_tbl                SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
7530     l_temp_ra_id_tbl                           SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
7531     l_calc_ra_id_tbl                           SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
7532     l_temp_proj_assmt_id_tbl                   SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
7533     l_temp_planning_start_date_tbl             SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
7534     l_temp_planning_end_date_tbl               SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE() ;
7535     l_quantity_tbl                             SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
7536     l_currency_code_tbl                        SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
7537     l_module_name                              VARCHAR2(100):='pa.fp_planning_txn_pub.copy_planning_transactions';
7538     l_resource_rec_tbl                         PA_TASK_ASSIGNMENT_UTILS.l_resource_rec_tbl_type;
7539     l_planning_start_date_tbl                  SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
7540     l_planning_end_date_tbl                    SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
7541     l_schedule_start_date_tbl                  SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
7542     l_schedule_end_date_tbl                    SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
7543     l_calculate_flag                           VARCHAR2(1);
7544     l_projfunc_currency_code                   pa_projects_all.project_currency_code%TYPE;
7545     l_proj_curr_code                           pa_projects_all.projfunc_currency_code%TYPE;
7546     l_spread_amt_flag_tbl                      SYSTEM.PA_VARCHAR2_1_TBL_TYPE:= SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
7547 
7548     -- Declared for Bug  3615617
7549     l_resource_list_member_id_tbl              SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
7550 
7551     l_tot_rc_tbl                               SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
7552     l_pji_rollup_required                     VARCHAR2(1);
7553 
7554     --Code addition   for bug#4200168 starts here.
7555     TYPE l_txn_curr_code_table IS TABLE OF PA_BUDGET_LINES.TXN_CURRENCY_CODE%type
7556     INDEX BY BINARY_INTEGER;
7557 
7558     l_txn_curr_code_tbl  l_txn_curr_code_table;
7559 
7560     l_proj_fp_options_id   pa_proj_fp_options.proj_fp_options_id%type;
7561     l_project_id           pa_proj_fp_options.project_id%type;
7562     l_fin_plan_type_id     pa_proj_fp_options.fin_plan_type_id%type;
7563     l_pc                   pa_projects_all.project_currency_code%type;
7564     l_pfc                  pa_projects_all.projfunc_currency_code%type;
7565     --Code addition   for bug#4200168 ends here.
7566 
7567     l_fp_cols_rec   pa_fp_gen_amount_utils.fp_cols; -- IPM
7568     l_resource_class_code        VARCHAR2(30);
7569     l_exp_type                   VARCHAR2(30);
7570     l_inv_item_id                NUMBER;
7571     l_res_rate_based_flag_tbl    SYSTEM.PA_VARCHAR2_1_TBL_TYPE:=SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
7572 
7573     CURSOR c_calc_api_param_csr
7574     IS
7575     SELECT pfrmt.source_res_assignment_id
7576           ,pfrmt.target_res_assignment_id
7577     FROM   pa_fp_ra_map_tmp pfrmt;
7578 
7579     c_calc_api_param_rec                        c_calc_api_param_csr%ROWTYPE;
7580 
7581     l_rbs_diff_flag                             VARCHAR2(1);
7582     --Bug 4097749
7583     l_named_role_tbl                            SYSTEM.pa_varchar2_80_tbl_type:=SYSTEM.pa_varchar2_80_tbl_type();
7584 
7585 BEGIN
7586     IF l_debug_mode = 'Y' THEN
7587         pa_debug.g_err_stage:='In copy planning txn';
7588         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
7589     END IF;
7590 --dbms_output.put_line('in copy plan txn1');
7591     x_msg_count := 0;
7592     x_return_status := FND_API.G_RET_STS_SUCCESS;
7593 
7594     SAVEPOINT copy_plan_txn;
7595 
7596 --Added this if for the bug 4200168
7597     IF p_pji_rollup_required = 'Y' THEN
7598         l_pji_rollup_required := 'Y';
7599     ELSE
7600         l_pji_rollup_required := 'N';
7601     END IF;
7602 
7603     pa_task_assignment_utils.g_require_progress_rollup := 'N';
7604 
7605 
7606     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
7607     l_debug_mode := NVL(l_debug_mode, 'Y');
7608 
7609     -- Set curr function
7610 IF l_debug_mode = 'Y' THEN
7611     pa_debug.set_curr_function(
7612                 p_function   =>'plan_txn_pub.copy_plan_txn'
7613                ,p_debug_mode => l_debug_mode );
7614 
7615         pa_debug.g_err_stage:='Validating input parameters';
7616         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
7617     END IF;
7618 
7619     IF p_src_version_id_tbl.count <> p_targ_version_id_tbl.count THEN
7620 
7621         IF l_debug_mode = 'Y' THEN
7622             pa_debug.g_err_stage:='No of elements in p_src_version_id_tbl is not same as p_targ_version_id_tbl';
7623             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7624         END IF;
7625 
7626         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7627                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
7628 
7629         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7630 
7631     END IF;
7632 
7633     --If the tables are empty then return
7634     IF p_src_version_id_tbl.count=0 THEN
7635 
7636         IF l_debug_mode = 'Y' THEN
7637 
7638             pa_debug.g_err_stage:='The input tables are empty' ;
7639             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7640         pa_debug.reset_curr_function;
7641 	END IF;
7642         RETURN;
7643 
7644     END IF;
7645 
7646     --Validate the input parameters
7647     IF p_context IS NULL OR
7648        p_src_project_id IS NULL OR
7649        p_target_project_id IS NULL THEN
7650 
7651         IF l_debug_mode = 'Y' THEN
7652             pa_debug.g_err_stage:='p_context is '||p_context;
7653             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7654         END IF;
7655 
7656         IF l_debug_mode = 'Y' THEN
7657             pa_debug.g_err_stage:='p_src_project_id is '||p_src_project_id;
7658             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7659         END IF;
7660 
7661         IF l_debug_mode = 'Y' THEN
7662             pa_debug.g_err_stage:='p_target_project_id is '||p_target_project_id;
7663             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7664         END IF;
7665 
7666         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7667                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
7668 
7669         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7670 
7671     END IF;
7672 
7673 
7674     --Initialise the variables the should be passed as parameters in other APIs
7675     IF p_src_project_id<>p_target_project_id THEN
7676         l_adj_percent := 0.9999;
7677         l_targ_budget_version_id:=l_src_budget_version_id;
7678     ELSE
7679         l_adj_percent := 0;
7680     END IF;
7681 
7682     --If context is WORKPLAN call the TA Validation API with the required parameters
7683     IF p_context=PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN OR
7684        p_context=PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK    THEN
7685 
7686         IF l_debug_mode = 'Y' THEN
7687             pa_debug.g_err_stage:='The calling context is workplan / task assignment p_src_version_id_tbl(1) '||p_src_version_id_tbl(1);
7688             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
7689         END IF;
7690 --dbms_output.put_line('in copy plan txn2');
7691         --Derive the plan version id for the source and target element version ids
7692         SELECT pbv.budget_version_id
7693         INTO   l_src_budget_version_id
7694         FROM   pa_struct_task_wbs_v pt,
7695                pa_budget_versions pbv
7696         WHERE  pbv.project_structure_version_id= pt.parent_structure_version_id
7697         AND    pt.element_version_id=p_src_version_id_tbl(1)
7698         AND    pbv.wp_version_flag='Y';
7699 
7700         IF l_debug_mode = 'Y' THEN
7701             pa_debug.g_err_stage:='The calling context is workplan / task assignment p_targ_version_id_tbl(1) '||p_targ_version_id_tbl(1);
7702             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
7703         END IF;
7704 
7705 
7706    --dbms_output.put_line('in copy plan txn2.5');
7707         SELECT pbv.budget_version_id
7708         INTO   l_targ_budget_version_id
7709         FROM   pa_budget_versions pbv
7710               ,pa_struct_task_wbs_v pt
7711         WHERE  pt.element_version_id=p_targ_version_id_tbl(1)
7712         AND    pbv.project_structure_version_id=pt.parent_structure_version_id
7713         AND    pbv.wp_version_flag='Y';
7714 
7715         --CALL THE TA VALIDATION API
7716         IF l_debug_mode = 'Y' THEN
7717             pa_debug.g_err_stage:='The calling context is workplan / task assignment';
7718             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
7719         END IF;
7720         --dbms_output.put_line('p_targ_version_id_tbl.count is '||p_targ_version_id_tbl.count);
7721 
7722         --This value will be used only when the x_calculate_flag of the below validate api is
7723         --returned as 'N'
7724         l_adj_percent := 0;
7725 
7726         --Added x_rbs_diff_flag for bug 3974569. This flag indicates that the the source/target resource assignments
7727         --being copied might not map to the same rbs_element_id. If this is passed as Y it means that
7728         ----> validate_copy_assignment has called RBS mapping API and
7729         ----> While copying the resource assignments rbs_element_id should be taken from pa_rbs_plans_out_tmp
7730          pa_task_assignment_utils.validate_copy_assignment
7731         (  p_copy_external_flag          => p_copy_external_flag --Included this parameter for bug 3841130
7732           ,p_src_project_id              => p_src_project_id
7733           ,p_target_project_id           => p_target_project_id
7734           ,p_src_elem_ver_id_tbl         => p_src_version_id_tbl
7735           ,p_targ_elem_ver_id_tbl        => p_targ_version_id_tbl
7736           ,p_copy_people_flag            => p_copy_people_flag
7737           ,p_copy_equip_flag             => p_copy_equip_flag
7738           ,p_copy_mat_item_flag          => p_copy_mat_item_flag
7739           ,p_copy_fin_elem_flag          => p_copy_fin_elem_flag
7740           ,x_resource_rec_tbl            => l_resource_rec_tbl
7741           ,x_calculate_flag              => l_calculate_flag
7742           ,x_rbs_diff_flag               => l_rbs_diff_flag
7743           ,x_return_status               => x_return_status);
7744 
7745         --dbms_output.put_line('l_resource_rec_tbl.count is '||l_resource_rec_tbl.count);
7746         --dbms_output.put_line('l_resource_rec_tbl.count is '||l_resource_rec_tbl(1).planning_start_date);
7747         --dbms_output.put_line('l_resource_rec_tbl.count is '||l_resource_rec_tbl(1).planning_end_date);
7748         --dbms_output.put_line('l_calculate_flag is '||l_calculate_flag);
7749         --This code is for debugging only. Should be removed later
7750         IF l_debug_mode = 'Y' THEN
7751 
7752             pa_debug.g_err_stage:='validate_copy_assignment returned error '||x_return_status;
7753             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7754 
7755         END IF;
7756 
7757         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7758 
7759             IF l_debug_mode = 'Y' THEN
7760 
7761                 pa_debug.g_err_stage:='validate_copy_assignment returned error';
7762                 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7763 
7764             END IF;
7765             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7766 
7767         END IF;
7768 
7769         IF  l_resource_rec_tbl.COUNT =0 THEN
7770             IF l_debug_mode = 'Y' THEN
7771 
7772                 pa_debug.g_err_stage:='Validate API returned 0 records in the res rec table-- returning';
7773                 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7774             pa_debug.reset_curr_function;
7775 	END IF;
7776             RETURN;
7777         END IF;
7778 
7779         --Extend the pl/sql tables
7780         l_ra_id_tbl.extend(l_resource_rec_tbl.last);
7781         l_planning_start_date_tbl.extend(l_resource_rec_tbl.last);
7782         l_planning_end_date_tbl.extend(l_resource_rec_tbl.last);
7783         l_schedule_start_date_tbl.extend(l_resource_rec_tbl.last);
7784         l_schedule_end_date_tbl.extend(l_resource_rec_tbl.last);
7785         l_project_assignment_id_tbl.extend(l_resource_rec_tbl.last);
7786         l_resource_list_member_id_tbl.extend(l_resource_rec_tbl.last);     -- Bug  3615617
7787         --Bug 4097749
7788         l_named_role_tbl.extend(l_resource_rec_tbl.last);
7789 
7790         --Copy the records from pl/sql table to local pl/sql tbls
7791         FOR i IN l_resource_rec_tbl.first..l_resource_rec_tbl.last LOOP
7792 
7793             l_ra_id_tbl(i):=l_resource_rec_tbl(i).resource_assignment_id;
7794             l_planning_start_date_tbl(i):=l_resource_rec_tbl(i).planning_start_date;
7795             l_planning_end_date_tbl(i):=l_resource_rec_tbl(i).planning_end_date;
7796             l_schedule_start_date_tbl(i):=l_resource_rec_tbl(i).schedule_start_date;
7797             l_schedule_end_date_tbl(i):=l_resource_rec_tbl(i).schedule_end_date;
7798             l_project_assignment_id_tbl(i):=l_resource_rec_tbl(i).project_assignment_id;
7799             l_resource_list_member_id_tbl(i):=l_resource_rec_tbl(i).resource_list_member_id; -- Bug  3615617
7800             --Bug 4097749
7801             l_named_role_tbl(i):=l_resource_rec_tbl(i).named_role;
7802 
7803         END LOOP;
7804 
7805     END IF;
7806 
7807     IF l_debug_mode = 'Y' THEN
7808         pa_debug.g_err_stage:='Calling pa_fp_copy_from_pkg.create_res_task_maps '||l_ra_id_tbl.last;
7809         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
7810     END IF;
7811 --dbms_output.put_line('calling create res task maps');
7812 
7813     --Call the API to create the mapping between source and target version ids.
7814       pa_fp_copy_from_pkg.create_res_task_maps(
7815       p_context                => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
7816      ,p_src_ra_id_tbl          => l_ra_id_tbl
7817      ,p_src_elem_ver_id_tbl    => p_src_version_id_tbl
7818      ,p_targ_elem_ver_id_tbl   => p_targ_version_id_tbl
7819      ,p_targ_proj_assmt_id_tbl => l_project_assignment_id_tbl
7820      ,p_targ_rlm_id_tbl        => l_resource_list_member_id_tbl -- Bug 3615617
7821      ,p_planning_start_date_tbl=> l_planning_start_date_tbl
7822      ,p_planning_end_date_tbl  => l_planning_end_date_tbl
7823      ,p_schedule_start_date_tbl=> l_schedule_start_date_tbl
7824      ,p_schedule_end_date_tbl  => l_schedule_end_date_tbl
7825      ,x_return_status          => x_return_status
7826      ,x_msg_count              => x_msg_count
7827      ,x_msg_data               => x_msg_data);
7828 
7829 
7830 
7831     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7832 
7833         IF l_debug_mode = 'Y' THEN
7834 
7835             pa_debug.g_err_stage:='create_res_task_maps returned error';
7836             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7837 
7838         END IF;
7839         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7840 
7841     END IF;
7842 
7843 
7844     IF l_debug_mode = 'Y' THEN
7845         pa_debug.g_err_stage:='Calling PA_FP_COPY_FROM_PKG.Copy_Resource_Assignments';
7846         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
7847     END IF;
7848 
7849 --dbms_output.put_line('calling copy res assmts S '||l_src_budget_version_id ||' T '||l_targ_budget_version_id );
7850     --Call the API to copy the resource assignments for the target version
7851     PA_FP_COPY_FROM_PKG.Copy_Resource_Assignments(
7852         p_source_plan_version_id  => l_src_budget_version_id
7853         ,p_target_plan_version_id => l_targ_budget_version_id
7854         ,p_adj_percentage         => l_adj_percent
7855         ,p_rbs_map_diff_flag      => l_rbs_diff_flag --For Bug 3974569
7856         --Bug 4200168
7857         ,p_calling_context         => 'WORKPLAN'
7858         ,x_return_status          => x_return_status
7859         ,x_msg_count              => x_msg_count
7860         ,x_msg_data               => x_msg_data);
7861 
7862     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7863 
7864         IF l_debug_mode = 'Y' THEN
7865 
7866             pa_debug.g_err_stage:='Copy_Resource_Assignments returned error';
7867             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7868 
7869         END IF;
7870         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7871 
7872     END IF;
7873 
7874     -- IPM changes - rollup amounts in new entity
7875     -- Call the UTIL API to get the financial plan info l_fp_cols_rec
7876     -- Bug 5070740 - moved this to rollup into entity BEFORE calling calculate
7877 
7878     pa_fp_gen_amount_utils.get_plan_version_dtls
7879         (p_project_id         => p_target_project_id,
7880          p_budget_version_id  => l_targ_budget_version_id,
7881          x_fp_cols_rec        => l_fp_cols_rec,
7882          x_return_status      => x_return_status,
7883          x_msg_count          => x_msg_count,
7884          x_msg_data           => x_msg_data);
7885 
7886     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7887 
7888        IF l_debug_mode = 'Y' THEN
7889           pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
7890           print_msg(pa_debug.g_err_stage,l_module_name);
7891        END IF;
7892        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7893     END IF;
7894 
7895     IF l_calculate_flag = 'Y' then
7896 
7897       -- IPM changes - populate tmp table to use for rollup
7898       -- Bug 5034507: Delete temp table before inserting new records
7899       DELETE pa_resource_asgn_curr_tmp;
7900 
7901       -- For bug 5017855, ensure that the combinations of
7902       -- (resource_assignment_id, txn_currency_code) are distinct.
7903       -- Bug 5042399: Copy Source override rates to the temp table for Target resources.
7904       -- Bug 5070740: Need to copy override rates before calculate is called
7905       INSERT INTO pa_resource_asgn_curr_tmp (
7906         RESOURCE_ASSIGNMENT_ID,
7907         TXN_CURRENCY_CODE,
7908         TXN_RAW_COST_RATE_OVERRIDE,
7909         TXN_BURDEN_COST_RATE_OVERRIDE,
7910         TXN_BILL_RATE_OVERRIDE )
7911       SELECT DISTINCT
7912            ra.RESOURCE_ASSIGNMENT_ID,
7913            src_rbc.txn_currency_code,
7914            src_rbc.TXN_RAW_COST_RATE_OVERRIDE,
7915            src_rbc.TXN_BURDEN_COST_RATE_OVERRIDE,
7916            src_rbc.TXN_BILL_RATE_OVERRIDE
7917       FROM   pa_resource_asgn_curr src_rbc,
7918            pa_fp_ra_map_tmp map,
7919            --pa_budget_lines bl
7920            pa_resource_assignments ra
7921       WHERE  ra.budget_version_id =l_targ_budget_version_id
7922 --      AND    src_rbc.budget_version_id = l_src_budget_version_id
7923       AND    map.target_res_assignment_id = ra.resource_assignment_id
7924       AND    src_rbc.resource_assignment_id = map.source_res_assignment_id;
7925 --      AND    src_rbc.txn_currency_code = bl.txn_currency_code;
7926 
7927       -- Call maintain_data to copy override rates before calling calculate
7928       pa_res_asg_currency_pub.maintain_data(
7929          p_fp_cols_rec                  => l_fp_cols_rec,
7930          p_calling_module               => 'UPDATE_PLAN_TRANSACTION',
7931          p_rollup_flag                  => 'N',
7932          p_version_level_flag           => 'N',
7933          p_called_mode                  => 'SELF_SERVICE',
7934          x_return_status                => x_return_status,
7935          x_msg_count                    => x_msg_count,
7936          x_msg_data                     => x_msg_data
7937          );
7938 
7939       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7940 
7941              IF l_debug_mode = 'Y' THEN
7942                    pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
7943                    print_msg(pa_debug.g_err_stage,l_module_name);
7944              END IF;
7945              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7946       END IF;
7947       -- END Bug  5070740
7948 
7949         --Bug 4097749. Update the resource assigments created above with the named_role attribute returned by
7950         --the TA validate API
7951         IF l_debug_mode = 'Y' THEN
7952             pa_debug.g_err_stage:='About to update named role/parent assignment id in pa_resource_assignments';
7953             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
7954         END IF;
7955 
7956         --Bug 4215676 . Modified the  update sql for performance issues.
7957         --The parent assignment id should  be NULLED out.Please see the comment on exaclty similar DML UPDATE below
7958 
7959         -- IPM - get resource rate based flag
7960         l_res_rate_based_flag_tbl.extend(l_ra_id_tbl.last);
7961         FOR i IN 1..l_ra_id_tbl.COUNT LOOP
7962               SELECT rlm.resource_class_code, rlm.inventory_item_id,
7963                      rlm.expenditure_type
7964                 INTO l_resource_class_code, l_inv_item_id, l_exp_type
7965                 FROM pa_resource_list_members rlm,
7966                      pa_resource_assignments ra
7967                WHERE ra.resource_assignment_id = l_ra_id_tbl(i)
7968                  AND ra.resource_list_member_id = rlm.resource_list_member_id;
7969 
7970               IF l_resource_class_code IN ('PEOPLE', 'EQUIPMENT') THEN
7971                  l_res_rate_based_flag_tbl(i) := 'Y';
7972               ELSIF l_resource_class_code = 'MATERIAL_ITEMS' AND
7973                     l_inv_item_id IS NOT NULL THEN
7974                     BEGIN
7975                     SELECT 'Y'
7976                       INTO l_res_rate_based_flag_tbl(i)
7977                       FROM DUAL
7978                       WHERE NOT EXISTS (select 'Y'
7979                          from mtl_system_items_b item,
7980                               mtl_units_of_measure meas
7981                         where item.inventory_item_id = l_inv_item_id
7982                           and item.primary_uom_code = meas.uom_code
7983                           and meas.uom_class = 'Currency');
7984                     EXCEPTION WHEN OTHERS THEN
7985                        l_res_rate_based_flag_tbl(i) := 'N';
7986                     END;
7987               ELSIF l_resource_class_code in ('MATERIAL_ITEMS',
7988                                               'FINANCIAL_ELEMENTS') AND
7989                     l_inv_item_id IS NULL AND l_exp_type IS NOT NULL THEN
7990                     BEGIN
7991                     SELECT c.cost_rate_flag
7992                       INTO l_res_rate_based_flag_tbl(i)
7993                       FROM pa_expenditure_types c
7994                      WHERE c.expenditure_type = l_exp_type;
7995                     EXCEPTION WHEN OTHERS THEN
7996                        l_res_rate_based_flag_tbl(i) := 'N';
7997                     END;
7998               END IF;
7999         END LOOP;
8000         FORALL i IN 1..l_ra_id_tbl.COUNT
8001               UPDATE pa_resource_assignments
8002               SET    named_role = l_named_role_tbl(i),
8003                      parent_assignment_id=NULL,
8004 		     /* bug fix:5135927 : Added nvl for l_res_rate_base_flag */
8005                      resource_rate_based_flag =NVL(l_res_rate_based_flag_tbl(i),'N')--IPM
8006               WHERE  parent_assignment_id = l_ra_id_tbl(i)
8007               AND    budget_version_id = l_targ_budget_version_id;
8008 
8009         IF l_debug_mode = 'Y' THEN
8010             pa_debug.g_err_stage:='Done with updating named role/parent assignment id in pa_resource_assignments';
8011             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8012         END IF;
8013 
8014 
8015         IF l_debug_mode = 'Y' THEN
8016             pa_debug.g_err_stage:='Calling Calculate API';
8017             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8018         END IF;
8019         --dbms_output.put_line('in cal=y');
8020 
8021         pa_budget_utils.Get_Project_Currency_Info
8022         (  p_project_id            => p_target_project_id
8023          , x_projfunc_currency_code => l_projfunc_currency_code
8024          , x_project_currency_code  => l_proj_curr_code
8025          , x_txn_currency_code     => l_projfunc_currency_code
8026          , x_msg_count             => x_msg_count
8027          , x_msg_data              => x_msg_data
8028          , x_return_status          => x_return_status);
8029 
8030         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8031             IF l_debug_mode = 'Y' THEN
8032                pa_debug.g_err_stage:='Cpa_budget_utils.Get_Project_Currency_Info returned error';
8033                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8034             END IF;
8035             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8036         END IF;
8037 
8038         i:=1;
8039         FOR c_calc_api_param_rec IN c_calc_api_param_csr LOOP
8040 
8041             --dbms_output.put_line (' i is '||i);
8042             IF NOT l_calc_ra_id_tbl.EXISTS(i) THEN
8043                 l_quantity_tbl.extend(1);
8044                 l_tot_rc_tbl.extend(1);
8045                 l_currency_code_tbl.extend(1);
8046                 l_calc_ra_id_tbl.extend(1);
8047                 l_spread_amt_flag_tbl.extend(1);
8048             END IF;
8049             -- Select the quantity for the resource assignment and the txn currency code. Note that
8050             -- for task assignments there will be only one currency code across all the budget lines
8051             -- in the ra id
8052             -- Changed the logic of populating quantity and raw cost to loop thru l_resource_rec_tbl
8053             -- instead of using tbls cached by ra id for bug 3678314
8054             FOR kk IN 1..l_resource_rec_tbl.COUNT LOOP
8055 
8056                 IF c_calc_api_param_rec.source_res_assignment_id = l_resource_rec_tbl(kk).resource_assignment_id THEN
8057 
8058                     l_quantity_tbl(i):=l_resource_rec_tbl(kk).total_quantity;
8059                     l_tot_rc_tbl(i):=l_resource_rec_tbl(kk).total_raw_cost;
8060                     EXIT;
8061 
8062                 END IF;
8063 
8064             END LOOP;
8065 
8066             l_calc_ra_id_tbl(i):=c_calc_api_param_rec.target_res_assignment_id;
8067             l_spread_amt_flag_tbl(i):='Y';
8068 
8069             BEGIN
8070                 SELECT nvl(txn_currency_code,l_proj_curr_code)--For workplan txn curr code can be null
8071                 INTO   l_currency_code_tbl(i)
8072                 FROM   pa_budget_lines
8073                 WHERE  resource_assignment_id=
8074                           c_calc_api_param_rec.source_res_assignment_id -- bug 3781932 l_calc_ra_id_tbl(i)
8075                 AND    ROWNUM=1;
8076             EXCEPTION
8077             WHEN NO_DATA_FOUND THEN
8078                 l_currency_code_tbl(i):=l_proj_curr_code;
8079             END;
8080             i:=i+1;
8081          END LOOP;
8082          l_quantity_tbl.DELETE(i,l_quantity_tbl.count);
8083          l_tot_rc_tbl.DELETE(i,l_tot_rc_tbl.count);
8084          l_currency_code_tbl.DELETE(i,l_currency_code_tbl.count);
8085          l_calc_ra_id_tbl.DELETE(i,l_calc_ra_id_tbl.count);
8086          l_spread_amt_flag_tbl.DELETE(i,l_spread_amt_flag_tbl.count);
8087          --dbms_output.put_line('Calling the calculate api'||l_calc_ra_id_tbl.count);
8088                   --dbms_output.put_line('Calling the calculate api'||l_calc_ra_id_tbl(1));
8089                   --dbms_output.put_line('Calling the calculate api'||l_calc_ra_id_tbl(2));
8090 
8091          PA_FP_CALC_PLAN_PKG.calculate(
8092           p_project_id                 =>   p_target_project_id
8093          ,p_budget_version_id          =>   l_targ_budget_version_id
8094          --,p_refresh_rates_flag         =>   'N' --need to pass any variables that are passed from calling API
8095          --,p_refresh_conv_rates_flag    =>   'N' --need to pass any variables that are passed from calling API
8096          --,p_spread_required_flag       =>   'N'
8097          --,p_conv_rates_required_flag   =>   'N'
8098          ,p_source_context             =>   'RESOURCE_ASSIGNMENT'
8099          ,p_resource_assignment_tab    =>   l_calc_ra_id_tbl
8100          ,p_delete_budget_lines_tab    =>   SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
8101          -- bug fix:5726773 ,p_spread_amts_flag_tab       =>   l_spread_amt_flag_tbl
8102          ,p_txn_currency_code_tab      =>   l_currency_code_tbl
8103          ,p_txn_currency_override_tab  =>   SYSTEM.PA_VARCHAR2_15_TBL_TYPE()
8104          ,p_total_qty_tab              =>   l_quantity_tbl
8105          ,p_total_raw_cost_tab         =>   l_tot_rc_tbl
8106          ,p_total_burdened_cost_tab    =>   SYSTEM.PA_NUM_TBL_TYPE()
8107          ,p_total_revenue_tab          =>   SYSTEM.PA_NUM_TBL_TYPE()
8108          ,p_raw_cost_rate_tab          =>   SYSTEM.PA_NUM_TBL_TYPE()
8109          ,p_rw_cost_rate_override_tab  =>   SYSTEM.PA_NUM_TBL_TYPE()
8110          ,p_b_cost_rate_tab            =>   SYSTEM.PA_NUM_TBL_TYPE()
8111          ,p_b_cost_rate_override_tab   =>   SYSTEM.PA_NUM_TBL_TYPE()
8112          ,p_bill_rate_tab              =>   SYSTEM.PA_NUM_TBL_TYPE()
8113          ,p_bill_rate_override_tab     =>   SYSTEM.PA_NUM_TBL_TYPE()
8114          ,p_line_start_date_tab        =>   SYSTEM.PA_DATE_TBL_TYPE()
8115          ,p_line_end_date_tab          =>   SYSTEM.PA_DATE_TBL_TYPE()
8116          ,p_rollup_required_flag       =>   l_pji_rollup_required
8117 	 ,p_raTxn_rollup_api_call_flag =>   'N' -- Added for bug 5017855
8118          ,x_return_status              =>   x_return_status
8119          ,x_msg_count                  =>   x_msg_count
8120          ,x_msg_data                   =>   x_msg_data);
8121 
8122         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8123 
8124             IF l_debug_mode = 'Y' THEN
8125 
8126                 pa_debug.g_err_stage:='PA_FP_CALC_PLAN_PKG.calculate returned error';
8127                 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8128 
8129             END IF;
8130             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8131 
8132         END IF;
8133 
8134 
8135     ELSE--Calculate Flag is N
8136 
8137         --dbms_output.put_line('in cal<>y');
8138         IF l_debug_mode = 'Y' THEN
8139             pa_debug.g_err_stage:='Calling PA_FP_COPY_FROM_PKG.Copy_Budget_Lines';
8140             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8141         END IF;
8142 
8143         PA_FP_COPY_FROM_PKG.Copy_Budget_Lines(
8144          p_source_plan_version_id   => l_src_budget_version_id
8145         ,p_target_plan_version_id   => l_targ_budget_version_id
8146         ,p_adj_percentage           => l_adj_percent
8147         ,x_return_status            => x_return_status
8148         ,x_msg_count                => x_msg_count
8149         ,x_msg_data                 => x_msg_data);
8150 
8151 
8152 
8153         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8154 
8155             IF l_debug_mode = 'Y' THEN
8156 
8157                 pa_debug.g_err_stage:='Copy_Budget_Lines returned error';
8158                 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8159 
8160             END IF;
8161             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8162 
8163         END IF;
8164 
8165         --Bug 4097749. Update the resource assigments created above with the named_role attribute returned by
8166         --the TA validate API
8167         IF l_debug_mode = 'Y' THEN
8168             pa_debug.g_err_stage:='About to update named role/parent assignment id in pa_resource_assignments';
8169             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8170         END IF;
8171 
8172         --Bug 4215676 . Modified the  update sql for performance issues.
8173         --The parent assignment id should  be NULLED out since (copy resource assignments copies the source
8174         --resource assignment to parent assignment id while copying the source to target)
8175         ---->Copy_Budget_Lines which is called above will consider all the resource assignments with Non Null
8176         ---->parent assignment id as candidates for copy. If parent_assignemt_id is not nulled out
8177         ---->then in future copy task flows the resource assignments which were are copied now will also be considered
8178         ---->as NEW and copy_budget_lines will try to insert them which will violate the unique constraint
8179         ---->on pa_budget_lines
8180         FORALL i IN 1..l_ra_id_tbl.COUNT
8181               UPDATE pa_resource_assignments
8182               SET    named_role = l_named_role_tbl(i),
8183                      parent_assignment_id=NULL
8184               WHERE  parent_assignment_id = l_ra_id_tbl(i)
8185               AND    budget_version_id = l_targ_budget_version_id;
8186 
8187         IF l_debug_mode = 'Y' THEN
8188             pa_debug.g_err_stage:='Done with updating named role/parent assignment id in pa_resource_assignments';
8189             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8190         END IF;
8191 
8192 
8193          --Code changes for bug#4200168 starts here.
8194          --for the budget lines that get copied as a result of tasks copying,
8195          -- we need to ensure all the txn currencies are available in pa fp txn ccurrencies.
8196          IF p_src_project_id<>p_target_project_id THEN
8197 
8198             -- Bug 4872216 changes - performance fix to remove full table
8199             -- scan on PA_FP_TXN_CURRENCIES
8200 		   SELECT DISTINCT BL.TXN_CURRENCY_CODE
8201 		   BULK   COLLECT
8202 		   INTO   l_txn_curr_code_tbl
8203 		   FROM   PA_BUDGET_LINES BL
8204 		   WHERE  BL.BUDGET_VERSION_ID = l_targ_budget_version_id
8205 		   AND    NOT EXISTS
8206     			  (SELECT 1
8207 	         	   FROM   PA_FP_TXN_CURRENCIES TC
8208                                  ,PA_PROJ_FP_OPTIONS pfo -- Bug 4872216
8209 			   WHERE  tc.fin_plan_version_id =
8210                                            l_targ_budget_version_id
8211                            AND    pfo.project_id = p_target_project_id --4872216
8212                            AND    pfo.fin_plan_version_id =
8213                                             tc.fin_plan_version_id  --4872216
8214                            AND    pfo.proj_fp_options_id =
8215                                               tc.proj_fp_options_id --4872216
8216                            AND    TC.txn_currency_code = BL.txn_currency_code);
8217 
8218           select proj_fp_options_id, project_id, fin_plan_type_id
8219           INTO l_proj_fp_options_id, l_project_id, l_fin_plan_type_id
8220           from pa_proj_fp_options
8221           WHERE fin_plan_version_id = l_targ_budget_version_id;
8222 
8223           select project_currency_code, projfunc_currency_code
8224           INTO l_pc, l_pfc
8225           from pa_projects_all
8226           WHERE project_id = l_project_id;
8227 
8228           FORALL j IN 1..l_txn_curr_code_tbl.count
8229              INSERT INTO PA_FP_TXN_CURRENCIES
8230                   (
8231                       FP_TXN_CURRENCY_ID,
8232                       PROJ_FP_OPTIONS_ID,
8233                       PROJECT_ID,
8234                       FIN_PLAN_TYPE_ID,
8235                       FIN_PLAN_VERSION_ID,
8236                       TXN_CURRENCY_CODE,
8237                       DEFAULT_REV_CURR_FLAG,
8238                       DEFAULT_COST_CURR_FLAG,
8239                       DEFAULT_ALL_CURR_FLAG,
8240                       PROJECT_CURRENCY_FLAG,
8241                       PROJFUNC_CURRENCY_FLAG,
8242                       CREATION_DATE ,
8243                       CREATED_BY ,
8244                       LAST_UPDATE_LOGIN ,
8245                       LAST_UPDATED_BY ,
8246                       LAST_UPDATE_DATE
8247                   )
8248                   VALUES
8249                   (
8250                       PA_FP_TXN_CURRENCIES_S.NEXTVAL,
8251                       l_proj_fp_options_id ,
8252                       l_project_id,
8253                       l_fin_plan_type_id,
8254                       l_targ_budget_version_id,
8255                       l_txn_curr_code_tbl(j),
8256                       'N',
8257                       'N',
8258                       'N',
8259                       Decode(l_txn_curr_code_tbl(j),l_pc,'Y','N'),
8260                       Decode(l_txn_curr_code_tbl(j),l_pfc,'Y','N'),
8261                       sysdate,
8262                       fnd_global.user_id,
8263                       fnd_global.login_id,
8264                       fnd_global.user_id,
8265                       sysdate);
8266 
8267        END IF; -- End of if p_src_project_id<>p_target_project_id
8268        --Code changes for bug#4200168 ends here.
8269 
8270         --Call the multi currency conversion PKG if required i.e. if pc and pfc should be recalculated
8271         IF l_adj_percent <> 0 THEN
8272             PA_FP_MULTI_CURRENCY_PKG.convert_txn_currency (
8273                       p_budget_version_id   => l_targ_budget_version_id
8274                       ,p_entire_version     => 'Y'
8275                       ,x_return_status      => x_return_status
8276                       ,x_msg_count          => x_msg_count
8277                       ,x_msg_data           => x_msg_data );
8278 
8279             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8280 
8281                 IF l_debug_mode = 'Y' THEN
8282 
8283                     pa_debug.g_err_stage:='convert_txn_currency returned error';
8284                     pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
8285 
8286                 END IF;
8287 
8288                 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
8289             END IF;
8290 
8291         END IF;
8292 
8293         --Call the reportiong lines API. This can called unconditionally as the reporting lines should always be
8294         --created for Workplan and Task Assignments versions.
8295 
8296          --Added the if condition for the bug 4200168
8297       IF l_pji_rollup_required = 'Y' THEN
8298 
8299             PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api
8300             ( p_source                  => 'PA_FP_RA_MAP_TMP'
8301              ,p_budget_version_id       => l_targ_budget_version_id
8302              ,x_return_status           => x_return_status
8303              ,x_msg_data                => x_msg_data
8304              ,x_msg_count               => x_msg_count);
8305 
8306           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8307 
8308               IF l_debug_mode = 'Y' THEN
8309                   pa_debug.g_err_stage:='PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api returned error';
8310                   pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
8311               END IF;
8312               RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
8313           END IF;
8314 
8315       END IF;
8316 
8317 -- Added for bug 4492493, Updated for bug 5198662
8318         IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
8319             AND PA_TASK_ASSIGNMENT_UTILS.Is_Progress_Rollup_Required(p_target_project_id) = 'Y') OR
8320            (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
8321             AND pa_task_assignment_utils.g_require_progress_rollup = 'Y') THEN
8322 
8323              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
8324                 ( p_calling_context       => 'ASGMT_PLAN_CHANGE'
8325                  ,p_project_id              => p_target_project_id
8326                  ,p_structure_version_id   =>  pa_project_structure_utils.get_latest_wp_version(p_target_project_id)
8327                  ,p_pub_struc_ver_id      => pa_project_structure_utils.get_latest_wp_version(p_target_project_id)
8328                  ,x_return_status                =>     x_return_status
8329                  ,x_msg_data                     =>     x_msg_data
8330                  ,x_msg_count                    =>     x_msg_count    );
8331 
8332               pa_task_assignment_utils.g_require_progress_rollup := 'N';
8333 
8334         END IF;
8335 
8336         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8337             IF l_debug_mode = 'Y' THEN
8338                 pa_debug.g_err_stage:='Called API PA_PROJ_TASK_STRUC_PUB.process_wbs_updates_wrp';
8339                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.copy_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
8340             END IF;
8341 
8342             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8343         END IF;
8344 --End bug 4492493
8345 
8346     END IF;
8347 
8348     -- IPM changes - populate tmp table to use for rollup
8349     -- Bug 5034507: Delete temp table before inserting new records
8350     DELETE pa_resource_asgn_curr_tmp;
8351 
8352     -- For bug 5017855, ensure that the combinations of
8353     -- (resource_assignment_id, txn_currency_code) are distinct.
8354     -- Bug 5042399: Copy Source override rates to the temp table for Target resources.
8355     INSERT INTO pa_resource_asgn_curr_tmp (
8356         RESOURCE_ASSIGNMENT_ID,
8357         TXN_CURRENCY_CODE,
8358         TXN_RAW_COST_RATE_OVERRIDE,
8359         TXN_BURDEN_COST_RATE_OVERRIDE,
8360         TXN_BILL_RATE_OVERRIDE )
8361     SELECT DISTINCT
8362            ra.RESOURCE_ASSIGNMENT_ID,
8363            src_rbc.txn_currency_code,
8364            src_rbc.TXN_RAW_COST_RATE_OVERRIDE,
8365            src_rbc.TXN_BURDEN_COST_RATE_OVERRIDE,
8366            src_rbc.TXN_BILL_RATE_OVERRIDE
8367     FROM   pa_resource_asgn_curr src_rbc,
8368            pa_fp_ra_map_tmp map,
8369            --pa_budget_lines bl
8370            pa_resource_assignments ra
8371     WHERE  ra.budget_version_id =l_targ_budget_version_id
8372 --    AND    src_rbc.budget_version_id = l_src_budget_version_id
8373     AND    map.target_res_assignment_id = ra.resource_assignment_id
8374     AND    src_rbc.resource_assignment_id = map.source_res_assignment_id;
8375 --    AND    src_rbc.txn_currency_code = bl.txn_currency_code;
8376 
8377     -- Bug 5070740: In case Calculate is called, need to call maintain_data
8378     --    API again to rollup amounts; in case Calculate is not called, calling
8379     --    maintain data once in this flow to copy overrides and rollup amounts.
8380     pa_res_asg_currency_pub.maintain_data(
8381          p_fp_cols_rec                  => l_fp_cols_rec,
8382          p_calling_module               => 'UPDATE_PLAN_TRANSACTION',
8383          p_rollup_flag                  => 'Y',
8384          p_version_level_flag           => 'N',
8385          p_called_mode                  => 'SELF_SERVICE',
8386          x_return_status                => x_return_status,
8387          x_msg_count                    => x_msg_count,
8388          x_msg_data                     => x_msg_data
8389          );
8390 
8391        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8392 
8393              IF l_debug_mode = 'Y' THEN
8394                    pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
8395                    print_msg(pa_debug.g_err_stage,l_module_name);
8396              END IF;
8397              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8398        END IF;
8399 
8400     IF l_debug_mode = 'Y' THEN
8401         pa_debug.g_err_stage:='Exiting copy_planning_transactions';
8402         print_msg(pa_debug.g_err_stage,l_module_name);
8403     -- reset curr function
8404        pa_debug.reset_curr_function;
8405     END IF;
8406 EXCEPTION
8407 
8408    WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
8409        l_msg_count := FND_MSG_PUB.count_msg;
8410        IF l_msg_count = 1 THEN
8411            PA_INTERFACE_UTILS_PUB.get_messages
8412                  (p_encoded         => FND_API.G_TRUE
8413                   ,p_msg_index      => 1
8414                   ,p_msg_count      => l_msg_count
8415                   ,p_msg_data       => l_msg_data
8416                   ,p_data           => l_data
8417                   ,p_msg_index_out  => l_msg_index_out);
8418 
8419            x_msg_data := l_data;
8420            x_msg_count := l_msg_count;
8421        ELSE
8422            x_msg_count := l_msg_count;
8423        END IF;
8424 
8425        x_return_status := FND_API.G_RET_STS_ERROR;
8426        ROLLBACK TO copy_plan_txn;
8427 
8428        IF l_debug_mode = 'Y' THEN
8429            pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
8430            pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
8431        -- reset curr function
8432           pa_debug.reset_curr_function;
8433        END IF;
8434        RETURN;
8435    WHEN Others THEN
8436        ROLLBACK TO copy_plan_txn;
8437        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8438        x_msg_count     := 1;
8439        x_msg_data      := SQLERRM;
8440 
8441        FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'pa_fp_planning_transaction_pub'
8442                                ,p_procedure_name  => 'copy_planning_transactions');
8443 
8444        IF l_debug_mode = 'Y' THEN
8445            pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
8446            pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
8447            pa_debug.Reset_Curr_Function();
8448        END IF;
8449        RAISE;
8450 END copy_planning_transactions;
8451 
8452 
8453 
8454 /*=====================================================================
8455 Procedure Name:      delete_planning_transactions
8456 Purpose:             This procedure should be called to delete planning
8457                      transactions
8458                      Valid values for p_context are 'BUDGET','FORECAST',
8459                      'WORKPLAN' and 'TASK_ASSIGNMENT'
8460 
8461                      Valid values for p_task_or_res are 'TASKS' and
8462                      'ASSIGNMENT'
8463 
8464                      In the context of 'TASK_ASSIGNMENT' the fields
8465                      task_number and task_name are required in
8466                      p_task_rec_tbl
8467 
8468                      If p_task_or_res is TASKS,
8469                      p_element_version_id_tbl,p_task_number_tbl,
8470                      p_task_name_tbl are used.
8471 
8472                      If p_task_or_res is ASSIGNMENT,
8473                      p_resource_assignment_tbl is used
8474 
8475                p_calling_module can be NULL or PROCESS_RES_CHG_DERV_CALC_PRMS. If passed as Y
8476                resource assignments will be  deleted otherwise they
8477                      will not be deleted.(Please note that budget lines will be deleted
8478                      always irrespective of the value for this parameter).
8479                      Please note that this parameter cannot be PROCESS_RES_CHG_DERV_CALC_PRMS
8480                when p_task_or_res is passed as TASKS
8481                  Whenever p_calling_module is passed as PROCESS_RES_CHG_DERV_CALC_PRMS,
8482                the parameters p_task_id_tbl,p_resource_class_code_tbl
8483                p_rbs_element_id_tbl and     p_rate_based_flag_tbl should ALSO be
8484                passed. These tbls must be equal in length to p_resource_assignment_tbl
8485                      and should contain the task id, rbs element id and rate based flag
8486                      for the resource assignment
8487 
8488   Bug - 3719918. New param p_currency_code_tbl is added below
8489   When p_context - Budget/Forecast and p_task_or_res is Assignment then only the bugdet lines
8490   Corresponding to currency code passed will be deleted. After deleting of the budget lines
8491   the corresponding RA will only we deleted if the budget line count is 0 from the RA.
8492   p_calling_module will be'EDIT_PLAN' when called from edit plan pages.
8493 
8494 =======================================================================*/
8495 
8496 PROCEDURE delete_planning_transactions
8497 (
8498        p_context                      IN       VARCHAR2
8499       ,p_calling_context              IN       VARCHAR2 DEFAULT NULL    -- Added for Bug 6856934
8500       ,p_task_or_res                  IN       VARCHAR2 DEFAULT 'TASKS'
8501       ,p_element_version_id_tbl       IN       SYSTEM.PA_NUM_TBL_TYPE          DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
8502       ,p_task_number_tbl              IN       SYSTEM.PA_VARCHAR2_240_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
8503       ,p_task_name_tbl                IN       SYSTEM.PA_VARCHAR2_240_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
8504       ,p_resource_assignment_tbl      IN       SYSTEM.PA_NUM_TBL_TYPE          DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
8505       --Introduced for bug 3589130. If this parameter is passed as Y then an error will be thrown
8506       --When its required to delete a resource assignment containing budget lines. This parameter
8507       --will be considered only for BUDGET and FORECAST context
8508       ,p_validate_delete_flag         IN       VARCHAR2                        DEFAULT 'N'
8509       -- This param will be used for B/F Context. Bug - 3719918
8510       ,p_currency_code_tbl            IN       SYSTEM.PA_VARCHAR2_15_TBL_TYPE  DEFAULT SYSTEM.PA_VARCHAR2_15_TBL_TYPE()
8511       ,p_calling_module               IN       VARCHAR2                        DEFAULT NULL
8512       ,p_task_id_tbl                  IN       SYSTEM.PA_NUM_TBL_TYPE          DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
8513       ,p_rbs_element_id_tbl           IN       SYSTEM.PA_NUM_TBL_TYPE          DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
8514       ,p_rate_based_flag_tbl          IN       SYSTEM.PA_VARCHAR2_1_TBL_TYPE   DEFAULT SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
8515       ,p_resource_class_code_tbl      IN       SYSTEM.PA_VARCHAR2_30_TBL_TYPE  DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
8516       --For Bug 3937716. Calls to PJI and budget version rollup APIs will be skipped if p_rollup_required_flag is N.
8517       ,p_rollup_required_flag         IN       VARCHAR2                        DEFAULT 'Y'
8518       ,p_pji_rollup_required          IN       VARCHAR2                        DEFAULT 'Y' /* Bug 4200168 */
8519       ,x_return_status                OUT      NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8520       ,x_msg_count                    OUT      NOCOPY NUMBER --File.Sql.39 bug 4440895
8521       ,x_msg_data                     OUT      NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8522 )
8523 IS
8524     --Start of variables used for debugging
8525     l_return_status                 VARCHAR2(1);
8526     l_msg_count                     NUMBER := 0;
8527     l_msg_data                      VARCHAR2(2000);
8528     l_data                          VARCHAR2(2000);
8529     l_msg_index_out                 NUMBER;
8530     l_debug_mode                    VARCHAR2(30);
8531     --End of variables used for debugging
8532 
8533     l_module_name                   VARCHAR2(100):='PAFPPTPB.delete_planning_transactions';
8534     l_delete_task_flag_tbl          SYSTEM.PA_VARCHAR2_1_TBL_TYPE      := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8535     l_delete_assmt_flag_tbl         SYSTEM.PA_VARCHAR2_1_TBL_TYPE      := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8536     l_wp_version_flag               VARCHAR2(1);
8537     l_ta_display_flag               VARCHAR2(1);
8538 
8539     l_period_name_tbl               SYSTEM.pa_varchar2_30_tbl_type;
8540     l_start_date_tbl                SYSTEM.pa_date_tbl_type;
8541     l_end_date_tbl                  SYSTEM.pa_date_tbl_type;
8542     l_txn_currency_code_tbl         SYSTEM.pa_varchar2_15_tbl_type;
8543     l_txn_raw_cost_tbl              SYSTEM.pa_num_tbl_type;
8544     l_txn_burdened_cost_tbl         SYSTEM.pa_num_tbl_type;
8545     l_txn_revenue_tbl               SYSTEM.pa_num_tbl_type;
8546     l_project_raw_cost_tbl          SYSTEM.pa_num_tbl_type;
8547     l_project_burdened_cost_tbl     SYSTEM.pa_num_tbl_type;
8548     l_project_revenue_tbl           SYSTEM.pa_num_tbl_type;
8549     l_raw_cost_tbl                  SYSTEM.pa_num_tbl_type;
8550     l_burdened_cost_tbl             SYSTEM.pa_num_tbl_type;
8551     l_revenue_tbl                   SYSTEM.pa_num_tbl_type;
8552     l_cost_rejection_code_tbl       SYSTEM.pa_varchar2_30_tbl_type;
8553     l_revenue_rejection_code_tbl    SYSTEM.pa_varchar2_30_tbl_type;
8554     l_burden_rejection_code_tbl     SYSTEM.pa_varchar2_30_tbl_type;
8555     l_other_rejection_code          SYSTEM.pa_varchar2_30_tbl_type;
8556     l_pc_cur_conv_rej_code_tbl      SYSTEM.pa_varchar2_30_tbl_type;
8557     l_pfc_cur_conv_rej_code_tbl     SYSTEM.pa_varchar2_30_tbl_type;
8558     l_resource_assignment_id_tbl    SYSTEM.pa_num_tbl_type;
8559     l_quantity_tbl                  SYSTEM.pa_num_tbl_type;
8560     l_task_id_tbl                   SYSTEM.pa_num_tbl_type:=SYSTEM.pa_num_tbl_type();
8561     l_rbs_element_id_tbl            SYSTEM.pa_num_tbl_type:=SYSTEM.pa_num_tbl_type();
8562     l_res_class_code_tbl            SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
8563     l_rate_based_flag_tbl           SYSTEM.pa_varchar2_1_tbl_type:=SYSTEM.pa_varchar2_1_tbl_type();
8564     l_task_id_in_pra_tbl            SYSTEM.pa_num_tbl_type;
8565     l_rbs_element_id_in_pra_tbl     SYSTEM.pa_num_tbl_type;
8566     l_res_class_code_in_pra_tbl     SYSTEM.pa_varchar2_30_tbl_type;
8567     l_rate_based_flag_in_pra_tbl    SYSTEM.pa_varchar2_1_tbl_type;
8568     l_ra_id_in_pra_tbl              SYSTEM.pa_num_tbl_type;
8569     --Bug 4951422
8570     l_task_assmt_ids_tbl            SYSTEM.pa_num_tbl_type;
8571 
8572     l_counter                       NUMBER;
8573     l_ra_index                      NUMBER;
8574     l_budget_version_id             pa_budget_versions.budget_version_id%TYPE;
8575     l_ci_id                         pa_budget_versions.ci_id%TYPE;
8576     l_exists                        VARCHAR2(1);
8577     SKIP_LOOP                       EXCEPTION;
8578     i                               NUMBER;
8579     l_cntr                          NUMBER;
8580 
8581     l_currency_code_tbl             SYSTEM.PA_VARCHAR2_15_TBL_TYPE      := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
8582     l_task_id                       PA_RESOURCE_ASSIGNMENTS.TASK_ID%TYPE;
8583     l_rbs_element_id                PA_RESOURCE_ASSIGNMENTS.RBS_ELEMENT_ID%TYPE;
8584     l_res_class_code                PA_RESOURCE_ASSIGNMENTS.RESOURCE_CLASS_CODE%TYPE;
8585     l_rate_based_flag               PA_RESOURCE_ASSIGNMENTS.RATE_BASED_FLAG%TYPE;
8586     l_mode                          varchar2(12) := null;   --Bug 4160258
8587 
8588 
8589     l_project_id                    pa_projects_all.project_id%TYPE;  --Bug 4218331
8590     l_project_currency_code         VARCHAR2(30);
8591     l_fp_cols_rec                   pa_fp_gen_amount_utils.fp_cols; -- IPM
8592 
8593 BEGIN
8594 
8595     delete pa_resource_asgn_curr_tmp;
8596     x_msg_count := 0;
8597     x_return_status := FND_API.G_RET_STS_SUCCESS;
8598 
8599     pa_task_assignment_utils.g_require_progress_rollup := 'N';
8600 
8601     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
8602     l_debug_mode := NVL(l_debug_mode, 'N');
8603 
8604     -- Set curr function
8605     IF l_debug_mode = 'Y' THEN
8606     	pa_debug.set_curr_function(
8607                 p_function   =>'PA_FP_PLAN_TXN_PUB.delete_planning_transactions'
8608                ,p_debug_mode => l_debug_mode );
8609    END IF;
8610 
8611    IF l_debug_mode = 'Y' THEN
8612         /** printing all in params */
8613         pa_debug.g_err_stage := 'p_context=>'|| p_context||']p_task_or_res =>'||p_task_or_res||']';
8614         pa_debug.g_err_stage := pa_debug.g_err_stage||'p_validate_delete_flag=>'||p_validate_delete_flag||']';
8615         pa_debug.g_err_stage := pa_debug.g_err_stage||'p_calling_module=>'||p_calling_module||']';
8616         pa_debug.g_err_stage := pa_debug.g_err_stage||'RollupReqFlg=>'||p_rollup_required_flag||']';
8617         pa_debug.g_err_stage := pa_debug.g_err_stage||'PJiRollupFlg=>'||p_pji_rollup_required||']';
8618         pa_debug.g_err_stage := pa_debug.g_err_stage||'ElemVerTbCt['||p_element_version_id_tbl.count||']';
8619         pa_debug.g_err_stage := pa_debug.g_err_stage||'RaIdCt['||p_resource_assignment_tbl.count||']';
8620         pa_debug.g_err_stage := pa_debug.g_err_stage||'TaskIdCt['||p_task_id_tbl.count||']';
8621         pa_debug.g_err_stage := pa_debug.g_err_stage||'rbsElmCt['||p_rbs_element_id_tbl.count||']';
8622         print_msg(pa_debug.g_err_stage,l_module_name);
8623    End If;
8624    -------------------------------------------------------------------------------------------
8625    -- Extending all table lengths to the permissible values they would take.
8626    -------------------------------------------------------------------------------------------
8627      IF l_debug_mode = 'Y' THEN
8628          pa_debug.g_err_stage:='Extending all table lengths to the permissible values they would take';
8629 	 print_msg(pa_debug.g_err_stage,l_module_name);
8630      END IF;
8631 
8632      IF l_debug_mode = 'Y' THEN
8633          pa_debug.g_err_stage:='Extending all table lengths to the permissible values they would take';
8634          print_msg(pa_debug.g_err_stage,l_module_name);
8635      END IF;
8636 
8637      IF p_element_version_id_tbl.COUNT > 0 THEN
8638          l_delete_task_flag_tbl.extend(p_element_version_id_tbl.LAST);
8639      END IF;
8640 
8641      IF p_resource_assignment_tbl.COUNT > 0 THEN
8642          l_delete_assmt_flag_tbl.extend(p_resource_assignment_tbl.LAST);
8643      END IF;
8644 
8645     ----------------------------------------------------
8646     -- Validating input parameters
8647     ----------------------------------------------------
8648     IF l_debug_mode = 'Y' THEN
8649         pa_debug.g_err_stage:='Validating input parameters';
8650 	print_msg(pa_debug.g_err_stage,l_module_name);
8651     END IF;
8652 
8653     --Check for mandatory parameters
8654     IF p_context IS NULL OR
8655        p_task_or_res IS NULL THEN
8656 
8657         IF l_debug_mode = 'Y' THEN
8658             pa_debug.g_err_stage:='p_context Is'||p_context;
8659             pa_debug.g_err_stage:=pa_debug.g_err_stage||': p_task_or_res Is'||p_task_or_res;
8660 	    print_msg(pa_debug.g_err_stage,l_module_name);
8661         END IF;
8662 
8663         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8664                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
8665         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8666     END IF;
8667 
8668     IF  p_task_or_res = 'TASKS' AND p_calling_module='PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
8669         IF l_debug_mode = 'Y' THEN
8670             pa_debug.g_err_stage:='calling module  is PROCESS_RES_CHG_DERV_CALC_PRMS when p_task_or_res  is TASKS';
8671 	    print_msg(pa_debug.g_err_stage,l_module_name);
8672         END IF;
8673         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8674                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED',
8675                     p_token1        => 'PROCEDURENAME',
8676                     p_value1        => 'PAFPPTPB.Delete_planning_transactions');
8677         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8678 
8679     END IF;
8680     -- Bug 3546208
8681     IF   ( p_task_or_res = 'TASKS'
8682        AND p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,
8683                          PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
8684        IF l_debug_mode = 'Y' THEN
8685           pa_debug.g_err_stage:='P_task_or_res is Task for B/F Context';
8686 	  print_msg(pa_debug.g_err_stage,l_module_name);
8687        END IF;
8688        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8689                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
8690                             p_token1         => 'PROCEDURENAME',
8691                             p_value1         => 'PAFPPTPB.Delete_planning_transactions',
8692                             p_token2         => 'STAGE',
8693                             p_value2         => 'Invalid Data : B/F - TASK');
8694        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8695     END IF;
8696 
8697     IF p_calling_module='PROCESS_RES_CHG_DERV_CALC_PRMS' AND
8698      (p_task_id_tbl.COUNT <> p_resource_assignment_tbl.COUNT OR
8699       p_rbs_element_id_tbl.COUNT <> p_resource_assignment_tbl.COUNT OR
8700       p_rate_based_flag_tbl.COUNT <> p_resource_assignment_tbl.COUNT OR
8701         p_resource_class_code_tbl.COUNT <> p_resource_assignment_tbl.COUNT  ) THEN
8702 
8703         IF l_debug_mode = 'Y' THEN
8704             pa_debug.g_err_stage:='p_resource_assignment_tbl.COUNT  IS '||p_resource_assignment_tbl.COUNT ;
8705             print_msg(pa_debug.g_err_stage,l_module_name);
8706 
8707             pa_debug.g_err_stage:='p_task_id_tbl.COUNT IS '||p_task_id_tbl.COUNT ;
8708             print_msg(pa_debug.g_err_stage,l_module_name);
8709 
8710             pa_debug.g_err_stage:='p_rbs_element_id_tbl.COUNT IS '||p_rbs_element_id_tbl.COUNT ;
8711             print_msg(pa_debug.g_err_stage,l_module_name);
8712 
8713             pa_debug.g_err_stage:='p_rate_based_flag_tbl.COUNT IS '||p_rate_based_flag_tbl.COUNT ;
8714             print_msg(pa_debug.g_err_stage,l_module_name);
8715 
8716             pa_debug.g_err_stage:='p_resource_class_code_tbl.COUNT IS '||p_resource_class_code_tbl.COUNT ;
8717             print_msg(pa_debug.g_err_stage,l_module_name);
8718 
8719             pa_debug.g_err_stage:='p_resource_assignment_tbl.COUNT IS '||p_resource_assignment_tbl.COUNT ;
8720             print_msg(pa_debug.g_err_stage,l_module_name);
8721 
8722         END IF;
8723         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8724                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED',
8725                     p_token1        => 'PROCEDURENAME',
8726                     p_value1        => 'PAFPPTPB.Delete_planning_transactions');
8727         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8728 
8729     END IF;
8730 
8731 
8732     --Throw an error if the input tables do not have same no of elements
8733     IF  (p_task_or_res = 'TASKS' AND
8734          p_element_version_id_tbl.count =0) OR
8735         (p_task_or_res = 'ASSIGNMENT' AND
8736          p_resource_assignment_tbl.count =0) THEN
8737 
8738         IF l_debug_mode = 'Y' THEN
8739             pa_debug.g_err_stage:='The input table is empty. returning';
8740             print_msg(pa_debug.g_err_stage,l_module_name);
8741             pa_debug.reset_curr_function;
8742 	END IF;
8743         RETURN;
8744     END IF;
8745 
8746     IF p_calling_module='PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
8747      l_ra_id_in_pra_tbl     :=p_resource_assignment_tbl;
8748        l_task_id_in_pra_tbl     :=p_task_id_tbl;
8749          l_rbs_element_id_in_pra_tbl    :=p_rbs_element_id_tbl;
8750        l_res_class_code_in_pra_tbl  :=p_resource_class_code_tbl;
8751        l_rate_based_flag_in_pra_tbl :=p_rate_based_flag_tbl;
8752     END IF;
8753 
8754     --Bug 4951422. Initialize these tbls to avoid "ORA-06531: Reference to uninitialized collection" error
8755     --when the element version id tbl passed do not have corresponding resource assignment ids
8756     l_resource_assignment_id_tbl := SYSTEM.pa_num_tbl_type();
8757     l_ra_id_in_pra_tbl := SYSTEM.pa_num_tbl_type();
8758 
8759     /** when the context is Task assignment Call the Validation API
8760     * Modified Delete logic for Bug 3808720. Since Validate Delete Assignments API
8761     * needs to be called for WORKPLAN context as well. Merginng Delete Logic for
8762     * G_CALLING_MODULE_TASK and G_CALLING_MODULE_WORKPLAN below.
8763     */
8764     IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR
8765         p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN --{
8766 
8767             IF l_debug_mode = 'Y' THEN
8768                 pa_debug.g_err_stage:='The calling context is task assignment. Calling the validation API';
8769                 print_msg(pa_debug.g_err_stage,l_module_name);
8770             END IF;
8771 
8772           PA_TASK_ASSIGNMENT_UTILS.VALIDATE_DELETE_ASSIGNMENT
8773              ( p_context                      => p_context
8774               ,p_calling_context              => p_calling_context    -- Added for Bug 6856934
8775               ,p_task_or_res                  => p_task_or_res
8776               ,p_elem_ver_id_tbl              => p_element_version_id_tbl
8777               ,p_task_name_tbl                => p_task_name_tbl
8778               ,p_task_number_tbl              => p_task_number_tbl
8779               ,p_resource_assignment_id_tbl   => p_resource_assignment_tbl
8780               ,x_delete_task_flag_tbl         => l_delete_task_flag_tbl
8781               ,x_delete_asgmt_flag_tbl        => l_delete_assmt_flag_tbl
8782               ,x_task_assmt_ids_tbl           => l_task_assmt_ids_tbl --Bug 4951422
8783               ,x_return_status                => x_return_status);
8784 
8785              IF l_debug_mode = 'Y' THEN
8786                 pa_debug.g_err_stage:= 'After calling Validate OutParms: l_delete_task_flag_tblCount[';
8787                 pa_debug.g_err_stage:= pa_debug.g_err_stage||l_delete_task_flag_tbl.count||']';
8788                 pa_debug.g_err_stage:= pa_debug.g_err_stage||'l_delete_assmt_flag_tblcount[';
8789                 pa_debug.g_err_stage:= pa_debug.g_err_stage||l_delete_assmt_flag_tbl.count||']';
8790                 pa_debug.g_err_stage:= pa_debug.g_err_stage||'l_task_assmt_ids_tblCount[';
8791                 pa_debug.g_err_stage:= pa_debug.g_err_stage||l_task_assmt_ids_tbl.count||']';
8792                 pa_debug.g_err_stage:= pa_debug.g_err_stage||'RetSts['||x_return_status||']';
8793                 print_msg(pa_debug.g_err_stage,l_module_name);
8794             End If;
8795 
8796             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8797                 IF l_debug_mode = 'Y' THEN
8798                     pa_debug.g_err_stage:='The calling context is task assignment. Calling the validation API';
8799                     print_msg(pa_debug.g_err_stage,l_module_name);
8800                 END IF;
8801                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8802 	    End If;
8803 	END IF; --}
8804 
8805     /* Bug fix:5349668: Get project,budget,ciid details upfront based on
8806      * in put params, If budget version is null then just return as there
8807      * nothing to delete any budget lines or resource assignments.
8808      * Note: executing this sql at many places to get budget version is failing with
8809      * ORA-No data found error
8810      */ --{
8811     IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR
8812        p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) THEN --{
8813 
8814       If p_task_or_res = 'TASKS'   --- bug 6076066: added the checking of p_task_res to the existing IF loop
8815         and p_element_version_id_tbl.count > 0
8816 	and NVL(p_element_version_id_tbl(1),0) <> 0
8817 	and p_element_version_id_tbl(1) <> fnd_api.g_miss_num then
8818 
8819 	/* Bug fix: LOOP is required to get the budget version id. when multiple tasks are deleted
8820 	* some of the task may not have assignments, but some may have assignments
8821 	* without loop, the process skips all the records
8822 	*/
8823 
8824 	FOR i IN p_element_version_id_tbl.FIRST .. p_element_version_id_tbl.LAST LOOP
8825 	    l_cntr := i;
8826      	    BEGIN
8827 		IF l_debug_mode = 'Y' THEN
8828                     pa_debug.g_err_stage:=l_cntr||'..Getting budget version id from p_element_version_id_tbl';
8829 		    pa_debug.g_err_stage:=pa_debug.g_err_stage||'['||p_element_version_id_tbl(l_cntr)||']';
8830                     print_msg(pa_debug.g_err_stage,l_module_name);
8831                 END IF;
8832 		SELECT pbv.project_id
8833 			,pbv.budget_version_id
8834 			,pbv.ci_id
8835 		INTO   l_project_id
8836 			,l_budget_version_id
8837 			,l_ci_id
8838 		FROM   pa_resource_assignments pra
8839 			,pa_budget_Versions pbv
8840 		WHERE  pbv.budget_version_id=pra.budget_version_id
8841 		AND    pbv.wp_version_flag='Y'
8842 		AND    pra.wbs_element_version_id=p_element_version_id_tbl(l_cntr)
8843 		AND    rownum < 2 ;
8844 
8845 		EXIT;
8846 	    EXCEPTION
8847 		WHEN NO_DATA_FOUND THEN
8848 		IF l_debug_mode = 'Y' THEN
8849 		    pa_debug.g_err_stage:='No Data Found: No budget Exists for this Task Element Version Ids';
8850 		    print_msg(pa_debug.g_err_stage,l_module_name);
8851 		END IF;
8852 		NULL;
8853 	    END;
8854 	END LOOP;
8855 
8856 	/* check if any planning resource exists for l_task_assmt_ids_tbl passed from
8857          * validate_delete_assignment api.
8858 	 */
8859 	IF l_budget_version_id is NULL and
8860            l_task_assmt_ids_tbl is NOT NULL and -- Bug 5408333 fix - ORA-06531: Reference to uninitialized collection
8861            l_task_assmt_ids_tbl.COUNT > 0 Then
8862             BEGIN
8863                 IF l_debug_mode = 'Y' THEN
8864                     pa_debug.g_err_stage:='2..Getting budget version id from l_task_assmt_ids_tbl';
8865                     pa_debug.g_err_stage:=pa_debug.g_err_stage||'['||l_task_assmt_ids_tbl(1)||']';
8866                     print_msg(pa_debug.g_err_stage,l_module_name);
8867                 END IF;
8868                 SELECT pbv.project_id
8869                         ,pbv.budget_version_id
8870                         ,pbv.ci_id
8871                 INTO   l_project_id
8872                         ,l_budget_version_id
8873                         ,l_ci_id
8874                 FROM   pa_resource_assignments pra
8875                         ,pa_budget_Versions pbv
8876                 WHERE  pbv.budget_version_id=pra.budget_version_id
8877                 AND    pra.resource_assignment_id =l_task_assmt_ids_tbl(1);
8878              EXCEPTION
8879                 WHEN NO_DATA_FOUND THEN
8880                 IF l_debug_mode = 'Y' THEN
8881                     pa_debug.g_err_stage:='No Data Found: No budget Exists for this Task Assignment Ids';
8882                     print_msg(pa_debug.g_err_stage,l_module_name);
8883                 END IF;
8884                 NULL;
8885             END;
8886 
8887 	End If;
8888      END IF; --}
8889     END IF; -- Bug 5408333 fix - To handle FINPLAN case in which the above
8890             --                   2 SQL statements will not populate l_budget_version_id
8891 
8892     IF  l_budget_version_id is  NULL -- Bug 5408333
8893         and p_resource_assignment_tbl.COUNT > 0
8894 	and NVL(p_resource_assignment_tbl(1),0) <> 0
8895 	and p_resource_assignment_tbl(1) <> fnd_api.g_miss_num Then
8896 
8897         BEGIN
8898 
8899 		IF l_debug_mode = 'Y' THEN
8900                     pa_debug.g_err_stage:='2..Getting budget version id from p_resource_assignment_tbl';
8901                     pa_debug.g_err_stage:=pa_debug.g_err_stage||'['||p_resource_assignment_tbl(1)||']';
8902                     print_msg(pa_debug.g_err_stage,l_module_name);
8903                 END IF;
8904                 SELECT pbv.project_id
8905                         ,pbv.budget_version_id
8906                         ,pbv.ci_id
8907                 INTO   l_project_id
8908                         ,l_budget_version_id
8909                         ,l_ci_id
8910                 FROM   pa_resource_assignments pra
8911                         ,pa_budget_Versions pbv
8912                 WHERE  pbv.budget_version_id=pra.budget_version_id
8913                 AND    pra.resource_assignment_id =p_resource_assignment_tbl(1);
8914         EXCEPTION
8915                 WHEN NO_DATA_FOUND THEN
8916                 IF l_debug_mode = 'Y' THEN
8917                     pa_debug.g_err_stage:='No Data Found: No budget Exists for this resource Assignment Ids';
8918                     print_msg(pa_debug.g_err_stage,l_module_name);
8919                 END IF;
8920                 NULL;
8921         END;
8922 
8923     END IF; --}
8924 
8925     IF l_debug_mode = 'Y' THEN
8926             pa_debug.g_err_stage:='ProjId['||l_project_id||']BudgetVers['||l_budget_version_id||']Ciid['||l_ci_id||']';
8927             print_msg(pa_debug.g_err_stage,l_module_name);
8928     END IF;
8929 
8930     If l_budget_version_id is NULL Then
8931     		IF l_debug_mode = 'Y' THEN
8932         		pa_debug.g_err_stage:='Exiting delete_planning_transactions as No budget version exists';
8933         		print_msg(pa_debug.g_err_stage,l_module_name);
8934         		pa_debug.reset_curr_function;
8935     		END IF;
8936 		RETURN;
8937     End If;
8938     /* End of Bug fix:5349668: */
8939 
8940     IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR
8941 	p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
8942 
8943             IF p_task_or_res = 'TASKS' THEN
8944 
8945                 IF l_delete_task_flag_tbl.count=0 THEN
8946                     IF l_debug_mode = 'Y' THEN
8947                         pa_debug.g_err_stage:='No elements in the l_delete_task_flag_tbl';
8948                         print_msg(pa_debug.g_err_stage,l_module_name);
8949                         pa_debug.reset_curr_function;
8950 		    END IF;
8951                     RETURN;
8952                 END IF;
8953 
8954                 IF l_delete_task_flag_tbl.count<>p_element_version_id_tbl.count THEN
8955                     IF l_debug_mode = 'Y' THEN
8956                         pa_debug.g_err_stage:='Num elements in l_delete_task_flag_tbl, p_element_version_id_tbl dont match';
8957                        print_msg(pa_debug.g_err_stage,l_module_name);
8958                     END IF;
8959                     PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8960                                           p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
8961                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8962                 END IF;
8963 
8964                 --Bug 4951422. Validate_Delete_Assignment returns the correct resource assignments that should be deleted.
8965 		--Note:
8966                 --that wbs_elememnt_version_id will be populated only for Workplan versions and hence all the checks done in
8967                 --the commented SQL are already done in that API
8968 		  IF l_task_assmt_ids_tbl.COUNT > 0 Then --{
8969 		  IF l_debug_mode = 'Y' THEN
8970                      pa_debug.g_err_stage:='Deleting all budget lines based on l_task_assmt_ids_tbl';
8971                      print_msg(pa_debug.g_err_stage,l_module_name);
8972                   END IF;
8973 		  FORALL i IN 1..l_task_assmt_ids_tbl.COUNT
8974                   DELETE
8975                   FROM   pa_budget_lines pbl
8976                   WHERE  pbl.resource_assignment_id=l_task_assmt_ids_tbl(i)
8977                     RETURNING
8978                     pbl.period_name,
8979                     pbl.start_date,
8980                     pbl.end_date,
8981                     pbl.txn_currency_code,
8982                     -pbl.txn_raw_cost,
8983                     -pbl.txn_burdened_cost,
8984                     -pbl.txn_revenue,
8985                     -pbl.project_raw_cost,
8986                     -pbl.project_burdened_cost,
8987                     -pbl.project_revenue,
8988                     -pbl.raw_cost,
8989                     -pbl.burdened_cost,
8990                     -pbl.revenue,
8991                     -pbl.quantity,
8992                     pbl.cost_rejection_code    ,
8993                     pbl.revenue_rejection_code ,
8994                     pbl.burden_rejection_code  ,
8995                     pbl.other_rejection_code   ,
8996                     pbl.pc_cur_conv_rejection_code,
8997                     pbl.pfc_cur_conv_rejection_code,
8998                     pbl.resource_assignment_id
8999                     BULK COLLECT INTO
9000                     l_period_name_tbl,
9001                     l_start_date_tbl,
9002                     l_end_date_tbl,
9003                     l_txn_currency_code_tbl,
9004                     l_txn_raw_cost_tbl,
9005                     l_txn_burdened_cost_tbl,
9006                     l_txn_revenue_tbl,
9007                     l_project_raw_cost_tbl,
9008                     l_project_burdened_cost_tbl,
9009                     l_project_revenue_tbl,
9010                     l_raw_cost_tbl,
9011                     l_burdened_cost_tbl,
9012                     l_revenue_tbl,
9013                     l_quantity_tbl,
9014                     l_cost_rejection_code_tbl,
9015                     l_revenue_rejection_code_tbl,
9016                     l_burden_rejection_code_tbl,
9017                     l_other_rejection_code,
9018                     l_pc_cur_conv_rej_code_tbl,
9019                     l_pfc_cur_conv_rej_code_tbl,
9020                     l_resource_assignment_id_tbl;
9021 
9022                 IF l_debug_mode = 'Y' THEN
9023                     pa_debug.g_err_stage:='Deleting all resource assignments for the tasks for which the fla is passed as Y';
9024                     print_msg(pa_debug.g_err_stage,l_module_name);
9025                 END IF;
9026 
9027                 -- IPM changes - populate tmp table to use for deletion later
9028                 IF l_resource_assignment_id_tbl.COUNT > 0 THEN
9029                    FORALL i IN l_resource_assignment_id_tbl.first ..
9030                                l_resource_assignment_id_tbl.last
9031                       INSERT INTO pa_resource_asgn_curr_tmp
9032                         (RA_TXN_ID
9033                         ,RESOURCE_ASSIGNMENT_ID
9034                         ,TXN_CURRENCY_CODE
9035                         ,DELETE_FLAG
9036                         )
9037                         SELECT pa_resource_asgn_curr_s.nextval
9038                               ,l_resource_assignment_id_tbl(i)
9039                               ,l_txn_currency_code_tbl(i)
9040                               ,'Y'
9041                           FROM DUAL;
9042                 END IF;
9043 
9044                 --Bug 4951422. Validate_Delete_Assignment returns the correct resource assignments that should be deleted.
9045 		--Note:
9046                 --that wbs_elememnt_version_id will be populated only for Workplan versions and hence all the checks done in
9047                 --the commented SQL are already done in that API
9048 		FORALL i IN 1..l_task_assmt_ids_tbl.COUNT
9049                   DELETE
9050                   FROM   pa_resource_assignments pra
9051                   WHERE  resource_assignment_id=l_task_assmt_ids_tbl(i)
9052                     RETURNING
9053                       pra.resource_assignment_id,
9054                       pra.task_id,
9055                       pra.rbs_element_id,
9056                       pra.resource_class_code,
9057                       pra.rate_based_flag
9058                     BULK COLLECT INTO
9059                       l_ra_id_in_pra_tbl,
9060                       l_task_id_in_pra_tbl,
9061                       l_rbs_element_id_in_pra_tbl,
9062                       l_res_class_code_in_pra_tbl,
9063                       l_rate_based_flag_in_pra_tbl;
9064 
9065                  -- IPM changes - populate tmp table to use for deletion later
9066                  -- hr_utility.trace('RM DEL4');
9067                  IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
9068                     FORALL i IN l_ra_id_in_pra_tbl.first ..
9069                                 l_ra_id_in_pra_tbl.last
9070                        INSERT INTO pa_resource_asgn_curr_tmp
9071                          (RA_TXN_ID
9072                          ,RESOURCE_ASSIGNMENT_ID
9073                          -- ,TXN_CURRENCY_CODE
9074                          ,DELETE_FLAG
9075                          )
9076                          SELECT pa_resource_asgn_curr_s.nextval
9077                                ,l_ra_id_in_pra_tbl(i)
9078                                -- ,l_txn_currency_code_tbl(i)
9079                                ,'Y'
9080                            FROM DUAL;
9081                  END IF;
9082 		End if; --}
9083 
9084             ELSIF p_task_or_res = 'ASSIGNMENT' THEN
9085 
9086                   IF l_delete_assmt_flag_tbl.count=0 THEN
9087                       IF l_debug_mode = 'Y' THEN
9088                           pa_debug.g_err_stage:='No elements in the l_delete_assmt_flag_tbl';
9089                           print_msg(pa_debug.g_err_stage,l_module_name);
9090                           pa_debug.reset_curr_function;
9091 		      END IF;
9092                       RETURN;
9093                   END IF;
9094 
9095                   IF l_delete_assmt_flag_tbl.count<>p_resource_assignment_tbl.count THEN
9096                         IF l_debug_mode = 'Y' THEN
9097                             pa_debug.g_err_stage:='No of elements in l_delete_task_flag_tbl ';
9098 			    pa_debug.g_err_stage:=pa_debug.g_err_stage||'and p_resource_assignment_tbl dont match';
9099                             print_msg(pa_debug.g_err_stage,l_module_name);
9100                         END IF;
9101                         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9102                                              p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
9103                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9104                   END IF;
9105 
9106                   IF l_debug_mode = 'Y' THEN
9107                      pa_debug.g_err_stage:='Deleting all budget lines for the res assmts for Assignment Context';
9108                      print_msg(pa_debug.g_err_stage,l_module_name);
9109                   END IF;
9110 
9111                  FORALL i IN l_delete_assmt_flag_tbl.first..l_delete_assmt_flag_tbl.last
9112                         DELETE
9113                           FROM  pa_budget_lines pbl
9114                          WHERE  resource_assignment_id=p_resource_assignment_tbl(i)
9115                            AND  l_delete_assmt_flag_tbl(i)='Y'
9116                    AND  ( nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' OR
9117                          (init_quantity is  NULL AND
9118                           txn_init_raw_cost is NULL AND
9119                           txn_init_burdened_cost is NULL AND
9120                           txn_init_revenue is NULL)
9121                         )
9122                  RETURNING
9123                     pbl.period_name,
9124                     pbl.start_date,
9125                     pbl.end_date,
9126                     pbl.txn_currency_code,
9127                     -pbl.txn_raw_cost,
9128                     -pbl.txn_burdened_cost,
9129                     -pbl.txn_revenue,
9130                     -pbl.project_raw_cost,
9131                     -pbl.project_burdened_cost,
9132                     -pbl.project_revenue,
9133                     -pbl.raw_cost,
9134                     -pbl.burdened_cost,
9135                     -pbl.revenue,
9136                     -pbl.quantity,
9137                     pbl.cost_rejection_code    ,
9138                     pbl.revenue_rejection_code ,
9139                     pbl.burden_rejection_code  ,
9140                     pbl.other_rejection_code   ,
9141                     pbl.pc_cur_conv_rejection_code,
9142                     pbl.pfc_cur_conv_rejection_code,
9143                     pbl.resource_assignment_id
9144                     BULK COLLECT INTO
9145                     l_period_name_tbl,
9146                     l_start_date_tbl,
9147                     l_end_date_tbl,
9148                     l_txn_currency_code_tbl,
9149                     l_txn_raw_cost_tbl,
9150                     l_txn_burdened_cost_tbl,
9151                     l_txn_revenue_tbl,
9152                     l_project_raw_cost_tbl,
9153                     l_project_burdened_cost_tbl,
9154                     l_project_revenue_tbl,
9155                     l_raw_cost_tbl,
9156                     l_burdened_cost_tbl,
9157                     l_revenue_tbl,
9158                     l_quantity_tbl,
9159                     l_cost_rejection_code_tbl,
9160                     l_revenue_rejection_code_tbl,
9161                     l_burden_rejection_code_tbl,
9162                     l_other_rejection_code,
9163                     l_pc_cur_conv_rej_code_tbl,
9164                     l_pfc_cur_conv_rej_code_tbl,
9165                     l_resource_assignment_id_tbl;
9166 
9167                  IF l_debug_mode = 'Y' THEN
9168                      pa_debug.g_err_stage:='Deleting all resource assignments for the tasks for which the fla is passed as Y';
9169                      print_msg(pa_debug.g_err_stage,l_module_name);
9170                  END IF;
9171 
9172                  -- IPM changes - populate tmp table to use for deletion later
9173                  -- hr_utility.trace('RM DEL6');
9174                  IF l_resource_assignment_id_tbl.COUNT > 0 THEN
9175                     FORALL i IN l_resource_assignment_id_tbl.first ..
9176                                 l_resource_assignment_id_tbl.last
9177                        INSERT INTO pa_resource_asgn_curr_tmp
9178                          (RA_TXN_ID
9179                          ,RESOURCE_ASSIGNMENT_ID
9180                          -- ,TXN_CURRENCY_CODE
9181                          ,DELETE_FLAG
9182                          )
9183                          SELECT pa_resource_asgn_curr_s.nextval
9184                                ,l_resource_assignment_id_tbl(i)
9185                                -- ,l_txn_currency_code_tbl(i)
9186                                ,'Y'
9187                            FROM DUAL;
9188                  END IF;
9189 
9190                  IF nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
9191 
9192                     FORALL i IN l_delete_assmt_flag_tbl.first..l_delete_assmt_flag_tbl.last
9193                       DELETE
9194                         FROM  pa_resource_assignments pra
9195                        WHERE  resource_assignment_id=p_resource_assignment_tbl(i)
9196                          AND  l_delete_assmt_flag_tbl(i)='Y'
9197                    RETURNING
9198                       pra.resource_assignment_id,
9199                       pra.task_id,
9200                       pra.rbs_element_id,
9201                       pra.resource_class_code,
9202                       pra.rate_based_flag
9203                    BULK COLLECT INTO
9204                       l_ra_id_in_pra_tbl,
9205                       l_task_id_in_pra_tbl,
9206                       l_rbs_element_id_in_pra_tbl,
9207                       l_res_class_code_in_pra_tbl,
9208                       l_rate_based_flag_in_pra_tbl;
9209 
9210                  -- IPM changes - populate tmp table to use for deletion later
9211                  -- hr_utility.trace('RM DEL3');
9212                  IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
9213                     FORALL i IN l_ra_id_in_pra_tbl.first ..
9214                                 l_ra_id_in_pra_tbl.last
9215                        INSERT INTO pa_resource_asgn_curr_tmp
9216                          (RA_TXN_ID
9217                          ,RESOURCE_ASSIGNMENT_ID
9218                          -- ,TXN_CURRENCY_CODE
9219                          ,DELETE_FLAG
9220                          )
9221                          SELECT pa_resource_asgn_curr_s.nextval
9222                                ,l_ra_id_in_pra_tbl(i)
9223                                -- ,l_project_currency_code
9224                                ,'Y'
9225                            FROM DUAL;
9226                  END IF;
9227              END IF;    -- IF nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
9228 
9229             END IF;
9230 
9231     ELSE --The context is not Task Assignment
9232          -- or Workplan -- Bug 3808720
9233 
9234         IF p_task_or_res = 'TASKS' THEN
9235 
9236             IF p_element_version_id_tbl.count=0 THEN
9237               IF l_debug_mode = 'Y' THEN
9238                   pa_debug.g_err_stage:='No elements in the p_element_version_id_tbl';
9239                   print_msg(pa_debug.g_err_stage,l_module_name);
9240                   pa_debug.reset_curr_function;
9241 	    END IF;
9242               RETURN;
9243             END IF;
9244 
9245 
9246             IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
9247                p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST THEN
9248                 l_wp_version_flag:='N';
9249                 l_ta_display_flag:=null;
9250 /*          ELSIF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
9251                 l_wp_version_flag:='Y';
9252                 l_ta_display_flag:='N'; */ --Bug 3808720
9253             END IF;
9254 
9255             IF l_debug_mode = 'Y' THEN
9256                 pa_debug.g_err_stage:='l_wp_version_flag IS '||l_wp_version_flag;
9257                 print_msg(pa_debug.g_err_stage,l_module_name);
9258             END IF;
9259 
9260 
9261             IF p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,
9262                              PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST) THEN
9263 
9264                 -- Bug Fix: 4569365. Removed MRC code.
9265 		null;
9266             END IF;
9267 
9268 
9269 	    If l_budget_version_id is NOT NULL Then --Bug fix:5349668 --{
9270 		IF l_debug_mode = 'Y' THEN
9271                    pa_debug.g_err_stage:='2..Deleting budget lines based on Task element Version Ids';
9272                    print_msg(pa_debug.g_err_stage,l_module_name);
9273                 END IF;
9274             FORALL i IN p_element_version_id_tbl.first..p_element_version_id_tbl.last
9275                 DELETE
9276                 FROM   pa_budget_lines pbl
9277                 WHERE  pbl.resource_assignment_id IN (SELECT pra.resource_assignment_id
9278                                                       FROM   pa_resource_assignments pra,
9279                                                              pa_budget_versions pbv
9280                                                       WHERE  pra.budget_Version_id=pbv.budget_Version_id
9281                                                       AND    nvl(pbv.wp_version_flag,'N')=l_wp_version_flag
9282                                                       AND    pra.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
9283                                                       AND    pbv.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
9284                                                       AND    pra.wbs_element_version_id=p_element_version_id_tbl(i)
9285                                                       AND    nvl(l_ta_display_flag , '-99')=nvl(ta_display_flag,'-99'))
9286                AND pbl.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
9287                  RETURNING
9288                     pbl.period_name,
9289                     pbl.start_date,
9290                     pbl.end_date,
9291                     pbl.txn_currency_code,
9292                     -pbl.txn_raw_cost,
9293                     -pbl.txn_burdened_cost,
9294                     -pbl.txn_revenue,
9295                     -pbl.project_raw_cost,
9296                     -pbl.project_burdened_cost,
9297                     -pbl.project_revenue,
9298                     -pbl.raw_cost,
9299                     -pbl.burdened_cost,
9300                     -pbl.revenue,
9301                     -pbl.quantity,
9302                     pbl.cost_rejection_code    ,
9303                     pbl.revenue_rejection_code ,
9304                     pbl.burden_rejection_code  ,
9305                     pbl.other_rejection_code   ,
9306                     pbl.pc_cur_conv_rejection_code,
9307                     pbl.pfc_cur_conv_rejection_code,
9308                     pbl.resource_assignment_id
9309                     BULK COLLECT INTO
9310                     l_period_name_tbl,
9311                     l_start_date_tbl,
9312                     l_end_date_tbl,
9313                     l_txn_currency_code_tbl,
9314                     l_txn_raw_cost_tbl,
9315                     l_txn_burdened_cost_tbl,
9316                     l_txn_revenue_tbl,
9317                     l_project_raw_cost_tbl,
9318                     l_project_burdened_cost_tbl,
9319                     l_project_revenue_tbl,
9320                     l_raw_cost_tbl,
9321                     l_burdened_cost_tbl,
9322                     l_revenue_tbl,
9323                     l_quantity_tbl,
9324                     l_cost_rejection_code_tbl,
9325                     l_revenue_rejection_code_tbl,
9326                     l_burden_rejection_code_tbl,
9327                     l_other_rejection_code,
9328                     l_pc_cur_conv_rej_code_tbl,
9329                     l_pfc_cur_conv_rej_code_tbl,
9330                     l_resource_assignment_id_tbl;
9331 
9332                  -- IPM changes - populate tmp table to use for deletion later
9333                  -- hr_utility.trace('RM DEL5');
9334                  IF l_resource_assignment_id_tbl.COUNT > 0 THEN
9335                     FORALL i IN l_resource_assignment_id_tbl.first ..
9336                                 l_resource_assignment_id_tbl.last
9337                        INSERT INTO pa_resource_asgn_curr_tmp
9338                          (RA_TXN_ID
9339                          ,RESOURCE_ASSIGNMENT_ID
9340                          -- ,TXN_CURRENCY_CODE
9341                          ,DELETE_FLAG
9342                          )
9343                          SELECT pa_resource_asgn_curr_s.nextval
9344                                ,l_resource_assignment_id_tbl(i)
9345                                -- ,l_txn_currency_code_tbl(i)
9346                                ,'Y'
9347                            FROM DUAL;
9348                  END IF;
9349 	    End If; --}
9350 
9351             IF l_debug_mode = 'Y' THEN
9352                 pa_debug.g_err_stage:='Deleting all   res assmts for which the flag is passed as Y';
9353 		print_msg(pa_debug.g_err_stage,l_module_name);
9354             END IF;
9355 
9356 	    If p_element_version_id_tbl.COUNT > 0 AND l_budget_version_id is NOT NULL Then --Bug fix:5349668 --{
9357             	FORALL i IN p_element_version_id_tbl.first..p_element_version_id_tbl.last
9358                 DELETE
9359                 FROM   pa_resource_assignments pra
9360                 WHERE pra.wbs_element_version_id=p_element_version_id_tbl(i)
9361                 AND   EXISTS (SELECT 'X'
9362                               FROM   pa_budget_Versions pbv
9363                               WHERE  pbv.budget_version_id=pra.budget_Version_id
9364                               AND    pbv.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
9365                               AND    nvl(pbv.wp_version_flag,'N')=l_wp_version_flag
9366                               AND    nvl(l_ta_display_flag , '-99')=nvl(ta_display_flag,'-99'))
9367                 AND pra.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
9368                 RETURNING
9369                 pra.resource_assignment_id,
9370                 pra.task_id,
9371                 pra.rbs_element_id,
9372                 pra.resource_class_code,
9373                 pra.rate_based_flag
9374                 BULK COLLECT INTO
9375                 l_ra_id_in_pra_tbl,
9376                 l_task_id_in_pra_tbl,
9377                 l_rbs_element_id_in_pra_tbl,
9378                 l_res_class_code_in_pra_tbl,
9379                 l_rate_based_flag_in_pra_tbl;
9380 
9381                 -- IPM changes - populate tmp table to use for deletion later
9382                 -- hr_utility.trace('RM DEL8');
9383                 IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
9384                    FORALL i IN l_ra_id_in_pra_tbl.first ..
9385                                l_ra_id_in_pra_tbl.last
9386                       INSERT INTO pa_resource_asgn_curr_tmp
9387                         (RA_TXN_ID
9388                         ,RESOURCE_ASSIGNMENT_ID
9389                         -- ,TXN_CURRENCY_CODE
9390                         ,DELETE_FLAG
9391                         )
9392                         SELECT pa_resource_asgn_curr_s.nextval
9393                               ,l_ra_id_in_pra_tbl(i)
9394                               -- ,l_project_currency_code
9395                               ,'Y'
9396                           FROM DUAL;
9397                  END IF;
9398 	    End If; --}
9399 
9400 
9401         ELSIF p_task_or_res = 'ASSIGNMENT' THEN
9402 
9403             IF p_resource_assignment_tbl.count=0 THEN
9404               IF l_debug_mode = 'Y' THEN
9405                   pa_debug.g_err_stage:='No elements in the p_resource_assignment_tbl';
9406                   print_msg(pa_debug.g_err_stage,l_module_name);
9407                   pa_debug.reset_curr_function;
9408 	      END IF;
9409               RETURN;
9410             END IF;
9411 
9412             l_currency_code_tbl.extend(p_resource_assignment_tbl.COUNT);
9413 
9414             IF p_currency_code_tbl.COUNT > 0 THEN --If Currnecy Code is Passed.
9415                 IF p_resource_assignment_tbl.count <> p_currency_code_tbl.COUNT THEN --Count Should be equal to ra id count
9416                    IF l_debug_mode = 'Y' THEN
9417                       pa_debug.g_err_stage:='Count Mismatch for currency code and Reource Assignment';
9418                       print_msg(pa_debug.g_err_stage,l_module_name);
9419                    END IF;
9420                    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9421                                         p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
9422                                         p_token1         => 'PROCEDURENAME',
9423                                         p_value1         => 'PAFPPTPB.Delete_planning_transactions',
9424                                         p_token2         => 'STAGE',
9425                                         p_value2         => 'Curr Code - RA Mismatch');
9426                    RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9427                 END IF;
9428 
9429                 l_currency_code_tbl := p_currency_code_tbl;
9430 
9431             END IF;
9432 
9433             --Checking for the existence of budget lines for the element version ids passed. Bug 3589130
9434             IF p_validate_delete_flag='Y' THEN
9435 
9436                 IF l_debug_mode = 'Y' THEN
9437                     pa_debug.g_err_stage:='Checking for the existence of budget lines';
9438                     print_msg(pa_debug.g_err_stage,l_module_name);
9439                 END IF;
9440 
9441                 BEGIN
9442                     FOR i IN p_resource_assignment_tbl.first..p_resource_assignment_tbl.last LOOP
9443 
9444                         l_exists:='N';
9445 
9446                         BEGIN
9447                             SELECT 'Y'
9448                             INTO   l_exists
9449                             FROM   DUAL
9450                             WHERE  EXISTS (SELECT 'X'
9451                                            FROM   pa_budget_lines pbl,
9452                                                   pa_resource_assignments pra
9453                                            WHERE  pra.resource_assignment_id=p_resource_assignment_tbl(i)
9454                                            AND    pbl.budget_Version_id=pra.budget_version_id
9455                                            AND    pbl.resource_assignment_id=pra.resource_assignment_id);
9456                         EXCEPTION
9457                         WHEN NO_DATA_FOUND THEN
9458                             l_exists:='N';
9459                         END;
9460 
9461                         IF l_exists='Y' THEN
9462 
9463                             RAISE SKIP_LOOP;
9464 
9465                         END IF;
9466 
9467                     END LOOP;
9468 
9469                 EXCEPTION
9470                 WHEN SKIP_LOOP THEN
9471                     IF l_debug_mode = 'Y' THEN
9472                         pa_debug.g_err_stage:='Budget lines exist for the resource assignment id passed '||p_resource_assignment_tbl(i);
9473                         print_msg(pa_debug.g_err_stage,l_module_name);
9474                     END IF;
9475                     PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9476                                          p_msg_name       => 'PA_FP_AMT_EXISTS_FOR_PLAN_ELEM');
9477                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9478                 END;
9479 
9480             END IF ; --IF p_validate_delete_flag='Y' THEN
9481 
9482             IF p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,
9483                              PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST) THEN
9484               NULL;
9485                 -- Bug Fix: 4569365. Removed MRC code.
9486             END IF;
9487 
9488             IF l_debug_mode = 'Y' THEN
9489                 pa_debug.g_err_stage:='Deleting all  budget lines ';
9490                 print_msg(pa_debug.g_err_stage,l_module_name);
9491             END IF;
9492 
9493             FORALL i IN p_resource_assignment_tbl.first..p_resource_assignment_tbl.last
9494                 DELETE
9495                 FROM   pa_budget_lines pbl
9496                 WHERE  pbl.resource_assignment_id=p_resource_assignment_tbl(i)
9497                   AND  ( nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' OR
9498                         (init_quantity is  NULL AND
9499                          txn_init_raw_cost is NULL AND
9500                          txn_init_burdened_cost is NULL AND
9501                          txn_init_revenue is NULL)
9502                        )
9503                   AND nvl(l_currency_code_tbl(i),pbl.txn_currency_code) = pbl.txn_currency_code -- 3719918
9504                 RETURNING
9505                     pbl.period_name,
9506                     pbl.start_date,
9507                     pbl.end_date,
9508                     pbl.txn_currency_code,
9509                     -pbl.txn_raw_cost,
9510                     -pbl.txn_burdened_cost,
9511                     -pbl.txn_revenue,
9512                     -pbl.project_raw_cost,
9513                     -pbl.project_burdened_cost,
9514                     -pbl.project_revenue,
9515                     -pbl.raw_cost,
9516                     -pbl.burdened_cost,
9517                     -pbl.revenue,
9518                     -pbl.quantity,
9519                     pbl.cost_rejection_code    ,
9520                     pbl.revenue_rejection_code ,
9521                     pbl.burden_rejection_code  ,
9522                     pbl.other_rejection_code   ,
9523                     pbl.pc_cur_conv_rejection_code,
9524                     pbl.pfc_cur_conv_rejection_code,
9525                     pbl.resource_assignment_id
9526                     BULK COLLECT INTO
9527                     l_period_name_tbl,
9528                     l_start_date_tbl,
9529                     l_end_date_tbl,
9530                     l_txn_currency_code_tbl,
9531                     l_txn_raw_cost_tbl,
9532                     l_txn_burdened_cost_tbl,
9533                     l_txn_revenue_tbl,
9534                     l_project_raw_cost_tbl,
9535                     l_project_burdened_cost_tbl,
9536                     l_project_revenue_tbl,
9537                     l_raw_cost_tbl,
9538                     l_burdened_cost_tbl,
9539                     l_revenue_tbl,
9540                     l_quantity_tbl,
9541                     l_cost_rejection_code_tbl,
9542                     l_revenue_rejection_code_tbl,
9543                     l_burden_rejection_code_tbl,
9544                     l_other_rejection_code,
9545                     l_pc_cur_conv_rej_code_tbl,
9546                     l_pfc_cur_conv_rej_code_tbl,
9547                     l_resource_assignment_id_tbl;
9548 
9549                     -- IPM changes populate tmp table to use for deletion later
9550                     -- hr_utility.trace('RM DEL1');
9551                     IF l_resource_assignment_id_tbl.COUNT > 0 THEN
9552                        FORALL i IN l_resource_assignment_id_tbl.first ..
9553                                    l_resource_assignment_id_tbl.last
9554                           INSERT INTO pa_resource_asgn_curr_tmp
9555                             (RA_TXN_ID
9556                             ,RESOURCE_ASSIGNMENT_ID
9557                             ,TXN_CURRENCY_CODE -- Bug 5057010
9558                             ,DELETE_FLAG
9559                             )
9560                             SELECT pa_resource_asgn_curr_s.nextval
9561                                   ,l_resource_assignment_id_tbl(i)
9562                                   ,l_txn_currency_code_tbl(i) -- Bug 5057010
9563                                   ,'Y'
9564                               FROM DUAL;
9565                     END IF;
9566 
9567             IF nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
9568 
9569                 IF l_debug_mode = 'Y' THEN
9570                     pa_debug.g_err_stage:='Deleting all   res assmts for which the flag is passed as Y';
9571                     print_msg(pa_debug.g_err_stage,l_module_name);
9572                 END IF;
9573 
9574               FORALL i IN p_resource_assignment_tbl.first..p_resource_assignment_tbl.last
9575                     DELETE
9576                     FROM   pa_resource_assignments pra
9577                     WHERE  pra.resource_assignment_id=p_resource_assignment_tbl(i)
9578                       AND  (l_currency_code_tbl(i) IS NULL
9579                             OR
9580                             NOT EXISTS ( SELECT 'EXISTS'
9581                                            FROM PA_BUDGET_LINES PBL
9582                                           WHERE PBL.RESOURCE_ASSIGNMENT_ID = pra.resource_assignment_id))
9583                     RETURNING
9584                     pra.resource_assignment_id,
9585                     pra.task_id,
9586                     pra.rbs_element_id,
9587                     pra.resource_class_code,
9588                     pra.rate_based_flag
9589                     BULK COLLECT INTO
9590                     l_ra_id_in_pra_tbl,
9591                     l_task_id_in_pra_tbl,
9592                     l_rbs_element_id_in_pra_tbl,
9593                     l_res_class_code_in_pra_tbl,
9594                     l_rate_based_flag_in_pra_tbl;
9595 
9596                  -- hr_utility.trace('RM DEL2');
9597                  -- IPM changes - populate temp table for deletion
9598                  IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
9599                     FORALL i IN l_ra_id_in_pra_tbl.first ..
9600                                 l_ra_id_in_pra_tbl.last
9601                        INSERT INTO pa_resource_asgn_curr_tmp
9602                          (RA_TXN_ID
9603                          ,RESOURCE_ASSIGNMENT_ID
9604                          -- ,TXN_CURRENCY_CODE
9605                          ,DELETE_FLAG
9606                          )
9607                          SELECT pa_resource_asgn_curr_s.nextval
9608                                ,l_ra_id_in_pra_tbl(i)
9609                                -- ,l_project_currency_code
9610                                ,'Y'
9611                            FROM DUAL;
9612                  END IF;
9613 
9614         END IF;-- IF nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
9615 
9616         END IF;-- IF p_task_or_res = 'TASKS' THEN
9617 
9618     END IF;--IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
9619 
9620     --Rollup the amounts to budget versions as some of the budget lines with amounts might have got
9621     --deleted
9622     IF l_debug_mode = 'Y' THEN
9623         pa_debug.g_err_stage:='No of Rec Deleted from RA : ' || l_ra_id_in_pra_tbl.COUNT;
9624         print_msg(pa_debug.g_err_stage,l_module_name);
9625         IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
9626            FOR i in l_ra_id_in_pra_tbl.FIRST .. l_ra_id_in_pra_tbl.LAST LOOP
9627                pa_debug.g_err_stage:='Deleted RA Id : ' || l_ra_id_in_pra_tbl(i);
9628                print_msg(pa_debug.g_err_stage,l_module_name);
9629            END LOOP;
9630         END IF;
9631     END IF;
9632 
9633     -- IPM changes - delete from new entity  --{
9634     -- new entity maintenance api to be called before call to pa_fp_rollup_pkg.rollup_budget_version.
9635     -- Call new entity maintenance api for the budget version id (which has to be derived),
9636     -- if records have been inserted in pa_Resource_asgn_curr_tmp, in the delete flow.
9637     -- Note: Deriving l_budget_version_id may not be the right approach as we avoid calling BV/RA
9638     --   rollup api and pji api when l_budget_version_id is null (No BLs deleted)
9639     IF l_budget_version_id IS NOT NULL THEN
9640         pa_debug.g_err_stage:='Calling pa_fp_gen_amount_utils.get_plan_version_dtls:bv_id ' || l_budget_version_id;
9641         print_msg(pa_debug.g_err_stage,l_module_name);
9642 
9643      pa_fp_gen_amount_utils.get_plan_version_dtls
9644         (p_project_id         => l_project_id,
9645          p_budget_version_id  => l_budget_version_id,
9646          x_fp_cols_rec        => l_fp_cols_rec,
9647          x_return_status      => x_return_status,
9648          x_msg_count          => x_msg_count,
9649          x_msg_data           => x_msg_data);
9650 
9651      IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9652 
9653        IF l_debug_mode = 'Y' THEN
9654           pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
9655           print_msg(pa_debug.g_err_stage,l_module_name);
9656        END IF;
9657        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9658      END IF;
9659 
9660         pa_debug.g_err_stage:='Calling pa_res_asg_currency_pub.maintain_data:bv_id ' || l_budget_version_id;
9661         print_msg(pa_debug.g_err_stage,l_module_name);
9662 
9663      pa_res_asg_currency_pub.maintain_data(
9664          p_fp_cols_rec                  => l_fp_cols_rec,
9665          p_calling_module               => 'UPDATE_PLAN_TRANSACTION',
9666          p_delete_flag                  => 'Y',
9667          p_copy_flag                    => 'N',
9668          p_src_version_id               => NULL,
9669          p_copy_mode                    => NULL,
9670          p_rollup_flag                  => 'N',
9671          p_version_level_flag           => 'N',
9672          p_called_mode                  => 'SELF_SERVICE',
9673          x_return_status                => x_return_status,
9674          x_msg_count                    => x_msg_count,
9675          x_msg_data                     => x_msg_data
9676          );
9677 
9678      IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9679 
9680        IF l_debug_mode = 'Y' THEN
9681           pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
9682           print_msg(pa_debug.g_err_stage,l_module_name);
9683        END IF;
9684        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9685      END IF;
9686 
9687     END IF; --} IPM
9688 
9689     --The code below will call budget version rollup and PJI APIs. These APIs should not be called if the input
9690     --parameter p_rollup_required_flag is N. For bug 3937716
9691     IF p_rollup_required_flag = 'Y' THEN
9692 
9693         /* If there was nothing to delete, l_budget_version_id would be null and rollup need not be done for that case */
9694 
9695        --Added for bug 4160258
9696        IF (p_calling_module = 'PROCESS_RES_CHG_DERV_CALC_PRMS') THEN
9697          l_mode := null;
9698        ELSIF (p_currency_code_tbl.COUNT = 0) THEN
9699          l_mode := 'DELETE_RA';
9700        ELSE
9701         l_mode := null;
9702        END IF;
9703 
9704         IF l_budget_version_id IS NOT NULL THEN
9705         pa_debug.g_err_stage:='Calling PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION:l_budget_version_id '||l_budget_version_id;
9706         print_msg(pa_debug.g_err_stage,l_module_name);
9707 
9708              PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION
9709              ( p_budget_version_id     => l_budget_version_id
9710               ,p_entire_version        => 'Y'
9711               ,p_context               => l_mode             -- Bug 4160258
9712               ,x_return_status         => x_return_status
9713               ,x_msg_count             => l_msg_count
9714               ,x_msg_data              => l_msg_data);
9715 
9716              IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9717                  IF l_debug_mode = 'Y' THEN
9718                      pa_debug.g_err_stage:='The API PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION returned error';
9719                      print_msg(pa_debug.g_err_stage,l_module_name);
9720                  END IF;
9721                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9722              END IF;
9723 
9724         END IF;
9725     END IF; /* p_rollup_required_flag = Y */
9726 
9727 
9728     /* Bug 4200168: Reporting lines rollup api would only be called if p_pji_rollup_required is
9729      * passed as Y */
9730     IF p_pji_rollup_required = 'Y'
9731 	AND l_budget_version_id is NOT NULL THEN -- Bug 5381920
9732 
9733         --Call the Reporting Lines API only if the version is not a CI version
9734         IF l_ci_id IS NULL THEN
9735 
9736             IF l_resource_assignment_id_tbl.count >0 THEN
9737 
9738                 IF l_debug_mode = 'Y' THEN
9739                     pa_debug.g_err_stage:='Prepare pl/sql tables for rbs element id and task id';
9740                    print_msg(pa_debug.g_err_stage,l_module_name);
9741                 END IF;
9742 
9743                 --Prepare the pl/sql tables for task id, rbs element id , resource class code and rate based flag.
9744                 --These pl/sql tables should be same in length to the pl/sql tables prepared while deleting the budget
9745                 --lines. This can be done by looping thru the l_resource_assignment_id_tbl and looking for a matching
9746                 --ra id in l_ra_id_in_pra_tbl If a matching ra id is not found in l_ra_id_in_pra_tbl then data
9747                 -- is fetched directly from pa_resource_assignments for ra id in l_resource_assignment_id_tbl.
9748                 l_ra_index:=1;
9749                 l_counter:=0;--This is used just to keep track of the length of the pl/sql tables being prepared
9750 
9751                 l_task_id_tbl.EXTEND(l_resource_assignment_id_tbl.last);
9752                 l_rbs_element_id_tbl.EXTEND(l_resource_assignment_id_tbl.last);
9753                 l_res_class_code_tbl.EXTEND(l_resource_assignment_id_tbl.last);
9754                 l_rate_based_flag_tbl.EXTEND(l_resource_assignment_id_tbl.last);
9755 
9756                 FOR i IN l_resource_assignment_id_tbl.FIRST..l_resource_assignment_id_tbl.LAST LOOP
9757                    --For bug 3840150
9758                     l_ra_index:=1;
9759                     LOOP
9760                         IF l_ra_id_in_pra_tbl.EXISTS(l_ra_index) THEN
9761                            IF l_ra_id_in_pra_tbl(l_ra_index) = l_resource_assignment_id_tbl(i) THEN
9762                               IF l_debug_mode = 'Y' THEN
9763                                   pa_debug.g_err_stage:='Stepping In - l_ra_index : '||l_ra_index;
9764                                   print_msg(pa_debug.g_err_stage,l_module_name);
9765                               END IF;
9766                               l_task_id                    := l_task_id_in_pra_tbl(l_ra_index);
9767                               l_rbs_element_id             := l_rbs_element_id_in_pra_tbl(l_ra_index);
9768                               l_res_class_code             := l_res_class_code_in_pra_tbl(l_ra_index);
9769                               l_rate_based_flag            := l_rate_based_flag_in_pra_tbl(l_ra_index);
9770                               EXIT; --Exit LOOP
9771                            ELSE
9772                                 IF l_debug_mode = 'Y' THEN
9773                                     pa_debug.g_err_stage:='Stepping Over - l_ra_index : '||l_ra_index;
9774                                     print_msg(pa_debug.g_err_stage,l_module_name);
9775                                 END IF;
9776                                 l_ra_index:=l_ra_index+1;
9777                            END IF;
9778                         ELSE
9779                               BEGIN
9780                                    IF l_debug_mode = 'Y' THEN
9781                                        pa_debug.g_err_stage:='Fetching Data from PA Res Assignment';
9782                                        print_msg(pa_debug.g_err_stage,l_module_name);
9783                                    END IF;
9784                                    SELECT TASK_ID,
9785                                           RBS_ELEMENT_ID,
9786                                           RESOURCE_CLASS_CODE,
9787                                           RATE_BASED_FLAG
9788                                      INTO l_task_id,
9789                                           l_rbs_element_id,
9790                                           l_res_class_code,
9791                                           l_rate_based_flag
9792                                      FROM PA_RESOURCE_ASSIGNMENTS
9793                                     WHERE RESOURCE_ASSIGNMENT_ID = l_resource_assignment_id_tbl(i);
9794 
9795                                     EXIT; --Exit LOOP
9796 
9797                               EXCEPTION
9798                                   WHEN NO_DATA_FOUND THEN
9799                                        IF l_debug_mode = 'Y' THEN
9800                                            pa_debug.g_err_stage:='No Data Found in RA Table for Bl deleted.';
9801                                            print_msg(pa_debug.g_err_stage,l_module_name);
9802                                        END IF;
9803                                        RAISE;
9804                               END;
9805                         END IF;
9806                     END LOOP;
9807 
9808                     IF l_debug_mode = 'Y' THEN
9809                         pa_debug.g_err_stage:='Data for Update Rep Lines';
9810                         print_msg(pa_debug.g_err_stage,l_module_name);
9811 
9812                         pa_debug.g_err_stage:='l_task_id '||l_task_id;
9813                         print_msg(pa_debug.g_err_stage,l_module_name);
9814 
9815                         pa_debug.g_err_stage:='l_rbs_element_id '||l_rbs_element_id;
9816                         print_msg(pa_debug.g_err_stage,l_module_name);
9817 
9818                         pa_debug.g_err_stage:='l_res_class_code '||l_res_class_code;
9819                         print_msg(pa_debug.g_err_stage,l_module_name);
9820 
9821                         pa_debug.g_err_stage:='l_rate_based_flag '||l_rate_based_flag;
9822                         print_msg(pa_debug.g_err_stage,l_module_name);
9823                     END IF;
9824 
9825                     l_task_id_tbl(i)         :=l_task_id;
9826                     l_rbs_element_id_tbl(i)  :=l_rbs_element_id;
9827                     l_res_class_code_tbl(i)  :=l_res_class_code;
9828                     l_rate_based_flag_tbl(i) :=l_rate_based_flag;
9829                     l_counter:=l_counter+1;
9830 
9831                 END LOOP;
9832 
9833                 IF l_counter <> l_resource_assignment_id_tbl.COUNT THEN
9834 
9835                     IF l_debug_mode = 'Y' THEN
9836                         pa_debug.g_err_stage:='Error in preparing pl/sql tables for rbs element id and task id ';
9837 			print_msg(pa_debug.g_err_stage,l_module_name);
9838                     END IF;
9839 
9840                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9841 
9842                 END IF;
9843 
9844                 IF l_debug_mode = 'Y' THEN
9845                     pa_debug.g_err_stage:='No of rows deleted from pa_budget_lines= '||l_resource_assignment_id_tbl.count;
9846 		    print_msg(pa_debug.g_err_stage,l_module_name);
9847                 END IF;
9848 
9849                 pa_planning_transaction_utils.call_update_rep_lines_api
9850                 ( p_source                       =>    'PL-SQL'
9851                  ,p_budget_Version_id            =>     l_budget_version_id
9852                  ,p_resource_assignment_id_tbl   =>     l_resource_assignment_id_tbl
9853                  ,p_period_name_tbl              =>     l_period_name_tbl
9854                  ,p_start_date_tbl               =>     l_start_date_tbl
9855                  ,p_end_date_tbl                 =>     l_end_date_tbl
9856                  ,p_txn_currency_code_tbl        =>     l_txn_currency_code_tbl
9857                  ,p_txn_raw_cost_tbl             =>     l_txn_raw_cost_tbl
9858                  ,p_txn_burdened_cost_tbl        =>     l_txn_burdened_cost_tbl
9859                  ,p_txn_revenue_tbl              =>     l_txn_revenue_tbl
9860                  ,p_project_raw_cost_tbl         =>     l_project_raw_cost_tbl
9861                  ,p_project_burdened_cost_tbl    =>     l_project_burdened_cost_tbl
9862                  ,p_project_revenue_tbl          =>     l_project_revenue_tbl
9863                  ,p_raw_cost_tbl                 =>     l_raw_cost_tbl
9864                  ,p_burdened_cost_tbl            =>     l_burdened_cost_tbl
9865                  ,p_revenue_tbl                  =>     l_revenue_tbl
9866                  ,p_cost_rejection_code_tbl      =>     l_cost_rejection_code_tbl
9867                  ,p_revenue_rejection_code_tbl   =>     l_revenue_rejection_code_tbl
9868                  ,p_burden_rejection_code_tbl    =>     l_burden_rejection_code_tbl
9869                  ,p_other_rejection_code         =>     l_other_rejection_code
9870                  ,p_pc_cur_conv_rej_code_tbl     =>     l_pc_cur_conv_rej_code_tbl
9871                  ,p_pfc_cur_conv_rej_code_tbl    =>     l_pfc_cur_conv_rej_code_tbl
9872                  ,p_quantity_tbl                 =>     l_quantity_tbl
9873                  ,p_rbs_element_id_tbl           =>     l_rbs_element_id_tbl
9874                  ,p_task_id_tbl                  =>     l_task_id_tbl
9875                  ,p_res_class_code_tbl           =>     l_res_class_code_tbl
9876                  ,p_rate_based_flag_tbl          =>     l_rate_based_flag_tbl
9877                  ,x_return_status                =>     x_return_status
9878                  ,x_msg_data                     =>     x_msg_data
9879                  ,x_msg_count                    =>     x_msg_count    );
9880 
9881                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9882                     IF l_debug_mode = 'Y' THEN
9883                         pa_debug.g_err_stage:='The API pa_planning_transaction_utils.call_update_rep_lines_api returned error';
9884 			print_msg(pa_debug.g_err_stage,l_module_name);
9885                     END IF;
9886                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9887                 END IF;
9888 
9889             END IF;-- IF l_resource_assignment_id_tbl.count >0 THEN
9890 
9891         END IF;--IF l_ci_id IS NULL THEN
9892 
9893     END IF;--IF p_pji_rollup_required = 'Y' THEN /* Bug 4200168 */
9894 
9895 -- Bug Fix 4635951
9896 -- Commenting out the below select as it has been moved into the below IF condition
9897 -- and it was a left out and this stranded select is causing this bug.
9898 
9899         IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
9900             AND PA_TASK_ASSIGNMENT_UTILS.Is_Progress_Rollup_Required(l_project_id) = 'Y') OR -- 5198662
9901            (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
9902             AND pa_task_assignment_utils.g_require_progress_rollup = 'Y')) AND
9903            l_budget_version_id IS NOT NULL THEN -- Bug 5381920
9904 
9905 	    IF l_debug_mode = 'Y' THEN
9906                 pa_debug.g_err_stage:='Calling PA_PROJ_TASK_STRUC_PUB.process_wbs_updates_wrp API';
9907                 print_msg(pa_debug.g_err_stage,l_module_name);
9908             END IF;
9909 
9910              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
9911                 ( p_calling_context       => 'ASGMT_PLAN_CHANGE'
9912                  ,p_project_id              => l_project_id
9913                  ,p_structure_version_id   => pa_project_structure_utils.get_latest_wp_version(l_project_id)
9914                  ,p_pub_struc_ver_id      => pa_project_structure_utils.get_latest_wp_version(l_project_id)
9915                  ,x_return_status                =>     x_return_status
9916                  ,x_msg_data                     =>     x_msg_data
9917                  ,x_msg_count                    =>     x_msg_count    );
9918 
9919              pa_task_assignment_utils.g_require_progress_rollup := 'N';
9920 
9921         END IF;
9922         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9923             IF l_debug_mode = 'Y' THEN
9924                 pa_debug.g_err_stage:='After Called process_wbs_updates_wrp:retSts['||x_return_status||']';
9925 		print_msg(pa_debug.g_err_stage,l_module_name);
9926             END IF;
9927 
9928             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9929         END IF;
9930 --End bug 4492493
9931 
9932     IF l_debug_mode = 'Y' THEN
9933         pa_debug.g_err_stage:='Exiting delete_planning_transactions';
9934 	print_msg(pa_debug.g_err_stage,l_module_name);
9935     -- reset curr function
9936         pa_debug.reset_curr_function;
9937     END IF;
9938 EXCEPTION
9939 
9940    WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
9941        l_msg_count := FND_MSG_PUB.count_msg;
9942        IF l_msg_count = 1 THEN
9943            PA_INTERFACE_UTILS_PUB.get_messages
9944                  (p_encoded        => FND_API.G_TRUE
9945                   ,p_msg_index      => 1
9946                   ,p_msg_count      => l_msg_count
9947                   ,p_msg_data       => l_msg_data
9948                   ,p_data           => l_data
9949                   ,p_msg_index_out  => l_msg_index_out);
9950 
9951            x_msg_data := l_data;
9952            x_msg_count := l_msg_count;
9953        ELSE
9954            x_msg_count := l_msg_count;
9955        END IF;
9956 
9957        x_return_status := FND_API.G_RET_STS_ERROR;
9958 
9959        IF l_debug_mode = 'Y' THEN
9960            pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
9961 	   print_msg(pa_debug.g_err_stage,l_module_name);
9962         -- reset curr function
9963           pa_debug.reset_curr_function;
9964        END IF;
9965        RETURN;
9966     WHEN OTHERS THEN
9967         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9968         x_msg_count     := 1;
9969         x_msg_data      := SQLERRM;
9970 
9971         FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'pa_fp_planning_transaction_pub'
9972                                 ,p_procedure_name  => 'delete_planning_transactions');
9973 
9974         IF l_debug_mode = 'Y' THEN
9975            pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
9976            print_msg(pa_debug.g_err_stage,l_module_name);
9977         -- reset curr function
9978         pa_debug.Reset_Curr_Function();
9979         END IF;
9980         RAISE;
9981 END delete_planning_transactions;
9982 
9983 
9984 /*=====================================================================
9985 Procedure Name:      ADD_WP_PLAN_TYPE
9986 Purpose:             This API checks if a Work Plan type is present in
9987                      the system.If is it not then it throws a error.
9988                      If WorkPlan Type is not attached to the project
9989                      then it attaches it.
9990                      This would be called when workplan is enabled for
9991                      a project or template.
9992 Parameters:(Note that all the input parameters are mandatory)
9993 IN                   1)p_src_project_id   IN pa_projects_all.project_id%TYPE
9994 IN                   2)p_targ_project_id  IN pa_projects_all.project_id%TYPE
9995 =======================================================================*/
9996 PROCEDURE  Add_wp_plan_type
9997   (
9998        p_src_project_id               IN       pa_projects_all.project_id%TYPE
9999       ,p_targ_project_id              IN       pa_projects_all.project_id%TYPE
10000       ,x_return_status                OUT      NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10001       ,x_msg_count                    OUT      NOCOPY NUMBER --File.Sql.39 bug 4440895
10002       ,x_msg_data                     OUT      NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10003   ) AS
10004 
10005   --Start of variables used for debugging
10006       l_msg_count          NUMBER :=0;
10007       l_data               VARCHAR2(2000);
10008       l_msg_data           VARCHAR2(2000);
10009       l_error_msg_code     VARCHAR2(30);
10010       l_msg_index_out      NUMBER;
10011       l_return_status      VARCHAR2(2000);
10012       l_debug_mode         VARCHAR2(30);
10013   --End of variables used for debugging
10014 
10015       l_wp_type_id              NUMBER :=0;
10016       l_proj_wp_type_exists     NUMBER :=0;
10017       l_proj_fp_options_id      pa_proj_fp_options.proj_fp_options_id%TYPE;
10018       l_projfunc_currency_code  pa_projects_all.projfunc_currency_code%type;
10019       l_proj_currency_code      pa_projects_all.project_currency_code%type;
10020       l_appr_rev_plan_type_flag pa_fin_plan_types_b.approved_rev_plan_type_flag %TYPE;
10021 
10022       l_plan_in_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
10023       l_src_fp_option_id        pa_proj_fp_options.proj_fp_options_id%TYPE;
10024 BEGIN
10025 
10026     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
10027     l_debug_mode := NVL(l_debug_mode, 'N');
10028     x_msg_count := 0;
10029     x_return_status := FND_API.G_RET_STS_SUCCESS;
10030 IF l_debug_mode = 'Y' THEN
10031     PA_DEBUG.Set_Curr_Function( p_function   => 'PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type',
10032                                 p_debug_mode => l_debug_mode );
10033 END IF;
10034  ---------------------------------------------------------------
10035 -- validating input parameter p_project_id.
10036 -- p_project_id cannot be passed as null.
10037 ---------------------------------------------------------------
10038     IF l_debug_mode = 'Y' THEN
10039        pa_debug.g_err_stage:='Validating input parameters';
10040        pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10041     END IF;
10042 
10043     IF (p_src_project_id IS NULL) OR
10044        (p_targ_project_id IS NULL) THEN
10045         IF l_debug_mode = 'Y' THEN
10046               pa_debug.g_err_stage:='Invalid Arguments Passed - src and targ Project Ids are null';
10047               pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,5);
10048         END IF;
10049         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10050                              p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
10051         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10052     END IF;
10053 
10054  ---------------------------------------------------------------
10055  -- checking if a workplan type is present in the system with
10056  -- enable_wp_flag = 'Y'
10057  ---------------------------------------------------------------
10058 
10059       IF l_debug_mode = 'Y' THEN
10060         pa_debug.g_err_stage:='checking availability of a wp type';
10061         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10062       END IF;
10063 
10064      ---------------------------------------------------------
10065      -- In case of no data found, the exception handling block
10066      -- shall throw PA_FP_NO_WP_PLAN_TYPE.
10067      ---------------------------------------------------------
10068      BEGIN -- BLOCK to check if workplan_type is is present in the system- Starts
10069 
10070      SELECT fin_plan_type_id,approved_rev_plan_type_flag
10071        INTO l_wp_type_id,l_appr_rev_plan_type_flag
10072        FROM pa_fin_plan_types_b
10073       WHERE nvl(use_for_workplan_flag,'N') = 'Y';
10074 
10075      EXCEPTION
10076 
10077           WHEN NO_DATA_FOUND THEN
10078                IF l_debug_mode = 'Y' THEN
10079                   pa_debug.g_err_stage :='No WORK PLAN TYPE present in the system';
10080                   pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,1);
10081                END IF;
10082 
10083                PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10084                                     p_msg_name => 'PA_FP_NO_WP_PLAN_TYPE' );
10085                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10086      END; -- BLOCK to check if workplan_type is is present in the system - Ends
10087 
10088 
10089 ---------------------------------------------------------
10090 -- Checking if workplan_type is already attched for the
10091 -- passed project_id
10092 ---------------------------------------------------------
10093       IF l_debug_mode = 'Y' THEN
10094         pa_debug.g_err_stage:='checking if wp type is already attched for project id';
10095         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10096       END IF;
10097 
10098      BEGIN -- BLOCK to check if workplan_type is already attched for the passed project_id - Starts
10099 
10100         SELECT 1
10101           INTO l_proj_wp_type_exists
10102           FROM DUAL
10103          WHERE EXISTS(
10104                      SELECT 1
10105                        FROM pa_proj_fp_options
10106                       WHERE fin_plan_type_id = l_wp_type_id
10107                         AND project_id = p_targ_project_id
10108                         AND fin_plan_option_level_code = 'PLAN_TYPE');
10109 
10110      EXCEPTION
10111          WHEN NO_DATA_FOUND THEN
10112            null;
10113      END; -- BLOCK to check if workplan_type is already attched for the passed project_id - Ends
10114 
10115 ---------------------------------------------------------
10116 -- If workplan_type is not already attched for the
10117 -- passed project_id then a record is created in
10118 -- pa_proj_fp_options and the default fp txn currencies
10119 -- are created.
10120 ---------------------------------------------------------
10121 
10122      IF l_proj_wp_type_exists = 0 THEN
10123 
10124           IF l_debug_mode = 'Y' THEN
10125              pa_debug.g_err_stage:='Getting the fp option id for the wp plan type of the source project ';
10126              pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10127           END IF;
10128 
10129           IF p_src_project_id <> p_targ_project_id THEN
10130 
10131                 BEGIN
10132                     SELECT proj_fp_options_id
10133                     INTO   l_src_fp_option_id
10134                     FROM   pa_proj_fp_options
10135                     WHERE  project_id=p_src_project_id
10136                     AND    fin_plan_type_id=l_wp_type_id
10137                     AND    fin_plan_option_level_code = 'PLAN_TYPE';
10138                 EXCEPTION
10139                 WHEN NO_DATA_FOUND THEN
10140                     l_src_fp_option_id:=NULL;
10141                 END;
10142           ELSE
10143              l_src_fp_option_id:=NULL;
10144           END IF;
10145 
10146 
10147           IF l_debug_mode = 'Y' THEN
10148              pa_debug.g_err_stage:='Calling API pa_proj_fp_options_pub.create_fp_option';
10149              pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10150           END IF;
10151 
10152           IF l_debug_mode = 'Y' THEN
10153              pa_debug.g_err_stage:='The source fp option id is '||l_src_fp_option_id;
10154              pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10155           END IF;
10156 
10157 
10158          pa_proj_fp_options_pub.Create_FP_Option (
10159            px_target_proj_fp_option_id          =>  l_proj_fp_options_id
10160           ,p_source_proj_fp_option_id           =>  l_src_fp_option_id
10161           ,p_target_fp_option_level_code        =>  PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE
10162           ,p_target_fp_preference_code          =>  PA_FP_CONSTANTS_PKG.G_PREF_COST_ONLY
10163           ,p_target_fin_plan_version_id         =>  null
10164           ,p_target_project_id                  =>  p_targ_project_id
10165           ,p_target_plan_type_id                =>  l_wp_type_id
10166           ,x_return_status                      =>  l_return_status
10167           ,x_msg_count                          =>  l_msg_count
10168           ,x_msg_data                           =>  l_msg_data);
10169 
10170           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10171                 IF l_debug_mode = 'Y' THEN
10172                    pa_debug.g_err_stage:='Called API pa_proj_fp_options_pub.Create_FP_Option returned error';
10173                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,5);
10174                 END IF;
10175                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10176            END IF;
10177 
10178            SELECT plan_in_multi_curr_flag
10179            INTO   l_plan_in_multi_curr_flag
10180            FROM   pa_proj_fp_options
10181            WHERE  proj_fp_options_id = l_proj_fp_options_id;
10182 
10183           IF l_debug_mode = 'Y' THEN
10184              pa_debug.g_err_stage:='Calling API pa_fp_txn_currencies_pub.Copy_Fp_Txn_Currencies';
10185              pa_debug.write('Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10186           END IF;
10187 
10188           PA_FP_TXN_CURRENCIES_PUB.COPY_FP_TXN_CURRENCIES (
10189              p_source_fp_option_id              =>      l_src_fp_option_id
10190              ,p_target_fp_option_id             =>      l_proj_fp_options_id
10191              ,p_target_fp_preference_code       =>      null
10192              ,p_plan_in_multi_curr_flag         =>      l_plan_in_multi_curr_flag
10193              ,x_return_status                   =>      l_return_status
10194              ,x_msg_count                       =>      l_msg_count
10195              ,x_msg_data                        =>      l_msg_data );
10196 
10197           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10198                 IF l_debug_mode = 'Y' THEN
10199                    pa_debug.g_err_stage:='Called API  PA_FP_TXN_CURRENCIES_PUB.COPY_FP_TXN_CURRENCIES returned error';
10200                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,5);
10201                 END IF;
10202                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10203            END IF;
10204 
10205      END IF;
10206 	IF l_debug_mode = 'Y' THEN
10207 	       pa_debug.reset_curr_function;
10208 	END IF;
10209 
10210  EXCEPTION
10211 
10212       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
10213            l_msg_count := FND_MSG_PUB.count_msg;
10214              IF l_msg_count = 1 THEN
10215                 PA_INTERFACE_UTILS_PUB.get_messages
10216                      (p_encoded        => FND_API.G_TRUE
10217                       ,p_msg_index      => 1
10218                       ,p_msg_count      => l_msg_count
10219                       ,p_msg_data       => l_msg_data
10220                       ,p_data           => l_data
10221                       ,p_msg_index_out  => l_msg_index_out);
10222                 x_msg_data := l_data;
10223                 x_msg_count := l_msg_count;
10224              ELSE
10225                 x_msg_count := l_msg_count;
10226              END IF;
10227            x_return_status := FND_API.G_RET_STS_ERROR;
10228 	IF l_debug_mode = 'Y' THEN
10229            pa_debug.reset_curr_function;
10230 	END IF;
10231      WHEN OTHERS THEN
10232           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10233           x_msg_count     := 1;
10234           x_msg_data      := SQLERRM;
10235           FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'PA_FP_PLANNING_TRANSACTION_PUB'
10236                                   ,p_procedure_name  => 'PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type');
10237 
10238            IF l_debug_mode = 'Y' THEN
10239              pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
10240              pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,5);
10241              pa_debug.reset_curr_function;
10242 	  END IF;
10243           RAISE;
10244 
10245 END add_wp_plan_type;
10246 
10247 /*=====================================================================
10248 Procedure Name:      check_and_create_task_rec_info
10249 Purpose:             This is a private api in the package. This API will
10250                       validate the task data passed to the
10251                       update_planning_transactions api This API checks
10252                       for the existence of the element version id passed
10253                       in pa_resource_assignments. If some of the element
10254                       version Ids are not there then it call
10255                       add_planning_transactions API to create records in
10256                       pa_resource_assignments. This API will be called
10257                       only when the context is WORKPLAN
10258 =======================================================================*/
10259 /*******************************************************************************************************
10260 As part of Bug 3749516 All References to Equipment Effort or Equip Resource Class has been removed in
10261 PROCEDURE check_and_create_task_rec_info.
10262 p_planned_equip_effort_tbl IN parameter has also been removed as they were not being  used/referred.
10263 ********************************************************************************************************/
10264  PROCEDURE check_and_create_task_rec_info
10265  (
10266     p_project_id                 IN   Pa_projects_all.project_id%TYPE
10267    ,p_struct_elem_version_id     IN   Pa_proj_element_versions.element_version_id%TYPE
10268    ,p_element_version_id_tbl     IN   SYSTEM.PA_NUM_TBL_TYPE
10269    ,p_planning_start_date_tbl    IN   SYSTEM.PA_DATE_TBL_TYPE
10270    ,p_planning_end_date_tbl      IN   SYSTEM.PA_DATE_TBL_TYPE
10271    ,p_planned_people_effort_tbl  IN   SYSTEM.PA_NUM_TBL_TYPE
10272    ,p_raw_cost_tbl               IN   SYSTEM.PA_NUM_TBL_TYPE      /* Bug 3720357 */
10273    ,p_burdened_cost_tbl          IN   SYSTEM.PA_NUM_TBL_TYPE      /* Bug 3720357 */
10274    ,p_apply_progress_flag        IN   VARCHAR2                    /* Bug 3720357 */
10275    ,x_element_version_id_tbl     OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
10276    ,x_planning_start_date_tbl    OUT  NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
10277    ,x_planning_end_date_tbl      OUT  NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
10278    ,x_planned_effort_tbl         OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
10279    ,x_resource_assignment_id_tbl OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
10280    ,x_raw_cost_tbl               OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE      /* Bug 3720357 */ --File.Sql.39 bug 4440895
10281    ,x_burdened_cost_tbl          OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE      /* Bug 3720357 */ --File.Sql.39 bug 4440895
10282    ,x_return_status              OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10283    ,x_msg_data                   OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10284    ,x_msg_count                  OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
10285 ) AS
10286   --Start of variables used for debugging
10287       l_msg_count          NUMBER :=0;
10288       l_data               VARCHAR2(2000);
10289       l_msg_data           VARCHAR2(2000);
10290       l_error_msg_code     VARCHAR2(30);
10291       l_msg_index_out      NUMBER;
10292       l_return_status      VARCHAR2(2000);
10293       l_debug_mode         VARCHAR2(30);
10294       l_module_name        VARCHAR2(100):='pa.plsql.pa_fp_planning_transaction_pub.check_and_create_task_rec_info' ;
10295       l_rec_exsists        VARCHAR2(1);
10296   --End of variables used for debugging
10297 
10298 
10299       l_elem_ver_id_cnt             NUMBER := 0;
10300       l_ra_id_cnt                   NUMBER := 0;
10301       l_out_tbl_index               NUMBER := 1;
10302       l_add_tbl_index               NUMBER := 1;
10303       l_res_class_code_tbl          SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
10304       l_ra_id_tbl                   SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
10305       l_element_version_id_tbl      SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
10306       l_planning_start_date_tbl     SYSTEM.PA_DATE_TBL_TYPE        := SYSTEM.PA_DATE_TBL_TYPE();
10307       l_planning_end_date_tbl       SYSTEM.PA_DATE_TBL_TYPE        := SYSTEM.PA_DATE_TBL_TYPE();
10308       l_planned_people_effort_tbl   SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
10309       l_raw_cost_tbl                SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
10310       l_burdened_cost_tbl           SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
10311       l_index                       NUMBER;
10312       l_element_version_id_tbl_tmp  SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
10313       l_planning_start_date_tbl_tmp SYSTEM.PA_DATE_TBL_TYPE        := SYSTEM.PA_DATE_TBL_TYPE();
10314       l_planning_end_date_tbl_tmp   SYSTEM.PA_DATE_TBL_TYPE        := SYSTEM.PA_DATE_TBL_TYPE();
10315       l_planned_effort_tbl_tmp      SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
10316       l_res_assignment_id_tbl_tmp   SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
10317       l_planned_ppl_effort_tbl_tmp  SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
10318       l_raw_cost_tbl_tmp            SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
10319       l_burdened_cost_tbl_tmp       SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
10320 
10321 
10322       cursor c_res_assignment_id(c_wbs_element_version_id pa_resource_assignments.wbs_element_version_id%TYPE) IS
10323       SELECT resource_assignment_id,resource_class_code
10324       FROM pa_resource_assignments
10325       WHERE wbs_element_version_id = c_wbs_element_version_id
10326       AND ta_display_flag = 'N' -- Bug 3749516
10327       AND resource_class_code in (PA_FP_CONSTANTS_PKG.G_RESOURCE_CLASS_CODE_PPL);
10328 
10329   BEGIN
10330 
10331     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
10332     l_debug_mode := NVL(l_debug_mode, 'N');
10333     x_msg_count := 0;
10334     x_return_status := FND_API.G_RET_STS_SUCCESS;
10335 IF l_debug_mode = 'Y' THEN
10336     PA_DEBUG.Set_Curr_Function( p_function   => 'fp_planning_txn_pub.chk_and_create_task',
10337                                 p_debug_mode => l_debug_mode );
10338 END IF;
10339 -----------------------------------------------------------------------
10340 -- Input Parameter Validation. If no element version id is passed then
10341 -- return.
10342 -----------------------------------------------------------------------
10343     l_elem_ver_id_cnt := p_element_version_id_tbl.COUNT;
10344 
10345     --Extending the local pl/sql tables. The length of the local tables should be element version id count
10346     IF l_debug_mode = 'Y' THEN
10347         pa_debug.g_err_stage:='Extending the local pl/sql tbls';
10348         print_msg(pa_debug.g_err_stage,l_module_name);
10349     END IF;
10350     x_element_version_id_tbl     := SYSTEM.PA_NUM_TBL_TYPE();
10351     x_planning_start_date_tbl    := SYSTEM.PA_DATE_TBL_TYPE();
10352     x_planning_end_date_tbl      := SYSTEM.PA_DATE_TBL_TYPE();
10353     x_planned_effort_tbl         := SYSTEM.PA_NUM_TBL_TYPE();
10354     x_resource_assignment_id_tbl := SYSTEM.PA_NUM_TBL_TYPE();
10355     x_raw_cost_tbl               := SYSTEM.PA_NUM_TBL_TYPE();
10356     x_burdened_cost_tbl          := SYSTEM.PA_NUM_TBL_TYPE();
10357     l_element_version_id_tbl.extend(l_elem_ver_id_cnt);
10358     l_planning_start_date_tbl.extend(l_elem_ver_id_cnt);
10359     l_planning_end_date_tbl.extend(l_elem_ver_id_cnt);
10360     l_planned_people_effort_tbl.extend(l_elem_ver_id_cnt);
10361     l_raw_cost_tbl.extend(l_elem_ver_id_cnt);
10362     l_burdened_cost_tbl.extend(l_elem_ver_id_cnt);
10363     x_element_version_id_tbl.extend(l_elem_ver_id_cnt);
10364     x_planning_start_date_tbl.extend(l_elem_ver_id_cnt);
10365     x_planning_end_date_tbl.extend(l_elem_ver_id_cnt);
10366     x_planned_effort_tbl.extend(l_elem_ver_id_cnt);
10367     x_resource_assignment_id_tbl.extend(l_elem_ver_id_cnt);
10368     x_raw_cost_tbl.extend(l_elem_ver_id_cnt);
10369     x_burdened_cost_tbl.extend(l_elem_ver_id_cnt);
10370 
10371     IF l_elem_ver_id_cnt = 0 THEN
10372         IF l_debug_mode = 'Y' THEN
10373            pa_debug.g_err_stage:='Validating input parameters - No element version id is passed - return to calling entity';
10374            print_msg(pa_debug.g_err_stage,l_module_name);
10375            pa_debug.reset_curr_function;
10376 	END IF;
10377        RETURN;
10378     END IF;
10379 
10380 --------------------------------------------------------------------------
10381 -- Logic manifested below ------------------------------------------------
10382 -- -----------------------------------------------------------------------
10383 -- For each record of element version id in input parameter
10384 -- p_element_version_id_tbl, we scan through pa_resource_assignments table
10385 -- and bulk fetch the resource_class_code and resource_assignment_id into
10386 -- local PLSql tables. Now we have a inner loop which we run for each of
10387 -- the resouce_assignment_id fetched corresponding to the elem_ver_id of
10388 -- the parent loop. In the inner loop we populate the corresponding out
10389 -- param tables - x_resource_assignment_id_tbl,x_element_version_id_tbl
10390 -- ,x_planning_end_date_tbl, x_planning_start_date_tbl and
10391 -- x_planned_effort_tbl.
10392 --
10393 -- In case if there no records are retrieved in pa_resource_assignments
10394 -- for any element version id then we populate a separate set of tables
10395 -- from the corresponding IN parameters as l_element_version_id_tbl,
10396 -- l_planning_start_date_tbl,l_planning_end_date_tbl,
10397 -- l_planned_people_effort_tbl.
10398 -- Bug 3720357 - l_raw_cost_tbl and l_burdened_cost_tbl also added.
10399 -- This set of local parameters form the IN parameters for Calling API
10400 -- add_planning_transactions.
10401 --------------------------------------------------------------------------
10402 
10403 
10404    IF l_debug_mode = 'Y' THEN
10405            pa_debug.g_err_stage:='Iterating through the IN Parameters and Populating the Out parameters.';
10406            print_msg(pa_debug.g_err_stage,l_module_name);
10407    END IF;
10408 
10409 /* Loop through all element version ids and retrieve ra_id and res_class_code */
10410        FOR i IN p_element_version_id_tbl.FIRST .. p_element_version_id_tbl.LAST LOOP
10411            OPEN c_res_assignment_id(p_element_version_id_tbl(i));
10412                 FETCH c_res_assignment_id BULK COLLECT INTO l_ra_id_tbl,l_res_class_code_tbl;
10413                       l_ra_id_cnt := l_ra_id_tbl.COUNT;
10414                       IF l_ra_id_cnt>0 THEN
10415                           l_rec_exsists := 'Y';
10416                       ELSE
10417                           l_rec_exsists := 'N';
10418                       END IF;
10419 
10420 
10421 /* If there is 1 records in resource_assignments for people then we do not need to call add_planning transaction */
10422                       IF l_ra_id_cnt = 1 THEN
10423 
10424                          FOR j IN l_ra_id_tbl.FIRST .. l_ra_id_tbl.LAST LOOP
10425                              x_resource_assignment_id_tbl(l_out_tbl_index) := l_ra_id_tbl(j);
10426                              IF p_planning_start_date_tbl.EXISTS(i) THEN
10427                                 x_planning_start_date_tbl(l_out_tbl_index) := p_planning_start_date_tbl(i);
10428                              END IF;
10429 
10430                              IF p_planning_end_date_tbl.EXISTS(i) THEN
10431                                 x_planning_end_date_tbl(l_out_tbl_index) := p_planning_end_date_tbl(i);
10432                              END IF;
10433 /* In Update Flow for Workplan Context FND_API.G_MISS_XXXX will be considered
10434    as a valid value for effort/Quantity -- Bug 3640498*/
10435                              IF (p_raw_cost_tbl.EXISTS(i)) THEN --AND
10436 --                                NVL(p_raw_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
10437 --                                p_raw_cost_tbl(i) <> 0) THEN
10438                                 x_raw_cost_tbl(l_out_tbl_index) := p_raw_cost_tbl(i);
10439                              END IF;
10440 
10441                              IF (p_burdened_cost_tbl.EXISTS(i)) THEN -- AND
10442 --                                NVL(p_burdened_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
10443 --                                p_burdened_cost_tbl(i) <> 0) THEN
10444                                 x_burdened_cost_tbl(l_out_tbl_index) := p_burdened_cost_tbl(i);
10445                              END IF;
10446 
10447                              x_element_version_id_tbl(l_out_tbl_index) := p_element_version_id_tbl(i);
10448                              IF l_res_class_code_tbl(j) = PA_FP_CONSTANTS_PKG.G_RESOURCE_CLASS_CODE_PPL THEN
10449                                 IF (p_planned_people_effort_tbl.EXISTS(i)) THEN --AND
10450 --                                   (nvl(p_planned_people_effort_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) AND
10451 --                                   (p_planned_people_effort_tbl(i) > 0)) THEN
10452                                     x_planned_effort_tbl(l_out_tbl_index) := p_planned_people_effort_tbl(i);
10453                                 END IF;
10454                              END IF;
10455 
10456                              l_out_tbl_index := l_out_tbl_index + 1;
10457                          END LOOP;
10458                       END IF;
10459 
10460 /* If there are no records in resource_assignments we have to populate the local PLSql tables to call
10461    add_planning_transactions */
10462                 IF l_rec_exsists = 'N' THEN
10463 
10464                    --Add the record only if either people or equipment effort exists
10465                    IF ((p_planned_people_effort_tbl.EXISTS(i)) AND
10466                       (nvl(p_planned_people_effort_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) AND
10467                       /*Bug fix:5726773 (p_planned_people_effort_tbl(i) > 0))*/
10468  	              (p_planned_people_effort_tbl(i) is NOT NULL))
10469                       OR
10470                       (p_raw_cost_tbl.EXISTS(i) AND
10471                            NVL(p_raw_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
10472                            /* bug fix:Bug fix:5726773 p_raw_cost_tbl(i) <> 0) */
10473  	                   p_raw_cost_tbl(i) is NOT NULL )
10474                       OR
10475                       (p_burdened_cost_tbl.EXISTS(i) AND
10476                            NVL(p_burdened_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
10477                            /* bug fix:Bug fix:5726773 P_burdened_cost_tbl(i) <> 0) THEN */
10478  	                   P_burdened_cost_tbl(i) is NOT NULL) THEN
10479 
10480                        l_element_version_id_tbl(l_add_tbl_index)    := p_element_version_id_tbl(i);
10481                        IF p_planning_start_date_tbl.EXISTS(i) THEN
10482                            l_planning_start_date_tbl(l_add_tbl_index) := p_planning_start_date_tbl(i);
10483                        END IF;
10484 
10485                        IF p_planning_end_date_tbl.EXISTS(i) THEN
10486                            l_planning_end_date_tbl(l_add_tbl_index) := p_planning_end_date_tbl(i);
10487                        END IF;
10488 
10489                        IF ((p_planned_people_effort_tbl.EXISTS(i)) AND
10490                           (nvl(p_planned_people_effort_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) AND
10491                           /* bug fix:5726773 (p_planned_people_effort_tbl(i) > 0)) THEN */
10492  	                  (p_planned_people_effort_tbl(i) is NOT NULL )) THEN
10493                        l_planned_people_effort_tbl(l_add_tbl_index) := p_planned_people_effort_tbl(i);
10494                        END IF;
10495 
10496                        IF (p_raw_cost_tbl.EXISTS(i) AND
10497                            NVL(p_raw_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
10498                            /* bug fix:Bug fix:5726773 p_raw_cost_tbl(i) <> 0) THEN */
10499  	                   p_raw_cost_tbl(i) is NOT NULL ) THEN
10500                            l_raw_cost_tbl(l_add_tbl_index) := p_raw_cost_tbl(i);
10501                        END IF;
10502 
10503                        IF (p_burdened_cost_tbl.EXISTS(i) AND
10504                            NVL(p_burdened_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
10505                            /* bug fix:Bug fix:572677312/29/2006 P_burdened_cost_tbl(i) <> 0) THEN */
10506  	                   P_burdened_cost_tbl(i) is NOT NULL) THEN
10507                            l_burdened_cost_tbl(l_add_tbl_index) := p_burdened_cost_tbl(i);
10508                        END IF;
10509                       l_add_tbl_index := l_add_tbl_index + 1;
10510 
10511                    END IF;
10512                 END IF;
10513 
10514            CLOSE c_res_assignment_id;
10515        END LOOP;
10516 
10517    --Prepare the pl/sql tbls that should be returned from the API
10518     IF l_debug_mode = 'Y' THEN
10519            pa_debug.g_err_stage:='Making a copy of the pl/sql tables which should be returned by this API';
10520            print_msg(pa_debug.g_err_stage,l_module_name);
10521     END IF;
10522 
10523 
10524     l_element_version_id_tbl_tmp.extend(l_out_tbl_index-1);
10525     l_planning_start_date_tbl_tmp.extend(l_out_tbl_index-1);
10526     l_planning_end_date_tbl_tmp.extend(l_out_tbl_index-1);
10527     l_planned_effort_tbl_tmp.extend(l_out_tbl_index-1);
10528     l_res_assignment_id_tbl_tmp.extend(l_out_tbl_index-1);
10529     l_raw_cost_tbl_tmp.extend(l_out_tbl_index-1);
10530     l_burdened_cost_tbl_tmp.extend(l_out_tbl_index-1);
10531 
10532    FOR i in 1..l_out_tbl_index-1 LOOP
10533 
10534         l_element_version_id_tbl_tmp (i):=  x_element_version_id_tbl    (i);
10535         l_planning_start_date_tbl_tmp(i):=  x_planning_start_date_tbl   (i);
10536         l_planning_end_date_tbl_tmp  (i):=  x_planning_end_date_tbl     (i);
10537         l_planned_effort_tbl_tmp     (i):=  x_planned_effort_tbl        (i);
10538         l_res_assignment_id_tbl_tmp  (i):=  x_resource_assignment_id_tbl(i);
10539         l_raw_cost_tbl_tmp           (i):=  x_raw_cost_tbl              (i);
10540         l_burdened_cost_tbl_tmp      (i):=  x_burdened_cost_tbl         (i);
10541 
10542    END LOOP;
10543 
10544    x_element_version_id_tbl    :=l_element_version_id_tbl_tmp ;
10545    x_planning_start_date_tbl   :=l_planning_start_date_tbl_tmp;
10546    x_planning_end_date_tbl     :=l_planning_end_date_tbl_tmp  ;
10547    x_planned_effort_tbl        :=l_planned_effort_tbl_tmp     ;
10548    x_resource_assignment_id_tbl:=l_res_assignment_id_tbl_tmp  ;
10549    x_raw_cost_tbl              :=l_raw_cost_tbl_tmp           ;
10550    x_burdened_cost_tbl         :=l_burdened_cost_tbl_tmp      ;
10551 
10552    --Prepare the pl/sql tbls that should be passed to add planning txn APIs
10553    IF l_debug_mode = 'Y' THEN
10554            pa_debug.g_err_stage:='Making a copy of the pl/sql tables which should be used in calling add plan txn api';
10555            print_msg(pa_debug.g_err_stage,l_module_name);
10556     END IF;
10557 
10558     l_element_version_id_tbl_tmp.DELETE;
10559     l_planning_start_date_tbl_tmp.DELETE;
10560     l_planning_end_date_tbl_tmp.DELETE;
10561     l_raw_cost_tbl_tmp.DELETE;
10562     l_burdened_cost_tbl_tmp.DELETE;
10563     l_element_version_id_tbl_tmp.extend(l_add_tbl_index-1);
10564     l_planning_start_date_tbl_tmp.extend(l_add_tbl_index-1);
10565     l_planning_end_date_tbl_tmp.extend(l_add_tbl_index-1);
10566     l_planned_ppl_effort_tbl_tmp.extend(l_add_tbl_index-1);
10567     l_raw_cost_tbl_tmp.extend(l_add_tbl_index-1);
10568     l_burdened_cost_tbl_tmp.extend(l_add_tbl_index-1);
10569 
10570    FOR i in 1..l_add_tbl_index-1 LOOP
10571 
10572         l_element_version_id_tbl_tmp (i):=  l_element_version_id_tbl    (i);
10573 
10574         l_planning_start_date_tbl_tmp(i):=  l_planning_start_date_tbl   (i);
10575 
10576         l_planning_end_date_tbl_tmp  (i):=  l_planning_end_date_tbl     (i);
10577 
10578         l_planned_ppl_effort_tbl_tmp (i):=  l_planned_people_effort_tbl (i) ;
10579 
10580         l_raw_cost_tbl_tmp (i)          :=  l_raw_cost_tbl (i) ;
10581 
10582         l_burdened_cost_tbl_tmp (i)     :=  l_burdened_cost_tbl (i)  ;
10583 
10584    END LOOP;
10585     l_element_version_id_tbl   :=l_element_version_id_tbl_tmp ;
10586     l_planning_start_date_tbl  :=l_planning_start_date_tbl_tmp;
10587     l_planning_end_date_tbl    :=l_planning_end_date_tbl_tmp  ;
10588     l_planned_people_effort_tbl:=l_planned_ppl_effort_tbl_tmp ;
10589     l_raw_cost_tbl             :=l_raw_cost_tbl_tmp ;
10590     l_burdened_cost_tbl        :=l_burdened_cost_tbl_tmp ;
10591    IF l_debug_mode = 'Y' THEN
10592            pa_debug.g_err_stage:='Calling add_planning_transactions API if index of param tables if greater than 1, l_add_tbl_index:.' || l_add_tbl_index;
10593            print_msg(pa_debug.g_err_stage,l_module_name);
10594    END IF;
10595 
10596 
10597    IF l_add_tbl_index > 1 THEN
10598 
10599      add_planning_transactions
10600    (
10601        p_context                     => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
10602       ,p_project_id                  => p_project_id
10603       ,p_struct_elem_version_id      => p_struct_elem_version_id
10604       ,p_budget_version_id           => NULL
10605       ,p_task_elem_version_id_tbl    => l_element_version_id_tbl
10606       ,p_task_name_tbl               => SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
10607       ,p_task_number_tbl             => SYSTEM.PA_VARCHAR2_100_TBL_TYPE()
10608       ,p_start_date_tbl              => l_planning_start_date_tbl
10609       ,p_end_date_tbl                => l_planning_end_date_tbl
10610       ,p_planned_people_effort_tbl   => l_planned_people_effort_tbl
10611       ,p_latest_eff_pub_flag_tbl     => SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
10612       ,p_resource_list_member_id_tbl => SYSTEM.PA_NUM_TBL_TYPE()
10613       ,p_quantity_tbl                => SYSTEM.PA_NUM_TBL_TYPE()
10614       ,p_currency_code_tbl           => SYSTEM.PA_VARCHAR2_15_TBL_TYPE()
10615       ,p_raw_cost_tbl                => l_raw_cost_tbl
10616       ,p_burdened_cost_tbl           => l_burdened_cost_tbl
10617       ,p_revenue_tbl                 => SYSTEM.PA_NUM_TBL_TYPE()
10618       ,p_cost_rate_tbl               => SYSTEM.PA_NUM_TBL_TYPE()
10619       ,p_bill_rate_tbl               => SYSTEM.PA_NUM_TBL_TYPE()
10620       ,p_burdened_rate_tbl           => SYSTEM.PA_NUM_TBL_TYPE()
10621       ,p_apply_progress_flag         => p_apply_progress_flag
10622       ,x_return_status               => l_return_status
10623       ,x_msg_count                   => l_msg_count
10624       ,x_msg_data                    => l_msg_data
10625    );
10626 
10627     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10628        IF l_debug_mode = 'Y' THEN
10629           pa_debug.g_err_stage:='Called API PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions ,api returned error';
10630           pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
10631        END IF;
10632        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10633     END IF;
10634 
10635     END IF;
10636 
10637 	IF l_debug_mode = 'Y' THEN
10638 	   pa_debug.reset_curr_function;
10639 	END IF;
10640   EXCEPTION
10641       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
10642            l_msg_count := FND_MSG_PUB.count_msg;
10643              IF l_msg_count = 1 THEN
10644                 PA_INTERFACE_UTILS_PUB.get_messages
10645                      (p_encoded        => FND_API.G_TRUE
10646                       ,p_msg_index      => 1
10647                       ,p_msg_count      => l_msg_count
10648                       ,p_msg_data       => l_msg_data
10649                       ,p_data           => l_data
10650                       ,p_msg_index_out  => l_msg_index_out);
10651                 x_msg_data := l_data;
10652                 x_msg_count := l_msg_count;
10653              ELSE
10654                 x_msg_count := l_msg_count;
10655              END IF;
10656            x_return_status := FND_API.G_RET_STS_ERROR;
10657 	IF l_debug_mode = 'Y' THEN
10658            pa_debug.reset_curr_function;
10659 	END IF;
10660      WHEN OTHERS THEN
10661           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10662           x_msg_count     := 1;
10663           x_msg_data      := SQLERRM;
10664           FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'PA_FP_PLANNING_TRANSACTION_PUB'
10665                                   ,p_procedure_name  => 'check_and_create_task_rec_info');
10666 
10667            IF l_debug_mode = 'Y' THEN
10668              pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
10669              pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
10670              pa_debug.reset_curr_function;
10671 	  END IF;
10672           RAISE;
10673 
10674   END check_and_create_task_rec_info;
10675 
10676 /*=============================================================================
10677  This api would be called for a finplan version, whenever there is a change
10678  either in planning level or resource list or time phase or rbs version.
10679 
10680  Logic: If no change in any of the parameters, simply return
10681         If planning level changes
10682           all the resource assignments would be deleted
10683           default planning resources are created
10684         If resource list changes
10685           all the task, resource mappings are deleted
10686           for task, financial element planning resources are updated with
10687           new rlm id and rbs id
10688         If RBS changes
10689           all the res assignments are updated with new rbs mapping
10690 
10691  Bug 3867302  Sep 21 2004 For ci versions reporting data is not maintained
10692 
10693  -- Note : This api is also called from PaFinPlanControlItemImpactAMImpl.java with p_time_phase_change_flag as 'Y' to
10694  --        delete the budget lines.
10695 
10696 -- Bug 4724017: CDM Enhancement: Changes in behavior:
10697               Whenever the planning level is changed for an existing version,
10698               default planning transaction would be created only for the vesions
10699               which uses an uncategorized resource list.
10700 -- Bug 5754758: Modified to delete lines from pa_resource_asgn_curr before going to
10701                create_default_plan_txn api.
10702 
10703 ==============================================================================*/
10704 
10705 PROCEDURE Refresh_Plan_Txns(
10706            p_budget_version_id         IN   pa_budget_versions.budget_version_id%TYPE
10707           ,p_plan_level_change         IN   VARCHAR2
10708           ,p_resource_list_change      IN   VARCHAR2
10709           ,p_rbs_version_change        IN   VARCHAR2
10710           ,p_time_phase_change_flag    IN   VARCHAR2
10711 	  ,p_ci_ver_agr_change_flag    IN   VARCHAR2 DEFAULT 'N' --IPM Arch Enhancement Bug 4865563
10712           ,p_rev_der_method_change     IN   VARCHAR2 DEFAULT 'N' --bug 5152892
10713           ,x_return_status             OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10714           ,x_msg_count                 OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
10715           ,x_msg_data                  OUT  NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
10716 AS
10717     --Start of variables used for debugging
10718     l_return_status      VARCHAR2(1);
10719     l_msg_count          NUMBER := 0;
10720     l_msg_data           VARCHAR2(2000);
10721     l_data               VARCHAR2(2000);
10722     l_msg_index_out      NUMBER;
10723     l_debug_mode         VARCHAR2(30);
10724     l_error_msg_code     VARCHAR2(30);
10725 
10726     l_people_res_class_rlm_id    pa_resource_list_members.resource_list_member_id%TYPE;
10727     l_equip_res_class_rlm_id     pa_resource_list_members.resource_list_member_id%TYPE;
10728     l_fin_res_class_rlm_id       pa_resource_list_members.resource_list_member_id%TYPE;
10729     l_mat_res_class_rlm_id       pa_resource_list_members.resource_list_member_id%TYPE;
10730 
10731     l_txn_source_id_tbl          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10732     l_res_list_member_id_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10733     l_rbs_element_id_tbl         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10734     l_txn_accum_header_id_tbl    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10735 
10736     l_budget_version_id_tbl      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10737 
10738     -- IPM changes Bug 5003827 Issue 22
10739     l_fp_cols_rec                   pa_fp_gen_amount_utils.fp_cols;
10740     l_delete_ra_id_tbl           SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10741     l_delete_flag VARCHAR2(1); -- Bug 5003827 Issue 28
10742     l_rollup_flag  VARCHAR2(1); -- Bug 5003827 Issue 28
10743     -- END of IPM changes Bug 5003827 Issue 22
10744 
10745     CURSOR  budget_version_info_cur IS
10746     SELECT  bv.project_id project_id
10747            ,bv.resource_list_id
10748            ,Decode(bv.version_type
10749                     ,'COST',    cost_fin_plan_level_code
10750                     ,'REVENUE', revenue_fin_plan_level_code
10751                     ,'ALL',     all_fin_plan_level_code) fin_plan_level_code
10752            ,pfo.rbs_version_id         rbs_version_id
10753            ,pfo.fin_plan_type_id       fin_plan_type_id
10754            ,bv.ci_id                   ci_id
10755       FROM  pa_proj_fp_options pfo, pa_budget_versions bv
10756      WHERE  bv.project_id           = pfo.project_id
10757        AND  pfo.fin_plan_version_id = bv.budget_version_id
10758        AND  bv.budget_version_id    = p_budget_version_id;
10759 
10760    budget_version_info_rec budget_version_info_cur%ROWTYPE;
10761 
10762    -- added for bug 4724017:
10763    l_res_list_uncategorized_flag   pa_resource_lists_all_bg.uncategorized_flag%TYPE;
10764 
10765 BEGIN
10766 
10767     x_msg_count := 0;
10768     x_return_status := FND_API.G_RET_STS_SUCCESS;
10769 
10770     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
10771     l_debug_mode := NVL(l_debug_mode, 'Y');
10772 
10773     -- Set curr function
10774 IF l_debug_mode = 'Y' THEN
10775     PA_DEBUG.set_curr_function(
10776                 p_function   =>'PA_FP_PLANNING_TRANSACTION_PUB.Refresh_Plan_Txns'
10777                ,p_debug_mode => l_debug_mode );
10778 END IF;
10779     -- Check for business rules violations
10780 
10781     IF l_debug_mode = 'Y' THEN
10782         pa_debug.g_err_stage:='Validating input parameters';
10783         pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
10784     END IF;
10785 
10786     IF (p_budget_version_id   IS  NULL)
10787     THEN
10788 
10789         IF l_debug_mode = 'Y' THEN
10790            pa_debug.g_err_stage:='p_budget_version_id = '|| p_budget_version_id;
10791            pa_debug.write('Refresh_Plan_Txns: ' ||g_module_name,pa_debug.g_err_stage,5);
10792         END IF;
10793 
10794         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10795                              p_msg_name       => 'PA_FP_INV_PARAM_PASSED');
10796 
10797         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10798 
10799     END IF;
10800 
10801     -- If there is no change in planning level or res list or RBS return
10802 
10803     IF  nvl(p_plan_level_change, 'N')      = 'N' AND
10804         nvl(p_resource_list_change, 'N')   = 'N' AND
10805         nvl(p_rbs_version_change, 'N')     = 'N' AND
10806         nvl(p_time_phase_change_flag, 'N') = 'N' AND
10807         nvl(p_rev_der_method_change,'N')   = 'N' --Bug 5462471
10808     THEN
10809         IF l_debug_mode = 'Y' THEN
10810             pa_debug.g_err_stage:='No change required, Exiting Refresh_Plan_Txns';
10811             pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
10812            -- reset curr function
10813           pa_debug.Reset_Curr_Function();
10814 	END IF;
10815         RETURN;
10816     END IF;
10817 
10818     OPEN budget_version_info_cur;
10819     FETCH budget_version_info_cur INTO budget_version_info_rec;
10820     CLOSE budget_version_info_cur;
10821 
10822     IF  nvl(p_plan_level_change, 'N')      = 'Y' OR
10823         nvl(p_resource_list_change, 'N')   = 'Y' OR
10824         nvl(p_time_phase_change_flag, 'N') = 'Y' OR
10825         nvl(p_rev_der_method_change,'N')   = 'Y' --Bug 5462471
10826 
10827     THEN
10828           -- Delete all the budget lines for the budget version
10829 
10830           -- Bug Fix: 4569365. Removed MRC code.
10831           /*
10832           DELETE
10833           FROM    pa_mc_budget_lines
10834           WHERE   budget_version_id = p_budget_version_id;
10835           */
10836 
10837           DELETE
10838           FROM    pa_budget_lines
10839           WHERE   budget_version_id = p_budget_version_id;
10840 
10841           -- --IPM Arch Enhancement Bug 4865563, Bug 5003827 Issue 28
10842           IF (nvl(p_ci_ver_agr_change_flag,'N') = 'Y'
10843               OR nvl(p_time_phase_change_flag, 'N') = 'Y') THEN
10844 
10845             pa_fp_gen_amount_utils.get_plan_version_dtls
10846              (p_budget_version_id  => p_budget_version_id,
10847               x_fp_cols_rec        => l_fp_cols_rec,
10848               x_return_status      => x_return_status,
10849               x_msg_count          => x_msg_count,
10850               x_msg_data           => x_msg_data);
10851 
10852             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10853 
10854               IF l_debug_mode = 'Y' THEN
10855                 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
10856                 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
10857               END IF;
10858               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10859             END IF;
10860 
10861             -- Bug 5003827 Issue 28
10862             IF nvl(p_ci_ver_agr_change_flag,'N') = 'Y' THEN
10863               l_delete_flag := 'Y';
10864               l_rollup_flag := 'N';
10865             ELSE -- nvl(p_time_phase_change_flag, 'N') = 'Y'
10866 
10867               l_delete_flag := 'N';
10868               l_rollup_flag := 'Y';
10869             END IF;
10870             -- END Bug 5003827 Issue 28
10871 
10872             pa_res_asg_currency_pub.maintain_data(
10873               p_fp_cols_rec                  => l_fp_cols_rec,
10874               p_calling_module               => 'UPDATE_PLAN_TRANSACTION',
10875               p_delete_flag                  =>  l_delete_flag, -- Bug 5003827 Issue 28
10876               p_copy_flag                    => 'N',
10877               p_src_version_id               => NULL,
10878               p_copy_mode                    => NULL,
10879               p_rollup_flag                  => l_rollup_flag, -- Bug 5003827 Issue 28
10880               p_version_level_flag           => 'Y',
10881               p_called_mode                  => 'SELF_SERVICE',
10882               x_return_status                => x_return_status,
10883               x_msg_count                    => x_msg_count,
10884               x_msg_data                     => x_msg_data
10885             );
10886 
10887             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10888 
10889               IF l_debug_mode = 'Y' THEN
10890                 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
10891                 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
10892               END IF;
10893               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10894             END IF;
10895 
10896           END IF;
10897           ----IPM Arch Enhancement Bug 4865563
10898 
10899 
10900           IF  nvl(p_plan_level_change, 'N')      = 'Y' OR
10901           nvl(p_rev_der_method_change,'N')   = 'Y' THEN --Bug 5462471
10902               -- Delete all the planning transactions for the version.
10903 
10904               IF l_debug_mode = 'Y' THEN
10905                    pa_debug.g_err_stage:='Deleting all the resource assignment records for the version';
10906                    pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
10907               END IF;
10908 
10909               DELETE
10910               FROM   pa_resource_assignments
10911               WHERE  budget_version_id = p_budget_version_id
10912               -- IPM changes Bug 5003827 Issue 22
10913               RETURNING resource_assignment_id  BULK COLLECT INTO l_delete_ra_id_tbl;
10914               /* Bug 5754758 - Commenting the code, as the maintain_data is now called in version level mode to delete the RACs.
10915               IF l_delete_ra_id_tbl.COUNT > 0 THEN
10916                  FORALL i IN l_delete_ra_id_tbl.first .. l_delete_ra_id_tbl.last
10917                    INSERT INTO pa_resource_asgn_curr_tmp
10918                         (RA_TXN_ID
10919                         ,RESOURCE_ASSIGNMENT_ID
10920                         ,DELETE_FLAG
10921                         )
10922                         SELECT pa_resource_asgn_curr_s.NEXTVAL
10923                               ,l_delete_ra_id_tbl(i)
10924                               ,'Y'
10925                         FROM DUAL;
10926               END IF;
10927               -- END of IPM changes Bug 5003827 Issue 22
10928                */
10929          ----IPM Arch Enhancement Bug 5754758/4865563
10930           IF l_delete_ra_id_tbl.COUNT > 0 THEN --{
10931              pa_fp_gen_amount_utils.get_plan_version_dtls
10932              (p_budget_version_id  => p_budget_version_id,
10933               x_fp_cols_rec        => l_fp_cols_rec,
10934               x_return_status      => x_return_status,
10935               x_msg_count          => x_msg_count,
10936               x_msg_data           => x_msg_data);
10937 
10938             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10939 
10940               IF l_debug_mode = 'Y' THEN
10941                 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
10942                 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
10943               END IF;
10944               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10945             END IF;
10946 
10947             pa_res_asg_currency_pub.maintain_data(
10948               p_fp_cols_rec                  => l_fp_cols_rec,
10949               p_calling_module               => 'UPDATE_PLAN_TRANSACTION',
10950               p_delete_flag                  =>  'Y',
10951               p_copy_flag                    => 'N',
10952               p_src_version_id               => NULL,
10953               p_copy_mode                    => NULL,
10954               p_rollup_flag                  => 'N',
10955               p_version_level_flag           => 'Y',
10956               p_called_mode                  => 'SELF_SERVICE',
10957               x_return_status                => x_return_status,
10958               x_msg_count                    => x_msg_count,
10959               x_msg_data                     => x_msg_data
10960             );
10961 
10962             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10963 
10964               IF l_debug_mode = 'Y' THEN
10965                 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
10966                 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
10967               END IF;
10968               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10969             END IF;
10970 
10971           END IF;
10972           ----IPM Arch Enhancement Bug 5754758/4865563
10973 
10974               -- bug 4724017: Checking for categorized resource list to avoid
10975               -- calling create_default_task_plan_txns, not to create default
10976               -- planning txns for categorized RLs, when planning level changes.
10977               IF l_debug_mode = 'Y' THEN
10978                  pa_debug.g_err_stage:='Fetching uncategorized flag when planning level changes';
10979                  pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
10980               END IF;
10981               BEGIN
10982                 SELECT nvl(uncategorized_flag,'N')
10983                 INTO   l_res_list_uncategorized_flag
10984                 FROM   pa_resource_lists_all_bg
10985                 WHERE  resource_list_id = budget_version_info_rec.resource_list_id;
10986 
10987                 IF l_debug_mode = 'Y' THEN
10988                     pa_debug.g_err_stage:='l_res_list_uncategorized_flag: ' || l_res_list_uncategorized_flag;
10989                     pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
10990                 END IF;
10991               EXCEPTION
10992                 WHEN NO_DATA_FOUND THEN
10993                     IF l_debug_mode = 'Y' THEN
10994                         pa_debug.g_err_stage:='No uncategorized flag found for the resource list id passed';
10995                         pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
10996                     END IF;
10997                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10998               END;
10999 
11000               -- added for bug 4724017:
11001               -- Creation of default planning transaction is not done for versions
11002               -- being created with categorized resource list.
11003               IF l_res_list_uncategorized_flag = 'Y' THEN
11004                   -- Insert default task planning trasaction for the version
11005 
11006                   IF l_debug_mode = 'Y' THEN
11007                       pa_debug.g_err_stage:='Calling pa_fp_planning_transaction_pub.create_default_task_plan_txns';
11008                       pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11009                   END IF;
11010 
11011                   pa_fp_planning_transaction_pub.create_default_task_plan_txns (
11012                                p_budget_version_id        =>   p_budget_version_id
11013                               ,p_version_plan_level_code  =>   budget_version_info_rec.fin_plan_level_code
11014                               ,x_return_status            =>   x_return_status
11015                               ,x_msg_count                =>   x_msg_count
11016                               ,x_msg_data                 =>   x_msg_data );
11017 
11018                   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11019                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11020                   END IF;
11021 
11022               END IF; -- end bug 4724017
11023           END IF;
11024 
11025           IF  nvl(p_resource_list_change, 'N') = 'Y'  THEN
11026 
11027               -- Delete all the planning resources where neither rlmID is 0
11028               -- Or resource is 'FINANCIAL_ELEMENTS'
11029               -- Bug 3658232 added null handling for resource class flag
11030 
11031               DELETE FROM pa_resource_assignments
11032               WHERE  budget_version_id = p_budget_version_id
11033               AND
11034                 NOT (resource_class_code = 'FINANCIAL_ELEMENTS' AND nvl(resource_class_flag,'N') = 'Y')
11035               -- IPM changes Bug 5003827 Issue 22
11036               RETURNING resource_assignment_id BULK COLLECT INTO l_delete_ra_id_tbl;
11037 
11038               IF l_delete_ra_id_tbl.COUNT > 0 THEN
11039                  FORALL i IN l_delete_ra_id_tbl.first .. l_delete_ra_id_tbl.last
11040                    INSERT INTO pa_resource_asgn_curr_tmp
11041                         (RA_TXN_ID
11042                         ,RESOURCE_ASSIGNMENT_ID
11043                         ,DELETE_FLAG
11044                         )
11045                         SELECT pa_resource_asgn_curr_s.NEXTVAL
11046                               ,l_delete_ra_id_tbl(i)
11047                               ,'Y'
11048                         FROM DUAL;
11049               END IF;
11050               -- END of IPM changes Bug 5003827 Issue 22
11051 
11052 
11053               -- Fetch rlm id of FINANCIAL ELEMENT resource class for new resource list id
11054 
11055               PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids
11056                    ( p_project_id                   =>    budget_version_info_rec.project_id
11057                     ,p_resource_list_id             =>    budget_version_info_rec.resource_list_id
11058                     ,x_people_res_class_rlm_id      =>    l_people_res_class_rlm_id
11059                     ,x_equip_res_class_rlm_id       =>    l_equip_res_class_rlm_id
11060                     ,x_fin_res_class_rlm_id         =>    l_fin_res_class_rlm_id
11061                     ,x_mat_res_class_rlm_id         =>    l_mat_res_class_rlm_id
11062                     ,x_return_status                =>    l_return_status
11063                     ,x_msg_count                    =>    l_msg_count
11064                     ,x_msg_data                     =>    l_msg_data);
11065 
11066               IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11067                   IF l_debug_mode = 'Y' THEN
11068                      pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
11069                      pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
11070                   END IF;
11071                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11072               END IF;
11073 
11074               -- Update all the task planning elements with new FINACIAL ELEMENT rlmid
11075               IF l_debug_mode = 'Y' THEN
11076                   pa_debug.g_err_stage:='Updaing res assignments with new FINANCIAL ELEMENTS rlmid : ' || l_fin_res_class_rlm_id;
11077                   pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11078               END IF;
11079 
11080               UPDATE pa_resource_assignments
11081               SET    resource_list_member_id  = l_fin_res_class_rlm_id
11082               WHERE  budget_version_id = p_budget_version_id;
11083               --AND    resource_class_code = 'FINANCIAL_ELEMENTS'  --Bug 4200168. RL/PL change both can not happen at the same time.
11084               --AND    resource_class_flag = 'Y';
11085 
11086           END IF;
11087 
11088           -- IPM changes Bug 5003827 Issue 22
11089           IF l_delete_ra_id_tbl.COUNT > 0 THEN --{
11090             pa_fp_gen_amount_utils.get_plan_version_dtls
11091              (p_project_id         => budget_version_info_rec.project_id,
11092               p_budget_version_id  => p_budget_version_id,
11093               x_fp_cols_rec        => l_fp_cols_rec,
11094               x_return_status      => x_return_status,
11095               x_msg_count          => x_msg_count,
11096               x_msg_data           => x_msg_data);
11097 
11098             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11099 
11100               IF l_debug_mode = 'Y' THEN
11101                 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
11102                 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
11103               END IF;
11104               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11105             END IF;
11106 
11107             pa_res_asg_currency_pub.maintain_data(
11108               p_fp_cols_rec                  => l_fp_cols_rec,
11109               p_calling_module               => 'UPDATE_PLAN_TRANSACTION',
11110               p_delete_flag                  => 'Y',
11111               p_copy_flag                    => 'N',
11112               p_src_version_id               => NULL,
11113               p_copy_mode                    => NULL,
11114               p_rollup_flag                  => 'N',
11115               p_version_level_flag           => 'N',
11116               p_called_mode                  => 'SELF_SERVICE',
11117               x_return_status                => x_return_status,
11118               x_msg_count                    => x_msg_count,
11119               x_msg_data                     => x_msg_data
11120             );
11121 
11122             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11123 
11124               IF l_debug_mode = 'Y' THEN
11125                 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
11126                 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
11127               END IF;
11128               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11129             END IF;
11130           END IF; --} IF l_delete_ra_id_tbl.COUNT > 0 THEN
11131           -- END of IPM changes Bug 5003827 Issue 22
11132 
11133 
11134           -- Calling the rollup api to correct the amounts related data in
11135           -- pa_budget_versions and pa_resource_assignments for the entire version
11136           PA_FP_ROLLUP_PKG.rollup_budget_version
11137                       (p_budget_version_id   => p_budget_version_id
11138                       ,p_entire_version     => 'Y'
11139                       ,x_return_status      => l_return_status
11140                       ,x_msg_count          => l_msg_count
11141                       ,x_msg_data           => l_msg_data);
11142 
11143           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11144                 IF l_debug_mode = 'Y' THEN
11145                      pa_debug.g_err_stage:='Called API PA_FP_ROLLUP_PKG.rollup_budget_version returned error';
11146                      pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
11147                 END IF;
11148                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11149           END IF;
11150     END IF;
11151 
11152     -- Note: As of now rbs can not be changed at version level.
11153     -- It can only be changed at plan type level. This has been
11154     -- the initial design and not changed
11155     IF nvl(p_rbs_version_change, 'N') = 'Y' AND
11156        (budget_version_info_rec.ci_id IS NULL) -- bug 3867302
11157     THEN
11158 
11159         Refresh_rbs_for_versions(
11160            p_project_id           => budget_version_info_rec.project_id
11161           ,p_fin_plan_type_id     => budget_version_info_rec.fin_plan_type_id
11162           ,p_calling_context      => 'SINGLE_VERSION'
11163           ,p_budget_version_id    => p_budget_version_id
11164           ,x_return_status        => l_return_status
11165           ,x_msg_count            => l_msg_count
11166           ,x_msg_data             => l_msg_data);
11167 
11168           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11169                 IF l_debug_mode = 'Y' THEN
11170                      pa_debug.g_err_stage:='Called API Refresh_rbs_for_versions returned error';
11171                      pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
11172                 END IF;
11173                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11174           END IF;
11175     END IF;
11176 
11177     -- If Planning Level, Resource list or Time phasing is changed, calling PJI apis for
11178     -- correct summarization data
11179     IF  (budget_version_info_rec.ci_id IS NULL) AND -- bug 3867302
11180         (nvl(p_rbs_version_change, 'N') = 'N') AND -- put for clarity
11181         (nvl(p_plan_level_change, 'N') = 'Y' OR
11182           nvl(p_resource_list_change, 'N') = 'Y' OR
11183           nvl(p_time_phase_change_flag, 'N') = 'Y' OR
11184           nvl(p_rev_der_method_change,'N') ='Y' )--Bug 5462471
11185     THEN
11186           -- populating the l_budget_version_id_tbl with p_budget_version_id
11187           l_budget_version_id_tbl := SYSTEM.pa_num_tbl_type(p_budget_version_id);
11188 
11189           IF l_debug_mode = 'Y' THEN
11190                pa_debug.g_err_stage:='Calling PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE';
11191                pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11192           END IF;
11193 
11194           -- Call PJI delete api first to delete existing summarization data
11195           PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE (
11196                   p_fp_version_ids   => l_budget_version_id_tbl,
11197                   x_return_status    => l_return_status,
11198                   x_msg_code         => l_error_msg_code);
11199 
11200           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11201                 PA_UTILS.ADD_MESSAGE(p_app_short_name      => 'PA',
11202                                      p_msg_name            => l_error_msg_code);
11203                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11204           END IF;
11205 
11206           IF l_debug_mode = 'Y' THEN
11207                pa_debug.g_err_stage:='Call complete to PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE';
11208                pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11209           END IF;
11210 
11211           IF l_debug_mode = 'Y' THEN
11212                pa_debug.g_err_stage:='Calling PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE';
11213                pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11214           END IF;
11215 
11216           -- Call PLAN_CREATE to create summarization data as per the new RBS
11217           PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE (
11218                 p_fp_version_ids   => l_budget_version_id_tbl,
11219                 x_return_status    => l_return_status,
11220                 x_msg_code         => l_error_msg_code);
11221 
11222           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11223                 PA_UTILS.ADD_MESSAGE(p_app_short_name      => 'PA',
11224                                      p_msg_name            => l_error_msg_code);
11225                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11226           END IF;
11227 
11228           IF l_debug_mode = 'Y' THEN
11229                pa_debug.g_err_stage:='Call complete to PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE';
11230                pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11231           END IF;
11232 
11233     END IF;
11234 
11235     IF l_debug_mode = 'Y' THEN
11236         pa_debug.g_err_stage:='Exiting Refresh_Plan_Txns';
11237         pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11238     -- reset curr function
11239     pa_debug.Reset_Curr_Function();
11240     END IF;
11241 
11242 EXCEPTION
11243 
11244    WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11245        l_msg_count := FND_MSG_PUB.count_msg;
11246        IF l_msg_count = 1 THEN
11247            PA_INTERFACE_UTILS_PUB.get_messages
11248                  (p_encoded        => FND_API.G_TRUE
11249                   ,p_msg_index      => 1
11250                   ,p_msg_count      => l_msg_count
11251                   ,p_msg_data       => l_msg_data
11252                   ,p_data           => l_data
11253                   ,p_msg_index_out  => l_msg_index_out);
11254 
11255            x_msg_data := l_data;
11256            x_msg_count := l_msg_count;
11257        ELSE
11258            x_msg_count := l_msg_count;
11259        END IF;
11260 
11261        x_return_status := FND_API.G_RET_STS_ERROR;
11262 
11263        IF l_debug_mode = 'Y' THEN
11264            pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
11265            pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
11266        -- reset curr function
11267           pa_debug.Reset_Curr_Function();
11268 	END IF;
11269 
11270        RETURN;
11271    WHEN Others THEN
11272        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11273        x_msg_count     := 1;
11274        x_msg_data      := SQLERRM;
11275 
11276        FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'PA_FP_PLANNING_TRANSACTION_PUB'
11277                                ,p_procedure_name  => 'Refresh_Plan_Txns');
11278 
11279        IF l_debug_mode = 'Y' THEN
11280            pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
11281            pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
11282        -- reset curr function
11283           pa_debug.Reset_Curr_Function();
11284        END IF;
11285        RAISE;
11286 END Refresh_Plan_Txns;
11287 
11288 
11289 /* This api will call add_planning_transaction in such a way that calculate api would
11290    never be called . For IPM development added two parameters p_calling_context .
11291    This will be passed as SELECT_TASKS from the select tasks page. The add planning
11292    transactions will be called from here passing the context as create_version. This
11293    is because this flow is also used from the add tasks and resources page to add the
11294    tasks and resources as planning elements depending on the choice.*/
11295 PROCEDURE Create_Default_Task_Plan_Txns (
11296         P_budget_version_id              IN              Number
11297        ,P_version_plan_level_code        IN              VARCHAR2
11298        ,p_calling_context                IN              VARCHAR2
11299        ,p_add_all_resources_flag         IN              VARCHAR2
11300        ,X_return_status                  OUT             NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11301        ,X_msg_count                      OUT             NOCOPY NUMBER --File.Sql.39 bug 4440895
11302        ,X_msg_data                       OUT             NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
11303 AS
11304 
11305 
11306      l_module_name varchar2(100):= 'pa.plsql.pa_fp_planning_transaction_pub';
11307 
11308  -- Start of variables used for debugging purpose
11309      l_msg_count          NUMBER :=0;
11310      l_data               VARCHAR2(2000);
11311      l_msg_data           VARCHAR2(2000);
11312      l_error_msg_code     VARCHAR2(30);
11313      l_msg_index_out      NUMBER;
11314      l_return_status      VARCHAR2(2000);
11315      l_debug_mode         VARCHAR2(30);
11316  -- End of variables used for debugging purpose
11317 
11318 CURSOR version_info_cur (c_budget_version_id number) is
11319 select  bv.project_id
11320        ,PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(bv.project_id) STRUCTURE_VERSION_ID --Bug 3546208
11321        ,bv.fin_plan_type_id
11322        ,Decode(bv.version_type,PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST,pfo.cost_fin_plan_level_code
11323                               ,PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE,pfo.revenue_fin_plan_level_code
11324                               ,PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL,pfo.all_fin_plan_level_code) plan_level_code
11325        ,DECODE(fin_plan_preference_code,
11326                  PA_FP_CONSTANTS_PKG.G_PREF_COST_AND_REV_SAME, pfo.all_resource_list_id,
11327                  PA_FP_CONSTANTS_PKG.G_PREF_COST_ONLY,         pfo.cost_resource_list_id,
11328                  PA_FP_CONSTANTS_PKG.G_PREF_REVENUE_ONLY,      pfo.revenue_resource_list_id) resource_list_id
11329  from  pa_budget_versions bv,
11330        pa_proj_fp_options pfo
11331 where  bv.budget_version_id = c_budget_version_id
11332   and  pfo.project_id = bv.project_id
11333   and  pfo.fin_plan_type_id = bv.fin_plan_type_id
11334   and  pfo.fin_plan_version_id = bv.budget_version_id;
11335 
11336 version_info_rec version_info_cur%ROWTYPE;
11337 
11338 CURSOR lowest_tasks_cur (c_parent_structure_version_id number) is
11339 select v.element_version_id
11340 from   pa_struct_task_wbs_v v
11341 where  v.parent_structure_version_id = c_parent_structure_version_id
11342 and    v.financial_task_flag = 'Y'  -- raja bug 3690418
11343 and    v.task_level = 'L'
11344 and    not exists (select 'x'
11345                    from   pa_resource_assignments pra
11346                    where  pra.budget_version_id = P_budget_version_id
11347                    and    pra.task_id = v.task_id
11348                    and    p_calling_context = 'SELECT_TASKS');
11349 
11350 CURSOR top_tasks_cur (c_project_id number, c_parent_structure_version_id number) is
11351 select b.element_version_id
11352 from   pa_tasks a, pa_proj_element_versions b
11353 /* Replaced pa_struct_task_wbs_v with base tables for performance reasons.
11354  * Note that financial_task_flag of pa_proj_element_versions cannot be used
11355  * since it is set to Y even for tasks that are part of fin struct ver but not
11356  * yet published. (I.e., It could be Y for tasks not present in pa_tasks too). This
11357  * required a join with pa_tasks to identify true fin tasks which can be
11358  * budgeted for */
11359 where  b.parent_structure_version_id = c_parent_structure_version_id
11360 and    b.object_type = 'PA_TASKS'
11361 and    a.project_id = c_project_id
11362 and    a.project_id = b.project_id
11363 and    a.task_id = b.proj_element_id
11364 and    a.task_id = a.top_task_id
11365 and    not exists (select 'x'
11366                    from   pa_resource_assignments pra
11367                    where  pra.budget_version_id = P_budget_version_id
11368                    and    pra.task_id = a.task_id
11369                    and    p_calling_context = 'SELECT_TASKS');
11370 
11371 l_max_fetch_size                  NUMBER := 200;
11372 
11373 l_element_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
11374 
11375 --l_proj_element_id_tbl element_versions_tbl1_type;
11376 --l_element_version_id_tbl  element_versions_tbl2_type;
11377 l_resource_list_member_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
11378 
11379 l_start_date pa_projects_all.start_date%TYPE;
11380 l_completion_date pa_projects_all.completion_date%TYPE;
11381 
11382 l_res_list_is_uncategorized   VARCHAR2(1);
11383 l_is_resource_list_grouped    VARCHAR2(1);
11384 l_group_resource_type_id      NUMBER;
11385 
11386 l_people_res_class_rlm_id    pa_resource_list_members.resource_list_member_id%TYPE;
11387 l_equip_res_class_rlm_id     pa_resource_list_members.resource_list_member_id%TYPE;
11388 l_fin_res_class_rlm_id       pa_resource_list_members.resource_list_member_id%TYPE :=0;
11389 l_mat_res_class_rlm_id       pa_resource_list_members.resource_list_member_id%TYPE;
11390 
11391 l_plan_class_code pa_fin_plan_types_b.plan_class_code%TYPE;
11392 
11393 BEGIN
11394      FND_MSG_PUB.initialize;
11395      fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
11396      l_debug_mode := NVL(l_debug_mode, 'Y');
11397 IF l_debug_mode = 'Y' THEN
11398      pa_debug.set_curr_function( p_function => 'Create_Default_Task_Plan_Txns',
11399                                  p_debug_mode => l_debug_mode );
11400 END IF;
11401      x_msg_count := 0;
11402      x_return_status := FND_API.G_RET_STS_SUCCESS;
11403 
11404 
11405      -- Check for business rules violations
11406 
11407      IF l_debug_mode = 'Y' THEN
11408          pa_debug.g_err_stage:='Validating input parameters';
11409          pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11410      END IF;
11411 
11412      -- Check if budget version id is null
11413 
11414      IF (P_budget_version_id  IS NULL) OR
11415         (nvl(p_calling_context,'-1') NOT IN ('CREATE_VERSION','SELECT_TASKS')) OR
11416         (nvl(p_add_all_resources_flag,'x') NOT IN ('Y','N'))
11417      THEN
11418 
11419          IF l_debug_mode = 'Y' THEN
11420              pa_debug.g_err_stage:='P_budget_version_id = '||P_budget_version_id;
11421              pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
11422          END IF;
11423 
11424          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11425                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
11426 
11427          IF l_debug_mode = 'Y' THEN
11428              pa_debug.g_err_stage:='Invalid Arguments Passed';
11429              pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
11430          END IF;
11431          RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11432 
11433      END IF;
11434 
11435  --Fetch budget version values
11436 
11437      IF l_debug_mode = 'Y' THEN
11438          pa_debug.g_err_stage:='Fetching budget version properties';
11439          pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11440      END IF;
11441 
11442      OPEN version_info_cur(P_budget_version_id);
11443      FETCH version_info_cur INTO version_info_rec;
11444      CLOSE version_info_cur;
11445 
11446           --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> valueof input '|| P_version_plan_level_code);
11447      IF P_version_plan_level_code IS NOT NULL THEN
11448          version_info_rec.plan_level_code := P_version_plan_level_code;
11449      END IF;
11450           --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> valueof version_info_rec '|| version_info_rec.plan_level_code);
11451 
11452  --Fetch Start Date and Completion Date
11453 
11454      BEGIN
11455          SELECT start_date,completion_date
11456          INTO l_start_date,l_completion_date
11457          FROM pa_projects_all
11458          WHERE project_id = version_info_rec.project_id;
11459      EXCEPTION
11460          WHEN OTHERS THEN
11461               IF l_debug_mode = 'Y' THEN
11462                  pa_debug.g_err_stage:='Error while fetching start and completion dates for the project';
11463                  pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11464               END IF;
11465               RAISE;
11466      END;
11467 
11468 
11469          PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids
11470          (p_project_id                   =>    version_info_rec.project_id,
11471           p_resource_list_id             =>    version_info_rec.resource_list_id,
11472           x_people_res_class_rlm_id      =>    l_people_res_class_rlm_id,
11473           x_equip_res_class_rlm_id       =>    l_equip_res_class_rlm_id ,
11474           x_fin_res_class_rlm_id         =>    l_fin_res_class_rlm_id   ,
11475           x_mat_res_class_rlm_id         =>    l_mat_res_class_rlm_id   ,
11476           x_return_status                =>    l_return_status,
11477           x_msg_count                    =>    l_msg_count,
11478           x_msg_data                     =>    l_msg_data);
11479           --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> rlmids'|| l_people_res_class_rlm_id || 'x' || l_equip_res_class_rlm_id || 'x' || l_fin_res_class_rlm_id || 'x' || l_mat_res_class_rlm_id);
11480 
11481          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11482              IF l_debug_mode = 'Y' THEN
11483                 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
11484                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns:  ' || l_module_name,pa_debug.g_err_stage,5);
11485              END IF;
11486              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11487          END IF;
11488 
11489      BEGIN
11490         SELECT plan_class_code
11491         INTO l_plan_class_code
11492         FROM pa_fin_plan_types_b
11493         where fin_plan_type_id = version_info_rec.fin_plan_type_id;
11494 
11495      EXCEPTION
11496          WHEN OTHERS THEN
11497               IF l_debug_mode = 'Y' THEN
11498                   pa_debug.g_err_stage:='Error while fetching plan_class_code for the budget_version_id';
11499                   pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
11500                END IF;
11501               RAISE;
11502      END;
11503 
11504           --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> plan_class_code '|| l_plan_class_code);
11505 
11506      IF p_add_all_resources_flag <> 'Y' THEN
11507          l_resource_list_member_id_tbl.extend(1);
11508          l_resource_list_member_id_tbl(1):= l_fin_res_class_rlm_id;
11509      ELSE
11510          SELECT resource_list_member_id BULK COLLECT
11511          INTO l_resource_list_member_id_tbl
11512          FROM   pa_resource_list_members prl,
11513                 PA_PLAN_RES_DEFAULTS pr, /*7291493*/
11514                (SELECT  control_flag
11515                 FROM    pa_resource_lists_all_bg
11516                 WHERE   resource_list_id = version_info_rec.resource_list_id) rl_control_flag
11517          WHERE resource_list_id = version_info_rec.resource_list_id
11518          AND   ((rl_control_flag.control_flag = 'N' AND
11519                  prl.object_type = 'PROJECT' AND
11520                  prl.object_id = version_info_rec.project_id)
11521                  OR
11522                 (rl_control_flag.control_flag = 'Y' AND
11523                  prl.object_type = 'RESOURCE_LIST' AND
11524                  prl.object_id = version_info_rec.resource_list_id)) AND
11525                  prl.resource_class_id = pr.resource_class_id AND
11526                  pr.enabled_flag = 'Y';
11527      END IF;
11528 
11529 
11530      IF version_info_rec.plan_level_code = PA_FP_CONSTANTS_PKG.G_BUDGET_ENTRY_LEVEL_PROJECT THEN
11531             IF l_debug_mode = 'Y' THEN
11532                 pa_debug.g_err_stage:= 'Planning at project level: Inserting a record';
11533                 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11534             END IF;
11535 
11536         l_element_version_id_tbl.extend(1);
11537             l_element_version_id_tbl(1):= 0;
11538 
11539             pa_fp_planning_transaction_pub.add_planning_transactions (
11540             p_context                     =>      l_plan_class_code
11541             /* Passing calling module as creation version, since we dont want calculate api to be called */
11542            ,p_calling_module              =>      'CREATE_VERSION'
11543            ,p_project_id                  =>      version_info_rec.project_id
11544            ,p_budget_version_id           =>      p_budget_version_id
11545            ,p_task_elem_version_id_tbl    =>      l_element_version_id_tbl
11546            ,p_resource_list_member_id_tbl =>      l_resource_list_member_id_tbl
11547            ,x_return_status               =>      l_return_status
11548            ,x_msg_count                   =>      l_msg_count
11549            ,x_msg_data                    =>      l_msg_data     );
11550 
11551            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11552               IF l_debug_mode = 'Y' THEN
11553                  pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
11554                      pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns:  ' || l_module_name,pa_debug.g_err_stage,5);
11555               END IF;
11556               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11557            END IF;
11558 
11559 
11560     ELSIF version_info_rec.plan_level_code = PA_FP_CONSTANTS_PKG.G_BUDGET_ENTRY_LEVEL_TOP THEN
11561             IF l_debug_mode = 'Y' THEN
11562                 pa_debug.g_err_stage:= 'Planning at top task level: Opening cursor top_tasks_cur';
11563                 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11564             END IF;
11565 
11566             OPEN top_tasks_cur( version_info_rec.project_id, version_info_rec.structure_version_id);
11567 
11568             IF l_debug_mode = 'Y' THEN
11569                 pa_debug.g_err_stage:= 'Fetching cursor values for top tasks and doing bulk insert';
11570                 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11571             END IF;
11572 
11573         LOOP
11574             FETCH top_tasks_cur BULK COLLECT INTO l_element_version_id_tbl LIMIT l_max_fetch_size;
11575 
11576             IF nvl(l_element_version_id_tbl.last,0) >= 1 THEN
11577                 pa_fp_planning_transaction_pub.add_planning_transactions (
11578                 p_context                     =>      l_plan_class_code
11579                 /* Passing calling module as creation version, since we dont want calculate api to be called */
11580                ,p_calling_module              =>      'CREATE_VERSION'
11581                ,p_project_id                  =>      version_info_rec.project_id
11582                ,p_budget_version_id           =>      p_budget_version_id
11583                ,p_task_elem_version_id_tbl    =>      l_element_version_id_tbl
11584                ,p_resource_list_member_id_tbl =>      l_resource_list_member_id_tbl
11585                ,x_return_status               =>      l_return_status
11586                ,x_msg_count                   =>      l_msg_count
11587                ,x_msg_data                    =>      l_msg_data     );
11588             END IF;
11589 
11590             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11591                  IF l_debug_mode = 'Y' THEN
11592                     pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
11593                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns:  ' || l_module_name,pa_debug.g_err_stage,5);
11594                  END IF;
11595                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11596             END IF;
11597        -- Exit if fetch size is less than 200
11598             EXIT WHEN NVL(l_element_version_id_tbl.last,0) < l_max_fetch_size;
11599         END LOOP;
11600 
11601         CLOSE top_tasks_cur;
11602 
11603     ELSIF version_info_rec.plan_level_code = PA_FP_CONSTANTS_PKG.G_BUDGET_ENTRY_LEVEL_LOWEST THEN
11604           --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> '||PA_FP_CONSTANTS_PKG.G_BUDGET_ENTRY_LEVEL_LOWEST);
11605 
11606         IF l_debug_mode = 'Y' THEN
11607             pa_debug.g_err_stage:= 'Planning at lowest task level: Opening cursor lowest_tasks_cur';
11608             pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11609         END IF;
11610 
11611         OPEN lowest_tasks_cur( version_info_rec.structure_version_id);
11612 
11613         IF l_debug_mode = 'Y' THEN
11614             pa_debug.g_err_stage:= 'Fetching cursor values for lowest tasks and doing bulk insert';
11615             pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11616         END IF;
11617 
11618 
11619 
11620         LOOP
11621             FETCH lowest_tasks_cur BULK COLLECT INTO l_element_version_id_tbl LIMIT l_max_fetch_size;
11622 
11623                IF nvl(l_element_version_id_tbl.last,0) >= 1 THEN
11624                     pa_fp_planning_transaction_pub.add_planning_transactions (
11625                     p_context                     =>      l_plan_class_code
11626                     /* Passing calling module as creation version, since we dont want calculate api to be called */
11627                    ,p_calling_module              =>      'CREATE_VERSION'
11628                    ,p_project_id                  =>      version_info_rec.project_id
11629                    ,p_budget_version_id           =>      p_budget_version_id
11630                    ,p_task_elem_version_id_tbl    =>      l_element_version_id_tbl
11631                    ,p_resource_list_member_id_tbl =>      l_resource_list_member_id_tbl
11632                    ,x_return_status               =>      l_return_status
11633                    ,x_msg_count                   =>      l_msg_count
11634                    ,x_msg_data                    =>      l_msg_data     );
11635 
11636                     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11637                       IF l_debug_mode = 'Y' THEN
11638                          pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
11639                          pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns:  ' || l_module_name,pa_debug.g_err_stage,5);
11640                       END IF;
11641                       RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11642                     END IF;
11643                END IF;
11644          -- Exit if fetch size is less than 200
11645             EXIT WHEN NVL(l_element_version_id_tbl.last,0) < l_max_fetch_size;
11646         END LOOP;
11647 
11648        CLOSE lowest_tasks_cur;
11649     END IF;
11650 
11651     IF l_debug_mode = 'Y' THEN
11652        pa_debug.g_err_stage:='Exiting Create_Default_Task_Plan_Txns:';
11653        pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11654       --Reset the error stack
11655        pa_debug.reset_curr_function;
11656     END IF;
11657 EXCEPTION
11658 
11659    WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11660           l_msg_count := FND_MSG_PUB.count_msg;
11661           IF l_msg_count = 1 THEN
11662                PA_INTERFACE_UTILS_PUB.get_messages
11663                      (p_encoded        => FND_API.G_TRUE
11664                       ,p_msg_index      => 1
11665                       ,p_msg_count      => l_msg_count
11666                       ,p_msg_data       => l_msg_data
11667                       ,p_data           => l_data
11668                       ,p_msg_index_out  => l_msg_index_out);
11669                x_msg_data := l_data;
11670                x_msg_count := l_msg_count;
11671           ELSE
11672               x_msg_count := l_msg_count;
11673           END IF;
11674            x_return_status := FND_API.G_RET_STS_ERROR;
11675 --           pa_debug.g_err_stage:='Invalid Arguments Passed';
11676 --           pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
11677 	IF l_debug_mode = 'Y' THEN
11678            pa_debug.reset_curr_function;
11679 	END IF;
11680            RETURN;
11681 
11682      WHEN Others THEN
11683           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11684           x_msg_count     := 1;
11685           x_msg_data      := SQLERRM;
11686           FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'PA_FP_PLANNING_TRANSACTION_PUB'
11687                                   ,p_procedure_name  => 'CREATE_DEFAULT_TASK_PLAN_TXNS');
11688           IF l_debug_mode = 'Y' THEN
11689               pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
11690               pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
11691               pa_debug.reset_curr_function;
11692 	  END IF;
11693           RAISE;
11694 
11695 END Create_Default_Task_Plan_Txns;
11696 
11697 /*=============================================================================
11698  This api is called upon save from Additional Workplan Options page.
11699  For versioning disabled case working version should be updated with values
11700  that of parent plan type record. The changes include deleting all the
11701  existing budget lines, resource assignments. Pa_proj_fp_options and
11702  pa_budget_versions should be updated with changed values.
11703 
11704  Bug 3595063 For a shared structure, update current working version with the
11705              new settings.
11706 
11707  Bug 3619687 **** Completely changed as per the new business rules ********
11708              Whenever there is a change in the Additional Workplan setting page,
11709              all the chages should be propagated to all the underlying workplan
11710              versions immediately upon save. If there is a change in RBS header,
11711              effort data for all the versions including published versions
11712              should be re-mapped and re-summarized
11713 
11714  Bug 3619687 **** 15-Jun-2004 Additional Change Request for RBS change ****
11715              Whenever there is a change for RBS if versioning is disabled for
11716              the workplan structure, the change should be propagated to the
11717              workplan version immediately. If versioning is enabled, the change
11718              is applicable for all the future versions.
11719 
11720 Bug 3619687 **** 25-Jun-2004 Additional Change Request  ****
11721             Whenever there is a change to track workplan costs flag, calculate
11722             should be called for the costs to be calculted or nulled out as per
11723             the change.
11724 Bug 3725414 **** 28-Jun-2004  rbs_version_change should be propagated to working
11725             workplan version(s) of shared + versioning enabled structure
11726 
11727 Bug 3937716 **** 07-Oct-2004 When time phasing has changed, pji data is not
11728             correct at the end of the process. Reason: delete_planning_transactions
11729             and calculate() do not have the old time phased code to pass it to
11730             the PJI update api for negating existing data. So, its decided that we
11731             change the above two apis not to call PJI apis in this flow and call
11732             plan_delete(), plan_create() at the end.
11733 ===============================================================================*/
11734 
11735 PROCEDURE REFRESH_WP_SETTINGS(
11736            p_project_id                 IN      pa_budget_versions.project_id%TYPE
11737           ,p_resource_list_change       IN      VARCHAR2    DEFAULT 'N'    -- Bug 3619687
11738           ,p_time_phase_change          IN      VARCHAR2    DEFAULT 'N'    -- Bug 3619687
11739           ,p_rbs_version_change         IN      VARCHAR2    DEFAULT 'N'    -- Bug 3619687
11740           ,p_track_costs_flag_change    IN      VARCHAR2    DEFAULT 'N'    -- Bug 3619687
11741           ,x_return_status              OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11742           ,x_msg_count                  OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
11743           ,x_msg_data                   OUT     NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
11744 AS
11745 
11746     --Start of variables used for debugging
11747 
11748     l_return_status      VARCHAR2(1);
11749     l_msg_count          NUMBER := 0;
11750     l_msg_data           VARCHAR2(2000);
11751     l_data               VARCHAR2(2000);
11752     l_msg_index_out      NUMBER;
11753     l_debug_mode         VARCHAR2(30);
11754     l_error_msg_code     VARCHAR2(30);
11755 
11756     --End of variables used for debugging
11757 
11758     l_budget_version_id_tbl          SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
11759     l_proj_fp_options_id_tbl         SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
11760     l_task_version_id_tbl            SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
11761     l_task_name_tbl                  SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
11762     l_task_number_tbl                SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
11763     l_res_assignment_id_tbl          SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
11764 
11765     l_people_res_class_rlm_id    pa_resource_list_members.resource_list_member_id%TYPE;
11766     l_equip_res_class_rlm_id     pa_resource_list_members.resource_list_member_id%TYPE;
11767     l_fin_res_class_rlm_id       pa_resource_list_members.resource_list_member_id%TYPE;
11768     l_mat_res_class_rlm_id       pa_resource_list_members.resource_list_member_id%TYPE;
11769 
11770     l_txn_source_id_tbl          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11771     l_res_list_member_id_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11772     l_rbs_element_id_tbl         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11773     l_txn_accum_header_id_tbl    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11774 
11775     l_res_assignment_count       NUMBER;
11776     l_wp_versioning_enabled_flag VARCHAR2(1);
11777     l_pub_budget_version_id_tbl          SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
11778     l_pub_proj_fp_options_id_tbl         SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
11779     l_proj_struct_ver_id_tbl             SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
11780 
11781 
11782     CURSOR parent_plan_type_cur IS
11783       SELECT  pfo.proj_fp_options_id
11784              ,pfo.track_workplan_costs_flag
11785              ,pfo.plan_in_multi_curr_flag
11786              ,pfo.rbs_version_id
11787              ,pfo.margin_derived_from_code
11788              ,pfo.factor_by_code
11789              ,pfo.cost_resource_list_id
11790              ,pfo.select_cost_res_auto_flag
11791              ,pfo.cost_time_phased_code
11792              ,pfo.cost_current_planning_period
11793              ,pfo.cost_period_mask_id
11794              ,pfo.projfunc_cost_rate_type
11795              ,pfo.projfunc_cost_rate_date_type
11796              ,pfo.projfunc_cost_rate_date
11797              ,pfo.project_cost_rate_type
11798              ,pfo.project_cost_rate_date_type
11799              ,pfo.project_cost_rate_date
11800              ,pfo.use_planning_rates_flag
11801              ,pfo.res_class_raw_cost_sch_id
11802              ,pfo.cost_emp_rate_sch_id
11803              ,pfo.cost_job_rate_sch_id
11804              ,pfo.cost_non_labor_res_rate_sch_id
11805              ,pfo.cost_res_class_rate_sch_id
11806              ,pfo.cost_burden_rate_sch_id
11807       FROM   pa_proj_fp_options pfo
11808              ,pa_fin_plan_types_b fpt
11809       WHERE  pfo.project_id = p_project_id
11810       AND    pfo.fin_plan_type_id = fpt.fin_plan_type_id
11811       AND    fpt.use_for_workplan_flag = 'Y'
11812       AND    pfo.fin_plan_option_level_code = 'PLAN_TYPE';
11813 
11814     parent_plan_type_rec    parent_plan_type_cur%ROWTYPE;
11815 
11816     -- Cursor to fetch all the working version including submitted version
11817     -- if any to update the versions with the changes in workplan setting
11818     -- page. Change in resoruce list and time phasing is restricted if there
11819     -- is a baselined or submitted version.
11820     CURSOR working_workplan_versions_cur  IS
11821       SELECT bv.budget_version_id
11822              ,pfo.proj_fp_options_id
11823              ,bv.project_structure_version_id
11824         FROM pa_budget_versions bv,
11825              pa_proj_elem_ver_structure ver,
11826              pa_proj_fp_options pfo
11827        WHERE bv.project_id = p_project_id
11828          AND bv.wp_version_flag = 'Y'
11829          AND bv.project_id = ver.project_id
11830          AND bv.project_structure_version_id = ver.element_version_id
11831          AND (l_wp_versioning_enabled_flag = 'N' OR  -- UT
11832                ver.status_code IN('STRUCTURE_WORKING','STRUCTURE_SUBMITTED'))
11833          AND pfo.project_id = p_project_id
11834          AND pfo.fin_plan_version_id = bv.budget_version_id;
11835 
11836     CURSOR published_versions_cur  IS
11837       SELECT bv.budget_version_id
11838              ,pfo.proj_fp_options_id
11839         FROM pa_budget_versions bv,
11840              pa_proj_elem_ver_structure ver,
11841              pa_proj_fp_options pfo
11842        WHERE bv.project_id = p_project_id
11843          AND bv.wp_version_flag = 'Y'
11844          AND bv.project_id = ver.project_id
11845          AND bv.project_structure_version_id = ver.element_version_id
11846          AND ver.status_code IN ('STRUCTURE_PUBLISHED')
11847          AND pfo.project_id = p_project_id
11848          AND pfo.fin_plan_version_id = bv.budget_version_id;
11849 
11850 
11851     -- Cursor to fetch required input data to delete task assignments
11852     -- for a workplan version. Using this data delete_planning_transactions
11853     -- api is called
11854     CURSOR data_for_delete_plan_txns_cur (c_budget_version_id NUMBER) IS
11855       SELECT wbs_element_version_id
11856              ,name
11857              ,element_number
11858              ,resource_assignment_id
11859       FROM   pa_resource_assignments pra
11860              ,pa_proj_elements ppe
11861       WHERE  pra.project_id = p_project_id
11862       AND    pra.budget_version_id = c_budget_version_id
11863       AND    pra.ta_display_flag = 'Y'
11864       AND    pra.task_id = ppe.proj_element_id;
11865 
11866     -- Cursor to fetch all the workplan versions for the project
11867     -- including the publsihed versions for RBS refresh
11868     CURSOR all_workplan_versions_cur IS
11869       SELECT bv.budget_version_id
11870              ,pfo.proj_fp_options_id
11871         FROM pa_budget_versions bv
11872              ,pa_proj_fp_options pfo
11873        WHERE bv.project_id = p_project_id
11874          AND bv.wp_version_flag = 'Y'
11875          AND pfo.fin_plan_version_id = bv.budget_version_id
11876          AND pfo.project_id = bv.project_id;
11877 
11878 BEGIN
11879 
11880     x_msg_count := 0;
11881     x_return_status := FND_API.G_RET_STS_SUCCESS;
11882 
11883     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
11884     l_debug_mode := NVL(l_debug_mode, 'Y');
11885 
11886     -- Set curr function
11887 IF l_debug_mode = 'Y' THEN
11888     pa_debug.set_curr_function(
11889                 p_function   =>'PA_FP_PLANNING_TRANSACTION_PUB.REFRESH_WP_SETTINGS'
11890                ,p_debug_mode => l_debug_mode );
11891 END IF;
11892     -- Check for business rules violations
11893     IF l_debug_mode = 'Y' THEN
11894         pa_debug.g_err_stage:='Validating input parameters';
11895         pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
11896     END IF;
11897 
11898     IF (p_project_id IS NULL)
11899     THEN
11900 
11901         IF l_debug_mode = 'Y' THEN
11902            pa_debug.g_err_stage:='Project_id = '||p_project_id;
11903            pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
11904         END IF;
11905 
11906         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11907                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
11908 
11909         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11910 
11911     END IF;
11912 
11913     -- Fetch all the plan type values that could have changed
11914     OPEN  parent_plan_type_cur;
11915     FETCH parent_plan_type_cur INTO parent_plan_type_rec;
11916     CLOSE parent_plan_type_cur;
11917 
11918     IF l_debug_mode = 'Y' THEN
11919         pa_debug.g_err_stage:='getting plan type info';
11920         pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
11921     END IF;
11922 
11923 
11924     -- Check if versioning is enabled for wp structure
11925     l_wp_versioning_enabled_flag := PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id);
11926 
11927     -- Fetch all the working plan versions in a table
11928     OPEN working_workplan_versions_cur;
11929     FETCH working_workplan_versions_cur
11930       BULK COLLECT INTO l_budget_version_id_tbl,l_proj_fp_options_id_tbl , l_proj_struct_ver_id_tbl;
11931     CLOSE working_workplan_versions_cur;
11932 
11933 
11934     IF l_debug_mode = 'Y' THEN
11935         pa_debug.g_err_stage:='getting woking versions';
11936         pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
11937     END IF;
11938 
11939 
11940     --  Adding for bug 4543744
11941     /*   Collecting all the working version records and inserting into the pji table
11942          with negative values of budget lines                                     */
11943         IF nvl(p_resource_list_change, 'N') = 'Y' OR nvl(p_time_phase_change, 'N') = 'Y'
11944            OR nvl(p_track_costs_flag_change, 'N') = 'Y' OR (nvl(p_rbs_version_change, 'N') = 'Y' AND
11945                (nvl(PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id),'N') = 'N'
11946                 OR nvl(PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id),'N') = 'Y')) THEN
11947 
11948                 IF l_debug_mode = 'Y' THEN
11949                    pa_debug.g_err_stage:='About to insert negative lines';
11950                    pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
11951                    pa_debug.g_err_stage:='l_budget_version_id_tbl' || l_budget_version_id_tbl.count;
11952                    pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
11953 
11954                 END IF;
11955 
11956 
11957                 FOR i IN l_budget_version_id_tbl.FIRST .. l_budget_version_id_tbl.LAST
11958                 LOOP
11959 
11960                     IF l_debug_mode = 'Y' THEN
11961                        pa_debug.g_err_stage:='Calling call_update_rep_lines' || l_budget_version_id_tbl(i);
11962                        pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
11963                     END IF;
11964 
11965                     PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api
11966                     --( p_source                  => 'POPULATE_PJI_TABLE'    --Commented for bug 5073350.
11967                     ( p_source                  => 'REFRESH_WP_SETTINGS'
11968                      ,p_budget_version_id       => l_budget_version_id_tbl(i)
11969                      ,p_qty_sign                => -1
11970                      ,x_return_status           => x_return_status
11971                      ,x_msg_data                => x_msg_data
11972                      ,x_msg_count               => x_msg_count);
11973 
11974                   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11975 
11976                       IF l_debug_mode = 'Y' THEN
11977                           pa_debug.g_err_stage:='PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api returned error';
11978                           pa_debug.write( g_module_name,pa_debug.g_err_stage,5);
11979                       END IF;
11980                       RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
11981                   END IF;
11982 
11983                 END LOOP;
11984 
11985         END IF; -- inserting negative rows
11986 
11987     IF l_debug_mode = 'Y' THEN
11988         pa_debug.g_err_stage:='inserted -ve lines';
11989         pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
11990     END IF;
11991 
11992 
11993      IF nvl(p_resource_list_change, 'N') = 'Y' THEN
11994 
11995         OPEN published_versions_cur;
11996         FETCH published_versions_cur
11997           BULK COLLECT INTO l_pub_budget_version_id_tbl,l_pub_proj_fp_options_id_tbl ;
11998         CLOSE published_versions_cur;
11999 
12000         IF l_pub_budget_version_id_tbl.COUNT > 0 THEN
12001 
12002             PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids
12003                  ( p_project_id                   =>    p_project_id
12004                   ,p_resource_list_id             =>    parent_plan_type_rec.cost_resource_list_id
12005                   ,x_people_res_class_rlm_id      =>    l_people_res_class_rlm_id
12006                   ,x_equip_res_class_rlm_id       =>    l_equip_res_class_rlm_id
12007                   ,x_fin_res_class_rlm_id         =>    l_fin_res_class_rlm_id
12008                   ,x_mat_res_class_rlm_id         =>    l_mat_res_class_rlm_id
12009                   ,x_return_status                =>    x_return_status
12010                   ,x_msg_count                    =>    x_msg_count
12011                   ,x_msg_data                     =>    x_msg_data);
12012 
12013             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12014                 IF l_debug_mode = 'Y' THEN
12015                    pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
12016                    pa_debug.write('REFRESH_WP_SETTINGS:  ' || g_module_name,pa_debug.g_err_stage,5);
12017                 END IF;
12018                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12019             END IF;
12020 
12021             FORALL i IN l_pub_budget_version_id_tbl.first .. l_pub_budget_version_id_tbl.last
12022                   --Fix for bug#7279771, uncommented the code comment done earlier for resource_class_code,
12023                   --resource_class_flag,ta_display_flag
12024                     UPDATE pa_resource_assignments
12025                     SET    resource_list_member_id  = l_people_res_class_rlm_id
12026                     WHERE  budget_version_id = l_pub_budget_version_id_tbl(i)
12027                     /* The only records present in pa_resource_assignments for published versions with resource
12028                        list NONE would fall under the below cateogry. Not including them as part of select as they
12029                        dont add any value to performance interms of better index usage. Retaining them in the comment
12030                        for understanding purpose */
12031                     AND    resource_class_code = 'PEOPLE'
12032                     AND    resource_class_flag = 'Y'
12033                     AND    ta_display_flag = 'N';
12034             /* Assumptions: When resource list changes for published version, pa_progress_rollup would have only task level PEOPLE assignments.
12035                Hence we are updating all records in pa_progress_rollup with the new rlmid petaining to people class rlm for published versions. */
12036             UPDATE pa_progress_rollup
12037             SET  object_id = l_people_res_class_rlm_id
12038             WHERE project_id = p_project_id AND
12039             object_type = 'PA_ASSIGNMENTS' AND
12040             structure_type = 'WORKPLAN' AND
12041             structure_Version_id is NULL; /* Only published versions */
12042             /* Note that we are not updating working wp versions pa_progress_rollup since there is some
12043               processing done for working wp versions in the loop below (delete planning transactions etc
12044              and we want to ensure this update is done after the processing */
12045 
12046           /* We also need to update the resource list id in the pa_budget_versions table as well as the
12047              pa_proj_fp_options table .*/
12048             FORALL i IN l_pub_proj_fp_options_id_tbl.first .. l_pub_proj_fp_options_id_tbl.last
12049             UPDATE pa_proj_fp_options
12050             SET cost_resource_list_id             =  parent_plan_type_rec.cost_resource_list_id
12051              ,record_version_number               =  record_version_number + 1
12052              ,last_update_date                    =  SYSDATE
12053              ,last_updated_by                     =  FND_GLOBAL.user_id
12054              ,last_update_login                   =  FND_GLOBAL.login_id
12055             where proj_fp_options_id  = l_pub_proj_fp_options_id_tbl(i);
12056 
12057             FORALL i IN l_pub_budget_version_id_tbl.first .. l_pub_budget_version_id_tbl.last
12058             UPDATE pa_budget_versions
12059             SET   resource_list_id                = parent_plan_type_rec.cost_resource_list_id
12060              ,record_version_number               =  record_version_number + 1
12061              ,last_update_date                    =  SYSDATE
12062              ,last_updated_by                     =  FND_GLOBAL.user_id
12063              ,last_update_login                   =  FND_GLOBAL.login_id
12064             where budget_version_id  = l_pub_budget_version_id_tbl(i);
12065 
12066         END IF;
12067      END IF;
12068 
12069 
12070 
12071     IF  nvl(l_budget_version_id_tbl.count, 0) > 0 THEN
12072 
12073         -- Update proj_fp_options data for all the working versions in bulk
12074         FORALL i IN l_proj_fp_options_id_tbl.first .. l_proj_fp_options_id_tbl.last
12075         UPDATE pa_proj_fp_options
12076         SET   track_workplan_costs_flag           =  parent_plan_type_rec.track_workplan_costs_flag
12077              ,plan_in_multi_curr_flag             =  parent_plan_type_rec.plan_in_multi_curr_flag
12078             -- Raja ,rbs_version_id                      =  parent_plan_type_rec.rbs_version_id
12079              ,margin_derived_from_code            =  parent_plan_type_rec.margin_derived_from_code
12080              ,factor_by_code                      =  parent_plan_type_rec.factor_by_code
12081              ,cost_resource_list_id               =  parent_plan_type_rec.cost_resource_list_id
12082              ,select_cost_res_auto_flag           =  parent_plan_type_rec.select_cost_res_auto_flag
12083              ,cost_time_phased_code               =  parent_plan_type_rec.cost_time_phased_code
12084              ,cost_current_planning_period        =  parent_plan_type_rec.cost_current_planning_period
12085              ,cost_period_mask_id                 =  parent_plan_type_rec.cost_period_mask_id
12086              ,projfunc_cost_rate_type             =  parent_plan_type_rec.projfunc_cost_rate_type
12087              ,projfunc_cost_rate_date_type        =  parent_plan_type_rec.projfunc_cost_rate_date_type
12088              ,projfunc_cost_rate_date             =  parent_plan_type_rec.projfunc_cost_rate_date
12089              ,project_cost_rate_type              =  parent_plan_type_rec.project_cost_rate_type
12090              ,project_cost_rate_date_type         =  parent_plan_type_rec.project_cost_rate_date_type
12091              ,project_cost_rate_date              =  parent_plan_type_rec.project_cost_rate_date
12092              ,use_planning_rates_flag             =  parent_plan_type_rec.use_planning_rates_flag
12093              ,res_class_raw_cost_sch_id           =  parent_plan_type_rec.res_class_raw_cost_sch_id
12094              ,cost_emp_rate_sch_id                =  parent_plan_type_rec.cost_emp_rate_sch_id
12095              ,cost_job_rate_sch_id                =  parent_plan_type_rec.cost_job_rate_sch_id
12096              ,cost_non_labor_res_rate_sch_id      =  parent_plan_type_rec.cost_non_labor_res_rate_sch_id
12097              ,cost_res_class_rate_sch_id          =  parent_plan_type_rec.cost_res_class_rate_sch_id
12098              ,cost_burden_rate_sch_id             =  parent_plan_type_rec.cost_burden_rate_sch_id
12099              ,record_version_number               =  record_version_number + 1
12100              ,last_update_date                    =  SYSDATE
12101              ,last_updated_by                     =  FND_GLOBAL.user_id
12102              ,last_update_login                   =  FND_GLOBAL.login_id
12103         WHERE proj_fp_options_id  = l_proj_fp_options_id_tbl(i);
12104 
12105         -- Update budget_versions data for all the working versions in bulk
12106 
12107         FORALL i IN l_budget_version_id_tbl.first .. l_budget_version_id_tbl.last
12108         UPDATE pa_budget_versions
12109         SET   resource_list_id            = parent_plan_type_rec.cost_resource_list_id
12110              ,current_planning_period     = parent_plan_type_rec.cost_current_planning_period
12111              ,period_mask_id              = parent_plan_type_rec.cost_period_mask_id
12112              -- Bug 3630069 Amounts should not be updated with 0. These columns are taken care of
12113              -- by delete planning transactions api if there is any change to this amount
12114              /***
12115                  ,raw_cost                    = 0
12116                  ,burdened_cost               = 0
12117                  ,total_project_raw_cost      = 0
12118                  ,total_project_burdened_cost = 0
12119                  ,labor_quantity              = 0
12120                  ,equipment_quantity          = 0
12121              ***/
12122              ,last_update_date            = SYSDATE
12123              ,last_updated_by             = FND_GLOBAL.user_id
12124              ,last_update_login           = FND_GLOBAL.login_id
12125              ,record_version_number       = record_version_number + 1
12126         WHERE budget_version_id =  l_budget_version_id_tbl(i);
12127 
12128         /* Bug 4200168: FP.M:B12: Pref Changes: Called the following api outside the BV loop
12129          */
12130         -- If resource list has changed task level resource assignments
12131         -- should be re-mapped with new People resource class rlmid
12132         -- Fetching the resource class rlm only if not fetched already during published version processing
12133         IF nvl(p_resource_list_change, 'N') = 'Y' AND l_people_res_class_rlm_id IS NULL THEN
12134             PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids
12135                  ( p_project_id                   =>    p_project_id
12136                   ,p_resource_list_id             =>    parent_plan_type_rec.cost_resource_list_id
12137                   ,x_people_res_class_rlm_id      =>    l_people_res_class_rlm_id
12138                   ,x_equip_res_class_rlm_id       =>    l_equip_res_class_rlm_id
12139                   ,x_fin_res_class_rlm_id         =>    l_fin_res_class_rlm_id
12140                   ,x_mat_res_class_rlm_id         =>    l_mat_res_class_rlm_id
12141                   ,x_return_status                =>    x_return_status
12142                   ,x_msg_count                    =>    x_msg_count
12143                   ,x_msg_data                     =>    x_msg_data);
12144 
12145             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12146                 IF l_debug_mode = 'Y' THEN
12147                    pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
12148                    pa_debug.write('REFRESH_WP_SETTINGS:  ' || g_module_name,pa_debug.g_err_stage,5);
12149                 END IF;
12150                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12151             END IF;
12152         END IF;
12153         /* Bug 4200168: FP.M:B12: Pref Changes:-----*/
12154 
12155         FOR i IN l_budget_version_id_tbl.first .. l_budget_version_id_tbl.last
12156         LOOP
12157             -- For each of the workplan versions, MC currencies should also be copied
12158             -- from plan type
12159 
12160             PA_FP_TXN_CURRENCIES_PUB.copy_fp_txn_currencies (
12161                      p_source_fp_option_id        => parent_plan_type_rec.proj_fp_options_id
12162                      ,p_target_fp_option_id       => l_proj_fp_options_id_tbl(i)
12163                      ,p_target_fp_preference_code => NULL
12164                      ,p_plan_in_multi_curr_flag   => parent_plan_type_rec.plan_in_multi_curr_flag
12165                      ,x_return_status             => x_return_status
12166                      ,x_msg_count                 => x_msg_count
12167                      ,x_msg_data                  => x_msg_data );
12168 
12169             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12170                 IF l_debug_mode = 'Y' THEN
12171                    pa_debug.g_err_stage:='Called API PA_FP_TXN_CURRENCIES_PUB.copy_fp_txn_currencies api returned error';
12172                    pa_debug.write('REFRESH_WP_SETTINGS:  ' || g_module_name,pa_debug.g_err_stage,5);
12173                 END IF;
12174                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12175             END IF;
12176 
12177             -- If resource list or time phasing has changed all the Task Assignments
12178             -- related data should be deleted
12179             IF nvl(p_resource_list_change, 'N') = 'Y' OR nvl(p_time_phase_change, 'N') = 'Y'
12180                OR nvl(p_track_costs_flag_change, 'N') = 'Y' -- bug 3797057
12181             THEN
12182                 OPEN data_for_delete_plan_txns_cur(l_budget_version_id_tbl(i));
12183                 FETCH data_for_delete_plan_txns_cur
12184                   BULK COLLECT INTO  l_task_version_id_tbl
12185                                     ,l_task_name_tbl
12186                                     ,l_task_number_tbl
12187                                     ,l_res_assignment_id_tbl    ;
12188                 CLOSE data_for_delete_plan_txns_cur;
12189 
12190             IF l_debug_mode = 'Y' THEN
12191                 pa_debug.g_err_stage:='about to call delete palnning trans';
12192                 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12193             END IF;
12194 
12195                 IF nvl(l_res_assignment_id_tbl.count,0) > 0 THEN
12196                     -- If there is any data to be deleted call delete_planning_txns api
12197                     PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions (
12198                            p_context                      => 'TASK_ASSIGNMENT'
12199                           ,p_task_or_res                  => 'ASSIGNMENT'
12200                           ,p_element_version_id_tbl       => l_task_version_id_tbl
12201                           ,p_task_number_tbl              => l_task_number_tbl
12202                           ,p_task_name_tbl                => l_task_name_tbl
12203                           ,p_resource_assignment_tbl      => l_res_assignment_id_tbl
12204                           ,p_rollup_required_flag         => 'N' --For Bug 3937716
12205                           ,p_pji_rollup_required          => 'N' /* Bug 4200168 */
12206                           ,x_return_status                => x_return_status
12207                           ,x_msg_count                    => x_msg_count
12208                           ,x_msg_data                     => x_msg_data );
12209 
12210                     IF   x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12211                        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12212                     END IF;
12213                 END IF;
12214 
12215                 /* Bug 4200168: FP.M:B12: Pref Changes: Clearing the pl/sql tables*/
12216                 l_task_version_id_tbl.delete;
12217                 l_task_name_tbl.delete;
12218                 l_task_number_tbl.delete;
12219                 l_res_assignment_id_tbl.delete;
12220 
12221             END IF; -- res list or time phase change
12222 
12223             IF nvl(p_resource_list_change, 'N') = 'Y' THEN
12224                             -- Update all the task planning elements with new FINACIAL ELEMENT rlmid
12225                 IF l_debug_mode = 'Y' THEN
12226                     pa_debug.g_err_stage:='Updaing res assignments with new FINANCIAL ELEMENTS rlmid : ' || l_fin_res_class_rlm_id;
12227                     pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12228                 END IF;
12229 
12230                 UPDATE pa_resource_assignments
12231                 SET    resource_list_member_id  = l_people_res_class_rlm_id
12232                 WHERE  budget_version_id = l_budget_version_id_tbl(i)
12233                 AND    resource_class_code = 'PEOPLE'
12234                 AND    resource_class_flag = 'Y';
12235 
12236                 /* Assumptions: When resource list changes for working version, pa_progress_rollup would have
12237                    only task level PEOPLE assignments at this point as ta_display_flag = Y records
12238                    would have got deleted above.Hence we are updating all records in pa_progress_rollup
12239                    with the new rlmid petaining to people class rlm for working versions. */
12240                 UPDATE pa_progress_rollup
12241                 SET  object_id = l_people_res_class_rlm_id
12242                 WHERE project_id = p_project_id AND
12243                 object_type = 'PA_ASSIGNMENTS' AND
12244                 structure_type = 'WORKPLAN' AND
12245                 structure_Version_id = l_proj_struct_ver_id_tbl(i); /* for Working versions */
12246 
12247             END IF;
12248 
12249             -- If time phasing has changed call spread api to respread the
12250             -- task level effort data as per the new time phasing
12251 
12252             -- If track workplan costs flag has changed call calculate to
12253             -- calculate the costs or null them out as per the changed value
12254             IF nvl(p_time_phase_change, 'N') = 'Y'  OR
12255                nvl(p_track_costs_flag_change, 'N') = 'Y'
12256             THEN
12257 
12258                 -- Call calculate only if there are some planning transactions to be processed
12259                 SELECT count(*)
12260                 INTO   l_res_assignment_count
12261                 FROM   pa_resource_assignments
12262                 WHERE  budget_version_id = l_budget_version_id_tbl(i);
12263 
12264                 IF  l_res_assignment_count > 0 THEN
12265                     PA_FP_CALC_PLAN_PKG.calculate(
12266                           p_project_id                 =>   p_project_id
12267                          ,p_budget_version_id          =>   l_budget_version_id_tbl(i)
12268                          ,p_spread_required_flag       =>   'Y'
12269                          ,p_rollup_required_flag       =>   'N' -- bug 3937716
12270                          ,p_source_context             =>   'RESOURCE_ASSIGNMENT'
12271                          ,p_wp_cost_changed_flag       =>   nvl(p_track_costs_flag_change,'N') -- bug 3699558
12272                          ,p_time_phase_changed_flag    =>   nvl(p_time_phase_change,'N') -- bug 3699558
12273                          ,x_return_status              =>   x_return_status
12274                          ,x_msg_count                  =>   x_msg_count
12275                          ,x_msg_data                   =>   x_msg_data);
12276 
12277                     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12278                         IF l_debug_mode = 'Y' THEN
12279                            pa_debug.g_err_stage:='Called API PA_FP_CALC_PLAN_PKG.calculate api returned error';
12280                            pa_debug.write('REFRESH_WP_SETTINGS:  ' || g_module_name,pa_debug.g_err_stage,5);
12281                         END IF;
12282                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12283                     END IF;
12284                 END IF;
12285             END IF;
12286 
12287             -- Bug 3937716 If there is any change to amounts call rollup api
12288             IF nvl(p_resource_list_change, 'N') = 'Y' OR nvl(p_time_phase_change, 'N') = 'Y'
12289                OR nvl(p_track_costs_flag_change, 'N') = 'Y'
12290             THEN
12291                  PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION
12292                      ( p_budget_version_id     => l_budget_version_id_tbl(i)
12293                       ,p_entire_version        => 'Y'
12294                       ,x_return_status         => x_return_status
12295                       ,x_msg_count             => x_msg_count
12296                       ,x_msg_data              => x_msg_data);
12297 
12298                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12299                      IF l_debug_mode = 'Y' THEN
12300                         pa_debug.g_err_stage:='Called API PA_FP_ROLLUP_PKG.rollup_budget_version api returned error';
12301                         pa_debug.write('REFRESH_WP_SETTINGS:  ' || g_module_name,pa_debug.g_err_stage,5);
12302                      END IF;
12303                      RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12304                  END IF;
12305             END IF;
12306         END LOOP;
12307 
12308 
12309     END IF;  -- workplan budget versions exist
12310 
12311     -- If RBS header has been changed all the workplan versions including published
12312     -- versions should be re-mapped and re-summarized
12313     -- Jun-15-2004 Bug 3619687 rbs_version_change should be propagated to workplan
12314     -- versions only if versioning is disabled for the workplan structure
12315     -- Jun-28-2004 Bug 3725414 rbs_version_change should be propagated to working
12316     -- workplan versions even though versioning is enbled but shared structure
12317 
12318     IF nvl(p_rbs_version_change, 'N') = 'Y' AND
12319        (nvl(PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id),'N') = 'N' -- Jun-15-2004 Bug 3619687
12320         OR nvl(PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id),'N') = 'Y') -- Jun-28-2004 Bug 3725414
12321     THEN
12322         /** Bug 3725414
12323         -- Fetch all the workplan versions
12324         OPEN all_workplan_versions_cur;
12325         FETCH all_workplan_versions_cur
12326            BULK COLLECT INTO  l_budget_version_id_tbl,l_proj_fp_options_id_tbl ;
12327         CLOSE all_workplan_versions_cur;
12328         **/
12329 
12330         -- Fetch all the working plan versions in a table
12331 
12332         IF l_debug_mode = 'Y' THEN
12333             pa_debug.g_err_stage:='rbs change Yes';
12334             pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12335         END IF;
12336 
12337 
12338         OPEN working_workplan_versions_cur;
12339         FETCH working_workplan_versions_cur
12340           BULK COLLECT INTO l_budget_version_id_tbl,l_proj_fp_options_id_tbl,l_proj_struct_ver_id_tbl ;
12341         CLOSE working_workplan_versions_cur;
12342 
12343         IF nvl(l_budget_version_id_tbl.count,0) > 0 THEN
12344 
12345             -- Bulk update all the versions with the new RBS header
12346             FORALL i IN l_budget_version_id_tbl.first .. l_budget_version_id_tbl.last
12347               UPDATE pa_proj_fp_options
12348               SET    rbs_version_id             =  parent_plan_type_rec.rbs_version_id
12349                      ,record_version_number     =  record_version_number + 1
12350                      ,last_update_date          =  SYSDATE
12351                      ,last_updated_by           =  FND_GLOBAL.user_id
12352                      ,last_update_login         =  FND_GLOBAL.login_id
12353               WHERE  proj_fp_options_id = l_proj_fp_options_id_tbl(i);
12354 
12355             -- For each of the versions, RBS re-mapping and re-summarization needs to be done
12356             FOR i IN  l_budget_version_id_tbl.first ..  l_budget_version_id_tbl.last LOOP
12357                 IF  parent_plan_type_rec.rbs_version_id IS NOT NULL THEN
12358                   -- Call RBS mapping api for the entire version
12359                   -- The api returns rbs element id, txn accum header id for each
12360                   -- resource assignment id in the form of plsql tables
12361                   PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs(
12362                        p_budget_version_id         =>   l_budget_version_id_tbl(i)
12363                       ,p_resource_list_id          =>   parent_plan_type_rec.cost_resource_list_id
12364                       ,p_rbs_version_id            =>   parent_plan_type_rec.rbs_version_id
12365                       ,p_calling_process           =>   'RBS_REFRESH'
12366                       ,p_calling_context           =>   'PLSQL'
12367                       ,p_process_code              =>   'RBS_MAP'
12368                       ,p_calling_mode              =>   'BUDGET_VERSION'
12369                       ,p_init_msg_list_flag        =>   'N'
12370                       ,p_commit_flag               =>   'N'
12371                       ,x_txn_source_id_tab         =>   l_txn_source_id_tbl
12372                       ,x_res_list_member_id_tab    =>   l_res_list_member_id_tbl
12373                       ,x_rbs_element_id_tab        =>   l_rbs_element_id_tbl
12374                       ,x_txn_accum_header_id_tab   =>   l_txn_accum_header_id_tbl
12375                       ,x_return_status             =>   x_return_status
12376                       ,x_msg_count                 =>   x_msg_count
12377                       ,x_msg_data                  =>   x_msg_data);
12378 
12379                   -- Check return status
12380                   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12381                       IF l_debug_mode = 'Y' THEN
12382                          pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Map_Rlmi_Rbs api returned error';
12383                          pa_debug.write('REFRESH_WP_SETTINGS:  ' || g_module_name,pa_debug.g_err_stage,5);
12384                       END IF;
12385                       RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12386                   ELSE
12387                       -- Check count of the required out tables to be the same
12388                       IF l_txn_source_id_tbl.count <> l_rbs_element_id_tbl.count OR
12389                          l_txn_source_id_tbl.count <> l_txn_accum_header_id_tbl.count
12390                       THEN
12391                           IF l_debug_mode = 'Y' THEN
12392                              pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Map_Rlmi_Rbs api
12393                                                     returned out tables with different count';
12394                              pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
12395                              pa_debug.g_err_stage:='l_txn_source_id_tbl.count = ' || l_txn_source_id_tbl.count;
12396                              pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
12397                              pa_debug.g_err_stage:='l_rbs_element_id_tbl.count = ' || l_rbs_element_id_tbl.count;
12398                              pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
12399                              pa_debug.g_err_stage:=
12400                                   'l_txn_accum_header_id_tbl.count = ' || l_txn_accum_header_id_tbl.count;
12401                              pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
12402                           END IF;
12403                           RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12404                       END IF;
12405                   END IF;
12406 
12407                   -- Check if out table has any records first
12408                   IF nvl(l_txn_source_id_tbl.last,0) >= 1 THEN
12409                       -- Update resource assignments data for the version
12410                       -- Bug 3641252 changed the index from i to j
12411                       FORALL j IN l_txn_source_id_tbl.first .. l_txn_source_id_tbl.last
12412                           UPDATE pa_resource_assignments
12413                           SET     rbs_element_id          =  l_rbs_element_id_tbl(j)
12414                                  ,txn_accum_header_id     =  l_txn_accum_header_id_tbl(j)
12415                                  ,record_version_number   =  record_version_number + 1
12416                                  ,last_update_date        =  SYSDATE
12417                                  ,last_updated_by         =  FND_GLOBAL.user_id
12418                                  ,last_update_login       =  FND_GLOBAL.login_id
12419                           WHERE  budget_version_id = l_budget_version_id_tbl(i)
12420                           AND    resource_assignment_id = l_txn_source_id_tbl(j);
12421                   END IF;
12422                 ELSE -- rbs version id is null
12423 
12424                     -- Update all the resource assigments with null for rbs _element_id
12425                     UPDATE pa_resource_assignments
12426                     SET     rbs_element_id          =  null
12427                            ,txn_accum_header_id     =  null
12428                            ,record_version_number   =  record_version_number + 1
12429                            ,last_update_date        =  SYSDATE
12430                            ,last_updated_by         =  FND_GLOBAL.user_id
12431                            ,last_update_login       =  FND_GLOBAL.login_id
12432                     WHERE  budget_version_id = l_budget_version_id_tbl(i);
12433 
12434                     IF l_debug_mode = 'Y' THEN
12435                         pa_debug.g_err_stage:='Done with mapping';
12436                         pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12437                     END IF;
12438 
12439 
12440                 END IF;
12441 
12442                 /* Bug 4200168: FP.M:B12: Pref Changes: Clearing the pl/sql tables*/
12443                 l_txn_source_id_tbl.delete;
12444                 l_res_list_member_id_tbl.delete;
12445                 l_rbs_element_id_tbl.delete;
12446                 l_txn_accum_header_id_tbl.delete;
12447             END LOOP;
12448         END IF;  -- if versions exist
12449     END IF;   -- if RBS has changed
12450 
12451     --  Adding for bug 4543744
12452     /*   Collecting all the working version records and inserting into the pji table
12453          with positive values of budget lines                                     */
12454     IF nvl(p_resource_list_change, 'N') = 'Y' OR nvl(p_time_phase_change, 'N') = 'Y'
12455            OR nvl(p_track_costs_flag_change, 'N') = 'Y' OR ( nvl(p_rbs_version_change, 'N') = 'Y' AND
12456                (nvl(PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id),'N') = 'N'
12457                 OR nvl(PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id),'N') = 'Y')) THEN
12458                 IF l_debug_mode = 'Y' THEN
12459                     pa_debug.g_err_stage:='About to insert positive values with new rbs element ids';
12460                     pa_debug.write( g_module_name,pa_debug.g_err_stage,5);
12461                 END IF;
12462 
12463 
12464                 FOR i IN l_budget_version_id_tbl.FIRST .. l_budget_version_id_tbl.LAST
12465                 LOOP
12466                     PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api
12467                     --( p_source                  => 'POPULATE_PJI_TABLE'   --Commented for bug 5073350.
12468                     ( p_source                  => 'REFRESH_WP_SETTINGS'
12469                      ,p_budget_version_id       => l_budget_version_id_tbl(i)
12470                      ,p_qty_sign                => 1
12471                      ,x_return_status           => x_return_status
12472                      ,x_msg_data                => x_msg_data
12473                      ,x_msg_count               => x_msg_count);
12474 
12475             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12476                       IF l_debug_mode = 'Y' THEN
12477                           pa_debug.g_err_stage:='PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api returned error';
12478                           pa_debug.write( g_module_name,pa_debug.g_err_stage,5);
12479                       END IF;                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12480             END IF;
12481                 END LOOP;
12482 
12483               /* Start of commented code for bug 5073350.
12484                 This call will update all the plan versions of a project which are affected due to the
12485                 workplan paln settings change.If any of those versions is in pending processing status,
12486                 as per the PJI design error will be thrown.So, commenting out this code.
12487                 The PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE api will be called seperately for each plan version
12488                 in PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api.
12489 
12490                 PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE (
12491                   x_return_status    => x_return_status,
12492                   x_msg_code         => l_error_msg_code);
12493 
12494             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12495                 PA_UTILS.ADD_MESSAGE(p_app_short_name      => 'PA',
12496                                      p_msg_name            => l_error_msg_code);
12497                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12498             END IF;
12499 
12500             End of commented code for bug 5073350*/
12501     END IF; -- inserting positive rows
12502 
12503     IF l_debug_mode = 'Y' THEN
12504         pa_debug.g_err_stage:='Exiting REFRESH_WP_SETTINGS';
12505         pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12506     -- reset curr function
12507        pa_debug.reset_curr_function();
12508     END IF;
12509 
12510 EXCEPTION
12511 
12512    WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12513        l_msg_count := FND_MSG_PUB.count_msg;
12514        IF l_msg_count = 1 THEN
12515            PA_INTERFACE_UTILS_PUB.get_messages
12516                  (p_encoded        => FND_API.G_TRUE
12517                   ,p_msg_index      => 1
12518                   ,p_msg_count      => l_msg_count
12519                   ,p_msg_data       => l_msg_data
12520                   ,p_data           => l_data
12521                   ,p_msg_index_out  => l_msg_index_out);
12522 
12523            x_msg_data := l_data;
12524            x_msg_count := l_msg_count;
12525        ELSE
12526            x_msg_count := l_msg_count;
12527        END IF;
12528 
12529        x_return_status := FND_API.G_RET_STS_ERROR;
12530 
12531        IF l_debug_mode = 'Y' THEN
12532            pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
12533            pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12534        -- reset curr function
12535           pa_debug.reset_curr_function();
12536        END IF;
12537 
12538        RETURN;
12539    WHEN Others THEN
12540        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12541        x_msg_count     := 1;
12542        x_msg_data      := SQLERRM;
12543 
12544        FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'PA_FP_PLANNING_TRANSACTION_PUB'
12545                                ,p_procedure_name  => 'REFRESH_WP_SETTINGS');
12546 
12547        IF l_debug_mode = 'Y' THEN
12548            pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
12549            pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12550        -- reset curr function
12551           pa_debug.Reset_Curr_Function();
12552        END IF;
12553        RAISE;
12554 END REFRESH_WP_SETTINGS;
12555 
12556 /*=============================================================================
12557  This api is called when ever RBS should be changed for budget versions.
12558 
12559  Usage:
12560  p_calling_context    --> 'ALL_CHILD_VERSIONS'
12561  p_budget_version_id  -->  null
12562                         If there is a change in RBS for a financial plan type
12563                         to push the change to the underlying budget version.
12564                         p_budget_version_id  would be null
12565 
12566  p_calling_context    --> 'SINGLE_VERSION'
12567  p_budget_version_id  --> not null, version id should be passed
12568                       --> This mode is useful for creation of working versions
12569                           out of published versions, or copy amounts case from
12570                           a different version
12571 
12572  Bug 3867302  Sep 21 2004 For ci versions reporting data is not maintained
12573 ==============================================================================*/
12574 
12575 PROCEDURE Refresh_rbs_for_versions(
12576           p_project_id            IN   pa_projects_all.project_id%TYPE
12577           ,p_fin_plan_type_id     IN   pa_budget_versions.fin_plan_type_id%TYPE
12578           ,p_calling_context      IN   VARCHAR2  -- Default 'ALL_CHILD_VERSIONS'
12579           ,p_budget_version_id    IN   pa_budget_versions.budget_version_id%TYPE  -- Default null
12580           ,x_return_status        OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12581           ,x_msg_count            OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
12582           ,x_msg_data             OUT  NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
12583 AS
12584 
12585     --Start of variables used for debugging
12586 
12587     l_return_status      VARCHAR2(1);
12588     l_msg_count          NUMBER := 0;
12589     l_msg_data           VARCHAR2(2000);
12590     l_data               VARCHAR2(2000);
12591     l_msg_index_out      NUMBER;
12592     l_debug_mode         VARCHAR2(30);
12593     l_error_msg_code     VARCHAR2(30);
12594 
12595     --End of variables used for debugging
12596 
12597     l_rbs_version_id     NUMBER;
12598 
12599     CURSOR working_budget_Versions_cur IS
12600     SELECT o.proj_fp_options_id,
12601            o.fin_plan_version_id,
12602            bv.resource_list_id
12603     FROM   pa_proj_fp_options o,
12604            pa_budget_versions bv
12605     WHERE  o.project_id = p_project_id
12606     AND    o.fin_plan_type_id = p_fin_plan_type_id
12607     AND    o.fin_plan_version_id = bv.budget_version_id
12608     AND    bv.ci_id IS NULL -- bug 3867302
12609     AND    bv.budget_status_code IN ('W', 'S');
12610 
12611     CURSOR input_budget_version_cur IS
12612     SELECT o.proj_fp_options_id
12613            ,o.fin_plan_version_id
12614            ,bv.resource_list_id
12615            ,o.fin_plan_type_id
12616            ,bv.ci_id
12617     FROM   pa_budget_versions bv,
12618            pa_proj_fp_options o
12619     WHERE  bv.project_id = o.project_id
12620     AND    bv.fin_plan_type_id = o.fin_plan_type_id
12621     AND    bv.budget_version_id = o.fin_plan_version_id
12622     AND    bv.budget_version_id = p_budget_version_id;
12623 
12624     input_budget_version_rec  input_budget_version_cur%ROWTYPE;
12625 
12626 
12627     l_budget_version_id_tbl      SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12628     l_proj_fp_options_id_tbl     SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12629     l_resource_list_id_tbl       SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12630 
12631     l_txn_source_id_tbl          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12632     l_res_list_member_id_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12633     l_rbs_element_id_tbl         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12634     l_txn_accum_header_id_tbl    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12635 
12636 BEGIN
12637 
12638     x_msg_count := 0;
12639     x_return_status := FND_API.G_RET_STS_SUCCESS;
12640 
12641     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
12642     l_debug_mode := NVL(l_debug_mode, 'Y');
12643 
12644     -- Set curr function
12645 IF l_debug_mode = 'Y' THEN
12646     pa_debug.set_curr_function(
12647                 p_function   =>'PAFPPTPB.Refresh_rbs_for_versions'
12648                ,p_debug_mode => l_debug_mode );
12649 END IF;
12650     -- Check for business rules violations
12651     IF l_debug_mode = 'Y' THEN
12652         pa_debug.g_err_stage:='Validating input parameters';
12653         pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,3);
12654     END IF;
12655 
12656     IF (p_project_id IS NULL) OR
12657        (p_fin_plan_type_id IS NULL) OR
12658        (p_calling_context = 'SINGLE_VERSION' AND p_budget_version_id IS NULL )
12659     THEN
12660 
12661         IF l_debug_mode = 'Y' THEN
12662            pa_debug.g_err_stage:='Project_id = '||p_project_id;
12663            pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
12664 
12665            pa_debug.g_err_stage:='Fin_plan_type_id = '||p_fin_plan_type_id;
12666            pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
12667 
12668            pa_debug.g_err_stage:='p_calling_context = '||p_calling_context;
12669            pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
12670 
12671            pa_debug.g_err_stage:='p_budget_version_id = '||p_budget_version_id;
12672            pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
12673         END IF;
12674 
12675         PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
12676                               p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
12677                               p_token1         => 'PROCEDURENAME',
12678                               p_value1         => 'pa_fp_planning_transaction_pub.Refresh_rbs_for_versions');
12679 
12680         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12681 
12682     END IF;
12683 
12684     -- fetch plan type level rbs version id
12685     Select rbs_version_id
12686     into   l_rbs_version_id
12687     from   pa_proj_fp_options
12688     where  project_id = p_project_id
12689     and    fin_plan_type_id = p_fin_plan_type_id
12690     and    fin_plan_option_level_code = 'PLAN_TYPE';
12691 
12692     -- if context is 'SINGLE_VERSION' fetch required info about budget version id is passed
12693     IF p_calling_context = 'SINGLE_VERSION' THEN
12694 
12695         OPEN input_budget_version_cur;
12696         FETCH input_budget_version_cur
12697             INTO input_budget_version_rec;
12698         CLOSE input_budget_version_cur;
12699 
12700         -- Bug 3867302 If i/p version is a ci version just return
12701         -- Added NOT for bug 4094762
12702         IF input_budget_version_rec.ci_id IS NOT NULL THEN
12703 
12704              IF l_debug_mode = 'Y' THEN
12705                pa_debug.g_err_stage:=' PJI data not required for CI versions. Returning';
12706                pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,3);
12707              pa_debug.reset_curr_function();
12708 	     END IF;
12709              RETURN;
12710 
12711         END IF;
12712 
12713         l_proj_fp_options_id_tbl :=
12714              SYSTEM.pa_num_tbl_type(input_budget_version_rec.proj_fp_options_id);
12715         l_budget_version_id_tbl  :=
12716              SYSTEM.pa_num_tbl_type(input_budget_version_rec.fin_plan_version_id);
12717         l_resource_list_id_tbl   :=
12718              SYSTEM.pa_num_tbl_type(input_budget_version_rec.resource_list_id);
12719 
12720     ELSE
12721 
12722         OPEN working_budget_Versions_cur;
12723         FETCH working_budget_Versions_cur
12724             BULK COLLECT INTO l_proj_fp_options_id_tbl,
12725                               l_budget_version_id_tbl,
12726                               l_resource_list_id_tbl;
12727         CLOSE working_budget_Versions_cur;
12728 
12729         -- if there are no budget versions for the plan type return
12730         IF l_budget_version_id_tbl.count = 0 THEN
12731             IF l_debug_mode = 'Y' THEN
12732                pa_debug.g_err_stage:='Working Versions do not exist for the plan type. Returning';
12733                pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,3);
12734                pa_debug.reset_curr_function();
12735  	END IF;
12736             RETURN;
12737         END IF;
12738 
12739     END IF;
12740 
12741     -- bulk update all the budget versions with the rbs version id
12742     forall i in l_proj_fp_options_id_tbl.first .. l_proj_fp_options_id_tbl.last
12743        update pa_proj_fp_options
12744        set    rbs_version_id               = l_rbs_version_id
12745              ,record_version_number        =  record_version_number + 1
12746              ,last_update_date             =  SYSDATE
12747              ,last_updated_by              =  FND_GLOBAL.user_id
12748              ,last_update_login            =  FND_GLOBAL.login_id
12749        WHERE proj_fp_options_id  = l_proj_fp_options_id_tbl(i);
12750 
12751     -- for each of the versions, RBS re-mapping and re-summarization needs to be done
12752     FOR i IN  l_budget_version_id_tbl.first ..  l_budget_version_id_tbl.last LOOP
12753         IF  l_rbs_version_id IS NOT NULL THEN
12754           -- Call RBS mapping api for the entire version
12755           -- The api returns rbs element id, txn accum header id for each
12756           -- resource assignment id in the form of plsql tables
12757           PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs(
12758                p_budget_version_id         =>   l_budget_version_id_tbl(i)
12759               ,p_resource_list_id          =>   l_resource_list_id_tbl(i)
12760               ,p_rbs_version_id            =>   l_rbs_version_id
12761               ,p_calling_process           =>   'RBS_REFRESH'
12762               ,p_calling_context           =>   'PLSQL'
12763               ,p_process_code              =>   'RBS_MAP'
12764               ,p_calling_mode              =>   'BUDGET_VERSION'
12765               ,p_init_msg_list_flag        =>   'N'
12766               ,p_commit_flag               =>   'N'
12767               ,x_txn_source_id_tab         =>   l_txn_source_id_tbl
12768               ,x_res_list_member_id_tab    =>   l_res_list_member_id_tbl
12769               ,x_rbs_element_id_tab        =>   l_rbs_element_id_tbl
12770               ,x_txn_accum_header_id_tab   =>   l_txn_accum_header_id_tbl
12771               ,x_return_status             =>   x_return_status
12772               ,x_msg_count                 =>   x_msg_count
12773               ,x_msg_data                  =>   x_msg_data);
12774 
12775           -- Check return status
12776           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12777               IF l_debug_mode = 'Y' THEN
12778                  pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Map_Rlmi_Rbs api returned error';
12779                  pa_debug.write('REFRESH_WP_SETTINGS:  ' || g_module_name,pa_debug.g_err_stage,5);
12780               END IF;
12781               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12782           ELSE
12783               -- Check count of the required out tables to be the same
12784               IF l_txn_source_id_tbl.count <> l_rbs_element_id_tbl.count OR
12785                  l_txn_source_id_tbl.count <> l_txn_accum_header_id_tbl.count
12786               THEN
12787                   IF l_debug_mode = 'Y' THEN
12788                      pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Map_Rlmi_Rbs api
12789                                             returned out tables with different count';
12790                      pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
12791                      pa_debug.g_err_stage:='l_txn_source_id_tbl.count = ' || l_txn_source_id_tbl.count;
12792                      pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
12793                      pa_debug.g_err_stage:='l_rbs_element_id_tbl.count = ' || l_rbs_element_id_tbl.count;
12794                      pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
12795                      pa_debug.g_err_stage:=
12796                           'l_txn_accum_header_id_tbl.count = ' || l_txn_accum_header_id_tbl.count;
12797                      pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
12798                   END IF;
12799                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12800               END IF;
12801           END IF;
12802 
12803           -- Check if out table has any records first
12804           IF nvl(l_txn_source_id_tbl.last,0) >= 1 THEN
12805               -- Update resource assignments data for the version
12806               -- Bug 3641252 changed the index from i to j
12807               FORALL j IN l_txn_source_id_tbl.first .. l_txn_source_id_tbl.last
12808                   UPDATE pa_resource_assignments
12809                   SET     rbs_element_id          =  l_rbs_element_id_tbl(j)
12810                          ,txn_accum_header_id     =  l_txn_accum_header_id_tbl(j)
12811                          ,record_version_number   =  record_version_number + 1
12812                          ,last_update_date        =  SYSDATE
12813                          ,last_updated_by         =  FND_GLOBAL.user_id
12814                          ,last_update_login       =  FND_GLOBAL.login_id
12815                   WHERE  budget_version_id = l_budget_version_id_tbl(i)
12816                   AND    resource_assignment_id = l_txn_source_id_tbl(j);
12817           END IF;
12818         ELSE -- rbs version id is null
12819 
12820             -- Update all the resource assigments with null for rbs _element_id
12821             UPDATE pa_resource_assignments
12822             SET     rbs_element_id          =  null
12823                    ,txn_accum_header_id     =  null
12824                    ,record_version_number   =  record_version_number + 1
12825                    ,last_update_date        =  SYSDATE
12826                    ,last_updated_by         =  FND_GLOBAL.user_id
12827                    ,last_update_login       =  FND_GLOBAL.login_id
12828             WHERE  budget_version_id = l_budget_version_id_tbl(i);
12829 
12830         END IF;
12831     END LOOP;
12832 
12833     -- Call PJI delete api first to delete existing summarization data
12834     PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE (
12835           p_fp_version_ids   => l_budget_version_id_tbl,
12836           x_return_status    => x_return_status,
12837           x_msg_code         => l_error_msg_code);
12838 
12839     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12840         PA_UTILS.ADD_MESSAGE(p_app_short_name      => 'PA',
12841                              p_msg_name            => l_error_msg_code);
12842         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12843     END IF;
12844 
12845     -- Call PLAN_CREATE to create summarization data as per the new RBS
12846     PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE (
12847           p_fp_version_ids   => l_budget_version_id_tbl,
12848           x_return_status    => x_return_status,
12849           x_msg_code         => l_error_msg_code);
12850 
12851     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12852         PA_UTILS.ADD_MESSAGE(p_app_short_name      => 'PA',
12853                              p_msg_name            => l_error_msg_code);
12854         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12855     END IF;
12856 
12857     IF l_debug_mode = 'Y' THEN
12858         pa_debug.g_err_stage:='Exiting Refresh_rbs_for_versions';
12859         pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,3);
12860     -- reset curr function
12861         pa_debug.reset_curr_function();
12862     END IF;
12863 
12864 EXCEPTION
12865 
12866    WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12867        l_msg_count := FND_MSG_PUB.count_msg;
12868        IF l_msg_count = 1 THEN
12869            PA_INTERFACE_UTILS_PUB.get_messages
12870                  (p_encoded        => FND_API.G_TRUE
12871                   ,p_msg_index      => 1
12872                   ,p_msg_count      => l_msg_count
12873                   ,p_msg_data       => l_msg_data
12874                   ,p_data           => l_data
12875                   ,p_msg_index_out  => l_msg_index_out);
12876 
12877            x_msg_data := l_data;
12878            x_msg_count := l_msg_count;
12879        ELSE
12880            x_msg_count := l_msg_count;
12881        END IF;
12882 
12883        x_return_status := FND_API.G_RET_STS_ERROR;
12884 
12885        IF l_debug_mode = 'Y' THEN
12886            pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
12887            pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
12888        -- reset curr function
12889           pa_debug.reset_curr_function();
12890        END IF;
12891        RETURN;
12892    WHEN Others THEN
12893        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12894        x_msg_count     := 1;
12895        x_msg_data      := SQLERRM;
12896 
12897        FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'pa_fp_planning_transaction_pub'
12898                                ,p_procedure_name  => 'Refresh_rbs_for_versions');
12899 
12900        IF l_debug_mode = 'Y' THEN
12901            pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
12902            pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
12903        -- reset curr function
12904        pa_debug.Reset_Curr_Function();
12905        END IF;
12906        RAISE;
12907 END Refresh_rbs_for_versions;
12908 
12909 --This function returns 'N' if a record already exists in pa_resource_assignments
12910 --for a given budget version id, task id and resource list member id
12911 --Returns 'Y' if the record is not already there
12912 FUNCTION DUP_EXISTS
12913 ( p_budget_version_id       IN pa_budget_versions.budget_version_id%TYPE
12914  ,p_task_id                 IN pa_tasks.task_id%TYPE
12915  ,p_resource_list_member_id IN pa_resource_list_members.resource_list_member_id%TYPE
12916  ,p_project_id              IN pa_projects_all.project_id%TYPE)
12917 RETURN VARCHAR2
12918 IS
12919 l_dup_exists     VARCHAR2(1);
12920 BEGIN
12921 
12922         BEGIN
12923             SELECT 'Y'
12924             INTO   l_dup_exists
12925             FROM   pa_resource_assignments
12926             WHERE  task_id=p_task_id
12927             AND    resource_list_member_id=p_resource_list_member_id
12928             AND    budget_version_id=p_budget_version_id
12929             AND    project_assignment_id=-1
12930             AND    project_id=p_project_id;
12931         EXCEPTION
12932         WHEN NO_DATA_FOUND THEN
12933             l_dup_exists:='N';
12934         END;
12935         RETURN l_dup_exists;
12936 
12937 END DUP_EXISTS;
12938 
12939 END PA_FP_PLANNING_TRANSACTION_PUB;
12940