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.63.12020000.10 2013/05/29 09:50:22 bpottipa ship $ */
3  g_module_name   VARCHAR2(100) := 'pa.plsql.PA_FP_PLANNING_TRANSACTION_PUB';
4 
5 --This pl/sql table will be used by the method get_rbs_element_id. This should not be used in other procedures
6 -- l_ra_id_rbs_element_id_map_tbl PA_PLSQL_DATATYPES.IdTabTyp;
7 
8 --This pl/sql table will be used by DUP_EXISTS. This should not be used in other APIs
9 l_task_id_rlm_id_dup_tbl  PA_PLSQL_DATATYPES.IdTabTyp;
10 
11 PROCEDURE print_msg(p_msg  varchar2
12 		,p_module_name  Varchar2 Default NULL) IS
13 
14 	--pragma autonomous_transaction ;
15 	l_module_name Varchar2(100) := p_module_name;
16 BEGIN
17 	If l_module_name is NULL Then
18 		l_module_name := g_module_name;
19 	End If;
20 	pa_debug.write( l_module_name,p_msg,3);
21 	/*
22 	--dbms_output.put_line(p_msg);
23 	INSERT INTO PA_FP_CALCULATE_LOG
24 	(SESSIONID
25 	,SEQ_NUMBER
26 	,LOG_MESSAGE)
27 	VALUES
28 	(userenv('sessionid')
29 	,HR.PAY_US_GARN_FEE_RULES_S.nextval
30 	,substr(P_MSG,1,240)
31 	);
32 	COMMIT;
33 	*/
34 END print_msg;
35  --------------------------------
36  --User Defined Exceptions if any
37  --------------------------------
38 
39  -- Bug 12384023: Deriving job_id based on assignment start date
40 PROCEDURE get_default_job
41 (
42    p_person_id                IN     pa_resource_assignments.person_id%TYPE
43    ,p_resource_assignment_id  IN     pa_resource_assignments.resource_assignment_id%TYPE
44    ,p_planning_start_date     IN     pa_resource_assignments.planning_start_date%TYPE
45    ,p_project_role_id         IN     pa_resource_assignments.project_role_id%TYPE
46    ,x_job_id                  OUT    NOCOPY pa_resource_assignments.job_id%TYPE
47 )
48 IS
49 l_person_id  pa_resource_assignments.person_id%TYPE;
50 l_g_miss_num    CONSTANT      NUMBER      := FND_API.G_MISS_NUM;
51 
52 
53     BEGIN
54       IF p_person_id IS NULL AND p_resource_assignment_id IS NOT NULL THEN
55         BEGIN
56           SELECT DECODE (p_person_id, l_g_miss_num,null,nvl(p_person_id,person_id))
57           INTO l_person_id
58           FROM  PA_RESOURCE_ASSIGNMENTS
59           WHERE  resource_assignment_id= p_resource_assignment_id;
60 
61         EXCEPTION
62           WHEN NO_DATA_FOUND THEN
63           NULL;
64         END;
65 
66       END IF;
67 
68       select job_id  INTO x_job_id
69       FROM per_all_assignments_f assn
70       WHERE assn.person_id = l_person_id
71       AND   p_planning_start_date  BETWEEN assn.effective_start_date
72                         AND  assn.effective_end_date
73       AND assn.assignment_type in ('C','E')
74       AND assn.primary_flag = 'Y'
75       AND assn.person_id IS NOT NULL;
76 
77       EXCEPTION
78         WHEN NO_DATA_FOUND THEN
79         BEGIN
80           IF p_project_role_id is not null then
81             SELECT default_job_id into x_job_id
82             FROM pa_project_role_types_vl role
83             WHERE role.project_role_id = p_project_role_id
84             AND ROWNUM = 1;
85           END IF;
86         EXCEPTION
87            WHEN NO_DATA_FOUND THEN
88             NULL;
89         END;
90 
91 END get_default_job;
92 
93 
94  --Bug 4152749. The API is changed for the calculate API enhancements. Replaced the existing logic with the new logic to
95  --pass the old/new values for required resource attribs to calcualte API so that it takes care of manipulating the
96  --budget lines based on the changes.
97  --This is private procedure. This replaces the derive_parameters_for_calc_api in the previous API
98  --This API
99  ------1.Will detect the changes in the rbs_element_id and call the reporting lines API to negate the amounts
100  --------for the old rbs_element_id
101  ------2.Prepare pl/sql tbls containing Old/New Values for MFC Cost Type Id, Spread Curve Id, SP Fixed Date,
102  ------- Planning Start/End Dates and another pl/sql tbl which indicates whether a change in RLM has occurred or not.
103  ------3.Gives the new rbs_element_id for each input RA ID as output.
104  --The values for p_context are 'BUDGET', 'FORECAST', 'WORKPLAN' and 'TASK_ASSIGNMENT'
105 PROCEDURE Process_res_chg_Derv_calc_prms
106 (
107      p_context                          IN      VARCHAR2
108     ,p_calling_context                  IN      VARCHAR2 DEFAULT NULL  -- Added for Bug 6856934
109     ,p_budget_version_id                IN      Pa_budget_versions.budget_version_id%TYPE
110     ,p_resource_assignment_id_tbl       IN      SYSTEM.PA_NUM_TBL_TYPE
111     ,p_resource_list_member_id_tbl      IN      SYSTEM.PA_NUM_TBL_TYPE
112     ,p_planning_start_date_tbl          IN      SYSTEM.PA_DATE_TBL_TYPE
113     ,p_planning_end_date_tbl            IN      SYSTEM.PA_DATE_TBL_TYPE
114     ,p_spread_curve_id_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE
115     ,p_sp_fixed_date_tbl                IN      SYSTEM.PA_DATE_TBL_TYPE
116     ,p_txn_currency_code_tbl            IN      SYSTEM.PA_VARCHAR2_15_TBL_TYPE
117     ,p_inventory_item_id_tbl            IN      SYSTEM.PA_NUM_TBL_TYPE
118     ,p_expenditure_type_tbl             IN      SYSTEM.pa_varchar2_30_tbl_type
119     ,p_person_id_tbl                    IN      SYSTEM.PA_NUM_TBL_TYPE
120     ,p_job_id_tbl                       IN      SYSTEM.PA_NUM_TBL_TYPE
121     ,p_organization_id_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE
122     ,p_event_type_tbl                   IN      SYSTEM.pa_varchar2_30_tbl_type
123     ,p_expenditure_category_tbl         IN      SYSTEM.pa_varchar2_30_tbl_type
124     ,p_revenue_category_code_tbl        IN      SYSTEM.pa_varchar2_30_tbl_type
125     ,p_item_category_id_tbl             IN      SYSTEM.PA_NUM_TBL_TYPE
126     ,p_bom_resource_id_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE
127     ,p_project_role_id_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE
128     ,p_person_type_code_tbl             IN      SYSTEM.pa_varchar2_30_tbl_type
129     ,p_supplier_id_tbl                  IN      SYSTEM.PA_NUM_TBL_TYPE
130     ,p_named_role_tbl                   IN      SYSTEM.pa_varchar2_80_tbl_type
131     ,p_mfc_cost_type_id_tbl             IN      SYSTEM.PA_NUM_TBL_TYPE
132     ,p_fixed_date_sp_id                 IN      pa_spread_curves_b.spread_curve_id%TYPE -- Added for Bug 3607061
133     ,px_total_qty_tbl                   IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
134     ,px_total_raw_cost_tbl              IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
135     ,px_total_burdened_cost_tbl         IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
136     ,px_total_revenue_tbl               IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
137     ,px_raw_cost_rate_tbl               IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
138     ,px_b_cost_rate_tbl                 IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
139     ,px_bill_rate_tbl                   IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
140     ,px_raw_cost_override_rate_tbl      IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
141     ,px_b_cost_rate_override_tbl        IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
142     ,px_bill_rate_override_tbl          IN OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
143     ,x_rbs_element_id_tbl                  OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
144     ,x_txn_accum_header_id_tbl             OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
145     ,x_mfc_cost_type_id_old_tbl            OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
146     ,x_mfc_cost_type_id_new_tbl            OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
147     ,x_spread_curve_id_old_tbl             OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
148     ,x_spread_curve_id_new_tbl             OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
149     ,x_sp_fixed_date_old_tbl               OUT  NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
150     ,x_sp_fixed_date_new_tbl               OUT  NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
151     ,x_plan_start_date_old_tbl             OUT  NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
152     ,x_plan_start_date_new_tbl             OUT  NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
153     ,x_plan_end_date_old_tbl               OUT  NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
154     ,x_plan_end_date_new_tbl               OUT  NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
155     ,x_rlm_id_change_flag_tbl              OUT  NOCOPY SYSTEM.PA_VARCHAR2_1_TBL_TYPE --File.Sql.39 bug 4440895
156     ,x_return_status                       OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
157     ,x_msg_data                            OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
158     ,x_msg_count                           OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
159 ) IS
160 
161       CURSOR c_plan_ver_settings_csr
162       IS
163       SELECT nvl(pfo.cost_resource_list_id, nvl(pfo.revenue_resource_list_id, pfo.all_resource_list_id)) resource_list_id
164             ,pfo.rbs_version_id rbs_version_id
165             ,pbv.ci_id ci_id
166             ,pbv.etc_start_date etc_start_date
167             ,pbv.wp_version_flag wp_version_flag
168       FROM   pa_proj_fp_options pfo
169             ,pa_budget_versions pbv
170       WHERE  pfo.fin_plan_version_id=p_budget_version_id
171       AND    pbv.budget_version_id=p_budget_version_id;
172 
173 
174       CURSOR c_data_in_db_csr(c_resource_asg_id pa_resource_assignments.resource_assignment_id%TYPE)
175       IS
176       SELECT sum(quantity) quantity
177        FROM  pa_budget_lines
178       WHERE resource_assignment_id = c_resource_asg_id;
179 --  ORDER BY resource_assignment_id,txn_currency_code;
180 
181       l_data_in_db_rec    c_data_in_db_csr%ROWTYPE;
182 
183       l_plan_ver_settings_rec c_plan_ver_settings_csr%ROWTYPE;
184 
185   --Start of variables used for debugging
186       l_msg_count                    NUMBER :=0;
187       l_data                         VARCHAR2(2000);
188       l_msg_data                     VARCHAR2(2000);
189       l_error_msg_code               VARCHAR2(30);
190       l_msg_index_out                NUMBER;
191       l_return_status                VARCHAR2(2000);
192       l_debug_mode                   VARCHAR2(30);
193       l_module_name                  VARCHAR2(100):='PAFPPTPB.Process_res_chg_Derv_calc_prms';
194   --End of variables used for debugging
195 
196       l_ra_id_count                  NUMBER := 0;
197       l_rbs_map_index                NUMBER:=0;
198 
199       l_resource_class_code_tbl      SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
200       l_rate_based_flag_tbl          SYSTEM.pa_varchar2_1_tbl_type  :=SYSTEM.pa_varchar2_1_tbl_type();
201       l_ra_id_rbs_prm_tbl            SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
202       l_person_id_rbs_prm_tbl        SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
203       l_job_id_rbs_prm_tbl           SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
204       l_organization_id_rbs_prm_tbl  SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
205       l_event_type_rbs_prm_tbl       SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
206       l_exp_category_rbs_prm_tbl     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
207       l_rev_cat_code_rbs_prm_tbl     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
208       l_inv_item_id_rbs_prm_tbl      SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
209       l_item_cat_id_rbs_prm_tbl      SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
210       l_bom_res_id_rbs_prm_tbl       SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
211       l_per_type_code_rbs_prm_tbl    SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
212       l_supplier_id_rbs_prm_tbl      SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
213       l_rbs_element_id_prm_tbl       SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
214       l_inventory_item_id_tbl        SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
215       l_expenditure_type_tbl         SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
216       l_person_id_tbl                SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
217       l_job_id_tbl                   SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
218       l_organization_id_tbl          SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
219       l_event_type_tbl               SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
220       l_expenditure_category_tbl     SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
221       l_revenue_category_code_tbl    SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
222       l_item_category_id_tbl         SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
223       l_bom_resource_id_tbl          SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
224       l_project_role_id_tbl          SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
225       l_person_type_code_tbl         SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
226       l_supplier_id_tbl              SYSTEM.pa_num_tbl_type         :=SYSTEM.pa_num_tbl_type();
227       l_txn_src_typ_code_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
228       l_exp_type_rbs_prm_tbl         SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
229       l_non_labor_resource_tbl       SYSTEM.pa_varchar2_20_tbl_type :=SYSTEM.pa_varchar2_20_tbl_type();
230       l_non_labor_res_rbs_prm_tbl    SYSTEM.pa_varchar2_20_tbl_type :=SYSTEM.pa_varchar2_20_tbl_type();
231       l_named_role_tbl               SYSTEM.pa_varchar2_80_tbl_type :=SYSTEM.pa_varchar2_80_tbl_type();
232       l_project_role_id_rbs_prm_tbl  SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
233       l_named_role_rbs_prm_tbl       SYSTEM.pa_varchar2_80_tbl_type := SYSTEM.pa_varchar2_80_tbl_type();
234       l_txn_source_id_tbl            SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
235       l_res_list_member_id_tbl       SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
236       l_txn_accum_header_id_prm_tbl  SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
237       l_task_id_tbl                  SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
238       -- Added for Bug 3762278
239       l_project_name                 pa_projects_all.name%TYPE;
240       l_task_name                    pa_proj_elements.name%TYPE;
241       l_resource_name                pa_resource_list_members.alias%TYPE;
242 
243       l_task_id_rbs_prm_tbl          SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
244       l_rbs_elem_id_rbs_prm_tbl      SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
245       l_rbf_rbs_prm_tbl              SYSTEM.pa_varchar2_1_tbl_type  := SYSTEM.pa_varchar2_1_tbl_type();
246       l_res_class_code_rbs_prm_tbl   SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
247 
248       l_txn_currency_code_tbl        SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
249 
250       --Bug 4083605
251       l_actuals_start_date           pa_budget_lines.start_date%TYPE;
252       l_actuals_end_date             pa_budget_lines.start_date%TYPE;
253 
254 	/*Bug fix: 5752337 */
255 	CURSOR get_line_info (p_resource_assignment_id IN NUMBER) IS
256         SELECT ppa.name project_name
257                ,pt.name task_name
258                ,prl.alias resource_name
259         FROM pa_projects_all ppa
260                ,pa_proj_elements pt
261                ,pa_resource_list_members prl
262                ,pa_resource_assignments pra
263         WHERE pra.resource_assignment_id = p_resource_assignment_id
264         AND ppa.project_id = pra.project_id
265         AND pt.proj_element_id(+) = pra.task_id
266         AND prl.resource_list_member_id = pra.resource_list_member_id;
267 
268 	/* Bug fix:5759413 */
269 	CURSOR get_rateOvrds ( p_resource_assignment_id IN NUMBER) IS
270 	SELECT rtx.txn_raw_cost_rate_override
271 		,rtx.txn_burden_cost_rate_override
272 		,rtx.txn_bill_rate_override
273 	FROM pa_resource_asgn_curr rtx
274 	WHERE rtx.resource_assignment_id = p_resource_assignment_id;
275 
276 	l_rtx_rateOvrds_rec  get_rateOvrds%ROWTYPE;
277 
278   BEGIN
279 
280     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
281     l_debug_mode := NVL(l_debug_mode, 'N');
282     x_msg_count := 0;
283     x_return_status := FND_API.G_RET_STS_SUCCESS;
284 IF l_debug_mode = 'Y' THEN
285     PA_DEBUG.Set_Curr_Function( p_function   => 'plan_txn_pub.drv_prms_for_calc',
286                                 p_debug_mode => l_debug_mode );
287 END IF;
288 -----------------------------------------------------------------------------
289 -- Validating input paramters p_context and p_budget_version_id vannot be null
290 -----------------------------------------------------------------------------
291     IF l_debug_mode = 'Y' THEN
292         pa_debug.g_err_stage:='Validating input parameters';
293         print_msg(pa_debug.g_err_stage,l_module_name);
294     END IF;
295 
296     IF ((p_context IS NULL) OR (p_budget_version_id IS NULL))  THEN
297         IF l_debug_mode = 'Y' THEN
298             pa_debug.g_err_stage:='Required parameter is null - p_context : ' || p_context;
299             pa_debug.write(l_module_name ,pa_debug.g_err_stage,5);
300 
301             pa_debug.g_err_stage:='Required parameter is null - p_budget_version_id : ' || p_budget_version_id;
302             pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
303         END IF;
304         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
305                              p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
306                              p_token1         => 'PROCEDURENAME',
307                              p_value1         => l_module_name);
308         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
309     END IF;
310 
311     l_ra_id_count := p_resource_assignment_id_tbl.COUNT;
312 
313     IF l_ra_id_count = 0 THEN
314         IF l_debug_mode = 'Y' THEN
315             pa_debug.g_err_stage:='Validating input parameters - No resource assignment id is passed -raising excp.';
316             print_msg(pa_debug.g_err_stage,l_module_name);
317         END IF;
318 	IF l_debug_mode = 'Y' THEN
319 	        pa_debug.reset_curr_function;
320 	END IF;
321         RETURN;
322     END IF;
323 --dbms_output.put_line('d2');
324     --Extending the output pl/sql tables
325     IF l_debug_mode = 'Y' THEN
326         pa_debug.g_err_stage:='Extending input params';
327         print_msg(pa_debug.g_err_stage,l_module_name);
328     END IF;
329     x_rbs_element_id_tbl       := SYSTEM.PA_NUM_TBL_TYPE();
330     x_txn_accum_header_id_tbl  := SYSTEM.PA_NUM_TBL_TYPE();
331     x_mfc_cost_type_id_old_tbl := SYSTEM.PA_NUM_TBL_TYPE();
332     x_mfc_cost_type_id_new_tbl := SYSTEM.PA_NUM_TBL_TYPE();
333     x_spread_curve_id_old_tbl  := SYSTEM.PA_NUM_TBL_TYPE();
334     x_spread_curve_id_new_tbl  := SYSTEM.PA_NUM_TBL_TYPE();
335     x_sp_fixed_date_old_tbl    := SYSTEM.PA_DATE_TBL_TYPE();
336     x_sp_fixed_date_new_tbl    := SYSTEM.PA_DATE_TBL_TYPE();
337     x_plan_start_date_old_tbl  := SYSTEM.PA_DATE_TBL_TYPE();
338     x_plan_start_date_new_tbl  := SYSTEM.PA_DATE_TBL_TYPE();
339     x_plan_end_date_old_tbl    := SYSTEM.PA_DATE_TBL_TYPE();
340     x_plan_end_date_new_tbl    := SYSTEM.PA_DATE_TBL_TYPE();
341     x_rlm_id_change_flag_tbl   := SYSTEM.pa_varchar2_1_tbl_type();
342 
343     x_rbs_element_id_tbl.extend(p_resource_assignment_id_tbl.last);
344     x_txn_accum_header_id_tbl.extend(p_resource_assignment_id_tbl.last);
345     x_mfc_cost_type_id_old_tbl.extend(p_resource_assignment_id_tbl.last);
346     x_mfc_cost_type_id_new_tbl.extend(p_resource_assignment_id_tbl.last);
347     x_spread_curve_id_old_tbl.extend(p_resource_assignment_id_tbl.last);
348     x_spread_curve_id_new_tbl.extend(p_resource_assignment_id_tbl.last);
349     x_sp_fixed_date_old_tbl.extend(p_resource_assignment_id_tbl.last);
350     x_sp_fixed_date_new_tbl.extend(p_resource_assignment_id_tbl.last);
351     x_plan_start_date_old_tbl.extend(p_resource_assignment_id_tbl.last);
352     x_plan_start_date_new_tbl.extend(p_resource_assignment_id_tbl.last);
353     x_plan_end_date_old_tbl.extend(p_resource_assignment_id_tbl.last);
354     x_plan_end_date_new_tbl.extend(p_resource_assignment_id_tbl.last);
355     x_rlm_id_change_flag_tbl.extend(p_resource_assignment_id_tbl.last);
356 
357     --Open the plan version cursor to get the plan version settings. This will be used in the later part
358     --of the code
359     OPEN c_plan_ver_settings_csr;
360     FETCH c_plan_ver_settings_csr INTO l_plan_ver_settings_rec;
361     IF c_plan_ver_settings_csr%NOTFOUND THEN
362 
363         IF l_debug_mode = 'Y' THEN
364            pa_debug.g_err_stage:='0 rows returned by c_plan_ver_settings_csr';
365            pa_debug.write(l_module_name,pa_debug.g_err_stage, 5);
366         END IF;
367         CLOSE c_plan_ver_settings_csr;
368         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
369 
370     END IF;
371     CLOSE c_plan_ver_settings_csr;
372     --dbms_output.put_line('6.1');
373 
374     ----------------------------------------------------------------------------------------------------------
375     --The logic below is placed to pass the data required by the calculate API. The tbls containing Old/New
376     --values for mfc cost type id, plan start/end dates, spread curve and sp fixed dates are prepared. A tbl
377     --to indicate a changed in rbs mapping is also prepared
378     ---------------------------------------------------------------------------------------------------------
379     l_txn_currency_code_tbl.extend(p_resource_assignment_id_tbl.COUNT);
380 
381     l_inventory_item_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
382     l_expenditure_type_tbl.extend(p_resource_assignment_id_tbl.COUNT);
383     l_person_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
384     l_job_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
385     l_organization_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
386     l_event_type_tbl.extend(p_resource_assignment_id_tbl.COUNT);
387     l_expenditure_category_tbl.extend(p_resource_assignment_id_tbl.COUNT);
388     l_revenue_category_code_tbl.extend(p_resource_assignment_id_tbl.COUNT);
389     l_item_category_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
390     l_bom_resource_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
391     l_project_role_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
392     l_person_type_code_tbl.extend(p_resource_assignment_id_tbl.COUNT);
393     l_supplier_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
394     l_named_role_tbl.extend(p_resource_assignment_id_tbl.COUNT);
395     --              l_rate_func_curr_code_tbl
396     l_resource_class_code_tbl.extend(p_resource_assignment_id_tbl.COUNT);
397     l_rate_based_flag_tbl.extend(p_resource_assignment_id_tbl.COUNT);
398     l_non_labor_resource_tbl.extend(p_resource_assignment_id_tbl.COUNT);
399     l_task_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
400 
401     --Added the check for FND_API.G_MISS_XXX  in the below decodes as the UI can pass input parameters
402     --as FND_API.G_MISS_XXX even if the existing value of the attribute is NULL. NOTE: The input parameter
403     --to update_planning_transactions should be NULL if the corresponding column in pa_resource_assignments
404     --should not be changed and the input parameter should be FND_API.G_MISS_XXX if thhe corresponding column
405     --in pa_resource_assignments should be nulled out.
406     FOR i IN p_resource_assignment_id_tbl.FIRST .. p_resource_assignment_id_tbl.LAST  LOOP
407 
408                    --dbms_output.put_line('6.2 '||p_resource_assignment_id_tbl(i) );
409 
410         IF l_debug_mode = 'Y' THEN
411 
412            pa_debug.g_err_stage:='p_project_role_id_tbl('||i||') is '||p_project_role_id_tbl(i);
413            print_msg(pa_debug.g_err_stage,l_module_name);
414            pa_debug.g_err_stage:='p_resource_list_member_id_tbl('||i||') is '||p_resource_list_member_id_tbl(i);
415            print_msg(pa_debug.g_err_stage,l_module_name);
416            pa_debug.g_err_stage:='p_planning_start_date_tbl('||i||') is '||p_planning_start_date_tbl(i);
417            print_msg(pa_debug.g_err_stage,l_module_name);
418            pa_debug.g_err_stage:='p_planning_end_date_tbl('||i||') is '||p_planning_end_date_tbl(i);
419            print_msg(pa_debug.g_err_stage,l_module_name);
420            pa_debug.g_err_stage:='p_spread_curve_id_tbl('||i||') is '||p_spread_curve_id_tbl(i);
421            print_msg(pa_debug.g_err_stage,l_module_name);
422            pa_debug.g_err_stage:='p_sp_fixed_date_tbl('||i||') is '||p_sp_fixed_date_tbl(i);
423            print_msg(pa_debug.g_err_stage,l_module_name);
424            pa_debug.g_err_stage:='p_mfc_cost_type_id_tbl('||i||') is '||p_mfc_cost_type_id_tbl(i);
425            print_msg(pa_debug.g_err_stage,l_module_name);
426 
427 
428         END IF;
429 
430         --IF NULLs are passed for all the resource attributes, based on which the re-spread/re-derivation of amts will happen, then
431         --NULLs can be passed for both OLD/NEW resource attr parameters of calculate API to indicate that none of the resource
432         --attrs have changed.
433         IF p_project_role_id_tbl(i)         IS NULL AND
434            p_resource_list_member_id_tbl(i) IS NULL AND
435            p_planning_start_date_tbl(i)     IS NULL AND
436            p_planning_end_date_tbl(i)       IS NULL AND
437            p_spread_curve_id_tbl(i)         IS NULL AND
438            p_sp_fixed_date_tbl(i)           IS NULL AND
439            p_mfc_cost_type_id_tbl(i)        IS NULL THEN
440 
441             IF l_debug_mode = 'Y' THEN
442                pa_debug.g_err_stage:='All the resource attrs passed are NULL and hence No change. Not firing the Select';
443                print_msg(pa_debug.g_err_stage,l_module_name);
444             END IF;
445 
446             x_mfc_cost_type_id_old_tbl(i)  := NULL;
447             x_mfc_cost_type_id_new_tbl(i)  := NULL;
448             x_spread_curve_id_old_tbl(i)   := NULL;
449             x_spread_curve_id_new_tbl(i)   := NULL;
450             x_sp_fixed_date_old_tbl(i)     := NULL;
451             x_sp_fixed_date_new_tbl(i)     := NULL;
452             x_plan_start_date_old_tbl(i)   := NULL;
453             x_plan_start_date_new_tbl(i)   := NULL;
454             x_plan_end_date_old_tbl(i)     := NULL;
455             x_plan_end_date_new_tbl(i)     := NULL;
456             x_rlm_id_change_flag_tbl(i)    := 'N';
457             --select the rbs_element_id and txn accum header id so as to pass them to update_planning_transactions API
458             SELECT rbs_element_id,
459                    txn_accum_header_id
460             INTO   x_rbs_element_id_tbl(i),
461                    x_txn_accum_header_id_tbl(i)
462             FROM   pa_resource_assignments
463             WHERE  resource_assignment_id = p_resource_assignment_id_tbl(i);
464 
465         --If Non Null values are passed then the existing values should be compared with the passed values to find out
466         --the changes. The Old Values should be passed in _old_.._tab parameters of calculate API and new values should
467         --be passed in _new_.._tabl parameters of calculate API.
468         ELSE
469 
470             SELECT
471                DECODE(DECODE(NVL(p_project_role_id_tbl(i),project_role_id),
472                               FND_API.G_MISS_NUM, decode(project_role_id,null,0,1),
473                              project_role_id,0,
474                              1)+
475                       DECODE(NVL(p_resource_list_member_id_tbl(i),resource_list_member_id),
476                               FND_API.G_MISS_NUM, decode(resource_list_member_id,null,0,1),
477                               resource_list_member_id, 0,
478                               1),
479                       0, 'N',
480                       'Y'),--Indicates whether the rbs mapping api should be called or not
481                mfc_cost_type_id,
482                NVL(p_mfc_cost_type_id_tbl(i),mfc_cost_type_id),
483                spread_curve_id,
484                NVL(p_spread_curve_id_tbl(i),spread_curve_id),
485                sp_fixed_date,
486                DECODE(nvl(p_spread_curve_id_tbl(i),spread_curve_id),
487                       p_fixed_date_sp_id,DECODE(DECODE(p_sp_fixed_date_tbl(i),
488                                                        FND_API.G_MISS_DATE,to_date(null),
489                                                        nvl(p_sp_fixed_date_tbl(i),sp_fixed_date))
490                                                ,to_date(null),DECODE (p_planning_start_date_tbl(i),
491                                                                       FND_API.G_MISS_DATE,to_date(null),
492                                                                       nvl(p_planning_start_date_tbl(i),planning_start_date))
493                                                ,nvl(p_sp_fixed_date_tbl(i),sp_fixed_date))
494                       ,to_date(null)),
495                planning_start_date,
496                NVL(p_planning_start_date_tbl(i),planning_start_date),
497                planning_end_date,
498                NVL(p_planning_end_date_tbl(i),planning_end_date),
499                DECODE (p_txn_currency_code_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_txn_currency_code_tbl(i),pbl.txn_currency_code)),
500                DECODE (p_inventory_item_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_inventory_item_id_tbl(i),inventory_item_id)) ,
501                DECODE (p_expenditure_type_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_expenditure_type_tbl(i),expenditure_type)),
502                DECODE (p_person_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_person_id_tbl(i),person_id)) ,
503                DECODE (p_job_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_job_id_tbl(i),job_id)) ,
504                DECODE (p_organization_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_organization_id_tbl(i),organization_id)) ,
505                DECODE (p_event_type_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_event_type_tbl(i),event_type)) ,
506                DECODE (p_expenditure_category_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_expenditure_category_tbl(i),expenditure_category)) ,
507                DECODE (p_revenue_category_code_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_revenue_category_code_tbl(i),revenue_category_code)) ,
508                DECODE (p_item_category_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_item_category_id_tbl(i),item_category_id)) ,
509                DECODE (p_bom_resource_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_bom_resource_id_tbl(i),bom_resource_id)) ,
510                DECODE (p_project_role_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_project_role_id_tbl(i),project_role_id)) ,
511                DECODE (p_person_type_code_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_person_type_code_tbl(i),person_type_code)) ,
512                DECODE (p_supplier_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_supplier_id_tbl(i),supplier_id)),
513                DECODE (p_named_role_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_named_role_tbl(i),named_role )),
514                resource_class_code,
515                rate_based_flag,
516                rbs_element_id,
517                non_labor_resource,
518                txn_accum_header_id,
519                task_id
520             INTO
521                x_rlm_id_change_flag_tbl(i),
522                x_mfc_cost_type_id_old_tbl(i),
523                x_mfc_cost_type_id_new_tbl(i),
524                x_spread_curve_id_old_tbl(i),
525                x_spread_curve_id_new_tbl(i),
526                x_sp_fixed_date_old_tbl(i),
527                x_sp_fixed_date_new_tbl(i),
528                x_plan_start_date_old_tbl(i),
529                x_plan_start_date_new_tbl(i),
530                x_plan_end_date_old_tbl(i),
531                x_plan_end_date_new_tbl(i),
532                l_txn_currency_code_tbl(i),
533                l_inventory_item_id_tbl(i),
534                l_expenditure_type_tbl(i),
535                l_person_id_tbl(i),
536                l_job_id_tbl(i),
537                l_organization_id_tbl(i),
538                l_event_type_tbl(i),
539                l_expenditure_category_tbl(i),
540                l_revenue_category_code_tbl(i),
541                l_item_category_id_tbl(i),
542                l_bom_resource_id_tbl(i),
543                l_project_role_id_tbl(i),
544                l_person_type_code_tbl(i),
545                l_supplier_id_tbl(i),
546                l_named_role_tbl(i),
547                l_resource_class_code_tbl(i),
548                l_rate_based_flag_tbl(i),
549                x_rbs_element_id_tbl(i),
550                l_non_labor_resource_tbl(i),
551                x_txn_accum_header_id_tbl(i),
552                l_task_id_tbl(i)
553             FROM  pa_resource_assignments pra,
554                (SELECT pra.resource_assignment_id
555                       ,pbl.txn_currency_code
556                 FROM   pa_budget_lines pbl,
557                        pa_resource_assignments pra
558                 WHERE  pbl.resource_assignment_id(+)=pra.resource_assignment_id
559                 AND    pra.resource_assignment_id=p_resource_assignment_id_tbl(i)
560                 AND    ROWNUM=1) pbl
561             WHERE pra.resource_assignment_id=p_resource_assignment_id_tbl(i);
562 
563             IF l_debug_mode = 'Y' THEN
564 
565                pa_debug.g_err_stage:='x_rlm_id_change_flag_tbl('||i||') is '||x_rlm_id_change_flag_tbl(i);
566                print_msg(pa_debug.g_err_stage,l_module_name);
567                pa_debug.g_err_stage:='x_mfc_cost_type_id_old_tbl('||i||') is '||x_mfc_cost_type_id_old_tbl(i);
568                print_msg(pa_debug.g_err_stage,l_module_name);
569                pa_debug.g_err_stage:='x_mfc_cost_type_id_new_tbl('||i||') is '||x_mfc_cost_type_id_new_tbl(i);
570                print_msg(pa_debug.g_err_stage,l_module_name);
571                pa_debug.g_err_stage:='x_spread_curve_id_old_tbl('||i||') is '||x_spread_curve_id_old_tbl(i);
572                print_msg(pa_debug.g_err_stage,l_module_name);
573                pa_debug.g_err_stage:='x_spread_curve_id_new_tbl('||i||') is '||x_spread_curve_id_new_tbl(i);
574                print_msg(pa_debug.g_err_stage,l_module_name);
575                pa_debug.g_err_stage:='x_sp_fixed_date_old_tbl('||i||') is '||x_sp_fixed_date_old_tbl(i);
576                print_msg(pa_debug.g_err_stage,l_module_name);
577                pa_debug.g_err_stage:='x_sp_fixed_date_new_tbl('||i||') is '||x_sp_fixed_date_new_tbl(i);
578                print_msg(pa_debug.g_err_stage,l_module_name);
579                pa_debug.g_err_stage:='x_plan_start_date_old_tbl('||i||') is '||x_plan_start_date_old_tbl(i);
580                print_msg(pa_debug.g_err_stage,l_module_name);
581                pa_debug.g_err_stage:='x_plan_start_date_new_tbl('||i||') is '||x_plan_start_date_new_tbl(i);
582                print_msg(pa_debug.g_err_stage,l_module_name);
583                pa_debug.g_err_stage:='x_plan_end_date_old_tbl('||i||') is '||x_plan_end_date_old_tbl(i);
584                print_msg(pa_debug.g_err_stage,l_module_name);
585                pa_debug.g_err_stage:='x_plan_end_date_new_tbl('||i||') is '||x_plan_end_date_new_tbl(i);
586                print_msg(pa_debug.g_err_stage,l_module_name);
587 
588 
589             END IF;--IF l_debug_mode = 'Y' THEN
590 
591             --Added Validation for planning_start_date and planning end date
592             IF ((x_plan_start_date_new_tbl(i)=FND_API.G_MISS_DATE) OR
593                 (x_plan_end_date_new_tbl(i) =FND_API.G_MISS_DATE)  OR
594                 (NVL(x_plan_start_date_new_tbl(i),trunc(sysdate))>NVL(x_plan_end_date_new_tbl(i),trunc(sysdate)))) THEN
595 
596                 IF l_debug_mode = 'Y' THEN
597 
598                    pa_debug.g_err_stage:='Invalid Planning Start/End Dates';
599                    pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
600 
601                    pa_debug.g_err_stage:='x_plan_start_date_new_tbl('||i||') is '|| x_plan_start_date_new_tbl(i);
602                    pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
603 
604                    pa_debug.g_err_stage:='x_plan_end_date_new_tbl('||i||') is '|| x_plan_end_date_new_tbl(i);
605                    pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
606 
607                 END IF;
608 		/*Bug Fix:5752337: The meaningful message should be shown when dates are not entered properly
609 		* made use of exisisting message PA_FP_PLAN_START_END_DATE_ERR which is used in the spread api
610                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
611                                      p_msg_name       => 'PA_FP_INV_PARAM_PASSED');
612 		*/
613 		OPEN get_line_info(p_resource_assignment_id_tbl(i));
614                 FETCH get_line_info
615                 INTO l_project_name
616                      , l_task_name
617                      , l_resource_name;
618                 CLOSE get_line_info;
619 		PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
620                                 ,p_msg_name      => 'PA_FP_PLAN_START_END_DATE_ERR'
621                                 ,p_token1         => 'L_PROJECT_NAME'
622                                 ,p_value1         => l_project_name
623                                 ,p_token2         => 'L_TASK_NAME'
624                                 ,p_value2         => l_task_name
625                                 ,p_token3         => 'L_RESOURCE_NAME'
626                                 ,p_value3         => l_resource_name
627                                 ,p_token4         => 'L_LINE_START_DATE'
628                                 ,p_value4         => x_plan_start_date_new_tbl(i)
629                                 ,p_token5        => 'L_LINE_END_DATE'
630                                 ,p_value5        => x_plan_end_date_new_tbl(i)
631 				);
632 		/* end of bug fix: 5752337 */
633 
634 
635                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
636             END IF;--IF ((x_plan_start_date_new_tbl(i)=FND_API.G_MISS_DATE) OR
637 
638             --Bug 4083605. This block of code makes sure that the planning start date is not changed to a date
639             --which falls after the date where actuals exist. Similar validations are done for planning end date too
640 
641             --Bug 4448581
642             IF NVL(l_plan_ver_settings_rec.wp_version_flag,'N') <> 'Y' THEN
643 
644                 IF l_plan_ver_settings_rec.etc_start_date IS NOT NULL AND
645                    (x_plan_start_date_new_tbl(i) <> x_plan_start_date_old_tbl(i) OR
646                      x_plan_end_date_new_tbl(i) <> x_plan_end_date_old_tbl(i)) THEN
647 
648                     IF l_debug_mode = 'Y' THEN
649 
650                        pa_debug.g_err_stage:='Planning Start/End dates have changed. Validating with Etc Start date';
651                        pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
652 
653                     END IF;
654 
655                     SELECT min(start_date), max(end_date)
656                     INTO   l_actuals_start_date, l_actuals_end_date
657                     FROM   pa_budget_lines
658                     WHERE  budget_version_id = p_budget_version_id
659                     AND    resource_assignment_id = p_resource_assignment_id_tbl(i)
660                     AND    end_date < l_plan_ver_settings_rec.etc_start_date;
661 
662                     IF l_debug_mode = 'Y' THEN
663 
664                        pa_debug.g_err_stage:='x_plan_start_date_new_tbl('||i||') is '||x_plan_start_date_new_tbl(i);
665                        pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
666                        pa_debug.g_err_stage:='x_plan_start_date_old_tbl('||i||') is '||x_plan_start_date_old_tbl(i);
667                        pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
668                        pa_debug.g_err_stage:='l_actuals_start_date is '||l_actuals_start_date;
669                        pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
670                        pa_debug.g_err_stage:='x_plan_end_date_new_tbl('||i||') is '||x_plan_end_date_new_tbl(i);
671                        pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
672                        pa_debug.g_err_stage:='x_plan_end_date_old_tbl('||i||') is '||x_plan_end_date_old_tbl(i);
673                        pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
674                        pa_debug.g_err_stage:='l_actuals_end_date is '||l_actuals_end_date;
675                        pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
676 
677                     END IF;
678 
679                     --If either x_plan_start_date_new_tbl or x_plan_end_date_start_tbl is not null then all
680                     --x_plan_start.end_date_new/old_tbls will be not null
681                     IF ( x_plan_start_date_new_tbl(i) <> x_plan_start_date_old_tbl(i) AND
682                          x_plan_start_date_new_tbl(i) > LEAST(NVL(l_actuals_start_date,x_plan_start_date_new_tbl(i) + 1),l_plan_ver_settings_rec.etc_start_date) ) OR
683                        ( x_plan_end_date_new_tbl(i) <> x_plan_end_date_old_tbl(i) AND
684                          x_plan_end_date_new_tbl(i) < GREATEST(NVL(l_actuals_end_date,x_plan_end_date_new_tbl(i) - 1),l_plan_ver_settings_rec.etc_start_date) ) THEN
685 
686                         IF ( x_plan_start_date_new_tbl(i) <> x_plan_start_date_old_tbl(i) AND
687                              x_plan_start_date_new_tbl(i) > LEAST(NVL(l_actuals_start_date,x_plan_start_date_new_tbl(i) + 1),l_plan_ver_settings_rec.etc_start_date) ) THEN
688 
689                             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
690                                                  p_msg_name       => 'PA_FP_PLAN_ST_DT_CHG_ACTL_EXST');
691                         END IF;
692 
693                         IF ( x_plan_end_date_new_tbl(i) <> x_plan_end_date_old_tbl(i) AND
694                              x_plan_end_date_new_tbl(i) < GREATEST(NVL(l_actuals_end_date,x_plan_end_date_new_tbl(i) - 1),l_plan_ver_settings_rec.etc_start_date) ) THEN
695 
696                             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
697                                                  p_msg_name       => 'PA_FP_PLAN_DT_CHG_ACTL_EXST');
698                         END IF;
699 
700                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
701 
702                     END IF;
703 
704 
705                 END IF;--IF l_plan_ver_settings_rec.etc_start_date IS NOT NULL AND
706 
707             END IF;  -- If not a workplan version
708 
709             --Added Validation for sp_fixed_date cannot be null and to be between planning_start_date and
710             --planning end date for fixed date spread curve. -- Added for Bug 3607061
711             --Modified Logic below for Bug 3762278 -- l_spread_curve_id_tbl is the final value of
712             --spread curve id that will be existing in db
713             IF (x_spread_curve_id_new_tbl(i) = p_fixed_date_sp_id) THEN
714 
715                IF p_sp_fixed_date_tbl(i) = FND_API.G_MISS_DATE THEN
716 
717                   IF l_debug_mode = 'Y' THEN
718                      pa_debug.g_err_stage:='Error - cannot nullify sp_fixed_date for Fixed Date Spread curve';
719                      print_msg(pa_debug.g_err_stage,l_module_name);
720                   END IF;
721 
722                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
723                                        p_msg_name       => 'PA_FP_SP_FIXED_DATE_NULL');
724                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
725 
726                -- Added for bug 4247427. Fixed Date cannot be less than the etc_start_date
727                ELSIF (l_plan_ver_settings_rec.etc_start_date IS NOT NULL AND (x_sp_fixed_date_new_tbl(i) BETWEEN                                 x_plan_start_date_new_tbl(i) AND x_plan_end_date_new_tbl(i))) THEN
728                     IF (x_sp_fixed_date_new_tbl(i) < l_plan_ver_settings_rec.etc_start_date) THEN
729                       IF l_debug_mode = 'Y' THEN
730                          pa_debug.g_err_stage :='Sp Fixed Date less than ETC Start date';
731                          print_msg(pa_debug.g_err_stage,l_module_name);
732                       END IF;
733                       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
734                                        p_msg_name       => 'PA_FP_SP_FIXED_DATE_LESS');
735                       RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
736                     END IF;  -- x_sp_fixed_date_new_tbl(i) < l_plan_ver_settings_rec.etc_start_date
737 
738                ELSIF (x_sp_fixed_date_new_tbl(i) NOT BETWEEN x_plan_start_date_new_tbl(i) AND x_plan_end_date_new_tbl(i)) THEN
739 
740                   IF l_debug_mode = 'Y' THEN
741                      pa_debug.g_err_stage :='Sp Fixed Date not between planning start date and End Date';
742                      print_msg(pa_debug.g_err_stage,l_module_name);
743                   END IF;
744 
745                   -- Added for Bug 3762278
746                   -- fetching details for message tokens
747                   BEGIN
748                          SELECT ppa.name project_name
749                                ,pt.name task_name
750                                ,prl.alias resource_name
751                           INTO l_project_name
752                               ,l_task_name
753                               ,l_resource_name
754                           FROM pa_projects_all ppa
755                               ,pa_proj_elements pt
756                               ,pa_resource_list_members prl
757                               ,pa_resource_assignments pra
758                          WHERE pra.resource_assignment_id = p_resource_assignment_id_tbl(i)
759                            AND ppa.project_id = pra.project_id
760                            AND pt.proj_element_id(+) = pra.task_id
761                            /* Bug fix:4200168 AND prl.resource_list_member_id(+) = pra.resource_list_member_id;*/
762                            AND prl.resource_list_member_id = pra.resource_list_member_id;
763                   EXCEPTION
764                          WHEN NO_DATA_FOUND THEN
765                               IF l_debug_mode = 'Y' THEN
766                                  pa_debug.g_err_stage :='Invalid Data PA_FP_FIXED_DATE_NOT_MATCH will have no tokens';
767                                  print_msg(pa_debug.g_err_stage,l_module_name);
768                               END IF;
769                               NULL;
770                   END;
771 
772                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
773                                        p_msg_name       => 'PA_FP_FIXED_DATE_NOT_MATCH',
774                                        p_token1         => 'L_PROJECT_NAME' ,
775                                        p_value1         => l_project_name,
776                                        p_token2         => 'L_TASK_NAME',
777                                        p_value2         => l_task_name,
778                                        p_token3         => 'L_RESOURCE_NAME',
779                                        p_value3         => l_resource_name,
780                                        p_token4         => 'L_LINE_START_DATE',
781                                        p_value4         => x_plan_start_date_new_tbl(i),
782                                        p_token5         => 'L_LINE_END_DATE',
783                                        p_value5         => x_plan_start_date_old_tbl(i));
784                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
785 
786                END IF;--IF x_sp_fixed_date_new_tbl(i) = FND_API.G_MISS_DATE THEN
787 
788             ELSE
789                 -- if the Final Value of spread curve id is either null or not equal to fixed date
790                 -- spread curve then the sp fixed date should be nulled out if it is not already null.
791                 IF l_debug_mode = 'Y' THEN
792                     pa_debug.g_err_stage:='Spread curve id not chosen to be updated and value in db for..';
793                     print_msg(pa_debug.g_err_stage,l_module_name);
794                     pa_debug.g_err_stage:='..spread curve id is either null or <> to fixed date spread curve id';
795                     print_msg(pa_debug.g_err_stage,l_module_name);
796                 END IF;
797 
798                 IF x_sp_fixed_date_old_tbl(i) IS NOT NULL THEN
799 
800                    x_sp_fixed_date_new_tbl(i) := FND_API.G_MISS_DATE;
801 
802                 ELSE
803 
804                    x_sp_fixed_date_new_tbl(i) := NULL;
805 
806                 END IF;
807 
808             END IF;--IF (x_spread_curve_id_new_tbl(i) = p_fixed_date_sp_id) THEN
809 
810 
811             --RBS element Id should be re-derived if the rlm id/Project Role Id have changed.
812             --dbms_output.put_line('7');
813             IF l_debug_mode = 'Y' THEN
814                 pa_debug.g_err_stage:='Finding out whether the RBS re-derivation is required or NOT';
815                 print_msg(pa_debug.g_err_stage,l_module_name);
816             END IF;
817 
818             IF x_rlm_id_change_flag_tbl(i)='Y' THEN
819 
820                 -- An rbs element id can change for a planning transaction only in Task Assignments Flow.
821                 IF p_context <> PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
822 
823                    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
824                                         p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
825                                         p_token1         => 'PROCEDURENAME',
826                                         p_value1         => 'PROCESS_RES_CHG_DERV_CALC_PRMS',
827                                         p_token2         => 'STAGE',
828                                         p_value2         => 'RBS Elem Id change in NON TA context');
829                    RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
830 
831                 END IF;
832                 --dbms_output.put_line('7.1');
833 
834                 l_rbs_map_index:=l_rbs_map_index+1;
835 
836                 l_ra_id_rbs_prm_tbl.extend(1);
837                 l_person_id_rbs_prm_tbl.extend(1);
838                 l_job_id_rbs_prm_tbl.extend(1);
839                 l_organization_id_rbs_prm_tbl.extend(1);
840                 l_event_type_rbs_prm_tbl.extend(1);
841                 l_exp_category_rbs_prm_tbl.extend(1);
842                 l_rev_cat_code_rbs_prm_tbl.extend(1);
843                 l_inv_item_id_rbs_prm_tbl.extend(1);
844                 l_item_cat_id_rbs_prm_tbl.extend(1);
845                 l_bom_res_id_rbs_prm_tbl.extend(1);
846                 l_per_type_code_rbs_prm_tbl.extend(1);
847                 l_supplier_id_rbs_prm_tbl.extend(1);
848                 l_txn_src_typ_code_rbs_prm_tbl.extend(1);
849                 l_exp_type_rbs_prm_tbl.extend(1);
850                 l_project_role_id_rbs_prm_tbl.extend(1);
851                 l_named_role_rbs_prm_tbl.extend(1);
852                 l_non_labor_res_rbs_prm_tbl.extend(1);
853 
854                 --These pl/sql tbls are required as they have to be passed to the delete_planning_transactions API for
855                 --deleting the PJI data for the planning transactions for which the rbs element id has changed
856                 l_task_id_rbs_prm_tbl.extend(1);
857                 l_rbs_elem_id_rbs_prm_tbl.extend(1);
858                 l_rbf_rbs_prm_tbl.extend(1);
859                 l_res_class_code_rbs_prm_tbl.extend(1);
860                 --dbms_output.put_line('7.2');
861 
862                 l_ra_id_rbs_prm_tbl(l_rbs_map_index)            :=  p_resource_assignment_id_tbl(i);
863                 l_person_id_rbs_prm_tbl(l_rbs_map_index)        :=  l_person_id_tbl(i);
864                 l_job_id_rbs_prm_tbl(l_rbs_map_index)           :=  l_job_id_tbl(i);
865                 l_organization_id_rbs_prm_tbl(l_rbs_map_index)  :=  l_organization_id_tbl(i);
866                 l_event_type_rbs_prm_tbl(l_rbs_map_index)       :=  l_event_type_tbl(i);
867                 l_exp_category_rbs_prm_tbl(l_rbs_map_index)     :=  l_expenditure_category_tbl(i);
868                 l_rev_cat_code_rbs_prm_tbl(l_rbs_map_index)     :=  l_revenue_category_code_tbl(i);
869                 l_inv_item_id_rbs_prm_tbl(l_rbs_map_index)      :=  l_inventory_item_id_tbl(i);
870                 l_item_cat_id_rbs_prm_tbl(l_rbs_map_index)      :=  l_item_category_id_tbl(i);
871                 l_bom_res_id_rbs_prm_tbl(l_rbs_map_index)       :=  l_bom_resource_id_tbl(i);
872                 l_per_type_code_rbs_prm_tbl(l_rbs_map_index)    :=  l_person_type_code_tbl(i);
873                 l_supplier_id_rbs_prm_tbl(l_rbs_map_index)      :=  l_supplier_id_tbl(i);
874                 l_txn_src_typ_code_rbs_prm_tbl(l_rbs_map_index) :=  'RES_ASSIGNMENT';
875                 l_exp_type_rbs_prm_tbl(l_rbs_map_index)         :=  l_expenditure_type_tbl(i);
876                 l_project_role_id_rbs_prm_tbl(l_rbs_map_index)  :=  l_project_role_id_tbl(i);
877                 l_named_role_rbs_prm_tbl(l_rbs_map_index)       :=  l_named_role_tbl(i);
878                 l_non_labor_res_rbs_prm_tbl(l_rbs_map_index)    :=  l_non_labor_resource_tbl(i);
879 
880                 l_task_id_rbs_prm_tbl(l_rbs_map_index)          :=  l_task_id_tbl(i);
881                 l_res_class_code_rbs_prm_tbl(l_rbs_map_index)   :=  l_resource_class_code_tbl(i);
882                 --Please note that here rbs element id for which the pji data has to deleted should be passed.
883                 --x_rbs_element_id_tbl contains the old rbs element id and the new rbs element id will be derived only in the
884                 --later part of the code
885                 l_rbs_elem_id_rbs_prm_tbl(l_rbs_map_index)      :=  x_rbs_element_id_tbl(i);
886                 l_rbf_rbs_prm_tbl(l_rbs_map_index)              :=  l_rate_based_flag_tbl(i);
887                 --dbms_output.put_line('7.3');
888 
889 		/* Bug fix: 5759413 */
890 		IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
891 			l_rtx_rateOvrds_rec := NULL;
892 		 	OPEN get_rateOvrds (p_resource_assignment_id_tbl(i));
893 			FETCH get_rateOvrds INTO l_rtx_rateOvrds_rec;
894 			CLOSE get_rateOvrds;
895 		END IF;
896 
897                 -- An rbs element id can change for a planning transaction only in Task Assignments Flow.
898                 -- Resource list member id and project role id are the only two attributes of a planning
899                 -- transaction, which on undergoing a change from the UI, can change the rbs element id
900                 -- of the planning transaction. Quantities and amounts to be passed to calculate api
901                 -- is derved as per the logic below
902                 -- Details - /padev/pa/11.5/docs/CalcAPI_Behavior_Document2.doc
903                 IF l_debug_mode = 'Y' THEN
904                    pa_debug.g_err_stage:='Deriving Amts/Qty for rbs element id change';
905                    print_msg(pa_debug.g_err_stage,l_module_name);
906                 END IF;
907 
908                 IF px_total_qty_tbl(i) IS NOT NULL AND px_total_qty_tbl(i) <> FND_API.G_MISS_NUM THEN
909 
910                     IF l_debug_mode = 'Y' THEN
911                         pa_debug.g_err_stage:='RBS Input Quantity Exists Set Amts to NULL';
912                         print_msg(pa_debug.g_err_stage,l_module_name);
913                     END IF;
914 
915                     px_total_raw_cost_tbl(i)         := NULL;
916                     px_total_burdened_cost_tbl(i)    := NULL;
917                     px_total_revenue_tbl(i)          := NULL;
918                     px_raw_cost_rate_tbl(i)          := NULL;
919                     px_b_cost_rate_tbl(i)            := NULL;
920                     px_bill_rate_tbl(i)              := NULL;
921 
922 		    /* Bug fix: 5759413: Check if the rate override is changed or not: if changed retain
923 		     * the new rate overrides entered by user, if not changed then set it to null
924 		     * so that, rate api derives the new rates for new planning resource
925 		     */
926 		    IF px_raw_cost_override_rate_tbl(i) is NOT NULL AND
927 			px_raw_cost_override_rate_tbl(i) <> FND_API.G_MISS_NUM  Then
928 			IF px_raw_cost_override_rate_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_raw_cost_rate_override,0) Then
929 		    		px_raw_cost_override_rate_tbl(i) := NULL;
930 			END IF;
931 		    End IF;
932 
933 		    IF px_b_cost_rate_override_tbl(i) is NOT NULL AND
934 			px_b_cost_rate_override_tbl(i) <> FND_API.G_MISS_NUM  Then
935 			IF px_b_cost_rate_override_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_burden_cost_rate_override,0) Then
936     		    		px_b_cost_rate_override_tbl(i) := NULL;
937 			END IF;
938 		    END IF;
939 
940                 ELSIF px_total_qty_tbl(i) = FND_API.G_MISS_NUM THEN
941 
942                     IF l_debug_mode = 'Y' THEN
943                         pa_debug.g_err_stage:='RBS Input Quantity IS G_MISS_NUM Set Amts to G_MISS_NUM';
944                         print_msg(pa_debug.g_err_stage,l_module_name);
945                     END IF;
946 
947                     px_total_raw_cost_tbl(i)         := FND_API.G_MISS_NUM;
948                     px_total_burdened_cost_tbl(i)    := FND_API.G_MISS_NUM;
949                     px_total_revenue_tbl(i)          := FND_API.G_MISS_NUM;
950                     px_raw_cost_rate_tbl(i)          := FND_API.G_MISS_NUM;
951                     px_b_cost_rate_tbl(i)            := FND_API.G_MISS_NUM;
952                     px_bill_rate_tbl(i)              := FND_API.G_MISS_NUM;
953 
954 		    /* Bug fix: 5759413 */
955                     IF px_raw_cost_override_rate_tbl(i) is NOT NULL AND
956                         px_raw_cost_override_rate_tbl(i) <> FND_API.G_MISS_NUM  Then
957                         IF px_raw_cost_override_rate_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_raw_cost_rate_override,0) Then
958                                 px_raw_cost_override_rate_tbl(i) := NULL;
959                         END IF;
960                     End IF;
961 
962                     IF px_b_cost_rate_override_tbl(i) is NOT NULL AND
963                         px_b_cost_rate_override_tbl(i) <> FND_API.G_MISS_NUM  Then
964                         IF px_b_cost_rate_override_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_burden_cost_rate_override,0) Then                                    px_b_cost_rate_override_tbl(i) := NULL;
965                         END IF;
966                     END IF;
967 
968 
969                 ELSE -- px_total_qty_tbl IS NULL
970 
971                     IF l_debug_mode = 'Y' THEN
972                         pa_debug.g_err_stage:='RBS Input Quantity IS NULL See in DB';
973                         print_msg(pa_debug.g_err_stage,l_module_name);
974                     END IF;
975                     --dbms_output.put_line('7.3.1');
976 
977                     OPEN c_data_in_db_csr(p_resource_assignment_id_tbl(i));
978 
979                     FETCH c_data_in_db_csr INTO l_data_in_db_rec;
980 
981                     IF c_data_in_db_csr%FOUND THEN
982 
983                         IF l_debug_mode = 'Y' THEN
984                             pa_debug.g_err_stage:='RBS Quantity found in DB, Set Amounts to NULL';
985                             print_msg(pa_debug.g_err_stage,l_module_name);
986                         END IF;
987                         px_total_qty_tbl(i)              := l_data_in_db_rec.quantity;
988                         px_total_raw_cost_tbl(i)         := NULL;
989                         px_total_burdened_cost_tbl(i)    := NULL;
990                         px_total_revenue_tbl(i)          := NULL;
991                         px_raw_cost_rate_tbl(i)          := NULL;
992                         px_b_cost_rate_tbl(i)            := NULL;
993                         px_bill_rate_tbl(i)              := NULL;
994 			/* Bug fix: 5759413 */
995                         IF px_raw_cost_override_rate_tbl(i) is NOT NULL AND
996                           px_raw_cost_override_rate_tbl(i) <> FND_API.G_MISS_NUM  Then
997                           IF px_raw_cost_override_rate_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_raw_cost_rate_override,0) Then
998                                 px_raw_cost_override_rate_tbl(i) := NULL;
999                           END IF;
1000                         End IF;
1001 
1002                         IF px_b_cost_rate_override_tbl(i) is NOT NULL AND
1003                           px_b_cost_rate_override_tbl(i) <> FND_API.G_MISS_NUM  Then
1004                           IF px_b_cost_rate_override_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_burden_cost_rate_override,0) Then                                    px_b_cost_rate_override_tbl(i) := NULL;
1005                           END IF;
1006                         END IF;
1007 
1008                     ELSE -- If c_data_in_db_csr is not FOUND
1009 
1010                         IF l_debug_mode = 'Y' THEN
1011                             pa_debug.g_err_stage:='RBS NO Record in DB';
1012                             print_msg(pa_debug.g_err_stage,l_module_name);
1013                         END IF;
1014 
1015                         px_total_qty_tbl(i)              := NULL;
1016                         px_total_raw_cost_tbl(i)         := NULL;
1017                         px_total_burdened_cost_tbl(i)    := NULL;
1018                         px_total_revenue_tbl(i)          := NULL;
1019                         px_raw_cost_rate_tbl(i)          := NULL;
1020                         px_b_cost_rate_tbl(i)            := NULL;
1021                         px_bill_rate_tbl(i)              := NULL;
1022 
1023 			/* Bug fix: 5759413 */
1024                         IF px_raw_cost_override_rate_tbl(i) is NOT NULL AND
1025                           px_raw_cost_override_rate_tbl(i) <> FND_API.G_MISS_NUM  Then
1026                           IF px_raw_cost_override_rate_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_raw_cost_rate_override,0) Then
1027                                 px_raw_cost_override_rate_tbl(i) := NULL;
1028                           END IF;
1029                         End IF;
1030 
1031                         IF px_b_cost_rate_override_tbl(i) is NOT NULL AND
1032                           px_b_cost_rate_override_tbl(i) <> FND_API.G_MISS_NUM  Then
1033                           IF px_b_cost_rate_override_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_burden_cost_rate_override,0) Then                                    px_b_cost_rate_override_tbl(i) := NULL;
1034                           END IF;
1035                         END IF;
1036 
1037                     END IF;
1038 
1039                     CLOSE c_data_in_db_csr;
1040                     --dbms_output.put_line('7.4');
1041 
1042                 END IF;--IF px_total_qty_tbl(i) IS NOT NULL AND px_total_qty_tbl(i) <> FND_API.G_MISS_NUM THEN
1043 
1044             END IF;--IF x_rlm_id_change_flag_tbl(i)='Y' THEN
1045 
1046         END IF;--IF p_project_role_id_tbl(i)         IS NULL AND
1047 
1048     END LOOP;--FOR i IN p_resource_assignment_id_tbl.FIRST
1049 
1050     IF l_ra_id_rbs_prm_tbl.count > 0 THEN
1051 
1052         /* Bug 3767322 - If resource list member changes, handling calculate
1053          * api call as per Sanjay:
1054            If planning resource is changed (resource_list_member_id is changed) then
1055            calculate API assumes that the calling API has cleaned up the data by deleting
1056            the entries in reporting data and then also deleted all the budget lines. This
1057            is important as this is one reason of data corruption happening in the reporting
1058            integration. Calculate cannot handle this case as the data seen by calculate is
1059            the changed data and not the old one.
1060                 Pass the following to calculate API: Total QTY, ETC AMT (Plan-Actual)/ ETC
1061            QTY (Plan-actual) as ETC Rate (if qty and amounts are both present), Total
1062            Amount (Raw Cost, Burdened Cost and or Revenue) (These may ( if qty is null) or
1063            may not be passed) . No delete flag is required as all the lines have already
1064            been removed. */
1065 
1066         IF l_debug_mode = 'Y' THEN
1067             pa_debug.g_err_stage:='Calling API delete_planning_transactions ';
1068             pa_debug.write(l_module_name,pa_debug.g_err_stage, 5);
1069         END IF;
1070         --dbms_output.put_line('7.5');
1071 
1072         pa_fp_planning_transaction_pub.delete_planning_transactions
1073         (
1074               p_context                   => p_context
1075              ,p_calling_context           => p_calling_context   -- Added for Bug 6856934
1076              ,p_task_or_res               => 'ASSIGNMENT'
1077              ,p_resource_assignment_tbl   => l_ra_id_rbs_prm_tbl
1078              ,p_validate_delete_flag      => 'N'
1079              ,p_calling_module            => 'PROCESS_RES_CHG_DERV_CALC_PRMS'
1080              ,p_task_id_tbl               => l_task_id_rbs_prm_tbl
1081              ,p_rbs_element_id_tbl        => l_rbs_elem_id_rbs_prm_tbl
1082              ,p_rate_based_flag_tbl       => l_rbf_rbs_prm_tbl
1083              ,p_resource_class_code_tbl   => l_res_class_code_rbs_prm_tbl
1084              ,x_return_status             => x_return_status
1085              ,x_msg_count                 => x_msg_count
1086              ,x_msg_data                  => x_msg_data
1087         );
1088 
1089         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1090 
1091            IF l_debug_mode = 'Y' THEN
1092                  pa_debug.g_err_stage:='Called API delete_planning_transactions returned error';
1093                  pa_debug.write(l_module_name,pa_debug.g_err_stage, 5);
1094            END IF;
1095            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1096 
1097         END IF;
1098         --dbms_output.put_line('7.6');
1099 
1100     END IF;
1101 
1102     --dbms_output.put_line('8');
1103     --Call the rbs mapping api only if there are some resource assignments for which the rbs_element_id can change
1104     IF l_rbs_map_index>0 THEN
1105 
1106         IF l_debug_mode = 'Y' THEN
1107             pa_debug.g_err_stage:='Calling PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs';
1108             print_msg(pa_debug.g_err_stage,l_module_name);
1109         END IF;
1110 
1111         --Extend the output pl/sql tbls l_rbs_element_id_tbl and l_txn_accum_header_id_tbl so that they contatin
1112         --the same no of records as l_eligible_rlm_ids_tbl
1113         l_rbs_element_id_prm_tbl.EXTEND(l_ra_id_rbs_prm_tbl.COUNT);
1114         l_txn_accum_header_id_prm_tbl.EXTEND(l_ra_id_rbs_prm_tbl.COUNT);
1115 
1116         --Call the RBS Mapping API only if the rbs version id is not null
1117         IF l_plan_ver_settings_rec.rbs_version_id IS NOT NULL THEN
1118 
1119             --dbms_output.put_line('7.7');
1120             PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs(
1121              p_budget_version_id           => p_budget_version_id
1122             ,p_resource_list_id            => l_plan_ver_settings_rec.resource_list_id
1123             ,p_rbs_version_id              => l_plan_ver_settings_rec.rbs_version_id
1124             ,p_calling_process             => 'RBS_REFRESH'
1125             ,p_calling_context             => 'PLSQL'
1126             ,p_process_code                => 'RBS_MAP'
1127             ,p_calling_mode                => 'PLSQL_TABLE'
1128             ,p_init_msg_list_flag          => 'N'
1129             ,p_commit_flag                 => 'N'
1130             ,p_TXN_SOURCE_ID_tab           => l_ra_id_rbs_prm_tbl
1131             ,p_TXN_SOURCE_TYPE_CODE_tab    => l_txn_src_typ_code_rbs_prm_tbl
1132             ,p_PERSON_ID_tab               => l_person_id_rbs_prm_tbl
1133             ,p_JOB_ID_tab                  => l_job_id_rbs_prm_tbl
1134             ,p_ORGANIZATION_ID_tab         => l_organization_id_rbs_prm_tbl
1135             ,p_VENDOR_ID_tab               => l_supplier_id_rbs_prm_tbl
1136             ,p_EXPENDITURE_TYPE_tab        => l_exp_type_rbs_prm_tbl
1137             ,p_EVENT_TYPE_tab              => l_event_type_rbs_prm_tbl
1138             ,p_NON_LABOR_RESOURCE_tab      => l_non_labor_res_rbs_prm_tbl
1139             ,p_EXPENDITURE_CATEGORY_tab    => l_exp_category_rbs_prm_tbl
1140             ,p_REVENUE_CATEGORY_CODE_tab   => l_rev_cat_code_rbs_prm_tbl
1141             ,p_PROJECT_ROLE_ID_tab         => l_project_role_id_rbs_prm_tbl
1142             ,p_RESOURCE_CLASS_CODE_tab     => l_res_class_code_rbs_prm_tbl
1143             ,p_ITEM_CATEGORY_ID_tab        => l_item_cat_id_rbs_prm_tbl
1144             ,p_PERSON_TYPE_CODE_tab        => l_per_type_code_rbs_prm_tbl
1145             ,p_BOM_RESOURCE_ID_tab         => l_bom_res_id_rbs_prm_tbl
1146             ,p_INVENTORY_ITEM_ID_tab       => l_inv_item_id_rbs_prm_tbl -- Bug 3698596
1147             ,x_txn_source_id_tab           => l_txn_source_id_tbl
1148             ,x_res_list_member_id_tab      => l_res_list_member_id_tbl
1149             ,x_rbs_element_id_tab          => l_rbs_element_id_prm_tbl
1150             ,x_txn_accum_header_id_tab     => l_txn_accum_header_id_prm_tbl
1151             ,x_return_status               => x_return_status
1152             ,x_msg_count                   => x_msg_count
1153             ,x_msg_data                    => x_msg_data);
1154 
1155             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1156 
1157                  IF l_debug_mode = 'Y' THEN
1158                        pa_debug.g_err_stage:='Called API PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs returned error';
1159                        pa_debug.write(l_module_name,pa_debug.g_err_stage, 5);
1160                  END IF;
1161                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1162 
1163             END IF;
1164             --dbms_output.put_line('7.8');
1165 
1166         END IF;--IF l_plan_ver_settings_rec.rbs_version_id IS NOT NULL THEN
1167 
1168 
1169     END IF;--IF l_rbs_map_index>0 THEN
1170 
1171     IF l_rbs_map_index>0 THEN
1172 
1173         --dbms_output.put_line('7.9');
1174         --Initialise the indexes so that they can be re-used in the loop below
1175         l_rbs_map_index:=1;
1176         IF l_debug_mode = 'Y' THEN
1177            pa_debug.g_err_stage:='About to loop thru to create the pl/sql tables for rbs element id ';
1178            print_msg(pa_debug.g_err_stage,l_module_name);
1179         END IF;
1180         -- Loop thru the input ra id tbl and change the value of rbs_element_id
1181         -- depending on the value returned by the above apis. Here it is assumed that the called APIs
1182         -- returns the output in the order in which the inputs are passed.
1183 
1184         --Null out quantity if the UOM or Rate Based Flag have changed.
1185         FOR i IN p_resource_assignment_id_tbl.FIRST .. p_resource_assignment_id_tbl.LAST LOOP
1186 
1187                 IF p_resource_assignment_id_tbl(i) = l_ra_id_rbs_prm_tbl(l_rbs_map_index) THEN
1188 
1189                     x_rbs_element_id_tbl(i):=l_rbs_element_id_prm_tbl(l_rbs_map_index);
1190                     x_txn_accum_header_id_tbl(i):=l_txn_accum_header_id_prm_tbl(l_rbs_map_index);
1191 
1192                     IF l_ra_id_rbs_prm_tbl.EXISTS(l_rbs_map_index+1) THEN
1193                         l_rbs_map_index:=l_rbs_map_index+1;
1194                     END IF;
1195 
1196                 END IF;
1197 
1198         END LOOP;
1199         --dbms_output.put_line('8.0');
1200     END IF;--IF l_rbs_map_index>0 OR
1201            --dbms_output.put_line('10');
1202 
1203     IF l_debug_mode = 'Y' THEN
1204         pa_debug.g_err_stage:='Leaving Process_res_chg_Derv_calc_prms API';
1205         print_msg(pa_debug.g_err_stage,l_module_name);
1206     pa_debug.reset_curr_function;
1207 	END IF;
1208   EXCEPTION
1209       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1210            l_msg_count := FND_MSG_PUB.count_msg;
1211              IF l_msg_count = 1 THEN
1212                 PA_INTERFACE_UTILS_PUB.get_messages
1213                      (p_encoded        => FND_API.G_TRUE
1214                       ,p_msg_index      => 1
1215                       ,p_msg_count      => l_msg_count
1216                       ,p_msg_data       => l_msg_data
1217                       ,p_data           => l_data
1218                       ,p_msg_index_out  => l_msg_index_out);
1219                 x_msg_data := l_data;
1220                 x_msg_count := l_msg_count;
1221              ELSE
1222                 x_msg_count := l_msg_count;
1223              END IF;
1224            x_return_status := FND_API.G_RET_STS_ERROR;
1225 	IF l_debug_mode = 'Y' THEN
1226            pa_debug.reset_curr_function;
1227 	END IF;
1228      WHEN OTHERS THEN
1229           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1230           x_msg_count     := 1;
1231           x_msg_data      := SQLERRM;
1232           FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'PA_FP_PLANNING_TRANSACTION_PUB'
1233                                   ,p_procedure_name  => 'Process_res_chg_Derv_calc_prms');
1234 
1235            IF l_debug_mode = 'Y' THEN
1236              pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
1237              pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
1238              pa_debug.reset_curr_function;
1239 	END IF;
1240           RAISE;
1241 
1242   END Process_res_chg_Derv_calc_prms;
1243 
1244 
1245 /*=====================================================================
1246 Procedure Name:      add_planning_transactions
1247 Purpose:             This procedure should be called to create planning
1248                      transactions valid values for p_context are 'BUDGET'
1249                      ,'FORECAST', 'WORKPLAN' and 'TASK_ASSIGNMENT'.The
1250                      api will honor only resource list member
1251                      id, resource name and resource class flag in the
1252                      resource rec type and default all the other values
1253                      by calling the get resurce defaults api of resource
1254                      foundation.
1255 
1256                      Creates resource assignments and budget lines for
1257                      workplan/budget/forecast. It is assumed that the
1258                      duplicate rlm ids are not passed . If this API finds
1259                      that there is no corresponding budget version then
1260                      this API goes and creates a budget version for the
1261                      work plan version.
1262 =======================================================================*/
1263 /*******************************************************************************************************
1264 As part of Bug 3749516 All References to Equipment Effort or Equip Resource Class has been removed in
1265 PROCEDURE add_planning_transactions.
1266 p_planned_equip_effort_tbl IN parameter has also been removed as they were not being  used/referred.
1267 ********************************************************************************************************/
1268 
1269 PROCEDURE add_planning_transactions
1270 (
1271        p_context                     IN       VARCHAR2
1272       ,p_extraction_type             IN       VARCHAR2 DEFAULT NULL   -- Added for Bug 13419867
1273       ,p_calling_context             IN       VARCHAR2 DEFAULT NULL   -- Added for Bug 6856934
1274       ,p_one_to_one_mapping_flag     IN       VARCHAR2 DEFAULT 'N'
1275       ,p_calling_module              IN       VARCHAR2 DEFAULT NULL
1276       ,p_project_id                  IN       Pa_projects_all.project_id%TYPE
1277       ,p_struct_elem_version_id      IN       Pa_proj_element_versions.element_version_id%TYPE   DEFAULT NULL
1278       ,p_budget_version_id           IN       Pa_budget_versions.budget_version_id%TYPE          DEFAULT NULL
1279       ,p_task_elem_version_id_tbl    IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1280       ,p_cbs_element_id_tbl			 IN		  SYSTEM.pa_num_tbl_type
1281 	  DEFAULT SYSTEM.PA_NUM_TBL_TYPE() --bug#16200605
1282 	  ,p_task_name_tbl               IN       SYSTEM.PA_VARCHAR2_240_TBL_TYPE                    DEFAULT SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
1283       ,p_task_number_tbl             IN       SYSTEM.PA_VARCHAR2_100_TBL_TYPE                    DEFAULT SYSTEM.PA_VARCHAR2_100_TBL_TYPE()
1284       ,p_start_date_tbl              IN       SYSTEM.pa_date_tbl_type                            DEFAULT SYSTEM.PA_DATE_TBL_TYPE()
1285       ,p_end_date_tbl                IN       SYSTEM.pa_date_tbl_type                            DEFAULT SYSTEM.PA_DATE_TBL_TYPE()
1286        -- Bug 3793623 New params p_planning_start_date_tbl and p_planning_end_date_tbl added
1287       ,p_planning_start_date_tbl     IN       SYSTEM.pa_date_tbl_type                            DEFAULT SYSTEM.PA_DATE_TBL_TYPE()
1288       ,p_planning_end_date_tbl       IN       SYSTEM.pa_date_tbl_type                            DEFAULT SYSTEM.PA_DATE_TBL_TYPE()
1289       ,p_planned_people_effort_tbl   IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1290       ,p_latest_eff_pub_flag_tbl     IN       SYSTEM.PA_VARCHAR2_1_TBL_TYPE                      DEFAULT SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
1291       --One record in the above pl/sql tables correspond to all the records in the below pl/sql tables
1292       ,p_resource_list_member_id_tbl IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1293       ,p_project_assignment_id_tbl   IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1294       /* The following columns are not (to be) passed by TA/WP. They are based by Edit Plan page BF case */
1295       ,p_quantity_tbl                IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1296       ,p_currency_code_tbl           IN       SYSTEM.PA_VARCHAR2_15_TBL_TYPE                     DEFAULT SYSTEM.PA_VARCHAR2_15_TBL_TYPE()
1297       ,p_raw_cost_tbl                IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1298       ,p_burdened_cost_tbl           IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1299       ,p_revenue_tbl                 IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1300       ,p_cost_rate_tbl               IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1301       ,p_bill_rate_tbl               IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1302       ,p_burdened_rate_tbl           IN       SYSTEM.pa_num_tbl_type                             DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1303       ,p_skip_duplicates_flag        IN       VARCHAR2                                           DEFAULT 'N'
1304       ,p_unplanned_flag_tbl          IN       SYSTEM.PA_VARCHAR2_1_TBL_TYPE                      DEFAULT SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
1305       ,p_expenditure_type_tbl               IN  SYSTEM.PA_VARCHAR2_30_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE() --added for Enc
1306       ,p_pm_product_code             IN       SYSTEM.PA_VARCHAR2_30_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
1307       ,p_pm_res_asgmt_ref            IN       SYSTEM.PA_VARCHAR2_30_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
1308       ,p_attribute_category_tbl      IN       SYSTEM.PA_VARCHAR2_30_TBL_TYPE  DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
1309       ,p_attribute1                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1310       ,p_attribute2                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1311       ,p_attribute3                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1312       ,p_attribute4                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1313       ,p_attribute5                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1314       ,p_attribute6                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1315       ,p_attribute7                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1316       ,p_attribute8                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1317       ,p_attribute9                  IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1318       ,p_attribute10                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1319       ,p_attribute11                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1320       ,p_attribute12                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1321       ,p_attribute13                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1322       ,p_attribute14                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1323       ,p_attribute15                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1324       ,p_attribute16                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1325       ,p_attribute17                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1326       ,p_attribute18                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1327       ,p_attribute19                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1328       ,p_attribute20                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1329       ,p_attribute21                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1330       ,p_attribute22                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1331       ,p_attribute23                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1332       ,p_attribute24                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1333       ,p_attribute25                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1334       ,p_attribute26                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1335       ,p_attribute27                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1336       ,p_attribute28                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1337       ,p_attribute29                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1338       ,p_attribute30                 IN       SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1339       ,p_apply_progress_flag         IN       VARCHAR2                        DEFAULT 'N' /* Bug# 3720357 */
1340       ,p_scheduled_delay             IN       SYSTEM.pa_num_tbl_type          DEFAULT SYSTEM.PA_NUM_TBL_TYPE() --For bug 3948128
1341       ,p_pji_rollup_required         IN       VARCHAR2                                           DEFAULT 'Y' /* Bug# 4200168 */
1342       ,x_return_status               OUT      NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1343       ,x_msg_count                   OUT      NOCOPY NUMBER --File.Sql.39 bug 4440895
1344       ,x_msg_data                    OUT      NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1345 ) IS
1346 
1347    l_trace_stage number;
1348 
1349   --Start of variables used for debugging
1350       l_msg_count          NUMBER :=0;
1351       l_data               VARCHAR2(2000);
1352       l_msg_data           VARCHAR2(2000);
1353       l_error_msg_code     VARCHAR2(30);
1354       l_msg_index_out      NUMBER;
1355       l_return_status      VARCHAR2(2000);
1356       l_debug_mode         VARCHAR2(30);
1357   --End of variables used for debugging
1358 
1359       l_budget_version_id               pa_budget_versions.budget_version_id%TYPE;
1360       l_proj_fp_options_id              pa_proj_fp_options.proj_fp_options_id%TYPE;
1361       l_fin_plan_type_id                pa_fin_plan_types_b.fin_plan_type_id%TYPE;
1362       l_rlm_id_tbl_count                NUMBER := 0;
1363       l_elem_version_id_count           NUMBER := 0;
1364       l_resource_list_id                pa_proj_fp_options.all_resource_list_id%TYPE;
1365       l_people_res_class_rlm_id         pa_resource_list_members.resource_list_member_id%TYPE;
1366       l_equip_res_class_rlm_id          pa_resource_list_members.resource_list_member_id%TYPE; -- Bug 3749516 dummy Variable
1367       l_fin_res_class_rlm_id            pa_resource_list_members.resource_list_member_id%TYPE;
1368       l_mat_res_class_rlm_id            pa_resource_list_members.resource_list_member_id%TYPE;
1369       l_eligible_rlm_ids_tbl            SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1370       l_proj_element_id_tbl             SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1371       l_proj_element_id                 pa_proj_element_versions.proj_element_id%TYPE;
1372       l_fixed_date_sp_id                pa_spread_curves_b.spread_curve_id%TYPE; -- bug 3607061
1373 
1374    -- Added for Bug 3719918 -- USED FOR INSERT WHEN p-one-t-one-mapping-flag is Y
1375       l_task_elem_rlm_tbl               SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1376       l_proj_elem_rlm_tbl               SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1377 
1378    -- Bug 3719918, these tables will only be used for insert in B/F context
1379       l_bf_start_date_tbl                 SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1380       l_bf_compl_date_tbl                 SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1381       l_bf_proj_elem_tbl                  SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1382       l_bf_quantity_tbl                   SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1383       l_bf_raw_cost_tbl                   SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1384       l_bf_burdened_cost_tbl              SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1385       l_bf_revenue_tbl                    SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1386       l_bf_currency_code_tbl              SYSTEM.PA_VARCHAR2_15_TBL_TYPE    := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1387       l_bf_cost_rate_tbl                  SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1388       l_bf_bill_rate_tbl                  SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1389       l_bf_burdened_rate_tbl              SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1390       l_dup_flag                          varchar2(1) :='N';
1391       --Bug 4207150. These pl/sql tbls will be used to store the task/rlms that are inserted in B/F Flow
1392       l_bf_ra_id_tbl                      SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1393       l_bf_task_id_tbl                    SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1394       l_bf_rlm_id_tbl                     SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1395       l_bf_ins_quantity_tbl               SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1396       l_bf_ins_raw_cost_tbl               SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1397       l_bf_ins_burdened_cost_tbl          SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1398       l_bf_ins_revenue_tbl                SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1399       l_bf_ins_currency_code_tbl          SYSTEM.PA_VARCHAR2_15_TBL_TYPE    := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1400       l_bf_ins_cost_rate_tbl              SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1401       l_bf_ins_bill_rate_tbl              SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1402       l_bf_ins_burdened_rate_tbl          SYSTEM.pa_num_tbl_type            := SYSTEM.pa_num_tbl_type();
1403       l_temp                              NUMBER;
1404 	  l_job_id_temp                       NUMBER;  --bug#13566990
1405       dml_errors                          EXCEPTION;
1406       PRAGMA exception_init(dml_errors, -24381);
1407 
1408   --Start of variables for Variable for Resource Attributes
1409       l_resource_class_flag_tbl         SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1410       l_resource_class_code_tbl         SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1411       l_resource_class_id_tbl           SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1412       l_res_type_code_tbl               SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1413       l_person_id_tbl                   SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1414       l_job_id_tbl                      SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1415       l_person_type_code_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1416       l_named_role_tbl                  SYSTEM.PA_VARCHAR2_80_TBL_TYPE    := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
1417       l_bom_resource_id_tbl             SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1418       l_non_labor_resource_tbl          SYSTEM.PA_VARCHAR2_20_TBL_TYPE    := SYSTEM.PA_VARCHAR2_20_TBL_TYPE();
1419       l_inventory_item_id_tbl           SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1420       l_item_category_id_tbl            SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1421       l_project_role_id_tbl             SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1422       l_organization_id_tbl             SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1423       l_fc_res_type_code_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1424       l_direct_expenditure_type_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(); --EnC
1425       l_expenditure_category_tbl        SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1426       l_event_type_tbl                  SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1427       l_revenue_category_code_tbl       SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1428       l_supplier_id_tbl                 SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1429       l_unit_of_measure_tbl             SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1430       l_spread_curve_id_tbl             SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1431       l_etc_method_code_tbl             SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1432       l_mfc_cost_type_id_tbl            SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1433       l_procure_resource_flag_tbl       SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1434       l_incurred_by_res_flag_tbl        SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1435       l_Incur_by_res_class_code_tbl     SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1436       l_Incur_by_role_id_tbl            SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1437       l_org_id_tbl                      SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1438       l_rate_based_flag_tbl             SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1439       l_rate_expenditure_type_tbl       SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1440       l_rate_func_curr_code_tbl         SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1441       l_incur_by_res_type               SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1442       l_resource_assignment_id_tbl      SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1443       l_assignment_description_tbl      SYSTEM.PA_VARCHAR2_240_TBL_TYPE   := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
1444       l_planning_resource_alias_tbl     SYSTEM.PA_VARCHAR2_80_TBL_TYPE    := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
1445       l_resource_name_tbl               SYSTEM.PA_VARCHAR2_240_TBL_TYPE    := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
1446       l_project_role_name_tbl           SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1447       l_organization_name_tbl           SYSTEM.PA_VARCHAR2_240_TBL_TYPE   := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
1448       l_financial_category_code_tbl     SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1449       l_project_assignment_id_tbl       SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1450       l_use_task_schedule_flag_tbl      SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1451       l_planning_start_date_tbl         SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1452       l_planning_end_date_tbl           SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1453       l_schedule_start_date_tbl         SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1454       l_schedule_end_date_tbl           SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1455       l_total_quantity_tbl              SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1456       l_override_currency_code_tbl      SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1457       l_billable_percent_tbl            SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1458       l_cost_rate_override_tbl          SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1459       l_burdened_rate_override_tbl      SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1460       l_unplanned_flag_tbl              SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1461       l_sp_fixed_date_tbl               SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1462       l_financial_category_name_tbl     SYSTEM.PA_VARCHAR2_80_TBL_TYPE    := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
1463       l_supplier_name_tbl               SYSTEM.PA_VARCHAR2_240_TBL_TYPE   := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
1464       l_pm_product_code_tbl             SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1465       l_pm_res_asgmt_ref_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1466       l_ATTRIBUTE_CATEGORY_tbl          SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1467       l_ATTRIBUTE1_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1468       l_ATTRIBUTE2_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1469       l_ATTRIBUTE3_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1470       l_ATTRIBUTE4_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1471       l_ATTRIBUTE5_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1472       l_ATTRIBUTE6_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1473       l_ATTRIBUTE7_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1474       l_ATTRIBUTE8_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1475       l_ATTRIBUTE9_tbl                  SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1476       l_ATTRIBUTE10_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1477       l_ATTRIBUTE11_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1478       l_ATTRIBUTE12_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1479       l_ATTRIBUTE13_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1480       l_ATTRIBUTE14_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1481       l_ATTRIBUTE15_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1482       l_ATTRIBUTE16_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1483       l_ATTRIBUTE17_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1484       l_ATTRIBUTE18_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1485       l_ATTRIBUTE19_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1486       l_ATTRIBUTE20_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1487       l_ATTRIBUTE21_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1488       l_ATTRIBUTE22_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1489       l_ATTRIBUTE23_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1490       l_ATTRIBUTE24_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1491       l_ATTRIBUTE25_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1492       l_ATTRIBUTE26_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1493       l_ATTRIBUTE27_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1494       l_ATTRIBUTE28_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1495       l_ATTRIBUTE29_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1496       l_ATTRIBUTE30_tbl                 SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1497       --For bug 3948128
1498       l_scheduled_delay                 SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1499   --End of variables for Variable for Resource Attributes
1500 
1501   --Start of variables for Variable for TA Validations for p_context = TASK_ASSIGNMENTS
1502      l_task_rec_tbl                    pa_task_assignment_utils.l_task_rec_tbl_type;
1503      l_resource_rec_tbl                pa_task_assignment_utils.l_resource_rec_tbl_type;
1504      l_del_task_level_rec_code_tbl     SYSTEM.PA_VARCHAR2_30_TBL_TYPE     := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1505      l_ra_id_del_tbl                   SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
1506      l_ra_id_del_count                 NUMBER;
1507   --End of variables for Variable for TA Validations for p_context = TASK_ASSIGNMENTS
1508 
1509      l_time_phased_code                pa_proj_fp_options.all_time_phased_code%TYPE;
1510      l_spread_amounts_for_ver          VARCHAR2(1);
1511      l_index                           NUMBER := 1;
1512      l_spread_amount_flags_tbl         SYSTEM.PA_VARCHAR2_1_TBL_TYPE      := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1513      l_delete_budget_lines_tbl         SYSTEM.PA_VARCHAR2_1_TBL_TYPE      := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1514      l_res_assignment_id_tbl           SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
1515      -- IPM Tables
1516      l_orig_count                      NUMBER; -- bug 5003827 issue 22
1517 --     l_count_index                     NUMBER;
1518      l_ra_id_temp_tbl                  SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
1519      l_curr_code_temp_tbl              SYSTEM.PA_VARCHAR2_15_TBL_TYPE:= SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1520      --
1521      l_res_assignment_id_temp_tbl      SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
1522      l_res_assignment_id               pa_resource_assignments.resource_assignment_id%TYPE;
1523      l_call_calc_api                   VARCHAR2(1);
1524 
1525   -- Start of variable to be used in Calculate API Call
1526      l_line_start_date_tbl             SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1527      l_line_end_date_tbl               SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1528 
1529      l_currency_code_tbl               SYSTEM.PA_VARCHAR2_15_TBL_TYPE:= SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1530      l_quantity_tbl                    SYSTEM.PA_NUM_TBL_TYPE        := SYSTEM.PA_NUM_TBL_TYPE();
1531      l_raw_cost_tbl                    SYSTEM.PA_NUM_TBL_TYPE        := SYSTEM.PA_NUM_TBL_TYPE();
1532      l_burdened_cost_tbl               SYSTEM.PA_NUM_TBL_TYPE        := SYSTEM.PA_NUM_TBL_TYPE();
1533      l_revenue_tbl                     SYSTEM.PA_NUM_TBL_TYPE        := SYSTEM.PA_NUM_TBL_TYPE();
1534      l_cost_rate_tbl                   SYSTEM.PA_NUM_TBL_TYPE        := SYSTEM.PA_NUM_TBL_TYPE();
1535      l_burden_multiplier_tbl           SYSTEM.PA_NUM_TBL_TYPE        := SYSTEM.PA_NUM_TBL_TYPE();
1536      l_bill_rate_tbl                   SYSTEM.PA_NUM_TBL_TYPE        := SYSTEM.PA_NUM_TBL_TYPE();
1537      l_expenditure_type_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE:= SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1538      l_txn_src_typ_code_rbs_prm_tbl    SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
1539      l_txn_source_id_tbl               SYSTEM.pa_num_tbl_type        := SYSTEM.pa_num_tbl_type();
1540      l_res_list_member_id_tbl          SYSTEM.pa_num_tbl_type        := SYSTEM.pa_num_tbl_type();
1541      l_rbs_element_id_tbl              SYSTEM.pa_num_tbl_type        := SYSTEM.pa_num_tbl_type();
1542      l_txn_accum_header_id_tbl         SYSTEM.pa_num_tbl_type        := SYSTEM.pa_num_tbl_type();
1543 
1544   -- End of variable to be used in Calculate API Call
1545 
1546   -- Bug 3749516 Added for insert in Workplan Context
1547      l_ins_proj_element_id_tbl          SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1548      l_ins_task_elem_version_id_tbl     SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1549      l_ins_cbs_element_id_tbl           SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE(); -- satya
1550      l_ins_start_date_tbl               SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1551      l_ins_end_date_tbl                 SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
1552      l_ins_cal_people_effort_tbl        SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1553      l_ins_cal_burdened_cost_tbl        SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1554      l_ins_cal_raw_cost_tbl             SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
1555      l_ins_index                        NUMBER := 1;
1556 
1557      l_start_date                      pa_resource_assignments.planning_start_date%TYPE    := NULL;
1558      l_compl_date                      pa_resource_assignments.planning_start_date%TYPE    := NULL;
1559      l_start_date_tbl                  SYSTEM.PA_DATE_TBL_TYPE                             := SYSTEM.PA_DATE_TBL_TYPE();
1560      l_compl_date_tbl                  SYSTEM.PA_DATE_TBL_TYPE                             := SYSTEM.PA_DATE_TBL_TYPE();
1561 
1562      l_rlm_id_no_of_rows               NUMBER;
1563      l_elem_ver_id_no_of_rows          NUMBER;
1564      l_ppl_index                       NUMBER;
1565      l_amount_exists                   VARCHAR2(1);
1566      l_rbs_version_id                  pa_proj_fp_options.rbs_version_id%TYPE;
1567 
1568      l_proj_curr_code                  pa_projects_all.project_currency_code%TYPE;
1569      l_proj_func_curr_code             pa_projects_all.projfunc_currency_code%TYPE;
1570 
1571    -- Bug 3836358 -- ADDED for usage when p_skip_duplicates_flag is passed as Y
1572      l_task_id_temp                    PA_RESOURCE_ASSIGNMENTS.TASK_ID%TYPE;
1573      l_pji_rollup_required            VARCHAR2(1);
1574 
1575      l_fp_cols_rec   pa_fp_gen_amount_utils.fp_cols; -- IPM
1576      l_rm_temp_count number;
1577 
1578      -- Bug 8370812
1579      l_ra_id_rollup_tbl                SYSTEM.PA_NUM_TBL_TYPE             := SYSTEM.PA_NUM_TBL_TYPE();
1580      l_curr_code_rollup_tbl            SYSTEM.PA_VARCHAR2_15_TBL_TYPE     := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1581      l_rollup_index                    NUMBER;
1582      l_add_flag                        BOOLEAN;
1583      --CBS related Chnages
1584      l_res_class_flag                  pa_resource_lists_all_bg.resource_class_flag%TYPE := 'Y';
1585 
1586     CURSOR get_pc_code IS
1587     SELECT project_currency_code, projfunc_currency_code
1588     FROM   pa_projects_all
1589     WHERE  project_id = p_project_id;
1590 
1591 --------------------------------------------------------------------------
1592 -- This cursor is to be used to retrieve the proj_element_id based on the
1593 -- element_version_id.
1594 -- This might be removed.
1595 --------------------------------------------------------------------------
1596     CURSOR  c_proj_element_id(c_elem_version_id pa_proj_element_versions.element_version_id%TYPE) IS
1597     SELECT  proj_element_id
1598       FROM  pa_proj_element_versions
1599      WHERE  element_version_id = c_elem_version_id;
1600 
1601       -- gboomina added for bug 8586393 - start
1602     --Mcloseout
1603        -- rbruno bug 9468665 modified FROM clause so that correct workplan information is taken.
1604     CURSOR c2(p_project_id IN NUMBER) IS
1605     SELECT use_task_schedule_flag
1606     FROM  pa_workplan_options_v
1607     WHERE project_id = p_project_id;
1608 
1609     l_use_task_schedule_flag      VARCHAR2(1);
1610     -- gboomina added for bug 8586393 - end
1611 
1612 -- bug#16200605
1613 	CURSOR check_cost_code_enabled(c_project_id NUMBER) IS
1614 	select 'Y' from dual where
1615 	EXISTS
1616 	(SELECT *
1617 	 FROM pa_projects_all
1618 	 WHERE project_id = c_project_id
1619 	 AND CBS_VERSION_ID IS NOT NULL
1620 	 AND CBS_ENABLE_FLAG = 'Y');
1621 
1622 -- bug#16200605
1623 	CURSOR check_cbs_alt_tsk_gen(c_proj_elem_id NUMBER, c_cbs_element_id NUMBER) IS
1624 	select 'Y' from dual where
1625 	EXISTS
1626 	(select * from PA_ALTERNATE_TASKS
1627 	where proj_element_id =c_proj_elem_id
1628 	and cbs_element_id = c_cbs_element_id);
1629 
1630 	l_prj_cbs_enabled		VARCHAR2(1) := 'N';  --bug#16200605
1631 	L_CBS_FLAG_TEMP VARCHAR2(1) := 'N';	--bug#16200605
1632 	L_ALT_TSK_TEMP VARCHAR2(1) := 'N';	--bug#16200605
1633 	l_alt_tsk_valid	VARCHAR2(1) := 'N';  --bug#16200605
1634 	l_cbs_id_rlm_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();--bug#16200605
1635 
1636 
1637 BEGIN
1638     l_trace_stage := 10;
1639 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
1640 
1641     SAVEPOINT ADD_PLANNING_TRANS_SP;
1642     l_direct_expenditure_type_tbl :=p_expenditure_type_tbl;
1643     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1644     l_debug_mode := NVL(l_debug_mode, 'Y');
1645 
1646     IF p_pji_rollup_required = 'Y' THEN
1647         l_pji_rollup_required := 'Y';
1648     ELSE
1649         l_pji_rollup_required := 'N';
1650     END IF;
1651 
1652     pa_task_assignment_utils.g_require_progress_rollup := 'N';
1653 
1654 
1655 
1656     x_msg_count := 0;
1657     x_return_status := FND_API.G_RET_STS_SUCCESS;
1658 IF l_debug_mode = 'Y' THEN
1659     PA_DEBUG.Set_Curr_Function( p_function   => 'PA_FP_PLAN_TXN_PUB.add_planning_transactions',
1660                                 p_debug_mode => l_debug_mode );
1661 END IF;
1662 
1663     --p_context should never be null
1664     IF p_context IS NULL OR
1665        p_context NOT IN ( PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST
1666                          ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
1667                          ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
1668                          ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET ) THEN
1669 
1670         IF l_debug_mode = 'Y' THEN
1671             pa_debug.g_err_stage:='p_context passed is '||p_context;
1672             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1673         END IF;
1674         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1675                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
1676         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1677 
1678     END IF;
1679 
1680     -- Added for Bug 3719918 -- ONE-TO-ONE MAPPING BETWEEN ELEM_VER-RLM IDS PASSED
1681     -- Validation for p_one_to_one_mapping_flag passed as Y only for Budget/Forecast context
1682     -- Modified Validation Below for Only WORKPLAN Context - Changes for Bug 3665097
1683     IF (p_one_to_one_mapping_flag = 'Y'
1684         AND p_context  = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) THEN
1685         IF l_debug_mode = 'Y' THEN
1686             pa_debug.g_err_stage:='p_one_to_one_mapping_flag passed as Y for WORKPLAN context :'||p_context;
1687             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1688         END IF;
1689         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1690                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
1691         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1692     END IF;
1693 
1694 
1695     -- Added for Bug 3719918 and Bug 3665097
1696     -- Validation that when p_one_to_one_mapping_flag is passed as Y p_task_elem_version_id_tbl
1697     -- and p_resource_list_member_id_tbl should have same table count.
1698     IF (p_one_to_one_mapping_flag = 'Y' AND
1699         p_task_elem_version_id_tbl.COUNT <> p_resource_list_member_id_tbl.COUNT) THEN
1700 
1701         IF l_debug_mode = 'Y' THEN
1702             pa_debug.g_err_stage:='Table Count Mismatch for p_one_to_one_mapping_flag Y in : '||p_context;
1703             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1704         END IF;
1705         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1706                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
1707         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1708 
1709     END IF;
1710 
1711 
1712     -- Bug 3793623 Planning Start Date and Planning End Date can only be passed when
1713     -- p_one_to_one_mapping_flag IS Y
1714     IF (p_one_to_one_mapping_flag = 'N' AND
1715         (p_planning_start_date_tbl.COUNT <> 0 OR p_planning_end_date_tbl.COUNT <> 0)) THEN
1716 
1717         IF l_debug_mode = 'Y' THEN
1718             pa_debug.g_err_stage:='Planning Date Passed when one to one mapping is N';
1719             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1720         END IF;
1721         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1722                              p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1723                              p_token1         => 'PROCEDURENAME',
1724                              p_value1         => 'PAFPPTPB.add_planning_transactions',
1725                              p_token2         => 'STAGE',
1726                              p_value2         => 'Planning Date Passed when one to one mapping is N');
1727         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1728 
1729     END IF;
1730 
1731     -- Bug 3793623 Planning Start Date and Planning End Date Should have the same
1732     -- number of records
1733     IF (p_planning_start_date_tbl.COUNT <> p_planning_end_date_tbl.COUNT) THEN
1734         IF l_debug_mode = 'Y' THEN
1735             pa_debug.g_err_stage:='Planning Start Date - End Date MISMATCH p_context :'||p_context;
1736             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1737         END IF;
1738         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1739                              p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1740                              p_token1         => 'PROCEDURENAME',
1741                              p_value1         => 'PAFPPTPB.add_planning_transactions',
1742                              p_token2         => 'STAGE',
1743                              p_value2         => 'Planning Start Date - End Date MISMATCH');
1744         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1745     END IF;
1746 
1747     -- Bug 3793623 If Planning Start/End Date is passed its should be same as
1748     -- task_elem_version_id COUNT
1749     IF (p_planning_start_date_tbl.COUNT >0) THEN
1750         IF (p_planning_start_date_tbl.COUNT <> p_task_elem_version_id_tbl.COUNT) THEN
1751             IF l_debug_mode = 'Y' THEN
1752                 pa_debug.g_err_stage:='Planning Start Date - Task Elem Mismatch :'||p_context;
1753                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1754             END IF;
1755             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1756                                  p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1757                                  p_token1         => 'PROCEDURENAME',
1758                                  p_value1         => 'PAFPPTPB.add_planning_transactions',
1759                                  p_token2         => 'STAGE',
1760                                  p_value2         => 'Planning Start Date - Task Elem Mismatch');
1761             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1762         END IF;
1763     END IF;
1764 
1765 	/* bug#16200605 CBS enhancement
1766   *  checking whether the project is cbs enabled
1767   */
1768   -- start of cbs enabled validation
1769   OPEN check_cost_code_enabled(p_project_id);
1770   FETCH check_cost_code_enabled INTO L_CBS_FLAG_TEMP;
1771   CLOSE check_cost_code_enabled;
1772 		IF L_CBS_FLAG_TEMP = 'Y' THEN
1773 		 l_prj_cbs_enabled := 'Y'; -- CBS enabled
1774 		ELSE
1775 		 l_prj_cbs_enabled := 'N'; -- CBS disabled
1776 		END IF;
1777 
1778    -- bug#16840460
1779 	IF l_prj_cbs_enabled = 'Y' and p_cbs_element_id_tbl.count<1 THEN
1780 	RETURN;
1781 	END IF;
1782 
1783 
1784     -- Added for Bug 3719918 -- when p one to one mapping flag is N
1785     -- duplicate rlm/elem_ver ids cannot be passed
1786     IF p_one_to_one_mapping_flag = 'N' THEN
1787        IF p_skip_duplicates_flag = 'N' THEN
1788           IF l_debug_mode = 'Y' THEN
1789              pa_debug.g_err_stage:='Checking for duplicate rlm ids passed';
1790              pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1791           END IF;
1792           IF p_resource_list_member_id_tbl.COUNT > 0 THEN
1793              FOR i IN p_resource_list_member_id_tbl.FIRST .. (p_resource_list_member_id_tbl.LAST-1) LOOP
1794                  FOR j in (i+1) .. p_resource_list_member_id_tbl.LAST LOOP
1795                      IF p_resource_list_member_id_tbl(j) = p_resource_list_member_id_tbl(i) THEN
1796 						IF (l_prj_cbs_enabled = 'N' OR p_cbs_element_id_tbl.count <1)  THEN
1797 							IF l_debug_mode = 'Y' THEN
1798 								pa_debug.g_err_stage:='Dup RLM ID Passed';
1799 								pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1800 							END IF;
1801 							PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1802 												 p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1803 												 p_token1         => 'PROCEDURENAME',
1804 												 p_value1         => 'PAFPPTPB.add_planning_transactions',
1805 												 p_token2         => 'STAGE',
1806 												 p_value2         => 'Duplicate RLM Id Passed');
1807 							RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1808 						ELSE
1809 							IF p_cbs_element_id_tbl(j) = p_cbs_element_id_tbl(i) THEN
1810 								IF l_debug_mode = 'Y' THEN
1811 								pa_debug.g_err_stage:='Dup RLM ID Passed';
1812 								pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1813 								END IF;
1814 								PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1815 													 p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1816 													 p_token1         => 'PROCEDURENAME',
1817 													 p_value1         => 'PAFPPTPB.add_planning_transactions',
1818 													 p_token2         => 'STAGE',
1819 													 p_value2         => 'Duplicate Cost Code Passed');
1820 								RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1821 							END IF;
1822 						END IF;
1823                      END IF;
1824                  END LOOP;
1825              END LOOP;
1826           END IF;
1827           IF l_debug_mode = 'Y' THEN
1828              pa_debug.g_err_stage:='Checking for duplicate elem ver ids passed';
1829              pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1830           END IF;
1831           IF p_task_elem_version_id_tbl.COUNT > 0 THEN
1832              FOR i IN p_task_elem_version_id_tbl.FIRST .. (p_task_elem_version_id_tbl.LAST-1) LOOP
1833                  FOR j in (i+1) .. p_task_elem_version_id_tbl.LAST LOOP
1834                      IF p_task_elem_version_id_tbl(j) = p_task_elem_version_id_tbl(i) THEN
1835                         IF l_debug_mode = 'Y' THEN
1836                             pa_debug.g_err_stage:='Dup ELEM VER ID Passed';
1837                             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1838                         END IF;
1839                         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1840                                              p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1841                                              p_token1         => 'PROCEDURENAME',
1842                                              p_value1         => 'PAFPPTPB.add_planning_transactions',
1843                                              p_token2         => 'STAGE',
1844                                              p_value2         => 'Duplicate Task Elem Version Id Passed');
1845                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1846                      END IF;
1847                  END LOOP;
1848              END LOOP;
1849           END IF;
1850        END IF; -- p_skip_duplicate_flag = N
1851     ELSE
1852     -- when p one to one mapping flag is Y
1853     -- FOR B/F Context dup rlm/task elem combination cannot be passed until
1854     -- and unless the currecy code is diff
1855     -- for TA WOKRPLAN dup rlm/task elem combination cannot be passed
1856         IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET) OR
1857             (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
1858             IF p_task_elem_version_id_tbl.COUNT > 1 THEN
1859                FOR i IN p_task_elem_version_id_tbl.FIRST .. (p_task_elem_version_id_tbl.LAST-1) LOOP
1860                    FOR j in (i+1) .. p_task_elem_version_id_tbl.LAST LOOP
1861                        IF ( (p_task_elem_version_id_tbl(i) = p_task_elem_version_id_tbl(j)) AND
1862                             (p_resource_list_member_id_tbl(i) = p_resource_list_member_id_tbl(j))) THEN --AND changed for CBS
1863                             --(p_currency_code_tbl(i) = p_currency_code_tbl(j))) THEN
1864 							 IF p_currency_code_tbl.COUNT > 0 THEN
1865 							   IF p_currency_code_tbl(i) = p_currency_code_tbl(j) THEN
1866 								IF (l_prj_cbs_enabled = 'N' OR p_cbs_element_id_tbl.count <1) THEN
1867 									IF l_debug_mode = 'Y' THEN
1868 										pa_debug.g_err_stage:='Dup Rec passed - Curr Code (B/F) - will error out in Ins Stat';
1869 										pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1870 									END IF;
1871 									PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1872 														 p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1873 														 p_token1         => 'PROCEDURENAME',
1874 														 p_value1         => 'PAFPPTPB.add_planning_transactions',
1875 														 p_token2         => 'STAGE',
1876 														 p_value2         => 'Duplicate CurrCode/RlmId/TaskId Passed');
1877 									RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1878 								ELSE
1879 									IF p_cbs_element_id_tbl(j) = p_cbs_element_id_tbl(i) THEN
1880 										IF l_debug_mode = 'Y' THEN
1881 										pa_debug.g_err_stage:='Dup Rec passed - Curr Code (B/F) - will error out in Ins Stat';
1882 										pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1883 										END IF;
1884 										PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1885 															 p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1886 															 p_token1         => 'PROCEDURENAME',
1887 															 p_value1         => 'PAFPPTPB.add_planning_transactions',
1888 															 p_token2         => 'STAGE',
1889 															 p_value2         => 'Duplicate CurrCode/RlmId/TaskId/CostCode Passed');
1890 										RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1891 									END IF;
1892 								END IF;
1893 							  END IF;
1894 							ELSE
1895 								IF (l_prj_cbs_enabled = 'N' OR p_cbs_element_id_tbl.count <1) THEN
1896 									IF l_debug_mode = 'Y' THEN
1897 										pa_debug.g_err_stage:='Dup Rec passed - Curr Code (B/F) - will error out in Ins Stat';
1898 										pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1899 									END IF;
1900 									PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1901 														 p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1902 														 p_token1         => 'PROCEDURENAME',
1903 														 p_value1         => 'PAFPPTPB.add_planning_transactions',
1904 														 p_token2         => 'STAGE',
1905 														 p_value2         => 'Duplicate CurrCode/RlmId/TaskId Passed');
1906 									RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1907 								ELSE
1908 									IF p_cbs_element_id_tbl(j) = p_cbs_element_id_tbl(i) THEN
1909 										IF l_debug_mode = 'Y' THEN
1910 										pa_debug.g_err_stage:='Dup Rec passed - Curr Code (B/F) - will error out in Ins Stat';
1911 										pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1912 										END IF;
1913 										PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1914 															 p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1915 															 p_token1         => 'PROCEDURENAME',
1916 															 p_value1         => 'PAFPPTPB.add_planning_transactions',
1917 															 p_token2         => 'STAGE',
1918 															 p_value2         => 'Duplicate CurrCode/RlmId/TaskId/CostCode Passed');
1919 										RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1920 									END IF;
1921 								END IF;
1922 							END IF;
1923 
1924 
1925                        END IF;
1926                    END LOOP;
1927                END LOOP;
1928             END IF;
1929         ELSE -- for TA/WOKRPLAN check for currency code is not there planning elements cannot be added using
1930              -- different currencies for Ta/Workplan FLow
1931             IF p_task_elem_version_id_tbl.COUNT > 1 THEN
1932                FOR i IN p_task_elem_version_id_tbl.FIRST .. (p_task_elem_version_id_tbl.LAST-1) LOOP
1933                    FOR j in (i+1) .. p_task_elem_version_id_tbl.LAST LOOP
1934                        IF ( (p_task_elem_version_id_tbl(i) = p_task_elem_version_id_tbl(j)) AND
1935                             (p_resource_list_member_id_tbl(i) = p_resource_list_member_id_tbl(j))) THEN
1936 							IF (l_prj_cbs_enabled = 'N' OR p_cbs_element_id_tbl.count <1) THEN
1937 								IF l_debug_mode = 'Y' THEN
1938 									pa_debug.g_err_stage:='Dup Rec passed - will error out in Ins Stat p_context :'||p_context;
1939 									pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1940 								END IF;
1941 								PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1942 													 p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1943 													 p_token1         => 'PROCEDURENAME',
1944 													 p_value1         => 'PAFPPTPB.add_planning_transactions',
1945 													 p_token2         => 'STAGE',
1946 													 p_value2         => 'Duplicate RlmId/TaskId Passed');
1947 								RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1948 							ELSE
1949 								IF p_cbs_element_id_tbl(j) = p_cbs_element_id_tbl(i) THEN
1950 									IF l_debug_mode = 'Y' THEN
1951 									pa_debug.g_err_stage:='Dup Rec passed - will error out in Ins Stat p_context :'||p_context;
1952 									pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1953 									END IF;
1954 									PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1955 														 p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
1956 														 p_token1         => 'PROCEDURENAME',
1957 														 p_value1         => 'PAFPPTPB.add_planning_transactions',
1958 														 p_token2         => 'STAGE',
1959 														 p_value2         => 'Duplicate RlmId/TaskId/CostCode Passed');
1960 									RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1961 								END IF;
1962 							END IF;
1963                        END IF;
1964                    END LOOP;
1965                END LOOP;
1966             END IF;
1967         END IF;
1968     END IF;
1969 
1970 
1971     IF l_debug_mode = 'Y' THEN
1972         IF p_task_elem_version_id_tbl.COUNT > 0 THEN
1973            FOR i in p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
1974                 pa_debug.g_err_stage:='p_task_elem_version_id_tbl :'||p_task_elem_version_id_tbl(i);
1975                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1976            END LOOP;
1977         END IF;
1978 
1979         IF p_resource_list_member_id_tbl.COUNT > 0 THEN
1980            FOR i in p_resource_list_member_id_tbl.FIRST .. p_resource_list_member_id_tbl.LAST LOOP
1981                 pa_debug.g_err_stage:='p_resource_list_member_id_tbl :'||p_resource_list_member_id_tbl(i);
1982                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1983            END LOOP;
1984         END IF;
1985 
1986         IF p_currency_code_tbl.COUNT > 0 THEN
1987            FOR i in p_currency_code_tbl.FIRST .. p_currency_code_tbl.LAST LOOP
1988                 pa_debug.g_err_stage:='p_currency_code_tbl :'||p_currency_code_tbl(i);
1989                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1990            END LOOP;
1991         END IF;
1992     END IF;
1993 
1994    -------------------------------------------------------------------------------------------
1995    -- Extending all table lengths to the permissible values they would take.
1996    -------------------------------------------------------------------------------------------
1997 
1998      IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
1999         -- Bug 3749516 only for PEOPLE
2000         l_rlm_id_no_of_rows       := 1;
2001      ELSE
2002         l_rlm_id_no_of_rows       := p_resource_list_member_id_tbl.LAST;
2003      END IF;
2004      l_elem_ver_id_no_of_rows  := p_task_elem_version_id_tbl.LAST;
2005 
2006     l_trace_stage := 20;
2007 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2008 
2009      IF l_debug_mode = 'Y' THEN
2010          pa_debug.g_err_stage:='Extending all table lengths to the permissible values they would take - p_context = '||p_context;
2011          pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2012      END IF;
2013 
2014     l_task_elem_rlm_tbl.extend(l_rlm_id_no_of_rows);
2015     l_proj_elem_rlm_tbl.extend(l_rlm_id_no_of_rows);
2016 
2017 	l_cbs_id_rlm_tbl.extend(l_rlm_id_no_of_rows); --Bug#16200605
2018 
2019     -- Bug 3719918 -- For Insert in BF Context.
2020     l_bf_start_date_tbl.extend(l_rlm_id_no_of_rows);
2021     l_bf_compl_date_tbl.extend(l_rlm_id_no_of_rows);
2022     l_bf_proj_elem_tbl.extend(l_rlm_id_no_of_rows);
2023     l_bf_quantity_tbl.extend((l_rlm_id_no_of_rows));
2024     l_bf_raw_cost_tbl.extend((l_rlm_id_no_of_rows));
2025     l_bf_burdened_cost_tbl.extend((l_rlm_id_no_of_rows));
2026     l_bf_revenue_tbl.extend((l_rlm_id_no_of_rows));
2027     l_bf_currency_code_tbl.extend((l_rlm_id_no_of_rows));
2028     l_bf_cost_rate_tbl.extend((l_rlm_id_no_of_rows));
2029     l_bf_bill_rate_tbl.extend((l_rlm_id_no_of_rows));
2030     l_bf_burdened_rate_tbl.extend((l_rlm_id_no_of_rows));
2031 
2032     -- End for Bug 3719918
2033 
2034     l_resource_class_flag_tbl.extend(l_rlm_id_no_of_rows);
2035     l_resource_class_code_tbl.extend(l_rlm_id_no_of_rows);
2036     l_resource_class_id_tbl.extend(l_rlm_id_no_of_rows);
2037     l_res_type_code_tbl.extend(l_rlm_id_no_of_rows);
2038     l_person_id_tbl.extend(l_rlm_id_no_of_rows);
2039     l_job_id_tbl.extend(l_rlm_id_no_of_rows);
2040     l_person_type_code_tbl.extend(l_rlm_id_no_of_rows);
2041     l_named_role_tbl.extend(l_rlm_id_no_of_rows);
2042     l_bom_resource_id_tbl.extend(l_rlm_id_no_of_rows);
2043     l_non_labor_resource_tbl.extend(l_rlm_id_no_of_rows);
2044     l_inventory_item_id_tbl.extend(l_rlm_id_no_of_rows);
2045     l_item_category_id_tbl.extend(l_rlm_id_no_of_rows);
2046     l_project_role_id_tbl.extend(l_rlm_id_no_of_rows);
2047     l_organization_id_tbl.extend(l_rlm_id_no_of_rows);
2048     l_fc_res_type_code_tbl.extend(l_rlm_id_no_of_rows);
2049     l_expenditure_type_tbl.extend(l_rlm_id_no_of_rows);
2050     l_expenditure_category_tbl.extend(l_rlm_id_no_of_rows);
2051     l_event_type_tbl.extend(l_rlm_id_no_of_rows);
2052     l_revenue_category_code_tbl.extend(l_rlm_id_no_of_rows);
2053     l_supplier_id_tbl.extend(l_rlm_id_no_of_rows);
2054     l_unit_of_measure_tbl.extend(l_rlm_id_no_of_rows);
2055     l_spread_curve_id_tbl.extend(l_rlm_id_no_of_rows);
2056     l_etc_method_code_tbl.extend(l_rlm_id_no_of_rows);
2057     l_mfc_cost_type_id_tbl.extend(l_rlm_id_no_of_rows);
2058     l_procure_resource_flag_tbl.extend(l_rlm_id_no_of_rows);
2059     l_incurred_by_res_flag_tbl.extend(l_rlm_id_no_of_rows);
2060     l_Incur_by_res_class_code_tbl.extend(l_rlm_id_no_of_rows);
2061     l_Incur_by_role_id_tbl.extend(l_rlm_id_no_of_rows);
2062     l_eligible_rlm_ids_tbl.extend(l_rlm_id_no_of_rows);
2063     l_txn_src_typ_code_rbs_prm_tbl.extend(l_rlm_id_no_of_rows);
2064     l_org_id_tbl.extend(l_rlm_id_no_of_rows);
2065     l_rate_based_flag_tbl.extend(l_rlm_id_no_of_rows);
2066     l_rate_expenditure_type_tbl.extend(l_rlm_id_no_of_rows);
2067     l_rate_func_curr_code_tbl.extend(l_rlm_id_no_of_rows);
2068     l_resource_assignment_id_tbl.extend(l_rlm_id_no_of_rows);
2069     l_assignment_description_tbl.extend(l_rlm_id_no_of_rows);
2070     l_planning_resource_alias_tbl.extend(l_rlm_id_no_of_rows);
2071     l_resource_name_tbl.extend(l_rlm_id_no_of_rows);
2072     l_project_role_name_tbl.extend(l_rlm_id_no_of_rows);
2073     l_organization_name_tbl.extend(l_rlm_id_no_of_rows);
2074     l_financial_category_code_tbl.extend(l_rlm_id_no_of_rows);
2075     l_project_assignment_id_tbl.extend(l_rlm_id_no_of_rows);
2076     l_use_task_schedule_flag_tbl.extend(l_rlm_id_no_of_rows);
2077     l_planning_start_date_tbl.extend(l_rlm_id_no_of_rows);
2078     l_planning_end_date_tbl.extend(l_rlm_id_no_of_rows);
2079     l_schedule_start_date_tbl.extend(l_rlm_id_no_of_rows);
2080     l_schedule_end_date_tbl.extend(l_rlm_id_no_of_rows);
2081     l_total_quantity_tbl.extend(l_rlm_id_no_of_rows);
2082     l_override_currency_code_tbl.extend(l_rlm_id_no_of_rows);
2083     l_billable_percent_tbl.extend(l_rlm_id_no_of_rows);
2084     l_cost_rate_override_tbl.extend(l_rlm_id_no_of_rows);
2085     l_burdened_rate_override_tbl.extend(l_rlm_id_no_of_rows);
2086     IF p_unplanned_flag_tbl.count = 0 THEN
2087          l_unplanned_flag_tbl.extend(l_rlm_id_no_of_rows);
2088     ELSE
2089          l_unplanned_flag_tbl := p_unplanned_flag_tbl;
2090     END IF;
2091     l_sp_fixed_date_tbl.extend(l_rlm_id_no_of_rows);
2092     l_financial_category_name_tbl.extend(l_rlm_id_no_of_rows);
2093     l_supplier_name_tbl.extend(l_rlm_id_no_of_rows);
2094     l_pm_product_code_tbl.extend(l_rlm_id_no_of_rows);
2095     l_pm_res_asgmt_ref_tbl.extend(l_rlm_id_no_of_rows);
2096     l_ATTRIBUTE_CATEGORY_tbl.extend(l_rlm_id_no_of_rows);
2097     l_ATTRIBUTE1_tbl.extend(l_rlm_id_no_of_rows);
2098     l_ATTRIBUTE2_tbl.extend(l_rlm_id_no_of_rows);
2099     l_ATTRIBUTE3_tbl.extend(l_rlm_id_no_of_rows);
2100     l_ATTRIBUTE4_tbl.extend(l_rlm_id_no_of_rows);
2101     l_ATTRIBUTE5_tbl.extend(l_rlm_id_no_of_rows);
2102     l_ATTRIBUTE6_tbl.extend(l_rlm_id_no_of_rows);
2103     l_ATTRIBUTE7_tbl.extend(l_rlm_id_no_of_rows);
2104     l_ATTRIBUTE8_tbl.extend(l_rlm_id_no_of_rows);
2105     l_ATTRIBUTE9_tbl.extend(l_rlm_id_no_of_rows);
2106     l_ATTRIBUTE10_tbl.extend(l_rlm_id_no_of_rows);
2107     l_ATTRIBUTE11_tbl.extend(l_rlm_id_no_of_rows);
2108     l_ATTRIBUTE12_tbl.extend(l_rlm_id_no_of_rows);
2109     l_ATTRIBUTE13_tbl.extend(l_rlm_id_no_of_rows);
2110     l_ATTRIBUTE14_tbl.extend(l_rlm_id_no_of_rows);
2111     l_ATTRIBUTE15_tbl.extend(l_rlm_id_no_of_rows);
2112     l_ATTRIBUTE16_tbl.extend(l_rlm_id_no_of_rows);
2113     l_ATTRIBUTE17_tbl.extend(l_rlm_id_no_of_rows);
2114     l_ATTRIBUTE18_tbl.extend(l_rlm_id_no_of_rows);
2115     l_ATTRIBUTE19_tbl.extend(l_rlm_id_no_of_rows);
2116     l_ATTRIBUTE20_tbl.extend(l_rlm_id_no_of_rows);
2117     l_ATTRIBUTE21_tbl.extend(l_rlm_id_no_of_rows);
2118     l_ATTRIBUTE22_tbl.extend(l_rlm_id_no_of_rows);
2119     l_ATTRIBUTE23_tbl.extend(l_rlm_id_no_of_rows);
2120     l_ATTRIBUTE24_tbl.extend(l_rlm_id_no_of_rows);
2121     l_ATTRIBUTE25_tbl.extend(l_rlm_id_no_of_rows);
2122     l_ATTRIBUTE26_tbl.extend(l_rlm_id_no_of_rows);
2123     l_ATTRIBUTE27_tbl.extend(l_rlm_id_no_of_rows);
2124     l_ATTRIBUTE28_tbl.extend(l_rlm_id_no_of_rows);
2125     l_ATTRIBUTE29_tbl.extend(l_rlm_id_no_of_rows);
2126     l_ATTRIBUTE30_tbl.extend(l_rlm_id_no_of_rows);
2127     --For bug 3948128
2128     l_scheduled_delay.extend(l_rlm_id_no_of_rows);
2129 
2130     l_del_task_level_rec_code_tbl.extend(l_elem_ver_id_no_of_rows);
2131     l_proj_element_id_tbl.extend(l_elem_ver_id_no_of_rows);
2132     l_start_date_tbl.extend(l_elem_ver_id_no_of_rows);
2133     l_compl_date_tbl.extend(l_elem_ver_id_no_of_rows);
2134 
2135     l_ins_proj_element_id_tbl.extend(l_elem_ver_id_no_of_rows);
2136     l_ins_task_elem_version_id_tbl.extend(l_elem_ver_id_no_of_rows);
2137     l_ins_cbs_element_id_tbl.extend(l_elem_ver_id_no_of_rows); -- satya
2138     l_ins_start_date_tbl.extend(l_elem_ver_id_no_of_rows);
2139     l_ins_end_date_tbl.extend(l_elem_ver_id_no_of_rows);
2140     l_ins_cal_people_effort_tbl.extend(l_elem_ver_id_no_of_rows);
2141     l_ins_cal_burdened_cost_tbl.extend(l_elem_ver_id_no_of_rows);
2142     l_ins_cal_raw_cost_tbl.extend(l_elem_ver_id_no_of_rows);
2143 
2144      -- Bug 8829159 - Fix to reduce PGA memory usage and avoid ORA-4030
2145      IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK) AND (p_one_to_one_mapping_flag = 'Y')) THEN
2146 	 l_ra_id_del_tbl.extend(l_elem_ver_id_no_of_rows);
2147 	 l_spread_amount_flags_tbl.extend(l_elem_ver_id_no_of_rows);
2148 	 l_delete_budget_lines_tbl.extend(l_elem_ver_id_no_of_rows);
2149 	 l_res_assignment_id_tbl.extend(l_elem_ver_id_no_of_rows);
2150 	 l_res_assignment_id_temp_tbl.extend(l_elem_ver_id_no_of_rows);
2151 	 l_currency_code_tbl.extend(l_elem_ver_id_no_of_rows);
2152 	 l_quantity_tbl.extend(l_elem_ver_id_no_of_rows);
2153 	 l_raw_cost_tbl.extend(l_elem_ver_id_no_of_rows);
2154 	 l_burdened_cost_tbl.extend(l_elem_ver_id_no_of_rows);
2155 	 l_revenue_tbl.extend(l_elem_ver_id_no_of_rows);
2156 	 l_cost_rate_tbl.extend(l_elem_ver_id_no_of_rows);
2157 	 l_burden_multiplier_tbl.extend(l_elem_ver_id_no_of_rows);
2158 	 l_bill_rate_tbl.extend(l_elem_ver_id_no_of_rows);
2159 	 l_use_task_schedule_flag_tbl.extend(l_elem_ver_id_no_of_rows); -- Bug  9759832
2160      ELSE
2161 
2162     l_ra_id_del_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2163     l_spread_amount_flags_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2164     l_delete_budget_lines_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2165     l_res_assignment_id_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2166     l_res_assignment_id_temp_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2167     l_currency_code_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2168     l_quantity_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2169     l_raw_cost_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2170     l_burdened_cost_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2171     l_revenue_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2172     l_cost_rate_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2173     l_burden_multiplier_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2174     l_bill_rate_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2175     l_use_task_schedule_flag_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows)); -- Bug  9759832
2176 --    l_expenditure_type_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2177     END IF;
2178     l_trace_stage := 30;
2179 --dbms_output.put_line('done with extending');
2180 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2181 
2182    -------------------------------------------------------------------------------------------
2183    -- validating input parameters
2184    -- 1. , p_task_elem_version_id_tbl table cannot be empty
2185    -------------------------------------------------------------------------------------------
2186 
2187     --If the input tasks table is empty in the context of budget or forecast then return
2188     IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
2189         p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST) THEN
2190         l_elem_version_id_count := p_task_elem_version_id_tbl.COUNT;
2191         l_trace_stage := 140;
2192         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2193 
2194         IF l_debug_mode = 'Y' THEN
2195             pa_debug.g_err_stage:='Validating input parameters - count of  p_task_elem_version_id_tbl = '||l_elem_version_id_count;
2196             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2197         END IF;
2198 
2199         IF l_elem_version_id_count = 0 THEN
2200             l_trace_stage := 150;
2201             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2202             IF l_debug_mode = 'Y' THEN
2203                 pa_debug.g_err_stage:='Validating input parameters - elem_version_id table is empty - p_context = '||p_context;
2204                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2205             --dbms_output.put_line('Tasks tbl is empty for BF -- returning');
2206             pa_debug.reset_curr_function;
2207             END IF;
2208             RETURN;
2209         END IF;
2210     END IF;
2211 
2212 
2213     --In the context of workplan the start date and end date tbl count should always be equal to the input
2214     --task tbl count
2215     IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
2216         IF (p_end_date_tbl.COUNT <> p_start_date_tbl.COUNT) OR
2217            (p_start_date_tbl.COUNT <> p_task_elem_version_id_tbl.COUNT) THEN
2218 
2219             IF l_debug_mode = 'Y' THEN
2220                 pa_debug.g_err_stage:='Invalid pl/sql tables for start and end dates';
2221                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2222             END IF;
2223             --dbms_output.put_line('$$$$%%%');
2224             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2225                                   p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
2226             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2227         END IF;
2228     END IF;
2229 
2230 
2231     -------------------------------------------------------------------------------------------
2232     -- Validation - p_resource_list_member_id_tbl can be empty only for p_context = 'WORKPLAN'
2233     -- Otherwise return NULL
2234     -------------------------------------------------------------------------------------------
2235     IF NOT(p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) THEN
2236         l_rlm_id_tbl_count := p_resource_list_member_id_tbl.COUNT;
2237 
2238         IF l_debug_mode = 'Y' THEN
2239             pa_debug.g_err_stage:='Validating input parameters - count of  p_resource_list_member_id_tbl = '||l_rlm_id_tbl_count;
2240             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2241         END IF;
2242 
2243         IF l_rlm_id_tbl_count = 0 THEN
2244 
2245             IF l_debug_mode = 'Y' THEN
2246                 pa_debug.g_err_stage:='Validating input parameters - Resource List Member Id table is empty - p_context = '||p_context;
2247                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2248             --dbms_output.put_line('Rlm tbl is empty for BF -- returning');
2249             pa_debug.reset_curr_function;
2250            END IF;
2251             RETURN;
2252         END IF;
2253 
2254     END IF;
2255 
2256 
2257 
2258     l_trace_stage := 40;
2259 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2260 
2261     IF l_debug_mode = 'Y' THEN
2262        pa_debug.g_err_stage:='Validating input parameters - checking for project id : ' || p_project_id;
2263        pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2264     END IF;
2265 
2266     l_trace_stage := 50;
2267 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2268    -------------------------------------------------------------------------------------------
2269    -- validating input parameters
2270    -- 1. p_project_id cannot be null
2271    -------------------------------------------------------------------------------------------
2272     IF (p_project_id IS NULL) THEN
2273         IF l_debug_mode = 'Y' THEN
2274             pa_debug.g_err_stage:='p_project_id is null';
2275             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2276         END IF;
2277         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2278                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
2279         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2280     END IF;
2281 
2282 --dbms_output.put_line('2');
2283 
2284     l_trace_stage := 60;
2285 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2286    -------------------------------------------------------------------------------------------
2287    -- validating input parameters
2288    -- 1. for p_context ('WORKPLAN','TASK_ASSIGNMENT')- p_struct_elem_version_id cannot be null
2289    -- 2. , p_task_elem_version_id_tbl table cannot be empty
2290    -------------------------------------------------------------------------------------------
2291 
2292     IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK)) THEN
2293 
2294         l_trace_stage := 70;
2295 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2296         IF p_struct_elem_version_id IS NULL THEN
2297 
2298             IF l_debug_mode = 'Y' THEN
2299                 pa_debug.g_err_stage:='p_struct_elem_version_id is NULL and p_context = ' || p_context;
2300                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2301             END IF;
2302             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2303                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
2304              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2305 
2306         ELSE
2307 
2308             l_trace_stage := 80;
2309             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2310 
2311             IF l_debug_mode = 'Y' THEN
2312                 pa_debug.g_err_stage:='calling pa_planning_transaction_utils.get_wp_budget_version_id    p_struct_elem_version_id = ' || p_struct_elem_version_id;
2313                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2314                 pa_debug.g_err_stage:='calling pa_planning_transaction_utils.get_wp_budget_version_id for deriving budget_version_id = ' || p_context;
2315                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2316             END IF;
2317 
2318             l_budget_version_id := pa_planning_transaction_utils.get_wp_budget_version_id(p_struct_elem_version_id);
2319 
2320             l_trace_stage := 90;
2321             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2322             pa_fp_planning_transaction_pub.add_wp_plan_type
2323             (p_src_project_id              => p_project_id
2324             ,p_targ_project_id              => p_project_id
2325             ,x_return_status                => x_return_status
2326             ,x_msg_count                    => x_msg_count
2327             ,x_msg_data                     => x_msg_data);
2328             l_trace_stage := 100;
2329             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2330 
2331             -- 4504452.Added this if codition to get the return status.
2332            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2333               IF l_debug_mode = 'Y' THEN
2334 	             pa_debug.g_err_stage:='Called API pa_fp_planning_transaction_pub.add_wp_plan_type api returned error';
2335                  pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2336                END IF;
2337                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2338            END IF;
2339             -----------------------------------------------------
2340             -- If l_budget_version_id IS NULL then create version
2341             -----------------------------------------------------
2342             IF l_budget_version_id IS NULL THEN
2343                 l_trace_stage := 110;
2344                 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2345 
2346                 IF l_debug_mode = 'Y' THEN
2347                     pa_debug.g_err_stage:='calling pa_fin_plan_pub.create_version api = ' || p_context;
2348                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2349                 END IF;
2350 
2351                 SELECT fin_plan_type_id
2352                 INTO   l_fin_plan_type_id
2353                 FROM   pa_fin_plan_types_b
2354                 WHERE  use_for_workplan_flag ='Y';
2355 
2356                 pa_fin_plan_pub.Create_Version (
2357                  p_project_id               => p_project_id
2358                 ,p_fin_plan_type_id         => l_fin_plan_type_id
2359                 ,p_element_type             => PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST
2360                 ,p_version_name             => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
2361                 ,p_description              => null
2362                 ,p_ci_id                    => null
2363                 ,p_est_proj_raw_cost        => null
2364                 ,p_est_proj_bd_cost         => null
2365                 ,p_est_proj_revenue         => null
2366                 ,p_est_qty                  => null
2367                 ,p_impacted_task_id         => null
2368                 ,p_agreement_id             => null
2369                 ,p_calling_context          => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
2370                 ,p_resource_list_id         => null
2371                 ,p_time_phased_code         => null
2372                 ,p_fin_plan_level_code      => null
2373                 ,p_plan_in_multi_curr_flag  => null
2374                 ,p_amount_set_id            => null
2375                 ,p_attribute_category       => null
2376                 ,p_attribute1               => null
2377                 ,p_attribute2               => null
2378                 ,p_attribute3               => null
2379                 ,p_attribute4               => null
2380                 ,p_attribute5               => null
2381                 ,p_attribute6               => null
2382                 ,p_attribute7               => null
2383                 ,p_attribute8               => null
2384                 ,p_attribute9               => null
2385                 ,p_attribute10              => null
2386                 ,p_attribute11              => null
2387                 ,p_attribute12              => null
2388                 ,p_attribute13              => null
2389                 ,p_attribute14              => null
2390                 ,p_attribute15              => null
2391                 ,p_pji_rollup_required     => l_pji_rollup_required
2392                 ,px_budget_version_id       => l_budget_version_id
2393                 ,p_struct_elem_version_id   => p_struct_elem_version_id
2394                 ,x_proj_fp_option_id        => l_proj_fp_options_id
2395                 ,x_return_status            => l_return_status
2396                 ,x_msg_count                => l_msg_count
2397                 ,x_msg_data                 => l_msg_data );
2398 
2399                 l_trace_stage := 120;
2400                 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2401                 IF l_debug_mode = 'Y' THEN
2402                     pa_debug.g_err_stage:=' API pa_fin_plan_pub.create_version api return Status : '||l_return_status;
2403                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2404                     pa_debug.g_err_stage:=' API pa_fin_plan_pub.create_version api l_budget_version_id : '||l_budget_version_id;
2405                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2406                     pa_debug.g_err_stage:=' API pa_fin_plan_pub.create_version api l_proj_fp_options_id : '||l_proj_fp_options_id;
2407                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2408                 END IF;
2409 
2410                 l_trace_stage := 130;
2411                 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2412 
2413                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2414                     IF l_debug_mode = 'Y' THEN
2415                     pa_debug.g_err_stage:='Called API pa_fin_plan_pub.create_version api returned error';
2416                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2417                     END IF;
2418                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2419                 END IF;
2420 
2421             END IF;
2422 
2423             IF l_debug_mode = 'Y' THEN
2424                 pa_debug.g_err_stage:='l_budget_version_id, l_fin_plan_type_id = '||l_budget_version_id||','|| l_fin_plan_type_id;
2425                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2426             END IF;
2427 
2428         END IF;
2429 
2430         --Get the no of tasks passed . If none are passed then return
2431         l_elem_version_id_count := p_task_elem_version_id_tbl.COUNT;
2432         l_trace_stage := 140;
2433 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2434 
2435         IF l_debug_mode = 'Y' THEN
2436             pa_debug.g_err_stage:='Validating input parameters - count of  p_task_elem_version_id_tbl = '||l_elem_version_id_count;
2437             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2438         END IF;
2439 
2440         IF l_elem_version_id_count = 0 THEN
2441             l_trace_stage := 150;
2442             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2443             IF l_debug_mode = 'Y' THEN
2444                 pa_debug.g_err_stage:='Validating input parameters - elem_version_id table is empty - p_context = '||p_context;
2445                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2446                 pa_debug.reset_curr_function;
2447 	    END IF;
2448             RETURN;
2449         END IF;
2450 
2451         l_trace_stage := 160;
2452         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2453     ELSIF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET) OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
2454 
2455         l_trace_stage := 170;
2456         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2457         IF p_budget_version_id IS NULL THEN
2458 
2459             IF l_debug_mode = 'Y' THEN
2460                   pa_debug.g_err_stage:='p_budget_version_id is null for p_context :' || p_context;
2461                   pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2462             END IF;
2463             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2464                                 p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
2465             --dbms_output.put_line('bv id is null for BF');
2466             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2467         ELSE
2468             l_trace_stage := 180;
2469             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2470             l_budget_version_id := p_budget_version_id;
2471         END IF;
2472 
2473         l_trace_stage := 190;
2474         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2475     END IF;
2476 
2477     IF l_debug_mode = 'Y' THEN
2478         pa_debug.g_err_stage:='Fetching resource List id - l_resource_list_id : ';
2479         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2480     END IF;
2481     l_trace_stage := 200;
2482     --  hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2483     --dbms_output.put_line('2.3 '||l_budget_version_id);
2484 
2485     --Get the required details for the budget version id
2486     SELECT nvl(cost_resource_list_id, nvl(revenue_resource_list_id, all_resource_list_id))
2487           ,rbs_version_id
2488     INTO   l_resource_list_id
2489           ,l_rbs_version_id
2490     FROM   pa_proj_fp_options
2491     WHERE  fin_plan_version_id=l_budget_version_id;
2492 
2493     IF l_debug_mode = 'Y' THEN
2494         pa_debug.g_err_stage:='Fetching resource List id - l_resource_list_id : '|| l_resource_list_id;
2495         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2496     END IF;
2497 
2498 -- Fetching spread curve id for fixed date spread curve : Bug 3607061 - Starts
2499     BEGIN
2500         IF l_debug_mode = 'Y' THEN
2501             pa_debug.g_err_stage:='Fetching spread curve id for fixed date spread curve';
2502             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2503         END IF;
2504         Select spread_curve_id
2505           into l_fixed_date_sp_id
2506           from pa_spread_curves_b
2507          where spread_curve_code = 'FIXED_DATE';
2508 
2509         IF l_debug_mode = 'Y' THEN
2510             pa_debug.g_err_stage:='Fetching spread curve id l_fixed_date_sp_id:'||l_fixed_date_sp_id;
2511             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2512         END IF;
2513 
2514     EXCEPTION
2515         WHEN NO_DATA_FOUND THEN
2516              IF l_debug_mode = 'Y' THEN
2517                 pa_debug.g_err_stage:='Fixed date spread curve not found in system';
2518                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,5);
2519              END IF;
2520              RAISE;
2521     END;
2522 -- Fetching spread curve id for fixed date spread curve : Bug 3607061 - Ends
2523 
2524 
2525     l_trace_stage := 210;
2526     --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2527 
2528     --dbms_output.put_line('2.2');
2529     -----------------------------------------------------------------------------------------------------------------------
2530     -- Fetching the resource class member ids for Class Codes in ('FINANCIAL_ELEMENTS','PEOPLE','EQUIPMENT','MATERIAL')
2531     -- and setting all Cost PLsql tables that will be needed for calling Calculate API as Empty tabs
2532     -- Bug 3749516 Removing rlm id for EQUIPMENT below
2533     -----------------------------------------------------------------------------------------------------------------------
2534 
2535     IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) THEN
2536         l_trace_stage := 220;
2537         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2538 
2539         IF l_debug_mode = 'Y' THEN
2540             pa_debug.g_err_stage:='Calling API pa_planning_transaction_utils.Get_Res_Class_Rlm_Ids';
2541             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2542         END IF;
2543 
2544          pa_planning_transaction_utils.Get_Res_Class_Rlm_Ids
2545         (p_project_id                   =>    p_project_id,
2546          p_resource_list_id             =>    l_resource_list_id,
2547          x_people_res_class_rlm_id      =>    l_people_res_class_rlm_id,
2548          x_equip_res_class_rlm_id       =>    l_equip_res_class_rlm_id,
2549          x_fin_res_class_rlm_id         =>    l_fin_res_class_rlm_id,
2550          x_mat_res_class_rlm_id         =>    l_mat_res_class_rlm_id,
2551          x_return_status                =>    l_return_status,
2552          x_msg_count                    =>    l_msg_count,
2553          x_msg_data                     =>    l_msg_data);
2554         l_trace_stage := 230;
2555         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2556         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2557             IF l_debug_mode = 'Y' THEN
2558                 pa_debug.g_err_stage:='Called API pa_planning_transaction_utils.Get_Res_Class_Rlm_Ids api returned error';
2559                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2560             END IF;
2561         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2562         END IF;
2563 
2564         l_trace_stage := 240;
2565         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2566 
2567         IF l_debug_mode = 'Y' THEN
2568             pa_debug.g_err_stage:='l_people_res_class_rlm_id : '||l_people_res_class_rlm_id;
2569             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2570         END IF;
2571 
2572         l_eligible_rlm_ids_tbl(1) := l_people_res_class_rlm_id;
2573 
2574         l_trace_stage := 250;
2575         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2576     ELSE
2577         --dbms_output.put_line('2.1');
2578         l_trace_stage := 260;
2579         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2580         l_eligible_rlm_ids_tbl := p_resource_list_member_id_tbl;
2581 
2582     END IF;
2583 
2584     /**************** initializing pm product code ************/
2585     IF l_eligible_rlm_ids_tbl.count > 0 Then
2586             FOR i IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST LOOP
2587                             If (NOT p_pm_product_code.EXISTS(i))
2588                             then
2589                                     l_pm_product_code_tbl(i) := null;
2590                             elsif ( p_pm_product_code(i) = fnd_api.g_miss_char)
2591                             Then
2592                                     l_pm_product_code_tbl(i) := null;
2593                             Else
2594                                     l_pm_product_code_tbl(i) := p_pm_product_code(i);
2595                             End If;
2596 
2597                             If (NOT p_pm_res_asgmt_ref.EXISTS(i))
2598                             then
2599                                     l_pm_res_asgmt_ref_tbl(i) := null;
2600                             elsif (p_pm_res_asgmt_ref(i) = fnd_api.g_miss_char)
2601                             Then
2602                                     l_pm_res_asgmt_ref_tbl(i) := null;
2603                             Else
2604                                     l_pm_res_asgmt_ref_tbl(i) := p_pm_res_asgmt_ref(i);
2605                             End If;
2606             END loop;
2607     End IF;
2608 
2609     /**************** end ------------------- initializing pm product code ************/
2610 
2611 
2612     l_trace_stage := 290;
2613     --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2614 
2615     --------------------------------------------------------------------
2616     -- Calling procedure PA_PLANNING_RESOURCE_UTILS.get_resource_defaults
2617     --  to get the resource defaults for the rlm ids passed
2618     -- Please note that this API call will be modified, once the API is
2619     -- finalised.
2620     --                                    - STARTS
2621     --------------------------------------------------------------------
2622 
2623     IF l_debug_mode = 'Y' THEN
2624         pa_debug.g_err_stage:='Calling API PA_PLANNING_RESOURCE_UTILS.get_resource_defaults';
2625         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2626     END IF;
2627 
2628     l_trace_stage := 300;
2629     --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2630     PA_PLANNING_RESOURCE_UTILS.get_resource_defaults(
2631     p_resource_list_members        =>  l_eligible_rlm_ids_tbl,
2632     p_project_id                   =>  p_project_id,
2633     x_resource_class_flag          =>  l_resource_class_flag_tbl,
2634     x_resource_class_code          =>  l_resource_class_code_tbl,
2635     x_resource_class_id            =>  l_resource_class_id_tbl,
2636     x_res_type_code                =>  l_res_type_code_tbl,
2637     x_person_id                    =>  l_person_id_tbl,
2638     x_job_id                       =>  l_job_id_tbl,
2639     x_person_type_code             =>  l_person_type_code_tbl,
2640     x_named_role                   =>  l_named_role_tbl,
2641     x_bom_resource_id              =>  l_bom_resource_id_tbl,
2642     x_non_labor_resource           =>  l_non_labor_resource_tbl,
2643     x_inventory_item_id            =>  l_inventory_item_id_tbl,
2644     x_item_category_id             =>  l_item_category_id_tbl,
2645     x_project_role_id              =>  l_project_role_id_tbl,
2646     x_organization_id              =>  l_organization_id_tbl,
2647     x_fc_res_type_code             =>  l_fc_res_type_code_tbl,
2648     x_expenditure_type             =>  l_expenditure_type_tbl,
2649     x_expenditure_category         =>  l_expenditure_category_tbl,
2650     x_event_type                   =>  l_event_type_tbl,
2651     x_revenue_category_code        =>  l_revenue_category_code_tbl,
2652     x_supplier_id                  =>  l_supplier_id_tbl,
2653     x_unit_of_measure              =>  l_unit_of_measure_tbl,
2654     x_spread_curve_id              =>  l_spread_curve_id_tbl,
2655     x_etc_method_code              =>  l_etc_method_code_tbl,
2656     x_mfc_cost_type_id             =>  l_mfc_cost_type_id_tbl,
2657     x_incurred_by_res_flag         =>  l_incurred_by_res_flag_tbl,
2658     x_incur_by_res_class_code      =>  l_incur_by_res_class_code_tbl,
2659     x_Incur_by_role_id             =>  l_Incur_by_role_id_tbl,
2660     x_org_id                       =>  l_org_id_tbl,
2661     X_rate_based_flag              =>  l_rate_based_flag_tbl,
2662     x_rate_expenditure_type        =>  l_rate_expenditure_type_tbl,
2663     x_rate_func_curr_code          =>  l_rate_func_curr_code_tbl,
2664     x_incur_by_res_type            =>  l_incur_by_res_type ,
2665     x_msg_data                     =>  l_msg_data,
2666     x_msg_count                    =>  l_msg_count,
2667     x_return_status                =>  l_return_status);
2668     l_trace_stage := 310;
2669 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2670 
2671     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2672 
2673         IF l_debug_mode = 'Y' THEN
2674            pa_debug.g_err_stage:='Called APIPA_PLANNING_RESOURCE_UTILS.get_resource_defaults api returned error';
2675            pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2676         END IF;
2677         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2678 
2679     END IF;
2680 
2681     IF l_debug_mode = 'Y' THEN
2682 
2683         IF l_eligible_rlm_ids_tbl.COUNT >0 THEN
2684             pa_debug.g_err_stage:='Parameters to PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs';
2685             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2686 
2687 
2688             pa_debug.g_err_stage:='p_budget_version_id '||l_budget_version_id;
2689             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2690 
2691             pa_debug.g_err_stage:='l_resource_list_id '||l_resource_list_id;
2692             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2693 
2694             pa_debug.g_err_stage:='l_rbs_version_id '||l_rbs_version_id;
2695             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2696 
2697             pa_debug.g_err_stage:='l_eligible_rlm_ids_tbl(1) '||l_eligible_rlm_ids_tbl(1);
2698             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2699 
2700             pa_debug.g_err_stage:='l_txn_src_typ_code_rbs_prm_tbl(1) '||l_txn_src_typ_code_rbs_prm_tbl(1);
2701             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2702 
2703             pa_debug.g_err_stage:='l_person_id_tbl(1) '||l_person_id_tbl(1);
2704             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2705 
2706             pa_debug.g_err_stage:='l_job_id_tbl(1) '||l_job_id_tbl(1);
2707             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2708 
2709             pa_debug.g_err_stage:='l_organization_id_tbl(1) '||l_organization_id_tbl(1);
2710             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2711 
2712             pa_debug.g_err_stage:='l_supplier_id_tbl(1) '||l_supplier_id_tbl(1);
2713             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2714 
2715             pa_debug.g_err_stage:='l_expenditure_type_tbl(1) '||l_expenditure_type_tbl(1);
2716             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2717 
2718             pa_debug.g_err_stage:='l_event_type_tbl(1) '||l_event_type_tbl(1);
2719             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2720 
2721             pa_debug.g_err_stage:='l_expenditure_category_tbl(1) '||l_expenditure_category_tbl(1);
2722             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2723 
2724             pa_debug.g_err_stage:='l_revenue_category_code_tbl(1) '||l_revenue_category_code_tbl(1);
2725             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2726 
2727             pa_debug.g_err_stage:='l_project_role_id_tbl(1) '||l_project_role_id_tbl(1);
2728             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2729 
2730             pa_debug.g_err_stage:='l_resource_class_code_tbl(1) '||l_resource_class_code_tbl(1);
2731             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2732 
2733             pa_debug.g_err_stage:='l_item_category_id_tbl(1) '||l_item_category_id_tbl(1);
2734             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2735 
2736             pa_debug.g_err_stage:='l_person_type_code_tbl(1) '||l_person_type_code_tbl(1);
2737             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2738 
2739             pa_debug.g_err_stage:='l_bom_resource_id_tbl(1) '||l_bom_resource_id_tbl(1);
2740             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2741 
2742         END IF;
2743 
2744 
2745     END IF;
2746     --Added For CBS 12.2 Enhancement
2747     IF (((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN)
2748           OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK))
2749           AND p_struct_elem_version_id IS NOT NULL)
2750     THEN
2751 	l_res_class_flag := PA_PROJECT_STRUCTURE_UTILS.get_resource_class_flag(p_project_id);
2752 	IF l_res_class_flag = 'N'
2753 	THEN
2754 		FOR i IN l_rate_based_flag_tbl.FIRST..l_rate_based_flag_tbl.LAST LOOP
2755 			--l_rate_based_flag_tbl(i) := 'N';
2756 			l_unit_of_measure_tbl(i) := 'DOLLARS';
2757 		END LOOP;
2758 	END IF;
2759     END IF;
2760     --CBS Changes End here
2761     --Loop thru the passed rlm id table to prepare the l_txn_src_typ_code_rbs_prm_tbl pl/sql table.
2762     --All the elements in this table should be set to 'RES_ASSIGNMENT'
2763 
2764     --NOTE : This loop is also used to transfer the l_incur_by_res_type(i) to  l_res_type_code_tbl(i) if
2765     --l_incurred_by_res_flag_tbl(i) is Y. Ultimately l_res_type_code_tbl will be used in populationg
2766     --res type code in pa_resource_assignments
2767     l_res_type_code_tbl.EXTEND(l_eligible_rlm_ids_tbl.COUNT-l_res_type_code_tbl.COUNT);
2768     FOR i IN l_eligible_rlm_ids_tbl.FIRST..l_eligible_rlm_ids_tbl.LAST LOOP
2769 
2770        l_txn_src_typ_code_rbs_prm_tbl(i):='RES_ASSIGNMENT';
2771 
2772        IF  l_incurred_by_res_flag_tbl.EXISTS(i) AND nvl(l_incurred_by_res_flag_tbl(i),'N') = 'Y' THEN
2773            IF l_incur_by_res_type.EXISTS(i) THEN
2774               l_res_type_code_tbl(i) := l_incur_by_res_type(i);
2775            ELSE
2776               l_res_type_code_tbl(i) := NULL;
2777            END IF;
2778        END IF;
2779 
2780     END LOOP;
2781 
2782     --Extend the output pl/sql tbls l_rbs_element_id_tbl and l_txn_accum_header_id_tbl so that they contatin
2783     --the same no of records as l_eligible_rlm_ids_tbl
2784     l_rbs_element_id_tbl.EXTEND(l_eligible_rlm_ids_tbl.COUNT);
2785     l_txn_accum_header_id_tbl.EXTEND(l_eligible_rlm_ids_tbl.COUNT);
2786 
2787 		--Bug#16200605 updating the cbs_element_id's into l_cbs_id_rlm_tbl
2788 	FOR i IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST LOOP
2789 		IF p_cbs_element_id_tbl.EXISTS(i) THEN
2790 			l_cbs_id_rlm_tbl(i) := p_cbs_element_id_tbl(i);
2791 		ELSE
2792 			l_cbs_id_rlm_tbl(i) := NULL;
2793 		END IF;
2794 	END LOOP;
2795 
2796     --Call the RBS Mapping API only if the rbs version id is not null
2797     IF l_rbs_version_id IS NOT NULL THEN
2798 
2799             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,'before PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs',3);
2800 
2801         PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs(
2802          p_budget_version_id           => l_budget_version_id
2803         ,p_resource_list_id            => l_resource_list_id
2804         ,p_rbs_version_id              => l_rbs_version_id
2805         ,p_calling_process             => 'RBS_REFRESH'
2806         ,p_calling_context             => 'PLSQL'
2807         ,p_process_code                => 'RBS_MAP'
2808         ,p_calling_mode                => 'PLSQL_TABLE'
2809         ,p_init_msg_list_flag          => 'N'
2810         ,p_commit_flag                 => 'N'
2811         ,p_TXN_SOURCE_ID_tab           => l_eligible_rlm_ids_tbl
2812         ,p_TXN_SOURCE_TYPE_CODE_tab    => l_txn_src_typ_code_rbs_prm_tbl
2813         ,p_PERSON_ID_tab               => l_person_id_tbl
2814         ,p_JOB_ID_tab                  => l_job_id_tbl
2815         ,p_ORGANIZATION_ID_tab         => l_organization_id_tbl
2816         ,p_VENDOR_ID_tab               => l_supplier_id_tbl
2817         ,p_EXPENDITURE_TYPE_tab        => l_expenditure_type_tbl
2818         ,p_EVENT_TYPE_tab              => l_event_type_tbl
2819         ,p_EXPENDITURE_CATEGORY_tab    => l_expenditure_category_tbl
2820         ,p_REVENUE_CATEGORY_CODE_tab   => l_revenue_category_code_tbl
2821         ,p_PROJECT_ROLE_ID_tab         => l_project_role_id_tbl
2822         ,p_RESOURCE_CLASS_CODE_tab     => l_resource_class_code_tbl
2823         ,p_ITEM_CATEGORY_ID_tab        => l_item_category_id_tbl
2824         ,p_PERSON_TYPE_CODE_tab        => l_person_type_code_tbl
2825         ,p_BOM_RESOURCE_ID_tab         => l_bom_resource_id_tbl
2826         ,p_NON_LABOR_RESOURCE_tab      => l_non_labor_resource_tbl -- Bug 3711741
2827         ,p_INVENTORY_ITEM_ID_tab       => l_inventory_item_id_tbl -- Bug 3698596
2828 		,P_CBS_ELEMENT_ID_TAB		   => l_cbs_id_rlm_tbl -- bug#16840460
2829         ,x_txn_source_id_tab           => l_txn_source_id_tbl
2830         ,x_res_list_member_id_tab      => l_res_list_member_id_tbl
2831         ,x_rbs_element_id_tab          => l_rbs_element_id_tbl
2832         ,x_txn_accum_header_id_tab     => l_txn_accum_header_id_tbl
2833         ,x_return_status               => x_return_status
2834         ,x_msg_count                   => x_msg_count
2835         ,x_msg_data                    => x_msg_data);
2836 
2837         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2838 
2839             IF l_debug_mode = 'Y' THEN
2840                pa_debug.g_err_stage:='Called API PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs returned error';
2841                pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2842             END IF;
2843             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2844 
2845         END IF;
2846 
2847     END IF; --IF l_rbs_version_id IS NOT NULL THEN
2848 
2849 
2850     --Call the rbs mapping API for the rlm ids obtained above
2851 
2852     l_trace_stage := 320;
2853     --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2854     --------------------------------------------------------------------
2855     -- Calling procedure abcd.get_multiple_resource_defaults to get the
2856     -- resource defaults for the rlm ids passed
2857     -- Please note that this API call will be modified, once the API is
2858     -- finalised.
2859     --                                      - ENDS
2860     --------------------------------------------------------------------
2861 
2862 
2863 
2864     -------------------------------------------------------------------------
2865     -- For p_context = TASK_ASSIGNMENTS  - Processing Starts Here
2866     -------------------------------------------------------------------------
2867     l_trace_stage := 330;
2868 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2869     IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
2870     l_trace_stage := 340;
2871 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2872         IF l_debug_mode = 'Y' THEN
2873             pa_debug.g_err_stage:='Doing processing for TASK ASSIGNMENTS : p_context is'|| p_context;
2874             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2875         END IF;
2876         -------------------------------------------------------------------------
2877         -- To call Task Validation API we populate the PLSql tables with task
2878         -- and resource data.
2879         -------------------------------------------------------------------------
2880 
2881         IF l_debug_mode = 'Y' THEN
2882             pa_debug.g_err_stage:='Populating PlSql table with Task Data';
2883             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2884         END IF;
2885 
2886         -----------------------------------------------------------------
2887         -- Populating Table of task_rec_type
2888         -----------------------------------------------------------------
2889         FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
2890             l_trace_stage := 350;
2891             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2892 
2893             l_task_rec_tbl(i).project_id := p_project_id;
2894             l_task_rec_tbl(i).struct_elem_version_id := p_struct_elem_version_id;
2895             l_task_rec_tbl(i).task_elem_version_id := p_task_elem_version_id_tbl(i);
2896             IF p_task_name_tbl.EXISTS(i) THEN
2897                 l_task_rec_tbl(i).task_name := p_task_name_tbl(i);
2898             END IF;
2899 
2900             IF p_task_number_tbl.EXISTS(i) THEN
2901                 l_task_rec_tbl(i).task_number := p_task_number_tbl(i);
2902             END IF;
2903 
2904             IF p_start_date_tbl.EXISTS(i) THEN
2905                 l_task_rec_tbl(i).start_date := p_start_date_tbl(i);
2906             END IF;
2907 
2908             IF p_end_date_tbl.EXISTS(i) THEN
2909                 l_task_rec_tbl(i).end_date  := p_end_date_tbl(i);
2910             END IF;
2911 
2912             IF p_planned_people_effort_tbl.EXISTS(i) THEN
2913                 l_task_rec_tbl(i).planned_people_effort := p_planned_people_effort_tbl(i);
2914             END IF;
2915 
2916             IF p_latest_eff_pub_flag_tbl.EXISTS(i) THEN
2917                 l_task_rec_tbl(i).latest_eff_pub_flag  := p_latest_eff_pub_flag_tbl(i);
2918             END IF;
2919             l_trace_stage := 360;
2920             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2921         END LOOP;
2922         l_trace_stage := 370;
2923         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2924 
2925 
2926         -----------------------------------------------------------------
2927         -- Populating Table of resource_rec_type
2928         -----------------------------------------------------------------
2929 
2930         IF l_debug_mode = 'Y' THEN
2931             pa_debug.g_err_stage:='Populating PlSql table with Resource Data';
2932             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2933         END IF;
2934 
2935         l_trace_stage := 380;
2936         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2937         FOR i IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST LOOP
2938             l_trace_stage := 390;
2939             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2940 
2941             l_resource_rec_tbl(i).resource_list_member_id := l_eligible_rlm_ids_tbl(i);
2942 
2943             IF p_project_assignment_id_tbl.EXISTS(i) THEN
2944                 l_resource_rec_tbl(i).project_assignment_id := p_project_assignment_id_tbl(i);
2945             END IF;
2946 
2947             IF l_resource_class_flag_tbl.EXISTS(i) THEN
2948                 l_resource_rec_tbl(i).resource_class_flag := l_resource_class_flag_tbl(i);
2949             END IF;
2950 
2951             IF l_resource_class_code_tbl.EXISTS(i) THEN
2952                 l_resource_rec_tbl(i).resource_class_code := l_resource_class_code_tbl(i);
2953             END IF;
2954 
2955             IF l_resource_class_id_tbl.EXISTS(i) THEN
2956                l_resource_rec_tbl(i).resource_class_id := l_resource_class_id_tbl(i);
2957             END IF;
2958 
2959             IF l_res_type_code_tbl.EXISTS(i) THEN
2960                l_resource_rec_tbl(i).res_type_code := l_res_type_code_tbl(i);
2961             END IF;
2962 
2963             IF l_person_id_tbl.EXISTS(i) THEN
2964                 l_resource_rec_tbl(i).person_id := l_person_id_tbl(i);
2965             END IF;
2966 
2967             IF l_job_id_tbl.EXISTS(i) THEN
2968                 l_resource_rec_tbl(i).job_id := l_job_id_tbl(i);
2969             END IF;
2970 
2971             IF l_person_type_code_tbl.EXISTS(i) THEN
2972                 l_resource_rec_tbl(i).person_type_code := l_person_type_code_tbl(i);
2973             END IF;
2974 
2975             IF l_bom_resource_id_tbl.EXISTS(i) THEN
2976                l_resource_rec_tbl(i).bom_resource_id := l_bom_resource_id_tbl(i);
2977             END IF;
2978 
2979             IF l_inventory_item_id_tbl.EXISTS(i) THEN
2980                l_resource_rec_tbl(i).inventory_item_id := l_inventory_item_id_tbl(i);
2981             END IF;
2982 
2983             IF l_item_category_id_tbl.EXISTS(i) THEN
2984                l_resource_rec_tbl(i).item_category_id := l_item_category_id_tbl(i);
2985             END IF;
2986 
2987             IF l_project_role_id_tbl.EXISTS(i) THEN
2988                 l_resource_rec_tbl(i).project_role_id := l_project_role_id_tbl(i);
2989             END IF;
2990 
2991             IF l_organization_id_tbl.EXISTS(i) THEN
2992                 l_resource_rec_tbl(i).organization_id := l_organization_id_tbl(i);
2993             END IF;
2994 
2995             IF l_fc_res_type_code_tbl.EXISTS(i) THEN
2996                 l_resource_rec_tbl(i).fc_res_type_code := l_fc_res_type_code_tbl(i);
2997             END IF;
2998 
2999             IF l_expenditure_type_tbl.EXISTS(i) THEN
3000                 l_resource_rec_tbl(i).expenditure_type := l_expenditure_type_tbl(i);
3001             END IF;
3002 
3003             IF l_expenditure_category_tbl.EXISTS(i) THEN
3004                 l_resource_rec_tbl(i).expenditure_category := l_expenditure_category_tbl(i);
3005             END IF;
3006 
3007             IF l_event_type_tbl.EXISTS(i) THEN
3008                 l_resource_rec_tbl(i).event_type := l_event_type_tbl(i);
3009             END IF;
3010 
3011             IF l_revenue_category_code_tbl.EXISTS(i) THEN
3012                 l_resource_rec_tbl(i).revenue_category_code := l_revenue_category_code_tbl(i);
3013             END IF;
3014 
3015             IF l_supplier_id_tbl.EXISTS(i) THEN
3016                 l_resource_rec_tbl(i).supplier_id := l_supplier_id_tbl(i);
3017             END IF;
3018 
3019             IF l_unit_of_measure_tbl.EXISTS(i) THEN
3020                 l_resource_rec_tbl(i).unit_of_measure := l_unit_of_measure_tbl(i);
3021             END IF;
3022 
3023             IF l_spread_curve_id_tbl.EXISTS(i) THEN
3024                 l_resource_rec_tbl(i).spread_curve_id := l_spread_curve_id_tbl(i);
3025             END IF;
3026 
3027             IF l_etc_method_code_tbl.EXISTS(i) THEN
3028                 l_resource_rec_tbl(i).etc_method_code := l_etc_method_code_tbl(i);
3029             END IF;
3030 
3031             IF l_mfc_cost_type_id_tbl.EXISTS(i) THEN
3032                 l_resource_rec_tbl(i).mfc_cost_type_id := l_mfc_cost_type_id_tbl(i);
3033             END IF;
3034 
3035             IF l_incurred_by_res_flag_tbl.EXISTS(i) THEN
3036                 l_resource_rec_tbl(i).incurred_by_res_flag := l_incurred_by_res_flag_tbl(i);
3037             END IF;
3038 
3039             IF l_Incur_by_res_class_code_tbl.EXISTS(i) THEN
3040                 l_resource_rec_tbl(i).Incur_by_res_class_code := l_Incur_by_res_class_code_tbl(i);
3041             END IF;
3042 
3043             IF l_Incur_by_role_id_tbl.EXISTS(i) THEN
3044                 l_resource_rec_tbl(i).Incur_by_role_id := l_Incur_by_role_id_tbl(i);
3045             END IF;
3046 
3047             IF l_named_role_tbl.EXISTS(i) THEN
3048                 l_resource_rec_tbl(i).named_role := l_named_role_tbl(i);
3049             END IF;
3050 
3051             IF l_non_labor_resource_tbl.EXISTS(i) THEN
3052                 l_resource_rec_tbl(i).non_labor_resource := l_non_labor_resource_tbl(i);
3053             END IF;
3054 
3055             IF p_quantity_tbl.EXISTS(i) THEN
3056                 l_resource_rec_tbl(i).total_quantity := p_quantity_tbl(i);
3057             END IF;
3058 
3059             IF l_unplanned_flag_tbl.EXISTS(i) THEN
3060                 l_resource_rec_tbl(i).unplanned_flag := l_unplanned_flag_tbl(i);
3061             END IF;
3062 
3063             -- Bug 3793623
3064             IF p_planning_start_date_tbl.EXISTS(i) THEN
3065                 l_resource_rec_tbl(i).planning_start_date := p_planning_start_date_tbl(i);
3066             END IF;
3067 
3068             IF p_planning_end_date_tbl.EXISTS(i) THEN
3069                 l_resource_rec_tbl(i).planning_end_date := p_planning_end_date_tbl(i);
3070             END IF;
3071 
3072             --For Bug 3877875
3073             IF p_ATTRIBUTE_CATEGORY_tbl.EXISTS(i) THEN
3074                 l_resource_rec_tbl(i).ATTRIBUTE_CATEGORY := p_ATTRIBUTE_CATEGORY_tbl(i);
3075             END IF;
3076 
3077             IF p_ATTRIBUTE1.EXISTS(i) THEN
3078                 l_resource_rec_tbl(i).ATTRIBUTE1 := p_ATTRIBUTE1(i);
3079             END IF;
3080 
3081             IF p_ATTRIBUTE2.EXISTS(i) THEN
3082                 l_resource_rec_tbl(i).ATTRIBUTE2 := p_ATTRIBUTE2(i);
3083             END IF;
3084 
3085             IF p_ATTRIBUTE3.EXISTS(i) THEN
3086                 l_resource_rec_tbl(i).ATTRIBUTE3 := p_ATTRIBUTE3(i);
3087             END IF;
3088 
3089             IF p_ATTRIBUTE4.EXISTS(i) THEN
3090                 l_resource_rec_tbl(i).ATTRIBUTE4 := p_ATTRIBUTE4(i);
3091             END IF;
3092 
3093             IF p_ATTRIBUTE5.EXISTS(i) THEN
3094                 l_resource_rec_tbl(i).ATTRIBUTE5 := p_ATTRIBUTE5(i);
3095             END IF;
3096 
3097             IF p_ATTRIBUTE6.EXISTS(i) THEN
3098                 l_resource_rec_tbl(i).ATTRIBUTE6 := p_ATTRIBUTE6(i);
3099             END IF;
3100 
3101             IF p_ATTRIBUTE7.EXISTS(i) THEN
3102                 l_resource_rec_tbl(i).ATTRIBUTE7 := p_ATTRIBUTE7(i);
3103             END IF;
3104 
3105             IF p_ATTRIBUTE8.EXISTS(i) THEN
3106                 l_resource_rec_tbl(i).ATTRIBUTE8 := p_ATTRIBUTE8(i);
3107             END IF;
3108 
3109             IF p_ATTRIBUTE9.EXISTS(i) THEN
3110                 l_resource_rec_tbl(i).ATTRIBUTE9 := p_ATTRIBUTE9(i);
3111             END IF;
3112 
3113             IF p_ATTRIBUTE10.EXISTS(i) THEN
3114                 l_resource_rec_tbl(i).ATTRIBUTE10 := p_ATTRIBUTE10(i);
3115             END IF;
3116 
3117             IF p_ATTRIBUTE11.EXISTS(i) THEN
3118                 l_resource_rec_tbl(i).ATTRIBUTE11 := p_ATTRIBUTE11(i);
3119             END IF;
3120 
3121             IF p_ATTRIBUTE12.EXISTS(i) THEN
3122                 l_resource_rec_tbl(i).ATTRIBUTE12 := p_ATTRIBUTE12(i);
3123             END IF;
3124 
3125             IF p_ATTRIBUTE13.EXISTS(i) THEN
3126                 l_resource_rec_tbl(i).ATTRIBUTE13 := p_ATTRIBUTE13(i);
3127             END IF;
3128 
3129             IF p_ATTRIBUTE14.EXISTS(i) THEN
3130                 l_resource_rec_tbl(i).ATTRIBUTE14 := p_ATTRIBUTE14(i);
3131             END IF;
3132 
3133             IF p_ATTRIBUTE15.EXISTS(i) THEN
3134                 l_resource_rec_tbl(i).ATTRIBUTE15 := p_ATTRIBUTE15(i);
3135             END IF;
3136 
3137             IF p_ATTRIBUTE16.EXISTS(i) THEN
3138                 l_resource_rec_tbl(i).ATTRIBUTE16 := p_ATTRIBUTE16(i);
3139             END IF;
3140 
3141             IF p_ATTRIBUTE17.EXISTS(i) THEN
3142                 l_resource_rec_tbl(i).ATTRIBUTE17 := p_ATTRIBUTE17(i);
3143             END IF;
3144 
3145             IF p_ATTRIBUTE18.EXISTS(i) THEN
3146                 l_resource_rec_tbl(i).ATTRIBUTE18 := p_ATTRIBUTE18(i);
3147             END IF;
3148 
3149             IF p_ATTRIBUTE19.EXISTS(i) THEN
3150                 l_resource_rec_tbl(i).ATTRIBUTE19 := p_ATTRIBUTE19(i);
3151             END IF;
3152 
3153             IF p_ATTRIBUTE20.EXISTS(i) THEN
3154                 l_resource_rec_tbl(i).ATTRIBUTE20 := p_ATTRIBUTE20(i);
3155             END IF;
3156 
3157             IF p_ATTRIBUTE21.EXISTS(i) THEN
3158                 l_resource_rec_tbl(i).ATTRIBUTE21 := p_ATTRIBUTE21(i);
3159             END IF;
3160 
3161             IF p_ATTRIBUTE22.EXISTS(i) THEN
3162                 l_resource_rec_tbl(i).ATTRIBUTE22 := p_ATTRIBUTE22(i);
3163             END IF;
3164 
3165             IF p_ATTRIBUTE23.EXISTS(i) THEN
3166                 l_resource_rec_tbl(i).ATTRIBUTE23 := p_ATTRIBUTE23(i);
3167             END IF;
3168 
3169             IF p_ATTRIBUTE24.EXISTS(i) THEN
3170                 l_resource_rec_tbl(i).ATTRIBUTE24 := p_ATTRIBUTE24(i);
3171             END IF;
3172 
3173             IF p_ATTRIBUTE25.EXISTS(i) THEN
3174                 l_resource_rec_tbl(i).ATTRIBUTE25 := p_ATTRIBUTE25(i);
3175             END IF;
3176 
3177             IF p_ATTRIBUTE26.EXISTS(i) THEN
3178                 l_resource_rec_tbl(i).ATTRIBUTE26 := p_ATTRIBUTE26(i);
3179             END IF;
3180 
3181             IF p_ATTRIBUTE27.EXISTS(i) THEN
3182                 l_resource_rec_tbl(i).ATTRIBUTE27 := p_ATTRIBUTE27(i);
3183             END IF;
3184 
3185             IF p_ATTRIBUTE28.EXISTS(i) THEN
3186                 l_resource_rec_tbl(i).ATTRIBUTE28 := p_ATTRIBUTE28(i);
3187             END IF;
3188 
3189             IF p_ATTRIBUTE29.EXISTS(i) THEN
3190                 l_resource_rec_tbl(i).ATTRIBUTE29 := p_ATTRIBUTE29(i);
3191             END IF;
3192 
3193             IF p_ATTRIBUTE30.EXISTS(i) THEN
3194                 l_resource_rec_tbl(i).ATTRIBUTE30 := p_ATTRIBUTE30(i);
3195             END IF;
3196             --For bug 3877875
3197 
3198             --For bug 3948128
3199             IF p_scheduled_delay.EXISTS(i) THEN
3200                 l_resource_rec_tbl(i).scheduled_delay := p_scheduled_delay(i);
3201             END IF;
3202 
3203             -- SPOKANAT bug 9759832 - start
3204             -- set the default value only if use_task_schedule_flag value is G_MISS_CHAR
3205             OPEN C2(p_project_id);
3206             FETCH C2 INTO l_use_task_schedule_flag;
3207             CLOSE C2;
3208             if l_use_task_schedule_flag is not null then
3209              l_resource_rec_tbl(i).use_task_schedule_flag :=l_use_task_schedule_flag;
3210             end if;
3211             -- SPOKANAT bug 9759832 - end
3212 
3213 
3214     l_trace_stage := 400;
3215 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3216 
3217         END LOOP;
3218     l_trace_stage := 410;
3219 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3220 
3221 
3222         -------------------------------------------------
3223         -- Calling Task validation API
3224         -------------------------------------------------
3225         IF l_debug_mode = 'Y' THEN
3226             pa_debug.g_err_stage:='Calling API pa_task_assignment_utils.Validate_Create_Assignment';
3227             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3228         END IF;
3229 
3230         l_trace_stage := 420;
3231         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3232         --dbms_output.put_line('qty bef is '||l_resource_rec_tbl(1).planning_start_Date);
3233         --dbms_output.put_line('qty aft is '||l_resource_rec_tbl(1).planning_end_date);
3234         -- For Bug 3665097 : New param p_one_to_one_mapping_flag added below.
3235         -- This will be synced up with Validate_Create_Assignment changes.
3236         pa_task_assignment_utils.Validate_Create_Assignment(
3237         p_calling_context              => p_calling_context,     -- Added for Bug 6856934
3238         p_one_to_one_mapping_flag      => p_one_to_one_mapping_flag,
3239         p_task_rec_tbl                 => l_task_rec_tbl,
3240         p_task_assignment_tbl          => l_resource_rec_tbl,
3241         x_del_task_level_rec_code_tbl  => l_del_task_level_rec_code_tbl,  --Paramater obsoletted , not in use any more
3242         x_return_status                => l_return_status);
3243         --dbms_output.put_line('qty aft is '||l_resource_rec_tbl(1).planning_start_date);
3244         --dbms_output.put_line('qty aft is '||l_resource_rec_tbl(1).planning_end_date);
3245 
3246         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3247             IF l_debug_mode = 'Y' THEN
3248                 pa_debug.g_err_stage:='Called API pa_task_assignment_utils.Validate_Create_Assignment returned error';
3249                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3250             END IF;
3251             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3252         END IF;
3253         IF l_debug_mode = 'Y' THEN
3254             pa_debug.g_err_stage:='Returned from pa_task_assignment_utils.Validate_Create_Assignment';
3255             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3256         END IF;
3257 
3258         l_trace_stage := 430;
3259         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3260 
3261         -----------------------------------------------------------------------
3262         -- Check if the name of records in l_del_task_level_rec_code_tbl is same
3263         -- as the number of records in   p_task_elem_version_id_tbl - Starts
3264         -----------------------------------------------------------------------
3265 
3266         l_trace_stage := 460;
3267         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3268         -----------------------------------------------------------------------
3269         -- The resource data tables shall be re-populated by the in out parameter
3270         -- parameter l_resource_rec_tbl, in the API call pa_task_assignment_utils.
3271         -- Validate_Create_Assignment above. So deleting alll existing data from
3272         -- the resource data tables.
3273         -----------------------------------------------------------------------
3274 
3275         IF l_debug_mode = 'Y' THEN
3276             pa_debug.g_err_stage:='Deleting Data from all resource PLSql tables';
3277             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3278         END IF;
3279 
3280         l_trace_stage := 450;
3281 --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3282 
3283         -----------------------------------------------------------------------
3284         -- Repopulating all the resource data tables from the output parameter
3285         -- table l_resource_rec_tbl of the above API call pa_task_assignment_utils.
3286         -- Validate_Create_Assignment
3287         -----------------------------------------------------------------------
3288 
3289         IF l_debug_mode = 'Y' THEN
3290            pa_debug.g_err_stage:='Populating resource data tables from the output parameter table l_resource_rec_tbl';
3291            pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3292         END IF;
3293 
3294         FOR i IN l_resource_rec_tbl.FIRST .. l_resource_rec_tbl.LAST LOOP
3295             l_trace_stage := 460;
3296             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3297 
3298             IF l_resource_rec_tbl.EXISTS(i) THEN
3299 
3300                 IF l_resource_rec_tbl(i).resource_list_member_id = FND_API.G_MISS_NUM THEN
3301                     l_eligible_rlm_ids_tbl(i) := NULL;
3302                 ELSE
3303                     l_eligible_rlm_ids_tbl(i) := l_resource_rec_tbl(i).resource_list_member_id;
3304                 END IF;
3305 
3306                 IF l_resource_rec_tbl(i).resource_class_flag = FND_API.G_MISS_CHAR THEN
3307                     l_resource_class_flag_tbl(i) := NULL;
3308                 ELSE
3309                     l_resource_class_flag_tbl(i) := l_resource_rec_tbl(i).resource_class_flag;
3310                 END IF;
3311 
3312                 IF l_resource_rec_tbl(i).resource_class_code = FND_API.G_MISS_CHAR THEN
3313                     l_resource_class_code_tbl(i) := NULL;
3314                 ELSE
3315                     l_resource_class_code_tbl(i) := l_resource_rec_tbl(i).resource_class_code;
3316                 END IF;
3317 
3318                 IF l_resource_rec_tbl(i).resource_class_id = FND_API.G_MISS_NUM THEN
3319                     l_resource_class_id_tbl(i) := NULL;
3320                 ELSE
3321                     l_resource_class_id_tbl(i) := l_resource_rec_tbl(i).resource_class_id;
3322                 END IF;
3323 
3324                 IF l_resource_rec_tbl(i).res_type_code = FND_API.G_MISS_CHAR THEN
3325                     l_res_type_code_tbl(i) := NULL;
3326                 ELSE
3327                     l_res_type_code_tbl(i) := l_resource_rec_tbl(i).res_type_code;
3328                 END IF;
3329 
3330                 IF l_resource_rec_tbl(i).person_id = FND_API.G_MISS_NUM THEN
3331                     l_person_id_tbl(i) := NULL;
3332                 ELSE
3333                     l_person_id_tbl(i) := l_resource_rec_tbl(i).person_id;
3334                 END IF;
3335 
3336                 IF l_resource_rec_tbl(i).job_id = FND_API.G_MISS_NUM THEN
3337                     l_job_id_tbl(i) := NULL;
3338                 ELSE
3339                     l_job_id_tbl(i) := l_resource_rec_tbl(i).job_id;
3340                 END IF;
3341 
3342                 IF l_resource_rec_tbl(i).person_type_code = FND_API.G_MISS_CHAR THEN
3343                     l_person_type_code_tbl(i) := NULL;
3344                 ELSE
3345                     l_person_type_code_tbl(i) := l_resource_rec_tbl(i).person_type_code;
3346                 END IF;
3347 
3348                 IF l_resource_rec_tbl(i).bom_resource_id = FND_API.G_MISS_NUM THEN
3349                     l_bom_resource_id_tbl(i) := NULL;
3350                 ELSE
3351                     l_bom_resource_id_tbl(i) := l_resource_rec_tbl(i).bom_resource_id;
3352                 END IF;
3353 
3354                 IF l_resource_rec_tbl(i).inventory_item_id = FND_API.G_MISS_NUM THEN
3355                     l_inventory_item_id_tbl(i) := NULL;
3356                 ELSE
3357                     l_inventory_item_id_tbl(i) := l_resource_rec_tbl(i).inventory_item_id;
3358                 END IF;
3359 
3360                 IF l_resource_rec_tbl(i).item_category_id = FND_API.G_MISS_NUM THEN
3361                     l_item_category_id_tbl(i) := NULL;
3362                 ELSE
3363                     l_item_category_id_tbl(i) := l_resource_rec_tbl(i).item_category_id;
3364                 END IF;
3365 
3366                 IF l_resource_rec_tbl(i).project_role_id = FND_API.G_MISS_NUM THEN
3367                     l_project_role_id_tbl(i) := NULL;
3368                 ELSE
3369                     l_project_role_id_tbl(i) := l_resource_rec_tbl(i).project_role_id;
3370                 END IF;
3371 
3372                 IF l_resource_rec_tbl(i).organization_id = FND_API.G_MISS_NUM THEN
3373                     l_organization_id_tbl(i) := NULL;
3374                 ELSE
3375                     l_organization_id_tbl(i) := l_resource_rec_tbl(i).organization_id;
3376                 END IF;
3377 
3378                 IF l_resource_rec_tbl(i).fc_res_type_code = FND_API.G_MISS_CHAR THEN
3379                     l_fc_res_type_code_tbl(i) := NULL;
3380                 ELSE
3381                     l_fc_res_type_code_tbl(i) := l_resource_rec_tbl(i).fc_res_type_code;
3382                 END IF;
3383 
3384                 IF l_resource_rec_tbl(i).expenditure_type = FND_API.G_MISS_CHAR THEN
3385                     l_expenditure_type_tbl(i) := NULL;
3386                 ELSE
3387                     l_expenditure_type_tbl(i) := l_resource_rec_tbl(i).expenditure_type;
3388                 END IF;
3389 
3390                 IF l_resource_rec_tbl(i).expenditure_category = FND_API.G_MISS_CHAR THEN
3391                     l_expenditure_category_tbl(i) := NULL;
3392                 ELSE
3393                     l_expenditure_category_tbl(i) := l_resource_rec_tbl(i).expenditure_category;
3394                 END IF;
3395 
3396                 IF l_resource_rec_tbl(i).event_type = FND_API.G_MISS_CHAR THEN
3397                     l_event_type_tbl(i) := NULL;
3398                 ELSE
3399                     l_event_type_tbl(i) := l_resource_rec_tbl(i).event_type;
3400                 END IF;
3401 
3402                 IF l_resource_rec_tbl(i).revenue_category_code = FND_API.G_MISS_CHAR THEN
3403                     l_revenue_category_code_tbl(i) := NULL;
3404                 ELSE
3405                     l_revenue_category_code_tbl(i) := l_resource_rec_tbl(i).revenue_category_code;
3406                 END IF;
3407 
3408                 IF l_resource_rec_tbl(i).supplier_id = FND_API.G_MISS_NUM THEN
3409                     l_supplier_id_tbl(i) := NULL;
3410                 ELSE
3411                     l_supplier_id_tbl(i) := l_resource_rec_tbl(i).supplier_id;
3412                 END IF;
3413 
3414                 IF l_resource_rec_tbl(i).unit_of_measure = FND_API.G_MISS_CHAR THEN
3415                     l_unit_of_measure_tbl(i) := NULL;
3416                 ELSE
3417                     l_unit_of_measure_tbl(i) := l_resource_rec_tbl(i).unit_of_measure;
3418                 END IF;
3419 
3420                 IF l_resource_rec_tbl(i).spread_curve_id = FND_API.G_MISS_NUM THEN
3421                     l_spread_curve_id_tbl(i) := NULL;
3422                 ELSE
3423                     l_spread_curve_id_tbl(i) := l_resource_rec_tbl(i).spread_curve_id;
3424                 END IF;
3425 
3426                 IF l_resource_rec_tbl(i).etc_method_code = FND_API.G_MISS_CHAR THEN
3427                     l_etc_method_code_tbl(i) := NULL;
3428                 ELSE
3429                     l_etc_method_code_tbl(i) := l_resource_rec_tbl(i).etc_method_code;
3430                 END IF;
3431 
3432                 IF l_resource_rec_tbl(i).mfc_cost_type_id = FND_API.G_MISS_NUM THEN
3433                     l_mfc_cost_type_id_tbl(i) := NULL;
3434                 ELSE
3435                     l_mfc_cost_type_id_tbl(i) := l_resource_rec_tbl(i).mfc_cost_type_id;
3436                 END IF;
3437 
3438                 IF l_resource_rec_tbl(i).procure_resource_flag = FND_API.G_MISS_CHAR THEN
3439                     l_procure_resource_flag_tbl(i) := NULL;
3440                 ELSE
3441                     l_procure_resource_flag_tbl(i) := l_resource_rec_tbl(i).procure_resource_flag;
3442                 END IF;
3443 
3444                 IF l_resource_rec_tbl(i).incurred_by_res_flag = FND_API.G_MISS_CHAR THEN
3445                     l_incurred_by_res_flag_tbl(i) := NULL;
3446                 ELSE
3447                     l_incurred_by_res_flag_tbl(i) := l_resource_rec_tbl(i).incurred_by_res_flag;
3448                 END IF;
3449 
3450                 IF l_resource_rec_tbl(i).Incur_by_res_class_code = FND_API.G_MISS_CHAR THEN
3451                     l_Incur_by_res_class_code_tbl(i) := NULL;
3452                 ELSE
3453                     l_Incur_by_res_class_code_tbl(i) := l_resource_rec_tbl(i).Incur_by_res_class_code;
3454                 END IF;
3455 
3456                 IF l_resource_rec_tbl(i).Incur_by_role_id = FND_API.G_MISS_NUM THEN
3457                     l_Incur_by_role_id_tbl(i) := NULL;
3458                 ELSE
3459                     l_Incur_by_role_id_tbl(i) := l_resource_rec_tbl(i).Incur_by_role_id;
3460                 END IF;
3461 
3462                 IF l_resource_rec_tbl(i).named_role = FND_API.G_MISS_CHAR THEN
3463                     l_named_role_tbl(i) := NULL;
3464                 ELSE
3465                     l_named_role_tbl(i) := l_resource_rec_tbl(i).named_role;
3466                 END IF;
3467 
3468                 IF l_resource_rec_tbl(i).non_labor_resource = FND_API.G_MISS_CHAR THEN
3469                     l_non_labor_resource_tbl(i) := NULL;
3470                 ELSE
3471                     l_non_labor_resource_tbl(i) := l_resource_rec_tbl(i).non_labor_resource;
3472                 END IF;
3473 
3474                 IF l_resource_rec_tbl(i).resource_assignment_id = FND_API.G_MISS_NUM THEN
3475                     l_resource_assignment_id_tbl(i) := NULL;
3476                 ELSE
3477                     l_resource_assignment_id_tbl(i) := l_resource_rec_tbl(i).resource_assignment_id;
3478                 END IF;
3479 
3480                 IF l_resource_rec_tbl(i).assignment_description = FND_API.G_MISS_CHAR THEN
3481                     l_assignment_description_tbl(i) := NULL;
3482                 ELSE
3483                     l_assignment_description_tbl(i) := l_resource_rec_tbl(i).assignment_description;
3484                 END IF;
3485 
3486                 IF l_resource_rec_tbl(i).planning_resource_alias = FND_API.G_MISS_CHAR THEN
3487                     l_planning_resource_alias_tbl(i) := NULL;
3488                 ELSE
3489                     l_planning_resource_alias_tbl(i) := l_resource_rec_tbl(i).planning_resource_alias;
3490                 END IF;
3491 
3492                 IF l_resource_rec_tbl(i).resource_name = FND_API.G_MISS_CHAR THEN
3493                     l_resource_name_tbl(i) := NULL;
3494                 ELSE
3495                     l_resource_name_tbl(i) := l_resource_rec_tbl(i).resource_name;
3496                 END IF;
3497 
3498                 IF l_resource_rec_tbl(i).project_role_name = FND_API.G_MISS_CHAR THEN
3499                     l_project_role_name_tbl(i) := NULL;
3500                 ELSE
3501                     l_project_role_name_tbl(i) := l_resource_rec_tbl(i).project_role_name;
3502                 END IF;
3503 
3504                 IF l_resource_rec_tbl(i).organization_name = FND_API.G_MISS_CHAR THEN
3505                     l_organization_name_tbl(i) := NULL;
3506                 ELSE
3507                     l_organization_name_tbl(i) := l_resource_rec_tbl(i).organization_name;
3508                 END IF;
3509 
3510                 IF l_resource_rec_tbl(i).financial_category_code = FND_API.G_MISS_CHAR THEN
3511                     l_financial_category_code_tbl(i) := NULL;
3512                 ELSE
3513                     l_financial_category_code_tbl(i) := l_resource_rec_tbl(i).financial_category_code;
3514                 END IF;
3515 
3516                 IF l_resource_rec_tbl(i).project_assignment_id = FND_API.G_MISS_NUM THEN
3517                     l_project_assignment_id_tbl(i) := NULL;
3518                 ELSE
3519                     l_project_assignment_id_tbl(i) := l_resource_rec_tbl(i).project_assignment_id;
3520                 END IF;
3521 
3522               -- gboomina modified for bug 8586393 - start
3523                 /*IF l_resource_rec_tbl(i).use_task_schedule_flag = FND_API.G_MISS_CHAR THEN
3524                     l_use_task_schedule_flag_tbl(i) := NULL;
3525                 ELSE
3526                     l_use_task_schedule_flag_tbl(i) := l_resource_rec_tbl(i).use_task_schedule_flag;
3527                 END IF; */
3528                 --OPEN C2(p_project_id);
3529                 --FETCH C2 INTO l_use_task_schedule_flag;
3530                 --CLOSE C2;
3531                 --l_use_task_schedule_flag_tbl(i) := l_use_task_schedule_flag;
3532                 -- gboomina modified for bug 8586393 - end
3533 
3534                 -- rbruno bug 9468665  - start
3535                 -- set the default value only if use_task_schedule_flag value is G_MISS_CHAR
3536                 -- SPOKANAT for Bug 9759832 - start
3537                 IF l_resource_rec_tbl(i).use_task_schedule_flag = FND_API.G_MISS_CHAR then
3538                     l_use_task_schedule_flag_tbl(i) := NULL;
3539                 ELSE
3540                     l_use_task_schedule_flag_tbl(i) := l_resource_rec_tbl(i).use_task_schedule_flag;
3541                 END IF;
3542                 -- SPOKANAT for Bug 9759832 - end
3543                 -- rbruno bug 9468665  - end
3544 
3545                 IF l_resource_rec_tbl(i).planning_start_date = FND_API.G_MISS_DATE THEN
3546                     l_planning_start_date_tbl(i) := NULL;
3547                 ELSE
3548                     l_planning_start_date_tbl(i) := l_resource_rec_tbl(i).planning_start_date;
3549                 END IF;
3550 
3551                 IF l_resource_rec_tbl(i).planning_end_date = FND_API.G_MISS_DATE THEN
3552                     l_planning_end_date_tbl(i) := NULL;
3553                 ELSE
3554                     l_planning_end_date_tbl(i) := l_resource_rec_tbl(i).planning_end_date;
3555                 END IF;
3556 
3557                 IF l_resource_rec_tbl(i).schedule_start_date = FND_API.G_MISS_DATE THEN
3558                     l_schedule_start_date_tbl(i) := NULL;
3559                 ELSE
3560                     l_schedule_start_date_tbl(i) := l_resource_rec_tbl(i).schedule_start_date;
3561                 END IF;
3562 
3563                 IF l_resource_rec_tbl(i).schedule_end_date = FND_API.G_MISS_DATE THEN
3564                     l_schedule_end_date_tbl(i) := NULL;
3565                 ELSE
3566                     l_schedule_end_date_tbl(i) := l_resource_rec_tbl(i).schedule_end_date;
3567                 END IF;
3568 
3569                 IF l_resource_rec_tbl(i).supplier_name = FND_API.G_MISS_CHAR THEN
3570                     l_supplier_name_tbl(i) := NULL;
3571                 ELSE
3572                     l_supplier_name_tbl(i) := l_resource_rec_tbl(i).supplier_name;
3573                 END IF;
3574 
3575                 IF l_resource_rec_tbl(i).financial_category_name = FND_API.G_MISS_CHAR THEN
3576                     l_financial_category_name_tbl(i) := NULL;
3577                 ELSE
3578                     l_financial_category_name_tbl(i) := l_resource_rec_tbl(i).financial_category_name;
3579                 END IF;
3580 
3581                 IF l_resource_rec_tbl(i).sp_fixed_date = FND_API.G_MISS_DATE THEN
3582                     l_sp_fixed_date_tbl(i) := NULL;
3583                 ELSE
3584                     l_sp_fixed_date_tbl(i) := l_resource_rec_tbl(i).sp_fixed_date;
3585 -- Added validation rule for sp_fixed_date to lie between planning start date and planning end date for
3586 -- fixed curve spread curve id. - Bug 3607061 Starts. Please NOTE that fixed date spread curve id is
3587 -- SEEDED as 6, so we are able to hard code it below
3588 
3589                     IF l_debug_mode = 'Y' THEN
3590                        pa_debug.g_err_stage :='l_spread_curve_id_tbl - '||l_spread_curve_id_tbl(i);
3591                        pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3592 
3593                        pa_debug.g_err_stage :='l_sp_fixed_date_tbl'||l_sp_fixed_date_tbl(i);
3594                        pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3595 
3596                        pa_debug.g_err_stage :='l_planning_start_date_tbl'||l_planning_start_date_tbl(i);
3597                        pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3598 
3599                        pa_debug.g_err_stage :='l_planning_end_date_tbl'||l_planning_end_date_tbl(i);
3600                        pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3601                     END IF;
3602 
3603                     IF ((l_spread_curve_id_tbl(i) = l_fixed_date_sp_id) AND
3604                         (l_sp_fixed_date_tbl(i) IS NOT NULL) AND
3605                         (l_sp_fixed_date_tbl(i) NOT BETWEEN l_planning_start_date_tbl(i) AND l_planning_end_date_tbl(i)))THEN
3606                            IF l_debug_mode = 'Y' THEN
3607                               pa_debug.g_err_stage :='Sp Fixed Date not between planning start date and End Date';
3608                               pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3609                            END IF;
3610                        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3611                                             p_msg_name       => 'PA_FP_SP_FIXED_DATE_OUT');
3612                        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3613                     END IF;
3614 -- Bug 3607061 Ends
3615                 END IF;
3616 
3617                 IF l_resource_rec_tbl(i).burdened_rate_override = FND_API.G_MISS_NUM THEN
3618                     l_burdened_rate_override_tbl(i) := NULL;
3619                 ELSE
3620                     l_burdened_rate_override_tbl(i) := l_resource_rec_tbl(i).burdened_rate_override;
3621                 END IF;
3622 
3623                 IF l_resource_rec_tbl(i).cost_rate_override = FND_API.G_MISS_NUM THEN
3624                     l_cost_rate_override_tbl(i) := NULL;
3625                 ELSE
3626                     l_cost_rate_override_tbl(i) := l_resource_rec_tbl(i).cost_rate_override;
3627                 END IF;
3628 
3629                 IF l_resource_rec_tbl(i).billable_percent = FND_API.G_MISS_NUM THEN
3630                     l_billable_percent_tbl(i) := NULL;
3631                 ELSE
3632                     l_billable_percent_tbl(i) := l_resource_rec_tbl(i).billable_percent;
3633                 END IF;
3634 
3635                 IF l_resource_rec_tbl(i).override_currency_code = FND_API.G_MISS_CHAR THEN
3636                     l_override_currency_code_tbl(i) := NULL;
3637                 ELSE
3638                     l_override_currency_code_tbl(i) := l_resource_rec_tbl(i).override_currency_code;
3639                 END IF;
3640 
3641                 IF l_resource_rec_tbl(i).total_quantity = FND_API.G_MISS_NUM THEN
3642                     l_total_quantity_tbl(i) := NULL;
3643                 ELSE
3644                     l_total_quantity_tbl(i) := l_resource_rec_tbl(i).total_quantity;
3645                 END IF;
3646 
3647                 IF l_resource_rec_tbl(i).ATTRIBUTE_CATEGORY = FND_API.G_MISS_CHAR THEN
3648                     l_ATTRIBUTE_CATEGORY_tbl(i) := NULL;
3649                 ELSE
3650                     l_ATTRIBUTE_CATEGORY_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE_CATEGORY;
3651                 END IF;
3652 
3653                 IF l_resource_rec_tbl(i).ATTRIBUTE1 = FND_API.G_MISS_CHAR THEN
3654                     l_ATTRIBUTE1_tbl(i) := NULL;
3655                 ELSE
3656                     l_ATTRIBUTE1_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE1;
3657                 END IF;
3658 
3659                 IF l_resource_rec_tbl(i).ATTRIBUTE2 = FND_API.G_MISS_CHAR THEN
3660                     l_ATTRIBUTE2_tbl(i) := NULL;
3661                 ELSE
3662                     l_ATTRIBUTE2_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE2;
3663                 END IF;
3664 
3665                 IF l_resource_rec_tbl(i).ATTRIBUTE3 = FND_API.G_MISS_CHAR THEN
3666                     l_ATTRIBUTE3_tbl(i) := NULL;
3667                 ELSE
3668                     l_ATTRIBUTE3_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE3;
3669                 END IF;
3670 
3671                 IF l_resource_rec_tbl(i).ATTRIBUTE4 = FND_API.G_MISS_CHAR THEN
3672                     l_ATTRIBUTE4_tbl(i) := NULL;
3673                 ELSE
3674                     l_ATTRIBUTE4_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE4;
3675                 END IF;
3676 
3677                 IF l_resource_rec_tbl(i).ATTRIBUTE5 = FND_API.G_MISS_CHAR THEN
3678                     l_ATTRIBUTE5_tbl(i) := NULL;
3679                 ELSE
3680                     l_ATTRIBUTE5_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE5;
3681                 END IF;
3682 
3683                 IF l_resource_rec_tbl(i).ATTRIBUTE6 = FND_API.G_MISS_CHAR THEN
3684                     l_ATTRIBUTE6_tbl(i) := NULL;
3685                 ELSE
3686                     l_ATTRIBUTE6_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE6;
3687                 END IF;
3688 
3689                 IF l_resource_rec_tbl(i).ATTRIBUTE7 = FND_API.G_MISS_CHAR THEN
3690                     l_ATTRIBUTE7_tbl(i) := NULL;
3691                 ELSE
3692                     l_ATTRIBUTE7_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE7;
3693                 END IF;
3694 
3695                 IF l_resource_rec_tbl(i).ATTRIBUTE8 = FND_API.G_MISS_CHAR THEN
3696                     l_ATTRIBUTE8_tbl(i) := NULL;
3697                 ELSE
3698                     l_ATTRIBUTE8_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE8;
3699                 END IF;
3700 
3701                 IF l_resource_rec_tbl(i).ATTRIBUTE9 = FND_API.G_MISS_CHAR THEN
3702                     l_ATTRIBUTE9_tbl(i) := NULL;
3703                 ELSE
3704                     l_ATTRIBUTE9_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE9;
3705                 END IF;
3706 
3707                 IF l_resource_rec_tbl(i).ATTRIBUTE10 = FND_API.G_MISS_CHAR THEN
3708                     l_ATTRIBUTE10_tbl(i) := NULL;
3709                 ELSE
3710                     l_ATTRIBUTE10_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE10;
3711                 END IF;
3712 
3713                 IF l_resource_rec_tbl(i).ATTRIBUTE11 = FND_API.G_MISS_CHAR THEN
3714                     l_ATTRIBUTE11_tbl(i) := NULL;
3715                 ELSE
3716                     l_ATTRIBUTE11_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE11;
3717                 END IF;
3718 
3719                 IF l_resource_rec_tbl(i).ATTRIBUTE12 = FND_API.G_MISS_CHAR THEN
3720                     l_ATTRIBUTE12_tbl(i) := NULL;
3721                 ELSE
3722                     l_ATTRIBUTE12_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE12;
3723                 END IF;
3724 
3725                 IF l_resource_rec_tbl(i).ATTRIBUTE13 = FND_API.G_MISS_CHAR THEN
3726                     l_ATTRIBUTE13_tbl(i) := NULL;
3727                 ELSE
3728                     l_ATTRIBUTE13_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE13;
3729                 END IF;
3730 
3731                 IF l_resource_rec_tbl(i).ATTRIBUTE14 = FND_API.G_MISS_CHAR THEN
3732                     l_ATTRIBUTE14_tbl(i) := NULL;
3733                 ELSE
3734                     l_ATTRIBUTE14_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE14;
3735                 END IF;
3736 
3737                 IF l_resource_rec_tbl(i).ATTRIBUTE15 = FND_API.G_MISS_CHAR THEN
3738                     l_ATTRIBUTE15_tbl(i) := NULL;
3739                 ELSE
3740                     l_ATTRIBUTE15_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE15;
3741                 END IF;
3742 
3743                 IF l_resource_rec_tbl(i).ATTRIBUTE16 = FND_API.G_MISS_CHAR THEN
3744                     l_ATTRIBUTE16_tbl(i) := NULL;
3745                 ELSE
3746                     l_ATTRIBUTE16_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE16;
3747                 END IF;
3748 
3749                 IF l_resource_rec_tbl(i).ATTRIBUTE17 = FND_API.G_MISS_CHAR THEN
3750                     l_ATTRIBUTE17_tbl(i) := NULL;
3751                 ELSE
3752                     l_ATTRIBUTE17_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE17;
3753                 END IF;
3754 
3755                 IF l_resource_rec_tbl(i).ATTRIBUTE18 = FND_API.G_MISS_CHAR THEN
3756                     l_ATTRIBUTE18_tbl(i) := NULL;
3757                 ELSE
3758                     l_ATTRIBUTE18_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE18;
3759                 END IF;
3760 
3761                 IF l_resource_rec_tbl(i).ATTRIBUTE19 = FND_API.G_MISS_CHAR THEN
3762                     l_ATTRIBUTE19_tbl(i) := NULL;
3763                 ELSE
3764                     l_ATTRIBUTE19_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE19;
3765                 END IF;
3766 
3767                 IF l_resource_rec_tbl(i).ATTRIBUTE20 = FND_API.G_MISS_CHAR THEN
3768                     l_ATTRIBUTE20_tbl(i) := NULL;
3769                 ELSE
3770                     l_ATTRIBUTE20_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE20;
3771                 END IF;
3772                 IF l_resource_rec_tbl(i).ATTRIBUTE21 = FND_API.G_MISS_CHAR THEN
3773                     l_ATTRIBUTE21_tbl(i) := NULL;
3774                 ELSE
3775                     l_ATTRIBUTE21_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE21;
3776                 END IF;
3777 
3778                 IF l_resource_rec_tbl(i).ATTRIBUTE22 = FND_API.G_MISS_CHAR THEN
3779                     l_ATTRIBUTE22_tbl(i) := NULL;
3780                 ELSE
3781                     l_ATTRIBUTE22_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE22;
3782                 END IF;
3783 
3784                 IF l_resource_rec_tbl(i).ATTRIBUTE23 = FND_API.G_MISS_CHAR THEN
3785                     l_ATTRIBUTE23_tbl(i) := NULL;
3786                 ELSE
3787                     l_ATTRIBUTE23_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE23;
3788                 END IF;
3789 
3790                 IF l_resource_rec_tbl(i).ATTRIBUTE24 = FND_API.G_MISS_CHAR THEN
3791                     l_ATTRIBUTE24_tbl(i) := NULL;
3792                 ELSE
3793                     l_ATTRIBUTE24_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE24;
3794                 END IF;
3795 
3796                 IF l_resource_rec_tbl(i).ATTRIBUTE25 = FND_API.G_MISS_CHAR THEN
3797                     l_ATTRIBUTE25_tbl(i) := NULL;
3798                 ELSE
3799                     l_ATTRIBUTE25_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE25;
3800                 END IF;
3801 
3802                 IF l_resource_rec_tbl(i).ATTRIBUTE26 = FND_API.G_MISS_CHAR THEN
3803                     l_ATTRIBUTE26_tbl(i) := NULL;
3804                 ELSE
3805                     l_ATTRIBUTE26_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE26;
3806                 END IF;
3807 
3808                 IF l_resource_rec_tbl(i).ATTRIBUTE27 = FND_API.G_MISS_CHAR THEN
3809                     l_ATTRIBUTE27_tbl(i) := NULL;
3810                 ELSE
3811                     l_ATTRIBUTE27_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE27;
3812                 END IF;
3813 
3814                 IF l_resource_rec_tbl(i).ATTRIBUTE28 = FND_API.G_MISS_CHAR THEN
3815                     l_ATTRIBUTE28_tbl(i) := NULL;
3816                 ELSE
3817                     l_ATTRIBUTE28_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE28;
3818                 END IF;
3819 
3820                 IF l_resource_rec_tbl(i).ATTRIBUTE29 = FND_API.G_MISS_CHAR THEN
3821                     l_ATTRIBUTE29_tbl(i) := NULL;
3822                 ELSE
3823                     l_ATTRIBUTE29_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE29;
3824                 END IF;
3825 
3826                 IF l_resource_rec_tbl(i).ATTRIBUTE30 = FND_API.G_MISS_CHAR THEN
3827                     l_ATTRIBUTE30_tbl(i) := NULL;
3828                 ELSE
3829                     l_ATTRIBUTE30_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE30;
3830                 END IF;
3831 
3832                 IF l_resource_rec_tbl(i).UNPLANNED_FLAG = FND_API.G_MISS_CHAR THEN
3833                     l_UNPLANNED_FLAG_TBL(i) := NULL;
3834                 ELSE
3835                     l_UNPLANNED_FLAG_TBL(i) := l_resource_rec_tbl(i).UNPLANNED_FLAG;
3836                 END IF;
3837 
3838                 IF l_resource_rec_tbl(i).scheduled_delay = FND_API.G_MISS_NUM THEN
3839                     l_scheduled_delay(i) := NULL;
3840                 ELSE
3841                     l_scheduled_delay(i) := l_resource_rec_tbl(i).scheduled_delay;
3842                 END IF;
3843 
3844 
3845             END IF;
3846             l_trace_stage := 470;
3847         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3848         END LOOP;
3849         l_trace_stage := 480;
3850         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3851 
3852         ----------------------------------------------------------------------------
3853         -- Now derive the resource_assignment id for all the task_element_version_id
3854         -- based on the resource_class_code(l_del_task_level_rec_code_tbl)  to be
3855         -- 'PEOPLE'.
3856         -- The resource_assignment_id is bulk collected into a PLSql table and then
3857         -- All data is deleted in bulk from pa_budget_lines and pa_resource_assignment
3858         -- based on the resource_assignment_id
3859 
3860         --***************************************************************************************
3861         -- Bug 3749516 resource_class_code(l_del_task_level_rec_code_tbl) will not be 'EQUIPMENT'
3862         -- REMOVING CODE BELOW FOR SAME
3863         --***************************************************************************************
3864         ------------------------------------------------------------------------------
3865 
3866         IF l_debug_mode = 'Y' THEN
3867            pa_debug.g_err_stage:='data is deleted in bulk from pa_budget_lines and pa_resource_assignment  based on the resource_assignment_id ';
3868            pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3869         END IF;
3870 
3871     END IF;
3872     --------------------------------------------------------------------------
3873     -- Processing for p_context = TASK_ASSIGNMENTS End Here
3874     --------------------------------------------------------------------------
3875 
3876     ------------------------------------------------------------------------------------------------
3877     -- Deriving Time Phased Code based on the budget version id and setting the spread amount flad
3878     -------------------------------------------------------------------------------------------------
3879     IF l_debug_mode = 'Y' THEN
3880         pa_debug.g_err_stage:='Deriving time phased code ';
3881         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3882     END IF;
3883 
3884     l_time_phased_code := pa_fin_plan_utils.get_time_phased_code(p_budget_version_id);
3885 
3886     IF l_debug_mode = 'Y' THEN
3887         pa_debug.g_err_stage:='Deriving time phased code l_time_phased_code: '||l_time_phased_code;
3888         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3889     END IF;
3890     l_trace_stage := 550;
3891     --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3892 
3893     IF ((l_time_phased_code = PA_FP_CONSTANTS_PKG.G_PERIOD_TYPE_PA) OR (l_time_phased_code = PA_FP_CONSTANTS_PKG.G_PERIOD_TYPE_GL)) THEN
3894         l_spread_amounts_for_ver := 'Y';
3895     ELSE
3896         l_spread_amounts_for_ver := 'N';
3897     END IF;
3898 
3899     l_trace_stage := 560;
3900     --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3901 
3902     ------------------------------------------------------------------------------------------------
3903     -- Deriving Proj Element Id based on element version id
3904     -------------------------------------------------------------------------------------------------
3905     IF l_debug_mode = 'Y' THEN
3906         pa_debug.g_err_stage:='Deriving Proj Element Id based on element version id';
3907         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3908     END IF;
3909 
3910     FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
3911         l_trace_stage := 570;
3912         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3913         IF p_task_elem_version_id_tbl(i) <> 0 THEN
3914             OPEN c_proj_element_id(p_task_elem_version_id_tbl(i));
3915             l_trace_stage := 580;
3916             --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3917             FETCH c_proj_element_id INTO l_proj_element_id;
3918             IF l_debug_mode = 'Y' THEN
3919                 pa_debug.g_err_stage:='Deriving Proj Element Id based on element version id l_proj_element_id : '|| l_proj_element_id;
3920                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3921             END IF;
3922             l_proj_element_id_tbl(i) := l_proj_element_id;
3923             CLOSE c_proj_element_id;
3924 
3925 			--Bug#16200605 For CBS enabled project, need to validate validate whether
3926 			--for the provide cost code alternate task id is generated with the
3927 			-- corresponding task.
3928 			IF (l_prj_cbs_enabled = 'Y' AND p_cbs_element_id_tbl.count>0) THEN
3929 				  OPEN check_cbs_alt_tsk_gen(l_proj_element_id, p_cbs_element_id_tbl(i));
3930 				  FETCH check_cbs_alt_tsk_gen INTO L_ALT_TSK_TEMP;
3931 				  CLOSE check_cbs_alt_tsk_gen;
3932 						IF L_ALT_TSK_TEMP = 'Y' THEN
3933 							l_alt_tsk_valid := 'Y'; -- CBS enabled
3934 						ELSE
3935 							l_alt_tsk_valid := 'N'; -- CBS disabled
3936 						END IF;
3937 						IF l_alt_tsk_valid = 'N' THEN
3938 							IF l_debug_mode = 'Y' THEN
3939 								pa_debug.g_err_stage:='Cost Code for the given task is not valid : '|| l_proj_element_id;
3940 								pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3941 							END IF;
3942 						END IF;
3943 			END IF;
3944 
3945         ELSE
3946             l_proj_element_id_tbl(i):=0;
3947         END IF;
3948         l_trace_stage := 590;
3949         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3950     END LOOP;
3951 
3952     IF l_debug_mode = 'Y' THEN
3953         pa_debug.g_err_stage:='Deriving Proj Element Id based on element version id l_proj_element_id_tbl cnt : '|| l_proj_element_id_tbl.COUNT;
3954         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3955     END IF;
3956     l_trace_stage := 600;
3957     --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3958 
3959     ---------------------------------------------------------------
3960     -- For p_context = BUDGET or FORECAST
3961     -- Deriving start date and end date for task_element_version_id
3962     ---------------------------------------------------------------
3963     IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET) OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST))  THEN
3964         l_trace_stage := 610;
3965         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3966 
3967         IF l_debug_mode = 'Y' THEN
3968             pa_debug.g_err_stage:='Deriving start date for task_element_version_ids';
3969             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3970         END IF;
3971 
3972         -- Bug 3793623 - Added new params p_planning_start_date_tbl and p_planning_end_date_tbl
3973         PA_PLANNING_TRANSACTION_UTILS.get_default_planning_dates
3974         ( p_project_id                      => p_project_id
3975          ,p_element_version_id_tbl          => p_task_elem_version_id_tbl
3976          ,p_project_structure_version_id    => PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_project_id => p_project_id )
3977          ,p_planning_start_date_tbl         => p_planning_start_date_tbl
3978          ,p_planning_end_date_tbl           => p_planning_end_date_tbl
3979          ,x_planning_start_date_tbl         => l_start_date_tbl
3980          ,x_planning_end_date_tbl           => l_compl_date_tbl
3981          ,x_msg_data                        => x_msg_data
3982          ,x_msg_count                       => x_msg_count
3983          ,x_return_status                   => x_return_status  );
3984 
3985         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3986 
3987              IF l_debug_mode = 'Y' THEN
3988                    pa_debug.g_err_stage:='Called API pafpptub.get_default_planning_dates returned error';
3989                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ',pa_debug.g_err_stage, 3);
3990              END IF;
3991              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3992         END IF;
3993 
3994         l_trace_stage := 710;
3995         --      hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3996     END IF;
3997     l_trace_stage := 720;
3998 --      hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3999 
4000     -----------------------------------------------------------------------------------------------------
4001     -- BULK INSERTING DATA INTO PA_RESOURCE_ASSIGNMENTS--------------------------------------------------
4002     -----------------------------------------------------------------------------------------------------
4003     -- Loop throught the task element version id table and do a bulk insert in to pa_resource_assignments
4004     -- 1. In the context of WORKPLAN, Loop for p_task_element_version_id_tbl, and insert into pa_resource
4005     --    assignment. l_elligble_rlm_ids will only have rlm id for 'PEOPLE' resource class. so a local
4006     --    index l_ppl_index(=1) is used for resource data. Data is inserted in pa_resource_assignments
4007     --    only if quanity dat ais present. this check is done and eligible data to be inserted is fetched
4008     --    in local plsql tables.
4009     --    -- Bug 3749516 removing equipment_quantity reference - refer prev. code in source control for
4010     --    -- reference
4011     -- 2. Else if the context is not workplan then,records is inserted
4012     --    irrespective of the value of quantity.The bulk insert procedure in pa_fp_elements_pub is used
4013     --    for this. If l_spread_amts_for_ver = 'Y'For each record inserted prepare a pl/sql table containing
4014     --   'Y' if the record is inserted and the amount exists(note that this amount can be raw cost, burdened
4015     --   cost, quantity in the case of Budget/Forecast and quantity in the case of Task Assignment).If the
4016     --   amount does not exist then the pl/sql table should contain 'N'. This will be used as the paramter
4017     --   for p_spread_amt_flags parameter in the calculate API (A separate loop may be required for this)
4018     --   Please note that in the context of TASK ASSIGNMENT, if some value is being returned by the TA
4019     --   validation API then that value should be used.
4020     -----------------------------------------------------------------------------------------------------
4021 
4022     IF l_debug_mode = 'Y' THEN
4023         pa_debug.g_err_stage:='BULK INSERTING DATA INTO PA_RESOURCE_ASSIGNMENTS ';
4024         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4025     END IF;
4026 
4027     l_call_calc_api := 'N';
4028 
4029     OPEN  get_pc_code;
4030     FETCH get_pc_code
4031     INTO  l_proj_curr_code, l_proj_func_curr_code;
4032     CLOSE get_pc_code;
4033 
4034     ---------------------------------------------------------------------
4035     -- These _rlm tables have been extented to the length of rlm_id table
4036     -- and they will be used for insert in Budget/Forecast context when
4037     -- One to One Mapping Flag is passed as Y
4038     -- Bug 3719918 and Bug 3665097
4039     ----------------------------------------------------------------------
4040     IF (p_one_to_one_mapping_flag = 'Y' AND
4041        (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR
4042         p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
4043         p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST))THEN
4044         l_task_elem_rlm_tbl := p_task_elem_version_id_tbl;
4045         l_proj_elem_rlm_tbl := l_proj_element_id_tbl;
4046 		IF l_prj_cbs_enabled = 'Y' THEN
4047 			l_cbs_id_rlm_tbl := p_cbs_element_id_tbl;--Bug#16200605
4048 		END IF;
4049     END IF;
4050 
4051     -- Bug 3719918
4052     -- If One ONe to One Mapping Flag is Y in Bugdet and Forecast Context then ..
4053     -- there might be duplicate decords for resource assignments present in the
4054     -- IN tables correspoinging to different currency code.
4055     -- Eg. p_one_to_one_mapping_flag - 'Y'
4056     --     Task elem ver id - t1,t1,t2
4057     --     RLM              - r1,r1,r2
4058     --     Currency Code    - c1,c2,c2
4059     -- in this case ..2 resource assignments are created - t1r1 and t2r2
4060     -- calculate is called for three lines .. t1r1c1,t1r1c2,t2r2c2
4061     -- the below logic is used in BF context and will reduce the input data to the
4062     -- following form --   Task elem ver id : t1,t2 and RLM : r1,r2
4063     -- This will be used in the insert statment for B/F
4064 
4065     IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
4066         p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST ) THEN
4067 
4068         IF (p_one_to_one_mapping_flag = 'Y') THEN
4069 
4070             l_bf_start_date_tbl        := l_start_date_tbl;
4071             l_bf_compl_date_tbl        := l_compl_date_tbl;
4072             l_bf_proj_elem_tbl         := l_proj_element_id_tbl;
4073             l_bf_quantity_tbl          :=  p_quantity_tbl;
4074             l_bf_currency_code_tbl     :=  p_currency_code_tbl;
4075             l_bf_raw_cost_tbl          :=  p_raw_cost_tbl;
4076             l_bf_burdened_cost_tbl     :=  p_burdened_cost_tbl;
4077             l_bf_revenue_tbl           :=  p_revenue_tbl;
4078             l_bf_cost_rate_tbl         :=  p_cost_rate_tbl;
4079             l_bf_bill_rate_tbl         :=  p_bill_rate_tbl ;
4080             l_bf_burdened_rate_tbl     :=  p_burdened_rate_tbl;
4081             l_ATTRIBUTE1_tbl           :=  p_attribute1;
4082             l_ATTRIBUTE2_tbl           :=  p_attribute2;
4083             l_ATTRIBUTE3_tbl           :=  p_attribute3;
4084             l_ATTRIBUTE4_tbl           :=  p_attribute4;
4085             l_ATTRIBUTE5_tbl           :=  p_attribute5;
4086             l_ATTRIBUTE6_tbl           :=  p_attribute6;
4087             l_ATTRIBUTE7_tbl           :=  p_attribute7;
4088             l_ATTRIBUTE8_tbl           :=  p_attribute8;
4089             l_ATTRIBUTE9_tbl           :=  p_attribute9;
4090             l_ATTRIBUTE10_tbl           :=  p_attribute10;
4091             l_ATTRIBUTE11_tbl           :=  p_attribute11;
4092             l_ATTRIBUTE12_tbl           :=  p_attribute12;
4093             l_ATTRIBUTE13_tbl           :=  p_attribute13;
4094             l_ATTRIBUTE14_tbl           :=  p_attribute14;
4095             l_ATTRIBUTE15_tbl           :=  p_attribute15;
4096             l_ATTRIBUTE16_tbl           :=  p_attribute16;
4097             l_ATTRIBUTE17_tbl           :=  p_attribute17;
4098             l_ATTRIBUTE18_tbl           :=  p_attribute18;
4099             l_ATTRIBUTE19_tbl           :=  p_attribute19;
4100             l_ATTRIBUTE20_tbl           :=  p_attribute20;
4101             l_ATTRIBUTE21_tbl           :=  p_attribute21;
4102             l_ATTRIBUTE22_tbl           :=  p_attribute22;
4103             l_ATTRIBUTE23_tbl           :=  p_attribute23;
4104             l_ATTRIBUTE24_tbl           :=  p_attribute24;
4105             l_ATTRIBUTE25_tbl           :=  p_attribute25;
4106             l_ATTRIBUTE26_tbl           :=  p_attribute26;
4107             l_ATTRIBUTE27_tbl           :=  p_attribute27;
4108              l_ATTRIBUTE28_tbl           :=  p_attribute28;
4109               l_ATTRIBUTE29_tbl           :=  p_attribute29;
4110                l_ATTRIBUTE30_tbl           :=  p_attribute30;
4111 
4112 
4113         END IF;--IF (p_one_to_one_mapping_flag = 'Y') THEN
4114 
4115         --The l_bf<amounts> tbls should have elements equal in no to l_rlm_id_no_of_rows as these tbls will be used
4116         --in the FORALL insert which will loop thru the rlm id pl/sql tbl. Note that they are used only when
4117         --p_one_to_one_mapping_flag is Y
4118 
4119         l_bf_quantity_tbl.extend(l_rlm_id_no_of_rows-l_bf_quantity_tbl.count);
4120         l_bf_currency_code_tbl.extend(l_rlm_id_no_of_rows-l_bf_currency_code_tbl.count);
4121         l_bf_raw_cost_tbl.extend(l_rlm_id_no_of_rows-l_bf_raw_cost_tbl.count);
4122         l_bf_burdened_cost_tbl.extend(l_rlm_id_no_of_rows-l_bf_burdened_cost_tbl.count);
4123         l_bf_revenue_tbl.extend(l_rlm_id_no_of_rows-l_bf_revenue_tbl.count);
4124         l_bf_cost_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_cost_rate_tbl.count);
4125         l_bf_bill_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_bill_rate_tbl.count);
4126         l_bf_burdened_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_burdened_rate_tbl.count);
4127 
4128     END IF; -- IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
4129 
4130     ----------------------------------------------------
4131     -- THESE DEBUG MESSAGES ARE BEING PLACED HERE ONLY FOR
4132     -- REFERENCE SO THAT THEY CAN BE USED WHEN AND WHERE
4133     -- NEEDED FOR DEBUGGIND ISSUE WITH BULK DTA INSERTION.
4134     -----------------------------------------------------
4135                 /*
4136                 pa_debug.g_err_stage:='l_proj_element_id_tbl :'||l_proj_element_id_tbl.COUNT;
4137                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4138                 pa_debug.g_err_stage:='l_unit_of_measure_tbl :'||l_unit_of_measure_tbl.COUNT;
4139                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4140                 pa_debug.g_err_stage:='p_task_elem_version_id_tbl :'||p_task_elem_version_id_tbl.COUNT;
4141                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4142                 pa_debug.g_err_stage:='l_start_date_tbl :'||p_start_date_tbl.COUNT;
4143                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4144                 pa_debug.g_err_stage:='l_end_date_tbl :'||p_end_date_tbl.COUNT;
4145                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4146                 pa_debug.g_err_stage:='l_etc_method_code_tbl :'||l_etc_method_code_tbl.COUNT;
4147                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4148                 pa_debug.g_err_stage:='l_res_type_code_tbl :'||l_res_type_code_tbl.COUNT;
4149                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4150                 pa_debug.g_err_stage:='l_fc_res_type_code_tbl :'||l_fc_res_type_code_tbl.COUNT;
4151                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4152                 pa_debug.g_err_stage:='l_resource_class_code_tbl :'||l_resource_class_code_tbl.COUNT;
4153                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4154                 pa_debug.g_err_stage:='l_organization_id_tbl :'||l_organization_id_tbl.COUNT;
4155                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4156                 pa_debug.g_err_stage:='l_job_id_tbl :'||l_job_id_tbl.COUNT;
4157                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4158                 pa_debug.g_err_stage:='l_person_id_tbl :'||l_person_id_tbl.COUNT;
4159                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4160                 pa_debug.g_err_stage:='l_revenue_category_code_tbl :'||l_revenue_category_code_tbl.COUNT;
4161                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4162                 pa_debug.g_err_stage:='l_expenditure_type_tbl :'||l_expenditure_type_tbl.COUNT;
4163                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4164                 pa_debug.g_err_stage:='l_expenditure_category_tbl :'||l_expenditure_category_tbl.COUNT;
4165                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4166                 pa_debug.g_err_stage:='l_non_labor_resource_tbl :'||l_non_labor_resource_tbl.COUNT;
4167                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4168                 pa_debug.g_err_stage:='l_event_type_tbl :'||l_event_type_tbl.COUNT;
4169                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4170                 pa_debug.g_err_stage:='l_supplier_id_tbl :'||l_supplier_id_tbl.COUNT;
4171                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4172                 pa_debug.g_err_stage:='l_inventory_item_id_tbl :'||l_inventory_item_id_tbl.COUNT;
4173                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4174                 pa_debug.g_err_stage:='l_bom_resource_id_tbl :'||l_bom_resource_id_tbl.COUNT;
4175                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4176                 pa_debug.g_err_stage:='l_inventory_item_id_tbl :'||l_inventory_item_id_tbl.COUNT;
4177                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4178                 pa_debug.g_err_stage:='l_item_category_id_tbl :'||l_item_category_id_tbl.COUNT;
4179                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4180                 pa_debug.g_err_stage:='l_mfc_cost_type_id_tbl :'||l_mfc_cost_type_id_tbl.COUNT;
4181                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4182                 pa_debug.g_err_stage:='l_rate_expenditure_type_tbl :'||l_rate_expenditure_type_tbl.COUNT;
4183                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4184                 pa_debug.g_err_stage:='l_rate_func_curr_code_tbl :'||l_rate_func_curr_code_tbl.COUNT;
4185                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4186                 pa_debug.g_err_stage:='l_rate_based_flag_tbl :'||l_rate_based_flag_tbl.COUNT;
4187                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4188                 pa_debug.g_err_stage:='l_resource_class_flag_tbl :'||l_resource_class_flag_tbl.COUNT;
4189                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4190                 pa_debug.g_err_stage:='l_named_role_tbl :'||l_named_role_tbl.COUNT;
4191                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4192                 pa_debug.g_err_stage:='l_incur_by_res_class_code_tbl :'||l_incur_by_res_class_code_tbl.COUNT;
4193                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4194                 pa_debug.g_err_stage:='l_budget_version_id :'||l_budget_version_id;
4195                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4196                 pa_debug.g_err_stage:='p_project_id :'||p_project_id;
4197                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4198                 pa_debug.g_err_stage:='task_id :'||l_proj_element_id_tbl(i);
4199                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4200                 pa_debug.g_err_stage:='project_assignment_id : -1';
4201                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4202                 pa_debug.g_err_stage:='RESOURCE_LIST_MEMBER_ID :'||l_people_res_class_rlm_id;
4203                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);*/
4204 
4205                 /*    l_trace_stage := 761;
4206                 hr_utility.trace('l_proj_element_id_tbl(i) => '||to_char(l_proj_element_id_tbl(i)));
4207                 hr_utility.trace('l_unit_of_measure_tbl(l_ppl_index) => '||to_char(l_unit_of_measure_tbl(l_ppl_index)));
4208                 hr_utility.trace('p_task_elem_version_id_tbl(i) => '||to_char(p_task_elem_version_id_tbl(i)));
4209                 hr_utility.trace('p_start_date_tbl(i) => '||to_char(p_start_date_tbl(i)));
4210                 hr_utility.trace('p_end_date_tbl(i) => '||to_char(p_end_date_tbl(i)));
4211                 hr_utility.trace(' l_spread_curve_id_tbl(l_ppl_index) => '||to_char(l_spread_curve_id_tbl(l_ppl_index)));
4212                 hr_utility.trace('l_etc_method_code_tbl(l_ppl_index) => '||to_char(l_etc_method_code_tbl(l_ppl_index)));
4213                 hr_utility.trace('l_res_type_code_tbl(l_ppl_index) => '||to_char(l_res_type_code_tbl(l_ppl_index)));
4214                 hr_utility.trace('l_fc_res_type_code_tbl(l_ppl_index) => '||to_char(l_fc_res_type_code_tbl(l_ppl_index)));
4215                 hr_utility.trace('l_resource_class_code_tbl(l_ppl_index) => '||to_char(l_resource_class_code_tbl(l_ppl_index)));
4216                 hr_utility.trace('l_organization_id_tbl(l_ppl_index) => '||to_char(l_organization_id_tbl(l_ppl_index)));
4217                 hr_utility.trace('l_job_id_tbl(l_ppl_index) => '||to_char(l_job_id_tbl(l_ppl_index)));
4218                 hr_utility.trace('l_person_id_tbl(l_ppl_index) => '||to_char(l_person_id_tbl(l_ppl_index)));
4219                 hr_utility.trace('l_expenditure_type_tbl(l_ppl_index) => '||to_char(l_expenditure_type_tbl(l_ppl_index)));
4220                 hr_utility.trace('l_expenditure_category_tbl(l_ppl_index) => '||to_char(l_expenditure_category_tbl(l_ppl_index)));
4221                 hr_utility.trace('l_revenue_category_code_tbl(l_ppl_index) => '||to_char(l_revenue_category_code_tbl(l_ppl_index)));
4222                 hr_utility.trace('l_event_type_tbl(l_ppl_index) => '||to_char(l_event_type_tbl(l_ppl_index)));
4223                 hr_utility.trace('l_supplier_id_tbl(l_ppl_index) => '||to_char(l_supplier_id_tbl(l_ppl_index)));
4224                 hr_utility.trace('l_non_labor_resource_tbl(l_ppl_index) => '||to_char(l_non_labor_resource_tbl(l_ppl_index)));
4225                 hr_utility.trace('l_bom_resource_id_tbl(l_ppl_index) => '||to_char(l_bom_resource_id_tbl(l_ppl_index)));
4226                 hr_utility.trace('l_inventory_item_id_tbl(l_ppl_index) => '||to_char(l_inventory_item_id_tbl(l_ppl_index)));
4227                 hr_utility.trace('l_mfc_cost_type_id_tbl(l_ppl_indexj) => '||to_char(l_mfc_cost_type_id_tbl(l_ppl_indexj)));
4228                 hr_utility.trace('l_rate_expenditure_type_tbl(l_ppl_indexj) => '||to_char(l_rate_expenditure_type_tbl(l_ppl_index)));
4229                 hr_utility.trace('l_rate_based_flag_tbl(l_ppl_index) => '||to_char(l_rate_based_flag_tbl(l_ppl_index)));
4230                 hr_utility.trace('l_rate_func_curr_code_tbl(l_ppl_index) => '||to_char(l_rate_func_curr_code_tbl(l_ppl_index)));
4231                 hr_utility.trace('l_incur_by_res_class_code_tbl(l_ppl_index) => '||to_char(l_incur_by_res_class_code_tbl(l_ppl_index)));
4232                 hr_utility.trace('l_resource_class_flag_tbl(l_ppl_index) => '||to_char(l_resource_class_flag_tbl(l_ppl_index)));
4233                 hr_utility.trace('l_named_role_tbl(l_ppl_index) => '||to_char(l_named_role_tbl(l_ppl_index)));*/
4234 
4235     --------------------------------------------
4236     -- for p_context - WORKPLAN
4237     --------------------------------------------
4238     IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
4239 
4240         -- Bug 3749516 Changing All reference of l_ppl_equip_index to l_ppl_index below
4241         l_ppl_index:=1; --This will be used in the bulk insert for people -- -- Bug 3749516
4242 
4243         IF l_debug_mode = 'Y' THEN
4244             pa_debug.g_err_stage:='BULK INSERTING DATA - p_context - Workplan :'||p_context ;
4245             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4246 
4247             pa_debug.g_err_stage:='BULK INSERTING Workplan DATA - rlm id :'||l_eligible_rlm_ids_tbl(l_ppl_index) ;
4248             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,6);
4249         END IF;
4250         -- gboomina Bug 8586393 - start
4251         -- Get 'Assignment same as Task Duration' flag from workplan attribute
4252         -- and default it for hidden task assignments
4253         OPEN C2(p_project_id);
4254         FETCH C2 INTO l_use_task_schedule_flag;
4255         CLOSE C2;
4256         -- gboomina Bug 8586393 - end
4257 
4258         FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
4259             IF ((p_planned_people_effort_tbl.EXISTS(i)) AND
4260                 (nvl(p_planned_people_effort_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) AND
4261                 /* bug fix:5726773 (p_planned_people_effort_tbl(i) > 0)) THEN*/
4262  	        (p_planned_people_effort_tbl(i) is NOT NULL)) THEN
4263                  l_ins_proj_element_id_tbl(l_ins_index)          :=  l_proj_element_id_tbl(i);
4264                  l_ins_task_elem_version_id_tbl(l_ins_index)     :=  p_task_elem_version_id_tbl(i);
4265 				 IF(p_cbs_element_id_tbl.EXISTS(i)) THEN  --bug#16876221
4266 					l_ins_cbs_element_id_tbl(l_ins_index)           :=  p_cbs_element_id_tbl(i); --satya
4267 				 ELSE
4268 					l_ins_cbs_element_id_tbl(l_ins_index)           :=  NULL; --satya
4269 				 END IF;
4270 
4271                  l_ins_start_date_tbl(l_ins_index)               :=  p_start_date_tbl(i);
4272                  l_ins_end_date_tbl(l_ins_index)                 :=  p_end_date_tbl(i);
4273                  l_ins_cal_people_effort_tbl(l_ins_index)        :=  p_planned_people_effort_tbl(i);
4274                  -- gboomina Bug 8586393 - start
4275                  --Bug 11782005 Avoid using this coz the variable l_use_task_schedule_flag
4276                  -- can be used direclty to create the records.
4277                  --l_use_task_schedule_flag_tbl(l_ins_index) := l_use_task_schedule_flag;
4278                  -- gboomina Bug 8586393 - end
4279 
4280                  IF p_burdened_cost_tbl.EXISTS(i) THEN
4281                     l_ins_cal_burdened_cost_tbl(l_ins_index)        :=  p_burdened_cost_tbl(i);
4282                  END IF;
4283                  IF p_raw_cost_tbl.EXISTS(i) THEN
4284                     l_ins_cal_raw_cost_tbl(l_ins_index)             :=  p_raw_cost_tbl(i);
4285                  END IF;
4286                  l_ins_index := l_ins_index + 1;
4287             END IF;
4288         END LOOP;
4289 
4290 
4291         l_ins_proj_element_id_tbl.delete(l_ins_index,l_ins_proj_element_id_tbl.count);
4292         l_ins_task_elem_version_id_tbl.delete(l_ins_index,l_ins_task_elem_version_id_tbl.count);
4293         l_ins_cbs_element_id_tbl.delete(l_ins_index,l_ins_cbs_element_id_tbl.count); --satya
4294         l_ins_start_date_tbl.delete(l_ins_index,l_ins_start_date_tbl.count);
4295         l_ins_end_date_tbl.delete(l_ins_index,l_ins_end_date_tbl.count);
4296         l_ins_cal_people_effort_tbl.delete(l_ins_index,l_ins_cal_people_effort_tbl.count);
4297         l_ins_cal_burdened_cost_tbl.delete(l_ins_index,l_ins_cal_burdened_cost_tbl.count);
4298         l_ins_cal_raw_cost_tbl.delete(l_ins_index,l_ins_cal_raw_cost_tbl.count);
4299          -- gboomina Bug 8586393 - start
4300         --l_use_task_schedule_flag_tbl.delete(l_ins_index,l_use_task_schedule_flag_tbl.count);  --Bug 11782005
4301         -- gboomina Bug 8586393 - end
4302 
4303 
4304         IF l_debug_mode = 'Y' THEN
4305             pa_debug.g_err_stage:='AFTER PREPARING INS DATA :'||p_context ;
4306             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4307 
4308             IF l_ins_task_elem_version_id_tbl.COUNT >0 THEN
4309                FOR i in l_ins_task_elem_version_id_tbl.FIRST .. l_ins_task_elem_version_id_tbl.LAST LOOP
4310                 pa_debug.g_err_stage:='l_ins_proj_element_id_tbl :'||l_ins_proj_element_id_tbl(i) ;
4311                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4312 
4313                 pa_debug.g_err_stage:='l_ins_task_elem_version_id_tbl :'||l_ins_task_elem_version_id_tbl(i) ;
4314                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4315 
4316                 pa_debug.g_err_stage:='l_ins_start_date_tbl :'||l_ins_start_date_tbl(i) ;
4317                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4318 
4319                 pa_debug.g_err_stage:='l_ins_end_date_tbl :'||l_ins_end_date_tbl(i) ;
4320                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4321                END LOOP;
4322             END IF;
4323         END IF;
4324 
4325         IF l_ins_task_elem_version_id_tbl.COUNT > 0 THEN
4326                 FORALL i IN l_ins_task_elem_version_id_tbl.FIRST .. l_ins_task_elem_version_id_tbl.LAST
4327                 INSERT INTO PA_RESOURCE_ASSIGNMENTS (
4328                     RESOURCE_ASSIGNMENT_ID,BUDGET_VERSION_ID,PROJECT_ID,TASK_ID,RESOURCE_LIST_MEMBER_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,CREATION_DATE,CREATED_BY
4329                     ,LAST_UPDATE_LOGIN,UNIT_OF_MEASURE,TRACK_AS_LABOR_FLAG,STANDARD_BILL_RATE,AVERAGE_BILL_RATE,AVERAGE_COST_RATE
4330                     ,PROJECT_ASSIGNMENT_ID,PLAN_ERROR_CODE,TOTAL_PLAN_REVENUE,TOTAL_PLAN_RAW_COST,TOTAL_PLAN_BURDENED_COST,TOTAL_PLAN_QUANTITY
4331                     ,AVERAGE_DISCOUNT_PERCENTAGE,TOTAL_BORROWED_REVENUE,TOTAL_TP_REVENUE_IN,TOTAL_TP_REVENUE_OUT,TOTAL_REVENUE_ADJ
4332                     ,TOTAL_LENT_RESOURCE_COST,TOTAL_TP_COST_IN,TOTAL_TP_COST_OUT,TOTAL_COST_ADJ,TOTAL_UNASSIGNED_TIME_COST
4333                     ,TOTAL_UTILIZATION_PERCENT,TOTAL_UTILIZATION_HOURS,TOTAL_UTILIZATION_ADJ,TOTAL_CAPACITY,TOTAL_HEAD_COUNT
4334                     ,TOTAL_HEAD_COUNT_ADJ,RESOURCE_ASSIGNMENT_TYPE,TOTAL_PROJECT_RAW_COST,TOTAL_PROJECT_BURDENED_COST,TOTAL_PROJECT_REVENUE
4335                     ,PARENT_ASSIGNMENT_ID,WBS_ELEMENT_VERSION_ID,CBS_ELEMENT_ID,RBS_ELEMENT_ID,PLANNING_START_DATE,PLANNING_END_DATE,SCHEDULE_START_DATE,SCHEDULE_END_DATE
4336                     ,SPREAD_CURVE_ID,ETC_METHOD_CODE,RES_TYPE_CODE,ATTRIBUTE_CATEGORY,ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3,ATTRIBUTE4,ATTRIBUTE5
4337                     ,ATTRIBUTE6,ATTRIBUTE7,ATTRIBUTE8,ATTRIBUTE9,ATTRIBUTE10,ATTRIBUTE11,ATTRIBUTE12,ATTRIBUTE13,ATTRIBUTE14,ATTRIBUTE15
4338                     ,ATTRIBUTE16,ATTRIBUTE17,ATTRIBUTE18,ATTRIBUTE19,ATTRIBUTE20,ATTRIBUTE21,ATTRIBUTE22,ATTRIBUTE23,ATTRIBUTE24,ATTRIBUTE25
4339                     ,ATTRIBUTE26,ATTRIBUTE27,ATTRIBUTE28,ATTRIBUTE29,ATTRIBUTE30,FC_RES_TYPE_CODE,RESOURCE_CLASS_CODE,ORGANIZATION_ID,JOB_ID
4340                     ,PERSON_ID,EXPENDITURE_TYPE,EXPENDITURE_CATEGORY,REVENUE_CATEGORY_CODE,EVENT_TYPE,SUPPLIER_ID,NON_LABOR_RESOURCE
4341                     ,BOM_RESOURCE_ID,INVENTORY_ITEM_ID,ITEM_CATEGORY_ID,RECORD_VERSION_NUMBER,BILLABLE_PERCENT
4342                     ,TRANSACTION_SOURCE_CODE,MFC_COST_TYPE_ID,PROCURE_RESOURCE_FLAG,ASSIGNMENT_DESCRIPTION
4343                     ,INCURRED_BY_RES_FLAG,RATE_JOB_ID,RATE_EXPENDITURE_TYPE,TA_DISPLAY_FLAG
4344                     ,SP_FIXED_DATE,PERSON_TYPE_CODE,RATE_BASED_FLAG,USE_TASK_SCHEDULE_FLAG,RATE_EXP_FUNC_CURR_CODE
4345                     ,RATE_EXPENDITURE_ORG_ID,INCUR_BY_RES_CLASS_CODE,INCUR_BY_ROLE_ID
4346                     ,PROJECT_ROLE_ID,RESOURCE_CLASS_FLAG,NAMED_ROLE,TXN_ACCUM_HEADER_ID
4347                     ,PM_PRODUCT_CODE, PM_RES_ASSIGNMENT_REFERENCE, resource_rate_based_flag)
4348                    VALUES (
4349                          PA_RESOURCE_ASSIGNMENTS_S.NEXTVAL                                -- RESOURCE_ASSIGNMENT_ID
4350                         ,l_budget_version_id                                              -- BUDGET_VERSION_ID
4351                         ,p_project_id                                                     -- PROJECT_ID
4352                         ,l_ins_proj_element_id_tbl(i)                                     -- TASK_ID
4353                         ,l_people_res_class_rlm_id                                        -- RESOURCE_LIST_MEMBER_ID
4354                         ,sysdate                                                          -- LAST_UPDATE_DATE
4355                         ,fnd_global.user_id                                               -- LAST_UPDATED_BY
4356                         ,sysdate                                                          -- CREATION_DATE
4357                         ,fnd_global.user_id                                               -- CREATED_BY
4358                         ,fnd_global.login_id                                              -- LAST_UPDATE_LOGIN
4359                         ,l_unit_of_measure_tbl(l_ppl_index)                               -- UNIT_OF_MEASURE
4360                         ,NULL                                                             -- TRACK_AS_LABOR_FLAG
4361                         ,NULL                                                             -- STANDARD_BILL_RATE
4362                         ,NULL                                                             -- AVERAGE_BILL_RATE
4363                         ,NULL                                                             -- AVERAGE_COST_RATE
4364                         ,-1                                                               -- PROJECT_ASSIGNMENT_ID
4365                         ,NULL                                                             -- PLAN_ERROR_CODE
4366                         ,NULL                                                             -- TOTAL_PLAN_REVENUE
4367                         ,NULL                                                             -- TOTAL_PLAN_RAW_COST
4368                         ,NULL                                                             -- TOTAL_PLAN_BURDENED_COST
4369                         ,NULL                                                             -- TOTAL_PLAN_QUANTITY
4370                         ,NULL                                                             -- AVERAGE_DISCOUNT_PERCENTAGE
4371                         ,NULL                                                             -- TOTAL_BORROWED_REVENUE
4372                         ,NULL                                                             -- TOTAL_TP_REVENUE_IN
4373                         ,NULL                                                             -- TOTAL_TP_REVENUE_OUT
4374                         ,NULL                                                             -- TOTAL_REVENUE_ADJ
4375                         ,NULL                                                             -- TOTAL_LENT_RESOURCE_COST
4376                         ,NULL                                                             -- TOTAL_TP_COST_IN
4377                         ,NULL                                                             -- TOTAL_TP_COST_OUT
4378                         ,NULL                                                             -- TOTAL_COST_ADJ
4379                         ,NULL                                                             -- TOTAL_UNASSIGNED_TIME_COST
4380                         ,NULL                                                             -- TOTAL_UTILIZATION_PERCENT
4381                         ,NULL                                                             -- TOTAL_UTILIZATION_HOURS
4382                         ,NULL                                                             -- TOTAL_UTILIZATION_ADJ
4383                         ,NULL                                                             -- TOTAL_CAPACITY
4384                         ,NULL                                                             -- TOTAL_HEAD_COUNT
4385                         ,NULL                                                             -- TOTAL_HEAD_COUNT_ADJ
4386                         ,'USER_ENTERED'                                                   -- RESOURCE_ASSIGNMENT_TYPE
4387                         ,NULL                                                             -- TOTAL_PROJECT_RAW_COST
4388                         ,NULL                                                             -- TOTAL_PROJECT_BURDENED_COST
4389                         ,NULL                                                             -- TOTAL_PROJECT_REVENUE
4390                         ,NULL                                                             -- PARENT_ASSIGNMENT_ID
4391                         ,l_ins_task_elem_version_id_tbl(i)                                -- WBS_ELEMENT_VERSION_ID
4392                         ,l_ins_cbs_element_id_tbl(i)                                      -- CBS_ELEMENT_ID --satya
4393                         ,l_rbs_element_id_tbl(l_ppl_index)                                -- RBS_ELEMENT_ID
4394                         ,l_ins_start_date_tbl(i)                                          -- PLANNING_START_DATE
4395                         ,l_ins_end_date_tbl(i)                                            -- PLANNING_END_DATE
4396                         ,l_ins_start_date_tbl(i)                                          -- SCHEDULE_START_DATE
4397                         ,l_ins_end_date_tbl(i)                                            -- SCHEDULE_END_DATE
4398                         ,l_spread_curve_id_tbl(l_ppl_index)                               -- SPREAD_CURVE_ID
4399                         ,l_etc_method_code_tbl(l_ppl_index)                               -- ETC_METHOD_CODE
4400                         ,l_res_type_code_tbl(l_ppl_index)                                 -- RES_TYPE_CODE
4401                         ,NULL                                                             -- ATTRIBUTE_CATEGORY
4402                         /* Start Bug 11782005 For all  ATTRIBUTE fields we are using l_ppl_index instead of i */
4403                         ,l_ATTRIBUTE1_tbl(l_ppl_index)                                    -- ATTRIBUTE1
4404                         ,l_ATTRIBUTE2_tbl(l_ppl_index)                                    -- ATTRIBUTE2
4405                         ,l_ATTRIBUTE3_tbl(l_ppl_index)                                    -- ATTRIBUTE3
4406                         ,l_ATTRIBUTE4_tbl(l_ppl_index)                                    -- ATTRIBUTE4
4407                         ,l_ATTRIBUTE5_tbl(l_ppl_index)                                    -- ATTRIBUTE5
4408                         ,l_ATTRIBUTE6_tbl(l_ppl_index)                                    -- ATTRIBUTE6
4409                         ,l_ATTRIBUTE7_tbl(l_ppl_index)                                    -- ATTRIBUTE7
4410                         ,l_ATTRIBUTE8_tbl(l_ppl_index)                                    -- ATTRIBUTE8
4411                         ,l_ATTRIBUTE9_tbl(l_ppl_index)                                    -- ATTRIBUTE9
4412                         ,l_ATTRIBUTE10_tbl(l_ppl_index)                                   -- ATTRIBUTE10
4413                         ,l_ATTRIBUTE11_tbl(l_ppl_index)                                   -- ATTRIBUTE11
4414                         ,l_ATTRIBUTE12_tbl(l_ppl_index)                                   -- ATTRIBUTE12
4415                         ,l_ATTRIBUTE13_tbl(l_ppl_index)                                   -- ATTRIBUTE13
4416                         ,l_ATTRIBUTE14_tbl(l_ppl_index)                                   -- ATTRIBUTE14
4417                         ,l_ATTRIBUTE15_tbl(l_ppl_index)                                   -- ATTRIBUTE15
4418                         ,l_ATTRIBUTE16_tbl(l_ppl_index)                                   -- ATTRIBUTE16
4419                         ,l_ATTRIBUTE17_tbl(l_ppl_index)                                   -- ATTRIBUTE17
4420                         ,l_ATTRIBUTE18_tbl(l_ppl_index)                                   -- ATTRIBUTE18
4421                         ,l_ATTRIBUTE19_tbl(l_ppl_index)                                   -- ATTRIBUTE19
4422                         ,l_ATTRIBUTE20_tbl(l_ppl_index)                                   -- ATTRIBUTE20
4423                         ,l_ATTRIBUTE21_tbl(l_ppl_index)                                   -- ATTRIBUTE21
4424                         ,l_ATTRIBUTE22_tbl(l_ppl_index)                                   -- ATTRIBUTE22
4425                         ,l_ATTRIBUTE23_tbl(l_ppl_index)                                   -- ATTRIBUTE23
4426                         ,l_ATTRIBUTE24_tbl(l_ppl_index)                                   -- ATTRIBUTE24
4427                         ,l_ATTRIBUTE25_tbl(l_ppl_index)                                   -- ATTRIBUTE25
4428                         ,l_ATTRIBUTE26_tbl(l_ppl_index)                                   -- ATTRIBUTE26
4429                         ,l_ATTRIBUTE27_tbl(l_ppl_index)                                   -- ATTRIBUTE27
4430                         ,l_ATTRIBUTE28_tbl(l_ppl_index)                                   -- ATTRIBUTE28
4431                         ,l_ATTRIBUTE29_tbl(l_ppl_index)                                   -- ATTRIBUTE29
4432                         ,l_ATTRIBUTE30_tbl(l_ppl_index)                                   -- ATTRIBUTE30
4433                         /* End Bug 11782005 For all  ATTRIBUTE fields we are using l_ppl_index instead of i */
4434                         ,l_fc_res_type_code_tbl(l_ppl_index)                              -- FC_RES_TYPE_CODE
4435                         ,l_resource_class_code_tbl(l_ppl_index)                           -- RESOURCE_CLASS_CODE
4436                         ,l_organization_id_tbl(l_ppl_index)                               -- ORGANIZATION_ID
4437                         ,l_job_id_tbl(l_ppl_index)                                        -- JOB_ID
4438                         ,l_person_id_tbl(l_ppl_index)                                     -- PERSON_ID
4439                         ,l_expenditure_type_tbl(l_ppl_index)                              -- EXPENDITURE_TYPE
4440                         ,l_expenditure_category_tbl(l_ppl_index)                          -- EXPENDITURE_CATEGORY
4441                         ,l_revenue_category_code_tbl(l_ppl_index)                         -- REVENUE_CATEGORY_CODE
4442                         ,l_event_type_tbl(l_ppl_index)                                    -- EVENT_TYPE
4443                         ,l_supplier_id_tbl(l_ppl_index)                                   -- SUPPLIER_ID
4444                         ,l_non_labor_resource_tbl(l_ppl_index)                            -- NON_LABOR_RESOURCE
4445                         ,l_bom_resource_id_tbl(l_ppl_index)                               -- BOM_RESOURCE_ID
4446                         ,l_inventory_item_id_tbl(l_ppl_index)                             -- INVENTORY_ITEM_ID
4447                         ,l_item_category_id_tbl(l_ppl_index)                              -- ITEM_CATEGORY_ID
4448                         ,1                                                                -- RECORD_VERSION_NUMBER
4449                         ,NULL                                                             -- BILLABLE_PERCENT
4450                         ,NULL                                                             -- TRANSACTION_SOURCE_CODE
4451                         ,l_mfc_cost_type_id_tbl(l_ppl_index)                              -- MFC_COST_TYPE_ID
4452                         ,NULL                                                             -- PROCURE_RESOURCE_FLAG
4453                         ,NULL                                                             -- ASSIGNMENT_DESCRIPTION
4454                         ,l_incurred_by_res_flag_tbl(l_ppl_index)                          -- INCURRED_BY_RES_FLAG
4455                         ,NULL                                                             -- RATE_JOB_ID
4456                         ,l_rate_expenditure_type_tbl(l_ppl_index)                         -- RATE_EXPENDITURE_TYPE
4457                         ,'N'                                                              -- TA_DISPLAY_FLAG
4458                         ,decode(l_spread_curve_id_tbl(l_ppl_index),l_fixed_date_sp_id,l_ins_start_date_tbl(i),null)-- SP_FIXED_DATE -- Bug 3607061
4459                         ,l_person_type_code_tbl(l_ppl_index)                              -- PERSON_TYPE_CODE
4460                         ,decode(l_res_class_flag,'N','N',l_rate_based_flag_tbl(l_ppl_index)) -- RATE_BASED_FLAG -- if context is workplan and prl is resource class disabled then set Rate_based_flag as 'N'
4461                         -- gboomina bug 8586393 - start
4462                         --,l_use_task_schedule_flag_tbl(i)                                  -- USE_TASK_SCHEDULE_FLAG --Bug 11782005
4463                         ,l_use_task_schedule_flag                                         -- USE_TASK_SCHEDULE_FLAG --Bug 11782005
4464                         -- gboomina bug 8586393 - end                                                        -- USE_TASK_SCHEDULE_FLAG
4465                         ,l_rate_func_curr_code_tbl(l_ppl_index)                           -- RATE_EXP_FUNC_CURR_CODE
4466                         ,l_org_id_tbl(l_ppl_index)                                        -- RATE_EXPENDITURE_ORG_ID
4467                         ,l_incur_by_res_class_code_tbl(l_ppl_index)                       -- INCUR_BY_RES_CLASS_CODE
4468                         ,l_incur_by_role_id_tbl(l_ppl_index)                              -- INCUR_BY_ROLE_ID
4469                         ,l_project_role_id_tbl(l_ppl_index)                               -- PROJECT_ROLE_ID
4470                         ,l_resource_class_flag_tbl(l_ppl_index)                           -- RESOURCE_CLASS_FLAG
4471                         ,l_named_role_tbl(l_ppl_index)                                    -- NAMED_ROLE
4472                         ,l_txn_accum_header_id_tbl(l_ppl_index)                           -- TXN ACCUM HEADER ID
4473                         ,l_pm_product_code_tbl(l_ppl_index)                               -- PM_PRODUCT_CODE
4474                         ,l_pm_res_asgmt_ref_tbl(l_ppl_index)                              -- PM_RES_ASSIGNMENT_REFERENCE
4475                         ,l_rate_based_flag_tbl(l_ppl_index)                               -- RESOURCE_RATE_BASED_FLAG IPM
4476 			)
4477                         RETURNING resource_assignment_id BULK COLLECT INTO l_res_assignment_id_temp_tbl ;
4478     -- IPM changes - copy the RA ID's created so that the new entity
4479     -- can be populated.
4480     l_orig_count :=  l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
4481     l_ra_id_temp_tbl.extend(l_res_assignment_id_temp_tbl.COUNT);
4482     FOR i IN l_orig_count+1 .. l_orig_count+l_res_assignment_id_temp_tbl.COUNT LOOP -- bug 5003827 issue 22
4483       l_ra_id_temp_tbl(i) := l_res_assignment_id_temp_tbl(i-l_orig_count); -- bug 5003827 issue 22
4484     END LOOP; -- bug 5003827 issue 22
4485     -- hr_utility.trace('RMcopy1');
4486     -- hr_utility.trace('l_ra_id_temp_tbl.COUNT IS : ' || l_ra_id_temp_tbl.COUNT);
4487     -- hr_utility.trace('l_res_assignment_id_temp_tbl.COUNT IS : ' || l_res_assignment_id_temp_tbl.COUNT);
4488     -- hr_utility.trace('*****');
4489 
4490             -----------------------------------------------------------------------
4491             -- Populating resource assignments and corresponding spread amount flags
4492             -- in PLSql tables. for IN parameters of Calculate API
4493             -- If Quantity exists in the IN parameter then set it to 'Y'
4494             -- or else set it to 'N'
4495             -----------------------------------------------------------------------
4496              l_index := 1; -- Initialise to avoid incorrect values that might come in
4497                            -- due to any usage of this.
4498 
4499              IF (l_res_assignment_id_temp_tbl.COUNT >0) THEN
4500                 FOR k IN l_res_assignment_id_temp_tbl.FIRST .. l_res_assignment_id_temp_tbl.LAST LOOP
4501                 -----------------------------------------------------------------------
4502                 -- Populating resource assignments and corresponding spread amount flags
4503                 -- in PLSql tables.for IN parameters of Calculate API
4504                 -- If Record is inserted then spread amount flag is set to Y or else it
4505                 -- is set to N
4506                 -----------------------------------------------------------------------
4507                     IF l_res_assignment_id_temp_tbl(k) IS NOT NULL THEN
4508                         l_trace_stage := 780;
4509                         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
4510                         IF l_debug_mode = 'Y' THEN
4511                             pa_debug.g_err_stage:='BULK INSERTING DATA - WORPLAN - PEOPLE '||l_res_assignment_id_temp_tbl(k);
4512                             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4513                         END IF;
4514                         l_quantity_tbl(l_index)          := l_ins_cal_people_effort_tbl(k);
4515                         l_res_assignment_id_tbl(l_index) := l_res_assignment_id_temp_tbl(k);
4516                         --                                  IF l_spread_amounts_for_ver = 'Y' THEN
4517                         l_spread_amount_flags_tbl(l_index) := 'Y';
4518                         l_currency_code_tbl(l_index) :=  l_proj_curr_code;
4519                         --                                  END IF;
4520                         IF l_ins_cal_raw_cost_tbl.EXISTS(k) AND
4521                            NVL(l_ins_cal_raw_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4522                            /* bug fix:Bug fix:5726773 l_ins_cal_raw_cost_tbl(k) <> 0 THEN */
4523  	                    l_ins_cal_raw_cost_tbl(k) is NOT NULL THEN
4524                             l_raw_cost_tbl(l_index)     := l_ins_cal_raw_cost_tbl(k);
4525                         END IF;
4526                         IF l_ins_cal_burdened_cost_tbl.EXISTS(k) AND
4527                            NVL(l_ins_cal_burdened_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4528                            /* bug fix:Bug fix:5726773 l_ins_cal_burdened_cost_tbl(k) <> 0 THEN */
4529  	                    l_ins_cal_burdened_cost_tbl(k) is NOT NULL THEN
4530                             l_burdened_cost_tbl(l_index)     := l_ins_cal_burdened_cost_tbl(k);
4531                         END IF;
4532                         l_call_calc_api := 'Y';
4533                         l_index := l_index + 1;
4534                     END IF;
4535                     l_trace_stage := 790;
4536                     --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
4537                 END LOOP;
4538              END IF;
4539         END IF;
4540 /*  -- Bug 3749516 Removed code below for Equipment resource class Starts refer source control for reference  */
4541     -- Bug 3749516 BULK INSERT FOR WORKPLAN ENDS HERE
4542 
4543     ----------------------------------------------------------------------------------
4544     -- Bug 3749516 BULK INSERT FOR B/F and TA starts here
4545     -----------------------------------------------------------------------------------
4546     -- Please note that the below FOR Loop has a EXIT condition with respect to the
4547     -- BUDGET / FORECAST context. When p_one_to_one_mapping_flag is Passed as Y
4548     -- for BUDGET / FORECAST context we do not have to insert the cartesan product
4549     -- of element_ver_ids and rlm_ids passed to the ADD_PLANNING_TXNS api.
4550     -- In this case there is one-to-one correspondance in the records passed for rlm_ids
4551     -- and elem_ver_ids passed, and we use this data directly for insertion.
4552     -----------------------------------------------------------------------------------
4553     ----------------------------------------------------
4554     -- Loop for all the task_elem_version_id  --- Starts
4555     ----------------------------------------------------
4556     ELSIF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK)
4557         OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET)
4558         OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST))  THEN
4559 
4560       -- Resetting value of l_index
4561       l_index := 1;
4562       FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
4563         l_trace_stage := 730;
4564         --    hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
4565         --------------------------------------------
4566         -- for p_context - TASK_ASSIGNMENTS
4567         --------------------------------------------
4568         IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
4569             IF l_debug_mode = 'Y' THEN
4570                 pa_debug.g_err_stage:='BULK INSERTING DATA - Context TASK p_context : '||p_context;
4571                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4572             END IF;
4573 
4574 -- Bug 12384023: Deriving job_id based on assignment start date :start
4575             FOR j IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST LOOP
4576 
4577             IF l_debug_mode = 'Y' THEN
4578                 pa_debug.g_err_stage:='PA_PLANNING_RESOURCE_UTILS: default_job l_job_id_tbl(j) : '||l_job_id_tbl(j);
4579                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4580             END IF;
4581 
4582 			l_job_id_temp := NULL;  --bug#13566990
4583 
4584 			get_default_job
4585               (
4586                  p_person_id                =>  l_person_id_tbl(j)
4587                  ,p_resource_assignment_id  =>  null
4588                  ,p_planning_start_date     =>  l_planning_start_date_tbl(j)
4589                  ,p_project_role_id         =>  l_project_role_id_tbl(j)
4590                  ,x_job_id                  =>  l_job_id_temp  --bug#13566990
4591               );
4592 
4593 			  --bug#13566990
4594 			  If l_job_id_temp IS NOT NULL THEN
4595                l_job_id_tbl(j) := l_job_id_temp;
4596 			  END IF;
4597 
4598             IF l_debug_mode = 'Y' THEN
4599                 pa_debug.g_err_stage:='l_job_id_tbl(j) : '||l_job_id_tbl(j);
4600                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4601             END IF;
4602 
4603             END LOOP;
4604 -- Bug 12384023: Deriving job_id based on assignment start date :end
4605 
4606             --dbms_output.put_line('Inserting for TA');
4607             ---------------------------------------------------------
4608             -- BULK Inserting records into pa_resource_assignments
4609             -- by iterating throught elligle resource list member ids
4610             ---------------------------------------------------------
4611             -----------------------------------------------------------------
4612             -- The Insert Statement below has been modified for changes due to
4613             -- Bug 3665097. When p_one_to_one_mapping_flag is passed as Y for
4614             -- TA context. The Bulk insert is run once once for the same index as of rlm_ids.
4615             -- The Exit Condition below takes care of the insert running only once.
4616             -------------------------------------------------------------------
4617             FORALL j IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST
4618                 INSERT INTO PA_RESOURCE_ASSIGNMENTS (
4619                    RESOURCE_ASSIGNMENT_ID,BUDGET_VERSION_ID,PROJECT_ID,TASK_ID,RESOURCE_LIST_MEMBER_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,CREATION_DATE,CREATED_BY
4620                   ,LAST_UPDATE_LOGIN,UNIT_OF_MEASURE,TRACK_AS_LABOR_FLAG,STANDARD_BILL_RATE,AVERAGE_BILL_RATE,AVERAGE_COST_RATE
4621                   ,PROJECT_ASSIGNMENT_ID,PLAN_ERROR_CODE,TOTAL_PLAN_REVENUE,TOTAL_PLAN_RAW_COST,TOTAL_PLAN_BURDENED_COST,TOTAL_PLAN_QUANTITY
4622                   ,AVERAGE_DISCOUNT_PERCENTAGE,TOTAL_BORROWED_REVENUE,TOTAL_TP_REVENUE_IN,TOTAL_TP_REVENUE_OUT,TOTAL_REVENUE_ADJ
4623                   ,TOTAL_LENT_RESOURCE_COST,TOTAL_TP_COST_IN,TOTAL_TP_COST_OUT,TOTAL_COST_ADJ,TOTAL_UNASSIGNED_TIME_COST
4624                   ,TOTAL_UTILIZATION_PERCENT,TOTAL_UTILIZATION_HOURS,TOTAL_UTILIZATION_ADJ,TOTAL_CAPACITY,TOTAL_HEAD_COUNT
4625                   ,TOTAL_HEAD_COUNT_ADJ,RESOURCE_ASSIGNMENT_TYPE,TOTAL_PROJECT_RAW_COST,TOTAL_PROJECT_BURDENED_COST,TOTAL_PROJECT_REVENUE
4626                   ,PARENT_ASSIGNMENT_ID,WBS_ELEMENT_VERSION_ID,RBS_ELEMENT_ID,PLANNING_START_DATE,PLANNING_END_DATE,SCHEDULE_START_DATE,SCHEDULE_END_DATE
4627                   ,SPREAD_CURVE_ID,ETC_METHOD_CODE,RES_TYPE_CODE,ATTRIBUTE_CATEGORY,ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3,ATTRIBUTE4,ATTRIBUTE5
4628                   ,ATTRIBUTE6,ATTRIBUTE7,ATTRIBUTE8,ATTRIBUTE9,ATTRIBUTE10,ATTRIBUTE11,ATTRIBUTE12,ATTRIBUTE13,ATTRIBUTE14,ATTRIBUTE15
4629                   ,ATTRIBUTE16,ATTRIBUTE17,ATTRIBUTE18,ATTRIBUTE19,ATTRIBUTE20,ATTRIBUTE21,ATTRIBUTE22,ATTRIBUTE23,ATTRIBUTE24,ATTRIBUTE25
4630                   ,ATTRIBUTE26,ATTRIBUTE27,ATTRIBUTE28,ATTRIBUTE29,ATTRIBUTE30,FC_RES_TYPE_CODE,RESOURCE_CLASS_CODE,ORGANIZATION_ID,JOB_ID
4631                   ,PERSON_ID,EXPENDITURE_TYPE,EXPENDITURE_CATEGORY,REVENUE_CATEGORY_CODE,EVENT_TYPE,SUPPLIER_ID,NON_LABOR_RESOURCE
4632                   ,BOM_RESOURCE_ID,INVENTORY_ITEM_ID,ITEM_CATEGORY_ID,RECORD_VERSION_NUMBER,BILLABLE_PERCENT
4633                   ,TRANSACTION_SOURCE_CODE,MFC_COST_TYPE_ID,PROCURE_RESOURCE_FLAG,ASSIGNMENT_DESCRIPTION
4634                   ,INCURRED_BY_RES_FLAG,RATE_JOB_ID,RATE_EXPENDITURE_TYPE,TA_DISPLAY_FLAG
4635                   ,SP_FIXED_DATE,PERSON_TYPE_CODE,RATE_BASED_FLAG,USE_TASK_SCHEDULE_FLAG,RATE_EXP_FUNC_CURR_CODE
4636                   ,RATE_EXPENDITURE_ORG_ID,INCUR_BY_RES_CLASS_CODE,INCUR_BY_ROLE_ID
4637                   ,PROJECT_ROLE_ID,RESOURCE_CLASS_FLAG,NAMED_ROLE,TXN_ACCUM_HEADER_ID,UNPLANNED_FLAG
4638                   ,PM_PRODUCT_CODE, PM_RES_ASSIGNMENT_REFERENCE,SCHEDULED_DELAY, resource_rate_based_flag,
4639 				  cbs_element_id)  --Bug#16200605
4640            VALUES(PA_RESOURCE_ASSIGNMENTS_S.NEXTVAL                        -- RESOURCE_ASSIGNMENT_ID
4641                   ,l_budget_version_id                                     -- BUDGET_VERSION_ID
4642                   ,p_project_id                                            -- PROJECT_ID
4643                   ,decode(p_one_to_one_mapping_flag,'Y',l_proj_elem_rlm_tbl(j)
4644                                                        ,l_proj_element_id_tbl(i))           -- TASK_ID
4645                   ,l_eligible_rlm_ids_tbl(j)                               -- RESOURCE_LIST_MEMBER_ID
4646                   ,sysdate                                                 -- LAST_UPDATE_DATE
4647                   ,fnd_global.user_id                                      -- LAST_UPDATED_BY
4648                   ,sysdate                                                 -- CREATION_DATE
4649                   ,fnd_global.user_id                                      -- CREATED_BY
4650                   ,fnd_global.login_id                                     -- LAST_UPDATE_LOGIN
4651                   ,l_unit_of_measure_tbl(j)                                -- UNIT_OF_MEASURE
4652                   ,NULL                                                    -- TRACK_AS_LABOR_FLAG
4653                   ,NULL                                                    -- STANDARD_BILL_RATE
4654                   ,NULL                                                    -- AVERAGE_BILL_RATE
4655                   ,NULL                                                    -- AVERAGE_COST_RATE
4656                   ,nvl(l_project_assignment_id_tbl(j),-1)                  -- PROJECT_ASSIGNMENT_ID
4657                   ,NULL                                          -- PLAN_ERROR_CODE
4658                   ,NULL                                          -- TOTAL_PLAN_REVENUE
4659                   ,NULL                                          -- TOTAL_PLAN_RAW_COST
4660                   ,NULL                                          -- TOTAL_PLAN_BURDENED_COST
4661                   ,NULL                                          -- TOTAL_PLAN_QUANTITY
4662                   ,NULL                                          -- AVERAGE_DISCOUNT_PERCENTAGE
4663                   ,NULL                                          -- TOTAL_BORROWED_REVENUE
4664                   ,NULL                                          -- TOTAL_TP_REVENUE_IN
4665                   ,NULL                                          -- TOTAL_TP_REVENUE_OUT
4666                   ,NULL                                          -- TOTAL_REVENUE_ADJ
4667                   ,NULL                                          -- TOTAL_LENT_RESOURCE_COST
4668                   ,NULL                                          -- TOTAL_TP_COST_IN
4669                   ,NULL                                          -- TOTAL_TP_COST_OUT
4670                   ,NULL                                          -- TOTAL_COST_ADJ
4671                   ,NULL                                          -- TOTAL_UNASSIGNED_TIME_COST
4672                   ,NULL                                          -- TOTAL_UTILIZATION_PERCENT
4673                   ,NULL                                          -- TOTAL_UTILIZATION_HOURS
4674                   ,NULL                                          -- TOTAL_UTILIZATION_ADJ
4675                   ,NULL                                          -- TOTAL_CAPACITY
4676                   ,NULL                                          -- TOTAL_HEAD_COUNT
4677                   ,NULL                                          -- TOTAL_HEAD_COUNT_ADJ
4678                   ,'USER_ENTERED'                                -- RESOURCE_ASSIGNMENT_TYPE
4679                   ,NULL                                          -- TOTAL_PROJECT_RAW_COST
4680                   ,NULL                                          -- TOTAL_PROJECT_BURDENED_COST
4681                   ,NULL                                          -- TOTAL_PROJECT_REVENUE
4682                   ,NULL                                          -- PARENT_ASSIGNMENT_ID
4683                   ,decode(p_one_to_one_mapping_flag,'Y',l_task_elem_rlm_tbl(j)
4684                                                        ,p_task_elem_version_id_tbl(i))      -- WBS_ELEMENT_VERSION_ID
4685                   ,l_rbs_element_id_tbl(j)                       -- RBS_ELEMENT_ID
4686                   ,l_planning_start_date_tbl(j)                  -- PLANNING_START_DATE
4687                   ,l_planning_end_date_tbl(j)                    -- PLANNING_END_DATE
4688                   ,l_schedule_start_date_tbl(j)                  -- SCHEDULE_START_DATE
4689                   ,l_schedule_end_date_tbl(j)                    -- SCHEDULE_END_DATE
4690                   ,l_spread_curve_id_tbl(j)                      -- SPREAD_CURVE_ID
4691                   ,l_etc_method_code_tbl(j)                      -- ETC_METHOD_CODE
4692                   ,l_res_type_code_tbl(j)                        -- RES_TYPE_CODE
4693                   ,l_attribute_category_tbl(j)                   -- ATTRIBUTE_CATEGORY
4694                   ,l_ATTRIBUTE1_tbl(j)                           -- ATTRIBUTE1
4695                   ,l_ATTRIBUTE2_tbl(j)                           -- ATTRIBUTE2
4696                   ,l_ATTRIBUTE3_tbl(j)                           -- ATTRIBUTE3
4697                   ,l_ATTRIBUTE4_tbl(j)                           -- ATTRIBUTE4
4698                   ,l_ATTRIBUTE5_tbl(j)                           -- ATTRIBUTE5
4699                   ,l_ATTRIBUTE6_tbl(j)                           -- ATTRIBUTE6
4700                   ,l_ATTRIBUTE7_tbl(j)                           -- ATTRIBUTE7
4701                   ,l_ATTRIBUTE8_tbl(j)                           -- ATTRIBUTE8
4702                   ,l_ATTRIBUTE9_tbl(j)                           -- ATTRIBUTE9
4703                   ,l_ATTRIBUTE10_tbl(j)                          -- ATTRIBUTE10
4704                   ,l_ATTRIBUTE11_tbl(j)                          -- ATTRIBUTE11
4705                   ,l_ATTRIBUTE12_tbl(j)                          -- ATTRIBUTE12
4706                   ,l_ATTRIBUTE13_tbl(j)                          -- ATTRIBUTE13
4707                   ,l_ATTRIBUTE14_tbl(j)                          -- ATTRIBUTE14
4708                   ,l_ATTRIBUTE15_tbl(j)                          -- ATTRIBUTE15
4709                   ,l_ATTRIBUTE16_tbl(j)                          -- ATTRIBUTE16
4710                   ,l_ATTRIBUTE17_tbl(j)                          -- ATTRIBUTE17
4711                   ,l_ATTRIBUTE18_tbl(j)                          -- ATTRIBUTE18
4712                   ,l_ATTRIBUTE19_tbl(j)                          -- ATTRIBUTE19
4713                   ,l_ATTRIBUTE20_tbl(j)                          -- ATTRIBUTE20
4714                   ,l_ATTRIBUTE21_tbl(j)                          -- ATTRIBUTE21
4715                   ,l_ATTRIBUTE22_tbl(j)                          -- ATTRIBUTE22
4716                   ,l_ATTRIBUTE23_tbl(j)                          -- ATTRIBUTE23
4717                   ,l_ATTRIBUTE24_tbl(j)                          -- ATTRIBUTE24
4718                   ,l_ATTRIBUTE25_tbl(j)                          -- ATTRIBUTE25
4719                   ,l_ATTRIBUTE26_tbl(j)                          -- ATTRIBUTE26
4720                   ,l_ATTRIBUTE27_tbl(j)                          -- ATTRIBUTE27
4721                   ,l_ATTRIBUTE28_tbl(j)                          -- ATTRIBUTE28
4722                   ,l_ATTRIBUTE29_tbl(j)                          -- ATTRIBUTE29
4723                   ,l_ATTRIBUTE30_tbl(j)                          -- ATTRIBUTE30
4724                   ,l_fc_res_type_code_tbl(j)                     -- FC_RES_TYPE_CODE
4725                   ,l_resource_class_code_tbl(j)                  -- RESOURCE_CLASS_CODE
4726                   ,l_organization_id_tbl(j)                      -- ORGANIZATION_ID
4727                   ,l_job_id_tbl(j)                               -- JOB_ID
4728                   ,l_person_id_tbl(j)                            -- PERSON_ID
4729                   ,l_expenditure_type_tbl(j)                     -- EXPENDITURE_TYPE
4730                   ,l_expenditure_category_tbl(j)                 -- EXPENDITURE_CATEGORY
4731                   ,l_revenue_category_code_tbl(j)                -- REVENUE_CATEGORY_CODE
4732                   ,l_event_type_tbl(j)                           -- EVENT_TYPE
4733                   ,l_supplier_id_tbl(j)                          -- SUPPLIER_ID
4734                   ,l_non_labor_resource_tbl(j)                   -- NON_LABOR_RESOURCE
4735                   ,l_bom_resource_id_tbl(j)                      -- BOM_RESOURCE_ID
4736                   ,l_inventory_item_id_tbl(j)                    -- INVENTORY_ITEM_ID
4737                   ,l_item_category_id_tbl(j)                     -- ITEM_CATEGORY_ID
4738                   ,1                                             -- RECORD_VERSION_NUMBER
4739                   ,l_billable_percent_tbl(j)                     -- BILLABLE_PERCENT
4740                   ,NULL                                          -- TRANSACTION_SOURCE_CODE
4741                   ,l_mfc_cost_type_id_tbl(j)                     -- MFC_COST_TYPE_ID
4742                   ,l_procure_resource_flag_tbl(j)                -- PROCURE_RESOURCE_FLAG
4743                   ,l_assignment_description_tbl(j)               -- ASSIGNMENT_DESCRIPTION
4744                   ,l_incurred_by_res_flag_tbl(j)                 -- INCURRED_BY_RES_FLAG
4745                   ,NULL                                          -- RATE_JOB_ID
4746                   ,l_rate_expenditure_type_tbl(j)                -- RATE_EXPENDITURE_TYPE
4747                   ,'Y'                                           -- TA_DISPLAY_FLAG
4748                   ,decode(l_spread_curve_id_tbl(j),l_fixed_date_sp_id,nvl(l_sp_fixed_date_tbl(j),l_planning_start_date_tbl(j)),null) -- SP_FIXED_DATE -- Bug 3607061
4749                   ,l_person_type_code_tbl(j)                     -- PERSON_TYPE_CODE
4750                   ,decode(l_res_class_flag,'N','N',l_rate_based_flag_tbl(j)) -- RATE_BASED_FLAG -- if context is workplan and prl is resource class disabled then set Rate_based_flag as 'N'
4751                   ,l_use_task_schedule_flag_tbl(j)               -- USE_TASK_SCHEDULE_FLAG
4752                   ,l_rate_func_curr_code_tbl(j)                  -- RATE_EXP_FUNC_CURR_CODE
4753                   ,l_org_id_tbl(j)                               -- RATE_EXPENDITURE_ORG_ID
4754                   ,l_incur_by_res_class_code_tbl(j)              -- INCUR_BY_RES_CLASS_CODE
4755                   ,l_incur_by_role_id_tbl(j)                     -- INCUR_BY_ROLE_ID
4756                   ,l_project_role_id_tbl(j)                      -- PROJECT_ROLE_ID
4757                   ,l_resource_class_flag_tbl(j)                  -- RESOURCE_CLASS_FLAG
4758                   ,l_named_role_tbl(j)                           -- NAMED_ROLE
4759                   ,l_txn_accum_header_id_tbl(j)                  -- TXN ACCUM HEADER ID
4760                   ,l_unplanned_flag_tbl(j)                       -- UNPLANNED_FLAG
4761                   ,l_pm_product_code_tbl(j)                      -- PM_PRODUCT_CODE
4762                   ,l_pm_res_asgmt_ref_tbl(j)                     -- PM_RES_ASSIGNMENT_REFERENCE
4763                   ,l_scheduled_delay(j)                          -- SCHEDULED_DELAY. For bug 3948128
4764 		  ,l_rate_based_flag_tbl(j)                      -- resource_RATE_BASED_FLAG
4765 		  ,l_cbs_id_rlm_tbl(j)									-- CBS_ELEMENT_ID  --Bug#16200605
4766                   )
4767                    RETURNING resource_assignment_id
4768 		   BULK COLLECT INTO l_res_assignment_id_temp_tbl ;
4769 
4770             -- IPM changes - copy the RA ID's created so that the new entity
4771             -- can be populated.
4772             l_orig_count :=  l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
4773             l_ra_id_temp_tbl.extend(l_res_assignment_id_temp_tbl.COUNT);
4774             l_curr_code_temp_tbl.extend(l_res_assignment_id_temp_tbl.COUNT);
4775             FOR i IN l_orig_count+1 .. l_orig_count+l_res_assignment_id_temp_tbl.COUNT LOOP -- bug 5003827 issue 22
4776               l_ra_id_temp_tbl(i) := l_res_assignment_id_temp_tbl(i-l_orig_count); -- bug 5003827 issue 22
4777               -- Bug 5003827 issue 1
4778               IF  p_currency_code_tbl.EXISTS(i-l_orig_count) AND
4779                    NVL(p_currency_code_tbl(i-l_orig_count),FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
4780                  l_curr_code_temp_tbl(i) := p_currency_code_tbl(i-l_orig_count);
4781               ELSE
4782                  l_curr_code_temp_tbl(i) := l_proj_curr_code;
4783               END IF;
4784             END LOOP; -- bug 5003827 issue 22
4785 
4786             -------------------------------------------------------------------------------
4787             --No of records in rlm id tbl should be equal to the no of records in ra id tb;
4788             -------------------------------------------------------------------------------
4789 
4790             IF l_res_assignment_id_temp_tbl.COUNT <> l_eligible_rlm_ids_tbl.COUNT THEN
4791                    IF l_debug_mode = 'Y' THEN
4792                       pa_debug.g_err_stage:='For Budget and Forcast p_context - data mismatch';
4793                       pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4794                    END IF;
4795                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4796             END IF;
4797             -----------------------------------------------------------------------
4798             -- Populating resource assignments and corresponding spread amount flags
4799             -- in PLSql tables. for IN parameters of Calculate API
4800             -- If Quantity exists in the IN parameter then set it to 'Y'
4801             -- or else set it to 'N'
4802             -----------------------------------------------------------------------
4803 
4804             IF ( l_res_assignment_id_temp_tbl.COUNT >0) THEN
4805 
4806                 -- Bug 8370812 - Initialize the index l_rollup_index used for l_ra_id_rollup_tbl
4807                 l_rollup_index := 1;
4808 
4809                 FOR k IN l_res_assignment_id_temp_tbl.FIRST .. l_res_assignment_id_temp_tbl.LAST LOOP
4810 
4811                     IF l_debug_mode = 'Y' THEN
4812                         pa_debug.g_err_stage:='BULK INSERTING DATA - TASK Setting DATA - raid count : '||l_res_assignment_id_temp_tbl.COUNT;
4813                         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4814                     END IF;
4815 
4816                     -- Bug 8370812 - Moved inside the IF loop
4817                     -- l_res_assignment_id_tbl(l_index) := l_res_assignment_id_temp_tbl(k);
4818 
4819                     IF (((l_total_quantity_tbl.EXISTS(k)) AND (l_total_quantity_tbl.COUNT > 0))
4820                        AND ((nvl(l_total_quantity_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM)
4821  	                         /* bug fix:Bug fix:5726773 AND (l_total_quantity_tbl(k) <> 0))) OR */
4822  	                         AND (l_total_quantity_tbl(k) is NOT NULL ))) OR
4823                        (((p_raw_cost_tbl.EXISTS(k)) AND (p_raw_cost_tbl.COUNT > 0))
4824                        AND ((nvl(p_raw_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM)
4825  	                         /* bug fix:Bug fix:5726773 AND (p_raw_cost_tbl(k) <> 0))) OR */
4826  	                         AND (p_raw_cost_tbl(k) is NOT NULL))) OR
4827                        (((p_burdened_cost_tbl.EXISTS(k)) AND (p_burdened_cost_tbl.COUNT > 0))
4828                        AND ((nvl(p_burdened_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM)
4829  	                         /* bug fix:Bug fix:5726773 AND (p_burdened_cost_tbl(k) <> 0))) THEN */
4830  	                         AND (p_burdened_cost_tbl(k) is NOT NULL))) THEN
4831 
4832                         IF l_debug_mode = 'Y' THEN
4833                             pa_debug.g_err_stage:='BULK INSERTING DATA - TASK spread amount flag';
4834                             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4835                         END IF;
4836 
4837                         -- Bug 8370812
4838                         l_res_assignment_id_tbl(l_index) := l_res_assignment_id_temp_tbl(k);
4839 
4840                         l_spread_amount_flags_tbl(l_index) := 'Y';
4841                         l_call_calc_api := 'Y';
4842 
4843                         -- Bug 3861653
4844                         IF p_currency_code_tbl.EXISTS(k) AND
4845                            NVL(p_currency_code_tbl(k),FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
4846 
4847                            l_currency_code_tbl(l_index)     := p_currency_code_tbl(k);
4848                         ELSE
4849                            l_currency_code_tbl(l_index)     := l_proj_curr_code;
4850                         END IF;
4851 
4852                         IF l_total_quantity_tbl.EXISTS(k) AND
4853                            NVL(l_total_quantity_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4854                            /* bug fix:Bug fix:5726773 l_total_quantity_tbl(k) <> 0 THEN */
4855  	                   l_total_quantity_tbl(k) is NOT NULL THEN
4856 
4857                            l_quantity_tbl(l_index)     := l_total_quantity_tbl(k);
4858                         END IF;
4859 
4860                         l_cost_rate_tbl(l_index)         := l_cost_rate_override_tbl(k);
4861                         l_burden_multiplier_tbl(l_index) := l_burdened_rate_override_tbl(k);
4862 
4863                         IF p_raw_cost_tbl.EXISTS(k) AND
4864                            NVL(p_raw_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4865                            /* bug fix:Bug fix:5726773 p_raw_cost_tbl(k) <> 0 THEN */
4866  	                   p_raw_cost_tbl(k) is NOT NULL THEN
4867 
4868                            l_raw_cost_tbl(l_index)     := p_raw_cost_tbl(k);
4869                         END IF;
4870 
4871                         IF p_burdened_cost_tbl.EXISTS(k) AND
4872                            NVL(p_burdened_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4873                            /* bug fix:Bug fix:5726773 P_burdened_cost_tbl(k) <> 0 THEN */
4874  	                   P_burdened_cost_tbl(k) is NOT NULL THEN
4875 
4876                            l_burdened_cost_tbl(l_index)     := p_burdened_cost_tbl(k);
4877                         END IF;
4878 
4879                         l_index := l_index + 1;
4880                     -- Bug 8370812 - TAs for which quantity/raw cost/burdened cost is not passed.
4881                     ELSE
4882                         l_ra_id_rollup_tbl.extend;
4883                         l_curr_code_rollup_tbl.extend;
4884                         l_ra_id_rollup_tbl(l_rollup_index) := l_res_assignment_id_temp_tbl(k);
4885 
4886                         IF p_currency_code_tbl.EXISTS(k) AND
4887                            NVL(p_currency_code_tbl(k),FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
4888 
4889                             l_curr_code_rollup_tbl(l_rollup_index)     := p_currency_code_tbl(k);
4890                         ELSE
4891                             l_curr_code_rollup_tbl(l_rollup_index)     := l_proj_curr_code;
4892                         END IF;
4893 
4894                         l_rollup_index := l_rollup_index + 1;
4895                     END IF;
4896                 END LOOP;
4897             END IF;
4898             -- Bug 3665097
4899             EXIT WHEN p_one_to_one_mapping_flag = 'Y';
4900 
4901         -----------------------------------------------------------
4902         -- For p_context = BUDGET or FORECAST
4903         -----------------------------------------------------------
4904         ELSIF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET) OR
4905                (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST))  THEN
4906 
4907             ---------------------------------------------------------
4908             -- BULK Inserting records into pa_resource_assignments
4909             -- by iterating throught elligle resource list member ids
4910             ---------------------------------------------------------
4911 
4912             ----------------------------------------------------------------
4913             /* Notes to Dev - These changes are only done for B/F Context.
4914                If Skip Duplicate Flag is Passed as Y to Add Planning Transaction API then
4915                if a record already exists in PA_RESOURCE_ASSIGNMENTS for a given Planning
4916                Element passed then the particular record is to be skipped whcile doing a
4917                bulk insert into PA_RESOURCE_ASSIGNMENT.
4918                However If quantity/amounts are passed for the planning elment which has
4919                been skipped for Insert. Calculate API would still be called for it.
4920 
4921                As of Now Version - 115.122, the usage of p_skip_duplicate_flags is from
4922                1) Add task and resource page. When Resources are selected to be added as
4923                   planning elements for multiple tasks. One or Resource Assignments would
4924                   already exists and Insert in RA table would have to be skipped.
4925                   But in this case Quantities/Amounts are not passed so Calculate API is
4926                   not getting called.
4927                2) Edit Plan Page "Add Another Row" feature.
4928                   Consider the following input data.
4929                   1) t1 r1 c1
4930                   2) t1 r1 c2
4931                   3) t2 r2 c2
4932                   4) t3 r3 c2
4933                   5) t4 r4 c4
4934 
4935                   System State is such that RA Already Exists for
4936                   1) t1 r1
4937                   2) t3 r3
4938 
4939                   In this case Only the following RAs will be inserted.
4940                   1)t2 r2 and
4941                   3)t4 r4
4942 
4943                   Basically records 1)2) and 4) have to be skipped.
4944                   However calculate API still Will be called for All the 5 records.
4945                   This will be taken care by using save exceptions clause in the FORALL Insert below
4946             */
4947             ----------------------------------------------------------------
4948 
4949             -----------------------------------------------------------------
4950             -- The Insert Statement below has been modified for changes due to
4951             -- Bug 3719918. When p_one_to_one_mapping_flag is passed as Y for
4952             -- Bugdet/Forecast context. The Bulk insert is run once once for
4953             -- the same index as of rlm_ids.
4954             -- The Exit Condition below takes care of the insert running only once.
4955             -------------------------------------------------------------------
4956 
4957             BEGIN
4958                 IF l_debug_mode = 'Y' THEN
4959                     pa_debug.g_err_stage:='BULK INSERTING DATA - Context TASK p_context : '||p_context;
4960                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4961 
4962                     pa_debug.g_err_stage:='l_eligible_rlm_ids_tbl.count  '||l_eligible_rlm_ids_tbl.count;
4963                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4964 
4965                     pa_debug.g_err_stage:='l_bf_quantity_tbl.count  '||l_bf_quantity_tbl.count;
4966                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4967 
4968                     pa_debug.g_err_stage:='l_bf_raw_cost_tbl.count  '||l_bf_raw_cost_tbl.count;
4969                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4970 
4971                     pa_debug.g_err_stage:='l_bf_burdened_cost_tbl.count  '||l_bf_burdened_cost_tbl.count;
4972                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4973 
4974                     pa_debug.g_err_stage:='l_bf_revenue_tbl.count  '||l_bf_revenue_tbl.count;
4975                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4976 
4977                     pa_debug.g_err_stage:='l_bf_currency_code_tbl.count  '||l_bf_currency_code_tbl.count;
4978                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4979 
4980                     pa_debug.g_err_stage:='l_bf_cost_rate_tbl.count  '||l_bf_cost_rate_tbl.count;
4981                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4982 
4983                     pa_debug.g_err_stage:='l_bf_bill_rate_tbl.count  '||l_bf_bill_rate_tbl.count;
4984                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4985 
4986                     pa_debug.g_err_stage:='l_bf_burdened_rate_tbl.count  '||l_bf_burdened_rate_tbl.count;
4987                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4988 
4989 
4990                 END IF;
4991 
4992                 /* Added for bug 11718094 starts */
4993                  /* Added for bug 12712061 starts */
4994                 /* Modified fix added for bug 11718094  */
4995 
4996 
4997                    if l_ATTRIBUTE1_tbl.count = 0 then
4998                       l_ATTRIBUTE1_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
4999 
5000                    end if;
5001                    if l_ATTRIBUTE2_tbl.count = 0 then
5002                       l_ATTRIBUTE2_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5003 
5004                    end if;
5005                    if l_ATTRIBUTE3_tbl.count = 0 then
5006                       l_ATTRIBUTE3_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5007 
5008                    end if;
5009                    if l_ATTRIBUTE4_tbl.count = 0 then
5010                       l_ATTRIBUTE4_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5011 
5012                    end if;
5013                    if l_ATTRIBUTE5_tbl.count = 0 then
5014                       l_ATTRIBUTE5_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5015 
5016                    end if;
5017                    if l_ATTRIBUTE6_tbl.count = 0 then
5018                       l_ATTRIBUTE6_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5019 
5020                    end if;
5021                    if l_ATTRIBUTE7_tbl.count = 0 then
5022                       l_ATTRIBUTE7_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5023 
5024                    end if;
5025                    if l_ATTRIBUTE8_tbl.count = 0 then
5026                       l_ATTRIBUTE8_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5027 
5028                    end if;
5029                    if l_ATTRIBUTE9_tbl.count = 0 then
5030                       l_ATTRIBUTE9_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5031 
5032                    end if;
5033                    if l_ATTRIBUTE10_tbl.count = 0 then
5034                       l_ATTRIBUTE10_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5035 
5036                    end if;
5037                    if l_ATTRIBUTE11_tbl.count = 0 then
5038                       l_ATTRIBUTE11_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5039 
5040                    end if;
5041                    if l_ATTRIBUTE12_tbl.count = 0 then
5042                       l_ATTRIBUTE12_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5043 
5044                    end if;
5045                    if l_ATTRIBUTE13_tbl.count = 0 then
5046                       l_ATTRIBUTE13_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5047 
5048                    end if;
5049                    if l_ATTRIBUTE14_tbl.count = 0 then
5050                       l_ATTRIBUTE14_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5051 
5052                    end if;
5053                    if l_ATTRIBUTE15_tbl.count = 0 then
5054                       l_ATTRIBUTE15_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5055 
5056                    end if;
5057                    if l_ATTRIBUTE16_tbl.count = 0 then
5058                       l_ATTRIBUTE16_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5059 
5060                    end if;
5061                    if l_ATTRIBUTE17_tbl.count = 0 then
5062                       l_ATTRIBUTE17_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5063 
5064                    end if;
5065                    if l_ATTRIBUTE18_tbl.count = 0 then
5066                       l_ATTRIBUTE18_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5067 
5068                    end if;
5069                    if l_ATTRIBUTE19_tbl.count = 0 then
5070                       l_ATTRIBUTE19_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5071 
5072                    end if;
5073                   if l_ATTRIBUTE20_tbl.count = 0 then
5074                      l_ATTRIBUTE20_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5075 
5076                    end if;
5077                    if l_ATTRIBUTE21_tbl.count = 0 then
5078                       l_ATTRIBUTE21_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5079 
5080                    end if;
5081                    if l_ATTRIBUTE22_tbl.count = 0 then
5082                       l_ATTRIBUTE22_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5083 
5084                    end if;
5085                    if l_ATTRIBUTE23_tbl.count = 0 then
5086                       l_ATTRIBUTE23_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5087 
5088                    end if;
5089                    if l_ATTRIBUTE24_tbl.count = 0 then
5090                       l_ATTRIBUTE24_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5091 
5092                    end if;
5093                    if l_ATTRIBUTE25_tbl.count = 0 then
5094                       l_ATTRIBUTE25_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5095 
5096                    end if;
5097                    if l_ATTRIBUTE26_tbl.count = 0 then
5098                       l_ATTRIBUTE26_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5099 
5100                    end if;
5101                    if l_ATTRIBUTE27_tbl.count = 0 then
5102                       l_ATTRIBUTE27_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5103 
5104                    end if;
5105                    if l_ATTRIBUTE28_tbl.count = 0 then
5106                       l_ATTRIBUTE28_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5107 
5108                    end if;
5109                    if l_ATTRIBUTE29_tbl.count = 0 then
5110                       l_ATTRIBUTE29_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5111 
5112                    end if;
5113                    if l_ATTRIBUTE30_tbl.count = 0 then
5114                       l_ATTRIBUTE30_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5115 
5116                    end if;
5117 
5118                 FOR j IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST loop
5119                    l_ATTRIBUTE1_tbl(j) := NULL;
5120                     l_ATTRIBUTE2_tbl(j) := NULL;
5121                      l_ATTRIBUTE3_tbl(j) := NULL;
5122                       l_ATTRIBUTE4_tbl(j) := NULL;
5123                    l_ATTRIBUTE5_tbl(j) := NULL;
5124                    l_ATTRIBUTE6_tbl(j) := NULL;
5125                    l_ATTRIBUTE7_tbl(j) := NULL;
5126                    l_ATTRIBUTE8_tbl(j) := NULL;
5127                    l_ATTRIBUTE9_tbl(j) := NULL;
5128                    l_ATTRIBUTE10_tbl(j) := NULL;
5129 
5130                    l_ATTRIBUTE11_tbl(j) := NULL;
5131                     l_ATTRIBUTE12_tbl(j) := NULL;
5132                      l_ATTRIBUTE13_tbl(j) := NULL;
5133                       l_ATTRIBUTE14_tbl(j) := NULL;
5134                    l_ATTRIBUTE15_tbl(j) := NULL;
5135                    l_ATTRIBUTE16_tbl(j) := NULL;
5136                    l_ATTRIBUTE17_tbl(j) := NULL;
5137                    l_ATTRIBUTE18_tbl(j) := NULL;
5138                    l_ATTRIBUTE19_tbl(j) := NULL;
5139                    l_ATTRIBUTE20_tbl(j) := NULL;
5140 
5141                    l_ATTRIBUTE21_tbl(j) := NULL;
5142                     l_ATTRIBUTE22_tbl(j) := NULL;
5143                      l_ATTRIBUTE23_tbl(j) := NULL;
5144                       l_ATTRIBUTE24_tbl(j) := NULL;
5145                    l_ATTRIBUTE25_tbl(j) := NULL;
5146                    l_ATTRIBUTE26_tbl(j) := NULL;
5147                    l_ATTRIBUTE27_tbl(j) := NULL;
5148                    l_ATTRIBUTE28_tbl(j) := NULL;
5149                    l_ATTRIBUTE29_tbl(j) := NULL;
5150                    l_ATTRIBUTE30_tbl(j) := NULL;
5151 
5152                 end loop;
5153                  /* Added for bug 11718094 ends */
5154 		/* Added for bug 12712061 starts */
5155                 /* Modified fix added for bug 11718094  */
5156 
5157 
5158                 FORALL j IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST SAVE EXCEPTIONS
5159                     INSERT INTO PA_RESOURCE_ASSIGNMENTS (
5160                        RESOURCE_ASSIGNMENT_ID,BUDGET_VERSION_ID,PROJECT_ID,TASK_ID,RESOURCE_LIST_MEMBER_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,CREATION_DATE,CREATED_BY
5161                       ,LAST_UPDATE_LOGIN,UNIT_OF_MEASURE,TRACK_AS_LABOR_FLAG,STANDARD_BILL_RATE,AVERAGE_BILL_RATE,AVERAGE_COST_RATE
5162                       ,PROJECT_ASSIGNMENT_ID,PLAN_ERROR_CODE,TOTAL_PLAN_REVENUE,TOTAL_PLAN_RAW_COST,TOTAL_PLAN_BURDENED_COST,TOTAL_PLAN_QUANTITY
5163                       ,AVERAGE_DISCOUNT_PERCENTAGE,TOTAL_BORROWED_REVENUE,TOTAL_TP_REVENUE_IN,TOTAL_TP_REVENUE_OUT,TOTAL_REVENUE_ADJ
5164                       ,TOTAL_LENT_RESOURCE_COST,TOTAL_TP_COST_IN,TOTAL_TP_COST_OUT,TOTAL_COST_ADJ,TOTAL_UNASSIGNED_TIME_COST
5165                       ,TOTAL_UTILIZATION_PERCENT,TOTAL_UTILIZATION_HOURS,TOTAL_UTILIZATION_ADJ,TOTAL_CAPACITY,TOTAL_HEAD_COUNT
5166                       ,TOTAL_HEAD_COUNT_ADJ,RESOURCE_ASSIGNMENT_TYPE,TOTAL_PROJECT_RAW_COST,TOTAL_PROJECT_BURDENED_COST,TOTAL_PROJECT_REVENUE
5167                       ,PARENT_ASSIGNMENT_ID,WBS_ELEMENT_VERSION_ID,RBS_ELEMENT_ID,PLANNING_START_DATE,PLANNING_END_DATE,SCHEDULE_START_DATE,SCHEDULE_END_DATE
5168                       ,SPREAD_CURVE_ID,ETC_METHOD_CODE,RES_TYPE_CODE,ATTRIBUTE_CATEGORY,ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3,ATTRIBUTE4,ATTRIBUTE5
5169                       ,ATTRIBUTE6,ATTRIBUTE7,ATTRIBUTE8,ATTRIBUTE9,ATTRIBUTE10,ATTRIBUTE11,ATTRIBUTE12,ATTRIBUTE13,ATTRIBUTE14,ATTRIBUTE15
5170                       ,ATTRIBUTE16,ATTRIBUTE17,ATTRIBUTE18,ATTRIBUTE19,ATTRIBUTE20,ATTRIBUTE21,ATTRIBUTE22,ATTRIBUTE23,ATTRIBUTE24,ATTRIBUTE25
5171                       ,ATTRIBUTE26,ATTRIBUTE27,ATTRIBUTE28,ATTRIBUTE29,ATTRIBUTE30,FC_RES_TYPE_CODE,RESOURCE_CLASS_CODE,ORGANIZATION_ID,JOB_ID
5172                       ,PERSON_ID,EXPENDITURE_TYPE,EXPENDITURE_CATEGORY,REVENUE_CATEGORY_CODE,EVENT_TYPE,SUPPLIER_ID,NON_LABOR_RESOURCE
5173                       ,BOM_RESOURCE_ID,INVENTORY_ITEM_ID,ITEM_CATEGORY_ID,RECORD_VERSION_NUMBER,BILLABLE_PERCENT
5174                       ,TRANSACTION_SOURCE_CODE,MFC_COST_TYPE_ID,PROCURE_RESOURCE_FLAG,ASSIGNMENT_DESCRIPTION
5175                       ,INCURRED_BY_RES_FLAG,RATE_JOB_ID,RATE_EXPENDITURE_TYPE,TA_DISPLAY_FLAG
5176                       ,SP_FIXED_DATE,PERSON_TYPE_CODE,RATE_BASED_FLAG,USE_TASK_SCHEDULE_FLAG,RATE_EXP_FUNC_CURR_CODE
5177                       ,RATE_EXPENDITURE_ORG_ID,INCUR_BY_RES_CLASS_CODE,INCUR_BY_ROLE_ID
5178                       ,PROJECT_ROLE_ID,RESOURCE_CLASS_FLAG,NAMED_ROLE,TXN_ACCUM_HEADER_ID
5179                       ,PM_PRODUCT_CODE, PM_RES_ASSIGNMENT_REFERENCE, resource_rate_based_flag,
5180 					  cbs_element_id --Bug#16200605
5181 					  )
5182                       VALUES
5183                     (  pa_resource_assignments_s.nextval  -- RESOURCE_ASSIGNMENT_ID
5184                       ,l_budget_version_id                -- BUDGET_VERSION_ID
5185                       ,p_project_id                       -- PROJECT_ID
5186                       ,decode(p_one_to_one_mapping_flag,'Y',l_bf_proj_elem_tbl(j)
5187                                                            ,l_proj_element_id_tbl(i))           -- TASK_ID
5188                       ,l_eligible_rlm_ids_tbl(j)          -- RESOURCE_LIST_MEMBER_ID
5189                       ,sysdate                            -- LAST_UPDATE_DATE
5190                       ,fnd_global.user_id                 -- LAST_UPDATED_BY
5191                       ,sysdate                            -- CREATION_DATE
5192                       ,fnd_global.user_id                 -- CREATED_BY
5193                       ,fnd_global.login_id                -- LAST_UPDATE_LOGIN
5194                       ,l_unit_of_measure_tbl(j)           -- UNIT_OF_MEASURE
5195                       ,NULL                               -- TRACK_AS_LABOR_FLAG
5196                       ,NULL                               -- STANDARD_BILL_RATE
5197                       ,NULL                               -- AVERAGE_BILL_RATE
5198                       ,NULL                               -- AVERAGE_COST_RATE
5199                       ,-1                                 -- PROJECT_ASSIGNMENT_ID
5200                       ,NULL                               -- PLAN_ERROR_CODE
5201                       ,NULL                               -- TOTAL_PLAN_REVENUE
5202                       ,NULL                               -- TOTAL_PLAN_RAW_COST
5203                       ,NULL                               -- TOTAL_PLAN_BURDENED_COST
5204                       ,NULL                               -- TOTAL_PLAN_QUANTITY
5205                       ,NULL                               -- AVERAGE_DISCOUNT_PERCENTAGE
5206                       ,NULL                               -- TOTAL_BORROWED_REVENUE
5207                       ,NULL                               -- TOTAL_TP_REVENUE_IN
5208                       ,NULL                               -- TOTAL_TP_REVENUE_OUT
5209                       ,NULL                               -- TOTAL_REVENUE_ADJ
5210                       ,NULL                               -- TOTAL_LENT_RESOURCE_COST
5211                       ,NULL                               -- TOTAL_TP_COST_IN
5212                       ,NULL                               -- TOTAL_TP_COST_OUT
5213                       ,NULL                               -- TOTAL_COST_ADJ
5214                       ,NULL                               -- TOTAL_UNASSIGNED_TIME_COST
5215                       ,NULL                               -- TOTAL_UTILIZATION_PERCENT
5216                       ,NULL                               -- TOTAL_UTILIZATION_HOURS
5217                       ,NULL                               -- TOTAL_UTILIZATION_ADJ
5218                       ,NULL                               -- TOTAL_CAPACITY
5219                       ,NULL                               -- TOTAL_HEAD_COUNT
5220                       ,NULL                               -- TOTAL_HEAD_COUNT_ADJ
5221                       ,'USER_ENTERED'                     -- RESOURCE_ASSIGNMENT_TYPE
5222                       ,NULL                               -- TOTAL_PROJECT_RAW_COST
5223                       ,NULL                               -- TOTAL_PROJECT_BURDENED_COST
5224                       ,NULL                               -- TOTAL_PROJECT_REVENUE
5225                       ,NULL                               -- PARENT_ASSIGNMENT_ID
5226                       ,NULL                               -- WBS_ELEMENT_VERSION_ID --Bug 3546208
5227                       ,l_rbs_element_id_tbl(j)            -- RBS_ELEMENT_ID
5228                       ,decode(p_one_to_one_mapping_flag,'Y',l_bf_start_date_tbl(j)
5229                                                            ,l_start_date_tbl(i))                -- PLANNING_START_DATE
5230                       ,decode(p_one_to_one_mapping_flag,'Y',l_bf_compl_date_tbl(j)
5231                                                            ,l_compl_date_tbl(i))                -- PLANNING_END_DATE
5232                       ,decode(p_one_to_one_mapping_flag,'Y',l_bf_start_date_tbl(j)
5233                                                            ,l_start_date_tbl(i))                -- SCHEDULE_START_DATE
5234                       ,decode(p_one_to_one_mapping_flag,'Y',l_bf_compl_date_tbl(j)
5235                                                            ,l_compl_date_tbl(i))                -- SCHEDULE_END_DATE
5236                       ,l_spread_curve_id_tbl(j)           -- SPREAD_CURVE_ID
5237                       ,l_etc_method_code_tbl(j)           -- ETC_METHOD_CODE
5238                       ,l_res_type_code_tbl(j)             -- RES_TYPE_CODE
5239                       ,NULL                               -- ATTRIBUTE_CATEGORY
5240                        ,l_ATTRIBUTE1_tbl(j)                -- ATTRIBUTE1
5241                       ,l_ATTRIBUTE2_tbl(j)                                -- ATTRIBUTE2
5242                       ,l_ATTRIBUTE3_tbl(j)                                -- ATTRIBUTE3
5243                       ,l_ATTRIBUTE4_tbl(j)                               -- ATTRIBUTE4
5244                       ,l_ATTRIBUTE5_tbl(j)                               -- ATTRIBUTE5
5245                       ,l_ATTRIBUTE6_tbl(j)                               -- ATTRIBUTE6
5246                       ,l_ATTRIBUTE7_tbl(j)                               -- ATTRIBUTE7
5247                       ,l_ATTRIBUTE8_tbl(j)                               -- ATTRIBUTE8
5248                       ,l_ATTRIBUTE9_tbl(j)                               -- ATTRIBUTE9
5249                       ,l_ATTRIBUTE10_tbl(j)                               -- ATTRIBUTE10
5250                       ,l_ATTRIBUTE11_tbl(j)                               -- ATTRIBUTE11
5251                       ,l_ATTRIBUTE12_tbl(j)                               -- ATTRIBUTE12
5252                       ,l_ATTRIBUTE13_tbl(j)                               -- ATTRIBUTE13
5253                       ,l_ATTRIBUTE14_tbl(j)                               -- ATTRIBUTE14
5254                       ,l_ATTRIBUTE15_tbl(j)                               -- ATTRIBUTE15
5255                       ,l_ATTRIBUTE16_tbl(j)                               -- ATTRIBUTE16
5256                       ,l_ATTRIBUTE17_tbl(j)                               -- ATTRIBUTE17
5257                       ,l_ATTRIBUTE18_tbl(j)                               -- ATTRIBUTE18
5258                       ,l_ATTRIBUTE19_tbl(j)                               -- ATTRIBUTE19
5259                       ,l_ATTRIBUTE20_tbl(j)                               -- ATTRIBUTE20
5260                       ,l_ATTRIBUTE21_tbl(j)                               -- ATTRIBUTE21
5261                       ,l_ATTRIBUTE22_tbl(j)                               -- ATTRIBUTE22
5262                       ,l_ATTRIBUTE23_tbl(j)                               -- ATTRIBUTE23
5263                       ,l_ATTRIBUTE24_tbl(j)                               -- ATTRIBUTE24
5264                       ,l_ATTRIBUTE25_tbl(j)                               -- ATTRIBUTE25
5265                       ,l_ATTRIBUTE26_tbl(j)                               -- ATTRIBUTE26
5266                       ,l_ATTRIBUTE27_tbl(j)                               -- ATTRIBUTE27
5267                       ,l_ATTRIBUTE28_tbl(j)                               -- ATTRIBUTE28
5268                       ,l_ATTRIBUTE29_tbl(j)                               -- ATTRIBUTE29
5269                       ,l_ATTRIBUTE30_tbl(j)                               -- ATTRIBUTE30
5270                       ,l_fc_res_type_code_tbl(j)          -- FC_RES_TYPE_CODE
5271                       ,l_resource_class_code_tbl(j)       -- RESOURCE_CLASS_CODE
5272                       ,l_organization_id_tbl(j)           -- ORGANIZATION_ID
5273                       ,l_job_id_tbl(j)                    -- JOB_ID
5274                       ,l_person_id_tbl(j)                 -- PERSON_ID
5275                       ,l_expenditure_type_tbl(j)          -- EXPENDITURE_TYPE
5276                       ,l_expenditure_category_tbl(j)      -- EXPENDITURE_CATEGORY
5277                       ,l_revenue_category_code_tbl(j)     -- REVENUE_CATEGORY_CODE
5278                       ,l_event_type_tbl(j)                -- EVENT_TYPE
5279                       ,l_supplier_id_tbl(j)               -- SUPPLIER_ID
5280                       ,l_non_labor_resource_tbl(j)        -- NON_LABOR_RESOURCE
5281                       ,l_bom_resource_id_tbl(j)           -- BOM_RESOURCE_ID
5282                       ,l_inventory_item_id_tbl(j)         -- INVENTORY_ITEM_ID
5283                       ,l_item_category_id_tbl(j)          -- ITEM_CATEGORY_ID
5284                       ,1                                  -- RECORD_VERSION_NUMBER
5285                       ,NULL                               -- BILLABLE_PERCENT
5286                       ,NULL                               -- TRANSACTION_SOURCE_CODE
5287                       ,l_mfc_cost_type_id_tbl(j)          -- MFC_COST_TYPE_ID
5288                       ,NULL                               -- PROCURE_RESOURCE_FLAG
5289                       ,NULL                               -- ASSIGNMENT_DESCRIPTION
5290                       ,l_incurred_by_res_flag_tbl(j)      -- INCURRED_BY_RES_FLAG
5291                       ,NULL                               -- RATE_JOB_ID
5292                       ,l_rate_expenditure_type_tbl(j)     -- RATE_EXPENDITURE_TYPE
5293                       ,NULL                               -- TA_DISPLAY_FLAG
5294                       ,decode(p_one_to_one_mapping_flag,'Y',decode(l_spread_curve_id_tbl(j),l_fixed_date_sp_id,l_bf_start_date_tbl(j),null)
5295                                                            ,decode(l_spread_curve_id_tbl(j),l_fixed_date_sp_id,l_start_date_tbl(i),null))  -- SP_FIXED_DATE -- Bug 3607061
5296                       ,l_person_type_code_tbl(j)          -- PERSON_TYPE_CODE
5297                       ,decode(l_res_class_flag,'N','N',l_rate_based_flag_tbl(j)) -- RATE_BASED_FLAG -- if context is workplan and prl is resource class disabled then set Rate_based_flag as 'N'
5298                       ,l_use_task_schedule_flag_tbl(j)    -- USE_TASK_SCHEDULE_FLAG
5299                       ,l_rate_func_curr_code_tbl(j)       -- RATE_EXP_FUNC_CURR_CODE
5300                       ,l_org_id_tbl(j)                    -- RATE_EXPENDITURE_ORG_ID
5301                       ,l_incur_by_res_class_code_tbl(j)   -- INCUR_BY_RES_CLASS_CODE
5302                       ,l_incur_by_role_id_tbl(j)          -- INCUR_BY_ROLE_ID
5303                       ,l_project_role_id_tbl(j)           -- PROJECT_ROLE_ID
5304                       ,l_resource_class_flag_tbl(j)       -- RESOURCE_CLASS_FLAG
5305                       ,l_named_role_tbl(j)                -- NAMED_ROLE
5306                       ,l_txn_accum_header_id_tbl(j)       -- TXN ACCUM HEADER ID
5307                       ,l_pm_product_code_tbl(j)               -- PM_PRODUCT_CODE
5308                       ,l_pm_res_asgmt_ref_tbl(j)              -- PM_RES_ASSIGNMENT_REFERENCE
5309 		      ,l_rate_based_flag_tbl(j)           -- resource_RATE_BASED_FLAG
5310 			  ,l_cbs_id_rlm_tbl(j)  					--	CBS_ELEMENT_ID  --Bug#16200605
5311                       )
5312                       RETURNING
5313                       task_id,
5314                       resource_list_member_id,
5315                       resource_assignment_id,
5316                       l_bf_quantity_tbl(j),
5317                       l_bf_raw_cost_tbl(j),
5318                       l_bf_burdened_cost_tbl(j),
5319                       l_bf_revenue_tbl(j),
5320                       l_bf_currency_code_tbl(j),
5321                       l_bf_cost_rate_tbl(j),
5322                       l_bf_bill_rate_tbl(j),
5323                       l_bf_burdened_rate_tbl(j)
5324                       BULK COLLECT INTO
5325                       l_bf_task_id_tbl,
5326                       l_bf_rlm_id_tbl,
5327                       l_bf_ra_id_tbl,
5328                       l_bf_ins_quantity_tbl,
5329                       l_bf_ins_raw_cost_tbl,
5330                       l_bf_ins_burdened_cost_tbl,
5331                       l_bf_ins_revenue_tbl,
5332                       l_bf_ins_currency_code_tbl,
5333                       l_bf_ins_cost_rate_tbl,
5334                       l_bf_ins_bill_rate_tbl,
5335                       l_bf_ins_burdened_rate_tbl;
5336 
5337     -- IPM changes - copy the RA ID's created so that the new entity
5338     -- can be populated.
5339     l_orig_count :=  l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
5340     l_ra_id_temp_tbl.extend(l_bf_ra_id_tbl.COUNT);
5341     l_curr_code_temp_tbl.extend(l_bf_ins_currency_code_tbl.COUNT);
5342     FOR i IN l_orig_count+1 .. l_orig_count+l_bf_ra_id_tbl.COUNT LOOP -- bug 5003827 issue 22
5343       l_ra_id_temp_tbl(i) := l_bf_ra_id_tbl(i-l_orig_count); -- bug 5003827 issue 22
5344       l_curr_code_temp_tbl(i) := l_bf_ins_currency_code_tbl(i-l_orig_count); -- bug 5003827 issue 22
5345     END LOOP; -- bug 5003827 issue 22
5346 
5347 -- hr_utility.trace('after copy 1');
5348 -- hr_utility.trace('l_ra_id_temp_tbl.COUNT IS : ' || l_ra_id_temp_tbl.COUNT);
5349 -- hr_utility.trace('l_bf_ra_id_tbl.COUNT IS : ' || l_bf_ra_id_tbl.COUNT);
5350 -- hr_utility.trace('l_bf_ins_currency_code_tbl(1) IS : ' || l_bf_ins_currency_code_tbl(1));
5351 -- hr_utility.trace('*****');
5352             EXCEPTION
5353             WHEN dml_errors THEN
5354 
5355                 IF p_skip_duplicates_flag='Y' THEN
5356 
5357                     --If p_one_to_one_mapping_flag is not Y then the amounts will never be passed to this API
5358                     --Hence we can ignore the pl/sql tbls bulk collected above
5359                     IF p_one_to_one_mapping_flag='Y' THEN
5360 
5361                         l_index := l_bf_task_id_tbl.count;
5362 
5363 
5364 
5365                         IF (l_index + SQL%BULK_EXCEPTIONS.COUNT ) <> l_eligible_rlm_ids_tbl.COUNT THEN
5366 
5367                             pa_debug.g_err_stage:='No of inserted records + No. of errored records is not equal to total no. of input records';
5368                             pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5369 
5370                             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5371                                                 p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
5372                                                 p_token1         => 'PROCEDURENAME',
5373                                                 p_value1         => 'ADD_PLANNING_TRANSACTIONS',
5374                                                 p_token2         => 'STAGE',
5375                                                 p_value2         => 'Ins Recs + Err Recs <> Total Recs ['||l_index||' , '||SQL%BULK_EXCEPTIONS.COUNT ||' , '||l_eligible_rlm_ids_tbl.COUNT );
5376 
5377                             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5378 
5379                         END IF;
5380 
5381                         l_bf_task_id_tbl.extend(l_rlm_id_no_of_rows-l_bf_task_id_tbl.count);
5382                         l_bf_rlm_id_tbl.extend(l_rlm_id_no_of_rows-l_bf_rlm_id_tbl.count);
5383                         l_bf_ra_id_tbl.extend(l_rlm_id_no_of_rows-l_bf_ra_id_tbl.count);
5384                         l_bf_ins_quantity_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_quantity_tbl.count);
5385                         l_bf_ins_currency_code_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_currency_code_tbl.count);
5386                         l_bf_ins_raw_cost_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_raw_cost_tbl.count);
5387                         l_bf_ins_burdened_cost_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_burdened_cost_tbl.count);
5388                         l_bf_ins_revenue_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_revenue_tbl.count);
5389                         l_bf_ins_cost_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_cost_rate_tbl.count);
5390                         l_bf_ins_bill_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_bill_rate_tbl.count);
5391                         l_bf_ins_burdened_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_burdened_rate_tbl.count);
5392 
5393 
5394                         --Even though the above INSERT statement fails for duplicated records, those records should also be
5395                         --prepared since the calculate API has to be called for those records. This can be done by using
5396                         --SQL%BULK_EXCEPTIONS through which it is possible to identify the iteration in which the dml has
5397                         --failed
5398                         FOR kk IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
5399 
5400 
5401                             l_temp:=SQL%BULK_EXCEPTIONS(kk).ERROR_INDEX;
5402                             SELECT task_id,
5403                                    resource_list_member_id,
5404                                    resource_assignment_id,
5405                                    l_bf_quantity_tbl(l_temp),
5406                                    l_bf_raw_cost_tbl(l_temp),
5407                                    l_bf_burdened_cost_tbl(l_temp),
5408                                    l_bf_revenue_tbl(l_temp),
5409                                    l_bf_currency_code_tbl(l_temp),
5410                                    l_bf_cost_rate_tbl(l_temp),
5411                                    l_bf_bill_rate_tbl(l_temp),
5412                                    l_bf_burdened_rate_tbl(l_temp)
5413                             INTO   l_bf_task_id_tbl(l_index+kk),
5414                                    l_bf_rlm_id_tbl(l_index+kk),
5415                                    l_bf_ra_id_tbl(l_index+kk),
5416                                    l_bf_ins_quantity_tbl(l_index+kk),
5417                                    l_bf_ins_raw_cost_tbl(l_index+kk),
5418                                    l_bf_ins_burdened_cost_tbl(l_index+kk),
5419                                    l_bf_ins_revenue_tbl(l_index+kk),
5420                                    l_bf_ins_currency_code_tbl(l_index+kk),
5421                                    l_bf_ins_cost_rate_tbl(l_index+kk),
5422                                    l_bf_ins_bill_rate_tbl(l_index+kk),
5423                                    l_bf_ins_burdened_rate_tbl(l_index+kk)
5424                             FROM   pa_resource_assignments
5425                             WHERE  project_id=p_project_id
5426                             AND    budget_version_id=l_budget_version_id
5427                             AND    task_id =l_bf_proj_elem_tbl(l_temp)
5428                             AND    resource_list_member_id=l_eligible_rlm_ids_tbl(l_temp)
5429                             AND    project_assignment_id=-1;
5430 
5431 
5432                         END LOOP;
5433 
5434                         --_ins_ tbls are used only for the FORALL Insert above. Copy them back to _bf_ tbls
5435                         --which are used in processing below
5436                         l_bf_quantity_tbl       :=    l_bf_ins_quantity_tbl;
5437                         l_bf_raw_cost_tbl       :=    l_bf_ins_raw_cost_tbl ;
5438                         l_bf_burdened_cost_tbl  :=    l_bf_ins_burdened_cost_tbl;
5439                         l_bf_revenue_tbl        :=    l_bf_ins_revenue_tbl ;
5440                         l_bf_currency_code_tbl  :=    l_bf_ins_currency_code_tbl;
5441                         l_bf_cost_rate_tbl      :=    l_bf_ins_cost_rate_tbl;
5442                         l_bf_bill_rate_tbl      :=    l_bf_ins_bill_rate_tbl;
5443                         l_bf_burdened_rate_tbl  :=    l_bf_ins_burdened_rate_tbl;
5444 
5445     -- IPM changes - copy the RA ID's created so that the new entity
5446     -- can be populated.
5447     l_orig_count :=  l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
5448     l_ra_id_temp_tbl.extend(l_bf_ra_id_tbl.COUNT);
5449     l_curr_code_temp_tbl.extend(l_bf_ins_currency_code_tbl.COUNT);
5450     FOR i IN l_orig_count+1 .. l_orig_count+l_bf_ra_id_tbl.COUNT LOOP -- bug 5003827 issue 22
5451       l_ra_id_temp_tbl(i) := l_bf_ra_id_tbl(i-l_orig_count); -- bug 5003827 issue 22
5452       l_curr_code_temp_tbl(i) := l_bf_ins_currency_code_tbl(i-l_orig_count); -- bug 5003827 issue 22
5453     END LOOP; -- bug 5003827 issue 22
5454 
5455 -- hr_utility.trace('after copy 2');
5456 -- hr_utility.trace('l_ra_id_temp_tbl.COUNT IS : ' || l_ra_id_temp_tbl.COUNT);
5457 -- hr_utility.trace('l_bf_ra_id_tbl.COUNT IS : ' || l_bf_ra_id_tbl.COUNT);
5458 -- hr_utility.trace('*****');
5459 
5460  								--Added for bug#14201002
5461  	                                                 ELSE  --ELSE case for p_one_to_one_mapping_flag='Y' THEN
5462  	                                                                 l_index := l_bf_task_id_tbl.count;
5463 
5464  	                                                                 IF (l_index + SQL%BULK_EXCEPTIONS.COUNT ) <> l_eligible_rlm_ids_tbl.COUNT THEN
5465 
5466  	                                                                         pa_debug.g_err_stage:='No of inserted records + No. of errored records is not equal to total no. of input records';
5467  	                                                                         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5468 
5469  	                                                                         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5470  	                                                                                                                 p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
5471  	                                                                                                                 p_token1         => 'PROCEDURENAME',
5472  	                                                                                                                 p_value1         => 'ADD_PLANNING_TRANSACTIONS',
5473  	                                                                                                                 p_token2         => 'STAGE',
5474  	p_value2         => 'Ins Recs + Err Recs <> Total Recs ['||l_index||' , '||SQL%BULK_EXCEPTIONS.COUNT ||' , '||l_eligible_rlm_ids_tbl.COUNT );
5475 
5476  	                                                                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5477 
5478  	                                                                 END IF;
5479 
5480  	                                                                 l_orig_count :=  l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
5481  	                                                                 l_ra_id_temp_tbl.extend(l_bf_ra_id_tbl.COUNT);
5482  	                                                                 l_curr_code_temp_tbl.extend(l_bf_ins_currency_code_tbl.COUNT);
5483 
5484  	                                                                 FOR i IN l_orig_count+1 .. l_orig_count+l_bf_ra_id_tbl.COUNT LOOP
5485  	                                                                   l_ra_id_temp_tbl(i) := l_bf_ra_id_tbl(i-l_orig_count);
5486  	                                                                 END LOOP;
5487  	                                                 -- End of code changes done for bug#14201002
5488                     END IF;--IF p_one_to_one_mapping_flag='Y' THEN
5489 
5490                 ELSE
5491 
5492                     pa_debug.g_err_stage:='No of duplicates found '||SQL%BULK_EXCEPTIONS.COUNT;
5493                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5494 
5495                     RAISE;
5496 
5497                 END IF;
5498 
5499             END;
5500 
5501             IF l_debug_mode = 'Y' THEN
5502                 pa_debug.g_err_stage:='FLAG 2 '||l_bf_ra_id_tbl.COUNT;
5503                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5504             END IF;
5505 
5506             -------------------------------------------------------------------------------
5507             --No of records in rlm id tbl should be equal to the no of records in ra id tb;
5508             -------------------------------------------------------------------------------
5509             IF l_bf_ra_id_tbl.COUNT <> l_eligible_rlm_ids_tbl.COUNT AND
5510                (p_skip_duplicates_flag = 'N') THEN
5511 
5512                 IF l_debug_mode = 'Y' THEN
5513                   pa_debug.g_err_stage:='INSIDE Bulk Data insert for budget/forecast';
5514                   pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5515 
5516                   pa_debug.g_err_stage:='For Budget and Forcast p_context - data mismatch';
5517                   pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5518                 END IF;
5519                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5520 
5521             END IF;
5522 
5523             l_index := 1;
5524 
5525             -----------------------------------------------------------------------
5526             -- Populating resource assignments and corresponding spread amount flags
5527             -- in PLSql tables. for IN parameters of Calculate API
5528             -- If Quantity/Raw_Cost/Burdened_Cost exists in the IN parameter then
5529             -- set it to 'Y'or else set it to 'N'.
5530             --Calculate API will be called only when p_one_to_one_mapping_flag is Y
5531             -----------------------------------------------------------------------
5532             --IF nvl(p_skip_duplicates_flag,'N') = 'N' THEN -- Bug 3836358
5533             IF p_one_to_one_mapping_flag='Y' THEN
5534 
5535                 IF l_bf_ra_id_tbl.COUNT >0 THEN
5536 
5537                     FOR k IN l_bf_ra_id_tbl.FIRST .. l_bf_ra_id_tbl.LAST LOOP
5538 
5539                         l_res_assignment_id_tbl(l_index) := l_bf_ra_id_tbl(k);
5540                         l_amount_exists :='N';
5541 
5542                         IF l_bf_quantity_tbl.EXISTS(k) AND
5543                            NVL(l_bf_quantity_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM  AND
5544                            /* bug fix:Bug fix:5726773 l_bf_quantity_tbl(k) <> 0 THEN */
5545  	                   l_bf_quantity_tbl(k) is NOT NULL THEN
5546                           l_quantity_tbl(l_index)     := l_bf_quantity_tbl(k);
5547                           l_amount_exists := 'Y';
5548                         END IF;
5549 
5550                         IF l_bf_raw_cost_tbl.EXISTS(k) AND
5551                            NVL(l_bf_raw_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
5552                            /* bug fix:Bug fix:5726773 l_bf_raw_cost_tbl(k) <> 0 THEN */
5553  	                   l_bf_raw_cost_tbl(k) is NOT NULL THEN
5554                           l_raw_cost_tbl(l_index)     := l_bf_raw_cost_tbl(k);
5555                           l_amount_exists := 'Y';
5556                         END IF;
5557 
5558                         IF l_bf_burdened_cost_tbl.EXISTS(k) AND
5559                            NVL(l_bf_burdened_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
5560                            /* bug fix:Bug fix:5726773 l_bf_burdened_cost_tbl(k) <> 0 THEN */
5561  	                   l_bf_burdened_cost_tbl(k) is NOT NULL THEN
5562                           l_burdened_cost_tbl(l_index)     := l_bf_burdened_cost_tbl(k);
5563                           l_amount_exists := 'Y';
5564                         END IF;
5565 
5566                         IF l_bf_revenue_tbl.EXISTS(k) AND
5567                            NVL(l_bf_revenue_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
5568                            /* bug fix:Bug fix:5726773 l_bf_revenue_tbl(k) <> 0 THEN */
5569  	                   l_bf_revenue_tbl(k) is NOT NULL THEN
5570                           l_revenue_tbl(l_index)     := l_bf_revenue_tbl(k);
5571                           l_amount_exists := 'Y';
5572                         END IF;
5573 
5574                         IF l_amount_exists ='Y' THEN
5575                             IF l_debug_mode = 'Y' THEN
5576                                pa_debug.g_err_stage:='Amount exists and preparing the tbls for calc API';
5577                                pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5578                             END IF;
5579 
5580                             IF l_bf_currency_code_tbl.EXISTS(k) AND
5581                                NVL(l_bf_currency_code_tbl(k),FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
5582                                l_currency_code_tbl(l_index)     := l_bf_currency_code_tbl(k);
5583                             ELSE
5584 
5585                                 IF l_debug_mode = 'Y' THEN
5586                                     pa_debug.g_err_stage:='Currency code not passed when amounts are passed';
5587                                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5588                                 END IF;
5589                                 --dbms_output.put_line('curr code not passed');
5590                                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5591                                                       p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
5592 
5593                                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5594 
5595                             END IF;
5596 
5597 
5598                             IF l_bf_cost_rate_tbl.EXISTS(k) THEN
5599                               l_cost_rate_tbl(l_index)     := l_bf_cost_rate_tbl(k);
5600                             END IF;
5601 
5602                             IF l_bf_bill_rate_tbl.EXISTS(k) THEN
5603                               l_bill_rate_tbl(l_index)     := l_bf_bill_rate_tbl(k);
5604                             END IF;
5605 
5606                             IF l_bf_burdened_rate_tbl.EXISTS(k) THEN
5607                               l_burden_multiplier_tbl(l_index)     := l_bf_burdened_rate_tbl(k);
5608                             END IF;
5609 
5610                             l_call_calc_api := 'Y';
5611                             l_spread_amount_flags_tbl(l_index) := 'Y';
5612                             l_index := l_index + 1;
5613 
5614                         END IF;
5615 
5616                     END LOOP;
5617 
5618                 END IF;--IF l_bf_ra_id_tbl.COUNT >0 THEN
5619 
5620             END IF;--IF p_one_to_one_mapping_flag='Y' THEN
5621             -- END IF; -- Bug 3836358
5622 
5623             EXIT WHEN p_one_to_one_mapping_flag = 'Y';
5624         END IF; -- if condition for p_context
5625       END LOOP; -- loop for task_element_version_id
5626     END IF; -- p_context in TA/BF
5627     ----------------------------------------------------
5628     -- Loop for all the task_elem_version_id  --- Ends
5629     ----------------------------------------------------
5630 
5631     /* In create version calculate need not and should not be called... */
5632     IF NVL(p_calling_module,'-99') <> 'CREATE_VERSION' AND l_index > 1 THEN
5633         -- Remove the extra records from the input pl/sql tables
5634         l_res_assignment_id_tbl.delete(l_index,l_res_assignment_id_tbl.count);
5635         l_delete_budget_lines_tbl.delete(l_index,l_delete_budget_lines_tbl.count);
5636         l_spread_amount_flags_tbl.delete(l_index,l_spread_amount_flags_tbl.count);
5637         l_currency_code_tbl.delete(l_index,l_currency_code_tbl.count);
5638         l_quantity_tbl.delete(l_index,l_quantity_tbl.count);
5639         l_raw_cost_tbl.delete(l_index,l_raw_cost_tbl.count);
5640         l_burdened_cost_tbl.delete(l_index,l_burdened_cost_tbl.count);
5641         l_revenue_tbl.delete(l_index,l_revenue_tbl.count);
5642         l_cost_rate_tbl.delete(l_index,l_cost_rate_tbl.count);
5643         l_burden_multiplier_tbl.delete(l_index,l_burden_multiplier_tbl.count);
5644         l_bill_rate_tbl.delete(l_index,l_bill_rate_tbl.count);
5645         l_line_start_date_tbl.delete(l_index,l_line_start_date_tbl.count);
5646         l_line_end_date_tbl.delete(l_index,l_line_end_date_tbl.count);
5647 
5648         IF l_debug_mode = 'Y' THEN
5649            IF l_res_assignment_id_tbl.COUNT > 0 THEN
5650               FOR i in l_res_assignment_id_tbl.FIRST .. l_res_assignment_id_tbl.LAST LOOP
5651                    pa_debug.g_err_stage:='CALCULATE PARAM l_res_assignment_id_tbl :'||l_res_assignment_id_tbl(i);
5652                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5653 
5654                    pa_debug.g_err_stage:='CALCULATE PARAM l_quantity_tbl :'||l_quantity_tbl(i);
5655                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5656 
5657                    pa_debug.g_err_stage:='CALCULATE PARAM l_raw_cost_tbl :'||l_raw_cost_tbl(i);
5658                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5659 
5660                    pa_debug.g_err_stage:='CALCULATE PARAM l_burdened_cost_tbl :'||l_burdened_cost_tbl(i);
5661                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5662 
5663                    pa_debug.g_err_stage:='CALCULATE PARAM l_revenue_tbl :'||l_revenue_tbl(i);
5664                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5665 
5666                    pa_debug.g_err_stage:='CALCULATE PARAM l_currency_code_tbl :'||l_currency_code_tbl(i);
5667                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5668 
5669                    pa_debug.g_err_stage:='CALCULATE PARAM l_cost_rate_tbl :'||l_cost_rate_tbl(i);
5670                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5671 
5672                    pa_debug.g_err_stage:='CALCULATE PARAM l_burden_multiplier_tbl :'||l_burden_multiplier_tbl(i);
5673                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5674 
5675                    pa_debug.g_err_stage:='CALCULATE PARAM l_bill_rate_tbl :'||l_bill_rate_tbl(i);
5676                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5677               END LOOP;
5678            END IF;
5679         END IF;
5680 
5681         PA_FP_CALC_PLAN_PKG.calculate(
5682           p_project_id                 =>   p_project_id
5683          ,p_budget_version_id          =>   l_budget_version_id
5684          ,p_source_context             =>   PA_FP_CONSTANTS_PKG.G_CALC_API_RESOURCE_CONTEXT
5685          ,p_resource_assignment_tab    =>   l_res_assignment_id_tbl
5686          ,p_delete_budget_lines_tab    =>   l_delete_budget_lines_tbl
5687          -- bug fix:5726773,p_spread_amts_flag_tab       =>   l_spread_amount_flags_tbl
5688          ,p_txn_currency_code_tab      =>   l_currency_code_tbl -- derive
5689          -- as told by sanjay ,p_txn_currency_override_tab  =>   l_currency_code_tbl
5690          ,p_total_qty_tab              =>   l_quantity_tbl -- derive
5691          ,p_total_raw_cost_tab         =>   l_raw_cost_tbl -- dervie
5692          ,p_total_burdened_cost_tab    =>   l_burdened_cost_tbl -- dervie
5693          ,p_total_revenue_tab          =>   l_revenue_tbl -- derive
5694          ,p_raw_cost_rate_tab          =>   l_cost_rate_tbl -- derive
5695          ,p_rw_cost_rate_override_tab  =>   l_cost_rate_tbl
5696          ,p_b_cost_rate_tab            =>   l_burden_multiplier_tbl -- derive
5697          ,p_b_cost_rate_override_tab   =>   l_burden_multiplier_tbl
5698          ,p_bill_rate_tab              =>   l_bill_rate_tbl -- derive
5699          ,p_bill_rate_override_tab     =>   l_bill_rate_tbl
5700          ,p_line_start_date_tab        =>   l_line_start_date_tbl --PA_PLSQL_DATATYPES.EmptyDateTab
5701          ,p_line_end_date_tab          =>   l_line_end_date_tbl   --PA_PLSQL_DATATYPES.EmptyDateTab
5702          ,p_apply_progress_flag        =>   p_apply_progress_flag
5703          ,p_rollup_required_flag      =>    l_pji_rollup_required --Bug 4200168
5704          ,x_return_status              =>   l_return_status
5705          ,x_msg_count                  =>   l_msg_count
5706          ,x_msg_data                   =>   l_msg_data);
5707 
5708         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5709             IF l_debug_mode = 'Y' THEN
5710                 pa_debug.g_err_stage:='Called API PA_FP_CALC_PLAN_PKG.calculate api returned error';
5711                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5712             END IF;
5713 
5714             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5715         END IF;
5716 
5717 -- Added for bug 4492493, 4548240
5718         IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
5719             AND PA_TASK_ASSIGNMENT_UTILS.Is_Progress_Rollup_Required(p_project_id) = 'Y') OR
5720            (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
5721             AND pa_task_assignment_utils.g_require_progress_rollup = 'Y') THEN
5722 /* Bug 13419867 starts */
5723 /*             PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
5724                 ( p_calling_context       => 'ASGMT_PLAN_CHANGE'
5725                  ,p_project_id              => p_project_id
5726                  ,p_structure_version_id   => pa_project_structure_utils.get_latest_wp_version(p_project_id)
5727                  ,p_pub_struc_ver_id      => pa_project_structure_utils.get_latest_wp_version(p_project_id)
5728                  ,x_return_status              =>   l_return_status
5729                  ,x_msg_count                  =>   l_msg_count
5730                  ,x_msg_data                   =>   l_msg_data);
5731 
5732                  pa_task_assignment_utils.g_require_progress_rollup := 'N';
5733 */
5734         IF (p_extraction_type IN ('INCREMENTAL', 'FULL')) THEN
5735             -- Log the occurence, so that request can be submitted at the end
5736             insert into pa_asgmt_plan_change_t (project_id, strcut_ver_id, pub_strcut_ver_id)
5737                    values(p_project_id, pa_project_structure_utils.get_latest_wp_version(p_project_id),
5738                           pa_project_structure_utils.get_latest_wp_version(p_project_id));
5739         ELSE
5740              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
5741                 ( p_calling_context       => 'ASGMT_PLAN_CHANGE'
5742                  ,p_project_id              => p_project_id
5743                  ,p_structure_version_id   => pa_project_structure_utils.get_latest_wp_version(p_project_id)
5744                  ,p_pub_struc_ver_id      => pa_project_structure_utils.get_latest_wp_version(p_project_id)
5745                  ,x_return_status              =>   l_return_status
5746                  ,x_msg_count                  =>   l_msg_count
5747                  ,x_msg_data                   =>   l_msg_data);
5748 
5749                  pa_task_assignment_utils.g_require_progress_rollup := 'N';
5750         END IF;
5751 /* Bug 13419867 End */
5752 
5753         END IF;
5754 
5755         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5756             IF l_debug_mode = 'Y' THEN
5757                 pa_debug.g_err_stage:='Called API PA_PROJ_TASK_STRUC_PUB.process_wbs_updates_wrp';
5758                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5759             END IF;
5760 
5761             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5762         END IF;
5763 --End bug 4492493
5764 
5765     END IF;
5766 
5767 
5768     -- Bug 8370812 - Fix is done for the TASK_ASSIGNMENTS context.
5769     IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
5770 
5771         PA_FIN_PLAN_PUB.create_default_plan_txn_rec
5772             (p_budget_version_id => l_budget_version_id,
5773              p_calling_module    => 'UPDATE_PLAN_TRANSACTION',
5774              p_ra_id_tbl         => l_ra_id_rollup_tbl,
5775              p_curr_code_tbl     => l_curr_code_rollup_tbl,
5776              x_return_status     => x_return_status,
5777              x_msg_count         => x_msg_count,
5778              x_msg_data          => x_msg_data
5779             );
5780     ELSE
5781         -- IPM changes - rollup amounts in new entity
5782         /* Start of Addition for bug 7161809 */
5783 
5784         PA_FIN_PLAN_PUB.create_default_plan_txn_rec
5785             (p_budget_version_id => l_budget_version_id,
5786              p_calling_module    => 'UPDATE_PLAN_TRANSACTION',
5787              p_ra_id_tbl         => l_ra_id_temp_tbl,
5788              p_curr_code_tbl     => l_curr_code_temp_tbl,
5789              p_expenditure_type_tbl => l_direct_expenditure_type_tbl,
5790              x_return_status     => x_return_status,
5791              x_msg_count         => x_msg_count,
5792              x_msg_data          => x_msg_data
5793             );
5794     END IF;
5795 
5796     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5797              IF l_debug_mode = 'Y' THEN
5798                    pa_debug.g_err_stage:='Called API PA_FIN_PLAN_PUB.create_default_plan_txn_rec returned error';
5799                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage, 3);
5800              END IF;
5801              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5802        END IF;      /* 7161809 */
5803 
5804     -- Call the UTIL API to get the financial plan info l_fp_cols_rec
5805 
5806 /*   Commented for bug 7161809
5807 -- hr_utility.trace('p_project_id IS : ' || p_project_id);
5808 -- hr_utility.trace('l_budget_version_id IS : ' || l_budget_version_id);
5809     pa_fp_gen_amount_utils.get_plan_version_dtls
5810         (p_project_id         => p_project_id,
5811          p_budget_version_id  => l_budget_version_id,
5812          x_fp_cols_rec        => l_fp_cols_rec,
5813          x_return_status      => x_return_status,
5814          x_msg_count          => x_msg_count,
5815          x_msg_data           => x_msg_data);
5816 
5817 -- hr_utility.trace('x_return_status IS : ' || x_return_status);
5818 -- hr_utility.trace('x_msg_count IS : ' || x_msg_count);
5819 -- hr_utility.trace('x_msg_data IS : ' || x_msg_data);
5820 
5821     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5822 
5823        IF l_debug_mode = 'Y' THEN
5824           pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
5825           pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage, 3);
5826        END IF;
5827        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5828     END IF;
5829 
5830     -- IPM changes - populate tmp table to use for rollup
5831     delete pa_resource_asgn_curr_tmp;
5832 
5833     IF l_ra_id_temp_tbl.COUNT > 0 THEN
5834        -- IPM - populate the currency code
5835        l_curr_code_temp_tbl.extend(l_ra_id_temp_tbl.COUNT);
5836        FOR j IN l_ra_id_temp_tbl.first .. l_ra_id_temp_tbl.last LOOP
5837           IF p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN,
5838                            PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK) THEN
5839              -- Use project currency for workplan
5840              -- Bug 5003827 Issue 1
5841              l_curr_code_temp_tbl(j) := nvl(l_curr_code_temp_tbl(j),
5842                                             l_proj_curr_code);
5843           ELSE
5844              l_curr_code_temp_tbl(j) := nvl(l_curr_code_temp_tbl(j),
5845                                             l_proj_func_curr_code);
5846 
5847           END IF;
5848        END LOOP;
5849 
5850        FORALL i IN l_ra_id_temp_tbl.first .. l_ra_id_temp_tbl.last
5851           INSERT INTO pa_resource_asgn_curr_tmp
5852              (RA_TXN_ID
5853              ,RESOURCE_ASSIGNMENT_ID
5854              ,TXN_CURRENCY_CODE
5855              ,DELETE_FLAG
5856 	     ,TXN_RAW_COST_RATE_OVERRIDE  -- 6839167
5857 	     ,TXN_BURDEN_COST_RATE_OVERRIDE
5858 	     ,TXN_BILL_RATE_OVERRIDE
5859 	     ,expenditure_type --added for EnC
5860              )
5861           SELECT pa_resource_asgn_curr_s.nextval
5862                 ,l_ra_id_temp_tbl(i)
5863                 ,l_curr_code_temp_tbl(i)
5864                 ,NULL
5865                 ,prac.TXN_RAW_COST_RATE_OVERRIDE --6839167
5866                 ,prac.TXN_BURDEN_COST_RATE_OVERRIDE
5867 		,prac.TXN_BILL_RATE_OVERRIDE
5868 		,l_direct_expenditure_type_tbl(i)
5869 		 from pa_resource_asgn_curr prac
5870 		 where prac.RESOURCE_ASSIGNMENT_ID=l_ra_id_temp_tbl(i);
5871     END IF;
5872 
5873     pa_res_asg_currency_pub.maintain_data(
5874          p_fp_cols_rec                  => l_fp_cols_rec,
5875          p_calling_module               => 'UPDATE_PLAN_TRANSACTION',
5876          p_delete_flag                  => 'N',
5877          p_copy_flag                    => 'N',
5878          p_src_version_id               => NULL,
5879          p_copy_mode                    => NULL,
5880          p_rollup_flag                  => 'Y',
5881          p_version_level_flag           => 'N',
5882          p_called_mode                  => 'SELF_SERVICE',
5883          x_return_status                => x_return_status,
5884          x_msg_count                    => x_msg_count,
5885          x_msg_data                     => x_msg_data
5886          );
5887 
5888        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5889 
5890              IF l_debug_mode = 'Y' THEN
5891                    pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
5892                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage, 3);
5893              END IF;
5894              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5895        END IF;   */
5896 
5897     IF l_debug_mode = 'Y' THEN
5898         pa_debug.g_err_stage:='CALLED THE PA_FP_CALC_PLAN_PKG.CALCULATE API';
5899         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5900        pa_debug.reset_curr_function;
5901     END IF;
5902 EXCEPTION
5903 
5904      WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
5905            ROLLBACK TO SAVEPOINT ADD_PLANNING_TRANS_SP;
5906            l_msg_count := FND_MSG_PUB.count_msg;
5907              IF l_msg_count = 1 THEN
5908                 PA_INTERFACE_UTILS_PUB.get_messages
5909                      (p_encoded        => FND_API.G_TRUE
5910                       ,p_msg_index      => 1
5911                       ,p_msg_count      => l_msg_count
5912                       ,p_msg_data       => l_msg_data
5913                       ,p_data           => l_data
5914                       ,p_msg_index_out  => l_msg_index_out);
5915                 x_msg_data := l_data;
5916                 x_msg_count := l_msg_count;
5917 
5918              ELSE
5919 
5920                 x_msg_count := l_msg_count;
5921              END IF;
5922            x_return_status := FND_API.G_RET_STS_ERROR;
5923 	IF l_debug_mode = 'Y' THEN
5924            pa_debug.reset_curr_function;
5925 	END IF;
5926      WHEN OTHERS THEN
5927 
5928            ROLLBACK TO SAVEPOINT ADD_PLANNING_TRANS_SP;
5929           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5930           x_msg_count     := 1;
5931           x_msg_data      := SQLERRM;
5932           FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'PA_FP_PLANNING_TRANSACTION_PUB'
5933                                   ,p_procedure_name  => 'add_planning_transactions');
5934 
5935            IF l_debug_mode = 'Y' THEN
5936              pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
5937              pa_debug.write('add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,5);
5938              pa_debug.reset_curr_function;
5939 	   END IF;
5940           RAISE;
5941 
5942 END add_planning_transactions;
5943 
5944 
5945 /*This procedure should be called to update planning transactions
5946   valid values for p_context are 'BUDGET' , 'FORECAST', 'WORKPLAN' and 'TASK_ASSIGNMENT'
5947 */
5948 /*******************************************************************************************************
5949 As part of Bug 3749516 All References to Equipment Effort or Equip Resource Class has been removed in
5950 PROCEDURE update_planning_transactions.
5951 All _addl_ and p_equip_people_effort_tbl IN parameters have also been removed as they were not being
5952  used/referred.
5953 ********************************************************************************************************/
5954 PROCEDURE update_planning_transactions
5955 (
5956        p_context                      IN          VARCHAR2
5957       ,p_calling_context              IN          VARCHAR2 DEFAULT NULL  -- Added for Bug 6856934
5958       ,p_struct_elem_version_id       IN          Pa_proj_element_versions.element_version_id%TYPE
5959       ,p_budget_version_id            IN          Pa_budget_versions.budget_version_id%TYPE
5960       ,p_task_elem_version_id_tbl     IN          SYSTEM.PA_NUM_TBL_TYPE
5961       ,p_task_name_tbl                IN          SYSTEM.PA_VARCHAR2_240_TBL_TYPE
5962       ,p_task_number_tbl              IN          SYSTEM.PA_VARCHAR2_100_TBL_TYPE
5963       ,p_start_date_tbl               IN          SYSTEM.PA_DATE_TBL_TYPE
5964       ,p_end_date_tbl                 IN          SYSTEM.PA_DATE_TBL_TYPE
5965       ,p_planned_people_effort_tbl    IN          SYSTEM.PA_NUM_TBL_TYPE
5966 --    One pl/sql record in          The         Above tables
5967       ,p_resource_assignment_id_tbl   IN          SYSTEM.PA_NUM_TBL_TYPE
5968       ,p_resource_list_member_id_tbl  IN          SYSTEM.PA_NUM_TBL_TYPE
5969       ,p_assignment_description_tbl   IN          SYSTEM.PA_VARCHAR2_240_TBL_TYPE
5970       ,p_project_assignment_id_tbl    IN          SYSTEM.pa_num_tbl_type
5971       ,p_resource_alias_tbl           IN          SYSTEM.PA_VARCHAR2_80_TBL_TYPE
5972       ,p_resource_class_flag_tbl      IN          SYSTEM.PA_VARCHAR2_1_TBL_TYPE
5973       ,p_resource_class_code_tbl      IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5974       ,p_resource_class_id_tbl        IN          SYSTEM.PA_NUM_TBL_TYPE
5975       ,p_res_type_code_tbl            IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5976       ,p_resource_code_tbl            IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5977       ,p_resource_name                IN          SYSTEM.PA_VARCHAR2_240_TBL_TYPE -- bug fix 3461537
5978       ,p_person_id_tbl                IN          SYSTEM.PA_NUM_TBL_TYPE
5979       ,p_job_id_tbl                   IN          SYSTEM.PA_NUM_TBL_TYPE
5980       ,p_person_type_code             IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5981       ,p_bom_resource_id_tbl          IN          SYSTEM.PA_NUM_TBL_TYPE
5982       ,p_non_labor_resource_tbl       IN          SYSTEM.PA_VARCHAR2_20_TBL_TYPE
5983       ,p_inventory_item_id_tbl        IN          SYSTEM.PA_NUM_TBL_TYPE
5984       ,p_item_category_id_tbl         IN          SYSTEM.PA_NUM_TBL_TYPE
5985       ,p_project_role_id_tbl          IN          SYSTEM.PA_NUM_TBL_TYPE
5986       ,p_project_role_name_tbl        IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5987       ,p_organization_id_tbl          IN          SYSTEM.PA_NUM_TBL_TYPE
5988       ,p_organization_name_tbl        IN          SYSTEM.PA_VARCHAR2_240_TBL_TYPE
5989       ,p_fc_res_type_code_tbl         IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5990       ,p_financial_category_code_tbl  IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5991       ,p_expenditure_type_tbl         IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5992       ,p_expenditure_category_tbl     IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5993       ,p_event_type_tbl               IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5994       ,p_revenue_category_code_tbl    IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5995       ,p_supplier_id_tbl              IN          SYSTEM.PA_NUM_TBL_TYPE
5996       ,p_unit_of_measure_tbl          IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5997       ,p_spread_curve_id_tbl          IN          SYSTEM.PA_NUM_TBL_TYPE
5998       ,p_etc_method_code_tbl          IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5999       ,p_mfc_cost_type_id_tbl         IN          SYSTEM.PA_NUM_TBL_TYPE
6000       ,p_procure_resource_flag_tbl    IN          SYSTEM.PA_VARCHAR2_1_TBL_TYPE
6001       ,p_incurred_by_res_flag_tbl     IN          SYSTEM.PA_VARCHAR2_1_TBL_TYPE
6002       ,p_incur_by_resource_code_tbl   IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
6003       ,p_incur_by_resource_name_tbl   IN          SYSTEM.PA_VARCHAR2_240_TBL_TYPE
6004       ,p_incur_by_res_class_code_tbl  IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
6005       ,p_incur_by_role_id_tbl         IN          SYSTEM.PA_NUM_TBL_TYPE
6006       ,p_use_task_schedule_flag_tbl   IN          SYSTEM.PA_VARCHAR2_1_TBL_TYPE
6007       ,p_planning_start_date_tbl      IN          SYSTEM.PA_DATE_TBL_TYPE
6008       ,p_planning_end_date_tbl        IN          SYSTEM.PA_DATE_TBL_TYPE
6009       ,p_schedule_start_date_tbl      IN          SYSTEM.PA_DATE_TBL_TYPE
6010       ,p_schedule_end_date_tbl        IN          SYSTEM.PA_DATE_TBL_TYPE
6011       ,p_quantity_tbl                 IN          SYSTEM.PA_NUM_TBL_TYPE
6012       ,p_currency_code_tbl            IN          SYSTEM.PA_VARCHAR2_15_TBL_TYPE
6013       ,p_txn_currency_override_tbl    IN          SYSTEM.PA_VARCHAR2_15_TBL_TYPE
6014       ,p_raw_cost_tbl                 IN          SYSTEM.PA_NUM_TBL_TYPE
6015       ,p_burdened_cost_tbl            IN          SYSTEM.PA_NUM_TBL_TYPE
6016       ,p_revenue_tbl                  IN          SYSTEM.PA_NUM_TBL_TYPE
6017       ,p_cost_rate_tbl                IN          SYSTEM.PA_NUM_TBL_TYPE
6018       ,p_cost_rate_override_tbl       IN          SYSTEM.PA_NUM_TBL_TYPE
6019       ,p_burdened_rate_tbl            IN          SYSTEM.PA_NUM_TBL_TYPE
6020       ,p_burdened_rate_override_tbl   IN          SYSTEM.PA_NUM_TBL_TYPE
6021       ,p_bill_rate_tbl                IN          SYSTEM.PA_NUM_TBL_TYPE
6022       ,p_bill_rate_override_tbl       IN          SYSTEM.PA_NUM_TBL_TYPE
6023       ,p_billable_percent_tbl         IN          SYSTEM.PA_NUM_TBL_TYPE
6024       ,p_sp_fixed_date_tbl            IN          SYSTEM.PA_DATE_TBL_TYPE
6025       ,p_named_role_tbl               IN          SYSTEM.PA_VARCHAR2_80_TBL_TYPE
6026       ,p_financial_category_name_tbl  IN          SYSTEM.PA_VARCHAR2_80_TBL_TYPE
6027       ,p_supplier_name_tbl            IN          SYSTEM.PA_VARCHAR2_240_TBL_TYPE
6028       ,p_attribute_category_tbl       IN          SYSTEM.PA_VARCHAR2_30_TBL_TYPE
6029       ,p_attribute1_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6030       ,p_attribute2_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6031       ,p_attribute3_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6032       ,p_attribute4_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6033       ,p_attribute5_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6034       ,p_attribute6_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6035       ,p_attribute7_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6036       ,p_attribute8_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6037       ,p_attribute9_tbl               IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6038       ,p_attribute10_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6039       ,p_attribute11_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6040       ,p_attribute12_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6041       ,p_attribute13_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6042       ,p_attribute14_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6043       ,p_attribute15_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6044       ,p_attribute16_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6045       ,p_attribute17_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6046       ,p_attribute18_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6047       ,p_attribute19_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6048       ,p_attribute20_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6049       ,p_attribute21_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6050       ,p_attribute22_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6051       ,p_attribute23_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6052       ,p_attribute24_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6053       ,p_attribute25_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6054       ,p_attribute26_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6055       ,p_attribute27_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6056       ,p_attribute28_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6057       ,p_attribute29_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6058       ,p_attribute30_tbl              IN          SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6059       ,p_apply_progress_flag          IN          VARCHAR2 /* Passed from apply_progress api (sakthi's team) */
6060       ,p_scheduled_delay              IN          SYSTEM.pa_num_tbl_type --For bug 3948128
6061       ,p_pji_rollup_required         IN          VARCHAR2  DEFAULT 'Y' /* Bug# 4200168 */
6062       ,p_upd_cost_amts_too_for_ta_flg IN VARCHAR2 DEFAULT 'N' --Added for bug #4538286
6063       ,p_distrib_amts                 IN          VARCHAR2  DEFAULT 'Y' -- Bug 5684639.
6064       ,p_direct_expenditure_type_tbl               IN  SYSTEM.PA_VARCHAR2_30_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE() --added for Enc
6065       ,x_return_status                OUT         NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6066       ,x_msg_data                     OUT         NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6067       ,x_msg_count                    OUT         NOCOPY NUMBER --File.Sql.39 bug 4440895
6068 ) IS
6069       l_return_status                VARCHAR2(2000);
6070       l_msg_count                    NUMBER := 0;
6071       l_data                         VARCHAR2(2000);
6072       l_msg_data                     VARCHAR2(2000);
6073 
6074       l_msg_index_out                NUMBER;
6075       l_debug_mode                   VARCHAR2(1);
6076       l_debug_level3                 CONSTANT NUMBER := 3;
6077       l_debug_level5                 CONSTANT NUMBER := 5;
6078       l_module_name                  VARCHAR2(100) := 'Update_Planning_Transactions' || 'pa.plsql.pa_fp_planning_transaction_pub';
6079       l_loop_start                   NUMBER;
6080       l_loop_end                     NUMBER;
6081 
6082       l_budget_version_id            pa_budget_versions.budget_version_id%TYPE;
6083       l_project_id                   pa_projects_all.project_id%TYPE;
6084       l_fixed_date_sp_id             pa_spread_curves_b.spread_curve_id%TYPE; -- bug 3607061
6085       l_pji_rollup_required         VARCHAR2(1); --Bug 4200168
6086 
6087 	  l_job_id_temp                       NUMBER;  --bug#13566990
6088 
6089 
6090       /* Start of variables for Variable for TA Validations for p_context = TASK_ASSIGNMENTS
6091        */
6092       l_task_rec_tbl                 PA_TASK_ASSIGNMENT_UTILS.l_task_rec_tbl_type;
6093       l_resource_rec_tbl             PA_TASK_ASSIGNMENT_UTILS.l_resource_rec_tbl_type;
6094       /* End of variables for Variable for TA Validations for p_context = TASK_ASSIGNMENTS
6095        */
6096 
6097       /* Start of variables for Variable for Resource Attributes
6098        */
6099       l_resource_assignment_id_tbl   SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6100       l_resource_list_member_id_tbl  SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6101       l_assignment_description_tbl   SYSTEM.PA_VARCHAR2_240_TBL_TYPE   := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
6102       l_planning_resource_alias_tbl  SYSTEM.PA_VARCHAR2_80_TBL_TYPE    := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
6103       l_resource_class_flag_tbl      SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
6104       l_resource_class_code_tbl      SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6105       l_resource_class_id_tbl        SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6106       l_res_type_code_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6107       l_resource_code_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6108       l_person_id_tbl                SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6109       l_job_id_tbl                   SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6110       l_person_type_code_tbl         SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6111       l_bom_resource_id_tbl          SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6112       l_non_labor_resource_tbl       SYSTEM.PA_VARCHAR2_20_TBL_TYPE    := SYSTEM.PA_VARCHAR2_20_TBL_TYPE();
6113       l_inventory_item_id_tbl        SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6114       l_item_category_id_tbl         SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6115       l_project_role_id_tbl          SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6116       l_project_role_name_tbl        SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6117       l_organization_id_tbl          SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6118    -- bug 3455288, 19-FEB-04, jwhite: Changed varchar2 length to 240 from 30 --------------------------------
6119    --  l_organization_name_tbl        SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6120 
6121        l_organization_name_tbl        SYSTEM.PA_VARCHAR2_240_TBL_TYPE    := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
6122 
6123    -- End, bug 3455288, 19-FEB-04, jwhite:  ------------------------------------------------------------------
6124       l_direct_expenditure_type_tbl         SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(); /*EnC*/
6125       l_fc_res_type_code_tbl         SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6126       l_financial_category_code_tbl  SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6127       l_expenditure_type_tbl         SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6128       l_expenditure_category_tbl     SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6129       l_event_type_tbl               SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6130       l_revenue_category_code_tbl    SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6131       l_supplier_id_tbl              SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6132       l_unit_of_measure_tbl          SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6133       l_spread_curve_id_tbl          SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6134       l_etc_method_code_tbl          SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6135       l_mfc_cost_type_id_tbl         SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6136       l_procure_resource_flag_tbl    SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
6137       l_incurred_by_res_flag_tbl     SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
6138       l_incur_by_resource_name_tbl   SYSTEM.PA_VARCHAR2_240_TBL_TYPE   := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
6139       l_Incur_by_resource_code_tbl   SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6140       l_Incur_by_res_class_code_tbl  SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6141       l_Incur_by_role_id_tbl         SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6142       l_use_task_schedule_flag_tbl   SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
6143       l_planning_start_date_tbl      SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
6144       l_planning_end_date_tbl        SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
6145       l_schedule_start_date_tbl      SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
6146       l_schedule_end_date_tbl        SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
6147       l_total_quantity_tbl           SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6148       l_override_currency_code_tbl   SYSTEM.PA_VARCHAR2_15_TBL_TYPE    := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
6149       l_billable_percent_tbl         SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6150       l_cost_rate_override_tbl       SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6151       l_burdened_rate_override_tbl   SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6152       l_sp_fixed_date_tbl            SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
6153       l_named_role_tbl               SYSTEM.PA_VARCHAR2_80_TBL_TYPE    := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
6154       l_financial_category_name_tbl  SYSTEM.PA_VARCHAR2_80_TBL_TYPE    := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
6155       l_supplier_name_tbl            SYSTEM.PA_VARCHAR2_240_TBL_TYPE   := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
6156       l_wbs_element_version_id_tbl   SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6157       l_project_assignment_id_tbl    SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6158       l_attribute_category_tbl       SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6159       l_attribute1_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6160       l_attribute2_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6161       l_attribute3_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6162       l_attribute4_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6163       l_attribute5_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6164       l_attribute6_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6165       l_attribute7_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6166       l_attribute8_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6167       l_attribute9_tbl               SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6168       l_attribute10_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6169       l_attribute11_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6170       l_attribute12_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6171       l_attribute13_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6172       l_attribute14_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6173       l_attribute15_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6174       l_attribute16_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6175       l_attribute17_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6176       l_attribute18_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6177       l_attribute19_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6178       l_attribute20_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6179       l_attribute21_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6180       l_attribute22_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6181       l_attribute23_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6182       l_attribute24_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6183       l_attribute25_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6184       l_attribute26_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6185       l_attribute27_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6186       l_attribute28_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6187       l_attribute29_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6188       l_attribute30_tbl              SYSTEM.PA_VARCHAR2_150_TBL_TYPE   := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6189       l_bill_rate_override_tbl       SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6190       l_bill_rate_tbl                SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6191       l_b_multiplier_tbl             SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6192       l_raw_cost_rate_tbl            SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6193       l_revenue_tbl                  SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6194       l_burdened_cost_tbl            SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6195       l_total_raw_cost_tbl           SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6196       l_currency_code_tbl            SYSTEM.PA_VARCHAR2_15_TBL_TYPE    := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
6197       --For bug 3948128
6198       l_scheduled_delay              SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6199 
6200       -- Added for bug 3698458
6201       l_rate_exp_org_id_tbl          SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6202       l_rate_exp_type_tbl            SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6203       l_rate_func_curr_code_tbl      SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6204       l_incur_by_res_type_tbl        SYSTEM.PA_VARCHAR2_30_TBL_TYPE    := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6205 
6206       /* End of variables for Variable for Resource Attributes
6207        */
6208       l_spread_amt_flag_tbl          SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
6209       l_delete_budget_lines_tbl      SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
6210       l_currency_code_tmp_tbl        SYSTEM.PA_VARCHAR2_15_TBL_TYPE    := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
6211       l_existing_curr_code           pa_budget_lines.txn_currency_code%TYPE;
6212       l_projfunc_currency_code       pa_budget_lines.txn_currency_code%TYPE;
6213       l_projfunc_currency_code_out   pa_budget_lines.txn_currency_code%TYPE;
6214       l_rbs_element_id_tbl           SYSTEM.pa_num_tbl_type;
6215       l_txn_accum_header_id_tbl      SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
6216 
6217       /* added for bug 3678814 */
6218       l_rate_based_flag_tbl          SYSTEM.PA_VARCHAR2_1_TBL_TYPE     := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
6219 
6220       l_trace_stage NUMBER;
6221 
6222       -- Added for bug 3817356
6223       l_in_start_date_tbl            SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
6224       l_in_end_date_tbl              SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
6225       l_in_planning_start_date_tbl   SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
6226       l_in_planning_end_date_tbl     SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
6227       l_in_schedule_start_date_tbl   SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
6228       l_in_schedule_end_date_tbl     SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
6229       l_in_sp_fixed_date_tbl         SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
6230       l_temp_gmiss_date              date := to_date('01-01-4712','DD-MM-YYYY');
6231 
6232       --These parameters are introduced for calculate API enhancements tracked thru bug 4152749
6233       l_mfc_cost_type_id_old_tbl     SYSTEM.PA_NUM_TBL_TYPE            :=  SYSTEM.PA_NUM_TBL_TYPE();
6234       l_mfc_cost_type_id_new_tbl     SYSTEM.PA_NUM_TBL_TYPE            :=  SYSTEM.PA_NUM_TBL_TYPE();
6235       l_spread_curve_id_old_tbl      SYSTEM.PA_NUM_TBL_TYPE            :=  SYSTEM.PA_NUM_TBL_TYPE();
6236       l_spread_curve_id_new_tbl      SYSTEM.PA_NUM_TBL_TYPE            :=  SYSTEM.PA_NUM_TBL_TYPE();
6237       l_sp_fixed_date_old_tbl        SYSTEM.PA_DATE_TBL_TYPE           :=  SYSTEM.PA_DATE_TBL_TYPE();
6238       l_sp_fixed_date_new_tbl        SYSTEM.PA_DATE_TBL_TYPE           :=  SYSTEM.PA_DATE_TBL_TYPE();
6239       l_plan_start_date_old_tbl      SYSTEM.PA_DATE_TBL_TYPE           :=  SYSTEM.PA_DATE_TBL_TYPE();
6240       l_plan_start_date_new_tbl      SYSTEM.PA_DATE_TBL_TYPE           :=  SYSTEM.PA_DATE_TBL_TYPE();
6241       l_plan_end_date_old_tbl        SYSTEM.PA_DATE_TBL_TYPE           :=  SYSTEM.PA_DATE_TBL_TYPE();
6242       l_plan_end_date_new_tbl        SYSTEM.PA_DATE_TBL_TYPE           :=  SYSTEM.PA_DATE_TBL_TYPE();
6243       l_rlm_id_change_flag_tbl       SYSTEM.PA_VARCHAR2_1_TBL_TYPE     :=  SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
6244 
6245       --Added for Bug 4200168
6246       l_g_miss_char   CONSTANT      VARCHAR(1)  := FND_API.G_MISS_CHAR;
6247       l_g_miss_num    CONSTANT      NUMBER      := FND_API.G_MISS_NUM;
6248       l_g_miss_date   CONSTANT      DATE        := FND_API.G_MISS_DATE;
6249 
6250       l_fp_cols_rec   pa_fp_gen_amount_utils.fp_cols; -- IPM
6251 
6252       -- Bug 5906826
6253       l_ra_id_tbl                    SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6254       l_line_start_date_tbl          SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
6255       l_line_end_date_tbl            SYSTEM.PA_DATE_TBL_TYPE           := SYSTEM.PA_DATE_TBL_TYPE();
6256       l_txn_currency_code_tbl        SYSTEM.PA_VARCHAR2_15_TBL_TYPE    := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
6257       l_tot_qty_tbl                  SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6258       l_txn_raw_cost_tbl             SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6259       l_txn_burdened_cost_tbl        SYSTEM.PA_NUM_TBL_TYPE            := SYSTEM.PA_NUM_TBL_TYPE();
6260       l_cal_api_called_flg           VARCHAR2(1)                       := 'N';
6261       --CBS related Chnages
6262       l_res_class_flag                  pa_resource_lists_all_bg.resource_class_flag%TYPE := 'Y';
6263 BEGIN
6264 
6265 l_trace_stage := 10;
6266 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6267 
6268 
6269       x_msg_count     := 0;
6270       x_return_status := FND_API.G_RET_STS_SUCCESS;
6271       l_debug_mode    := 'Y'; --NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
6272 
6273 --Added for Bug 4200168
6274       IF p_pji_rollup_required = 'Y' THEN
6275           l_pji_rollup_required := 'Y';
6276       ELSE
6277           l_pji_rollup_required := 'N';
6278       END IF;
6279 
6280       pa_task_assignment_utils.g_require_progress_rollup := 'N';
6281 
6282       IF l_debug_mode = 'Y' THEN
6283             pa_debug.set_curr_function( p_function   => 'Update_Planning_Transactions',
6284                                         p_debug_mode => l_debug_mode );
6285       END IF;
6286       --dbms_output.put_line('In upd planning txn');
6287 
6288 
6289       /* A savepoint is set
6290        */
6291        SAVEPOINT   Update_Planning_Transactions;
6292 
6293        IF l_debug_mode = 'Y' THEN
6294              pa_debug.g_err_stage := 'Checking for required parameters';
6295              print_msg(pa_debug.g_err_stage,l_module_name);
6296        END IF;
6297 
6298       /* Check for required parameters
6299        */
6300 
6301        IF l_debug_mode = 'Y' THEN
6302              pa_debug.g_err_stage := 'Extending the local pl/sql tables: p_context =>' ||p_context;
6303              print_msg(pa_debug.g_err_stage,l_module_name);
6304        END IF;
6305 
6306 
6307 
6308        IF p_context IS NULL OR
6309           p_context NOT IN ( PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST
6310                             ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
6311                             ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
6312                             ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET ) THEN
6313 
6314             pa_debug.g_err_stage := 'The Context IN parameter is NULL';
6315             pa_debug.write(l_module_name, pa_debug.g_err_stage,l_debug_level5);
6316             --dbms_output.put_line('p_context is null');
6317 
6318             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6319                                  p_msg_name       => 'PA_FP_INV_PARAM_PASSED');
6320             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6321        END IF;
6322        --dbms_output.put_line('U01');
6323 
6324        IF l_debug_mode = 'Y' THEN
6325             pa_debug.g_err_stage:= 'Checking for required parameters';
6326             print_msg(pa_debug.g_err_stage,l_module_name);
6327        END IF;
6328 
6329 
6330       /* Check for business rules violations
6331        */
6332        IF l_debug_mode = 'Y' THEN
6333             pa_debug.g_err_stage:= 'Validating input parameters';
6334             print_msg(pa_debug.g_err_stage,l_module_name);
6335        END IF;
6336 
6337 l_trace_stage := 50;
6338 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6339 
6340 
6341        /* If the calling Context is Workplan or Task Assignment, the element version Id can't be null
6342         */
6343        IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN OR p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
6344             IF p_struct_elem_version_id IS NULL THEN
6345                   IF l_debug_mode = 'Y' THEN
6346                         pa_debug.g_err_stage:= 'p_struct_elem_version_id is null';
6347                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6348                   END IF;
6349                   --dbms_output.put_line('p_struct_elem_version_id is null');
6350 
6351                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6352                                        p_msg_name       => 'PA_FP_INV_PARAM_PASSED');
6353                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6354             ELSE
6355                   l_budget_version_id := PA_PLANNING_TRANSACTION_UTILS.Get_wp_budget_version_id(p_struct_elem_version_id);
6356                   IF l_budget_version_id IS NULL THEN
6357                       IF l_debug_mode = 'Y' THEN
6358                              pa_debug.g_err_stage:='Calling add plan txn to create the version';
6359                              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6360                       END IF;
6361 
6362                       BEGIN
6363                           SELECT project_id
6364                           INTO   l_project_id
6365                           FROM   pa_struct_task_wbs_v
6366                           WHERE  parent_Structure_version_id=p_struct_elem_version_id
6367                           AND    ROWNUM=1;
6368                       EXCEPTION
6369                       WHEN NO_DATA_FOUND THEN
6370                           IF l_debug_mode = 'Y' THEN
6371                                  pa_debug.g_err_stage:='Invalid value for p_struct_elem_version_id';
6372                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6373                           END IF;
6374                           --dbms_output.put_line('Invalid value for p_struct_elem_version_id');
6375                           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6376                                                p_msg_name       => 'PA_FP_INV_PARAM_PASSED');
6377                           RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6378                       END;
6379 
6380 
6381 
6382                       pa_fp_planning_transaction_pub.add_planning_transactions
6383                       (p_context                =>'WORKPLAN'
6384                       ,p_calling_context        => p_calling_context   -- Added for Bug 6856934
6385                       ,p_project_id             => l_project_id
6386                       ,p_struct_elem_version_id => p_struct_elem_version_id
6387                       ,x_return_status          => l_return_status
6388                       ,x_msg_data               => l_msg_data
6389                       ,x_msg_count              => l_msg_count);
6390                       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6391                                IF l_debug_mode = 'Y' THEN
6392                                      pa_debug.g_err_stage:='Called API pa_fp_planning_transaction_pub.add_planning_transaction api returned error';
6393                                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6394                                END IF;
6395                                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6396                       END IF;
6397                       l_budget_version_id := PA_PLANNING_TRANSACTION_UTILS.Get_wp_budget_version_id(p_struct_elem_version_id);
6398                   END IF;
6399 
6400             END IF;
6401        /* If the calling Context is BUDGET or FORECAST, the budget version Id can't be null
6402         */
6403        ELSIF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST THEN
6404             IF p_budget_version_id IS NULL THEN
6405                   IF l_debug_mode = 'Y' THEN
6406                         pa_debug.g_err_stage:= 'p_budget_version_id is null';
6407                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6408                   END IF;
6409                   --dbms_output.put_line('p_budget_version_id is null');
6410                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6411                                        p_msg_name       => 'PA_FP_INV_PARAM_PASSED');
6412                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6413             ELSE
6414                   l_budget_version_id := p_budget_version_id;
6415             END IF;
6416        END IF;
6417        --dbms_output.put_line('U1');
6418 l_trace_stage := 100;
6419 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6420 
6421 
6422        /* Validation Done
6423         */
6424        /* Getting the project id for the corresponding budget version
6425         */
6426        BEGIN
6427              SELECT    project_id
6428              INTO      l_project_id
6429              FROM      pa_budget_versions
6430              WHERE     budget_version_id = l_budget_version_id;
6431        EXCEPTION
6432              WHEN OTHERS THEN
6433                   IF l_debug_mode = 'Y' THEN
6434                          pa_debug.g_err_stage:='Select failed on pa_budget_versions.';
6435                          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6436                   END IF;
6437                   RAISE;
6438        END;
6439 
6440        /* Bug 3817356 - We to cannot pass negative date from Java to PLSql hence we are not
6441           able to pass FND_API.G_MISS_DATE ('01-Jan--4712') to this API when called from Java.
6442           Instead when this API is called from Java instead of G_MISS_DATE '01-Jan-4712' is passed.
6443           Added code below to Replace '01-Jan-4712' by FND_API.G_MISS_DATE
6444        */
6445        IF l_debug_mode = 'Y' THEN
6446            pa_debug.g_err_stage:='Processing IN Date Tables for G_MISS_DATE';
6447            pa_debug.write('PA_FP_PLANNING_TXN_PUB.update_planning_transactions:'||l_module_name,pa_debug.g_err_stage,3);
6448        END IF;
6449 
6450        l_in_start_date_tbl          := p_start_date_tbl;
6451        l_in_end_date_tbl            := p_end_date_tbl;
6452        l_in_planning_start_date_tbl := p_planning_start_date_tbl;
6453        l_in_planning_end_date_tbl   := p_planning_end_date_tbl;
6454        l_in_schedule_start_date_tbl := p_schedule_start_date_tbl;
6455        l_in_schedule_end_date_tbl   := p_schedule_end_date_tbl;
6456        l_in_sp_fixed_date_tbl       := p_sp_fixed_date_tbl;
6457        l_direct_expenditure_type_tbl :=p_direct_expenditure_type_tbl;
6458        -- Please note that the l_in_ tables will be reference instead of p_ tables in Code Flow
6459        IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
6460          IF p_task_elem_version_id_tbl.COUNT > 0 THEN
6461            FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
6462                  IF p_start_date_tbl.EXISTS(i)
6463                     AND p_start_date_tbl(i) = l_temp_gmiss_date THEN
6464                     l_in_start_date_tbl(i) := FND_API.G_MISS_DATE;
6465                  END IF;
6466                  IF p_end_date_tbl.EXISTS(i)
6467                     AND p_end_date_tbl(i) = l_temp_gmiss_date THEN
6468                     l_in_end_date_tbl(i) := FND_API.G_MISS_DATE;
6469                  END IF;
6470                  IF p_planning_start_date_tbl.EXISTS(i)
6471                     AND p_planning_start_date_tbl(i) = l_temp_gmiss_date THEN
6472                     l_in_planning_start_date_tbl(i) := FND_API.G_MISS_DATE;
6473                  END IF;
6474                  IF p_planning_end_date_tbl.EXISTS(i)
6475                     AND p_planning_end_date_tbl(i) = l_temp_gmiss_date THEN
6476                     l_in_planning_end_date_tbl(i) := FND_API.G_MISS_DATE;
6477                  END IF;
6478                  IF p_schedule_start_date_tbl.EXISTS(i)
6479                     AND p_schedule_start_date_tbl(i) = l_temp_gmiss_date THEN
6480                     l_in_schedule_start_date_tbl(i) := FND_API.G_MISS_DATE;
6481                  END IF;
6482                  IF p_schedule_end_date_tbl.EXISTS(i)
6483                     AND p_schedule_end_date_tbl(i) = l_temp_gmiss_date THEN
6484                     l_in_schedule_end_date_tbl(i) := FND_API.G_MISS_DATE;
6485                  END IF;
6486                  IF p_sp_fixed_date_tbl.EXISTS(i)
6487                     AND p_sp_fixed_date_tbl(i) = l_temp_gmiss_date THEN
6488                     l_in_sp_fixed_date_tbl(i) := FND_API.G_MISS_DATE;
6489                  END IF;
6490            END LOOP;
6491          END IF;
6492        ELSE
6493          IF p_resource_assignment_id_tbl.COUNT > 0 THEN
6494            FOR i IN p_resource_assignment_id_tbl.FIRST .. p_resource_assignment_id_tbl.LAST LOOP
6495                  IF p_start_date_tbl.EXISTS(i)
6496                     AND p_start_date_tbl(i) = l_temp_gmiss_date THEN
6497                     l_in_start_date_tbl(i) := FND_API.G_MISS_DATE;
6498                  END IF;
6499                  IF p_end_date_tbl.EXISTS(i)
6500                     AND p_end_date_tbl(i) = l_temp_gmiss_date THEN
6501                     l_in_end_date_tbl(i) := FND_API.G_MISS_DATE;
6502                  END IF;
6503                  IF p_planning_start_date_tbl.EXISTS(i)
6504                     AND p_planning_start_date_tbl(i) = l_temp_gmiss_date THEN
6505                     l_in_planning_start_date_tbl(i) := FND_API.G_MISS_DATE;
6506                  END IF;
6507                  IF p_planning_end_date_tbl.EXISTS(i)
6508                     AND p_planning_end_date_tbl(i) = l_temp_gmiss_date THEN
6509                     l_in_planning_end_date_tbl(i) := FND_API.G_MISS_DATE;
6510                  END IF;
6511                  IF p_schedule_start_date_tbl.EXISTS(i)
6512                     AND p_schedule_start_date_tbl(i) = l_temp_gmiss_date THEN
6513                     l_in_schedule_start_date_tbl(i) := FND_API.G_MISS_DATE;
6514                  END IF;
6515                  IF p_schedule_end_date_tbl.EXISTS(i)
6516                     AND p_schedule_end_date_tbl(i) = l_temp_gmiss_date THEN
6517                     l_in_schedule_end_date_tbl(i) := FND_API.G_MISS_DATE;
6518                  END IF;
6519                  IF p_sp_fixed_date_tbl.EXISTS(i)
6520                     AND p_sp_fixed_date_tbl(i) = l_temp_gmiss_date THEN
6521                     l_in_sp_fixed_date_tbl(i) := FND_API.G_MISS_DATE;
6522                  END IF;
6523            END LOOP;
6524          END IF;
6525        END IF;
6526 
6527 
6528        /* If the calling context is workplan, then checking, if the passed task info is present or not
6529         * If not present, the called procedure would insert it.
6530         */
6531        --dbms_output.put_line ('pq1 is '||p_planned_people_effort_tbl(1));
6532        IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
6533              check_and_create_task_rec_info
6534              ( p_project_id                 => l_project_id
6535               ,p_struct_elem_version_id     => p_struct_elem_version_id
6536               ,p_element_version_id_tbl     => p_task_elem_version_id_tbl
6537               ,p_planning_start_date_tbl    => l_in_start_date_tbl -- 3817356
6538               ,p_planning_end_date_tbl      => l_in_end_date_tbl -- 3817356
6539               ,p_planned_people_effort_tbl  => p_planned_people_effort_tbl
6540               ,p_raw_cost_tbl               => p_raw_cost_tbl
6541               ,p_burdened_cost_tbl          => p_burdened_cost_tbl
6542               ,p_apply_progress_flag        => p_apply_progress_flag
6543               ,x_element_version_id_tbl     => l_wbs_element_version_id_tbl
6544               ,x_planning_start_date_tbl    => l_planning_start_date_tbl
6545               ,x_planning_end_date_tbl      => l_planning_end_date_tbl
6546               ,x_planned_effort_tbl         => l_total_quantity_tbl
6547               ,x_resource_assignment_id_tbl => l_resource_assignment_id_tbl
6548               ,x_raw_cost_tbl               => l_total_raw_cost_tbl
6549               ,x_burdened_cost_tbl          => l_burdened_cost_tbl
6550               ,x_return_status              => l_return_status
6551               ,x_msg_data                   => l_msg_data
6552               ,x_msg_count                  => l_msg_count);
6553 
6554              IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6555                    IF l_debug_mode = 'Y' THEN
6556                          pa_debug.g_err_stage:='Called API pa_planning_transaction_pub.check_and_create_task_rec_info api returned error';
6557                          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6558                    END IF;
6559                    RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6560              END IF;
6561              --dbms_output.put_line ('pq1 is '||l_total_quantity_tbl(1));
6562 l_trace_stage := 150;
6563 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6564 
6565 
6566              /* If l ra id tbl count is zero, it means, the check_and_create_task_rec_info
6567                 has called add plan tran api with effort and hence no more prorcessing is required.
6568               */
6569              IF l_resource_assignment_id_tbl.COUNT = 0 THEN
6570                    IF l_debug_mode = 'Y' THEN
6571                           pa_debug.g_err_stage:='No Data Returned from the api-----Returning';
6572                           print_msg(pa_debug.g_err_stage,l_module_name);
6573                    END IF;
6574                    --dbms_output.put_line('No Data Returned from the api-----Returning');
6575                    IF l_debug_mode = 'Y' THEN
6576                           pa_debug.reset_curr_function;
6577                    END IF;
6578                    RETURN;
6579              END IF;
6580 
6581              /* For WP, the sch dates and planning dates are always in synch */
6582 
6583              l_schedule_start_date_tbl := l_planning_start_Date_tbl;
6584              l_schedule_end_date_tbl   := l_planning_end_Date_tbl;
6585 
6586        ELSE
6587              /* The context is of not work plan type
6588               */
6589              --dbms_output.put_line('U3');
6590              IF l_debug_mode = 'Y' THEN
6591                    pa_debug.g_err_stage:='Non Workplan type context';
6592                    print_msg(pa_debug.g_err_stage,l_module_name);
6593              END IF;
6594              IF p_resource_assignment_id_tbl.COUNT =0 THEN
6595                    IF l_debug_mode = 'Y' THEN
6596                         pa_debug.g_err_stage:='Resource Assignment Id table is empty---- Returning';
6597                         print_msg(pa_debug.g_err_stage,l_module_name);
6598                    END IF;
6599                    IF l_debug_mode = 'Y' THEN
6600                         pa_debug.reset_curr_function;
6601                    END IF;
6602                    --dbms_output.put_line('Empty ra id tbl returning');
6603                    RETURN;
6604              ELSE
6605                   -- 3817356 Replacing p_xxxx_date_tbls by l_in_xxxx_date_tbls
6606                   l_resource_assignment_id_tbl := p_resource_assignment_id_tbl;
6607                   IF p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST) THEN
6608                        /* Budgets and forecasts case schedule start/end dates,
6609                         * though not relevant are always kept in synch with planning start and end
6610                         * dates */
6611                        l_schedule_start_date_tbl    := l_in_planning_start_date_tbl;
6612                        l_schedule_end_date_tbl      := l_in_planning_end_date_tbl;
6613                        l_planning_start_date_tbl    := l_in_planning_start_date_tbl;
6614                        l_planning_end_date_tbl      := l_in_planning_end_date_tbl;
6615                   ELSE /* Context is TA */
6616                        l_planning_start_date_tbl    := l_in_planning_start_date_tbl;
6617                        l_planning_end_date_tbl      := l_in_planning_end_date_tbl;
6618                        l_schedule_start_date_tbl    := l_in_schedule_start_date_tbl;
6619                        l_schedule_end_date_tbl      := l_in_schedule_end_date_tbl;
6620                   END IF;
6621                   l_total_quantity_tbl         := p_quantity_tbl;
6622                   --In the context of BUDGET or FORECAST throw an error if the p_currency_code_tbl does not
6623                   --have same no of elements as that p_resource_assignment_id_tbl
6624                   IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST THEN
6625                       IF p_resource_assignment_id_tbl.COUNT <> p_currency_code_tbl.COUNT THEN
6626                             IF l_debug_mode = 'Y' THEN
6627                                 pa_debug.g_err_stage:='the contents of p_currency_code_tbl not equal in number to contents in res assmt tbl';
6628                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6629                             END IF;
6630                             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6631                                                  p_msg_name       => 'PA_FP_INV_PARAM_PASSED');
6632                             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6633                       END IF;
6634                   END IF;
6635              END IF;
6636        END IF;
6637        -- End for calling Context of workplan
6638 
6639 -- Fetching spread curve id for fixed date spread curve : Bug 3607061 - Starts
6640     BEGIN
6641         IF l_debug_mode = 'Y' THEN
6642             pa_debug.g_err_stage:='Fetching spread curve id for fixed date spread curve';
6643             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6644         END IF;
6645         Select spread_curve_id
6646           into l_fixed_date_sp_id
6647           from pa_spread_curves_b
6648          where spread_curve_code = 'FIXED_DATE';
6649 
6650         IF l_debug_mode = 'Y' THEN
6651             pa_debug.g_err_stage:='Fetching spread curve id l_fixed_date_sp_id:'||l_fixed_date_sp_id;
6652             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6653         END IF;
6654 
6655     EXCEPTION
6656         WHEN NO_DATA_FOUND THEN
6657              IF l_debug_mode = 'Y' THEN
6658                 pa_debug.g_err_stage:='Fixed date spread curve not found in system';
6659                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6660              END IF;
6661              RAISE;
6662     END;
6663 -- Fetching spread curve id for fixed date spread curve : Bug 3607061 - Ends
6664 
6665        --Extend all the local pl/sql tables.
6666        IF l_debug_mode = 'Y' THEN
6667              pa_debug.g_err_stage := 'Extending the local pl/sql tables';
6668              print_msg(pa_debug.g_err_stage,l_module_name);
6669        END IF;
6670 
6671        l_trace_stage := 200;
6672        --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6673 
6674        l_resource_list_member_id_tbl.extend(l_resource_assignment_id_tbl.last);
6675 
6676        l_trace_stage := 201;
6677        --hr_uility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6678 
6679        --dbms_output.put_line('2');
6680        l_assignment_description_tbl.extend(l_resource_assignment_id_tbl.last);
6681        l_planning_resource_alias_tbl.extend(l_resource_assignment_id_tbl.last);
6682        l_resource_class_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6683        l_resource_class_code_tbl.extend(l_resource_assignment_id_tbl.last);
6684        l_resource_class_id_tbl.extend(l_resource_assignment_id_tbl.last);
6685        l_res_type_code_tbl.extend(l_resource_assignment_id_tbl.last);
6686        l_resource_code_tbl.extend(l_resource_assignment_id_tbl.last);
6687        l_person_id_tbl.extend(l_resource_assignment_id_tbl.last);
6688        l_job_id_tbl.extend(l_resource_assignment_id_tbl.last);
6689 
6690        l_person_type_code_tbl.extend(l_resource_assignment_id_tbl.last);
6691        l_bom_resource_id_tbl.extend(l_resource_assignment_id_tbl.last);
6692        l_non_labor_resource_tbl.extend(l_resource_assignment_id_tbl.last);
6693        l_inventory_item_id_tbl.extend(l_resource_assignment_id_tbl.last);
6694        l_item_category_id_tbl.extend(l_resource_assignment_id_tbl.last);
6695        l_project_role_id_tbl.extend(l_resource_assignment_id_tbl.last);
6696        l_project_role_name_tbl.extend(l_resource_assignment_id_tbl.last);
6697        l_organization_id_tbl.extend(l_resource_assignment_id_tbl.last);
6698        l_organization_name_tbl.extend(l_resource_assignment_id_tbl.last);
6699        l_fc_res_type_code_tbl.extend(l_resource_assignment_id_tbl.last);
6700        l_financial_category_code_tbl.extend(l_resource_assignment_id_tbl.last);
6701        l_expenditure_type_tbl.extend(l_resource_assignment_id_tbl.last);
6702        l_expenditure_category_tbl.extend(l_resource_assignment_id_tbl.last);
6703 
6704        -- Added for bug 3698458
6705        l_rate_exp_org_id_tbl.extend(l_resource_assignment_id_tbl.last);
6706        l_rate_exp_type_tbl.extend(l_resource_assignment_id_tbl.last);
6707        l_rate_func_curr_code_tbl.extend(l_resource_assignment_id_tbl.last);
6708        l_incur_by_res_type_tbl.extend(l_resource_assignment_id_tbl.last);
6709 
6710        -- Added for bug 3678814
6711        l_rate_based_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6712 
6713        l_trace_stage := 210;
6714        --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6715 
6716        l_event_type_tbl.extend(l_resource_assignment_id_tbl.last);
6717        l_revenue_category_code_tbl.extend(l_resource_assignment_id_tbl.last);
6718        l_supplier_id_tbl.extend(l_resource_assignment_id_tbl.last);
6719        l_unit_of_measure_tbl.extend(l_resource_assignment_id_tbl.last);
6720        l_spread_curve_id_tbl.extend(l_resource_assignment_id_tbl.last);
6721        l_etc_method_code_tbl.extend(l_resource_assignment_id_tbl.last);
6722        l_mfc_cost_type_id_tbl.extend(l_resource_assignment_id_tbl.last);
6723        l_procure_resource_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6724        l_incurred_by_res_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6725        l_incur_by_resource_name_tbl.extend(l_resource_assignment_id_tbl.last);
6726        l_Incur_by_resource_code_tbl.extend(l_resource_assignment_id_tbl.last);
6727        l_Incur_by_res_class_code_tbl.extend(l_resource_assignment_id_tbl.last);
6728        l_Incur_by_role_id_tbl.extend(l_resource_assignment_id_tbl.last);
6729        l_use_task_schedule_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6730        IF l_planning_start_date_tbl.COUNT <> l_resource_assignment_id_tbl.COUNT THEN
6731            l_planning_start_date_tbl.extend(l_resource_assignment_id_tbl.last-l_planning_start_date_tbl.COUNT);
6732        END IF;
6733        IF l_planning_end_date_tbl.COUNT<> l_resource_assignment_id_tbl.COUNT THEN
6734            l_planning_end_date_tbl.extend(l_resource_assignment_id_tbl.last-l_planning_end_date_tbl.COUNT);
6735        END IF;
6736        IF l_schedule_start_date_tbl.COUNT <> l_resource_assignment_id_tbl.COUNT THEN
6737            l_schedule_start_date_tbl.extend(l_resource_assignment_id_tbl.last-l_schedule_start_date_tbl.COUNT);
6738        END IF;
6739        IF l_schedule_end_date_tbl.COUNT<> l_resource_assignment_id_tbl.COUNT THEN
6740            l_schedule_end_date_tbl.extend(l_resource_assignment_id_tbl.last-l_schedule_end_date_tbl.COUNT);
6741        END IF;
6742        IF l_total_quantity_tbl.COUNT<>l_resource_assignment_id_tbl.COUNT THEN
6743            l_total_quantity_tbl.extend(l_resource_assignment_id_tbl.last-l_total_quantity_tbl.COUNT);
6744        END IF;
6745        IF l_burdened_cost_tbl.COUNT<>l_resource_assignment_id_tbl.COUNT THEN
6746           l_burdened_cost_tbl.extend(l_resource_assignment_id_tbl.last);
6747        END IF;
6748        IF l_total_raw_cost_tbl.COUNT<>l_resource_assignment_id_tbl.COUNT THEN
6749           l_total_raw_cost_tbl.extend(l_resource_assignment_id_tbl.last);
6750        END IF;
6751 --dbms_output.put_line('l_total_quantity_tbl.last '||l_total_quantity_tbl.last||' l_total_quantity_tbl(1) '||l_total_quantity_tbl(1));
6752        l_override_currency_code_tbl.extend(l_resource_assignment_id_tbl.last);
6753 
6754 l_trace_stage := 220;
6755 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6756 
6757        l_billable_percent_tbl.extend(l_resource_assignment_id_tbl.last);
6758        l_cost_rate_override_tbl.extend(l_resource_assignment_id_tbl.last);
6759        l_burdened_rate_override_tbl.extend(l_resource_assignment_id_tbl.last);
6760        l_sp_fixed_date_tbl.extend(l_resource_assignment_id_tbl.last);
6761        l_named_role_tbl.extend(l_resource_assignment_id_tbl.last);
6762        l_financial_category_name_tbl.extend(l_resource_assignment_id_tbl.last);
6763        l_supplier_name_tbl.extend(l_resource_assignment_id_tbl.last);
6764        l_wbs_element_version_id_tbl.extend(l_resource_assignment_id_tbl.last);
6765        l_project_assignment_id_tbl.extend(l_resource_assignment_id_tbl.last);
6766        l_attribute_category_tbl.extend(l_resource_assignment_id_tbl.last);
6767        l_attribute1_tbl.extend(l_resource_assignment_id_tbl.last);
6768        l_attribute2_tbl.extend(l_resource_assignment_id_tbl.last);
6769        l_attribute3_tbl.extend(l_resource_assignment_id_tbl.last);
6770        l_attribute4_tbl.extend(l_resource_assignment_id_tbl.last);
6771        l_attribute5_tbl.extend(l_resource_assignment_id_tbl.last);
6772        l_attribute6_tbl.extend(l_resource_assignment_id_tbl.last);
6773        l_attribute7_tbl.extend(l_resource_assignment_id_tbl.last);
6774        l_attribute8_tbl.extend(l_resource_assignment_id_tbl.last);
6775        l_attribute9_tbl.extend(l_resource_assignment_id_tbl.last);
6776        l_attribute10_tbl.extend(l_resource_assignment_id_tbl.last);
6777        l_attribute11_tbl.extend(l_resource_assignment_id_tbl.last);
6778        l_attribute12_tbl.extend(l_resource_assignment_id_tbl.last);
6779        l_attribute13_tbl.extend(l_resource_assignment_id_tbl.last);
6780        l_attribute14_tbl.extend(l_resource_assignment_id_tbl.last);
6781        l_attribute15_tbl.extend(l_resource_assignment_id_tbl.last);
6782        l_attribute16_tbl.extend(l_resource_assignment_id_tbl.last);
6783 l_trace_stage := 230;
6784 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6785 
6786 
6787        l_attribute17_tbl.extend(l_resource_assignment_id_tbl.last);
6788        l_attribute18_tbl.extend(l_resource_assignment_id_tbl.last);
6789        l_attribute19_tbl.extend(l_resource_assignment_id_tbl.last);
6790        l_attribute20_tbl.extend(l_resource_assignment_id_tbl.last);
6791        l_attribute21_tbl.extend(l_resource_assignment_id_tbl.last);
6792        l_attribute22_tbl.extend(l_resource_assignment_id_tbl.last);
6793        l_attribute23_tbl.extend(l_resource_assignment_id_tbl.last);
6794        l_attribute24_tbl.extend(l_resource_assignment_id_tbl.last);
6795        l_attribute25_tbl.extend(l_resource_assignment_id_tbl.last);
6796        l_attribute26_tbl.extend(l_resource_assignment_id_tbl.last);
6797        l_attribute27_tbl.extend(l_resource_assignment_id_tbl.last);
6798        l_attribute28_tbl.extend(l_resource_assignment_id_tbl.last);
6799        l_attribute29_tbl.extend(l_resource_assignment_id_tbl.last);
6800        l_attribute30_tbl.extend(l_resource_assignment_id_tbl.last);
6801        l_bill_rate_override_tbl.extend(l_resource_assignment_id_tbl.last);
6802        l_bill_rate_tbl.extend(l_resource_assignment_id_tbl.last);
6803        l_b_multiplier_tbl.extend(l_resource_assignment_id_tbl.last);
6804        l_raw_cost_rate_tbl.extend(l_resource_assignment_id_tbl.last);
6805        l_revenue_tbl.extend(l_resource_assignment_id_tbl.last);
6806 
6807        l_currency_code_tbl.extend(l_resource_assignment_id_tbl.last);
6808 
6809        --For Bug 3948128.
6810        l_scheduled_delay.extend(l_resource_assignment_id_tbl.last);
6811 l_trace_stage := 240;
6812 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6813 
6814 
6815        -- Assiging all the passed tbls to  record type . This is done because
6816        --        1. TA validation API expects a pl/sql table of records
6817        --        2. BULK update will possible since the values that are not passed will be defaulted to FND_API.G_MISS_XXX
6818 
6819 
6820         IF l_debug_mode = 'Y' THEN
6821               pa_debug.g_err_stage:='About to loop thru for assigning to rec types';
6822               print_msg(pa_debug.g_err_stage,l_module_name);
6823         END IF;
6824 
6825 
6826         FOR i IN l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST LOOP
6827 
6828 
6829               IF l_resource_assignment_id_tbl.EXISTS(i) THEN
6830                     l_resource_rec_tbl(i).resource_assignment_id := l_resource_assignment_id_tbl(i);
6831               END IF;
6832 
6833               IF p_assignment_description_tbl.EXISTS(i) THEN
6834                     l_resource_rec_tbl(i).assignment_description := p_assignment_description_tbl(i);
6835               END IF;
6836               IF p_resource_list_member_id_tbl.EXISTS(i) THEN
6837                   l_resource_rec_tbl(i).resource_list_member_id := p_resource_list_member_id_tbl(i);
6838               END IF;
6839               IF p_project_assignment_id_tbl.EXISTS(i) THEN
6840                   l_resource_rec_tbl(i).project_assignment_id := p_project_assignment_id_tbl(i);
6841               END IF;
6842               IF p_resource_alias_tbl.EXISTS(i) THEN
6843                     l_resource_rec_tbl(i).planning_resource_alias := p_resource_alias_tbl(i);
6844               END IF;
6845               IF p_resource_class_flag_tbl.EXISTS(i) THEN
6846                     l_resource_rec_tbl(i).resource_class_flag := p_resource_class_flag_tbl(i);
6847               END IF;
6848               IF p_resource_class_code_tbl.EXISTS(i) THEN
6849                    l_resource_rec_tbl(i).resource_class_code := p_resource_class_code_tbl(i);
6850               END IF;
6851               IF p_resource_class_id_tbl.EXISTS(i) THEN
6852                    l_resource_rec_tbl(i).resource_class_id := p_resource_class_id_tbl(i);
6853               END IF;
6854               IF p_res_type_code_tbl.EXISTS(i) THEN
6855                    l_resource_rec_tbl(i).res_type_code := p_res_type_code_tbl(i);
6856               END IF;
6857               IF p_resource_code_tbl.EXISTS(i) THEN
6858                    l_resource_rec_tbl(i).resource_code := p_resource_code_tbl(i);
6859               END IF;
6860               IF p_resource_name.EXISTS(i) THEN
6861                     l_resource_rec_tbl(i).resource_name := p_resource_name(i);
6862               END IF;
6863 
6864 l_trace_stage := 250;
6865 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6866 
6867               IF p_person_id_tbl.EXISTS(i) THEN
6868                    l_resource_rec_tbl(i).person_id := p_person_id_tbl(i);
6869               END IF;
6870               IF p_job_id_tbl.EXISTS(i) THEN
6871                    l_resource_rec_tbl(i).job_id := p_job_id_tbl(i);
6872               END IF;
6873               IF p_person_type_code.EXISTS(i) THEN
6874                    l_resource_rec_tbl(i).person_type_code := p_person_type_code(i);
6875               END IF;
6876               IF p_bom_resource_id_tbl.EXISTS(i) THEN
6877                    l_resource_rec_tbl(i).bom_resource_id := p_bom_resource_id_tbl(i);
6878               END IF;
6879               IF p_non_labor_resource_tbl.EXISTS(i) THEN
6880                    l_resource_rec_tbl(i).non_labor_resource := p_non_labor_resource_tbl(i);
6881               END IF;
6882               IF p_inventory_item_id_tbl.EXISTS(i) THEN
6883                    l_resource_rec_tbl(i).inventory_item_id := p_inventory_item_id_tbl(i);
6884               END IF;
6885               IF p_item_category_id_tbl.EXISTS(i) THEN
6886                    l_resource_rec_tbl(i).item_category_id := p_item_category_id_tbl(i);
6887               END IF;
6888               IF p_project_role_id_tbl.EXISTS(i) THEN
6889                    l_resource_rec_tbl(i).project_role_id := p_project_role_id_tbl(i);
6890               END IF;
6891               IF p_project_role_name_tbl.EXISTS(i) THEN
6892                    l_resource_rec_tbl(i).project_role_name := p_project_role_name_tbl(i);
6893               END IF;
6894               IF p_organization_id_tbl.EXISTS(i) THEN
6895                    l_resource_rec_tbl(i).organization_id := p_organization_id_tbl(i);
6896               END IF;
6897 l_trace_stage := 251;
6898 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6899 
6900 
6901               IF p_organization_name_tbl.EXISTS(i) THEN
6902                    l_resource_rec_tbl(i).organization_name := p_organization_name_tbl(i);
6903               END IF;
6904               IF p_fc_res_type_code_tbl.EXISTS(i) THEN
6905                    l_resource_rec_tbl(i).fc_res_type_code := p_fc_res_type_code_tbl(i);
6906               END IF;
6907 
6908 l_trace_stage := 2511;
6909 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6910 
6911               IF p_financial_category_code_tbl.EXISTS(i) THEN
6912                    l_resource_rec_tbl(i).financial_category_code := p_financial_category_code_tbl(i);
6913               END IF;
6914 
6915 l_trace_stage := 2512;
6916 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6917 
6918               IF p_expenditure_type_tbl.EXISTS(i) THEN
6919                    l_resource_rec_tbl(i).expenditure_type := p_expenditure_type_tbl(i);
6920               END IF;
6921 l_trace_stage := 2513;
6922 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6923 
6924               IF p_expenditure_category_tbl.EXISTS(i) THEN
6925                    l_resource_rec_tbl(i).expenditure_category := p_expenditure_category_tbl(i);
6926               END IF;
6927 l_trace_stage := 2514;
6928 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6929 
6930               IF p_event_type_tbl.EXISTS(i) THEN
6931                    l_resource_rec_tbl(i).event_type := p_event_type_tbl(i);
6932               END IF;
6933 l_trace_stage := 2515;
6934 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6935 
6936               IF p_revenue_category_code_tbl.EXISTS(i) THEN
6937                    l_resource_rec_tbl(i).revenue_category_code := p_revenue_category_code_tbl(i);
6938               END IF;
6939 l_trace_stage := 252;
6940 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6941 
6942               IF p_supplier_id_tbl.EXISTS(i) THEN
6943                    l_resource_rec_tbl(i).supplier_id := p_supplier_id_tbl(i);
6944               END IF;
6945               IF p_unit_of_measure_tbl.EXISTS(i) THEN
6946                    l_resource_rec_tbl(i).unit_of_measure := p_unit_of_measure_tbl(i);
6947               END IF;
6948               IF p_spread_curve_id_tbl.EXISTS(i) THEN
6949                    l_resource_rec_tbl(i).spread_curve_id := p_spread_curve_id_tbl(i);
6950               END IF;
6951               IF p_etc_method_code_tbl.EXISTS(i) THEN
6952                    l_resource_rec_tbl(i).etc_method_code := p_etc_method_code_tbl(i);
6953               END IF;
6954               IF p_mfc_cost_type_id_tbl.EXISTS(i) THEN
6955                    l_resource_rec_tbl(i).mfc_cost_type_id := p_mfc_cost_type_id_tbl(i);
6956               END IF;
6957 l_trace_stage := 253;
6958 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6959 
6960 
6961               IF p_procure_resource_flag_tbl.EXISTS(i) THEN
6962                    l_resource_rec_tbl(i).procure_resource_flag := p_procure_resource_flag_tbl(i);
6963               END IF;
6964               IF p_incurred_by_res_flag_tbl.EXISTS(i) THEN
6965                    l_resource_rec_tbl(i).incurred_by_res_flag := p_incurred_by_res_flag_tbl(i);
6966               END IF;
6967               IF p_incur_by_resource_code_tbl.EXISTS(i) THEN
6968                    l_resource_rec_tbl(i).incur_by_resource_code := p_incur_by_resource_code_tbl(i);
6969               END IF;
6970               IF p_incur_by_resource_name_tbl.EXISTS(i) THEN
6971                    l_resource_rec_tbl(i).incur_by_resource_name := p_incur_by_resource_name_tbl(i);
6972               END IF;
6973               IF p_Incur_by_res_class_code_tbl.EXISTS(i) THEN
6974                    l_resource_rec_tbl(i).Incur_by_res_class_code := p_Incur_by_res_class_code_tbl(i);
6975               END IF;
6976               IF p_Incur_by_role_id_tbl.EXISTS(i) THEN
6977                    l_resource_rec_tbl(i).Incur_by_role_id := p_Incur_by_role_id_tbl(i);
6978               END IF;
6979               IF p_use_task_schedule_flag_tbl.EXISTS(i) THEN
6980                    l_resource_rec_tbl(i).use_task_schedule_flag := p_use_task_schedule_flag_tbl(i);
6981               END IF;
6982               IF l_planning_start_date_tbl.EXISTS(i) THEN
6983                    l_resource_rec_tbl(i).planning_start_date := l_planning_start_date_tbl(i);
6984               END IF;
6985               IF l_planning_end_date_tbl.EXISTS(i) THEN
6986                    l_resource_rec_tbl(i).planning_end_date := l_planning_end_date_tbl(i);
6987               END IF;
6988               IF l_schedule_start_date_tbl.EXISTS(i) THEN
6989                    l_resource_rec_tbl(i).schedule_start_date := l_schedule_start_date_tbl(i);
6990               END IF;
6991               IF l_schedule_end_date_tbl.EXISTS(i) THEN
6992                    l_resource_rec_tbl(i).schedule_end_date := l_schedule_end_date_tbl(i);
6993               END IF;
6994 
6995               l_trace_stage := 254;
6996               --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6997 
6998               IF l_total_quantity_tbl.EXISTS(i) THEN
6999                    l_resource_rec_tbl(i).total_quantity := l_total_quantity_tbl(i);
7000               END IF;
7001               IF p_txn_currency_override_tbl.EXISTS(i) THEN
7002                    l_resource_rec_tbl(i).override_currency_code := p_txn_currency_override_tbl(i);
7003               END IF;
7004               IF p_billable_percent_tbl.EXISTS(i) THEN
7005                    l_resource_rec_tbl(i).billable_percent := p_billable_percent_tbl(i);
7006               END IF;
7007               IF p_cost_rate_override_tbl.EXISTS(i) THEN
7008                    l_resource_rec_tbl(i).cost_rate_override := p_cost_rate_override_tbl(i);
7009               END IF;
7010               IF p_burdened_rate_override_tbl.EXISTS(i) THEN
7011                    l_resource_rec_tbl(i).burdened_rate_override := p_burdened_rate_override_tbl(i);
7012               END IF;
7013               -- 3817356 Replacing p_xxxx_date_tbls by l_in_xxxx_date_tbls
7014               IF l_in_sp_fixed_date_tbl.EXISTS(i) THEN
7015                    l_resource_rec_tbl(i).sp_fixed_date := l_in_sp_fixed_date_tbl(i);
7016               END IF;
7017               IF p_financial_category_name_tbl.EXISTS(i) THEN
7018                    l_resource_rec_tbl(i).financial_category_name := p_financial_category_name_tbl(i);
7019               END IF;
7020               IF p_named_role_tbl.EXISTS(i) THEN
7021                    l_resource_rec_tbl(i).named_role := p_named_role_tbl(i);
7022               END IF;
7023               IF p_supplier_name_tbl.EXISTS(i) THEN
7024                    l_resource_rec_tbl(i).supplier_name := p_supplier_name_tbl(i);
7025               END IF;
7026 l_trace_stage := 260;
7027 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
7028 
7029 
7030               --Select the element version id for each ra id
7031               SELECT wbs_element_version_id
7032               INTO   l_resource_rec_tbl(i).wbs_element_version_id
7033               FROM   pa_resource_assignments
7034               WHERE  resource_assignment_id = l_resource_assignment_id_tbl(i);
7035 
7036               IF p_attribute_category_tbl.EXISTS(i) THEN
7037                    l_resource_rec_tbl(i).attribute_category := p_attribute_category_tbl(i);
7038               END IF;
7039               IF p_attribute1_tbl.EXISTS(i) THEN
7040                    l_resource_rec_tbl(i).attribute1 := p_attribute1_tbl(i);
7041               END IF;
7042               IF p_attribute2_tbl.EXISTS(i) THEN
7043                    l_resource_rec_tbl(i).attribute2 := p_attribute2_tbl(i);
7044               END IF;
7045               IF p_attribute3_tbl.EXISTS(i) THEN
7046                    l_resource_rec_tbl(i).attribute3 := p_attribute3_tbl(i);
7047               END IF;
7048               IF p_attribute4_tbl.EXISTS(i) THEN
7049                    l_resource_rec_tbl(i).attribute4 := p_attribute4_tbl(i);
7050               END IF;
7051               IF p_attribute5_tbl.EXISTS(i) THEN
7052                    l_resource_rec_tbl(i).attribute5 := p_attribute5_tbl(i);
7053               END IF;
7054               IF p_attribute6_tbl.EXISTS(i) THEN
7055                    l_resource_rec_tbl(i).attribute6 := p_attribute6_tbl(i);
7056               END IF;
7057               IF p_attribute7_tbl.EXISTS(i) THEN
7058                    l_resource_rec_tbl(i).attribute7 := p_attribute7_tbl(i);
7059               END IF;
7060 
7061               IF p_attribute8_tbl.EXISTS(i) THEN
7062                    l_resource_rec_tbl(i).attribute8 := p_attribute8_tbl(i);
7063               END IF;
7064               IF p_attribute9_tbl.EXISTS(i) THEN
7065                    l_resource_rec_tbl(i).attribute9 := p_attribute9_tbl(i);
7066               END IF;
7067               IF p_attribute10_tbl.EXISTS(i) THEN
7068                    l_resource_rec_tbl(i).attribute10 := p_attribute10_tbl(i);
7069               END IF;
7070               IF p_attribute11_tbl.EXISTS(i) THEN
7071                    l_resource_rec_tbl(i).attribute11 := p_attribute11_tbl(i);
7072               END IF;
7073               IF p_attribute12_tbl.EXISTS(i) THEN
7074                    l_resource_rec_tbl(i).attribute12 := p_attribute12_tbl(i);
7075               END IF;
7076               IF p_attribute13_tbl.EXISTS(i) THEN
7077                    l_resource_rec_tbl(i).attribute13 := p_attribute13_tbl(i);
7078               END IF;
7079               IF p_attribute14_tbl.EXISTS(i) THEN
7080                    l_resource_rec_tbl(i).attribute14 := p_attribute14_tbl(i);
7081               END IF;
7082               IF p_attribute15_tbl.EXISTS(i) THEN
7083                    l_resource_rec_tbl(i).attribute15 := p_attribute15_tbl(i);
7084               END IF;
7085               IF p_attribute16_tbl.EXISTS(i) THEN
7086                    l_resource_rec_tbl(i).attribute16 := p_attribute16_tbl(i);
7087               END IF;
7088               IF p_attribute17_tbl.EXISTS(i) THEN
7089                    l_resource_rec_tbl(i).attribute17 := p_attribute17_tbl(i);
7090               END IF;
7091               IF p_attribute18_tbl.EXISTS(i) THEN
7092                    l_resource_rec_tbl(i).attribute18 := p_attribute18_tbl(i);
7093               END IF;
7094               IF p_attribute19_tbl.EXISTS(i) THEN
7095                    l_resource_rec_tbl(i).attribute19 := p_attribute19_tbl(i);
7096               END IF;
7097               IF p_attribute20_tbl.EXISTS(i) THEN
7098                    l_resource_rec_tbl(i).attribute20 := p_attribute20_tbl(i);
7099               END IF;
7100               IF p_attribute21_tbl.EXISTS(i) THEN
7101                    l_resource_rec_tbl(i).attribute21 := p_attribute21_tbl(i);
7102               END IF;
7103               IF p_attribute22_tbl.EXISTS(i) THEN
7104                    l_resource_rec_tbl(i).attribute22 := p_attribute22_tbl(i);
7105               END IF;
7106               IF p_attribute23_tbl.EXISTS(i) THEN
7107                    l_resource_rec_tbl(i).attribute23 := p_attribute23_tbl(i);
7108               END IF;
7109               IF p_attribute24_tbl.EXISTS(i) THEN
7110                    l_resource_rec_tbl(i).attribute24 := p_attribute24_tbl(i);
7111               END IF;
7112               IF p_attribute25_tbl.EXISTS(i) THEN
7113                    l_resource_rec_tbl(i).attribute25 := p_attribute25_tbl(i);
7114               END IF;
7115               IF p_attribute26_tbl.EXISTS(i) THEN
7116                    l_resource_rec_tbl(i).attribute26 := p_attribute26_tbl(i);
7117               END IF;
7118               IF p_attribute27_tbl.EXISTS(i) THEN
7119                    l_resource_rec_tbl(i).attribute27 := p_attribute27_tbl(i);
7120               END IF;
7121               IF p_attribute28_tbl.EXISTS(i) THEN
7122                    l_resource_rec_tbl(i).attribute28 := p_attribute28_tbl(i);
7123               END IF;
7124               IF p_attribute29_tbl.EXISTS(i) THEN
7125                    l_resource_rec_tbl(i).attribute29 := p_attribute29_tbl(i);
7126               END IF;
7127               IF p_attribute30_tbl.EXISTS(i) THEN
7128                    l_resource_rec_tbl(i).attribute30 := p_attribute30_tbl(i);
7129               END IF;
7130 
7131               --For bug 3948128
7132               IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK AND p_scheduled_delay.EXISTS(i) THEN
7133                   l_resource_rec_tbl(i).scheduled_delay := p_scheduled_delay(i);
7134               END IF;
7135         END LOOP;
7136 
7137 l_trace_stage := 2500;
7138 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
7139 
7140        --dbms_output.put_line('3');
7141         IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
7142              /*-------------------------------------------------
7143                Calling Task validation API
7144                -------------------------------------------------*/
7145              IF l_debug_mode = 'Y' THEN
7146                    pa_debug.g_err_stage:='Calling API pa_task_assignment_utils.Validate_Update_Assignment';
7147                    pa_debug.write(l_module_name,pa_debug.g_err_stage,
7148                                   l_debug_level3);
7149              END IF;
7150 
7151 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: before calling validate_update_assignment');
7152 
7153 --dbms_output.put_line(' l_resource_rec_tbl(i).cost_rate_override is '|| l_resource_rec_tbl(1).cost_rate_override);
7154              PA_TASK_ASSIGNMENT_UTILS.Validate_Update_Assignment(
7155                p_calling_context              => p_calling_context,   -- Added for Bug 6856934
7156                p_task_assignment_tbl          => l_resource_rec_tbl,
7157                x_return_status                => l_return_status);
7158 --dbms_output.put_line(' l_resource_rec_tbl(i).cost_rate_override is '|| l_resource_rec_tbl(1).cost_rate_override);
7159 
7160 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: after calling validate_update_assignment');
7161 
7162              IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7163                    IF l_debug_mode = 'Y' THEN
7164                          pa_debug.g_err_stage:='Called API PA_TASK_ASSIGNMENT_UTILS.Validate_Update_Assignment returned error';
7165                          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7166                    END IF;
7167                    RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7168              END IF;
7169 
7170              --If the rec tbl returned by validate API does not contain records then return
7171              IF l_resource_rec_tbl.COUNT=0 THEN
7172                    IF l_debug_mode = 'Y' THEN
7173                          pa_debug.g_err_stage:='Validate API returned 0 records';
7174                          print_msg(pa_debug.g_err_stage,l_module_name);
7175                          pa_debug.reset_curr_function;
7176 		   END IF;
7177                    RETURN;
7178              END IF;
7179 
7180 
7181 
7182         END IF;
7183 
7184 
7185         /*------------------------------------------------------------------------
7186         -- Repopulating all the resource data tables from the table l_resource_rec_tbl
7187         -- Now all the parameters not passed will be initialized to FND_API.G_MISS_XXX
7188         ------------------------------------------------------------------------ */
7189         FOR i IN l_resource_rec_tbl.FIRST .. l_resource_rec_tbl.LAST LOOP
7190 
7191              IF l_resource_rec_tbl.EXISTS(i) THEN
7192                   --dbms_output.put_line('E1');
7193 
7194                     l_resource_assignment_id_tbl(i) := l_resource_rec_tbl(i).resource_assignment_id;
7195                     l_resource_list_member_id_tbl(i):= l_resource_rec_tbl(i).resource_list_member_id;
7196                     l_assignment_description_tbl(i) := l_resource_rec_tbl(i).assignment_description;
7197                     l_planning_resource_alias_tbl(i):= l_resource_rec_tbl(i).planning_resource_alias;
7198                     l_resource_class_flag_tbl(i)    := l_resource_rec_tbl(i).resource_class_flag;
7199                     l_resource_class_code_tbl(i)    := l_resource_rec_tbl(i).resource_class_code;
7200                     l_resource_class_id_tbl(i)      := l_resource_rec_tbl(i).resource_class_id;
7201                     -- Added for bug 3698458
7202                     l_rate_exp_org_id_tbl(i)        := l_resource_rec_tbl(i).org_id;
7203                     l_rate_exp_type_tbl(i)          := l_resource_rec_tbl(i).rate_expenditure_type;
7204                     l_rate_func_curr_code_tbl(i)    := l_resource_rec_tbl(i).rate_func_curr_code;
7205                     l_incur_by_res_type_tbl(i)      := l_resource_rec_tbl(i).incur_by_res_type;
7206                     l_incurred_by_res_flag_tbl(i)   := l_resource_rec_tbl(i).incurred_by_res_flag;
7207                     l_res_type_code_tbl(i)          := l_resource_rec_tbl(i).res_type_code;
7208 
7209                     IF  l_incurred_by_res_flag_tbl.EXISTS(i) AND nvl(l_incurred_by_res_flag_tbl(i),'N') = 'Y' THEN
7210                         IF l_incur_by_res_type_tbl.EXISTS(i) THEN
7211                            l_res_type_code_tbl(i) := l_incur_by_res_type_tbl(i);
7212                         ELSE
7213                            l_res_type_code_tbl(i) := NULL;
7214                         END IF;
7215                     END IF;
7216 
7217                     -- The following if-else clause has been added for bug 3678814
7218                     IF  p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
7219                         l_rate_based_flag_tbl(i)    :=  l_resource_rec_tbl(i).rate_based_flag;
7220                     ELSE
7221                         l_rate_based_flag_tbl(i)    :=  null;
7222                     END If;
7223 
7224                     l_resource_code_tbl(i)          := l_resource_rec_tbl(i).resource_code;
7225                     l_person_id_tbl(i)              := l_resource_rec_tbl(i).person_id;
7226                     --l_job_id_tbl(i)                 := l_resource_rec_tbl(i).job_id; -- Bug 12384023
7227                     l_person_type_code_tbl(i)       := l_resource_rec_tbl(i).person_type_code;
7228                     l_bom_resource_id_tbl(i)        := l_resource_rec_tbl(i).bom_resource_id;
7229                     l_non_labor_resource_tbl(i)     := l_resource_rec_tbl(i).non_labor_resource;
7230                     l_inventory_item_id_tbl(i)      := l_resource_rec_tbl(i).inventory_item_id;
7231 
7232                     l_item_category_id_tbl(i)       := l_resource_rec_tbl(i).item_category_id;
7233                     l_project_role_id_tbl(i)        := l_resource_rec_tbl(i).project_role_id;
7234                     l_project_role_name_tbl(i)      := l_resource_rec_tbl(i).project_role_name;
7235                     l_organization_id_tbl(i)        := l_resource_rec_tbl(i).organization_id;
7236                     l_organization_name_tbl(i)      := l_resource_rec_tbl(i).organization_name;
7237                     l_fc_res_type_code_tbl(i)       := l_resource_rec_tbl(i).fc_res_type_code;
7238                     l_financial_category_code_tbl(i):= l_resource_rec_tbl(i).financial_category_code;
7239                     l_expenditure_type_tbl(i)       := l_resource_rec_tbl(i).expenditure_type;
7240                     l_expenditure_category_tbl(i)   := l_resource_rec_tbl(i).expenditure_category;
7241                     l_event_type_tbl(i)             := l_resource_rec_tbl(i).event_type;
7242                     l_revenue_category_code_tbl(i)  := l_resource_rec_tbl(i).revenue_category_code;
7243                     l_supplier_id_tbl(i)            := l_resource_rec_tbl(i).supplier_id;
7244                     l_unit_of_measure_tbl(i)        := l_resource_rec_tbl(i).unit_of_measure;
7245                     l_spread_curve_id_tbl(i)        := l_resource_rec_tbl(i).spread_curve_id;
7246                     l_etc_method_code_tbl(i)        := l_resource_rec_tbl(i).etc_method_code;
7247                     l_mfc_cost_type_id_tbl(i)       := l_resource_rec_tbl(i).mfc_cost_type_id;
7248                     l_procure_resource_flag_tbl(i)  := l_resource_rec_tbl(i).procure_resource_flag;
7249                     l_incur_by_resource_code_tbl(i) := l_resource_rec_tbl(i).incur_by_resource_code;
7250                     l_incur_by_resource_name_tbl(i) := l_resource_rec_tbl(i).incur_by_resource_name;
7251                     l_Incur_by_res_class_code_tbl(i):= l_resource_rec_tbl(i).Incur_by_res_class_code;
7252                     l_Incur_by_role_id_tbl(i)       := l_resource_rec_tbl(i).Incur_by_role_id;
7253                     l_use_task_schedule_flag_tbl(i) := l_resource_rec_tbl(i).use_task_schedule_flag;
7254                     l_planning_start_date_tbl(i)    := l_resource_rec_tbl(i).planning_start_date;
7255                     l_planning_end_date_tbl(i)      := l_resource_rec_tbl(i).planning_end_date;
7256                     l_schedule_start_date_tbl(i)    := l_resource_rec_tbl(i).schedule_start_date;
7257                     l_schedule_end_date_tbl(i)      := l_resource_rec_tbl(i).schedule_end_date;
7258                     l_total_quantity_tbl(i)         := l_resource_rec_tbl(i).total_quantity;
7259                     l_override_currency_code_tbl(i) := l_resource_rec_tbl(i).override_currency_code;
7260                     l_billable_percent_tbl(i)       := l_resource_rec_tbl(i).billable_percent;
7261                     l_cost_rate_override_tbl(i)     := l_resource_rec_tbl(i).cost_rate_override;
7262                     l_burdened_rate_override_tbl(i) := l_resource_rec_tbl(i).burdened_rate_override;
7263                     l_sp_fixed_date_tbl(i)          := l_resource_rec_tbl(i).sp_fixed_date;
7264                     l_named_role_tbl(i)             := l_resource_rec_tbl(i).named_role;
7265                     l_financial_category_name_tbl(i):= l_resource_rec_tbl(i).financial_category_name;
7266                     l_supplier_name_tbl(i)          := l_resource_rec_tbl(i).supplier_name;
7267                     l_wbs_element_version_id_tbl(i) := l_resource_rec_tbl(i).wbs_element_version_id;
7268                     l_project_assignment_id_tbl(i)  := l_resource_rec_tbl(i).project_assignment_id;
7269                     l_attribute_category_tbl(i)     := l_resource_rec_tbl(i).ATTRIBUTE_CATEGORY;
7270                     l_attribute1_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE1;
7271                     l_attribute2_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE2;
7272                     l_attribute3_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE3;
7273                     l_attribute4_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE4;
7274                     l_attribute5_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE5;
7275                     l_attribute6_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE6;
7276 
7277                     l_attribute7_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE7;
7278                     l_attribute8_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE8;
7279                     l_attribute9_tbl(i)             := l_resource_rec_tbl(i).ATTRIBUTE9;
7280                     l_attribute10_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE10;
7281                     l_attribute11_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE11;
7282                     l_attribute12_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE12;
7283                     l_attribute13_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE13;
7284                     l_attribute14_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE14;
7285                     l_attribute15_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE15;
7286                     l_attribute16_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE16;
7287                     l_attribute17_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE17;
7288                     l_attribute18_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE18;
7289                     l_attribute19_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE19;
7290                     l_attribute20_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE20;
7291                     l_attribute21_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE21;
7292                     l_attribute22_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE22;
7293 
7294                     l_attribute23_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE23;
7295                     l_attribute24_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE24;
7296                     l_attribute25_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE25;
7297                     l_attribute26_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE26;
7298                     l_attribute27_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE27;
7299                     l_attribute28_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE28;
7300                     l_attribute29_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE29;
7301                     l_attribute30_tbl(i)            := l_resource_rec_tbl(i).ATTRIBUTE30;
7302 
7303 					l_job_id_temp := NULL;  --bug#13566990
7304 
7305                     -- Bug 12384023: Deriving job_id based on assignment start date :start
7306                      get_default_job
7307                     (
7308                        p_person_id                =>  l_person_id_tbl(i)
7309                        ,p_resource_assignment_id  =>  l_resource_assignment_id_tbl(i)
7310                        ,p_planning_start_date     =>  l_planning_start_date_tbl(i)
7311                        ,p_project_role_id         =>  l_project_role_id_tbl(i)
7312                        ,x_job_id                  =>  l_job_id_temp   --bug#13566990
7313                     );
7314                     -- Bug 12384023: Deriving job_id based on assignment start date :end
7315 
7316 					--bug#13566990
7317 					  If l_job_id_temp IS NOT NULL THEN
7318 					   l_job_id_tbl(i) := l_job_id_temp;
7319 					  END IF;
7320 
7321 
7322                     --For bug 3948128
7323                     IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
7324                         l_scheduled_delay(i)            := l_resource_rec_tbl(i).scheduled_delay;
7325                     END IF;
7326              END IF;
7327 /* Commenting out this code for check for spread curve date to be null
7328    since this check will be done in Process_res_chg_Derv_calc_prms 3762278
7329 -- Added for Bug 3607061 - Starts
7330 -- Please not that FIXED DATE SPREAD CURVE ID is SEEDED as 6, so we are able to hard code it below
7331              IF l_debug_mode = 'Y' THEN
7332                     pa_debug.g_err_stage:='Deriving SP Fixed Date';
7333                     print_msg(pa_debug.g_err_stage,l_module_name);
7334              END IF;
7335              IF l_spread_curve_id_tbl(i) = l_fixed_date_sp_id THEN
7336                 IF l_debug_mode = 'Y' THEN
7337                    pa_debug.g_err_stage:='Spread Curve Id is of FIXED_DATE';
7338                    print_msg(pa_debug.g_err_stage,l_module_name);
7339                 END IF;
7340                 IF l_sp_fixed_date_tbl(i) = FND_API.G_MISS_DATE THEN
7341                    IF l_debug_mode = 'Y' THEN
7342                       pa_debug.g_err_stage:='Error - cannot nullify sp_fixed_date for Fixed Date Spread curve';
7343                       print_msg(pa_debug.g_err_stage,l_module_name);
7344                    END IF;
7345                    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7346                                         p_msg_name       => 'PA_FP_SP_FIXED_DATE_NULL');
7347                    RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7348                 END IF;
7349              END IF;
7350 -- Added for Bug 3607061 - Ends
7351 */
7352                                --dbms_output.put_line('E2');
7353 
7354         END LOOP;
7355 
7356 --dbms_output.put_line('l_total_quantity_tbl.last '||l_total_quantity_tbl.last||' l_total_quantity_tbl(1) '||l_total_quantity_tbl(1));
7357 
7358        --Get the project currency so that it can be used in preparing pl/sql tables for calculate api
7359        pa_budget_utils.Get_Project_Currency_Info
7360        (  p_project_id             => l_project_id
7361         , x_projfunc_currency_code => l_projfunc_currency_code_out
7362         , x_project_currency_code  => l_existing_curr_code
7363         , x_txn_currency_code      => l_projfunc_currency_code
7364         , x_msg_count              => x_msg_count
7365         , x_msg_data               => x_msg_data
7366         , x_return_status          => x_return_status);
7367        --dbms_output.put_line('4');
7368        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7369             IF l_debug_mode = 'Y' THEN
7370                pa_debug.g_err_stage:='Cpa_budget_utils.Get_Project_Currency_Info returned error';
7371                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7372             END IF;
7373             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7374        END IF;
7375 
7376        --Derive the tables that are required for Calculate API
7377        IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR p_context = PA_FP_CONSTANTS_PKG.G_PLAN_CLASS_FORECAST THEN
7378 
7379             IF l_debug_mode = 'Y' THEN
7380                pa_debug.g_err_stage:='Preparing the pl/sql tables for calling calc api for BF';
7381                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7382             END IF;
7383 
7384 
7385             l_override_currency_code_tbl := p_txn_currency_override_tbl;
7386             l_bill_rate_override_tbl     := p_bill_rate_override_tbl;
7387             l_bill_rate_tbl              := p_bill_rate_tbl;
7388             l_burdened_rate_override_tbl := p_burdened_rate_override_tbl;
7389             l_b_multiplier_tbl           := p_burdened_rate_tbl;
7390             l_cost_rate_override_tbl     := p_cost_rate_override_tbl;
7391             l_raw_cost_rate_tbl          := p_cost_rate_tbl;
7392             l_revenue_tbl                := p_revenue_tbl;
7393             l_burdened_cost_tbl          := p_burdened_cost_tbl;
7394             l_total_raw_cost_tbl         := p_raw_cost_tbl;
7395             --Added by Xin. Fix Bug 3430136
7396             --Feb-09-2004 Doosan iteration 1
7397             l_currency_code_tbl          := p_currency_code_tbl;
7398 
7399             l_override_currency_code_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_override_currency_code_tbl.COUNT );
7400             l_bill_rate_override_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_bill_rate_override_tbl.COUNT);
7401             l_bill_rate_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_bill_rate_tbl.COUNT);
7402             l_burdened_rate_override_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_burdened_rate_override_tbl.COUNT);
7403             l_b_multiplier_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_b_multiplier_tbl.COUNT);
7404             --dbms_output.put_line('l_cost_rate_override_tbl count is '||l_cost_rate_override_tbl.count);
7405             l_cost_rate_override_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_cost_rate_override_tbl.COUNT);
7406             --dbms_output.put_line('A l_cost_rate_override_tbl count is '||l_cost_rate_override_tbl.count);
7407             l_raw_cost_rate_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_raw_cost_rate_tbl.COUNT);
7408             l_revenue_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_revenue_tbl.COUNT);
7409             l_burdened_cost_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_burdened_cost_tbl.COUNT);
7410             l_total_raw_cost_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_total_raw_cost_tbl.COUNT);
7411             l_currency_code_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_currency_code_tbl.COUNT);
7412 
7413 
7414 
7415        -- In the context of Task Assignment and Workplan, the block below will calculate the additional quantity
7416        -- i.e. the difference between the existing quantity and the quantity passed.
7417        ELSIF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
7418 
7419             IF l_debug_mode = 'Y' THEN
7420                pa_debug.g_err_stage:='About to bulk collect into pl/sql tables req for calc api '||l_override_currency_code_tbl.last;
7421                print_msg(pa_debug.g_err_stage,l_module_name);
7422             END IF;
7423 
7424             /* Preparing PLSql Tables for Rates for Calling Calculate API*/
7425             -- Bug 3760166
7426             l_bill_rate_tbl              := p_bill_rate_tbl;
7427             l_b_multiplier_tbl           := p_burdened_rate_tbl;
7428             l_raw_cost_rate_tbl          := p_cost_rate_tbl;
7429 
7430             l_bill_rate_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_bill_rate_tbl.COUNT);
7431             l_b_multiplier_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_b_multiplier_tbl.COUNT);
7432             l_raw_cost_rate_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_raw_cost_rate_tbl.COUNT);
7433 
7434             /** added for progress upload  **/
7435             -- Bug 3807763. For Workplan Context, check_and_create_task_rec info has already been called.
7436             -- This takes care of populating l_burdened_cost_tbl and l_total_raw_cost_tbl as per the I/P Data.
7437             If ((p_apply_progress_flag = 'Y' AND p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK) OR
7438                         p_upd_cost_amts_too_for_ta_flg = 'Y' ) THEN --Added for bug#4538286.
7439                 --l_revenue_tbl                := p_revenue_tbl;
7440                 l_burdened_cost_tbl          := p_burdened_cost_tbl;
7441                 l_total_raw_cost_tbl         := p_raw_cost_tbl;
7442 
7443                 l_total_raw_cost_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_total_raw_cost_tbl.COUNT);
7444                 l_burdened_cost_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_burdened_cost_tbl.COUNT);
7445             End If;
7446 
7447            --The below LOOP will be used to derive the txn currency code for each task assignment
7448            FOR  i IN l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST LOOP
7449 
7450 		           --Bug 6397725. From FP M RUP3 onwards check should be made against pa_resource_asgn_curr
7451 		           --table
7452 		           /*
7453                SELECT NVL(pbl.txn_currency_code,l_existing_curr_code)
7454                INTO   l_currency_code_tbl(i)
7455                FROM   pa_resource_assignments b,
7456                       (SELECT pbl.txn_currency_code,
7457                               pra.resource_assignment_id
7458                        FROM   pa_budget_lines pbl,
7459                               pa_resource_assignments pra
7460                        WHERE  pbl.resource_assignment_id(+)=pra.resource_assignment_id
7461                        AND    pra.resource_assignment_id=l_resource_assignment_id_tbl(i)
7462                        AND    ROWNUM=1) pbl
7463                WHERE  b.resource_assignment_id=l_resource_assignment_id_tbl(i);*/
7464 
7465                SELECT NVL(rac.txn_currency_code,l_existing_curr_code)
7466  	                INTO   l_currency_code_tbl(i)
7467  	                FROM   pa_resource_asgn_curr rac,
7468  	                       pa_resource_assignments pra
7469  	                WHERE  rac.resource_assignment_id(+)=pra.resource_assignment_id
7470  	                AND    pra.resource_assignment_id=l_resource_assignment_id_tbl(i);
7471 
7472            END LOOP;
7473            /* Note that l_override_currency_code_tbl would be null in case of
7474              * WP which is correct. This can never be edited in WP flow. For TA,
7475              * l_override_curr_code_tbl would be having override curr code that
7476              * got passed from the UI and ultimately returned back by the
7477              * validate TA api */
7478 
7479             IF l_debug_mode = 'Y' THEN
7480                pa_debug.g_err_stage:='Done with preparing the tables';
7481                print_msg(pa_debug.g_err_stage,l_module_name);
7482             END IF;
7483 
7484        END IF;
7485 
7486        /* Calling the api Derive_Parameters_For_Calc_Api
7487         */
7488        IF l_debug_mode = 'Y' THEN
7489               pa_debug.g_err_stage:='Calling API Derive_Parameters_For_Calc_Api';
7490               print_msg(pa_debug.g_err_stage,l_module_name);
7491        END IF;
7492 --dbms_output.put_line('l_b_multiplier_tbl cnt is '||l_burdened_rate_override_tbl.count);
7493        --dbms_output.put_line('5');
7494        Process_res_chg_Derv_calc_prms
7495         (
7496          p_context                         => p_context
7497         ,p_calling_context                 => p_calling_context   -- Added for Bug 6856934
7498         ,p_budget_version_id               => l_budget_version_id
7499         ,p_resource_assignment_id_tbl      => l_resource_assignment_id_tbl
7500         ,p_resource_list_member_id_tbl     => l_resource_list_member_id_tbl
7501         ,p_planning_start_date_tbl         => l_planning_start_date_tbl
7502         ,p_planning_end_date_tbl           => l_planning_end_date_tbl
7503         ,p_spread_curve_id_tbl             => l_spread_curve_id_tbl
7504         ,p_sp_fixed_date_tbl               => l_sp_fixed_date_tbl
7505         ,p_txn_currency_code_tbl           => l_currency_code_tbl
7506         ,p_inventory_item_id_tbl           => l_inventory_item_id_tbl
7507         ,p_expenditure_type_tbl            => l_expenditure_type_tbl
7508         ,p_person_id_tbl                   => l_person_id_tbl
7509         ,p_job_id_tbl                      => l_job_id_tbl
7510         ,p_organization_id_tbl             => l_organization_id_tbl
7511         ,p_event_type_tbl                  => l_event_type_tbl
7512         ,p_expenditure_category_tbl        => l_expenditure_category_tbl
7513         ,p_revenue_category_code_tbl       => l_revenue_category_code_tbl
7514         ,p_item_category_id_tbl            => l_item_category_id_tbl
7515         ,p_bom_resource_id_tbl             => l_bom_resource_id_tbl
7516         ,p_project_role_id_tbl             => l_project_role_id_tbl
7517         ,p_person_type_code_tbl            => l_person_type_code_tbl
7518         ,p_supplier_id_tbl                 => l_supplier_id_tbl
7519         ,p_named_role_tbl                  => l_named_role_tbl
7520         ,p_mfc_cost_type_id_tbl            => l_mfc_cost_type_id_tbl
7521         ,p_fixed_date_sp_id                => l_fixed_date_sp_id
7522         ,px_total_qty_tbl                  => l_total_quantity_tbl
7523         ,px_total_raw_cost_tbl             => l_total_raw_cost_tbl
7524         ,px_total_burdened_cost_tbl        => l_burdened_cost_tbl
7525         ,px_total_revenue_tbl              => l_revenue_tbl
7526         ,px_raw_cost_rate_tbl              => l_raw_cost_rate_tbl
7527         ,px_raw_cost_override_rate_tbl     => l_cost_rate_override_tbl
7528         ,px_b_cost_rate_tbl                => l_b_multiplier_tbl
7529         ,px_b_cost_rate_override_tbl       => l_burdened_rate_override_tbl
7530         ,px_bill_rate_tbl                  => l_bill_rate_tbl
7531         ,px_bill_rate_override_tbl         => l_bill_rate_override_tbl
7532         ,x_rbs_element_id_tbl              => l_rbs_element_id_tbl
7533         ,x_txn_accum_header_id_tbl         => l_txn_accum_header_id_tbl
7534         ,x_mfc_cost_type_id_old_tbl        => l_mfc_cost_type_id_old_tbl
7535         ,x_mfc_cost_type_id_new_tbl        => l_mfc_cost_type_id_new_tbl
7536         ,x_spread_curve_id_old_tbl         => l_spread_curve_id_old_tbl
7537         ,x_spread_curve_id_new_tbl         => l_spread_curve_id_new_tbl
7538         ,x_sp_fixed_date_old_tbl           => l_sp_fixed_date_old_tbl
7539         ,x_sp_fixed_date_new_tbl           => l_sp_fixed_date_new_tbl
7540         ,x_plan_start_date_old_tbl         => l_plan_start_date_old_tbl
7541         ,x_plan_start_date_new_tbl         => l_plan_start_date_new_tbl
7542         ,x_plan_end_date_old_tbl           => l_plan_end_date_old_tbl
7543         ,x_plan_end_date_new_tbl           => l_plan_end_date_new_tbl
7544         ,x_rlm_id_change_flag_tbl          => l_rlm_id_change_flag_tbl
7545         ,x_return_status                   => x_return_status
7546         ,x_msg_data                        => x_msg_data
7547         ,x_msg_count                       => x_msg_count );
7548 
7549        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7550              IF l_debug_mode = 'Y' THEN
7551                    pa_debug.g_err_stage:='Derive_Parameters_For_Calc_Api returned error';
7552                    print_msg(pa_debug.g_err_stage,l_module_name);
7553              END IF;
7554              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7555        END IF;
7556 
7557        --The Sp Fixed Date will be defaulted in Process_res_chg_Derv_calc_prms to planning start date if not passed
7558        --for a resource assignment with fixed spread curve. Hence the value returned should be considered
7559        l_sp_fixed_date_tbl := l_sp_fixed_date_new_tbl;
7560 --dbms_output.put_line(' cccc l_burdened_rate_override_tbl cnt is '||l_burdened_rate_override_tbl.count);
7561        IF l_debug_mode = 'Y' THEN
7562               pa_debug.g_err_stage:='Bulk updating pa_resource_assignments. start '||l_resource_assignment_id_tbl.FIRST ||' end '||l_resource_assignment_id_tbl.LAST;
7563               print_msg(pa_debug.g_err_stage,l_module_name);
7564        END IF;
7565 
7566        --dbms_output.put_line('6');
7567        --Prepare the pl/sql tables for the all columns in pa_resource_assignments to make use of bulk update
7568        FORALL i IN l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST
7569 
7570              UPDATE  PA_RESOURCE_ASSIGNMENTS
7571              SET     resource_list_member_id      = DECODE (l_resource_list_member_id_tbl(i),l_g_miss_num,null,nvl(l_resource_list_member_id_tbl(i),resource_list_member_id))
7572                     ,last_update_date             = sysdate
7573                     ,last_updated_by              = FND_GLOBAL.user_id
7574                     ,last_update_login            = FND_GLOBAL.login_id
7575                     ,unit_of_measure              = DECODE (l_unit_of_measure_tbl(i), l_g_miss_char,null,nvl( l_unit_of_measure_tbl(i),unit_of_measure))
7576                     ,project_assignment_id        = DECODE (l_project_assignment_id_tbl(i), l_g_miss_num,null,nvl(l_project_assignment_id_tbl(i),project_assignment_id))
7577                     ,planning_start_date          = DECODE (l_planning_start_date_tbl(i), l_g_miss_date,null,nvl(l_planning_start_date_tbl(i),planning_start_date))
7578                     ,planning_end_date            = DECODE (l_planning_end_date_tbl(i), l_g_miss_date,null,nvl(l_planning_end_date_tbl(i),planning_end_date))
7579                     ,schedule_start_date          = DECODE (l_schedule_start_date_tbl(i), l_g_miss_date,null,nvl(l_schedule_start_date_tbl(i),schedule_start_date))
7580                     ,schedule_end_date            = DECODE (l_schedule_end_date_tbl(i), l_g_miss_date,null,nvl(l_schedule_end_date_tbl(i),schedule_end_date))
7581                     ,spread_curve_id              = DECODE (l_spread_curve_id_tbl(i), l_g_miss_num,null,nvl(l_spread_curve_id_tbl(i),spread_curve_id ))
7582                     ,etc_method_code              = DECODE (l_etc_method_code_tbl(i), l_g_miss_char,null,nvl(l_etc_method_code_tbl(i),etc_method_code))
7583                     ,res_type_code                = DECODE (l_res_type_code_tbl(i), l_g_miss_char,null,nvl(l_res_type_code_tbl(i),res_type_code))
7584                     ,attribute_category           = DECODE (l_attribute_category_tbl(i), l_g_miss_char,null,nvl(l_attribute_category_tbl(i),attribute_category))
7585                     ,attribute1                   = DECODE (l_attribute1_tbl(i), l_g_miss_char,null,nvl(l_attribute1_tbl(i),attribute1))
7586                     ,attribute2                   = DECODE (l_attribute2_tbl(i), l_g_miss_char,null,nvl(l_attribute2_tbl(i),attribute2))
7587                     ,attribute3                   = DECODE (l_attribute3_tbl(i), l_g_miss_char,null,nvl(l_attribute3_tbl(i),attribute3 ))
7588                     ,attribute4                   = DECODE (l_attribute4_tbl(i), l_g_miss_char,null,nvl(l_attribute4_tbl(i),attribute4))
7589                     ,attribute5                   = DECODE (l_attribute5_tbl(i), l_g_miss_char,null,nvl(l_attribute5_tbl(i),attribute5 ))
7590                     ,attribute6                   = DECODE (l_attribute6_tbl(i), l_g_miss_char,null,nvl(l_attribute6_tbl(i),attribute6 ))
7591                     ,attribute7                   = DECODE (l_attribute7_tbl(i), l_g_miss_char,null,nvl(l_attribute7_tbl(i),attribute7))
7592                     ,attribute8                   = DECODE (l_attribute8_tbl(i), l_g_miss_char,null,nvl(l_attribute8_tbl(i),attribute8))
7593                     ,attribute9                   = DECODE (l_attribute9_tbl(i), l_g_miss_char,null,nvl(l_attribute9_tbl(i),attribute9))
7594                     ,attribute10                  = DECODE (l_attribute10_tbl(i), l_g_miss_char,null, nvl(l_attribute10_tbl(i),attribute10))
7595                     ,attribute11                  = DECODE (l_attribute11_tbl(i), l_g_miss_char,null,nvl(l_attribute11_tbl(i),attribute11))
7596                     ,attribute12                  = DECODE (l_attribute12_tbl(i), l_g_miss_char,null,nvl(l_attribute12_tbl(i),attribute12))
7597                     ,attribute13                  = DECODE (l_attribute13_tbl(i), l_g_miss_char,null,nvl(l_attribute13_tbl(i),attribute13))
7598                     ,attribute14                  = DECODE (l_attribute14_tbl(i), l_g_miss_char,null,nvl(l_attribute14_tbl(i),attribute14))  -- for bug 6944671
7599                     ,attribute15                  = DECODE (l_attribute15_tbl(i), l_g_miss_char,null,nvl(l_attribute15_tbl(i),attribute15))
7600                     ,attribute16                  = DECODE (l_attribute16_tbl(i), l_g_miss_char,null,nvl(l_attribute16_tbl(i),attribute16))
7601                     ,attribute17                  = DECODE (l_attribute17_tbl(i), l_g_miss_char,null,nvl(l_attribute17_tbl(i),attribute17))
7602                     ,attribute18                  = DECODE (l_attribute18_tbl(i), l_g_miss_char,null,nvl(l_attribute18_tbl(i),attribute18))
7603                     ,attribute19                  = DECODE (l_attribute19_tbl(i), l_g_miss_char,null,nvl(l_attribute19_tbl(i),attribute19))
7604                     ,attribute20                  = DECODE (l_attribute20_tbl(i), l_g_miss_char,null,nvl(l_attribute20_tbl(i),attribute20))
7605                     ,attribute21                  = DECODE (l_attribute21_tbl(i), l_g_miss_char,null,nvl(l_attribute21_tbl(i),attribute21))
7606                     ,attribute22                  = DECODE (l_attribute22_tbl(i), l_g_miss_char,null,nvl(l_attribute22_tbl(i),attribute22))
7607                     ,attribute23                  = DECODE (l_attribute23_tbl(i), l_g_miss_char,null,nvl(l_attribute23_tbl(i),attribute23))
7608                     ,attribute24                  = DECODE (l_attribute24_tbl(i), l_g_miss_char,null,nvl(l_attribute24_tbl(i),attribute24))
7609                     ,attribute25                  = DECODE (l_attribute25_tbl(i), l_g_miss_char,null,nvl(l_attribute25_tbl(i),attribute25))
7610                     ,attribute26                  = DECODE (l_attribute26_tbl(i), l_g_miss_char,null,nvl(l_attribute26_tbl(i),attribute26))
7611                     ,attribute27                  = DECODE (l_attribute27_tbl(i), l_g_miss_char,null,nvl(l_attribute27_tbl(i),attribute27))
7612                     ,attribute28                  = DECODE (l_attribute28_tbl(i), l_g_miss_char,null,nvl(l_attribute28_tbl(i),attribute28))
7613                     ,attribute29                  = DECODE (l_attribute29_tbl(i), l_g_miss_char,null,nvl(l_attribute29_tbl(i),attribute29))
7614                     ,attribute30                  = DECODE (l_attribute30_tbl(i), l_g_miss_char,null,nvl(l_attribute30_tbl(i),attribute30))
7615                     ,fc_res_type_code             = DECODE (l_fc_res_type_code_tbl(i), l_g_miss_char,null,nvl(l_fc_res_type_code_tbl(i),fc_res_type_code))
7616                     ,resource_class_code          = DECODE (l_resource_class_code_tbl(i), l_g_miss_char,null,nvl(l_resource_class_code_tbl(i),resource_class_code))
7617                     ,organization_id              = DECODE (l_organization_id_tbl(i), l_g_miss_num,null,nvl(l_organization_id_tbl(i),organization_id))
7618                     ,job_id                       = DECODE (l_job_id_tbl(i), l_g_miss_num,null,nvl(l_job_id_tbl(i),job_id))
7619                     ,person_id                    = DECODE (l_person_id_tbl(i), l_g_miss_num,null,nvl(l_person_id_tbl(i),person_id))
7620                     ,expenditure_type             = DECODE (l_expenditure_type_tbl(i), l_g_miss_char,null,nvl(l_expenditure_type_tbl(i),expenditure_type))
7621                     ,expenditure_category         = DECODE (l_expenditure_category_tbl(i), l_g_miss_char,null,nvl(l_expenditure_category_tbl(i),expenditure_category))
7622                     ,revenue_category_code        = DECODE (l_revenue_category_code_tbl(i), l_g_miss_char,null,nvl(l_revenue_category_code_tbl(i),revenue_category_code))
7623                     ,event_type                   = DECODE (l_event_type_tbl(i), l_g_miss_char,null,nvl(l_event_type_tbl(i),event_type))
7624                     ,supplier_id                  = DECODE (l_supplier_id_tbl(i), l_g_miss_num,null,nvl(l_supplier_id_tbl(i),supplier_id))
7625                     ,non_labor_resource           = DECODE (l_non_labor_resource_tbl(i), l_g_miss_char,null,nvl(l_non_labor_resource_tbl(i),non_labor_resource))
7626                     ,bom_resource_id              = DECODE (l_bom_resource_id_tbl(i), l_g_miss_num,null,nvl(l_bom_resource_id_tbl(i),bom_resource_id))
7627                     ,inventory_item_id            = DECODE (l_inventory_item_id_tbl(i), l_g_miss_num,null,nvl(l_inventory_item_id_tbl(i),inventory_item_id))
7628                     ,item_category_id             = DECODE (l_item_category_id_tbl(i), l_g_miss_num,null,nvl(l_item_category_id_tbl(i),item_category_id))
7629                     ,record_version_number        = nvl(record_version_number,0)+1
7630                     ,billable_percent             = DECODE (l_billable_percent_tbl(i), l_g_miss_num,null,nvl(l_billable_percent_tbl(i),billable_percent))
7631                     ,mfc_cost_type_id             = DECODE (l_mfc_cost_type_id_tbl(i), l_g_miss_num,null,nvl(l_mfc_cost_type_id_tbl(i),mfc_cost_type_id ))
7632                     ,procure_resource_flag        = DECODE (l_procure_resource_flag_tbl(i), l_g_miss_char,null,nvl(l_procure_resource_flag_tbl(i),procure_resource_flag))
7633                     ,assignment_description       = DECODE (l_assignment_description_tbl(i), l_g_miss_char,null,nvl(l_assignment_description_tbl(i),assignment_description))
7634                     ,incurred_by_res_flag         = DECODE (l_incurred_by_res_flag_tbl(i), l_g_miss_char,null,nvl(l_incurred_by_res_flag_tbl(i),incurred_by_res_flag))
7635                     ,sp_fixed_date                = DECODE (l_sp_fixed_date_tbl(i), l_g_miss_date,null,nvl(l_sp_fixed_date_tbl(i),sp_fixed_date))
7636                     ,person_type_code             = DECODE (l_person_type_code_tbl(i), l_g_miss_char,null,nvl(l_person_type_code_tbl(i),person_type_code))
7637                     ,use_task_schedule_flag       = DECODE (l_use_task_schedule_flag_tbl(i), l_g_miss_char,null,nvl(l_use_task_schedule_flag_tbl(i),use_task_schedule_flag))
7638                     ,incur_by_res_class_code      = DECODE (l_Incur_by_res_class_code_tbl(i), l_g_miss_char,null,nvl(l_Incur_by_res_class_code_tbl(i),incur_by_res_class_code ))
7639                     ,incur_by_role_id             = DECODE (l_Incur_by_role_id_tbl(i), l_g_miss_num,null,nvl(l_Incur_by_role_id_tbl(i),incur_by_role_id))
7640                     ,project_role_id              = DECODE (l_project_role_id_tbl(i), l_g_miss_num,null,nvl(l_project_role_id_tbl(i),project_role_id))
7641                     ,resource_class_flag          = DECODE (l_resource_class_flag_tbl(i), l_g_miss_char,null,nvl(l_resource_class_flag_tbl(i),resource_class_flag ))
7642                     ,named_role                   = DECODE (l_named_role_tbl(i), l_g_miss_char,null,nvl(l_named_role_tbl(i),named_role ))
7643                     ,rbs_element_id               = l_rbs_element_id_tbl(i)
7644                     ,txn_accum_header_id          = l_txn_accum_header_id_tbl(i)
7645                     ,rate_expenditure_org_id      = DECODE (p_context
7646                                                            ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
7647                                                            ,DECODE(l_rate_exp_org_id_tbl(i)
7648                                                                   ,l_g_miss_num
7649                                                                   ,null
7650                                                                   ,nvl(l_rate_exp_org_id_tbl(i),rate_expenditure_org_id))
7651                                                            ,rate_expenditure_org_id)
7652                     ,rate_expenditure_type        = DECODE (p_context
7653                                                            ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
7654                                                            ,DECODE(l_rate_exp_type_tbl(i)
7655                                                                   ,l_g_miss_char
7656                                                                   ,null
7657                                                                   ,nvl(l_rate_exp_type_tbl(i),rate_expenditure_type))
7658                                                            ,rate_expenditure_type)
7659                     ,rate_exp_func_curr_code      = DECODE (p_context
7660                                                            ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
7661                                                            ,DECODE(l_rate_func_curr_code_tbl(i)
7662                                                                   ,l_g_miss_char
7663                                                                   ,null
7664                                                                   ,nvl(l_rate_func_curr_code_tbl(i),rate_exp_func_curr_code))
7665                                                            ,rate_exp_func_curr_code)
7666                     ,rate_based_flag              = DECODE (p_context  /* Bug 3678814 */
7667                                                            ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
7668                                                            ,DECODE(l_rate_based_flag_tbl(i),
7669                                                                    l_g_miss_char,'N',
7670                                                                    nvl(l_rate_based_flag_tbl(i),rate_based_flag))
7671                                                            ,rate_based_flag)
7672 		    /* Bug fix:5759413 */
7673 		    ,resource_rate_based_flag     = DECODE (p_context,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
7674 							,DECODE(nvl(l_rlm_id_change_flag_tbl(i),'N'), 'N'
7675 							  ,resource_rate_based_flag
7676 							  ,DECODE(l_rate_based_flag_tbl(i),
7677                                                                    l_g_miss_char,'N',
7678                                                                    nvl(l_rate_based_flag_tbl(i),resource_rate_based_flag)))
7679 							 ,resource_rate_based_flag)
7680                     ,scheduled_delay              = DECODE (p_context  /* Bug 3678814 */
7681                                                            ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
7682                                                            ,DECODE(l_scheduled_delay(i),
7683                                                                    l_g_miss_num,null,
7684                                                                    nvl(l_scheduled_delay(i),scheduled_delay))
7685                                                            ,scheduled_delay)
7686                     WHERE  resource_assignment_id= l_resource_assignment_id_tbl(i);
7687        /*-------------------------------------------------------------------------------
7688          The following block of code to call the api PA_FP_CALC_PLAN_PKG.calculate
7689          is commented as it has to be modified
7690          Calling the api PA_FP_CALC_PLAN_PKG.calculate*/
7691 
7692        /* Start of coding done for Bug 5684639:
7693           If the user has selected not to distribute the amounts, then
7694           pass the l_plan_end_date_old_tbl as l_plan_end_date_new_tbl AND
7695           l_plan_start_date_old_tbl as l_plan_start_date_new_tbl so that there is
7696           no distribution of amounts as the old and the new dates are the same.
7697        */
7698           IF l_debug_mode = 'Y'  THEN
7699              pa_debug.g_err_stage:='p_distrib_amts - '||p_distrib_amts;
7700              pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7701           END IF;
7702           IF (nvl(p_distrib_amts,'Y') = 'N') THEN
7703 
7704             -- Start Bug 5906826
7705             /* Commented for Bug 9610380
7706             IF (l_resource_assignment_id_tbl.count > 1) THEN
7707 
7708                   IF l_debug_mode = 'Y' THEN
7709                         pa_debug.g_err_stage:= 'p_distrib_amts is N and resource assignment > 1';
7710                         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7711                   END IF;
7712 
7713                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7714                                        p_msg_name       => 'PA_FP_INV_PARAM_PASSED');
7715                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7716 
7717             END IF;
7718             */
7719 
7720             FOR  i IN l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST LOOP
7721 
7722                 l_ra_id_tbl                := SYSTEM.PA_NUM_TBL_TYPE();
7723                 l_line_start_date_tbl      := SYSTEM.PA_DATE_TBL_TYPE();
7724                 l_line_end_date_tbl        := SYSTEM.PA_DATE_TBL_TYPE();
7725                 l_txn_currency_code_tbl    := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
7726                 l_tot_qty_tbl              := SYSTEM.PA_NUM_TBL_TYPE();
7727                 l_txn_raw_cost_tbl         := SYSTEM.PA_NUM_TBL_TYPE();
7728                 l_txn_burdened_cost_tbl    := SYSTEM.PA_NUM_TBL_TYPE();
7729                 l_delete_budget_lines_tbl  := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
7730 
7731                 -- If condition to delete budget lines, when dates are trucated and spread curve is not changed
7732                 -- and spread curve is other than fixed date when p_distrib_amts flag is checked.
7733                 IF ((l_plan_start_date_old_tbl(i) < l_plan_start_date_new_tbl(i)) OR
7734                 (l_plan_end_date_old_tbl(i) > l_plan_end_date_new_tbl(i))) AND
7735                 (l_spread_curve_id_old_tbl(i) = l_spread_curve_id_new_tbl(i)) AND
7736                  (l_spread_curve_id_old_tbl(i) <> 6)THEN
7737 
7738                    SELECT pbl.resource_assignment_id,
7739                            pbl.start_date,
7740                            pbl.end_date,
7741                            pbl.txn_currency_code,
7742                            pbl.quantity,
7743                            pbl.txn_raw_cost,
7744                            pbl.txn_burdened_cost,
7745                            'Y'
7746                     BULK COLLECT INTO
7747                            l_ra_id_tbl,
7748                            l_line_start_date_tbl,
7749                            l_line_end_date_tbl,
7750                            l_txn_currency_code_tbl,
7751                            l_tot_qty_tbl,
7752                            l_txn_raw_cost_tbl,
7753                            l_txn_burdened_cost_tbl,
7754                            l_delete_budget_lines_tbl
7755                     FROM   pa_budget_lines pbl,
7756                            pa_budget_versions pbv
7757                     WHERE  pbl.budget_version_id=l_budget_version_id
7758                     AND    pbl.resource_assignment_id=l_resource_assignment_id_tbl(i)
7759                     AND    pbl.txn_currency_code=l_currency_code_tbl(i)
7760                     AND    pbv.budget_version_id=pbl.budget_version_id
7761                     AND    pbl.start_date>=nvl(pbv.etc_start_date,pbl.start_date)
7762                     AND    (
7763                              (pbl.start_date>l_plan_end_date_new_tbl(i))
7764                              OR
7765                              (pbl.end_date<l_plan_start_date_new_tbl(i))
7766                             );
7767 
7768                     -- This is set to  'Y' so that calculate api is called only once.
7769                     l_cal_api_called_flg := 'Y';
7770 
7771                     -- Used to delete the budget lines which are falling out of planning start/end date
7772                     -- range when p_distrib_amts flag is checked.
7773                     PA_FP_CALC_PLAN_PKG.calculate(
7774                         p_project_id                   => l_project_id,
7775                         p_budget_version_id            => l_budget_version_id,
7776                         p_refresh_rates_flag           => 'N',
7777                         p_refresh_conv_rates_flag      => 'N',
7778                         p_spread_required_flag         => 'Y',
7779                         p_conv_rates_required_flag     => 'Y',
7780                         p_rollup_required_flag         => 'Y',
7781                         p_mass_adjust_flag             => 'N',
7782                         p_quantity_adj_pct             => NULL,
7783                         p_cost_rate_adj_pct            => NULL,
7784                         p_burdened_rate_adj_pct        => NULL,
7785                         p_bill_rate_adj_pct            => NULL,
7786                         p_source_context               => 'BUDGET_LINE',
7787                         p_resource_assignment_tab      => l_ra_id_tbl,
7788                         p_delete_budget_lines_tab      => l_delete_budget_lines_tbl,
7789                         p_txn_currency_code_tab        => l_txn_currency_code_tbl,
7790                         p_total_qty_tab                => l_tot_qty_tbl,
7791                         p_total_raw_cost_tab           => l_txn_raw_cost_tbl,
7792                         p_total_burdened_cost_tab      => l_txn_burdened_cost_tbl,
7793                         p_line_start_date_tab          => l_line_start_date_tbl,
7794                         p_line_end_date_tab            => l_line_end_date_tbl,
7795                         x_return_status                => l_return_status,
7796                         x_msg_count                    => l_msg_count,
7797                         x_msg_data                     => l_msg_data);
7798 
7799                 END IF;
7800             END LOOP;
7801             -- End Bug 5906826
7802 
7803              l_plan_start_date_old_tbl := l_plan_start_date_new_tbl ;
7804              l_plan_end_date_old_tbl := l_plan_end_date_new_tbl ;
7805           END IF;
7806 
7807         /* End of coding done for Bug 5684639.*/
7808 
7809        IF l_debug_mode = 'Y'  THEN
7810             pa_debug.g_err_stage:='Calling API PA_FP_CALC_PLAN_PKG.calculate';
7811             print_msg(pa_debug.g_err_stage,l_module_name);
7812             pa_debug.g_err_stage:='Parameters to PA_FP_CALC_PLAN_PKG.calculate';
7813             print_msg(pa_debug.g_err_stage,l_module_name);
7814 
7815             IF l_resource_assignment_id_tbl.COUNT>0 THEN
7816 
7817                 FOR i in l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST LOOP
7818 
7819                     pa_debug.g_err_stage:='l_resource_assignment_id_tbl('||i||') is '||l_resource_assignment_id_tbl(i);
7820                     print_msg(pa_debug.g_err_stage,l_module_name);
7821                     --dbms_output.put_line( pa_debug.g_err_stage);
7822 
7823                     pa_debug.g_err_stage:='l_currency_code_tbl('||i||') is '||l_currency_code_tbl(i);
7824                     print_msg(pa_debug.g_err_stage,l_module_name);
7825                     --dbms_output.put_line( pa_debug.g_err_stage);
7826 
7827                     IF p_currency_code_tbl.EXISTS(i) THEN
7828                         pa_debug.g_err_stage:='p_currency_code_tbl('||i||') is '||p_currency_code_tbl(i);
7829                         print_msg(pa_debug.g_err_stage,l_module_name);
7830                     ELSE
7831                         pa_debug.g_err_stage:='p_currency_code_tbl('||i||') does not exist ';
7832                         print_msg(pa_debug.g_err_stage,l_module_name);
7833                     END IF;
7834                     --dbms_output.put_line( pa_debug.g_err_stage);
7835 
7836                     pa_debug.g_err_stage:='l_override_currency_code_tbl('||i||') is '||l_override_currency_code_tbl(i);
7837                     print_msg(pa_debug.g_err_stage,l_module_name);
7838                     --dbms_output.put_line( pa_debug.g_err_stage);
7839 
7840                     IF p_txn_currency_override_tbl.EXISTS(i) THEN
7841                         pa_debug.g_err_stage:='p_txn_currency_override_tbl('||i||') is '||p_txn_currency_override_tbl(i);
7842                         print_msg(pa_debug.g_err_stage,l_module_name);
7843                     ELSE
7844                         pa_debug.g_err_stage:='p_txn_currency_override_tbl('||i||') does not exist ';
7845                         print_msg(pa_debug.g_err_stage,l_module_name);
7846                     END IF;
7847                     --dbms_output.put_line( pa_debug.g_err_stage);
7848 
7849                     pa_debug.g_err_stage:='l_total_quantity_tbl('||i||') is '||l_total_quantity_tbl(i);
7850                     print_msg(pa_debug.g_err_stage,l_module_name);
7851                     --dbms_output.put_line( pa_debug.g_err_stage);
7852 
7853                     IF p_quantity_tbl.EXISTS(i) THEN
7854                         pa_debug.g_err_stage:='p_quantity_tbl('||i||') is '||p_quantity_tbl(i);
7855                         print_msg(pa_debug.g_err_stage,l_module_name);
7856                     ELSE
7857                         pa_debug.g_err_stage:='p_quantity_tbl('||i||') does not exist ';
7858                         print_msg(pa_debug.g_err_stage,l_module_name);
7859                     END IF;
7860                     --dbms_output.put_line( pa_debug.g_err_stage);
7861 
7862                     pa_debug.g_err_stage:='l_total_raw_cost_tbl('||i||') is '||l_total_raw_cost_tbl(i);
7863                     print_msg(pa_debug.g_err_stage,l_module_name);
7864                     --dbms_output.put_line( pa_debug.g_err_stage);
7865 
7866                     IF p_raw_cost_tbl.EXISTS(i) THEN
7867                         pa_debug.g_err_stage:='p_raw_cost_tbl('||i||') is '||p_raw_cost_tbl(i);
7868                         print_msg(pa_debug.g_err_stage,l_module_name);
7869                     ELSE
7870                         pa_debug.g_err_stage:='p_raw_cost_tbl('||i||') does not exist ';
7871                         print_msg(pa_debug.g_err_stage,l_module_name);
7872                     END IF;
7873                     --dbms_output.put_line( pa_debug.g_err_stage);
7874 
7875                     pa_debug.g_err_stage:='l_burdened_cost_tbl('||i||') is '||l_burdened_cost_tbl(i);
7876                     print_msg(pa_debug.g_err_stage,l_module_name);
7877                     --dbms_output.put_line( pa_debug.g_err_stage);
7878 
7879                     IF p_burdened_cost_tbl.EXISTS(i) THEN
7880                         pa_debug.g_err_stage:='p_burdened_cost_tbl('||i||') is '||p_burdened_cost_tbl(i);
7881                         print_msg(pa_debug.g_err_stage,l_module_name);
7882                     ELSE
7883                         pa_debug.g_err_stage:='p_burdened_cost_tbl('||i||') does not exist ';
7884                         print_msg(pa_debug.g_err_stage,l_module_name);
7885                     END IF;
7886                     --dbms_output.put_line( pa_debug.g_err_stage);
7887 
7888                     pa_debug.g_err_stage:='l_revenue_tbl('||i||') is '||l_revenue_tbl(i);
7889                     print_msg(pa_debug.g_err_stage,l_module_name);
7890                     --dbms_output.put_line( pa_debug.g_err_stage);
7891 
7892                     IF p_revenue_tbl.EXISTS(i) THEN
7893                         pa_debug.g_err_stage:='p_revenue_tbl('||i||') is '||p_revenue_tbl(i);
7894                         print_msg(pa_debug.g_err_stage,l_module_name);
7895                     ELSE
7896                         pa_debug.g_err_stage:='p_revenue_tbl('||i||') does not exist ';
7897                         print_msg(pa_debug.g_err_stage,l_module_name);
7898                     END IF;
7899                     --dbms_output.put_line( pa_debug.g_err_stage);
7900 
7901                     pa_debug.g_err_stage:='l_raw_cost_rate_tbl('||i||') is '||l_raw_cost_rate_tbl(i);
7902                     print_msg(pa_debug.g_err_stage,l_module_name);
7903                     --dbms_output.put_line( pa_debug.g_err_stage);
7904 
7905                     IF p_cost_rate_tbl.EXISTS(i) THEN
7906                         pa_debug.g_err_stage:='p_cost_rate_tbl('||i||') is '||p_cost_rate_tbl(i);
7907                         print_msg(pa_debug.g_err_stage,l_module_name);
7908                     ELSE
7909                         pa_debug.g_err_stage:='p_cost_rate_tbl('||i||') does not exist ';
7910                         print_msg(pa_debug.g_err_stage,l_module_name);
7911                     END IF;
7912                     --dbms_output.put_line( pa_debug.g_err_stage);
7913 
7914                     pa_debug.g_err_stage:='l_cost_rate_override_tbl('||i||') is '||l_cost_rate_override_tbl(i);
7915                     print_msg(pa_debug.g_err_stage,l_module_name);
7916                     --dbms_output.put_line( pa_debug.g_err_stage);
7917 
7918                     IF p_cost_rate_override_tbl.EXISTS(i) THEN
7919                         pa_debug.g_err_stage:='p_cost_rate_override_tbl('||i||') is '||p_cost_rate_override_tbl(i);
7920                         print_msg(pa_debug.g_err_stage,l_module_name);
7921                     ELSE
7922                         pa_debug.g_err_stage:='p_cost_rate_override_tbl('||i||') does not exist ';
7923                         print_msg(pa_debug.g_err_stage,l_module_name);
7924                     END IF;
7925                     --dbms_output.put_line( pa_debug.g_err_stage);
7926 
7927                     pa_debug.g_err_stage:='l_b_multiplier_tbl('||i||') is '||l_b_multiplier_tbl(i);
7928                     print_msg(pa_debug.g_err_stage,l_module_name);
7929                     --dbms_output.put_line( pa_debug.g_err_stage);
7930 
7931                     IF p_burdened_rate_tbl.EXISTS(i) THEN
7932                         pa_debug.g_err_stage:='p_burdened_rate_tbl('||i||') is '||p_burdened_rate_tbl(i);
7933                         print_msg(pa_debug.g_err_stage,l_module_name);
7934                     ELSE
7935                         pa_debug.g_err_stage:='p_burdened_rate_tbl('||i||') does not exist ';
7936                         print_msg(pa_debug.g_err_stage,l_module_name);
7937                     END IF;
7938                     --dbms_output.put_line( pa_debug.g_err_stage);
7939 
7940                     pa_debug.g_err_stage:='l_burdened_rate_override_tbl('||i||') is '||l_burdened_rate_override_tbl(i);
7941                     print_msg(pa_debug.g_err_stage,l_module_name);
7942                     --dbms_output.put_line( pa_debug.g_err_stage);
7943 
7944                     IF p_burdened_rate_override_tbl.EXISTS(i) THEN
7945                         pa_debug.g_err_stage:='p_burdened_rate_override_tbl('||i||') is '||p_burdened_rate_override_tbl(i);
7946                         print_msg(pa_debug.g_err_stage,l_module_name);
7947                     ELSE
7948                         pa_debug.g_err_stage:='p_burdened_rate_override_tbl('||i||') does not exist ';
7949                         print_msg(pa_debug.g_err_stage,l_module_name);
7950                     END IF;
7951                     --dbms_output.put_line( pa_debug.g_err_stage);
7952 
7953                     pa_debug.g_err_stage:='l_bill_rate_tbl('||i||') is '||l_bill_rate_tbl(i);
7954                     print_msg(pa_debug.g_err_stage,l_module_name);
7955                     --dbms_output.put_line( pa_debug.g_err_stage);
7956 
7957                     IF p_bill_rate_tbl.EXISTS(i) THEN
7958                         pa_debug.g_err_stage:='p_bill_rate_tbl('||i||') is '||p_bill_rate_tbl(i);
7959                         print_msg(pa_debug.g_err_stage,l_module_name);
7960                     ELSE
7961                         pa_debug.g_err_stage:='p_bill_rate_tbl('||i||') does not exist ';
7962                         print_msg(pa_debug.g_err_stage,l_module_name);
7963                     END IF;
7964                     --dbms_output.put_line( pa_debug.g_err_stage);
7965 
7966                     pa_debug.g_err_stage:='l_bill_rate_override_tbl('||i||') is '||l_bill_rate_override_tbl(i);
7967                     print_msg(pa_debug.g_err_stage,l_module_name);
7968                     --dbms_output.put_line( pa_debug.g_err_stage);
7969 
7970                     IF p_bill_rate_override_tbl.EXISTS(i) THEN
7971                         pa_debug.g_err_stage:='p_bill_rate_override_tbl('||i||') is '||p_bill_rate_override_tbl(i);
7972                         print_msg(pa_debug.g_err_stage,l_module_name);
7973                     ELSE
7974                         pa_debug.g_err_stage:='p_bill_rate_override_tbl('||i||') does not exist ';
7975                         print_msg(pa_debug.g_err_stage,l_module_name);
7976                     END IF;
7977                     --dbms_output.put_line( pa_debug.g_err_stage);
7978 
7979                     pa_debug.g_err_stage:='l_rlm_id_change_flag_tbl('||i||') is '||l_rlm_id_change_flag_tbl(i);
7980                     print_msg(pa_debug.g_err_stage,l_module_name);
7981                     --dbms_output.put_line( pa_debug.g_err_stage);
7982                     pa_debug.g_err_stage:='l_mfc_cost_type_id_old_tbl('||i||') is '||l_mfc_cost_type_id_old_tbl(i);
7983                     print_msg(pa_debug.g_err_stage,l_module_name);
7984                     --dbms_output.put_line( pa_debug.g_err_stage);
7985                     pa_debug.g_err_stage:='l_mfc_cost_type_id_new_tbl('||i||') is '||l_mfc_cost_type_id_new_tbl(i);
7986                     print_msg(pa_debug.g_err_stage,l_module_name);
7987                     --dbms_output.put_line( pa_debug.g_err_stage);
7988                     pa_debug.g_err_stage:='l_spread_curve_id_old_tbl('||i||') is '||l_spread_curve_id_old_tbl(i);
7989                     print_msg(pa_debug.g_err_stage,l_module_name);
7990                     --dbms_output.put_line( pa_debug.g_err_stage);
7991                     pa_debug.g_err_stage:='l_spread_curve_id_new_tbl('||i||') is '||l_spread_curve_id_new_tbl(i);
7992                     print_msg(pa_debug.g_err_stage,l_module_name);
7993                     --dbms_output.put_line( pa_debug.g_err_stage);
7994                     pa_debug.g_err_stage:='l_sp_fixed_date_old_tbl('||i||') is '||l_sp_fixed_date_old_tbl(i);
7995                     print_msg(pa_debug.g_err_stage,l_module_name);
7996                     --dbms_output.put_line( pa_debug.g_err_stage);
7997                     if l_sp_fixed_date_new_tbl(i) = fnd_api.g_miss_date then
7998                         pa_debug.g_err_stage:='l_sp_fixed_date_new_tbl('||i||') is g miss date';
7999                     else
8000                         pa_debug.g_err_stage:='l_sp_fixed_date_new_tbl('||i||') is '||l_sp_fixed_date_new_tbl(i);
8001                     end if;
8002                     print_msg(pa_debug.g_err_stage,l_module_name);
8003                     --dbms_output.put_line( pa_debug.g_err_stage);
8004                     pa_debug.g_err_stage:='l_plan_start_date_old_tbl('||i||') is '||l_plan_start_date_old_tbl(i);
8005                     print_msg(pa_debug.g_err_stage,l_module_name);
8006                     --dbms_output.put_line( pa_debug.g_err_stage);
8007                     if l_plan_start_date_new_tbl(i) = fnd_api.g_miss_date then
8008                         pa_debug.g_err_stage:='l_plan_start_date_new_tbl('||i||') is g miss date';
8009                     else
8010                         pa_debug.g_err_stage:='l_plan_start_date_new_tbl('||i||') is '||l_plan_start_date_new_tbl(i);
8011                     end if;
8012                     print_msg(pa_debug.g_err_stage,l_module_name);
8013                     --dbms_output.put_line( pa_debug.g_err_stage);
8014                     pa_debug.g_err_stage:='l_plan_end_date_old_tbl('||i||') is '||l_plan_end_date_old_tbl(i);
8015                     print_msg(pa_debug.g_err_stage,l_module_name);
8016                     --dbms_output.put_line( pa_debug.g_err_stage);
8017                     if l_plan_end_date_new_tbl(i) = fnd_api.g_miss_date then
8018                         pa_debug.g_err_stage:='l_plan_end_date_new_tbl('||i||') is g miss date';
8019                     else
8020                         pa_debug.g_err_stage:='l_plan_end_date_new_tbl('||i||') is '||l_plan_end_date_new_tbl(i);
8021                     end if;
8022                     print_msg(pa_debug.g_err_stage,l_module_name);
8023                     --dbms_output.put_line( pa_debug.g_err_stage);
8024 
8025                 END LOOP;
8026             END IF;
8027        END IF;
8028 
8029 --dbms_output.put_line('l_resource_assignment_id_tbl(1) is '||l_resource_assignment_id_tbl(1));
8030 --dbms_output.put_line('l_currency_code_tbl(1) is '||l_currency_code_tbl(1));
8031 --dbms_output.put_line('l_override_currency_code_tbl(1) is '||l_override_currency_code_tbl(1));
8032 --dbms_output.put_line('l_total_quantity_tbl(1) is '||l_total_quantity_tbl(1));
8033 --dbms_output.put_line('l_total_raw_cost_tbl(1) is '||l_total_raw_cost_tbl(1));
8034 --dbms_output.put_line('l_burdened_cost_tbl(1) is '||l_burdened_cost_tbl(1));
8035 --dbms_output.put_line('l_revenue_tbl(1) is '||l_revenue_tbl(1));
8036 --dbms_output.put_line('l_raw_cost_rate_tbl(1) is '||l_raw_cost_rate_tbl(1));
8037 --dbms_output.put_line('l_cost_rate_override_tbl(1) is '||l_cost_rate_override_tbl(1));
8038 --dbms_output.put_line('l_b_multiplier_tbl cnt is '||l_b_multiplier_tbl.count);
8039 --dbms_output.put_line('l_b_multiplier_tbl(1) is '||l_b_multiplier_tbl(1));
8040 --dbms_output.put_line('l_burdened_rate_override_tbl cnt is '||l_burdened_rate_override_tbl.count);
8041 --dbms_output.put_line('l_burdened_rate_override_tbl(1) is '||l_burdened_rate_override_tbl(1));
8042 --dbms_output.put_line('l_bill_rate_tbl(1) is '||l_bill_rate_tbl(1));
8043 --dbms_output.put_line('l_bill_rate_override_tbl(1) is '||l_bill_rate_override_tbl(1));
8044 
8045 --dbms_output.put_line('quantity passed to calc is'||l_total_quantity_tbl(1));
8046 --dbms_output.put_line('Calling calc api');
8047 
8048       -- If condition added for Bug 5906826
8049       IF l_cal_api_called_flg = 'N' THEN
8050 
8051         PA_FP_CALC_PLAN_PKG.calculate(
8052           p_project_id                 =>   l_project_id
8053          ,p_budget_version_id          =>   l_budget_version_id
8054          --,p_refresh_rates_flag         =>   'N' --need to pass any variables that are passed from calling API
8055          --,p_refresh_conv_rates_flag    =>   'N' --need to pass any variables that are passed from calling API
8056          --,p_spread_required_flag       =>   'N'
8057          --,p_conv_rates_required_flag   =>   'N'
8058          ,p_source_context             =>   PA_FP_CONSTANTS_PKG.G_CALC_API_RESOURCE_CONTEXT
8059          ,p_resource_assignment_tab    =>   l_resource_assignment_id_tbl
8060          ,p_txn_currency_code_tab      =>   l_currency_code_tbl
8061          ,p_txn_currency_override_tab  =>   l_override_currency_code_tbl
8062          ,p_total_qty_tab              =>   l_total_quantity_tbl
8063          ,p_total_raw_cost_tab         =>   l_total_raw_cost_tbl
8064          ,p_total_burdened_cost_tab    =>   l_burdened_cost_tbl
8065          ,p_total_revenue_tab          =>   l_revenue_tbl
8066          ,p_raw_cost_rate_tab          =>   l_raw_cost_rate_tbl
8067          ,p_rw_cost_rate_override_tab  =>   l_cost_rate_override_tbl
8068          ,p_b_cost_rate_tab            =>   l_b_multiplier_tbl
8069          ,p_b_cost_rate_override_tab   =>   l_burdened_rate_override_tbl
8070          ,p_bill_rate_tab              =>   l_bill_rate_tbl
8071          ,p_bill_rate_override_tab     =>   l_bill_rate_override_tbl
8072          ,p_line_start_date_tab        =>   SYSTEM.PA_DATE_TBL_TYPE()
8073          ,p_line_end_date_tab          =>   SYSTEM.PA_DATE_TBL_TYPE()
8074          ,p_apply_progress_flag        =>   p_apply_progress_flag /* Passed by apply_progress api (sakthi's team) */
8075          --Added for Bug 4152749
8076          ,p_mfc_cost_type_id_old_tab   =>   l_mfc_cost_type_id_old_tbl
8077          ,p_mfc_cost_type_id_new_tab   =>   l_mfc_cost_type_id_new_tbl
8078          ,p_spread_curve_id_old_tab    =>   l_spread_curve_id_old_tbl
8079          ,p_spread_curve_id_new_tab    =>   l_spread_curve_id_new_tbl
8080          ,p_sp_fixed_date_old_tab      =>   l_sp_fixed_date_old_tbl
8081          ,p_sp_fixed_date_new_tab      =>   l_sp_fixed_date_new_tbl
8082          ,p_plan_start_date_old_tab    =>   l_plan_start_date_old_tbl
8083          ,p_plan_start_date_new_tab    =>   l_plan_start_date_new_tbl
8084          ,p_plan_end_date_old_tab      =>   l_plan_end_date_old_tbl
8085          ,p_plan_end_date_new_tab      =>   l_plan_end_date_new_tbl
8086          ,p_rlm_id_change_flag_tab     =>   l_rlm_id_change_flag_tbl
8087          ,p_rollup_required_flag       =>   l_pji_rollup_required   --Bug 4200168
8088          --End of parameters for Bug 4152749
8089          ,x_return_status              =>   x_return_status
8090          ,x_msg_count                  =>   x_msg_count
8091          ,x_msg_data                   =>   x_msg_data);
8092 
8093        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8094 
8095              IF l_debug_mode = 'Y' THEN
8096                    pa_debug.g_err_stage:='Called API PA_FP_CALC_PLAN_PKG.calculate returned error';
8097                    pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8098              END IF;
8099              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8100        END IF;
8101 
8102       END IF; -- If condition added for Bug 5906826
8103 
8104     -- IPM changes - rollup amounts in new entity
8105 
8106     -- Call the UTIL API to get the financial plan info l_fp_cols_rec
8107     --Added For CBS 12.2 Enhancement
8108     --If context is workplan and resource class flag is N, then we need to set
8109     --rate_based_flag as N and uom as Dollor
8110     IF (((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN)
8111           OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK))
8112           AND p_struct_elem_version_id IS NOT NULL)
8113     THEN
8114 	l_res_class_flag := PA_PROJECT_STRUCTURE_UTILS.get_resource_class_flag(l_project_id);
8115 	IF l_res_class_flag = 'N'
8116 	THEN
8117 		FORALL i IN l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST
8118 		UPDATE  PA_RESOURCE_ASSIGNMENTS
8119 		SET rate_based_flag = 'N',
8120 		    unit_of_measure = 'DOLLARS'
8121 		WHERE  resource_assignment_id= l_resource_assignment_id_tbl(i);
8122 	END IF;
8123     END IF;
8124     --CBS Changes End here
8125     pa_fp_gen_amount_utils.get_plan_version_dtls
8126         (p_project_id         => l_project_id,
8127          p_budget_version_id  => l_budget_version_id,
8128          x_fp_cols_rec        => l_fp_cols_rec,
8129          x_return_status      => x_return_status,
8130          x_msg_count          => x_msg_count,
8131          x_msg_data           => x_msg_data);
8132 
8133     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8134 
8135        IF l_debug_mode = 'Y' THEN
8136           pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
8137           pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8138        END IF;
8139        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8140     END IF;
8141 
8142 
8143     --Enc changes
8144      l_direct_expenditure_type_tbl.extend(l_resource_assignment_id_tbl.count);
8145 
8146     /*Update exp type for the transaction in pa_resource_asgn_curr */
8147 
8148            IF l_resource_assignment_id_tbl.COUNT > 0 THEN
8149             FORALL i IN 1 .. l_resource_assignment_id_tbl.COUNT
8150               update pa_resource_asgn_curr
8151               set expenditure_type=l_direct_expenditure_type_tbl(i)
8152               where resource_assignment_id= l_resource_assignment_id_tbl(i)
8153               and  txn_currency_code=l_currency_code_tbl(i);
8154         END IF;
8155         /*end Enc */
8156     -- IPM changes - populate tmp table to use for update later
8157     /*
8158     IF l_resource_assignment_id_tbl.COUNT > 0 THEN
8159        FORALL i IN l_resource_assignment_id_tbl.first ..
8160                    l_resource_assignment_id_tbl.last
8161           INSERT INTO pa_resource_asgn_curr_tmp
8162              (RA_TXN_ID
8163              ,RESOURCE_ASSIGNMENT_ID
8164              ,TXN_CURRENCY_CODE
8165              ,DELETE_FLAG
8166              )
8167           SELECT pa_resource_asgn_curr_s.nextval
8168                 ,l_resource_assignment_id_tbl(i)
8169                 ,l_currency_code_tbl(i)
8170                 ,NULL
8171             FROM DUAL;
8172     END IF;
8173 
8174     pa_res_asg_currency_pub.maintain_data(
8175          p_fp_cols_rec                  => l_fp_cols_rec,
8176          p_calling_module               => 'UPDATE_PLAN_TRANSACTION',
8177          p_delete_flag                  => 'N',
8178          p_copy_flag                    => 'N',
8179          p_src_version_id               => NULL,
8180          p_copy_mode                    => NULL,
8181          p_rollup_flag                  => 'Y',
8182          p_version_level_flag           => 'N',
8183          p_called_mode                  => 'SELF_SERVICE',
8184          x_return_status                => x_return_status,
8185          x_msg_count                    => x_msg_count,
8186          x_msg_data                     => x_msg_data
8187          );
8188 
8189        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8190 
8191              IF l_debug_mode = 'Y' THEN
8192                    pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
8193                    pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8194              END IF;
8195              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8196        END IF;
8197 	*/
8198 
8199 -- Added for bug 4492493
8200 
8201         IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
8202            AND PA_TASK_ASSIGNMENT_UTILS.Is_Progress_Rollup_Required(l_project_id) = 'Y') OR
8203            (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
8204             AND pa_task_assignment_utils.g_require_progress_rollup = 'Y') THEN
8205 
8206              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
8207                 ( p_calling_context       =>   'ASGMT_PLAN_CHANGE'
8208                  ,p_project_id            =>   l_project_id
8209                  ,p_structure_version_id   =>  p_struct_elem_version_id
8210                  ,p_pub_struc_ver_id      =>   p_struct_elem_version_id
8211                  ,x_return_status         =>   x_return_status
8212                  ,x_msg_count             =>   x_msg_count
8213                  ,x_msg_data              =>   x_msg_data);
8214 
8215              pa_task_assignment_utils.g_require_progress_rollup := 'N';
8216         END IF;
8217 
8218 
8219         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8220             IF l_debug_mode = 'Y' THEN
8221                 pa_debug.g_err_stage:='Called API PA_PROJ_TASK_STRUC_PUB.process_wbs_updates_wrp';
8222                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.update_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
8223             END IF;
8224 
8225             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8226         END IF;
8227 --End bug 4492493
8228 
8229        IF l_debug_mode = 'Y' THEN
8230              pa_debug.reset_curr_function;
8231        END IF;
8232 
8233 EXCEPTION
8234      WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
8235            IF l_debug_mode = 'Y' THEN
8236                   pa_debug.g_err_stage:='In invalid args exception';
8237                    pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8238            END IF;
8239 
8240            l_msg_count := FND_MSG_PUB.count_msg;
8241              IF l_msg_count = 1 THEN
8242 
8243                  IF l_debug_mode = 'Y' THEN
8244                       pa_debug.g_err_stage:='In invalid args exception 1';
8245                       pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8246                  END IF;
8247 
8248                 PA_INTERFACE_UTILS_PUB.get_messages
8249                      ( p_encoded        => FND_API.G_TRUE
8250                       ,p_msg_index      => 1
8251                       ,p_msg_count      => l_msg_count
8252                       ,p_msg_data       => l_msg_data
8253                       ,p_data           => l_data
8254                       ,p_msg_index_out  => l_msg_index_out);
8255                 x_msg_data  := l_data;
8256                 x_msg_count := l_msg_count;
8257              ELSE
8258                  IF l_debug_mode = 'Y' THEN
8259                       pa_debug.g_err_stage:='In invalid args exception 2';
8260                       pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8261                  END IF;
8262 
8263                 x_msg_count := l_msg_count;
8264 
8265              END IF;
8266            ROLLBACK TO Update_Planning_Transactions;
8267            x_return_status := FND_API.G_RET_STS_ERROR;
8268            IF l_debug_mode = 'Y' THEN
8269                pa_debug.g_err_stage:='In invalid args exception 3';
8270                pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8271                pa_debug.reset_curr_function;
8272            END IF;
8273            IF l_debug_mode = 'Y' THEN
8274                   pa_debug.g_err_stage:='In invalid args exception 4    ';
8275                   pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8276            END IF;
8277 
8278 
8279      WHEN OTHERS THEN
8280           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8281           x_msg_count     := 1;
8282           x_msg_data      := SQLERRM;
8283           FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'PA_FP_PLANNING_TRANSACTION_PUB'
8284                                   ,p_procedure_name  => 'Update_Planning_Transactions');
8285 
8286           IF l_debug_mode = 'Y' THEN
8287                pa_debug.g_err_stage:='Unexpected Error' || SQLERRM;
8288                pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8289                pa_debug.reset_curr_function;
8290           END IF;
8291           ROLLBACK TO Update_Planning_Transactions;
8292 
8293           RAISE;
8294 END Update_Planning_Transactions;
8295 
8296 
8297 /*This procedure should be called to copy planning transactions
8298   valid values for p_context are  'WORKPLAN' and 'TASK_ASSIGNMENT'
8299   valid values for p_copy_amt_qty are 'Y' and 'N'
8300 
8301   The parameters
8302       p_copy_people_flag
8303       p_copy_equip_flag
8304       p_copy_mat_item_flag
8305       p_copy_fin_elem_flag
8306   will be used only when the p_context is TASK_ASSIGNMENT.
8307   Irrespective of the context in which the API is called,
8308   the p_src_targ_version_id_tbl should never be empty.
8309   The other parameters can be derived based on the values
8310   in p_src_targ_version_id_tbl table.
8311 
8312   Bug 3615617 Copy External Tasks development changes
8313       validate_copy_assignment api returns target rlm id for target
8314       resource assignment id as part of the output record table. This
8315       should be passed to create_res_task_maps api as input.
8316 */
8317 PROCEDURE copy_planning_transactions
8318 (
8319        p_context                   IN   VARCHAR2
8320       ,p_copy_external_flag        IN   VARCHAR2
8321       ,p_src_project_id            IN   pa_projects_all.project_id%TYPE
8322       ,p_target_project_id         IN   pa_projects_all.project_id%TYPE
8323       ,p_src_budget_version_id     IN   pa_budget_versions.budget_version_id%TYPE DEFAULT NULL
8324       ,p_targ_budget_version_id    IN   pa_budget_versions.budget_version_id%TYPE DEFAULT NULL
8325       ,p_src_version_id_tbl        IN   SYSTEM.PA_NUM_TBL_TYPE
8326       ,p_targ_version_id_tbl       IN   SYSTEM.PA_NUM_TBL_TYPE
8327       ,p_copy_people_flag          IN   VARCHAR2                        := NULL
8328       ,p_copy_equip_flag           IN   VARCHAR2                        := NULL
8329       ,p_copy_mat_item_flag        IN   VARCHAR2                        := NULL
8330       ,p_copy_fin_elem_flag        IN   VARCHAR2                        := NULL
8331 --     Added this field p_pji_rollup_required for the 4200168
8332       ,p_pji_rollup_required      IN   VARCHAR2                     DEFAULT 'Y'
8333       ,x_return_status             OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8334       ,x_msg_count                 OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
8335       ,x_msg_data                  OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8336 
8337 ) IS
8338     --Start of variables used for debugging
8339     l_return_status                            VARCHAR2(1);
8340     l_msg_count                                NUMBER := 0;
8341     l_msg_data                                 VARCHAR2(2000);
8342     l_data                                     VARCHAR2(2000);
8343     l_msg_index_out                            NUMBER;
8344     l_debug_mode                               VARCHAR2(30);
8345     l_debug_level3                    CONSTANT NUMBER :=3;
8346     l_debug_level5                    CONSTANT NUMBER :=5;
8347     --End of variables used for debugging
8348     l_adj_percent                              NUMBER;
8349     i                                          NUMBER;
8350     j                                          NUMBER;
8351     l_row_count                                NUMBER;
8352     l_src_budget_version_id                    pa_budget_versions.budget_version_id%TYPE;
8353     l_targ_budget_version_id                   pa_budget_versions.budget_version_id%TYPE;
8354     l_ra_id_tbl                                SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8355     l_project_assignment_id_tbl                SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8356     l_temp_ra_id_tbl                           SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8357     l_calc_ra_id_tbl                           SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8358     l_temp_proj_assmt_id_tbl                   SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8359     l_temp_planning_start_date_tbl             SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
8360     l_temp_planning_end_date_tbl               SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE() ;
8361     l_quantity_tbl                             SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8362     l_currency_code_tbl                        SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
8363     l_module_name                              VARCHAR2(100):='pa.fp_planning_txn_pub.copy_planning_transactions';
8364     l_resource_rec_tbl                         PA_TASK_ASSIGNMENT_UTILS.l_resource_rec_tbl_type;
8365     l_planning_start_date_tbl                  SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
8366     l_planning_end_date_tbl                    SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
8367     l_schedule_start_date_tbl                  SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
8368     l_schedule_end_date_tbl                    SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
8369     l_calculate_flag                           VARCHAR2(1);
8370     l_projfunc_currency_code                   pa_projects_all.project_currency_code%TYPE;
8371     l_proj_curr_code                           pa_projects_all.projfunc_currency_code%TYPE;
8372     l_spread_amt_flag_tbl                      SYSTEM.PA_VARCHAR2_1_TBL_TYPE:= SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8373 
8374     -- Declared for Bug  3615617
8375     l_resource_list_member_id_tbl              SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8376 
8377     l_tot_rc_tbl                               SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8378     l_pji_rollup_required                     VARCHAR2(1);
8379 
8380     --Code addition   for bug#4200168 starts here.
8381     TYPE l_txn_curr_code_table IS TABLE OF PA_BUDGET_LINES.TXN_CURRENCY_CODE%type
8382     INDEX BY BINARY_INTEGER;
8383 
8384     l_txn_curr_code_tbl  l_txn_curr_code_table;
8385 
8386     l_proj_fp_options_id   pa_proj_fp_options.proj_fp_options_id%type;
8387     l_project_id           pa_proj_fp_options.project_id%type;
8388     l_fin_plan_type_id     pa_proj_fp_options.fin_plan_type_id%type;
8389     l_pc                   pa_projects_all.project_currency_code%type;
8390     l_pfc                  pa_projects_all.projfunc_currency_code%type;
8391     --Code addition   for bug#4200168 ends here.
8392 
8393     l_fp_cols_rec   pa_fp_gen_amount_utils.fp_cols; -- IPM
8394     l_resource_class_code        VARCHAR2(30);
8395     l_exp_type                   VARCHAR2(30);
8396     l_inv_item_id                NUMBER;
8397     l_res_rate_based_flag_tbl    SYSTEM.PA_VARCHAR2_1_TBL_TYPE:=SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8398 
8399     CURSOR c_calc_api_param_csr
8400     IS
8401     SELECT pfrmt.source_res_assignment_id
8402           ,pfrmt.target_res_assignment_id
8403     FROM   pa_fp_ra_map_tmp pfrmt;
8404 
8405     c_calc_api_param_rec                        c_calc_api_param_csr%ROWTYPE;
8406 
8407     l_rbs_diff_flag                             VARCHAR2(1);
8408     --Bug 4097749
8409     l_named_role_tbl                            SYSTEM.pa_varchar2_80_tbl_type:=SYSTEM.pa_varchar2_80_tbl_type();
8410 
8411 BEGIN
8412     IF l_debug_mode = 'Y' THEN
8413         pa_debug.g_err_stage:='In copy planning txn';
8414         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8415     END IF;
8416 --dbms_output.put_line('in copy plan txn1');
8417     x_msg_count := 0;
8418     x_return_status := FND_API.G_RET_STS_SUCCESS;
8419 
8420     SAVEPOINT copy_plan_txn;
8421 
8422 --Added this if for the bug 4200168
8423     IF p_pji_rollup_required = 'Y' THEN
8424         l_pji_rollup_required := 'Y';
8425     ELSE
8426         l_pji_rollup_required := 'N';
8427     END IF;
8428 
8429     pa_task_assignment_utils.g_require_progress_rollup := 'N';
8430 
8431 
8432     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
8433     l_debug_mode := NVL(l_debug_mode, 'Y');
8434 
8435     -- Set curr function
8436 IF l_debug_mode = 'Y' THEN
8437     pa_debug.set_curr_function(
8438                 p_function   =>'plan_txn_pub.copy_plan_txn'
8439                ,p_debug_mode => l_debug_mode );
8440 
8441         pa_debug.g_err_stage:='Validating input parameters';
8442         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8443     END IF;
8444 
8445     IF p_src_version_id_tbl.count <> p_targ_version_id_tbl.count THEN
8446 
8447         IF l_debug_mode = 'Y' THEN
8448             pa_debug.g_err_stage:='No of elements in p_src_version_id_tbl is not same as p_targ_version_id_tbl';
8449             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8450         END IF;
8451 
8452         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8453                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
8454 
8455         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8456 
8457     END IF;
8458 
8459     --If the tables are empty then return
8460     IF p_src_version_id_tbl.count=0 THEN
8461 
8462         IF l_debug_mode = 'Y' THEN
8463 
8464             pa_debug.g_err_stage:='The input tables are empty' ;
8465             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8466         pa_debug.reset_curr_function;
8467 	END IF;
8468         RETURN;
8469 
8470     END IF;
8471 
8472     --Validate the input parameters
8473     IF p_context IS NULL OR
8474        p_src_project_id IS NULL OR
8475        p_target_project_id IS NULL THEN
8476 
8477         IF l_debug_mode = 'Y' THEN
8478             pa_debug.g_err_stage:='p_context is '||p_context;
8479             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8480         END IF;
8481 
8482         IF l_debug_mode = 'Y' THEN
8483             pa_debug.g_err_stage:='p_src_project_id is '||p_src_project_id;
8484             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8485         END IF;
8486 
8487         IF l_debug_mode = 'Y' THEN
8488             pa_debug.g_err_stage:='p_target_project_id is '||p_target_project_id;
8489             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8490         END IF;
8491 
8492         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8493                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
8494 
8495         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8496 
8497     END IF;
8498 
8499 
8500     --Initialise the variables the should be passed as parameters in other APIs
8501     IF p_src_project_id<>p_target_project_id THEN
8502         l_adj_percent := 0.9999;
8503         l_targ_budget_version_id:=l_src_budget_version_id;
8504     ELSE
8505         l_adj_percent := 0;
8506     END IF;
8507 
8508     --If context is WORKPLAN call the TA Validation API with the required parameters
8509     IF p_context=PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN OR
8510        p_context=PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK    THEN
8511 
8512         IF l_debug_mode = 'Y' THEN
8513             pa_debug.g_err_stage:='The calling context is workplan / task assignment p_src_version_id_tbl(1) '||p_src_version_id_tbl(1);
8514             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8515         END IF;
8516 --dbms_output.put_line('in copy plan txn2');
8517         --Derive the plan version id for the source and target element version ids
8518         SELECT pbv.budget_version_id
8519         INTO   l_src_budget_version_id
8520         FROM   pa_struct_task_wbs_v pt,
8521                pa_budget_versions pbv
8522         WHERE  pbv.project_structure_version_id= pt.parent_structure_version_id
8523         AND    pt.element_version_id=p_src_version_id_tbl(1)
8524         AND    pbv.wp_version_flag='Y';
8525 
8526         IF l_debug_mode = 'Y' THEN
8527             pa_debug.g_err_stage:='The calling context is workplan / task assignment p_targ_version_id_tbl(1) '||p_targ_version_id_tbl(1);
8528             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8529         END IF;
8530 
8531 
8532    --dbms_output.put_line('in copy plan txn2.5');
8533         SELECT pbv.budget_version_id
8534         INTO   l_targ_budget_version_id
8535         FROM   pa_budget_versions pbv
8536               ,pa_struct_task_wbs_v pt
8537         WHERE  pt.element_version_id=p_targ_version_id_tbl(1)
8538         AND    pbv.project_structure_version_id=pt.parent_structure_version_id
8539         AND    pbv.wp_version_flag='Y';
8540 
8541         --CALL THE TA VALIDATION API
8542         IF l_debug_mode = 'Y' THEN
8543             pa_debug.g_err_stage:='The calling context is workplan / task assignment';
8544             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8545         END IF;
8546         --dbms_output.put_line('p_targ_version_id_tbl.count is '||p_targ_version_id_tbl.count);
8547 
8548         --This value will be used only when the x_calculate_flag of the below validate api is
8549         --returned as 'N'
8550         l_adj_percent := 0;
8551 
8552         --Added x_rbs_diff_flag for bug 3974569. This flag indicates that the the source/target resource assignments
8553         --being copied might not map to the same rbs_element_id. If this is passed as Y it means that
8554         ----> validate_copy_assignment has called RBS mapping API and
8555         ----> While copying the resource assignments rbs_element_id should be taken from pa_rbs_plans_out_tmp
8556          pa_task_assignment_utils.validate_copy_assignment
8557         (  p_copy_external_flag          => p_copy_external_flag --Included this parameter for bug 3841130
8558           ,p_src_project_id              => p_src_project_id
8559           ,p_target_project_id           => p_target_project_id
8560           ,p_src_elem_ver_id_tbl         => p_src_version_id_tbl
8561           ,p_targ_elem_ver_id_tbl        => p_targ_version_id_tbl
8562           ,p_copy_people_flag            => p_copy_people_flag
8563           ,p_copy_equip_flag             => p_copy_equip_flag
8564           ,p_copy_mat_item_flag          => p_copy_mat_item_flag
8565           ,p_copy_fin_elem_flag          => p_copy_fin_elem_flag
8566           ,x_resource_rec_tbl            => l_resource_rec_tbl
8567           ,x_calculate_flag              => l_calculate_flag
8568           ,x_rbs_diff_flag               => l_rbs_diff_flag
8569           ,x_return_status               => x_return_status);
8570 
8571         --dbms_output.put_line('l_resource_rec_tbl.count is '||l_resource_rec_tbl.count);
8572         --dbms_output.put_line('l_resource_rec_tbl.count is '||l_resource_rec_tbl(1).planning_start_date);
8573         --dbms_output.put_line('l_resource_rec_tbl.count is '||l_resource_rec_tbl(1).planning_end_date);
8574         --dbms_output.put_line('l_calculate_flag is '||l_calculate_flag);
8575         --This code is for debugging only. Should be removed later
8576         IF l_debug_mode = 'Y' THEN
8577 
8578             pa_debug.g_err_stage:='validate_copy_assignment returned error '||x_return_status;
8579             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8580 
8581         END IF;
8582 
8583         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8584 
8585             IF l_debug_mode = 'Y' THEN
8586 
8587                 pa_debug.g_err_stage:='validate_copy_assignment returned error';
8588                 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8589 
8590             END IF;
8591             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8592 
8593         END IF;
8594 
8595         IF  l_resource_rec_tbl.COUNT =0 THEN
8596             IF l_debug_mode = 'Y' THEN
8597 
8598                 pa_debug.g_err_stage:='Validate API returned 0 records in the res rec table-- returning';
8599                 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8600             pa_debug.reset_curr_function;
8601 	END IF;
8602             RETURN;
8603         END IF;
8604 
8605         --Extend the pl/sql tables
8606         l_ra_id_tbl.extend(l_resource_rec_tbl.last);
8607         l_planning_start_date_tbl.extend(l_resource_rec_tbl.last);
8608         l_planning_end_date_tbl.extend(l_resource_rec_tbl.last);
8609         l_schedule_start_date_tbl.extend(l_resource_rec_tbl.last);
8610         l_schedule_end_date_tbl.extend(l_resource_rec_tbl.last);
8611         l_project_assignment_id_tbl.extend(l_resource_rec_tbl.last);
8612         l_resource_list_member_id_tbl.extend(l_resource_rec_tbl.last);     -- Bug  3615617
8613         --Bug 4097749
8614         l_named_role_tbl.extend(l_resource_rec_tbl.last);
8615 
8616         --Copy the records from pl/sql table to local pl/sql tbls
8617         FOR i IN l_resource_rec_tbl.first..l_resource_rec_tbl.last LOOP
8618 
8619             l_ra_id_tbl(i):=l_resource_rec_tbl(i).resource_assignment_id;
8620             l_planning_start_date_tbl(i):=l_resource_rec_tbl(i).planning_start_date;
8621             l_planning_end_date_tbl(i):=l_resource_rec_tbl(i).planning_end_date;
8622             l_schedule_start_date_tbl(i):=l_resource_rec_tbl(i).schedule_start_date;
8623             l_schedule_end_date_tbl(i):=l_resource_rec_tbl(i).schedule_end_date;
8624             l_project_assignment_id_tbl(i):=l_resource_rec_tbl(i).project_assignment_id;
8625             l_resource_list_member_id_tbl(i):=l_resource_rec_tbl(i).resource_list_member_id; -- Bug  3615617
8626             --Bug 4097749
8627             l_named_role_tbl(i):=l_resource_rec_tbl(i).named_role;
8628 
8629         END LOOP;
8630 
8631     END IF;
8632 
8633     IF l_debug_mode = 'Y' THEN
8634         pa_debug.g_err_stage:='Calling pa_fp_copy_from_pkg.create_res_task_maps '||l_ra_id_tbl.last;
8635         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8636     END IF;
8637 --dbms_output.put_line('calling create res task maps');
8638 
8639     --Call the API to create the mapping between source and target version ids.
8640       pa_fp_copy_from_pkg.create_res_task_maps(
8641       p_context                => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
8642      ,p_src_ra_id_tbl          => l_ra_id_tbl
8643      ,p_src_elem_ver_id_tbl    => p_src_version_id_tbl
8644      ,p_targ_elem_ver_id_tbl   => p_targ_version_id_tbl
8645      ,p_targ_proj_assmt_id_tbl => l_project_assignment_id_tbl
8646      ,p_targ_rlm_id_tbl        => l_resource_list_member_id_tbl -- Bug 3615617
8647      ,p_planning_start_date_tbl=> l_planning_start_date_tbl
8648      ,p_planning_end_date_tbl  => l_planning_end_date_tbl
8649      ,p_schedule_start_date_tbl=> l_schedule_start_date_tbl
8650      ,p_schedule_end_date_tbl  => l_schedule_end_date_tbl
8651      ,x_return_status          => x_return_status
8652      ,x_msg_count              => x_msg_count
8653      ,x_msg_data               => x_msg_data);
8654 
8655 
8656 
8657     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8658 
8659         IF l_debug_mode = 'Y' THEN
8660 
8661             pa_debug.g_err_stage:='create_res_task_maps returned error';
8662             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8663 
8664         END IF;
8665         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8666 
8667     END IF;
8668 
8669 
8670     IF l_debug_mode = 'Y' THEN
8671         pa_debug.g_err_stage:='Calling PA_FP_COPY_FROM_PKG.Copy_Resource_Assignments';
8672         pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8673     END IF;
8674 
8675 --dbms_output.put_line('calling copy res assmts S '||l_src_budget_version_id ||' T '||l_targ_budget_version_id );
8676     --Call the API to copy the resource assignments for the target version
8677     PA_FP_COPY_FROM_PKG.Copy_Resource_Assignments(
8678         p_source_plan_version_id  => l_src_budget_version_id
8679         ,p_target_plan_version_id => l_targ_budget_version_id
8680         ,p_adj_percentage         => l_adj_percent
8681         ,p_rbs_map_diff_flag      => l_rbs_diff_flag --For Bug 3974569
8682         --Bug 4200168
8683         ,p_calling_context         => 'WORKPLAN'
8684         ,x_return_status          => x_return_status
8685         ,x_msg_count              => x_msg_count
8686         ,x_msg_data               => x_msg_data);
8687 
8688     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8689 
8690         IF l_debug_mode = 'Y' THEN
8691 
8692             pa_debug.g_err_stage:='Copy_Resource_Assignments returned error';
8693             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8694 
8695         END IF;
8696         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8697 
8698     END IF;
8699 
8700     -- IPM changes - rollup amounts in new entity
8701     -- Call the UTIL API to get the financial plan info l_fp_cols_rec
8702     -- Bug 5070740 - moved this to rollup into entity BEFORE calling calculate
8703 
8704     pa_fp_gen_amount_utils.get_plan_version_dtls
8705         (p_project_id         => p_target_project_id,
8706          p_budget_version_id  => l_targ_budget_version_id,
8707          x_fp_cols_rec        => l_fp_cols_rec,
8708          x_return_status      => x_return_status,
8709          x_msg_count          => x_msg_count,
8710          x_msg_data           => x_msg_data);
8711 
8712     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8713 
8714        IF l_debug_mode = 'Y' THEN
8715           pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
8716           print_msg(pa_debug.g_err_stage,l_module_name);
8717        END IF;
8718        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8719     END IF;
8720 
8721     IF l_calculate_flag = 'Y' then
8722 
8723       -- IPM changes - populate tmp table to use for rollup
8724       -- Bug 5034507: Delete temp table before inserting new records
8725       DELETE pa_resource_asgn_curr_tmp;
8726 
8727       -- For bug 5017855, ensure that the combinations of
8728       -- (resource_assignment_id, txn_currency_code) are distinct.
8729       -- Bug 5042399: Copy Source override rates to the temp table for Target resources.
8730       -- Bug 5070740: Need to copy override rates before calculate is called
8731       INSERT INTO pa_resource_asgn_curr_tmp (
8732         RESOURCE_ASSIGNMENT_ID,
8733         TXN_CURRENCY_CODE,
8734         TXN_RAW_COST_RATE_OVERRIDE,
8735         TXN_BURDEN_COST_RATE_OVERRIDE,
8736         TXN_BILL_RATE_OVERRIDE )
8737       SELECT DISTINCT
8738            ra.RESOURCE_ASSIGNMENT_ID,
8739            src_rbc.txn_currency_code,
8740            src_rbc.TXN_RAW_COST_RATE_OVERRIDE,
8741            src_rbc.TXN_BURDEN_COST_RATE_OVERRIDE,
8742            src_rbc.TXN_BILL_RATE_OVERRIDE
8743       FROM   pa_resource_asgn_curr src_rbc,
8744            pa_fp_ra_map_tmp map,
8745            --pa_budget_lines bl
8746            pa_resource_assignments ra
8747       WHERE  ra.budget_version_id =l_targ_budget_version_id
8748 --      AND    src_rbc.budget_version_id = l_src_budget_version_id
8749       AND    map.target_res_assignment_id = ra.resource_assignment_id
8750       AND    src_rbc.resource_assignment_id = map.source_res_assignment_id;
8751 --      AND    src_rbc.txn_currency_code = bl.txn_currency_code;
8752 
8753       -- Call maintain_data to copy override rates before calling calculate
8754       pa_res_asg_currency_pub.maintain_data(
8755          p_fp_cols_rec                  => l_fp_cols_rec,
8756          p_calling_module               => 'UPDATE_PLAN_TRANSACTION',
8757          p_rollup_flag                  => 'N',
8758          p_version_level_flag           => 'N',
8759          p_called_mode                  => 'SELF_SERVICE',
8760          x_return_status                => x_return_status,
8761          x_msg_count                    => x_msg_count,
8762          x_msg_data                     => x_msg_data
8763          );
8764 
8765       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8766 
8767              IF l_debug_mode = 'Y' THEN
8768                    pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
8769                    print_msg(pa_debug.g_err_stage,l_module_name);
8770              END IF;
8771              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8772       END IF;
8773       -- END Bug  5070740
8774 
8775         --Bug 4097749. Update the resource assigments created above with the named_role attribute returned by
8776         --the TA validate API
8777         IF l_debug_mode = 'Y' THEN
8778             pa_debug.g_err_stage:='About to update named role/parent assignment id in pa_resource_assignments';
8779             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8780         END IF;
8781 
8782         --Bug 4215676 . Modified the  update sql for performance issues.
8783         --The parent assignment id should  be NULLED out.Please see the comment on exaclty similar DML UPDATE below
8784 
8785         -- IPM - get resource rate based flag
8786         l_res_rate_based_flag_tbl.extend(l_ra_id_tbl.last);
8787         FOR i IN 1..l_ra_id_tbl.COUNT LOOP
8788               SELECT rlm.resource_class_code, rlm.inventory_item_id,
8789                      rlm.expenditure_type
8790                 INTO l_resource_class_code, l_inv_item_id, l_exp_type
8791                 FROM pa_resource_list_members rlm,
8792                      pa_resource_assignments ra
8793                WHERE ra.resource_assignment_id = l_ra_id_tbl(i)
8794                  AND ra.resource_list_member_id = rlm.resource_list_member_id;
8795 
8796               IF l_resource_class_code IN ('PEOPLE', 'EQUIPMENT') THEN
8797                  l_res_rate_based_flag_tbl(i) := 'Y';
8798               ELSIF l_resource_class_code = 'MATERIAL_ITEMS' AND
8799                     l_inv_item_id IS NOT NULL THEN
8800                     BEGIN
8801                     SELECT 'Y'
8802                       INTO l_res_rate_based_flag_tbl(i)
8803                       FROM DUAL
8804                       WHERE NOT EXISTS (select 'Y'
8805                          from mtl_system_items_b item,
8806                               mtl_units_of_measure meas
8807                         where item.inventory_item_id = l_inv_item_id
8808                           and item.primary_uom_code = meas.uom_code
8809                           and meas.uom_class = 'Currency');
8810                     EXCEPTION WHEN OTHERS THEN
8811                        l_res_rate_based_flag_tbl(i) := 'N';
8812                     END;
8813               ELSIF l_resource_class_code in ('MATERIAL_ITEMS',
8814                                               'FINANCIAL_ELEMENTS') AND
8815                     l_inv_item_id IS NULL AND l_exp_type IS NOT NULL THEN
8816                     BEGIN
8817                     SELECT c.cost_rate_flag
8818                       INTO l_res_rate_based_flag_tbl(i)
8819                       FROM pa_expenditure_types c
8820                      WHERE c.expenditure_type = l_exp_type;
8821                     EXCEPTION WHEN OTHERS THEN
8822                        l_res_rate_based_flag_tbl(i) := 'N';
8823                     END;
8824               END IF;
8825         END LOOP;
8826         FORALL i IN 1..l_ra_id_tbl.COUNT
8827               UPDATE pa_resource_assignments
8828               SET    named_role = l_named_role_tbl(i),
8829                      parent_assignment_id=NULL,
8830 		     /* bug fix:5135927 : Added nvl for l_res_rate_base_flag */
8831                      resource_rate_based_flag =NVL(l_res_rate_based_flag_tbl(i),'N')--IPM
8832               WHERE  parent_assignment_id = l_ra_id_tbl(i)
8833               AND    budget_version_id = l_targ_budget_version_id;
8834 
8835         IF l_debug_mode = 'Y' THEN
8836             pa_debug.g_err_stage:='Done with updating named role/parent assignment id in pa_resource_assignments';
8837             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8838         END IF;
8839 
8840 
8841         IF l_debug_mode = 'Y' THEN
8842             pa_debug.g_err_stage:='Calling Calculate API';
8843             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8844         END IF;
8845         --dbms_output.put_line('in cal=y');
8846 
8847         pa_budget_utils.Get_Project_Currency_Info
8848         (  p_project_id            => p_target_project_id
8849          , x_projfunc_currency_code => l_projfunc_currency_code
8850          , x_project_currency_code  => l_proj_curr_code
8851          , x_txn_currency_code     => l_projfunc_currency_code
8852          , x_msg_count             => x_msg_count
8853          , x_msg_data              => x_msg_data
8854          , x_return_status          => x_return_status);
8855 
8856         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8857             IF l_debug_mode = 'Y' THEN
8858                pa_debug.g_err_stage:='Cpa_budget_utils.Get_Project_Currency_Info returned error';
8859                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8860             END IF;
8861             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8862         END IF;
8863 
8864         i:=1;
8865         FOR c_calc_api_param_rec IN c_calc_api_param_csr LOOP
8866 
8867             --dbms_output.put_line (' i is '||i);
8868             IF NOT l_calc_ra_id_tbl.EXISTS(i) THEN
8869                 l_quantity_tbl.extend(1);
8870                 l_tot_rc_tbl.extend(1);
8871                 l_currency_code_tbl.extend(1);
8872                 l_calc_ra_id_tbl.extend(1);
8873                 l_spread_amt_flag_tbl.extend(1);
8874             END IF;
8875             -- Select the quantity for the resource assignment and the txn currency code. Note that
8876             -- for task assignments there will be only one currency code across all the budget lines
8877             -- in the ra id
8878             -- Changed the logic of populating quantity and raw cost to loop thru l_resource_rec_tbl
8879             -- instead of using tbls cached by ra id for bug 3678314
8880             FOR kk IN 1..l_resource_rec_tbl.COUNT LOOP
8881 
8882                 IF c_calc_api_param_rec.source_res_assignment_id = l_resource_rec_tbl(kk).resource_assignment_id THEN
8883 
8884                     l_quantity_tbl(i):=l_resource_rec_tbl(kk).total_quantity;
8885                     l_tot_rc_tbl(i):=l_resource_rec_tbl(kk).total_raw_cost;
8886                     EXIT;
8887 
8888                 END IF;
8889 
8890             END LOOP;
8891 
8892             l_calc_ra_id_tbl(i):=c_calc_api_param_rec.target_res_assignment_id;
8893             l_spread_amt_flag_tbl(i):='Y';
8894 
8895             BEGIN
8896                 SELECT nvl(txn_currency_code,l_proj_curr_code)--For workplan txn curr code can be null
8897                 INTO   l_currency_code_tbl(i)
8898                 FROM   pa_budget_lines
8899                 WHERE  resource_assignment_id=
8900                           c_calc_api_param_rec.source_res_assignment_id -- bug 3781932 l_calc_ra_id_tbl(i)
8901                 AND    ROWNUM=1;
8902             EXCEPTION
8903             WHEN NO_DATA_FOUND THEN
8904                 l_currency_code_tbl(i):=l_proj_curr_code;
8905             END;
8906             i:=i+1;
8907          END LOOP;
8908          l_quantity_tbl.DELETE(i,l_quantity_tbl.count);
8909          l_tot_rc_tbl.DELETE(i,l_tot_rc_tbl.count);
8910          l_currency_code_tbl.DELETE(i,l_currency_code_tbl.count);
8911          l_calc_ra_id_tbl.DELETE(i,l_calc_ra_id_tbl.count);
8912          l_spread_amt_flag_tbl.DELETE(i,l_spread_amt_flag_tbl.count);
8913          --dbms_output.put_line('Calling the calculate api'||l_calc_ra_id_tbl.count);
8914                   --dbms_output.put_line('Calling the calculate api'||l_calc_ra_id_tbl(1));
8915                   --dbms_output.put_line('Calling the calculate api'||l_calc_ra_id_tbl(2));
8916 
8917          PA_FP_CALC_PLAN_PKG.calculate(
8918           p_project_id                 =>   p_target_project_id
8919          ,p_budget_version_id          =>   l_targ_budget_version_id
8920          --,p_refresh_rates_flag         =>   'N' --need to pass any variables that are passed from calling API
8921          --,p_refresh_conv_rates_flag    =>   'N' --need to pass any variables that are passed from calling API
8922          --,p_spread_required_flag       =>   'N'
8923          --,p_conv_rates_required_flag   =>   'N'
8924          ,p_source_context             =>   'RESOURCE_ASSIGNMENT'
8925          ,p_resource_assignment_tab    =>   l_calc_ra_id_tbl
8926          ,p_delete_budget_lines_tab    =>   SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
8927          -- bug fix:5726773 ,p_spread_amts_flag_tab       =>   l_spread_amt_flag_tbl
8928          ,p_txn_currency_code_tab      =>   l_currency_code_tbl
8929          ,p_txn_currency_override_tab  =>   SYSTEM.PA_VARCHAR2_15_TBL_TYPE()
8930          ,p_total_qty_tab              =>   l_quantity_tbl
8931          ,p_total_raw_cost_tab         =>   l_tot_rc_tbl
8932          ,p_total_burdened_cost_tab    =>   SYSTEM.PA_NUM_TBL_TYPE()
8933          ,p_total_revenue_tab          =>   SYSTEM.PA_NUM_TBL_TYPE()
8934          ,p_raw_cost_rate_tab          =>   SYSTEM.PA_NUM_TBL_TYPE()
8935          ,p_rw_cost_rate_override_tab  =>   SYSTEM.PA_NUM_TBL_TYPE()
8936          ,p_b_cost_rate_tab            =>   SYSTEM.PA_NUM_TBL_TYPE()
8937          ,p_b_cost_rate_override_tab   =>   SYSTEM.PA_NUM_TBL_TYPE()
8938          ,p_bill_rate_tab              =>   SYSTEM.PA_NUM_TBL_TYPE()
8939          ,p_bill_rate_override_tab     =>   SYSTEM.PA_NUM_TBL_TYPE()
8940          ,p_line_start_date_tab        =>   SYSTEM.PA_DATE_TBL_TYPE()
8941          ,p_line_end_date_tab          =>   SYSTEM.PA_DATE_TBL_TYPE()
8942          ,p_rollup_required_flag       =>   l_pji_rollup_required
8943 	 ,p_raTxn_rollup_api_call_flag =>   'N' -- Added for bug 5017855
8944          ,x_return_status              =>   x_return_status
8945          ,x_msg_count                  =>   x_msg_count
8946          ,x_msg_data                   =>   x_msg_data);
8947 
8948         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8949 
8950             IF l_debug_mode = 'Y' THEN
8951 
8952                 pa_debug.g_err_stage:='PA_FP_CALC_PLAN_PKG.calculate returned error';
8953                 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8954 
8955             END IF;
8956             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8957 
8958         END IF;
8959 
8960 
8961     ELSE--Calculate Flag is N
8962 
8963         --dbms_output.put_line('in cal<>y');
8964         IF l_debug_mode = 'Y' THEN
8965             pa_debug.g_err_stage:='Calling PA_FP_COPY_FROM_PKG.Copy_Budget_Lines';
8966             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8967         END IF;
8968 
8969         PA_FP_COPY_FROM_PKG.Copy_Budget_Lines(
8970          p_source_plan_version_id   => l_src_budget_version_id
8971         ,p_target_plan_version_id   => l_targ_budget_version_id
8972         ,p_adj_percentage           => l_adj_percent
8973         ,x_return_status            => x_return_status
8974         ,x_msg_count                => x_msg_count
8975         ,x_msg_data                 => x_msg_data);
8976 
8977 
8978 
8979         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8980 
8981             IF l_debug_mode = 'Y' THEN
8982 
8983                 pa_debug.g_err_stage:='Copy_Budget_Lines returned error';
8984                 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8985 
8986             END IF;
8987             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8988 
8989         END IF;
8990 
8991         --Bug 4097749. Update the resource assigments created above with the named_role attribute returned by
8992         --the TA validate API
8993         IF l_debug_mode = 'Y' THEN
8994             pa_debug.g_err_stage:='About to update named role/parent assignment id in pa_resource_assignments';
8995             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8996         END IF;
8997 
8998         --Bug 4215676 . Modified the  update sql for performance issues.
8999         --The parent assignment id should  be NULLED out since (copy resource assignments copies the source
9000         --resource assignment to parent assignment id while copying the source to target)
9001         ---->Copy_Budget_Lines which is called above will consider all the resource assignments with Non Null
9002         ---->parent assignment id as candidates for copy. If parent_assignemt_id is not nulled out
9003         ---->then in future copy task flows the resource assignments which were are copied now will also be considered
9004         ---->as NEW and copy_budget_lines will try to insert them which will violate the unique constraint
9005         ---->on pa_budget_lines
9006         FORALL i IN 1..l_ra_id_tbl.COUNT
9007               UPDATE pa_resource_assignments
9008               SET    named_role = l_named_role_tbl(i),
9009                      parent_assignment_id=NULL
9010               WHERE  parent_assignment_id = l_ra_id_tbl(i)
9011               AND    budget_version_id = l_targ_budget_version_id;
9012 
9013         IF l_debug_mode = 'Y' THEN
9014             pa_debug.g_err_stage:='Done with updating named role/parent assignment id in pa_resource_assignments';
9015             pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
9016         END IF;
9017 
9018 
9019          --Code changes for bug#4200168 starts here.
9020          --for the budget lines that get copied as a result of tasks copying,
9021          -- we need to ensure all the txn currencies are available in pa fp txn ccurrencies.
9022          IF p_src_project_id<>p_target_project_id THEN
9023 
9024             -- Bug 4872216 changes - performance fix to remove full table
9025             -- scan on PA_FP_TXN_CURRENCIES
9026 		   SELECT DISTINCT BL.TXN_CURRENCY_CODE
9027 		   BULK   COLLECT
9028 		   INTO   l_txn_curr_code_tbl
9029 		   FROM   PA_BUDGET_LINES BL
9030 		   WHERE  BL.BUDGET_VERSION_ID = l_targ_budget_version_id
9031 		   AND    NOT EXISTS
9032     			  (SELECT 1
9033 	         	   FROM   PA_FP_TXN_CURRENCIES TC
9034                                  ,PA_PROJ_FP_OPTIONS pfo -- Bug 4872216
9035 			   WHERE  tc.fin_plan_version_id =
9036                                            l_targ_budget_version_id
9037                            AND    pfo.project_id = p_target_project_id --4872216
9038                            AND    pfo.fin_plan_version_id =
9039                                             tc.fin_plan_version_id  --4872216
9040                            AND    pfo.proj_fp_options_id =
9041                                               tc.proj_fp_options_id --4872216
9042                            AND    TC.txn_currency_code = BL.txn_currency_code);
9043 
9044           select proj_fp_options_id, project_id, fin_plan_type_id
9045           INTO l_proj_fp_options_id, l_project_id, l_fin_plan_type_id
9046           from pa_proj_fp_options
9047           WHERE fin_plan_version_id = l_targ_budget_version_id;
9048 
9049           select project_currency_code, projfunc_currency_code
9050           INTO l_pc, l_pfc
9051           from pa_projects_all
9052           WHERE project_id = l_project_id;
9053 
9054           FORALL j IN 1..l_txn_curr_code_tbl.count
9055              INSERT INTO PA_FP_TXN_CURRENCIES
9056                   (
9057                       FP_TXN_CURRENCY_ID,
9058                       PROJ_FP_OPTIONS_ID,
9059                       PROJECT_ID,
9060                       FIN_PLAN_TYPE_ID,
9061                       FIN_PLAN_VERSION_ID,
9062                       TXN_CURRENCY_CODE,
9063                       DEFAULT_REV_CURR_FLAG,
9064                       DEFAULT_COST_CURR_FLAG,
9065                       DEFAULT_ALL_CURR_FLAG,
9066                       PROJECT_CURRENCY_FLAG,
9067                       PROJFUNC_CURRENCY_FLAG,
9068                       CREATION_DATE ,
9069                       CREATED_BY ,
9070                       LAST_UPDATE_LOGIN ,
9071                       LAST_UPDATED_BY ,
9072                       LAST_UPDATE_DATE
9073                   )
9074                   VALUES
9075                   (
9076                       PA_FP_TXN_CURRENCIES_S.NEXTVAL,
9077                       l_proj_fp_options_id ,
9078                       l_project_id,
9079                       l_fin_plan_type_id,
9080                       l_targ_budget_version_id,
9081                       l_txn_curr_code_tbl(j),
9082                       'N',
9083                       'N',
9084                       'N',
9085                       Decode(l_txn_curr_code_tbl(j),l_pc,'Y','N'),
9086                       Decode(l_txn_curr_code_tbl(j),l_pfc,'Y','N'),
9087                       sysdate,
9088                       fnd_global.user_id,
9089                       fnd_global.login_id,
9090                       fnd_global.user_id,
9091                       sysdate);
9092 
9093        END IF; -- End of if p_src_project_id<>p_target_project_id
9094        --Code changes for bug#4200168 ends here.
9095 
9096         --Call the multi currency conversion PKG if required i.e. if pc and pfc should be recalculated
9097         IF l_adj_percent <> 0 THEN
9098             PA_FP_MULTI_CURRENCY_PKG.convert_txn_currency (
9099                       p_budget_version_id   => l_targ_budget_version_id
9100                       ,p_entire_version     => 'Y'
9101                       ,x_return_status      => x_return_status
9102                       ,x_msg_count          => x_msg_count
9103                       ,x_msg_data           => x_msg_data );
9104 
9105             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9106 
9107                 IF l_debug_mode = 'Y' THEN
9108 
9109                     pa_debug.g_err_stage:='convert_txn_currency returned error';
9110                     pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9111 
9112                 END IF;
9113 
9114                 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
9115             END IF;
9116 
9117         END IF;
9118 
9119         --Call the reportiong lines API. This can called unconditionally as the reporting lines should always be
9120         --created for Workplan and Task Assignments versions.
9121 
9122          --Added the if condition for the bug 4200168
9123       IF l_pji_rollup_required = 'Y' THEN
9124 
9125             PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api
9126             ( p_source                  => 'PA_FP_RA_MAP_TMP'
9127              ,p_budget_version_id       => l_targ_budget_version_id
9128              ,x_return_status           => x_return_status
9129              ,x_msg_data                => x_msg_data
9130              ,x_msg_count               => x_msg_count);
9131 
9132           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9133 
9134               IF l_debug_mode = 'Y' THEN
9135                   pa_debug.g_err_stage:='PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api returned error';
9136                   pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9137               END IF;
9138               RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
9139           END IF;
9140 
9141       END IF;
9142 
9143 -- Added for bug 4492493, Updated for bug 5198662
9144         IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
9145             AND PA_TASK_ASSIGNMENT_UTILS.Is_Progress_Rollup_Required(p_target_project_id) = 'Y') OR
9146            (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
9147             AND pa_task_assignment_utils.g_require_progress_rollup = 'Y') THEN
9148 
9149              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
9150                 ( p_calling_context       => 'ASGMT_PLAN_CHANGE'
9151                  ,p_project_id              => p_target_project_id
9152                  ,p_structure_version_id   =>  pa_project_structure_utils.get_latest_wp_version(p_target_project_id)
9153                  ,p_pub_struc_ver_id      => pa_project_structure_utils.get_latest_wp_version(p_target_project_id)
9154                  ,x_return_status                =>     x_return_status
9155                  ,x_msg_data                     =>     x_msg_data
9156                  ,x_msg_count                    =>     x_msg_count    );
9157 
9158               pa_task_assignment_utils.g_require_progress_rollup := 'N';
9159 
9160         END IF;
9161 
9162         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9163             IF l_debug_mode = 'Y' THEN
9164                 pa_debug.g_err_stage:='Called API PA_PROJ_TASK_STRUC_PUB.process_wbs_updates_wrp';
9165                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.copy_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
9166             END IF;
9167 
9168             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9169         END IF;
9170 --End bug 4492493
9171 
9172     END IF;
9173 
9174     -- IPM changes - populate tmp table to use for rollup
9175     -- Bug 5034507: Delete temp table before inserting new records
9176     DELETE pa_resource_asgn_curr_tmp;
9177 
9178     -- For bug 5017855, ensure that the combinations of
9179     -- (resource_assignment_id, txn_currency_code) are distinct.
9180     -- Bug 5042399: Copy Source override rates to the temp table for Target resources.
9181     INSERT INTO pa_resource_asgn_curr_tmp (
9182         RESOURCE_ASSIGNMENT_ID,
9183         TXN_CURRENCY_CODE,
9184         TXN_RAW_COST_RATE_OVERRIDE,
9185         TXN_BURDEN_COST_RATE_OVERRIDE,
9186         TXN_BILL_RATE_OVERRIDE )
9187     SELECT DISTINCT
9188            ra.RESOURCE_ASSIGNMENT_ID,
9189            src_rbc.txn_currency_code,
9190            src_rbc.TXN_RAW_COST_RATE_OVERRIDE,
9191            src_rbc.TXN_BURDEN_COST_RATE_OVERRIDE,
9192            src_rbc.TXN_BILL_RATE_OVERRIDE
9193     FROM   pa_resource_asgn_curr src_rbc,
9194            pa_fp_ra_map_tmp map,
9195            --pa_budget_lines bl
9196            pa_resource_assignments ra
9197     WHERE  ra.budget_version_id =l_targ_budget_version_id
9198 --    AND    src_rbc.budget_version_id = l_src_budget_version_id
9199     AND    map.target_res_assignment_id = ra.resource_assignment_id
9200     AND    src_rbc.resource_assignment_id = map.source_res_assignment_id;
9201 --    AND    src_rbc.txn_currency_code = bl.txn_currency_code;
9202 
9203     -- Bug 5070740: In case Calculate is called, need to call maintain_data
9204     --    API again to rollup amounts; in case Calculate is not called, calling
9205     --    maintain data once in this flow to copy overrides and rollup amounts.
9206     pa_res_asg_currency_pub.maintain_data(
9207          p_fp_cols_rec                  => l_fp_cols_rec,
9208          p_calling_module               => 'UPDATE_PLAN_TRANSACTION',
9209          p_rollup_flag                  => 'Y',
9210          p_version_level_flag           => 'N',
9211          p_called_mode                  => 'SELF_SERVICE',
9212          x_return_status                => x_return_status,
9213          x_msg_count                    => x_msg_count,
9214          x_msg_data                     => x_msg_data
9215          );
9216 
9217        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9218 
9219              IF l_debug_mode = 'Y' THEN
9220                    pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
9221                    print_msg(pa_debug.g_err_stage,l_module_name);
9222              END IF;
9223              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9224        END IF;
9225 
9226     IF l_debug_mode = 'Y' THEN
9227         pa_debug.g_err_stage:='Exiting copy_planning_transactions';
9228         print_msg(pa_debug.g_err_stage,l_module_name);
9229     -- reset curr function
9230        pa_debug.reset_curr_function;
9231     END IF;
9232 EXCEPTION
9233 
9234    WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
9235        l_msg_count := FND_MSG_PUB.count_msg;
9236        IF l_msg_count = 1 THEN
9237            PA_INTERFACE_UTILS_PUB.get_messages
9238                  (p_encoded         => FND_API.G_TRUE
9239                   ,p_msg_index      => 1
9240                   ,p_msg_count      => l_msg_count
9241                   ,p_msg_data       => l_msg_data
9242                   ,p_data           => l_data
9243                   ,p_msg_index_out  => l_msg_index_out);
9244 
9245            x_msg_data := l_data;
9246            x_msg_count := l_msg_count;
9247        ELSE
9248            x_msg_count := l_msg_count;
9249        END IF;
9250 
9251        x_return_status := FND_API.G_RET_STS_ERROR;
9252        ROLLBACK TO copy_plan_txn;
9253 
9254        IF l_debug_mode = 'Y' THEN
9255            pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
9256            pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9257        -- reset curr function
9258           pa_debug.reset_curr_function;
9259        END IF;
9260        RETURN;
9261    WHEN Others THEN
9262        ROLLBACK TO copy_plan_txn;
9263        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9264        x_msg_count     := 1;
9265        x_msg_data      := SQLERRM;
9266 
9267        FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'pa_fp_planning_transaction_pub'
9268                                ,p_procedure_name  => 'copy_planning_transactions');
9269 
9270        IF l_debug_mode = 'Y' THEN
9271            pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
9272            pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9273            pa_debug.Reset_Curr_Function();
9274        END IF;
9275        RAISE;
9276 END copy_planning_transactions;
9277 
9278 
9279 
9280 /*=====================================================================
9281 Procedure Name:      delete_planning_transactions
9282 Purpose:             This procedure should be called to delete planning
9283                      transactions
9284                      Valid values for p_context are 'BUDGET','FORECAST',
9285                      'WORKPLAN' and 'TASK_ASSIGNMENT'
9286 
9287                      Valid values for p_task_or_res are 'TASKS' and
9288                      'ASSIGNMENT'
9289 
9290                      In the context of 'TASK_ASSIGNMENT' the fields
9291                      task_number and task_name are required in
9292                      p_task_rec_tbl
9293 
9294                      If p_task_or_res is TASKS,
9295                      p_element_version_id_tbl,p_task_number_tbl,
9296                      p_task_name_tbl are used.
9297 
9298                      If p_task_or_res is ASSIGNMENT,
9299                      p_resource_assignment_tbl is used
9300 
9301                p_calling_module can be NULL or PROCESS_RES_CHG_DERV_CALC_PRMS. If passed as Y
9302                resource assignments will be  deleted otherwise they
9303                      will not be deleted.(Please note that budget lines will be deleted
9304                      always irrespective of the value for this parameter).
9305                      Please note that this parameter cannot be PROCESS_RES_CHG_DERV_CALC_PRMS
9306                when p_task_or_res is passed as TASKS
9307                  Whenever p_calling_module is passed as PROCESS_RES_CHG_DERV_CALC_PRMS,
9308                the parameters p_task_id_tbl,p_resource_class_code_tbl
9309                p_rbs_element_id_tbl and     p_rate_based_flag_tbl should ALSO be
9310                passed. These tbls must be equal in length to p_resource_assignment_tbl
9311                      and should contain the task id, rbs element id and rate based flag
9312                      for the resource assignment
9313 
9314   Bug - 3719918. New param p_currency_code_tbl is added below
9315   When p_context - Budget/Forecast and p_task_or_res is Assignment then only the bugdet lines
9316   Corresponding to currency code passed will be deleted. After deleting of the budget lines
9317   the corresponding RA will only we deleted if the budget line count is 0 from the RA.
9318   p_calling_module will be'EDIT_PLAN' when called from edit plan pages.
9319 
9320 =======================================================================*/
9321 
9322 PROCEDURE delete_planning_transactions
9323 (
9324        p_context                      IN       VARCHAR2
9325       ,p_calling_context              IN       VARCHAR2 DEFAULT NULL    -- Added for Bug 6856934
9326       ,p_task_or_res                  IN       VARCHAR2 DEFAULT 'TASKS'
9327       ,p_element_version_id_tbl       IN       SYSTEM.PA_NUM_TBL_TYPE          DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
9328       ,p_task_number_tbl              IN       SYSTEM.PA_VARCHAR2_240_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
9329       ,p_task_name_tbl                IN       SYSTEM.PA_VARCHAR2_240_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
9330       ,p_resource_assignment_tbl      IN       SYSTEM.PA_NUM_TBL_TYPE          DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
9331       --Introduced for bug 3589130. If this parameter is passed as Y then an error will be thrown
9332       --When its required to delete a resource assignment containing budget lines. This parameter
9333       --will be considered only for BUDGET and FORECAST context
9334       ,p_validate_delete_flag         IN       VARCHAR2                        DEFAULT 'N'
9335       -- This param will be used for B/F Context. Bug - 3719918
9336       ,p_currency_code_tbl            IN       SYSTEM.PA_VARCHAR2_15_TBL_TYPE  DEFAULT SYSTEM.PA_VARCHAR2_15_TBL_TYPE()
9337       ,p_calling_module               IN       VARCHAR2                        DEFAULT NULL
9338       ,p_task_id_tbl                  IN       SYSTEM.PA_NUM_TBL_TYPE          DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
9339       ,p_rbs_element_id_tbl           IN       SYSTEM.PA_NUM_TBL_TYPE          DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
9340       ,p_rate_based_flag_tbl          IN       SYSTEM.PA_VARCHAR2_1_TBL_TYPE   DEFAULT SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
9341       ,p_resource_class_code_tbl      IN       SYSTEM.PA_VARCHAR2_30_TBL_TYPE  DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
9342       --For Bug 3937716. Calls to PJI and budget version rollup APIs will be skipped if p_rollup_required_flag is N.
9343       ,p_rollup_required_flag         IN       VARCHAR2                        DEFAULT 'Y'
9344       ,p_pji_rollup_required          IN       VARCHAR2                        DEFAULT 'Y' /* Bug 4200168 */
9345       ,x_return_status                OUT      NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9346       ,x_msg_count                    OUT      NOCOPY NUMBER --File.Sql.39 bug 4440895
9347       ,x_msg_data                     OUT      NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9348 )
9349 IS
9350     --Start of variables used for debugging
9351     l_return_status                 VARCHAR2(1);
9352     l_msg_count                     NUMBER := 0;
9353     l_msg_data                      VARCHAR2(2000);
9354     l_data                          VARCHAR2(2000);
9355     l_msg_index_out                 NUMBER;
9356     l_debug_mode                    VARCHAR2(30);
9357     --End of variables used for debugging
9358 
9359     l_module_name                   VARCHAR2(100):='PAFPPTPB.delete_planning_transactions';
9360     l_delete_task_flag_tbl          SYSTEM.PA_VARCHAR2_1_TBL_TYPE      := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
9361     l_delete_assmt_flag_tbl         SYSTEM.PA_VARCHAR2_1_TBL_TYPE      := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
9362     l_wp_version_flag               VARCHAR2(1);
9363     l_ta_display_flag               VARCHAR2(1);
9364 
9365     l_period_name_tbl               SYSTEM.pa_varchar2_30_tbl_type;
9366     l_start_date_tbl                SYSTEM.pa_date_tbl_type;
9367     l_end_date_tbl                  SYSTEM.pa_date_tbl_type;
9368     l_txn_currency_code_tbl         SYSTEM.pa_varchar2_15_tbl_type;
9369     l_txn_raw_cost_tbl              SYSTEM.pa_num_tbl_type;
9370     l_txn_burdened_cost_tbl         SYSTEM.pa_num_tbl_type;
9371     l_txn_revenue_tbl               SYSTEM.pa_num_tbl_type;
9372     l_project_raw_cost_tbl          SYSTEM.pa_num_tbl_type;
9373     l_project_burdened_cost_tbl     SYSTEM.pa_num_tbl_type;
9374     l_project_revenue_tbl           SYSTEM.pa_num_tbl_type;
9375     l_raw_cost_tbl                  SYSTEM.pa_num_tbl_type;
9376     l_burdened_cost_tbl             SYSTEM.pa_num_tbl_type;
9377     l_revenue_tbl                   SYSTEM.pa_num_tbl_type;
9378     l_cost_rejection_code_tbl       SYSTEM.pa_varchar2_30_tbl_type;
9379     l_revenue_rejection_code_tbl    SYSTEM.pa_varchar2_30_tbl_type;
9380     l_burden_rejection_code_tbl     SYSTEM.pa_varchar2_30_tbl_type;
9381     l_other_rejection_code          SYSTEM.pa_varchar2_30_tbl_type;
9382     l_pc_cur_conv_rej_code_tbl      SYSTEM.pa_varchar2_30_tbl_type;
9383     l_pfc_cur_conv_rej_code_tbl     SYSTEM.pa_varchar2_30_tbl_type;
9384     l_resource_assignment_id_tbl    SYSTEM.pa_num_tbl_type;
9385     l_quantity_tbl                  SYSTEM.pa_num_tbl_type;
9386     l_task_id_tbl                   SYSTEM.pa_num_tbl_type:=SYSTEM.pa_num_tbl_type();
9387     l_rbs_element_id_tbl            SYSTEM.pa_num_tbl_type:=SYSTEM.pa_num_tbl_type();
9388     l_res_class_code_tbl            SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
9389     l_rate_based_flag_tbl           SYSTEM.pa_varchar2_1_tbl_type:=SYSTEM.pa_varchar2_1_tbl_type();
9390     l_task_id_in_pra_tbl            SYSTEM.pa_num_tbl_type;
9391     l_rbs_element_id_in_pra_tbl     SYSTEM.pa_num_tbl_type;
9392     l_res_class_code_in_pra_tbl     SYSTEM.pa_varchar2_30_tbl_type;
9393     l_rate_based_flag_in_pra_tbl    SYSTEM.pa_varchar2_1_tbl_type;
9394     l_ra_id_in_pra_tbl              SYSTEM.pa_num_tbl_type;
9395     --Bug 4951422
9396     l_task_assmt_ids_tbl            SYSTEM.pa_num_tbl_type;
9397 
9398     l_counter                       NUMBER;
9399     l_ra_index                      NUMBER;
9400     l_budget_version_id             pa_budget_versions.budget_version_id%TYPE;
9401     l_ci_id                         pa_budget_versions.ci_id%TYPE;
9402     l_exists                        VARCHAR2(1);
9403     SKIP_LOOP                       EXCEPTION;
9404     i                               NUMBER;
9405     l_cntr                          NUMBER;
9406 
9407     l_currency_code_tbl             SYSTEM.PA_VARCHAR2_15_TBL_TYPE      := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
9408     l_task_id                       PA_RESOURCE_ASSIGNMENTS.TASK_ID%TYPE;
9409     l_rbs_element_id                PA_RESOURCE_ASSIGNMENTS.RBS_ELEMENT_ID%TYPE;
9410     l_res_class_code                PA_RESOURCE_ASSIGNMENTS.RESOURCE_CLASS_CODE%TYPE;
9411     l_rate_based_flag               PA_RESOURCE_ASSIGNMENTS.RATE_BASED_FLAG%TYPE;
9412     l_mode                          varchar2(12) := null;   --Bug 4160258
9413 
9414 
9415     l_project_id                    pa_projects_all.project_id%TYPE;  --Bug 4218331
9416     l_project_currency_code         VARCHAR2(30);
9417     l_fp_cols_rec                   pa_fp_gen_amount_utils.fp_cols; -- IPM
9418 
9419 	l_cbs_element_id_tbl  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type() ; --bug#16688443
9420 
9421 BEGIN
9422 
9423     delete pa_resource_asgn_curr_tmp;
9424     x_msg_count := 0;
9425     x_return_status := FND_API.G_RET_STS_SUCCESS;
9426 
9427     pa_task_assignment_utils.g_require_progress_rollup := 'N';
9428 
9429     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
9430     l_debug_mode := NVL(l_debug_mode, 'N');
9431 
9432     -- Set curr function
9433     IF l_debug_mode = 'Y' THEN
9434     	pa_debug.set_curr_function(
9435                 p_function   =>'PA_FP_PLAN_TXN_PUB.delete_planning_transactions'
9436                ,p_debug_mode => l_debug_mode );
9437    END IF;
9438 
9439    IF l_debug_mode = 'Y' THEN
9440         /** printing all in params */
9441         pa_debug.g_err_stage := 'p_context=>'|| p_context||']p_task_or_res =>'||p_task_or_res||']';
9442         pa_debug.g_err_stage := pa_debug.g_err_stage||'p_validate_delete_flag=>'||p_validate_delete_flag||']';
9443         pa_debug.g_err_stage := pa_debug.g_err_stage||'p_calling_module=>'||p_calling_module||']';
9444         pa_debug.g_err_stage := pa_debug.g_err_stage||'RollupReqFlg=>'||p_rollup_required_flag||']';
9445         pa_debug.g_err_stage := pa_debug.g_err_stage||'PJiRollupFlg=>'||p_pji_rollup_required||']';
9446         pa_debug.g_err_stage := pa_debug.g_err_stage||'ElemVerTbCt['||p_element_version_id_tbl.count||']';
9447         pa_debug.g_err_stage := pa_debug.g_err_stage||'RaIdCt['||p_resource_assignment_tbl.count||']';
9448         pa_debug.g_err_stage := pa_debug.g_err_stage||'TaskIdCt['||p_task_id_tbl.count||']';
9449         pa_debug.g_err_stage := pa_debug.g_err_stage||'rbsElmCt['||p_rbs_element_id_tbl.count||']';
9450         print_msg(pa_debug.g_err_stage,l_module_name);
9451    End If;
9452    -------------------------------------------------------------------------------------------
9453    -- Extending all table lengths to the permissible values they would take.
9454    -------------------------------------------------------------------------------------------
9455      IF l_debug_mode = 'Y' THEN
9456          pa_debug.g_err_stage:='Extending all table lengths to the permissible values they would take';
9457 	 print_msg(pa_debug.g_err_stage,l_module_name);
9458      END IF;
9459 
9460      IF l_debug_mode = 'Y' THEN
9461          pa_debug.g_err_stage:='Extending all table lengths to the permissible values they would take';
9462          print_msg(pa_debug.g_err_stage,l_module_name);
9463      END IF;
9464 
9465      IF p_element_version_id_tbl.COUNT > 0 THEN
9466          l_delete_task_flag_tbl.extend(p_element_version_id_tbl.LAST);
9467      END IF;
9468 
9469      IF p_resource_assignment_tbl.COUNT > 0 THEN
9470          l_delete_assmt_flag_tbl.extend(p_resource_assignment_tbl.LAST);
9471      END IF;
9472 
9473 
9474 
9475 
9476 
9477     ----------------------------------------------------
9478     -- Validating input parameters
9479     ----------------------------------------------------
9480     IF l_debug_mode = 'Y' THEN
9481         pa_debug.g_err_stage:='Validating input parameters';
9482 	print_msg(pa_debug.g_err_stage,l_module_name);
9483     END IF;
9484 
9485     --Check for mandatory parameters
9486     IF p_context IS NULL OR
9487        p_task_or_res IS NULL THEN
9488 
9489         IF l_debug_mode = 'Y' THEN
9490             pa_debug.g_err_stage:='p_context Is'||p_context;
9491             pa_debug.g_err_stage:=pa_debug.g_err_stage||': p_task_or_res Is'||p_task_or_res;
9492 	    print_msg(pa_debug.g_err_stage,l_module_name);
9493         END IF;
9494 
9495         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9496                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
9497         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9498     END IF;
9499 
9500     IF  p_task_or_res = 'TASKS' AND p_calling_module='PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
9501         IF l_debug_mode = 'Y' THEN
9502             pa_debug.g_err_stage:='calling module  is PROCESS_RES_CHG_DERV_CALC_PRMS when p_task_or_res  is TASKS';
9503 	    print_msg(pa_debug.g_err_stage,l_module_name);
9504         END IF;
9505         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9506                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED',
9507                     p_token1        => 'PROCEDURENAME',
9508                     p_value1        => 'PAFPPTPB.Delete_planning_transactions');
9509         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9510 
9511     END IF;
9512     -- Bug 3546208
9513     IF   ( p_task_or_res = 'TASKS'
9514        AND p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,
9515                          PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
9516        IF l_debug_mode = 'Y' THEN
9517           pa_debug.g_err_stage:='P_task_or_res is Task for B/F Context';
9518 	  print_msg(pa_debug.g_err_stage,l_module_name);
9519        END IF;
9520        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9521                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
9522                             p_token1         => 'PROCEDURENAME',
9523                             p_value1         => 'PAFPPTPB.Delete_planning_transactions',
9524                             p_token2         => 'STAGE',
9525                             p_value2         => 'Invalid Data : B/F - TASK');
9526        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9527     END IF;
9528 
9529     IF p_calling_module='PROCESS_RES_CHG_DERV_CALC_PRMS' AND
9530      (p_task_id_tbl.COUNT <> p_resource_assignment_tbl.COUNT OR
9531       p_rbs_element_id_tbl.COUNT <> p_resource_assignment_tbl.COUNT OR
9532       p_rate_based_flag_tbl.COUNT <> p_resource_assignment_tbl.COUNT OR
9533         p_resource_class_code_tbl.COUNT <> p_resource_assignment_tbl.COUNT  ) THEN
9534 
9535         IF l_debug_mode = 'Y' THEN
9536             pa_debug.g_err_stage:='p_resource_assignment_tbl.COUNT  IS '||p_resource_assignment_tbl.COUNT ;
9537             print_msg(pa_debug.g_err_stage,l_module_name);
9538 
9539             pa_debug.g_err_stage:='p_task_id_tbl.COUNT IS '||p_task_id_tbl.COUNT ;
9540             print_msg(pa_debug.g_err_stage,l_module_name);
9541 
9542             pa_debug.g_err_stage:='p_rbs_element_id_tbl.COUNT IS '||p_rbs_element_id_tbl.COUNT ;
9543             print_msg(pa_debug.g_err_stage,l_module_name);
9544 
9545             pa_debug.g_err_stage:='p_rate_based_flag_tbl.COUNT IS '||p_rate_based_flag_tbl.COUNT ;
9546             print_msg(pa_debug.g_err_stage,l_module_name);
9547 
9548             pa_debug.g_err_stage:='p_resource_class_code_tbl.COUNT IS '||p_resource_class_code_tbl.COUNT ;
9549             print_msg(pa_debug.g_err_stage,l_module_name);
9550 
9551             pa_debug.g_err_stage:='p_resource_assignment_tbl.COUNT IS '||p_resource_assignment_tbl.COUNT ;
9552             print_msg(pa_debug.g_err_stage,l_module_name);
9553 
9554         END IF;
9555         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9556                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED',
9557                     p_token1        => 'PROCEDURENAME',
9558                     p_value1        => 'PAFPPTPB.Delete_planning_transactions');
9559         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9560 
9561     END IF;
9562 
9563 
9564     --Throw an error if the input tables do not have same no of elements
9565     IF  (p_task_or_res = 'TASKS' AND
9566          p_element_version_id_tbl.count =0) OR
9567         (p_task_or_res = 'ASSIGNMENT' AND
9568          p_resource_assignment_tbl.count =0) THEN
9569 
9570         IF l_debug_mode = 'Y' THEN
9571             pa_debug.g_err_stage:='The input table is empty. returning';
9572             print_msg(pa_debug.g_err_stage,l_module_name);
9573             pa_debug.reset_curr_function;
9574 	END IF;
9575         RETURN;
9576     END IF;
9577 
9578     IF p_calling_module='PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
9579      l_ra_id_in_pra_tbl     :=p_resource_assignment_tbl;
9580        l_task_id_in_pra_tbl     :=p_task_id_tbl;
9581          l_rbs_element_id_in_pra_tbl    :=p_rbs_element_id_tbl;
9582        l_res_class_code_in_pra_tbl  :=p_resource_class_code_tbl;
9583        l_rate_based_flag_in_pra_tbl :=p_rate_based_flag_tbl;
9584     END IF;
9585 
9586     --Bug 4951422. Initialize these tbls to avoid "ORA-06531: Reference to uninitialized collection" error
9587     --when the element version id tbl passed do not have corresponding resource assignment ids
9588     l_resource_assignment_id_tbl := SYSTEM.pa_num_tbl_type();
9589     l_ra_id_in_pra_tbl := SYSTEM.pa_num_tbl_type();
9590 
9591     /** when the context is Task assignment Call the Validation API
9592     * Modified Delete logic for Bug 3808720. Since Validate Delete Assignments API
9593     * needs to be called for WORKPLAN context as well. Merginng Delete Logic for
9594     * G_CALLING_MODULE_TASK and G_CALLING_MODULE_WORKPLAN below.
9595     */
9596     IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR
9597         p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN --{
9598 
9599             IF l_debug_mode = 'Y' THEN
9600                 pa_debug.g_err_stage:='The calling context is task assignment. Calling the validation API';
9601                 print_msg(pa_debug.g_err_stage,l_module_name);
9602             END IF;
9603 
9604           PA_TASK_ASSIGNMENT_UTILS.VALIDATE_DELETE_ASSIGNMENT
9605              ( p_context                      => p_context
9606               ,p_calling_context              => p_calling_context    -- Added for Bug 6856934
9607               ,p_task_or_res                  => p_task_or_res
9608               ,p_elem_ver_id_tbl              => p_element_version_id_tbl
9609               ,p_task_name_tbl                => p_task_name_tbl
9610               ,p_task_number_tbl              => p_task_number_tbl
9611               ,p_resource_assignment_id_tbl   => p_resource_assignment_tbl
9612               ,x_delete_task_flag_tbl         => l_delete_task_flag_tbl
9613               ,x_delete_asgmt_flag_tbl        => l_delete_assmt_flag_tbl
9614               ,x_task_assmt_ids_tbl           => l_task_assmt_ids_tbl --Bug 4951422
9615               ,x_return_status                => x_return_status);
9616 
9617              IF l_debug_mode = 'Y' THEN
9618                 pa_debug.g_err_stage:= 'After calling Validate OutParms: l_delete_task_flag_tblCount[';
9619                 pa_debug.g_err_stage:= pa_debug.g_err_stage||l_delete_task_flag_tbl.count||']';
9620                 pa_debug.g_err_stage:= pa_debug.g_err_stage||'l_delete_assmt_flag_tblcount[';
9621                 pa_debug.g_err_stage:= pa_debug.g_err_stage||l_delete_assmt_flag_tbl.count||']';
9622                 pa_debug.g_err_stage:= pa_debug.g_err_stage||'l_task_assmt_ids_tblCount[';
9623                 pa_debug.g_err_stage:= pa_debug.g_err_stage||l_task_assmt_ids_tbl.count||']';
9624                 pa_debug.g_err_stage:= pa_debug.g_err_stage||'RetSts['||x_return_status||']';
9625                 print_msg(pa_debug.g_err_stage,l_module_name);
9626             End If;
9627 
9628             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9629                 IF l_debug_mode = 'Y' THEN
9630                     pa_debug.g_err_stage:='The calling context is task assignment. Calling the validation API';
9631                     print_msg(pa_debug.g_err_stage,l_module_name);
9632                 END IF;
9633                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9634 	    End If;
9635 	END IF; --}
9636 
9637     /* Bug fix:5349668: Get project,budget,ciid details upfront based on
9638      * in put params, If budget version is null then just return as there
9639      * nothing to delete any budget lines or resource assignments.
9640      * Note: executing this sql at many places to get budget version is failing with
9641      * ORA-No data found error
9642      */ --{
9643     IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR
9644        p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) THEN --{
9645 
9646       If p_task_or_res = 'TASKS'   --- bug 6076066: added the checking of p_task_res to the existing IF loop
9647         and p_element_version_id_tbl.count > 0
9648 	and NVL(p_element_version_id_tbl(1),0) <> 0
9649 	and p_element_version_id_tbl(1) <> fnd_api.g_miss_num then
9650 
9651 	/* Bug fix: LOOP is required to get the budget version id. when multiple tasks are deleted
9652 	* some of the task may not have assignments, but some may have assignments
9653 	* without loop, the process skips all the records
9654 	*/
9655 
9656 	FOR i IN p_element_version_id_tbl.FIRST .. p_element_version_id_tbl.LAST LOOP
9657 	    l_cntr := i;
9658      	    BEGIN
9659 		IF l_debug_mode = 'Y' THEN
9660                     pa_debug.g_err_stage:=l_cntr||'..Getting budget version id from p_element_version_id_tbl';
9661 		    pa_debug.g_err_stage:=pa_debug.g_err_stage||'['||p_element_version_id_tbl(l_cntr)||']';
9662                     print_msg(pa_debug.g_err_stage,l_module_name);
9663                 END IF;
9664 		SELECT pbv.project_id
9665 			,pbv.budget_version_id
9666 			,pbv.ci_id
9667 		INTO   l_project_id
9668 			,l_budget_version_id
9669 			,l_ci_id
9670 		FROM   pa_resource_assignments pra
9671 			,pa_budget_Versions pbv
9672 		WHERE  pbv.budget_version_id=pra.budget_version_id
9673 		AND    pbv.wp_version_flag='Y'
9674 		AND    pra.wbs_element_version_id=p_element_version_id_tbl(l_cntr)
9675 		AND    rownum < 2 ;
9676 
9677 		EXIT;
9678 	    EXCEPTION
9679 		WHEN NO_DATA_FOUND THEN
9680 		IF l_debug_mode = 'Y' THEN
9681 		    pa_debug.g_err_stage:='No Data Found: No budget Exists for this Task Element Version Ids';
9682 		    print_msg(pa_debug.g_err_stage,l_module_name);
9683 		END IF;
9684 		NULL;
9685 	    END;
9686 	END LOOP;
9687 
9688 	/* check if any planning resource exists for l_task_assmt_ids_tbl passed from
9689          * validate_delete_assignment api.
9690 	 */
9691 	IF l_budget_version_id is NULL and
9692            l_task_assmt_ids_tbl is NOT NULL and -- Bug 5408333 fix - ORA-06531: Reference to uninitialized collection
9693            l_task_assmt_ids_tbl.COUNT > 0 Then
9694             BEGIN
9695                 IF l_debug_mode = 'Y' THEN
9696                     pa_debug.g_err_stage:='2..Getting budget version id from l_task_assmt_ids_tbl';
9697                     pa_debug.g_err_stage:=pa_debug.g_err_stage||'['||l_task_assmt_ids_tbl(1)||']';
9698                     print_msg(pa_debug.g_err_stage,l_module_name);
9699                 END IF;
9700                 SELECT pbv.project_id
9701                         ,pbv.budget_version_id
9702                         ,pbv.ci_id
9703                 INTO   l_project_id
9704                         ,l_budget_version_id
9705                         ,l_ci_id
9706                 FROM   pa_resource_assignments pra
9707                         ,pa_budget_Versions pbv
9708                 WHERE  pbv.budget_version_id=pra.budget_version_id
9709                 AND    pra.resource_assignment_id =l_task_assmt_ids_tbl(1);
9710              EXCEPTION
9711                 WHEN NO_DATA_FOUND THEN
9712                 IF l_debug_mode = 'Y' THEN
9713                     pa_debug.g_err_stage:='No Data Found: No budget Exists for this Task Assignment Ids';
9714                     print_msg(pa_debug.g_err_stage,l_module_name);
9715                 END IF;
9716                 NULL;
9717             END;
9718 
9719 	End If;
9720      END IF; --}
9721     END IF; -- Bug 5408333 fix - To handle FINPLAN case in which the above
9722             --                   2 SQL statements will not populate l_budget_version_id
9723 
9724     IF  l_budget_version_id is  NULL -- Bug 5408333
9725         and p_resource_assignment_tbl.COUNT > 0
9726 	and NVL(p_resource_assignment_tbl(1),0) <> 0
9727 	and p_resource_assignment_tbl(1) <> fnd_api.g_miss_num Then
9728 
9729         BEGIN
9730 
9731 		IF l_debug_mode = 'Y' THEN
9732                     pa_debug.g_err_stage:='2..Getting budget version id from p_resource_assignment_tbl';
9733                     pa_debug.g_err_stage:=pa_debug.g_err_stage||'['||p_resource_assignment_tbl(1)||']';
9734                     print_msg(pa_debug.g_err_stage,l_module_name);
9735                 END IF;
9736                 SELECT pbv.project_id
9737                         ,pbv.budget_version_id
9738                         ,pbv.ci_id
9739                 INTO   l_project_id
9740                         ,l_budget_version_id
9741                         ,l_ci_id
9742                 FROM   pa_resource_assignments pra
9743                         ,pa_budget_Versions pbv
9744                 WHERE  pbv.budget_version_id=pra.budget_version_id
9745                 AND    pra.resource_assignment_id =p_resource_assignment_tbl(1);
9746         EXCEPTION
9747                 WHEN NO_DATA_FOUND THEN
9748                 IF l_debug_mode = 'Y' THEN
9749                     pa_debug.g_err_stage:='No Data Found: No budget Exists for this resource Assignment Ids';
9750                     print_msg(pa_debug.g_err_stage,l_module_name);
9751                 END IF;
9752                 NULL;
9753         END;
9754 
9755     END IF; --}
9756 
9757     IF l_debug_mode = 'Y' THEN
9758             pa_debug.g_err_stage:='ProjId['||l_project_id||']BudgetVers['||l_budget_version_id||']Ciid['||l_ci_id||']';
9759             print_msg(pa_debug.g_err_stage,l_module_name);
9760     END IF;
9761 
9762     If l_budget_version_id is NULL Then
9763     		IF l_debug_mode = 'Y' THEN
9764         		pa_debug.g_err_stage:='Exiting delete_planning_transactions as No budget version exists';
9765         		print_msg(pa_debug.g_err_stage,l_module_name);
9766         		pa_debug.reset_curr_function;
9767     		END IF;
9768 		RETURN;
9769     End If;
9770     /* End of Bug fix:5349668: */
9771 
9772     IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR
9773 	p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
9774 
9775             IF p_task_or_res = 'TASKS' THEN
9776 
9777                 IF l_delete_task_flag_tbl.count=0 THEN
9778                     IF l_debug_mode = 'Y' THEN
9779                         pa_debug.g_err_stage:='No elements in the l_delete_task_flag_tbl';
9780                         print_msg(pa_debug.g_err_stage,l_module_name);
9781                         pa_debug.reset_curr_function;
9782 		    END IF;
9783                     RETURN;
9784                 END IF;
9785 
9786                 IF l_delete_task_flag_tbl.count<>p_element_version_id_tbl.count THEN
9787                     IF l_debug_mode = 'Y' THEN
9788                         pa_debug.g_err_stage:='Num elements in l_delete_task_flag_tbl, p_element_version_id_tbl dont match';
9789                        print_msg(pa_debug.g_err_stage,l_module_name);
9790                     END IF;
9791                     PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9792                                           p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
9793                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9794                 END IF;
9795 
9796                 --Bug 4951422. Validate_Delete_Assignment returns the correct resource assignments that should be deleted.
9797 		--Note:
9798                 --that wbs_elememnt_version_id will be populated only for Workplan versions and hence all the checks done in
9799                 --the commented SQL are already done in that API
9800 		  IF l_task_assmt_ids_tbl.COUNT > 0 Then --{
9801 		  IF l_debug_mode = 'Y' THEN
9802                      pa_debug.g_err_stage:='Deleting all budget lines based on l_task_assmt_ids_tbl';
9803                      print_msg(pa_debug.g_err_stage,l_module_name);
9804                   END IF;
9805 		  FORALL i IN 1..l_task_assmt_ids_tbl.COUNT
9806                   DELETE
9807                   FROM   pa_budget_lines pbl
9808                   WHERE  pbl.resource_assignment_id=l_task_assmt_ids_tbl(i)
9809                     RETURNING
9810                     pbl.period_name,
9811                     pbl.start_date,
9812                     pbl.end_date,
9813                     pbl.txn_currency_code,
9814                     -pbl.txn_raw_cost,
9815                     -pbl.txn_burdened_cost,
9816                     -pbl.txn_revenue,
9817                     -pbl.project_raw_cost,
9818                     -pbl.project_burdened_cost,
9819                     -pbl.project_revenue,
9820                     -pbl.raw_cost,
9821                     -pbl.burdened_cost,
9822                     -pbl.revenue,
9823                     -pbl.quantity,
9824                     pbl.cost_rejection_code    ,
9825                     pbl.revenue_rejection_code ,
9826                     pbl.burden_rejection_code  ,
9827                     pbl.other_rejection_code   ,
9828                     pbl.pc_cur_conv_rejection_code,
9829                     pbl.pfc_cur_conv_rejection_code,
9830                     pbl.resource_assignment_id
9831                     BULK COLLECT INTO
9832                     l_period_name_tbl,
9833                     l_start_date_tbl,
9834                     l_end_date_tbl,
9835                     l_txn_currency_code_tbl,
9836                     l_txn_raw_cost_tbl,
9837                     l_txn_burdened_cost_tbl,
9838                     l_txn_revenue_tbl,
9839                     l_project_raw_cost_tbl,
9840                     l_project_burdened_cost_tbl,
9841                     l_project_revenue_tbl,
9842                     l_raw_cost_tbl,
9843                     l_burdened_cost_tbl,
9844                     l_revenue_tbl,
9845                     l_quantity_tbl,
9846                     l_cost_rejection_code_tbl,
9847                     l_revenue_rejection_code_tbl,
9848                     l_burden_rejection_code_tbl,
9849                     l_other_rejection_code,
9850                     l_pc_cur_conv_rej_code_tbl,
9851                     l_pfc_cur_conv_rej_code_tbl,
9852                     l_resource_assignment_id_tbl;
9853 
9854                 IF l_debug_mode = 'Y' THEN
9855                     pa_debug.g_err_stage:='Deleting all resource assignments for the tasks for which the fla is passed as Y';
9856                     print_msg(pa_debug.g_err_stage,l_module_name);
9857                 END IF;
9858 
9859                 -- IPM changes - populate tmp table to use for deletion later
9860                 IF l_resource_assignment_id_tbl.COUNT > 0 THEN
9861                    FORALL i IN l_resource_assignment_id_tbl.first ..
9862                                l_resource_assignment_id_tbl.last
9863                       INSERT INTO pa_resource_asgn_curr_tmp
9864                         (RA_TXN_ID
9865                         ,RESOURCE_ASSIGNMENT_ID
9866                         ,TXN_CURRENCY_CODE
9867                         ,DELETE_FLAG
9868                         )
9869                         SELECT pa_resource_asgn_curr_s.nextval
9870                               ,l_resource_assignment_id_tbl(i)
9871                               ,l_txn_currency_code_tbl(i)
9872                               ,'Y'
9873                           FROM DUAL;
9874 						  /*Start bug#16688443 */
9875 						  l_cbs_element_id_tbl  := SYSTEM.pa_num_tbl_type();
9876 						  l_cbs_element_id_tbl.extend(l_resource_assignment_id_tbl.last);
9877 				FOR i IN l_resource_assignment_id_tbl.first..l_resource_assignment_id_tbl.last LOOP
9878 					select cbs_element_id into l_cbs_element_id_tbl(i) from pa_resource_assignments where resource_assignment_id = l_resource_assignment_id_tbl (i);
9879 				END LOOP; /*End bug#16688443 */
9880 
9881                 END IF;
9882 
9883                 --Bug 4951422. Validate_Delete_Assignment returns the correct resource assignments that should be deleted.
9884 		--Note:
9885                 --that wbs_elememnt_version_id will be populated only for Workplan versions and hence all the checks done in
9886                 --the commented SQL are already done in that API
9887 		FORALL i IN 1..l_task_assmt_ids_tbl.COUNT
9888                   DELETE
9889                   FROM   pa_resource_assignments pra
9890                   WHERE  resource_assignment_id=l_task_assmt_ids_tbl(i)
9891                     RETURNING
9892                       pra.resource_assignment_id,
9893                       pra.task_id,
9894                       pra.rbs_element_id,
9895                       pra.resource_class_code,
9896                       pra.rate_based_flag
9897                     BULK COLLECT INTO
9898                       l_ra_id_in_pra_tbl,
9899                       l_task_id_in_pra_tbl,
9900                       l_rbs_element_id_in_pra_tbl,
9901                       l_res_class_code_in_pra_tbl,
9902                       l_rate_based_flag_in_pra_tbl;
9903 
9904                  -- IPM changes - populate tmp table to use for deletion later
9905                  -- hr_utility.trace('RM DEL4');
9906                  IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
9907                     FORALL i IN l_ra_id_in_pra_tbl.first ..
9908                                 l_ra_id_in_pra_tbl.last
9909                        INSERT INTO pa_resource_asgn_curr_tmp
9910                          (RA_TXN_ID
9911                          ,RESOURCE_ASSIGNMENT_ID
9912                          -- ,TXN_CURRENCY_CODE
9913                          ,DELETE_FLAG
9914                          )
9915                          SELECT pa_resource_asgn_curr_s.nextval
9916                                ,l_ra_id_in_pra_tbl(i)
9917                                -- ,l_txn_currency_code_tbl(i)
9918                                ,'Y'
9919                            FROM DUAL;
9920                  END IF;
9921 		End if; --}
9922 
9923             ELSIF p_task_or_res = 'ASSIGNMENT' THEN
9924 
9925                   IF l_delete_assmt_flag_tbl.count=0 THEN
9926                       IF l_debug_mode = 'Y' THEN
9927                           pa_debug.g_err_stage:='No elements in the l_delete_assmt_flag_tbl';
9928                           print_msg(pa_debug.g_err_stage,l_module_name);
9929                           pa_debug.reset_curr_function;
9930 		      END IF;
9931                       RETURN;
9932                   END IF;
9933 
9934                   IF l_delete_assmt_flag_tbl.count<>p_resource_assignment_tbl.count THEN
9935                         IF l_debug_mode = 'Y' THEN
9936                             pa_debug.g_err_stage:='No of elements in l_delete_task_flag_tbl ';
9937 			    pa_debug.g_err_stage:=pa_debug.g_err_stage||'and p_resource_assignment_tbl dont match';
9938                             print_msg(pa_debug.g_err_stage,l_module_name);
9939                         END IF;
9940                         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9941                                              p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
9942                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9943                   END IF;
9944 
9945                   IF l_debug_mode = 'Y' THEN
9946                      pa_debug.g_err_stage:='Deleting all budget lines for the res assmts for Assignment Context';
9947                      print_msg(pa_debug.g_err_stage,l_module_name);
9948                   END IF;
9949 
9950                  FORALL i IN l_delete_assmt_flag_tbl.first..l_delete_assmt_flag_tbl.last
9951                         DELETE
9952                           FROM  pa_budget_lines pbl
9953                          WHERE  resource_assignment_id=p_resource_assignment_tbl(i)
9954                            AND  l_delete_assmt_flag_tbl(i)='Y'
9955                    AND  ( nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' OR
9956                          (init_quantity is  NULL AND
9957                           txn_init_raw_cost is NULL AND
9958                           txn_init_burdened_cost is NULL AND
9959                           txn_init_revenue is NULL)
9960                         )
9961                  RETURNING
9962                     pbl.period_name,
9963                     pbl.start_date,
9964                     pbl.end_date,
9965                     pbl.txn_currency_code,
9966                     -pbl.txn_raw_cost,
9967                     -pbl.txn_burdened_cost,
9968                     -pbl.txn_revenue,
9969                     -pbl.project_raw_cost,
9970                     -pbl.project_burdened_cost,
9971                     -pbl.project_revenue,
9972                     -pbl.raw_cost,
9973                     -pbl.burdened_cost,
9974                     -pbl.revenue,
9975                     -pbl.quantity,
9976                     pbl.cost_rejection_code    ,
9977                     pbl.revenue_rejection_code ,
9978                     pbl.burden_rejection_code  ,
9979                     pbl.other_rejection_code   ,
9980                     pbl.pc_cur_conv_rejection_code,
9981                     pbl.pfc_cur_conv_rejection_code,
9982                     pbl.resource_assignment_id
9983                     BULK COLLECT INTO
9984                     l_period_name_tbl,
9985                     l_start_date_tbl,
9986                     l_end_date_tbl,
9987                     l_txn_currency_code_tbl,
9988                     l_txn_raw_cost_tbl,
9989                     l_txn_burdened_cost_tbl,
9990                     l_txn_revenue_tbl,
9991                     l_project_raw_cost_tbl,
9992                     l_project_burdened_cost_tbl,
9993                     l_project_revenue_tbl,
9994                     l_raw_cost_tbl,
9995                     l_burdened_cost_tbl,
9996                     l_revenue_tbl,
9997                     l_quantity_tbl,
9998                     l_cost_rejection_code_tbl,
9999                     l_revenue_rejection_code_tbl,
10000                     l_burden_rejection_code_tbl,
10001                     l_other_rejection_code,
10002                     l_pc_cur_conv_rej_code_tbl,
10003                     l_pfc_cur_conv_rej_code_tbl,
10004                     l_resource_assignment_id_tbl;
10005 
10006                  IF l_debug_mode = 'Y' THEN
10007                      pa_debug.g_err_stage:='Deleting all resource assignments for the tasks for which the fla is passed as Y';
10008                      print_msg(pa_debug.g_err_stage,l_module_name);
10009                  END IF;
10010 
10011                  -- IPM changes - populate tmp table to use for deletion later
10012                  -- hr_utility.trace('RM DEL6');
10013                  IF l_resource_assignment_id_tbl.COUNT > 0 THEN
10014                     FORALL i IN l_resource_assignment_id_tbl.first ..
10015                                 l_resource_assignment_id_tbl.last
10016                        INSERT INTO pa_resource_asgn_curr_tmp
10017                          (RA_TXN_ID
10018                          ,RESOURCE_ASSIGNMENT_ID
10019                          -- ,TXN_CURRENCY_CODE
10020                          ,DELETE_FLAG
10021                          )
10022                          SELECT pa_resource_asgn_curr_s.nextval
10023                                ,l_resource_assignment_id_tbl(i)
10024                                -- ,l_txn_currency_code_tbl(i)
10025                                ,'Y'
10026                            FROM DUAL;
10027 
10028 						    /*Start bug#16688443 */
10029 							l_cbs_element_id_tbl  := SYSTEM.pa_num_tbl_type();
10030 						  l_cbs_element_id_tbl.extend(l_resource_assignment_id_tbl.last);
10031 				FOR i IN l_resource_assignment_id_tbl.first..l_resource_assignment_id_tbl.last LOOP
10032 					select cbs_element_id into l_cbs_element_id_tbl(i) from pa_resource_assignments where resource_assignment_id = l_resource_assignment_id_tbl (i);
10033 				END LOOP; /*End bug#16688443 */
10034                  END IF;
10035 
10036                  IF nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
10037 
10038                     FORALL i IN l_delete_assmt_flag_tbl.first..l_delete_assmt_flag_tbl.last
10039                       DELETE
10040                         FROM  pa_resource_assignments pra
10041                        WHERE  resource_assignment_id=p_resource_assignment_tbl(i)
10042                          AND  l_delete_assmt_flag_tbl(i)='Y'
10043                    RETURNING
10044                       pra.resource_assignment_id,
10045                       pra.task_id,
10046                       pra.rbs_element_id,
10047                       pra.resource_class_code,
10048                       pra.rate_based_flag
10049                    BULK COLLECT INTO
10050                       l_ra_id_in_pra_tbl,
10051                       l_task_id_in_pra_tbl,
10052                       l_rbs_element_id_in_pra_tbl,
10053                       l_res_class_code_in_pra_tbl,
10054                       l_rate_based_flag_in_pra_tbl;
10055 
10056                  -- IPM changes - populate tmp table to use for deletion later
10057                  -- hr_utility.trace('RM DEL3');
10058                  IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
10059                     FORALL i IN l_ra_id_in_pra_tbl.first ..
10060                                 l_ra_id_in_pra_tbl.last
10061                        INSERT INTO pa_resource_asgn_curr_tmp
10062                          (RA_TXN_ID
10063                          ,RESOURCE_ASSIGNMENT_ID
10064                          -- ,TXN_CURRENCY_CODE
10065                          ,DELETE_FLAG
10066                          )
10067                          SELECT pa_resource_asgn_curr_s.nextval
10068                                ,l_ra_id_in_pra_tbl(i)
10069                                -- ,l_project_currency_code
10070                                ,'Y'
10071                            FROM DUAL;
10072                  END IF;
10073              END IF;    -- IF nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
10074 
10075             END IF;
10076 
10077     ELSE --The context is not Task Assignment
10078          -- or Workplan -- Bug 3808720
10079 
10080         IF p_task_or_res = 'TASKS' THEN
10081 
10082             IF p_element_version_id_tbl.count=0 THEN
10083               IF l_debug_mode = 'Y' THEN
10084                   pa_debug.g_err_stage:='No elements in the p_element_version_id_tbl';
10085                   print_msg(pa_debug.g_err_stage,l_module_name);
10086                   pa_debug.reset_curr_function;
10087 	    END IF;
10088               RETURN;
10089             END IF;
10090 
10091 
10092             IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
10093                p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST THEN
10094                 l_wp_version_flag:='N';
10095                 l_ta_display_flag:=null;
10096 /*          ELSIF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
10097                 l_wp_version_flag:='Y';
10098                 l_ta_display_flag:='N'; */ --Bug 3808720
10099             END IF;
10100 
10101             IF l_debug_mode = 'Y' THEN
10102                 pa_debug.g_err_stage:='l_wp_version_flag IS '||l_wp_version_flag;
10103                 print_msg(pa_debug.g_err_stage,l_module_name);
10104             END IF;
10105 
10106 
10107             IF p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,
10108                              PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST) THEN
10109 
10110                 -- Bug Fix: 4569365. Removed MRC code.
10111 		null;
10112             END IF;
10113 
10114 
10115 	    If l_budget_version_id is NOT NULL Then --Bug fix:5349668 --{
10116 		IF l_debug_mode = 'Y' THEN
10117                    pa_debug.g_err_stage:='2..Deleting budget lines based on Task element Version Ids';
10118                    print_msg(pa_debug.g_err_stage,l_module_name);
10119                 END IF;
10120             FORALL i IN p_element_version_id_tbl.first..p_element_version_id_tbl.last
10121                 DELETE
10122                 FROM   pa_budget_lines pbl
10123                 WHERE  pbl.resource_assignment_id IN (SELECT pra.resource_assignment_id
10124                                                       FROM   pa_resource_assignments pra,
10125                                                              pa_budget_versions pbv
10126                                                       WHERE  pra.budget_Version_id=pbv.budget_Version_id
10127                                                       AND    nvl(pbv.wp_version_flag,'N')=l_wp_version_flag
10128                                                       AND    pra.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
10129                                                       AND    pbv.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
10130                                                       AND    pra.wbs_element_version_id=p_element_version_id_tbl(i)
10131                                                       AND    nvl(l_ta_display_flag , '-99')=nvl(ta_display_flag,'-99'))
10132                AND pbl.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
10133                  RETURNING
10134                     pbl.period_name,
10135                     pbl.start_date,
10136                     pbl.end_date,
10137                     pbl.txn_currency_code,
10138                     -pbl.txn_raw_cost,
10139                     -pbl.txn_burdened_cost,
10140                     -pbl.txn_revenue,
10141                     -pbl.project_raw_cost,
10142                     -pbl.project_burdened_cost,
10143                     -pbl.project_revenue,
10144                     -pbl.raw_cost,
10145                     -pbl.burdened_cost,
10146                     -pbl.revenue,
10147                     -pbl.quantity,
10148                     pbl.cost_rejection_code    ,
10149                     pbl.revenue_rejection_code ,
10150                     pbl.burden_rejection_code  ,
10151                     pbl.other_rejection_code   ,
10152                     pbl.pc_cur_conv_rejection_code,
10153                     pbl.pfc_cur_conv_rejection_code,
10154                     pbl.resource_assignment_id
10155                     BULK COLLECT INTO
10156                     l_period_name_tbl,
10157                     l_start_date_tbl,
10158                     l_end_date_tbl,
10159                     l_txn_currency_code_tbl,
10160                     l_txn_raw_cost_tbl,
10161                     l_txn_burdened_cost_tbl,
10162                     l_txn_revenue_tbl,
10163                     l_project_raw_cost_tbl,
10164                     l_project_burdened_cost_tbl,
10165                     l_project_revenue_tbl,
10166                     l_raw_cost_tbl,
10167                     l_burdened_cost_tbl,
10168                     l_revenue_tbl,
10169                     l_quantity_tbl,
10170                     l_cost_rejection_code_tbl,
10171                     l_revenue_rejection_code_tbl,
10172                     l_burden_rejection_code_tbl,
10173                     l_other_rejection_code,
10174                     l_pc_cur_conv_rej_code_tbl,
10175                     l_pfc_cur_conv_rej_code_tbl,
10176                     l_resource_assignment_id_tbl;
10177 
10178                  -- IPM changes - populate tmp table to use for deletion later
10179                  -- hr_utility.trace('RM DEL5');
10180                  IF l_resource_assignment_id_tbl.COUNT > 0 THEN
10181                     FORALL i IN l_resource_assignment_id_tbl.first ..
10182                                 l_resource_assignment_id_tbl.last
10183                        INSERT INTO pa_resource_asgn_curr_tmp
10184                          (RA_TXN_ID
10185                          ,RESOURCE_ASSIGNMENT_ID
10186                          -- ,TXN_CURRENCY_CODE
10187                          ,DELETE_FLAG
10188                          )
10189                          SELECT pa_resource_asgn_curr_s.nextval
10190                                ,l_resource_assignment_id_tbl(i)
10191                                -- ,l_txn_currency_code_tbl(i)
10192                                ,'Y'
10193                            FROM DUAL;
10194 
10195 					/*Start bug#16688443 */
10196 							l_cbs_element_id_tbl  := SYSTEM.pa_num_tbl_type();
10197 						  l_cbs_element_id_tbl.extend(l_resource_assignment_id_tbl.last);
10198 				FOR i IN l_resource_assignment_id_tbl.first..l_resource_assignment_id_tbl.last LOOP
10199 					select cbs_element_id into l_cbs_element_id_tbl(i) from pa_resource_assignments where resource_assignment_id = l_resource_assignment_id_tbl (i);
10200 				END LOOP; /*End bug#16688443 */
10201 
10202                  END IF;
10203 	    End If; --}
10204 
10205             IF l_debug_mode = 'Y' THEN
10206                 pa_debug.g_err_stage:='Deleting all   res assmts for which the flag is passed as Y';
10207 		print_msg(pa_debug.g_err_stage,l_module_name);
10208             END IF;
10209 
10210 	    If p_element_version_id_tbl.COUNT > 0 AND l_budget_version_id is NOT NULL Then --Bug fix:5349668 --{
10211             	FORALL i IN p_element_version_id_tbl.first..p_element_version_id_tbl.last
10212                 DELETE
10213                 FROM   pa_resource_assignments pra
10214                 WHERE pra.wbs_element_version_id=p_element_version_id_tbl(i)
10215                 AND   EXISTS (SELECT 'X'
10216                               FROM   pa_budget_Versions pbv
10217                               WHERE  pbv.budget_version_id=pra.budget_Version_id
10218                               AND    pbv.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
10219                               AND    nvl(pbv.wp_version_flag,'N')=l_wp_version_flag
10220                               AND    nvl(l_ta_display_flag , '-99')=nvl(ta_display_flag,'-99'))
10221                 AND pra.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
10222                 RETURNING
10223                 pra.resource_assignment_id,
10224                 pra.task_id,
10225                 pra.rbs_element_id,
10226                 pra.resource_class_code,
10227                 pra.rate_based_flag
10228                 BULK COLLECT INTO
10229                 l_ra_id_in_pra_tbl,
10230                 l_task_id_in_pra_tbl,
10231                 l_rbs_element_id_in_pra_tbl,
10232                 l_res_class_code_in_pra_tbl,
10233                 l_rate_based_flag_in_pra_tbl;
10234 
10235                 -- IPM changes - populate tmp table to use for deletion later
10236                 -- hr_utility.trace('RM DEL8');
10237                 IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
10238                    FORALL i IN l_ra_id_in_pra_tbl.first ..
10239                                l_ra_id_in_pra_tbl.last
10240                       INSERT INTO pa_resource_asgn_curr_tmp
10241                         (RA_TXN_ID
10242                         ,RESOURCE_ASSIGNMENT_ID
10243                         -- ,TXN_CURRENCY_CODE
10244                         ,DELETE_FLAG
10245                         )
10246                         SELECT pa_resource_asgn_curr_s.nextval
10247                               ,l_ra_id_in_pra_tbl(i)
10248                               -- ,l_project_currency_code
10249                               ,'Y'
10250                           FROM DUAL;
10251                  END IF;
10252 	    End If; --}
10253 
10254 
10255         ELSIF p_task_or_res = 'ASSIGNMENT' THEN
10256 
10257             IF p_resource_assignment_tbl.count=0 THEN
10258               IF l_debug_mode = 'Y' THEN
10259                   pa_debug.g_err_stage:='No elements in the p_resource_assignment_tbl';
10260                   print_msg(pa_debug.g_err_stage,l_module_name);
10261                   pa_debug.reset_curr_function;
10262 	      END IF;
10263               RETURN;
10264             END IF;
10265 
10266             l_currency_code_tbl.extend(p_resource_assignment_tbl.COUNT);
10267 
10268             IF p_currency_code_tbl.COUNT > 0 THEN --If Currnecy Code is Passed.
10269                 IF p_resource_assignment_tbl.count <> p_currency_code_tbl.COUNT THEN --Count Should be equal to ra id count
10270                    IF l_debug_mode = 'Y' THEN
10271                       pa_debug.g_err_stage:='Count Mismatch for currency code and Reource Assignment';
10272                       print_msg(pa_debug.g_err_stage,l_module_name);
10273                    END IF;
10274                    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10275                                         p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
10276                                         p_token1         => 'PROCEDURENAME',
10277                                         p_value1         => 'PAFPPTPB.Delete_planning_transactions',
10278                                         p_token2         => 'STAGE',
10279                                         p_value2         => 'Curr Code - RA Mismatch');
10280                    RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10281                 END IF;
10282 
10283                 l_currency_code_tbl := p_currency_code_tbl;
10284 
10285             END IF;
10286 
10287             --Checking for the existence of budget lines for the element version ids passed. Bug 3589130
10288             IF p_validate_delete_flag='Y' THEN
10289 
10290                 IF l_debug_mode = 'Y' THEN
10291                     pa_debug.g_err_stage:='Checking for the existence of budget lines';
10292                     print_msg(pa_debug.g_err_stage,l_module_name);
10293                 END IF;
10294 
10295                 BEGIN
10296                     FOR i IN p_resource_assignment_tbl.first..p_resource_assignment_tbl.last LOOP
10297 
10298                         l_exists:='N';
10299 
10300                         BEGIN
10301                             SELECT 'Y'
10302                             INTO   l_exists
10303                             FROM   DUAL
10304                             WHERE  EXISTS (SELECT 'X'
10305                                            FROM   pa_budget_lines pbl,
10306                                                   pa_resource_assignments pra
10307                                            WHERE  pra.resource_assignment_id=p_resource_assignment_tbl(i)
10308                                            AND    pbl.budget_Version_id=pra.budget_version_id
10309                                            AND    pbl.resource_assignment_id=pra.resource_assignment_id);
10310                         EXCEPTION
10311                         WHEN NO_DATA_FOUND THEN
10312                             l_exists:='N';
10313                         END;
10314 
10315                         IF l_exists='Y' THEN
10316 
10317                             RAISE SKIP_LOOP;
10318 
10319                         END IF;
10320 
10321                     END LOOP;
10322 
10323                 EXCEPTION
10324                 WHEN SKIP_LOOP THEN
10325                     IF l_debug_mode = 'Y' THEN
10326                         pa_debug.g_err_stage:='Budget lines exist for the resource assignment id passed '||p_resource_assignment_tbl(i);
10327                         print_msg(pa_debug.g_err_stage,l_module_name);
10328                     END IF;
10329                     PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10330                                          p_msg_name       => 'PA_FP_AMT_EXISTS_FOR_PLAN_ELEM');
10331                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10332                 END;
10333 
10334             END IF ; --IF p_validate_delete_flag='Y' THEN
10335 
10336             IF p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,
10337                              PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST) THEN
10338               NULL;
10339                 -- Bug Fix: 4569365. Removed MRC code.
10340             END IF;
10341 
10342             IF l_debug_mode = 'Y' THEN
10343                 pa_debug.g_err_stage:='Deleting all  budget lines ';
10344                 print_msg(pa_debug.g_err_stage,l_module_name);
10345             END IF;
10346 
10347             FORALL i IN p_resource_assignment_tbl.first..p_resource_assignment_tbl.last
10348                 DELETE
10349                 FROM   pa_budget_lines pbl
10350                 WHERE  pbl.resource_assignment_id=p_resource_assignment_tbl(i)
10351                   AND  ( nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' OR
10352                         (init_quantity is  NULL AND
10353                          txn_init_raw_cost is NULL AND
10354                          txn_init_burdened_cost is NULL AND
10355                          txn_init_revenue is NULL)
10356                        )
10357                   AND nvl(l_currency_code_tbl(i),pbl.txn_currency_code) = pbl.txn_currency_code -- 3719918
10358                 RETURNING
10359                     pbl.period_name,
10360                     pbl.start_date,
10361                     pbl.end_date,
10362                     pbl.txn_currency_code,
10363                     -pbl.txn_raw_cost,
10364                     -pbl.txn_burdened_cost,
10365                     -pbl.txn_revenue,
10366                     -pbl.project_raw_cost,
10367                     -pbl.project_burdened_cost,
10368                     -pbl.project_revenue,
10369                     -pbl.raw_cost,
10370                     -pbl.burdened_cost,
10371                     -pbl.revenue,
10372                     -pbl.quantity,
10373                     pbl.cost_rejection_code    ,
10374                     pbl.revenue_rejection_code ,
10375                     pbl.burden_rejection_code  ,
10376                     pbl.other_rejection_code   ,
10377                     pbl.pc_cur_conv_rejection_code,
10378                     pbl.pfc_cur_conv_rejection_code,
10379                     pbl.resource_assignment_id
10380                     BULK COLLECT INTO
10381                     l_period_name_tbl,
10382                     l_start_date_tbl,
10383                     l_end_date_tbl,
10384                     l_txn_currency_code_tbl,
10385                     l_txn_raw_cost_tbl,
10386                     l_txn_burdened_cost_tbl,
10387                     l_txn_revenue_tbl,
10388                     l_project_raw_cost_tbl,
10389                     l_project_burdened_cost_tbl,
10390                     l_project_revenue_tbl,
10391                     l_raw_cost_tbl,
10392                     l_burdened_cost_tbl,
10393                     l_revenue_tbl,
10394                     l_quantity_tbl,
10395                     l_cost_rejection_code_tbl,
10396                     l_revenue_rejection_code_tbl,
10397                     l_burden_rejection_code_tbl,
10398                     l_other_rejection_code,
10399                     l_pc_cur_conv_rej_code_tbl,
10400                     l_pfc_cur_conv_rej_code_tbl,
10401                     l_resource_assignment_id_tbl;
10402 
10403                     -- IPM changes populate tmp table to use for deletion later
10404                     -- hr_utility.trace('RM DEL1');
10405                     IF l_resource_assignment_id_tbl.COUNT > 0 THEN
10406                        FORALL i IN l_resource_assignment_id_tbl.first ..
10407                                    l_resource_assignment_id_tbl.last
10408                           INSERT INTO pa_resource_asgn_curr_tmp
10409                             (RA_TXN_ID
10410                             ,RESOURCE_ASSIGNMENT_ID
10411                             ,TXN_CURRENCY_CODE -- Bug 5057010
10412                             ,DELETE_FLAG
10413                             )
10414                             SELECT pa_resource_asgn_curr_s.nextval
10415                                   ,l_resource_assignment_id_tbl(i)
10416                                   ,l_txn_currency_code_tbl(i) -- Bug 5057010
10417                                   ,'Y'
10418                               FROM DUAL;
10419 
10420 							  /*Start bug#16688443 */
10421 							l_cbs_element_id_tbl  := SYSTEM.pa_num_tbl_type();
10422 						  l_cbs_element_id_tbl.extend(l_resource_assignment_id_tbl.last);
10423 				FOR i IN l_resource_assignment_id_tbl.first..l_resource_assignment_id_tbl.last LOOP
10424 					select cbs_element_id into l_cbs_element_id_tbl(i) from pa_resource_assignments where resource_assignment_id = l_resource_assignment_id_tbl (i);
10425 				END LOOP; /*End bug#16688443 */
10426 
10427                     END IF;
10428 
10429             IF nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
10430 
10431                 IF l_debug_mode = 'Y' THEN
10432                     pa_debug.g_err_stage:='Deleting all   res assmts for which the flag is passed as Y';
10433                     print_msg(pa_debug.g_err_stage,l_module_name);
10434                 END IF;
10435 
10436               FORALL i IN p_resource_assignment_tbl.first..p_resource_assignment_tbl.last
10437                     DELETE
10438                     FROM   pa_resource_assignments pra
10439                     WHERE  pra.resource_assignment_id=p_resource_assignment_tbl(i)
10440                       AND  (l_currency_code_tbl(i) IS NULL
10441                             OR
10442                             NOT EXISTS ( SELECT 'EXISTS'
10443                                            FROM PA_BUDGET_LINES PBL
10444                                           WHERE PBL.RESOURCE_ASSIGNMENT_ID = pra.resource_assignment_id))
10445                     RETURNING
10446                     pra.resource_assignment_id,
10447                     pra.task_id,
10448                     pra.rbs_element_id,
10449                     pra.resource_class_code,
10450                     pra.rate_based_flag
10451                     BULK COLLECT INTO
10452                     l_ra_id_in_pra_tbl,
10453                     l_task_id_in_pra_tbl,
10454                     l_rbs_element_id_in_pra_tbl,
10455                     l_res_class_code_in_pra_tbl,
10456                     l_rate_based_flag_in_pra_tbl;
10457 
10458                  -- hr_utility.trace('RM DEL2');
10459                  -- IPM changes - populate temp table for deletion
10460                  IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
10461                     FORALL i IN l_ra_id_in_pra_tbl.first ..
10462                                 l_ra_id_in_pra_tbl.last
10463                        INSERT INTO pa_resource_asgn_curr_tmp
10464                          (RA_TXN_ID
10465                          ,RESOURCE_ASSIGNMENT_ID
10466                          -- ,TXN_CURRENCY_CODE
10467                          ,DELETE_FLAG
10468                          )
10469                          SELECT pa_resource_asgn_curr_s.nextval
10470                                ,l_ra_id_in_pra_tbl(i)
10471                                -- ,l_project_currency_code
10472                                ,'Y'
10473                            FROM DUAL;
10474                  END IF;
10475 
10476         END IF;-- IF nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
10477 
10478         END IF;-- IF p_task_or_res = 'TASKS' THEN
10479 
10480     END IF;--IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
10481 
10482     --Rollup the amounts to budget versions as some of the budget lines with amounts might have got
10483     --deleted
10484     IF l_debug_mode = 'Y' THEN
10485         pa_debug.g_err_stage:='No of Rec Deleted from RA : ' || l_ra_id_in_pra_tbl.COUNT;
10486         print_msg(pa_debug.g_err_stage,l_module_name);
10487         IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
10488            FOR i in l_ra_id_in_pra_tbl.FIRST .. l_ra_id_in_pra_tbl.LAST LOOP
10489                pa_debug.g_err_stage:='Deleted RA Id : ' || l_ra_id_in_pra_tbl(i);
10490                print_msg(pa_debug.g_err_stage,l_module_name);
10491            END LOOP;
10492         END IF;
10493     END IF;
10494 
10495     -- IPM changes - delete from new entity  --{
10496     -- new entity maintenance api to be called before call to pa_fp_rollup_pkg.rollup_budget_version.
10497     -- Call new entity maintenance api for the budget version id (which has to be derived),
10498     -- if records have been inserted in pa_Resource_asgn_curr_tmp, in the delete flow.
10499     -- Note: Deriving l_budget_version_id may not be the right approach as we avoid calling BV/RA
10500     --   rollup api and pji api when l_budget_version_id is null (No BLs deleted)
10501     IF l_budget_version_id IS NOT NULL THEN
10502         pa_debug.g_err_stage:='Calling pa_fp_gen_amount_utils.get_plan_version_dtls:bv_id ' || l_budget_version_id;
10503         print_msg(pa_debug.g_err_stage,l_module_name);
10504 
10505      pa_fp_gen_amount_utils.get_plan_version_dtls
10506         (p_project_id         => l_project_id,
10507          p_budget_version_id  => l_budget_version_id,
10508          x_fp_cols_rec        => l_fp_cols_rec,
10509          x_return_status      => x_return_status,
10510          x_msg_count          => x_msg_count,
10511          x_msg_data           => x_msg_data);
10512 
10513      IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10514 
10515        IF l_debug_mode = 'Y' THEN
10516           pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
10517           print_msg(pa_debug.g_err_stage,l_module_name);
10518        END IF;
10519        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10520      END IF;
10521 
10522         pa_debug.g_err_stage:='Calling pa_res_asg_currency_pub.maintain_data:bv_id ' || l_budget_version_id;
10523         print_msg(pa_debug.g_err_stage,l_module_name);
10524 
10525      pa_res_asg_currency_pub.maintain_data(
10526          p_fp_cols_rec                  => l_fp_cols_rec,
10527          p_calling_module               => 'UPDATE_PLAN_TRANSACTION',
10528          p_delete_flag                  => 'Y',
10529          p_copy_flag                    => 'N',
10530          p_src_version_id               => NULL,
10531          p_copy_mode                    => NULL,
10532          p_rollup_flag                  => 'N',
10533          p_version_level_flag           => 'N',
10534          p_called_mode                  => 'SELF_SERVICE',
10535          x_return_status                => x_return_status,
10536          x_msg_count                    => x_msg_count,
10537          x_msg_data                     => x_msg_data
10538          );
10539 
10540      IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10541 
10542        IF l_debug_mode = 'Y' THEN
10543           pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
10544           print_msg(pa_debug.g_err_stage,l_module_name);
10545        END IF;
10546        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10547      END IF;
10548 
10549     END IF; --} IPM
10550 
10551     --The code below will call budget version rollup and PJI APIs. These APIs should not be called if the input
10552     --parameter p_rollup_required_flag is N. For bug 3937716
10553     IF p_rollup_required_flag = 'Y' THEN
10554 
10555         /* If there was nothing to delete, l_budget_version_id would be null and rollup need not be done for that case */
10556 
10557        --Added for bug 4160258
10558        IF (p_calling_module = 'PROCESS_RES_CHG_DERV_CALC_PRMS') THEN
10559          l_mode := null;
10560        ELSIF (p_currency_code_tbl.COUNT = 0) THEN
10561          l_mode := 'DELETE_RA';
10562        ELSE
10563         l_mode := null;
10564        END IF;
10565 
10566         IF l_budget_version_id IS NOT NULL THEN
10567         pa_debug.g_err_stage:='Calling PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION:l_budget_version_id '||l_budget_version_id;
10568         print_msg(pa_debug.g_err_stage,l_module_name);
10569 
10570              PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION
10571              ( p_budget_version_id     => l_budget_version_id
10572               ,p_entire_version        => 'Y'
10573               ,p_context               => l_mode             -- Bug 4160258
10574               ,x_return_status         => x_return_status
10575               ,x_msg_count             => l_msg_count
10576               ,x_msg_data              => l_msg_data);
10577 
10578              IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10579                  IF l_debug_mode = 'Y' THEN
10580                      pa_debug.g_err_stage:='The API PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION returned error';
10581                      print_msg(pa_debug.g_err_stage,l_module_name);
10582                  END IF;
10583                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10584              END IF;
10585 
10586         END IF;
10587     END IF; /* p_rollup_required_flag = Y */
10588 
10589 
10590     /* Bug 4200168: Reporting lines rollup api would only be called if p_pji_rollup_required is
10591      * passed as Y */
10592     IF p_pji_rollup_required = 'Y'
10593 	AND l_budget_version_id is NOT NULL THEN -- Bug 5381920
10594 
10595         --Call the Reporting Lines API only if the version is not a CI version
10596         IF l_ci_id IS NULL THEN
10597 
10598             IF l_resource_assignment_id_tbl.count >0 THEN
10599 
10600                 IF l_debug_mode = 'Y' THEN
10601                     pa_debug.g_err_stage:='Prepare pl/sql tables for rbs element id and task id';
10602                    print_msg(pa_debug.g_err_stage,l_module_name);
10603                 END IF;
10604 
10605                 --Prepare the pl/sql tables for task id, rbs element id , resource class code and rate based flag.
10606                 --These pl/sql tables should be same in length to the pl/sql tables prepared while deleting the budget
10607                 --lines. This can be done by looping thru the l_resource_assignment_id_tbl and looking for a matching
10608                 --ra id in l_ra_id_in_pra_tbl If a matching ra id is not found in l_ra_id_in_pra_tbl then data
10609                 -- is fetched directly from pa_resource_assignments for ra id in l_resource_assignment_id_tbl.
10610                 l_ra_index:=1;
10611                 l_counter:=0;--This is used just to keep track of the length of the pl/sql tables being prepared
10612 
10613                 l_task_id_tbl.EXTEND(l_resource_assignment_id_tbl.last);
10614                 l_rbs_element_id_tbl.EXTEND(l_resource_assignment_id_tbl.last);
10615                 l_res_class_code_tbl.EXTEND(l_resource_assignment_id_tbl.last);
10616                 l_rate_based_flag_tbl.EXTEND(l_resource_assignment_id_tbl.last);
10617 
10618                 FOR i IN l_resource_assignment_id_tbl.FIRST..l_resource_assignment_id_tbl.LAST LOOP
10619                    --For bug 3840150
10620                     l_ra_index:=1;
10621                     LOOP
10622                         IF l_ra_id_in_pra_tbl.EXISTS(l_ra_index) THEN
10623                            IF l_ra_id_in_pra_tbl(l_ra_index) = l_resource_assignment_id_tbl(i) THEN
10624                               IF l_debug_mode = 'Y' THEN
10625                                   pa_debug.g_err_stage:='Stepping In - l_ra_index : '||l_ra_index;
10626                                   print_msg(pa_debug.g_err_stage,l_module_name);
10627                               END IF;
10628                               l_task_id                    := l_task_id_in_pra_tbl(l_ra_index);
10629                               l_rbs_element_id             := l_rbs_element_id_in_pra_tbl(l_ra_index);
10630                               l_res_class_code             := l_res_class_code_in_pra_tbl(l_ra_index);
10631                               l_rate_based_flag            := l_rate_based_flag_in_pra_tbl(l_ra_index);
10632                               EXIT; --Exit LOOP
10633                            ELSE
10634                                 IF l_debug_mode = 'Y' THEN
10635                                     pa_debug.g_err_stage:='Stepping Over - l_ra_index : '||l_ra_index;
10636                                     print_msg(pa_debug.g_err_stage,l_module_name);
10637                                 END IF;
10638                                 l_ra_index:=l_ra_index+1;
10639                            END IF;
10640                         ELSE
10641                               BEGIN
10642                                    IF l_debug_mode = 'Y' THEN
10643                                        pa_debug.g_err_stage:='Fetching Data from PA Res Assignment';
10644                                        print_msg(pa_debug.g_err_stage,l_module_name);
10645                                    END IF;
10646                                    SELECT TASK_ID,
10647                                           RBS_ELEMENT_ID,
10648                                           RESOURCE_CLASS_CODE,
10649                                           RATE_BASED_FLAG
10650                                      INTO l_task_id,
10651                                           l_rbs_element_id,
10652                                           l_res_class_code,
10653                                           l_rate_based_flag
10654                                      FROM PA_RESOURCE_ASSIGNMENTS
10655                                     WHERE RESOURCE_ASSIGNMENT_ID = l_resource_assignment_id_tbl(i);
10656 
10657                                     EXIT; --Exit LOOP
10658 
10659                               EXCEPTION
10660                                   WHEN NO_DATA_FOUND THEN
10661                                        IF l_debug_mode = 'Y' THEN
10662                                            pa_debug.g_err_stage:='No Data Found in RA Table for Bl deleted.';
10663                                            print_msg(pa_debug.g_err_stage,l_module_name);
10664                                        END IF;
10665                                        RAISE;
10666                               END;
10667                         END IF;
10668                     END LOOP;
10669 
10670                     IF l_debug_mode = 'Y' THEN
10671                         pa_debug.g_err_stage:='Data for Update Rep Lines';
10672                         print_msg(pa_debug.g_err_stage,l_module_name);
10673 
10674                         pa_debug.g_err_stage:='l_task_id '||l_task_id;
10675                         print_msg(pa_debug.g_err_stage,l_module_name);
10676 
10677                         pa_debug.g_err_stage:='l_rbs_element_id '||l_rbs_element_id;
10678                         print_msg(pa_debug.g_err_stage,l_module_name);
10679 
10680                         pa_debug.g_err_stage:='l_res_class_code '||l_res_class_code;
10681                         print_msg(pa_debug.g_err_stage,l_module_name);
10682 
10683                         pa_debug.g_err_stage:='l_rate_based_flag '||l_rate_based_flag;
10684                         print_msg(pa_debug.g_err_stage,l_module_name);
10685                     END IF;
10686 
10687                     l_task_id_tbl(i)         :=l_task_id;
10688                     l_rbs_element_id_tbl(i)  :=l_rbs_element_id;
10689                     l_res_class_code_tbl(i)  :=l_res_class_code;
10690                     l_rate_based_flag_tbl(i) :=l_rate_based_flag;
10691                     l_counter:=l_counter+1;
10692 
10693                 END LOOP;
10694 
10695                 IF l_counter <> l_resource_assignment_id_tbl.COUNT THEN
10696 
10697                     IF l_debug_mode = 'Y' THEN
10698                         pa_debug.g_err_stage:='Error in preparing pl/sql tables for rbs element id and task id ';
10699 			print_msg(pa_debug.g_err_stage,l_module_name);
10700                     END IF;
10701 
10702                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10703 
10704                 END IF;
10705 
10706                 IF l_debug_mode = 'Y' THEN
10707                     pa_debug.g_err_stage:='No of rows deleted from pa_budget_lines= '||l_resource_assignment_id_tbl.count;
10708 		    print_msg(pa_debug.g_err_stage,l_module_name);
10709                 END IF;
10710 
10711 
10712 
10713                 pa_planning_transaction_utils.call_update_rep_lines_api
10714                 ( p_source                       =>    'PL-SQL'
10715                  ,p_budget_Version_id            =>     l_budget_version_id
10716                  ,p_resource_assignment_id_tbl   =>     l_resource_assignment_id_tbl
10717 				 ,p_cbs_element_id_tbl     		 =>     l_cbs_element_id_tbl
10718                  ,p_period_name_tbl              =>     l_period_name_tbl
10719                  ,p_start_date_tbl               =>     l_start_date_tbl
10720                  ,p_end_date_tbl                 =>     l_end_date_tbl
10721                  ,p_txn_currency_code_tbl        =>     l_txn_currency_code_tbl
10722                  ,p_txn_raw_cost_tbl             =>     l_txn_raw_cost_tbl
10723                  ,p_txn_burdened_cost_tbl        =>     l_txn_burdened_cost_tbl
10724                  ,p_txn_revenue_tbl              =>     l_txn_revenue_tbl
10725                  ,p_project_raw_cost_tbl         =>     l_project_raw_cost_tbl
10726                  ,p_project_burdened_cost_tbl    =>     l_project_burdened_cost_tbl
10727                  ,p_project_revenue_tbl          =>     l_project_revenue_tbl
10728                  ,p_raw_cost_tbl                 =>     l_raw_cost_tbl
10729                  ,p_burdened_cost_tbl            =>     l_burdened_cost_tbl
10730                  ,p_revenue_tbl                  =>     l_revenue_tbl
10731                  ,p_cost_rejection_code_tbl      =>     l_cost_rejection_code_tbl
10732                  ,p_revenue_rejection_code_tbl   =>     l_revenue_rejection_code_tbl
10733                  ,p_burden_rejection_code_tbl    =>     l_burden_rejection_code_tbl
10734                  ,p_other_rejection_code         =>     l_other_rejection_code
10735                  ,p_pc_cur_conv_rej_code_tbl     =>     l_pc_cur_conv_rej_code_tbl
10736                  ,p_pfc_cur_conv_rej_code_tbl    =>     l_pfc_cur_conv_rej_code_tbl
10737                  ,p_quantity_tbl                 =>     l_quantity_tbl
10738                  ,p_rbs_element_id_tbl           =>     l_rbs_element_id_tbl
10739                  ,p_task_id_tbl                  =>     l_task_id_tbl
10740                  ,p_res_class_code_tbl           =>     l_res_class_code_tbl
10741                  ,p_rate_based_flag_tbl          =>     l_rate_based_flag_tbl
10742                  ,x_return_status                =>     x_return_status
10743                  ,x_msg_data                     =>     x_msg_data
10744                  ,x_msg_count                    =>     x_msg_count    );
10745 
10746                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10747                     IF l_debug_mode = 'Y' THEN
10748                         pa_debug.g_err_stage:='The API pa_planning_transaction_utils.call_update_rep_lines_api returned error';
10749 			print_msg(pa_debug.g_err_stage,l_module_name);
10750                     END IF;
10751                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10752                 END IF;
10753 
10754             END IF;-- IF l_resource_assignment_id_tbl.count >0 THEN
10755 
10756         END IF;--IF l_ci_id IS NULL THEN
10757 
10758     END IF;--IF p_pji_rollup_required = 'Y' THEN /* Bug 4200168 */
10759 
10760 -- Bug Fix 4635951
10761 -- Commenting out the below select as it has been moved into the below IF condition
10762 -- and it was a left out and this stranded select is causing this bug.
10763 
10764         IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
10765             AND NVL(p_calling_context, 'X' ) <> 'PA_DELETE_TASKS' -- Bug 9535723
10766             AND PA_TASK_ASSIGNMENT_UTILS.Is_Progress_Rollup_Required(l_project_id) = 'Y') OR -- 5198662
10767            (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
10768             AND pa_task_assignment_utils.g_require_progress_rollup = 'Y')) AND
10769            l_budget_version_id IS NOT NULL THEN -- Bug 5381920
10770 
10771 	    IF l_debug_mode = 'Y' THEN
10772                 pa_debug.g_err_stage:='Calling PA_PROJ_TASK_STRUC_PUB.process_wbs_updates_wrp API';
10773                 print_msg(pa_debug.g_err_stage,l_module_name);
10774             END IF;
10775 
10776              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
10777                 ( p_calling_context       => 'ASGMT_PLAN_CHANGE'
10778                  ,p_project_id              => l_project_id
10779                  ,p_structure_version_id   => pa_project_structure_utils.get_latest_wp_version(l_project_id)
10780                  ,p_pub_struc_ver_id      => pa_project_structure_utils.get_latest_wp_version(l_project_id)
10781                  ,x_return_status                =>     x_return_status
10782                  ,x_msg_data                     =>     x_msg_data
10783                  ,x_msg_count                    =>     x_msg_count    );
10784 
10785              pa_task_assignment_utils.g_require_progress_rollup := 'N';
10786 
10787         END IF;
10788         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10789             IF l_debug_mode = 'Y' THEN
10790                 pa_debug.g_err_stage:='After Called process_wbs_updates_wrp:retSts['||x_return_status||']';
10791 		print_msg(pa_debug.g_err_stage,l_module_name);
10792             END IF;
10793 
10794             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10795         END IF;
10796 --End bug 4492493
10797 
10798     IF l_debug_mode = 'Y' THEN
10799         pa_debug.g_err_stage:='Exiting delete_planning_transactions';
10800 	print_msg(pa_debug.g_err_stage,l_module_name);
10801     -- reset curr function
10802         pa_debug.reset_curr_function;
10803     END IF;
10804 EXCEPTION
10805 
10806    WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
10807        l_msg_count := FND_MSG_PUB.count_msg;
10808        IF l_msg_count = 1 THEN
10809            PA_INTERFACE_UTILS_PUB.get_messages
10810                  (p_encoded        => FND_API.G_TRUE
10811                   ,p_msg_index      => 1
10812                   ,p_msg_count      => l_msg_count
10813                   ,p_msg_data       => l_msg_data
10814                   ,p_data           => l_data
10815                   ,p_msg_index_out  => l_msg_index_out);
10816 
10817            x_msg_data := l_data;
10818            x_msg_count := l_msg_count;
10819        ELSE
10820            x_msg_count := l_msg_count;
10821        END IF;
10822 
10823        x_return_status := FND_API.G_RET_STS_ERROR;
10824 
10825        IF l_debug_mode = 'Y' THEN
10826            pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
10827 	   print_msg(pa_debug.g_err_stage,l_module_name);
10828         -- reset curr function
10829           pa_debug.reset_curr_function;
10830        END IF;
10831        RETURN;
10832     WHEN OTHERS THEN
10833         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10834         x_msg_count     := 1;
10835         x_msg_data      := SQLERRM;
10836 
10837         FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'pa_fp_planning_transaction_pub'
10838                                 ,p_procedure_name  => 'delete_planning_transactions');
10839 
10840         IF l_debug_mode = 'Y' THEN
10841            pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
10842            print_msg(pa_debug.g_err_stage,l_module_name);
10843         -- reset curr function
10844         pa_debug.Reset_Curr_Function();
10845         END IF;
10846         RAISE;
10847 END delete_planning_transactions;
10848 
10849 
10850 /*=====================================================================
10851 Procedure Name:      ADD_WP_PLAN_TYPE
10852 Purpose:             This API checks if a Work Plan type is present in
10853                      the system.If is it not then it throws a error.
10854                      If WorkPlan Type is not attached to the project
10855                      then it attaches it.
10856                      This would be called when workplan is enabled for
10857                      a project or template.
10858 Parameters:(Note that all the input parameters are mandatory)
10859 IN                   1)p_src_project_id   IN pa_projects_all.project_id%TYPE
10860 IN                   2)p_targ_project_id  IN pa_projects_all.project_id%TYPE
10861 =======================================================================*/
10862 PROCEDURE  Add_wp_plan_type
10863   (
10864        p_src_project_id               IN       pa_projects_all.project_id%TYPE
10865       ,p_targ_project_id              IN       pa_projects_all.project_id%TYPE
10866       ,x_return_status                OUT      NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10867       ,x_msg_count                    OUT      NOCOPY NUMBER --File.Sql.39 bug 4440895
10868       ,x_msg_data                     OUT      NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10869   ) AS
10870 
10871   --Start of variables used for debugging
10872       l_msg_count          NUMBER :=0;
10873       l_data               VARCHAR2(2000);
10874       l_msg_data           VARCHAR2(2000);
10875       l_error_msg_code     VARCHAR2(30);
10876       l_msg_index_out      NUMBER;
10877       l_return_status      VARCHAR2(2000);
10878       l_debug_mode         VARCHAR2(30);
10879   --End of variables used for debugging
10880 
10881       l_wp_type_id              NUMBER :=0;
10882       l_proj_wp_type_exists     NUMBER :=0;
10883       l_proj_fp_options_id      pa_proj_fp_options.proj_fp_options_id%TYPE;
10884       l_projfunc_currency_code  pa_projects_all.projfunc_currency_code%type;
10885       l_proj_currency_code      pa_projects_all.project_currency_code%type;
10886       l_appr_rev_plan_type_flag pa_fin_plan_types_b.approved_rev_plan_type_flag %TYPE;
10887 
10888       l_plan_in_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
10889       l_src_fp_option_id        pa_proj_fp_options.proj_fp_options_id%TYPE;
10890 BEGIN
10891 
10892     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
10893     l_debug_mode := NVL(l_debug_mode, 'N');
10894     x_msg_count := 0;
10895     x_return_status := FND_API.G_RET_STS_SUCCESS;
10896 IF l_debug_mode = 'Y' THEN
10897     PA_DEBUG.Set_Curr_Function( p_function   => 'PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type',
10898                                 p_debug_mode => l_debug_mode );
10899 END IF;
10900  ---------------------------------------------------------------
10901 -- validating input parameter p_project_id.
10902 -- p_project_id cannot be passed as null.
10903 ---------------------------------------------------------------
10904     IF l_debug_mode = 'Y' THEN
10905        pa_debug.g_err_stage:='Validating input parameters';
10906        pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10907     END IF;
10908 
10909     IF (p_src_project_id IS NULL) OR
10910        (p_targ_project_id IS NULL) THEN
10911         IF l_debug_mode = 'Y' THEN
10912               pa_debug.g_err_stage:='Invalid Arguments Passed - src and targ Project Ids are null';
10913               pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,5);
10914         END IF;
10915         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10916                              p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
10917         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10918     END IF;
10919 
10920  ---------------------------------------------------------------
10921  -- checking if a workplan type is present in the system with
10922  -- enable_wp_flag = 'Y'
10923  ---------------------------------------------------------------
10924 
10925       IF l_debug_mode = 'Y' THEN
10926         pa_debug.g_err_stage:='checking availability of a wp type';
10927         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10928       END IF;
10929 
10930      ---------------------------------------------------------
10931      -- In case of no data found, the exception handling block
10932      -- shall throw PA_FP_NO_WP_PLAN_TYPE.
10933      ---------------------------------------------------------
10934      BEGIN -- BLOCK to check if workplan_type is is present in the system- Starts
10935 
10936      SELECT fin_plan_type_id,approved_rev_plan_type_flag
10937        INTO l_wp_type_id,l_appr_rev_plan_type_flag
10938        FROM pa_fin_plan_types_b
10939       WHERE nvl(use_for_workplan_flag,'N') = 'Y';
10940 
10941      EXCEPTION
10942 
10943           WHEN NO_DATA_FOUND THEN
10944                IF l_debug_mode = 'Y' THEN
10945                   pa_debug.g_err_stage :='No WORK PLAN TYPE present in the system';
10946                   pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,1);
10947                END IF;
10948 
10949                PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10950                                     p_msg_name => 'PA_FP_NO_WP_PLAN_TYPE' );
10951                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10952      END; -- BLOCK to check if workplan_type is is present in the system - Ends
10953 
10954 
10955 ---------------------------------------------------------
10956 -- Checking if workplan_type is already attched for the
10957 -- passed project_id
10958 ---------------------------------------------------------
10959       IF l_debug_mode = 'Y' THEN
10960         pa_debug.g_err_stage:='checking if wp type is already attched for project id';
10961         pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10962       END IF;
10963 
10964      BEGIN -- BLOCK to check if workplan_type is already attched for the passed project_id - Starts
10965 
10966         SELECT 1
10967           INTO l_proj_wp_type_exists
10968           FROM DUAL
10969          WHERE EXISTS(
10970                      SELECT 1
10971                        FROM pa_proj_fp_options
10972                       WHERE fin_plan_type_id = l_wp_type_id
10973                         AND project_id = p_targ_project_id
10974                         AND fin_plan_option_level_code = 'PLAN_TYPE');
10975 
10976      EXCEPTION
10977          WHEN NO_DATA_FOUND THEN
10978            null;
10979      END; -- BLOCK to check if workplan_type is already attched for the passed project_id - Ends
10980 
10981 ---------------------------------------------------------
10982 -- If workplan_type is not already attched for the
10983 -- passed project_id then a record is created in
10984 -- pa_proj_fp_options and the default fp txn currencies
10985 -- are created.
10986 ---------------------------------------------------------
10987 
10988      IF l_proj_wp_type_exists = 0 THEN
10989 
10990           IF l_debug_mode = 'Y' THEN
10991              pa_debug.g_err_stage:='Getting the fp option id for the wp plan type of the source project ';
10992              pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10993           END IF;
10994 
10995           IF p_src_project_id <> p_targ_project_id THEN
10996 
10997                 BEGIN
10998                     SELECT proj_fp_options_id
10999                     INTO   l_src_fp_option_id
11000                     FROM   pa_proj_fp_options
11001                     WHERE  project_id=p_src_project_id
11002                     AND    fin_plan_type_id=l_wp_type_id
11003                     AND    fin_plan_option_level_code = 'PLAN_TYPE';
11004                 EXCEPTION
11005                 WHEN NO_DATA_FOUND THEN
11006                     l_src_fp_option_id:=NULL;
11007                 END;
11008           ELSE
11009              l_src_fp_option_id:=NULL;
11010           END IF;
11011 
11012 
11013           IF l_debug_mode = 'Y' THEN
11014              pa_debug.g_err_stage:='Calling API pa_proj_fp_options_pub.create_fp_option';
11015              pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
11016           END IF;
11017 
11018           IF l_debug_mode = 'Y' THEN
11019              pa_debug.g_err_stage:='The source fp option id is '||l_src_fp_option_id;
11020              pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
11021           END IF;
11022 
11023 
11024          pa_proj_fp_options_pub.Create_FP_Option (
11025            px_target_proj_fp_option_id          =>  l_proj_fp_options_id
11026           ,p_source_proj_fp_option_id           =>  l_src_fp_option_id
11027           ,p_target_fp_option_level_code        =>  PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE
11028           ,p_target_fp_preference_code          =>  PA_FP_CONSTANTS_PKG.G_PREF_COST_ONLY
11029           ,p_target_fin_plan_version_id         =>  null
11030           ,p_target_project_id                  =>  p_targ_project_id
11031           ,p_target_plan_type_id                =>  l_wp_type_id
11032           ,x_return_status                      =>  l_return_status
11033           ,x_msg_count                          =>  l_msg_count
11034           ,x_msg_data                           =>  l_msg_data);
11035 
11036           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11037                 IF l_debug_mode = 'Y' THEN
11038                    pa_debug.g_err_stage:='Called API pa_proj_fp_options_pub.Create_FP_Option returned error';
11039                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,5);
11040                 END IF;
11041                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11042            END IF;
11043 
11044            SELECT plan_in_multi_curr_flag
11045            INTO   l_plan_in_multi_curr_flag
11046            FROM   pa_proj_fp_options
11047            WHERE  proj_fp_options_id = l_proj_fp_options_id;
11048 
11049           IF l_debug_mode = 'Y' THEN
11050              pa_debug.g_err_stage:='Calling API pa_fp_txn_currencies_pub.Copy_Fp_Txn_Currencies';
11051              pa_debug.write('Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
11052           END IF;
11053 
11054           PA_FP_TXN_CURRENCIES_PUB.COPY_FP_TXN_CURRENCIES (
11055              p_source_fp_option_id              =>      l_src_fp_option_id
11056              ,p_target_fp_option_id             =>      l_proj_fp_options_id
11057              ,p_target_fp_preference_code       =>      null
11058              ,p_plan_in_multi_curr_flag         =>      l_plan_in_multi_curr_flag
11059              ,x_return_status                   =>      l_return_status
11060              ,x_msg_count                       =>      l_msg_count
11061              ,x_msg_data                        =>      l_msg_data );
11062 
11063           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11064                 IF l_debug_mode = 'Y' THEN
11065                    pa_debug.g_err_stage:='Called API  PA_FP_TXN_CURRENCIES_PUB.COPY_FP_TXN_CURRENCIES returned error';
11066                    pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,5);
11067                 END IF;
11068                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11069            END IF;
11070 
11071      END IF;
11072 	IF l_debug_mode = 'Y' THEN
11073 	       pa_debug.reset_curr_function;
11074 	END IF;
11075 
11076  EXCEPTION
11077 
11078       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11079            l_msg_count := FND_MSG_PUB.count_msg;
11080              IF l_msg_count = 1 THEN
11081                 PA_INTERFACE_UTILS_PUB.get_messages
11082                      (p_encoded        => FND_API.G_TRUE
11083                       ,p_msg_index      => 1
11084                       ,p_msg_count      => l_msg_count
11085                       ,p_msg_data       => l_msg_data
11086                       ,p_data           => l_data
11087                       ,p_msg_index_out  => l_msg_index_out);
11088                 x_msg_data := l_data;
11089                 x_msg_count := l_msg_count;
11090              ELSE
11091                 x_msg_count := l_msg_count;
11092              END IF;
11093            x_return_status := FND_API.G_RET_STS_ERROR;
11094 	IF l_debug_mode = 'Y' THEN
11095            pa_debug.reset_curr_function;
11096 	END IF;
11097      WHEN OTHERS THEN
11098           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11099           x_msg_count     := 1;
11100           x_msg_data      := SQLERRM;
11101           FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'PA_FP_PLANNING_TRANSACTION_PUB'
11102                                   ,p_procedure_name  => 'PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type');
11103 
11104            IF l_debug_mode = 'Y' THEN
11105              pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
11106              pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,5);
11107              pa_debug.reset_curr_function;
11108 	  END IF;
11109           RAISE;
11110 
11111 END add_wp_plan_type;
11112 
11113 /*=====================================================================
11114 Procedure Name:      check_and_create_task_rec_info
11115 Purpose:             This is a private api in the package. This API will
11116                       validate the task data passed to the
11117                       update_planning_transactions api This API checks
11118                       for the existence of the element version id passed
11119                       in pa_resource_assignments. If some of the element
11120                       version Ids are not there then it call
11121                       add_planning_transactions API to create records in
11122                       pa_resource_assignments. This API will be called
11123                       only when the context is WORKPLAN
11124 =======================================================================*/
11125 /*******************************************************************************************************
11126 As part of Bug 3749516 All References to Equipment Effort or Equip Resource Class has been removed in
11127 PROCEDURE check_and_create_task_rec_info.
11128 p_planned_equip_effort_tbl IN parameter has also been removed as they were not being  used/referred.
11129 ********************************************************************************************************/
11130  PROCEDURE check_and_create_task_rec_info
11131  (
11132     p_project_id                 IN   Pa_projects_all.project_id%TYPE
11133    ,p_struct_elem_version_id     IN   Pa_proj_element_versions.element_version_id%TYPE
11134    ,p_element_version_id_tbl     IN   SYSTEM.PA_NUM_TBL_TYPE
11135    ,p_planning_start_date_tbl    IN   SYSTEM.PA_DATE_TBL_TYPE
11136    ,p_planning_end_date_tbl      IN   SYSTEM.PA_DATE_TBL_TYPE
11137    ,p_planned_people_effort_tbl  IN   SYSTEM.PA_NUM_TBL_TYPE
11138    ,p_raw_cost_tbl               IN   SYSTEM.PA_NUM_TBL_TYPE      /* Bug 3720357 */
11139    ,p_burdened_cost_tbl          IN   SYSTEM.PA_NUM_TBL_TYPE      /* Bug 3720357 */
11140    ,p_apply_progress_flag        IN   VARCHAR2                    /* Bug 3720357 */
11141    ,x_element_version_id_tbl     OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
11142    ,x_planning_start_date_tbl    OUT  NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
11143    ,x_planning_end_date_tbl      OUT  NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
11144    ,x_planned_effort_tbl         OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
11145    ,x_resource_assignment_id_tbl OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
11146    ,x_raw_cost_tbl               OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE      /* Bug 3720357 */ --File.Sql.39 bug 4440895
11147    ,x_burdened_cost_tbl          OUT  NOCOPY SYSTEM.PA_NUM_TBL_TYPE      /* Bug 3720357 */ --File.Sql.39 bug 4440895
11148    ,x_return_status              OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11149    ,x_msg_data                   OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11150    ,x_msg_count                  OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
11151 ) AS
11152   --Start of variables used for debugging
11153       l_msg_count          NUMBER :=0;
11154       l_data               VARCHAR2(2000);
11155       l_msg_data           VARCHAR2(2000);
11156       l_error_msg_code     VARCHAR2(30);
11157       l_msg_index_out      NUMBER;
11158       l_return_status      VARCHAR2(2000);
11159       l_debug_mode         VARCHAR2(30);
11160       l_module_name        VARCHAR2(100):='pa.plsql.pa_fp_planning_transaction_pub.check_and_create_task_rec_info' ;
11161       l_rec_exsists        VARCHAR2(1);
11162   --End of variables used for debugging
11163 
11164 
11165       l_elem_ver_id_cnt             NUMBER := 0;
11166       l_ra_id_cnt                   NUMBER := 0;
11167       l_out_tbl_index               NUMBER := 1;
11168       l_add_tbl_index               NUMBER := 1;
11169       l_res_class_code_tbl          SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
11170       l_ra_id_tbl                   SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
11171       l_element_version_id_tbl      SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
11172       l_planning_start_date_tbl     SYSTEM.PA_DATE_TBL_TYPE        := SYSTEM.PA_DATE_TBL_TYPE();
11173       l_planning_end_date_tbl       SYSTEM.PA_DATE_TBL_TYPE        := SYSTEM.PA_DATE_TBL_TYPE();
11174       l_planned_people_effort_tbl   SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
11175       l_raw_cost_tbl                SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
11176       l_burdened_cost_tbl           SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
11177       l_index                       NUMBER;
11178       l_element_version_id_tbl_tmp  SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
11179       l_planning_start_date_tbl_tmp SYSTEM.PA_DATE_TBL_TYPE        := SYSTEM.PA_DATE_TBL_TYPE();
11180       l_planning_end_date_tbl_tmp   SYSTEM.PA_DATE_TBL_TYPE        := SYSTEM.PA_DATE_TBL_TYPE();
11181       l_planned_effort_tbl_tmp      SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
11182       l_res_assignment_id_tbl_tmp   SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
11183       l_planned_ppl_effort_tbl_tmp  SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
11184       l_raw_cost_tbl_tmp            SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
11185       l_burdened_cost_tbl_tmp       SYSTEM.PA_NUM_TBL_TYPE         := SYSTEM.PA_NUM_TBL_TYPE();
11186 
11187 
11188       cursor c_res_assignment_id(c_wbs_element_version_id pa_resource_assignments.wbs_element_version_id%TYPE) IS
11189       SELECT resource_assignment_id,resource_class_code
11190       FROM pa_resource_assignments
11191       WHERE wbs_element_version_id = c_wbs_element_version_id
11192       AND ta_display_flag = 'N' -- Bug 3749516
11193       AND resource_class_code in (PA_FP_CONSTANTS_PKG.G_RESOURCE_CLASS_CODE_PPL);
11194 
11195   BEGIN
11196 
11197     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
11198     l_debug_mode := NVL(l_debug_mode, 'N');
11199     x_msg_count := 0;
11200     x_return_status := FND_API.G_RET_STS_SUCCESS;
11201 IF l_debug_mode = 'Y' THEN
11202     PA_DEBUG.Set_Curr_Function( p_function   => 'fp_planning_txn_pub.chk_and_create_task',
11203                                 p_debug_mode => l_debug_mode );
11204 END IF;
11205 -----------------------------------------------------------------------
11206 -- Input Parameter Validation. If no element version id is passed then
11207 -- return.
11208 -----------------------------------------------------------------------
11209     l_elem_ver_id_cnt := p_element_version_id_tbl.COUNT;
11210 
11211     --Extending the local pl/sql tables. The length of the local tables should be element version id count
11212     IF l_debug_mode = 'Y' THEN
11213         pa_debug.g_err_stage:='Extending the local pl/sql tbls';
11214         print_msg(pa_debug.g_err_stage,l_module_name);
11215     END IF;
11216     x_element_version_id_tbl     := SYSTEM.PA_NUM_TBL_TYPE();
11217     x_planning_start_date_tbl    := SYSTEM.PA_DATE_TBL_TYPE();
11218     x_planning_end_date_tbl      := SYSTEM.PA_DATE_TBL_TYPE();
11219     x_planned_effort_tbl         := SYSTEM.PA_NUM_TBL_TYPE();
11220     x_resource_assignment_id_tbl := SYSTEM.PA_NUM_TBL_TYPE();
11221     x_raw_cost_tbl               := SYSTEM.PA_NUM_TBL_TYPE();
11222     x_burdened_cost_tbl          := SYSTEM.PA_NUM_TBL_TYPE();
11223     l_element_version_id_tbl.extend(l_elem_ver_id_cnt);
11224     l_planning_start_date_tbl.extend(l_elem_ver_id_cnt);
11225     l_planning_end_date_tbl.extend(l_elem_ver_id_cnt);
11226     l_planned_people_effort_tbl.extend(l_elem_ver_id_cnt);
11227     l_raw_cost_tbl.extend(l_elem_ver_id_cnt);
11228     l_burdened_cost_tbl.extend(l_elem_ver_id_cnt);
11229     x_element_version_id_tbl.extend(l_elem_ver_id_cnt);
11230     x_planning_start_date_tbl.extend(l_elem_ver_id_cnt);
11231     x_planning_end_date_tbl.extend(l_elem_ver_id_cnt);
11232     x_planned_effort_tbl.extend(l_elem_ver_id_cnt);
11233     x_resource_assignment_id_tbl.extend(l_elem_ver_id_cnt);
11234     x_raw_cost_tbl.extend(l_elem_ver_id_cnt);
11235     x_burdened_cost_tbl.extend(l_elem_ver_id_cnt);
11236 
11237     IF l_elem_ver_id_cnt = 0 THEN
11238         IF l_debug_mode = 'Y' THEN
11239            pa_debug.g_err_stage:='Validating input parameters - No element version id is passed - return to calling entity';
11240            print_msg(pa_debug.g_err_stage,l_module_name);
11241            pa_debug.reset_curr_function;
11242 	END IF;
11243        RETURN;
11244     END IF;
11245 
11246 --------------------------------------------------------------------------
11247 -- Logic manifested below ------------------------------------------------
11248 -- -----------------------------------------------------------------------
11249 -- For each record of element version id in input parameter
11250 -- p_element_version_id_tbl, we scan through pa_resource_assignments table
11251 -- and bulk fetch the resource_class_code and resource_assignment_id into
11252 -- local PLSql tables. Now we have a inner loop which we run for each of
11253 -- the resouce_assignment_id fetched corresponding to the elem_ver_id of
11254 -- the parent loop. In the inner loop we populate the corresponding out
11255 -- param tables - x_resource_assignment_id_tbl,x_element_version_id_tbl
11256 -- ,x_planning_end_date_tbl, x_planning_start_date_tbl and
11257 -- x_planned_effort_tbl.
11258 --
11259 -- In case if there no records are retrieved in pa_resource_assignments
11260 -- for any element version id then we populate a separate set of tables
11261 -- from the corresponding IN parameters as l_element_version_id_tbl,
11262 -- l_planning_start_date_tbl,l_planning_end_date_tbl,
11263 -- l_planned_people_effort_tbl.
11264 -- Bug 3720357 - l_raw_cost_tbl and l_burdened_cost_tbl also added.
11265 -- This set of local parameters form the IN parameters for Calling API
11266 -- add_planning_transactions.
11267 --------------------------------------------------------------------------
11268 
11269 
11270    IF l_debug_mode = 'Y' THEN
11271            pa_debug.g_err_stage:='Iterating through the IN Parameters and Populating the Out parameters.';
11272            print_msg(pa_debug.g_err_stage,l_module_name);
11273    END IF;
11274 
11275 /* Loop through all element version ids and retrieve ra_id and res_class_code */
11276        FOR i IN p_element_version_id_tbl.FIRST .. p_element_version_id_tbl.LAST LOOP
11277            OPEN c_res_assignment_id(p_element_version_id_tbl(i));
11278                 FETCH c_res_assignment_id BULK COLLECT INTO l_ra_id_tbl,l_res_class_code_tbl;
11279                       l_ra_id_cnt := l_ra_id_tbl.COUNT;
11280                       IF l_ra_id_cnt>0 THEN
11281                           l_rec_exsists := 'Y';
11282                       ELSE
11283                           l_rec_exsists := 'N';
11284                       END IF;
11285 
11286 
11287 /* If there is 1 records in resource_assignments for people then we do not need to call add_planning transaction */
11288                       IF l_ra_id_cnt = 1 THEN
11289 
11290                          FOR j IN l_ra_id_tbl.FIRST .. l_ra_id_tbl.LAST LOOP
11291                              x_resource_assignment_id_tbl(l_out_tbl_index) := l_ra_id_tbl(j);
11292                              IF p_planning_start_date_tbl.EXISTS(i) THEN
11293                                 x_planning_start_date_tbl(l_out_tbl_index) := p_planning_start_date_tbl(i);
11294                              END IF;
11295 
11296                              IF p_planning_end_date_tbl.EXISTS(i) THEN
11297                                 x_planning_end_date_tbl(l_out_tbl_index) := p_planning_end_date_tbl(i);
11298                              END IF;
11299 /* In Update Flow for Workplan Context FND_API.G_MISS_XXXX will be considered
11300    as a valid value for effort/Quantity -- Bug 3640498*/
11301                              IF (p_raw_cost_tbl.EXISTS(i)) THEN --AND
11302 --                                NVL(p_raw_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
11303 --                                p_raw_cost_tbl(i) <> 0) THEN
11304                                 x_raw_cost_tbl(l_out_tbl_index) := p_raw_cost_tbl(i);
11305                              END IF;
11306 
11307                              IF (p_burdened_cost_tbl.EXISTS(i)) THEN -- AND
11308 --                                NVL(p_burdened_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
11309 --                                p_burdened_cost_tbl(i) <> 0) THEN
11310                                 x_burdened_cost_tbl(l_out_tbl_index) := p_burdened_cost_tbl(i);
11311                              END IF;
11312 
11313                              x_element_version_id_tbl(l_out_tbl_index) := p_element_version_id_tbl(i);
11314                              IF l_res_class_code_tbl(j) = PA_FP_CONSTANTS_PKG.G_RESOURCE_CLASS_CODE_PPL THEN
11315                                 IF (p_planned_people_effort_tbl.EXISTS(i)) THEN --AND
11316 --                                   (nvl(p_planned_people_effort_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) AND
11317 --                                   (p_planned_people_effort_tbl(i) > 0)) THEN
11318                                     x_planned_effort_tbl(l_out_tbl_index) := p_planned_people_effort_tbl(i);
11319                                 END IF;
11320                              END IF;
11321 
11322                              l_out_tbl_index := l_out_tbl_index + 1;
11323                          END LOOP;
11324                       END IF;
11325 
11326 /* If there are no records in resource_assignments we have to populate the local PLSql tables to call
11327    add_planning_transactions */
11328                 IF l_rec_exsists = 'N' THEN
11329 
11330                    --Add the record only if either people or equipment effort exists
11331                    IF ((p_planned_people_effort_tbl.EXISTS(i)) AND
11332                       (nvl(p_planned_people_effort_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) AND
11333                       /*Bug fix:5726773 (p_planned_people_effort_tbl(i) > 0))*/
11334  	              (p_planned_people_effort_tbl(i) is NOT NULL))
11335                       OR
11336                       (p_raw_cost_tbl.EXISTS(i) AND
11337                            NVL(p_raw_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
11338                            /* bug fix:Bug fix:5726773 p_raw_cost_tbl(i) <> 0) */
11339  	                   p_raw_cost_tbl(i) is NOT NULL )
11340                       OR
11341                       (p_burdened_cost_tbl.EXISTS(i) AND
11342                            NVL(p_burdened_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
11343                            /* bug fix:Bug fix:5726773 P_burdened_cost_tbl(i) <> 0) THEN */
11344  	                   P_burdened_cost_tbl(i) is NOT NULL) THEN
11345 
11346                        l_element_version_id_tbl(l_add_tbl_index)    := p_element_version_id_tbl(i);
11347                        IF p_planning_start_date_tbl.EXISTS(i) THEN
11348                            l_planning_start_date_tbl(l_add_tbl_index) := p_planning_start_date_tbl(i);
11349                        END IF;
11350 
11351                        IF p_planning_end_date_tbl.EXISTS(i) THEN
11352                            l_planning_end_date_tbl(l_add_tbl_index) := p_planning_end_date_tbl(i);
11353                        END IF;
11354 
11355                        IF ((p_planned_people_effort_tbl.EXISTS(i)) AND
11356                           (nvl(p_planned_people_effort_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) AND
11357                           /* bug fix:5726773 (p_planned_people_effort_tbl(i) > 0)) THEN */
11358  	                  (p_planned_people_effort_tbl(i) is NOT NULL )) THEN
11359                        l_planned_people_effort_tbl(l_add_tbl_index) := p_planned_people_effort_tbl(i);
11360                        END IF;
11361 
11362                        IF (p_raw_cost_tbl.EXISTS(i) AND
11363                            NVL(p_raw_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
11364                            /* bug fix:Bug fix:5726773 p_raw_cost_tbl(i) <> 0) THEN */
11365  	                   p_raw_cost_tbl(i) is NOT NULL ) THEN
11366                            l_raw_cost_tbl(l_add_tbl_index) := p_raw_cost_tbl(i);
11367                        END IF;
11368 
11369                        IF (p_burdened_cost_tbl.EXISTS(i) AND
11370                            NVL(p_burdened_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
11371                            /* bug fix:Bug fix:572677312/29/2006 P_burdened_cost_tbl(i) <> 0) THEN */
11372  	                   P_burdened_cost_tbl(i) is NOT NULL) THEN
11373                            l_burdened_cost_tbl(l_add_tbl_index) := p_burdened_cost_tbl(i);
11374                        END IF;
11375                       l_add_tbl_index := l_add_tbl_index + 1;
11376 
11377                    END IF;
11378                 END IF;
11379 
11380            CLOSE c_res_assignment_id;
11381        END LOOP;
11382 
11383    --Prepare the pl/sql tbls that should be returned from the API
11384     IF l_debug_mode = 'Y' THEN
11385            pa_debug.g_err_stage:='Making a copy of the pl/sql tables which should be returned by this API';
11386            print_msg(pa_debug.g_err_stage,l_module_name);
11387     END IF;
11388 
11389 
11390     l_element_version_id_tbl_tmp.extend(l_out_tbl_index-1);
11391     l_planning_start_date_tbl_tmp.extend(l_out_tbl_index-1);
11392     l_planning_end_date_tbl_tmp.extend(l_out_tbl_index-1);
11393     l_planned_effort_tbl_tmp.extend(l_out_tbl_index-1);
11394     l_res_assignment_id_tbl_tmp.extend(l_out_tbl_index-1);
11395     l_raw_cost_tbl_tmp.extend(l_out_tbl_index-1);
11396     l_burdened_cost_tbl_tmp.extend(l_out_tbl_index-1);
11397 
11398    FOR i in 1..l_out_tbl_index-1 LOOP
11399 
11400         l_element_version_id_tbl_tmp (i):=  x_element_version_id_tbl    (i);
11401         l_planning_start_date_tbl_tmp(i):=  x_planning_start_date_tbl   (i);
11402         l_planning_end_date_tbl_tmp  (i):=  x_planning_end_date_tbl     (i);
11403         l_planned_effort_tbl_tmp     (i):=  x_planned_effort_tbl        (i);
11404         l_res_assignment_id_tbl_tmp  (i):=  x_resource_assignment_id_tbl(i);
11405         l_raw_cost_tbl_tmp           (i):=  x_raw_cost_tbl              (i);
11406         l_burdened_cost_tbl_tmp      (i):=  x_burdened_cost_tbl         (i);
11407 
11408    END LOOP;
11409 
11410    x_element_version_id_tbl    :=l_element_version_id_tbl_tmp ;
11411    x_planning_start_date_tbl   :=l_planning_start_date_tbl_tmp;
11412    x_planning_end_date_tbl     :=l_planning_end_date_tbl_tmp  ;
11413    x_planned_effort_tbl        :=l_planned_effort_tbl_tmp     ;
11414    x_resource_assignment_id_tbl:=l_res_assignment_id_tbl_tmp  ;
11415    x_raw_cost_tbl              :=l_raw_cost_tbl_tmp           ;
11416    x_burdened_cost_tbl         :=l_burdened_cost_tbl_tmp      ;
11417 
11418    --Prepare the pl/sql tbls that should be passed to add planning txn APIs
11419    IF l_debug_mode = 'Y' THEN
11420            pa_debug.g_err_stage:='Making a copy of the pl/sql tables which should be used in calling add plan txn api';
11421            print_msg(pa_debug.g_err_stage,l_module_name);
11422     END IF;
11423 
11424     l_element_version_id_tbl_tmp.DELETE;
11425     l_planning_start_date_tbl_tmp.DELETE;
11426     l_planning_end_date_tbl_tmp.DELETE;
11427     l_raw_cost_tbl_tmp.DELETE;
11428     l_burdened_cost_tbl_tmp.DELETE;
11429     l_element_version_id_tbl_tmp.extend(l_add_tbl_index-1);
11430     l_planning_start_date_tbl_tmp.extend(l_add_tbl_index-1);
11431     l_planning_end_date_tbl_tmp.extend(l_add_tbl_index-1);
11432     l_planned_ppl_effort_tbl_tmp.extend(l_add_tbl_index-1);
11433     l_raw_cost_tbl_tmp.extend(l_add_tbl_index-1);
11434     l_burdened_cost_tbl_tmp.extend(l_add_tbl_index-1);
11435 
11436    FOR i in 1..l_add_tbl_index-1 LOOP
11437 
11438         l_element_version_id_tbl_tmp (i):=  l_element_version_id_tbl    (i);
11439 
11440         l_planning_start_date_tbl_tmp(i):=  l_planning_start_date_tbl   (i);
11441 
11442         l_planning_end_date_tbl_tmp  (i):=  l_planning_end_date_tbl     (i);
11443 
11444         l_planned_ppl_effort_tbl_tmp (i):=  l_planned_people_effort_tbl (i) ;
11445 
11446         l_raw_cost_tbl_tmp (i)          :=  l_raw_cost_tbl (i) ;
11447 
11448         l_burdened_cost_tbl_tmp (i)     :=  l_burdened_cost_tbl (i)  ;
11449 
11450    END LOOP;
11451     l_element_version_id_tbl   :=l_element_version_id_tbl_tmp ;
11452     l_planning_start_date_tbl  :=l_planning_start_date_tbl_tmp;
11453     l_planning_end_date_tbl    :=l_planning_end_date_tbl_tmp  ;
11454     l_planned_people_effort_tbl:=l_planned_ppl_effort_tbl_tmp ;
11455     l_raw_cost_tbl             :=l_raw_cost_tbl_tmp ;
11456     l_burdened_cost_tbl        :=l_burdened_cost_tbl_tmp ;
11457    IF l_debug_mode = 'Y' THEN
11458            pa_debug.g_err_stage:='Calling add_planning_transactions API if index of param tables if greater than 1, l_add_tbl_index:.' || l_add_tbl_index;
11459            print_msg(pa_debug.g_err_stage,l_module_name);
11460    END IF;
11461 
11462 
11463    IF l_add_tbl_index > 1 THEN
11464 
11465      add_planning_transactions
11466    (
11467        p_context                     => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
11468       ,p_project_id                  => p_project_id
11469       ,p_struct_elem_version_id      => p_struct_elem_version_id
11470       ,p_budget_version_id           => NULL
11471       ,p_task_elem_version_id_tbl    => l_element_version_id_tbl
11472       ,p_task_name_tbl               => SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
11473       ,p_task_number_tbl             => SYSTEM.PA_VARCHAR2_100_TBL_TYPE()
11474       ,p_start_date_tbl              => l_planning_start_date_tbl
11475       ,p_end_date_tbl                => l_planning_end_date_tbl
11476       ,p_planned_people_effort_tbl   => l_planned_people_effort_tbl
11477       ,p_latest_eff_pub_flag_tbl     => SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
11478       ,p_resource_list_member_id_tbl => SYSTEM.PA_NUM_TBL_TYPE()
11479       ,p_quantity_tbl                => SYSTEM.PA_NUM_TBL_TYPE()
11480       ,p_currency_code_tbl           => SYSTEM.PA_VARCHAR2_15_TBL_TYPE()
11481       ,p_raw_cost_tbl                => l_raw_cost_tbl
11482       ,p_burdened_cost_tbl           => l_burdened_cost_tbl
11483       ,p_revenue_tbl                 => SYSTEM.PA_NUM_TBL_TYPE()
11484       ,p_cost_rate_tbl               => SYSTEM.PA_NUM_TBL_TYPE()
11485       ,p_bill_rate_tbl               => SYSTEM.PA_NUM_TBL_TYPE()
11486       ,p_burdened_rate_tbl           => SYSTEM.PA_NUM_TBL_TYPE()
11487       ,p_apply_progress_flag         => p_apply_progress_flag
11488       ,x_return_status               => l_return_status
11489       ,x_msg_count                   => l_msg_count
11490       ,x_msg_data                    => l_msg_data
11491    );
11492 
11493     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11494        IF l_debug_mode = 'Y' THEN
11495           pa_debug.g_err_stage:='Called API PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions ,api returned error';
11496           pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
11497        END IF;
11498        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11499     END IF;
11500 
11501     END IF;
11502 
11503 	IF l_debug_mode = 'Y' THEN
11504 	   pa_debug.reset_curr_function;
11505 	END IF;
11506   EXCEPTION
11507       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11508            l_msg_count := FND_MSG_PUB.count_msg;
11509              IF l_msg_count = 1 THEN
11510                 PA_INTERFACE_UTILS_PUB.get_messages
11511                      (p_encoded        => FND_API.G_TRUE
11512                       ,p_msg_index      => 1
11513                       ,p_msg_count      => l_msg_count
11514                       ,p_msg_data       => l_msg_data
11515                       ,p_data           => l_data
11516                       ,p_msg_index_out  => l_msg_index_out);
11517                 x_msg_data := l_data;
11518                 x_msg_count := l_msg_count;
11519              ELSE
11520                 x_msg_count := l_msg_count;
11521              END IF;
11522            x_return_status := FND_API.G_RET_STS_ERROR;
11523 	IF l_debug_mode = 'Y' THEN
11524            pa_debug.reset_curr_function;
11525 	END IF;
11526      WHEN OTHERS THEN
11527           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11528           x_msg_count     := 1;
11529           x_msg_data      := SQLERRM;
11530           FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'PA_FP_PLANNING_TRANSACTION_PUB'
11531                                   ,p_procedure_name  => 'check_and_create_task_rec_info');
11532 
11533            IF l_debug_mode = 'Y' THEN
11534              pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
11535              pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
11536              pa_debug.reset_curr_function;
11537 	  END IF;
11538           RAISE;
11539 
11540   END check_and_create_task_rec_info;
11541 
11542 /*=============================================================================
11543  This api would be called for a finplan version, whenever there is a change
11544  either in planning level or resource list or time phase or rbs version.
11545 
11546  Logic: If no change in any of the parameters, simply return
11547         If planning level changes
11548           all the resource assignments would be deleted
11549           default planning resources are created
11550         If resource list changes
11551           all the task, resource mappings are deleted
11552           for task, financial element planning resources are updated with
11553           new rlm id and rbs id
11554         If RBS changes
11555           all the res assignments are updated with new rbs mapping
11556 
11557  Bug 3867302  Sep 21 2004 For ci versions reporting data is not maintained
11558 
11559  -- Note : This api is also called from PaFinPlanControlItemImpactAMImpl.java with p_time_phase_change_flag as 'Y' to
11560  --        delete the budget lines.
11561 
11562 -- Bug 4724017: CDM Enhancement: Changes in behavior:
11563               Whenever the planning level is changed for an existing version,
11564               default planning transaction would be created only for the vesions
11565               which uses an uncategorized resource list.
11566 -- Bug 5754758: Modified to delete lines from pa_resource_asgn_curr before going to
11567                create_default_plan_txn api.
11568 
11569 ==============================================================================*/
11570 
11571 PROCEDURE Refresh_Plan_Txns(
11572            p_budget_version_id         IN   pa_budget_versions.budget_version_id%TYPE
11573           ,p_plan_level_change         IN   VARCHAR2
11574           ,p_resource_list_change      IN   VARCHAR2
11575           ,p_rbs_version_change        IN   VARCHAR2
11576           ,p_time_phase_change_flag    IN   VARCHAR2
11577 	  ,p_ci_ver_agr_change_flag    IN   VARCHAR2 DEFAULT 'N' --IPM Arch Enhancement Bug 4865563
11578           ,p_rev_der_method_change     IN   VARCHAR2 DEFAULT 'N' --bug 5152892
11579           ,x_return_status             OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11580           ,x_msg_count                 OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
11581           ,x_msg_data                  OUT  NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
11582 AS
11583     --Start of variables used for debugging
11584     l_return_status      VARCHAR2(1);
11585     l_msg_count          NUMBER := 0;
11586     l_msg_data           VARCHAR2(2000);
11587     l_data               VARCHAR2(2000);
11588     l_msg_index_out      NUMBER;
11589     l_debug_mode         VARCHAR2(30);
11590     l_error_msg_code     VARCHAR2(30);
11591 
11592     l_people_res_class_rlm_id    pa_resource_list_members.resource_list_member_id%TYPE;
11593     l_equip_res_class_rlm_id     pa_resource_list_members.resource_list_member_id%TYPE;
11594     l_fin_res_class_rlm_id       pa_resource_list_members.resource_list_member_id%TYPE;
11595     l_mat_res_class_rlm_id       pa_resource_list_members.resource_list_member_id%TYPE;
11596 
11597     l_txn_source_id_tbl          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11598     l_res_list_member_id_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11599     l_rbs_element_id_tbl         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11600     l_txn_accum_header_id_tbl    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11601 
11602     l_budget_version_id_tbl      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11603 
11604     -- IPM changes Bug 5003827 Issue 22
11605     l_fp_cols_rec                   pa_fp_gen_amount_utils.fp_cols;
11606     l_delete_ra_id_tbl           SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11607     l_delete_flag VARCHAR2(1); -- Bug 5003827 Issue 28
11608     l_rollup_flag  VARCHAR2(1); -- Bug 5003827 Issue 28
11609     -- END of IPM changes Bug 5003827 Issue 22
11610 
11611     CURSOR  budget_version_info_cur IS
11612     SELECT  bv.project_id project_id
11613            ,bv.resource_list_id
11614            ,Decode(bv.version_type
11615                     ,'COST',    cost_fin_plan_level_code
11616                     ,'REVENUE', revenue_fin_plan_level_code
11617                     ,'ALL',     all_fin_plan_level_code) fin_plan_level_code
11618            ,pfo.rbs_version_id         rbs_version_id
11619            ,pfo.fin_plan_type_id       fin_plan_type_id
11620            ,bv.ci_id                   ci_id
11621       FROM  pa_proj_fp_options pfo, pa_budget_versions bv
11622      WHERE  bv.project_id           = pfo.project_id
11623        AND  pfo.fin_plan_version_id = bv.budget_version_id
11624        AND  bv.budget_version_id    = p_budget_version_id;
11625 
11626    budget_version_info_rec budget_version_info_cur%ROWTYPE;
11627 
11628    -- added for bug 4724017:
11629    l_res_list_uncategorized_flag   pa_resource_lists_all_bg.uncategorized_flag%TYPE;
11630    --Bug 13701718 CBS related Chnages
11631    l_res_class_flag                  pa_resource_lists_all_bg.resource_class_flag%TYPE := 'Y';
11632 BEGIN
11633 
11634     x_msg_count := 0;
11635     x_return_status := FND_API.G_RET_STS_SUCCESS;
11636 
11637     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
11638     l_debug_mode := NVL(l_debug_mode, 'Y');
11639 
11640     -- Set curr function
11641 IF l_debug_mode = 'Y' THEN
11642     PA_DEBUG.set_curr_function(
11643                 p_function   =>'PA_FP_PLANNING_TRANSACTION_PUB.Refresh_Plan_Txns'
11644                ,p_debug_mode => l_debug_mode );
11645 END IF;
11646     -- Check for business rules violations
11647 
11648     IF l_debug_mode = 'Y' THEN
11649         pa_debug.g_err_stage:='Validating input parameters';
11650         pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11651     END IF;
11652 
11653     IF (p_budget_version_id   IS  NULL)
11654     THEN
11655 
11656         IF l_debug_mode = 'Y' THEN
11657            pa_debug.g_err_stage:='p_budget_version_id = '|| p_budget_version_id;
11658            pa_debug.write('Refresh_Plan_Txns: ' ||g_module_name,pa_debug.g_err_stage,5);
11659         END IF;
11660 
11661         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11662                              p_msg_name       => 'PA_FP_INV_PARAM_PASSED');
11663 
11664         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11665 
11666     END IF;
11667 
11668     -- If there is no change in planning level or res list or RBS return
11669 
11670     IF  nvl(p_plan_level_change, 'N')      = 'N' AND
11671         nvl(p_resource_list_change, 'N')   = 'N' AND
11672         nvl(p_rbs_version_change, 'N')     = 'N' AND
11673         nvl(p_time_phase_change_flag, 'N') = 'N' AND
11674         nvl(p_rev_der_method_change,'N')   = 'N' --Bug 5462471
11675     THEN
11676         IF l_debug_mode = 'Y' THEN
11677             pa_debug.g_err_stage:='No change required, Exiting Refresh_Plan_Txns';
11678             pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11679            -- reset curr function
11680           pa_debug.Reset_Curr_Function();
11681 	END IF;
11682         RETURN;
11683     END IF;
11684 
11685     OPEN budget_version_info_cur;
11686     FETCH budget_version_info_cur INTO budget_version_info_rec;
11687     CLOSE budget_version_info_cur;
11688 
11689     IF  nvl(p_plan_level_change, 'N')      = 'Y' OR
11690         nvl(p_resource_list_change, 'N')   = 'Y' OR
11691         nvl(p_time_phase_change_flag, 'N') = 'Y' OR
11692         nvl(p_rev_der_method_change,'N')   = 'Y' --Bug 5462471
11693 
11694     THEN
11695           -- Delete all the budget lines for the budget version
11696 
11697           -- Bug Fix: 4569365. Removed MRC code.
11698           /*
11699           DELETE
11700           FROM    pa_mc_budget_lines
11701           WHERE   budget_version_id = p_budget_version_id;
11702           */
11703 
11704           DELETE
11705           FROM    pa_budget_lines
11706           WHERE   budget_version_id = p_budget_version_id;
11707 
11708           -- --IPM Arch Enhancement Bug 4865563, Bug 5003827 Issue 28
11709           IF (nvl(p_ci_ver_agr_change_flag,'N') = 'Y'
11710               OR nvl(p_time_phase_change_flag, 'N') = 'Y') THEN
11711 
11712             pa_fp_gen_amount_utils.get_plan_version_dtls
11713              (p_budget_version_id  => p_budget_version_id,
11714               x_fp_cols_rec        => l_fp_cols_rec,
11715               x_return_status      => x_return_status,
11716               x_msg_count          => x_msg_count,
11717               x_msg_data           => x_msg_data);
11718 
11719             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11720 
11721               IF l_debug_mode = 'Y' THEN
11722                 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
11723                 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
11724               END IF;
11725               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11726             END IF;
11727 
11728             -- Bug 5003827 Issue 28
11729             IF nvl(p_ci_ver_agr_change_flag,'N') = 'Y' THEN
11730               l_delete_flag := 'Y';
11731               l_rollup_flag := 'N';
11732             ELSE -- nvl(p_time_phase_change_flag, 'N') = 'Y'
11733 
11734               l_delete_flag := 'N';
11735               l_rollup_flag := 'Y';
11736             END IF;
11737             -- END Bug 5003827 Issue 28
11738 
11739             pa_res_asg_currency_pub.maintain_data(
11740               p_fp_cols_rec                  => l_fp_cols_rec,
11741               p_calling_module               => 'UPDATE_PLAN_TRANSACTION',
11742               p_delete_flag                  =>  l_delete_flag, -- Bug 5003827 Issue 28
11743               p_copy_flag                    => 'N',
11744               p_src_version_id               => NULL,
11745               p_copy_mode                    => NULL,
11746               p_rollup_flag                  => l_rollup_flag, -- Bug 5003827 Issue 28
11747               p_version_level_flag           => 'Y',
11748               p_called_mode                  => 'SELF_SERVICE',
11749               x_return_status                => x_return_status,
11750               x_msg_count                    => x_msg_count,
11751               x_msg_data                     => x_msg_data
11752             );
11753 
11754             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11755 
11756               IF l_debug_mode = 'Y' THEN
11757                 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
11758                 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
11759               END IF;
11760               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11761             END IF;
11762 
11763           END IF;
11764           ----IPM Arch Enhancement Bug 4865563
11765 
11766 
11767           IF  nvl(p_plan_level_change, 'N')      = 'Y' OR
11768           nvl(p_rev_der_method_change,'N')   = 'Y' THEN --Bug 5462471
11769               -- Delete all the planning transactions for the version.
11770 
11771               IF l_debug_mode = 'Y' THEN
11772                    pa_debug.g_err_stage:='Deleting all the resource assignment records for the version';
11773                    pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11774               END IF;
11775 
11776               DELETE
11777               FROM   pa_resource_assignments
11778               WHERE  budget_version_id = p_budget_version_id
11779               -- IPM changes Bug 5003827 Issue 22
11780               RETURNING resource_assignment_id  BULK COLLECT INTO l_delete_ra_id_tbl;
11781               /* Bug 5754758 - Commenting the code, as the maintain_data is now called in version level mode to delete the RACs.
11782               IF l_delete_ra_id_tbl.COUNT > 0 THEN
11783                  FORALL i IN l_delete_ra_id_tbl.first .. l_delete_ra_id_tbl.last
11784                    INSERT INTO pa_resource_asgn_curr_tmp
11785                         (RA_TXN_ID
11786                         ,RESOURCE_ASSIGNMENT_ID
11787                         ,DELETE_FLAG
11788                         )
11789                         SELECT pa_resource_asgn_curr_s.NEXTVAL
11790                               ,l_delete_ra_id_tbl(i)
11791                               ,'Y'
11792                         FROM DUAL;
11793               END IF;
11794               -- END of IPM changes Bug 5003827 Issue 22
11795                */
11796          ----IPM Arch Enhancement Bug 5754758/4865563
11797           IF l_delete_ra_id_tbl.COUNT > 0 THEN --{
11798              pa_fp_gen_amount_utils.get_plan_version_dtls
11799              (p_budget_version_id  => p_budget_version_id,
11800               x_fp_cols_rec        => l_fp_cols_rec,
11801               x_return_status      => x_return_status,
11802               x_msg_count          => x_msg_count,
11803               x_msg_data           => x_msg_data);
11804 
11805             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11806 
11807               IF l_debug_mode = 'Y' THEN
11808                 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
11809                 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
11810               END IF;
11811               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11812             END IF;
11813 
11814             pa_res_asg_currency_pub.maintain_data(
11815               p_fp_cols_rec                  => l_fp_cols_rec,
11816               p_calling_module               => 'UPDATE_PLAN_TRANSACTION',
11817               p_delete_flag                  =>  'Y',
11818               p_copy_flag                    => 'N',
11819               p_src_version_id               => NULL,
11820               p_copy_mode                    => NULL,
11821               p_rollup_flag                  => 'N',
11822               p_version_level_flag           => 'Y',
11823               p_called_mode                  => 'SELF_SERVICE',
11824               x_return_status                => x_return_status,
11825               x_msg_count                    => x_msg_count,
11826               x_msg_data                     => x_msg_data
11827             );
11828 
11829             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11830 
11831               IF l_debug_mode = 'Y' THEN
11832                 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
11833                 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
11834               END IF;
11835               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11836             END IF;
11837 
11838           END IF;
11839           ----IPM Arch Enhancement Bug 5754758/4865563
11840 
11841               -- bug 4724017: Checking for categorized resource list to avoid
11842               -- calling create_default_task_plan_txns, not to create default
11843               -- planning txns for categorized RLs, when planning level changes.
11844               IF l_debug_mode = 'Y' THEN
11845                  pa_debug.g_err_stage:='Fetching uncategorized flag when planning level changes';
11846                  pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11847               END IF;
11848               BEGIN
11849                 SELECT nvl(uncategorized_flag,'N')
11850                 INTO   l_res_list_uncategorized_flag
11851                 FROM   pa_resource_lists_all_bg
11852                 WHERE  resource_list_id = budget_version_info_rec.resource_list_id;
11853 
11854                 IF l_debug_mode = 'Y' THEN
11855                     pa_debug.g_err_stage:='l_res_list_uncategorized_flag: ' || l_res_list_uncategorized_flag;
11856                     pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11857                 END IF;
11858               EXCEPTION
11859                 WHEN NO_DATA_FOUND THEN
11860                     IF l_debug_mode = 'Y' THEN
11861                         pa_debug.g_err_stage:='No uncategorized flag found for the resource list id passed';
11862                         pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11863                     END IF;
11864                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11865               END;
11866 
11867               -- added for bug 4724017:
11868               -- Creation of default planning transaction is not done for versions
11869               -- being created with categorized resource list.
11870               IF l_res_list_uncategorized_flag = 'Y' THEN
11871                   -- Insert default task planning trasaction for the version
11872 
11873                   IF l_debug_mode = 'Y' THEN
11874                       pa_debug.g_err_stage:='Calling pa_fp_planning_transaction_pub.create_default_task_plan_txns';
11875                       pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11876                   END IF;
11877 
11878                   pa_fp_planning_transaction_pub.create_default_task_plan_txns (
11879                                p_budget_version_id        =>   p_budget_version_id
11880                               ,p_version_plan_level_code  =>   budget_version_info_rec.fin_plan_level_code
11881                               ,x_return_status            =>   x_return_status
11882                               ,x_msg_count                =>   x_msg_count
11883                               ,x_msg_data                 =>   x_msg_data );
11884 
11885                   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11886                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11887                   END IF;
11888 
11889               END IF; -- end bug 4724017
11890           END IF;
11891 
11892           IF  nvl(p_resource_list_change, 'N') = 'Y'  THEN
11893 
11894               -- Delete all the planning resources where neither rlmID is 0
11895               -- Or resource is 'FINANCIAL_ELEMENTS'
11896               -- Bug 3658232 added null handling for resource class flag
11897 	      --Bug 13701718 CBS related Chnages start here
11898               l_res_class_flag := PA_FP_GEN_AMOUNT_UTILS.get_src_resource_class_flag(p_budget_version_id);
11899 	      IF nvl(l_res_class_flag,'Y') = 'N' THEN
11900 	         DELETE FROM pa_resource_assignments
11901                  WHERE  budget_version_id = p_budget_version_id
11902 		 RETURNING resource_assignment_id BULK COLLECT INTO l_delete_ra_id_tbl;
11903 	      ELSE
11904                  DELETE FROM pa_resource_assignments
11905                  WHERE  budget_version_id = p_budget_version_id
11906                  AND
11907                  NOT (resource_class_code = 'FINANCIAL_ELEMENTS' AND nvl(resource_class_flag,'N') = 'Y')
11908                  -- IPM changes Bug 5003827 Issue 22
11909                  RETURNING resource_assignment_id BULK COLLECT INTO l_delete_ra_id_tbl;
11910               END IF;
11911 	      --Bug 13701718 CBS related Chnages end here
11912               IF l_delete_ra_id_tbl.COUNT > 0 THEN
11913                  FORALL i IN l_delete_ra_id_tbl.first .. l_delete_ra_id_tbl.last
11914                    INSERT INTO pa_resource_asgn_curr_tmp
11915                         (RA_TXN_ID
11916                         ,RESOURCE_ASSIGNMENT_ID
11917                         ,DELETE_FLAG
11918                         )
11919                         SELECT pa_resource_asgn_curr_s.NEXTVAL
11920                               ,l_delete_ra_id_tbl(i)
11921                               ,'Y'
11922                         FROM DUAL;
11923               END IF;
11924               -- END of IPM changes Bug 5003827 Issue 22
11925 
11926 
11927               -- Fetch rlm id of FINANCIAL ELEMENT resource class for new resource list id
11928 
11929               PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids
11930                    ( p_project_id                   =>    budget_version_info_rec.project_id
11931                     ,p_resource_list_id             =>    budget_version_info_rec.resource_list_id
11932                     ,x_people_res_class_rlm_id      =>    l_people_res_class_rlm_id
11933                     ,x_equip_res_class_rlm_id       =>    l_equip_res_class_rlm_id
11934                     ,x_fin_res_class_rlm_id         =>    l_fin_res_class_rlm_id
11935                     ,x_mat_res_class_rlm_id         =>    l_mat_res_class_rlm_id
11936                     ,x_return_status                =>    l_return_status
11937                     ,x_msg_count                    =>    l_msg_count
11938                     ,x_msg_data                     =>    l_msg_data);
11939 
11940               IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11941                   IF l_debug_mode = 'Y' THEN
11942                      pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
11943                      pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
11944                   END IF;
11945                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11946               END IF;
11947 
11948               -- Update all the task planning elements with new FINACIAL ELEMENT rlmid
11949               IF l_debug_mode = 'Y' THEN
11950                   pa_debug.g_err_stage:='Updaing res assignments with new FINANCIAL ELEMENTS rlmid : ' || l_fin_res_class_rlm_id;
11951                   pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11952               END IF;
11953 
11954               UPDATE pa_resource_assignments
11955               SET    resource_list_member_id  = l_fin_res_class_rlm_id
11956               WHERE  budget_version_id = p_budget_version_id;
11957               --AND    resource_class_code = 'FINANCIAL_ELEMENTS'  --Bug 4200168. RL/PL change both can not happen at the same time.
11958               --AND    resource_class_flag = 'Y';
11959 
11960           END IF;
11961 
11962           -- IPM changes Bug 5003827 Issue 22
11963           IF l_delete_ra_id_tbl.COUNT > 0 THEN --{
11964             pa_fp_gen_amount_utils.get_plan_version_dtls
11965              (p_project_id         => budget_version_info_rec.project_id,
11966               p_budget_version_id  => p_budget_version_id,
11967               x_fp_cols_rec        => l_fp_cols_rec,
11968               x_return_status      => x_return_status,
11969               x_msg_count          => x_msg_count,
11970               x_msg_data           => x_msg_data);
11971 
11972             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11973 
11974               IF l_debug_mode = 'Y' THEN
11975                 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
11976                 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
11977               END IF;
11978               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11979             END IF;
11980 
11981             pa_res_asg_currency_pub.maintain_data(
11982               p_fp_cols_rec                  => l_fp_cols_rec,
11983               p_calling_module               => 'UPDATE_PLAN_TRANSACTION',
11984               p_delete_flag                  => 'Y',
11985               p_copy_flag                    => 'N',
11986               p_src_version_id               => NULL,
11987               p_copy_mode                    => NULL,
11988               p_rollup_flag                  => 'N',
11989               p_version_level_flag           => 'N',
11990               p_called_mode                  => 'SELF_SERVICE',
11991               x_return_status                => x_return_status,
11992               x_msg_count                    => x_msg_count,
11993               x_msg_data                     => x_msg_data
11994             );
11995 
11996             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11997 
11998               IF l_debug_mode = 'Y' THEN
11999                 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
12000                 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
12001               END IF;
12002               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12003             END IF;
12004           END IF; --} IF l_delete_ra_id_tbl.COUNT > 0 THEN
12005           -- END of IPM changes Bug 5003827 Issue 22
12006 
12007 
12008           -- Calling the rollup api to correct the amounts related data in
12009           -- pa_budget_versions and pa_resource_assignments for the entire version
12010           PA_FP_ROLLUP_PKG.rollup_budget_version
12011                       (p_budget_version_id   => p_budget_version_id
12012                       ,p_entire_version     => 'Y'
12013                       ,x_return_status      => l_return_status
12014                       ,x_msg_count          => l_msg_count
12015                       ,x_msg_data           => l_msg_data);
12016 
12017           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12018                 IF l_debug_mode = 'Y' THEN
12019                      pa_debug.g_err_stage:='Called API PA_FP_ROLLUP_PKG.rollup_budget_version returned error';
12020                      pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
12021                 END IF;
12022                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12023           END IF;
12024     END IF;
12025 
12026     -- Note: As of now rbs can not be changed at version level.
12027     -- It can only be changed at plan type level. This has been
12028     -- the initial design and not changed
12029     IF nvl(p_rbs_version_change, 'N') = 'Y' AND
12030        (budget_version_info_rec.ci_id IS NULL) -- bug 3867302
12031     THEN
12032 
12033         Refresh_rbs_for_versions(
12034            p_project_id           => budget_version_info_rec.project_id
12035           ,p_fin_plan_type_id     => budget_version_info_rec.fin_plan_type_id
12036           ,p_calling_context      => 'SINGLE_VERSION'
12037           ,p_budget_version_id    => p_budget_version_id
12038           ,x_return_status        => l_return_status
12039           ,x_msg_count            => l_msg_count
12040           ,x_msg_data             => l_msg_data);
12041 
12042           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12043                 IF l_debug_mode = 'Y' THEN
12044                      pa_debug.g_err_stage:='Called API Refresh_rbs_for_versions returned error';
12045                      pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
12046                 END IF;
12047                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12048           END IF;
12049     END IF;
12050 
12051     -- If Planning Level, Resource list or Time phasing is changed, calling PJI apis for
12052     -- correct summarization data
12053     IF  (budget_version_info_rec.ci_id IS NULL) AND -- bug 3867302
12054         (nvl(p_rbs_version_change, 'N') = 'N') AND -- put for clarity
12055         (nvl(p_plan_level_change, 'N') = 'Y' OR
12056           nvl(p_resource_list_change, 'N') = 'Y' OR
12057           nvl(p_time_phase_change_flag, 'N') = 'Y' OR
12058           nvl(p_rev_der_method_change,'N') ='Y' )--Bug 5462471
12059     THEN
12060           -- populating the l_budget_version_id_tbl with p_budget_version_id
12061           l_budget_version_id_tbl := SYSTEM.pa_num_tbl_type(p_budget_version_id);
12062 
12063           IF l_debug_mode = 'Y' THEN
12064                pa_debug.g_err_stage:='Calling PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE';
12065                pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
12066           END IF;
12067 
12068           -- Call PJI delete api first to delete existing summarization data
12069           PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE (
12070                   p_fp_version_ids   => l_budget_version_id_tbl,
12071                   x_return_status    => l_return_status,
12072                   x_msg_code         => l_error_msg_code);
12073 
12074           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12075                 PA_UTILS.ADD_MESSAGE(p_app_short_name      => 'PA',
12076                                      p_msg_name            => l_error_msg_code);
12077                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12078           END IF;
12079 
12080           IF l_debug_mode = 'Y' THEN
12081                pa_debug.g_err_stage:='Call complete to PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE';
12082                pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
12083           END IF;
12084 
12085           IF l_debug_mode = 'Y' THEN
12086                pa_debug.g_err_stage:='Calling PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE';
12087                pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
12088           END IF;
12089 
12090           -- Call PLAN_CREATE to create summarization data as per the new RBS
12091           PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE (
12092                 p_fp_version_ids   => l_budget_version_id_tbl,
12093                 x_return_status    => l_return_status,
12094                 x_msg_code         => l_error_msg_code);
12095 
12096           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12097                 PA_UTILS.ADD_MESSAGE(p_app_short_name      => 'PA',
12098                                      p_msg_name            => l_error_msg_code);
12099                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12100           END IF;
12101 
12102           IF l_debug_mode = 'Y' THEN
12103                pa_debug.g_err_stage:='Call complete to PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE';
12104                pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
12105           END IF;
12106 
12107     END IF;
12108 
12109     IF l_debug_mode = 'Y' THEN
12110         pa_debug.g_err_stage:='Exiting Refresh_Plan_Txns';
12111         pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
12112     -- reset curr function
12113     pa_debug.Reset_Curr_Function();
12114     END IF;
12115 
12116 EXCEPTION
12117 
12118    WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12119        l_msg_count := FND_MSG_PUB.count_msg;
12120        IF l_msg_count = 1 THEN
12121            PA_INTERFACE_UTILS_PUB.get_messages
12122                  (p_encoded        => FND_API.G_TRUE
12123                   ,p_msg_index      => 1
12124                   ,p_msg_count      => l_msg_count
12125                   ,p_msg_data       => l_msg_data
12126                   ,p_data           => l_data
12127                   ,p_msg_index_out  => l_msg_index_out);
12128 
12129            x_msg_data := l_data;
12130            x_msg_count := l_msg_count;
12131        ELSE
12132            x_msg_count := l_msg_count;
12133        END IF;
12134 
12135        x_return_status := FND_API.G_RET_STS_ERROR;
12136 
12137        IF l_debug_mode = 'Y' THEN
12138            pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
12139            pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
12140        -- reset curr function
12141           pa_debug.Reset_Curr_Function();
12142 	END IF;
12143 
12144        RETURN;
12145    WHEN Others THEN
12146        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12147        x_msg_count     := 1;
12148        x_msg_data      := SQLERRM;
12149 
12150        FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'PA_FP_PLANNING_TRANSACTION_PUB'
12151                                ,p_procedure_name  => 'Refresh_Plan_Txns');
12152 
12153        IF l_debug_mode = 'Y' THEN
12154            pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
12155            pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
12156        -- reset curr function
12157           pa_debug.Reset_Curr_Function();
12158        END IF;
12159        RAISE;
12160 END Refresh_Plan_Txns;
12161 
12162 
12163 /* This api will call add_planning_transaction in such a way that calculate api would
12164    never be called . For IPM development added two parameters p_calling_context .
12165    This will be passed as SELECT_TASKS from the select tasks page. The add planning
12166    transactions will be called from here passing the context as create_version. This
12167    is because this flow is also used from the add tasks and resources page to add the
12168    tasks and resources as planning elements depending on the choice.*/
12169 PROCEDURE Create_Default_Task_Plan_Txns (
12170         P_budget_version_id              IN              Number
12171        ,P_version_plan_level_code        IN              VARCHAR2
12172        ,p_calling_context                IN              VARCHAR2
12173        ,p_add_all_resources_flag         IN              VARCHAR2
12174        ,X_return_status                  OUT             NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12175        ,X_msg_count                      OUT             NOCOPY NUMBER --File.Sql.39 bug 4440895
12176        ,X_msg_data                       OUT             NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
12177 AS
12178 
12179 
12180      l_module_name varchar2(100):= 'pa.plsql.pa_fp_planning_transaction_pub';
12181 
12182  -- Start of variables used for debugging purpose
12183      l_msg_count          NUMBER :=0;
12184      l_data               VARCHAR2(2000);
12185      l_msg_data           VARCHAR2(2000);
12186      l_error_msg_code     VARCHAR2(30);
12187      l_msg_index_out      NUMBER;
12188      l_return_status      VARCHAR2(2000);
12189      l_debug_mode         VARCHAR2(30);
12190  -- End of variables used for debugging purpose
12191 
12192 CURSOR version_info_cur (c_budget_version_id number) is
12193 select  bv.project_id
12194        ,PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(bv.project_id) STRUCTURE_VERSION_ID --Bug 3546208
12195        ,bv.fin_plan_type_id
12196        ,Decode(bv.version_type,PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST,pfo.cost_fin_plan_level_code
12197                               ,PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE,pfo.revenue_fin_plan_level_code
12198                               ,PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL,pfo.all_fin_plan_level_code) plan_level_code
12199        ,DECODE(fin_plan_preference_code,
12200                  PA_FP_CONSTANTS_PKG.G_PREF_COST_AND_REV_SAME, pfo.all_resource_list_id,
12201                  PA_FP_CONSTANTS_PKG.G_PREF_COST_ONLY,         pfo.cost_resource_list_id,
12202                  PA_FP_CONSTANTS_PKG.G_PREF_REVENUE_ONLY,      pfo.revenue_resource_list_id) resource_list_id
12203  from  pa_budget_versions bv,
12204        pa_proj_fp_options pfo
12205 where  bv.budget_version_id = c_budget_version_id
12206   and  pfo.project_id = bv.project_id
12207   and  pfo.fin_plan_type_id = bv.fin_plan_type_id
12208   and  pfo.fin_plan_version_id = bv.budget_version_id;
12209 
12210 version_info_rec version_info_cur%ROWTYPE;
12211 
12212 CURSOR lowest_tasks_cur (c_parent_structure_version_id number) is
12213 select v.element_version_id
12214 from   pa_struct_task_wbs_v v
12215 where  v.parent_structure_version_id = c_parent_structure_version_id
12216 and    v.financial_task_flag = 'Y'  -- raja bug 3690418
12217 and    v.task_level = 'L'
12218 and    not exists (select 'x'
12219                    from   pa_resource_assignments pra
12220                    where  pra.budget_version_id = P_budget_version_id
12221                    and    pra.task_id = v.task_id
12222                    and    p_calling_context = 'SELECT_TASKS');
12223 
12224 CURSOR top_tasks_cur (c_project_id number, c_parent_structure_version_id number) is
12225 select b.element_version_id
12226 from   pa_tasks a, pa_proj_element_versions b
12227 /* Replaced pa_struct_task_wbs_v with base tables for performance reasons.
12228  * Note that financial_task_flag of pa_proj_element_versions cannot be used
12229  * since it is set to Y even for tasks that are part of fin struct ver but not
12230  * yet published. (I.e., It could be Y for tasks not present in pa_tasks too). This
12231  * required a join with pa_tasks to identify true fin tasks which can be
12232  * budgeted for */
12233 where  b.parent_structure_version_id = c_parent_structure_version_id
12234 and    b.object_type = 'PA_TASKS'
12235 and    a.project_id = c_project_id
12236 and    a.project_id = b.project_id
12237 and    a.task_id = b.proj_element_id
12238 and    a.task_id = a.top_task_id
12239 and    not exists (select 'x'
12240                    from   pa_resource_assignments pra
12241                    where  pra.budget_version_id = P_budget_version_id
12242                    and    pra.task_id = a.task_id
12243                    and    p_calling_context = 'SELECT_TASKS');
12244 
12245 l_max_fetch_size                  NUMBER := 200;
12246 
12247 l_element_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
12248 
12249 --l_proj_element_id_tbl element_versions_tbl1_type;
12250 --l_element_version_id_tbl  element_versions_tbl2_type;
12251 l_resource_list_member_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
12252 
12253 l_start_date pa_projects_all.start_date%TYPE;
12254 l_completion_date pa_projects_all.completion_date%TYPE;
12255 
12256 l_res_list_is_uncategorized   VARCHAR2(1);
12257 l_is_resource_list_grouped    VARCHAR2(1);
12258 l_group_resource_type_id      NUMBER;
12259 
12260 l_people_res_class_rlm_id    pa_resource_list_members.resource_list_member_id%TYPE;
12261 l_equip_res_class_rlm_id     pa_resource_list_members.resource_list_member_id%TYPE;
12262 l_fin_res_class_rlm_id       pa_resource_list_members.resource_list_member_id%TYPE :=0;
12263 l_mat_res_class_rlm_id       pa_resource_list_members.resource_list_member_id%TYPE;
12264 
12265 l_plan_class_code pa_fin_plan_types_b.plan_class_code%TYPE;
12266 
12267 BEGIN
12268      FND_MSG_PUB.initialize;
12269      fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
12270      l_debug_mode := NVL(l_debug_mode, 'Y');
12271 IF l_debug_mode = 'Y' THEN
12272      pa_debug.set_curr_function( p_function => 'Create_Default_Task_Plan_Txns',
12273                                  p_debug_mode => l_debug_mode );
12274 END IF;
12275      x_msg_count := 0;
12276      x_return_status := FND_API.G_RET_STS_SUCCESS;
12277 
12278 
12279      -- Check for business rules violations
12280 
12281      IF l_debug_mode = 'Y' THEN
12282          pa_debug.g_err_stage:='Validating input parameters';
12283          pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12284      END IF;
12285 
12286      -- Check if budget version id is null
12287 
12288      IF (P_budget_version_id  IS NULL) OR
12289         (nvl(p_calling_context,'-1') NOT IN ('CREATE_VERSION','SELECT_TASKS')) OR
12290         (nvl(p_add_all_resources_flag,'x') NOT IN ('Y','N'))
12291      THEN
12292 
12293          IF l_debug_mode = 'Y' THEN
12294              pa_debug.g_err_stage:='P_budget_version_id = '||P_budget_version_id;
12295              pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
12296          END IF;
12297 
12298          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12299                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
12300 
12301          IF l_debug_mode = 'Y' THEN
12302              pa_debug.g_err_stage:='Invalid Arguments Passed';
12303              pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
12304          END IF;
12305          RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12306 
12307      END IF;
12308 
12309  --Fetch budget version values
12310 
12311      IF l_debug_mode = 'Y' THEN
12312          pa_debug.g_err_stage:='Fetching budget version properties';
12313          pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12314      END IF;
12315 
12316      OPEN version_info_cur(P_budget_version_id);
12317      FETCH version_info_cur INTO version_info_rec;
12318      CLOSE version_info_cur;
12319 
12320           --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> valueof input '|| P_version_plan_level_code);
12321      IF P_version_plan_level_code IS NOT NULL THEN
12322          version_info_rec.plan_level_code := P_version_plan_level_code;
12323      END IF;
12324           --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> valueof version_info_rec '|| version_info_rec.plan_level_code);
12325 
12326  --Fetch Start Date and Completion Date
12327 
12328      BEGIN
12329          SELECT start_date,completion_date
12330          INTO l_start_date,l_completion_date
12331          FROM pa_projects_all
12332          WHERE project_id = version_info_rec.project_id;
12333      EXCEPTION
12334          WHEN OTHERS THEN
12335               IF l_debug_mode = 'Y' THEN
12336                  pa_debug.g_err_stage:='Error while fetching start and completion dates for the project';
12337                  pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12338               END IF;
12339               RAISE;
12340      END;
12341 
12342 
12343          PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids
12344          (p_project_id                   =>    version_info_rec.project_id,
12345           p_resource_list_id             =>    version_info_rec.resource_list_id,
12346           x_people_res_class_rlm_id      =>    l_people_res_class_rlm_id,
12347           x_equip_res_class_rlm_id       =>    l_equip_res_class_rlm_id ,
12348           x_fin_res_class_rlm_id         =>    l_fin_res_class_rlm_id   ,
12349           x_mat_res_class_rlm_id         =>    l_mat_res_class_rlm_id   ,
12350           x_return_status                =>    l_return_status,
12351           x_msg_count                    =>    l_msg_count,
12352           x_msg_data                     =>    l_msg_data);
12353           --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> rlmids'|| l_people_res_class_rlm_id || 'x' || l_equip_res_class_rlm_id || 'x' || l_fin_res_class_rlm_id || 'x' || l_mat_res_class_rlm_id);
12354 
12355          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12356              IF l_debug_mode = 'Y' THEN
12357                 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
12358                 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns:  ' || l_module_name,pa_debug.g_err_stage,5);
12359              END IF;
12360              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12361          END IF;
12362 
12363      BEGIN
12364         SELECT plan_class_code
12365         INTO l_plan_class_code
12366         FROM pa_fin_plan_types_b
12367         where fin_plan_type_id = version_info_rec.fin_plan_type_id;
12368 
12369      EXCEPTION
12370          WHEN OTHERS THEN
12371               IF l_debug_mode = 'Y' THEN
12372                   pa_debug.g_err_stage:='Error while fetching plan_class_code for the budget_version_id';
12373                   pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
12374                END IF;
12375               RAISE;
12376      END;
12377 
12378           --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> plan_class_code '|| l_plan_class_code);
12379 
12380      IF p_add_all_resources_flag <> 'Y' THEN
12381          l_resource_list_member_id_tbl.extend(1);
12382          l_resource_list_member_id_tbl(1):= l_fin_res_class_rlm_id;
12383      ELSE
12384          SELECT resource_list_member_id BULK COLLECT
12385          INTO l_resource_list_member_id_tbl
12386          FROM   pa_resource_list_members prl,
12387                 PA_PLAN_RES_DEFAULTS pr, /*7291493*/
12388                (SELECT  control_flag
12389                 FROM    pa_resource_lists_all_bg
12390                 WHERE   resource_list_id = version_info_rec.resource_list_id) rl_control_flag
12391          WHERE resource_list_id = version_info_rec.resource_list_id
12392          AND   ((rl_control_flag.control_flag = 'N' AND
12393                  prl.object_type = 'PROJECT' AND
12394                  prl.object_id = version_info_rec.project_id)
12395                  OR
12396                 (rl_control_flag.control_flag = 'Y' AND
12397                  prl.object_type = 'RESOURCE_LIST' AND
12398                  prl.object_id = version_info_rec.resource_list_id)) AND
12399                  prl.resource_class_id = pr.resource_class_id AND
12400                  pr.enabled_flag = 'Y';
12401      END IF;
12402 
12403 
12404      IF version_info_rec.plan_level_code = PA_FP_CONSTANTS_PKG.G_BUDGET_ENTRY_LEVEL_PROJECT THEN
12405             IF l_debug_mode = 'Y' THEN
12406                 pa_debug.g_err_stage:= 'Planning at project level: Inserting a record';
12407                 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12408             END IF;
12409 
12410         l_element_version_id_tbl.extend(1);
12411             l_element_version_id_tbl(1):= 0;
12412 
12413             pa_fp_planning_transaction_pub.add_planning_transactions (
12414             p_context                     =>      l_plan_class_code
12415             /* Passing calling module as creation version, since we dont want calculate api to be called */
12416            ,p_calling_module              =>      'CREATE_VERSION'
12417            ,p_project_id                  =>      version_info_rec.project_id
12418            ,p_budget_version_id           =>      p_budget_version_id
12419            ,p_task_elem_version_id_tbl    =>      l_element_version_id_tbl
12420            ,p_resource_list_member_id_tbl =>      l_resource_list_member_id_tbl
12421            ,x_return_status               =>      l_return_status
12422            ,x_msg_count                   =>      l_msg_count
12423            ,x_msg_data                    =>      l_msg_data     );
12424 
12425            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12426               IF l_debug_mode = 'Y' THEN
12427                  pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
12428                      pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns:  ' || l_module_name,pa_debug.g_err_stage,5);
12429               END IF;
12430               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12431            END IF;
12432 
12433 
12434     ELSIF version_info_rec.plan_level_code = PA_FP_CONSTANTS_PKG.G_BUDGET_ENTRY_LEVEL_TOP THEN
12435             IF l_debug_mode = 'Y' THEN
12436                 pa_debug.g_err_stage:= 'Planning at top task level: Opening cursor top_tasks_cur';
12437                 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12438             END IF;
12439 
12440             OPEN top_tasks_cur( version_info_rec.project_id, version_info_rec.structure_version_id);
12441 
12442             IF l_debug_mode = 'Y' THEN
12443                 pa_debug.g_err_stage:= 'Fetching cursor values for top tasks and doing bulk insert';
12444                 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12445             END IF;
12446 
12447         LOOP
12448             FETCH top_tasks_cur BULK COLLECT INTO l_element_version_id_tbl LIMIT l_max_fetch_size;
12449 
12450             IF nvl(l_element_version_id_tbl.last,0) >= 1 THEN
12451                 pa_fp_planning_transaction_pub.add_planning_transactions (
12452                 p_context                     =>      l_plan_class_code
12453                 /* Passing calling module as creation version, since we dont want calculate api to be called */
12454                ,p_calling_module              =>      'CREATE_VERSION'
12455                ,p_project_id                  =>      version_info_rec.project_id
12456                ,p_budget_version_id           =>      p_budget_version_id
12457                ,p_task_elem_version_id_tbl    =>      l_element_version_id_tbl
12458                ,p_resource_list_member_id_tbl =>      l_resource_list_member_id_tbl
12459                ,x_return_status               =>      l_return_status
12460                ,x_msg_count                   =>      l_msg_count
12461                ,x_msg_data                    =>      l_msg_data     );
12462             END IF;
12463 
12464             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12465                  IF l_debug_mode = 'Y' THEN
12466                     pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
12467                     pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns:  ' || l_module_name,pa_debug.g_err_stage,5);
12468                  END IF;
12469                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12470             END IF;
12471        -- Exit if fetch size is less than 200
12472             EXIT WHEN NVL(l_element_version_id_tbl.last,0) < l_max_fetch_size;
12473         END LOOP;
12474 
12475         CLOSE top_tasks_cur;
12476 
12477     ELSIF version_info_rec.plan_level_code = PA_FP_CONSTANTS_PKG.G_BUDGET_ENTRY_LEVEL_LOWEST THEN
12478           --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> '||PA_FP_CONSTANTS_PKG.G_BUDGET_ENTRY_LEVEL_LOWEST);
12479 
12480         IF l_debug_mode = 'Y' THEN
12481             pa_debug.g_err_stage:= 'Planning at lowest task level: Opening cursor lowest_tasks_cur';
12482             pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12483         END IF;
12484 
12485         OPEN lowest_tasks_cur( version_info_rec.structure_version_id);
12486 
12487         IF l_debug_mode = 'Y' THEN
12488             pa_debug.g_err_stage:= 'Fetching cursor values for lowest tasks and doing bulk insert';
12489             pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12490         END IF;
12491 
12492 
12493 
12494         LOOP
12495             FETCH lowest_tasks_cur BULK COLLECT INTO l_element_version_id_tbl LIMIT l_max_fetch_size;
12496 
12497                IF nvl(l_element_version_id_tbl.last,0) >= 1 THEN
12498                     pa_fp_planning_transaction_pub.add_planning_transactions (
12499                     p_context                     =>      l_plan_class_code
12500                     /* Passing calling module as creation version, since we dont want calculate api to be called */
12501                    ,p_calling_module              =>      'CREATE_VERSION'
12502                    ,p_project_id                  =>      version_info_rec.project_id
12503                    ,p_budget_version_id           =>      p_budget_version_id
12504                    ,p_task_elem_version_id_tbl    =>      l_element_version_id_tbl
12505                    ,p_resource_list_member_id_tbl =>      l_resource_list_member_id_tbl
12506                    ,x_return_status               =>      l_return_status
12507                    ,x_msg_count                   =>      l_msg_count
12508                    ,x_msg_data                    =>      l_msg_data     );
12509 
12510                     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12511                       IF l_debug_mode = 'Y' THEN
12512                          pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
12513                          pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns:  ' || l_module_name,pa_debug.g_err_stage,5);
12514                       END IF;
12515                       RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12516                     END IF;
12517                END IF;
12518          -- Exit if fetch size is less than 200
12519             EXIT WHEN NVL(l_element_version_id_tbl.last,0) < l_max_fetch_size;
12520         END LOOP;
12521 
12522        CLOSE lowest_tasks_cur;
12523     END IF;
12524 
12525     IF l_debug_mode = 'Y' THEN
12526        pa_debug.g_err_stage:='Exiting Create_Default_Task_Plan_Txns:';
12527        pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12528       --Reset the error stack
12529        pa_debug.reset_curr_function;
12530     END IF;
12531 EXCEPTION
12532 
12533    WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12534           l_msg_count := FND_MSG_PUB.count_msg;
12535           IF l_msg_count = 1 THEN
12536                PA_INTERFACE_UTILS_PUB.get_messages
12537                      (p_encoded        => FND_API.G_TRUE
12538                       ,p_msg_index      => 1
12539                       ,p_msg_count      => l_msg_count
12540                       ,p_msg_data       => l_msg_data
12541                       ,p_data           => l_data
12542                       ,p_msg_index_out  => l_msg_index_out);
12543                x_msg_data := l_data;
12544                x_msg_count := l_msg_count;
12545           ELSE
12546               x_msg_count := l_msg_count;
12547           END IF;
12548            x_return_status := FND_API.G_RET_STS_ERROR;
12549 --           pa_debug.g_err_stage:='Invalid Arguments Passed';
12550 --           pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
12551 	IF l_debug_mode = 'Y' THEN
12552            pa_debug.reset_curr_function;
12553 	END IF;
12554            RETURN;
12555 
12556      WHEN Others THEN
12557           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12558           x_msg_count     := 1;
12559           x_msg_data      := SQLERRM;
12560           FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'PA_FP_PLANNING_TRANSACTION_PUB'
12561                                   ,p_procedure_name  => 'CREATE_DEFAULT_TASK_PLAN_TXNS');
12562           IF l_debug_mode = 'Y' THEN
12563               pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
12564               pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
12565               pa_debug.reset_curr_function;
12566 	  END IF;
12567           RAISE;
12568 
12569 END Create_Default_Task_Plan_Txns;
12570 
12571 /*=============================================================================
12572  This api is called upon save from Additional Workplan Options page.
12573  For versioning disabled case working version should be updated with values
12574  that of parent plan type record. The changes include deleting all the
12575  existing budget lines, resource assignments. Pa_proj_fp_options and
12576  pa_budget_versions should be updated with changed values.
12577 
12578  Bug 3595063 For a shared structure, update current working version with the
12579              new settings.
12580 
12581  Bug 3619687 **** Completely changed as per the new business rules ********
12582              Whenever there is a change in the Additional Workplan setting page,
12583              all the chages should be propagated to all the underlying workplan
12584              versions immediately upon save. If there is a change in RBS header,
12585              effort data for all the versions including published versions
12586              should be re-mapped and re-summarized
12587 
12588  Bug 3619687 **** 15-Jun-2004 Additional Change Request for RBS change ****
12589              Whenever there is a change for RBS if versioning is disabled for
12590              the workplan structure, the change should be propagated to the
12591              workplan version immediately. If versioning is enabled, the change
12592              is applicable for all the future versions.
12593 
12594 Bug 3619687 **** 25-Jun-2004 Additional Change Request  ****
12595             Whenever there is a change to track workplan costs flag, calculate
12596             should be called for the costs to be calculted or nulled out as per
12597             the change.
12598 Bug 3725414 **** 28-Jun-2004  rbs_version_change should be propagated to working
12599             workplan version(s) of shared + versioning enabled structure
12600 
12601 Bug 3937716 **** 07-Oct-2004 When time phasing has changed, pji data is not
12602             correct at the end of the process. Reason: delete_planning_transactions
12603             and calculate() do not have the old time phased code to pass it to
12604             the PJI update api for negating existing data. So, its decided that we
12605             change the above two apis not to call PJI apis in this flow and call
12606             plan_delete(), plan_create() at the end.
12607 ===============================================================================*/
12608 
12609 PROCEDURE REFRESH_WP_SETTINGS(
12610            p_project_id                 IN      pa_budget_versions.project_id%TYPE
12611           ,p_resource_list_change       IN      VARCHAR2    DEFAULT 'N'    -- Bug 3619687
12612           ,p_time_phase_change          IN      VARCHAR2    DEFAULT 'N'    -- Bug 3619687
12613           ,p_rbs_version_change         IN      VARCHAR2    DEFAULT 'N'    -- Bug 3619687
12614           ,p_track_costs_flag_change    IN      VARCHAR2    DEFAULT 'N'    -- Bug 3619687
12615           ,x_return_status              OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12616           ,x_msg_count                  OUT     NOCOPY NUMBER --File.Sql.39 bug 4440895
12617           ,x_msg_data                   OUT     NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
12618 AS
12619 
12620     --Start of variables used for debugging
12621 
12622     l_return_status      VARCHAR2(1);
12623     l_msg_count          NUMBER := 0;
12624     l_msg_data           VARCHAR2(2000);
12625     l_data               VARCHAR2(2000);
12626     l_msg_index_out      NUMBER;
12627     l_debug_mode         VARCHAR2(30);
12628     l_error_msg_code     VARCHAR2(30);
12629 
12630     --End of variables used for debugging
12631 
12632     l_budget_version_id_tbl          SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12633     l_proj_fp_options_id_tbl         SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12634     l_task_version_id_tbl            SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12635     l_task_name_tbl                  SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
12636     l_task_number_tbl                SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
12637     l_res_assignment_id_tbl          SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12638 
12639     l_people_res_class_rlm_id    pa_resource_list_members.resource_list_member_id%TYPE;
12640     l_equip_res_class_rlm_id     pa_resource_list_members.resource_list_member_id%TYPE;
12641     l_fin_res_class_rlm_id       pa_resource_list_members.resource_list_member_id%TYPE;
12642     l_mat_res_class_rlm_id       pa_resource_list_members.resource_list_member_id%TYPE;
12643 
12644     l_txn_source_id_tbl          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12645     l_res_list_member_id_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12646     l_rbs_element_id_tbl         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12647     l_txn_accum_header_id_tbl    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12648 
12649     l_res_assignment_count       NUMBER;
12650     l_wp_versioning_enabled_flag VARCHAR2(1);
12651     l_pub_budget_version_id_tbl          SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12652     l_pub_proj_fp_options_id_tbl         SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12653     l_proj_struct_ver_id_tbl             SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12654 
12655 
12656     CURSOR parent_plan_type_cur IS
12657       SELECT  pfo.proj_fp_options_id
12658              ,pfo.track_workplan_costs_flag
12659              ,pfo.plan_in_multi_curr_flag
12660              ,pfo.rbs_version_id
12661              ,pfo.margin_derived_from_code
12662              ,pfo.factor_by_code
12663              ,pfo.cost_resource_list_id
12664              ,pfo.select_cost_res_auto_flag
12665              ,pfo.cost_time_phased_code
12666              ,pfo.cost_current_planning_period
12667              ,pfo.cost_period_mask_id
12668              ,pfo.projfunc_cost_rate_type
12669              ,pfo.projfunc_cost_rate_date_type
12670              ,pfo.projfunc_cost_rate_date
12671              ,pfo.project_cost_rate_type
12672              ,pfo.project_cost_rate_date_type
12673              ,pfo.project_cost_rate_date
12674              ,pfo.use_planning_rates_flag
12675              ,pfo.res_class_raw_cost_sch_id
12676              ,pfo.cost_emp_rate_sch_id
12677              ,pfo.cost_job_rate_sch_id
12678              ,pfo.cost_non_labor_res_rate_sch_id
12679              ,pfo.cost_res_class_rate_sch_id
12680              ,pfo.cost_burden_rate_sch_id
12681       FROM   pa_proj_fp_options pfo
12682              ,pa_fin_plan_types_b fpt
12683       WHERE  pfo.project_id = p_project_id
12684       AND    pfo.fin_plan_type_id = fpt.fin_plan_type_id
12685       AND    fpt.use_for_workplan_flag = 'Y'
12686       AND    pfo.fin_plan_option_level_code = 'PLAN_TYPE';
12687 
12688     parent_plan_type_rec    parent_plan_type_cur%ROWTYPE;
12689 
12690     -- Cursor to fetch all the working version including submitted version
12691     -- if any to update the versions with the changes in workplan setting
12692     -- page. Change in resoruce list and time phasing is restricted if there
12693     -- is a baselined or submitted version.
12694     CURSOR working_workplan_versions_cur  IS
12695       SELECT bv.budget_version_id
12696              ,pfo.proj_fp_options_id
12697              ,bv.project_structure_version_id
12698         FROM pa_budget_versions bv,
12699              pa_proj_elem_ver_structure ver,
12700              pa_proj_fp_options pfo
12701        WHERE bv.project_id = p_project_id
12702          AND bv.wp_version_flag = 'Y'
12703          AND bv.project_id = ver.project_id
12704          AND bv.project_structure_version_id = ver.element_version_id
12705          AND (l_wp_versioning_enabled_flag = 'N' OR  -- UT
12706                ver.status_code IN('STRUCTURE_WORKING','STRUCTURE_SUBMITTED'))
12707          AND pfo.project_id = p_project_id
12708          AND pfo.fin_plan_version_id = bv.budget_version_id;
12709 
12710     CURSOR published_versions_cur  IS
12711       SELECT bv.budget_version_id
12712              ,pfo.proj_fp_options_id
12713         FROM pa_budget_versions bv,
12714              pa_proj_elem_ver_structure ver,
12715              pa_proj_fp_options pfo
12716        WHERE bv.project_id = p_project_id
12717          AND bv.wp_version_flag = 'Y'
12718          AND bv.project_id = ver.project_id
12719          AND bv.project_structure_version_id = ver.element_version_id
12720          AND ver.status_code IN ('STRUCTURE_PUBLISHED')
12721          AND pfo.project_id = p_project_id
12722          AND pfo.fin_plan_version_id = bv.budget_version_id;
12723 
12724 
12725     -- Cursor to fetch required input data to delete task assignments
12726     -- for a workplan version. Using this data delete_planning_transactions
12727     -- api is called
12728     CURSOR data_for_delete_plan_txns_cur (c_budget_version_id NUMBER) IS
12729       SELECT wbs_element_version_id
12730              ,name
12731              ,element_number
12732              ,resource_assignment_id
12733       FROM   pa_resource_assignments pra
12734              ,pa_proj_elements ppe
12735       WHERE  pra.project_id = p_project_id
12736       AND    pra.budget_version_id = c_budget_version_id
12737       AND    pra.ta_display_flag = 'Y'
12738       AND    pra.task_id = ppe.proj_element_id;
12739 
12740     --CBS changes: Bug 13639638
12741     CURSOR data_for_del_all_plan_txns_cur (c_budget_version_id NUMBER) IS
12742       SELECT wbs_element_version_id
12743              ,name
12744              ,element_number
12745              ,resource_assignment_id
12746       FROM   pa_resource_assignments pra
12747              ,pa_proj_elements ppe
12748       WHERE  pra.project_id = p_project_id
12749       AND    pra.budget_version_id = c_budget_version_id
12750       --AND    pra.ta_display_flag = 'Y'
12751       AND    pra.task_id = ppe.proj_element_id;
12752 
12753     -- Cursor to fetch all the workplan versions for the project
12754     -- including the publsihed versions for RBS refresh
12755     CURSOR all_workplan_versions_cur IS
12756       SELECT bv.budget_version_id
12757              ,pfo.proj_fp_options_id
12758         FROM pa_budget_versions bv
12759              ,pa_proj_fp_options pfo
12760        WHERE bv.project_id = p_project_id
12761          AND bv.wp_version_flag = 'Y'
12762          AND pfo.fin_plan_version_id = bv.budget_version_id
12763          AND pfo.project_id = bv.project_id;
12764 
12765 BEGIN
12766 
12767     x_msg_count := 0;
12768     x_return_status := FND_API.G_RET_STS_SUCCESS;
12769 
12770     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
12771     l_debug_mode := NVL(l_debug_mode, 'Y');
12772 
12773     -- Set curr function
12774 IF l_debug_mode = 'Y' THEN
12775     pa_debug.set_curr_function(
12776                 p_function   =>'PA_FP_PLANNING_TRANSACTION_PUB.REFRESH_WP_SETTINGS'
12777                ,p_debug_mode => l_debug_mode );
12778 END IF;
12779     -- Check for business rules violations
12780     IF l_debug_mode = 'Y' THEN
12781         pa_debug.g_err_stage:='Validating input parameters';
12782         pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12783     END IF;
12784 
12785     IF (p_project_id IS NULL)
12786     THEN
12787 
12788         IF l_debug_mode = 'Y' THEN
12789            pa_debug.g_err_stage:='Project_id = '||p_project_id;
12790            pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12791         END IF;
12792 
12793         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12794                               p_msg_name      => 'PA_FP_INV_PARAM_PASSED');
12795 
12796         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12797 
12798     END IF;
12799 
12800     -- Fetch all the plan type values that could have changed
12801     OPEN  parent_plan_type_cur;
12802     FETCH parent_plan_type_cur INTO parent_plan_type_rec;
12803     CLOSE parent_plan_type_cur;
12804 
12805     IF l_debug_mode = 'Y' THEN
12806         pa_debug.g_err_stage:='getting plan type info';
12807         pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12808     END IF;
12809 
12810 
12811     -- Check if versioning is enabled for wp structure
12812     l_wp_versioning_enabled_flag := PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id);
12813 
12814     -- Fetch all the working plan versions in a table
12815     OPEN working_workplan_versions_cur;
12816     FETCH working_workplan_versions_cur
12817       BULK COLLECT INTO l_budget_version_id_tbl,l_proj_fp_options_id_tbl , l_proj_struct_ver_id_tbl;
12818     CLOSE working_workplan_versions_cur;
12819 
12820 
12821     IF l_debug_mode = 'Y' THEN
12822         pa_debug.g_err_stage:='getting woking versions';
12823         pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12824     END IF;
12825 
12826 
12827     --  Adding for bug 4543744
12828     /*   Collecting all the working version records and inserting into the pji table
12829          with negative values of budget lines                                     */
12830         IF nvl(p_resource_list_change, 'N') = 'Y' OR nvl(p_time_phase_change, 'N') = 'Y'
12831            OR nvl(p_track_costs_flag_change, 'N') = 'Y' OR (nvl(p_rbs_version_change, 'N') = 'Y' AND
12832                (nvl(PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id),'N') = 'N'
12833                 OR nvl(PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id),'N') = 'Y')) THEN
12834 
12835                 IF l_debug_mode = 'Y' THEN
12836                    pa_debug.g_err_stage:='About to insert negative lines';
12837                    pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12838                    pa_debug.g_err_stage:='l_budget_version_id_tbl' || l_budget_version_id_tbl.count;
12839                    pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12840 
12841                 END IF;
12842 
12843 
12844                 FOR i IN l_budget_version_id_tbl.FIRST .. l_budget_version_id_tbl.LAST
12845                 LOOP
12846 
12847                     IF l_debug_mode = 'Y' THEN
12848                        pa_debug.g_err_stage:='Calling call_update_rep_lines' || l_budget_version_id_tbl(i);
12849                        pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12850                     END IF;
12851 
12852                     PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api
12853                     --( p_source                  => 'POPULATE_PJI_TABLE'    --Commented for bug 5073350.
12854                     ( p_source                  => 'REFRESH_WP_SETTINGS'
12855                      ,p_budget_version_id       => l_budget_version_id_tbl(i)
12856                      ,p_qty_sign                => -1
12857                      ,x_return_status           => x_return_status
12858                      ,x_msg_data                => x_msg_data
12859                      ,x_msg_count               => x_msg_count);
12860 
12861                   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12862 
12863                       IF l_debug_mode = 'Y' THEN
12864                           pa_debug.g_err_stage:='PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api returned error';
12865                           pa_debug.write( g_module_name,pa_debug.g_err_stage,5);
12866                       END IF;
12867                       RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
12868                   END IF;
12869 
12870                 END LOOP;
12871 
12872         END IF; -- inserting negative rows
12873 
12874     IF l_debug_mode = 'Y' THEN
12875         pa_debug.g_err_stage:='inserted -ve lines';
12876         pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12877     END IF;
12878 
12879 
12880      IF nvl(p_resource_list_change, 'N') = 'Y' THEN
12881 
12882         OPEN published_versions_cur;
12883         FETCH published_versions_cur
12884           BULK COLLECT INTO l_pub_budget_version_id_tbl,l_pub_proj_fp_options_id_tbl ;
12885         CLOSE published_versions_cur;
12886 
12887         IF l_pub_budget_version_id_tbl.COUNT > 0 THEN
12888 
12889             PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids
12890                  ( p_project_id                   =>    p_project_id
12891                   ,p_resource_list_id             =>    parent_plan_type_rec.cost_resource_list_id
12892                   ,x_people_res_class_rlm_id      =>    l_people_res_class_rlm_id
12893                   ,x_equip_res_class_rlm_id       =>    l_equip_res_class_rlm_id
12894                   ,x_fin_res_class_rlm_id         =>    l_fin_res_class_rlm_id
12895                   ,x_mat_res_class_rlm_id         =>    l_mat_res_class_rlm_id
12896                   ,x_return_status                =>    x_return_status
12897                   ,x_msg_count                    =>    x_msg_count
12898                   ,x_msg_data                     =>    x_msg_data);
12899 
12900             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12901                 IF l_debug_mode = 'Y' THEN
12902                    pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
12903                    pa_debug.write('REFRESH_WP_SETTINGS:  ' || g_module_name,pa_debug.g_err_stage,5);
12904                 END IF;
12905                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12906             END IF;
12907 
12908             FORALL i IN l_pub_budget_version_id_tbl.first .. l_pub_budget_version_id_tbl.last
12909                   --Fix for bug#7279771, uncommented the code comment done earlier for resource_class_code,
12910                   --resource_class_flag,ta_display_flag
12911                     UPDATE pa_resource_assignments
12912                     SET    resource_list_member_id  = l_people_res_class_rlm_id
12913                     WHERE  budget_version_id = l_pub_budget_version_id_tbl(i)
12914                     /* The only records present in pa_resource_assignments for published versions with resource
12915                        list NONE would fall under the below cateogry. Not including them as part of select as they
12916                        dont add any value to performance interms of better index usage. Retaining them in the comment
12917                        for understanding purpose */
12918                     AND    resource_class_code = 'PEOPLE'
12919                     AND    resource_class_flag = 'Y'
12920                     AND    ta_display_flag = 'N';
12921             /* Assumptions: When resource list changes for published version, pa_progress_rollup would have only task level PEOPLE assignments.
12922                Hence we are updating all records in pa_progress_rollup with the new rlmid petaining to people class rlm for published versions. */
12923             UPDATE pa_progress_rollup
12924             SET  object_id = l_people_res_class_rlm_id
12925             WHERE project_id = p_project_id AND
12926             object_type = 'PA_ASSIGNMENTS' AND
12927             structure_type = 'WORKPLAN' AND
12928             structure_Version_id is NULL; /* Only published versions */
12929             /* Note that we are not updating working wp versions pa_progress_rollup since there is some
12930               processing done for working wp versions in the loop below (delete planning transactions etc
12931              and we want to ensure this update is done after the processing */
12932 
12933           /* We also need to update the resource list id in the pa_budget_versions table as well as the
12934              pa_proj_fp_options table .*/
12935             FORALL i IN l_pub_proj_fp_options_id_tbl.first .. l_pub_proj_fp_options_id_tbl.last
12936             UPDATE pa_proj_fp_options
12937             SET cost_resource_list_id             =  parent_plan_type_rec.cost_resource_list_id
12938              ,record_version_number               =  record_version_number + 1
12939              ,last_update_date                    =  SYSDATE
12940              ,last_updated_by                     =  FND_GLOBAL.user_id
12941              ,last_update_login                   =  FND_GLOBAL.login_id
12942             where proj_fp_options_id  = l_pub_proj_fp_options_id_tbl(i);
12943 
12944             FORALL i IN l_pub_budget_version_id_tbl.first .. l_pub_budget_version_id_tbl.last
12945             UPDATE pa_budget_versions
12946             SET   resource_list_id                = parent_plan_type_rec.cost_resource_list_id
12947              ,record_version_number               =  record_version_number + 1
12948              ,last_update_date                    =  SYSDATE
12949              ,last_updated_by                     =  FND_GLOBAL.user_id
12950              ,last_update_login                   =  FND_GLOBAL.login_id
12951             where budget_version_id  = l_pub_budget_version_id_tbl(i);
12952 
12953         END IF;
12954      END IF;
12955 
12956 
12957 
12958     IF  nvl(l_budget_version_id_tbl.count, 0) > 0 THEN
12959 
12960         -- Update proj_fp_options data for all the working versions in bulk
12961         FORALL i IN l_proj_fp_options_id_tbl.first .. l_proj_fp_options_id_tbl.last
12962         UPDATE pa_proj_fp_options
12963         SET   track_workplan_costs_flag           =  parent_plan_type_rec.track_workplan_costs_flag
12964              ,plan_in_multi_curr_flag             =  parent_plan_type_rec.plan_in_multi_curr_flag
12965             -- Raja ,rbs_version_id                      =  parent_plan_type_rec.rbs_version_id
12966              ,margin_derived_from_code            =  parent_plan_type_rec.margin_derived_from_code
12967              ,factor_by_code                      =  parent_plan_type_rec.factor_by_code
12968              ,cost_resource_list_id               =  parent_plan_type_rec.cost_resource_list_id
12969              ,select_cost_res_auto_flag           =  parent_plan_type_rec.select_cost_res_auto_flag
12970              ,cost_time_phased_code               =  parent_plan_type_rec.cost_time_phased_code
12971              ,cost_current_planning_period        =  parent_plan_type_rec.cost_current_planning_period
12972              ,cost_period_mask_id                 =  parent_plan_type_rec.cost_period_mask_id
12973              ,projfunc_cost_rate_type             =  parent_plan_type_rec.projfunc_cost_rate_type
12974              ,projfunc_cost_rate_date_type        =  parent_plan_type_rec.projfunc_cost_rate_date_type
12975              ,projfunc_cost_rate_date             =  parent_plan_type_rec.projfunc_cost_rate_date
12976              ,project_cost_rate_type              =  parent_plan_type_rec.project_cost_rate_type
12977              ,project_cost_rate_date_type         =  parent_plan_type_rec.project_cost_rate_date_type
12978              ,project_cost_rate_date              =  parent_plan_type_rec.project_cost_rate_date
12979              ,use_planning_rates_flag             =  parent_plan_type_rec.use_planning_rates_flag
12980              ,res_class_raw_cost_sch_id           =  parent_plan_type_rec.res_class_raw_cost_sch_id
12981              ,cost_emp_rate_sch_id                =  parent_plan_type_rec.cost_emp_rate_sch_id
12982              ,cost_job_rate_sch_id                =  parent_plan_type_rec.cost_job_rate_sch_id
12983              ,cost_non_labor_res_rate_sch_id      =  parent_plan_type_rec.cost_non_labor_res_rate_sch_id
12984              ,cost_res_class_rate_sch_id          =  parent_plan_type_rec.cost_res_class_rate_sch_id
12985              ,cost_burden_rate_sch_id             =  parent_plan_type_rec.cost_burden_rate_sch_id
12986              ,record_version_number               =  record_version_number + 1
12987              ,last_update_date                    =  SYSDATE
12988              ,last_updated_by                     =  FND_GLOBAL.user_id
12989              ,last_update_login                   =  FND_GLOBAL.login_id
12990         WHERE proj_fp_options_id  = l_proj_fp_options_id_tbl(i);
12991 
12992         -- Update budget_versions data for all the working versions in bulk
12993 
12994         FORALL i IN l_budget_version_id_tbl.first .. l_budget_version_id_tbl.last
12995         UPDATE pa_budget_versions
12996         SET   resource_list_id            = parent_plan_type_rec.cost_resource_list_id
12997              ,current_planning_period     = parent_plan_type_rec.cost_current_planning_period
12998              ,period_mask_id              = parent_plan_type_rec.cost_period_mask_id
12999              -- Bug 3630069 Amounts should not be updated with 0. These columns are taken care of
13000              -- by delete planning transactions api if there is any change to this amount
13001              /***
13002                  ,raw_cost                    = 0
13003                  ,burdened_cost               = 0
13004                  ,total_project_raw_cost      = 0
13005                  ,total_project_burdened_cost = 0
13006                  ,labor_quantity              = 0
13007                  ,equipment_quantity          = 0
13008              ***/
13009              ,last_update_date            = SYSDATE
13010              ,last_updated_by             = FND_GLOBAL.user_id
13011              ,last_update_login           = FND_GLOBAL.login_id
13012              ,record_version_number       = record_version_number + 1
13013         WHERE budget_version_id =  l_budget_version_id_tbl(i);
13014 
13015         /* Bug 4200168: FP.M:B12: Pref Changes: Called the following api outside the BV loop
13016          */
13017         -- If resource list has changed task level resource assignments
13018         -- should be re-mapped with new People resource class rlmid
13019         -- Fetching the resource class rlm only if not fetched already during published version processing
13020         IF nvl(p_resource_list_change, 'N') = 'Y' AND l_people_res_class_rlm_id IS NULL THEN
13021             PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids
13022                  ( p_project_id                   =>    p_project_id
13023                   ,p_resource_list_id             =>    parent_plan_type_rec.cost_resource_list_id
13024                   ,x_people_res_class_rlm_id      =>    l_people_res_class_rlm_id
13025                   ,x_equip_res_class_rlm_id       =>    l_equip_res_class_rlm_id
13026                   ,x_fin_res_class_rlm_id         =>    l_fin_res_class_rlm_id
13027                   ,x_mat_res_class_rlm_id         =>    l_mat_res_class_rlm_id
13028                   ,x_return_status                =>    x_return_status
13029                   ,x_msg_count                    =>    x_msg_count
13030                   ,x_msg_data                     =>    x_msg_data);
13031 
13032             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13033                 IF l_debug_mode = 'Y' THEN
13034                    pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
13035                    pa_debug.write('REFRESH_WP_SETTINGS:  ' || g_module_name,pa_debug.g_err_stage,5);
13036                 END IF;
13037                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13038             END IF;
13039         END IF;
13040         /* Bug 4200168: FP.M:B12: Pref Changes:-----*/
13041 
13042         FOR i IN l_budget_version_id_tbl.first .. l_budget_version_id_tbl.last
13043         LOOP
13044             -- For each of the workplan versions, MC currencies should also be copied
13045             -- from plan type
13046 
13047             PA_FP_TXN_CURRENCIES_PUB.copy_fp_txn_currencies (
13048                      p_source_fp_option_id        => parent_plan_type_rec.proj_fp_options_id
13049                      ,p_target_fp_option_id       => l_proj_fp_options_id_tbl(i)
13050                      ,p_target_fp_preference_code => NULL
13051                      ,p_plan_in_multi_curr_flag   => parent_plan_type_rec.plan_in_multi_curr_flag
13052                      ,x_return_status             => x_return_status
13053                      ,x_msg_count                 => x_msg_count
13054                      ,x_msg_data                  => x_msg_data );
13055 
13056             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13057                 IF l_debug_mode = 'Y' THEN
13058                    pa_debug.g_err_stage:='Called API PA_FP_TXN_CURRENCIES_PUB.copy_fp_txn_currencies api returned error';
13059                    pa_debug.write('REFRESH_WP_SETTINGS:  ' || g_module_name,pa_debug.g_err_stage,5);
13060                 END IF;
13061                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13062             END IF;
13063 
13064             -- If resource list or time phasing has changed all the Task Assignments
13065             -- related data should be deleted
13066             IF nvl(p_resource_list_change, 'N') = 'Y' OR nvl(p_time_phase_change, 'N') = 'Y'
13067                OR nvl(p_track_costs_flag_change, 'N') = 'Y' -- bug 3797057
13068             THEN
13069 
13070             --CBS changes: Bug 13639638 start
13071               IF (PA_PROJECT_STRUCTURE_UTILS.get_resource_class_flag(p_project_id) = 'Y') then
13072                 OPEN data_for_delete_plan_txns_cur(l_budget_version_id_tbl(i));
13073                 FETCH data_for_delete_plan_txns_cur
13074                   BULK COLLECT INTO  l_task_version_id_tbl
13075                                     ,l_task_name_tbl
13076                                     ,l_task_number_tbl
13077                                     ,l_res_assignment_id_tbl    ;
13078                 CLOSE data_for_delete_plan_txns_cur;
13079             ELSE
13080 
13081                 OPEN data_for_del_all_plan_txns_cur(l_budget_version_id_tbl(i));
13082                 FETCH data_for_del_all_plan_txns_cur
13083                   BULK COLLECT INTO  l_task_version_id_tbl
13084                                     ,l_task_name_tbl
13085                                     ,l_task_number_tbl
13086                                     ,l_res_assignment_id_tbl    ;
13087                 CLOSE data_for_del_all_plan_txns_cur;
13088             END IF;
13089             --CBS changes: Bug 13639638 end
13090 
13091             IF l_debug_mode = 'Y' THEN
13092                 pa_debug.g_err_stage:='about to call delete palnning trans';
13093                 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
13094             END IF;
13095 
13096                 IF nvl(l_res_assignment_id_tbl.count,0) > 0 THEN
13097                     -- If there is any data to be deleted call delete_planning_txns api
13098                     PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions (
13099                            p_context                      => 'TASK_ASSIGNMENT'
13100                           ,p_task_or_res                  => 'ASSIGNMENT'
13101                           ,p_element_version_id_tbl       => l_task_version_id_tbl
13102                           ,p_task_number_tbl              => l_task_number_tbl
13103                           ,p_task_name_tbl                => l_task_name_tbl
13104                           ,p_resource_assignment_tbl      => l_res_assignment_id_tbl
13105                           ,p_rollup_required_flag         => 'N' --For Bug 3937716
13106                           ,p_pji_rollup_required          => 'N' /* Bug 4200168 */
13107                           ,x_return_status                => x_return_status
13108                           ,x_msg_count                    => x_msg_count
13109                           ,x_msg_data                     => x_msg_data );
13110 
13111                     IF   x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13112                        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13113                     END IF;
13114                 END IF;
13115 
13116                 /* Bug 4200168: FP.M:B12: Pref Changes: Clearing the pl/sql tables*/
13117                 l_task_version_id_tbl.delete;
13118                 l_task_name_tbl.delete;
13119                 l_task_number_tbl.delete;
13120                 l_res_assignment_id_tbl.delete;
13121 
13122             END IF; -- res list or time phase change
13123 
13124             IF nvl(p_resource_list_change, 'N') = 'Y' THEN
13125                             -- Update all the task planning elements with new FINACIAL ELEMENT rlmid
13126                 IF l_debug_mode = 'Y' THEN
13127                     pa_debug.g_err_stage:='Updaing res assignments with new FINANCIAL ELEMENTS rlmid : ' || l_fin_res_class_rlm_id;
13128                     pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
13129                 END IF;
13130 
13131                 UPDATE pa_resource_assignments
13132                 SET    resource_list_member_id  = l_people_res_class_rlm_id
13133                 WHERE  budget_version_id = l_budget_version_id_tbl(i)
13134                 AND    resource_class_code = 'PEOPLE'
13135                 AND    resource_class_flag = 'Y';
13136 
13137                 /* Assumptions: When resource list changes for working version, pa_progress_rollup would have
13138                    only task level PEOPLE assignments at this point as ta_display_flag = Y records
13139                    would have got deleted above.Hence we are updating all records in pa_progress_rollup
13140                    with the new rlmid petaining to people class rlm for working versions. */
13141                 UPDATE pa_progress_rollup
13142                 SET  object_id = l_people_res_class_rlm_id
13143                 WHERE project_id = p_project_id AND
13144                 object_type = 'PA_ASSIGNMENTS' AND
13145                 structure_type = 'WORKPLAN' AND
13146                 structure_Version_id = l_proj_struct_ver_id_tbl(i); /* for Working versions */
13147 
13148             END IF;
13149 
13150             -- If time phasing has changed call spread api to respread the
13151             -- task level effort data as per the new time phasing
13152 
13153             -- If track workplan costs flag has changed call calculate to
13154             -- calculate the costs or null them out as per the changed value
13155             IF nvl(p_time_phase_change, 'N') = 'Y'  OR
13156                nvl(p_track_costs_flag_change, 'N') = 'Y'
13157             THEN
13158 
13159                 -- Call calculate only if there are some planning transactions to be processed
13160                 SELECT count(*)
13161                 INTO   l_res_assignment_count
13162                 FROM   pa_resource_assignments
13163                 WHERE  budget_version_id = l_budget_version_id_tbl(i);
13164 
13165                 IF  l_res_assignment_count > 0 THEN
13166                     PA_FP_CALC_PLAN_PKG.calculate(
13167                           p_project_id                 =>   p_project_id
13168                          ,p_budget_version_id          =>   l_budget_version_id_tbl(i)
13169                          ,p_spread_required_flag       =>   'Y'
13170                          ,p_rollup_required_flag       =>   'N' -- bug 3937716
13171                          ,p_source_context             =>   'RESOURCE_ASSIGNMENT'
13172                          ,p_wp_cost_changed_flag       =>   nvl(p_track_costs_flag_change,'N') -- bug 3699558
13173                          ,p_time_phase_changed_flag    =>   nvl(p_time_phase_change,'N') -- bug 3699558
13174                          ,x_return_status              =>   x_return_status
13175                          ,x_msg_count                  =>   x_msg_count
13176                          ,x_msg_data                   =>   x_msg_data);
13177 
13178                     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13179                         IF l_debug_mode = 'Y' THEN
13180                            pa_debug.g_err_stage:='Called API PA_FP_CALC_PLAN_PKG.calculate api returned error';
13181                            pa_debug.write('REFRESH_WP_SETTINGS:  ' || g_module_name,pa_debug.g_err_stage,5);
13182                         END IF;
13183                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13184                     END IF;
13185                 END IF;
13186             END IF;
13187 
13188             -- Bug 3937716 If there is any change to amounts call rollup api
13189             IF nvl(p_resource_list_change, 'N') = 'Y' OR nvl(p_time_phase_change, 'N') = 'Y'
13190                OR nvl(p_track_costs_flag_change, 'N') = 'Y'
13191             THEN
13192                  PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION
13193                      ( p_budget_version_id     => l_budget_version_id_tbl(i)
13194                       ,p_entire_version        => 'Y'
13195                       ,x_return_status         => x_return_status
13196                       ,x_msg_count             => x_msg_count
13197                       ,x_msg_data              => x_msg_data);
13198 
13199                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13200                      IF l_debug_mode = 'Y' THEN
13201                         pa_debug.g_err_stage:='Called API PA_FP_ROLLUP_PKG.rollup_budget_version api returned error';
13202                         pa_debug.write('REFRESH_WP_SETTINGS:  ' || g_module_name,pa_debug.g_err_stage,5);
13203                      END IF;
13204                      RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13205                  END IF;
13206             END IF;
13207         END LOOP;
13208 
13209 
13210     END IF;  -- workplan budget versions exist
13211 
13212     -- If RBS header has been changed all the workplan versions including published
13213     -- versions should be re-mapped and re-summarized
13214     -- Jun-15-2004 Bug 3619687 rbs_version_change should be propagated to workplan
13215     -- versions only if versioning is disabled for the workplan structure
13216     -- Jun-28-2004 Bug 3725414 rbs_version_change should be propagated to working
13217     -- workplan versions even though versioning is enbled but shared structure
13218 
13219     IF nvl(p_rbs_version_change, 'N') = 'Y' AND
13220        (nvl(PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id),'N') = 'N' -- Jun-15-2004 Bug 3619687
13221         OR nvl(PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id),'N') = 'Y') -- Jun-28-2004 Bug 3725414
13222     THEN
13223         /** Bug 3725414
13224         -- Fetch all the workplan versions
13225         OPEN all_workplan_versions_cur;
13226         FETCH all_workplan_versions_cur
13227            BULK COLLECT INTO  l_budget_version_id_tbl,l_proj_fp_options_id_tbl ;
13228         CLOSE all_workplan_versions_cur;
13229         **/
13230 
13231         -- Fetch all the working plan versions in a table
13232 
13233         IF l_debug_mode = 'Y' THEN
13234             pa_debug.g_err_stage:='rbs change Yes';
13235             pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
13236         END IF;
13237 
13238 
13239         OPEN working_workplan_versions_cur;
13240         FETCH working_workplan_versions_cur
13241           BULK COLLECT INTO l_budget_version_id_tbl,l_proj_fp_options_id_tbl,l_proj_struct_ver_id_tbl ;
13242         CLOSE working_workplan_versions_cur;
13243 
13244         IF nvl(l_budget_version_id_tbl.count,0) > 0 THEN
13245 
13246             -- Bulk update all the versions with the new RBS header
13247             FORALL i IN l_budget_version_id_tbl.first .. l_budget_version_id_tbl.last
13248               UPDATE pa_proj_fp_options
13249               SET    rbs_version_id             =  parent_plan_type_rec.rbs_version_id
13250                      ,record_version_number     =  record_version_number + 1
13251                      ,last_update_date          =  SYSDATE
13252                      ,last_updated_by           =  FND_GLOBAL.user_id
13253                      ,last_update_login         =  FND_GLOBAL.login_id
13254               WHERE  proj_fp_options_id = l_proj_fp_options_id_tbl(i);
13255 
13256             -- For each of the versions, RBS re-mapping and re-summarization needs to be done
13257             FOR i IN  l_budget_version_id_tbl.first ..  l_budget_version_id_tbl.last LOOP
13258                 IF  parent_plan_type_rec.rbs_version_id IS NOT NULL THEN
13259                   -- Call RBS mapping api for the entire version
13260                   -- The api returns rbs element id, txn accum header id for each
13261                   -- resource assignment id in the form of plsql tables
13262                   PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs(
13263                        p_budget_version_id         =>   l_budget_version_id_tbl(i)
13264                       ,p_resource_list_id          =>   parent_plan_type_rec.cost_resource_list_id
13265                       ,p_rbs_version_id            =>   parent_plan_type_rec.rbs_version_id
13266                       ,p_calling_process           =>   'RBS_REFRESH'
13267                       ,p_calling_context           =>   'PLSQL'
13268                       ,p_process_code              =>   'RBS_MAP'
13269                       ,p_calling_mode              =>   'BUDGET_VERSION'
13270                       ,p_init_msg_list_flag        =>   'N'
13271                       ,p_commit_flag               =>   'N'
13272                       ,x_txn_source_id_tab         =>   l_txn_source_id_tbl
13273                       ,x_res_list_member_id_tab    =>   l_res_list_member_id_tbl
13274                       ,x_rbs_element_id_tab        =>   l_rbs_element_id_tbl
13275                       ,x_txn_accum_header_id_tab   =>   l_txn_accum_header_id_tbl
13276                       ,x_return_status             =>   x_return_status
13277                       ,x_msg_count                 =>   x_msg_count
13278                       ,x_msg_data                  =>   x_msg_data);
13279 
13280                   -- Check return status
13281                   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13282                       IF l_debug_mode = 'Y' THEN
13283                          pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Map_Rlmi_Rbs api returned error';
13284                          pa_debug.write('REFRESH_WP_SETTINGS:  ' || g_module_name,pa_debug.g_err_stage,5);
13285                       END IF;
13286                       RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13287                   ELSE
13288                       -- Check count of the required out tables to be the same
13289                       IF l_txn_source_id_tbl.count <> l_rbs_element_id_tbl.count OR
13290                          l_txn_source_id_tbl.count <> l_txn_accum_header_id_tbl.count
13291                       THEN
13292                           IF l_debug_mode = 'Y' THEN
13293                              pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Map_Rlmi_Rbs api
13294                                                     returned out tables with different count';
13295                              pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
13296                              pa_debug.g_err_stage:='l_txn_source_id_tbl.count = ' || l_txn_source_id_tbl.count;
13297                              pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
13298                              pa_debug.g_err_stage:='l_rbs_element_id_tbl.count = ' || l_rbs_element_id_tbl.count;
13299                              pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
13300                              pa_debug.g_err_stage:=
13301                                   'l_txn_accum_header_id_tbl.count = ' || l_txn_accum_header_id_tbl.count;
13302                              pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
13303                           END IF;
13304                           RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13305                       END IF;
13306                   END IF;
13307 
13308                   -- Check if out table has any records first
13309                   IF nvl(l_txn_source_id_tbl.last,0) >= 1 THEN
13310                       -- Update resource assignments data for the version
13311                       -- Bug 3641252 changed the index from i to j
13312                       FORALL j IN l_txn_source_id_tbl.first .. l_txn_source_id_tbl.last
13313                           UPDATE pa_resource_assignments
13314                           SET     rbs_element_id          =  l_rbs_element_id_tbl(j)
13315                                  ,txn_accum_header_id     =  l_txn_accum_header_id_tbl(j)
13316                                  ,record_version_number   =  record_version_number + 1
13317                                  ,last_update_date        =  SYSDATE
13318                                  ,last_updated_by         =  FND_GLOBAL.user_id
13319                                  ,last_update_login       =  FND_GLOBAL.login_id
13320                           WHERE  budget_version_id = l_budget_version_id_tbl(i)
13321                           AND    resource_assignment_id = l_txn_source_id_tbl(j);
13322                   END IF;
13323                 ELSE -- rbs version id is null
13324 
13325                     -- Update all the resource assigments with null for rbs _element_id
13326                     UPDATE pa_resource_assignments
13327                     SET     rbs_element_id          =  null
13328                            ,txn_accum_header_id     =  null
13329                            ,record_version_number   =  record_version_number + 1
13330                            ,last_update_date        =  SYSDATE
13331                            ,last_updated_by         =  FND_GLOBAL.user_id
13332                            ,last_update_login       =  FND_GLOBAL.login_id
13333                     WHERE  budget_version_id = l_budget_version_id_tbl(i);
13334 
13335                     IF l_debug_mode = 'Y' THEN
13336                         pa_debug.g_err_stage:='Done with mapping';
13337                         pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
13338                     END IF;
13339 
13340 
13341                 END IF;
13342 
13343                 /* Bug 4200168: FP.M:B12: Pref Changes: Clearing the pl/sql tables*/
13344                 l_txn_source_id_tbl.delete;
13345                 l_res_list_member_id_tbl.delete;
13346                 l_rbs_element_id_tbl.delete;
13347                 l_txn_accum_header_id_tbl.delete;
13348             END LOOP;
13349         END IF;  -- if versions exist
13350     END IF;   -- if RBS has changed
13351 
13352     --  Adding for bug 4543744
13353     /*   Collecting all the working version records and inserting into the pji table
13354          with positive values of budget lines                                     */
13355     IF nvl(p_resource_list_change, 'N') = 'Y' OR nvl(p_time_phase_change, 'N') = 'Y'
13356            OR nvl(p_track_costs_flag_change, 'N') = 'Y' OR ( nvl(p_rbs_version_change, 'N') = 'Y' AND
13357                (nvl(PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id),'N') = 'N'
13358                 OR nvl(PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id),'N') = 'Y')) THEN
13359                 IF l_debug_mode = 'Y' THEN
13360                     pa_debug.g_err_stage:='About to insert positive values with new rbs element ids';
13361                     pa_debug.write( g_module_name,pa_debug.g_err_stage,5);
13362                 END IF;
13363 
13364 
13365                 FOR i IN l_budget_version_id_tbl.FIRST .. l_budget_version_id_tbl.LAST
13366                 LOOP
13367                     PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api
13368                     --( p_source                  => 'POPULATE_PJI_TABLE'   --Commented for bug 5073350.
13369                     ( p_source                  => 'REFRESH_WP_SETTINGS'
13370                      ,p_budget_version_id       => l_budget_version_id_tbl(i)
13371                      ,p_qty_sign                => 1
13372                      ,x_return_status           => x_return_status
13373                      ,x_msg_data                => x_msg_data
13374                      ,x_msg_count               => x_msg_count);
13375 
13376             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13377                       IF l_debug_mode = 'Y' THEN
13378                           pa_debug.g_err_stage:='PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api returned error';
13379                           pa_debug.write( g_module_name,pa_debug.g_err_stage,5);
13380                       END IF;                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13381             END IF;
13382                 END LOOP;
13383 
13384               /* Start of commented code for bug 5073350.
13385                 This call will update all the plan versions of a project which are affected due to the
13386                 workplan paln settings change.If any of those versions is in pending processing status,
13387                 as per the PJI design error will be thrown.So, commenting out this code.
13388                 The PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE api will be called seperately for each plan version
13389                 in PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api.
13390 
13391                 PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE (
13392                   x_return_status    => x_return_status,
13393                   x_msg_code         => l_error_msg_code);
13394 
13395             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13396                 PA_UTILS.ADD_MESSAGE(p_app_short_name      => 'PA',
13397                                      p_msg_name            => l_error_msg_code);
13398                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13399             END IF;
13400 
13401             End of commented code for bug 5073350*/
13402     END IF; -- inserting positive rows
13403 
13404     IF l_debug_mode = 'Y' THEN
13405         pa_debug.g_err_stage:='Exiting REFRESH_WP_SETTINGS';
13406         pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
13407     -- reset curr function
13408        pa_debug.reset_curr_function();
13409     END IF;
13410 
13411 EXCEPTION
13412 
13413    WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
13414        l_msg_count := FND_MSG_PUB.count_msg;
13415        IF l_msg_count = 1 THEN
13416            PA_INTERFACE_UTILS_PUB.get_messages
13417                  (p_encoded        => FND_API.G_TRUE
13418                   ,p_msg_index      => 1
13419                   ,p_msg_count      => l_msg_count
13420                   ,p_msg_data       => l_msg_data
13421                   ,p_data           => l_data
13422                   ,p_msg_index_out  => l_msg_index_out);
13423 
13424            x_msg_data := l_data;
13425            x_msg_count := l_msg_count;
13426        ELSE
13427            x_msg_count := l_msg_count;
13428        END IF;
13429 
13430        x_return_status := FND_API.G_RET_STS_ERROR;
13431 
13432        IF l_debug_mode = 'Y' THEN
13433            pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
13434            pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
13435        -- reset curr function
13436           pa_debug.reset_curr_function();
13437        END IF;
13438 
13439        RETURN;
13440    WHEN Others THEN
13441        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13442        x_msg_count     := 1;
13443        x_msg_data      := SQLERRM;
13444 
13445        FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'PA_FP_PLANNING_TRANSACTION_PUB'
13446                                ,p_procedure_name  => 'REFRESH_WP_SETTINGS');
13447 
13448        IF l_debug_mode = 'Y' THEN
13449            pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
13450            pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
13451        -- reset curr function
13452           pa_debug.Reset_Curr_Function();
13453        END IF;
13454        RAISE;
13455 END REFRESH_WP_SETTINGS;
13456 
13457 /*=============================================================================
13458  This api is called when ever RBS should be changed for budget versions.
13459 
13460  Usage:
13461  p_calling_context    --> 'ALL_CHILD_VERSIONS'
13462  p_budget_version_id  -->  null
13463                         If there is a change in RBS for a financial plan type
13464                         to push the change to the underlying budget version.
13465                         p_budget_version_id  would be null
13466 
13467  p_calling_context    --> 'SINGLE_VERSION'
13468  p_budget_version_id  --> not null, version id should be passed
13469                       --> This mode is useful for creation of working versions
13470                           out of published versions, or copy amounts case from
13471                           a different version
13472 
13473  Bug 3867302  Sep 21 2004 For ci versions reporting data is not maintained
13474 ==============================================================================*/
13475 
13476 PROCEDURE Refresh_rbs_for_versions(
13477           p_project_id            IN   pa_projects_all.project_id%TYPE
13478           ,p_fin_plan_type_id     IN   pa_budget_versions.fin_plan_type_id%TYPE
13479           ,p_calling_context      IN   VARCHAR2  -- Default 'ALL_CHILD_VERSIONS'
13480           ,p_budget_version_id    IN   pa_budget_versions.budget_version_id%TYPE  -- Default null
13481           ,x_return_status        OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13482           ,x_msg_count            OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
13483           ,x_msg_data             OUT  NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
13484 AS
13485 
13486     --Start of variables used for debugging
13487 
13488     l_return_status      VARCHAR2(1);
13489     l_msg_count          NUMBER := 0;
13490     l_msg_data           VARCHAR2(2000);
13491     l_data               VARCHAR2(2000);
13492     l_msg_index_out      NUMBER;
13493     l_debug_mode         VARCHAR2(30);
13494     l_error_msg_code     VARCHAR2(30);
13495 
13496     --End of variables used for debugging
13497 
13498     l_rbs_version_id     NUMBER;
13499 
13500     CURSOR working_budget_Versions_cur IS
13501     SELECT o.proj_fp_options_id,
13502            o.fin_plan_version_id,
13503            bv.resource_list_id
13504     FROM   pa_proj_fp_options o,
13505            pa_budget_versions bv
13506     WHERE  o.project_id = p_project_id
13507     AND    o.fin_plan_type_id = p_fin_plan_type_id
13508     AND    o.fin_plan_version_id = bv.budget_version_id
13509     AND    bv.ci_id IS NULL -- bug 3867302
13510     AND    bv.budget_status_code IN ('W', 'S');
13511 
13512     CURSOR input_budget_version_cur IS
13513     SELECT o.proj_fp_options_id
13514            ,o.fin_plan_version_id
13515            ,bv.resource_list_id
13516            ,o.fin_plan_type_id
13517            ,bv.ci_id
13518     FROM   pa_budget_versions bv,
13519            pa_proj_fp_options o
13520     WHERE  bv.project_id = o.project_id
13521     AND    bv.fin_plan_type_id = o.fin_plan_type_id
13522     AND    bv.budget_version_id = o.fin_plan_version_id
13523     AND    bv.budget_version_id = p_budget_version_id;
13524 
13525     input_budget_version_rec  input_budget_version_cur%ROWTYPE;
13526 
13527 
13528     l_budget_version_id_tbl      SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
13529     l_proj_fp_options_id_tbl     SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
13530     l_resource_list_id_tbl       SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
13531 
13532     l_txn_source_id_tbl          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13533     l_res_list_member_id_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13534     l_rbs_element_id_tbl         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13535     l_txn_accum_header_id_tbl    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13536 
13537 BEGIN
13538 
13539     x_msg_count := 0;
13540     x_return_status := FND_API.G_RET_STS_SUCCESS;
13541 
13542     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
13543     l_debug_mode := NVL(l_debug_mode, 'Y');
13544 
13545     -- Set curr function
13546 IF l_debug_mode = 'Y' THEN
13547     pa_debug.set_curr_function(
13548                 p_function   =>'PAFPPTPB.Refresh_rbs_for_versions'
13549                ,p_debug_mode => l_debug_mode );
13550 END IF;
13551     -- Check for business rules violations
13552     IF l_debug_mode = 'Y' THEN
13553         pa_debug.g_err_stage:='Validating input parameters';
13554         pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,3);
13555     END IF;
13556 
13557     IF (p_project_id IS NULL) OR
13558        (p_fin_plan_type_id IS NULL) OR
13559        (p_calling_context = 'SINGLE_VERSION' AND p_budget_version_id IS NULL )
13560     THEN
13561 
13562         IF l_debug_mode = 'Y' THEN
13563            pa_debug.g_err_stage:='Project_id = '||p_project_id;
13564            pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
13565 
13566            pa_debug.g_err_stage:='Fin_plan_type_id = '||p_fin_plan_type_id;
13567            pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
13568 
13569            pa_debug.g_err_stage:='p_calling_context = '||p_calling_context;
13570            pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
13571 
13572            pa_debug.g_err_stage:='p_budget_version_id = '||p_budget_version_id;
13573            pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
13574         END IF;
13575 
13576         PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
13577                               p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
13578                               p_token1         => 'PROCEDURENAME',
13579                               p_value1         => 'pa_fp_planning_transaction_pub.Refresh_rbs_for_versions');
13580 
13581         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13582 
13583     END IF;
13584 
13585     -- fetch plan type level rbs version id
13586     Select rbs_version_id
13587     into   l_rbs_version_id
13588     from   pa_proj_fp_options
13589     where  project_id = p_project_id
13590     and    fin_plan_type_id = p_fin_plan_type_id
13591     and    fin_plan_option_level_code = 'PLAN_TYPE';
13592 
13593     -- if context is 'SINGLE_VERSION' fetch required info about budget version id is passed
13594     IF p_calling_context = 'SINGLE_VERSION' THEN
13595 
13596         OPEN input_budget_version_cur;
13597         FETCH input_budget_version_cur
13598             INTO input_budget_version_rec;
13599         CLOSE input_budget_version_cur;
13600 
13601         -- Bug 3867302 If i/p version is a ci version just return
13602         -- Added NOT for bug 4094762
13603         IF input_budget_version_rec.ci_id IS NOT NULL THEN
13604 
13605              IF l_debug_mode = 'Y' THEN
13606                pa_debug.g_err_stage:=' PJI data not required for CI versions. Returning';
13607                pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,3);
13608              pa_debug.reset_curr_function();
13609 	     END IF;
13610              RETURN;
13611 
13612         END IF;
13613 
13614         l_proj_fp_options_id_tbl :=
13615              SYSTEM.pa_num_tbl_type(input_budget_version_rec.proj_fp_options_id);
13616         l_budget_version_id_tbl  :=
13617              SYSTEM.pa_num_tbl_type(input_budget_version_rec.fin_plan_version_id);
13618         l_resource_list_id_tbl   :=
13619              SYSTEM.pa_num_tbl_type(input_budget_version_rec.resource_list_id);
13620 
13621     ELSE
13622 
13623         OPEN working_budget_Versions_cur;
13624         FETCH working_budget_Versions_cur
13625             BULK COLLECT INTO l_proj_fp_options_id_tbl,
13626                               l_budget_version_id_tbl,
13627                               l_resource_list_id_tbl;
13628         CLOSE working_budget_Versions_cur;
13629 
13630         -- if there are no budget versions for the plan type return
13631         IF l_budget_version_id_tbl.count = 0 THEN
13632             IF l_debug_mode = 'Y' THEN
13633                pa_debug.g_err_stage:='Working Versions do not exist for the plan type. Returning';
13634                pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,3);
13635                pa_debug.reset_curr_function();
13636  	END IF;
13637             RETURN;
13638         END IF;
13639 
13640     END IF;
13641 
13642     -- bulk update all the budget versions with the rbs version id
13643     forall i in l_proj_fp_options_id_tbl.first .. l_proj_fp_options_id_tbl.last
13644        update pa_proj_fp_options
13645        set    rbs_version_id               = l_rbs_version_id
13646              ,record_version_number        =  record_version_number + 1
13647              ,last_update_date             =  SYSDATE
13648              ,last_updated_by              =  FND_GLOBAL.user_id
13649              ,last_update_login            =  FND_GLOBAL.login_id
13650        WHERE proj_fp_options_id  = l_proj_fp_options_id_tbl(i);
13651 
13652     -- for each of the versions, RBS re-mapping and re-summarization needs to be done
13653     FOR i IN  l_budget_version_id_tbl.first ..  l_budget_version_id_tbl.last LOOP
13654         IF  l_rbs_version_id IS NOT NULL THEN
13655           -- Call RBS mapping api for the entire version
13656           -- The api returns rbs element id, txn accum header id for each
13657           -- resource assignment id in the form of plsql tables
13658           PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs(
13659                p_budget_version_id         =>   l_budget_version_id_tbl(i)
13660               ,p_resource_list_id          =>   l_resource_list_id_tbl(i)
13661               ,p_rbs_version_id            =>   l_rbs_version_id
13662               ,p_calling_process           =>   'RBS_REFRESH'
13663               ,p_calling_context           =>   'PLSQL'
13664               ,p_process_code              =>   'RBS_MAP'
13665               ,p_calling_mode              =>   'BUDGET_VERSION'
13666               ,p_init_msg_list_flag        =>   'N'
13667               ,p_commit_flag               =>   'N'
13668               ,x_txn_source_id_tab         =>   l_txn_source_id_tbl
13669               ,x_res_list_member_id_tab    =>   l_res_list_member_id_tbl
13670               ,x_rbs_element_id_tab        =>   l_rbs_element_id_tbl
13671               ,x_txn_accum_header_id_tab   =>   l_txn_accum_header_id_tbl
13672               ,x_return_status             =>   x_return_status
13673               ,x_msg_count                 =>   x_msg_count
13674               ,x_msg_data                  =>   x_msg_data);
13675 
13676           -- Check return status
13677           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13678               IF l_debug_mode = 'Y' THEN
13679                  pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Map_Rlmi_Rbs api returned error';
13680                  pa_debug.write('REFRESH_WP_SETTINGS:  ' || g_module_name,pa_debug.g_err_stage,5);
13681               END IF;
13682               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13683           ELSE
13684               -- Check count of the required out tables to be the same
13685               IF l_txn_source_id_tbl.count <> l_rbs_element_id_tbl.count OR
13686                  l_txn_source_id_tbl.count <> l_txn_accum_header_id_tbl.count
13687               THEN
13688                   IF l_debug_mode = 'Y' THEN
13689                      pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Map_Rlmi_Rbs api
13690                                             returned out tables with different count';
13691                      pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
13692                      pa_debug.g_err_stage:='l_txn_source_id_tbl.count = ' || l_txn_source_id_tbl.count;
13693                      pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
13694                      pa_debug.g_err_stage:='l_rbs_element_id_tbl.count = ' || l_rbs_element_id_tbl.count;
13695                      pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
13696                      pa_debug.g_err_stage:=
13697                           'l_txn_accum_header_id_tbl.count = ' || l_txn_accum_header_id_tbl.count;
13698                      pa_debug.write('Refresh_Plan_Txns:  ' || g_module_name,pa_debug.g_err_stage,5);
13699                   END IF;
13700                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13701               END IF;
13702           END IF;
13703 
13704           -- Check if out table has any records first
13705           IF nvl(l_txn_source_id_tbl.last,0) >= 1 THEN
13706               -- Update resource assignments data for the version
13707               -- Bug 3641252 changed the index from i to j
13708               FORALL j IN l_txn_source_id_tbl.first .. l_txn_source_id_tbl.last
13709                   UPDATE pa_resource_assignments
13710                   SET     rbs_element_id          =  l_rbs_element_id_tbl(j)
13711                          ,txn_accum_header_id     =  l_txn_accum_header_id_tbl(j)
13712                          ,record_version_number   =  record_version_number + 1
13713                          ,last_update_date        =  SYSDATE
13714                          ,last_updated_by         =  FND_GLOBAL.user_id
13715                          ,last_update_login       =  FND_GLOBAL.login_id
13716                   WHERE  budget_version_id = l_budget_version_id_tbl(i)
13717                   AND    resource_assignment_id = l_txn_source_id_tbl(j);
13718           END IF;
13719         ELSE -- rbs version id is null
13720 
13721             -- Update all the resource assigments with null for rbs _element_id
13722             UPDATE pa_resource_assignments
13723             SET     rbs_element_id          =  null
13724                    ,txn_accum_header_id     =  null
13725                    ,record_version_number   =  record_version_number + 1
13726                    ,last_update_date        =  SYSDATE
13727                    ,last_updated_by         =  FND_GLOBAL.user_id
13728                    ,last_update_login       =  FND_GLOBAL.login_id
13729             WHERE  budget_version_id = l_budget_version_id_tbl(i);
13730 
13731         END IF;
13732     END LOOP;
13733 
13734     -- Call PJI delete api first to delete existing summarization data
13735     PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE (
13736           p_fp_version_ids   => l_budget_version_id_tbl,
13737           x_return_status    => x_return_status,
13738           x_msg_code         => l_error_msg_code);
13739 
13740     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13741         PA_UTILS.ADD_MESSAGE(p_app_short_name      => 'PA',
13742                              p_msg_name            => l_error_msg_code);
13743         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13744     END IF;
13745 
13746     -- Call PLAN_CREATE to create summarization data as per the new RBS
13747     PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE (
13748           p_fp_version_ids   => l_budget_version_id_tbl,
13749           x_return_status    => x_return_status,
13750           x_msg_code         => l_error_msg_code);
13751 
13752     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13753         PA_UTILS.ADD_MESSAGE(p_app_short_name      => 'PA',
13754                              p_msg_name            => l_error_msg_code);
13755         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13756     END IF;
13757 
13758     IF l_debug_mode = 'Y' THEN
13759         pa_debug.g_err_stage:='Exiting Refresh_rbs_for_versions';
13760         pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,3);
13761     -- reset curr function
13762         pa_debug.reset_curr_function();
13763     END IF;
13764 
13765 EXCEPTION
13766 
13767    WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
13768        l_msg_count := FND_MSG_PUB.count_msg;
13769        IF l_msg_count = 1 THEN
13770            PA_INTERFACE_UTILS_PUB.get_messages
13771                  (p_encoded        => FND_API.G_TRUE
13772                   ,p_msg_index      => 1
13773                   ,p_msg_count      => l_msg_count
13774                   ,p_msg_data       => l_msg_data
13775                   ,p_data           => l_data
13776                   ,p_msg_index_out  => l_msg_index_out);
13777 
13778            x_msg_data := l_data;
13779            x_msg_count := l_msg_count;
13780        ELSE
13781            x_msg_count := l_msg_count;
13782        END IF;
13783 
13784        x_return_status := FND_API.G_RET_STS_ERROR;
13785 
13786        IF l_debug_mode = 'Y' THEN
13787            pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
13788            pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
13789        -- reset curr function
13790           pa_debug.reset_curr_function();
13791        END IF;
13792        RETURN;
13793    WHEN Others THEN
13794        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13795        x_msg_count     := 1;
13796        x_msg_data      := SQLERRM;
13797 
13798        FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'pa_fp_planning_transaction_pub'
13799                                ,p_procedure_name  => 'Refresh_rbs_for_versions');
13800 
13801        IF l_debug_mode = 'Y' THEN
13802            pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
13803            pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
13804        -- reset curr function
13805        pa_debug.Reset_Curr_Function();
13806        END IF;
13807        RAISE;
13808 END Refresh_rbs_for_versions;
13809 
13810 --This function returns 'N' if a record already exists in pa_resource_assignments
13811 --for a given budget version id, task id and resource list member id
13812 --Returns 'Y' if the record is not already there
13813 FUNCTION DUP_EXISTS
13814 ( p_budget_version_id       IN pa_budget_versions.budget_version_id%TYPE
13815  ,p_task_id                 IN pa_tasks.task_id%TYPE
13816  ,p_resource_list_member_id IN pa_resource_list_members.resource_list_member_id%TYPE
13817  ,p_project_id              IN pa_projects_all.project_id%TYPE)
13818 RETURN VARCHAR2
13819 IS
13820 l_dup_exists     VARCHAR2(1);
13821 BEGIN
13822 
13823         BEGIN
13824             SELECT 'Y'
13825             INTO   l_dup_exists
13826             FROM   pa_resource_assignments
13827             WHERE  task_id=p_task_id
13828             AND    resource_list_member_id=p_resource_list_member_id
13829             AND    budget_version_id=p_budget_version_id
13830             AND    project_assignment_id=-1
13831             AND    project_id=p_project_id;
13832         EXCEPTION
13833         WHEN NO_DATA_FOUND THEN
13834             l_dup_exists:='N';
13835         END;
13836         RETURN l_dup_exists;
13837 
13838 END DUP_EXISTS;
13839 
13840 END PA_FP_PLANNING_TRANSACTION_PUB;
13841