[Home] [Help]
PACKAGE BODY: APPS.PA_BUDGET_PUB
Source
1 package body PA_BUDGET_PUB as
2 --$Header: PAPMBUPB.pls 120.37.12020000.7 2013/05/24 10:10:15 djambhek ship $
3
4 --package global to be used during updates
5 G_USER_ID CONSTANT NUMBER := FND_GLOBAL.user_id;
6 G_LOGIN_ID CONSTANT NUMBER := FND_GLOBAL.login_id;
7 l_pm_product_code VARCHAR2(2) :='Z'; /*for bug 2413400 a new variable defined.*/
8
9 -- Bug Fix: 4569365. Removed MRC code.
10 -- g_mrc_exception EXCEPTION; /* FPB2 */
11
12 g_module_name VARCHAR2(100) := 'pa.plsql.PA_BUDGET_PUB';
13
14
15 /*new cursor for bug no 2413400*/
16 Cursor p_product_code_csr (p_pm_product_code IN VARCHAR2)
17 Is
18 Select 'X'
19 from pa_lookups
20 where lookup_type='PM_PRODUCT_CODE'
21 and lookup_code = p_pm_product_code;
22
23 -- Added by Xin Liu 24-APR-03
24
25 FUNCTION get_project_id return pa_projects_all.project_id%type
26 is
27 BEGIN
28 return PA_BUDGET_PUB.G_PROJECT_ID;
29 END;
30
31 PROCEDURE set_project_id (p_project_id IN PA_PROJECTS_ALL.project_id%type) is
32 BEGIN
33 PA_BUDGET_PUB.G_Project_Id := p_project_id;
34 END;
35
36
37
38
39 ----------------------------------------------------------------------------------------
40 --Name: create_draft_budget
41 --Type: Procedure
42 --Description: This procedure can be used to create a draft budget with budget lines
43 --
44 --
45 --Called subprograms: PA_BUDGET_UTILS.create_draft
46 -- pa_budget_pvt.insert_budget_line
47 -- pa_budget_lines_v_pkg.check_overlapping_dates
48 -- PA_BUDGET_UTILS.summerize_project_totals
49 -- PA_BUDGET_FUND_PKG.get_budget_ctrl_options
50 --
51 --
52 --
53 --History:
54 -- 19-SEP-1996 L. de Werker Created
55 -- 19-NOV-1996 L. de Werker Changed for use of PA_BUDGET_PVT.INSERT_BUDGET_LINE
56 -- 28-NOV-1996 L. de Werker Add 16 parameters for descriptive flexfields
57 -- 29-NOV-1996 L. de Werker Added parameter p_pm_budget_reference
58 -- 05-DEC-1996 L. de Werker Added validation for change_reason_code
59 -- 07-DEC-1996 L. de Werker Added locking mechanism, because previous draft budget is deleted
60 -- 12-DEC-1996 L. de Werker Added update for pm_budget_reference and pm_product_code
61 -- 12-DEC-1996 L. de Werker Added raising error when working budget is already submitted.
62 --
63 -- 02-MAY-01 jwhite As per the Non-Project Budget Ingtegration
64 -- development effort, if budget is enabled for budgetary
65 -- controls, the baseline process will be
66 -- aborted.
67 --
68 -- 11-FEB-02 Srikanth Added the changes required for AMG due to finplan model
69
70
71 PROCEDURE create_draft_budget
72 ( p_api_version_number IN NUMBER
73 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
74 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
75 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
76 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
77 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
78 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
79 ,p_pm_budget_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
80 , p_budget_version_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
81 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
82 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
83 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
84 ,p_change_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
85 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
86 ,p_entry_method_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
87 ,p_resource_list_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
88 ,p_resource_list_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
89 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
90 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
91 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
92 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
93 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
94 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
95 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
96 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
97 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
98 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
99 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
100 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
101 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
102 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
103 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
104 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
105 ,p_budget_lines_in IN budget_line_in_tbl_type
106 ,p_budget_lines_out OUT NOCOPY budget_line_out_tbl_type
107
108 /*Parameters due fin plan model */
109 ,p_fin_plan_type_id IN pa_fin_plan_types_b.fin_plan_type_id%TYPE
110 ,p_fin_plan_type_name IN pa_fin_plan_types_vl.name%TYPE
111 ,p_version_type IN pa_budget_versions.version_type%TYPE
112 ,p_fin_plan_level_code IN pa_proj_fp_options.cost_fin_plan_level_code%TYPE
113 ,p_time_phased_code IN pa_proj_fp_options.cost_time_phased_code%TYPE
114 ,p_plan_in_multi_curr_flag IN pa_proj_fp_options.plan_in_multi_curr_flag%TYPE
115 ,p_projfunc_cost_rate_type IN pa_proj_fp_options.projfunc_cost_rate_type%TYPE
116 ,p_projfunc_cost_rate_date_typ IN pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE
117 ,p_projfunc_cost_rate_date IN pa_proj_fp_options.projfunc_cost_rate_date%TYPE
118 ,p_projfunc_rev_rate_type IN pa_proj_fp_options.projfunc_rev_rate_type%TYPE
119 ,p_projfunc_rev_rate_date_typ IN pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE
120 ,p_projfunc_rev_rate_date IN pa_proj_fp_options.projfunc_rev_rate_date%TYPE
121 ,p_project_cost_rate_type IN pa_proj_fp_options.project_cost_rate_type%TYPE
122 ,p_project_cost_rate_date_typ IN pa_proj_fp_options.project_cost_rate_date_type%TYPE
123 ,p_project_cost_rate_date IN pa_proj_fp_options.project_cost_rate_date%TYPE
124 ,p_project_rev_rate_type IN pa_proj_fp_options.project_rev_rate_type%TYPE
125 ,p_project_rev_rate_date_typ IN pa_proj_fp_options.project_rev_rate_date_type%TYPE
126 ,p_project_rev_rate_date IN pa_proj_fp_options.project_rev_rate_date%TYPE
127 ,p_raw_cost_flag IN VARCHAR2
128 ,p_burdened_cost_flag IN VARCHAR2
129 ,p_revenue_flag IN VARCHAR2
130 ,p_cost_qty_flag IN VARCHAR2
131 ,p_revenue_qty_flag IN VARCHAR2
132 ,P_all_qty_flag IN VARCHAR2
133 ,p_create_new_curr_working_flag IN VARCHAR2
134 ,p_replace_current_working_flag IN VARCHAR2
135 ,p_using_resource_lists_flag IN VARCHAR2
136 )
137 IS
138
139 --Cursor to get the budget version id in the old budget model
140 CURSOR l_budget_version_csr
141 ( c_project_id NUMBER
142 ,c_budget_type_code VARCHAR2 )
143 IS
144 SELECT budget_version_id
145 ,budget_status_code
146 FROM pa_budget_versions
147 WHERE project_id = c_project_id
148 AND budget_type_code = c_budget_type_code
149 AND budget_status_code IN ('W','S')
150 AND ci_id IS NULL; -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
151
152
153 l_budget_version_rec l_budget_version_csr%ROWTYPE;
154
155 --Cursor to lock the budget version .
156 CURSOR l_lock_old_budget_csr( c_budget_version_id NUMBER )
157 IS
158 SELECT 'x'
159 FROM pa_budget_versions bv
160 ,pa_resource_assignments ra
161 ,pa_budget_lines bl
162 WHERE bv.budget_version_id = c_budget_version_id
163 AND bv.budget_version_id = ra.budget_version_id (+)
164 AND ra.resource_assignment_id = bl.resource_assignment_id (+)
165 AND bv.ci_id IS NULL -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
166 FOR UPDATE OF bv.budget_version_id,ra.budget_version_id,bl.resource_assignment_id NOWAIT;
167
168
169
170 l_api_name CONSTANT VARCHAR2(30) := 'create_draft_budget';
171 l_return_status VARCHAR2(1);
172
173 l_project_id pa_projects_all.project_id%TYPE;
174 l_resource_list_id pa_resource_lists_all_bg.resource_list_id%TYPE;
175 l_budget_version_id pa_budget_versions.budget_version_id%TYPE;
176 l_err_code NUMBER;
177 l_err_stage VARCHAR2(120);
178 l_err_stack VARCHAR2(630);
179 i NUMBER;
180 l_budget_line_in_rec pa_budget_pub.budget_line_in_rec_type;
181 l_budget_entry_method_rec pa_budget_entry_methods%rowtype;
182 l_budget_amount_code pa_budget_types.budget_amount_code%type;
183 l_description VARCHAR2(255);
184 l_resource_name pa_resource_lists_tl.Name%type;
185 l_dummy VARCHAR2(1);
186 l_attribute_category VARCHAR2(30);
187 l_attribute1 VARCHAR2(150);
188 l_attribute2 VARCHAR2(150);
189 l_attribute3 VARCHAR2(150);
190 l_attribute4 VARCHAR2(150);
191 l_attribute5 VARCHAR2(150);
192 l_attribute6 VARCHAR2(150);
193 l_attribute7 VARCHAR2(150);
194 l_attribute8 VARCHAR2(150);
195 l_attribute9 VARCHAR2(150);
196 l_attribute10 VARCHAR2(150);
197 l_attribute11 VARCHAR2(150);
198 l_attribute12 VARCHAR2(150);
199 l_attribute13 VARCHAR2(150);
200 l_attribute14 VARCHAR2(150);
201 l_attribute15 VARCHAR2(150);
202 l_pm_budget_reference pa_budget_versions.pm_budget_reference%type; --Bug 3231587
203 l_change_reason_code pa_budget_versions.change_reason_code%type;
204 l_budget_version_name VARCHAR2(60);
205 l_budget_rlmid NUMBER;
206 l_budget_alias VARCHAR2(80); --bug 3711693
207
208 l_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE ;
209 l_fin_plan_type_name pa_fin_plan_types_vl.name%TYPE ;
210 l_version_type pa_budget_versions.version_type%TYPE ;
211 l_fin_plan_level_code pa_proj_fp_options.cost_fin_plan_level_code%TYPE ;
212 l_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE ;
213 l_plan_in_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
214 l_projfunc_cost_rate_type pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
215 l_projfunc_cost_rate_date_typ pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE ;
216 l_projfunc_cost_rate_date pa_proj_fp_options.projfunc_cost_rate_date%TYPE ;
217 l_projfunc_rev_rate_type pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
218 l_projfunc_rev_rate_date_typ pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE;
219 l_projfunc_rev_rate_date pa_proj_fp_options.projfunc_rev_rate_date%TYPE ;
220 l_project_cost_rate_type pa_proj_fp_options.project_cost_rate_type%TYPE ;
221 l_project_cost_rate_date_typ pa_proj_fp_options.project_cost_rate_date_type%TYPE ;
222 l_project_cost_rate_date pa_proj_fp_options.project_cost_rate_date%TYPE ;
223 l_project_rev_rate_type pa_proj_fp_options.project_rev_rate_type%TYPE ;
224 l_project_rev_rate_date_typ pa_proj_fp_options.project_rev_rate_date_type%TYPE ;
225 l_project_rev_rate_date pa_proj_fp_options.project_rev_rate_date%TYPE ;
226 l_raw_cost_flag VARCHAR2(1) ;
227 l_burdened_cost_flag VARCHAR2(1);
228 l_revenue_flag VARCHAR2(1);
229 l_cost_qty_flag VARCHAR2(1);
230 l_revenue_qty_flag VARCHAR2(1);
231 l_all_qty_flag VARCHAR2(1);
232 l_create_new_working_flag VARCHAR2(1);
233 l_replace_current_working_flag VARCHAR2(1);
234 l_allow_cost_budget_entry_flag VARCHAR2(1);
235 l_allow_rev_budget_entry_flag VARCHAR2(1);
236 p_multiple_task_msg VARCHAR2(1) := 'T';
237 l_resource_list_name pa_resource_lists_tl.Name%TYPE;
238 l_msg_count NUMBER := 0;
239 l_data VARCHAR2(2000);
240 l_msg_data VARCHAR2(2000);
241 l_msg_index_out NUMBER;
242 l_budget_lines_in budget_line_in_tbl_type;
243 l_allow_qty_flag VARCHAR2(1);
244 l_uncategorized_res_list_id pa_resource_list_members.resource_list_id%TYPE;
245 l_uncategorized_rlmid pa_resource_list_members.resource_list_member_id%TYPE;
246 l_uncategorized_resid pa_resource_list_members.resource_id%TYPE;
247 l_time_phased_type_code pa_budget_entry_methods.time_phased_type_code%TYPE;
248 l_categorization_code pa_budget_entry_methods.categorization_code%TYPE;
249 l_entry_level_code pa_budget_entry_methods.entry_level_code%TYPE;
250 l_amg_segment1 pa_projects_all.segment1%TYPE;
251 l_finplan_lines_tab pa_fin_plan_pvt.budget_lines_tab;
252 l_unit_of_measure pa_resources.unit_of_measure%TYPE;
253 l_track_as_labor_flag pa_resource_list_members.track_as_labor_flag%TYPE;
254 l_unc_track_as_labor_flag pa_resource_list_members.track_as_labor_flag%TYPE;
255 l_unc_unit_of_measure pa_resources.unit_of_measure%TYPE;
256 l_debug_mode VARCHAR2(1);
257 l_module_name VARCHAR2(80);
258 l_debug_level3 CONSTANT NUMBER := 3;
259 l_debug_level5 CONSTANT NUMBER := 5;
260 j NUMBER;
261 l_proj_fp_options_id pa_proj_fp_options.proj_fp_options_id%TYPE;
262 l_CW_version_id pa_budget_versions.budget_version_id%TYPE;
263 l_CW_record_version_number pa_budget_versions.record_Version_number%TYPE;
264 l_user_id NUMBER := 0;
265 l_resp_id NUMBER := 0;
266 l_using_resource_lists_flag VARCHAR2(1);
267 l_refresh_required_flag VARCHAR2(1) := NULL;
268 l_request_id NUMBER(15) := NULL;
269 l_process_code VARCHAR2(30) := NULL;
270 -- l_fp_type_id pa_budget_versions.fin_plan_type_id%TYPE; --3569883
271 -- l_old_model VARCHAR2(1):=null; --3569883
272
273 -- added for bug Bug 3986129: FP.M Web ADI Dev changes
274 l_mfc_cost_type_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
275 l_etc_method_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
276 l_spread_curve_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
277
278 l_locked_by_person_id pa_budget_versions.locked_by_person_id%TYPE;
279
280 l_cbs_enabled_project varchar2(1) :='N'; -- Added for CBS 16604257
281
282 BEGIN
283
284 --Standard begin of API savepoint
285 SAVEPOINT create_draft_budget_pub;
286 p_msg_count := 0;
287 p_return_status := FND_API.G_RET_STS_SUCCESS;
288 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
289 l_module_name := 'create_draft_budget' || g_module_name;
290
291 -- Changes for bug 3182963
292 IF l_debug_mode = 'Y' THEN
293 pa_debug.set_curr_function( p_function => 'create_draft_budget',
294 p_debug_mode => l_debug_mode );
295 END IF;
296
297
298
299 -- Standard call to check for call compatibility.
300 IF NOT FND_API.Compatible_API_Call ( PA_BUDGET_PUB.g_api_version_number ,
301 p_api_version_number ,
302 l_api_name ,
303 G_PKG_NAME )
304 THEN
305 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
306 END IF;
307
308 --dbms_output.put_line('copying input parameters to local variables');
309
310 --Copy the input parametes into the local variables.
311
312 l_resource_list_name := p_resource_list_name ;
313
314 -- G_MISS_NUM can not fit in l_resource_list_id . Hence make it null
315 IF p_resource_list_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
316 -- dbms_output.put_line('Copying the miss num to l_resource_list_id');
317 l_resource_list_id := NULL;
318 ELSE
319 l_resource_list_id := p_resource_list_id;
320 END IF;
321
322 --Check if input parameters is G_PA_MISS_XXX. If true set to NULL
323 --Changes made by Xin Liu for post_fpk. 24-APR-03
324
325 IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
326 l_fin_plan_type_id := NULL;
327 ELSE
328 l_fin_plan_type_id := p_fin_plan_type_id ;
329 END IF;
330
331 IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
332 l_fin_plan_type_name := NULL;
333 ELSE
334 l_fin_plan_type_name := p_fin_plan_type_name ;
335 END IF;
336
337 IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
338 l_version_type := NULL;
339 ELSE
340 l_version_type := p_version_type ;
341 END IF;
342
343 IF p_fin_plan_level_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
344 l_fin_plan_level_code := NULL;
345 ELSE
346 l_fin_plan_level_code := p_fin_plan_level_code ;
347 END IF;
348
349 IF p_time_phased_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
350 l_time_phased_code := NULL;
351 ELSE
352 l_time_phased_code := p_time_phased_code ;
353 END IF;
354
355 IF p_plan_in_multi_curr_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
356 l_plan_in_multi_curr_flag := NULL; --Bug 4586948.
357 ELSE
358 l_plan_in_multi_curr_flag := p_plan_in_multi_curr_flag ;
359 END IF;
360
361 IF p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
362 l_projfunc_cost_rate_type := NULL;
363 ELSE
364 l_projfunc_cost_rate_type := p_projfunc_cost_rate_type ;
365 END IF;
366
367 IF p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
368 l_projfunc_cost_rate_date_typ := NULL;
369 ELSE
370 l_projfunc_cost_rate_date_typ := p_projfunc_cost_rate_date_typ ;
371 END IF;
372
373 IF p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
374 l_projfunc_cost_rate_date := NULL;
375 ELSE
376 l_projfunc_cost_rate_date := p_projfunc_cost_rate_date ;
377 END IF;
378
379 IF p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
380 l_projfunc_rev_rate_type := NULL;
381 ELSE
382 l_projfunc_rev_rate_type := p_projfunc_rev_rate_type ;
383 END IF;
384
385 IF p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
386 l_projfunc_rev_rate_date_typ := NULL;
387 ELSE
388 l_projfunc_rev_rate_date_typ := p_projfunc_rev_rate_date_typ ;
389 END IF;
390
391 IF p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
392 l_projfunc_rev_rate_date := NULL;
393 ELSE
394 l_projfunc_rev_rate_date := p_projfunc_rev_rate_date ;
395 END IF;
396
397 IF p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
398 l_project_cost_rate_type := NULL;
399 ELSE
400 l_project_cost_rate_type := p_project_cost_rate_type ;
401 END IF;
402
403 IF p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
404 l_project_cost_rate_date_typ := NULL;
405 ELSE
406 l_project_cost_rate_date_typ := p_project_cost_rate_date_typ ;
407 END IF;
408
409 IF p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
410 l_project_cost_rate_date := NULL;
411 ELSE
412 l_project_cost_rate_date := p_project_cost_rate_date ;
413 END IF;
414
415 IF p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
416 l_project_rev_rate_type := NULL;
417 ELSE
418 l_project_rev_rate_type := p_project_rev_rate_type ;
419 END IF;
420
421 IF p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
422 l_project_rev_rate_date_typ := NULL;
423 ELSE
424 l_project_rev_rate_date_typ := p_project_rev_rate_date_typ ;
425 END IF;
426
427 IF p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
428 l_project_rev_rate_date := NULL;
429 ELSE
430 l_project_rev_rate_date := p_project_rev_rate_date ;
431 END IF;
432
433 IF p_raw_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
434 l_raw_cost_flag := 'N';
435 ELSE
436 l_raw_cost_flag := p_raw_cost_flag ;
437 END IF;
438
439 IF p_burdened_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
440 l_burdened_cost_flag := 'N';
441 ELSE
442 l_burdened_cost_flag := p_burdened_cost_flag ;
443 END IF;
444
445 IF p_revenue_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
446 l_revenue_flag := 'N';
447 ELSE
448 l_revenue_flag := p_revenue_flag ;
449 END IF;
450
451 IF p_cost_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
452 l_cost_qty_flag := 'N';
453 ELSE
454 l_cost_qty_flag := p_cost_qty_flag ;
455 END IF;
456
457 IF p_revenue_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
458 l_revenue_qty_flag := 'N';
459 ELSE
460 l_revenue_qty_flag := p_revenue_qty_flag ;
461 END IF;
462
463 IF p_all_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
464 l_all_qty_flag := 'N';
465 ELSE
466 l_all_qty_flag := p_all_qty_flag ;
467 END IF;
468
469 IF p_create_new_curr_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
470 l_create_new_working_flag := 'N';
471 ELSE
472 l_create_new_working_flag := p_create_new_curr_working_flag ;
473 END IF;
474
475 IF p_replace_current_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
476 l_replace_current_working_flag := 'N';
477 ELSE
478 l_replace_current_working_flag := p_replace_current_working_flag ;
479 END IF;
480
481 IF p_using_resource_lists_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
482 l_using_resource_lists_flag := 'Y';
483 ELSE
484 l_using_resource_lists_flag := p_using_resource_lists_flag ;
485 END IF;
486
487
488 -- G_MISS_NUM can not fit in l_project_id . Hence make it null
489 IF p_pa_project_id= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
490 --dbms_output.put_line('Copying the miss num to l_project_id');
491 l_project_id := NULL;
492 ELSE
493 l_project_id := p_pa_project_id;
494 END IF;
495 --Get the user id and responsibility Ids
496 l_user_id := FND_GLOBAL.User_id;
497 l_resp_id := FND_GLOBAL.Resp_id;
498
499 -- This api will initialize the data that will be used by the map_new_amg_msg.
500 -- Commented out the procedure call as required by Venkatesh. 25-APR-03
501 /*
502 PA_INTERFACE_UTILS_PUB.Set_Global_Info
503 ( p_api_version_number => 1.0
504 ,p_responsibility_id => l_resp_id
505 ,p_user_id => l_user_id
506 ,p_calling_mode => 'AMG' --bug 2783845
507 ,p_msg_count => p_msg_count
508 ,p_msg_data => p_msg_data
509 ,p_return_status => p_return_status);
510
511 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
512 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
513 END IF;
514 */
515
516 IF l_debug_mode = 'Y' THEN
517 pa_debug.g_err_stage := 'About to call validate header info';
518 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
519 END IF;
520
521 --Call the api that validates the input information
522 pa_budget_pvt.Validate_Header_Info
523 ( p_api_version_number => p_api_version_number
524 /* Bug 3133930- parameter included to pass version name */
525 ,p_budget_version_name => p_budget_version_name
526 ,p_init_msg_list => p_init_msg_list
527 ,px_pa_project_id => l_project_id
528 ,p_pm_project_reference => p_pm_project_reference
529 ,p_pm_product_code => p_pm_product_code
530 ,p_budget_type_code => p_budget_type_code
531 ,p_entry_method_code => p_entry_method_code
532 ,px_resource_list_name => l_resource_list_name
533 ,px_resource_list_id => l_resource_list_id
534 ,px_fin_plan_type_id => l_fin_plan_type_id
535 ,px_fin_plan_type_name => l_fin_plan_type_name
536 ,px_version_type => l_version_type
537 ,px_fin_plan_level_code => l_fin_plan_level_code
538 ,px_time_phased_code => l_time_phased_code
539 ,px_plan_in_multi_curr_flag => l_plan_in_multi_curr_flag
540 ,px_projfunc_cost_rate_type => l_projfunc_cost_rate_type
541 ,px_projfunc_cost_rate_date_typ => l_projfunc_cost_rate_date_typ
542 ,px_projfunc_cost_rate_date => l_projfunc_cost_rate_date
543 ,px_projfunc_rev_rate_type => l_projfunc_rev_rate_type
544 ,px_projfunc_rev_rate_date_typ => l_projfunc_rev_rate_date_typ
545 ,px_projfunc_rev_rate_date => l_projfunc_rev_rate_date
546 ,px_project_cost_rate_type => l_project_cost_rate_type
547 ,px_project_cost_rate_date_typ => l_project_cost_rate_date_typ
548 ,px_project_cost_rate_date => l_project_cost_rate_date
549 ,px_project_rev_rate_type => l_project_rev_rate_type
550 ,px_project_rev_rate_date_typ => l_project_rev_rate_date_typ
551 ,px_project_rev_rate_date => l_project_rev_rate_date
552 ,px_raw_cost_flag => l_raw_cost_flag
553 ,px_burdened_cost_flag => l_burdened_cost_flag
554 ,px_revenue_flag => l_revenue_flag
555 ,px_cost_qty_flag => l_cost_qty_flag
556 ,px_revenue_qty_flag => l_revenue_qty_flag
557 ,px_all_qty_flag => l_all_qty_flag
558 ,p_create_new_curr_working_flag => l_create_new_working_flag
559 ,p_replace_current_working_flag => l_replace_current_working_flag
560 ,p_change_reason_code => p_change_reason_code
561 ,p_calling_module => 'PA_PM_CREATE_DRAFT_BUDGET'
562 ,p_using_resource_lists_flag => p_using_resource_lists_flag
563 ,x_budget_amount_code => l_budget_amount_code -- Added for bug 4224464
564 ,x_msg_count => p_msg_count
565 ,x_msg_data => p_msg_data
566 ,x_return_status => p_return_status);
567
568 IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
569
570 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
571
572 END IF;
573
574 IF l_debug_mode = 'Y' THEN
575 pa_debug.g_err_stage := 'Validate Header got executed successfully';
576 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
577 END IF;
578
579 -- Copy the input pl/sql table to a local pl/sql table. This is necessary since the
580 -- input table is a IN variable and hence read only.
581 l_budget_lines_in := p_budget_lines_in;
582
583
584 -- Budget type code and budget entry method,project id should be valid at this point
585 -- Hence exception handling is not done
586
587 IF (p_budget_type_code IS NOT NULL AND
588 p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
589
590 SELECT budget_amount_code
591 INTO l_budget_amount_code
592 FROM pa_budget_types
593 WHERE budget_type_code = p_budget_type_code;
594
595 SELECT time_phased_type_code
596 ,categorization_code
597 ,entry_level_code
598 INTO l_time_phased_type_code
599 ,l_categorization_code
600 ,l_entry_level_code
601 FROM pa_budget_entry_methods
602 WHERE budget_entry_method_code = p_entry_method_code
603 AND trunc(sysdate) BETWEEN trunc(start_date_active) and trunc(nvl(end_date_active,sysdate));
604
605 END IF;
606
607 SELECT segment1
608 INTO l_amg_segment1
609 FROM pa_projects_all
610 WHERE project_id=l_project_id;
611
612 IF l_debug_mode = 'Y' THEN
613 pa_debug.g_err_stage := 'Got the budget type details and segment1 of the project';
614 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
615 END IF;
616
617
618 /* After bug fix for bug 4052562, note that the below API returns UOM from rlm table as DOLLARS instead of
619 * pa_resources table. Due to this, the below api may not be suitable for usage
620 * for old budgets model which retrieves UOM from pa_resources (HOURS). As such,
621 * since UOM is not used in create_draft_budget api FOR OLD BUDGETS MODEL, reusing
622 * the below api for both old and new budget model resource lists. If for some
623 * reason in future, UOM of uncatrlm is to be used even for old budgets model,
624 * we should consider using pa_get_resource.get_uncateg_Resource_info. Not
625 * changing it now, since, pa_get_resource.get_uncateg_resource_info owned by RF
626 * team, as of now, has the same performance issue of full table scans on RLM
627 * and pa_resources tables. */
628 --Get the uncategorized resource list info.
629 pa_fin_plan_utils.Get_Uncat_Resource_List_Info
630 (x_resource_list_id => l_uncategorized_res_list_id,
631 x_resource_list_member_id => l_uncategorized_rlmid,
632 x_track_as_labor_flag => l_unc_track_as_labor_flag,
633 x_unit_of_measure => l_unc_unit_of_measure,
634 x_return_status => p_return_status,
635 x_msg_count => p_msg_count,
636 x_msg_data => p_msg_data );
637
638 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
639 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
640 -- RAISE FND_API.G_EXC_ERROR;
641 END IF; -- IF l_err_code <> 0 THEN
642
643 IF l_debug_mode = 'Y' THEN
644 pa_debug.g_err_stage := 'Got the uncategorized res list info';
645 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
646 END IF;
647
648 --Added by Xin Liu for supporting Project Connect 4.0
649 --5/6/2003
650
651 If l_using_resource_lists_flag = 'N' THEN
652
653 l_resource_list_id :=l_uncategorized_res_list_id;
654
655 END IF;
656
657 --When description is not passed, set value to NULL
658
659 IF p_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
660 THEN
661 l_description := NULL;
662 ELSE
663 l_description := p_description;
664 END IF;
665
666 /* -- dbms_output.put_line('Before setting flex fields to NULL, when not passed'); */
667
668 --When descriptive flex fields are not passed set them to NULL
669 IF p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
670 THEN
671 l_attribute_category := NULL;
672 ELSE
673 l_attribute_category := p_attribute_category;
674 END IF;
675 IF p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
676 THEN
677 l_attribute1 := NULL;
678 ELSE
679 l_attribute1 := p_attribute1;
680 END IF;
681 IF p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
682 THEN
683 l_attribute2 := NULL;
684 ELSE
685 l_attribute2 := p_attribute2;
686 END IF;
687 IF p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
688 THEN
689 l_attribute3 := NULL;
690 ELSE
691 l_attribute3 := p_attribute3;
692 END IF;
693 IF p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
694 THEN
695 l_attribute4 := NULL;
696 ELSE
697 l_attribute4 := p_attribute4;
698 END IF;
699
700 IF p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
701 THEN
702 l_attribute5 := NULL;
703 ELSE
704 l_attribute5 := p_attribute5;
705 END IF;
706
707 IF p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
708 THEN
709 l_attribute6 := NULL;
710 ELSE
711 l_attribute6 := p_attribute6;
712 END IF;
713
714 IF p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
715 THEN
716 l_attribute7 := NULL;
717 ELSE
718 l_attribute7 := p_attribute7;
719 END IF;
720
721 IF p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
722 THEN
723 l_attribute8 := NULL;
724 ELSE
725 l_attribute8 := p_attribute8;
726 END IF;
727 IF p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
728 THEN
729 l_attribute9 := NULL;
730 ELSE
731 l_attribute9 := p_attribute9;
732 END IF;
733 IF p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
734 THEN
735 l_attribute10 := NULL;
736 ELSE
737 l_attribute10 := p_attribute10;
738 END IF;
739 IF p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
740 THEN
741 l_attribute11 := NULL;
742 ELSE
743 l_attribute11 := p_attribute11;
744 END IF;
745 IF p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
746 THEN
747 l_attribute12 := NULL;
748 ELSE
749 l_attribute12 := p_attribute12;
750 END IF;
751 IF p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
752 THEN
753 l_attribute13 := NULL;
754 ELSE
755 l_attribute13 := p_attribute13;
756 END IF;
757 IF p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
758 THEN
759 l_attribute14:= NULL;
760 ELSE
761 l_attribute14:= p_attribute14;
762 END IF;
763
764 IF p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
765 THEN
766 l_attribute15 := NULL;
767 ELSE
768 l_attribute15 := p_attribute15;
769 END IF;
770
771
772 IF p_pm_budget_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
773 THEN
774 l_pm_budget_reference := NULL;
775 ELSE
776 l_pm_budget_reference := p_pm_budget_reference;
777 END IF;
778
779 IF p_budget_version_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
780 THEN
781 l_budget_version_name := NULL;
782 ELSE
783 l_budget_version_name := p_budget_version_name;
784 END IF;
785
786 IF p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
787 THEN
788 l_change_reason_code := NULL;
789 ELSE
790 l_change_reason_code := p_change_reason_code;
791 END IF;
792
793
794 IF l_debug_mode = 'Y' THEN
795 pa_debug.g_err_stage := 'Done with the initialisation of flex fields, dexcription, etc';
796 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
797 END IF;
798
799
800 IF p_budget_type_code IS NOT NULL AND
801 p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
802
803 -- Lock the existing working version.
804 OPEN l_budget_version_csr( l_project_id, p_budget_type_code );
805 FETCH l_budget_version_csr INTO l_budget_version_rec;
806 IF l_budget_version_csr%FOUND THEN
807
808 OPEN l_lock_old_budget_csr( l_budget_version_rec.budget_Version_id );
809 CLOSE l_lock_old_budget_csr; --FYI, does not release locks
810
811 END IF;
812 CLOSE l_budget_version_csr;
813
814 /* It is assumed that if the program reaches till this point,then there are no budget lines with errors in the out plsql table*/
815
816 --Call the api that creates the draft budget
817 PA_BUDGET_UTILS.create_draft
818 (x_project_id => l_project_id
819 ,x_budget_type_code => p_budget_type_code
820 ,x_version_name => l_budget_version_name
821 ,x_description => l_description
822 ,x_resource_list_id => l_resource_list_id
823 ,x_change_reason_code => l_change_reason_code
824 ,x_budget_entry_method_code => p_entry_method_code
825 ,x_attribute_category => l_attribute_category
826 ,x_attribute1 => l_attribute1
827 ,x_attribute2 => l_attribute2
828 ,x_attribute3 => l_attribute3
829 ,x_attribute4 => l_attribute4
830 ,x_attribute5 => l_attribute5
831 ,x_attribute6 => l_attribute6
832 ,x_attribute7 => l_attribute7
833 ,x_attribute8 => l_attribute8
834 ,x_attribute9 => l_attribute9
835 ,x_attribute10 => l_attribute10
836 ,x_attribute11 => l_attribute11
837 ,x_attribute12 => l_attribute12
838 ,x_attribute13 => l_attribute13
839 ,x_attribute14 => l_attribute14
840 ,x_attribute15 => l_attribute15
841 ,x_budget_version_id => l_budget_version_id
842 ,x_err_code => l_err_code
843 ,x_err_stage => l_err_stage
844 ,x_err_stack => l_err_stack
845 ,x_pm_product_code => p_pm_product_code
846 ,x_pm_budget_reference => l_pm_budget_reference );
847
848 -----------
849 -- temporary solution
850 -- COMMIT in DELETE_DRAFT removes all savepoints!!!
851
852 SAVEPOINT create_draft_budget_pub;
853 -----------
854
855 IF l_err_code > 0
856 THEN
857 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
858 THEN
859
860 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
861 THEN
862 pa_interface_utils_pub.map_new_amg_msg
863 ( p_old_message_code => 'PA_CREATE_DRAFT_FAILED'
864 ,p_msg_attribute => 'CHANGE'
865 ,p_resize_flag => 'N'
866 ,p_msg_context => 'BUDG'
867 ,p_attribute1 => l_amg_segment1
868 ,p_attribute2 => ''
869 ,p_attribute3 => p_budget_type_code
870 ,p_attribute4 => ''
871 ,p_attribute5 => '');
872 ELSE
873 pa_interface_utils_pub.map_new_amg_msg
874 ( p_old_message_code => l_err_stage
875 ,p_msg_attribute => 'CHANGE'
876 ,p_resize_flag => 'N'
877 ,p_msg_context => 'BUDG'
878 ,p_attribute1 => l_amg_segment1
879 ,p_attribute2 => ''
880 ,p_attribute3 => p_budget_type_code
881 ,p_attribute4 => ''
882 ,p_attribute5 => '');
883 END IF;
884
885 END IF;
886
887 IF l_debug_mode = 'Y' THEN
888 pa_debug.g_err_stage := 'Error executing create draft';
889 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
890 END IF;
891
892 RAISE FND_API.G_EXC_ERROR;
893
894 ELSIF l_err_code < 0
895 THEN
896
897 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
898 THEN
899
900 FND_MSG_PUB.add_exc_msg
901 ( p_pkg_name => 'PA_BUDGET_UTILS'
902 , p_procedure_name => 'CREATE_DRAFT'
903 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
904
905 END IF;
906
907 IF l_debug_mode = 'Y' THEN
908 pa_debug.g_err_stage := 'SQL Error executing create draft';
909 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
910 END IF;
911
912
913 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
914
915 END IF;
916
917 IF l_debug_mode = 'Y' THEN
918 pa_debug.g_err_stage := 'Created the version in the budget model';
919 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
920 END IF;
921
922 -- Commenting out this select as the create draft now returns the id of hte
923 -- newly created version
924 -- SELECT pa_budget_versions_s.currval --because x_budget_version_id in procedure
925 -- INTO l_budget_version_id --PA_BUDGET_UTILS.create_draft returns nothing: BUG.
926 -- FROM SYS.DUAL;
927
928 IF l_debug_mode = 'Y' THEN
929 pa_debug.g_err_stage := 'Created version is is '|| l_budget_version_id ;
930 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
931
932 pa_debug.g_err_stage := 'About to call validate budget lines';
933 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
934 END IF;
935
936 --Validate the budget lines.
937 IF ( nvl(l_budget_lines_in.last,0) > 0 ) THEN
938
939 --Added by Xin Liu. Handle G_MISS_XXX for l_budget_lines_in before calling Validate_Budget_Lines.
940 FOR i in l_budget_lines_in.FIRST..l_budget_lines_in.LAST LOOP
941
942 IF l_budget_lines_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
943 l_budget_lines_in(i).pa_task_id := NULL;
944 END IF;
945
946 IF l_budget_lines_in(i).pm_task_reference =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
947 l_budget_lines_in(i).pm_task_reference := NULL;
948 END IF;
949
950 IF l_budget_lines_in(i).resource_alias= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
951 l_budget_lines_in(i).resource_alias := NULL;
952 END IF;
953
954 IF l_budget_lines_in(i).resource_list_member_id =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
955 l_budget_lines_in(i).resource_list_member_id:= NULL;
956 END IF;
957 --Bug 16604257 : CBS RBS Phase 2 API changes
958 IF l_budget_lines_in(i).cbs_element_id =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
959 l_budget_lines_in(i).cbs_element_id:= NULL;
960 END IF;
961
962 IF l_budget_lines_in(i).cost_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
963 l_budget_lines_in(i).cost_code:= NULL;
964 END IF;
965 --Bug 16604257
966
967 IF l_budget_lines_in(i).budget_start_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
968 l_budget_lines_in(i).budget_start_date:= NULL;
969 END IF;
970 IF l_budget_lines_in(i).budget_end_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
971 l_budget_lines_in(i).budget_end_date:= NULL;
972 END IF;
973
974 IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
975 l_budget_lines_in(i).period_name := NULL;
976 END IF;
977
978 IF l_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
979 l_budget_lines_in(i).raw_cost := NULL;
980 END IF;
981
982 IF l_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
983 l_budget_lines_in(i).burdened_cost := NULL;
984 END IF;
985
986 IF l_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
987 l_budget_lines_in(i).revenue := NULL;
988 END IF;
989
990 IF l_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
991 l_budget_lines_in(i).quantity := NULL;
992 END IF;
993
994
995 IF l_budget_lines_in(i).change_reason_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
996 l_budget_lines_in(i).change_reason_code :=NULL;
997 END IF;
998
999 IF l_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1000 l_budget_lines_in(i).description := NULL;
1001 END IF;
1002
1003 IF l_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1004 l_budget_lines_in(i).attribute_category := NULL;
1005 END IF;
1006
1007 IF l_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1008 l_budget_lines_in(i).attribute1 := NULL;
1009 END IF;
1010
1011 IF l_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1012 l_budget_lines_in(i).attribute2 := NULL;
1013 END IF;
1014
1015 IF l_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1016 l_budget_lines_in(i).attribute3 := NULL;
1017 END IF;
1018
1019 IF l_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1020 l_budget_lines_in(i).attribute4 := NULL;
1021 END IF;
1022
1023 IF l_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1024 l_budget_lines_in(i).attribute5 := NULL;
1025 END IF;
1026
1027 IF l_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1028 l_budget_lines_in(i).attribute6 := NULL;
1029 END IF;
1030
1031 IF l_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1032 l_budget_lines_in(i).attribute7 := NULL;
1033 END IF;
1034
1035 IF l_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1036 l_budget_lines_in(i).attribute8 := NULL;
1037 END IF;
1038
1039 IF l_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1040 l_budget_lines_in(i).attribute9 := NULL;
1041 END IF;
1042
1043 IF l_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1044 l_budget_lines_in(i).attribute10 := NULL;
1045 END IF;
1046
1047 IF l_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1048 l_budget_lines_in(i).attribute11 := NULL;
1049 END IF;
1050
1051 IF l_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1052 l_budget_lines_in(i).attribute12 := NULL;
1053 END IF;
1054
1055 IF l_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1056 l_budget_lines_in(i).attribute13 := NULL;
1057 END IF;
1058
1059 IF l_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1060 l_budget_lines_in(i).attribute14 := NULL;
1061 END IF;
1062
1063 IF l_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1064 l_budget_lines_in(i).attribute15 := NULL;
1065 END IF;
1066
1067 IF l_budget_lines_in(i).txn_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1068 l_budget_lines_in(i).txn_currency_code := NULL;
1069 END IF;
1070
1071 IF l_budget_lines_in(i).projfunc_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1072 l_budget_lines_in(i).PROJFUNC_COST_RATE_TYPE := NULL;
1073 END IF;
1074
1075 IF l_budget_lines_in(i).projfunc_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1076 l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
1077 END IF;
1078
1079 IF l_budget_lines_in(i).projfunc_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1080 l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE := NULL;
1081 END IF;
1082
1083 IF l_budget_lines_in(i).projfunc_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1084 l_budget_lines_in(i).PROJFUNC_COST_EXCHANGE_RATE := NULL;
1085 END IF;
1086
1087 IF l_budget_lines_in(i).projfunc_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1088 l_budget_lines_in(i).PROJFUNC_REV_RATE_TYPE := NULL;
1089 END IF;
1090
1091 IF l_budget_lines_in(i).projfunc_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1092 l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
1093 END IF;
1094
1095 IF l_budget_lines_in(i).projfunc_rev_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1096 l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE := NULL;
1097 END IF;
1098
1099 IF l_budget_lines_in(i).projfunc_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1100 l_budget_lines_in(i).PROJFUNC_REV_EXCHANGE_RATE := NULL;
1101 END IF;
1102
1103 IF l_budget_lines_in(i).project_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1104 l_budget_lines_in(i).PROJECT_COST_RATE_TYPE := NULL;
1105 END IF;
1106
1107 IF l_budget_lines_in(i).project_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1108 l_budget_lines_in(i).PROJECT_COST_RATE_DATE_TYPE := NULL;
1109 END IF;
1110
1111 IF l_budget_lines_in(i).project_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1112 l_budget_lines_in(i).PROJECT_COST_RATE_DATE := NULL;
1113 END IF;
1114
1115 IF l_budget_lines_in(i).project_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1116 l_budget_lines_in(i).PROJECT_COST_EXCHANGE_RATE := NULL;
1117 END IF;
1118
1119 IF l_budget_lines_in(i).project_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1120 l_budget_lines_in(i).PROJECT_REV_RATE_TYPE := NULL;
1121 END IF;
1122
1123 IF l_budget_lines_in(i).project_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1124 l_budget_lines_in(i).PROJECT_REV_RATE_DATE_TYPE := NULL;
1125 END IF;
1126
1127 IF l_budget_lines_in(i).project_rev_rate_date =PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1128 l_budget_lines_in(i).PROJECT_REV_RATE_DATE := NULL;
1129 END IF;
1130
1131 IF l_budget_lines_in(i).project_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1132 l_budget_lines_in(i).PROJECT_REV_EXCHANGE_RATE := NULL;
1133 END IF;
1134
1135 /* Bug 3218822 - Use the validated pm_product_code of the header for the budget line if
1136 pm_product_code is passed as Null at the line level */
1137
1138 IF l_budget_lines_in(i).pm_product_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
1139 l_budget_lines_in(i).pm_product_code IS NULL THEN
1140 l_budget_lines_in(i).pm_product_code := p_pm_product_code;
1141 END IF;
1142
1143 IF l_budget_lines_in(i).pm_budget_line_reference=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1144 l_budget_lines_in(i).pm_budget_line_reference := NULL;
1145 END IF;
1146
1147
1148 END LOOP;
1149 /** Bug 3709462
1150 --3569883 start
1151 select fin_plan_type_id
1152 into l_fp_type_id
1153 from pa_budget_versions
1154 where budget_version_id = l_budget_version_id;
1155
1156 select DECODE(l_fp_type_id, null, 'Y','N') into l_old_model from dual;
1157 --3569883 end
1158 **/ -- Bug 3709462 we are in old model context no additional checks are necessary
1159 -- l_old_model := 'Y';
1160 --Done with Changes by xin liu
1161 pa_budget_pvt.Validate_Budget_Lines
1162 ( p_pa_project_id => l_project_id
1163 ,p_budget_type_code => p_budget_type_code
1164 ,p_fin_plan_type_id => NULL
1165 ,p_version_type => NULL
1166 ,p_resource_list_id => l_resource_list_id
1167 ,p_time_phased_code => l_time_phased_type_code
1168 ,p_budget_entry_method_code => p_entry_method_code
1169 ,p_entry_level_code => l_entry_level_code
1170 ,p_allow_qty_flag => NULL
1171 ,p_allow_raw_cost_flag => NULL
1172 ,p_allow_burdened_cost_flag => NULL
1173 ,p_allow_revenue_flag => NULL
1174 ,p_multi_currency_flag => NULL
1175 ,p_project_cost_rate_type => NULL
1176 ,p_project_cost_rate_date_typ => NULL
1177 ,p_project_cost_rate_date => NULL
1178 ,p_project_cost_exchange_rate => NULL
1179 ,p_projfunc_cost_rate_type => NULL
1180 ,p_projfunc_cost_rate_date_typ => NULL
1181 ,p_projfunc_cost_rate_date => NULL
1182 ,p_projfunc_cost_exchange_rate => NULL
1183 ,p_project_rev_rate_type => NULL
1184 ,p_project_rev_rate_date_typ => NULL
1185 ,p_project_rev_rate_date => NULL
1186 ,p_project_rev_exchange_rate => NULL
1187 ,p_projfunc_rev_rate_type => NULL
1188 ,p_projfunc_rev_rate_date_typ => NULL
1189 ,p_projfunc_rev_rate_date => NULL
1190 ,p_projfunc_rev_exchange_rate => NULL
1191 ,px_budget_lines_in => l_budget_lines_in
1192 ,x_budget_lines_out => p_budget_lines_out /* Bug 3133930*/
1193 -- ,x_old_model => l_old_model --3569883
1194 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
1195 ,x_etc_method_code_tbl => l_etc_method_code_tbl
1196 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
1197 ,x_msg_count => p_msg_count
1198 ,x_msg_data => p_msg_data
1199 ,x_return_status => p_return_status);
1200
1201 IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1202
1203 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1204
1205 END IF;
1206
1207 IF l_debug_mode = 'Y' THEN
1208 pa_debug.g_err_stage := 'Validate Budget Lines got executed successfully';
1209 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1210 END IF;
1211
1212 END IF;--IF ( nvl(l_budget_lines_in.last,0) > 0 ) THEN
1213
1214
1215
1216
1217 /*
1218 -- Not necessary now since the same is passed as parameters to create_draft
1219 --add the pm_budget_reference and pm_product_code to the just created budget
1220 UPDATE pa_budget_versions
1221 SET pm_budget_reference = p_pm_budget_reference
1222 , pm_product_code = p_pm_product_code
1223 WHERE budget_version_id = l_budget_version_id;
1224 */
1225
1226
1227 -- BUDGET LINES
1228
1229 i := l_budget_lines_in.first;
1230
1231 IF l_budget_lines_in.exists(i)
1232 THEN
1233
1234 <<budget_line>>
1235 WHILE i IS NOT NULL LOOP
1236
1237 /* initialize return status for budget line to success */
1238
1239 /* Bug 3133930 initialization is removed here as it has been done in
1240 validate_budget_lines */
1241 /* p_budget_lines_out(i).return_status := FND_API.G_RET_STS_SUCCESS; */
1242
1243 l_budget_line_in_rec := l_budget_lines_in(i);
1244 IF l_budget_line_in_rec.pm_budget_line_reference =
1245 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1246 l_budget_line_in_rec.pm_budget_line_reference := NULL;
1247 END IF;
1248
1249 IF l_categorization_code = 'N' THEN
1250 l_budget_rlmid := l_uncategorized_rlmid;
1251 l_budget_alias := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
1252 ELSE
1253 l_budget_rlmid := l_budget_line_in_rec.resource_list_member_id;
1254 l_budget_alias := l_budget_line_in_rec.resource_alias;
1255 END IF;
1256
1257 /* For bug # 675869 Fix */
1258 IF l_budget_line_in_rec.period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1259 l_budget_line_in_rec.period_name := NULL;
1260 END IF;
1261 /* End Of bug # 675869 Fix */
1262
1263
1264 --Call the api that inserts the budget line
1265 pa_budget_pvt.insert_budget_line
1266 ( p_return_status => l_return_status
1267 ,p_pa_project_id => l_project_id
1268 ,p_budget_type_code => p_budget_type_code
1269 ,p_pa_task_id => l_budget_line_in_rec.pa_task_id
1270 ,p_pm_task_reference => l_budget_line_in_rec.pm_task_reference
1271 ,p_resource_alias => l_budget_alias
1272 ,p_member_id => l_budget_rlmid
1273 ,p_cbs_element_id => l_budget_line_in_rec.cbs_element_id --Bug 16604257 : CBS RBS Phase 2 API changes
1274 ,p_budget_start_date => l_budget_line_in_rec.budget_start_date
1275 ,p_budget_end_date => l_budget_line_in_rec.budget_end_date
1276 ,p_period_name => l_budget_line_in_rec.period_name
1277 ,p_description => l_budget_line_in_rec.description
1278 ,p_raw_cost => l_budget_line_in_rec.raw_cost
1279 ,p_burdened_cost => l_budget_line_in_rec.burdened_cost
1280 ,p_revenue => l_budget_line_in_rec.revenue
1281 ,p_quantity => l_budget_line_in_rec.quantity
1282 ,p_pm_product_code => l_budget_line_in_rec.pm_product_code
1283 ,p_pm_budget_line_reference => l_budget_line_in_rec.pm_budget_line_reference
1284 ,p_resource_list_id => l_resource_list_id
1285 ,p_attribute_category => l_budget_line_in_rec.attribute_category
1286 ,p_attribute1 => l_budget_line_in_rec.attribute1
1287 ,p_attribute2 => l_budget_line_in_rec.attribute2
1288 ,p_attribute3 => l_budget_line_in_rec.attribute3
1289 ,p_attribute4 => l_budget_line_in_rec.attribute4
1290 ,p_attribute5 => l_budget_line_in_rec.attribute5
1291 ,p_attribute6 => l_budget_line_in_rec.attribute6
1292 ,p_attribute7 => l_budget_line_in_rec.attribute7
1293 ,p_attribute8 => l_budget_line_in_rec.attribute8
1294 ,p_attribute9 => l_budget_line_in_rec.attribute9
1295 ,p_attribute10 => l_budget_line_in_rec.attribute10
1296 ,p_attribute11 => l_budget_line_in_rec.attribute11
1297 ,p_attribute12 => l_budget_line_in_rec.attribute12
1298 ,p_attribute13 => l_budget_line_in_rec.attribute13
1299 ,p_attribute14 => l_budget_line_in_rec.attribute14
1300 ,p_attribute15 => l_budget_line_in_rec.attribute15
1301 ,p_time_phased_type_code => l_time_phased_type_code
1302 ,p_entry_level_code => l_entry_level_code
1303 ,p_budget_amount_code => l_budget_amount_code
1304 ,p_budget_entry_method_code => p_entry_method_code
1305 ,p_categorization_code => l_categorization_code
1306 ,p_budget_version_id => l_budget_version_id );
1307 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
1308 THEN
1309 p_budget_lines_out(i).return_status := l_return_status;
1310
1311 IF l_debug_mode = 'Y' THEN
1312 pa_debug.g_err_stage := 'Unexpected Error inserting line '||i;
1313 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1314 END IF;
1315
1316 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1317
1318 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
1319 THEN
1320 p_budget_lines_out(i).return_status := l_return_status;
1321 p_multiple_task_msg := 'F';
1322 IF l_debug_mode = 'Y' THEN
1323 pa_debug.g_err_stage := 'Error inserting line '||i;
1324 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1325 END IF;
1326
1327 -- RAISE FND_API.G_EXC_ERROR;
1328
1329 END IF;
1330
1331 IF l_debug_mode = 'Y' THEN
1332 pa_debug.g_err_stage := 'Done with the insertion of line '||i;
1333 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1334 END IF;
1335
1336
1337 i := l_budget_lines_in.next(i);
1338
1339 END LOOP budget_line;
1340
1341 IF p_multiple_task_msg = 'F'
1342 THEN
1343 RAISE FND_API.G_EXC_ERROR;
1344 END IF;
1345
1346 END IF;
1347
1348 ELSE--Create a version in the finplan model
1349
1350 IF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
1351
1352 l_allow_qty_flag := p_cost_qty_flag;
1353
1354 ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
1355
1356 l_allow_qty_flag := p_revenue_qty_flag;
1357
1358 ELSE
1359
1360 l_allow_qty_flag := P_all_qty_flag;
1361
1362 END IF;
1363
1364 IF l_debug_mode = 'Y' THEN
1365 pa_debug.g_err_stage := 'l_allow_qty_flag is '||l_allow_qty_flag;
1366 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1367 END IF;
1368
1369 --Call the api only if budget lines exist
1370 -- dbms_output.put_line('l_budget_lines_in.last '||l_budget_lines_in.last);
1371 IF ( nvl(l_budget_lines_in.last,0) > 0 ) THEN
1372
1373 IF l_debug_mode = 'Y' THEN
1374 pa_debug.g_err_stage := 'About to call validate budget lines in finplan model';
1375 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1376 END IF;
1377
1378 --Added by Xin Liu. Handle G_MISS_XXX for l_budget_lines_in before calling Validate_Budget_Lines.
1379 FOR i in l_budget_lines_in.FIRST..l_budget_lines_in.LAST LOOP
1380
1381 IF l_budget_lines_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1382 l_budget_lines_in(i).pa_task_id := NULL;
1383 END IF;
1384
1385 IF l_budget_lines_in(i).pm_task_reference =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1386 l_budget_lines_in(i).pm_task_reference := NULL;
1387 END IF;
1388
1389 IF l_budget_lines_in(i).resource_alias= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1390 l_budget_lines_in(i).resource_alias := NULL;
1391 END IF;
1392
1393 IF l_budget_lines_in(i).resource_list_member_id =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1394 l_budget_lines_in(i).resource_list_member_id:= NULL;
1395 END IF;
1396
1397 --Bug 16604257
1398 IF l_budget_lines_in(i).CBS_ELEMENT_ID =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1399 l_budget_lines_in(i).CBS_ELEMENT_ID:= NULL;
1400 END IF;
1401
1402 IF l_budget_lines_in(i).COST_CODE= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1403 l_budget_lines_in(i).COST_CODE := NULL;
1404 END IF;
1405 --Bug 16604257
1406 IF l_budget_lines_in(i).budget_start_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1407 l_budget_lines_in(i).budget_start_date:= NULL;
1408 END IF;
1409 IF l_budget_lines_in(i).budget_end_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1410 l_budget_lines_in(i).budget_end_date:= NULL;
1411 END IF;
1412
1413 IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1414 l_budget_lines_in(i).period_name := NULL;
1415 END IF;
1416
1417 IF l_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1418 l_budget_lines_in(i).raw_cost := NULL;
1419 END IF;
1420
1421 IF l_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1422 l_budget_lines_in(i).burdened_cost := NULL;
1423 END IF;
1424
1425 IF l_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1426 l_budget_lines_in(i).revenue := NULL;
1427 END IF;
1428
1429 IF l_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1430 l_budget_lines_in(i).quantity := NULL;
1431 END IF;
1432
1433
1434 IF l_budget_lines_in(i).change_reason_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1435 l_budget_lines_in(i).change_reason_code :=NULL;
1436 END IF;
1437
1438 IF l_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1439 l_budget_lines_in(i).description := NULL;
1440 END IF;
1441
1442 IF l_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1443 l_budget_lines_in(i).attribute_category := NULL;
1444 END IF;
1445
1446 IF l_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1447 l_budget_lines_in(i).attribute1 := NULL;
1448 END IF;
1449
1450 IF l_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1451 l_budget_lines_in(i).attribute2 := NULL;
1452 END IF;
1453
1454 IF l_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1455 l_budget_lines_in(i).attribute3 := NULL;
1456 END IF;
1457
1458 IF l_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1459 l_budget_lines_in(i).attribute4 := NULL;
1460 END IF;
1461
1462 IF l_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1463 l_budget_lines_in(i).attribute5 := NULL;
1464 END IF;
1465
1466 IF l_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1467 l_budget_lines_in(i).attribute6 := NULL;
1468 END IF;
1469
1470 IF l_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1471 l_budget_lines_in(i).attribute7 := NULL;
1472 END IF;
1473
1474 IF l_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1475 l_budget_lines_in(i).attribute8 := NULL;
1476 END IF;
1477
1478 IF l_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1479 l_budget_lines_in(i).attribute9 := NULL;
1480 END IF;
1481
1482 IF l_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1483 l_budget_lines_in(i).attribute10 := NULL;
1484 END IF;
1485
1486 IF l_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1487 l_budget_lines_in(i).attribute11 := NULL;
1488 END IF;
1489
1490 IF l_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1491 l_budget_lines_in(i).attribute12 := NULL;
1492 END IF;
1493
1494 IF l_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1495 l_budget_lines_in(i).attribute13 := NULL;
1496 END IF;
1497
1498 IF l_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1499 l_budget_lines_in(i).attribute14 := NULL;
1500 END IF;
1501
1502 IF l_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1503 l_budget_lines_in(i).attribute15 := NULL;
1504 END IF;
1505
1506 IF l_budget_lines_in(i).txn_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1507 l_budget_lines_in(i).txn_currency_code := NULL;
1508 END IF;
1509
1510 IF l_budget_lines_in(i).projfunc_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1511 l_budget_lines_in(i).PROJFUNC_COST_RATE_TYPE := NULL;
1512 END IF;
1513
1514 IF l_budget_lines_in(i).projfunc_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1515 l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
1516 END IF;
1517
1518 IF l_budget_lines_in(i).projfunc_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1519 l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE := NULL;
1520 END IF;
1521
1522 IF l_budget_lines_in(i).projfunc_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1523 l_budget_lines_in(i).PROJFUNC_COST_EXCHANGE_RATE := NULL;
1524 END IF;
1525
1526 IF l_budget_lines_in(i).projfunc_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1527 l_budget_lines_in(i).PROJFUNC_REV_RATE_TYPE := NULL;
1528 END IF;
1529
1530 IF l_budget_lines_in(i).projfunc_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1531 l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
1532 END IF;
1533
1534 IF l_budget_lines_in(i).projfunc_rev_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1535 l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE := NULL;
1536 END IF;
1537
1538 IF l_budget_lines_in(i).projfunc_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1539 l_budget_lines_in(i).PROJFUNC_REV_EXCHANGE_RATE := NULL;
1540 END IF;
1541
1542 IF l_budget_lines_in(i).project_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1543 l_budget_lines_in(i).PROJECT_COST_RATE_TYPE := NULL;
1544 END IF;
1545
1546 IF l_budget_lines_in(i).project_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1547 l_budget_lines_in(i).PROJECT_COST_RATE_DATE_TYPE := NULL;
1548 END IF;
1549
1550 IF l_budget_lines_in(i).project_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1551 l_budget_lines_in(i).PROJECT_COST_RATE_DATE := NULL;
1552 END IF;
1553
1554 IF l_budget_lines_in(i).project_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1555 l_budget_lines_in(i).PROJECT_COST_EXCHANGE_RATE := NULL;
1556 END IF;
1557
1558 IF l_budget_lines_in(i).project_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1559 l_budget_lines_in(i).PROJECT_REV_RATE_TYPE := NULL;
1560 END IF;
1561
1562 IF l_budget_lines_in(i).project_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1563 l_budget_lines_in(i).PROJECT_REV_RATE_DATE_TYPE := NULL;
1564 END IF;
1565
1566 IF l_budget_lines_in(i).project_rev_rate_date =PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1567 l_budget_lines_in(i).PROJECT_REV_RATE_DATE := NULL;
1568 END IF;
1569
1570 IF l_budget_lines_in(i).project_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1571 l_budget_lines_in(i).PROJECT_REV_EXCHANGE_RATE := NULL;
1572 END IF;
1573
1574 /* Bug 3218822 - Use the validated pm_product_code of the header for the budget line if
1575 pm_product_code is passed as Null at the line level */
1576
1577 IF l_budget_lines_in(i).pm_product_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
1578 l_budget_lines_in(i).pm_product_code IS NULL THEN
1579 l_budget_lines_in(i).pm_product_code := p_pm_product_code;
1580 END IF;
1581
1582 IF l_budget_lines_in(i).pm_budget_line_reference=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1583 l_budget_lines_in(i).pm_budget_line_reference := NULL;
1584 END IF;
1585
1586
1587 END LOOP;
1588 --Done with Changes by xin liu
1589 /** Bug 3709462
1590 --3569883 start
1591 select fin_plan_type_id
1592 into l_fp_type_id
1593 from pa_budget_versions
1594 where budget_version_id = l_budget_version_id;
1595
1596 select DECODE(l_fp_type_id, null, 'Y','N') into l_old_model from dual;
1597 --3569883 end
1598 **/
1599 -- Bug 3709462 We are in new model context, no new checks are necessary
1600 -- l_old_model := 'N';
1601 --Validate the finplan lines passed
1602 pa_budget_pvt.Validate_Budget_Lines
1603 ( p_pa_project_id => l_project_id
1604 ,p_budget_type_code => NULL
1605 ,p_fin_plan_type_id => l_fin_plan_type_id
1606 ,p_version_type => l_version_type
1607 ,p_resource_list_id => l_resource_list_id
1608 ,p_time_phased_code => l_time_phased_code
1609 ,p_budget_entry_method_code => NULL
1610 ,p_entry_level_code => l_fin_plan_level_code
1611 ,p_allow_qty_flag => l_allow_qty_flag
1612 ,p_allow_raw_cost_flag => p_raw_cost_flag
1613 ,p_allow_burdened_cost_flag => p_burdened_cost_flag
1614 ,p_allow_revenue_flag => p_revenue_flag
1615 ,p_multi_currency_flag => l_plan_in_multi_curr_flag
1616 ,p_project_cost_rate_type => l_project_cost_rate_type
1617 ,p_project_cost_rate_date_typ => l_project_cost_rate_date_typ
1618 ,p_project_cost_rate_date => l_project_cost_rate_date
1619 ,p_project_cost_exchange_rate => NULL
1620 ,p_projfunc_cost_rate_type => l_projfunc_cost_rate_type
1621 ,p_projfunc_cost_rate_date_typ => l_projfunc_cost_rate_date_typ
1622 ,p_projfunc_cost_rate_date => l_projfunc_cost_rate_date
1623 ,p_projfunc_cost_exchange_rate => NULL
1624 ,p_project_rev_rate_type => l_project_rev_rate_type
1625 ,p_project_rev_rate_date_typ => l_project_rev_rate_date_typ
1626 ,p_project_rev_rate_date => l_project_rev_rate_date
1627 ,p_project_rev_exchange_rate => NULL
1628 ,p_projfunc_rev_rate_type => l_projfunc_rev_rate_type
1629 ,p_projfunc_rev_rate_date_typ => l_projfunc_rev_rate_date_typ
1630 ,p_projfunc_rev_rate_date => l_projfunc_rev_rate_date
1631 ,p_projfunc_rev_exchange_rate => NULL
1632 ,px_budget_lines_in => l_budget_lines_in
1633 ,x_budget_lines_out => p_budget_lines_out /* Bug 3133930*/
1634 -- ,x_old_model => l_old_model --3569883
1635 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
1636 ,x_etc_method_code_tbl => l_etc_method_code_tbl
1637 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
1638 ,x_msg_count => p_msg_count
1639 ,x_msg_data => p_msg_data
1640 ,x_return_status => p_return_status);
1641
1642 IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1643
1644 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1645
1646 END IF;
1647
1648 IF l_debug_mode = 'Y' THEN
1649 pa_debug.g_err_stage := 'Validate budget lines got executed successfully';
1650 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1651 END IF;
1652
1653 -- Initialise the index for the fin plan lines table
1654 j :=1;
1655
1656 -- Intilalise the UOM and track as labor flag to the values associated with
1657 -- the uncategorized resource list.
1658 l_unit_of_measure := l_unc_unit_of_measure;
1659 l_track_as_labor_flag := l_unc_track_as_labor_flag;
1660
1661 --dbms_output.put_line('l_budget_lines_in.FIRST '||l_budget_lines_in.FIRST);
1662 --dbms_output.put_line('l_budget_lines_in.LAST '||l_budget_lines_in.LAST);
1663
1664 -- Copy the fin plan lines into a table of type pa_fp_rollup_tmp
1665 FOR i in l_budget_lines_in.FIRST..l_budget_lines_in.LAST LOOP
1666
1667 --dbms_output.put_line('In the for loop');
1668
1669 IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1670 l_budget_lines_in(i).period_name := NULL;
1671 END IF;
1672
1673 --Lines should be processed only if atleast one of the amounts exist
1674 -- Commenting out the below check for 8423481. In SelfService, we do not have this check
1675 /* IF (nvl(l_budget_lines_in(i).quantity,0)<>0 OR
1676 nvl(l_budget_lines_in(i).raw_cost,0)<>0 OR
1677 nvl(l_budget_lines_in(i).burdened_cost,0)<>0 OR
1678 nvl(l_budget_lines_in(i).revenue,0) <>0) THEN
1679 */
1680
1681 -- Get UOM and track as labor flag only if the resource list is not uncategorized
1682 -- If it is is uncategorized then we can make use of the uom and track as labor
1683 -- flag obtained earlier
1684 IF (l_resource_list_id <> l_uncategorized_res_list_id) THEN
1685 -- Bug 3807633.. We can directly fetch UOM from pa_resource_list_members
1686 -- for FINPLAN MODEL(FP.M Changes) as old non-migrated resource
1687 -- list cannot be used and only New and Migrated resource
1688 -- list can be used for FINPLAN Model.
1689 SELECT prlm.unit_of_measure
1690 INTO l_unit_of_measure
1691 FROM pa_resource_list_members prlm
1692 WHERE prlm.resource_list_member_id = l_budget_lines_in(i).resource_list_member_id;
1693
1694 END IF;
1695
1696 --dbms_output.put_line('copying from budget to rollup finplan');
1697
1698 -- Convert flex field attributes to NULL if they have Miss Char as value
1699
1700 l_finplan_lines_tab(j).system_reference1 := l_budget_lines_in(i).pa_task_id;
1701 l_finplan_lines_tab(j).system_reference2 := l_budget_lines_in(i).resource_list_member_id ;
1702 l_finplan_lines_tab(j).system_reference3 := l_budget_lines_in(i).cbs_element_id; --Bug 16604257
1703 --DEBUG_DJ('******************************************');
1704 --DEBUG_DJ('l_finplan_lines_tab(j).system_reference3 :::'||l_finplan_lines_tab(j).system_reference3 );
1705 l_finplan_lines_tab(j).start_date := l_budget_lines_in(i).budget_start_date;
1706 l_finplan_lines_tab(j).end_date := l_budget_lines_in(i).budget_end_date;
1707 l_finplan_lines_tab(j).period_name := l_budget_lines_in(i).period_name;
1708 l_finplan_lines_tab(j).system_reference4 := l_unit_of_measure ;
1709 -- l_finplan_lines_tab(j).system_reference5 := l_track_as_labor_flag ;
1710 l_finplan_lines_tab(j).system_reference5 := NULL; -- 3807633 track_as_labor_flag not mantained in FPM changes
1711 l_finplan_lines_tab(j).txn_currency_code := l_budget_lines_in(i).txn_currency_code ;
1712 l_finplan_lines_tab(j).projfunc_raw_cost := NULL;
1713 l_finplan_lines_tab(j).projfunc_burdened_cost := NULL;
1714 l_finplan_lines_tab(j).projfunc_revenue := NULL;
1715 l_finplan_lines_tab(j).project_raw_cost := NULL ;
1716 l_finplan_lines_tab(j).project_burdened_cost := NULL;
1717 l_finplan_lines_tab(j).project_revenue := NULL;
1718
1719 IF l_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1720 l_finplan_lines_tab(j).txn_raw_cost := NULL;
1721 ELSE
1722 l_finplan_lines_tab(j).txn_raw_cost := l_budget_lines_in(i).raw_cost ;
1723 END IF;
1724
1725 IF l_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1726 l_finplan_lines_tab(j).txn_burdened_cost := NULL;
1727 ELSE
1728 l_finplan_lines_tab(j).txn_burdened_cost := l_budget_lines_in(i).burdened_cost;
1729 END IF;
1730
1731 IF l_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1732 l_finplan_lines_tab(j).txn_revenue := NULL;
1733 ELSE
1734 l_finplan_lines_tab(j).txn_revenue := l_budget_lines_in(i).revenue;
1735 END IF;
1736
1737 IF l_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1738 l_finplan_lines_tab(j).quantity := NULL;
1739 ELSE
1740 l_finplan_lines_tab(j).quantity := l_budget_lines_in(i).quantity;
1741 END IF;
1742
1743
1744 IF l_budget_lines_in(i).change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1745 l_finplan_lines_tab(j).change_reason_code :=NULL;
1746 ELSE
1747 l_finplan_lines_tab(j).change_reason_code := l_budget_lines_in(i).change_reason_code ;
1748 END IF;
1749
1750 IF l_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1751 l_finplan_lines_tab(j).description := NULL;
1752 ELSE
1753 l_finplan_lines_tab(j).description := l_budget_lines_in(i).description;
1754 END IF;
1755
1756 IF l_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1757 l_finplan_lines_tab(j).attribute_category := NULL;
1758 ELSE
1759 l_finplan_lines_tab(j).attribute_category := l_budget_lines_in(i).attribute_category;
1760 END IF;
1761
1762 IF l_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1763 l_finplan_lines_tab(j).attribute1 := NULL;
1764 ELSE
1765 l_finplan_lines_tab(j).attribute1 := l_budget_lines_in(i).attribute1;
1766 END IF;
1767
1768 IF l_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1769 l_finplan_lines_tab(j).attribute2 := NULL;
1770 ELSE
1771 l_finplan_lines_tab(j).attribute2 := l_budget_lines_in(i).attribute2;
1772 END IF;
1773
1774 IF l_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1775 l_finplan_lines_tab(j).attribute3 := NULL;
1776 ELSE
1777 l_finplan_lines_tab(j).attribute3 := l_budget_lines_in(i).attribute3;
1778 END IF;
1779
1780 IF l_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1781 l_finplan_lines_tab(j).attribute4 := NULL;
1782 ELSE
1783 l_finplan_lines_tab(j).attribute4 := l_budget_lines_in(i).attribute4;
1784 END IF;
1785
1786 IF l_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1787 l_finplan_lines_tab(j).attribute5 := NULL;
1788 ELSE
1789 l_finplan_lines_tab(j).attribute5 := l_budget_lines_in(i).attribute5;
1790 END IF;
1791
1792 IF l_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1793 l_finplan_lines_tab(j).attribute6 := NULL;
1794 ELSE
1795 l_finplan_lines_tab(j).attribute6 := l_budget_lines_in(i).attribute6;
1796 END IF;
1797
1798 IF l_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1799 l_finplan_lines_tab(j).attribute7 := NULL;
1800 ELSE
1801 l_finplan_lines_tab(j).attribute7 := l_budget_lines_in(i).attribute7;
1802 END IF;
1803
1804 IF l_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1805 l_finplan_lines_tab(j).attribute8 := NULL;
1806 ELSE
1807 l_finplan_lines_tab(j).attribute8 := l_budget_lines_in(i).attribute8;
1808 END IF;
1809
1810 IF l_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1811 l_finplan_lines_tab(j).attribute9 := NULL;
1812 ELSE
1813 l_finplan_lines_tab(j).attribute9 := l_budget_lines_in(i).attribute9;
1814 END IF;
1815
1816 IF l_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1817 l_finplan_lines_tab(j).attribute10 := NULL;
1818 ELSE
1819 l_finplan_lines_tab(j).attribute10 := l_budget_lines_in(i).attribute10;
1820 END IF;
1821
1822 IF l_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1823 l_finplan_lines_tab(j).attribute11 := NULL;
1824 ELSE
1825 l_finplan_lines_tab(j).attribute11 := l_budget_lines_in(i).attribute11;
1826 END IF;
1827
1828 IF l_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1829 l_finplan_lines_tab(j).attribute12 := NULL;
1830 ELSE
1831 l_finplan_lines_tab(j).attribute12 := l_budget_lines_in(i).attribute12;
1832 END IF;
1833
1834 IF l_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1835 l_finplan_lines_tab(j).attribute13 := NULL;
1836 ELSE
1837 l_finplan_lines_tab(j).attribute13 := l_budget_lines_in(i).attribute13;
1838 END IF;
1839
1840 IF l_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1841 l_finplan_lines_tab(j).attribute14 := NULL;
1842 ELSE
1843 l_finplan_lines_tab(j).attribute14 := l_budget_lines_in(i).attribute14;
1844 END IF;
1845
1846 IF l_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1847 l_finplan_lines_tab(j).attribute15 := NULL;
1848 ELSE
1849 l_finplan_lines_tab(j).attribute15 := l_budget_lines_in(i).attribute15;
1850 END IF;
1851
1852 -- Added by Xin Liu
1853
1854 IF l_budget_lines_in(i).projfunc_cost_rate_type =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1855 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := NULL;
1856 ELSE
1857 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := l_budget_lines_in(i).projfunc_cost_rate_type ;
1858 END IF;
1859
1860 IF l_budget_lines_in(i).projfunc_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1861 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
1862 ELSE
1863 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE :=l_budget_lines_in(i).projfunc_cost_rate_date_type ;
1864 END IF;
1865
1866 IF l_budget_lines_in(i).projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1867 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE := NULL;
1868 ELSE
1869 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE := l_budget_lines_in(i).projfunc_cost_rate_date ;
1870 END IF;
1871
1872 IF l_budget_lines_in(i).projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1873 l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := NULL;
1874 ELSE
1875 l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := l_budget_lines_in(i).projfunc_cost_exchange_rate ;
1876 END IF;
1877
1878 IF l_budget_lines_in(i).projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1879 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE := NULL;
1880 ELSE
1881 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE := l_budget_lines_in(i).projfunc_rev_rate_type ;
1882 END IF;
1883
1884 IF l_budget_lines_in(i).projfunc_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1885 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
1886 ELSE
1887 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := l_budget_lines_in(i).projfunc_rev_rate_date_type ;
1888 END IF;
1889
1890 IF l_budget_lines_in(i).projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1891 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE := NULL;
1892 ELSE
1893 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE := l_budget_lines_in(i).projfunc_rev_rate_date;
1894 END IF;
1895
1896 IF l_budget_lines_in(i).projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1897 l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE := NULL;
1898 ELSE
1899 l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE := l_budget_lines_in(i).projfunc_rev_exchange_rate ;
1900 END IF;
1901
1902 IF l_budget_lines_in(i).project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1903 l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE := NULL;
1904 ELSE
1905 l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE := l_budget_lines_in(i).project_cost_rate_type;
1906 END IF;
1907
1908 IF l_budget_lines_in(i).project_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1909 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := NULL;
1910 ELSE
1911 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := l_budget_lines_in(i).project_cost_rate_date_type ;
1912 END IF;
1913
1914 IF l_budget_lines_in(i).project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1915 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE := NULL;
1916 ELSE
1917 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE := l_budget_lines_in(i).project_cost_rate_date ;
1918 END IF;
1919
1920 IF l_budget_lines_in(i).project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1921 l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE := NULL;
1922 ELSE
1923 l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE := l_budget_lines_in(i).project_cost_exchange_rate ;
1924 END IF;
1925
1926 IF l_budget_lines_in(i).project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1927 l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE := NULL;
1928 ELSE
1929 l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE := l_budget_lines_in(i).project_rev_rate_type ;
1930 END IF;
1931
1932 IF l_budget_lines_in(i).project_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1933 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE := NULL;
1934 ELSE
1935 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE := l_budget_lines_in(i).project_rev_rate_date_type ;
1936 END IF;
1937
1938 IF l_budget_lines_in(i).project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1939 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE := NULL;
1940 ELSE
1941 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE := l_budget_lines_in(i).project_rev_rate_date ;
1942 END IF;
1943
1944 IF l_budget_lines_in(i).project_rev_exchange_rate =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1945 l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE := NULL;
1946 ELSE
1947 l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE := l_budget_lines_in(i).project_rev_exchange_rate ;
1948 END IF;
1949
1950 /* Bug 3218822 - Use the validated pm_product_code of the header for the budget line if
1951 pm_product_code is passed as Null at the line level */
1952
1953 IF l_budget_lines_in(i).pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
1954 l_budget_lines_in(i).pm_product_code IS NULL THEN
1955 l_finplan_lines_tab(j).pm_product_code := p_pm_product_code ;
1956 ELSE
1957 l_finplan_lines_tab(j).pm_product_code := l_budget_lines_in(i).pm_product_code ;
1958 END IF;
1959
1960 IF l_budget_lines_in(i).pm_budget_line_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1961 l_finplan_lines_tab(j).pm_budget_line_reference := NULL;
1962 ELSE
1963 l_finplan_lines_tab(j).pm_budget_line_reference := l_budget_lines_in(i).pm_budget_line_reference ;
1964 END IF;
1965 -- Done with Changes.
1966 l_finplan_lines_tab(j).quantity_source := 'I' ;
1967 l_finplan_lines_tab(j).raw_cost_source := 'I' ;
1968 l_finplan_lines_tab(j).burdened_cost_source := 'I' ;
1969 l_finplan_lines_tab(j).revenue_source := 'I' ;
1970 l_finplan_lines_tab(j).resource_assignment_id := -1 ;
1971
1972 --increment the index for fin plan lines table
1973 j := j+1;
1974
1975 -- END IF;--IF (nvl(l_budget_lines_in(i).quantity,0)<>0 OR
1976
1977 END LOOP;--Loop for copying fin plan lines into table of type rollup temp
1978
1979 IF l_debug_mode = 'Y' THEN
1980 pa_debug.g_err_stage := 'Done with the copying of budget lines to fin plan lines';
1981 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1982 END IF;
1983
1984 END IF;
1985
1986 IF l_debug_mode = 'Y' THEN
1987 pa_debug.g_err_stage := 'About to call the create draft api in fin plan pvt';
1988 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1989 END IF;
1990
1991 -- If either of the create , replace current working version flags are Y then lock the
1992 -- Current working version.
1993
1994 IF (p_replace_current_working_flag = 'Y' OR
1995 p_create_new_curr_working_flag = 'Y') THEN
1996 --Get the current working version info
1997 pa_fin_plan_utils.Get_Curr_Working_Version_Info(
1998 p_project_id => l_project_id
1999 ,p_fin_plan_type_id => l_fin_plan_type_id
2000 ,p_version_type => l_version_type
2001 ,x_fp_options_id => l_proj_fp_options_id
2002 ,x_fin_plan_version_id => l_CW_version_id
2003 ,x_return_status => p_return_status
2004 ,x_msg_count => p_msg_count
2005 ,x_msg_data => p_msg_data );
2006
2007 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2008 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2009 END IF;
2010
2011 IF l_CW_version_id IS NOT NULL THEN
2012
2013 -- Bug # 3507156 : Patchset M: B and F impact changes : AMG
2014 -- Commented the call to PA_FP_REFRESH_ELEMENTS_PUB.GET_REFRESH_PLAN_ELE_DTLS
2015 -- Comment START
2016 /*
2017 --Added by Xin Liu
2018 --Check if the current working version is locked for WBS refresh or not
2019 PA_FP_REFRESH_ELEMENTS_PUB.GET_REFRESH_PLAN_ELE_DTLS
2020 (
2021 p_budget_version_id => l_CW_version_id
2022 , p_proj_fp_options_id => NULL
2023 , x_refresh_required_flag => l_refresh_required_flag
2024 , x_request_id => l_request_id
2025 , x_process_code => l_process_code
2026 , x_return_status => p_return_status
2027 , x_msg_count => p_msg_count
2028 , x_msg_data => p_msg_data
2029 );
2030
2031 IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2032
2033 IF l_debug_mode = 'Y' THEN
2034 pa_debug.g_err_stage := 'Error executing get refresh plan ele dtls';
2035 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2036 END IF;
2037 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2038
2039 END IF;
2040
2041 IF ( NVL(l_refresh_required_flag, 'N') = 'Y' ) THEN
2042
2043 IF l_debug_mode = 'Y' THEN
2044 pa_debug.g_err_stage := 'Plan version must be refreshed for new plannable-task state.';
2045 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
2046 END IF;
2047
2048 pa_interface_utils_pub.map_new_amg_msg
2049 ( p_old_message_code => 'PA_FP_AMG_WBS_IN_PROC_MSG'
2050 ,p_msg_attribute => 'CHANGE'
2051 ,p_resize_flag => 'Y'
2052 ,p_msg_context => 'GENERAL'
2053 ,p_attribute1 => ''
2054 ,p_attribute2 => ''
2055 ,p_attribute3 => ''
2056 ,p_attribute4 => ''
2057 ,p_attribute5 => '');
2058
2059 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2060
2061 END IF;
2062
2063 --End changes done by Xin Liu for WBS refresh
2064 */
2065 -- Comment END
2066 -- Bug # 3507156 : Patchset M: B and F impact changes : AMG
2067
2068 select locked_by_person_id
2069 into l_locked_by_person_id from pa_budget_versions
2070 where budget_version_id = l_CW_version_id;
2071
2072 --Get the record version number of the current working version
2073 l_CW_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
2074
2075 pa_fin_plan_pvt.lock_unlock_version
2076 (p_budget_version_id => l_CW_version_id,
2077 p_record_version_number => l_CW_record_version_number,
2078 p_action => 'L',
2079 p_user_id => l_user_id,
2080 p_person_id => NULL,
2081 x_return_status => p_return_status,
2082 x_msg_count => p_msg_count,
2083 x_msg_data => p_msg_data) ;
2084
2085 IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2086
2087 IF l_debug_mode = 'Y' THEN
2088 pa_debug.g_err_stage := 'Error executing lock unlock version';
2089 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2090 END IF;
2091 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2092
2093 END IF;
2094
2095 END IF;--IF l_CW_version_id IS NOT NULL THEN
2096
2097 END IF;--IF (p_replace_current_working_flag = 'Y' OR
2098
2099 --Call the api that creates the fin plan version
2100 PA_FIN_PLAN_PVT.CREATE_DRAFT(
2101 p_project_id => l_project_id
2102 ,p_fin_plan_type_id => l_fin_plan_type_id
2103 ,p_version_type => l_version_type
2104 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_AMG_API--Bug 4224464.Changed this to AMG_API as this is a AMG flow.
2105 ,p_time_phased_code => l_time_phased_code
2106 ,p_resource_list_id => l_resource_list_id
2107 ,p_fin_plan_level_code => l_fin_plan_level_code
2108 ,p_plan_in_mc_flag => l_plan_in_multi_curr_flag
2109 ,p_version_name => l_budget_version_name
2110 ,p_description => l_description
2111 ,p_change_reason_code => l_change_reason_code
2112 ,p_raw_cost_flag => l_raw_cost_flag
2113 ,p_burdened_cost_flag => l_burdened_cost_flag
2114 ,p_revenue_flag => l_revenue_flag
2115 ,p_cost_qty_flag => l_cost_qty_flag
2116 ,p_revenue_qty_flag => l_revenue_qty_flag
2117 ,p_all_qty_flag => l_all_qty_flag
2118 ,p_attribute_category => l_attribute_category
2119 ,p_attribute1 => l_attribute1
2120 ,p_attribute2 => l_attribute2
2121 ,p_attribute3 => l_attribute3
2122 ,p_attribute4 => l_attribute4
2123 ,p_attribute5 => l_attribute5
2124 ,p_attribute6 => l_attribute6
2125 ,p_attribute7 => l_attribute7
2126 ,p_attribute8 => l_attribute8
2127 ,p_attribute9 => l_attribute9
2128 ,p_attribute10 => l_attribute10
2129 ,p_attribute11 => l_attribute11
2130 ,p_attribute12 => l_attribute12
2131 ,p_attribute13 => l_attribute13
2132 ,p_attribute14 => l_attribute14
2133 ,p_attribute15 => l_attribute15
2134 ,p_projfunc_cost_rate_type => l_projfunc_cost_rate_type
2135 ,p_projfunc_cost_rate_date_type => l_projfunc_cost_rate_date_typ
2136 ,p_projfunc_cost_rate_date => l_projfunc_cost_rate_date
2137 ,p_projfunc_rev_rate_type => l_projfunc_rev_rate_type
2138 ,p_projfunc_rev_rate_date_type => l_projfunc_rev_rate_date_typ
2139 ,p_projfunc_rev_rate_date => l_projfunc_rev_rate_date
2140 ,p_project_cost_rate_type => l_project_cost_rate_type
2141 ,p_project_cost_rate_date_type => l_project_cost_rate_date_typ
2142 ,p_project_cost_rate_date => l_project_cost_rate_date
2143 ,p_project_rev_rate_type => l_project_rev_rate_type
2144 ,p_project_rev_rate_date_type => l_project_rev_rate_date_typ
2145 ,p_project_rev_rate_date => l_project_rev_rate_date
2146 ,p_pm_product_code => p_pm_product_code
2147 ,p_pm_budget_reference => l_pm_budget_reference -- p_pm_project_reference changed to budget reference for bug 3858543
2148 ,p_budget_lines_tab => l_finplan_lines_tab
2149 -- Start of additional columns for B
2150 ,p_ci_id => NULL
2151 ,p_est_proj_raw_cost => NULL
2152 ,p_est_proj_bd_cost => NULL
2153 ,p_est_proj_revenue => NULL
2154 ,p_est_qty => NULL
2155 ,p_impacted_task_id => NULL
2156 ,p_agreement_id => NULL
2157 -- End of additional columns for Bug
2158 ,p_create_new_curr_working_flag => l_create_new_working_flag
2159 ,p_replace_current_working_flag => l_replace_current_working_flag
2160 ,x_budget_version_id => l_budget_version_id
2161 ,x_return_status => p_return_status
2162 ,x_msg_count => p_msg_count
2163 ,x_msg_data => p_msg_data);
2164
2165
2166 IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2167
2168 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2169
2170 END IF;
2171
2172 -- Added for Bug #4680197 Unlock the budget version incase is it locked in this create_draft api.
2173 IF p_create_new_curr_working_flag = 'Y'
2174 AND p_replace_current_working_flag <> 'Y' --Bug 8617706
2175 AND l_CW_version_id IS NOT NULL
2176 AND l_locked_by_person_id IS NULL THEN
2177 --Get the record version number of the current working version
2178 l_CW_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
2179 pa_fin_plan_pvt.lock_unlock_version
2180 (p_budget_version_id => l_CW_version_id,
2181 p_record_version_number => l_CW_record_version_number,
2182 p_action => 'U',
2183 p_user_id => l_user_id,
2184 p_person_id => NULL,
2185 x_return_status => p_return_status,
2186 x_msg_count => p_msg_count,
2187 x_msg_data => p_msg_data) ;
2188
2189 IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2190
2191 IF l_debug_mode = 'Y' THEN
2192 pa_debug.g_err_stage := 'Error executing lock unlock version';
2193 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2194 END IF;
2195 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2196 END IF;
2197 END IF;
2198 --Changes ended for Bug #4680197
2199
2200
2201 IF l_debug_mode = 'Y' THEN
2202 pa_debug.g_err_stage := 'Succesfully executed the fin plan pvt create draft ';
2203 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2204 END IF;
2205
2206
2207
2208 END IF;--IF p_budget_type_code IS NOT NULL
2209
2210 IF l_debug_mode = 'Y' THEN
2211 pa_debug.g_err_stage := 'About to check the overlapping dates';
2212 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2213 END IF;
2214
2215 -- check for overlapping dates
2216 pa_budget_lines_v_pkg.check_overlapping_dates( x_budget_version_id => l_budget_version_id
2217 ,x_resource_name => l_resource_name
2218 ,x_err_code => l_err_code );
2219
2220 IF l_err_code > 0
2221 THEN
2222
2223 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2224 THEN
2225 FND_MESSAGE.SET_NAME('PA','PA_CHECK_DATES_FAILED');
2226 FND_MESSAGE.SET_TOKEN('RNAME',l_resource_name);
2227
2228 FND_MSG_PUB.add;
2229 END IF;
2230
2231 IF l_debug_mode = 'Y' THEN
2232 pa_debug.g_err_stage := 'Error executing check_overlapping_dates';
2233 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
2234 END IF;
2235
2236
2237 RAISE FND_API.G_EXC_ERROR;
2238
2239 ELSIF l_err_code < 0
2240 THEN
2241
2242 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2243 THEN
2244
2245 FND_MSG_PUB.add_exc_msg
2246 ( p_pkg_name => 'PA_BUDGET_LINES_V_PKG'
2247 , p_procedure_name => 'CHECK_OVERLAPPING_DATES'
2248 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
2249
2250 END IF;
2251
2252 IF l_debug_mode = 'Y' THEN
2253 pa_debug.g_err_stage := 'Unexpected Error executing check_overlapping_dates';
2254 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
2255 END IF;
2256
2257 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2258
2259 END IF;
2260
2261 --Bug # 3507156 : Patchset M: B and F impact changes : AMG
2262 --Added a call to PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS to get the return statuses of the input budget lines.
2263
2264 PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS(
2265 p_fin_plan_version_id => l_budget_version_id
2266 ,p_budget_lines_in => l_budget_lines_in /* Bug # 3589304 */
2267 ,x_fp_lines_retn_status_tab => p_budget_lines_out
2268 ,x_return_status => p_return_status
2269 ,x_msg_count => p_msg_count
2270 ,x_msg_data => p_msg_data );
2271
2272
2273 IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2274
2275 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2276
2277 END IF;
2278
2279 IF l_debug_mode = 'Y' THEN
2280 pa_debug.g_err_stage := 'PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS got executed successfully';
2281 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2282 END IF;
2283
2284
2285 --summarizing the totals in the table pa_budget_versions
2286
2287 /*Summarizing of totals should be done only in the buget model*/
2288 IF (p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR and p_budget_type_code IS NOT NULL) THEN
2289
2290 IF l_debug_mode = 'Y' THEN
2291 pa_debug.g_err_stage := 'About to summarize totals in budget model';
2292 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2293 END IF;
2294
2295 pa_budget_utils.summerize_project_totals( x_budget_version_id => l_budget_version_id
2296 , x_err_code => l_err_code
2297 , x_err_stage => l_err_stage
2298 , x_err_stack => l_err_stack );
2299
2300
2301 IF l_err_code > 0
2302 THEN
2303
2304 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2305 THEN
2306
2307 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
2308 THEN
2309 pa_interface_utils_pub.map_new_amg_msg
2310 ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
2311 ,p_msg_attribute => 'CHANGE'
2312 ,p_resize_flag => 'N'
2313 ,p_msg_context => 'BUDG'
2314 ,p_attribute1 => l_amg_segment1
2315 ,p_attribute2 => ''
2316 ,p_attribute3 => p_budget_type_code
2317 ,p_attribute4 => ''
2318 ,p_attribute5 => '');
2319 else
2320 pa_interface_utils_pub.map_new_amg_msg
2321 ( p_old_message_code => l_err_stage
2322 ,p_msg_attribute => 'CHANGE'
2323 ,p_resize_flag => 'N'
2324 ,p_msg_context => 'BUDG'
2325 ,p_attribute1 => l_amg_segment1
2326 ,p_attribute2 => ''
2327 ,p_attribute3 => p_budget_type_code
2328 ,p_attribute4 => ''
2329 ,p_attribute5 => '');
2330 end IF;
2331
2332 END IF;
2333
2334 IF l_debug_mode = 'Y' THEN
2335 pa_debug.g_err_stage := 'Error in summarizing totals in budget model';
2336 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
2337 END IF;
2338
2339
2340 RAISE FND_API.G_EXC_ERROR;
2341
2342 ELSIF l_err_code < 0
2343 THEN
2344
2345 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2346 THEN
2347
2348 FND_MSG_PUB.add_exc_msg
2349 ( p_pkg_name => 'PA_BUDGET_UTILS'
2350 , p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
2351 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
2352
2353 END IF;
2354
2355 IF l_debug_mode = 'Y' THEN
2356 pa_debug.g_err_stage := 'Unexpected Error in summarizing totals in budget model';
2357 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
2358 END IF;
2359
2360
2361 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2362
2363 END IF;
2364
2365
2366 END IF;
2367
2368
2369 IF FND_API.TO_BOOLEAN( p_commit )
2370 THEN
2371
2372 IF l_debug_mode = 'Y' THEN
2373 pa_debug.g_err_stage := 'About to do a COMMIT';
2374 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2375 END IF;
2376
2377 COMMIT;
2378 END IF;
2379
2380 IF l_debug_mode = 'Y' THEN
2381 pa_debug.g_err_stage := 'Leaving create draft budget';
2382 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2383 END IF;
2384
2385 --Changes for bug 3182963
2386 IF l_debug_mode = 'Y' THEN
2387 pa_debug.reset_curr_function;
2388 END IF;
2389
2390
2391 EXCEPTION
2392 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
2393 -- dbms_output.put_line('MSG count in the stack ' || FND_MSG_PUB.count_msg);
2394 ROLLBACK TO create_draft_budget_pub;
2395
2396 IF p_return_status IS NULL OR
2397 p_return_status = FND_API.G_RET_STS_SUCCESS THEN
2398 p_return_status := FND_API.G_RET_STS_ERROR;
2399 END IF;
2400
2401 l_msg_count := FND_MSG_PUB.count_msg;
2402 -- dbms_output.put_line('MSG count in the stack ' || l_msg_count);
2403
2404 IF l_msg_count = 1 AND p_msg_data IS NULL THEN
2405 PA_INTERFACE_UTILS_PUB.get_messages
2406 (p_encoded => FND_API.G_TRUE,
2407 p_msg_index => 1,
2408 p_msg_count => l_msg_count,
2409 p_msg_data => l_msg_data,
2410 p_data => l_data,
2411 p_msg_index_out => l_msg_index_out);
2412
2413 p_msg_data := l_data;
2414 p_msg_count := l_msg_count;
2415 ELSE
2416 p_msg_count := l_msg_count;
2417 END IF;
2418
2419 IF l_debug_mode = 'Y' THEN
2420 pa_debug.reset_curr_function;
2421 END IF;
2422
2423 -- dbms_output.put_line('MSG count in the stack ' || l_msg_count);
2424
2425 RETURN;
2426
2427 WHEN FND_API.G_EXC_ERROR
2428 THEN
2429
2430 /* -- dbms_output.put_line('handling an G_EXC_ERROR exception in create_draft_budget'); */
2431
2432 ROLLBACK TO create_draft_budget_pub;
2433
2434 p_return_status := FND_API.G_RET_STS_ERROR;
2435
2436 FND_MSG_PUB.Count_And_Get
2437 ( p_count => p_msg_count ,
2438 p_data => p_msg_data );
2439 --Changes for bug 3182963
2440 IF l_debug_mode = 'Y' THEN
2441 pa_debug.reset_curr_function;
2442 END IF;
2443
2444
2445 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
2446 THEN
2447
2448 /* -- dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception in create_draft_budget'); */
2449
2450 ROLLBACK TO create_draft_budget_pub;
2451
2452 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2453
2454 FND_MSG_PUB.Count_And_Get
2455 ( p_count => p_msg_count ,
2456 p_data => p_msg_data );
2457
2458 --Changes for bug 3182963
2459 IF l_debug_mode = 'Y' THEN
2460 pa_debug.reset_curr_function;
2461 END IF;
2462
2463
2464 WHEN ROW_ALREADY_LOCKED
2465 THEN
2466 ROLLBACK TO create_draft_budget_pub;
2467
2468 p_return_status := FND_API.G_RET_STS_ERROR;
2469
2470 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2471 THEN
2472 FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
2473 FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
2474 FND_MESSAGE.SET_TOKEN('TASK', '');
2475 FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', p_budget_type_code);
2476 FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
2477 FND_MESSAGE.SET_TOKEN('START_DATE', '');
2478 FND_MESSAGE.SET_TOKEN('ENTITY', 'G_BUDGET_CODE');
2479 FND_MSG_PUB.ADD;
2480 END IF;
2481
2482 FND_MSG_PUB.Count_And_Get
2483 ( p_count => p_msg_count ,
2484 p_data => p_msg_data );
2485
2486 --Changes for bug 3182963
2487 IF l_debug_mode = 'Y' THEN
2488 pa_debug.reset_curr_function;
2489 END IF;
2490
2491
2492 WHEN OTHERS
2493 THEN
2494
2495 /* -- dbms_output.put_line('handling an OTHERS exception'); */
2496
2497 ROLLBACK TO create_draft_budget_pub;
2498
2499 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2500
2501 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2502 THEN
2503 FND_MSG_PUB.add_exc_msg
2504 ( p_pkg_name => G_PKG_NAME
2505 , p_procedure_name => l_api_name );
2506
2507 END IF;
2508
2509 FND_MSG_PUB.Count_And_Get
2510 ( p_count => p_msg_count ,
2511 p_data => p_msg_data );
2512
2513 --Changes for bug 3182963
2514 IF l_debug_mode = 'Y' THEN
2515 pa_debug.reset_curr_function;
2516 END IF;
2517
2518
2519 END create_draft_budget;
2520
2521
2522
2523 ----------------------------------------------------------------------------------------
2524 --Name: init_budget
2525 --Type: Procedure
2526 --Description: This procedure can be used to initialize the global PL/SQL
2527 -- tables that are used by a LOAD/EXECUTE/FETCH cycle.
2528 --
2529 --
2530 --Called subprograms:
2531 --
2532 --
2533 --
2534 --History:
2535 -- 20-SEP-1996 L. de Werker Created
2536 --
2537 --
2538 PROCEDURE init_budget
2539
2540 IS
2541
2542 BEGIN
2543
2544 FND_MSG_PUB.Initialize;
2545
2546 -- Initialize global table and record types
2547
2548 G_budget_lines_in_tbl.delete;
2549
2550 G_budget_lines_tbl_count := 0;
2551
2552 G_budget_lines_out_tbl.delete;
2553
2554
2555 END init_budget;
2556
2557
2558 ----------------------------------------------------------------------------------------
2559 --Name: load_budget_line
2560 --Type: Procedure
2561 --Description: This procedure can be used to load a budget line
2562 -- in a global PL/SQL table.
2563 --
2564 --Called subprograms:
2565 --
2566 --
2567 --
2568 --History:
2569 -- 24-SEP-1996 L. de Werker Created
2570 -- 28-NOV-1996 L. de Werker Add 16 parameters for descriptive flexfields
2571 -- 11-Mar-2003 Srikanth Included the parameters for Fin Plan Model
2572
2573 PROCEDURE load_budget_line
2574 ( p_api_version_number IN NUMBER
2575 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
2576 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
2577 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2578 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2579 ,p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2580 ,p_resource_alias IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2581 ,p_resource_list_member_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2582 --Bug 16604257 : CBS RBS Phase 2 API changes
2583 ,p_cost_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2584 ,p_cbs_element_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2585 --Bug 16604257
2586 ,p_budget_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2587 ,p_budget_end_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2588 ,p_period_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2589 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2590 ,p_raw_cost IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2591 ,p_burdened_cost IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2592 ,p_revenue IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2593 ,p_quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2594 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2595 ,p_pm_budget_line_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2596 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2597 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2598 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2599 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2600 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2601 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2602 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2603 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2604 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2605 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2606 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2607 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2608 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2609 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2610 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2611 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2612
2613 --Parameters for fin plan model
2614
2615 --Changes the default of the following parameters from NULL to G_PA_MISS_XXX 24-APR-03 by Xin Liu
2616 ,p_txn_currency_code IN pa_fp_txn_currencies.txn_currency_code%TYPE
2617 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2618 ,p_projfunc_cost_rate_type IN pa_proj_fp_options.projfunc_cost_rate_type%TYPE
2619 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2620 ,p_projfunc_cost_rate_date_type IN pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE
2621 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2622 ,p_projfunc_cost_rate_date IN pa_proj_fp_options.projfunc_cost_rate_date%TYPE
2623 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2624 ,p_projfunc_cost_exchange_rate IN pa_budget_lines.projfunc_cost_exchange_rate%TYPE
2625 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2626 ,p_projfunc_rev_rate_type IN pa_proj_fp_options.projfunc_rev_rate_type%TYPE
2627 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2628 ,p_projfunc_rev_rate_date_type IN pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE
2629 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2630 ,p_projfunc_rev_rate_date IN pa_proj_fp_options.projfunc_rev_rate_date%TYPE
2631 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2632 ,p_projfunc_rev_exchange_rate IN pa_budget_lines.projfunc_cost_exchange_rate%TYPE
2633 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2634 ,p_project_cost_rate_type IN pa_proj_fp_options.project_cost_rate_type%TYPE
2635 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2636 ,p_project_cost_rate_date_type IN pa_proj_fp_options.project_cost_rate_date_type%TYPE
2637 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2638 ,p_project_cost_rate_date IN pa_proj_fp_options.project_cost_rate_date%TYPE
2639 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2640 ,p_project_cost_exchange_rate IN pa_budget_lines.project_cost_exchange_rate%TYPE
2641 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2642 ,p_project_rev_rate_type IN pa_proj_fp_options.project_rev_rate_type%TYPE
2643 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2644 ,p_project_rev_rate_date_type IN pa_proj_fp_options.project_rev_rate_date_type%TYPE
2645 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2646 ,p_project_rev_rate_date IN pa_proj_fp_options.project_rev_rate_date%TYPE
2647 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2648 ,p_project_rev_exchange_rate IN pa_budget_lines.project_rev_exchange_rate%TYPE
2649 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2650 ,p_change_reason_code IN pa_budget_lines.change_reason_code%TYPE
2651 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2652 )
2653
2654 IS
2655
2656 l_api_name CONSTANT VARCHAR2(30) := 'load_budget_line';
2657 l_return_status VARCHAR2(1);
2658 l_err_stage VARCHAR2(120);
2659 l_msg_entity VARCHAR2(100);
2660 l_msg_entity_index NUMBER;
2661
2662 --bug 13686054
2663 l_txn_currency_code pa_fp_txn_currencies.txn_currency_code%TYPE;
2664
2665 BEGIN
2666
2667 -- Standard begin of API savepoint
2668
2669 SAVEPOINT load_budget_line_pub;
2670 --bug fix 13686054 start
2671 --assign value passed to local variable as this variable is used during
2672 --insert
2673 l_txn_currency_code := p_txn_currency_code;
2674 --if call is from MSP integration code, we take the functional currency if
2675 --not set we will use USD. MSP does not support multiple currency and that's why
2676 --we have to decide at this level.
2677 IF p_pm_product_code = 'MSPROJECT' THEN
2678 --bug fix 14114695 start
2679 --commented the below query since no data populated in the table pa_fp_txn_currencies if multi currency not enabled
2680 /*
2681 SELECT DISTINCT Nvl(cu.TXN_CURRENCY_CODE,'USD')
2682 INTO l_txn_currency_code
2683 FROM pa_fp_txn_currencies cu, pa_tasks pa
2684 WHERE pa.task_id = p_pa_task_id
2685 AND cu.PROJECT_ID= pa.project_id
2686 AND cu.PROJFUNC_CURRENCY_FLAG = 'Y'; */
2687 --added the below query
2688 SELECT Nvl(p.PROJFUNC_CURRENCY_CODE,'USD')
2689 INTO l_txn_currency_code
2690 FROM pa_projects_all p, pa_tasks pa
2691 WHERE pa.task_id = p_pa_task_id
2692 AND p.project_id= pa.project_id;
2693 --bug fix 14114695 end
2694 END IF;
2695 --bug fix 13686054 end
2696
2697 -- Standard call to check for call compatibility.
2698
2699 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
2700 p_api_version_number ,
2701 l_api_name ,
2702 G_PKG_NAME )
2703 THEN
2704
2705 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2706
2707 END IF;
2708
2709 -- Initialize the message table if requested.
2710
2711 IF FND_API.TO_BOOLEAN( p_init_msg_list )
2712 THEN
2713
2714 FND_MSG_PUB.initialize;
2715
2716 END IF;
2717
2718 -- Set API return status to success
2719
2720 p_return_status := FND_API.G_RET_STS_SUCCESS;
2721
2722 -- assign a value to the global counter for this table
2723 G_budget_lines_tbl_count := G_budget_lines_tbl_count + 1;
2724
2725
2726 -- assign incoming parameters to the fields of pl/sql global table G_budget_lines_in_tbl
2727 G_budget_lines_in_tbl(G_budget_lines_tbl_count).pa_task_id := p_pa_task_id;
2728 G_budget_lines_in_tbl(G_budget_lines_tbl_count).pm_task_reference := p_pm_task_reference;
2729 G_budget_lines_in_tbl(G_budget_lines_tbl_count).resource_alias := p_resource_alias;
2730 G_budget_lines_in_tbl(G_budget_lines_tbl_count).resource_list_member_id := p_resource_list_member_id;
2731 --Bug 16604257 : CBS RBS Phase 2 API changes
2732 G_budget_lines_in_tbl(G_budget_lines_tbl_count).cbs_element_id := p_cbs_element_id;
2733 G_budget_lines_in_tbl(G_budget_lines_tbl_count).cost_code := p_cost_code;
2734
2735 G_budget_lines_in_tbl(G_budget_lines_tbl_count).budget_start_date := p_budget_start_date;
2736 G_budget_lines_in_tbl(G_budget_lines_tbl_count).budget_end_date := p_budget_end_date;
2737 G_budget_lines_in_tbl(G_budget_lines_tbl_count).period_name := p_period_name;
2738 G_budget_lines_in_tbl(G_budget_lines_tbl_count).description := p_description;
2739 G_budget_lines_in_tbl(G_budget_lines_tbl_count).raw_cost := p_raw_cost;
2740 G_budget_lines_in_tbl(G_budget_lines_tbl_count).burdened_cost := p_burdened_cost;
2741 G_budget_lines_in_tbl(G_budget_lines_tbl_count).revenue := p_revenue;
2742 G_budget_lines_in_tbl(G_budget_lines_tbl_count).quantity := p_quantity;
2743 G_budget_lines_in_tbl(G_budget_lines_tbl_count).pm_product_code
2744 := p_pm_product_code;
2745 G_budget_lines_in_tbl(G_budget_lines_tbl_count).pm_budget_line_reference
2746 := p_pm_budget_line_reference;
2747 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute_category := p_attribute_category;
2748 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute1
2749 := p_attribute1;
2750 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute2
2751 := p_attribute2;
2752 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute3
2753 := p_attribute3;
2754 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute4
2755 := p_attribute4;
2756 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute5
2757 := p_attribute5;
2758 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute6
2759 := p_attribute6;
2760 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute7
2761 := p_attribute7;
2762 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute8
2763 := p_attribute8;
2764 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute9
2765 := p_attribute9;
2766 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute10
2767 := p_attribute10;
2768 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute11
2769 := p_attribute11;
2770 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute12
2771 := p_attribute12;
2772 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute13
2773 := p_attribute13;
2774 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute14
2775 := p_attribute14;
2776 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute15
2777 := p_attribute15;
2778
2779 -- The parameters included for fin plan model
2780 --bug 13686054
2781 -- G_budget_lines_in_tbl(G_budget_lines_tbl_count).txn_currency_code := p_txn_currency_code ;
2782 G_budget_lines_in_tbl(G_budget_lines_tbl_count).txn_currency_code := l_txn_currency_code ;
2783 G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_cost_rate_type := p_projfunc_cost_rate_type ;
2784 G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_cost_rate_date_type := p_projfunc_cost_rate_date_type ;
2785 G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_cost_rate_date := p_projfunc_cost_rate_date ;
2786 G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_cost_exchange_rate := p_projfunc_cost_exchange_rate ;
2787 G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_rev_rate_type := p_projfunc_rev_rate_type ;
2788 G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_rev_rate_date_type := p_projfunc_rev_rate_date_type ;
2789 G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_rev_rate_date := p_projfunc_rev_rate_date ;
2790 G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_rev_exchange_rate := p_projfunc_rev_exchange_rate ;
2791 G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_cost_rate_type := p_project_cost_rate_type ;
2792 G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_cost_rate_date_type := p_project_cost_rate_date_type ;
2793 G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_cost_rate_date := p_project_cost_rate_date ;
2794 G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_cost_exchange_rate := p_project_cost_exchange_rate ;
2795 G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_rev_rate_type := p_project_rev_rate_type ;
2796 G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_rev_rate_date_type := p_project_rev_rate_date_type ;
2797 G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_rev_rate_date := p_project_rev_rate_date ;
2798 G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_rev_exchange_rate := p_project_rev_exchange_rate ;
2799 G_budget_lines_in_tbl(G_budget_lines_tbl_count).change_reason_code := p_change_reason_code ;
2800
2801
2802
2803 EXCEPTION
2804
2805 WHEN FND_API.G_EXC_ERROR
2806 THEN
2807 ROLLBACK TO load_budget_line_pub;
2808
2809 p_return_status := FND_API.G_RET_STS_ERROR;
2810
2811 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
2812 THEN
2813 ROLLBACK TO load_budget_line_pub;
2814
2815 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2816
2817 WHEN OTHERS THEN
2818 ROLLBACK TO load_budget_line_pub;
2819
2820 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2821
2822 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2823 THEN
2824 FND_MSG_PUB.add_exc_msg
2825 ( p_pkg_name => G_PKG_NAME
2826 , p_procedure_name => l_api_name );
2827
2828 END IF;
2829
2830 END load_budget_line;
2831
2832 ----------------------------------------------------------------------------------------
2833 --Name: execute_create_draft_budget
2834 --Type: Procedure
2835 --Description: This procedure can be used to create a draft budget
2836 -- using global PL/SQL tables.
2837 --
2838 --Called subprograms:
2839 --
2840 --
2841 --
2842 --History:
2843 -- 23-SEP-1996 L. de Werker Created
2844 -- 28-NOV-1996 L. de Werker Add 16 parameters for descriptive flexfields
2845 -- 29-NOV-1996 L. de Werker Added parameter p_pm_budget_reference
2846 -- 01-sep-2004 tpalaniv Added parameter p_pm_budget_reference while calling create_draft_budget
2847 PROCEDURE execute_create_draft_budget
2848 ( p_api_version_number IN NUMBER
2849 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
2850 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
2851 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2852 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2853 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2854 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2855 ,p_pm_budget_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2856 , p_budget_version_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2857 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2858 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2859 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2860 ,p_change_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2861 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2862 ,p_entry_method_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2863 ,p_resource_list_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2864 ,p_resource_list_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2865 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2866 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2867 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2868 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2869 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2870 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2871 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2872 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2873 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2874 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2875 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2876 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2877 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2878 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2879 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2880 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2881
2882 --Added the following parameters for changes in AMG due to finplan model
2883 ,p_fin_plan_type_id IN pa_fin_plan_types_b.fin_plan_type_id%TYPE
2884 ,p_fin_plan_type_name IN pa_fin_plan_types_vl.name%TYPE
2885 ,p_version_type IN pa_budget_versions.version_type%TYPE
2886 ,p_fin_plan_level_code IN pa_proj_fp_options.cost_fin_plan_level_code%TYPE
2887 ,p_time_phased_code IN pa_proj_fp_options.cost_time_phased_code%TYPE
2888 ,p_plan_in_multi_curr_flag IN pa_proj_fp_options.plan_in_multi_curr_flag%TYPE
2889 ,p_projfunc_cost_rate_type IN pa_proj_fp_options.projfunc_cost_rate_type%TYPE
2890 ,p_projfunc_cost_rate_date_typ IN pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE
2891 ,p_projfunc_cost_rate_date IN pa_proj_fp_options.projfunc_cost_rate_date%TYPE
2892 ,p_projfunc_rev_rate_type IN pa_proj_fp_options.projfunc_rev_rate_type%TYPE
2893 ,p_projfunc_rev_rate_date_typ IN pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE
2894 ,p_projfunc_rev_rate_date IN pa_proj_fp_options.projfunc_rev_rate_date%TYPE
2895 ,p_project_cost_rate_type IN pa_proj_fp_options.project_cost_rate_type%TYPE
2896 ,p_project_cost_rate_date_typ IN pa_proj_fp_options.project_cost_rate_date_type%TYPE
2897 ,p_project_cost_rate_date IN pa_proj_fp_options.project_cost_rate_date%TYPE
2898 ,p_project_rev_rate_type IN pa_proj_fp_options.project_rev_rate_type%TYPE
2899 ,p_project_rev_rate_date_typ IN pa_proj_fp_options.project_rev_rate_date_type%TYPE
2900 ,p_project_rev_rate_date IN pa_proj_fp_options.project_rev_rate_date%TYPE
2901 ,p_raw_cost_flag IN VARCHAR2
2902 ,p_burdened_cost_flag IN VARCHAR2
2903 ,p_revenue_flag IN VARCHAR2
2904 ,p_cost_qty_flag IN VARCHAR2
2905 ,p_revenue_qty_flag IN VARCHAR2
2906 ,P_all_qty_flag IN VARCHAR2
2907 ,p_create_new_curr_working_flag IN VARCHAR2
2908 ,p_replace_current_working_flag IN VARCHAR2
2909 ,p_using_resource_lists_flag IN VARCHAR2
2910 )
2911
2912
2913 IS
2914
2915 l_api_name CONSTANT VARCHAR2(30) := 'execute_create_draft_budget';
2916 i NUMBER;
2917 l_return_status VARCHAR2(1);
2918 l_err_stage VARCHAR2(120);
2919
2920
2921 BEGIN
2922
2923 -- Standard begin of API savepoint
2924
2925 SAVEPOINT execute_create_budget_pub;
2926
2927 -- Standard call to check for call compatibility.
2928
2929 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
2930 p_api_version_number ,
2931 l_api_name ,
2932 G_PKG_NAME )
2933 THEN
2934
2935 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2936
2937 END IF;
2938
2939 -- Initialize the message table if requested.
2940
2941 IF FND_API.TO_BOOLEAN( p_init_msg_list )
2942 THEN
2943
2944 FND_MSG_PUB.initialize;
2945
2946 END IF;
2947
2948 -- Set API return status to success
2949
2950 p_return_status := FND_API.G_RET_STS_SUCCESS;
2951
2952 create_draft_budget
2953 ( p_api_version_number => p_api_version_number
2954 ,p_commit => FND_API.G_FALSE
2955 ,p_init_msg_list => FND_API.G_FALSE
2956 ,p_msg_count => p_msg_count
2957 ,p_msg_data => p_msg_data
2958 ,p_return_status => l_return_status
2959 ,p_pm_product_code => p_pm_product_code
2960 ,p_budget_version_name => p_budget_version_name
2961 ,p_pa_project_id => p_pa_project_id
2962 ,p_pm_project_reference => p_pm_project_reference
2963 ,p_pm_budget_reference => p_pm_budget_reference -- Added for bug 3858543
2964 ,p_budget_type_code => p_budget_type_code
2965 ,p_change_reason_code => p_change_reason_code
2966 ,p_description => p_description
2967 ,p_entry_method_code => p_entry_method_code
2968 ,p_resource_list_name => p_resource_list_name
2969 ,p_resource_list_id => p_resource_list_id
2970 ,p_attribute_category => p_attribute_category
2971 ,p_attribute1 => p_attribute1
2972 ,p_attribute2 => p_attribute2
2973 ,p_attribute3 => p_attribute3
2974 ,p_attribute4 => p_attribute4
2975 ,p_attribute5 => p_attribute5
2976 ,p_attribute6 => p_attribute6
2977 ,p_attribute7 => p_attribute7
2978 ,p_attribute8 => p_attribute8
2979 ,p_attribute9 => p_attribute9
2980 ,p_attribute10 => p_attribute10
2981 ,p_attribute11 => p_attribute11
2982 ,p_attribute12 => p_attribute12
2983 ,p_attribute13 => p_attribute13
2984 ,p_attribute14 => p_attribute14
2985 ,p_attribute15 => p_attribute15
2986 ,p_budget_lines_in => G_budget_lines_in_tbl
2987 ,p_budget_lines_out => G_budget_lines_out_tbl
2988
2989 --New parameters for finplan model
2990 ,p_fin_plan_type_id => p_fin_plan_type_id
2991 ,p_fin_plan_type_name => p_fin_plan_type_name
2992 ,p_version_type => p_version_type
2993 ,p_fin_plan_level_code => p_fin_plan_level_code
2994 ,p_time_phased_code => p_time_phased_code
2995 ,p_plan_in_multi_curr_flag => p_plan_in_multi_curr_flag
2996 ,p_projfunc_cost_rate_type => p_projfunc_cost_rate_type
2997 ,p_projfunc_cost_rate_date_typ => p_projfunc_cost_rate_date_typ
2998 ,p_projfunc_cost_rate_date => p_projfunc_cost_rate_date
2999 ,p_projfunc_rev_rate_type => p_projfunc_rev_rate_type
3000 ,p_projfunc_rev_rate_date_typ => p_projfunc_rev_rate_date_typ
3001 ,p_projfunc_rev_rate_date => p_projfunc_rev_rate_date
3002 ,p_project_cost_rate_type => p_project_cost_rate_type
3003 ,p_project_cost_rate_date_typ => p_project_cost_rate_date_typ
3004 ,p_project_cost_rate_date => p_project_cost_rate_date
3005 ,p_project_rev_rate_type => p_project_rev_rate_type
3006 ,p_project_rev_rate_date_typ => p_project_rev_rate_date_typ
3007 ,p_project_rev_rate_date => p_project_rev_rate_date
3008 ,p_raw_cost_flag => p_raw_cost_flag
3009 ,p_burdened_cost_flag => p_burdened_cost_flag
3010 ,p_revenue_flag => p_revenue_flag
3011 ,p_cost_qty_flag => p_cost_qty_flag
3012 ,p_revenue_qty_flag => p_revenue_qty_flag
3013 ,P_all_qty_flag => P_all_qty_flag
3014 ,p_create_new_curr_working_flag=> p_create_new_curr_working_flag
3015 ,p_replace_current_working_flag=> p_replace_current_working_flag
3016 ,p_using_resource_lists_flag => p_using_resource_lists_flag);
3017
3018
3019 -- Temporary solution because of commit in delete_budget!!!!
3020
3021 SAVEPOINT execute_create_budget_pub;
3022
3023 /* -- dbms_output.put_line('Return status create_draft_budget: '||l_return_status); */
3024
3025 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
3026 THEN
3027
3028 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3029
3030 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
3031 THEN
3032
3033 RAISE FND_API.G_EXC_ERROR;
3034 END IF;
3035
3036 IF fnd_api.to_boolean(p_commit)
3037 THEN
3038 COMMIT;
3039 END IF;
3040
3041
3042 EXCEPTION
3043
3044 WHEN FND_API.G_EXC_ERROR
3045 THEN
3046
3047
3048 ROLLBACK TO execute_create_budget_pub;
3049
3050 p_return_status := FND_API.G_RET_STS_ERROR;
3051
3052 FND_MSG_PUB.Count_And_Get
3053 ( p_count => p_msg_count ,
3054 p_data => p_msg_data );
3055
3056 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
3057 THEN
3058
3059 /* -- dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
3060
3061 ROLLBACK TO execute_create_budget_pub;
3062
3063 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3064
3065 FND_MSG_PUB.Count_And_Get
3066 ( p_count => p_msg_count ,
3067 p_data => p_msg_data );
3068
3069 WHEN OTHERS THEN
3070
3071
3072 ROLLBACK TO execute_create_budget_pub;
3073
3074 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3075
3076 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3077 THEN
3078 FND_MSG_PUB.add_exc_msg
3079 ( p_pkg_name => G_PKG_NAME
3080 , p_procedure_name => l_api_name );
3081
3082 END IF;
3083
3084 FND_MSG_PUB.Count_And_Get
3085 ( p_count => p_msg_count ,
3086 p_data => p_msg_data );
3087
3088 END execute_create_draft_budget;
3089
3090
3091 ----------------------------------------------------------------------------------------
3092 --Name: fetch_budget_line
3093 --Type: Procedure
3094 --Description: This procedure can be used to fetch the outcoming
3095 -- parameters for budget lines as part of the LOAD/EXECUTE/FETCH cycle.
3096 --
3097 --
3098 --Called subprograms:
3099 --
3100 --
3101 --
3102 --History:
3103 -- 30-SEP-1996 L. de Werker Created
3104 --
3105 --
3106 PROCEDURE fetch_budget_line
3107 ( p_api_version_number IN NUMBER
3108 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
3109 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3110 ,p_line_index IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3111 ,p_line_return_status OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
3112
3113 IS
3114
3115 l_api_name CONSTANT VARCHAR2(30) := 'fetch_budget_line';
3116 l_index NUMBER;
3117 i NUMBER;
3118
3119 BEGIN
3120
3121 -- Standard begin of API savepoint
3122
3123 SAVEPOINT fetch_budget_line_pub;
3124
3125 -- Standard call to check for call compatibility.
3126
3127 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
3128 p_api_version_number ,
3129 l_api_name ,
3130 G_PKG_NAME )
3131 THEN
3132
3133 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3134
3135 END IF;
3136
3137 -- Initialize the message table if requested.
3138
3139 IF FND_API.TO_BOOLEAN( p_init_msg_list )
3140 THEN
3141
3142 FND_MSG_PUB.initialize;
3143
3144 END IF;
3145
3146 -- Set API return status to success
3147
3148 p_return_status := FND_API.G_RET_STS_SUCCESS;
3149
3150 -- Check budget line index value,
3151 -- when they don't provide an index we will error out
3152
3153 IF p_line_index = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3154 OR p_line_index IS NULL
3155 THEN
3156 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3157 THEN
3158 pa_interface_utils_pub.map_new_amg_msg
3159 ( p_old_message_code => 'PA_BUGDET_LINE_INDEX_MISSING'
3160 ,p_msg_attribute => 'CHANGE'
3161 ,p_resize_flag => 'Y'
3162 ,p_msg_context => 'GENERAL'
3163 ,p_attribute1 => ''
3164 ,p_attribute2 => ''
3165 ,p_attribute3 => ''
3166 ,p_attribute4 => ''
3167 ,p_attribute5 => '');
3168 END IF;
3169
3170 p_return_status := FND_API.G_RET_STS_ERROR;
3171 RAISE FND_API.G_EXC_ERROR;
3172 ELSE
3173 l_index := p_line_index;
3174 END IF;
3175
3176 --assign global table fields to the outgoing parameter
3177 p_line_return_status := G_budget_lines_out_tbl(l_index).return_status;
3178
3179
3180
3181 EXCEPTION
3182
3183 WHEN FND_API.G_EXC_ERROR
3184 THEN
3185
3186 ROLLBACK TO fetch_budget_line_pub;
3187
3188 p_return_status := FND_API.G_RET_STS_ERROR;
3189
3190 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
3191 THEN
3192
3193 ROLLBACK TO fetch_budget_line_pub;
3194
3195 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3196
3197 WHEN OTHERS THEN
3198
3199 ROLLBACK TO fetch_budget_line_pub;
3200
3201 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3202
3203 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3204 THEN
3205 FND_MSG_PUB.add_exc_msg
3206 ( p_pkg_name => G_PKG_NAME
3207 , p_procedure_name => l_api_name );
3208
3209 END IF;
3210
3211
3212 END fetch_budget_line;
3213
3214 ----------------------------------------------------------------------------------------
3215 --Name: clear_budget
3216 --Type: Procedure
3217 --Description: This procedure can be used to clear the global PL/SQL
3218 -- tables that are used by a LOAD/EXECUTE/FETCH cycle.
3219 --
3220 --
3221 --Called subprograms:
3222 --
3223 --
3224 --
3225 --History:
3226 -- 23-SEP-1996 L. de Werker Created
3227 --
3228 --
3229 PROCEDURE clear_budget
3230
3231 IS
3232
3233 BEGIN
3234
3235
3236 init_budget;
3237
3238
3239 END clear_budget;
3240
3241
3242 ----------------------------------------------------------------------------------------
3243 --Name: Baseline_Budget
3244 --Type: Procedure
3245 --Description: This procedure can be used to baseline
3246 -- a budget for a given project.
3247 --
3248 --
3249 --Called subprograms: pa_budget_core.verify
3250 -- pa_budget_core.baseline
3251 -- PA_BUDGET_FUND_PKG.get_budget_ctrl_options
3252 --
3253 --
3254 --
3255 --History:
3256 -- 30-SEP-1996 L. de Werker Created
3257 -- 03-DEC-1996 L. de Werker Added check for previous baselined budgets.
3258 -- 03-MAR-1997 L. de Werker Added workflow enabling
3259 -- 24-JUN-97 jwhite Workflow had been commented-out, renabled it
3260 -- as per latest specifications.
3261 -- 21-JUL-97 jwhite Added Check_Baseline_Rules procedure
3262 -- to validations section.
3263 -- 29-JUL-97 jwhite Radically changed validations and WF implementation
3264 -- as per new specs from jlowell.
3265 -- 12-AUG-97 jwhite Added new OUT-parameter, p_workflow_started
3266 -- as per workflow implementation.
3267 -- 08-SEP-97 jwhite Updated to latest specifications: added
3268 -- wrappers for Start_Budget_WF and
3269 -- Budget_WF_Is_Used, new parameters to
3270 -- Verify_Budget_Rules calls, etc.
3271 -- 11-SEP-97 jwhite Added new concept of warnings_only ('W')
3272 -- for the p_return_status with respect
3273 -- to the Verify_Budget_Rules calls.
3274 --
3275 -- 02-MAY-01 jwhite As per the Non-Project Budget Ingtegration
3276 -- development effort, if budget is enabled for budgetary
3277 -- controls, the baseline process will be
3278 -- aborted.
3279 -- 02-FEB-03 sgoteti Made changes for the finplan model
3280
3281
3282 PROCEDURE Baseline_Budget
3283 ( p_api_version_number IN NUMBER
3284 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
3285 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
3286 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
3287 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3288 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3289 ,p_workflow_started OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3290 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3291 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3292 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3293 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3294 ,p_mark_as_original IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3295
3296 --Parameters due to Fin Plan Model
3297 ,p_fin_plan_type_id IN pa_fin_plan_types_b.fin_plan_type_id%TYPE
3298 ,p_fin_plan_type_name IN pa_fin_plan_types_tl.name%TYPE
3299 ,p_version_type IN pa_budget_versions.version_type%TYPE)
3300
3301 IS
3302
3303 CURSOR l_budget_types_csr
3304 (p_budget_type_code VARCHAR2 )
3305 IS
3306 SELECT 1
3307 FROM pa_budget_types
3308 WHERE budget_type_code = p_budget_type_code;
3309
3310 -- Changed the cursor so that it can be used in both old budget model
3311 -- and finplan model
3312 CURSOR l_budget_lines_csr
3313 (p_budget_version_id NUMBER )
3314 IS
3315 SELECT 1
3316 FROM pa_budget_lines
3317 WHERE budget_version_id = p_budget_version_id;
3318
3319 --8423481
3320 CURSOR l_resource_assignments_csr
3321 ( p_budget_version_id NUMBER )
3322 IS
3323 SELECT 1
3324 FROM pa_resource_assignments
3325 WHERE budget_version_id = p_budget_version_id;
3326
3327 CURSOR l_budget_versions_csr
3328 (c_project_id NUMBER
3329 ,c_budget_type_code VARCHAR2)
3330
3331 IS
3332 SELECT budget_version_id
3333 FROM pa_budget_versions
3334 WHERE project_id = c_project_id
3335 AND budget_type_code = c_budget_type_code
3336 AND budget_status_code = 'W'
3337 AND ci_id IS NULL; -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
3338
3339
3340 l_budget_versions_rec l_budget_versions_csr%ROWTYPE;
3341
3342
3343 CURSOR l_baselined_csr
3344 ( c_project_id NUMBER
3345 ,c_budget_type_code VARCHAR2 )
3346
3347 IS
3348 SELECT budget_version_id
3349 FROM pa_budget_versions
3350 WHERE project_id = c_project_id
3351 AND budget_type_code = c_budget_type_code
3352 AND budget_status_code = 'B'
3353 AND ci_id IS NULL; -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
3354
3355
3356 l_baselined_rec l_baselined_csr%ROWTYPE;
3357
3358
3359 -- 01-AUG-97, jwhite
3360 -- Cursor for Verify_Budget_Rules
3361
3362 CURSOR l_budget_rules_csr(p_draft_version_id NUMBER)
3363 IS
3364 SELECT v.resource_list_id,
3365 t.project_type_class_code
3366 FROM pa_project_types t,
3367 pa_projects p,
3368 pa_budget_versions v
3369 WHERE v.budget_version_id = p_draft_version_id
3370 AND v.project_id = p.project_id
3371 AND p.project_type = t.project_type
3372 AND v.ci_id IS NULL; -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause v.ci_id IS NULL--Bug # 3507156
3373
3374
3375
3376 -- 24-JUN-97, jwhite
3377 -- ROW LOCKING ---------------------------------------------------------------
3378
3379 CURSOR l_lock_budget_csr (p_budget_version_id NUMBER)
3380 IS
3381 SELECT 'x'
3382 FROM pa_budget_versions
3383 WHERE budget_version_id = p_budget_version_id
3384 AND ci_id IS NULL -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
3385 FOR UPDATE NOWAIT;
3386
3387 -- --------------------------------------------------------------------------------------
3388
3389
3390
3391 l_api_name CONSTANT VARCHAR2(30) := 'baseline_budget';
3392 l_return_status VARCHAR2(1);
3393 l_project_id NUMBER;
3394
3395 l_budget_version_id NUMBER;
3396 l_mark_as_original pa_budget_versions.current_original_flag%TYPE;
3397
3398 l_err_code NUMBER;
3399 l_err_stage VARCHAR2(120);
3400 l_err_stack VARCHAR2(630);
3401 i NUMBER;
3402 l_row_found NUMBER;
3403 l_msg_count NUMBER ;
3404 l_msg_data VARCHAR2(2000);
3405 l_function_allowed VARCHAR2(1);
3406 l_resp_id NUMBER := 0;
3407 l_user_id NUMBER := 0;
3408 l_module_name VARCHAR2(80);
3409
3410 l_workflow_is_used VARCHAR2(1) := NULL;
3411 l_resource_list_id NUMBER;
3412 l_project_type_class_code pa_project_types.project_type_class_code%TYPE;
3413
3414 l_warnings_only_flag VARCHAR2(1) := 'Y';
3415 l_err_msg_count NUMBER := 0;
3416
3417 --needed to get the field values associated to a AMG message
3418
3419 CURSOR l_amg_project_csr
3420 (p_pa_project_id pa_projects.project_id%type)
3421 IS
3422 SELECT segment1
3423 FROM pa_projects p
3424 WHERE p.project_id = p_pa_project_id;
3425
3426 l_amg_segment1 VARCHAR2(25);
3427
3428 -- Needed to check whether the plan type id passed is attached to the project or Not
3429 CURSOR l_plan_type_option_csr
3430 (c_project_id pa_projects_all.project_id%TYPE,
3431 c_fin_plan_type_id pa_proj_fp_options.proj_fp_options_id%TYPE)
3432 IS
3433 SELECT 'X'
3434 FROM pa_proj_fp_options pfo
3435 WHERE pfo.project_id=c_project_id
3436 AND pfo.fin_plan_type_id=c_fin_plan_type_id
3437 AND pfo.fin_plan_option_level_code=PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE;
3438
3439 -- Needed to get the version id and record version number of the original baselined version
3440 CURSOR l_orig_baselined_ver_csr
3441 (c_project_id pa_projects_all.project_id%TYPE,
3442 c_fin_plan_type_id pa_budget_versions.fin_plan_type_id%TYPE,
3443 c_version_type pa_budget_versions.version_type%TYPE)
3444 IS
3445 SELECT budget_version_id
3446 ,record_version_number
3447 FROM pa_budget_versions
3448 WHERE project_id=c_project_id
3449 AND fin_plan_type_id=c_fin_plan_type_id
3450 AND version_type=c_version_type
3451 AND current_original_flag='Y'
3452 AND ci_id IS NULL; -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
3453
3454
3455 l_orig_baselined_ver_rec l_orig_baselined_ver_csr%ROWTYPE;
3456
3457
3458 -- Budget Integration Variables --------------------------
3459
3460 l_fck_req_flag VARCHAR2(1) := NULL;
3461 l_bdgt_intg_flag VARCHAR2(1) := NULL;
3462 l_bdgt_ver_id NUMBER := NULL;
3463 l_encum_type_id NUMBER := NULL;
3464 l_balance_type VARCHAR2(1) := NULL;
3465
3466 -- --------------------------------------------------------
3467 l_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE;
3468 l_debug_mode VARCHAR2(1);
3469 l_debug_level2 CONSTANT NUMBER := 2;
3470 l_debug_level3 CONSTANT NUMBER := 3;
3471 l_debug_level4 CONSTANT NUMBER := 4;
3472 l_debug_level5 CONSTANT NUMBER := 5;
3473 l_version_type pa_budget_Versions.version_type%TYPE;
3474 l_security_ret_code VARCHAR2(1);
3475 l_baselined_Ver_options_id pa_proj_fp_options.proj_fp_options_id%TYPE;
3476 l_baselined_version_id pa_budget_Versions.budget_version_id%TYPE;
3477 l_CW_ver_options_id pa_proj_fp_options.proj_fp_options_id%TYPE;
3478 l_curr_working_version_id pa_budget_Versions.budget_version_id%TYPE;
3479 l_CB_record_version_number pa_budget_Versions.record_version_number%TYPE;
3480 l_CW_record_version_number pa_budget_Versions.record_version_number%TYPE;
3481 l_any_error_occurred_flag VARCHAR2(1);
3482 l_data VARCHAR2(2000);
3483 l_msg_index_out NUMBER;
3484 l_dummy VARCHAR2(1);
3485 l_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE;
3486 l_result VARCHAR2(1);
3487 ll_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE;
3488 ll_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE;
3489 l_fc_version_created_flag VARCHAR2(1);
3490 l_final_plan_prc_code VARCHAR2(10);
3491 l_targ_request_id pa_budget_versions.request_id%TYPE;
3492 BEGIN
3493
3494 --Standard begin of API savepoint
3495
3496 SAVEPOINT baseline_budget_pub;
3497
3498
3499 --Standard call to check for call compatibility.
3500
3501 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
3502 p_api_version_number ,
3503 l_api_name ,
3504 G_PKG_NAME )
3505 THEN
3506
3507 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3508
3509 END IF;
3510
3511 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
3512
3513
3514 pa_debug.set_curr_function( p_function => 'baseline_budget',
3515 p_debug_mode => l_debug_mode );
3516
3517
3518 --Initialize the message table if requested.
3519 IF FND_API.TO_BOOLEAN( p_init_msg_list )
3520 THEN
3521
3522 FND_MSG_PUB.initialize;
3523
3524 END IF;
3525
3526 --Get the user id and responsibility Ids
3527 l_user_id := FND_GLOBAL.User_id;
3528 l_resp_id := FND_GLOBAL.Resp_id;
3529
3530
3531 -- This api will initialize the data that will be used by the map_new_amg_msg.
3532 -- commented out the procedure call as required by venkatesh. 25-APR-03
3533 /*
3534 PA_INTERFACE_UTILS_PUB.Set_Global_Info
3535 ( p_api_version_number => 1.0
3536 ,p_responsibility_id => l_resp_id
3537 ,p_user_id => l_user_id
3538 ,p_calling_mode => 'AMG' --bug 2783845
3539 ,p_msg_count => l_msg_count
3540 ,p_msg_data => l_msg_data
3541 ,p_return_status => l_return_status);
3542
3543 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3544 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3545 END IF;
3546 */
3547 --product_code is mandatory
3548 IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3549 OR p_pm_product_code IS NULL
3550 THEN
3551 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3552 THEN
3553 pa_interface_utils_pub.map_new_amg_msg
3554 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
3555 ,p_msg_attribute => 'CHANGE'
3556 ,p_resize_flag => 'N'
3557 ,p_msg_context => 'GENERAL'
3558 ,p_attribute1 => ''
3559 ,p_attribute2 => ''
3560 ,p_attribute3 => ''
3561 ,p_attribute4 => ''
3562 ,p_attribute5 => '');
3563 END IF;
3564
3565 IF l_debug_mode = 'Y' THEN
3566 pa_debug.g_err_stage:= 'Product code is missing';
3567 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3568 END IF;
3569
3570 -- RAISE FND_API.G_EXC_ERROR;
3571 l_any_error_occurred_flag := 'Y';
3572
3573 ELSE
3574 l_pm_product_code :='Z';
3575 /*added for bug no :2413400*/
3576 -- dbms_output.put_line('p_pm_product_code is '||p_pm_product_code);
3577 -- dbms_output.put_line('l_pm_product_code is '||l_pm_product_code);
3578 OPEN p_product_code_csr (p_pm_product_code);
3579 FETCH p_product_code_csr INTO l_pm_product_code;
3580 CLOSE p_product_code_csr;
3581 -- dbms_output.put_line('l_pm_product_code is 2'||l_pm_product_code);
3582 IF l_pm_product_code <> 'X'
3583 THEN
3584
3585 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3586 THEN
3587 pa_interface_utils_pub.map_new_amg_msg
3588 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
3589 ,p_msg_attribute => 'CHANGE'
3590 ,p_resize_flag => 'N'
3591 ,p_msg_context => 'GENERAL'
3592 ,p_attribute1 => ''
3593 ,p_attribute2 => ''
3594 ,p_attribute3 => ''
3595 ,p_attribute4 => ''
3596 ,p_attribute5 => '');
3597 END IF;
3598 p_return_status := FND_API.G_RET_STS_ERROR;
3599 -- RAISE FND_API.G_EXC_ERROR;
3600 l_any_error_occurred_flag := 'Y';
3601 IF l_debug_mode = 'Y' THEN
3602 pa_debug.g_err_stage:= 'Product code is invalid';
3603 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3604 END IF;
3605 -- dbms_output.put_line('Product Code is invalid');
3606 END IF;
3607 -- dbms_output.put_line('Validated the code');
3608 END IF;
3609
3610 --l_module_name := p_pm_product_code||'.'||'PA_PM_BASELINE_BUDGET';
3611 l_module_name := 'PA_PM_BASELINE_BUDGET';
3612
3613 --Commented out the existing calls to security APIs. call the api that has all the
3614 --security checks (As part of the changes to AMG for finplan model)
3615
3616 -- As part of enforcing project security, which would determine
3617 -- whether the user has the necessary privileges to update the project
3618 -- need to call the pa_security package
3619 -- If a user does not have privileges to update the project, then
3620 -- cannot baseline the budget
3621
3622 --pa_security.initialize (X_user_id => l_user_id,
3623 -- X_calling_module => l_module_name);
3624
3625 -- Actions performed using the APIs would be subject to
3626 -- function security. If the responsibility does not allow
3627 -- such functions to be executed, the API should not proceed further
3628 -- since the user does not have access to such functions
3629
3630 --PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := p_pa_project_id; Moved this to later part of code
3631
3632
3633 --PA_PM_FUNCTION_SECURITY_PUB.check_function_security
3634 --(p_api_version_number => p_api_version_number,
3635 -- p_responsibility_id => l_resp_id,
3636 -- p_function_name => 'PA_PM_BASELINE_BUDGET',
3637 -- p_msg_count => l_msg_count,
3638 -- p_msg_data => l_msg_data,
3639 -- p_return_status => l_return_status,
3640 -- p_function_allowed => l_function_allowed );
3641
3642 --IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
3643 --THEN
3644 -- RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3645 --
3646 --ELSIF l_return_status = FND_API.G_RET_STS_ERROR
3647 --THEN
3648 -- RAISE FND_API.G_EXC_ERROR;
3649 --END IF;
3650 --IF l_function_allowed = 'N' THEN
3651 -- pa_interface_utils_pub.map_new_amg_msg
3652 -- ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
3653 -- ,p_msg_attribute => 'CHANGE'
3654 -- ,p_resize_flag => 'Y'
3655 -- ,p_msg_context => 'GENERAL'
3656 -- ,p_attribute1 => ''
3657 -- ,p_attribute2 => ''
3658 -- ,p_attribute3 => ''
3659 -- ,p_attribute4 => ''
3660 -- ,p_attribute5 => '');
3661 -- p_return_status := FND_API.G_RET_STS_ERROR;
3662 -- RAISE FND_API.G_EXC_ERROR;
3663 --END IF;
3664
3665
3666 -- Set API return status to success
3667
3668 p_return_status := FND_API.G_RET_STS_SUCCESS;
3669
3670
3671
3672 -- 12-AUG-97, jwhite:
3673 -- Initialize New OUT-parameter to indicate workflow status
3674
3675 -- Set Worflow Started Status -------------------------------------------------
3676
3677 p_workflow_started := 'N';
3678 -- ------------------------------------------------------------------------------------
3679
3680
3681 --CHECK FOR MANDATORY FIELDS and CONVERT VALUES to ID's
3682
3683 /* -- dbms_output.put_line('Check for Mandatory Fields'); */
3684
3685 -- convert pm_project_reference to id
3686 Pa_project_pvt.Convert_pm_projref_to_id (
3687 p_pm_project_reference => p_pm_project_reference,
3688 p_pa_project_id => p_pa_project_id,
3689 p_out_project_id => l_project_id,
3690 p_return_status => l_return_status );
3691
3692 PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := l_project_id;
3693
3694 IF l_debug_mode = 'Y' THEN
3695 pa_debug.g_err_stage:= 'Convert_pm_projref_to_id returned status '||l_return_status;
3696 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3697 END IF;
3698
3699 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
3700 THEN
3701 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3702
3703 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
3704 THEN
3705 RAISE FND_API.G_EXC_ERROR;
3706
3707 END IF;
3708
3709 IF l_project_id IS NULL --never happens because previous procedure checks this.
3710 THEN
3711 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3712 THEN
3713 pa_interface_utils_pub.map_new_amg_msg
3714 ( p_old_message_code => 'PA_PROJECT_IS_MISSING'
3715 ,p_msg_attribute => 'CHANGE'
3716 ,p_resize_flag => 'N'
3717 ,p_msg_context => 'GENERAL'
3718 ,p_attribute1 => ''
3719 ,p_attribute2 => ''
3720 ,p_attribute3 => ''
3721 ,p_attribute4 => ''
3722 ,p_attribute5 => '');
3723 END IF;
3724
3725 IF l_debug_mode = 'Y' THEN
3726 pa_debug.g_err_stage:= 'Project id is null ';
3727 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3728 END IF;
3729
3730 RAISE FND_API.G_EXC_ERROR;
3731
3732 END IF;
3733
3734 -- Get segment1 for AMG messages
3735
3736 OPEN l_amg_project_csr( l_project_id );
3737 FETCH l_amg_project_csr INTO l_amg_segment1;
3738 CLOSE l_amg_project_csr;
3739
3740 -- Added Logic by Xin Liu to handle MISS vars based on Manoj's code review.
3741 -- 28-APR-03
3742 IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3743 ll_fin_plan_type_id := NULL;
3744 ELSE
3745 ll_fin_plan_type_id := p_fin_plan_type_id;
3746 END IF;
3747
3748 IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
3749 ll_fin_plan_type_name := NULL;
3750 ELSE
3751 ll_fin_plan_type_name := p_fin_plan_type_name;
3752 END IF;
3753
3754 -- Changes done.
3755
3756
3757 -- Both Budget Type Code and Fin Plan Type Id should not be null
3758 IF ((p_budget_type_code IS NULL OR p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
3759 (p_fin_plan_type_name IS NULL OR p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
3760 (p_fin_plan_type_id IS NULL OR p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) )THEN
3761
3762 PA_UTILS.ADD_MESSAGE
3763 (p_app_short_name => 'PA',
3764 p_msg_name => 'PA_BUDGET_FP_BOTH_MISSING');
3765
3766 IF l_debug_mode = 'Y' THEN
3767 pa_debug.g_err_stage:= 'budget type code and fin plan type id, both are null ';
3768 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3769 END IF;
3770
3771 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3772
3773 END IF;
3774
3775 -- Both Budget Type Code and Fin Plan Type Id should not be not null
3776 IF ((p_budget_type_code IS NOT NULL AND
3777 p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
3778 ((p_fin_plan_type_name IS NOT NULL AND p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3779 (p_fin_plan_type_id IS NOT NULL AND p_fin_plan_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) THEN
3780
3781 PA_UTILS.ADD_MESSAGE
3782 (p_app_short_name => 'PA',
3783 p_msg_name => 'PA_BUDGET_FP_BOTH_NOT_NULL');
3784
3785 IF l_debug_mode = 'Y' THEN
3786 pa_debug.g_err_stage:= 'budget type code and fin plan type id, both are not null ';
3787 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3788 END IF;
3789
3790 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3791
3792 END IF;
3793
3794 -- Check whether the user has privileges to call this api.
3795 -- Check whether budget type code or fin plan passed are valid or not
3796 IF p_budget_type_code IS NOT NULL
3797 AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3798 THEN
3799 -- This api adds the message to stack in case of error
3800 PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
3801 p_api_version_number => p_api_version_number
3802 ,p_project_id => l_project_id
3803 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET
3804 ,p_function_name => l_module_name
3805 ,p_version_type => NULL
3806 ,x_return_status => l_return_status
3807 ,x_ret_code => l_security_ret_code );
3808
3809 IF l_return_status <> FND_API.G_RET_STS_SUCCESS OR
3810 l_security_ret_code = 'N' THEN
3811
3812 IF l_debug_mode = 'Y' THEN
3813 pa_debug.g_err_stage := 'Security API failed' ;
3814 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3815 END IF;
3816
3817 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3818
3819 END IF;
3820
3821
3822 OPEN l_budget_types_csr( p_budget_type_code );
3823
3824 FETCH l_budget_types_csr
3825 INTO l_row_found;
3826
3827 IF l_budget_types_csr%NOTFOUND
3828 THEN
3829 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3830 THEN
3831 pa_interface_utils_pub.map_new_amg_msg
3832 ( p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
3833 ,p_msg_attribute => 'CHANGE'
3834 ,p_resize_flag => 'N'
3835 ,p_msg_context => 'BUDG'
3836 ,p_attribute1 => l_amg_segment1
3837 ,p_attribute2 => ''
3838 ,p_attribute3 => p_budget_type_code
3839 ,p_attribute4 => ''
3840 ,p_attribute5 => '');
3841 END IF;
3842
3843 CLOSE l_budget_types_csr;
3844 IF l_debug_mode = 'Y' THEN
3845 pa_debug.g_err_stage:= 'Invalid budget type ';
3846 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3847 END IF;
3848
3849 RAISE FND_API.G_EXC_ERROR;
3850
3851 ELSE
3852 CLOSE l_budget_types_csr;
3853 END IF;
3854
3855 --Added this validation for bug#4460120
3856 --Verify that the budget is not of type FORECASTING_BUDGET_TYPE
3857 IF p_budget_type_code='FORECASTING_BUDGET_TYPE' THEN
3858 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3859 THEN
3860 PA_UTILS.add_message
3861 (p_app_short_name => 'PA',
3862 p_msg_name => 'PA_FP_CANT_BLINE_FCST_BUD_TYPE');
3863 END IF;
3864 IF l_debug_mode = 'Y' THEN
3865 pa_debug.g_err_stage := 'Budget of type FORECASTING_BUDGET_TYPE' ;
3866 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3867 END IF;
3868 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3869 END IF;
3870
3871 ELSE -- API is called in the context of fin plan
3872
3873 --Call the api that converts the fin plan type name to ID .This api adds the
3874 --message to stack in case of error
3875
3876 --Changed p_fin_plan_type_id to ll_fin_plan_type_id,
3877 -- p_fin_plan_type_name to ll_fin_plan_type_name
3878 --Xin Liu 28-APR-03
3879 PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
3880 ( p_fin_plan_type_id => ll_fin_plan_type_id
3881 ,p_fin_plan_type_name => ll_fin_plan_type_name
3882 ,x_fin_plan_type_id => l_fin_plan_type_id
3883 ,x_return_status => l_return_status
3884 ,x_msg_count => l_msg_count
3885 ,x_msg_data => l_msg_data);
3886
3887 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3888
3889 IF l_debug_mode = 'Y' THEN
3890 pa_debug.g_err_stage := 'Can not get the value of Fin Plan Type Id' ;
3891 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3892 END IF;
3893
3894
3895 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3896
3897 END IF;
3898
3899 -- dbms_output.put_line('Obtained the plan type id'||l_fin_plan_type_id);
3900
3901 OPEN l_plan_type_option_csr( l_project_id
3902 ,l_fin_plan_type_id) ;
3903 FETCH l_plan_type_option_csr INTO l_dummy;
3904 IF l_plan_type_option_csr%NOTFOUND THEN
3905
3906 IF l_debug_mode = 'Y' THEN
3907 pa_debug.g_err_stage := 'Plan type options does not exiss' ;
3908 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3909 END IF;
3910
3911 SELECT name
3912 INTO l_fin_plan_type_name
3913 FROM pa_fin_plan_types_vl
3914 WHERE fin_plan_type_id = l_fin_plan_type_id;
3915
3916 PA_UTILS.ADD_MESSAGE
3917 (p_app_short_name => 'PA',
3918 p_msg_name => 'PA_FP_NO_PLAN_TYPE_OPTION',
3919 p_token1 => 'PROJECT',
3920 p_value1 => l_amg_segment1,
3921 p_token2 => 'PLAN_TYPE',
3922 p_value2 => l_fin_plan_type_name);
3923
3924
3925 CLOSE l_plan_type_option_csr;
3926
3927 IF l_debug_mode = 'Y' THEN
3928 pa_debug.g_err_stage:= 'Plan type is not yet added to the project';
3929 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
3930 END IF;
3931
3932 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3933
3934 ELSE
3935
3936 CLOSE l_plan_type_option_csr;
3937
3938 END IF;
3939
3940 --Added by Xin Liu to Handle the G_miss case.
3941 --28-APR-03
3942 IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
3943 l_version_type := NULL;
3944 ELSE
3945 l_version_type := p_version_type;
3946 END IF;
3947
3948 --Derive the version type.
3949 pa_fin_plan_utils.get_version_type
3950 ( p_project_id => l_project_id
3951 ,p_fin_plan_type_id => l_fin_plan_type_id
3952 ,px_version_type => l_version_type
3953 ,x_return_status => l_return_status
3954 ,x_msg_count => l_msg_count
3955 ,x_msg_data => l_msg_data);
3956
3957 -- dbms_output.put_line('Got the version type');
3958 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3959
3960 IF l_debug_mode = 'Y' THEN
3961 pa_debug.g_err_stage := 'get_version_type failed' ;
3962 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3963 END IF;
3964
3965 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3966
3967 END IF;
3968
3969
3970 PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
3971 p_api_version_number => p_api_version_number
3972 ,p_project_id => l_project_id
3973 ,p_fin_plan_type_id => l_fin_plan_type_id /* Bug 3139924 */
3974 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN
3975 ,p_function_name => l_module_name
3976 ,p_version_type => l_version_type
3977 ,x_return_status => l_return_status
3978 ,x_ret_code => l_security_ret_code );
3979
3980 IF l_return_status <> FND_API.G_RET_STS_SUCCESS OR
3981 l_security_ret_code = 'N' THEN
3982
3983 IF l_debug_mode = 'Y' THEN
3984 pa_debug.g_err_stage := 'Security API failed' ;
3985 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3986 END IF;
3987
3988 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3989
3990 END IF;
3991
3992 -- Get the current baselined version
3993 pa_fin_plan_utils.Get_Baselined_Version_Info(
3994 p_project_id => l_project_id
3995 ,p_fin_plan_type_id => l_fin_plan_type_id
3996 ,p_version_type => l_version_type
3997 ,x_fp_options_id => l_baselined_Ver_options_id
3998 ,x_fin_plan_version_id => l_baselined_version_id
3999 ,x_return_status => l_return_status
4000 ,x_msg_count => l_msg_count
4001 ,x_msg_data => l_msg_data);
4002
4003 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
4004 THEN
4005 -- RAISE FND_API.G_EXC_ERROR;
4006 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4007 END IF;
4008
4009 END IF;--IF p_budget_type_code IS NOT NULL
4010 -- Budget Integration Validation ---------------------------------------
4011
4012 --This validation is required only in budget model
4013 IF( p_budget_type_code IS NOT NULL
4014 AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
4015
4016
4017 PA_BUDGET_FUND_PKG.get_budget_ctrl_options (p_project_Id => l_project_id
4018 , p_budget_type_code => p_budget_type_code
4019 , p_calling_mode => 'BUDGET'
4020 , x_fck_req_flag => l_fck_req_flag
4021 , x_bdgt_intg_flag => l_bdgt_intg_flag
4022 , x_bdgt_ver_id => l_bdgt_ver_id
4023 , x_encum_type_id => l_encum_type_id
4024 , x_balance_type => l_balance_type
4025 , x_return_status => l_return_status
4026 , x_msg_data => l_msg_data
4027 , x_msg_count => l_msg_count
4028 );
4029
4030
4031 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4032 THEN
4033 IF l_debug_mode = 'Y' THEN
4034 pa_debug.g_err_stage := 'Unexpected error in budget ctrl options' ;
4035 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
4036 END IF;
4037
4038 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4039
4040
4041 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4042 THEN
4043 -- RAISE FND_API.G_EXC_ERROR;
4044 l_any_error_occurred_flag := 'Y';
4045
4046 END IF;
4047
4048
4049 IF (nvl(l_fck_req_flag,'N') = 'Y')
4050 THEN
4051 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4052 THEN
4053 pa_interface_utils_pub.map_new_amg_msg
4054 ( p_old_message_code => 'PA_BC_BGT_TYPE_IS_BAD_AMG'
4055 ,p_msg_attribute => 'CHANGE'
4056 ,p_resize_flag => 'N'
4057 ,p_msg_context => 'BUDG'
4058 ,p_attribute1 => l_amg_segment1
4059 ,p_attribute2 => ''
4060 ,p_attribute3 => p_budget_type_code
4061 ,p_attribute4 => ''
4062 ,p_attribute5 => '');
4063 END IF;
4064
4065 -- RAISE FND_API.G_EXC_ERROR;
4066 l_any_error_occurred_flag := 'Y';
4067 END IF;
4068
4069
4070 -- ----------------------------------------------------------------------
4071 END IF;--end of the if for bugetary controls
4072
4073
4074 -- mark_as_original defaults to YES ('Y') when this is the first time this budget is baselined
4075 -- otherwise it will default to NO ('N')
4076 IF p_mark_as_original IS NULL
4077 OR p_mark_as_original = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4078 OR UPPER(p_mark_as_original) NOT IN ('N','Y') THEN
4079
4080 IF( p_budget_type_code IS NOT NULL
4081 AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
4082
4083 OPEN l_baselined_csr( l_project_id
4084 ,p_budget_type_code);
4085
4086 FETCH l_baselined_csr INTO l_baselined_rec;
4087
4088 IF l_baselined_csr%NOTFOUND
4089 THEN
4090 l_mark_as_original := 'Y';
4091 ELSE
4092 l_mark_as_original := 'N';
4093 END IF;
4094
4095 CLOSE l_baselined_csr;
4096
4097 ELSE--Fin Plan Model . Get the baselined version details
4098
4099
4100 IF l_baselined_version_id IS NULL
4101 THEN
4102 l_mark_as_original := 'Y';
4103 ELSE
4104 l_mark_as_original := 'N';
4105 END IF;
4106
4107 END IF;
4108
4109 ELSE --Mark as original param is passed
4110 l_mark_as_original := UPPER(p_mark_as_original);
4111
4112 END IF;
4113 -- dbms_output.put_line('Done with mark as orig');
4114
4115 /* -- dbms_output.put_line('Mark_as_original = '||l_mark_as_original); */
4116
4117 -- get the budget version ID associated with this project / budget_type_code combination
4118
4119 IF( p_budget_type_code IS NOT NULL
4120 AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
4121
4122 OPEN l_budget_versions_csr ( l_project_id
4123 ,p_budget_type_code);
4124
4125 FETCH l_budget_versions_csr
4126 INTO l_budget_versions_rec;
4127
4128 IF l_budget_versions_csr%NOTFOUND
4129 THEN
4130 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4131 THEN
4132 pa_interface_utils_pub.map_new_amg_msg
4133 ( p_old_message_code => 'PA_NO_BUDGET_VERSION'
4134 ,p_msg_attribute => 'CHANGE'
4135 ,p_resize_flag => 'N'
4136 ,p_msg_context => 'BUDG'
4137 ,p_attribute1 => l_amg_segment1
4138 ,p_attribute2 => ''
4139 ,p_attribute3 => p_budget_type_code
4140 ,p_attribute4 => ''
4141 ,p_attribute5 => '');
4142 END IF;
4143
4144 CLOSE l_budget_versions_csr;
4145 RAISE FND_API.G_EXC_ERROR;
4146
4147 IF l_debug_mode = 'Y' THEN
4148 pa_debug.g_err_stage := 'Curr working version does not exist' ;
4149 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4150 END IF;
4151 l_any_error_occurred_flag := 'Y';
4152 ELSE
4153
4154 CLOSE l_budget_versions_csr;
4155
4156 END IF;
4157
4158 l_curr_working_version_id := l_budget_versions_rec.budget_version_id;
4159
4160 ELSE -- Fin Plan Model. Get the current working version info
4161
4162 pa_fin_plan_utils.Get_Curr_Working_Version_Info(
4163 p_project_id => l_project_id
4164 ,p_fin_plan_type_id => l_fin_plan_type_id
4165 ,p_version_type => l_version_type
4166 ,x_fp_options_id => l_CW_ver_options_id
4167 ,x_fin_plan_version_id => l_curr_working_version_id
4168 ,x_return_status => l_return_status
4169 ,x_msg_count => l_msg_count
4170 ,x_msg_data => l_msg_data );
4171
4172 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4173 IF l_debug_mode = 'Y' THEN
4174 pa_debug.g_err_stage := 'Unexpected error in Get_Baselined_Version_Info' ;
4175 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
4176 END IF;
4177 l_any_error_occurred_flag := 'Y';
4178 END IF;
4179
4180 IF l_curr_working_version_id IS NULL
4181 THEN
4182 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4183 THEN
4184 pa_interface_utils_pub.map_new_amg_msg
4185 ( p_old_message_code => 'PA_NO_BUDGET_VERSION'
4186 ,p_msg_attribute => 'CHANGE'
4187 ,p_resize_flag => 'N'
4188 ,p_msg_context => 'BUDG'
4189 ,p_attribute1 => l_amg_segment1
4190 ,p_attribute2 => ''
4191 ,p_attribute3 => p_budget_type_code
4192 ,p_attribute4 => ''
4193 ,p_attribute5 => '');
4194 END IF;
4195 -- Raising the error since its not possible to proceed if there is no
4196 -- Current working version
4197 RAISE FND_API.G_EXC_ERROR;
4198 l_any_error_occurred_flag := 'Y';
4199 IF l_debug_mode = 'Y' THEN
4200 pa_debug.g_err_stage := 'Curr working version does not exist' ;
4201 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4202 END IF;
4203
4204 END IF;
4205
4206 pa_fin_plan_utils.return_and_vldt_plan_prc_code
4207 (p_budget_version_id => l_curr_working_version_id
4208 ,x_final_plan_prc_code => l_final_plan_prc_code
4209 ,x_targ_request_id => l_targ_request_id
4210 ,x_return_status => l_return_status
4211 ,x_msg_count => l_msg_count
4212 ,x_msg_data => l_msg_data);
4213
4214 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4215 IF l_debug_mode = 'Y' THEN
4216 pa_debug.g_err_stage := 'Unexpected error in Get_Baselined_Version_Info' ;
4217 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
4218 END IF;
4219 l_any_error_occurred_flag := 'Y';
4220 END IF;
4221
4222
4223 END IF;
4224
4225 -- Call the api that performs the autobaseline checks
4226 -- Bug 3099706 : Skip the autobaseline checks if this API is called from
4227 -- PA_AGREEMENT_PUB.create_baselined_budget. This API will only be called
4228 -- in Autobaseline enabled AR plan type / budget type cases only.
4229 -- This check is valid in all other cases when a budget needs to be baselined.
4230
4231 -- dbms_output.put_line('Value of PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB = '||PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB);
4232
4233 IF (nvl(PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB,'N') = 'N') THEN
4234 -- dbms_output.put_line('about to call autobaseline checks API ');
4235
4236 pa_fin_plan_utils.perform_autobasline_checks
4237 ( p_budget_version_id => l_curr_working_version_id
4238 ,x_result => l_result
4239 ,x_return_status => p_return_status
4240 ,x_msg_count => p_msg_count
4241 ,x_msg_data => p_msg_data );
4242
4243 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4244 IF(l_debug_mode='Y') THEN
4245 pa_debug.g_err_stage := 'Auto baseline API falied';
4246 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
4247 END IF;
4248 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4249 END IF;
4250
4251
4252 IF l_result = 'F' THEN
4253 IF(l_debug_mode='Y') THEN
4254 pa_debug.g_err_stage := 'Auto baseline checks falied';
4255 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
4256 END IF;
4257 l_any_error_occurred_flag:='Y';
4258 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4259 ,p_msg_name => 'PA_FP_APP_REV_BL_VER_AB_PROJ'
4260 ,p_token1 => 'PROJECT'
4261 ,p_value1 => l_amg_segment1);
4262
4263 END IF;
4264 END IF; -- bug 3099706
4265
4266 IF (nvl(PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB,'N') = 'Y') THEN
4267 PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB := 'N'; -- reset the value bug 3099706
4268 END IF;
4269 -- dbms_output.put_line('Got the CW version ' || l_curr_working_version_id);
4270
4271
4272 -- check for budget lines in pa_resource_assignments,
4273 -- we only permit submit/baseline action when there are budget lines
4274 -- Fix for bug#8423481, for new budget we will check for budget lines in pa_resource_assignments,
4275 -- and for old model budget we will check for budget lines in pa_budget_lines
4276 -- we only permit submit/baseline action when there are budget lines
4277 IF( p_budget_type_code IS NOT NULL
4278 AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
4279
4280 OPEN l_budget_lines_csr(l_curr_working_version_id);
4281
4282 FETCH l_budget_lines_csr INTO l_row_found;
4283
4284 IF l_budget_lines_csr%NOTFOUND
4285 THEN
4286 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4287 THEN
4288 pa_interface_utils_pub.map_new_amg_msg
4289 ( p_old_message_code => 'PA_NO_BUDGET_LINES'
4290 ,p_msg_attribute => 'CHANGE'
4291 ,p_resize_flag => 'N'
4292 ,p_msg_context => 'BUDG'
4293 ,p_attribute1 => l_amg_segment1
4294 ,p_attribute2 => ''
4295 ,p_attribute3 => p_budget_type_code
4296 ,p_attribute4 => ''
4297 ,p_attribute5 => '');
4298 END IF;
4299
4300 CLOSE l_budget_lines_csr;
4301 l_any_error_occurred_flag := 'Y';
4302 IF l_debug_mode = 'Y' THEN
4303 pa_debug.g_err_stage := 'Budget Lines do not exist for current working version' ;
4304 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4305 END IF;
4306 ELSE
4307 CLOSE l_budget_lines_csr;
4308
4309 END IF;
4310 ELSE
4311 OPEN l_resource_assignments_csr(l_curr_working_version_id);
4312
4313 FETCH l_resource_assignments_csr INTO l_row_found;
4314
4315 IF l_resource_assignments_csr%NOTFOUND THEN
4316
4317 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4318 pa_interface_utils_pub.map_new_amg_msg
4319 ( p_old_message_code => 'PA_NO_BUDGET_LINES'
4320 ,p_msg_attribute => 'CHANGE'
4321 ,p_resize_flag => 'N'
4322 ,p_msg_context => 'BUDG'
4323 ,p_attribute1 => l_amg_segment1
4324 ,p_attribute2 => ''
4325 ,p_attribute3 => p_budget_type_code
4326 ,p_attribute4 => ''
4327 ,p_attribute5 => '');
4328 END IF;
4329
4330 CLOSE l_resource_assignments_csr;
4331 l_any_error_occurred_flag := 'Y';
4332 IF l_debug_mode = 'Y' THEN
4333 pa_debug.g_err_stage := 'Budget Lines do not exist for current working version' ;
4334 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4335 END IF;
4336 ELSE
4337 CLOSE l_resource_assignments_csr;
4338
4339 END IF;
4340
4341 END IF;
4342
4343
4344
4345 -- dbms_output.put_line('done with BL Check');
4346
4347 -- verify budget (up to this date (sept 96) not implemented)
4348 --
4349 pa_budget_core.verify( x_budget_version_id => l_curr_working_version_id
4350 ,x_err_code => l_err_code
4351 ,x_err_stage => l_err_stage
4352 ,x_err_stack => l_err_stack );
4353
4354 IF l_err_code > 0
4355 THEN
4356
4357 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4358 THEN
4359
4360 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
4361 THEN
4362 pa_interface_utils_pub.map_new_amg_msg
4363 ( p_old_message_code => 'PA_VERIFY_FAILED'
4364 ,p_msg_attribute => 'CHANGE'
4365 ,p_resize_flag => 'N'
4366 ,p_msg_context => 'BUDG'
4367 ,p_attribute1 => l_amg_segment1
4368 ,p_attribute2 => ''
4369 ,p_attribute3 => p_budget_type_code
4370 ,p_attribute4 => ''
4371 ,p_attribute5 => '');
4372 ELSE
4373 pa_interface_utils_pub.map_new_amg_msg
4374 ( p_old_message_code => l_err_stage
4375 ,p_msg_attribute => 'CHANGE'
4376 ,p_resize_flag => 'N'
4377 ,p_msg_context => 'BUDG'
4378 ,p_attribute1 => l_amg_segment1
4379 ,p_attribute2 => ''
4380 ,p_attribute3 => p_budget_type_code
4381 ,p_attribute4 => ''
4382 ,p_attribute5 => '');
4383 END IF;
4384
4385 END IF;
4386
4387 -- RAISE FND_API.G_EXC_ERROR;
4388 l_any_error_occurred_flag := 'Y';
4389
4390 ELSIF l_err_code < 0
4391 THEN
4392
4393 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4394 THEN
4395
4396 FND_MSG_PUB.add_exc_msg
4397 ( p_pkg_name => 'PA_BUDGET_CORE'
4398 , p_procedure_name => 'VERIFY'
4399 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
4400
4401 END IF;
4402
4403 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4404
4405 END IF;
4406 -- dbms_output.put_line('About to verify budget rules');
4407
4408 --Verify Budget Rules should be called in budget model Only. In FinPlan model
4409 --The baseline api in fin plan pub inturn calls the verify budget rules
4410 IF p_budget_type_code IS NOT NULL
4411 AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
4412
4413 IF l_debug_mode = 'Y' THEN
4414 pa_debug.g_err_stage := 'About to verify the budget rules in budget model' ;
4415 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4416 END IF;
4417
4418
4419 -- ------------------------------------------------------------------------------------
4420 -- 29-JUL-97, jwhite
4421 -- Added SUBMISSION/BASELINE RULES and WORFLOW
4422 -- ------------------------------------------------------------------------------------
4423
4424 -- Retrieve Required IN-parameters for Verify_Budget_Rules Calls
4425
4426 OPEN l_budget_rules_csr(l_curr_working_version_id);
4427
4428 FETCH l_budget_rules_csr
4429 INTO l_resource_list_id
4430 , l_project_type_class_code;
4431
4432 IF ( l_budget_rules_csr%NOTFOUND)
4433 THEN
4434
4435 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4436 THEN
4437 pa_interface_utils_pub.map_new_amg_msg
4438 ( p_old_message_code => 'PA_NO_BUDGET_RULES_ATTR'
4439 ,p_msg_attribute => 'CHANGE'
4440 ,p_resize_flag => 'N'
4441 ,p_msg_context => 'BUDG'
4442 ,p_attribute1 => l_amg_segment1
4443 ,p_attribute2 => ''
4444 ,p_attribute3 => p_budget_type_code
4445 ,p_attribute4 => ''
4446 ,p_attribute5 => '');
4447 END IF;
4448
4449 CLOSE l_budget_rules_csr;
4450 -- RAISE FND_API.G_EXC_ERROR;
4451 l_any_error_occurred_flag := 'Y';
4452
4453 ELSE
4454
4455 CLOSE l_budget_rules_csr;
4456
4457 END IF;
4458
4459
4460 --
4461 -- SUBMISSION RULES -------------------------------------------------------------
4462 --
4463
4464 /* -- dbms_output.put_line('Verify Budget Rules - SUBMIT'); */
4465
4466
4467 PA_BUDGET_UTILS.VERIFY_BUDGET_RULES
4468 (p_draft_version_id => l_curr_working_version_id
4469 , p_mark_as_original => l_mark_as_original
4470 , p_event => 'SUBMIT'
4471 , p_project_id => l_project_id
4472 , p_budget_type_code => p_budget_type_code
4473 , p_resource_list_id => l_resource_list_id
4474 , p_project_type_class_code => l_project_type_class_code
4475 , p_created_by => l_user_id
4476 , p_calling_module => 'PAPMBUPB'
4477 , p_warnings_only_flag => l_warnings_only_flag
4478 , p_err_msg_count => l_err_msg_count
4479 , p_err_code => l_err_code
4480 , p_err_stage => l_err_stage
4481 , p_err_stack => l_err_stack
4482 );
4483
4484 -- 11-SEP-97, jwhite: Warnings-OK Concept -----------------------------------
4485 --
4486 IF (l_err_msg_count > 0)
4487 THEN
4488 IF (l_warnings_only_flag = 'Y')
4489 THEN
4490 p_return_status := 'W';
4491 ELSE
4492 -- RAISE FND_API.G_EXC_ERROR;
4493 l_any_error_occurred_flag := 'Y';
4494 END IF;
4495 -- dbms_output.put_line('Count after verify the baseline rules is >0');
4496
4497 END IF;
4498 --
4499
4500 -- LOCK DRAFT BUDGET VERSION Since Primary Verification Finished
4501
4502 OPEN l_lock_budget_csr(l_curr_working_version_id);
4503 CLOSE l_lock_budget_csr;
4504
4505 -- dbms_output.put_line('About to verify the baseline rules');
4506 --
4507 -- BASELINE RULES -------------------------------------------------------------
4508 --
4509
4510 PA_BUDGET_UTILS.VERIFY_BUDGET_RULES
4511 (p_draft_version_id => l_curr_working_version_id
4512 , p_mark_as_original => l_mark_as_original
4513 , p_event => 'BASELINE'
4514 , p_project_id => l_project_id
4515 , p_budget_type_code => p_budget_type_code
4516 , p_resource_list_id => l_resource_list_id
4517 , p_project_type_class_code => l_project_type_class_code
4518 , p_created_by => l_user_id
4519 , p_calling_module => 'PAPMBUPB'
4520 , p_warnings_only_flag => l_warnings_only_flag
4521 , p_err_msg_count => l_err_msg_count
4522 , p_err_code => l_err_code
4523 , p_err_stage => l_err_stage
4524 , p_err_stack => l_err_stack
4525 );
4526
4527 -- 11-SEP-97, jwhite: Warnings-OK Concept -----------------------------------
4528 --
4529 IF (l_err_msg_count > 0)
4530 THEN
4531 IF (l_warnings_only_flag = 'Y')
4532 THEN
4533 p_return_status := 'W';
4534 ELSE
4535 -- RAISE FND_API.G_EXC_ERROR;
4536 l_any_error_occurred_flag := 'Y';
4537 END IF;
4538 END IF;
4539
4540 ELSE -- Verify budget rules will be called by the baseline api in fin plan model.
4541 -- Lock the version in the finplan model
4542
4543 --Get the record version number of the current working version
4544 l_CW_record_version_number :=pa_fin_plan_utils.Retrieve_Record_Version_Number(l_curr_working_version_id);
4545
4546 -- Lock the current working version
4547
4548 pa_fin_plan_pvt.lock_unlock_version
4549 (p_budget_version_id => l_curr_working_version_id,
4550 p_record_version_number => l_CW_record_version_number,
4551 p_action => 'L',
4552 p_user_id => l_user_id,
4553 p_person_id => NULL,
4554 x_return_status => p_return_status,
4555 x_msg_count => p_msg_count,
4556 x_msg_data => p_msg_data) ;
4557
4558 IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
4559
4560 IF l_debug_mode = 'Y' THEN
4561 pa_debug.g_err_stage := 'Error executing lock unlock version';
4562 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4563 END IF;
4564 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4565
4566 END IF;
4567 -- dbms_output.put_line('The no of messages in the stack 2 '||FND_MSG_PUB.count_msg);
4568
4569 END IF;--If for buget model check
4570
4571 -- dbms_output.put_line('Starting with workflow l_err_code '||l_err_code);
4572 --
4573
4574 --
4575 -- ENABLE WORKFLOW? ---------------------------------------------------
4576 --
4577
4578 /* -- dbms_output.put_line('Call BUDGET_WF_IS_USED'); */
4579
4580 IF p_budget_type_code IS NOT NULL
4581 AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4582 THEN
4583
4584 PA_BUDGET_WF.Budget_Wf_Is_Used
4585 ( p_draft_version_id => l_curr_working_version_id
4586 , p_project_id => l_project_id
4587 , p_budget_type_code => p_budget_type_code
4588 , p_pm_product_code => p_pm_product_code
4589 , p_result => l_workflow_is_used
4590 , p_err_code => l_err_code
4591 , p_err_stage => l_err_stage
4592 , p_err_stack => l_err_stack
4593 );
4594
4595 ELSE --Fin Plan Model. Pass the version type and plan type id
4596
4597 PA_BUDGET_WF.Budget_Wf_Is_Used
4598 ( p_draft_version_id => l_curr_working_version_id
4599 , p_project_id => l_project_id
4600 , p_budget_type_code => NULL
4601 , p_pm_product_code => p_pm_product_code
4602 , p_result => l_workflow_is_used
4603 , p_err_code => l_err_code
4604 , p_err_stage => l_err_stage
4605 , p_err_stack => l_err_stack
4606 , p_fin_plan_type_id => l_fin_plan_type_id
4607 , p_version_type => l_version_type
4608 );
4609
4610 END IF;
4611
4612 -- dbms_output.put_line('l_err_code after is WD '||l_err_code);
4613 IF (l_err_code > 0)
4614 THEN
4615 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4616 THEN
4617 FND_MESSAGE.SET_NAME('PA','PA_WF_CLIENT_EXTN');
4618 FND_MESSAGE.SET_TOKEN('EXTNAME', 'PA_BUDGET_WF.BUDGET_WF_IS_USED');
4619 FND_MESSAGE.SET_TOKEN('ERRCODE',l_err_code);
4620 FND_MESSAGE.SET_TOKEN('ERRMSG', l_err_stage);
4621 FND_MSG_PUB.add;
4622 END IF;
4623
4624 -- RAISE FND_API.G_EXC_ERROR;
4625 l_any_error_occurred_flag := 'Y';
4626 ELSIF (l_err_code < 0)
4627 THEN
4628 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4629 THEN
4630 FND_MSG_PUB.add_exc_msg
4631 ( p_pkg_name => 'PA_BUDGET_WF'
4632 , p_procedure_name => 'BUDGET_WF_IS_USED'
4633 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
4634 END IF;
4635
4636 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4637 END IF;
4638
4639 -- Stop further processing if any errors are reported
4640 -- dbms_output.put_line('l_any_error_occurred_flag is '||l_any_error_occurred_flag);
4641 IF(l_any_error_occurred_flag='Y') THEN
4642 IF(l_debug_mode='Y') THEN
4643 pa_debug.g_err_stage := 'About to display all the messages';
4644 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
4645 END IF;
4646 -- dbms_output.put_line('Displaying all messages');
4647 l_return_status := FND_API.G_RET_STS_ERROR;
4648 l_any_error_occurred_flag := 'Y';
4649 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4650 END IF;
4651 -- dbms_output.put_line('Starting with workflow = T');
4652
4653 IF (l_workflow_is_used = 'T' ) THEN
4654
4655 -- ENABLE Workflow !!! -------------------------------------------------------------
4656
4657 -- when the client extension returns 'T',
4658 -- the baseline action will be skipped here, since the baselining is done later
4659 -- by the baseliner as part of the workflow process.
4660
4661 /* -- dbms_output.put_line('WORKFLOW USED...Update Draft to Submitted, IN_ROUTE'); */
4662
4663 UPDATE pa_budget_versions
4664 SET budget_status_code = 'S', WF_status_code = 'IN_ROUTE'
4665 WHERE budget_version_id = l_curr_working_version_id;
4666
4667 /* -- dbms_output.put_line('WORKFLOW USED...START_BUDGET_WF API'); */
4668
4669 PA_BUDGET_WF.Start_Budget_Wf
4670 (p_draft_version_id => l_curr_working_version_id
4671 , p_project_id => l_project_id
4672 , p_budget_type_code => p_budget_type_code
4673 , p_mark_as_original => l_mark_as_original
4674 , p_err_code => l_err_code
4675 , p_err_stage => l_err_stage
4676 , p_err_stack => l_err_stack
4677 );
4678
4679 IF (l_err_code > 0)
4680 THEN
4681 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4682 THEN
4683 FND_MESSAGE.SET_NAME('PA','PA_WF_CLIENT_EXTN');
4684 FND_MESSAGE.SET_TOKEN('EXTNAME', 'PA_BUDGET_WF.START_BUDGET_WF');
4685 FND_MESSAGE.SET_TOKEN('ERRCODE',l_err_code);
4686 FND_MESSAGE.SET_TOKEN('ERRMSG', l_err_stage);
4687 FND_MSG_PUB.add;
4688 END IF;
4689
4690 RAISE FND_API.G_EXC_ERROR;
4691
4692 ELSIF (l_err_code < 0)
4693 THEN
4694 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4695 THEN
4696 FND_MSG_PUB.add_exc_msg
4697 ( p_pkg_name => 'PA_BUDGET_WF'
4698 , p_procedure_name => 'START_BUDGET_WF'
4699 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
4700 END IF;
4701
4702 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4703 END IF;
4704
4705
4706
4707 p_workflow_started := 'Y';
4708
4709 -- NOTE: A commit is required to actually start/activate the workflow instance opened
4710 -- by the previous Start_Budget_WF procedure.
4711
4712
4713 IF FND_API.TO_BOOLEAN( p_commit )
4714 THEN
4715 COMMIT;
4716 END IF;
4717
4718 RETURN;
4719 ELSE
4720
4721 -- STRAIGHT BASELINE, NO Workflow
4722
4723
4724 UPDATE pa_budget_versions
4725 SET budget_status_code = 'S', WF_status_code = NULL
4726 WHERE budget_version_id = l_curr_working_version_id;
4727
4728
4729 END IF;
4730
4731 IF l_debug_mode = 'Y' THEN
4732 pa_debug.g_err_stage := 'Budget rules verified' ;
4733 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4734 END IF;
4735
4736 -- -------------------------------------------------------------------------------------
4737
4738 -- calling private API 'BASELINE'
4739 -- Hardcode p_verify_budget_rules to 'N' becuase verify_budget_rules already called.
4740
4741 /* -- dbms_output.put_line('Call PA_BUDGET_CORE.BASELINE'); */
4742
4743
4744
4745
4746 IF p_budget_type_code IS NOT NULL
4747 AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
4748
4749 IF l_debug_mode = 'Y' THEN
4750 pa_debug.g_err_stage := 'About to baseline the budget ' ;
4751 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4752 END IF;
4753
4754 -- dbms_output.put_line('About to call the baseline api in budget core');
4755 pa_budget_core.baseline ( x_draft_version_id => l_curr_working_version_id
4756 ,x_mark_as_original => l_mark_as_original
4757 ,x_verify_budget_rules => 'N'
4758 ,x_err_code => l_err_code
4759 ,x_err_stage => l_err_stage
4760 ,x_err_stack => l_err_stack );
4761
4762
4763
4764 IF l_err_code > 0
4765 THEN
4766
4767 /* -- dbms_output.put_line('Err_code: '||l_err_code); */
4768 /* -- dbms_output.put_line('Err_stage: '||l_err_stage); */
4769 /* -- dbms_output.put_line('Err_stack: '||l_err_stack); */
4770
4771 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4772 THEN
4773
4774 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
4775 THEN
4776 pa_interface_utils_pub.map_new_amg_msg
4777 ( p_old_message_code => 'PA_BASELINE_FAILED'
4778 ,p_msg_attribute => 'CHANGE'
4779 ,p_resize_flag => 'N'
4780 ,p_msg_context => 'BUDG'
4781 ,p_attribute1 => l_amg_segment1
4782 ,p_attribute2 => ''
4783 ,p_attribute3 => p_budget_type_code
4784 ,p_attribute4 => ''
4785 ,p_attribute5 => '');
4786 ELSE
4787 pa_interface_utils_pub.map_new_amg_msg
4788 ( p_old_message_code => l_err_stage
4789 ,p_msg_attribute => 'CHANGE'
4790 ,p_resize_flag => 'N'
4791 ,p_msg_context => 'BUDG'
4792 ,p_attribute1 => l_amg_segment1
4793 ,p_attribute2 => ''
4794 ,p_attribute3 => p_budget_type_code
4795 ,p_attribute4 => ''
4796 ,p_attribute5 => '');
4797 END IF;
4798
4799 END IF;
4800
4801 RAISE FND_API.G_EXC_ERROR;
4802
4803 ELSIF l_err_code < 0
4804 THEN
4805
4806 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4807 THEN
4808
4809 /* -- dbms_output.put_line('Err_code: '||l_err_code); */
4810 /* -- dbms_output.put_line('Err_stage: '||l_err_stage); */
4811 /* -- dbms_output.put_line('Err_stack: '||l_err_stack); */
4812
4813 FND_MSG_PUB.add_exc_msg
4814 ( p_pkg_name => 'PA_BUDGET_CORE'
4815 , p_procedure_name => 'BASELINE'
4816 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
4817
4818 END IF;
4819
4820 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4821
4822 END IF;
4823
4824 -- after calling BASELINE, set the budget_status_code back to 'W' (Working)
4825 -- the concept of submitting budget is not available in the public API's!
4826
4827 UPDATE pa_budget_versions
4828 SET budget_status_code = 'W'
4829 WHERE budget_version_id = l_curr_working_version_id;
4830
4831 ELSE--Fin Plan Model. Call the baseline api in fin plan pub
4832
4833 --Get the record version number of the current baselined version
4834 IF l_baselined_version_id IS NOT NULL THEN
4835 --Get the record version number
4836 l_CB_record_version_number :=pa_fin_plan_utils.Retrieve_Record_Version_Number(l_baselined_version_id);
4837 ELSE
4838 l_CB_record_version_number:=NULL;
4839 END IF;
4840
4841 --Get the record version number of the current working version (As it will be incremented by the lock_unlock_version)
4842 l_CW_record_version_number :=pa_fin_plan_utils.Retrieve_Record_Version_Number(l_curr_working_version_id);
4843
4844 IF l_debug_mode = 'Y' THEN
4845 pa_debug.g_err_stage := 'About to baseline the finplan ' ;
4846 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4847 END IF;
4848
4849 -- dbms_output.put_line('About to call baseline api');
4850
4851 IF (l_mark_as_original = 'Y') THEN
4852
4853 -- Fetch the details of original baseline version
4854 -- so that they can be used to set its orginal flag
4855
4856 OPEN l_orig_baselined_ver_csr(l_project_id,
4857 l_fin_plan_type_id,
4858 l_version_type);
4859 FETCH l_orig_baselined_ver_csr INTO l_orig_baselined_ver_rec;
4860 CLOSE l_orig_baselined_ver_csr;
4861
4862 END IF;
4863
4864 pa_fin_plan_pub.Baseline
4865 ( p_project_id => l_project_id
4866 ,p_budget_version_id => l_curr_working_version_id
4867 ,p_record_version_number => l_CW_record_version_number
4868 ,p_orig_budget_version_id => l_baselined_version_id
4869 ,p_orig_record_version_number => l_CB_record_version_number
4870 ,x_fc_version_created_flag => l_fc_version_created_flag
4871 ,x_return_status => l_return_status
4872 ,x_msg_count => l_msg_count
4873 ,x_msg_data => l_msg_data );
4874
4875 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4876
4877 IF l_debug_mode = 'Y' THEN
4878 pa_debug.g_err_stage:= 'Error in fin plan pub baseline ';
4879 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
4880 END IF;
4881 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4882
4883 END IF;
4884
4885 -- dbms_output.put_line('About to call mark as original api');
4886
4887 --If the mark as original parameter is Y then call the api that sets the just now baselined version
4888 --as the orginal version
4889 IF (l_mark_as_original = 'Y') THEN
4890
4891 IF l_debug_mode = 'Y' THEN
4892 pa_debug.g_err_stage := 'About to mark the created version as original baselined ' ;
4893 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4894 END IF;
4895
4896 -- Fetch the details current baselined version
4897 pa_fin_plan_utils.Get_Baselined_Version_Info(
4898 p_project_id => l_project_id
4899 ,p_fin_plan_type_id => l_fin_plan_type_id
4900 ,p_version_type => l_version_type
4901 ,x_fp_options_id => l_baselined_Ver_options_id
4902 ,x_fin_plan_version_id => l_baselined_version_id
4903 ,x_return_status => l_return_status
4904 ,x_msg_count => l_msg_count
4905 ,x_msg_data => l_msg_data);
4906
4907 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
4908 THEN
4909 -- RAISE FND_API.G_EXC_ERROR;
4910 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4911 END IF;
4912
4913 l_CB_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_baselined_version_id);
4914
4915 IF l_orig_baselined_ver_rec.budget_version_id IS NOT NULL THEN
4916
4917 l_orig_baselined_ver_rec.record_version_number:=pa_fin_plan_utils.Retrieve_Record_Version_Number
4918 (l_orig_baselined_ver_rec.budget_version_id);
4919
4920 END IF;
4921
4922 -- dbms_output.put_line('The verid to be marked as orig is '||l_baselined_version_id);
4923 -- dbms_output.put_line('The orig verid to be marked as orig is '||l_orig_baselined_ver_rec.budget_version_id);
4924
4925 pa_fin_plan_pub.Mark_As_Original
4926 ( p_project_id => l_project_id
4927 ,p_budget_version_id => l_baselined_version_id
4928 ,p_record_version_number => l_Cb_record_version_number
4929 ,p_orig_budget_version_id => l_orig_baselined_ver_rec.budget_version_id
4930 ,p_orig_record_version_number => l_orig_baselined_ver_rec.record_version_number
4931 ,x_return_status => l_return_status
4932 ,x_msg_count => l_msg_count
4933 ,x_msg_data => l_msg_data );
4934
4935 IF l_return_status <> FND_API.G_RET_STS_SUCCESS OR
4936 l_msg_count <> 0THEN
4937
4938 IF l_debug_mode = 'Y' THEN
4939 pa_debug.g_err_stage:= 'Error while marking the newly created version as the original version ';
4940 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
4941 END IF;
4942 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4943
4944 END IF;
4945
4946 END IF;
4947
4948 --Bug 6453987 - skkoppul - Unlocking the working version
4949
4950 pa_fin_plan_pvt.lock_unlock_version
4951 (p_budget_version_id => l_curr_working_version_id,
4952 p_record_version_number => l_CW_record_version_number,
4953 p_action => 'U',
4954 p_user_id => l_user_id,
4955 p_person_id => NULL,
4956 x_return_status => p_return_status,
4957 x_msg_count => p_msg_count,
4958 x_msg_data => p_msg_data) ;
4959
4960 IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
4961
4962 IF l_debug_mode = 'Y' THEN
4963 pa_debug.g_err_stage := 'Error executing lock unlock version';
4964 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4965 END IF;
4966 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4967
4968 END IF;
4969
4970 --End changes bug 6453987 - skkoppul
4971
4972
4973 END IF;-- IF p_budget_type_code IS NOT NULL
4974
4975
4976 IF FND_API.TO_BOOLEAN( p_commit )
4977 THEN
4978 COMMIT;
4979 END IF;
4980
4981 IF l_debug_mode = 'Y' THEN
4982 pa_debug.g_err_stage:= 'Leaving baseline budget';
4983 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level3);
4984 END IF;
4985
4986 pa_debug.reset_curr_function;
4987
4988
4989 EXCEPTION
4990
4991 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
4992 ROLLBACK TO baseline_budget_pub;
4993
4994 IF p_return_status IS NULL OR
4995 p_return_status = FND_API.G_RET_STS_SUCCESS THEN
4996 p_return_status := FND_API.G_RET_STS_ERROR;
4997 END IF;
4998 l_msg_count := FND_MSG_PUB.count_msg;
4999 IF l_msg_count = 1 THEN
5000 PA_INTERFACE_UTILS_PUB.get_messages
5001 (p_encoded => FND_API.G_TRUE,
5002 p_msg_index => 1,
5003 p_msg_count => l_msg_count,
5004 p_msg_data => l_msg_data,
5005 p_data => l_data,
5006 p_msg_index_out => l_msg_index_out);
5007
5008 p_msg_data := l_data;
5009 p_msg_count := l_msg_count;
5010 ELSE
5011 p_msg_count := l_msg_count;
5012 END IF;
5013 pa_debug.reset_curr_function;
5014
5015 RETURN;
5016
5017 WHEN FND_API.G_EXC_ERROR
5018 THEN
5019
5020
5021 ROLLBACK TO baseline_budget_pub;
5022
5023 p_return_status := FND_API.G_RET_STS_ERROR;
5024
5025 FND_MSG_PUB.Count_And_Get
5026 ( p_count => p_msg_count ,
5027 p_data => p_msg_data );
5028
5029 pa_debug.reset_curr_function;
5030
5031 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
5032 THEN
5033
5034
5035 ROLLBACK TO baseline_budget_pub;
5036
5037 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5038
5039 FND_MSG_PUB.Count_And_Get
5040 ( p_count => p_msg_count ,
5041 p_data => p_msg_data );
5042
5043 pa_debug.reset_curr_function;
5044
5045 WHEN ROW_ALREADY_LOCKED
5046 THEN
5047
5048 ROLLBACK TO baseline_budget_pub;
5049
5050 p_return_status := FND_API.G_RET_STS_ERROR ;
5051
5052 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5053 THEN
5054 FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
5055 FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
5056 FND_MESSAGE.SET_TOKEN('TASK', '');
5057 FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', p_budget_type_code);
5058 FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
5059 FND_MESSAGE.SET_TOKEN('START_DATE', '');
5060 FND_MESSAGE.SET_TOKEN('ENTITY', 'BUDGET_VERSIONS');
5061 FND_MSG_PUB.Add;
5062 END IF;
5063
5064 FND_MSG_PUB.Count_And_Get
5065 (p_count => p_msg_count
5066 , p_data => p_msg_data
5067 );
5068 pa_debug.reset_curr_function;
5069
5070
5071 WHEN OTHERS
5072 THEN
5073
5074
5075 ROLLBACK TO baseline_budget_pub;
5076
5077 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5078
5079 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5080 THEN
5081 FND_MSG_PUB.add_exc_msg
5082 ( p_pkg_name => G_PKG_NAME
5083 , p_procedure_name => l_api_name );
5084
5085 END IF;
5086
5087 FND_MSG_PUB.Count_And_Get
5088 ( p_count => p_msg_count ,
5089 p_data => p_msg_data );
5090
5091 pa_debug.reset_curr_function;
5092
5093
5094 END baseline_budget;
5095
5096
5097 ----------------------------------------------------------------------------------------
5098 --Name: add_budget_line
5099 --Type: Procedure
5100 --Description: This procedure can be used to add a budgetline to an
5101 -- existing WORKING budget.
5102 --
5103 --Called subprograms:
5104 -- pa_budget_pvt.insert_budget_line
5105 -- pa_budget_lines_v_pkg.check_overlapping_dates
5106 -- PA_BUDGET_UTILS.summerize_project_totals
5107 --
5108 --
5109 --
5110 --History:
5111 -- 01-OCT-1996 L. de Werker Created
5112 -- 19-NOV-1996 L. de Werker Changed to use pa_budget_pvt.insert_budget_line
5113 -- 28-NOV-1996 L. de Werker Add 16 parameters for descriptive flexfields
5114 -- 26-APR-2005 Ritesh Shukla Bug 4224464: FP.M Changes - Did changes in
5115 -- add_budget_line for FP.M FinPlan model.
5116
5117 PROCEDURE Add_Budget_Line
5118 ( p_api_version_number IN NUMBER
5119 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
5120 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
5121 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5122 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5123 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5124 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5125 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5126 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5127 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5128 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5129 ,p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5130 ,p_resource_alias IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5131 ,p_resource_list_member_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5132 --Bug 16604257 : CBS RBS Phase 2 API changes
5133 ,p_cost_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5134 ,p_cbs_element_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5135 --Bug 16604257
5136 ,p_budget_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5137 ,p_budget_end_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5138 ,p_period_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5139 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5140 ,p_raw_cost IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5141 ,p_burdened_cost IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5142 ,p_revenue IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5143 ,p_quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5144 ,p_pm_budget_line_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5145 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5146 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5147 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5148 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5149 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5150 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5151 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5152 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5153 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5154 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5155 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5156 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5157 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5158 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5159 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5160 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5161 --Parameters added for FP.M
5162 ,p_fin_plan_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5163 ,p_fin_plan_type_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5164 ,p_version_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5165 ,p_version_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5166 ,p_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5167 ,p_change_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
5168
5169 IS
5170
5171
5172 l_api_name CONSTANT VARCHAR2(30) := 'Add_Budget_Line';
5173 l_err_code NUMBER;
5174 l_err_stage VARCHAR2(120);
5175 l_err_stack VARCHAR2(630);
5176
5177 l_project_id NUMBER := p_pa_project_id;
5178 l_budget_type_code pa_budget_types.budget_type_code%TYPE := p_budget_type_code;
5179 l_fin_plan_type_id NUMBER := p_fin_plan_type_id;
5180 l_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE := p_fin_plan_type_name;
5181 l_version_type pa_budget_versions.version_type%TYPE := p_version_type;
5182 l_budget_version_id NUMBER;
5183 l_budget_entry_method_code pa_budget_entry_methods.budget_entry_method_code%TYPE;
5184 l_resource_list_id pa_resource_lists_all_bg.resource_list_id%TYPE;
5185 l_budget_amount_code pa_budget_types.budget_amount_code%type;
5186 l_entry_level_code pa_proj_fp_options.cost_fin_plan_level_code%TYPE;
5187 l_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE;
5188 l_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
5189 l_categorization_code pa_budget_entry_methods.categorization_code%TYPE;
5190 l_record_version_number pa_budget_versions.record_version_number%TYPE;
5191
5192 l_resource_name VARCHAR2(80); --bug 3711693
5193
5194 l_budget_lines_in budget_line_in_tbl_type;
5195 l_budget_lines_out_tbl budget_line_out_tbl_type;
5196 l_mfc_cost_type_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5197 l_etc_method_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
5198 l_spread_curve_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5199
5200 l_finplan_lines_tab pa_fin_plan_pvt.budget_lines_tab;
5201 l_version_info_rec pa_fp_gen_amount_utils.fp_cols;
5202
5203 --Following parameters are needed for amounts check
5204 l_amount_set_id pa_proj_fp_options.all_amount_set_id%TYPE;
5205 lx_raw_cost_flag VARCHAR2(1) := NULL;
5206 lx_burdened_cost_flag VARCHAR2(1) := NULL;
5207 lx_revenue_flag VARCHAR2(1) := NULL;
5208 lx_cost_qty_flag VARCHAR2(1) := NULL;
5209 lx_revenue_qty_flag VARCHAR2(1) := NULL;
5210 lx_all_qty_flag VARCHAR2(1) := NULL;
5211 l_bill_rate_flag pa_fin_plan_amount_sets.bill_rate_flag%type;
5212 l_cost_rate_flag pa_fin_plan_amount_sets.cost_rate_flag%type;
5213 l_burden_rate_flag pa_fin_plan_amount_sets.burden_rate_flag%type;
5214 l_allow_qty_flag VARCHAR2(1);
5215
5216 l_msg_count NUMBER := 0;
5217 l_msg_data VARCHAR2(2000);
5218 l_function_allowed VARCHAR2(1);
5219 l_module_name VARCHAR2(80);
5220 l_data VARCHAR2(2000);
5221 l_msg_index_out NUMBER;
5222
5223 l_amg_project_number pa_projects_all.segment1%TYPE;
5224 l_amg_task_number VARCHAR2(50);
5225
5226 --debug variables
5227 l_debug_mode VARCHAR2(1);
5228 l_debug_level2 CONSTANT NUMBER := 2;
5229 l_debug_level3 CONSTANT NUMBER := 3;
5230 l_debug_level4 CONSTANT NUMBER := 4;
5231 l_debug_level5 CONSTANT NUMBER := 5;
5232 --Added for bug 6408139 to pass G_PA_MISS_CHAR
5233 l_pa_miss_char varchar2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
5234
5235
5236 l_cbs_enabled_project varchar2(1) :='N'; -- Added for CBS 16604257
5237 lc_cbs_element_id NUMBER :=p_cbs_element_id;
5238
5239
5240 BEGIN
5241
5242
5243 --Standard begin of API savepoint
5244
5245 SAVEPOINT add_budget_line_pub;
5246
5247 p_msg_count := 0;
5248 p_return_status := FND_API.G_RET_STS_SUCCESS;
5249 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
5250 l_module_name := g_module_name || ':Add_Budget_Line';
5251
5252 IF ( l_debug_mode = 'Y' )
5253 THEN
5254 pa_debug.set_curr_function( p_function => 'Add_Budget_Line',
5255 p_debug_mode => l_debug_mode );
5256 END IF;
5257
5258 IF ( l_debug_mode = 'Y' )
5259 THEN
5260 pa_debug.g_err_stage:='Entering ' || l_api_name;
5261 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5262 END IF;
5263
5264 --Initialize the message table if requested.
5265 IF FND_API.TO_BOOLEAN( p_init_msg_list )
5266 THEN
5267 FND_MSG_PUB.initialize;
5268 END IF;
5269
5270 --Set API return status to success
5271 p_return_status := FND_API.G_RET_STS_SUCCESS;
5272
5273 --Get the CBS flag 16604257
5274 l_cbs_enabled_project := PA_ALTERNATE_TASK_PVT.Is_Cbs_Enabled(p_Project_Id => l_project_id);
5275 If l_cbs_enabled_project='N' Then
5276 lc_cbs_element_id :=null;
5277 else
5278
5279 IF lc_cbs_element_id is not null AND lc_cbs_element_id<>PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5280 lc_cbs_element_id :=PA_ALTERNATE_TASK_PVT.convert_cost_code_to_id(
5281 p_cost_code,l_project_id );
5282 END IF;
5283 End if;
5284
5285
5286 --Call PA_BUDGET_PVT.validate_header_info to do the necessary
5287 --header level validations
5288 PA_BUDGET_PVT.validate_header_info
5289 ( p_api_version_number => p_api_version_number
5290 ,p_api_name => l_api_name
5291 ,p_init_msg_list => p_init_msg_list
5292 ,px_pa_project_id => l_project_id
5293 ,p_pm_project_reference => p_pm_project_reference
5294 ,p_pm_product_code => p_pm_product_code
5295 ,px_budget_type_code => l_budget_type_code
5296 ,px_fin_plan_type_id => l_fin_plan_type_id
5297 ,px_fin_plan_type_name => l_fin_plan_type_name
5298 ,px_version_type => l_version_type
5299 ,p_budget_version_number => p_version_number
5300 ,p_change_reason_code => NULL
5301 ,p_function_name => 'PA_PM_ADD_BUDGET_LINE'
5302 ,x_budget_entry_method_code => l_budget_entry_method_code
5303 ,x_resource_list_id => l_resource_list_id
5304 ,x_budget_version_id => l_budget_version_id
5305 ,x_fin_plan_level_code => l_entry_level_code
5306 ,x_time_phased_code => l_time_phased_code
5307 ,x_plan_in_multi_curr_flag => l_multi_curr_flag
5308 ,x_budget_amount_code => l_budget_amount_code
5309 ,x_categorization_code => l_categorization_code
5310 ,x_project_number => l_amg_project_number
5311 /* Plan Amount Entry flags introduced by bug 6408139 */
5312 /*Passing all as G_PA_MISS_CHAR since validations not required*/
5313 ,px_raw_cost_flag => l_pa_miss_char
5314 ,px_burdened_cost_flag => l_pa_miss_char
5315 ,px_revenue_flag => l_pa_miss_char
5316 ,px_cost_qty_flag => l_pa_miss_char
5317 ,px_revenue_qty_flag => l_pa_miss_char
5318 ,px_all_qty_flag => l_pa_miss_char
5319 ,px_bill_rate_flag => l_pa_miss_char
5320 ,px_cost_rate_flag => l_pa_miss_char
5321 ,px_burden_rate_flag => l_pa_miss_char
5322 /* Plan Amount Entry flags introduced by bug 6408139 */
5323 ,x_msg_count => p_msg_count
5324 ,x_msg_data => p_msg_data
5325 ,x_return_status => p_return_status );
5326
5327 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5328 IF(l_debug_mode='Y') THEN
5329 pa_debug.g_err_stage := 'validate header info API falied';
5330 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5331 END IF;
5332 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5333 END IF;
5334
5335
5336 --Get Task number for AMG Messages
5337
5338 IF p_pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5339 l_budget_lines_in(1).pa_task_id := NULL;
5340 ELSE
5341 l_budget_lines_in(1).pa_task_id := p_pa_task_id;
5342 END IF;
5343
5344 IF p_pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5345 l_budget_lines_in(1).pm_task_reference := NULL;
5346 ELSE
5347 l_budget_lines_in(1).pm_task_reference := p_pm_task_reference;
5348 END IF;
5349
5350 l_amg_task_number := PA_INTERFACE_UTILS_PUB.get_task_number_amg
5351 (p_task_number=> ''
5352 ,p_task_reference => l_budget_lines_in(1).pm_task_reference
5353 ,p_task_id => l_budget_lines_in(1).pa_task_id);
5354
5355
5356 --Insert budget line for old FORMS based Budgets Model
5357 IF l_budget_type_code IS NOT NULL
5358 THEN
5359 -- CBS is not supported for Form based budgets 16604257
5360 IF l_cbs_enabled_project = 'Y' THEN
5361
5362 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
5363 ,p_msg_name => 'PA_FP_CBS_ENABLED'
5364 );
5365 p_return_status := FND_API.G_RET_STS_ERROR;
5366 RAISE FND_API.G_EXC_ERROR;
5367
5368 END IF;
5369
5370 --Insert BUDGET LINES
5371 PA_BUDGET_PVT.insert_budget_line
5372 ( p_return_status => p_return_status
5373 ,p_pa_project_id => l_project_id
5374 ,p_budget_type_code => l_budget_type_code
5375 ,p_pa_task_id => p_pa_task_id
5376 ,p_pm_task_reference => p_pm_task_reference
5377 ,p_resource_alias => p_resource_alias
5378 ,p_member_id => p_resource_list_member_id
5379 ,p_budget_start_date => p_budget_start_date
5380 ,p_budget_end_date => p_budget_end_date
5381 ,p_period_name => p_period_name
5382 ,p_description => p_description
5383 ,p_raw_cost => p_raw_cost
5384 ,p_burdened_cost => p_burdened_cost
5385 ,p_revenue => p_revenue
5386 ,p_quantity => p_quantity
5387 ,p_pm_product_code => p_pm_product_code
5388 ,p_pm_budget_line_reference => p_pm_budget_line_reference
5389 ,p_resource_list_id => l_resource_list_id
5390 ,p_attribute_category => p_attribute_category
5391 ,p_attribute1 => p_attribute1
5392 ,p_attribute2 => p_attribute2
5393 ,p_attribute3 => p_attribute3
5394 ,p_attribute4 => p_attribute4
5395 ,p_attribute5 => p_attribute5
5396 ,p_attribute6 => p_attribute6
5397 ,p_attribute7 => p_attribute7
5398 ,p_attribute8 => p_attribute8
5399 ,p_attribute9 => p_attribute9
5400 ,p_attribute10 => p_attribute10
5401 ,p_attribute11 => p_attribute11
5402 ,p_attribute12 => p_attribute12
5403 ,p_attribute13 => p_attribute13
5404 ,p_attribute14 => p_attribute14
5405 ,p_attribute15 => p_attribute15
5406 ,p_time_phased_type_code => l_time_phased_code
5407 ,p_entry_level_code => l_entry_level_code
5408 ,p_budget_amount_code => l_budget_amount_code
5409 ,p_budget_entry_method_code => l_budget_entry_method_code
5410 ,p_categorization_code => l_categorization_code
5411 ,p_budget_version_id => l_budget_version_id
5412 ,p_change_reason_code => p_change_reason_code);
5413
5414 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5415 THEN
5416 IF(l_debug_mode='Y') THEN
5417 pa_debug.g_err_stage := 'PA_BUDGET_PVT.insert_budget_line API falied - unexpected error';
5418 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5419 END IF;
5420 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5421
5422 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
5423 THEN
5424 IF(l_debug_mode='Y') THEN
5425 pa_debug.g_err_stage := 'PA_BUDGET_PVT.insert_budget_line API falied - expected error';
5426 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5427 END IF;
5428 RAISE FND_API.G_EXC_ERROR;
5429 END IF;
5430
5431
5432 --check for overlapping dates
5433 PA_BUDGET_LINES_V_PKG.check_overlapping_dates
5434 ( x_budget_version_id => l_budget_version_id --IN
5435 ,x_resource_name => l_resource_name --OUT
5436 ,x_err_code => l_err_code );
5437
5438 IF l_err_code > 0
5439 THEN
5440
5441 IF(l_debug_mode='Y') THEN
5442 pa_debug.g_err_stage := 'check_overlapping_dates API falied';
5443 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5444 END IF;
5445
5446 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5447 THEN
5448 FND_MESSAGE.SET_NAME('PA','PA_CHECK_DATES_FAILED');
5449 FND_MESSAGE.SET_TOKEN('Rname',l_resource_name);
5450
5451 FND_MSG_PUB.add;
5452 END IF;
5453
5454 RAISE FND_API.G_EXC_ERROR;
5455
5456 ELSIF l_err_code < 0
5457 THEN
5458
5459 IF(l_debug_mode='Y') THEN
5460 pa_debug.g_err_stage := 'check_overlapping_dates API falied';
5461 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5462 END IF;
5463
5464 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5465 THEN
5466 FND_MSG_PUB.add_exc_msg
5467 ( p_pkg_name => 'PA_BUDGET_LINES_V_PKG'
5468 , p_procedure_name => 'CHECK_OVERLAPPING_DATES'
5469 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
5470 END IF;
5471
5472 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5473
5474 END IF;
5475
5476
5477 --summarizing the totals in the table pa_budget_versions
5478 PA_BUDGET_UTILS.summerize_project_totals
5479 ( x_budget_version_id => l_budget_version_id
5480 , x_err_code => l_err_code
5481 , x_err_stage => l_err_stage
5482 , x_err_stack => l_err_stack );
5483
5484 IF l_err_code > 0 THEN
5485
5486 IF(l_debug_mode='Y') THEN
5487 pa_debug.g_err_stage := 'summerize_project_totals API falied';
5488 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5489 END IF;
5490
5491 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5492 THEN
5493 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
5494 THEN
5495 pa_interface_utils_pub.map_new_amg_msg
5496 ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
5497 ,p_msg_attribute => 'CHANGE'
5498 ,p_resize_flag => 'N'
5499 ,p_msg_context => 'BUDG'
5500 ,p_attribute1 => l_amg_project_number
5501 ,p_attribute2 => l_amg_task_number
5502 ,p_attribute3 => p_budget_type_code
5503 ,p_attribute4 => l_resource_name
5504 ,p_attribute5 => to_char(p_budget_start_date));
5505 ELSE
5506 pa_interface_utils_pub.map_new_amg_msg
5507 ( p_old_message_code => l_err_stage
5508 ,p_msg_attribute => 'CHANGE'
5509 ,p_resize_flag => 'N'
5510 ,p_msg_context => 'BUDG'
5511 ,p_attribute1 => l_amg_project_number
5512 ,p_attribute2 => l_amg_task_number
5513 ,p_attribute3 => p_budget_type_code
5514 ,p_attribute4 => l_resource_name
5515 ,p_attribute5 => to_char(p_budget_start_date));
5516 END IF;
5517 END IF;
5518
5519 RAISE FND_API.G_EXC_ERROR;
5520
5521 ELSIF l_err_code < 0 THEN
5522
5523 IF(l_debug_mode='Y') THEN
5524 pa_debug.g_err_stage := 'summerize_project_totals API falied';
5525 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5526 END IF;
5527
5528 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5529 THEN
5530 FND_MSG_PUB.add_exc_msg
5531 ( p_pkg_name => 'PA_BUDGET_UTILS'
5532 , p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
5533 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
5534 END IF;
5535
5536 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5537
5538 END IF;
5539
5540
5541 ELSE --insert budget line for new FinPlan model
5542
5543
5544 --Store the budget line data in budget line table
5545
5546 IF p_resource_alias = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5547 l_budget_lines_in(1).resource_alias := NULL;
5548 ELSE
5549 l_budget_lines_in(1).resource_alias := p_resource_alias;
5550 END IF;
5551
5552 IF p_resource_list_member_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5553 l_budget_lines_in(1).resource_list_member_id := NULL;
5554 ELSE
5555 l_budget_lines_in(1).resource_list_member_id := p_resource_list_member_id;
5556 END IF;
5557
5558 --Bug 16604257 : CBS RBS Phase 2 API changes
5559 IF p_cbs_element_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5560 l_budget_lines_in(1).cbs_element_id := NULL;
5561 ELSE
5562 l_budget_lines_in(1).cbs_element_id := p_cbs_element_id;
5563 END IF;
5564
5565 IF p_cost_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5566 l_budget_lines_in(1).cost_code := NULL;
5567 ELSE
5568 l_budget_lines_in(1).cost_code := p_cost_code;
5569 END IF;
5570 --Bug 16604257
5571
5572 IF p_budget_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
5573 l_budget_lines_in(1).budget_start_date := NULL;
5574 ELSE
5575 l_budget_lines_in(1).budget_start_date := p_budget_start_date;
5576 END IF;
5577
5578 IF p_budget_end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
5579 l_budget_lines_in(1).budget_end_date := NULL;
5580 ELSE
5581 l_budget_lines_in(1).budget_end_date := p_budget_end_date;
5582 END IF;
5583
5584 IF p_period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5585 l_budget_lines_in(1).period_name := NULL;
5586 ELSE
5587 l_budget_lines_in(1).period_name := p_period_name;
5588 END IF;
5589
5590 IF p_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5591 l_budget_lines_in(1).description := NULL;
5592 ELSE
5593 l_budget_lines_in(1).description := p_description;
5594 END IF;
5595
5596 IF p_raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5597 l_budget_lines_in(1).raw_cost := NULL;
5598 ELSE
5599 l_budget_lines_in(1).raw_cost := p_raw_cost;
5600 END IF;
5601
5602 IF p_burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5603 l_budget_lines_in(1).burdened_cost := NULL;
5604 ELSE
5605 l_budget_lines_in(1).burdened_cost := p_burdened_cost;
5606 END IF;
5607
5608 IF p_revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5609 l_budget_lines_in(1).revenue := NULL;
5610 ELSE
5611 l_budget_lines_in(1).revenue := p_revenue;
5612 END IF;
5613
5614 IF p_quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5615 l_budget_lines_in(1).quantity := NULL;
5616 ELSE
5617 l_budget_lines_in(1).quantity := p_quantity;
5618 END IF;
5619
5620 IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5621 l_budget_lines_in(1).pm_product_code := NULL;
5622 ELSE
5623 l_budget_lines_in(1).pm_product_code := p_pm_product_code;
5624 END IF;
5625
5626 IF p_pm_budget_line_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5627 l_budget_lines_in(1).pm_budget_line_reference := NULL;
5628 ELSE
5629 l_budget_lines_in(1).pm_budget_line_reference := p_pm_budget_line_reference;
5630 END IF;
5631
5632 IF p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5633 l_budget_lines_in(1).attribute_category := NULL;
5634 ELSE
5635 l_budget_lines_in(1).attribute_category := p_attribute_category;
5636 END IF;
5637
5638 IF p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5639 l_budget_lines_in(1).attribute1 := NULL;
5640 ELSE
5641 l_budget_lines_in(1).attribute1 := p_attribute1;
5642 END IF;
5643
5644 IF p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5645 l_budget_lines_in(1).attribute2 := NULL;
5646 ELSE
5647 l_budget_lines_in(1).attribute2 := p_attribute2;
5648 END IF;
5649
5650 IF p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5651 l_budget_lines_in(1).attribute3 := NULL;
5652 ELSE
5653 l_budget_lines_in(1).attribute3 := p_attribute3;
5654 END IF;
5655
5656 IF p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5657 l_budget_lines_in(1).attribute4 := NULL;
5658 ELSE
5659 l_budget_lines_in(1).attribute4 := p_attribute4;
5660 END IF;
5661
5662 IF p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5663 l_budget_lines_in(1).attribute5 := NULL;
5664 ELSE
5665 l_budget_lines_in(1).attribute5 := p_attribute5;
5666 END IF;
5667
5668 IF p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5669 l_budget_lines_in(1).attribute6 := NULL;
5670 ELSE
5671 l_budget_lines_in(1).attribute6 := p_attribute6;
5672 END IF;
5673
5674 IF p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5675 l_budget_lines_in(1).attribute7 := NULL;
5676 ELSE
5677 l_budget_lines_in(1).attribute7 := p_attribute7;
5678 END IF;
5679
5680 IF p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5681 l_budget_lines_in(1).attribute8 := NULL;
5682 ELSE
5683 l_budget_lines_in(1).attribute8 := p_attribute8;
5684 END IF;
5685
5686 IF p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5687 l_budget_lines_in(1).attribute9 := NULL;
5688 ELSE
5689 l_budget_lines_in(1).attribute9 := p_attribute9;
5690 END IF;
5691
5692 IF p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5693 l_budget_lines_in(1).attribute10 := NULL;
5694 ELSE
5695 l_budget_lines_in(1).attribute10 := p_attribute10;
5696 END IF;
5697
5698 IF p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5699 l_budget_lines_in(1).attribute11 := NULL;
5700 ELSE
5701 l_budget_lines_in(1).attribute11 := p_attribute11;
5702 END IF;
5703
5704 IF p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5705 l_budget_lines_in(1).attribute12 := NULL;
5706 ELSE
5707 l_budget_lines_in(1).attribute12 := p_attribute12;
5708 END IF;
5709
5710 IF p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5711 l_budget_lines_in(1).attribute13 := NULL;
5712 ELSE
5713 l_budget_lines_in(1).attribute13 := p_attribute13;
5714 END IF;
5715
5716 IF p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5717 l_budget_lines_in(1).attribute14 := NULL;
5718 ELSE
5719 l_budget_lines_in(1).attribute14 := p_attribute14;
5720 END IF;
5721
5722 IF p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5723 l_budget_lines_in(1).attribute15 := NULL;
5724 ELSE
5725 l_budget_lines_in(1).attribute15 := p_attribute15;
5726 END IF;
5727
5728 IF p_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5729 l_budget_lines_in(1).txn_currency_code := NULL;
5730 ELSE
5731 l_budget_lines_in(1).txn_currency_code := p_currency_code;
5732 END IF;
5733
5734 IF p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5735 l_budget_lines_in(1).change_reason_code := NULL;
5736 ELSE
5737 l_budget_lines_in(1).change_reason_code := p_change_reason_code;
5738 END IF;
5739
5740 --Since currency attributes are defaulted to G_MISS values in
5741 --PA_BUDGET_PUB.budget_line_in_rec_type so we have to explicitly
5742 --make them null
5743 l_budget_lines_in(1).projfunc_cost_rate_type := NULL;
5744 l_budget_lines_in(1).projfunc_cost_rate_date_type := NULL;
5745 l_budget_lines_in(1).projfunc_cost_rate_date := NULL;
5746 l_budget_lines_in(1).projfunc_cost_exchange_rate := NULL;
5747 l_budget_lines_in(1).projfunc_rev_rate_type := NULL;
5748 l_budget_lines_in(1).projfunc_rev_rate_date_type := NULL;
5749 l_budget_lines_in(1).projfunc_rev_rate_date := NULL;
5750 l_budget_lines_in(1).projfunc_rev_exchange_rate := NULL;
5751 l_budget_lines_in(1).project_cost_rate_type := NULL;
5752 l_budget_lines_in(1).project_cost_rate_date_type := NULL;
5753 l_budget_lines_in(1).project_cost_rate_date := NULL;
5754 l_budget_lines_in(1).project_cost_exchange_rate := NULL;
5755 l_budget_lines_in(1).project_rev_rate_type := NULL;
5756 l_budget_lines_in(1).project_rev_rate_date_type := NULL;
5757 l_budget_lines_in(1).project_rev_rate_date := NULL;
5758 l_budget_lines_in(1).project_rev_exchange_rate := NULL;
5759
5760
5761 --Send the budget version id to validate_budget_lines API for
5762 --actuals on FORECAST check
5763 l_version_info_rec.x_budget_version_id := l_budget_version_id;
5764
5765 --Get entry method options and validate them against cost, rev and quantity passed
5766 l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(l_budget_version_id);
5767
5768 PA_FIN_PLAN_UTILS.get_plan_amount_flags(
5769 P_AMOUNT_SET_ID => l_amount_set_id
5770 ,X_RAW_COST_FLAG => lx_raw_cost_flag
5771 ,X_BURDENED_FLAG => lx_burdened_cost_flag
5772 ,X_REVENUE_FLAG => lx_revenue_flag
5773 ,X_COST_QUANTITY_FLAG => lx_cost_qty_flag
5774 ,X_REV_QUANTITY_FLAG => lx_revenue_qty_flag
5775 ,X_ALL_QUANTITY_FLAG => lx_all_qty_flag
5776 ,X_BILL_RATE_FLAG => l_bill_rate_flag
5777 ,X_COST_RATE_FLAG => l_cost_rate_flag
5778 ,X_BURDEN_RATE_FLAG => l_burden_rate_flag
5779 ,x_message_count => p_msg_count
5780 ,x_return_status => p_return_status
5781 ,x_message_data => p_msg_data) ;
5782
5783 IF p_return_status <> FND_API.G_RET_STS_SUCCESS
5784 THEN
5785 IF(l_debug_mode='Y') THEN
5786 pa_debug.g_err_stage := 'get_plan_amount_flags API falied';
5787 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5788 END IF;
5789 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5790 END IF;
5791
5792 --Derive the value of all_qty_flag based on version_type
5793 IF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
5794 l_allow_qty_flag := lx_cost_qty_flag;
5795 ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
5796 l_allow_qty_flag := lx_revenue_qty_flag;
5797 ELSE
5798 l_allow_qty_flag := lx_all_qty_flag;
5799 END IF;
5800
5801
5802 --Validate the budget line data
5803 PA_BUDGET_PVT.Validate_Budget_Lines
5804 ( p_calling_context => 'BUDGET_LINE_LEVEL_VALIDATION'
5805 ,p_pa_project_id => l_project_id
5806 ,p_budget_type_code => l_budget_type_code
5807 ,p_fin_plan_type_id => l_fin_plan_type_id
5808 ,p_version_type => l_version_type
5809 ,p_resource_list_id => l_resource_list_id
5810 ,p_time_phased_code => l_time_phased_code
5811 ,p_budget_entry_method_code => l_budget_entry_method_code
5812 ,p_entry_level_code => l_entry_level_code
5813 ,p_allow_qty_flag => l_allow_qty_flag
5814 ,p_allow_raw_cost_flag => lx_raw_cost_flag
5815 ,p_allow_burdened_cost_flag => lx_burdened_cost_flag
5816 ,p_allow_revenue_flag => lx_revenue_flag
5817 ,p_multi_currency_flag => l_multi_curr_flag
5818 ,p_project_cost_rate_type => NULL
5819 ,p_project_cost_rate_date_typ => NULL
5820 ,p_project_cost_rate_date => NULL
5821 ,p_project_cost_exchange_rate => NULL
5822 ,p_projfunc_cost_rate_type => NULL
5823 ,p_projfunc_cost_rate_date_typ => NULL
5824 ,p_projfunc_cost_rate_date => NULL
5825 ,p_projfunc_cost_exchange_rate => NULL
5826 ,p_project_rev_rate_type => NULL
5827 ,p_project_rev_rate_date_typ => NULL
5828 ,p_project_rev_rate_date => NULL
5829 ,p_project_rev_exchange_rate => NULL
5830 ,p_projfunc_rev_rate_type => NULL
5831 ,p_projfunc_rev_rate_date_typ => NULL
5832 ,p_projfunc_rev_rate_date => NULL
5833 ,p_projfunc_rev_exchange_rate => NULL
5834 ,p_version_info_rec => l_version_info_rec
5835 ,px_budget_lines_in => l_budget_lines_in
5836 ,x_budget_lines_out => l_budget_lines_out_tbl
5837 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
5838 ,x_etc_method_code_tbl => l_etc_method_code_tbl
5839 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
5840 ,x_msg_count => p_msg_count
5841 ,x_msg_data => p_msg_data
5842 ,x_return_status => p_return_status );
5843
5844 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5845 IF(l_debug_mode='Y') THEN
5846 pa_debug.g_err_stage := 'validate budget lines API falied';
5847 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5848 END IF;
5849 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5850 END IF;
5851
5852
5853 --Copy the fin plan line data into a table of type pa_fp_rollup_tmp
5854
5855 l_finplan_lines_tab(1).system_reference1 := l_budget_lines_in(1).pa_task_id;
5856 l_finplan_lines_tab(1).system_reference2 := l_budget_lines_in(1).resource_list_member_id;
5857 l_finplan_lines_tab(1).system_reference3 := l_budget_lines_in(1).cbs_element_id;-- Added for CBS 16604257
5858 l_finplan_lines_tab(1).start_date := l_budget_lines_in(1).budget_start_date;
5859 l_finplan_lines_tab(1).end_date := l_budget_lines_in(1).budget_end_date;
5860 l_finplan_lines_tab(1).period_name := l_budget_lines_in(1).period_name;
5861 l_finplan_lines_tab(1).txn_currency_code := l_budget_lines_in(1).txn_currency_code;
5862 l_finplan_lines_tab(1).txn_raw_cost := l_budget_lines_in(1).raw_cost;
5863 l_finplan_lines_tab(1).txn_burdened_cost := l_budget_lines_in(1).burdened_cost;
5864 l_finplan_lines_tab(1).txn_revenue := l_budget_lines_in(1).revenue;
5865 l_finplan_lines_tab(1).quantity := l_budget_lines_in(1).quantity;
5866 l_finplan_lines_tab(1).change_reason_code := l_budget_lines_in(1).change_reason_code;
5867 l_finplan_lines_tab(1).description := l_budget_lines_in(1).description;
5868 l_finplan_lines_tab(1).attribute_category := l_budget_lines_in(1).attribute_category;
5869 l_finplan_lines_tab(1).attribute1 := l_budget_lines_in(1).attribute1;
5870 l_finplan_lines_tab(1).attribute2 := l_budget_lines_in(1).attribute2;
5871 l_finplan_lines_tab(1).attribute3 := l_budget_lines_in(1).attribute3;
5872 l_finplan_lines_tab(1).attribute4 := l_budget_lines_in(1).attribute4;
5873 l_finplan_lines_tab(1).attribute5 := l_budget_lines_in(1).attribute5;
5874 l_finplan_lines_tab(1).attribute6 := l_budget_lines_in(1).attribute6;
5875 l_finplan_lines_tab(1).attribute7 := l_budget_lines_in(1).attribute7;
5876 l_finplan_lines_tab(1).attribute8 := l_budget_lines_in(1).attribute8;
5877 l_finplan_lines_tab(1).attribute9 := l_budget_lines_in(1).attribute9;
5878 l_finplan_lines_tab(1).attribute10 := l_budget_lines_in(1).attribute10;
5879 l_finplan_lines_tab(1).attribute11 := l_budget_lines_in(1).attribute11;
5880 l_finplan_lines_tab(1).attribute12 := l_budget_lines_in(1).attribute12;
5881 l_finplan_lines_tab(1).attribute13 := l_budget_lines_in(1).attribute13;
5882 l_finplan_lines_tab(1).attribute14 := l_budget_lines_in(1).attribute14;
5883 l_finplan_lines_tab(1).attribute15 := l_budget_lines_in(1).attribute15;
5884 l_finplan_lines_tab(1).projfunc_cost_rate_type := l_budget_lines_in(1).projfunc_cost_rate_type;
5885 l_finplan_lines_tab(1).projfunc_cost_rate_date_type := l_budget_lines_in(1).projfunc_cost_rate_date_type;
5886 l_finplan_lines_tab(1).projfunc_cost_rate_date := l_budget_lines_in(1).projfunc_cost_rate_date;
5887 l_finplan_lines_tab(1).projfunc_cost_exchange_rate := l_budget_lines_in(1).projfunc_cost_exchange_rate;
5888 l_finplan_lines_tab(1).projfunc_rev_rate_type := l_budget_lines_in(1).projfunc_rev_rate_type;
5889 l_finplan_lines_tab(1).projfunc_rev_rate_date_type := l_budget_lines_in(1).projfunc_rev_rate_date_type;
5890 l_finplan_lines_tab(1).projfunc_rev_rate_date := l_budget_lines_in(1).projfunc_rev_rate_date;
5891 l_finplan_lines_tab(1).projfunc_rev_exchange_rate := l_budget_lines_in(1).projfunc_rev_exchange_rate;
5892 l_finplan_lines_tab(1).project_cost_rate_type := l_budget_lines_in(1).project_cost_rate_type;
5893 l_finplan_lines_tab(1).project_cost_rate_date_type := l_budget_lines_in(1).project_cost_rate_date_type;
5894 l_finplan_lines_tab(1).project_cost_rate_date := l_budget_lines_in(1).project_cost_rate_date;
5895 l_finplan_lines_tab(1).project_cost_exchange_rate := l_budget_lines_in(1).project_cost_exchange_rate;
5896 l_finplan_lines_tab(1).project_rev_rate_type := l_budget_lines_in(1).project_rev_rate_type;
5897 l_finplan_lines_tab(1).project_rev_rate_date_type := l_budget_lines_in(1).project_rev_rate_date_type;
5898 l_finplan_lines_tab(1).project_rev_rate_date := l_budget_lines_in(1).project_rev_rate_date;
5899 l_finplan_lines_tab(1).project_rev_exchange_rate := l_budget_lines_in(1).project_rev_exchange_rate;
5900 l_finplan_lines_tab(1).pm_product_code := l_budget_lines_in(1).pm_product_code;
5901 l_finplan_lines_tab(1).pm_budget_line_reference := l_budget_lines_in(1).pm_budget_line_reference;
5902 l_finplan_lines_tab(1).quantity_source := 'I';
5903 l_finplan_lines_tab(1).raw_cost_source := 'I';
5904 l_finplan_lines_tab(1).burdened_cost_source := 'I';
5905 l_finplan_lines_tab(1).revenue_source := 'I';
5906 l_finplan_lines_tab(1).resource_assignment_id := -1;
5907
5908
5909 --Lock the budget version before inserting a budget line
5910 l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
5911 (p_budget_version_id => l_budget_version_id);
5912
5913 PA_FIN_PLAN_PVT.lock_unlock_version
5914 ( p_budget_version_id => l_budget_version_id
5915 ,p_record_version_number => l_record_version_number
5916 ,p_action => 'L'
5917 ,p_user_id => FND_GLOBAL.User_id
5918 ,p_person_id => null
5919 ,x_return_status => p_return_status
5920 ,x_msg_count => p_msg_count
5921 ,x_msg_data => p_msg_data);
5922
5923 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5924 -- Error message is not added here as the api lock_unlock_version
5925 -- adds the message to stack
5926 IF(l_debug_mode='Y') THEN
5927 pa_debug.g_err_stage := 'Failed in locking the version ' || l_budget_version_id;
5928 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
5929 END IF;
5930 RAISE FND_API.G_EXC_ERROR;
5931 END IF;
5932
5933 --Call PA_FIN_PLAN_PVT.add_fin_plan_lines. This api takes care of inserting
5934 --budget lines data in all relevant tables.
5935 PA_FIN_PLAN_PVT.add_fin_plan_lines
5936 ( p_calling_context => PA_FP_CONSTANTS_PKG.G_AMG_API--Bug 4224464.Changed this to AMG_API as this is a AMG flow.
5937 ,p_fin_plan_version_id => l_budget_version_id
5938 ,p_finplan_lines_tab => l_finplan_lines_tab
5939 ,x_return_status => p_return_status
5940 ,x_msg_count => p_msg_count
5941 ,x_msg_data => p_msg_data );
5942
5943 IF p_return_status <> FND_API.G_RET_STS_SUCCESS
5944 THEN
5945 IF(l_debug_mode='Y') THEN
5946 pa_debug.g_err_stage := 'PA_FIN_PLAN_PVT.add_fin_plan_lines API falied';
5947 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5948 END IF;
5949 RAISE FND_API.G_EXC_ERROR;
5950 END IF;
5951
5952
5953 --unlock the budget version after inserting the budget line
5954 l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
5955 (p_budget_version_id => l_budget_version_id);
5956
5957 PA_FIN_PLAN_PVT.lock_unlock_version
5958 ( p_budget_version_id => l_budget_version_id
5959 ,p_record_version_number => l_record_version_number
5960 ,p_action => 'U'
5961 ,p_user_id => FND_GLOBAL.User_id
5962 ,p_person_id => null
5963 ,x_return_status => p_return_status
5964 ,x_msg_count => p_msg_count
5965 ,x_msg_data => p_msg_data);
5966
5967 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5968 -- Error message is not added here as the api lock_unlock_version
5969 -- adds the message to stack
5970 IF(l_debug_mode='Y') THEN
5971 pa_debug.g_err_stage := 'Failed in unlocking the version ' || l_budget_version_id;
5972 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
5973 END IF;
5974 RAISE FND_API.G_EXC_ERROR;
5975 END IF;
5976
5977
5978 END IF; --end of code to insert budget line
5979
5980
5981 IF FND_API.to_boolean( p_commit )
5982 THEN
5983 COMMIT;
5984 END IF;
5985
5986 IF(l_debug_mode='Y') THEN
5987 pa_debug.g_err_stage := 'Exiting ' || l_api_name;
5988 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5989 END IF;
5990
5991 IF ( l_debug_mode = 'Y' ) THEN
5992 pa_debug.reset_curr_function;
5993 END IF;
5994
5995 EXCEPTION
5996
5997 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc
5998 THEN
5999
6000 ROLLBACK TO add_budget_line_pub;
6001
6002 p_return_status := FND_API.G_RET_STS_ERROR;
6003 l_msg_count := FND_MSG_PUB.count_msg;
6004
6005 IF l_msg_count = 1 and p_msg_data IS NULL THEN
6006 PA_INTERFACE_UTILS_PUB.get_messages
6007 (p_encoded => FND_API.G_TRUE
6008 ,p_msg_index => 1
6009 ,p_msg_count => l_msg_count
6010 ,p_msg_data => l_msg_data
6011 ,p_data => l_data
6012 ,p_msg_index_out => l_msg_index_out);
6013 p_msg_data := l_data;
6014 p_msg_count := l_msg_count;
6015 ELSE
6016 p_msg_count := l_msg_count;
6017 END IF;
6018
6019 IF ( l_debug_mode = 'Y' ) THEN
6020 pa_debug.reset_curr_function;
6021 END IF;
6022
6023 RETURN;
6024
6025
6026 WHEN FND_API.G_EXC_ERROR
6027 THEN
6028
6029 ROLLBACK TO add_budget_line_pub;
6030
6031 p_return_status := FND_API.G_RET_STS_ERROR;
6032
6033 FND_MSG_PUB.count_and_get
6034 ( p_count => p_msg_count ,
6035 p_data => p_msg_data );
6036
6037 IF ( l_debug_mode = 'Y' ) THEN
6038 pa_debug.reset_curr_function;
6039 END IF;
6040
6041
6042 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
6043 THEN
6044
6045 ROLLBACK TO add_budget_line_pub;
6046
6047 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6048
6049 FND_MSG_PUB.count_and_get
6050 ( p_count => p_msg_count ,
6051 p_data => p_msg_data );
6052
6053 IF ( l_debug_mode = 'Y' ) THEN
6054 pa_debug.reset_curr_function;
6055 END IF;
6056
6057
6058 WHEN ROW_ALREADY_LOCKED
6059 THEN
6060
6061 ROLLBACK TO add_budget_line_pub;
6062
6063 p_return_status := FND_API.G_RET_STS_ERROR;
6064
6065 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6066 THEN
6067 FND_MESSAGE.set_name('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
6068 FND_MESSAGE.set_token('PROJECT', l_amg_project_number);
6069 FND_MESSAGE.set_token('TASK', l_amg_task_number);
6070 FND_MESSAGE.set_token('BUDGET_TYPE', l_budget_type_code);
6071 FND_MESSAGE.set_token('SOURCE_NAME', '');
6072 FND_MESSAGE.set_token('START_DATE', '');
6073 FND_MESSAGE.set_token('ENTITY', 'G_BUDGET_LINE_CODE');
6074 FND_MSG_PUB.add;
6075 END IF;
6076
6077 FND_MSG_PUB.count_and_get
6078 ( p_count => p_msg_count ,
6079 p_data => p_msg_data );
6080
6081 IF ( l_debug_mode = 'Y' ) THEN
6082 pa_debug.reset_curr_function;
6083 END IF;
6084
6085
6086 WHEN OTHERS
6087 THEN
6088
6089 ROLLBACK TO add_budget_line_pub;
6090
6091 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6092
6093 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6094 THEN
6095 FND_MSG_PUB.add_exc_msg
6096 ( p_pkg_name => G_PKG_NAME
6097 , p_procedure_name => l_api_name );
6098 END IF;
6099
6100 FND_MSG_PUB.count_and_get
6101 ( p_count => p_msg_count ,
6102 p_data => p_msg_data );
6103
6104 IF ( l_debug_mode = 'Y' ) THEN
6105 pa_debug.reset_curr_function;
6106 END IF;
6107
6108 END Add_Budget_Line;
6109
6110
6111 ----------------------------------------------------------------------------------------
6112 --Name: delete_draft_budget
6113 --Type: Procedure
6114 --Description: This procedure can be used to delete a draft budget
6115 --
6116 --
6117 --Called subprograms:
6118 --
6119 --
6120 --
6121 --History:
6122 -- 07-OCT-1996 L. de Werker Created
6123 -- 07-DEC-1996 L. de Werker Added locking mechanism
6124 -- 19-MAR-2003 Srikanth Made Changes to make this api work for Fin Plan Model
6125 -- 11-APR-2005 Rishukla Bug 4224464: FP M Changes for delete_draft_budget
6126
6127 PROCEDURE delete_draft_budget
6128 ( p_api_version_number IN NUMBER
6129 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
6130 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
6131 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6132 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6133 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6134 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6135 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6136 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6137 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6138
6139 -- Parameters required for Fin Plan Model
6140 ,p_fin_plan_type_name IN pa_fin_plan_types_vl.name%TYPE
6141 ,p_fin_plan_type_id IN pa_fin_plan_types_b.fin_plan_type_id%TYPE
6142 ,p_version_number IN pa_budget_versions.version_number%TYPE
6143 ,p_version_type IN pa_budget_versions.version_type%TYPE
6144 )
6145
6146 IS
6147
6148 CURSOR l_budget_version_csr
6149 ( p_project_id NUMBER
6150 , p_budget_type_code VARCHAR2 )
6151 IS
6152 SELECT budget_version_id
6153 FROM pa_budget_versions
6154 WHERE project_id = p_project_id
6155 AND budget_type_code = p_budget_type_code
6156 AND budget_status_code = 'W'
6157 AND ci_id IS NULL; -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
6158
6159
6160 CURSOR l_budget_type_csr
6161 ( p_budget_type_code VARCHAR2 )
6162 IS
6163 SELECT 1
6164 FROM pa_budget_types
6165 WHERE budget_type_code = p_budget_type_code;
6166
6167 --Bug 4224464: Following cursor has been added as part of
6168 --FP M Changes for delete_draft_budget
6169 --This cursor is used to check if a fin_plan_type_id is
6170 --used to store workplan data
6171 CURSOR l_use_for_wp_csr
6172 ( p_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE)
6173 IS
6174 SELECT 1
6175 FROM pa_fin_plan_types_b
6176 WHERE fin_plan_type_id = p_fin_plan_type_id
6177 AND use_for_workplan_flag = 'Y';
6178
6179
6180 CURSOR l_lock_budget_csr( p_budget_version_id NUMBER )
6181 IS
6182 SELECT 'x'
6183 FROM pa_budget_versions bv
6184 , pa_resource_assignments ra
6185 , pa_budget_lines bl
6186 WHERE bv.budget_version_id = p_budget_version_id
6187 AND bv.budget_version_id = ra.budget_version_id (+)
6188 AND ra.resource_assignment_id = bl.resource_assignment_id (+)
6189 AND bv.ci_id IS NULL -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause bv.ci_id IS NULL--Bug # 3507156
6190
6191 FOR UPDATE OF bv.budget_version_id,ra.budget_version_id,bl.resource_assignment_id NOWAIT;
6192
6193 l_api_name CONSTANT VARCHAR2(30) := 'delete_draft_budget';
6194
6195 i NUMBER;
6196 l_return_status VARCHAR2(1);
6197 l_err_code NUMBER;
6198 l_err_stage VARCHAR2(120);
6199 l_err_stack VARCHAR2(630);
6200 l_dummy NUMBER :=0;
6201 l_budget_version_id NUMBER;
6202 l_ci_id pa_budget_versions.ci_id%TYPE;
6203 l_project_id NUMBER;
6204 l_budget_type_code VARCHAR2(30);
6205 l_msg_count NUMBER ;
6206 l_msg_data VARCHAR2(2000);
6207 l_function_allowed VARCHAR2(1);
6208 l_resp_id NUMBER := 0;
6209 l_user_id NUMBER := 0;
6210 l_module_name VARCHAR2(80) := g_module_name ||'.DELETE_DRAFT_BUDGET';
6211 l_fp_options_id NUMBER;
6212
6213 --needed to get the field values associated to a AMG message
6214
6215 CURSOR l_amg_project_csr
6216 (p_pa_project_id pa_projects.project_id%type)
6217 IS
6218 SELECT segment1
6219 FROM pa_projects p
6220 WHERE p.project_id = p_pa_project_id;
6221
6222 l_amg_segment1 VARCHAR2(25);
6223
6224 --Included the following variables as part of Changes due to Fin Plan Model
6225 l_any_error_occurred_flag VARCHAR2(1):='N';
6226 l_baseline_funding_flag VARCHAR2(1):='N';
6227 l_data VARCHAR2(2000);
6228 l_msg_index_out NUMBER;
6229 l_debug_mode VARCHAR2(1);
6230
6231 l_debug_level3 CONSTANT NUMBER := 3;
6232 l_debug_level5 CONSTANT NUMBER := 5;
6233 l_security_ret_code VARCHAR2(1);
6234 l_fin_plan_type_id NUMBER;
6235 l_version_type pa_budget_versions.version_type%TYPE;
6236 l_proj_fp_options_id NUMBER;
6237 l_result VARCHAR2(1);
6238 l_record_version_number pa_budget_versions.record_version_number%TYPE;
6239 l_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE;
6240 --Added by Xin Liu. 28-APR-03
6241 ll_fin_plan_type_id pa_proj_fp_options.fin_plan_type_id%TYPE;
6242 ll_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE;
6243 ll_version_type pa_budget_versions.version_type%TYPE;
6244 ll_version_number pa_budget_versions.version_number%TYPE;
6245
6246 BEGIN
6247
6248 -- Standard begin of API savepoint
6249
6250 SAVEPOINT delete_draft_budget_pub;
6251
6252 -- Standard call to check for call compatibility.
6253
6254 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
6255 p_api_version_number ,
6256 l_api_name ,
6257 G_PKG_NAME )
6258 THEN
6259
6260 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6261
6262 END IF;
6263
6264 p_msg_count := 0;
6265 p_return_status := FND_API.G_RET_STS_SUCCESS;
6266 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
6267
6268 IF ( l_debug_mode = 'Y' )
6269 THEN
6270 pa_debug.set_curr_function( p_function => 'delete_draft_budget',
6271 p_debug_mode => l_debug_mode );
6272 END IF;
6273
6274 -- Initialize the message table if requested.
6275
6276 IF FND_API.TO_BOOLEAN( p_init_msg_list )
6277 THEN
6278
6279 FND_MSG_PUB.initialize;
6280
6281 END IF;
6282 -- This api will initialize the data that will be used by the map_new_amg_msg.
6283 l_resp_id := FND_GLOBAL.Resp_id;
6284 l_user_id := FND_GLOBAL.User_id;
6285
6286 -- Added Logic by Xin Liu to handle MISS vars based on Manoj's code review.
6287 -- 28-APR-03
6288 IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6289 ll_fin_plan_type_id := NULL;
6290 ELSE
6291 ll_fin_plan_type_id := p_fin_plan_type_id;
6292 END IF;
6293
6294 IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6295 ll_fin_plan_type_name := NULL;
6296 ELSE
6297 ll_fin_plan_type_name := p_fin_plan_type_name;
6298 END IF;
6299
6300 IF p_version_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6301 ll_version_number := NULL;
6302 ELSE
6303 ll_version_number := p_version_number;
6304 END IF;
6305
6306
6307 -- Changes done.
6308
6309
6310 -- Both Budget Type Code and Fin Plan Type Id should not be null
6311 -- Changes done by Xin Liu, 24-APR-03, for Fin plan Type Id and Name for G_PA_MISS_XXX
6312 IF ((p_budget_type_code IS NULL OR
6313 p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
6314 (p_fin_plan_type_name IS NULL OR p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
6315 (p_fin_plan_type_id IS NULL OR p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) )THEN
6316
6317 PA_UTILS.ADD_MESSAGE
6318 (p_app_short_name => 'PA',
6319 p_msg_name => 'PA_BUDGET_FP_BOTH_MISSING');
6320
6321 IF l_debug_mode = 'Y' THEN
6322 pa_debug.g_err_stage:= 'Fin Plan type info and budget type info are missing';
6323 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6324 END IF;
6325
6326 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6327
6328 END IF;
6329
6330 -- Both Budget Type Code and Fin Plan Type Id should not be not null
6331 -- Changes done by Xin Liu, 24-APR-03, for Fin plan Type Id and Name for G_PA_MISS_XXX
6332 IF ((p_budget_type_code IS NOT NULL AND
6333 p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
6334 ((p_fin_plan_type_name IS NOT NULL AND p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
6335 (p_fin_plan_type_id IS NOT NULL AND p_fin_plan_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) THEN
6336
6337 PA_UTILS.ADD_MESSAGE
6338 (p_app_short_name => 'PA',
6339 p_msg_name => 'PA_BUDGET_FP_BOTH_NOT_NULL');
6340
6341 IF l_debug_mode = 'Y' THEN
6342 pa_debug.g_err_stage:= 'Fin Plan type info and budget type info both are provided';
6343 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6344 END IF;
6345
6346 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6347
6348 END IF;
6349
6350
6351 -- product_code is mandatory
6352
6353 IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6354 OR p_pm_product_code IS NULL
6355 THEN
6356 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6357 THEN
6358 pa_interface_utils_pub.map_new_amg_msg
6359 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
6360 ,p_msg_attribute => 'CHANGE'
6361 ,p_resize_flag => 'N'
6362 ,p_msg_context => 'GENERAL'
6363 ,p_attribute1 => ''
6364 ,p_attribute2 => ''
6365 ,p_attribute3 => ''
6366 ,p_attribute4 => ''
6367 ,p_attribute5 => '');
6368 END IF;
6369 IF l_debug_mode = 'Y' THEN
6370 pa_debug.g_err_stage := 'Product code is missing' ;
6371 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6372 END IF;
6373
6374 -- RAISE FND_API.G_EXC_ERROR;
6375 l_any_error_occurred_flag:='Y' ;
6376 END IF;
6377
6378 l_pm_product_code :='Z';
6379 /*added for bug no :2413400*/
6380 OPEN p_product_code_csr (p_pm_product_code);
6381 FETCH p_product_code_csr INTO l_pm_product_code;
6382 CLOSE p_product_code_csr;
6383 IF l_pm_product_code <> 'X'
6384 THEN
6385
6386 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6387 THEN
6388 pa_interface_utils_pub.map_new_amg_msg
6389 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
6390 ,p_msg_attribute => 'CHANGE'
6391 ,p_resize_flag => 'N'
6392 ,p_msg_context => 'GENERAL'
6393 ,p_attribute1 => ''
6394 ,p_attribute2 => ''
6395 ,p_attribute3 => ''
6396 ,p_attribute4 => ''
6397 ,p_attribute5 => '');
6398 END IF;
6399 p_return_status := FND_API.G_RET_STS_ERROR;
6400 --RAISE FND_API.G_EXC_ERROR;
6401 l_any_error_occurred_flag:='Y';
6402 IF l_debug_mode = 'Y' THEN
6403 pa_debug.g_err_stage := 'Product code is invalid' ;
6404 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6405 END IF;
6406
6407 END IF;
6408
6409
6410 -- convert pm_project_reference to id
6411
6412 Pa_project_pvt.Convert_pm_projref_to_id (
6413 p_pm_project_reference => p_pm_project_reference,
6414 p_pa_project_id => p_pa_project_id,
6415 p_out_project_id => l_project_id,
6416 p_return_status => l_return_status );
6417
6418
6419 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6420 THEN
6421 IF l_debug_mode = 'Y' THEN
6422 pa_debug.g_err_stage := 'Unexpected error while getting project id' ;
6423 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6424 END IF;
6425
6426 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6427
6428 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6429 THEN
6430 IF l_debug_mode = 'Y' THEN
6431 pa_debug.g_err_stage := 'Error while getting project id' ;
6432 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6433 END IF;
6434
6435 RAISE FND_API.G_EXC_ERROR;
6436
6437 END IF;
6438
6439 -- Get segment1 for AMG messages
6440
6441 OPEN l_amg_project_csr( l_project_id );
6442 FETCH l_amg_project_csr INTO l_amg_segment1;
6443 CLOSE l_amg_project_csr;
6444
6445 --Do the processing required for budget model
6446 IF (p_budget_type_code IS NOT NULL AND
6447 p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
6448
6449 --Check for the security
6450 PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
6451 p_api_version_number => p_api_version_number
6452 ,p_project_id => l_project_id
6453 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET
6454 ,p_function_name => 'PA_PM_DELETE_DRAFT_BUDGET'
6455 ,p_version_type => null
6456 ,x_return_status => p_return_status
6457 ,x_ret_code => l_security_ret_code );
6458
6459 -- the above API adds the error message to stack. Hence the message is not added here.
6460 -- Also, as security check is important further validations are not done in case this
6461 -- validation fails.
6462 IF (p_return_status<>FND_API.G_RET_STS_SUCCESS OR
6463 l_security_ret_code = 'N') THEN
6464 -- dbms_output.put_line('Security api failed l_security_ret_code '||l_security_ret_code);
6465 IF l_debug_mode = 'Y' THEN
6466 pa_debug.g_err_stage:= 'Security API Failed';
6467 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6468 END IF;
6469
6470 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6471 END IF;
6472
6473 OPEN l_budget_type_csr( p_budget_type_code );
6474
6475 FETCH l_budget_type_csr INTO l_dummy;
6476
6477 IF l_budget_type_csr%NOTFOUND
6478 THEN
6479 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6480 THEN
6481 pa_interface_utils_pub.map_new_amg_msg
6482 (p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
6483 ,p_msg_attribute => 'CHANGE'
6484 ,p_resize_flag => 'N'
6485 ,p_msg_context => 'BUDG'
6486 ,p_attribute1 => l_amg_segment1
6487 ,p_attribute2 => ''
6488 ,p_attribute3 => p_budget_type_code
6489 ,p_attribute4 => ''
6490 ,p_attribute5 => '');
6491 END IF;
6492 IF l_debug_mode = 'Y' THEN
6493 pa_debug.g_err_stage := 'Budget Type is invalid' ;
6494 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6495 END IF;
6496
6497
6498 CLOSE l_budget_type_csr;
6499 RAISE FND_API.G_EXC_ERROR;
6500
6501 END IF;
6502
6503 CLOSE l_budget_type_csr;
6504
6505 --Verify that the budget is not of type FORECASTING_BUDGET_TYPE
6506 IF p_budget_type_code='FORECASTING_BUDGET_TYPE' THEN
6507 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6508 THEN
6509 PA_UTILS.add_message
6510 (p_app_short_name => 'PA',
6511 p_msg_name => 'PA_FP_CANT_EDIT_FCST_BUD_TYPE');
6512 END IF;
6513 IF l_debug_mode = 'Y' THEN
6514 pa_debug.g_err_stage := 'Budget of type FORECASTING_BUDGET_TYPE' ;
6515 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6516 END IF;
6517 l_any_error_occurred_flag := 'Y';
6518 END IF;
6519
6520 -- get the corresponding budget_version_id
6521 -- we do not verify p_version_number here because
6522 -- as per FD, this parameter should be ignored for
6523 -- FORMS budget model.
6524 OPEN l_budget_version_csr
6525 (p_project_id => l_project_id
6526 ,p_budget_type_code => p_budget_type_code );
6527
6528 FETCH l_budget_version_csr INTO l_budget_version_id;
6529
6530 IF l_budget_version_csr%NOTFOUND
6531 THEN
6532 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6533 THEN
6534 pa_interface_utils_pub.map_new_amg_msg
6535 ( p_old_message_code => 'PA_NO_BUDGET_VERSION'
6536 ,p_msg_attribute => 'CHANGE'
6537 ,p_resize_flag => 'N'
6538 ,p_msg_context => 'BUDG'
6539 ,p_attribute1 => l_amg_segment1
6540 ,p_attribute2 => ''
6541 ,p_attribute3 => p_budget_type_code
6542 ,p_attribute4 => ''
6543 ,p_attribute5 => '');
6544 END IF;
6545 IF l_debug_mode = 'Y' THEN
6546 pa_debug.g_err_stage := 'Budget version does not exist' ;
6547 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6548 END IF;
6549
6550
6551 CLOSE l_budget_version_csr;
6552 RAISE FND_API.G_EXC_ERROR;
6553
6554 END IF;
6555
6556 CLOSE l_budget_version_csr;
6557
6558
6559 --Check if budgetary control is enabled for this project and budget version
6560 --If a record is present for this budget version in PA_BC_BALANCES table
6561 --then we do not proceed with delete.
6562 IF ( PA_BUDGET_PVT.is_bc_enabled_for_budget(l_budget_version_id) )
6563 THEN
6564 IF(l_debug_mode='Y') THEN
6565 pa_debug.g_err_stage := 'Cannnot delete budget version - '
6566 || 'budgetary control is enabled';
6567 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6568 END IF;
6569
6570 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6571 THEN
6572 PA_UTILS.ADD_MESSAGE(
6573 p_app_short_name => 'PA'
6574 ,p_msg_name => 'PA_FP_DEL_BC_ENABLED_BV_AMG'
6575 ,p_token1 => 'PROJECT'
6576 ,p_value1 => l_amg_segment1
6577 ,p_token2 => 'BUDGET_TYPE'
6578 ,p_value2 => p_budget_type_code
6579 ,p_token3 => 'BUDGET_VERSION_ID'
6580 ,p_value3 => l_budget_version_id);
6581 END IF;
6582
6583 RAISE FND_API.G_EXC_ERROR;
6584
6585 END IF;--budgetary control enabled check
6586
6587
6588 OPEN l_lock_budget_csr( l_budget_version_id );
6589
6590 --Stop Further processing if any errors are reported
6591 IF(l_any_error_occurred_flag='Y') THEN
6592 IF(l_debug_mode='Y') THEN
6593 pa_debug.g_err_stage := 'About to display all the messages';
6594 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6595 END IF;
6596 p_return_status := FND_API.G_RET_STS_ERROR;
6597 l_any_error_occurred_flag := 'Y';
6598 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6599 END IF;
6600
6601 PA_BUDGET_UTILS.delete_draft( x_budget_version_id => l_budget_version_id
6602 ,x_err_code => l_err_code
6603 ,x_err_stage => l_err_stage
6604 ,x_err_stack => l_err_stack );
6605
6606 IF l_err_code > 0
6607 THEN
6608
6609 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6610 THEN
6611
6612 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
6613 THEN
6614 IF(l_debug_mode='Y') THEN
6615 pa_debug.g_err_stage := 'Delete draft falied';
6616 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6617 END IF;
6618 pa_interface_utils_pub.map_new_amg_msg
6619 ( p_old_message_code => 'PA_DELETE_DRAFT_FAILED'
6620 ,p_msg_attribute => 'CHANGE'
6621 ,p_resize_flag => 'N'
6622 ,p_msg_context => 'BUDG'
6623 ,p_attribute1 => l_amg_segment1
6624 ,p_attribute2 => ''
6625 ,p_attribute3 => p_budget_type_code
6626 ,p_attribute4 => ''
6627 ,p_attribute5 => '');
6628 ELSE
6629 IF(l_debug_mode='Y') THEN
6630 pa_debug.g_err_stage := 'Error in Delete draft';
6631 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6632 END IF;
6633
6634 pa_interface_utils_pub.map_new_amg_msg
6635 ( p_old_message_code => l_err_stage
6636 ,p_msg_attribute => 'CHANGE'
6637 ,p_resize_flag => 'N'
6638 ,p_msg_context => 'BUDG'
6639 ,p_attribute1 => l_amg_segment1
6640 ,p_attribute2 => ''
6641 ,p_attribute3 => p_budget_type_code
6642 ,p_attribute4 => ''
6643 ,p_attribute5 => '');
6644 END IF;
6645
6646 END IF;
6647
6648 RAISE FND_API.G_EXC_ERROR;
6649
6650 ELSIF l_err_code < 0
6651 THEN
6652
6653
6654 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6655 THEN
6656 IF(l_debug_mode='Y') THEN
6657 pa_debug.g_err_stage := 'Unexpected Error in Delete draft';
6658 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6659 END IF;
6660
6661 FND_MSG_PUB.add_exc_msg
6662 ( p_pkg_name => 'PA_BUDGET_UTILS'
6663 , p_procedure_name => 'DELETE_DRAFT'
6664 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
6665
6666 END IF;
6667
6668 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6669
6670 END IF;
6671
6672 CLOSE l_lock_budget_csr; --FYI, does not release locks
6673
6674
6675 ELSE -- Fin Plan Model
6676
6677
6678 -- validate the plan type passed
6679 PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
6680 ( p_fin_plan_type_id => ll_fin_plan_type_id
6681 ,p_fin_plan_type_name => ll_fin_plan_type_name
6682 ,x_fin_plan_type_id => l_fin_plan_type_id
6683 ,x_return_status => p_return_status
6684 ,x_msg_count => p_msg_count
6685 ,x_msg_data => p_msg_data);
6686 -- Throw the error if the above API is not successfully executed
6687 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6688
6689 IF l_debug_mode = 'Y' THEN
6690 pa_debug.g_err_stage := 'Can not get the value of Fin Plan Type Id' ;
6691 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6692 END IF;
6693
6694 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6695
6696 END IF;
6697
6698 --Bug 4224464: Following validation has been added as part of
6699 --FP M Changes for delete_draft_budget
6700 --check if the fin_plan_type_id is used to store workplan data
6701 --first reset the value of l_dummy
6702 l_dummy := 0;
6703 OPEN l_use_for_wp_csr( l_fin_plan_type_id );
6704 FETCH l_use_for_wp_csr INTO l_dummy;
6705 CLOSE l_use_for_wp_csr;
6706
6707 IF l_dummy = 1
6708 THEN
6709 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6710 THEN
6711 PA_UTILS.add_message
6712 (p_app_short_name => 'PA',
6713 p_msg_name => 'PA_FP_CANT_DEL_WP_DATA');
6714 END IF;
6715 IF l_debug_mode = 'Y' THEN
6716 pa_debug.g_err_stage := 'Fin Plan Type Id is used for WP' ;
6717 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6718 END IF;
6719
6720 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6721
6722 END IF;
6723
6724 --Validate / get the version type
6725 --Changes done by Xin Liu for post_fpk. Check if p_version_type is G_PA_MISS_CHAR. 24-APR-03
6726 IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6727 l_version_type := NULL;
6728 ELSE
6729 l_version_type := p_version_type;
6730 END IF;
6731 --Changes Done.
6732
6733 pa_fin_plan_utils.get_version_type
6734 ( p_project_id => l_project_id
6735 ,p_fin_plan_type_id => l_fin_plan_type_id
6736 ,px_version_type => l_version_type
6737 ,x_return_status => p_return_status
6738 ,x_msg_count => p_msg_count
6739 ,x_msg_data => p_msg_data);
6740
6741 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6742
6743 IF l_debug_mode = 'Y' THEN
6744 pa_debug.g_err_stage := 'Failed in get_Version_type' ;
6745 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6746 END IF;
6747 -- dbms_output.put_line('Exc in getting ver type');
6748
6749 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6750
6751 END IF;
6752
6753 --Check for the security
6754 PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
6755 p_api_version_number => p_api_version_number
6756 ,p_project_id => l_project_id
6757 ,p_fin_plan_type_id => l_fin_plan_type_id /* Bug 3139924 */
6758 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN
6759 ,p_function_name => 'PA_PM_DELETE_DRAFT_BUDGET'
6760 ,p_version_type => l_version_type
6761 ,x_return_status => p_return_status
6762 ,x_ret_code => l_security_ret_code );
6763
6764 IF (p_return_status <>FND_API.G_RET_STS_SUCCESS OR
6765 l_security_ret_code='N') THEN
6766 -- dbms_output.put_line('Exc in security');
6767 IF l_debug_mode = 'Y' THEN
6768 pa_debug.g_err_stage := 'Security API failed' ;
6769 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6770 END IF;
6771 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6772 END IF;
6773
6774 --Bug 4224464: Following validation has been added as part of
6775 --FP M Changes for delete_draft_budget.
6776 --If version number is null, then current working version should be
6777 --deleted. If current working version doesn't exist then error
6778 --message is thrown
6779 IF ll_version_number IS NULL THEN
6780
6781 PA_FIN_PLAN_UTILS.get_curr_working_version_info
6782 ( p_project_id => l_project_id
6783 ,p_fin_plan_type_id => l_fin_plan_type_id
6784 ,p_version_type => l_version_type
6785 ,x_fp_options_id => l_fp_options_id
6786 ,x_fin_plan_version_id => l_budget_version_id
6787 ,x_return_status => p_return_status
6788 ,x_msg_count => p_msg_count
6789 ,x_msg_data => p_msg_data );
6790
6791 ELSE --version_number not NULL
6792 --Derive the version Id depending on the parameters passed as input.
6793
6794 PA_FIN_PLAN_UTILS.get_version_id
6795 ( p_project_id => l_project_id
6796 ,p_fin_plan_type_id => l_fin_plan_type_id
6797 ,p_version_type => l_version_type
6798 ,p_version_number => ll_version_number
6799 ,x_budget_version_id => l_budget_version_id
6800 ,x_ci_id => l_ci_id -- 2863564
6801 ,x_return_status => p_return_status
6802 ,x_msg_count => p_msg_count
6803 ,x_msg_data => p_msg_data );
6804
6805 -- If the budget version is a control item version throw error
6806 IF l_ci_id IS NOT NULL THEN
6807 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6808 PA_UTILS.ADD_MESSAGE(
6809 p_app_short_name => 'PA'
6810 ,p_msg_name => 'PA_FP_CI_VERSION_NON_EDITABLE'
6811 ,p_token1 => 'BUDGET_VERSION_ID'
6812 ,p_value1 => l_budget_version_id);
6813 END IF;
6814 IF l_debug_mode = 'Y' THEN
6815 pa_debug.g_err_stage := 'i/p version is ci version' ;
6816 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6817 END IF;
6818 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6819 END IF;
6820
6821 END IF; --version_number IS NULL
6822
6823 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6824 IF l_debug_mode = 'Y' THEN
6825 pa_debug.g_err_stage := 'get Version Id Failed ' ;
6826 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6827 END IF;
6828
6829 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6830 END IF;
6831
6832 IF l_budget_version_id IS NULL THEN
6833
6834 --Get the plan type name
6835 SELECT name
6836 INTO l_fin_plan_type_name
6837 FROM pa_fin_plan_types_vl
6838 WHERE fin_plan_type_id = l_fin_plan_type_id;
6839
6840 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6841 THEN
6842 PA_UTILS.add_message
6843 (p_app_short_name => 'PA'
6844 ,p_msg_name => 'PA_FP_NO_WORKING_VERSION'
6845 ,p_token1 => 'PROJECT'
6846 ,p_value1 => l_amg_segment1
6847 ,p_token2 => 'PLAN_TYPE'
6848 ,p_value2 => l_fin_plan_type_name
6849 ,p_token3 => 'VERSION_NUMBER'
6850 ,p_value3 => ll_version_number );
6851 END IF;
6852
6853 IF l_debug_mode = 'Y' THEN
6854 pa_debug.g_err_stage := 'Working Budget Version does not exist' ;
6855 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6856 END IF;
6857 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6858
6859 END IF;
6860
6861 --Bug 4224464: Following validation has been added as part of
6862 --FP M Changes for delete_draft_budget. If the budget version
6863 --belongs to an org forecast project then throw an error
6864 IF (PA_FIN_PLAN_UTILS.is_orgforecast_plan(l_budget_version_id) = 'Y')
6865 THEN
6866 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6867 THEN
6868 PA_UTILS.add_message
6869 (p_app_short_name => 'PA',
6870 p_msg_name => 'PA_FP_CANT_DEL_ORG_FCST_PLAN');
6871 END IF;
6872 IF l_debug_mode = 'Y' THEN
6873 pa_debug.g_err_stage := 'Cannot delete draft budgets attached' ||
6874 'to an organisation forecasting project';
6875 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6876 END IF;
6877
6878 p_return_status := FND_API.G_RET_STS_ERROR;
6879 l_any_error_occurred_flag:='Y' ;
6880 END IF; --org_forecast = 'Y'
6881
6882 --Lock the version before deleting it
6883 l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
6884 (p_budget_version_id => l_budget_version_id);
6885 pa_fin_plan_pvt.lock_unlock_version
6886 ( p_budget_version_id => l_budget_version_id
6887 ,p_record_version_number => l_record_version_number
6888 ,p_action => 'L'
6889 ,p_user_id => l_user_id
6890 ,p_person_id => null
6891 ,x_return_status => p_return_status
6892 ,x_msg_count => p_msg_count
6893 ,x_msg_data => p_msg_data);
6894
6895 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6896 -- Error message is not added here as the api lock_unlock_version
6897 -- adds the message to stack
6898 IF(l_debug_mode='Y') THEN
6899 pa_debug.g_err_stage := 'Failed in locking the version';
6900 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6901 END IF;
6902 l_any_error_occurred_flag:='Y';
6903 END IF;
6904
6905 --Stop Further processing if any errors are reported
6906 IF(l_any_error_occurred_flag='Y') THEN
6907 IF(l_debug_mode='Y') THEN
6908 pa_debug.g_err_stage := 'About to display all the messages';
6909 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6910 END IF;
6911 p_return_status := FND_API.G_RET_STS_ERROR;
6912 l_any_error_occurred_flag := 'Y';
6913 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6914 END IF;
6915
6916 --Delete the version
6917 l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
6918 (p_budget_version_id => l_budget_version_id);
6919 PA_FIN_PLAN_PUB.Delete_Version
6920 ( p_project_id => l_project_id
6921 ,p_budget_version_id => l_budget_version_id
6922 ,p_record_version_number => l_record_version_number
6923 ,x_return_status => p_return_status
6924 ,x_msg_count => p_msg_count
6925 ,x_msg_data => p_msg_data );
6926
6927 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6928
6929 IF(l_debug_mode='Y') THEN
6930 pa_debug.g_err_stage := 'Failed in deleting the version';
6931 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6932 END IF;
6933 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6934 END IF;
6935
6936 --Bug 4224464: Following DMLs have been added as part of
6937 --FP M Changes for delete_draft_budget
6938 --If the budget version being deleted is a generation source
6939 --then we null out the GEN_SRC_XXX_PLAN_VERSION_ID column in
6940 --pa_proj_fp_options table and increase the record_version_no
6941 IF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST
6942 THEN
6943 UPDATE pa_proj_fp_options
6944 SET gen_src_cost_plan_version_id = NULL,
6945 record_version_number = record_version_number + 1,
6946 last_update_date = SYSDATE,
6947 last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
6948 last_update_login = FND_GLOBAL.LOGIN_ID
6949 WHERE project_id = l_project_id
6950 AND gen_src_cost_plan_version_id = l_budget_version_id;
6951 ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE
6952 THEN
6953 UPDATE pa_proj_fp_options
6954 SET gen_src_rev_plan_version_id = NULL,
6955 record_version_number = record_version_number + 1,
6956 last_update_date = SYSDATE,
6957 last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
6958 last_update_login = FND_GLOBAL.LOGIN_ID
6959 WHERE project_id = l_project_id
6960 AND gen_src_rev_plan_version_id = l_budget_version_id;
6961 ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL
6962 THEN
6963 UPDATE pa_proj_fp_options
6964 SET gen_src_all_plan_version_id = NULL,
6965 record_version_number = record_version_number + 1,
6966 last_update_date = SYSDATE,
6967 last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
6968 last_update_login = FND_GLOBAL.LOGIN_ID
6969 WHERE project_id = l_project_id
6970 AND gen_src_all_plan_version_id = l_budget_version_id;
6971 END IF;
6972
6973 --if any record had been updated in pa_proj_fp_options then
6974 --we do a dummy update in pa_budget_versions also for the
6975 --budget version that is being updated to increase the record version number
6976 IF SQL%ROWCOUNT > 0 THEN
6977 UPDATE pa_budget_versions
6978 SET record_version_number = record_version_number + 1,
6979 last_update_date = SYSDATE,
6980 last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
6981 last_update_login = FND_GLOBAL.LOGIN_ID
6982 WHERE project_id = l_project_id
6983 AND budget_version_id = l_budget_version_id;
6984 END IF;
6985
6986
6987 END IF;
6988
6989
6990 IF fnd_api.to_boolean(p_commit)
6991 THEN
6992 COMMIT;
6993 END IF;
6994
6995
6996 IF(l_debug_mode='Y') THEN
6997 pa_debug.g_err_stage := 'Exiting delete draft budget';
6998 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
6999 END IF;
7000
7001 IF ( l_debug_mode = 'Y' ) THEN
7002 pa_debug.reset_curr_function;
7003 END IF;
7004
7005 EXCEPTION
7006 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
7007
7008 p_return_status := FND_API.G_RET_STS_ERROR;
7009 l_msg_count := FND_MSG_PUB.count_msg;
7010
7011 IF l_msg_count = 1 and p_msg_data IS NULL THEN
7012 PA_INTERFACE_UTILS_PUB.get_messages
7013 (p_encoded => FND_API.G_TRUE
7014 ,p_msg_index => 1
7015 ,p_msg_count => l_msg_count
7016 ,p_msg_data => l_msg_data
7017 ,p_data => l_data
7018 ,p_msg_index_out => l_msg_index_out);
7019 p_msg_data := l_data;
7020 p_msg_count := l_msg_count;
7021 ELSE
7022 p_msg_count := l_msg_count;
7023 END IF;
7024 IF ( l_debug_mode = 'Y' ) THEN
7025 pa_debug.reset_curr_function;
7026 END IF;
7027 RETURN;
7028
7029 WHEN FND_API.G_EXC_ERROR
7030 THEN
7031
7032 ROLLBACK TO delete_draft_budget_pub;
7033
7034 p_return_status := FND_API.G_RET_STS_ERROR;
7035
7036 FND_MSG_PUB.Count_And_Get
7037 ( p_count => p_msg_count ,
7038 p_data => p_msg_data );
7039 IF ( l_debug_mode = 'Y' ) THEN
7040 pa_debug.reset_curr_function;
7041 END IF;
7042
7043 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
7044 THEN
7045
7046 ROLLBACK TO delete_draft_budget_pub;
7047
7048 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7049
7050 FND_MSG_PUB.Count_And_Get
7051 ( p_count => p_msg_count ,
7052 p_data => p_msg_data );
7053 IF ( l_debug_mode = 'Y' ) THEN
7054 pa_debug.reset_curr_function;
7055 END IF;
7056
7057 WHEN ROW_ALREADY_LOCKED
7058 THEN
7059 ROLLBACK TO delete_draft_budget_pub;
7060
7061 p_return_status := FND_API.G_RET_STS_ERROR;
7062
7063 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7064 THEN
7065 FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
7066 FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
7067 FND_MESSAGE.SET_TOKEN('TASK', '');
7068 FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', p_budget_type_code);
7069 FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
7070 FND_MESSAGE.SET_TOKEN('START_DATE', '');
7071 FND_MESSAGE.SET_TOKEN('ENTITY', 'G_BUDGET_CODE');
7072 FND_MSG_PUB.ADD;
7073 END IF;
7074
7075 FND_MSG_PUB.Count_And_Get
7076 ( p_count => p_msg_count ,
7077 p_data => p_msg_data );
7078 IF ( l_debug_mode = 'Y' ) THEN
7079 pa_debug.reset_curr_function;
7080 END IF;
7081
7082 WHEN OTHERS THEN
7083
7084 ROLLBACK TO delete_draft_budget_pub;
7085
7086 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7087
7088 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7089 THEN
7090 FND_MSG_PUB.add_exc_msg
7091 ( p_pkg_name => G_PKG_NAME
7092 , p_procedure_name => l_api_name );
7093
7094 END IF;
7095
7096 FND_MSG_PUB.Count_And_Get
7097 ( p_count => p_msg_count ,
7098 p_data => p_msg_data );
7099 IF ( l_debug_mode = 'Y' ) THEN
7100 pa_debug.reset_curr_function;
7101 END IF;
7102
7103 END delete_draft_budget;
7104
7105
7106 ----------------------------------------------------------------------------------------
7107 --Name: delete_baseline_budget
7108 --Type: Procedure
7109 --Description: This procedure can be used to delete an existing baseline budget
7110 -- version except the current original and current baseline budget
7111 -- versions.
7112 --
7113 --Called subprograms:
7114 -- FND_API.compatible_api_call
7115 -- PA_PROJECT_PVT.convert_pm_projref_to_id
7116 -- PA_PM_FUNCTION_SECURITY_PUB.check_budget_security
7117 -- PA_BUDGET_UTILS.delete_draft
7118 -- PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
7119 -- PA_FIN_PLAN_UTILS.get_version_type
7120 -- PA_FIN_PLAN_UTILS.is_orgforecast_plan
7121 -- PA_FIN_PLAN_UTILS.retrieve_record_version_number
7122 -- PA_FIN_PLAN_PVT.lock_unlock_version
7123 -- PA_FIN_PLAN_PUB.delete_version
7124 --
7125 --History:
7126 -- 05-APR-2005 Rishukla Created.
7127
7128 PROCEDURE delete_baseline_budget
7129 ( p_api_version_number IN NUMBER
7130 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
7131 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
7132 ,p_msg_count OUT NOCOPY NUMBER
7133 ,p_msg_data OUT NOCOPY VARCHAR2
7134 ,p_return_status OUT NOCOPY VARCHAR2
7135 ,p_pm_product_code IN pa_projects_all.pm_product_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7136 ,p_pa_project_id IN pa_projects_all.project_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7137 ,p_pm_project_reference IN pa_projects_all.pm_project_reference%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7138 ,p_budget_type_code IN pa_budget_versions.budget_type_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7139 ,p_fin_plan_type_id IN pa_fin_plan_types_b.fin_plan_type_id%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7140 ,p_fin_plan_type_name IN pa_fin_plan_types_vl.name%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7141 ,p_version_type IN pa_budget_versions.version_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7142 ,p_version_number IN pa_budget_versions.version_number%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7143 )
7144
7145 IS
7146
7147 --This cursor is used to check if a valid combination of
7148 --project_id, budget_type_code and version_number has
7149 --been passed to this api for a baseline budget
7150 --version. If yes, then current and current_original
7151 --flags and budget_version_id are retrieved
7152 CURSOR l_budget_version_no_csr
7153 ( p_project_id NUMBER
7154 , p_budget_type_code VARCHAR2
7155 , p_version_number NUMBER )
7156 IS
7157 SELECT budget_version_id
7158 ,current_flag
7159 ,current_original_flag
7160 FROM pa_budget_versions
7161 WHERE project_id = p_project_id
7162 AND budget_type_code = p_budget_type_code
7163 AND version_number = p_version_number
7164 AND budget_status_code = 'B';
7165
7166 l_budget_version_no_rec l_budget_version_no_csr%ROWTYPE;
7167
7168
7169 --This cursor is used to check if a valid combination of
7170 --project_id, fin_plan_type_id, version_type and version_number
7171 --has been passed to this api for a baseline budget
7172 --version. If yes, then budget_version_id is retrieved
7173 CURSOR l_finplan_version_no_csr
7174 ( p_project_id NUMBER
7175 , p_fin_plan_type_id NUMBER
7176 , p_version_type VARCHAR2
7177 , p_version_number NUMBER )
7178 IS
7179 SELECT budget_version_id
7180 FROM pa_budget_versions
7181 WHERE project_id = p_project_id
7182 AND fin_plan_type_id = p_fin_plan_type_id
7183 AND version_type = p_version_type
7184 AND version_number = p_version_number
7185 AND ci_id IS NULL --Added for better readability (Venketesh's suggestion)
7186 AND budget_status_code = 'B';
7187
7188 --This cursor is used to verify a budget_type_code
7189 CURSOR l_budget_type_csr
7190 ( p_budget_type_code VARCHAR2 )
7191 IS
7192 SELECT 1
7193 FROM pa_budget_types
7194 WHERE budget_type_code = p_budget_type_code;
7195
7196 --This cursor is used to check if a fin_plan_type_id is
7197 --used to store workplan data
7198 CURSOR l_use_for_wp_csr
7199 ( p_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE)
7200 IS
7201 SELECT 1
7202 FROM pa_fin_plan_types_b
7203 WHERE fin_plan_type_id = p_fin_plan_type_id
7204 AND use_for_workplan_flag = 'Y';
7205
7206 --needed to get the field values associated to a AMG message
7207 CURSOR l_amg_project_csr
7208 (p_pa_project_id pa_projects.project_id%type)
7209 IS
7210 SELECT segment1
7211 FROM pa_projects p
7212 WHERE p.project_id = p_pa_project_id;
7213
7214 l_amg_segment1 VARCHAR2(25);
7215
7216 l_api_name CONSTANT VARCHAR2(30) := 'DELETE_BASELINE_BUDGET';
7217 l_module_name CONSTANT VARCHAR2(100) := g_module_name || '.DELETE_BASELINE_BUDGET';
7218
7219 l_return_status VARCHAR2(1);
7220 l_err_code NUMBER;
7221 l_err_stage VARCHAR2(120);
7222 l_err_stack VARCHAR2(630);
7223 l_dummy NUMBER := 0;
7224
7225 l_msg_count NUMBER := 0;
7226 l_msg_data VARCHAR2(2000);
7227 l_msg_index_out NUMBER;
7228 l_data VARCHAR2(2000);
7229
7230 l_any_error_occurred_flag VARCHAR2(1):='N';
7231
7232 l_debug_mode VARCHAR2(1);
7233 l_debug_level2 CONSTANT NUMBER := 2;
7234 l_debug_level3 CONSTANT NUMBER := 3;
7235 l_debug_level4 CONSTANT NUMBER := 4;
7236 l_debug_level5 CONSTANT NUMBER := 5;
7237
7238 l_security_ret_code VARCHAR2(1);
7239 l_function_name VARCHAR2(80);
7240 l_record_version_number pa_budget_versions.record_version_number%TYPE;
7241
7242 l_project_id NUMBER;
7243 l_budget_type_code pa_budget_versions.budget_type_code%TYPE;
7244 l_budget_version_id NUMBER;
7245 l_fin_plan_type_id NUMBER;
7246 l_fin_plan_type_name pa_fin_plan_types_vl.name%TYPE;
7247 l_version_type pa_budget_versions.version_type%TYPE;
7248 l_version_number NUMBER;
7249 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
7250
7251 ll_fin_plan_type_id NUMBER; --Added for bug 13968843
7252
7253
7254 BEGIN
7255
7256 --Standard begin of API savepoint
7257
7258 SAVEPOINT delete_baseline_budget_pub;
7259
7260 p_msg_count := 0;
7261 p_return_status := FND_API.G_RET_STS_SUCCESS;
7262 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
7263
7264 IF ( l_debug_mode = 'Y' )
7265 THEN
7266 pa_debug.set_curr_function( p_function => 'delete_baseline_budget',
7267 p_debug_mode => l_debug_mode );
7268 END IF;
7269
7270 IF ( l_debug_mode = 'Y' )
7271 THEN
7272 pa_debug.g_err_stage:='Entering ' || l_api_name;
7273 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
7274 END IF;
7275
7276 --Initialize the message table if requested.
7277
7278 IF FND_API.to_boolean( p_init_msg_list )
7279 THEN
7280 FND_MSG_PUB.initialize;
7281 END IF;
7282
7283 --Standard call to check for call compatibility.
7284
7285 IF NOT FND_API.compatible_api_call ( g_api_version_number ,
7286 p_api_version_number ,
7287 l_api_name ,
7288 G_PKG_NAME )
7289 THEN
7290 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7291 END IF;
7292
7293 --Convert following IN parameters from G_PA_MISS_XXX to null
7294
7295 IF p_pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
7296 l_project_id := NULL;
7297 ELSE
7298 l_project_id := p_pa_project_id;
7299 END IF;
7300
7301 IF p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
7302 l_budget_type_code := NULL;
7303 ELSE
7304 l_budget_type_code := p_budget_type_code;
7305 END IF;
7306
7307 IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
7308 l_fin_plan_type_id := NULL;
7309 ELSE
7310 l_fin_plan_type_id := p_fin_plan_type_id;
7311 END IF;
7312
7313 IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
7314 l_fin_plan_type_name := NULL;
7315 ELSE
7316 l_fin_plan_type_name := p_fin_plan_type_name;
7317 END IF;
7318
7319 IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
7320 l_version_type := NULL;
7321 ELSE
7322 l_version_type := p_version_type;
7323 END IF;
7324
7325 IF p_version_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
7326 l_version_number := NULL;
7327 ELSE
7328 l_version_number := p_version_number;
7329 END IF;
7330
7331 --Both Budget Type Code and Fin Plan Type Id should not be null simultaneously
7332
7333 IF (l_budget_type_code IS NULL AND l_fin_plan_type_name IS NULL AND l_fin_plan_type_id IS NULL)
7334 THEN
7335
7336 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7337 PA_UTILS.add_message
7338 (p_app_short_name => 'PA',
7339 p_msg_name => 'PA_BUDGET_FP_BOTH_MISSING');
7340 END IF;
7341
7342 IF l_debug_mode = 'Y' THEN
7343 pa_debug.g_err_stage:= 'Fin Plan type info and budget type info are missing';
7344 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7345 END IF;
7346
7347 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7348
7349 END IF;
7350
7351 --Both Budget Type Code and Fin Plan Type Id should not be not null simultaneously
7352
7353 IF ((l_budget_type_code IS NOT NULL) AND
7354 (l_fin_plan_type_name IS NOT NULL OR l_fin_plan_type_id IS NOT NULL ))
7355 THEN
7356
7357 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7358 PA_UTILS.add_message
7359 (p_app_short_name => 'PA',
7360 p_msg_name => 'PA_BUDGET_FP_BOTH_NOT_NULL');
7361 END IF;
7362
7363 IF l_debug_mode = 'Y' THEN
7364 pa_debug.g_err_stage:= 'Fin Plan type info and budget type info both are provided';
7365 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7366 END IF;
7367
7368 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7369
7370 END IF;
7371
7372
7373 --product_code is mandatory
7374 IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7375 OR p_pm_product_code IS NULL
7376 THEN
7377 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7378 --This function checks if the message being written to the message table
7379 --is higher or equal to the message level threshold.
7380 THEN
7381 PA_UTILS.add_message
7382 (p_app_short_name => 'PA',
7383 p_msg_name => 'PA_PRODUCT_CODE_IS_MISSING_AMG');
7384 END IF;
7385 IF l_debug_mode = 'Y' THEN
7386 pa_debug.g_err_stage := 'Product code is missing' ;
7387 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7388 END IF;
7389
7390 p_return_status := FND_API.G_RET_STS_ERROR;
7391 l_any_error_occurred_flag:='Y' ;
7392
7393 ELSE --p_pm_product_code is not null
7394
7395 l_pm_product_code :='Z';
7396 OPEN p_product_code_csr (p_pm_product_code);
7397 FETCH p_product_code_csr INTO l_pm_product_code;
7398 CLOSE p_product_code_csr;
7399
7400 IF l_pm_product_code <> 'X'
7401 THEN
7402
7403 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7404 THEN
7405 PA_UTILS.add_message
7406 (p_app_short_name => 'PA',
7407 p_msg_name => 'PA_PRODUCT_CODE_IS_INVALID_AMG');
7408 END IF;
7409 p_return_status := FND_API.G_RET_STS_ERROR;
7410 l_any_error_occurred_flag:='Y';
7411 IF l_debug_mode = 'Y' THEN
7412 pa_debug.g_err_stage := 'Product code is invalid' ;
7413 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7414 END IF;
7415
7416 END IF; --l_pm_product_code <> 'X'
7417
7418 END IF; --p_pm_product_code IS NULL
7419
7420
7421 --p_version_number is mandatory
7422 IF l_version_number IS NULL
7423 THEN
7424 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7425 THEN
7426 PA_UTILS.add_message
7427 (p_app_short_name => 'PA',
7428 p_msg_name => 'PA_FP_VERSION_NUMBER_REQD');
7429 END IF;
7430 IF l_debug_mode = 'Y' THEN
7431 pa_debug.g_err_stage := 'Version Number is missing' ;
7432 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7433 END IF;
7434
7435 p_return_status := FND_API.G_RET_STS_ERROR;
7436 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7437
7438 END IF; --l_version_number IS NULL
7439
7440
7441 --convert pm_project_reference to id
7442 PA_PROJECT_PVT.convert_pm_projref_to_id (
7443 p_pm_project_reference => p_pm_project_reference,
7444 p_pa_project_id => p_pa_project_id, --l_project_id /* bug #12674987 */
7445 p_out_project_id => l_project_id,
7446 p_return_status => l_return_status );
7447
7448 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7449 THEN
7450 IF l_debug_mode = 'Y' THEN
7451 pa_debug.g_err_stage := 'Unexpected error while getting project id' ;
7452 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7453 END IF;
7454
7455 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7456
7457 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7458 THEN
7459 IF l_debug_mode = 'Y' THEN
7460 pa_debug.g_err_stage := 'Error while getting project id' ;
7461 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7462 END IF;
7463
7464 RAISE FND_API.G_EXC_ERROR;
7465
7466 END IF;
7467
7468 -- Get segment1 for AMG messages
7469 OPEN l_amg_project_csr( l_project_id );
7470 FETCH l_amg_project_csr INTO l_amg_segment1;
7471 CLOSE l_amg_project_csr;
7472
7473
7474 --Do the processing required for budget model
7475 IF (l_budget_type_code IS NOT NULL) THEN
7476
7477 --Verify the budget type code passed
7478 OPEN l_budget_type_csr( l_budget_type_code );
7479 FETCH l_budget_type_csr INTO l_dummy;
7480
7481 IF l_budget_type_csr%NOTFOUND
7482 THEN
7483 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7484 THEN
7485 PA_INTERFACE_UTILS_PUB.map_new_amg_msg
7486 ( p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
7487 ,p_msg_attribute => 'CHANGE'
7488 ,p_resize_flag => 'N'
7489 ,p_msg_context => 'BUDG'
7490 ,p_attribute1 => l_amg_segment1
7491 ,p_attribute2 => ''
7492 ,p_attribute3 => l_budget_type_code
7493 ,p_attribute4 => ''
7494 ,p_attribute5 => '');
7495 END IF;
7496 IF l_debug_mode = 'Y' THEN
7497 pa_debug.g_err_stage := 'Budget Type is invalid' ;
7498 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7499 END IF;
7500
7501 CLOSE l_budget_type_csr;
7502 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7503
7504 END IF; --l_budget_type_csr%NOTFOUND
7505 CLOSE l_budget_type_csr;
7506
7507 --Verify the version number passed and derive budget_version_id if it is valid
7508 OPEN l_budget_version_no_csr
7509 (p_project_id => l_project_id
7510 ,p_budget_type_code => l_budget_type_code
7511 ,p_version_number => l_version_number);
7512 FETCH l_budget_version_no_csr INTO l_budget_version_no_rec;
7513 CLOSE l_budget_version_no_csr;
7514
7515 IF (l_budget_version_no_rec.budget_version_id IS NULL)
7516 THEN
7517 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7518 THEN
7519 PA_UTILS.add_message
7520 (p_app_short_name => 'PA',
7521 p_msg_name => 'PA_FP_VERSION_NO_IS_INVALID');
7522 END IF;
7523 IF l_debug_mode = 'Y' THEN
7524 pa_debug.g_err_stage := 'Budget version number is invalid' ;
7525 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7526 END IF;
7527
7528 p_return_status := FND_API.G_RET_STS_ERROR;
7529 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7530
7531 ELSE --l_budget_version_no_rec has been fetched
7532
7533 IF (l_budget_version_no_rec.current_flag = 'Y'
7534 OR l_budget_version_no_rec.current_original_flag = 'Y') THEN
7535 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7536 PA_UTILS.add_message
7537 (p_app_short_name => 'PA',
7538 p_msg_name => 'PA_FP_DEL_CUR_OR_ORIG_BASELINE');
7539 END IF;
7540
7541 IF l_debug_mode = 'Y' THEN
7542 pa_debug.g_err_stage := 'baseline versions marked as current' ||
7543 'or current original can not be deleted';
7544 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7545 END IF;
7546
7547 p_return_status := FND_API.G_RET_STS_ERROR;
7548 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7549 END IF;
7550 END IF; --l_budget_version_no_rec.budget_version_id IS NULL
7551
7552 --Check for the security. We select the function security based
7553 --on whether the budget type is Approved or not.
7554 IF (l_budget_type_code = 'AC' OR l_budget_type_code = 'AR')
7555 THEN
7556 --Approved Budget (Cost or Revenue)
7557 l_function_name:='PA_FP_DEL_BSLN_APPRVD_BDGT';
7558 ELSE --for baseline budgets the only other values should be 'FR' or user defined
7559 --Budget (not approved cost or revenue)
7560 l_function_name:='PA_FP_DEL_BSLN_BDGT';
7561 END IF;
7562
7563 PA_PM_FUNCTION_SECURITY_PUB.check_budget_security (
7564 p_api_version_number => p_api_version_number
7565 ,p_project_id => l_project_id
7566 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET
7567 ,p_function_name => l_function_name
7568 ,p_version_type => null
7569 ,x_return_status => p_return_status
7570 ,x_ret_code => l_security_ret_code );
7571
7572 -- the above API adds the error message to stack. Hence the message is not added here.
7573 -- Also, as security check is important further validations are not done in case this
7574 -- validation fails.
7575 IF (p_return_status<>FND_API.G_RET_STS_SUCCESS OR l_security_ret_code = 'N')
7576 THEN
7577 IF l_debug_mode = 'Y' THEN
7578 pa_debug.g_err_stage:= 'Security API Failed';
7579 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7580 END IF;
7581
7582 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7583 END IF;
7584
7585
7586 --Check if budgetary control is enabled for this project and budget version
7587 --If a record is present for this budget version in PA_BC_BALANCES table
7588 --then we do not proceed with delete.
7589 IF ( PA_BUDGET_PVT.is_bc_enabled_for_budget(l_budget_version_no_rec.budget_version_id) )
7590 THEN
7591 IF(l_debug_mode='Y') THEN
7592 pa_debug.g_err_stage := 'Cannnot delete budget version - '
7593 || 'budgetary control is enabled';
7594 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7595 END IF;
7596
7597 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7598 THEN
7599 PA_UTILS.ADD_MESSAGE(
7600 p_app_short_name => 'PA'
7601 ,p_msg_name => 'PA_FP_DEL_BC_ENABLED_BV_AMG'
7602 ,p_token1 => 'PROJECT'
7603 ,p_value1 => l_amg_segment1
7604 ,p_token2 => 'BUDGET_TYPE'
7605 ,p_value2 => l_budget_type_code
7606 ,p_token3 => 'BUDGET_VERSION_ID'
7607 ,p_value3 => l_budget_version_no_rec.budget_version_id);
7608 END IF;
7609
7610 RAISE FND_API.G_EXC_ERROR;
7611
7612 END IF;--budgetary control enabled check
7613
7614
7615 --Stop Further processing if any errors are reported
7616 IF(l_any_error_occurred_flag='Y') THEN
7617 IF(l_debug_mode='Y') THEN
7618 pa_debug.g_err_stage := 'About to display all the messages';
7619 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7620 END IF;
7621 p_return_status := FND_API.G_RET_STS_ERROR;
7622 l_any_error_occurred_flag := 'Y';
7623 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7624 END IF;
7625
7626 --Calling delete API
7627 PA_BUDGET_UTILS.delete_draft( x_budget_version_id => l_budget_version_no_rec.budget_version_id
7628 ,x_err_code => l_err_code
7629 ,x_err_stage => l_err_stage
7630 ,x_err_stack => l_err_stack );
7631
7632 IF l_err_code > 0 THEN
7633
7634 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7635 THEN
7636 IF NOT PA_PROJECT_PVT.check_valid_message(l_err_stage)
7637 THEN
7638 IF(l_debug_mode='Y') THEN
7639 pa_debug.g_err_stage := 'PA_BUDGET_UTILS.DELETE_DRAFT falied';
7640 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7641 END IF;
7642 PA_INTERFACE_UTILS_PUB.map_new_amg_msg
7643 ( p_old_message_code => 'PA_DELETE_DRAFT_FAILED'
7644 ,p_msg_attribute => 'CHANGE'
7645 ,p_resize_flag => 'N'
7646 ,p_msg_context => 'BUDG'
7647 ,p_attribute1 => l_amg_segment1
7648 ,p_attribute2 => ''
7649 ,p_attribute3 => l_budget_type_code
7650 ,p_attribute4 => ''
7651 ,p_attribute5 => '');
7652
7653 ELSE --valid error message has been returned by Delete_Draft
7654
7655 IF(l_debug_mode='Y') THEN
7656 pa_debug.g_err_stage := 'Error in Delete_draft api';
7657 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7658 END IF;
7659 PA_INTERFACE_UTILS_PUB.map_new_amg_msg
7660 ( p_old_message_code => l_err_stage
7661 ,p_msg_attribute => 'CHANGE'
7662 ,p_resize_flag => 'N'
7663 ,p_msg_context => 'BUDG'
7664 ,p_attribute1 => l_amg_segment1
7665 ,p_attribute2 => ''
7666 ,p_attribute3 => l_budget_type_code
7667 ,p_attribute4 => ''
7668 ,p_attribute5 => '');
7669 END IF;
7670
7671 END IF; --FND_MSG_PUB.check_msg_level
7672 RAISE FND_API.G_EXC_ERROR;
7673
7674 ELSIF l_err_code < 0 THEN
7675
7676 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7677 THEN
7678 IF(l_debug_mode='Y') THEN
7679 pa_debug.g_err_stage := 'Unexpected Error in Delete_draft api';
7680 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7681 END IF;
7682
7683 FND_MSG_PUB.add_exc_msg
7684 ( p_pkg_name => 'PA_BUDGET_UTILS'
7685 , p_procedure_name => 'DELETE_DRAFT'
7686 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
7687 END IF; --FND_MSG_PUB.check_msg_level
7688
7689 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7690
7691 END IF; --l_err_code > 0
7692
7693 ELSE --finplan model
7694
7695 --validate the plan type passed
7696 PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
7697 ( p_fin_plan_type_id => l_fin_plan_type_id
7698 ,p_fin_plan_type_name => l_fin_plan_type_name
7699 ,x_fin_plan_type_id => ll_fin_plan_type_id
7700 ,x_return_status => p_return_status
7701 ,x_msg_count => p_msg_count
7702 ,x_msg_data => p_msg_data);
7703 --Throw the error if the above API is not successfully executed
7704 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7705 IF l_debug_mode = 'Y' THEN
7706 pa_debug.g_err_stage := 'Cannot get the value of Fin Plan Type Id' ;
7707 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7708 END IF;
7709 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7710
7711 END IF;
7712
7713 --check if the fin_plan_type_id is used to store workplan data
7714 --first reset the l_dummy value
7715 l_dummy := 0;
7716 OPEN l_use_for_wp_csr( ll_fin_plan_type_id );
7717 FETCH l_use_for_wp_csr INTO l_dummy;
7718 CLOSE l_use_for_wp_csr;
7719
7720 IF l_dummy = 1
7721 THEN
7722 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7723 THEN
7724 PA_UTILS.add_message
7725 (p_app_short_name => 'PA',
7726 p_msg_name => 'PA_FP_CANT_DEL_WP_DATA');
7727 END IF;
7728 IF l_debug_mode = 'Y' THEN
7729 pa_debug.g_err_stage := 'Fin Plan Type Id is used for WP' ;
7730 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7731 END IF;
7732
7733 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7734
7735 END IF;
7736
7737 --Validate / get the version type
7738 PA_FIN_PLAN_UTILS.get_version_type
7739 ( p_project_id => l_project_id
7740 ,p_fin_plan_type_id => ll_fin_plan_type_id
7741 ,px_version_type => l_version_type
7742 ,x_return_status => p_return_status
7743 ,x_msg_count => p_msg_count
7744 ,x_msg_data => p_msg_data);
7745
7746 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7747 IF l_debug_mode = 'Y' THEN
7748 pa_debug.g_err_stage := 'Failed in get_Version_type' ;
7749 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7750 END IF;
7751 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7752 END IF;
7753
7754 --Check for the security
7755 l_function_name:='PA_PM_DELETE_BASELINE_BUDGET';
7756 PA_PM_FUNCTION_SECURITY_PUB.check_budget_security (
7757 p_api_version_number => p_api_version_number
7758 ,p_project_id => l_project_id
7759 ,p_fin_plan_type_id => ll_fin_plan_type_id
7760 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN
7761 ,p_function_name => l_function_name
7762 ,p_version_type => l_version_type
7763 ,x_return_status => p_return_status
7764 ,x_ret_code => l_security_ret_code );
7765
7766 IF (p_return_status <>FND_API.G_RET_STS_SUCCESS OR
7767 l_security_ret_code='N') THEN
7768 IF l_debug_mode = 'Y' THEN
7769 pa_debug.g_err_stage := 'Security API failed' ;
7770 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7771 END IF;
7772 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7773 END IF;
7774
7775 --Verify the version number passed and derive budget_version_id if it is valid
7776 OPEN l_finplan_version_no_csr
7777 (p_project_id => l_project_id
7778 ,p_fin_plan_type_id => ll_fin_plan_type_id
7779 ,p_version_type => l_version_type
7780 ,p_version_number => l_version_number);
7781 FETCH l_finplan_version_no_csr INTO l_budget_version_id;
7782 CLOSE l_finplan_version_no_csr;
7783
7784 IF (l_budget_version_id IS NULL)
7785 THEN
7786 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7787 THEN
7788 PA_UTILS.add_message
7789 (p_app_short_name => 'PA',
7790 p_msg_name => 'PA_FP_VERSION_NO_IS_INVALID');
7791 END IF;
7792 IF l_debug_mode = 'Y' THEN
7793 pa_debug.g_err_stage := 'Budget version number is invalid' ;
7794 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7795 END IF;
7796
7797 p_return_status := FND_API.G_RET_STS_ERROR;
7798 l_any_error_occurred_flag:='Y' ;
7799 END IF; --l_budget_version_id IS NULL
7800
7801 --if the budget version belongs to an org forecast project then throw an error
7802 IF (PA_FIN_PLAN_UTILS.is_orgforecast_plan(l_budget_version_id) = 'Y')
7803 THEN
7804 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7805 THEN
7806 PA_UTILS.add_message
7807 (p_app_short_name => 'PA',
7808 p_msg_name => 'PA_FP_CANT_DEL_ORG_FCST_PLAN');
7809 END IF;
7810 IF l_debug_mode = 'Y' THEN
7811 pa_debug.g_err_stage := 'Cannot delete baseline budgets attached' ||
7812 'to an organisation forecasting project';
7813 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7814 END IF;
7815
7816 p_return_status := FND_API.G_RET_STS_ERROR;
7817 l_any_error_occurred_flag:='Y' ;
7818 END IF; --org_forecast = 'Y'
7819
7820 --Stop Further processing if any errors are reported
7821 IF(l_any_error_occurred_flag='Y') THEN
7822 IF(l_debug_mode='Y') THEN
7823 pa_debug.g_err_stage := 'About to display all the messages';
7824 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7825 END IF;
7826 p_return_status := FND_API.G_RET_STS_ERROR;
7827 l_any_error_occurred_flag := 'Y';
7828 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7829 END IF;
7830
7831 --Delete the version
7832 l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
7833 (p_budget_version_id => l_budget_version_id);
7834 PA_FIN_PLAN_PUB.delete_version
7835 ( p_project_id => l_project_id
7836 ,p_budget_version_id => l_budget_version_id
7837 ,p_record_version_number => l_record_version_number
7838 ,x_return_status => p_return_status
7839 ,x_msg_count => p_msg_count
7840 ,x_msg_data => p_msg_data );
7841
7842 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7843
7844 IF(l_debug_mode='Y') THEN
7845 pa_debug.g_err_stage := 'Failed in deleting the version';
7846 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7847 END IF;
7848 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7849 END IF;
7850
7851 --If the budget version being deleted is a generation source
7852 --then we null out the GEN_SRC_XXX_PLAN_VERSION_ID column in
7853 --pa_proj_fp_options table and increase the record_version_no
7854 IF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST
7855 THEN
7856 UPDATE pa_proj_fp_options
7857 SET gen_src_cost_plan_version_id = NULL,
7858 record_version_number = record_version_number + 1,
7859 last_update_date = SYSDATE,
7860 last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
7861 last_update_login = FND_GLOBAL.LOGIN_ID
7862 WHERE project_id = l_project_id
7863 AND gen_src_cost_plan_version_id = l_budget_version_id;
7864 ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE
7865 THEN
7866 UPDATE pa_proj_fp_options
7867 SET gen_src_rev_plan_version_id = NULL,
7868 record_version_number = record_version_number + 1,
7869 last_update_date = SYSDATE,
7870 last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
7871 last_update_login = FND_GLOBAL.LOGIN_ID
7872 WHERE project_id = l_project_id
7873 AND gen_src_rev_plan_version_id = l_budget_version_id;
7874 ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL
7875 THEN
7876 UPDATE pa_proj_fp_options
7877 SET gen_src_all_plan_version_id = NULL,
7878 record_version_number = record_version_number + 1,
7879 last_update_date = SYSDATE,
7880 last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
7881 last_update_login = FND_GLOBAL.LOGIN_ID
7882 WHERE project_id = l_project_id
7883 AND gen_src_all_plan_version_id = l_budget_version_id;
7884 END IF;
7885
7886 --if any record had been updated in pa_proj_fp_options then
7887 --we do a dummy update in pa_budget_versions also for the
7888 --budget version that is being updated to increase the record version number
7889 IF SQL%ROWCOUNT > 0 THEN
7890 UPDATE pa_budget_versions
7891 SET record_version_number = record_version_number + 1,
7892 last_update_date = SYSDATE,
7893 last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
7894 last_update_login = FND_GLOBAL.LOGIN_ID
7895 WHERE project_id = l_project_id
7896 AND budget_version_id = l_budget_version_id;
7897 END IF;
7898
7899 End IF; --l_budget_type_code IS NOT NULL
7900
7901
7902 IF fnd_api.to_boolean(p_commit)
7903 THEN
7904 COMMIT;
7905 END IF;
7906
7907 IF(l_debug_mode='Y') THEN
7908 pa_debug.g_err_stage := 'Exiting delete baseline budget version';
7909 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
7910 END IF;
7911
7912 IF ( l_debug_mode = 'Y' ) THEN
7913 pa_debug.reset_curr_function;
7914 END IF;
7915
7916 EXCEPTION
7917 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc
7918 THEN
7919
7920 p_return_status := FND_API.G_RET_STS_ERROR;
7921 l_msg_count := FND_MSG_PUB.count_msg;
7922
7923 IF l_msg_count = 1 and p_msg_data IS NULL THEN
7924 PA_INTERFACE_UTILS_PUB.get_messages
7925 (p_encoded => FND_API.G_TRUE
7926 ,p_msg_index => 1
7927 ,p_msg_count => l_msg_count
7928 ,p_msg_data => l_msg_data
7929 ,p_data => l_data
7930 ,p_msg_index_out => l_msg_index_out);
7931 p_msg_data := l_data;
7932 p_msg_count := l_msg_count;
7933 ELSE
7934 p_msg_count := l_msg_count;
7935 END IF;
7936
7937 IF ( l_debug_mode = 'Y' ) THEN
7938 pa_debug.reset_curr_function;
7939 END IF;
7940
7941 RETURN;
7942
7943 WHEN FND_API.G_EXC_ERROR
7944 THEN
7945
7946 ROLLBACK TO delete_baseline_budget_pub;
7947
7948 p_return_status := FND_API.G_RET_STS_ERROR;
7949
7950 FND_MSG_PUB.count_and_get
7951 ( p_count => p_msg_count ,
7952 p_data => p_msg_data );
7953
7954 IF ( l_debug_mode = 'Y' ) THEN
7955 pa_debug.reset_curr_function;
7956 END IF;
7957
7958 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
7959 THEN
7960
7961 ROLLBACK TO delete_baseline_budget_pub;
7962
7963 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7964
7965 FND_MSG_PUB.count_and_get
7966 ( p_count => p_msg_count ,
7967 p_data => p_msg_data );
7968
7969 IF ( l_debug_mode = 'Y' ) THEN
7970 pa_debug.reset_curr_function;
7971 END IF;
7972
7973 WHEN ROW_ALREADY_LOCKED
7974 THEN
7975 ROLLBACK TO delete_baseline_budget_pub;
7976
7977 p_return_status := FND_API.G_RET_STS_ERROR;
7978
7979 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7980 THEN
7981 FND_MESSAGE.set_name('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
7982 FND_MESSAGE.set_token('PROJECT', l_amg_segment1);
7983 FND_MESSAGE.set_token('TASK', '');
7984 FND_MESSAGE.set_token('BUDGET_TYPE', p_budget_type_code);
7985 FND_MESSAGE.set_token('SOURCE_NAME', '');
7986 FND_MESSAGE.set_token('START_DATE', '');
7987 FND_MESSAGE.set_token('ENTITY', 'G_BUDGET_CODE');
7988 FND_MSG_PUB.add;
7989 END IF;
7990
7991 FND_MSG_PUB.count_and_get
7992 ( p_count => p_msg_count ,
7993 p_data => p_msg_data );
7994
7995 IF ( l_debug_mode = 'Y' ) THEN
7996 pa_debug.reset_curr_function;
7997 END IF;
7998
7999 WHEN OTHERS THEN
8000
8001 ROLLBACK TO delete_baseline_budget_pub;
8002
8003 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8004
8005 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8006 THEN
8007 FND_MSG_PUB.add_exc_msg
8008 ( p_pkg_name => G_PKG_NAME
8009 , p_procedure_name => l_api_name );
8010
8011 END IF;
8012
8013 FND_MSG_PUB.count_and_get
8014 ( p_count => p_msg_count ,
8015 p_data => p_msg_data );
8016
8017 IF ( l_debug_mode = 'Y' ) THEN
8018 pa_debug.reset_curr_function;
8019 END IF;
8020
8021 END delete_baseline_budget;
8022
8023
8024
8025 ----------------------------------------------------------------------------------------
8026 --Name: delete_budget_line
8027 --Type: Procedure
8028 --Description: This procedure can be used to delete a budget_line of a draft budget
8029 --
8030 --
8031 --Called subprograms:
8032 --
8033 --
8034 --
8035 --History:
8036 -- 07-OCT-1996 L. de Werker Created
8037 -- 28-NOV-1996 L. de Werker Add parameter p_period_name and functionality to get
8038 -- start_date from p_period_name
8039 -- 07-DEC-1996 L. de Werker Added locking mechanism
8040 -- 16-MAY-2005 Ritesh Shukla Modified this procedure for FP.M
8041 -- 16-Apr-2007 rthumma Bug# 5998035 : Added call to PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions API
8042 -- for deleting the data from pa_resource_assignments
8043 -- 29-Feb-2008 paljain Bug# 6854131 : Removed second call to close cursor l_budget_line_rowid_csr
8044 --
8045 PROCEDURE delete_budget_line
8046 ( p_api_version_number IN NUMBER
8047 ,p_commit IN VARCHAR2
8048 ,p_init_msg_list IN VARCHAR2
8049 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8050 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8051 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8052 ,p_pm_product_code IN VARCHAR2
8053 ,p_pa_project_id IN NUMBER
8054 ,p_pm_project_reference IN VARCHAR2
8055 ,p_budget_type_code IN VARCHAR2
8056 ,p_pa_task_id IN NUMBER
8057 ,p_pm_task_reference IN VARCHAR2
8058 ,p_resource_alias IN VARCHAR2
8059 ,p_resource_list_member_id IN NUMBER
8060 --Bug 16604257 : CBS RBS Phase 2 API changes
8061 ,p_cost_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8062 ,p_cbs_element_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8063 --Bug 16604257
8064 ,p_start_date IN DATE
8065 ,p_period_name IN VARCHAR2
8066 --Parameters added for FP.M
8067 ,p_fin_plan_type_id IN NUMBER
8068 ,p_fin_plan_type_name IN VARCHAR2
8069 ,p_version_type IN VARCHAR2
8070 ,p_version_number IN NUMBER
8071 ,p_currency_code IN VARCHAR2 )
8072
8073 IS
8074
8075
8076 CURSOR l_resource_assignment_csr
8077 (p_budget_version_id NUMBER
8078 ,p_task_id NUMBER
8079 ,p_member_id NUMBER ,
8080 p_c_cbs_element_id NUMBER)
8081 IS
8082 SELECT resource_assignment_id
8083 FROM pa_resource_assignments
8084 WHERE budget_version_id = p_budget_version_id
8085 AND task_id = p_task_id
8086 AND resource_list_member_id = p_member_id
8087 AND NVL(cbs_element_id,-1) = NVL(p_c_cbs_element_id,-1); --16604257
8088
8089 CURSOR l_budget_line_rowid_csr
8090 ( p_resource_assignment_id NUMBER
8091 ,p_budget_start_date DATE
8092 ,p_currency_code VARCHAR2)
8093 IS
8094 SELECT rowidtochar(rowid)
8095 ,txn_currency_code
8096 ,start_date
8097 ,end_date
8098 FROM pa_budget_lines
8099 WHERE resource_assignment_id = p_resource_assignment_id
8100 AND trunc(start_date) = nvl(trunc(p_budget_start_date),trunc(start_date))
8101 AND txn_currency_code = nvl(p_currency_code,txn_currency_code);
8102
8103 -- FP.M Data Model Logic
8104
8105 CURSOR l_uncategorized_list_csr
8106 IS
8107 SELECT prlm.resource_list_member_id
8108 FROM pa_resource_lists prl
8109 , pa_resource_list_members prlm
8110 WHERE prl.resource_list_id = prlm.resource_list_id
8111 AND prl.uncategorized_flag='Y'
8112 and prlm.resource_class_code = 'FINANCIAL_ELEMENTS';
8113
8114 -- End: FP.M Resource LIst Data Model Impact Changes ------
8115
8116 -- needed to get the budget_start_date of a period
8117 CURSOR l_budget_periods_csr
8118 (p_period_name VARCHAR2
8119 ,p_time_phased_type_code VARCHAR2 )
8120 IS
8121 SELECT trunc(period_start_date)
8122 FROM pa_budget_periods_v
8123 WHERE period_name = p_period_name
8124 AND period_type_code = p_time_phased_type_code;
8125
8126 --needed to validate to given start_date
8127 CURSOR l_start_date_csr
8128 (p_start_date DATE
8129 ,p_time_phased_type_code VARCHAR2 )
8130 IS
8131 SELECT 1
8132 FROM pa_budget_periods_v
8133 WHERE trunc(period_start_date) = trunc(p_start_date)
8134 AND period_type_code = p_time_phased_type_code;
8135
8136 --needed to lock the budget line row
8137 CURSOR l_lock_budget_line_csr( p_budget_line_rowid VARCHAR2)
8138 IS
8139 SELECT 'x'
8140 FROM pa_budget_lines
8141 WHERE rowid = p_budget_line_rowid
8142 FOR UPDATE NOWAIT;
8143
8144 --This cursor is used to get the approved rev plan type flag of the plan type
8145 CURSOR l_approved_revenue_flag_csr
8146 ( c_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE
8147 ,c_project_id pa_projects_all.project_id%TYPE)
8148 IS
8149 SELECT approved_rev_plan_type_flag
8150 FROM pa_proj_fp_options
8151 WHERE project_id=c_project_id
8152 AND fin_plan_type_id=c_fin_plan_type_id
8153 AND fin_plan_option_level_code=PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE;
8154
8155 l_app_rev_plan_type_flag VARCHAR2(1);
8156
8157 --This cursor is used to compare a currency code with pfc
8158 CURSOR l_proj_func_currency_csr
8159 ( c_project_id NUMBER
8160 ,c_currency_code VARCHAR2)
8161 IS
8162 SELECT 1
8163 FROM pa_projects_all
8164 WHERE project_id = c_project_id
8165 AND projfunc_currency_code = c_currency_code;
8166
8167 --This cursor is used to fetch the txn currencies of the plan version
8168 --and validate currency_code against them.
8169 CURSOR l_plan_ver_txn_curr_csr
8170 ( c_fin_plan_version_id NUMBER
8171 ,c_currency_code VARCHAR2)
8172 IS
8173 SELECT 1
8174 FROM pa_fp_txn_currencies
8175 WHERE fin_plan_version_id = c_fin_plan_version_id
8176 AND txn_currency_code = c_currency_code;
8177
8178 --Cursor to derive plan_class_code and etc_start_date for a budget version
8179 CURSOR budget_version_info_cur (c_budget_version_id IN NUMBER)
8180 IS
8181 SELECT pt.plan_class_code
8182 ,bv.etc_start_date
8183 FROM pa_budget_versions bv,
8184 pa_fin_plan_types_b pt
8185 WHERE bv.budget_version_id = c_budget_version_id
8186 AND pt.fin_plan_type_id = bv.fin_plan_type_id;
8187
8188 l_plan_class_code pa_fin_plan_types_b.plan_class_code%TYPE;
8189 l_etc_start_date pa_budget_versions.etc_start_date%TYPE;
8190
8191 i NUMBER := 0;
8192 l_dummy NUMBER;
8193
8194 l_api_name CONSTANT VARCHAR2(30) := 'delete_budget_line';
8195
8196 l_resource_assignment_id pa_resource_assignments.resource_assignment_id%type;
8197 l_budget_line_rowid VARCHAR(20);
8198
8199 l_err_code NUMBER;
8200 l_err_stage VARCHAR2(120);
8201 l_err_stack VARCHAR2(630);
8202
8203 l_project_id NUMBER := p_pa_project_id;
8204 l_budget_type_code pa_budget_types.budget_type_code%TYPE := p_budget_type_code;
8205 l_fin_plan_type_id NUMBER := p_fin_plan_type_id;
8206 l_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE := p_fin_plan_type_name;
8207 l_version_type pa_budget_versions.version_type%TYPE := p_version_type;
8208 l_budget_version_id NUMBER;
8209 l_budget_entry_method_code pa_budget_entry_methods.budget_entry_method_code%TYPE;
8210 l_resource_list_id NUMBER;
8211 l_budget_amount_code pa_budget_types.budget_amount_code%type;
8212 l_entry_level_code pa_proj_fp_options.cost_fin_plan_level_code%TYPE;
8213 l_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE;
8214 l_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
8215 l_categorization_code pa_budget_entry_methods.categorization_code%TYPE;
8216 l_record_version_number NUMBER;
8217 l_task_id NUMBER;
8218 l_resource_list_member_id NUMBER;
8219 l_currency_code VARCHAR2(15);
8220 l_start_date DATE;
8221
8222 l_resource_assignment_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8223 l_delete_budget_lines_tab SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
8224 l_txn_currency_code_tab SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8225 l_line_start_date_tab SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8226 l_line_end_date_tab SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8227 l_txn_currency_code VARCHAR2(15);
8228 l_line_start_date DATE;
8229 l_line_end_date DATE;
8230
8231 l_msg_count NUMBER := 0;
8232 l_msg_data VARCHAR2(2000);
8233 l_module_name VARCHAR2(80);
8234 l_data VARCHAR2(2000);
8235 l_msg_index_out NUMBER;
8236
8237 l_amg_project_number pa_projects_all.segment1%TYPE;
8238 l_amg_task_number VARCHAR2(50);
8239
8240 -- Bug# 5998035
8241 l_call_del_planning_trans VARCHAR2(1) := 'N';
8242 l_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
8243
8244 --debug variables
8245 l_debug_mode VARCHAR2(1);
8246 l_debug_level2 CONSTANT NUMBER := 2;
8247 l_debug_level3 CONSTANT NUMBER := 3;
8248 l_debug_level4 CONSTANT NUMBER := 4;
8249 l_debug_level5 CONSTANT NUMBER := 5;
8250 --Added for bug 6408139 to pass G_PA_MISS_CHAR
8251 l_pa_miss_char varchar2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
8252
8253
8254 l_cbs_enabled_project varchar2(1) :='N'; -- Added for CBS 16604257
8255 l_cbs_elem_id NUMBER(15) :=0;
8256 l_Cbs_Enabled VARCHAR2(1) := 'N'; -- Added for 16859243
8257
8258 BEGIN
8259
8260
8261 --Standard begin of API savepoint
8262 SAVEPOINT delete_budget_line_pub;
8263
8264 p_msg_count := 0;
8265 p_return_status := FND_API.G_RET_STS_SUCCESS;
8266 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
8267 l_module_name := g_module_name || ':Delete_Budget_Line ';
8268
8269 IF ( l_debug_mode = 'Y' )
8270 THEN
8271 pa_debug.set_curr_function( p_function => l_api_name
8272 ,p_debug_mode => l_debug_mode );
8273 END IF;
8274
8275 IF ( l_debug_mode = 'Y' )
8276 THEN
8277 pa_debug.g_err_stage:='Entering ' || l_api_name;
8278 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8279 END IF;
8280
8281 --Initialize the message table if requested.
8282 IF FND_API.TO_BOOLEAN( p_init_msg_list )
8283 THEN
8284 FND_MSG_PUB.initialize;
8285 END IF;
8286
8287 --Set API return status to success
8288 p_return_status := FND_API.G_RET_STS_SUCCESS;
8289
8290 --Call PA_BUDGET_PVT.validate_header_info to do the necessary
8291 --header level validations
8292 PA_BUDGET_PVT.validate_header_info
8293 ( p_api_version_number => p_api_version_number
8294 ,p_api_name => l_api_name
8295 ,p_init_msg_list => p_init_msg_list
8296 ,px_pa_project_id => l_project_id
8297 ,p_pm_project_reference => p_pm_project_reference
8298 ,p_pm_product_code => p_pm_product_code
8299 ,px_budget_type_code => l_budget_type_code
8300 ,px_fin_plan_type_id => l_fin_plan_type_id
8301 ,px_fin_plan_type_name => l_fin_plan_type_name
8302 ,px_version_type => l_version_type
8303 ,p_budget_version_number => p_version_number
8304 ,p_change_reason_code => NULL
8305 ,p_function_name => 'PA_PM_DELETE_BUDGET_LINE'
8306 ,x_budget_entry_method_code => l_budget_entry_method_code
8307 ,x_resource_list_id => l_resource_list_id
8308 ,x_budget_version_id => l_budget_version_id
8309 ,x_fin_plan_level_code => l_entry_level_code
8310 ,x_time_phased_code => l_time_phased_code
8311 ,x_plan_in_multi_curr_flag => l_multi_curr_flag
8312 ,x_budget_amount_code => l_budget_amount_code
8313 ,x_categorization_code => l_categorization_code
8314 ,x_project_number => l_amg_project_number
8315 /* Plan Amount Entry flags introduced by bug 6408139 */
8316 /*Passing all as G_PA_MISS_CHAR since validations not required*/
8317 ,px_raw_cost_flag => l_pa_miss_char
8318 ,px_burdened_cost_flag => l_pa_miss_char
8319 ,px_revenue_flag => l_pa_miss_char
8320 ,px_cost_qty_flag => l_pa_miss_char
8321 ,px_revenue_qty_flag => l_pa_miss_char
8322 ,px_all_qty_flag => l_pa_miss_char
8323 ,px_bill_rate_flag => l_pa_miss_char
8324 ,px_cost_rate_flag => l_pa_miss_char
8325 ,px_burden_rate_flag => l_pa_miss_char
8326 /* Plan Amount Entry flags introduced by bug 6408139 */
8327 ,x_msg_count => p_msg_count
8328 ,x_msg_data => p_msg_data
8329 ,x_return_status => p_return_status );
8330
8331 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8332 IF(l_debug_mode='Y') THEN
8333 pa_debug.g_err_stage := 'validate header info API falied';
8334 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8335 END IF;
8336 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8337 END IF;
8338
8339
8340 -- convert pm_task_reference to pa_task_id
8341 -- if both task_id and task_reference are not passed or NULL, then we will default to 0, because this
8342 -- is the value of task_id when budgetting is done at the project level.
8343
8344 IF (p_pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8345 OR p_pa_task_id IS NULL )
8346 AND (p_pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8347 OR p_pm_task_reference IS NULL )
8348 THEN
8349
8350 l_task_id := 0;
8351
8352 ELSE
8353
8354 PA_PROJECT_PVT.Convert_pm_taskref_to_id ( p_pa_project_id => l_project_id,
8355 p_pa_task_id => p_pa_task_id,
8356 p_pm_task_reference => p_pm_task_reference,
8357 p_out_task_id => l_task_id,
8358 p_return_status => p_return_status );
8359
8360 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
8361 THEN
8362 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8363
8364 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
8365 THEN
8366 RAISE FND_API.G_EXC_ERROR;
8367 END IF;
8368
8369 END IF;
8370
8371 l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
8372 (p_task_number=> ''
8373 ,p_task_reference => p_pm_task_reference
8374 ,p_task_id => l_task_id);
8375
8376 -- convert resource alias to (resource) member id if passed and NOT NULL
8377 -- if resource alias is (passed and not NULL)
8378 -- and resource member is (passed and not NULL)
8379 -- then we convert the alias to the id
8380 -- else we default to the uncategorized resource member
8381
8382 IF (p_resource_alias <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8383 AND p_resource_alias IS NOT NULL)
8384 OR (p_resource_list_member_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8385 AND p_resource_list_member_id IS NOT NULL)
8386 THEN
8387
8388 pa_resource_pub.Convert_alias_to_id
8389 ( p_project_id => p_pa_project_id
8390 ,p_resource_list_id => l_resource_list_id
8391 ,p_alias => p_resource_alias
8392 ,p_resource_list_member_id => p_resource_list_member_id
8393 ,p_out_resource_list_member_id => l_resource_list_member_id
8394 ,p_return_status => p_return_status );
8395
8396 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
8397 THEN
8398 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8399 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
8400 THEN
8401 RAISE FND_API.G_EXC_ERROR;
8402 END IF;
8403
8404 ELSE
8405
8406 OPEN l_uncategorized_list_csr;
8407 FETCH l_uncategorized_list_csr INTO l_resource_list_member_id;
8408 CLOSE l_uncategorized_list_csr;
8409
8410 END IF;
8411
8412 -- No check has been made to see if RLM id passed belongs to PRL stamped at Budget Version Level
8413 -- Bug 4375976 has been logged to take care of this in API pa_resource_pub.Convert_alias_to_id
8414 -- Added for CBS 16604257 & 16859243
8415 l_Cbs_Enabled := PA_ALTERNATE_TASK_PVT.Is_Cbs_Enabled(p_Project_Id => p_pa_project_id);
8416
8417 IF l_Cbs_Enabled='Y' THEN
8418 l_cbs_elem_id :=p_cbs_element_id;
8419 IF p_cbs_element_id IS NULL OR
8420 p_cbs_element_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
8421
8422 l_cbs_elem_id := PA_ALTERNATE_TASK_PVT.convert_cost_code_to_id(
8423 p_cost_code ,p_pa_project_id );
8424 END IF;
8425 ELSE
8426 l_cbs_elem_id := null;
8427 END IF;
8428
8429 --Check the existence of resource assignment
8430 OPEN l_resource_assignment_csr
8431 (l_budget_version_id
8432 ,l_task_id
8433 ,l_resource_list_member_id
8434 ,l_cbs_elem_id);
8435
8436 FETCH l_resource_assignment_csr INTO l_resource_assignment_id;
8437
8438 IF l_resource_assignment_csr%NOTFOUND
8439 THEN
8440 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8441 THEN
8442 pa_interface_utils_pub.map_new_amg_msg
8443 ( p_old_message_code => 'PA_NO_RESOURCE_ASSIGNMENT'
8444 ,p_msg_attribute => 'CHANGE'
8445 ,p_resize_flag => 'N'
8446 ,p_msg_context => 'BUDG'
8447 ,p_attribute1 => l_amg_project_number
8448 ,p_attribute2 => l_amg_task_number
8449 ,p_attribute3 => p_budget_type_code
8450 ,p_attribute4 => ''
8451 ,p_attribute5 => to_char(p_start_date));
8452 END IF;
8453
8454 CLOSE l_resource_assignment_csr;
8455 RAISE FND_API.G_EXC_ERROR;
8456
8457 END IF;
8458
8459 CLOSE l_resource_assignment_csr;
8460
8461
8462 --Period name/start date check
8463 IF p_period_name IS NOT NULL
8464 AND p_period_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8465 THEN
8466
8467 OPEN l_budget_periods_csr( p_period_name => p_period_name
8468 ,p_time_phased_type_code => l_time_phased_code );
8469
8470 FETCH l_budget_periods_csr INTO l_start_date;
8471
8472 IF l_budget_periods_csr%NOTFOUND
8473 THEN
8474 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8475 THEN
8476 pa_interface_utils_pub.map_new_amg_msg
8477 ( p_old_message_code => 'PA_PERIOD_NAME_INVALID'
8478 ,p_msg_attribute => 'CHANGE'
8479 ,p_resize_flag => 'N'
8480 ,p_msg_context => 'BUDG'
8481 ,p_attribute1 => l_amg_project_number
8482 ,p_attribute2 => l_amg_task_number
8483 ,p_attribute3 => l_budget_type_code
8484 ,p_attribute4 => ''
8485 ,p_attribute5 => to_char(p_start_date));
8486 END IF;
8487
8488 CLOSE l_budget_periods_csr;
8489 RAISE FND_API.G_EXC_ERROR;
8490 END IF;
8491 CLOSE l_budget_periods_csr;
8492
8493 ELSIF p_start_date IS NOT NULL
8494 AND p_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8495 THEN
8496
8497 -- Fix: 27-JAN-97, jwhite
8498 -- Added condition for 'G' or 'P' time-phased-type code as only
8499 -- required for period phased budgets.
8500 IF (l_time_phased_code IN ('G', 'P') ) THEN
8501
8502 OPEN l_start_date_csr(p_start_date => p_start_date
8503 ,p_time_phased_type_code => l_time_phased_code );
8504
8505 FETCH l_start_date_csr INTO l_dummy;
8506
8507 IF l_start_date_csr%NOTFOUND
8508 THEN
8509 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8510 THEN
8511 pa_interface_utils_pub.map_new_amg_msg
8512 ( p_old_message_code => 'PA_START_DATE_INVALID'
8513 ,p_msg_attribute => 'CHANGE'
8514 ,p_resize_flag => 'N'
8515 ,p_msg_context => 'PROJ'
8516 ,p_attribute1 => l_amg_project_number
8517 ,p_attribute2 => ''
8518 ,p_attribute3 => ''
8519 ,p_attribute4 => ''
8520 ,p_attribute5 => '');
8521 END IF;
8522
8523 CLOSE l_start_date_csr;
8524 RAISE FND_API.G_EXC_ERROR;
8525 END IF;
8526
8527 CLOSE l_start_date_csr;
8528
8529 END IF;--(l_time_phased_code IN ('G', 'P') )
8530
8531 l_start_date := p_start_date;
8532
8533 ELSE
8534
8535 /* Added code for Bug# 5998035 */
8536 -- If start_date and period_name are passed as NULL
8537 IF (p_period_name IS NULL and p_start_date IS NULL) THEN
8538 -- If time phased then set l_call_del_planning_trans to 'Y'
8539 IF (l_time_phased_code IN ('G', 'P') AND l_fin_plan_type_id IS NOT NULL) THEN
8540 l_call_del_planning_trans := 'Y';
8541 END IF;
8542 END IF;
8543 /* End of code for Bug# 5998035 */
8544 l_start_date := NULL; --when no start_date or period_name is passed or both are NULL
8545 --, then all periods will be deleted
8546
8547 END IF;--Period name/start date check
8548
8549 --DO G_MISS_CHAR to NULL conv for currency_code
8550 IF p_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
8551 l_currency_code := NULL;
8552 ELSE
8553 l_currency_code := p_currency_code;
8554 END IF;
8555
8556 --Following validations are required only for the new model
8557 IF l_fin_plan_type_id IS NOT NULL
8558 THEN
8559
8560 --Validate currency_code if it is not null
8561 --Validate the txn currency code provided by the user. The follwing checks are made.
8562 --If the version is an approved revenue version then the txn curr code should be PFC.
8563 --else If the version is MC enabled then txn curr code should be among the txn
8564 --currencies provided at the version level.
8565
8566 IF l_currency_code IS NOT NULL THEN
8567
8568 l_dummy := 0; --reset the value of l_dummy
8569
8570 --Get the approved revenue plan type flag
8571 OPEN l_approved_revenue_flag_csr( l_fin_plan_type_id
8572 ,l_project_id);
8573 FETCH l_approved_revenue_flag_csr INTO l_app_rev_plan_type_flag;
8574 CLOSE l_approved_revenue_flag_csr;
8575
8576 -- check for approved rev plan type flag is made here because in case plan type is at
8577 -- cost and revenue separately then version can have currencies other than PFC.
8578 IF( nvl(l_app_rev_plan_type_flag,'N') = 'Y' AND
8579 l_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST)
8580 THEN
8581
8582 OPEN l_proj_func_currency_csr( l_project_id
8583 ,l_currency_code);
8584 FETCH l_proj_func_currency_csr INTO l_dummy;
8585 CLOSE l_proj_func_currency_csr;
8586
8587 IF l_dummy = 0 THEN --currency_code not equal to PFC
8588
8589 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8590 THEN
8591 PA_UTILS.ADD_MESSAGE
8592 ( p_app_short_name => 'PA',
8593 p_msg_name => 'PA_FP_TXN_NOT_PFC_FOR_APP_REV',
8594 p_token1 => 'PROJECT',
8595 p_value1 => l_amg_project_number,
8596 p_token2 => 'PLAN_TYPE',
8597 p_value2 => l_fin_plan_type_name,
8598 p_token3 => 'CURRENCY',
8599 p_value3 => l_currency_code);
8600 END IF;
8601
8602 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8603
8604 END IF;--l_dummy = 0
8605
8606 ELSE-- Version is not approved for revenue. The txn curr must be available in fp txn curr table
8607
8608 OPEN l_plan_ver_txn_curr_csr( l_budget_version_id
8609 ,l_currency_code);
8610 FETCH l_plan_ver_txn_curr_csr INTO l_dummy;
8611 CLOSE l_plan_ver_txn_curr_csr;
8612
8613 IF l_dummy = 0 THEN --currency_code is not valid
8614
8615 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8616 THEN
8617 PA_UTILS.ADD_MESSAGE
8618 ( p_app_short_name => 'PA',
8619 p_msg_name => 'PA_FP_TXN_NOT_ADDED_FOR_PT',
8620 p_token1 => 'PROJECT',
8621 p_value1 => l_amg_project_number,
8622 p_token2 => 'PLAN_TYPE',
8623 p_value2 => l_fin_plan_type_name,
8624 p_token3 => 'CURRENCY',
8625 p_value3 => l_currency_code);
8626 END IF;
8627
8628 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8629
8630 END IF;--l_dummy = 0
8631
8632 END IF;
8633
8634 END IF;--l_currency_code IS NOT NULL
8635
8636 --If multi-currency is enabled and one of period_name or start_date is
8637 --not null, then currency_code cannot be null.
8638 IF (l_multi_curr_flag = 'Y' AND
8639 l_currency_code IS NULL AND
8640 l_start_date IS NOT NULL)
8641 THEN
8642 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8643 THEN
8644 PA_UTILS.add_message
8645 (p_app_short_name => 'PA'
8646 ,p_msg_name => 'PA_FP_CURRENCY_NULL_AMG'
8647 ,p_token1 => 'PROJECT'
8648 ,p_value1 => l_amg_project_number
8649 ,p_token2 => 'PLAN_TYPE'
8650 ,p_value2 => l_fin_plan_type_name
8651 ,p_token3 => 'TASK'
8652 ,p_value3 => l_amg_task_number
8653 ,p_token4 => 'START_DATE'
8654 ,p_value4 => to_char(l_start_date) );
8655 END IF;
8656
8657 IF l_debug_mode = 'Y' THEN
8658 pa_debug.g_err_stage := 'For multi-currency enabled, currency code is'
8659 || 'null but start_date is not null';
8660 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8661 END IF;
8662
8663 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8664 END IF;
8665
8666
8667 --In case of new model, check if Actuals have been entered for the FORECAST Line.
8668 OPEN budget_version_info_cur(l_budget_version_id);
8669 FETCH budget_version_info_cur
8670 INTO l_plan_class_code
8671 ,l_etc_start_date;
8672 CLOSE budget_version_info_cur;
8673 --Since we have already validated the presence of a budget version id
8674 --in PA_BUDGET_PVT.validate_header_info, hence we do not check for
8675 --budget_version_info_cur%NOT FOUND here.
8676
8677 /* Added for Bug# 5998035 */
8678 IF ( l_time_phased_code NOT IN ('G', 'P') AND l_etc_start_date IS NULL) THEN
8679 l_call_del_planning_trans := 'Y';
8680 END IF;
8681 IF (l_plan_class_code IS NOT NULL AND
8682 l_plan_class_code = 'FORECAST' AND
8683 l_etc_start_date IS NOT NULL AND
8684 ((l_start_date IS NOT NULL AND l_etc_start_date > l_start_date) OR l_start_date IS NULL) AND -- Bug 5998035
8685 l_time_phased_code IS NOT NULL AND
8686 l_time_phased_code <> 'N')
8687 THEN
8688 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8689 THEN
8690 PA_UTILS.add_message
8691 (p_app_short_name => 'PA'
8692 ,p_msg_name => 'PA_FP_FCST_ACTUALS_AMG'
8693 ,p_token1 => 'PROJECT'
8694 ,p_value1 => l_amg_project_number
8695 ,p_token2 => 'PLAN_TYPE'
8696 ,p_value2 => l_fin_plan_type_name
8697 ,p_token3 => 'TASK'
8698 ,p_value3 => l_amg_task_number
8699 ,p_token4 => 'CURRENCY'
8700 ,p_value4 => l_currency_code
8701 ,p_token5 => 'START_DATE'
8702 ,p_value5 => to_char(l_start_date) );
8703 END IF;
8704
8705 IF l_debug_mode = 'Y' THEN
8706 pa_debug.g_err_stage := 'Forecast Line has actuals and hence cannot be edited';
8707 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8708 END IF;
8709
8710 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8711 END IF;--end of actuals-on-FORECAST check
8712
8713 ELSE -- old FORMS based Budgets Model
8714
8715 --Currency_code value, even if specified, should be ignored in
8716 --case of old Budgets Model
8717 l_currency_code := NULL;
8718
8719 END IF; --l_fin_plan_type_id IS NOT NULL
8720
8721
8722 --Checking existence of budget line
8723 /* Added code for Bug# 5998035 */
8724 --Skipping this loop while calling delete_planning_transactions
8725 IF ( l_call_del_planning_trans <> 'Y' ) THEN --Bug# 5998035
8726 OPEN l_budget_line_rowid_csr( l_resource_assignment_id
8727 ,l_start_date
8728 ,l_currency_code );
8729
8730 FETCH l_budget_line_rowid_csr INTO l_budget_line_rowid
8731 ,l_txn_currency_code
8732 ,l_line_start_date
8733 ,l_line_end_date ;
8734
8735 IF l_budget_line_rowid_csr%NOTFOUND
8736 THEN
8737 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8738 THEN
8739 pa_interface_utils_pub.map_new_amg_msg
8740 ( p_old_message_code => 'PA_BUDGET_LINE_NOT_FOUND'
8741 ,p_msg_attribute => 'CHANGE'
8742 ,p_resize_flag => 'N'
8743 ,p_msg_context => 'BUDG'
8744 ,p_attribute1 => l_amg_project_number
8745 ,p_attribute2 => l_amg_task_number
8746 ,p_attribute3 => l_budget_type_code
8747 ,p_attribute4 => ''
8748 ,p_attribute5 => to_char(l_start_date));
8749 END IF;
8750
8751 CLOSE l_budget_line_rowid_csr;
8752 RAISE FND_API.G_EXC_ERROR;
8753
8754 END IF;
8755
8756 --Loop for deleting budget lines begins
8757 WHILE l_budget_line_rowid_csr%FOUND LOOP
8758
8759 --Do the processing for FORMS based Budgets Model
8760 IF l_budget_type_code IS NOT NULL
8761 THEN
8762 BEGIN
8763
8764 OPEN l_lock_budget_line_csr( l_budget_line_rowid );
8765 CLOSE l_lock_budget_line_csr;
8766
8767 /*FPB2: MRC PA_BUDGET_LINES_V_PKG.delete_row( l_budget_line_rowid ); */
8768 pa_budget_lines_v_pkg.delete_row(X_Rowid => l_budget_line_rowid);
8769 -- Bug Fix: 4569365. Removed MRC code.
8770 --, x_mrc_flag => 'Y'); /* FPB2: Added x_mrc_flag for MRC changes */
8771
8772
8773 --this exception part is here because this procedure doesn't handle the exceptions itself.
8774 EXCEPTION
8775 WHEN ROW_ALREADY_LOCKED THEN RAISE;
8776
8777 WHEN OTHERS
8778 THEN
8779
8780 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8781 THEN
8782 FND_MSG_PUB.add_exc_msg
8783 ( p_pkg_name => 'PA_BUDGET_LINES_V_PKG'
8784 , p_procedure_name => 'DELETE_ROW'
8785 , p_error_text => SQLCODE );
8786
8787 END IF;
8788
8789 CLOSE l_budget_line_rowid_csr;
8790
8791 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8792 END;
8793
8794 ELSIF l_fin_plan_type_id IS NOT NULL --new FINPLAN model
8795 THEN
8796
8797 i := i + 1; --incrementing the counter
8798
8799 --Store the data for PA_FP_CALC_PLAN_PKG.calculate API call
8800 l_resource_assignment_tab.extend(1);
8801 l_delete_budget_lines_tab.extend(1);
8802 l_txn_currency_code_tab.extend(1);
8803 l_line_start_date_tab.extend(1);
8804 l_line_end_date_tab.extend(1);
8805
8806 l_resource_assignment_tab(i) := l_resource_assignment_id;
8807 l_delete_budget_lines_tab(i) := 'Y';
8808 l_txn_currency_code_tab(i) := l_txn_currency_code;
8809 l_line_start_date_tab(i) := l_line_start_date;
8810 l_line_end_date_tab(i) := l_line_end_date;
8811
8812 END IF;--l_budget_type_code IS NOT NULL
8813
8814 FETCH l_budget_line_rowid_csr INTO l_budget_line_rowid
8815 ,l_txn_currency_code
8816 ,l_line_start_date
8817 ,l_line_end_date ;
8818
8819 END LOOP;
8820
8821 /* Added for Bug# 5998035 */
8822 ELSE
8823
8824 l_resource_assignment_tab.extend(1);
8825 l_currency_code_tbl.extend(1);
8826
8827 l_resource_assignment_tab(1) := l_resource_assignment_id;
8828 l_currency_code_tbl(1) := l_currency_code;
8829
8830 END IF; -- Bug# 5998035
8831
8832 IF l_budget_line_rowid_csr%ISOPEN THEN -- Bug 5998035
8833 -- Bug 6854131
8834 CLOSE l_budget_line_rowid_csr;
8835 END IF;
8836
8837 IF l_budget_type_code IS NOT NULL --old budgets model
8838 THEN
8839 --summarizing the totals in the table pa_budget_versions
8840 PA_BUDGET_UTILS.summerize_project_totals( x_budget_version_id => l_budget_version_id
8841 , x_err_code => l_err_code
8842 , x_err_stage => l_err_stage
8843 , x_err_stack => l_err_stack );
8844
8845 IF l_err_code > 0
8846 THEN
8847
8848 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8849 THEN
8850
8851 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
8852 THEN
8853 pa_interface_utils_pub.map_new_amg_msg
8854 ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
8855 ,p_msg_attribute => 'CHANGE'
8856 ,p_resize_flag => 'N'
8857 ,p_msg_context => 'BUDG'
8858 ,p_attribute1 => l_amg_project_number
8859 ,p_attribute2 => l_amg_task_number
8860 ,p_attribute3 => p_budget_type_code
8861 ,p_attribute4 => ''
8862 ,p_attribute5 => to_char(p_start_date));
8863 ELSE
8864 pa_interface_utils_pub.map_new_amg_msg
8865 ( p_old_message_code => l_err_stage
8866 ,p_msg_attribute => 'CHANGE'
8867 ,p_resize_flag => 'N'
8868 ,p_msg_context => 'BUDG'
8869 ,p_attribute1 => l_amg_project_number
8870 ,p_attribute2 => l_amg_task_number
8871 ,p_attribute3 => p_budget_type_code
8872 ,p_attribute4 => ''
8873 ,p_attribute5 => to_char(p_start_date));
8874 END IF;
8875
8876 END IF;
8877
8878 RAISE FND_API.G_EXC_ERROR;
8879
8880 ELSIF l_err_code < 0
8881 THEN
8882
8883 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8884 THEN
8885
8886 FND_MSG_PUB.add_exc_msg
8887 ( p_pkg_name => 'PA_BUDGET_UTILS'
8888 , p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
8889 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
8890
8891 END IF;
8892
8893 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8894
8895 END IF;
8896
8897 ELSIF l_fin_plan_type_id IS NOT NULL --new FINPLAN model
8898 THEN
8899
8900 --Lock the budget version before deleting a budget line
8901 l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
8902 (p_budget_version_id => l_budget_version_id);
8903
8904 PA_FIN_PLAN_PVT.lock_unlock_version
8905 ( p_budget_version_id => l_budget_version_id
8906 ,p_record_version_number => l_record_version_number
8907 ,p_action => 'L'
8908 ,p_user_id => FND_GLOBAL.User_id
8909 ,p_person_id => null
8910 ,x_return_status => p_return_status
8911 ,x_msg_count => p_msg_count
8912 ,x_msg_data => p_msg_data);
8913
8914 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8915 -- Error message is not added here as the api lock_unlock_version
8916 -- adds the message to stack
8917 IF(l_debug_mode='Y') THEN
8918 pa_debug.g_err_stage := 'Failed in locking the version ' || l_budget_version_id;
8919 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8920 END IF;
8921 RAISE FND_API.G_EXC_ERROR;
8922 END IF;
8923
8924 --Call PA_FP_CALC_PLAN_PKG.calculate api to delete the budget line(s)
8925 /* Added the following code for Bug# 5998035 */
8926 IF (l_call_del_planning_trans = 'Y') THEN
8927 -- Call PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions if period_name and start_date are NULL
8928 PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions
8929 (p_context => l_plan_class_code
8930 ,p_task_or_res => 'ASSIGNMENT'
8931 ,p_resource_assignment_tbl => l_resource_assignment_tab
8932 ,p_currency_code_tbl => l_currency_code_tbl
8933 ,x_return_status => p_return_status
8934 ,x_msg_count => p_msg_count
8935 ,x_msg_data => p_msg_data
8936 );
8937 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8938 IF(l_debug_mode='Y') THEN
8939 pa_debug.g_err_stage := 'PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions API has thrown error';
8940 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8941 END IF;
8942 RAISE FND_API.G_EXC_ERROR;
8943 END IF;
8944 /* End of code for Bug# 5998035 */
8945 ELSE
8946 PA_FP_CALC_PLAN_PKG.calculate
8947 (p_project_id => l_project_id
8948 ,p_budget_version_id => l_budget_version_id
8949 ,p_spread_required_flag => 'N'
8950 ,p_source_context => 'BUDGET_LINE'
8951 ,p_calling_module => PA_FP_CONSTANTS_PKG.G_AMG_API
8952 ,p_resource_assignment_tab => l_resource_assignment_tab
8953 ,p_delete_budget_lines_tab => l_delete_budget_lines_tab
8954 ,p_txn_currency_code_tab => l_txn_currency_code_tab
8955 ,p_line_start_date_tab => l_line_start_date_tab
8956 ,p_line_end_date_tab => l_line_end_date_tab
8957 ,x_return_status => p_return_status
8958 ,x_msg_count => p_msg_count
8959 ,x_msg_data => p_msg_data );
8960 END IF;
8961
8962 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8963 IF(l_debug_mode='Y') THEN
8964 pa_debug.g_err_stage := 'PA_FP_CALC_PLAN_PKG.calculate API has thrown error';
8965 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8966 END IF;
8967 RAISE FND_API.G_EXC_ERROR;
8968 END IF;
8969
8970 --unlock the budget version after deleting the budget line
8971 l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
8972 (p_budget_version_id => l_budget_version_id);
8973
8974 PA_FIN_PLAN_PVT.lock_unlock_version
8975 ( p_budget_version_id => l_budget_version_id
8976 ,p_record_version_number => l_record_version_number
8977 ,p_action => 'U'
8978 ,p_user_id => FND_GLOBAL.User_id
8979 ,p_person_id => null
8980 ,x_return_status => p_return_status
8981 ,x_msg_count => p_msg_count
8982 ,x_msg_data => p_msg_data);
8983
8984 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8985 -- Error message is not added here as the api lock_unlock_version
8986 -- adds the message to stack
8987 IF(l_debug_mode='Y') THEN
8988 pa_debug.g_err_stage := 'Failed in unlocking the version ' || l_budget_version_id;
8989 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8990 END IF;
8991 RAISE FND_API.G_EXC_ERROR;
8992 END IF;
8993
8994 END IF;--end of code to delete budget line
8995
8996 IF fnd_api.to_boolean(p_commit)
8997 THEN
8998 COMMIT;
8999 END IF;
9000
9001 IF ( l_debug_mode = 'Y' ) THEN
9002 pa_debug.reset_curr_function;
9003 END IF;
9004
9005
9006 EXCEPTION
9007
9008 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc
9009 THEN
9010
9011 ROLLBACK TO delete_budget_line_pub;
9012
9013 p_return_status := FND_API.G_RET_STS_ERROR;
9014 l_msg_count := FND_MSG_PUB.count_msg;
9015
9016 IF l_msg_count = 1 and p_msg_data IS NULL THEN
9017 PA_INTERFACE_UTILS_PUB.get_messages
9018 (p_encoded => FND_API.G_TRUE
9019 ,p_msg_index => 1
9020 ,p_msg_count => l_msg_count
9021 ,p_msg_data => l_msg_data
9022 ,p_data => l_data
9023 ,p_msg_index_out => l_msg_index_out);
9024 p_msg_data := l_data;
9025 p_msg_count := l_msg_count;
9026 ELSE
9027 p_msg_count := l_msg_count;
9028 END IF;
9029
9030 IF ( l_debug_mode = 'Y' ) THEN
9031 pa_debug.reset_curr_function;
9032 END IF;
9033
9034 RETURN;
9035
9036
9037 WHEN FND_API.G_EXC_ERROR
9038 THEN
9039
9040 ROLLBACK TO delete_budget_line_pub;
9041
9042 p_return_status := FND_API.G_RET_STS_ERROR;
9043
9044 FND_MSG_PUB.Count_And_Get
9045 ( p_count => p_msg_count ,
9046 p_data => p_msg_data );
9047
9048 IF ( l_debug_mode = 'Y' ) THEN
9049 pa_debug.reset_curr_function;
9050 END IF;
9051
9052
9053 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
9054 THEN
9055
9056 ROLLBACK TO delete_budget_line_pub;
9057
9058 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9059
9060 FND_MSG_PUB.Count_And_Get
9061 ( p_count => p_msg_count ,
9062 p_data => p_msg_data );
9063
9064 IF ( l_debug_mode = 'Y' ) THEN
9065 pa_debug.reset_curr_function;
9066 END IF;
9067
9068
9069 WHEN ROW_ALREADY_LOCKED
9070 THEN
9071 ROLLBACK TO delete_budget_line_pub;
9072
9073 p_return_status := FND_API.G_RET_STS_ERROR;
9074
9075 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9076 THEN
9077 FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
9078 FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_project_number);
9079 FND_MESSAGE.SET_TOKEN('TASK', l_amg_task_number);
9080 FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', l_budget_type_code);
9081 FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
9082 FND_MESSAGE.SET_TOKEN('START_DATE',fnd_date.date_to_chardate(dateval => p_start_date, calendar_aware => 1)); -- rmunjulu pass additional parameter to make it calendar aware
9083 FND_MESSAGE.SET_TOKEN('ENTITY', 'G_BUDGET_LINE_CODE');
9084 FND_MSG_PUB.ADD;
9085 END IF;
9086
9087 FND_MSG_PUB.Count_And_Get
9088 ( p_count => p_msg_count ,
9089 p_data => p_msg_data );
9090
9091 IF ( l_debug_mode = 'Y' ) THEN
9092 pa_debug.reset_curr_function;
9093 END IF;
9094
9095
9096 WHEN OTHERS THEN
9097
9098 ROLLBACK TO delete_budget_line_pub;
9099
9100 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9101
9102 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9103 THEN
9104 FND_MSG_PUB.add_exc_msg
9105 ( p_pkg_name => G_PKG_NAME
9106 , p_procedure_name => l_api_name );
9107
9108 END IF;
9109
9110 FND_MSG_PUB.Count_And_Get
9111 ( p_count => p_msg_count ,
9112 p_data => p_msg_data );
9113
9114 IF ( l_debug_mode = 'Y' ) THEN
9115 pa_debug.reset_curr_function;
9116 END IF;
9117
9118 END delete_budget_line;
9119
9120
9121 ----------------------------------------------------------------------------------------
9122 --Name: update_budget
9123 --Type: Procedure
9124 --Description: This procedure can be used to update a working budget and it's
9125 -- budget lines.
9126 --
9127 --Called subprograms: pa_budget_pvt.insert_budget_line
9128 -- pa_budget_pvt.update_budget_line_sql
9129 --
9130 --
9131 --
9132 --History:
9133 -- 14-OCT-1996 L. de Werker Created
9134 -- 19-NOV-1996 L. de Werker Changed for use of INSERT_BUDGET_LINE and
9135 -- UPDATE_BUDGET_LINE_SQL
9136 -- 28-NOV-1996 L. de Werker Added 16 parameters for descriptive flexfields
9137 -- 05-DEC-1996 L. de Werker Added validation for change_reason_code
9138 -- Corrected error when no resource assignment is found.
9139 -- 26-APR-2005 Bug 4224464. Changed the procedure update_budget to support finplan model.
9140
9141 PROCEDURE update_budget
9142 ( p_api_version_number IN NUMBER
9143 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
9144 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
9145 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9146 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9147 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9148 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9149 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9150 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9151 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9152 ,p_change_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9153 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9154 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9155 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9156 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9157 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9158 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9159 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9160 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9161 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9162 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9163 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9164 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9165 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9166 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9167 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9168 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9169 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9170 ,p_budget_lines_in IN budget_line_in_tbl_type
9171 ,p_budget_lines_out OUT NOCOPY budget_line_out_tbl_type
9172 --Added for the bug 3453650
9173 ,p_resource_list_id IN pa_budget_versions.resource_list_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9174 ,p_set_current_working_flag IN pa_budget_versions.current_working_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9175 -- ,p_locked_by_person_id IN pa_budget_versions.locked_by_person_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9176 ,p_budget_version_number IN pa_budget_versions.version_number%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9177 ,p_budget_version_name IN pa_budget_versions.version_name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9178 ,p_version_type IN pa_budget_versions.version_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3453650
9179 ,p_finplan_type_id IN pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9180 ,p_finplan_type_name IN pa_fin_plan_types_vl.name%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9181 ,p_plan_in_multi_curr_flag IN pa_proj_fp_options.plan_in_multi_curr_flag%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9182 ,p_time_phased_code IN pa_proj_fp_options.cost_time_phased_code%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9183 ,p_projfunc_cost_rate_type IN pa_proj_fp_options.projfunc_cost_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9184 ,p_projfunc_cost_rate_date_typ IN pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9185 ,p_projfunc_cost_rate_date IN pa_proj_fp_options.projfunc_cost_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
9186 ,p_projfunc_cost_exchange_rate IN pa_budget_lines.projfunc_cost_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9187 ,p_projfunc_rev_rate_type IN pa_proj_fp_options.projfunc_rev_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9188 ,p_projfunc_rev_rate_date_typ IN pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9189 ,p_projfunc_rev_rate_date IN pa_proj_fp_options.projfunc_rev_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
9190 ,p_projfunc_rev_exchange_rate IN pa_budget_lines.projfunc_cost_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9191 ,p_project_cost_rate_type IN pa_proj_fp_options.project_cost_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9192 ,p_project_cost_rate_date_typ IN pa_proj_fp_options.project_cost_rate_date_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9193 ,p_project_cost_rate_date IN pa_proj_fp_options.project_cost_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
9194 ,p_project_cost_exchange_rate IN pa_budget_lines.project_cost_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9195 ,p_project_rev_rate_type IN pa_proj_fp_options.project_rev_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9196 ,p_project_rev_rate_date_typ IN pa_proj_fp_options.project_rev_rate_date_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9197 ,p_project_rev_rate_date IN pa_proj_fp_options.project_rev_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
9198 ,p_project_rev_exchange_rate IN pa_budget_lines.project_rev_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9199 /* Plan Amount Entry flags introduced by bug 6408139 */
9200 ,p_raw_cost_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9201 ,p_burdened_cost_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9202 ,p_revenue_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9203 ,p_cost_qty_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9204 ,p_revenue_qty_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9205 ,p_all_qty_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9206 ,p_bill_rate_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9207 ,p_cost_rate_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9208 ,p_burden_rate_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9209 )
9210 IS
9211
9212
9213 --needed to check the validity of the incoming budget type
9214
9215 CURSOR l_budget_type_csr
9216 (p_budget_type_code VARCHAR2 )
9217 IS
9218 SELECT budget_amount_code
9219 FROM pa_budget_types
9220 WHERE budget_type_code = p_budget_type_code;
9221
9222 --needed to check whether budget line already exists
9223
9224 CURSOR l_budget_line_csr
9225 (p_resource_assigment_id NUMBER
9226 ,p_budget_start_date DATE )
9227 IS
9228 SELECT 'X'
9229 FROM pa_budget_lines
9230 WHERE resource_assignment_id = p_resource_assigment_id
9231 AND start_date = p_budget_start_date;
9232
9233 --needed to get the current budget version data
9234
9235 CURSOR l_budget_version_csr
9236 ( p_project_id NUMBER
9237 , p_budget_type_code VARCHAR2 )
9238 IS
9239 SELECT budget_version_id
9240 , budget_entry_method_code
9241 , resource_list_id
9242 , change_reason_code
9243 , description
9244 FROM pa_budget_versions
9245 WHERE project_id = p_project_id
9246 AND budget_type_code = p_budget_type_code
9247 AND budget_status_code = 'W';
9248
9249 --needed to get the current budget entry method data
9250
9251 CURSOR l_budget_entry_method_csr
9252 ( p_budget_entry_method_code VARCHAR2)
9253 IS
9254 SELECT time_phased_type_code
9255 , entry_level_code
9256 , categorization_code
9257 FROM pa_budget_entry_methods
9258 WHERE budget_entry_method_code = p_budget_entry_method_code;
9259
9260 --needed to get the resource assignment for this budget_version / task / member combination
9261
9262 CURSOR l_resource_assignment_csr
9263 (p_budget_version_id NUMBER
9264 ,p_task_id NUMBER
9265 ,p_member_id NUMBER
9266 ,p_c_cbs_element_id NUMBER)
9267 IS
9268 SELECT resource_assignment_id
9269 FROM pa_resource_assignments
9270 WHERE budget_version_id = p_budget_version_id
9271 AND task_id = p_task_id
9272 AND resource_list_member_id = p_member_id
9273 and NVL(CBS_ELEMENT_ID,-1)=NVL(p_c_cbs_element_id,-1); --Bug 16604257
9274
9275 -- needed to get the budget_start_date of a period
9276
9277 CURSOR l_budget_periods_csr
9278 (p_period_name VARCHAR2
9279 ,p_period_type_code VARCHAR2 )
9280 IS
9281 SELECT trunc(period_start_date)
9282 FROM pa_budget_periods_v
9283 WHERE period_name = p_period_name
9284 AND period_type_code = p_period_type_code;
9285
9286 -- the uncategorized resource list
9287
9288
9289
9290
9291 -- FP.M Resource LIst Data Model Impact Changes, 09-JUN-04, jwhite -----------------------------
9292
9293 -- Augmented original code with additional filter
9294
9295 /* -- Original Logic
9296
9297 CURSOR l_uncategorized_list_csr
9298 IS
9299 SELECT prlm.resource_list_member_id
9300 FROM pa_resource_lists prl
9301 , pa_resource_list_members prlm
9302 WHERE prl.resource_list_id = prlm.resource_list_id
9303 AND prl.uncategorized_flag='Y';
9304
9305 */
9306
9307 -- FP.M Data Model Logic
9308
9309 CURSOR l_uncategorized_list_csr
9310 IS
9311 SELECT prlm.resource_list_member_id
9312 FROM pa_resource_lists prl
9313 , pa_resource_list_members prlm
9314 WHERE prl.resource_list_id = prlm.resource_list_id
9315 AND prl.uncategorized_flag='Y'
9316 and prlm.resource_class_code = 'FINANCIAL_ELEMENTS';
9317
9318
9319 -- End: FP.M Resource LIst Data Model Impact Changes -----------------------------
9320
9321
9322
9323
9324 CURSOR l_budget_change_reason_csr ( p_change_reason_code VARCHAR2 )
9325 IS
9326 SELECT 'x'
9327 FROM pa_lookups
9328 WHERE lookup_type = 'BUDGET CHANGE REASON'
9329 AND lookup_code = p_change_reason_code;
9330
9331 --needed for locking of budget rows
9332
9333 CURSOR l_lock_budget_csr( p_budget_version_id NUMBER )
9334 IS
9335 SELECT 'x'
9336 FROM pa_budget_versions bv
9337 , pa_resource_assignments ra
9338 , pa_budget_lines bl
9339 WHERE bv.budget_version_id = p_budget_version_id
9340 AND bv.budget_version_id = ra.budget_version_id (+)
9341 AND ra.resource_assignment_id = bl.resource_assignment_id (+)
9342 AND bv.ci_id IS NULL -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause bv.ci_id IS NULL--Bug # 3507156
9343 FOR UPDATE OF bv.budget_version_id,ra.budget_version_id,bl.resource_assignment_id NOWAIT;
9344
9345 l_api_name CONSTANT VARCHAR2(30) := 'update_budget';
9346
9347 l_return_status VARCHAR2(1);
9348 l_project_id NUMBER;
9349 l_task_id NUMBER;
9350 l_dummy VARCHAR2(1);
9351 l_budget_version_id NUMBER;
9352 l_budget_entry_method_code VARCHAR2(30);
9353 l_change_reason_code VARCHAR2(30);
9354 l_description VARCHAR2(255);
9355 l_budget_line_index NUMBER;
9356 l_budget_line_in_rec pa_budget_pub.budget_line_in_rec_type;
9357 l_time_phased_type_code VARCHAR2(30);
9358 l_resource_assignment_id NUMBER;
9359 l_budget_start_date DATE;
9360 l_resource_list_id NUMBER;
9361 l_resource_list_member_id NUMBER;
9362 l_resource_name VARCHAR2(80); --bug 3711693
9363 l_budget_amount_code VARCHAR2(30);
9364 l_entry_level_code VARCHAR2(30);
9365 l_categorization_code VARCHAR2(30);
9366
9367 l_msg_count NUMBER;
9368 l_msg_data VARCHAR2(2000);
9369
9370 l_err_code NUMBER;
9371 l_err_stage VARCHAR2(120);
9372 l_err_stack VARCHAR2(630);
9373
9374 --used by dynamic SQL
9375 l_statement VARCHAR2(2000);
9376 l_update_yes_flag VARCHAR2(1);
9377 l_cursor_id NUMBER;
9378 l_rows NUMBER;
9379 l_new_resource_assignment BOOLEAN;
9380 l_function_allowed VARCHAR2(1);
9381 l_resp_id NUMBER := 0;
9382 l_user_id NUMBER := 0;
9383 l_module_name VARCHAR2(80);
9384 l_budget_rlmid NUMBER;
9385 l_budget_alias VARCHAR2(80); --bug 3711693
9386 l_uncategorized_list_id NUMBER;
9387 l_uncategorized_rlmid NUMBER;
9388 l_uncategorized_resid NUMBER;
9389 l_track_as_labor_flag VARCHAR2(1);
9390 l_multi_currency_billing_flag PA_PROJECTS_ALL.MULTI_CURRENCY_BILLING_FLAG%TYPE;
9391
9392 temp_budget_start_date DATE; -- adding this variable to store the budget_start_date value bug#12424439 ->FP:Bug#12606319
9393
9394 l_amg_segment1 VARCHAR2(25);
9395 l_amg_task_number VARCHAR2(50);
9396
9397 --needed to get the field values associated to a AMG message
9398
9399 CURSOR l_amg_project_csr
9400 (p_pa_project_id pa_projects.project_id%type)
9401 IS
9402 SELECT segment1
9403 FROM pa_projects p
9404 WHERE p.project_id = p_pa_project_id;
9405
9406 CURSOR l_amg_task_csr
9407 (p_pa_task_id pa_tasks.task_id%type)
9408 IS
9409 SELECT task_number
9410 FROM pa_tasks p
9411 WHERE p.task_id = p_pa_task_id;
9412
9413 p_multiple_task_msg VARCHAR2(1) := 'T';
9414
9415 --Added for the bug 3453650
9416 CURSOR l_budget_attrs_csr(p_budget_type_code VARCHAR2,p_project_id number)
9417 IS
9418 SELECT BUDGET_VERSION_ID,version_name,budget_entry_method_code,
9419 RESOURCE_LIST_ID,CHANGE_REASON_CODE,DESCRIPTION
9420 FROM PA_BUDGET_VERSIONS
9421 --WHERE VERSION_NAME=p_budget_version_number
9422 Where budget_type_code=p_budget_type_code
9423 and project_id = p_project_id
9424 and budget_status_code = 'W';
9425
9426 /* Version number is mandatory for the finplan model */
9427 CURSOR l_finplan_attrs_csr(c_budget_version_id NUMBER)
9428 IS
9429 SELECT version_name,CURRENT_WORKING_FLAG,
9430 RESOURCE_LIST_ID,CHANGE_REASON_CODE,DESCRIPTION,version_type
9431 FROM PA_BUDGET_VERSIONS
9432 WHERE budget_version_id = c_budget_version_id;
9433
9434 CURSOR l_finplan_type_name_csr(p_finplan_type_id NUMBER)
9435 IS
9436 SELECT name
9437 FROM pa_fin_plan_types_vl
9438 WHERE fin_plan_type_id=p_finplan_type_id;
9439
9440
9441
9442 CURSOR get_resource_list_name_csr(p_resource_list_id NUMBER)
9443 IS
9444 SELECT name
9445 FROM pa_resource_lists
9446 WHERE p_resource_list_id=p_resource_list_id;
9447
9448 CURSOR get_status_code_csr(p_budget_version_id NUMBER)
9449 IS
9450 select budget_status_code
9451 from pa_budget_versions
9452 where budget_version_id = p_budget_version_id;
9453
9454 CURSOR l_finplan_line_csr
9455 (p_resource_assigment_id NUMBER
9456 ,p_budget_start_date DATE
9457 ,p_txn_currency_code VARCHAR2)
9458 IS
9459 SELECT 'X'
9460 FROM pa_budget_lines
9461 WHERE resource_assignment_id = p_resource_assigment_id
9462 AND start_date = p_budget_start_date
9463 AND txn_currency_code = p_txn_currency_code;
9464
9465 /*Added a new cursor c_dff_values for Bug 6417360*/
9466 cursor c_dff_values(p_budget_version_id NUMBER)
9467 is
9468 select attribute_category,
9469 attribute1,
9470 attribute2,
9471 attribute3,
9472 attribute4,
9473 attribute5,
9474 attribute6,
9475 attribute7,
9476 attribute8,
9477 attribute9,
9478 attribute10,
9479 attribute11,
9480 attribute12,
9481 attribute13,
9482 attribute14,
9483 attribute15
9484 from pa_budget_versions
9485 where budget_version_id = p_budget_version_id;
9486 /*End of code for Bug 6417360*/
9487
9488 l_budget_version_name pa_budget_versions.version_name%TYPE := null;
9489 l_fin_plan_type_id number;
9490 l_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE:=null;
9491 l_current_working_flag pa_budget_versions.current_working_flag%TYPE :=null;
9492 l_budget_entry_code pa_budget_versions.budget_entry_method_code%TYPE :=null;
9493 -- l_locked_by_person_id pa_budget_versions.locked_by_person_id%TYPE;
9494 l_record_version_number pa_budget_versions.record_version_number%TYPE;
9495
9496 l_amount_set_id pa_proj_fp_options.all_amount_set_id%TYPE;
9497 l_fin_plan_level_code pa_proj_fp_options.cost_fin_plan_level_code%TYPE :=null;
9498 l_person_id per_all_people_f.person_id%TYPE;
9499 l_resource_id per_all_people_f.person_id%TYPE;
9500 l_baselined_version_id NUMBER;
9501 l_debug_mode VARCHAR2(1);
9502 l_version_type pa_budget_versions.version_type%TYPE;
9503 l_curr_work_version_id VARCHAR2(15);
9504 l_debug_level5 CONSTANT NUMBER :=5;
9505 l_baselined_Ver_options_id VARCHAR2(15);
9506 l_budget_lines_in budget_line_in_tbl_type;
9507 l_debug_level3 CONSTANT NUMBER := 3;
9508 l_finplan_lines_tab pa_fin_plan_pvt.budget_lines_tab;
9509 l_uncategorized_res_list_id pa_resource_list_members.resource_list_id%TYPE;
9510 l_unit_of_measure pa_resources.unit_of_measure%TYPE;
9511 l_unc_track_as_labor_flag pa_resource_list_members.track_as_labor_flag%TYPE;
9512 l_unc_unit_of_measure pa_resources.unit_of_measure%TYPE;
9513 -- Bug Fix: 4569365. Removed MRC code.
9514 -- l_calling_context pa_mrc_finplan.g_calling_module%TYPE;
9515 l_calling_context VARCHAR2(30);
9516
9517 l_budget_status_code pa_budget_versions.budget_status_code%TYPE;
9518
9519 lx_budget_version_name pa_budget_versions.version_name%TYPE := null;
9520 lx_budget_version_number pa_budget_versions.version_number%TYPE :=null;
9521 lx_version_type pa_budget_versions.version_type%TYPE := null;
9522 lx_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE :=null;
9523 lx_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE:=null;
9524 lx_set_current_working_flag pa_budget_versions.current_working_flag%TYPE :=null;
9525 lx_locked_by_person_id pa_budget_versions.locked_by_person_id%TYPE;
9526 lx_resource_list_id pa_budget_versions.resource_list_id%TYPE;
9527 lx_plan_in_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
9528 lx_time_phased_type_code pa_proj_fp_options.cost_time_phased_code%TYPE;
9529 lx_resource_list_name pa_resource_lists_all_bg.Name%TYPE := null;
9530 lx_raw_cost_flag VARCHAR2(1) ;
9531 lx_burdened_cost_flag VARCHAR2(1);
9532 lx_revenue_flag VARCHAR2(1);
9533 lx_cost_qty_flag VARCHAR2(1);
9534 lx_revenue_qty_flag VARCHAR2(1);
9535 lx_all_qty_flag VARCHAR2(1);
9536 x_return_status VARCHAR2(1);
9537 lx_projfunc_cost_rate_type pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
9538 lx_projfunc_cost_rate_date_typ pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE ;
9539 lx_projfunc_cost_rate_date pa_proj_fp_options.projfunc_cost_rate_date%TYPE ;
9540 lx_projfunc_rev_rate_type pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
9541 lx_projfunc_rev_rate_date_typ pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE;
9542 lx_projfunc_rev_rate_date pa_proj_fp_options.projfunc_rev_rate_date%TYPE ;
9543 lx_project_cost_rate_type pa_proj_fp_options.project_cost_rate_type%TYPE ;
9544 lx_project_cost_rate_date_typ pa_proj_fp_options.project_cost_rate_date_type%TYPE ;
9545 lx_project_cost_rate_date pa_proj_fp_options.project_cost_rate_date%TYPE ;
9546 lx_project_rev_rate_type pa_proj_fp_options.project_rev_rate_type%TYPE ;
9547 lx_project_rev_rate_date_typ pa_proj_fp_options.project_rev_rate_date_type%TYPE ;
9548 lx_project_rev_rate_date pa_proj_fp_options.project_rev_rate_date%TYPE ;
9549
9550 l_project_currency_code pa_projects_all.project_currency_code%TYPE; -- 3453650
9551 l_projfunc_currency_code pa_projects_all.projfunc_currency_code%TYPE; -- 3453650
9552
9553 i number;
9554 j number;
9555 lx_change_reason_code VARCHAR2(30);
9556
9557 l_data VARCHAR2(2000);
9558 l_msg_index_out NUMBER;
9559
9560 /*Commenting the old variables and adding new ones for bug 6408139*/
9561 /*Earlier they were not being used anywhere else, but now will be used */
9562 -- l_bill_rate_flag pa_fin_plan_amount_sets.bill_rate_flag%type;
9563 -- l_cost_rate_flag pa_fin_plan_amount_sets.cost_rate_flag%type;
9564 -- l_burden_rate_flag pa_fin_plan_amount_sets.burden_rate_flag%type;
9565 lx_bill_rate_flag pa_fin_plan_amount_sets.bill_rate_flag%type;
9566 lx_cost_rate_flag pa_fin_plan_amount_sets.cost_rate_flag%type;
9567 lx_burden_rate_flag pa_fin_plan_amount_sets.burden_rate_flag%type;
9568 l_using_resource_lists_flag VARCHAR2(1);
9569 l_mfc_cost_type_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
9570 l_etc_method_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
9571 l_spread_curve_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
9572 l_budget_type_code pa_budget_types.budget_type_code%TYPE;
9573 l_amg_project_number pa_projects_all.segment1%TYPE;
9574 l_proj_fp_options_id pa_proj_fp_options.proj_fp_options_id%TYPE;
9575 l_CW_version_id pa_budget_versions.budget_version_id%TYPE;
9576 l_CW_record_version_number pa_budget_versions.record_Version_number%TYPE;
9577 l_allow_qty_flag VARCHAR2(1);
9578 l_conv_attrs_to_be_validated VARCHAR2(30);
9579 l_is_rate_type_valid BOOLEAN;
9580 l_call_validate_curr_api_flg VARCHAR2(1);
9581 l_projfunc_cost_rate_type pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
9582 l_projfunc_rev_rate_type pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
9583 l_project_cost_rate_type pa_proj_fp_options.project_cost_rate_type%TYPE ;
9584 l_project_rev_rate_type pa_proj_fp_options.project_rev_rate_type%TYPE ;
9585 l_projfunc_cost_exchange_rate pa_budget_lines.projfunc_cost_exchange_rate%TYPE;
9586 l_projfunc_rev_exchange_rate pa_budget_lines.projfunc_rev_exchange_rate%TYPE;
9587 l_project_cost_exchange_rate pa_budget_lines.project_cost_exchange_rate%TYPE;
9588 l_project_rev_exchange_rate pa_budget_lines.project_rev_exchange_rate%TYPE;
9589
9590 l_version_info_rec pa_fp_gen_amount_utils.fp_cols;
9591 /*Added local variables for bug 6408139*/
9592 l_plan_pref_code pa_proj_fp_options.fin_plan_preference_code%TYPE;
9593 l_cost_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
9594 l_rev_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
9595 l_all_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
9596 l_proj_fp_options_id_new pa_proj_fp_options.proj_fp_options_id%TYPE;
9597
9598
9599 /*Added local variables for Bug 6417360*/
9600 l_attribute_category pa_budget_versions.attribute_category%type;
9601 l_attribute1 pa_budget_versions.attribute1%type;
9602 l_attribute2 pa_budget_versions.attribute2%type;
9603 l_attribute3 pa_budget_versions.attribute3%type;
9604 l_attribute4 pa_budget_versions.attribute4%type;
9605 l_attribute5 pa_budget_versions.attribute5%type;
9606 l_attribute6 pa_budget_versions.attribute6%type;
9607 l_attribute7 pa_budget_versions.attribute7%type;
9608 l_attribute8 pa_budget_versions.attribute8%type;
9609 l_attribute9 pa_budget_versions.attribute9%type;
9610 l_attribute10 pa_budget_versions.attribute10%type;
9611 l_attribute11 pa_budget_versions.attribute11%type;
9612 l_attribute12 pa_budget_versions.attribute12%type;
9613 l_attribute13 pa_budget_versions.attribute13%type;
9614 l_attribute14 pa_budget_versions.attribute14%type;
9615 l_attribute15 pa_budget_versions.attribute15%type;
9616
9617 l_validate_status varchar2(1);
9618 /*End of code for Bug 6417360*/
9619
9620 BEGIN
9621
9622 -- Standard begin of API savepoint
9623
9624 SAVEPOINT update_budget_pub;
9625
9626 --Added for the bug 3453650
9627 IF p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9628 lx_change_reason_code := NULL;
9629 ELSE
9630 lx_change_reason_code := p_change_reason_code ;
9631 END IF;
9632
9633 IF p_set_current_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9634 lx_set_current_working_flag := NULL;
9635 ELSE
9636 lx_set_current_working_flag := p_set_current_working_flag ;
9637 END IF;
9638
9639 IF p_budget_version_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
9640 lx_budget_version_number := NULL;
9641 ELSE
9642 lx_budget_version_number := p_budget_version_number ;
9643 END IF;
9644
9645 IF p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9646 lx_projfunc_cost_rate_type := NULL;
9647 ELSE
9648 lx_projfunc_cost_rate_type := p_projfunc_cost_rate_type ;
9649 END IF;
9650
9651 IF p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9652 lx_projfunc_cost_rate_date_typ := NULL;
9653 ELSE
9654 lx_projfunc_cost_rate_date_typ := p_projfunc_cost_rate_date_typ ;
9655 END IF;
9656
9657 IF p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
9658 lx_projfunc_cost_rate_date := NULL;
9659 ELSE
9660 lx_projfunc_cost_rate_date := p_projfunc_cost_rate_date ;
9661 END IF;
9662
9663 IF p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9664 lx_projfunc_rev_rate_type := NULL;
9665 ELSE
9666 lx_projfunc_rev_rate_type := p_projfunc_rev_rate_type ;
9667 END IF;
9668
9669 IF p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9670 lx_projfunc_rev_rate_date_typ := NULL;
9671 ELSE
9672 lx_projfunc_rev_rate_date_typ := p_projfunc_rev_rate_date_typ ;
9673 END IF;
9674
9675 IF p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
9676 lx_projfunc_rev_rate_date := NULL;
9677 ELSE
9678 lx_projfunc_rev_rate_date := p_projfunc_rev_rate_date ;
9679 END IF;
9680
9681 IF p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9682 lx_project_cost_rate_type := NULL;
9683 ELSE
9684 lx_project_cost_rate_type := p_project_cost_rate_type ;
9685 END IF;
9686
9687 IF p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9688 lx_project_cost_rate_date_typ := NULL;
9689 ELSE
9690 lx_project_cost_rate_date_typ := p_project_cost_rate_date_typ ;
9691 END IF;
9692
9693 IF p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
9694 lx_project_cost_rate_date := NULL;
9695 ELSE
9696 lx_project_cost_rate_date := p_project_cost_rate_date ;
9697 END IF;
9698
9699 IF p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9700 lx_project_rev_rate_type := NULL;
9701 ELSE
9702 lx_project_rev_rate_type := p_project_rev_rate_type ;
9703 END IF;
9704
9705 IF p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9706 lx_project_rev_rate_date_typ := NULL;
9707 ELSE
9708 lx_project_rev_rate_date_typ := p_project_rev_rate_date_typ ;
9709 END IF;
9710
9711 IF p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
9712 lx_project_rev_rate_date := NULL;
9713 ELSE
9714 lx_project_rev_rate_date := p_project_rev_rate_date ;
9715 END IF;
9716 /*Added checks for Plan Amount Entry Flags for bug 6408139*/
9717 /*If the flags are PASSED as NULL, then it would mean that */
9718 /*user wants to make the flag as 'N' */
9719 IF p_raw_cost_flag = NULL THEN
9720 lx_raw_cost_flag := 'N';
9721 ELSE
9722 lx_raw_cost_flag := p_raw_cost_flag ;
9723 END IF;
9724
9725 IF p_burdened_cost_flag = NULL THEN
9726 lx_burdened_cost_flag := 'N';
9727 ELSE
9728 lx_burdened_cost_flag := p_burdened_cost_flag ;
9729 END IF;
9730
9731 IF p_revenue_flag = NULL THEN
9732 lx_revenue_flag := 'N';
9733 ELSE
9734 lx_revenue_flag := p_revenue_flag ;
9735 END IF;
9736
9737 IF p_cost_qty_flag = NULL THEN
9738 lx_cost_qty_flag := 'N';
9739 ELSE
9740 lx_cost_qty_flag := p_cost_qty_flag ;
9741 END IF;
9742
9743 IF p_revenue_qty_flag = NULL THEN
9744 lx_revenue_qty_flag := 'N';
9745 ELSE
9746 lx_revenue_qty_flag := p_revenue_qty_flag ;
9747 END IF;
9748
9749 IF p_all_qty_flag = NULL THEN
9750 lx_all_qty_flag := 'N';
9751 ELSE
9752 lx_all_qty_flag := p_all_qty_flag ;
9753 END IF;
9754
9755 IF p_bill_rate_flag = NULL THEN
9756 lx_bill_rate_flag := 'N';
9757 ELSE
9758 lx_bill_rate_flag := p_bill_rate_flag ;
9759 END IF;
9760
9761 IF p_cost_rate_flag = NULL THEN
9762 lx_cost_rate_flag := 'N';
9763 ELSE
9764 lx_cost_rate_flag := p_cost_rate_flag ;
9765 END IF;
9766
9767 IF p_burden_rate_flag = NULL THEN
9768 lx_burden_rate_flag := 'N';
9769 ELSE
9770 lx_burden_rate_flag := p_burden_rate_flag ;
9771 END IF;
9772 /*Checks End for Plan Amount Entry Flags for bug 6408139*/
9773
9774 l_user_id := FND_GLOBAL.User_id;
9775
9776 /* The G_MISS_XXX/null handling for these variables below has been deleted from the existing code in update_budget
9777 . This handling would be done in validate_header_info now */
9778 l_project_id := p_pa_project_id;
9779 l_budget_type_code := p_budget_type_code;
9780 l_fin_plan_type_id := p_finplan_type_id;
9781 lx_fin_plan_type_name := p_finplan_type_name;
9782 lx_version_type := p_version_type ;
9783
9784 --Call PA_BUDGET_PVT.validate_header_info to do the necessary
9785 --header level validations
9786 PA_BUDGET_PVT.validate_header_info
9787 ( p_api_version_number => p_api_version_number
9788 ,p_api_name => l_api_name
9789 ,p_init_msg_list => p_init_msg_list
9790 ,px_pa_project_id => l_project_id
9791 ,p_pm_project_reference => p_pm_project_reference
9792 ,p_pm_product_code => p_pm_product_code
9793 ,px_budget_type_code => l_budget_type_code
9794 ,px_fin_plan_type_id => l_fin_plan_type_id
9795 ,px_fin_plan_type_name => lx_fin_plan_type_name
9796 ,px_version_type => lx_version_type
9797 ,p_budget_version_number => p_budget_version_number
9798 ,p_change_reason_code => lx_change_reason_code
9799 ,p_function_name => 'PA_PM_UPDATE_BUDGET'
9800 ,x_budget_entry_method_code => l_budget_entry_method_code
9801 ,x_resource_list_id => lx_resource_list_id
9802 ,x_budget_version_id => l_budget_version_id
9803 ,x_fin_plan_level_code => l_fin_plan_level_code
9804 ,x_time_phased_code => lx_time_phased_type_code
9805 ,x_plan_in_multi_curr_flag => lx_plan_in_multi_curr_flag
9806 ,x_budget_amount_code => l_budget_amount_code
9807 ,x_categorization_code => l_categorization_code
9808 ,x_project_number => l_amg_project_number
9809 /* Plan Amount Entry flags introduced by bug 6408139 */
9810 ,px_raw_cost_flag => lx_raw_cost_flag
9811 ,px_burdened_cost_flag => lx_burdened_cost_flag
9812 ,px_revenue_flag => lx_revenue_flag
9813 ,px_cost_qty_flag => lx_cost_qty_flag
9814 ,px_revenue_qty_flag => lx_revenue_qty_flag
9815 ,px_all_qty_flag => lx_all_qty_flag
9816 ,px_bill_rate_flag => lx_bill_rate_flag
9817 ,px_cost_rate_flag => lx_cost_rate_flag
9818 ,px_burden_rate_flag => lx_burden_rate_flag
9819 /* Plan Amount Entry flags introduced by bug 6408139 */
9820 ,x_msg_count => p_msg_count
9821 ,x_msg_data => p_msg_data
9822 ,x_return_status => p_return_status );
9823
9824 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9825 IF(l_debug_mode='Y') THEN
9826 pa_debug.g_err_stage := 'validate header info API falied';
9827 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
9828 END IF;
9829 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9830 END IF;
9831
9832 OPEN l_amg_project_csr( l_project_id );
9833 FETCH l_amg_project_csr INTO l_amg_segment1;
9834 CLOSE l_amg_project_csr;
9835
9836 IF l_budget_type_code IS NOT NULL THEN
9837
9838 OPEN l_budget_attrs_csr(l_budget_type_code,l_project_id);
9839 FETCH l_budget_attrs_csr INTO l_budget_version_id,l_budget_version_name,l_budget_entry_method_code,
9840 l_resource_list_id,l_change_reason_code,l_description;
9841 CLOSE l_budget_attrs_csr;
9842
9843
9844 OPEN l_budget_entry_method_csr( l_budget_entry_method_code );
9845 FETCH l_budget_entry_method_csr INTO l_time_phased_type_code
9846 , l_entry_level_code
9847 , l_categorization_code;
9848 CLOSE l_budget_entry_method_csr;
9849
9850 ELSE
9851
9852 --Bug 5031071 l_budget_version_id fetched above and will contain the value
9853 OPEN l_finplan_attrs_csr(l_budget_version_id);
9854 FETCH l_finplan_attrs_csr INTO l_budget_version_name,l_current_working_flag,
9855 l_resource_list_id,l_change_reason_code,l_description,l_version_type;
9856 CLOSE l_finplan_attrs_csr;
9857
9858
9859 END IF;
9860
9861
9862 IF l_budget_version_id IS NULL THEN
9863
9864 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9865 THEN
9866 pa_interface_utils_pub.map_new_amg_msg
9867 ( p_old_message_code => 'PA_NO_BUDGET_VERSION'
9868 ,p_msg_attribute => 'CHANGE'
9869 ,p_resize_flag => 'N'
9870 ,p_msg_context => 'BUDG'
9871 ,p_attribute1 => l_amg_segment1
9872 ,p_attribute2 => ''
9873 ,p_attribute3 => lx_fin_plan_type_name
9874 ,p_attribute4 => ''
9875 ,p_attribute5 => '');
9876 END IF;
9877 p_multiple_task_msg := 'F'; -- 3453650
9878 END IF;
9879
9880 IF l_budget_type_code IS NULL THEN
9881 PA_COMP_PROFILE_PUB.GET_USER_INFO
9882 (p_user_id => l_user_id,
9883 x_person_id => l_person_id,
9884 x_resource_id => l_resource_id,
9885 x_resource_name => l_resource_name);
9886
9887 l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
9888 (p_budget_version_id => l_budget_version_id);
9889
9890 --Try to lock the version before updating the version. This is required so that nobody else can access it.
9891 pa_fin_plan_pvt.lock_unlock_version
9892 (p_budget_version_id => l_budget_version_id,
9893 p_record_version_number => l_record_version_number,
9894 p_action => 'L',
9895 p_user_id => l_user_id,
9896 p_person_id => lx_locked_by_person_id,
9897 x_return_status => x_return_status,
9898 x_msg_count => l_msg_count,
9899 x_msg_data => l_msg_data) ;
9900
9901
9902 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
9903
9904 IF l_debug_mode = 'Y' THEN
9905 pa_debug.g_err_stage := 'Error in lock unlock version - Cannot lock the version';
9906 pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,5);
9907 END IF;
9908
9909 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9910 END IF;
9911 END IF; -- END IF FOR l_budget_type_code is not null
9912
9913
9914 l_time_phased_type_code := PA_FIN_PLAN_UTILS.Get_Time_Phased_code(l_budget_version_id);
9915
9916 IF p_multiple_task_msg = 'F' THEN
9917 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9918 END IF;
9919
9920 IF (p_budget_version_name IS NOT NULL AND p_budget_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9921 --(p_budget_version_name <> l_budget_version_name) THEN
9922 ((p_budget_version_name <> l_budget_version_name OR l_budget_version_name IS NULL)) THEN --Bug 6600625
9923 lx_budget_version_name := p_budget_version_name;
9924 ELSE
9925 lx_budget_version_name := l_budget_version_name;
9926 END IF;
9927
9928 /*Commenting for bug 6408139 */
9929 /*
9930 --Added after review comments
9931 IF l_budget_type_code IS NULL THEN
9932 -- dbms_output.put_line ('about to get plan amt flags ');
9933 l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(l_budget_version_id);
9934
9935 PA_FIN_PLAN_UTILS.GET_PLAN_AMOUNT_FLAGS(
9936 P_AMOUNT_SET_ID => l_amount_set_id
9937 ,X_RAW_COST_FLAG => lx_raw_cost_flag
9938 ,X_BURDENED_FLAG => lx_burdened_cost_flag
9939 ,X_REVENUE_FLAG => lx_revenue_flag
9940 ,X_COST_QUANTITY_FLAG => lx_cost_qty_flag
9941 ,X_REV_QUANTITY_FLAG => lx_revenue_qty_flag
9942 ,X_ALL_QUANTITY_FLAG => lx_all_qty_flag
9943 ,X_BILL_RATE_FLAG => l_bill_rate_flag
9944 ,X_COST_RATE_FLAG => l_cost_rate_flag
9945 ,X_BURDEN_RATE_FLAG => l_burden_rate_flag
9946 ,x_message_count => l_msg_count
9947 ,x_return_status => x_return_status
9948 ,x_message_data => l_msg_data) ;
9949
9950 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
9951 THEN
9952 -- RAISE FND_API.G_EXC_ERROR;
9953 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9954 END IF;
9955 END IF; -- BUDGET_TYPE_CODE IS NULL FOR FINPLAN MODEL. */
9956 /*Commenting ends for bug 6408139 */
9957
9958
9959 /* Modified code for bug 6408139*/
9960 /* Bug 6408139 : Get Plan Amount Entry flags ONLY if ALL the passed ones are G_PA_MISS_CHAR */
9961 /* If even a single flag has been passed as NOT G_PA_MISS_CHAR, then we have already got the */
9962 /* flags from validate_header_info */
9963 IF l_budget_type_code IS NULL THEN
9964
9965 IF ( ( lx_raw_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9966 ( lx_burdened_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9967 ( lx_revenue_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9968 ( lx_cost_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9969 ( lx_revenue_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9970 ( lx_all_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9971 ( lx_bill_rate_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9972 ( lx_cost_rate_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9973 ( lx_burden_rate_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) THEN
9974
9975 l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(l_budget_version_id);
9976
9977 PA_FIN_PLAN_UTILS.GET_PLAN_AMOUNT_FLAGS(
9978 P_AMOUNT_SET_ID => l_amount_set_id
9979 ,X_RAW_COST_FLAG => lx_raw_cost_flag
9980 ,X_BURDENED_FLAG => lx_burdened_cost_flag
9981 ,X_REVENUE_FLAG => lx_revenue_flag
9982 ,X_COST_QUANTITY_FLAG => lx_cost_qty_flag
9983 ,X_REV_QUANTITY_FLAG => lx_revenue_qty_flag
9984 ,X_ALL_QUANTITY_FLAG => lx_all_qty_flag
9985 ,X_BILL_RATE_FLAG => lx_bill_rate_flag -- l_bill_rate_flag
9986 ,X_COST_RATE_FLAG => lx_cost_rate_flag -- l_cost_rate_flag
9987 ,X_BURDEN_RATE_FLAG => lx_burden_rate_flag -- l_burden_rate_flag
9988 ,x_message_count => l_msg_count
9989 ,x_return_status => x_return_status
9990 ,x_message_data => l_msg_data) ;
9991
9992 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
9993 THEN
9994 -- RAISE FND_API.G_EXC_ERROR;
9995 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9996 END IF;
9997
9998 END IF ; -- Getting plan flags only when all are passed as G_PA_MISS_CHAR
9999 END IF; -- BUDGET_TYPE_CODE IS NULL FOR FINPLAN MODEL.
10000 /*Modified code ends for bug 6408139*/
10001
10002
10003 OPEN l_lock_budget_csr( l_budget_version_id ); -- 3453650
10004 CLOSE l_lock_budget_csr; --FYI, does not release locks
10005
10006 /* -- Changes made by Xin Liu for using of SQL BIND VARIABLE 12-MAY-2003 */
10007 --building the dynamic SQL statement
10008
10009 l_statement := ' UPDATE PA_BUDGET_VERSIONS SET ';
10010
10011 IF (p_description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_description IS NULL)
10012 AND nvl(p_description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> nvl(l_description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10013 THEN
10014
10015 l_statement := l_statement ||
10016 ' DESCRIPTION = :xDescription'||',';
10017
10018 l_update_yes_flag := 'Y';
10019 END IF;
10020
10021 IF (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_change_reason_code IS NULL)
10022 AND nvl(p_change_reason_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> nvl(l_change_reason_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10023 THEN
10024
10025 IF ( p_change_reason_code IS NOT NULL AND
10026 p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
10027 THEN
10028
10029 OPEN l_budget_change_reason_csr( p_change_reason_code );
10030 FETCH l_budget_change_reason_csr INTO l_dummy;
10031
10032 IF l_budget_change_reason_csr%NOTFOUND
10033 THEN
10034 CLOSE l_budget_change_reason_csr;
10035
10036 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10037 THEN
10038 pa_interface_utils_pub.map_new_amg_msg
10039 ( p_old_message_code => 'PA_CHANGE_REASON_INVALID'
10040 ,p_msg_attribute => 'CHANGE'
10041 ,p_resize_flag => 'N'
10042 ,p_msg_context => 'BUDG'
10043 ,p_attribute1 => l_amg_segment1
10044 ,p_attribute2 => ''
10045 ,p_attribute3 => l_budget_type_code
10046 ,p_attribute4 => ''
10047 ,p_attribute5 => '');
10048 END IF;
10049
10050 RAISE FND_API.G_EXC_ERROR;
10051 END IF;
10052
10053 CLOSE l_budget_change_reason_csr;
10054
10055 END IF;
10056
10057 l_statement := l_statement ||
10058 ' CHANGE_REASON_CODE = :xChangeReasonCode'||',';
10059
10060 l_update_yes_flag := 'Y';
10061
10062 END IF;
10063
10064 /*Addition for the bug 3453650 starts */
10065 -- commented below code for the bug 4702500/4730094
10066 /*
10067 IF l_budget_type_code IS NULL THEN
10068
10069 IF (p_set_current_working_flag IS NULL
10070 OR p_set_current_working_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
10071 AND (nvl(p_set_current_working_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10072 nvl(l_current_working_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
10073 THEN
10074 l_statement := l_statement || 'CURRENT_WORKING_FLAG = :xSetCurrentWorkingFlag' || ',';
10075 l_update_yes_flag := 'Y';
10076
10077 END IF;
10078
10079 END IF; --l_budget_type_code is null
10080 */
10081
10082 IF (p_budget_version_name IS NULL
10083 OR p_budget_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
10084 AND (nvl(p_budget_version_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10085 nvl(l_budget_version_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
10086 then
10087 l_statement := l_statement || 'VERSION_NAME = :xBudgetVersionName' || ',';
10088
10089 l_update_yes_flag := 'Y';
10090 end if;
10091
10092 /*Addition for the bug 3453650 ends */
10093
10094 /*Below code is added for Bug 6417360*/
10095
10096 open c_dff_values(l_budget_version_id);
10097
10098 fetch c_dff_values into l_attribute_category,
10099 l_attribute1,
10100 l_attribute2,
10101 l_attribute3,
10102 l_attribute4,
10103 l_attribute5,
10104 l_attribute6,
10105 l_attribute7,
10106 l_attribute8,
10107 l_attribute9,
10108 l_attribute10,
10109 l_attribute11,
10110 l_attribute12,
10111 l_attribute13,
10112 l_attribute14,
10113 l_attribute15;
10114 close c_dff_values;
10115
10116 --Validate PA_BUDGET_VERSIONS_DESC_FLEX
10117
10118 -- 6188316 Adding double quotes for all 15 attributes and category values being appended to Update Query String
10119
10120 if ((p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10121 or p_attribute_category is null)
10122 and nvl(p_attribute_category,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10123 <> nvl(l_attribute_category,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10124 l_attribute_category := p_attribute_category;
10125 if l_attribute_category is null then
10126
10127 l_statement := l_statement ||
10128 ' ATTRIBUTE_CATEGORY = null,';
10129 else
10130 l_statement := l_statement ||
10131 ' ATTRIBUTE_CATEGORY = '''||l_attribute_category||''',';
10132 end if;
10133 l_update_yes_flag := 'Y';
10134 end if;
10135
10136 if ((p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10137 or p_attribute1 is null)
10138 and nvl(p_attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10139 <> nvl(l_attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10140 l_attribute1 := p_attribute1;
10141 -- dbms_output.put_line(' came inside the outer if ');
10142 if l_attribute1 is null then
10143 -- dbms_output.put_line(' came inside the inner if ');
10144 l_statement := l_statement ||
10145 ' ATTRIBUTE1 = null,';
10146 else
10147 l_statement := l_statement ||
10148 ' ATTRIBUTE1 = '''||l_attribute1||''',';
10149 end if;
10150 l_update_yes_flag := 'Y';
10151 end if;
10152
10153 if ((p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10154 or p_attribute2 is null)
10155 and nvl(p_attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10156 <> nvl(l_attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10157 l_attribute2 := p_attribute2;
10158 if l_attribute2 is null then
10159 l_statement := l_statement ||
10160 ' ATTRIBUTE2 = null,';
10161 else
10162 l_statement := l_statement ||
10163 ' ATTRIBUTE2 = '''||l_attribute2||''',';
10164 end if;
10165 l_update_yes_flag := 'Y';
10166 end if;
10167
10168 if ((p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10169 or p_attribute3 is null)
10170 and nvl(p_attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10171 <> nvl(l_attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10172 l_attribute3 := p_attribute3;
10173 if l_attribute3 is null then
10174 l_statement := l_statement ||
10175 ' ATTRIBUTE3 = null,';
10176 else
10177 l_statement := l_statement ||
10178 ' ATTRIBUTE3 = '''||l_attribute3||''',';
10179 end if;
10180 l_update_yes_flag := 'Y';
10181 end if;
10182
10183 if ((p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10184 or p_attribute4 is null)
10185 and nvl(p_attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10186 <> nvl(l_attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10187 l_attribute4 := p_attribute4;
10188 if l_attribute4 is null then
10189 l_statement := l_statement ||
10190 ' ATTRIBUTE4 = null,';
10191 else
10192 l_statement := l_statement ||
10193 ' ATTRIBUTE4 = '''||l_attribute4||''',';
10194 end if;
10195 l_update_yes_flag := 'Y';
10196 end if;
10197
10198 if ((p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10199 or p_attribute5 is null)
10200 and nvl(p_attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10201 <> nvl(l_attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10202 l_attribute5 := p_attribute5;
10203 if l_attribute5 is null then
10204 l_statement := l_statement ||
10205 ' ATTRIBUTE5 = null,';
10206 else
10207 l_statement := l_statement ||
10208 ' ATTRIBUTE5 = '''||l_attribute5||''',';
10209 end if;
10210 l_update_yes_flag := 'Y';
10211 end if;
10212
10213 if ((p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10214 or p_attribute6 is null)
10215 and nvl(p_attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10216 <> nvl(l_attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10217 l_attribute6 := p_attribute6;
10218 if l_attribute6 is null then
10219 l_statement := l_statement ||
10220 ' ATTRIBUTE6 = null,';
10221 else
10222 l_statement := l_statement ||
10223 ' ATTRIBUTE6 = '''||l_attribute6||''',';
10224 end if;
10225 l_update_yes_flag := 'Y';
10226 end if;
10227
10228 if ((p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10229 or p_attribute7 is null)
10230 and nvl(p_attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10231 <> nvl(l_attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10232 l_attribute7 := p_attribute7;
10233 if l_attribute7 is null then
10234 l_statement := l_statement ||
10235 ' ATTRIBUTE7 = null,';
10236 else
10237 l_statement := l_statement ||
10238 ' ATTRIBUTE7 = '''||l_attribute7||''',';
10239 end if;
10240 l_update_yes_flag := 'Y';
10241 end if;
10242
10243 if ((p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10244 or p_attribute8 is null)
10245 and nvl(p_attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10246 <> nvl(l_attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10247 l_attribute8 := p_attribute8;
10248 if l_attribute8 is null then
10249 l_statement := l_statement ||
10250 ' ATTRIBUTE8 = null,';
10251 else
10252 l_statement := l_statement ||
10253 ' ATTRIBUTE8 = '''||l_attribute8||''',';
10254 end if;
10255 l_update_yes_flag := 'Y';
10256 end if;
10257
10258 if ((p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10259 or p_attribute9 is null)
10260 and nvl(p_attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10261 <> nvl(l_attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10262 l_attribute9 := p_attribute9;
10263 if l_attribute9 is null then
10264 l_statement := l_statement ||
10265 ' ATTRIBUTE9 = null,';
10266 else
10267 l_statement := l_statement ||
10268 ' ATTRIBUTE9 = '''||l_attribute9||''',';
10269 end if;
10270 l_update_yes_flag := 'Y';
10271 end if;
10272
10273 if ((p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10274 or p_attribute10 is null)
10275 and nvl(p_attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10276 <> nvl(l_attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10277 l_attribute10 := p_attribute10;
10278 if l_attribute10 is null then
10279 l_statement := l_statement ||
10280 ' ATTRIBUTE10 = null,';
10281 else
10282 l_statement := l_statement ||
10283 ' ATTRIBUTE10 = '''||l_attribute10||''',';
10284 end if;
10285 l_update_yes_flag := 'Y';
10286 end if;
10287
10288 if ((p_attribute11 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10289 or p_attribute11 is null)
10290 and nvl(p_attribute11,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10291 <> nvl(l_attribute11,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10292 l_attribute11 := p_attribute11;
10293 if l_attribute11 is null then
10294 l_statement := l_statement ||
10295 ' ATTRIBUTE11 = null,';
10296 else
10297 l_statement := l_statement ||
10298 ' ATTRIBUTE11 = '''||l_attribute11||''',';
10299 end if;
10300 l_update_yes_flag := 'Y';
10301 end if;
10302
10303 if ((p_attribute12 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10304 or p_attribute12 is null)
10305 and nvl(p_attribute12,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10306 <> nvl(l_attribute12,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10307 l_attribute12 := p_attribute12;
10308 if l_attribute12 is null then
10309 l_statement := l_statement ||
10310 ' ATTRIBUTE12 = null,';
10311 else
10312 l_statement := l_statement ||
10313 ' ATTRIBUTE12 = '''||l_attribute12||''',';
10314 end if;
10315 l_update_yes_flag := 'Y';
10316 end if;
10317
10318 if ((p_attribute13 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10319 or p_attribute13 is null)
10320 and nvl(p_attribute13,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10321 <> nvl(l_attribute13,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10322 l_attribute13 := p_attribute13;
10323 if l_attribute13 is null then
10324 l_statement := l_statement ||
10325 ' ATTRIBUTE13 = null,';
10326 else
10327 l_statement := l_statement ||
10328 ' ATTRIBUTE13 = '''||l_attribute13||''',';
10329 end if;
10330 l_update_yes_flag := 'Y';
10331 end if;
10332
10333 if ((p_attribute14 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10334 or p_attribute14 is null)
10335 and nvl(p_attribute14,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10336 <> nvl(l_attribute14,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10337 l_attribute14 := p_attribute14;
10338 if l_attribute14 is null then
10339 l_statement := l_statement ||
10340 ' ATTRIBUTE14 = null,';
10341 else
10342 l_statement := l_statement ||
10343 ' ATTRIBUTE14 = '''||l_attribute14||''',';
10344 end if;
10345 l_update_yes_flag := 'Y';
10346 end if;
10347
10348 if ((p_attribute15 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10349 or p_attribute15 is null)
10350 and nvl(p_attribute15,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10351 <> nvl(l_attribute15,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10352 l_attribute15 := p_attribute15;
10353 if l_attribute15 is null then
10354 l_statement := l_statement ||
10355 ' ATTRIBUTE15 = null,';
10356 else
10357 l_statement := l_statement ||
10358 ' ATTRIBUTE15 = '''||l_attribute15||''',';
10359 end if;
10360 l_update_yes_flag := 'Y';
10361 end if;
10362 /*
10363 dbms_output.put_line('statement ');
10364 dbms_output.put_line('l_attribute_category '||l_attribute_category);
10365 dbms_output.put_line('l_attribute1 '||l_attribute1);
10366 dbms_output.put_line('l_attribute2 '||l_attribute2);
10367 dbms_output.put_line('l_attribute3 '||l_attribute3);
10368 dbms_output.put_line('l_attribute4 '||l_attribute4);
10369 dbms_output.put_line('l_attribute5 '||l_attribute5);
10370
10371 dbms_output.put_line('l_attribute6 '||l_attribute6);
10372 dbms_output.put_line('l_attribute7 '||l_attribute7);
10373 dbms_output.put_line('l_attribute8 '||l_attribute8);
10374 dbms_output.put_line('l_attribute9 '||l_attribute9);
10375 dbms_output.put_line('l_attribute10 '||l_attribute10);
10376
10377 dbms_output.put_line('l_attribute11 '||l_attribute11);
10378 dbms_output.put_line('l_attribute12 '||l_attribute12);
10379 dbms_output.put_line('l_attribute13 '||l_attribute13);
10380 dbms_output.put_line('l_attribute14 '||l_attribute14);
10381 dbms_output.put_line('l_attribute15 '||l_attribute15);*/
10382
10383
10384 pa_task_utils.validate_flex_fields(
10385 p_desc_flex_name => 'PA_BUDGET_VERSIONS_DESC_FLEX'
10386 ,p_attribute_category => l_attribute_category
10387 ,p_attribute1 => l_attribute1
10388 ,p_attribute2 => l_attribute2
10389 ,p_attribute3 => l_attribute3
10390 ,p_attribute4 => l_attribute4
10391 ,p_attribute5 => l_attribute5
10392 ,p_attribute6 => l_attribute6
10393 ,p_attribute7 => l_attribute7
10394 ,p_attribute8 => l_attribute8
10395 ,p_attribute9 => l_attribute9
10396 ,p_attribute10 => l_attribute10
10397 ,p_attribute11 => l_attribute11
10398 ,p_attribute12 => l_attribute12
10399 ,p_attribute13 => l_attribute13
10400 ,p_attribute14 => l_attribute14
10401 ,p_attribute15 => l_attribute15
10402 ,p_RETURN_msg => l_msg_data
10403 ,p_validate_status => l_validate_status
10404 );
10405 IF l_validate_status = 'N'
10406 THEN
10407 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10408 THEN
10409 pa_interface_utils_pub.map_new_amg_msg
10410 ( p_old_message_code => 'PA_INVALID_FF_VALUES'
10411 ,p_msg_attribute => 'CHANGE'
10412 ,p_resize_flag => 'N'
10413 ,p_msg_context => 'FLEX'
10414 ,p_attribute1 => l_msg_data
10415 ,p_attribute2 => ''
10416 ,p_attribute3 => ''
10417 ,p_attribute4 => ''
10418 ,p_attribute5 => '');
10419 END IF;
10420 RAISE FND_API.G_EXC_ERROR;
10421 END IF;
10422
10423 /*End of code for Bug 6417360*/
10424
10425 IF l_update_yes_flag = 'Y'
10426 THEN
10427 l_statement := l_statement ||
10428 ' LAST_UPDATE_DATE = '||''''||
10429 SYSDATE||''''||',';
10430
10431 l_statement := l_statement ||
10432 ' LAST_UPDATED_BY = '||G_USER_ID||',';
10433
10434 l_statement := l_statement ||
10435 ' LAST_UPDATE_LOGIN = '||G_LOGIN_ID;
10436
10437 l_statement := l_statement ||
10438 ' WHERE BUDGET_VERSION_ID = '||TO_CHAR(l_budget_version_id);
10439
10440 l_cursor_id := DBMS_SQL.open_cursor;
10441 DBMS_SQL.parse(l_cursor_id, l_statement, DBMS_SQL.native);
10442
10443 IF (p_description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_description IS NULL)
10444 AND nvl(p_description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10445 nvl(l_description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10446 THEN
10447 DBMS_SQL.BIND_VARIABLE(l_cursor_id, ':xDescription', p_description);
10448
10449 END IF;
10450
10451 IF (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_change_reason_code IS NULL)
10452 AND nvl(p_change_reason_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10453 nvl(l_change_reason_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10454 THEN
10455 DBMS_SQL.BIND_VARIABLE(l_cursor_id, ':xChangeReasonCode', p_change_reason_code);
10456
10457 END IF;
10458
10459
10460 /*Addition for the bug 3453650 starts */
10461 IF l_budget_type_code IS NULL THEN
10462 IF (p_set_current_working_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_set_current_working_flag IS NULL)
10463 AND nvl(p_set_current_working_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10464 nvl(l_current_working_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10465 THEN
10466 -- Get the details of the current working version so as to pass it to the
10467 -- Set Current Working API.
10468 pa_fin_plan_utils.Get_Curr_Working_Version_Info(
10469 p_project_id => l_project_id
10470 ,p_fin_plan_type_id => l_fin_plan_type_id
10471 ,p_version_type => lx_version_type
10472 ,x_fp_options_id => l_proj_fp_options_id
10473 ,x_fin_plan_version_id => l_CW_version_id
10474 ,x_return_status => x_return_status
10475 ,x_msg_count => l_msg_count
10476 ,x_msg_data => l_msg_data );
10477
10478 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10479 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10480 END IF;
10481
10482 -- Further processing is required only if the version to be updated is not the current working verion
10483 IF l_budget_version_id <> l_CW_version_id THEN
10484
10485 --Get the record version number of the current working version
10486 l_CW_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
10487
10488 --Get the record version number of the version to be updated
10489 l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_budget_version_id);
10490
10491 pa_fin_plan_pvt.lock_unlock_version
10492 (p_budget_version_id => l_CW_version_id,
10493 p_record_version_number => l_CW_record_version_number,
10494 p_action => 'L',
10495 p_user_id => l_user_id,
10496 p_person_id => lx_locked_by_person_id,
10497 x_return_status => x_return_status,
10498 x_msg_count => l_msg_count,
10499 x_msg_data => l_msg_data) ;
10500
10501 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
10502
10503 IF l_debug_mode = 'Y' THEN
10504 pa_debug.g_err_stage := 'Error executing lock unlock version';
10505 pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,3);
10506 END IF;
10507
10508 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10509
10510 END IF;
10511
10512 IF l_debug_mode = 'Y' THEN
10513 pa_debug.g_err_stage := 'About to call set current working version';
10514 pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,3);
10515 END IF;
10516
10517 -- Getting the rec ver number again as it will be incremented by the api lock_unlock_version
10518 l_CW_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
10519
10520 pa_fin_plan_pub.Set_Current_Working
10521 (p_project_id => l_project_id,
10522 p_budget_version_id => l_budget_version_id,
10523 p_record_version_number => l_record_version_number,
10524 p_orig_budget_version_id => l_CW_version_id,
10525 p_orig_record_version_number => l_CW_record_version_number,
10526 x_return_status => x_return_status,
10527 x_msg_count => l_msg_count,
10528 x_msg_data => l_msg_data);
10529
10530 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10531 IF l_debug_mode= 'Y' THEN
10532 pa_debug.g_err_stage:= 'Error executing Set_Current_Working ';
10533 pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
10534 END IF;
10535 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10536 END IF;
10537
10538 END IF; -- IF l_created_version_id <> l_CW_version_id THEN
10539
10540
10541 END IF;
10542
10543 END IF; -- l_budget_type_code IS NULL
10544
10545 IF (p_budget_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_budget_version_name IS NULL)
10546 AND nvl(p_budget_version_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10547 nvl(l_budget_version_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10548 THEN
10549 DBMS_SQL.BIND_VARIABLE(l_cursor_id, ':xBudgetVersionName', lx_budget_version_name);
10550
10551 END IF;
10552 /*Addition for the bug 3453650 ends */
10553
10554 l_rows := DBMS_SQL.execute(l_cursor_id);
10555
10556 IF DBMS_SQL.is_open (l_cursor_id)
10557 THEN
10558 DBMS_SQL.close_cursor (l_cursor_id);
10559 END IF;
10560
10561 END IF;
10562
10563 /* Bug 6408139 : We are setting the amount_set_id ONLY when atleast some of the */
10564 /* input amount entry flags ARE not G_PA_MISS_CHAR , which means, user wants to */
10565 /* change some flag*/
10566 IF l_budget_type_code IS NULL THEN -- finplan model
10567
10568 IF (( lx_raw_cost_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10569 ( lx_burdened_cost_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10570 ( lx_revenue_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10571 ( lx_cost_qty_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10572 ( lx_revenue_qty_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10573 ( lx_all_qty_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10574 ( lx_bill_rate_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10575 ( lx_cost_rate_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10576 ( lx_burden_rate_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) ) THEN
10577
10578 --Get the preference code
10579 IF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST) THEN
10580 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_COST_ONLY;
10581 ELSIF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE) THEN
10582 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_REVENUE_ONLY;
10583 ELSIF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL) THEN
10584 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_COST_AND_REV_SAME;
10585 END IF;
10586
10587 IF l_debug_mode = 'Y' THEN
10588 pa_debug.g_err_stage := 'Preference code is -> ' || l_plan_pref_code;
10589 pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,3);
10590 END IF;
10591
10592
10593 --Get the amount set id.
10594 pa_fin_plan_utils.GET_OR_CREATE_AMOUNT_SET_ID
10595 (
10596 p_raw_cost_flag => lx_raw_cost_flag
10597 ,p_burdened_cost_flag => lx_burdened_cost_flag
10598 ,p_revenue_flag => lx_revenue_flag
10599 ,p_cost_qty_flag => lx_cost_qty_flag
10600 ,p_revenue_qty_flag => lx_revenue_qty_flag
10601 ,p_all_qty_flag => lx_all_qty_flag
10602 ,p_plan_pref_code => l_plan_pref_code
10603 ,p_bill_rate_flag => lx_bill_rate_flag
10604 ,p_cost_rate_flag => lx_cost_rate_flag
10605 ,p_burden_rate_flag => lx_burden_rate_flag
10606 ,x_cost_amount_set_id => l_cost_amount_set_id
10607 ,x_revenue_amount_set_id => l_rev_amount_set_id
10608 ,x_all_amount_set_id => l_all_amount_set_id
10609 ,x_message_count => l_msg_count
10610 ,x_return_status => x_return_status
10611 ,x_message_data => l_msg_data
10612 );
10613
10614 IF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST) THEN
10615 l_amount_set_id := l_cost_amount_set_id;
10616 ELSIF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE) THEN
10617 l_amount_set_id := l_rev_amount_set_id;
10618 ELSIF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL) THEN
10619 l_amount_set_id := l_all_amount_set_id;
10620 END IF;
10621
10622 IF l_debug_mode = 'Y' THEN
10623 pa_debug.g_err_stage:= 'Amount set id is -> ' || l_amount_set_id;
10624 pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,3);
10625 END IF;
10626
10627 l_proj_fp_options_id_new := PA_PROJ_FP_OPTIONS_PUB.Get_FP_Option_ID
10628 (p_project_id => l_project_id
10629 ,p_plan_type_id => l_fin_plan_type_id
10630 ,p_plan_version_id => l_budget_version_id
10631 );
10632
10633
10634 IF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
10635 UPDATE pa_proj_fp_options
10636 SET cost_amount_set_id = l_amount_set_id
10637 WHERE proj_fp_options_id = l_proj_fp_options_id_new;
10638 ELSIF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
10639 UPDATE pa_proj_fp_options
10640 SET revenue_amount_set_id = l_amount_set_id
10641 WHERE proj_fp_options_id = l_proj_fp_options_id_new;
10642 ELSIF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL THEN
10643 UPDATE pa_proj_fp_options
10644 SET all_amount_set_id = l_amount_set_id
10645 WHERE proj_fp_options_id = l_proj_fp_options_id_new;
10646 END IF;
10647
10648 END IF ; -- G_PA_MISS_CHAR condition
10649
10650 END IF ; --IF l_budget_type_code IS NULL THEN
10651
10652 /*Bug 6408139 : Code addition ends*/
10653
10654 l_budget_lines_in := p_budget_lines_in;
10655 -- Changes for the bug 3453650
10656 IF ( nvl(l_budget_lines_in.last,0) > 0 ) THEN
10657
10658 IF l_debug_mode = 'Y' THEN
10659 pa_debug.g_err_stage := 'About to call validate budget lines in Budgets model';
10660 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10661 END IF;
10662
10663 --Handle G_MISS_XXX for l_budget_lines_in before calling Validate_Budget_Lines.
10664 FOR i in l_budget_lines_in.FIRST..l_budget_lines_in.LAST LOOP
10665
10666 IF l_budget_lines_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10667 l_budget_lines_in(i).pa_task_id := NULL;
10668 END IF;
10669
10670 IF l_budget_lines_in(i).pm_task_reference =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10671 l_budget_lines_in(i).pm_task_reference := NULL;
10672 END IF;
10673
10674 IF l_budget_lines_in(i).resource_alias= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10675 l_budget_lines_in(i).resource_alias := NULL;
10676 END IF;
10677
10678 IF l_budget_lines_in(i).resource_list_member_id =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10679 l_budget_lines_in(i).resource_list_member_id:= NULL;
10680 END IF;
10681
10682 --Bug 16604257
10683 IF l_budget_lines_in(i).cbs_element_id =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10684 l_budget_lines_in(i).cbs_element_id:= NULL;
10685 END IF;
10686
10687 IF l_budget_lines_in(i).cost_code= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10688 l_budget_lines_in(i).cost_code := NULL;
10689 END IF;
10690 --Bug 16604257
10691
10692 IF l_budget_lines_in(i).budget_start_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10693 l_budget_lines_in(i).budget_start_date:= NULL;
10694 END IF;
10695 IF l_budget_lines_in(i).budget_end_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10696 l_budget_lines_in(i).budget_end_date:= NULL;
10697 END IF;
10698
10699 IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10700 l_budget_lines_in(i).period_name := NULL;
10701 END IF;
10702
10703 IF l_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10704 l_budget_lines_in(i).raw_cost := NULL;
10705 END IF;
10706
10707 IF l_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10708 l_budget_lines_in(i).burdened_cost := NULL;
10709 END IF;
10710
10711 IF l_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10712 l_budget_lines_in(i).revenue := NULL;
10713 END IF;
10714
10715 IF l_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10716 l_budget_lines_in(i).quantity := NULL;
10717 END IF;
10718
10719
10720 IF l_budget_lines_in(i).change_reason_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10721 l_budget_lines_in(i).change_reason_code :=NULL;
10722 END IF;
10723
10724 IF l_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10725 l_budget_lines_in(i).description := NULL;
10726 END IF;
10727
10728 IF l_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10729 l_budget_lines_in(i).attribute_category := NULL;
10730 END IF;
10731
10732 IF l_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10733 l_budget_lines_in(i).attribute1 := NULL;
10734 END IF;
10735
10736 IF l_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10737 l_budget_lines_in(i).attribute2 := NULL;
10738 END IF;
10739
10740 IF l_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10741 l_budget_lines_in(i).attribute3 := NULL;
10742 END IF;
10743
10744 IF l_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10745 l_budget_lines_in(i).attribute4 := NULL;
10746 END IF;
10747
10748 IF l_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10749 l_budget_lines_in(i).attribute5 := NULL;
10750 END IF;
10751
10752 IF l_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10753 l_budget_lines_in(i).attribute6 := NULL;
10754 END IF;
10755
10756 IF l_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10757 l_budget_lines_in(i).attribute7 := NULL;
10758 END IF;
10759
10760 IF l_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10761 l_budget_lines_in(i).attribute8 := NULL;
10762 END IF;
10763
10764 IF l_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10765 l_budget_lines_in(i).attribute9 := NULL;
10766 END IF;
10767
10768 IF l_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10769 l_budget_lines_in(i).attribute10 := NULL;
10770 END IF;
10771
10772 IF l_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10773 l_budget_lines_in(i).attribute11 := NULL;
10774 END IF;
10775
10776 IF l_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10777 l_budget_lines_in(i).attribute12 := NULL;
10778 END IF;
10779
10780 IF l_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10781 l_budget_lines_in(i).attribute13 := NULL;
10782 END IF;
10783
10784 IF l_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10785 l_budget_lines_in(i).attribute14 := NULL;
10786 END IF;
10787
10788 IF l_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10789 l_budget_lines_in(i).attribute15 := NULL;
10790 END IF;
10791
10792 IF l_budget_lines_in(i).txn_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10793 l_budget_lines_in(i).txn_currency_code := NULL;
10794 END IF;
10795
10796 IF l_budget_lines_in(i).projfunc_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10797 l_budget_lines_in(i).PROJFUNC_COST_RATE_TYPE := NULL;
10798 END IF;
10799
10800 IF l_budget_lines_in(i).projfunc_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10801 l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
10802 END IF;
10803
10804 IF l_budget_lines_in(i).projfunc_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10805 l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE := NULL;
10806 END IF;
10807
10808 IF l_budget_lines_in(i).projfunc_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10809 l_budget_lines_in(i).PROJFUNC_COST_EXCHANGE_RATE := NULL;
10810 END IF;
10811
10812 IF l_budget_lines_in(i).projfunc_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10813 l_budget_lines_in(i).PROJFUNC_REV_RATE_TYPE := NULL;
10814 END IF;
10815
10816 IF l_budget_lines_in(i).projfunc_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10817 l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
10818 END IF;
10819
10820 IF l_budget_lines_in(i).projfunc_rev_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10821 l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE := NULL;
10822 END IF;
10823
10824 IF l_budget_lines_in(i).projfunc_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10825 l_budget_lines_in(i).PROJFUNC_REV_EXCHANGE_RATE := NULL;
10826 END IF;
10827
10828 IF l_budget_lines_in(i).project_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10829 l_budget_lines_in(i).PROJECT_COST_RATE_TYPE := NULL;
10830 END IF;
10831
10832 IF l_budget_lines_in(i).project_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10833 l_budget_lines_in(i).PROJECT_COST_RATE_DATE_TYPE := NULL;
10834 END IF;
10835
10836 IF l_budget_lines_in(i).project_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10837 l_budget_lines_in(i).PROJECT_COST_RATE_DATE := NULL;
10838 END IF;
10839
10840 IF l_budget_lines_in(i).project_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10841 l_budget_lines_in(i).PROJECT_COST_EXCHANGE_RATE := NULL;
10842 END IF;
10843
10844 IF l_budget_lines_in(i).project_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10845 l_budget_lines_in(i).PROJECT_REV_RATE_TYPE := NULL;
10846 END IF;
10847
10848 IF l_budget_lines_in(i).project_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10849 l_budget_lines_in(i).PROJECT_REV_RATE_DATE_TYPE := NULL;
10850 END IF;
10851
10852 IF l_budget_lines_in(i).project_rev_rate_date =PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10853 l_budget_lines_in(i).PROJECT_REV_RATE_DATE := NULL;
10854 END IF;
10855
10856 IF l_budget_lines_in(i).project_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10857 l_budget_lines_in(i).PROJECT_REV_EXCHANGE_RATE := NULL;
10858 END IF;
10859
10860 IF l_budget_lines_in(i).pm_product_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10861 l_budget_lines_in(i).pm_product_code := NULL;
10862 END IF;
10863
10864 IF l_budget_lines_in(i).pm_budget_line_reference=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10865 l_budget_lines_in(i).pm_budget_line_reference := NULL;
10866 END IF;
10867
10868 --Added for bug#12424439 FP:bug#12606319
10869 IF l_time_phased_type_code = 'N' THEN
10870 temp_budget_start_date := l_budget_lines_in(i).budget_start_date;
10871 END IF;
10872 END LOOP;
10873 END IF; -- ( nvl(l_budget_lines_in.last,0) > 0 )
10874
10875 l_version_info_rec.x_budget_version_id := l_budget_version_id; --Added for bug 4290310.
10876
10877 IF l_budget_type_code IS NOT NULL THEN
10878
10879 pa_budget_pvt.Validate_Budget_Lines
10880 (p_pa_project_id => l_project_id
10881 ,p_budget_type_code => l_budget_type_code
10882 ,p_fin_plan_type_id => NULL
10883 ,p_version_type => NULL
10884 ,p_resource_list_id => lx_resource_list_id
10885 ,p_time_phased_code => lx_time_phased_type_code
10886 ,p_budget_entry_method_code => l_budget_entry_method_code
10887 ,p_entry_level_code => l_entry_level_code
10888 ,p_allow_qty_flag => NULL
10889 ,p_allow_raw_cost_flag => NULL
10890 ,p_allow_burdened_cost_flag => NULL
10891 ,p_allow_revenue_flag => NULL
10892 ,p_multi_currency_flag => NULL
10893 ,p_project_cost_rate_type => NULL
10894 ,p_project_cost_rate_date_typ => NULL
10895 ,p_project_cost_rate_date => NULL
10896 ,p_project_cost_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10897 ,p_projfunc_cost_rate_type => NULL
10898 ,p_projfunc_cost_rate_date_typ => NULL
10899 ,p_projfunc_cost_rate_date => NULL
10900 ,p_projfunc_cost_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10901 ,p_project_rev_rate_type => NULL
10902 ,p_project_rev_rate_date_typ => NULL
10903 ,p_project_rev_rate_date => NULL
10904 ,p_project_rev_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10905 ,p_projfunc_rev_rate_type => NULL
10906 ,p_projfunc_rev_rate_date_typ => NULL
10907 ,p_projfunc_rev_rate_date => NULL
10908 ,p_projfunc_rev_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10909 ,px_budget_lines_in => l_budget_lines_in
10910 ,x_budget_lines_out => p_budget_lines_out /* Bug 3368135*/
10911 /* Bug 3986129: FP.M Web ADI Dev changes: New parameters added */
10912 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
10913 ,x_etc_method_code_tbl => l_etc_method_code_tbl
10914 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
10915 ,x_msg_count => p_msg_count
10916 ,x_msg_data => p_msg_data
10917 ,x_return_status => p_return_status);
10918
10919 IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN -- 3453650
10920 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10921 END IF;
10922
10923 ELSE --l_budget_type_code IS NOT NULL
10924
10925 IF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
10926 l_allow_qty_flag := lx_cost_qty_flag;
10927 ELSIF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
10928 l_allow_qty_flag := lx_revenue_qty_flag;
10929 ELSE
10930 l_allow_qty_flag := lx_all_qty_flag;
10931 END IF;
10932
10933 --Validate the finplan lines passed
10934 pa_budget_pvt.Validate_Budget_Lines
10935 ( p_pa_project_id => l_project_id
10936 ,p_budget_type_code => NULL
10937 ,p_fin_plan_type_id => l_fin_plan_type_id
10938 ,p_version_type => lx_version_type
10939 ,p_resource_list_id => lx_resource_list_id
10940 ,p_time_phased_code => lx_time_phased_type_code
10941 ,p_budget_entry_method_code => NULL
10942 ,p_entry_level_code => l_fin_plan_level_code
10943 ,p_allow_qty_flag => l_allow_qty_flag
10944 ,p_allow_raw_cost_flag => lx_raw_cost_flag
10945 ,p_allow_burdened_cost_flag => lx_burdened_cost_flag
10946 ,p_allow_revenue_flag => lx_revenue_flag --Bug 4422201.Passing the correct flag for this parameter.
10947 ,p_multi_currency_flag => lx_plan_in_multi_curr_flag
10948 ,p_project_cost_rate_type => lx_project_cost_rate_type
10949 ,p_project_cost_rate_date_typ => lx_project_cost_rate_date_typ
10950 ,p_project_cost_rate_date => lx_project_cost_rate_date
10951 ,p_project_cost_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10952 ,p_projfunc_cost_rate_type => lx_projfunc_cost_rate_type
10953 ,p_projfunc_cost_rate_date_typ => lx_projfunc_cost_rate_date_typ
10954 ,p_projfunc_cost_rate_date => lx_projfunc_cost_rate_date
10955 ,p_projfunc_cost_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10956 ,p_project_rev_rate_type => lx_project_rev_rate_type
10957 ,p_project_rev_rate_date_typ => lx_project_rev_rate_date_typ
10958 ,p_project_rev_rate_date => lx_project_rev_rate_date
10959 ,p_project_rev_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10960 ,p_projfunc_rev_rate_type => lx_projfunc_rev_rate_type
10961 ,p_projfunc_rev_rate_date_typ => lx_projfunc_rev_rate_date_typ
10962 ,p_projfunc_rev_rate_date => lx_projfunc_rev_rate_date
10963 ,p_projfunc_rev_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10964 ,p_version_info_rec => l_version_info_rec -- Added for bug 4290310.
10965 ,px_budget_lines_in => l_budget_lines_in
10966 ,x_budget_lines_out => p_budget_lines_out /* Bug 3368135*/
10967 /* Bug 3986129: FP.M Web ADI Dev changes: New parameters added */
10968 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
10969 ,x_etc_method_code_tbl => l_etc_method_code_tbl
10970 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
10971 ,x_msg_count => p_msg_count
10972 ,x_msg_data => p_msg_data
10973 ,x_return_status => p_return_status);
10974
10975 IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10976 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10977 END IF;
10978 END IF; --l_budget_type_code IS NOT NULL
10979
10980 --In the below code for finplan model validate header level currency conversion attributes and update them.
10981 IF (l_budget_type_code IS NULL)
10982 THEN
10983 IF(lx_plan_in_multi_curr_flag = 'N')
10984 THEN
10985 IF((p_projfunc_cost_rate_type is null OR p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10986 (p_projfunc_cost_rate_date_typ is null OR p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10987 (p_projfunc_cost_rate_date is null OR p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) AND
10988 (p_projfunc_rev_rate_type is null OR p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10989 (p_projfunc_rev_rate_date_typ is null OR p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10990 (p_projfunc_rev_rate_date is null OR p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) AND
10991 (p_project_cost_rate_type is null OR p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10992 (p_project_cost_rate_date_typ is null OR p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10993 (p_project_cost_rate_date is null OR p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) AND
10994 (p_project_rev_rate_type is null OR p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10995 (p_project_rev_rate_date_typ is null OR p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10996 (p_project_rev_rate_date is null OR p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ))
10997 THEN
10998 NULL;
10999 ELSE
11000 /*even if one of the currency conversion attributes is not null then call validate header info
11001 *coz its possible tht multi currency flag could be No and we can still have values for the currency conversion
11002 *attributes*/
11003 l_call_validate_curr_api_flg := 'Y'; --Setting this flag to call the validate_currency_conversion API later.
11004 END IF;
11005 ELSIF (lx_plan_in_multi_curr_flag = 'Y') THEN
11006 IF( p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
11007 p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
11008 p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
11009 p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
11010 p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
11011 p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
11012 p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
11013 p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
11014 p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
11015 p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
11016 p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
11017 p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
11018 THEN --if the user doesnt want them to change then we need not call validate API
11019 NULL;
11020 ELSE
11021 /*Here there could be two cases. All the passed MC conversion attributes could be null or one of them could be not null
11022 *When even one of them is not null then validate_conversion_attributes API has to be called surely for validating the attribute
11023 * which has been passed.
11024 *And for the other case when all the attributes are null we shd be raising the error as this shd not be allowed for MC=Y. So as
11025 *of now assuming validate_conversion_attribute api would raise this error we are calling the validate conversion API. If this
11026 * API doesnt raise the error for this case then we will raise the error from here itself*/
11027 /*validate_conversion_attribute API raises the error when all the MC conversion attributes are null. So we are not
11028 raising this error from here.*/
11029
11030 l_call_validate_curr_api_flg := 'Y';--Setting this flag to call the validate_currency_conversion API later.
11031 END IF;
11032 END IF;
11033
11034 IF(l_call_validate_curr_api_flg = 'Y') --Now call the validate_currency_conversion API
11035 THEN
11036 -- Depending on px_version_type initialise l_conv_attrs_to_be_validated
11037
11038 IF (lx_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL) THEN
11039 l_conv_attrs_to_be_validated := lx_version_type;
11040 ELSE
11041 l_conv_attrs_to_be_validated := PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_BOTH;
11042 END IF;
11043
11044 IF l_conv_attrs_to_be_validated = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
11045
11046 lx_project_rev_rate_type :=NULL;
11047 lx_project_rev_rate_date_typ :=NULL;
11048 lx_project_rev_rate_date :=NULL;
11049
11050 lx_projfunc_rev_rate_type :=NULL;
11051 lx_projfunc_rev_rate_date_typ :=NULL;
11052 lx_projfunc_rev_rate_date :=NULL;
11053
11054 ELSIF l_conv_attrs_to_be_validated = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
11055
11056 lx_project_cost_rate_type :=NULL;
11057 lx_project_cost_rate_date_typ :=NULL;
11058 lx_project_cost_rate_date :=NULL;
11059
11060 lx_projfunc_cost_rate_type :=NULL;
11061 lx_projfunc_cost_rate_date_typ :=NULL;
11062 lx_projfunc_cost_rate_date :=NULL;
11063
11064 END IF;
11065
11066 SELECT p.project_currency_code
11067 ,p.projfunc_currency_code
11068 INTO l_project_currency_code
11069 ,l_projfunc_currency_code
11070 FROM pa_projects_all p
11071 WHERE p.project_id = l_project_id;
11072
11073
11074 SELECT projfunc_cost_rate_type
11075 ,projfunc_rev_rate_type
11076 ,project_cost_rate_type
11077 ,project_rev_rate_type
11078 INTO l_projfunc_cost_rate_type
11079 ,l_projfunc_rev_rate_type
11080 ,l_project_cost_rate_type
11081 ,l_project_rev_rate_type
11082 FROM pa_proj_fp_options
11083 WHERE project_id = l_project_id
11084 AND fin_plan_type_id=l_fin_plan_type_id
11085 AND fin_plan_version_id IS NULL
11086 AND fin_plan_option_level_code= PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE;
11087
11088 pa_budget_pvt.valid_rate_type
11089 (p_pt_project_cost_rate_type => l_project_cost_rate_type,
11090 p_pt_project_rev_rate_type => l_project_rev_rate_type,
11091 p_pt_projfunc_cost_rate_type=> l_projfunc_cost_rate_type,
11092 p_pt_projfunc_rev_rate_type => l_projfunc_rev_rate_type,
11093 p_pv_project_cost_rate_type => lx_project_cost_rate_type,
11094 p_pv_project_rev_rate_type => lx_projfunc_rev_rate_type,
11095 p_pv_projfunc_cost_rate_type=> lx_projfunc_cost_rate_type,
11096 p_pv_projfunc_rev_rate_type => lx_projfunc_rev_rate_date,
11097 x_is_rate_type_valid => l_is_rate_type_valid,
11098 x_return_status => p_return_status,
11099 x_msg_count => p_msg_count,
11100 x_msg_data => p_msg_data);
11101
11102 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11103 IF l_debug_mode = 'Y' THEN
11104 pa_debug.g_err_stage:= 'valid_rate_type returned error';
11105 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11106 END IF;
11107 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11108 END IF;
11109
11110 pa_fin_plan_utils.validate_currency_attributes
11111 (px_project_cost_rate_type => lx_project_cost_rate_type
11112 ,px_project_cost_rate_date_typ => lx_project_cost_rate_date_typ
11113 ,px_project_cost_rate_date => lx_project_cost_rate_date
11114 ,px_project_cost_exchange_rate => l_project_cost_exchange_rate
11115 ,px_projfunc_cost_rate_type => lx_projfunc_cost_rate_type
11116 ,px_projfunc_cost_rate_date_typ => lx_projfunc_cost_rate_date_typ
11117 ,px_projfunc_cost_rate_date => lx_projfunc_cost_rate_date
11118 ,px_projfunc_cost_exchange_rate => l_projfunc_cost_exchange_rate
11119 ,px_project_rev_rate_type => lx_project_rev_rate_type
11120 ,px_project_rev_rate_date_typ => lx_project_rev_rate_date_typ
11121 ,px_project_rev_rate_date => lx_project_rev_rate_date
11122 ,px_project_rev_exchange_rate => l_project_rev_exchange_rate
11123 ,px_projfunc_rev_rate_type => lx_projfunc_rev_rate_type
11124 ,px_projfunc_rev_rate_date_typ => lx_projfunc_rev_rate_date_typ
11125 ,px_projfunc_rev_rate_date => lx_projfunc_rev_rate_date
11126 ,px_projfunc_rev_exchange_rate => l_projfunc_rev_exchange_rate
11127 ,p_project_currency_code => l_project_currency_code
11128 ,p_projfunc_currency_code => l_projfunc_currency_code
11129 ,p_context => PA_FP_CONSTANTS_PKG.G_AMG_API_HEADER
11130 ,p_attrs_to_be_validated => l_conv_attrs_to_be_validated
11131 ,x_return_status => p_return_status
11132 ,x_msg_count => p_msg_count
11133 ,x_msg_data => p_msg_data);
11134
11135 IF (p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11136 p_return_status:=FND_API.G_RET_STS_ERROR;
11137 IF l_debug_mode = 'Y' THEN
11138 pa_debug.g_err_stage:= 'Validate currency attributes returned error';
11139 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11140 END IF;
11141 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11142 END IF;
11143
11144 IF l_debug_mode = 'Y' THEN
11145 pa_debug.g_err_stage := 'Updating pa_proj_fp_options with multi currency conversion attributes';
11146 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11147 END IF;
11148
11149 update pa_proj_fp_options
11150 set
11151 projfunc_cost_rate_type = decode(p_projfunc_cost_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, projfunc_cost_rate_type , p_projfunc_cost_rate_type)
11152 ,projfunc_cost_rate_date_type = decode(p_projfunc_cost_rate_date_typ,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, projfunc_cost_rate_date_type, p_projfunc_cost_rate_date_typ)
11153 ,projfunc_cost_rate_date = decode(p_projfunc_cost_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE, projfunc_cost_rate_date , p_projfunc_cost_rate_date)
11154 ,projfunc_rev_rate_type = decode(p_projfunc_rev_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, projfunc_rev_rate_type , p_projfunc_rev_rate_type)
11155 ,projfunc_rev_rate_date_type = decode(p_projfunc_rev_rate_date_typ, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, projfunc_rev_rate_date_type , p_projfunc_rev_rate_date_typ)
11156 ,projfunc_rev_rate_date = decode(p_projfunc_rev_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE, projfunc_rev_rate_date , p_projfunc_rev_rate_date)
11157 ,project_cost_rate_type = decode(p_project_cost_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, project_cost_rate_type , p_project_cost_rate_type)
11158 ,project_cost_rate_date_type = decode(p_project_cost_rate_date_typ, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, project_cost_rate_date_type , p_project_cost_rate_date_typ)
11159 ,project_cost_rate_date = decode(p_project_cost_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE, project_cost_rate_date , p_project_cost_rate_date)
11160 ,project_rev_rate_type = decode(p_project_rev_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, project_rev_rate_type , p_project_rev_rate_type)
11161 ,project_rev_rate_date_type = decode(p_project_rev_rate_date_typ, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, project_rev_rate_date_type , p_project_rev_rate_date_typ)
11162 ,project_rev_rate_date = decode(p_project_rev_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE, project_rev_rate_date , p_project_rev_rate_date)
11163 ,record_version_number = record_version_number +1
11164 ,last_update_date = SYSDATE
11165 ,last_updated_by = G_USER_ID
11166 ,last_update_login = G_LOGIN_ID
11167 where project_id = l_project_id
11168 and fin_plan_type_id = l_fin_plan_type_id
11169 and fin_plan_version_id = l_budget_version_id;
11170 END IF; --(l_call_validate_curr_api_flg = 'Y')
11171 END IF;--For finplan model validate header level currency conversion attributes.
11172
11173 --Major changes for the bug 3453650
11174
11175 -- BUDGET LINES
11176
11177 l_budget_line_index := p_budget_lines_in.first;
11178
11179 IF p_budget_lines_in.exists(l_budget_line_index)
11180 THEN
11181 IF l_budget_type_code IS NOT NULL THEN -- bug 3453650
11182 OPEN l_budget_entry_method_csr( l_budget_entry_method_code );
11183 FETCH l_budget_entry_method_csr INTO l_time_phased_type_code
11184 , l_entry_level_code
11185 , l_categorization_code;
11186 CLOSE l_budget_entry_method_csr;
11187 END IF;
11188
11189 --Initializing the variable j which is used to build the l_finplan_lines_tab for the finplan model.
11190 j:=1;
11191 <<budget_line>>
11192 WHILE l_budget_line_index IS NOT NULL LOOP
11193
11194 --dbms_output.put_line('In budget lines LOOP');
11195
11196 --initialize return status for budget line to success
11197 p_budget_lines_out(l_budget_line_index).return_status := FND_API.G_RET_STS_SUCCESS;
11198
11199 /*Note carefully that we should be using l_budget_lines_in for all the processing going fwd. This l_budgte_lines_in table is an
11200 *.output parameter of vallidate_budget_lines(this call to validate_budget_lines has been made before this point in code). */
11201 l_budget_line_in_rec := l_budget_lines_in(l_budget_line_index);--p_budget_lines_in(l_budget_line_index);
11202
11203
11204 IF l_budget_line_in_rec.period_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11205 AND l_budget_line_in_rec.period_name IS NOT NULL
11206 THEN
11207
11208 OPEN l_budget_periods_csr( l_budget_line_in_rec.period_name
11209 ,l_time_phased_type_code);
11210
11211 FETCH l_budget_periods_csr INTO l_budget_start_date; --is needed to be able to identify a budgetline
11212
11213 IF l_budget_periods_csr%NOTFOUND
11214 THEN
11215
11216 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11217 THEN
11218 pa_interface_utils_pub.map_new_amg_msg
11219 ( p_old_message_code => 'PA_BUDGET_PERIOD_IS_INVALID'
11220 ,p_msg_attribute => 'CHANGE'
11221 ,p_resize_flag => 'Y'
11222 ,p_msg_context => 'BUDG'
11223 ,p_attribute1 => l_amg_segment1
11224 ,p_attribute2 => ''
11225 ,p_attribute3 => l_budget_type_code
11226 ,p_attribute4 => ''
11227 ,p_attribute5 => '');
11228 END IF;
11229
11230 CLOSE l_budget_periods_csr;
11231 p_budget_lines_out(l_budget_line_index).return_status := FND_API.G_RET_STS_ERROR;
11232 p_multiple_task_msg := 'F';
11233
11234
11235 END IF;
11236
11237 CLOSE l_budget_periods_csr;
11238
11239 ELSIF l_budget_line_in_rec.budget_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
11240 AND l_budget_line_in_rec.budget_start_date IS NOT NULL
11241 THEN
11242
11243 l_budget_start_date := trunc(l_budget_line_in_rec.budget_start_date);
11244
11245 ELSE
11246
11247 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11248 THEN
11249 pa_interface_utils_pub.map_new_amg_msg
11250 ( p_old_message_code => 'PA_START_DATE_MISSING'
11251 ,p_msg_attribute => 'CHANGE'
11252 ,p_resize_flag => 'N'
11253 ,p_msg_context => 'BUDG'
11254 ,p_attribute1 => l_amg_segment1
11255 ,p_attribute2 => ''
11256 ,p_attribute3 => l_budget_type_code
11257 ,p_attribute4 => ''
11258 ,p_attribute5 => '');
11259 END IF;
11260
11261 p_budget_lines_out(l_budget_line_index).return_status := FND_API.G_RET_STS_ERROR;
11262 p_multiple_task_msg := 'F';
11263 -- RAISE FND_API.G_EXC_ERROR;
11264
11265 END IF;
11266
11267
11268 -- if resource alias is (passed and not NULL)
11269 -- and resource member is (passed and not NULL)
11270 -- then we convert the alias to the id
11271 -- else we default to the uncategorized resource member
11272
11273 IF l_budget_type_code IS NOT NULL THEN
11274
11275 IF l_categorization_code = 'N' THEN
11276 pa_get_resource.Get_Uncateg_Resource_Info
11277 (p_resource_list_id => l_uncategorized_list_id,
11278 p_resource_list_member_id => l_uncategorized_rlmid,
11279 p_resource_id => l_uncategorized_resid,
11280 p_track_as_labor_flag => l_track_as_labor_flag,
11281 p_err_code => l_err_code,
11282 p_err_stage => l_err_stage,
11283 p_err_stack => l_err_stack );
11284 IF l_err_code <> 0 THEN
11285 IF NOT pa_project_pvt.check_valid_message(l_err_stage) THEN
11286 pa_interface_utils_pub.map_new_amg_msg
11287 ( p_old_message_code => 'PA_NO_UNCATEGORIZED_LIST'
11288 ,p_msg_attribute => 'CHANGE'
11289 ,p_resize_flag => 'N'
11290 ,p_msg_context => 'BUDG'
11291 ,p_attribute1 => l_amg_segment1
11292 ,p_attribute2 => ''
11293 ,p_attribute3 => l_budget_type_code
11294 ,p_attribute4 => ''
11295 ,p_attribute5 => to_char(l_budget_start_date));
11296 ELSE
11297 pa_interface_utils_pub.map_new_amg_msg
11298 ( p_old_message_code => l_err_stage
11299 ,p_msg_attribute => 'CHANGE'
11300 ,p_resize_flag => 'N'
11301 ,p_msg_context => 'BUDG'
11302 ,p_attribute1 => l_amg_segment1
11303 ,p_attribute2 => ''
11304 ,p_attribute3 => l_budget_type_code
11305 ,p_attribute4 => ''
11306 ,p_attribute5 => to_char(l_budget_start_date));
11307 END IF;
11308 p_multiple_task_msg := 'F';
11309 -- RAISE FND_API.G_EXC_ERROR;
11310 END IF;
11311
11312 l_resource_list_member_id := l_uncategorized_rlmid;
11313 l_budget_alias := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
11314
11315 ELSIF l_categorization_code = 'R' THEN
11316 IF (l_budget_line_in_rec.resource_alias <>
11317 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11318 AND l_budget_line_in_rec.resource_alias IS NOT NULL)
11319 OR (l_budget_line_in_rec.resource_list_member_id
11320 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11321 AND l_budget_line_in_rec.resource_list_member_id IS NOT NULL) THEN
11322
11323 pa_resource_pub.convert_alias_to_id
11324 ( p_project_id => l_project_id --Passing the project id here.
11325 ,p_resource_list_id => lx_resource_list_id --3453650
11326 ,p_alias =>l_budget_line_in_rec.resource_alias
11327 ,p_resource_list_member_id =>l_budget_line_in_rec.resource_list_member_id
11328 ,p_out_resource_list_member_id => l_resource_list_member_id
11329 ,p_return_status => l_return_status );
11330
11331 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11332 p_budget_lines_out(l_budget_line_index).return_status :=
11333 l_return_status;
11334 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11335 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11336 p_budget_lines_out(l_budget_line_index).return_status :=
11337 l_return_status;
11338 p_multiple_task_msg := 'F';
11339 -- RAISE FND_API.G_EXC_ERROR;
11340 END IF;
11341 l_budget_alias := l_budget_line_in_rec.resource_alias;
11342 END IF; -- If l_budget_line_in_rec.resource_alias <>
11343 END IF; -- If l_categorization_code = 'N'
11344
11345 -- convert pm_task_reference to pa_task_id
11346 -- only if entry_level_code in ('L','M','T')
11347 IF l_entry_level_code = 'P' THEN
11348 l_task_id := 0;
11349 END IF;
11350
11351 IF l_entry_level_code in ('T','L','M') THEN
11352 Pa_project_pvt.Convert_pm_taskref_to_id
11353 (p_pa_project_id => l_project_id,
11354 p_pa_task_id => l_budget_line_in_rec.pa_task_id,
11355 p_pm_task_reference => l_budget_line_in_rec.pm_task_reference,
11356 p_out_task_id => l_task_id,
11357 p_return_status => l_return_status );
11358 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11359 p_budget_lines_out(l_budget_line_index).return_status :=
11360 l_return_status;
11361 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11362 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11363 p_budget_lines_out(l_budget_line_index).return_status :=
11364 l_return_status;
11365 p_multiple_task_msg := 'F';
11366 -- RAISE FND_API.G_EXC_ERROR;
11367 END IF;
11368 END IF;
11369
11370 ELSE -- Bug 3453650 budget_type_code is not null
11371
11372 pa_get_resource.Get_Uncateg_Resource_Info
11373 (p_resource_list_id => l_uncategorized_list_id,
11374 p_resource_list_member_id => l_uncategorized_rlmid,
11375 p_resource_id => l_uncategorized_resid,
11376 p_track_as_labor_flag => l_track_as_labor_flag,
11377 p_err_code => l_err_code,
11378 p_err_stage => l_err_stage,
11379 p_err_stack => l_err_stack );
11380 IF l_err_code <> 0 THEN
11381 IF NOT pa_project_pvt.check_valid_message(l_err_stage) THEN
11382 pa_interface_utils_pub.map_new_amg_msg
11383 ( p_old_message_code => 'PA_NO_UNCATEGORIZED_LIST'
11384 ,p_msg_attribute => 'CHANGE'
11385 ,p_resize_flag => 'N'
11386 ,p_msg_context => 'BUDG'
11387 ,p_attribute1 => l_amg_segment1
11388 ,p_attribute2 => ''
11389 ,p_attribute3 => lx_fin_plan_type_name
11390 ,p_attribute4 => ''
11391 ,p_attribute5 => to_char(l_budget_start_date));
11392 ELSE
11393 pa_interface_utils_pub.map_new_amg_msg
11394 ( p_old_message_code => l_err_stage
11395 ,p_msg_attribute => 'CHANGE'
11396 ,p_resize_flag => 'N'
11397 ,p_msg_context => 'BUDG'
11398 ,p_attribute1 => l_amg_segment1
11399 ,p_attribute2 => ''
11400 ,p_attribute3 => lx_fin_plan_type_name
11401 ,p_attribute4 => ''
11402 ,p_attribute5 => to_char(l_budget_start_date));
11403 END IF;
11404 p_multiple_task_msg := 'F';
11405 END IF;
11406
11407 IF (nvl(l_uncategorized_list_id,-99) = lx_resource_list_id) THEN
11408
11409 l_budget_line_in_rec.resource_list_member_id :=l_uncategorized_rlmid;
11410 l_budget_line_in_rec.resource_alias := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
11411 l_resource_list_member_id := l_uncategorized_rlmid; -- bug 3453650
11412
11413 ELSE
11414 --end comment for 3453650
11415
11416 -- convert resource alias to (resource) member id
11417 -- if resource alias is (passed and not NULL)
11418 -- and resource member is (passed and not NULL)
11419 -- then we convert the alias to the id
11420 -- else we default to the uncategorized resource member
11421
11422 IF (l_budget_line_in_rec.resource_alias <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11423 AND l_budget_line_in_rec.resource_alias IS NOT NULL)
11424 OR (l_budget_line_in_rec.resource_list_member_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11425 AND l_budget_line_in_rec.resource_list_member_id IS NOT NULL)
11426 THEN
11427 pa_resource_pub.Convert_alias_to_id
11428 ( p_project_id => l_project_id
11429 ,p_resource_list_id => lx_resource_list_id -- 3453650
11430 ,p_alias => l_budget_line_in_rec.resource_alias
11431 ,p_resource_list_member_id => l_budget_line_in_rec.resource_list_member_id
11432 ,p_out_resource_list_member_id => l_resource_list_member_id -- 3453650
11433 ,p_return_status => x_return_status );
11434
11435 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11436 p_budget_lines_out(l_budget_line_index).return_status := x_return_status;
11437 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11438 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11439 p_budget_lines_out(l_budget_line_index).return_status :=
11440 x_return_status;
11441 p_multiple_task_msg := 'F';
11442 END IF;
11443 l_budget_alias := l_budget_line_in_rec.resource_alias;
11444
11445 END IF; -- l_budget_line_in_rec.resource_alias <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11446 END IF; -- nvl(l_uncategorized_res_list_id,-99) = lx_resource_list_id Bug 3454650
11447 IF l_fin_plan_level_code = 'P'
11448 OR (l_fin_plan_level_code in ('T','L') AND l_budget_line_in_rec.pa_task_id = 0 AND l_fin_plan_type_id IS NOT NULL) -- Added for Bug 8688683
11449 THEN
11450 l_task_id := 0;
11451 -- END IF;
11452
11453 ELSIF l_fin_plan_level_code in ('T','L','M') THEN
11454 Pa_project_pvt.Convert_pm_taskref_to_id
11455 (p_pa_project_id => l_project_id,
11456 p_pa_task_id => l_budget_line_in_rec.pa_task_id,
11457 p_pm_task_reference => l_budget_line_in_rec.pm_task_reference,
11458 p_out_task_id => l_task_id,
11459 p_return_status => l_return_status );
11460 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11461 p_budget_lines_out(l_budget_line_index).return_status :=
11462 l_return_status;
11463 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11464 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11465 p_budget_lines_out(l_budget_line_index).return_status :=
11466 l_return_status;
11467 p_multiple_task_msg := 'F';
11468
11469 END IF;
11470 END IF; -- l_fin_plan_level_code in ('T','L','M')
11471 END IF; -- IF BUDGET TYPE CODE IS NOT NULL
11472
11473 l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
11474 (p_task_number=> ''
11475 ,p_task_reference => ''
11476 ,p_task_id => l_task_id);
11477
11478 --get the resource assignment id
11479 --KK
11480 OPEN l_resource_assignment_csr( l_budget_version_id
11481 ,l_task_id
11482 ,l_resource_list_member_id
11483 ,l_budget_line_in_rec.cbs_element_id);
11484
11485 FETCH l_resource_assignment_csr INTO l_resource_assignment_id;
11486
11487 IF l_resource_assignment_csr%NOTFOUND
11488 THEN
11489 l_new_resource_assignment := TRUE;
11490 ELSE
11491 l_new_resource_assignment := FALSE;
11492 END IF;
11493
11494 CLOSE l_resource_assignment_csr;
11495
11496
11497 IF l_budget_line_in_rec.pm_budget_line_reference =
11498 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11499 l_budget_line_in_rec.pm_budget_line_reference := NULL;
11500 END IF;
11501
11502 /* Bug: 3453650 Added the below code*/
11503
11504 l_dummy := Null; -- Added for bug 4192109
11505
11506 IF l_budget_type_code IS NOT NULL THEN
11507 -- dbms_output.put_line('Checking existence of budget line . l_budget_start_date = ' || l_budget_start_date);
11508 OPEN l_budget_line_csr( l_resource_assignment_id, l_budget_start_date);
11509
11510 FETCH l_budget_line_csr INTO l_dummy;
11511 CLOSE l_budget_line_csr;
11512
11513 -- If loop added for bug#12424439 ->FP:Bug#12606319
11514 IF l_time_phased_type_code = 'N' THEN
11515 OPEN l_budget_line_csr(l_resource_assignment_id ,temp_budget_start_date);
11516 FETCH l_budget_line_csr into l_dummy;
11517 CLOSE l_budget_line_csr;
11518 IF l_dummy = 'X' THEN
11519 l_budget_start_date := temp_budget_start_date;
11520 END IF;
11521 END IF;
11522 -- end of code changes done for bug#12424439 ->FP:Bug#12606319
11523
11524 ELSE
11525 IF l_budget_line_in_rec.txn_currency_code IS NULL THEN
11526 pa_interface_utils_pub.map_new_amg_msg
11527 ( p_old_message_code => 'PA_NO_TXN_CURRENCY_CODE'
11528 ,p_msg_attribute => 'CHANGE'
11529 ,p_resize_flag => 'N'
11530 ,p_msg_context => 'BUDG'
11531 ,p_attribute1 => l_amg_segment1
11532 ,p_attribute2 => ''
11533 ,p_attribute3 => lx_fin_plan_type_name
11534 ,p_attribute4 => ''
11535 ,p_attribute5 => '');
11536
11537 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11538 END IF;
11539
11540 OPEN l_finplan_line_csr(l_resource_assignment_id
11541 ,l_budget_start_date
11542 ,l_budget_line_in_rec.txn_currency_code);
11543 FETCH l_finplan_line_csr into l_dummy;
11544 CLOSE l_finplan_line_csr;
11545 END IF; -- l_budget_type_code IS NOT NULL
11546
11547 IF l_budget_type_code IS NOT NULL THEN
11548 --if new line then call insert_budget_line (for old model)
11549 IF (l_dummy <> 'X' OR l_dummy IS NULL) OR (l_new_resource_assignment) OR (lx_resource_list_id <> l_resource_list_id) THEN
11550 pa_budget_pvt.insert_budget_line
11551 ( p_return_status => l_return_status
11552 ,p_pa_project_id => l_project_id
11553 ,p_budget_type_code => l_budget_type_code
11554 ,p_pa_task_id => l_budget_line_in_rec.pa_task_id
11555 ,p_pm_task_reference => l_budget_line_in_rec.pm_task_reference
11556 ,p_resource_alias => l_budget_alias
11557 ,p_member_id => l_resource_list_member_id
11558 ,p_cbs_element_id => l_budget_line_in_rec.cbs_element_id --Bug 16604257
11559 ,p_budget_start_date => l_budget_line_in_rec.budget_start_date
11560 ,p_budget_end_date => l_budget_line_in_rec.budget_end_date
11561 ,p_period_name => l_budget_line_in_rec.period_name
11562 ,p_description => l_budget_line_in_rec.description
11563 ,p_raw_cost => l_budget_line_in_rec.raw_cost
11564 ,p_burdened_cost => l_budget_line_in_rec.burdened_cost
11565 ,p_revenue => l_budget_line_in_rec.revenue
11566 ,p_quantity => l_budget_line_in_rec.quantity
11567 ,p_pm_product_code => l_budget_line_in_rec.pm_product_code
11568 ,p_pm_budget_line_reference => l_budget_line_in_rec.pm_budget_line_reference
11569 ,p_resource_list_id => lx_resource_list_id
11570 ,p_attribute_category => l_budget_line_in_rec.attribute_category
11571 ,p_attribute1 => l_budget_line_in_rec.attribute1
11572 ,p_attribute2 => l_budget_line_in_rec.attribute2
11573 ,p_attribute3 => l_budget_line_in_rec.attribute3
11574 ,p_attribute4 => l_budget_line_in_rec.attribute4
11575 ,p_attribute5 => l_budget_line_in_rec.attribute5
11576 ,p_attribute6 => l_budget_line_in_rec.attribute6
11577 ,p_attribute7 => l_budget_line_in_rec.attribute7
11578 ,p_attribute8 => l_budget_line_in_rec.attribute8
11579 ,p_attribute9 => l_budget_line_in_rec.attribute9
11580 ,p_attribute10 => l_budget_line_in_rec.attribute10
11581 ,p_attribute11 => l_budget_line_in_rec.attribute11
11582 ,p_attribute12 => l_budget_line_in_rec.attribute12
11583 ,p_attribute13 => l_budget_line_in_rec.attribute13
11584 ,p_attribute14 => l_budget_line_in_rec.attribute14
11585 ,p_attribute15 => l_budget_line_in_rec.attribute15
11586 ,p_time_phased_type_code => lx_time_phased_type_code
11587 ,p_entry_level_code => l_entry_level_code
11588 ,p_budget_amount_code => l_budget_amount_code
11589 ,p_budget_entry_method_code => l_budget_entry_method_code
11590 ,p_categorization_code => l_categorization_code
11591 ,p_budget_version_id => l_budget_version_id
11592 ,p_change_reason_code => l_budget_line_in_rec.change_reason_code );
11593
11594 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
11595 THEN
11596 p_budget_lines_out(l_budget_line_index).return_status := l_return_status;
11597 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11598
11599 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
11600 THEN
11601 p_budget_lines_out(l_budget_line_index).return_status := l_return_status;
11602 p_multiple_task_msg := 'F';
11603 END IF;
11604
11605 ELSE -- If the line is already existing, then call update_budget_line_sql
11606 -- ELSE for the condition : (l_dummy <> 'X' OR l_dummy IS NULL) OR (l
11607
11608
11609 /*Note carefully that while making the comparision below we are reading from p_budget_lines_in and not from
11610 *. l_budget_lines_in. l_budget_lines is an o/p parameter of validate_budget_lines call to which is made
11611 * above in the code flow. And before calling validate_budget_lines G_MISS_XXX handling is done for the values
11612 * present in l_budget_lines. So we cant use l_budget_lines in making the comparision again*/
11613 IF p_budget_lines_in(l_budget_line_index).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11614 l_budget_line_in_rec.raw_cost := NULL;
11615 ELSIF(p_budget_lines_in(l_budget_line_index).raw_cost is null) THEN
11616 l_budget_line_in_rec.raw_cost := FND_API.G_MISS_NUM;
11617 ELSE
11618 l_budget_line_in_rec.raw_cost := l_budget_line_in_rec.raw_cost;
11619 END IF;
11620
11621 IF p_budget_lines_in(l_budget_line_index).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11622 l_budget_line_in_rec.burdened_cost := NULL;
11623 ELSIF(p_budget_lines_in(l_budget_line_index).burdened_cost is null) THEN
11624 l_budget_line_in_rec.burdened_cost := FND_API.G_MISS_NUM;
11625 ELSE
11626 l_budget_line_in_rec.burdened_cost := l_budget_line_in_rec.burdened_cost;
11627 END IF;
11628
11629 IF p_budget_lines_in(l_budget_line_index).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11630 l_budget_line_in_rec.revenue := NULL;
11631 ELSIF(p_budget_lines_in(l_budget_line_index).revenue is null) THEN
11632 l_budget_line_in_rec.revenue := FND_API.G_MISS_NUM;
11633 ELSE
11634 l_budget_line_in_rec.revenue := l_budget_line_in_rec.revenue;
11635 END IF;
11636
11637 IF p_budget_lines_in(l_budget_line_index).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11638 l_budget_line_in_rec.quantity := NULL;
11639 ELSIF(p_budget_lines_in(l_budget_line_index).quantity is null) THEN
11640 l_budget_line_in_rec.quantity := FND_API.G_MISS_NUM;
11641 ELSE
11642 l_budget_line_in_rec.quantity := l_budget_line_in_rec.quantity;
11643 END IF;
11644
11645 IF p_budget_lines_in(l_budget_line_index).change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11646 l_budget_line_in_rec.change_reason_code :=NULL;
11647 ELSIF(p_budget_lines_in(l_budget_line_index).change_reason_code is null) THEN
11648 l_budget_line_in_rec.change_reason_code := FND_API.G_MISS_CHAR;
11649 ELSE
11650 l_budget_line_in_rec.change_reason_code := l_budget_line_in_rec.change_reason_code ;
11651 END IF;
11652
11653 IF p_budget_lines_in(l_budget_line_index).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11654 l_budget_line_in_rec.description := NULL;
11655 ELSIF(p_budget_lines_in(l_budget_line_index).description is null) THEN
11656 l_budget_line_in_rec.description := FND_API.G_MISS_CHAR;
11657 ELSE
11658 l_budget_line_in_rec.description := l_budget_line_in_rec.description;
11659 END IF;
11660
11661 IF p_budget_lines_in(l_budget_line_index).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11662 l_budget_line_in_rec.attribute_category := NULL;
11663 ELSIF(p_budget_lines_in(l_budget_line_index).attribute_category is null) THEN
11664 l_budget_line_in_rec.attribute_category := FND_API.G_MISS_CHAR;
11665 ELSE
11666 l_budget_line_in_rec.attribute_category := l_budget_line_in_rec.attribute_category;
11667 END IF;
11668
11669 IF p_budget_lines_in(l_budget_line_index).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11670 l_budget_line_in_rec.attribute1 := NULL;
11671 ELSIF(p_budget_lines_in(l_budget_line_index).attribute1 is null) THEN
11672 l_budget_line_in_rec.attribute1 := FND_API.G_MISS_CHAR;
11673 ELSE
11674 l_budget_line_in_rec.attribute1 := l_budget_line_in_rec.attribute1;
11675 END IF;
11676
11677 IF p_budget_lines_in(l_budget_line_index).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11678 l_budget_line_in_rec.attribute2 := NULL;
11679 ELSIF(p_budget_lines_in(l_budget_line_index).attribute2 is null) THEN
11680 l_budget_line_in_rec.attribute2 := FND_API.G_MISS_CHAR;
11681 ELSE
11682 l_budget_line_in_rec.attribute2 := l_budget_line_in_rec.attribute2;
11683 END IF;
11684
11685 IF p_budget_lines_in(l_budget_line_index).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11686 l_budget_line_in_rec.attribute3 := NULL;
11687 ELSIF(p_budget_lines_in(l_budget_line_index).attribute3 is null) THEN
11688 l_budget_line_in_rec.attribute3 := FND_API.G_MISS_CHAR;
11689 ELSE
11690 l_budget_line_in_rec.attribute3 := l_budget_line_in_rec.attribute3;
11691 END IF;
11692
11693 IF p_budget_lines_in(l_budget_line_index).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11694 l_budget_line_in_rec.attribute4 := NULL;
11695 ELSIF(p_budget_lines_in(l_budget_line_index).attribute4 is null) THEN
11696 l_budget_line_in_rec.attribute4 := FND_API.G_MISS_CHAR;
11697 ELSE
11698 l_budget_line_in_rec.attribute4 := l_budget_line_in_rec.attribute4;
11699 END IF;
11700
11701 IF p_budget_lines_in(l_budget_line_index).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11702 l_budget_line_in_rec.attribute5 := NULL;
11703 ELSIF(p_budget_lines_in(l_budget_line_index).attribute5 is null) THEN
11704 l_budget_line_in_rec.attribute5 := FND_API.G_MISS_CHAR;
11705 ELSE
11706 l_budget_line_in_rec.attribute5 := l_budget_line_in_rec.attribute5;
11707 END IF;
11708
11709 IF p_budget_lines_in(l_budget_line_index).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11710 l_budget_line_in_rec.attribute6 := NULL;
11711 ELSIF(p_budget_lines_in(l_budget_line_index).attribute6 is null) THEN
11712 l_budget_line_in_rec.attribute6 := FND_API.G_MISS_CHAR;
11713 ELSE
11714 l_budget_line_in_rec.attribute6 := l_budget_line_in_rec.attribute6;
11715 END IF;
11716
11717 IF p_budget_lines_in(l_budget_line_index).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11718 l_budget_line_in_rec.attribute7 := NULL;
11719 ELSIF(p_budget_lines_in(l_budget_line_index).attribute7 is null) THEN
11720 l_budget_line_in_rec.attribute7 := FND_API.G_MISS_CHAR;
11721 ELSE
11722 l_budget_line_in_rec.attribute7 := l_budget_line_in_rec.attribute7;
11723 END IF;
11724
11725 IF p_budget_lines_in(l_budget_line_index).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11726 l_budget_line_in_rec.attribute8 := NULL;
11727 ELSIF(p_budget_lines_in(l_budget_line_index).attribute8 is null) THEN
11728 l_budget_line_in_rec.attribute8 := FND_API.G_MISS_CHAR;
11729 ELSE
11730 l_budget_line_in_rec.attribute8 := l_budget_line_in_rec.attribute8;
11731 END IF;
11732
11733 IF p_budget_lines_in(l_budget_line_index).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11734 l_budget_line_in_rec.attribute9 := NULL;
11735 ELSIF(p_budget_lines_in(l_budget_line_index).attribute9 is null) THEN
11736 l_budget_line_in_rec.attribute9 := FND_API.G_MISS_CHAR;
11737 ELSE
11738 l_budget_line_in_rec.attribute9 := l_budget_line_in_rec.attribute9;
11739 END IF;
11740
11741 IF p_budget_lines_in(l_budget_line_index).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11742 l_budget_line_in_rec.attribute10 := NULL;
11743 ELSIF(p_budget_lines_in(l_budget_line_index).attribute10 is null) THEN
11744 l_budget_line_in_rec.attribute10 := FND_API.G_MISS_CHAR;
11745 ELSE
11746 l_budget_line_in_rec.attribute10 := l_budget_line_in_rec.attribute10;
11747 END IF;
11748
11749 IF p_budget_lines_in(l_budget_line_index).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11750 l_budget_line_in_rec.attribute11 := NULL;
11751 ELSIF(p_budget_lines_in(l_budget_line_index).attribute11 is null) THEN
11752 l_budget_line_in_rec.attribute11 := FND_API.G_MISS_CHAR;
11753 ELSE
11754 l_budget_line_in_rec.attribute11 := l_budget_line_in_rec.attribute11;
11755 END IF;
11756
11757 IF p_budget_lines_in(l_budget_line_index).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11758 l_budget_line_in_rec.attribute12 := NULL;
11759 ELSIF(p_budget_lines_in(l_budget_line_index).attribute12 is null) THEN
11760 l_budget_line_in_rec.attribute12 := FND_API.G_MISS_CHAR;
11761 ELSE
11762 l_budget_line_in_rec.attribute12 := l_budget_line_in_rec.attribute12;
11763 END IF;
11764
11765 IF p_budget_lines_in(l_budget_line_index).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11766 l_budget_line_in_rec.attribute13 := NULL;
11767 ELSIF(p_budget_lines_in(l_budget_line_index).attribute13 is null) THEN
11768 l_budget_line_in_rec.attribute13 := FND_API.G_MISS_CHAR;
11769 ELSE
11770 l_budget_line_in_rec.attribute13 := l_budget_line_in_rec.attribute13;
11771 END IF;
11772
11773 IF p_budget_lines_in(l_budget_line_index).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11774 l_budget_line_in_rec.attribute14 := NULL;
11775 ELSIF(p_budget_lines_in(l_budget_line_index).attribute14 is null) THEN
11776 l_budget_line_in_rec.attribute14 := FND_API.G_MISS_CHAR;
11777 ELSE
11778 l_budget_line_in_rec.attribute14 := l_budget_line_in_rec.attribute14;
11779 END IF;
11780
11781 IF p_budget_lines_in(l_budget_line_index).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11782 l_budget_line_in_rec.attribute15 := NULL;
11783 ELSIF(p_budget_lines_in(l_budget_line_index).attribute15 is null) THEN
11784 l_budget_line_in_rec.attribute15 := FND_API.G_MISS_CHAR;
11785 ELSE
11786 l_budget_line_in_rec.attribute15 := l_budget_line_in_rec.attribute15;
11787 END IF;
11788
11789 PA_BUDGET_PVT.UPDATE_BUDGET_LINE_SQL
11790 ( p_return_status => l_return_status
11791 --,p_budget_amount_code => l_budget_amount_code
11792 ,p_budget_entry_method_code => l_budget_entry_method_code
11793 ,p_resource_assignment_id => l_resource_assignment_id
11794 ,p_start_date => l_budget_start_date
11795 ,p_time_phased_type_code => lx_time_phased_type_code
11796 ,p_description => l_budget_line_in_rec.description
11797 ,p_quantity => l_budget_line_in_rec.quantity
11798 ,p_raw_cost => l_budget_line_in_rec.raw_cost
11799 ,p_burdened_cost => l_budget_line_in_rec.burdened_cost
11800 ,p_revenue => l_budget_line_in_rec.revenue
11801 ,p_change_reason_code => l_budget_line_in_rec.change_reason_code
11802 ,p_attribute_category => l_budget_line_in_rec.attribute_category
11803 ,p_attribute1 => l_budget_line_in_rec.attribute1
11804 ,p_attribute2 => l_budget_line_in_rec.attribute2
11805 ,p_attribute3 => l_budget_line_in_rec.attribute3
11806 ,p_attribute4 => l_budget_line_in_rec.attribute4
11807 ,p_attribute5 => l_budget_line_in_rec.attribute5
11808 ,p_attribute6 => l_budget_line_in_rec.attribute6
11809 ,p_attribute7 => l_budget_line_in_rec.attribute7
11810 ,p_attribute8 => l_budget_line_in_rec.attribute8
11811 ,p_attribute9 => l_budget_line_in_rec.attribute9
11812 ,p_attribute10 => l_budget_line_in_rec.attribute10
11813 ,p_attribute11 => l_budget_line_in_rec.attribute11
11814 ,p_attribute12 => l_budget_line_in_rec.attribute12
11815 ,p_attribute13 => l_budget_line_in_rec.attribute13
11816 ,p_attribute14 => l_budget_line_in_rec.attribute14
11817 ,p_attribute15 => l_budget_line_in_rec.attribute15
11818 );
11819
11820 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11821 p_budget_lines_out(l_budget_line_index).return_status := l_return_status;
11822 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11823
11824 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11825 p_budget_lines_out(l_budget_line_index).return_status := l_return_status;
11826 p_multiple_task_msg := 'F';
11827
11828 END IF; -- l_return_status = FND_API.G_RET_STS_UNE
11829
11830 END IF; -- End for the condition : (l_dummy <> 'X' OR l_dummy IS NULL) OR
11831
11832 ELSE -- l_budget_type_code IS NOT NULL (Inserting lines for the finplan model)
11833 --Checking it its a new budget line.
11834 IF (l_dummy <> 'X' OR l_dummy IS NULL) OR (l_new_resource_assignment) OR (lx_resource_list_id <> l_resource_list_id) THEN
11835 --This is a new line case.
11836 --Get the uncategorized resource list info.
11837 pa_fin_plan_utils.Get_Uncat_Resource_List_Info
11838 (x_resource_list_id => l_uncategorized_res_list_id,
11839 x_resource_list_member_id => l_uncategorized_rlmid,
11840 x_track_as_labor_flag => l_unc_track_as_labor_flag,
11841 x_unit_of_measure => l_unc_unit_of_measure,
11842 x_return_status => p_return_status,
11843 x_msg_count => p_msg_count,
11844 x_msg_data => p_msg_data);
11845
11846 i := l_budget_line_index;
11847
11848 IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11849 l_budget_lines_in(i).period_name := NULL;
11850 END IF;
11851
11852 --Lines should be processed only if atleast one of the amounts exist
11853 -- Commenting out the below check for Bug#8423481. In SelfService, we do not have this check
11854 /* IF (nvl(l_budget_lines_in(i).quantity,0)<>0 OR
11855 nvl(l_budget_lines_in(i).raw_cost,0)<>0 OR
11856 nvl(l_budget_lines_in(i).burdened_cost,0)<>0 OR
11857 nvl(l_budget_lines_in(i).revenue,0) <>0) THEN */
11858
11859 -- Get UOM and track as labor flag only if the resource list is not uncategorized
11860 -- If it is is uncategorized then we can make use of the uom and track as labor
11861 -- flag obtained earlier
11862 --Commented out the below code to get the unit of measure and track_as_labor_flag value
11863 --because these values are used only while passing to add_fin_plan_lines(and further to create_fin_plan_lines )
11864 --where they are simply populated in pa_fp_rollup_tmp but are not used anywhere.
11865 /* IF (lx_resource_list_id <> l_uncategorized_res_list_id) THEN -- bug 3453650
11866
11867 SELECT pr.unit_of_measure
11868 ,prlm.track_as_labor_flag
11869 INTO l_unit_of_measure
11870 ,l_track_as_labor_flag
11871 FROM pa_resources pr
11872 ,pa_resource_lists prl
11873 ,pa_resource_list_members prlm
11874 WHERE prl.resource_list_id = lx_resource_list_id -- bug 3453650
11875 AND pr.resource_id = prlm.resource_id
11876 AND prl.resource_list_id = prlm.resource_list_id
11877 AND prlm.resource_list_member_id = l_budget_lines_in(i).resource_list_member_id;
11878
11879 END IF;*/
11880
11881 -- dbms_output.put_line('copying from budget to rollup finplan');
11882 -- Convert flex field attributes to NULL if they have Miss Char as value
11883
11884 l_finplan_lines_tab(j).system_reference1 := l_budget_lines_in(i).pa_task_id;
11885 l_finplan_lines_tab(j).system_reference2 := l_budget_lines_in(i).resource_list_member_id;
11886 l_finplan_lines_tab(j).system_reference3 := l_budget_lines_in(1).cbs_element_id;-- Added for CBS 16604257
11887 l_finplan_lines_tab(j).start_date := l_budget_lines_in(i).budget_start_date;
11888 l_finplan_lines_tab(j).end_date := l_budget_lines_in(i).budget_end_date;
11889 l_finplan_lines_tab(j).period_name := l_budget_lines_in(i).period_name;
11890 l_finplan_lines_tab(j).system_reference4 := l_unit_of_measure ;
11891 l_finplan_lines_tab(j).system_reference5 := l_track_as_labor_flag ;
11892 l_finplan_lines_tab(j).txn_currency_code := l_budget_lines_in(i).txn_currency_code;
11893 l_finplan_lines_tab(j).projfunc_raw_cost := NULL;
11894 l_finplan_lines_tab(j).projfunc_burdened_cost := NULL;
11895 l_finplan_lines_tab(j).projfunc_revenue := NULL;
11896 l_finplan_lines_tab(j).project_raw_cost := NULL ;
11897 l_finplan_lines_tab(j).project_burdened_cost := NULL;
11898 l_finplan_lines_tab(j).project_revenue := NULL;
11899
11900 /*Note carefully that while making the comparision below we are reading from p_budget_lines_in and not from
11901 *. l_budget_lines_in. l_budget_lines is an o/p parameter of validate_budget_lines call to which is made
11902 * above in the code flow. And before calling validate_budget_lines G_MISS_XXX handling is done for the values
11903 * present in l_budget_lines. So we cant use l_budget_lines in making the comparision again*/
11904 IF p_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11905 l_finplan_lines_tab(j).txn_raw_cost := NULL;
11906 ELSIF(p_budget_lines_in(i).raw_cost is null) THEN
11907 l_finplan_lines_tab(j).txn_raw_cost := FND_API.G_MISS_NUM;
11908 ELSE
11909 l_finplan_lines_tab(j).txn_raw_cost := l_budget_lines_in(i).raw_cost;
11910 END IF;
11911
11912 IF p_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11913 l_finplan_lines_tab(j).txn_burdened_cost := NULL;
11914 ELSIF(p_budget_lines_in(i).burdened_cost is null) THEN
11915 l_finplan_lines_tab(j).txn_burdened_cost := FND_API.G_MISS_NUM;
11916 ELSE
11917 l_finplan_lines_tab(j).txn_burdened_cost := l_budget_lines_in(i).burdened_cost;
11918 END IF;
11919
11920 IF p_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11921 l_finplan_lines_tab(j).txn_revenue := NULL;
11922 ELSIF(p_budget_lines_in(i).revenue is null) THEN
11923 l_finplan_lines_tab(j).txn_revenue := FND_API.G_MISS_NUM;
11924 ELSE
11925 l_finplan_lines_tab(j).txn_revenue := l_budget_lines_in(i).revenue;
11926 END IF;
11927
11928 IF p_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11929 l_finplan_lines_tab(j).quantity := NULL;
11930 ELSIF(p_budget_lines_in(i).quantity is null) THEN
11931 l_finplan_lines_tab(j).quantity := FND_API.G_MISS_NUM;
11932 ELSE
11933 l_finplan_lines_tab(j).quantity := l_budget_lines_in(i).quantity;
11934 END IF;
11935
11936 IF p_budget_lines_in(i).change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11937 l_finplan_lines_tab(j).change_reason_code :=NULL;
11938 ELSIF(p_budget_lines_in(i).change_reason_code is null) THEN
11939 l_finplan_lines_tab(j).change_reason_code := FND_API.G_MISS_CHAR;
11940 ELSE
11941 l_finplan_lines_tab(j).change_reason_code := l_budget_lines_in(i).change_reason_code ;
11942 END IF;
11943
11944 IF p_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11945 l_finplan_lines_tab(j).description := NULL;
11946 ELSIF(p_budget_lines_in(i).description is null) THEN
11947 l_finplan_lines_tab(j).description := FND_API.G_MISS_CHAR;
11948 ELSE
11949 l_finplan_lines_tab(j).description := l_budget_lines_in(i).description;
11950 END IF;
11951
11952 IF p_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11953 l_finplan_lines_tab(j).attribute_category := NULL;
11954 ELSIF(p_budget_lines_in(i).attribute_category is null) THEN
11955 l_finplan_lines_tab(j).attribute_category := FND_API.G_MISS_CHAR;
11956 ELSE
11957 l_finplan_lines_tab(j).attribute_category := l_budget_lines_in(i).attribute_category;
11958 END IF;
11959
11960 IF p_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11961 l_finplan_lines_tab(j).attribute1 := NULL;
11962 ELSIF(p_budget_lines_in(i).attribute1 is null) THEN
11963 l_finplan_lines_tab(j).attribute1 := FND_API.G_MISS_CHAR;
11964 ELSE
11965 l_finplan_lines_tab(j).attribute1 := l_budget_lines_in(i).attribute1;
11966 END IF;
11967
11968 IF p_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11969 l_finplan_lines_tab(j).attribute2 := NULL;
11970 ELSIF(p_budget_lines_in(i).attribute2 is null) THEN
11971 l_finplan_lines_tab(j).attribute2 := FND_API.G_MISS_CHAR;
11972 ELSE
11973 l_finplan_lines_tab(j).attribute2 := l_budget_lines_in(i).attribute2;
11974 END IF;
11975
11976 IF p_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11977 l_finplan_lines_tab(j).attribute3 := NULL;
11978 ELSIF(p_budget_lines_in(i).attribute3 is null) THEN
11979 l_finplan_lines_tab(j).attribute3 := FND_API.G_MISS_CHAR;
11980 ELSE
11981 l_finplan_lines_tab(j).attribute3 := l_budget_lines_in(i).attribute3;
11982 END IF;
11983
11984 IF p_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11985 l_finplan_lines_tab(j).attribute4 := NULL;
11986 ELSIF(p_budget_lines_in(i).attribute4 is null) THEN
11987 l_finplan_lines_tab(j).attribute4 := FND_API.G_MISS_CHAR;
11988 ELSE
11989 l_finplan_lines_tab(j).attribute4 := l_budget_lines_in(i).attribute4;
11990 END IF;
11991
11992 IF p_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11993 l_finplan_lines_tab(j).attribute5 := NULL;
11994 ELSIF(p_budget_lines_in(i).attribute5 is null) THEN
11995 l_finplan_lines_tab(j).attribute5 := FND_API.G_MISS_CHAR;
11996 ELSE
11997 l_finplan_lines_tab(j).attribute5 := l_budget_lines_in(i).attribute5;
11998 END IF;
11999
12000 IF p_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12001 l_finplan_lines_tab(j).attribute6 := NULL;
12002 ELSIF(p_budget_lines_in(i).attribute6 is null) THEN
12003 l_finplan_lines_tab(j).attribute6 := FND_API.G_MISS_CHAR;
12004 ELSE
12005 l_finplan_lines_tab(j).attribute6 := l_budget_lines_in(i).attribute6;
12006 END IF;
12007
12008 IF p_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12009 l_finplan_lines_tab(j).attribute7 := NULL;
12010 ELSIF(p_budget_lines_in(i).attribute7 is null) THEN
12011 l_finplan_lines_tab(j).attribute7 := FND_API.G_MISS_CHAR;
12012 ELSE
12013 l_finplan_lines_tab(j).attribute7 := l_budget_lines_in(i).attribute7;
12014 END IF;
12015
12016 IF p_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12017 l_finplan_lines_tab(j).attribute8 := NULL;
12018 ELSIF(p_budget_lines_in(i).attribute8 is null) THEN
12019 l_finplan_lines_tab(j).attribute8 := FND_API.G_MISS_CHAR;
12020 ELSE
12021 l_finplan_lines_tab(j).attribute8 := l_budget_lines_in(i).attribute8;
12022 END IF;
12023
12024 IF p_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12025 l_finplan_lines_tab(j).attribute9 := NULL;
12026 ELSIF(p_budget_lines_in(i).attribute9 is null) THEN
12027 l_finplan_lines_tab(j).attribute9 := FND_API.G_MISS_CHAR;
12028 ELSE
12029 l_finplan_lines_tab(j).attribute9 := l_budget_lines_in(i).attribute9;
12030 END IF;
12031
12032 IF p_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12033 l_finplan_lines_tab(j).attribute10 := NULL;
12034 ELSIF(p_budget_lines_in(i).attribute10 is null) THEN
12035 l_finplan_lines_tab(j).attribute10 := FND_API.G_MISS_CHAR;
12036 ELSE
12037 l_finplan_lines_tab(j).attribute10 := l_budget_lines_in(i).attribute10;
12038 END IF;
12039
12040 IF p_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12041 l_finplan_lines_tab(j).attribute11 := NULL;
12042 ELSIF(p_budget_lines_in(i).attribute11 is null) THEN
12043 l_finplan_lines_tab(j).attribute11 := FND_API.G_MISS_CHAR;
12044 ELSE
12045 l_finplan_lines_tab(j).attribute11 := l_budget_lines_in(i).attribute11;
12046 END IF;
12047
12048 IF p_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12049 l_finplan_lines_tab(j).attribute12 := NULL;
12050 ELSIF(p_budget_lines_in(i).attribute12 is null) THEN
12051 l_finplan_lines_tab(j).attribute12 := FND_API.G_MISS_CHAR;
12052 ELSE
12053 l_finplan_lines_tab(j).attribute12 := l_budget_lines_in(i).attribute12;
12054 END IF;
12055
12056 IF p_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12057 l_finplan_lines_tab(j).attribute13 := NULL;
12058 ELSIF(p_budget_lines_in(i).attribute13 is null) THEN
12059 l_finplan_lines_tab(j).attribute13 := FND_API.G_MISS_CHAR;
12060 ELSE
12061 l_finplan_lines_tab(j).attribute13 := l_budget_lines_in(i).attribute13;
12062 END IF;
12063
12064 IF p_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12065 l_finplan_lines_tab(j).attribute14 := NULL;
12066 ELSIF(p_budget_lines_in(i).attribute14 is null) THEN
12067 l_finplan_lines_tab(j).attribute14 := FND_API.G_MISS_CHAR;
12068 ELSE
12069 l_finplan_lines_tab(j).attribute14 := l_budget_lines_in(i).attribute14;
12070 END IF;
12071
12072 IF p_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12073 l_finplan_lines_tab(j).attribute15 := NULL;
12074 ELSIF(p_budget_lines_in(i).attribute15 is null) THEN
12075 l_finplan_lines_tab(j).attribute15 := FND_API.G_MISS_CHAR;
12076 ELSE
12077 l_finplan_lines_tab(j).attribute15 := l_budget_lines_in(i).attribute15;
12078 END IF;
12079
12080 IF p_budget_lines_in(i).projfunc_cost_rate_type =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12081 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := NULL;
12082 ELSIF(p_budget_lines_in(i).projfunc_cost_rate_type is null) THEN
12083 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := FND_API.G_MISS_CHAR;
12084 ELSE
12085 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := l_budget_lines_in(i).projfunc_cost_rate_type;
12086 END IF;
12087
12088 IF p_budget_lines_in(i).projfunc_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12089 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
12090 ELSIF(p_budget_lines_in(i).projfunc_cost_rate_date_type is null) THEN
12091 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE := FND_API.G_MISS_CHAR;
12092 ELSE
12093 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE :=l_budget_lines_in(i).projfunc_cost_rate_date_type;
12094 END IF;
12095
12096 IF p_budget_lines_in(i).projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12097 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE := NULL;
12098 ELSIF(p_budget_lines_in(i).projfunc_cost_rate_date is null) THEN
12099 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE := FND_API.G_MISS_DATE;
12100 ELSE
12101 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE := l_budget_lines_in(i).projfunc_cost_rate_date ;
12102 END IF;
12103
12104 IF p_budget_lines_in(i).projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12105 l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := NULL;
12106 ELSIF(p_budget_lines_in(i).projfunc_cost_exchange_rate is null) THEN
12107 l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := FND_API.G_MISS_NUM;
12108 ELSE
12109 l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := l_budget_lines_in(i).projfunc_cost_exchange_rate ;
12110 END IF;
12111
12112 IF p_budget_lines_in(i).projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12113 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE := NULL;
12114 ELSIF(p_budget_lines_in(i).projfunc_rev_rate_type is null) THEN
12115 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE := FND_API.G_MISS_CHAR;
12116 ELSE
12117 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE := l_budget_lines_in(i).projfunc_rev_rate_type ;
12118 END IF;
12119
12120 IF p_budget_lines_in(i).projfunc_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12121 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
12122 ELSIF(p_budget_lines_in(i).projfunc_rev_rate_date_type is null) THEN
12123 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := FND_API.G_MISS_CHAR;
12124 ELSE
12125 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := l_budget_lines_in(i).projfunc_rev_rate_date_type ;
12126 END IF;
12127
12128 IF p_budget_lines_in(i).projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12129 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE := NULL;
12130 ELSIF(p_budget_lines_in(i).projfunc_rev_rate_date is null) THEN
12131 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE := FND_API.G_MISS_DATE;
12132 ELSE
12133 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE := l_budget_lines_in(i).projfunc_rev_rate_date;
12134 END IF;
12135
12136 IF p_budget_lines_in(i).projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12137 l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE := NULL;
12138 ELSIF(p_budget_lines_in(i).projfunc_rev_exchange_rate is null) THEN
12139 l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE := FND_API.G_MISS_NUM;
12140 ELSE
12141 l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE := l_budget_lines_in(i).projfunc_rev_exchange_rate ;
12142 END IF;
12143
12144 IF p_budget_lines_in(i).project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12145 l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE := NULL;
12146 ELSIF(p_budget_lines_in(i).project_cost_rate_type is null) THEN
12147 l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE := FND_API.G_MISS_CHAR;
12148 ELSE
12149 l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE := l_budget_lines_in(i).project_cost_rate_type;
12150 END IF;
12151
12152 IF p_budget_lines_in(i).project_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12153 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := NULL;
12154 ELSIF(p_budget_lines_in(i).project_cost_rate_date_type is null) THEN
12155 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := FND_API.G_MISS_CHAR;
12156 ELSE
12157 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := l_budget_lines_in(i).project_cost_rate_date_type ;
12158 END IF;
12159
12160 IF p_budget_lines_in(i).project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12161 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE := NULL;
12162 ELSIF(p_budget_lines_in(i).project_cost_rate_date is null) THEN
12163 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE := FND_API.G_MISS_DATE;
12164 ELSE
12165 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE := l_budget_lines_in(i).project_cost_rate_date;
12166 END IF;
12167
12168 IF p_budget_lines_in(i).project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12169 l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE := NULL;
12170 ELSIF(p_budget_lines_in(i).project_cost_exchange_rate is null) THEN
12171 l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE := FND_API.G_MISS_NUM;
12172 ELSE
12173 l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE := l_budget_lines_in(i).project_cost_exchange_rate ;
12174 END IF;
12175
12176 IF p_budget_lines_in(i).project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12177 l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE := NULL;
12178 ELSIF(p_budget_lines_in(i).project_rev_rate_type is null) THEN
12179 l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE := FND_API.G_MISS_CHAR;
12180 ELSE
12181 l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE := l_budget_lines_in(i).project_rev_rate_type ;
12182 END IF;
12183
12184 IF p_budget_lines_in(i).project_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12185 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE := NULL;
12186 ELSIF(p_budget_lines_in(i).project_rev_rate_date_type is null) THEN
12187 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE := FND_API.G_MISS_CHAR;
12188 ELSE
12189 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE := l_budget_lines_in(i).project_rev_rate_date_type;
12190 END IF;
12191
12192 IF p_budget_lines_in(i).project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12193 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE := NULL;
12194 ELSIF(p_budget_lines_in(i).project_rev_rate_date is null) THEN
12195 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE := FND_API.G_MISS_DATE;
12196 ELSE
12197 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE := l_budget_lines_in(i).project_rev_rate_date ;
12198 END IF;
12199
12200 IF p_budget_lines_in(i).project_rev_exchange_rate =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12201 l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE := NULL;
12202 ELSIF(p_budget_lines_in(i).project_rev_exchange_rate is null) THEN
12203 l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE := FND_API.G_MISS_NUM;
12204 ELSE
12205 l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE := l_budget_lines_in(i).project_rev_exchange_rate ;
12206 END IF;
12207
12208 IF p_budget_lines_in(i).pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12209 l_finplan_lines_tab(j).pm_product_code := NULL;
12210 ELSIF(p_budget_lines_in(i).pm_product_code is null) THEN
12211 l_finplan_lines_tab(j).pm_product_code := FND_API.G_MISS_CHAR;
12212 ELSE
12213 l_finplan_lines_tab(j).pm_product_code := l_budget_lines_in(i).pm_product_code ;
12214 END IF;
12215
12216 IF p_budget_lines_in(i).pm_budget_line_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12217 l_finplan_lines_tab(j).pm_budget_line_reference := NULL;
12218 ELSIF(p_budget_lines_in(i).pm_budget_line_reference is null) THEN
12219 l_finplan_lines_tab(j).pm_budget_line_reference := FND_API.G_MISS_CHAR;
12220 ELSE
12221 l_finplan_lines_tab(j).pm_budget_line_reference := l_budget_lines_in(i).pm_budget_line_reference ;
12222 END IF;
12223
12224 l_finplan_lines_tab(j).quantity_source := 'I';
12225 l_finplan_lines_tab(j).raw_cost_source := 'I';
12226 l_finplan_lines_tab(j).burdened_cost_source := 'I';
12227 l_finplan_lines_tab(j).revenue_source := 'I';
12228 l_finplan_lines_tab(j).resource_assignment_id := -1 ;
12229
12230 --increment the index for fin plan lines table
12231 j := j+1;
12232 -- END IF; --IF (nvl(l_budget_lines_in(i).quantity,0)<>0 OR
12233 ELSE
12234 --its an already existing budget line
12235 i := l_budget_line_index;
12236
12237 l_finplan_lines_tab(j).system_reference1 := l_budget_line_in_rec.pa_task_id;
12238 l_finplan_lines_tab(j).system_reference2 := l_budget_line_in_rec.resource_list_member_id;
12239 l_finplan_lines_tab(j).system_reference3 := l_budget_line_in_rec.cbs_element_id;
12240 l_finplan_lines_tab(j).start_date := l_budget_line_in_rec.budget_start_date;
12241 l_finplan_lines_tab(j).end_date := l_budget_line_in_rec.budget_end_date;
12242 l_finplan_lines_tab(j).period_name := l_budget_line_in_rec.period_name;
12243 l_finplan_lines_tab(j).system_reference4 := l_unit_of_measure ;
12244 l_finplan_lines_tab(j).system_reference5 := l_track_as_labor_flag ;
12245 l_finplan_lines_tab(j).txn_currency_code := l_budget_line_in_rec.txn_currency_code;
12246 l_finplan_lines_tab(j).projfunc_raw_cost := NULL;
12247 l_finplan_lines_tab(j).projfunc_burdened_cost := NULL;
12248 l_finplan_lines_tab(j).projfunc_revenue := NULL;
12249 l_finplan_lines_tab(j).project_raw_cost := NULL ;
12250 l_finplan_lines_tab(j).project_burdened_cost := NULL;
12251 l_finplan_lines_tab(j).project_revenue := NULL;
12252
12253 /*Note carefully that while making the comparision below we are reading from p_budget_lines_in and not from
12254 *. l_budget_lines_in. l_budget_lines is an o/p parameter of validate_budget_lines call to which is made
12255 * above in the code flow. And before calling validate_budget_lines G_MISS_XXX handling is done for the values
12256 * present in l_budget_lines. So we cant use l_budget_lines in making the comparision again*/
12257 IF p_budget_lines_in(l_budget_line_index).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12258 l_finplan_lines_tab(j).txn_raw_cost := NULL;
12259 ELSIF(p_budget_lines_in(l_budget_line_index).raw_cost is null) THEN
12260 l_finplan_lines_tab(j).txn_raw_cost := FND_API.G_MISS_NUM;
12261 ELSE
12262 l_finplan_lines_tab(j).txn_raw_cost := l_budget_line_in_rec.raw_cost;
12263 END IF;
12264
12265 IF p_budget_lines_in(l_budget_line_index).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12266 l_finplan_lines_tab(j).txn_burdened_cost := NULL;
12267 ELSIF(p_budget_lines_in(l_budget_line_index).burdened_cost is null) THEN
12268 l_finplan_lines_tab(j).txn_burdened_cost := FND_API.G_MISS_NUM;
12269 ELSE
12270 l_finplan_lines_tab(j).txn_burdened_cost := l_budget_line_in_rec.burdened_cost;
12271 END IF;
12272
12273 IF p_budget_lines_in(l_budget_line_index).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12274 l_finplan_lines_tab(j).txn_revenue := NULL;
12275 ELSIF(p_budget_lines_in(l_budget_line_index).revenue is null) THEN
12276 l_finplan_lines_tab(j).txn_revenue := FND_API.G_MISS_NUM;
12277 ELSE
12278 l_finplan_lines_tab(j).txn_revenue := l_budget_line_in_rec.revenue;
12279 END IF;
12280
12281 IF p_budget_lines_in(l_budget_line_index).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12282 l_finplan_lines_tab(j).quantity := NULL;
12283 ELSIF(p_budget_lines_in(l_budget_line_index).quantity is null) THEN
12284 l_finplan_lines_tab(j).quantity := FND_API.G_MISS_NUM;
12285 ELSE
12286 l_finplan_lines_tab(j).quantity := l_budget_line_in_rec.quantity;
12287 END IF;
12288
12289 IF p_budget_lines_in(l_budget_line_index).change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12290 l_finplan_lines_tab(j).change_reason_code :=NULL;
12291 ELSIF(p_budget_lines_in(l_budget_line_index).change_reason_code is null) THEN
12292 l_finplan_lines_tab(j).change_reason_code := FND_API.G_MISS_CHAR;
12293 ELSE
12294 l_finplan_lines_tab(j).change_reason_code := l_budget_line_in_rec.change_reason_code ;
12295 END IF;
12296
12297 IF p_budget_lines_in(l_budget_line_index).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12298 l_finplan_lines_tab(j).description := NULL;
12299 ELSIF(p_budget_lines_in(l_budget_line_index).description is null) THEN
12300 l_finplan_lines_tab(j).description := FND_API.G_MISS_CHAR;
12301 ELSE
12302 l_finplan_lines_tab(j).description := l_budget_line_in_rec.description;
12303 END IF;
12304
12305 IF p_budget_lines_in(l_budget_line_index).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12306 l_finplan_lines_tab(j).attribute_category := NULL;
12307 ELSIF(p_budget_lines_in(l_budget_line_index).attribute_category is null) THEN
12308 l_finplan_lines_tab(j).attribute_category := FND_API.G_MISS_CHAR;
12309 ELSE
12310 l_finplan_lines_tab(j).attribute_category := l_budget_line_in_rec.attribute_category;
12311 END IF;
12312
12313 IF p_budget_lines_in(l_budget_line_index).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12314 l_finplan_lines_tab(j).attribute1 := NULL;
12315 ELSIF(p_budget_lines_in(l_budget_line_index).attribute1 is null) THEN
12316 l_finplan_lines_tab(j).attribute1 := FND_API.G_MISS_CHAR;
12317 ELSE
12318 l_finplan_lines_tab(j).attribute1 := l_budget_line_in_rec.attribute1;
12319 END IF;
12320
12321 IF p_budget_lines_in(l_budget_line_index).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12322 l_finplan_lines_tab(j).attribute2 := NULL;
12323 ELSIF(p_budget_lines_in(l_budget_line_index).attribute2 is null) THEN
12324 l_finplan_lines_tab(j).attribute2 := FND_API.G_MISS_CHAR;
12325 ELSE
12326 l_finplan_lines_tab(j).attribute2 := l_budget_line_in_rec.attribute2;
12327 END IF;
12328
12329 IF p_budget_lines_in(l_budget_line_index).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12330 l_finplan_lines_tab(j).attribute3 := NULL;
12331 ELSIF(p_budget_lines_in(l_budget_line_index).attribute3 is null) THEN
12332 l_finplan_lines_tab(j).attribute3 := FND_API.G_MISS_CHAR;
12333 ELSE
12334 l_finplan_lines_tab(j).attribute3 := l_budget_line_in_rec.attribute3;
12335 END IF;
12336
12337 IF p_budget_lines_in(l_budget_line_index).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12338 l_finplan_lines_tab(j).attribute4 := NULL;
12339 ELSIF(p_budget_lines_in(l_budget_line_index).attribute4 is null) THEN
12340 l_finplan_lines_tab(j).attribute4 := FND_API.G_MISS_CHAR;
12341 ELSE
12342 l_finplan_lines_tab(j).attribute4 := l_budget_line_in_rec.attribute4;
12343 END IF;
12344
12345 IF p_budget_lines_in(l_budget_line_index).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12346 l_finplan_lines_tab(j).attribute5 := NULL;
12347 ELSIF(p_budget_lines_in(l_budget_line_index).attribute5 is null) THEN
12348 l_finplan_lines_tab(j).attribute5 := FND_API.G_MISS_CHAR;
12349 ELSE
12350 l_finplan_lines_tab(j).attribute5 := l_budget_line_in_rec.attribute5;
12351 END IF;
12352
12353 IF p_budget_lines_in(l_budget_line_index).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12354 l_finplan_lines_tab(j).attribute6 := NULL;
12355 ELSIF(p_budget_lines_in(l_budget_line_index).attribute6 is null) THEN
12356 l_finplan_lines_tab(j).attribute6 := FND_API.G_MISS_CHAR;
12357 ELSE
12358 l_finplan_lines_tab(j).attribute6 := l_budget_line_in_rec.attribute6;
12359 END IF;
12360
12361 IF p_budget_lines_in(l_budget_line_index).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12362 l_finplan_lines_tab(j).attribute7 := NULL;
12363 ELSIF(p_budget_lines_in(l_budget_line_index).attribute7 is null) THEN
12364 l_finplan_lines_tab(j).attribute7 := FND_API.G_MISS_CHAR;
12365 ELSE
12366 l_finplan_lines_tab(j).attribute7 := l_budget_line_in_rec.attribute7;
12367 END IF;
12368
12369 IF p_budget_lines_in(l_budget_line_index).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12370 l_finplan_lines_tab(j).attribute8 := NULL;
12371 ELSIF(p_budget_lines_in(l_budget_line_index).attribute8 is null) THEN
12372 l_finplan_lines_tab(j).attribute8 := FND_API.G_MISS_CHAR;
12373 ELSE
12374 l_finplan_lines_tab(j).attribute8 := l_budget_line_in_rec.attribute8;
12375 END IF;
12376
12377 IF p_budget_lines_in(l_budget_line_index).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12378 l_finplan_lines_tab(j).attribute9 := NULL;
12379 ELSIF(p_budget_lines_in(l_budget_line_index).attribute9 is null) THEN
12380 l_finplan_lines_tab(j).attribute9 := FND_API.G_MISS_CHAR;
12381 ELSE
12382 l_finplan_lines_tab(j).attribute9 := l_budget_line_in_rec.attribute9;
12383 END IF;
12384
12385 IF p_budget_lines_in(l_budget_line_index).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12386 l_finplan_lines_tab(j).attribute10 := NULL;
12387 ELSIF(p_budget_lines_in(l_budget_line_index).attribute10 is null) THEN
12388 l_finplan_lines_tab(j).attribute10 := FND_API.G_MISS_CHAR;
12389 ELSE
12390 l_finplan_lines_tab(j).attribute10 := l_budget_line_in_rec.attribute10;
12391 END IF;
12392
12393 IF p_budget_lines_in(l_budget_line_index).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12394 l_finplan_lines_tab(j).attribute11 := NULL;
12395 ELSIF(p_budget_lines_in(l_budget_line_index).attribute11 is null) THEN
12396 l_finplan_lines_tab(j).attribute11 := FND_API.G_MISS_CHAR;
12397 ELSE
12398 l_finplan_lines_tab(j).attribute11 := l_budget_line_in_rec.attribute11;
12399 END IF;
12400
12401 IF p_budget_lines_in(l_budget_line_index).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12402 l_finplan_lines_tab(j).attribute12 := NULL;
12403 ELSIF(p_budget_lines_in(l_budget_line_index).attribute12 is null) THEN
12404 l_finplan_lines_tab(j).attribute12 := FND_API.G_MISS_CHAR;
12405 ELSE
12406 l_finplan_lines_tab(j).attribute12 := l_budget_line_in_rec.attribute12;
12407 END IF;
12408
12409 IF p_budget_lines_in(l_budget_line_index).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12410 l_finplan_lines_tab(j).attribute13 := NULL;
12411 ELSIF(p_budget_lines_in(l_budget_line_index).attribute13 is null) THEN
12412 l_finplan_lines_tab(j).attribute13 := FND_API.G_MISS_CHAR;
12413 ELSE
12414 l_finplan_lines_tab(j).attribute13 := l_budget_line_in_rec.attribute13;
12415 END IF;
12416
12417 IF p_budget_lines_in(l_budget_line_index).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12418 l_finplan_lines_tab(j).attribute14 := NULL;
12419 ELSIF(p_budget_lines_in(l_budget_line_index).attribute14 is null) THEN
12420 l_finplan_lines_tab(j).attribute14 := FND_API.G_MISS_CHAR;
12421 ELSE
12422 l_finplan_lines_tab(j).attribute14 := l_budget_line_in_rec.attribute14;
12423 END IF;
12424
12425 IF p_budget_lines_in(l_budget_line_index).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12426 l_finplan_lines_tab(j).attribute15 := NULL;
12427 ELSIF(p_budget_lines_in(l_budget_line_index).attribute15 is null) THEN
12428 l_finplan_lines_tab(j).attribute15 := FND_API.G_MISS_CHAR;
12429 ELSE
12430 l_finplan_lines_tab(j).attribute15 := l_budget_line_in_rec.attribute15;
12431 END IF;
12432
12433 IF p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_type =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12434 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := NULL;
12435 ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_type is null) THEN
12436 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := FND_API.G_MISS_CHAR;
12437 ELSE
12438 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := l_budget_line_in_rec.projfunc_cost_rate_type;
12439 END IF;
12440
12441 IF p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12442 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
12443 ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_date_type is null) THEN
12444 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE := FND_API.G_MISS_CHAR;
12445 ELSE
12446 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE :=l_budget_line_in_rec.projfunc_cost_rate_date_type;
12447 END IF;
12448
12449 IF p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12450 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE := NULL;
12451 ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_date is null) THEN
12452 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE := FND_API.G_MISS_DATE;
12453 ELSE
12454 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE := l_budget_line_in_rec.projfunc_cost_rate_date ;
12455 END IF;
12456
12457 IF p_budget_lines_in(l_budget_line_index).projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12458 l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := NULL;
12459 ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_cost_exchange_rate is null) THEN
12460 l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := FND_API.G_MISS_NUM;
12461 ELSE
12462 l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := l_budget_line_in_rec.projfunc_cost_exchange_rate ;
12463 END IF;
12464
12465 IF p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12466 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE := NULL;
12467 ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_type is null) THEN
12468 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE := FND_API.G_MISS_CHAR;
12469 ELSE
12470 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE := l_budget_line_in_rec.projfunc_rev_rate_type ;
12471 END IF;
12472
12473 IF p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12474 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
12475 ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_date_type is null) THEN
12476 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := FND_API.G_MISS_CHAR;
12477 ELSE
12478 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := l_budget_line_in_rec.projfunc_rev_rate_date_type ;
12479 END IF;
12480
12481 IF p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12482 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE := NULL;
12483 ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_date is null) THEN
12484 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE := FND_API.G_MISS_DATE;
12485 ELSE
12486 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE := l_budget_line_in_rec.projfunc_rev_rate_date;
12487 END IF;
12488
12489 IF p_budget_lines_in(l_budget_line_index).projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12490 l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE := NULL;
12491 ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_rev_exchange_rate is null) THEN
12492 l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE := FND_API.G_MISS_NUM;
12493 ELSE
12494 l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE := l_budget_line_in_rec.projfunc_rev_exchange_rate ;
12495 END IF;
12496
12497 IF p_budget_lines_in(l_budget_line_index).project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12498 l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE := NULL;
12499 ELSIF(p_budget_lines_in(l_budget_line_index).project_cost_rate_type is null) THEN
12500 l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE := FND_API.G_MISS_CHAR;
12501 ELSE
12502 l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE := l_budget_line_in_rec.project_cost_rate_type;
12503 END IF;
12504
12505 IF p_budget_lines_in(l_budget_line_index).project_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12506 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := NULL;
12507 ELSIF(p_budget_lines_in(l_budget_line_index).project_cost_rate_date_type is null) THEN
12508 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := FND_API.G_MISS_CHAR;
12509 ELSE
12510 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := l_budget_line_in_rec.project_cost_rate_date_type ;
12511 END IF;
12512
12513 IF p_budget_lines_in(l_budget_line_index).project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12514 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE := NULL;
12515 ELSIF(p_budget_lines_in(l_budget_line_index).project_cost_rate_date is null) THEN
12516 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE := FND_API.G_MISS_DATE;
12517 ELSE
12518 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE := l_budget_line_in_rec.project_cost_rate_date;
12519 END IF;
12520
12521 IF p_budget_lines_in(l_budget_line_index).project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12522 l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE := NULL;
12523 ELSIF(p_budget_lines_in(l_budget_line_index).project_cost_exchange_rate is null) THEN
12524 l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE := FND_API.G_MISS_NUM;
12525 ELSE
12526 l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE := l_budget_line_in_rec.project_cost_exchange_rate ;
12527 END IF;
12528
12529 IF p_budget_lines_in(l_budget_line_index).project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12530 l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE := NULL;
12531 ELSIF(p_budget_lines_in(l_budget_line_index).project_rev_rate_type is null) THEN
12532 l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE := FND_API.G_MISS_CHAR;
12533 ELSE
12534 l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE := l_budget_line_in_rec.project_rev_rate_type ;
12535 END IF;
12536
12537 IF p_budget_lines_in(l_budget_line_index).project_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12538 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE := NULL;
12539 ELSIF(p_budget_lines_in(l_budget_line_index).project_rev_rate_date_type is null) THEN
12540 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE := FND_API.G_MISS_CHAR;
12541 ELSE
12542 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE := l_budget_line_in_rec.project_rev_rate_date_type;
12543 END IF;
12544
12545 IF p_budget_lines_in(l_budget_line_index).project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12546 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE := NULL;
12547 ELSIF(p_budget_lines_in(l_budget_line_index).project_rev_rate_date is null) THEN
12548 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE := FND_API.G_MISS_DATE;
12549 ELSE
12550 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE := l_budget_line_in_rec.project_rev_rate_date ;
12551 END IF;
12552
12553 IF p_budget_lines_in(l_budget_line_index).project_rev_exchange_rate =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12554 l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE := NULL;
12555 ELSIF(p_budget_lines_in(l_budget_line_index).project_rev_exchange_rate is null) THEN
12556 l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE := FND_API.G_MISS_NUM;
12557 ELSE
12558 l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE := l_budget_line_in_rec.project_rev_exchange_rate;
12559 END IF;
12560
12561 IF p_budget_lines_in(l_budget_line_index).pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12562 l_finplan_lines_tab(j).pm_product_code := NULL;
12563 ELSIF(p_budget_lines_in(l_budget_line_index).pm_product_code is null) THEN
12564 l_finplan_lines_tab(j).pm_product_code := FND_API.G_MISS_CHAR;
12565 ELSE
12566 l_finplan_lines_tab(j).pm_product_code := l_budget_line_in_rec.pm_product_code ;
12567 END IF;
12568
12569 IF p_budget_lines_in(l_budget_line_index).pm_budget_line_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12570 l_finplan_lines_tab(j).pm_budget_line_reference := NULL;
12571 ELSIF(p_budget_lines_in(l_budget_line_index).pm_budget_line_reference is null) THEN
12572 l_finplan_lines_tab(j).pm_budget_line_reference := FND_API.G_MISS_CHAR;
12573 ELSE
12574 l_finplan_lines_tab(j).pm_budget_line_reference := l_budget_line_in_rec.pm_budget_line_reference ;
12575 END IF;
12576
12577 l_finplan_lines_tab(j).quantity_source := 'I';
12578 l_finplan_lines_tab(j).raw_cost_source := 'I';
12579 l_finplan_lines_tab(j).burdened_cost_source := 'I';
12580 l_finplan_lines_tab(j).revenue_source := 'I';
12581 l_finplan_lines_tab(j).resource_assignment_id := l_resource_assignment_id ;
12582 --increment the index for fin plan lines table
12583 j := j+1;
12584 END IF;
12585 -- Actual insertion will take place outside the loop as
12586 -- as the call to CREATE_FINPLAN_LINES expects a table
12587 -- of budget line records.
12588 --Major changes for the bug 3453650 for the finplan model.
12589
12590
12591 END IF; -- l_budget_type_code IS NOT NULL
12592
12593 l_budget_line_index := p_budget_lines_in.next(l_budget_line_index);
12594
12595 END LOOP budget_line;
12596
12597 IF l_budget_type_code IS NULL THEN
12598
12599 -- Bug : 3453650: Calling the create finplan lines api to create the
12600 -- budget lines for the finplan model and passing the l_finplan_lines_tab
12601 -- table which was built earlier in the api
12602
12603 IF ( nvl(l_finplan_lines_tab.last,0) > 0 ) THEN
12604
12605 -- dbms_output.put_line ('Calling add_finplan_lines');
12606
12607 PA_FIN_PLAN_PVT.ADD_FIN_PLAN_LINES
12608 ( p_calling_context => PA_FP_CONSTANTS_PKG.G_AMG_API /* Bug# 2674353 */
12609 ,p_fin_plan_version_id => l_budget_version_id
12610 ,p_finplan_lines_tab => l_finplan_lines_tab
12611 ,x_return_status => l_return_status
12612 ,x_msg_count => l_msg_count
12613 ,x_msg_data => l_msg_data );
12614
12615 -- dbms_output.put_line ('after Calling add_finplan_lines ' || l_return_status || ' p_multiple_task_msg ' || p_multiple_task_msg);
12616
12617 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12618 pa_debug.g_err_stage:= 'Error Calling ADD_FINPLAN_LINES';
12619 IF L_DEBUG_MODE = 'Y' THEN
12620 pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
12621 END IF;
12622 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12623 END IF;
12624 END IF;
12625
12626
12627 -- Unlock the version now that the budget version is updated.
12628 l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
12629 (p_budget_version_id => l_budget_version_id);
12630
12631 --Try to lock the version before updating the version. This is required so that nobody else can access it.
12632 pa_fin_plan_pvt.lock_unlock_version
12633 (p_budget_version_id => l_budget_version_id,
12634 p_record_version_number => l_record_version_number,
12635 p_action => 'U',
12636 p_user_id => l_user_id,
12637 p_person_id => lx_locked_by_person_id,
12638 x_return_status => x_return_status,
12639 x_msg_count => l_msg_count,
12640 x_msg_data => l_msg_data) ;
12641
12642 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
12643
12644 IF l_debug_mode = 'Y' THEN
12645 pa_debug.g_err_stage := 'Error in lock unlock version - Cannot lock the version';
12646 pa_debug.write('CREATE_DRAFT: ' || g_module_name,pa_debug.g_err_stage,5);
12647 END IF;
12648
12649 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12650 END IF;
12651
12652 END IF; -- END OF l_budget_type_code is null
12653
12654 IF p_multiple_task_msg = 'F' THEN
12655 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12656 END IF;
12657
12658 --summarizing the totals in the table pa_budget_versions
12659 /*Added the below if condition for the bug 3453650*/
12660 IF l_budget_type_code IS NOT NULL THEN
12661
12662 -- check for overlapping dates
12663 pa_budget_lines_v_pkg.check_overlapping_dates( x_budget_version_id => l_budget_version_id --IN
12664 ,x_resource_name => l_resource_name --OUT
12665 ,x_err_code => l_err_code );
12666
12667 -- dbms_output.put_line ('after calling pa_budget_lines_v_pkg.check_overlapping_dates ' || l_err_code );
12668
12669 IF l_err_code > 0 THEN
12670 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12671 FND_MESSAGE.SET_NAME('PA','PA_CHECK_DATES_FAILED');
12672 FND_MESSAGE.SET_TOKEN('Rname',l_resource_name);
12673
12674 FND_MSG_PUB.add;
12675 END IF;
12676 RAISE FND_API.G_EXC_ERROR;
12677 ELSIF l_err_code < 0 THEN
12678 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
12679 FND_MSG_PUB.add_exc_msg
12680 ( p_pkg_name => 'PA_BUDGET_LINES_V_PKG'
12681 , p_procedure_name => 'CHECK_OVERLAPPING_DATES'
12682 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
12683 END IF;
12684 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12685 END IF;
12686
12687
12688 PA_BUDGET_UTILS.summerize_project_totals( x_budget_version_id => l_budget_version_id
12689 , x_err_code => l_err_code
12690 , x_err_stage => l_err_stage
12691 , x_err_stack => l_err_stack );
12692
12693 IF l_err_code > 0 THEN
12694 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12695 IF NOT pa_project_pvt.check_valid_message(l_err_stage) THEN
12696 pa_interface_utils_pub.map_new_amg_msg
12697 ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
12698 ,p_msg_attribute => 'CHANGE'
12699 ,p_resize_flag => 'N'
12700 ,p_msg_context => 'BUDG'
12701 ,p_attribute1 => l_amg_segment1
12702 ,p_attribute2 => l_amg_task_number
12703 ,p_attribute3 => l_budget_type_code
12704 ,p_attribute4 => ''
12705 ,p_attribute5 => to_char(l_budget_start_date));
12706 ELSE
12707 pa_interface_utils_pub.map_new_amg_msg
12708 ( p_old_message_code => l_err_stage
12709 ,p_msg_attribute => 'CHANGE'
12710 ,p_resize_flag => 'N'
12711 ,p_msg_context => 'BUDG'
12712 ,p_attribute1 => l_amg_segment1
12713 ,p_attribute2 => l_amg_task_number
12714 ,p_attribute3 => l_budget_type_code
12715 ,p_attribute4 => ''
12716 ,p_attribute5 => to_char(l_budget_start_date));
12717 END IF;
12718 END IF;
12719 RAISE FND_API.G_EXC_ERROR;
12720 ELSIF l_err_code < 0 THEN
12721 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
12722 FND_MSG_PUB.add_exc_msg
12723 ( p_pkg_name => 'PA_BUDGET_UTILS'
12724 , p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
12725 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
12726
12727 END IF;
12728 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12729 END IF; -- l_err_code > 0
12730 END IF; -- l_budget_type_code IS NOT NULL
12731
12732 END IF; --if there are budget lines
12733
12734 IF FND_API.TO_BOOLEAN( p_commit ) THEN
12735 COMMIT;
12736 END IF;
12737
12738
12739 EXCEPTION
12740
12741 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12742 -- dbms_output.put_line('Invalid_Arg_Exc MSG count in the stack ' || FND_MSG_PUB.count_msg);
12743 ROLLBACK TO update_budget_pub;
12744
12745 IF p_return_status IS NULL OR
12746 p_return_status = FND_API.G_RET_STS_SUCCESS THEN
12747 p_return_status := FND_API.G_RET_STS_ERROR;
12748 END IF;
12749
12750 l_msg_count := FND_MSG_PUB.count_msg;
12751 -- dbms_output.put_line('Invalid_Arg_Exc MSG count in the stack ' || l_msg_count);
12752
12753 IF l_msg_count = 1 AND p_msg_data IS NULL THEN
12754 PA_INTERFACE_UTILS_PUB.get_messages
12755 (p_encoded => FND_API.G_TRUE,
12756 p_msg_index => 1,
12757 p_msg_count => l_msg_count,
12758 p_msg_data => l_msg_data,
12759 p_data => l_data,
12760 p_msg_index_out => l_msg_index_out);
12761
12762 p_msg_data := l_data;
12763 p_msg_count := l_msg_count;
12764 ELSE
12765 p_msg_count := l_msg_count;
12766 END IF;
12767 --Changes for bug 3182963
12768 IF l_debug_mode = 'Y' THEN
12769 pa_debug.reset_curr_function;
12770 END IF;
12771 -- dbms_output.put_line('Invalid_Arg_Exc MSG count in the stack ' || l_msg_count);
12772
12773 RETURN;
12774
12775 WHEN FND_API.G_EXC_ERROR
12776 THEN
12777
12778
12779 ROLLBACK TO update_budget_pub;
12780
12781 p_return_status := FND_API.G_RET_STS_ERROR;
12782
12783 FND_MSG_PUB.Count_And_Get
12784 ( p_count => p_msg_count ,
12785 p_data => p_msg_data );
12786
12787 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
12788 THEN
12789
12790
12791 ROLLBACK TO update_budget_pub;
12792
12793 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12794
12795 FND_MSG_PUB.Count_And_Get
12796 ( p_count => p_msg_count ,
12797 p_data => p_msg_data );
12798
12799 WHEN ROW_ALREADY_LOCKED
12800 THEN
12801 ROLLBACK TO update_budget_pub;
12802
12803 p_return_status := FND_API.G_RET_STS_ERROR;
12804
12805 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
12806 THEN
12807 FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
12808 FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
12809 FND_MESSAGE.SET_TOKEN('TASK', l_amg_task_number);
12810 FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', l_budget_type_code);
12811 FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
12812 -- FND_MESSAGE.SET_TOKEN('START_DATE', to_char(l_budget_start_date));
12813 FND_MESSAGE.SET_TOKEN('START_DATE',
12814 fnd_date.date_to_chardate(dateval => l_budget_start_date, calendar_aware => 1)); -- rmunjulu pass additional parameter to make it calendar_aware
12815 FND_MESSAGE.SET_TOKEN('ENTITY', 'G_BUDGET_CODE');
12816 FND_MSG_PUB.ADD;
12817 END IF;
12818
12819 FND_MSG_PUB.Count_And_Get
12820 ( p_count => p_msg_count ,
12821 p_data => p_msg_data );
12822
12823 WHEN OTHERS
12824 THEN
12825
12826
12827 ROLLBACK TO update_budget_pub;
12828
12829 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12830
12831 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
12832 THEN
12833 FND_MSG_PUB.add_exc_msg
12834 ( p_pkg_name => G_PKG_NAME
12835 , p_procedure_name => l_api_name );
12836
12837 END IF;
12838
12839 FND_MSG_PUB.Count_And_Get
12840 ( p_count => p_msg_count ,
12841 p_data => p_msg_data );
12842
12843
12844 END update_budget;
12845
12846
12847 ----------------------------------------------------------------------------------------
12848 --Name: execute_update_budget
12849 --Type: Procedure
12850 --Description: This procedure can be used to update a working (draft) budget
12851 -- using global PL/SQL tables.
12852 --
12853 --Called subprograms:
12854 --
12855 --
12856 --
12857 --History:
12858 -- 14-OCT-1996 L. de Werker Created
12859 -- 28-NOV-1996 L. de Werker Add 16 parameters for descriptive flexfields
12860 --
12861
12862 PROCEDURE execute_update_budget
12863 ( p_api_version_number IN NUMBER
12864 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
12865 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
12866 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12867 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12868 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12869 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12870 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12871 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12872 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12873 ,p_change_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12874 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12875 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12876 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12877 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12878 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12879 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12880 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12881 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12882 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12883 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12884 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12885 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12886 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12887 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12888 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12889 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12890 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12891 --Added for the bug 3453650
12892 ,p_resource_list_id IN pa_budget_versions.resource_list_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12893 ,p_set_current_working_flag IN pa_budget_versions.current_working_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12894 ,p_budget_version_number IN pa_budget_versions.version_number%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12895 ,p_budget_version_name IN pa_budget_versions.version_name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12896 ,p_version_type IN pa_budget_versions.version_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12897 ,p_finplan_type_id IN pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12898 ,p_plan_in_multi_curr_flag IN pa_proj_fp_options.plan_in_multi_curr_flag%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12899 ,p_time_phased_code IN pa_proj_fp_options.cost_time_phased_code%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12900 ,p_projfunc_cost_rate_type IN pa_proj_fp_options.projfunc_cost_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12901 ,p_projfunc_cost_rate_date_typ IN pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12902 ,p_projfunc_cost_rate_date IN pa_proj_fp_options.projfunc_cost_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12903 ,p_projfunc_cost_exchange_rate IN pa_budget_lines.projfunc_cost_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12904 ,p_projfunc_rev_rate_type IN pa_proj_fp_options.projfunc_rev_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12905 ,p_projfunc_rev_rate_date_typ IN pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12906 ,p_projfunc_rev_rate_date IN pa_proj_fp_options.projfunc_rev_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12907 ,p_projfunc_rev_exchange_rate IN pa_budget_lines.projfunc_cost_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12908 ,p_project_cost_rate_type IN pa_proj_fp_options.project_cost_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12909 ,p_project_cost_rate_date_typ IN pa_proj_fp_options.project_cost_rate_date_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12910 ,p_project_cost_rate_date IN pa_proj_fp_options.project_cost_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12911 ,p_project_cost_exchange_rate IN pa_budget_lines.project_cost_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12912 ,p_project_rev_rate_type IN pa_proj_fp_options.project_rev_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12913 ,p_project_rev_rate_date_typ IN pa_proj_fp_options.project_rev_rate_date_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12914 ,p_project_rev_rate_date IN pa_proj_fp_options.project_rev_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12915 ,p_project_rev_exchange_rate IN pa_budget_lines.project_rev_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12916 )
12917
12918 IS
12919
12920 l_api_name CONSTANT VARCHAR2(30) := 'execute_update_budget';
12921
12922 i NUMBER;
12923 l_return_status VARCHAR2(1);
12924 l_err_stage VARCHAR2(120);
12925
12926
12927 BEGIN
12928
12929 -- Standard begin of API savepoint
12930
12931 SAVEPOINT execute_update_budget_pub;
12932
12933 -- Standard call to check for call compatibility.
12934
12935 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
12936 p_api_version_number ,
12937 l_api_name ,
12938 G_PKG_NAME )
12939 THEN
12940
12941 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12942
12943 END IF;
12944
12945 -- Initialize the message table if requested.
12946
12947 IF FND_API.TO_BOOLEAN( p_init_msg_list )
12948 THEN
12949
12950 FND_MSG_PUB.initialize;
12951
12952 END IF;
12953
12954 -- Set API return status to success
12955
12956 p_return_status := FND_API.G_RET_STS_SUCCESS;
12957
12958
12959 -- product_code is mandatory
12960
12961 IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12962 OR p_pm_product_code IS NULL
12963 THEN
12964 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
12965 THEN
12966 pa_interface_utils_pub.map_new_amg_msg
12967 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
12968 ,p_msg_attribute => 'CHANGE'
12969 ,p_resize_flag => 'N'
12970 ,p_msg_context => 'GENERAL'
12971 ,p_attribute1 => ''
12972 ,p_attribute2 => ''
12973 ,p_attribute3 => ''
12974 ,p_attribute4 => ''
12975 ,p_attribute5 => '');
12976 END IF;
12977
12978 RAISE FND_API.G_EXC_ERROR;
12979
12980 END IF;
12981
12982 l_pm_product_code :='Z';
12983 /*added for bug no :2413400*/
12984 OPEN p_product_code_csr (p_pm_product_code);
12985 FETCH p_product_code_csr INTO l_pm_product_code;
12986 CLOSE p_product_code_csr;
12987 IF l_pm_product_code <> 'X'
12988 THEN
12989
12990 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
12991 THEN
12992 pa_interface_utils_pub.map_new_amg_msg
12993 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
12994 ,p_msg_attribute => 'CHANGE'
12995 ,p_resize_flag => 'N'
12996 ,p_msg_context => 'GENERAL'
12997 ,p_attribute1 => ''
12998 ,p_attribute2 => ''
12999 ,p_attribute3 => ''
13000 ,p_attribute4 => ''
13001 ,p_attribute5 => '');
13002 END IF;
13003 p_return_status := FND_API.G_RET_STS_ERROR;
13004 RAISE FND_API.G_EXC_ERROR;
13005 END IF;
13006
13007
13008 /* -- dbms_output.put_line('Before update_budget'); */
13009
13010 update_budget( p_api_version_number => p_api_version_number
13011 ,p_commit => FND_API.G_FALSE
13012 ,p_init_msg_list => FND_API.G_FALSE
13013 ,p_msg_count => p_msg_count
13014 ,p_msg_data => p_msg_data
13015 ,p_return_status => l_return_status
13016 ,p_pm_product_code => p_pm_product_code
13017 ,p_pa_project_id => p_pa_project_id
13018 ,p_pm_project_reference => p_pm_project_reference
13019 ,p_budget_type_code => p_budget_type_code
13020 ,p_change_reason_code => p_change_reason_code
13021 ,p_description => p_description
13022 ,p_budget_lines_in => G_budget_lines_in_tbl
13023 ,p_budget_lines_out => G_budget_lines_out_tbl
13024 -- Added for bug 4224464
13025 --Added the new parameters for the bug 3453650
13026 ,p_resource_list_id => p_resource_list_id
13027 ,p_set_current_working_flag => p_set_current_working_flag
13028 ,p_budget_version_number => p_budget_version_number
13029 ,p_budget_version_name => p_budget_version_name
13030 ,p_version_type => p_version_type -- 3453650
13031 ,p_finplan_type_id => p_finplan_type_id
13032 ,p_plan_in_multi_curr_flag => p_plan_in_multi_curr_flag
13033 ,p_time_phased_code => p_time_phased_code
13034 ,p_projfunc_cost_rate_type => p_projfunc_cost_rate_type
13035 ,p_projfunc_cost_rate_date_typ => p_projfunc_cost_rate_date_typ
13036 ,p_projfunc_cost_rate_date => p_projfunc_cost_rate_date
13037 ,p_projfunc_cost_exchange_rate => p_projfunc_cost_exchange_rate
13038 ,p_projfunc_rev_rate_type => p_projfunc_rev_rate_type
13039 ,p_projfunc_rev_rate_date_typ => p_projfunc_rev_rate_date_typ
13040 ,p_projfunc_rev_rate_date => p_projfunc_rev_rate_date
13041 ,p_projfunc_rev_exchange_rate => p_projfunc_rev_exchange_rate
13042 ,p_project_cost_rate_type => p_project_cost_rate_type
13043 ,p_project_cost_rate_date_typ => p_project_cost_rate_date_typ
13044 ,p_project_cost_rate_date => p_project_cost_rate_date
13045 ,p_project_cost_exchange_rate => p_project_cost_exchange_rate
13046 ,p_project_rev_rate_type => p_project_rev_rate_type
13047 ,p_project_rev_rate_date_typ => p_project_rev_rate_date_typ
13048 ,p_project_rev_rate_date => p_project_rev_rate_date
13049 ,p_project_rev_exchange_rate => p_project_rev_exchange_rate );
13050
13051 /* -- dbms_output.put_line('After update_budget'); */
13052
13053 /* -- dbms_output.put_line('Return status update_budget: '||l_return_status); */
13054
13055 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
13056 THEN
13057
13058 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13059
13060 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
13061 THEN
13062
13063 RAISE FND_API.G_EXC_ERROR;
13064 END IF;
13065
13066 IF fnd_api.to_boolean(p_commit)
13067 THEN
13068 COMMIT;
13069 END IF;
13070
13071
13072 EXCEPTION
13073
13074 WHEN FND_API.G_EXC_ERROR
13075 THEN
13076
13077 /* -- dbms_output.put_line('handling an G_EXC_ERROR exception in execute_update_budget'); */
13078
13079 ROLLBACK TO execute_update_budget_pub;
13080
13081 p_return_status := FND_API.G_RET_STS_ERROR;
13082
13083 FND_MSG_PUB.Count_And_Get
13084 ( p_count => p_msg_count ,
13085 p_data => p_msg_data );
13086
13087 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
13088 THEN
13089
13090 /* -- dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
13091
13092 ROLLBACK TO execute_update_budget_pub;
13093
13094 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13095
13096 FND_MSG_PUB.Count_And_Get
13097 ( p_count => p_msg_count ,
13098 p_data => p_msg_data );
13099
13100 WHEN OTHERS THEN
13101
13102 /* -- dbms_output.put_line('handling an OTHERS exception in execute_update_budget'); */
13103
13104 ROLLBACK TO execute_update_budget_pub;
13105
13106 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13107
13108 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
13109 THEN
13110 FND_MSG_PUB.add_exc_msg
13111 ( p_pkg_name => G_PKG_NAME
13112 , p_procedure_name => l_api_name );
13113
13114 END IF;
13115
13116 FND_MSG_PUB.Count_And_Get
13117 ( p_count => p_msg_count ,
13118 p_data => p_msg_data );
13119
13120 END execute_update_budget;
13121
13122
13123 ----------------------------------------------------------------------------------------
13124 --Name: update_budget_line
13125 --Type: Procedure
13126 --Description: This procedure can be used to update a budgetline of an
13127 -- existing WORKING budget.
13128 --
13129 --Called subprograms: pa_budget_pvt.update_budget_line_sql
13130 --
13131 --
13132 --
13133 --
13134 --History:
13135 -- 10-OCT-1996 L. de Werker Created
13136 -- 19-NOV-1996 L. de Werker Changed to let it use update_budget_line_sql
13137 -- 28-NOV-1996 L. de Werker Add 16 parameters for descriptive flexfields
13138 -- 11-MAY-2005 Ritesh Shukla Bug 4224464: FP.M Changes for update_budget_line
13139
13140 PROCEDURE update_budget_line
13141 ( p_api_version_number IN NUMBER
13142 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
13143 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
13144 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13145 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13146 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13147 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13148 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13149 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13150 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13151 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13152 ,p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13153 ,p_resource_alias IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13154 ,p_resource_list_member_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13155 --Bug 16604257 : CBS RBS Phase 2 API changes
13156 ,p_cost_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13157 ,p_cbs_element_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13158 --Bug 16604257
13159 ,p_budget_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13160 ,p_budget_end_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13161 ,p_period_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13162 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13163 ,p_raw_cost IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13164 ,p_burdened_cost IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13165 ,p_revenue IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13166 ,p_quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13167 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13168 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13169 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13170 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13171 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13172 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13173 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13174 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13175 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13176 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13177 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13178 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13179 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13180 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13181 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13182 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13183 --Parameters added for FP.M
13184 ,p_fin_plan_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13185 ,p_fin_plan_type_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13186 ,p_version_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13187 ,p_version_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13188 ,p_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13189 ,p_change_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13190 ,p_projfunc_cost_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13191 ,p_projfunc_cost_rate_date_typ IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13192 ,p_projfunc_cost_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13193 ,p_projfunc_cost_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13194 ,p_projfunc_rev_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13195 ,p_projfunc_rev_rate_date_typ IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13196 ,p_projfunc_rev_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13197 ,p_projfunc_rev_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13198 ,p_project_cost_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13199 ,p_project_cost_rate_date_typ IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13200 ,p_project_cost_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13201 ,p_project_cost_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13202 ,p_project_rev_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13203 ,p_project_rev_rate_date_typ IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13204 ,p_project_rev_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13205 ,p_project_rev_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13206 )
13207
13208 IS
13209
13210
13211 --needed to get the resource assignment for this budget_version / task / member combination
13212 CURSOR l_resource_assignment_csr
13213 (p_budget_version_id NUMBER
13214 ,p_task_id NUMBER
13215 ,p_member_id NUMBER
13216 ,p_c_cbs_element_id NUMBER)
13217 IS
13218 SELECT resource_assignment_id
13219 FROM pa_resource_assignments
13220 WHERE budget_version_id = p_budget_version_id
13221 AND task_id = p_task_id
13222 AND resource_list_member_id = p_member_id
13223 AND NVL(CBS_ELEMENT_ID,-1)=NVL(P_C_CBS_ELEMENT_ID,-1); --Bug 16604257
13224
13225 --needed to check whether budget line already exists
13226 CURSOR l_budget_line_csr
13227 (p_resource_assigment_id NUMBER
13228 ,p_budget_start_date DATE
13229 ,p_currency_code VARCHAR2)
13230 IS
13231 SELECT rowidtochar(rowid)
13232 ,budget_line_id
13233 FROM pa_budget_lines
13234 WHERE resource_assignment_id = p_resource_assigment_id
13235 AND trunc(start_date) = nvl(trunc(p_budget_start_date),trunc(start_date))
13236 AND txn_currency_code = nvl(p_currency_code,txn_currency_code);
13237
13238 --needed to lock the budget line row
13239 CURSOR l_lock_budget_line_csr( p_budget_line_rowid VARCHAR2)
13240 IS
13241 SELECT 'x'
13242 FROM pa_budget_lines
13243 WHERE rowid = p_budget_line_rowid
13244 FOR UPDATE NOWAIT;
13245
13246 l_api_name CONSTANT VARCHAR2(30) := 'update_budget_line';
13247
13248 l_resource_assignment_id NUMBER;
13249 l_budget_line_id NUMBER;
13250 l_budget_line_rowid VARCHAR(20);
13251
13252 l_err_code NUMBER;
13253 l_err_stage VARCHAR2(120);
13254 l_err_stack VARCHAR2(630);
13255
13256 l_project_id NUMBER := p_pa_project_id;
13257 l_budget_type_code pa_budget_types.budget_type_code%TYPE := p_budget_type_code;
13258 l_fin_plan_type_id NUMBER := p_fin_plan_type_id;
13259 l_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE := p_fin_plan_type_name;
13260 l_version_type pa_budget_versions.version_type%TYPE := p_version_type;
13261 l_budget_version_id NUMBER;
13262 l_budget_entry_method_code pa_budget_entry_methods.budget_entry_method_code%TYPE;
13263 l_resource_list_id NUMBER;
13264 l_budget_amount_code pa_budget_types.budget_amount_code%type;
13265 l_entry_level_code pa_proj_fp_options.cost_fin_plan_level_code%TYPE;
13266 l_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE;
13267 l_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
13268 l_categorization_code pa_budget_entry_methods.categorization_code%TYPE;
13269 l_record_version_number pa_budget_versions.record_version_number%TYPE;
13270
13271 l_budget_lines_in budget_line_in_tbl_type;
13272 l_budget_lines_out_tbl budget_line_out_tbl_type;
13273 l_mfc_cost_type_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13274 l_etc_method_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
13275 l_spread_curve_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13276
13277 l_finplan_lines_tab pa_fin_plan_pvt.budget_lines_tab;
13278 l_version_info_rec pa_fp_gen_amount_utils.fp_cols;
13279
13280 --Following parameters are needed for amounts check
13281 l_amount_set_id NUMBER;
13282 lx_raw_cost_flag VARCHAR2(1) := NULL;
13283 lx_burdened_cost_flag VARCHAR2(1) := NULL;
13284 lx_revenue_flag VARCHAR2(1) := NULL;
13285 lx_cost_qty_flag VARCHAR2(1) := NULL;
13286 lx_revenue_qty_flag VARCHAR2(1) := NULL;
13287 lx_all_qty_flag VARCHAR2(1) := NULL;
13288 l_bill_rate_flag pa_fin_plan_amount_sets.bill_rate_flag%type;
13289 l_cost_rate_flag pa_fin_plan_amount_sets.cost_rate_flag%type;
13290 l_burden_rate_flag pa_fin_plan_amount_sets.burden_rate_flag%type;
13291 l_allow_qty_flag VARCHAR2(1);
13292
13293 l_msg_count NUMBER := 0;
13294 l_msg_data VARCHAR2(2000);
13295 l_function_allowed VARCHAR2(1);
13296 l_module_name VARCHAR2(80);
13297 l_data VARCHAR2(2000);
13298 l_msg_index_out NUMBER;
13299
13300 l_amg_project_number pa_projects_all.segment1%TYPE;
13301 l_amg_task_number VARCHAR2(50);
13302
13303 --debug variables
13304 l_debug_mode VARCHAR2(1);
13305 l_debug_level2 CONSTANT NUMBER := 2;
13306 l_debug_level3 CONSTANT NUMBER := 3;
13307 l_debug_level4 CONSTANT NUMBER := 4;
13308 l_debug_level5 CONSTANT NUMBER := 5;
13309 --Added for bug 6408139 to pass G_PA_MISS_CHAR
13310 l_pa_miss_char varchar2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
13311
13312 l_cbs_enabled_project varchar2(1) :='N'; -- Added for CBS 16604257
13313 lc_cbs_element_id NUMBER :=p_cbs_element_id;
13314
13315
13316 BEGIN
13317
13318
13319 --Standard begin of API savepoint
13320 SAVEPOINT update_budget_line_pub;
13321
13322 p_msg_count := 0;
13323 p_return_status := FND_API.G_RET_STS_SUCCESS;
13324 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
13325 l_module_name := g_module_name || ':Update_Budget_Line ';
13326
13327 IF ( l_debug_mode = 'Y' )
13328 THEN
13329 pa_debug.set_curr_function( p_function => l_api_name
13330 ,p_debug_mode => l_debug_mode );
13331 END IF;
13332
13333 IF ( l_debug_mode = 'Y' )
13334 THEN
13335 pa_debug.g_err_stage:='Entering ' || l_api_name;
13336 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
13337 END IF;
13338
13339 --Initialize the message table if requested.
13340 IF FND_API.TO_BOOLEAN( p_init_msg_list )
13341 THEN
13342 FND_MSG_PUB.initialize;
13343 END IF;
13344
13345 --Set API return status to success
13346 p_return_status := FND_API.G_RET_STS_SUCCESS;
13347
13348 --Call PA_BUDGET_PVT.validate_header_info to do the necessary
13349 --header level validations
13350 PA_BUDGET_PVT.validate_header_info
13351 ( p_api_version_number => p_api_version_number
13352 ,p_api_name => l_api_name
13353 ,p_init_msg_list => p_init_msg_list
13354 ,px_pa_project_id => l_project_id
13355 ,p_pm_project_reference => p_pm_project_reference
13356 ,p_pm_product_code => p_pm_product_code
13357 ,px_budget_type_code => l_budget_type_code
13358 ,px_fin_plan_type_id => l_fin_plan_type_id
13359 ,px_fin_plan_type_name => l_fin_plan_type_name
13360 ,px_version_type => l_version_type
13361 ,p_budget_version_number => p_version_number
13362 ,p_change_reason_code => NULL
13363 ,p_function_name => 'PA_PM_UPDATE_BUDGET_LINE'
13364 ,x_budget_entry_method_code => l_budget_entry_method_code
13365 ,x_resource_list_id => l_resource_list_id
13366 ,x_budget_version_id => l_budget_version_id
13367 ,x_fin_plan_level_code => l_entry_level_code
13368 ,x_time_phased_code => l_time_phased_code
13369 ,x_plan_in_multi_curr_flag => l_multi_curr_flag
13370 ,x_budget_amount_code => l_budget_amount_code
13371 ,x_categorization_code => l_categorization_code
13372 ,x_project_number => l_amg_project_number
13373 /* Plan Amount Entry flags introduced by bug 6408139 */
13374 /*Passing all as G_PA_MISS_CHAR since validations not required*/
13375 ,px_raw_cost_flag => l_pa_miss_char
13376 ,px_burdened_cost_flag => l_pa_miss_char
13377 ,px_revenue_flag => l_pa_miss_char
13378 ,px_cost_qty_flag => l_pa_miss_char
13379 ,px_revenue_qty_flag => l_pa_miss_char
13380 ,px_all_qty_flag => l_pa_miss_char
13381 ,px_bill_rate_flag => l_pa_miss_char
13382 ,px_cost_rate_flag => l_pa_miss_char
13383 ,px_burden_rate_flag => l_pa_miss_char
13384 /* Plan Amount Entry flags introduced by bug 6408139 */
13385 ,x_msg_count => p_msg_count
13386 ,x_msg_data => p_msg_data
13387 ,x_return_status => p_return_status );
13388
13389 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13390 IF(l_debug_mode='Y') THEN
13391 pa_debug.g_err_stage := 'validate header info API falied';
13392 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13393 END IF;
13394 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13395 END IF;
13396
13397 --Store the budget line data in budget line table
13398
13399 --Get the CBS flag 16604257
13400 l_cbs_enabled_project := PA_ALTERNATE_TASK_PVT.Is_Cbs_Enabled(p_Project_Id => l_project_id);
13401
13402
13403 IF p_pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13404 l_budget_lines_in(1).pa_task_id := NULL;
13405 ELSE
13406 l_budget_lines_in(1).pa_task_id := p_pa_task_id;
13407 END IF;
13408
13409 IF p_pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13410 l_budget_lines_in(1).pm_task_reference := NULL;
13411 ELSE
13412 l_budget_lines_in(1).pm_task_reference := p_pm_task_reference;
13413 END IF;
13414
13415 IF p_resource_alias = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13416 l_budget_lines_in(1).resource_alias := NULL;
13417 ELSE
13418 l_budget_lines_in(1).resource_alias := p_resource_alias;
13419 END IF;
13420
13421 IF p_resource_list_member_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13422 l_budget_lines_in(1).resource_list_member_id := NULL;
13423 ELSE
13424 l_budget_lines_in(1).resource_list_member_id := p_resource_list_member_id;
13425 END IF;
13426
13427 --Bug 16604257 : CBS RBS Phase 2 API changes
13428
13429 IF p_cost_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13430 l_budget_lines_in(1).cost_code := NULL;
13431 ELSE
13432 l_budget_lines_in(1).cost_code := p_cost_code;
13433 END IF;
13434
13435 IF p_cbs_element_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13436 l_budget_lines_in(1).cbs_element_id := NULL;
13437 ELSE
13438 l_budget_lines_in(1).cbs_element_id := p_cbs_element_id;
13439 END IF;
13440
13441 IF p_budget_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13442 l_budget_lines_in(1).budget_start_date := NULL;
13443 ELSE
13444 l_budget_lines_in(1).budget_start_date := p_budget_start_date;
13445 END IF;
13446
13447 IF p_budget_end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13448 l_budget_lines_in(1).budget_end_date := NULL;
13449 ELSE
13450 l_budget_lines_in(1).budget_end_date := p_budget_end_date;
13451 END IF;
13452
13453 IF p_period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13454 l_budget_lines_in(1).period_name := NULL;
13455 ELSE
13456 l_budget_lines_in(1).period_name := p_period_name;
13457 END IF;
13458
13459 IF p_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13460 l_budget_lines_in(1).description := NULL;
13461 ELSE
13462 l_budget_lines_in(1).description := p_description;
13463 END IF;
13464
13465 IF p_raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13466 l_budget_lines_in(1).raw_cost := NULL;
13467 ELSE
13468 l_budget_lines_in(1).raw_cost := p_raw_cost;
13469 END IF;
13470
13471 IF p_burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13472 l_budget_lines_in(1).burdened_cost := NULL;
13473 ELSE
13474 l_budget_lines_in(1).burdened_cost := p_burdened_cost;
13475 END IF;
13476
13477 IF p_revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13478 l_budget_lines_in(1).revenue := NULL;
13479 ELSE
13480 l_budget_lines_in(1).revenue := p_revenue;
13481 END IF;
13482
13483 IF p_quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13484 l_budget_lines_in(1).quantity := NULL;
13485 ELSE
13486 l_budget_lines_in(1).quantity := p_quantity;
13487 END IF;
13488
13489 IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13490 l_budget_lines_in(1).pm_product_code := NULL;
13491 ELSE
13492 l_budget_lines_in(1).pm_product_code := p_pm_product_code;
13493 END IF;
13494
13495 IF p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13496 l_budget_lines_in(1).attribute_category := NULL;
13497 ELSE
13498 l_budget_lines_in(1).attribute_category := p_attribute_category;
13499 END IF;
13500
13501 IF p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13502 l_budget_lines_in(1).attribute1 := NULL;
13503 ELSE
13504 l_budget_lines_in(1).attribute1 := p_attribute1;
13505 END IF;
13506
13507 IF p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13508 l_budget_lines_in(1).attribute2 := NULL;
13509 ELSE
13510 l_budget_lines_in(1).attribute2 := p_attribute2;
13511 END IF;
13512
13513 IF p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13514 l_budget_lines_in(1).attribute3 := NULL;
13515 ELSE
13516 l_budget_lines_in(1).attribute3 := p_attribute3;
13517 END IF;
13518
13519 IF p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13520 l_budget_lines_in(1).attribute4 := NULL;
13521 ELSE
13522 l_budget_lines_in(1).attribute4 := p_attribute4;
13523 END IF;
13524
13525 IF p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13526 l_budget_lines_in(1).attribute5 := NULL;
13527 ELSE
13528 l_budget_lines_in(1).attribute5 := p_attribute5;
13529 END IF;
13530
13531 IF p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13532 l_budget_lines_in(1).attribute6 := NULL;
13533 ELSE
13534 l_budget_lines_in(1).attribute6 := p_attribute6;
13535 END IF;
13536
13537 IF p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13538 l_budget_lines_in(1).attribute7 := NULL;
13539 ELSE
13540 l_budget_lines_in(1).attribute7 := p_attribute7;
13541 END IF;
13542
13543 IF p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13544 l_budget_lines_in(1).attribute8 := NULL;
13545 ELSE
13546 l_budget_lines_in(1).attribute8 := p_attribute8;
13547 END IF;
13548
13549 IF p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13550 l_budget_lines_in(1).attribute9 := NULL;
13551 ELSE
13552 l_budget_lines_in(1).attribute9 := p_attribute9;
13553 END IF;
13554
13555 IF p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13556 l_budget_lines_in(1).attribute10 := NULL;
13557 ELSE
13558 l_budget_lines_in(1).attribute10 := p_attribute10;
13559 END IF;
13560
13561 IF p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13562 l_budget_lines_in(1).attribute11 := NULL;
13563 ELSE
13564 l_budget_lines_in(1).attribute11 := p_attribute11;
13565 END IF;
13566
13567 IF p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13568 l_budget_lines_in(1).attribute12 := NULL;
13569 ELSE
13570 l_budget_lines_in(1).attribute12 := p_attribute12;
13571 END IF;
13572
13573 IF p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13574 l_budget_lines_in(1).attribute13 := NULL;
13575 ELSE
13576 l_budget_lines_in(1).attribute13 := p_attribute13;
13577 END IF;
13578
13579 IF p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13580 l_budget_lines_in(1).attribute14 := NULL;
13581 ELSE
13582 l_budget_lines_in(1).attribute14 := p_attribute14;
13583 END IF;
13584
13585 IF p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13586 l_budget_lines_in(1).attribute15 := NULL;
13587 ELSE
13588 l_budget_lines_in(1).attribute15 := p_attribute15;
13589 END IF;
13590
13591 IF p_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13592 l_budget_lines_in(1).txn_currency_code := NULL;
13593 ELSE
13594 l_budget_lines_in(1).txn_currency_code := p_currency_code;
13595 END IF;
13596
13597 IF p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13598 l_budget_lines_in(1).projfunc_cost_rate_type := NULL;
13599 ELSE
13600 l_budget_lines_in(1).projfunc_cost_rate_type := p_projfunc_cost_rate_type;
13601 END IF;
13602
13603 IF p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13604 l_budget_lines_in(1).projfunc_cost_rate_date_type := NULL;
13605 ELSE
13606 l_budget_lines_in(1).projfunc_cost_rate_date_type := p_projfunc_cost_rate_date_typ;
13607 END IF;
13608
13609 IF p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13610 l_budget_lines_in(1).projfunc_cost_rate_date := NULL;
13611 ELSE
13612 l_budget_lines_in(1).projfunc_cost_rate_date := p_projfunc_cost_rate_date;
13613 END IF;
13614
13615 IF p_projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13616 l_budget_lines_in(1).projfunc_cost_exchange_rate := NULL;
13617 ELSE
13618 l_budget_lines_in(1).projfunc_cost_exchange_rate := p_projfunc_cost_exchange_rate;
13619 END IF;
13620
13621 IF p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13622 l_budget_lines_in(1).projfunc_rev_rate_type := NULL;
13623 ELSE
13624 l_budget_lines_in(1).projfunc_rev_rate_type := p_projfunc_rev_rate_type;
13625 END IF;
13626
13627 IF p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13628 l_budget_lines_in(1).projfunc_rev_rate_date_type := NULL;
13629 ELSE
13630 l_budget_lines_in(1).projfunc_rev_rate_date_type := p_projfunc_rev_rate_date_typ;
13631 END IF;
13632
13633 IF p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13634 l_budget_lines_in(1).projfunc_rev_rate_date := NULL;
13635 ELSE
13636 l_budget_lines_in(1).projfunc_rev_rate_date := p_projfunc_rev_rate_date;
13637 END IF;
13638
13639 IF p_projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13640 l_budget_lines_in(1).projfunc_rev_exchange_rate := NULL;
13641 ELSE
13642 l_budget_lines_in(1).projfunc_rev_exchange_rate := p_projfunc_rev_exchange_rate;
13643 END IF;
13644
13645 IF p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13646 l_budget_lines_in(1).project_cost_rate_type := NULL;
13647 ELSE
13648 l_budget_lines_in(1).project_cost_rate_type := p_project_cost_rate_type;
13649 END IF;
13650
13651 IF p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13652 l_budget_lines_in(1).project_cost_rate_date_type := NULL;
13653 ELSE
13654 l_budget_lines_in(1).project_cost_rate_date_type := p_project_cost_rate_date_typ;
13655 END IF;
13656
13657 IF p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13658 l_budget_lines_in(1).project_cost_rate_date := NULL;
13659 ELSE
13660 l_budget_lines_in(1).project_cost_rate_date := p_project_cost_rate_date;
13661 END IF;
13662
13663 IF p_project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13664 l_budget_lines_in(1).project_cost_exchange_rate := NULL;
13665 ELSE
13666 l_budget_lines_in(1).project_cost_exchange_rate := p_project_cost_exchange_rate;
13667 END IF;
13668
13669 IF p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13670 l_budget_lines_in(1).project_rev_rate_type := NULL;
13671 ELSE
13672 l_budget_lines_in(1).project_rev_rate_type := p_project_rev_rate_type;
13673 END IF;
13674
13675 IF p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13676 l_budget_lines_in(1).project_rev_rate_date_type := NULL;
13677 ELSE
13678 l_budget_lines_in(1).project_rev_rate_date_type := p_project_rev_rate_date_typ;
13679 END IF;
13680
13681 IF p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13682 l_budget_lines_in(1).project_rev_rate_date := NULL;
13683 ELSE
13684 l_budget_lines_in(1).project_rev_rate_date := p_project_rev_rate_date;
13685 END IF;
13686
13687 IF p_project_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13688 l_budget_lines_in(1).project_rev_exchange_rate := NULL;
13689 ELSE
13690 l_budget_lines_in(1).project_rev_exchange_rate := p_project_rev_exchange_rate;
13691 END IF;
13692
13693 IF p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13694 l_budget_lines_in(1).change_reason_code := NULL;
13695 ELSE
13696 l_budget_lines_in(1).change_reason_code := p_change_reason_code;
13697 END IF;
13698
13699 --Send the budget version id to validate_budget_lines API for
13700 --actuals on FORECAST check
13701 l_version_info_rec.x_budget_version_id := l_budget_version_id;
13702
13703 --Get entry method options and validate them against cost, rev and quantity passed
13704 IF l_budget_type_code IS NULL AND l_fin_plan_type_id IS NOT NULL
13705 THEN
13706
13707 l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(l_budget_version_id);
13708
13709 PA_FIN_PLAN_UTILS.get_plan_amount_flags(
13710 P_AMOUNT_SET_ID => l_amount_set_id
13711 ,X_RAW_COST_FLAG => lx_raw_cost_flag
13712 ,X_BURDENED_FLAG => lx_burdened_cost_flag
13713 ,X_REVENUE_FLAG => lx_revenue_flag
13714 ,X_COST_QUANTITY_FLAG => lx_cost_qty_flag
13715 ,X_REV_QUANTITY_FLAG => lx_revenue_qty_flag
13716 ,X_ALL_QUANTITY_FLAG => lx_all_qty_flag
13717 ,X_BILL_RATE_FLAG => l_bill_rate_flag
13718 ,X_COST_RATE_FLAG => l_cost_rate_flag
13719 ,X_BURDEN_RATE_FLAG => l_burden_rate_flag
13720 ,x_message_count => p_msg_count
13721 ,x_return_status => p_return_status
13722 ,x_message_data => p_msg_data) ;
13723
13724 IF p_return_status <> FND_API.G_RET_STS_SUCCESS
13725 THEN
13726 IF(l_debug_mode='Y') THEN
13727 pa_debug.g_err_stage := 'get_plan_amount_flags API falied';
13728 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13729 END IF;
13730 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13731 END IF;
13732
13733 --Derive the value of all_qty_flag based on version_type
13734 IF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
13735 l_allow_qty_flag := lx_cost_qty_flag;
13736 ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
13737 l_allow_qty_flag := lx_revenue_qty_flag;
13738 ELSE
13739 l_allow_qty_flag := lx_all_qty_flag;
13740 END IF;
13741
13742 END IF;--IF l_budget_type_code IS NULL AND l_fin_plan_type_id IS NOT NULL
13743
13744
13745 --Validate the budget line data
13746 PA_BUDGET_PVT.Validate_Budget_Lines
13747 ( p_calling_context => 'BUDGET_LINE_LEVEL_VALIDATION'
13748 ,p_pa_project_id => l_project_id
13749 ,p_budget_type_code => l_budget_type_code
13750 ,p_fin_plan_type_id => l_fin_plan_type_id
13751 ,p_version_type => l_version_type
13752 ,p_resource_list_id => l_resource_list_id
13753 ,p_time_phased_code => l_time_phased_code
13754 ,p_budget_entry_method_code => l_budget_entry_method_code
13755 ,p_entry_level_code => l_entry_level_code
13756 ,p_allow_qty_flag => l_allow_qty_flag
13757 ,p_allow_raw_cost_flag => lx_raw_cost_flag
13758 ,p_allow_burdened_cost_flag => lx_burdened_cost_flag
13759 ,p_allow_revenue_flag => lx_revenue_flag
13760 ,p_multi_currency_flag => l_multi_curr_flag
13761 ,p_project_cost_rate_type => NULL
13762 ,p_project_cost_rate_date_typ => NULL
13763 ,p_project_cost_rate_date => NULL
13764 ,p_project_cost_exchange_rate => NULL
13765 ,p_projfunc_cost_rate_type => NULL
13766 ,p_projfunc_cost_rate_date_typ => NULL
13767 ,p_projfunc_cost_rate_date => NULL
13768 ,p_projfunc_cost_exchange_rate => NULL
13769 ,p_project_rev_rate_type => NULL
13770 ,p_project_rev_rate_date_typ => NULL
13771 ,p_project_rev_rate_date => NULL
13772 ,p_project_rev_exchange_rate => NULL
13773 ,p_projfunc_rev_rate_type => NULL
13774 ,p_projfunc_rev_rate_date_typ => NULL
13775 ,p_projfunc_rev_rate_date => NULL
13776 ,p_projfunc_rev_exchange_rate => NULL
13777 ,p_version_info_rec => l_version_info_rec
13778 ,px_budget_lines_in => l_budget_lines_in
13779 ,x_budget_lines_out => l_budget_lines_out_tbl
13780 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
13781 ,x_etc_method_code_tbl => l_etc_method_code_tbl
13782 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
13783 ,x_msg_count => p_msg_count
13784 ,x_msg_data => p_msg_data
13785 ,x_return_status => p_return_status );
13786
13787 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13788 IF(l_debug_mode='Y') THEN
13789 pa_debug.g_err_stage := 'validate budget lines API falied';
13790 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13791 END IF;
13792 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13793 END IF;
13794
13795 --Get Task number for AMG Messages
13796 l_amg_task_number := PA_INTERFACE_UTILS_PUB.get_task_number_amg
13797 (p_task_number=> ''
13798 ,p_task_reference => l_budget_lines_in(1).pm_task_reference
13799 ,p_task_id => l_budget_lines_in(1).pa_task_id);
13800
13801
13802 --Check the existence of resource assignment
13803 OPEN l_resource_assignment_csr( l_budget_version_id
13804 ,l_budget_lines_in(1).pa_task_id
13805 ,l_budget_lines_in(1).resource_list_member_id
13806 ,l_budget_lines_in(1).cbs_element_id);
13807
13808 FETCH l_resource_assignment_csr INTO l_resource_assignment_id;
13809
13810 IF l_resource_assignment_csr%NOTFOUND
13811 THEN
13812 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13813 THEN
13814 pa_interface_utils_pub.map_new_amg_msg
13815 ( p_old_message_code => 'PA_NO_RESOURCE_ASSIGNMENT'
13816 ,p_msg_attribute => 'CHANGE'
13817 ,p_resize_flag => 'N'
13818 ,p_msg_context => 'BUDG'
13819 ,p_attribute1 => l_amg_project_number
13820 ,p_attribute2 => l_amg_task_number
13821 ,p_attribute3 => l_budget_type_code
13822 ,p_attribute4 => l_budget_lines_in(1).resource_alias
13823 ,p_attribute5 => to_char(l_budget_lines_in(1).budget_start_date));
13824 END IF;
13825
13826 CLOSE l_resource_assignment_csr;
13827 RAISE FND_API.G_EXC_ERROR;
13828 END IF; --l_resource_assignment_csr%NOTFOUND
13829
13830 CLOSE l_resource_assignment_csr;
13831
13832 --Currency_code value, even if specified, should be ignored in
13833 --case of old Budgets Model
13834 IF l_budget_type_code IS NOT NULL
13835 THEN
13836 l_budget_lines_in(1).txn_currency_code := NULL;
13837 END IF;
13838
13839 --Checking existence of budget line
13840 OPEN l_budget_line_csr( l_resource_assignment_id
13841 ,l_budget_lines_in(1).budget_start_date
13842 ,l_budget_lines_in(1).txn_currency_code);
13843
13844 FETCH l_budget_line_csr INTO l_budget_line_rowid
13845 ,l_budget_line_id;
13846
13847 IF l_budget_line_csr%NOTFOUND
13848 THEN
13849 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13850 THEN
13851 pa_interface_utils_pub.map_new_amg_msg
13852 ( p_old_message_code => 'PA_BUDGET_LINE_NOT_FOUND'
13853 ,p_msg_attribute => 'CHANGE'
13854 ,p_resize_flag => 'N'
13855 ,p_msg_context => 'BUDG'
13856 ,p_attribute1 => l_amg_project_number
13857 ,p_attribute2 => l_amg_task_number
13858 ,p_attribute3 => l_budget_type_code
13859 ,p_attribute4 => l_budget_lines_in(1).resource_alias
13860 ,p_attribute5 => to_char(l_budget_lines_in(1).budget_start_date));
13861 END IF;
13862
13863 CLOSE l_budget_line_csr;
13864 RAISE FND_API.G_EXC_ERROR;
13865 END IF;--l_budget_line_csr%NOTFOUND
13866
13867 CLOSE l_budget_line_csr;
13868
13869
13870 --Update budget line for old FORMS based Budgets Model
13871 IF l_budget_type_code IS NOT NULL
13872 THEN
13873
13874 --Take a db lock on the table pa_budget_lines
13875 OPEN l_lock_budget_line_csr( l_budget_line_rowid );
13876 CLOSE l_lock_budget_line_csr; --FYI, does not release lock
13877
13878 --Calling update_budget_line_sql to build a dynamic update statement
13879 pa_budget_pvt.update_budget_line_sql
13880 ( p_return_status => p_return_status
13881 ,p_budget_entry_method_code => l_budget_entry_method_code
13882 ,p_resource_assignment_id => l_resource_assignment_id
13883 ,p_start_date => l_budget_lines_in(1).budget_start_date
13884 ,p_time_phased_type_code => l_time_phased_code
13885 ,p_description => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_description)
13886 ,p_quantity => PA_TASK_ASSIGNMENTS_PVT.pfnum(p_quantity)
13887 ,p_raw_cost => PA_TASK_ASSIGNMENTS_PVT.pfnum(p_raw_cost)
13888 ,p_burdened_cost => PA_TASK_ASSIGNMENTS_PVT.pfnum(p_burdened_cost)
13889 ,p_revenue => PA_TASK_ASSIGNMENTS_PVT.pfnum(p_revenue)
13890 ,p_change_reason_code => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_change_reason_code)
13891 ,p_attribute_category => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute_category)
13892 ,p_attribute1 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute1)
13893 ,p_attribute2 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute2)
13894 ,p_attribute3 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute3)
13895 ,p_attribute4 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute4)
13896 ,p_attribute5 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute5)
13897 ,p_attribute6 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute6)
13898 ,p_attribute7 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute7)
13899 ,p_attribute8 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute8)
13900 ,p_attribute9 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute9)
13901 ,p_attribute10 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute10)
13902 ,p_attribute11 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute11)
13903 ,p_attribute12 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute12)
13904 ,p_attribute13 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute13)
13905 ,p_attribute14 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute14)
13906 ,p_attribute15 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute15)
13907 );
13908
13909 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
13910 THEN
13911 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13912 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
13913 THEN
13914 RAISE FND_API.G_EXC_ERROR;
13915 END IF;
13916
13917 --summarizing the totals in the table pa_budget_versions
13918 PA_BUDGET_UTILS.summerize_project_totals
13919 (x_budget_version_id => l_budget_version_id
13920 ,x_err_code => l_err_code
13921 ,x_err_stage => l_err_stage
13922 ,x_err_stack => l_err_stack );
13923
13924 IF l_err_code > 0
13925 THEN
13926 IF(l_debug_mode='Y') THEN
13927 pa_debug.g_err_stage := 'summerize_project_totals API falied';
13928 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13929 END IF;
13930
13931 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13932 THEN
13933 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
13934 THEN
13935 pa_interface_utils_pub.map_new_amg_msg
13936 ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
13937 ,p_msg_attribute => 'CHANGE'
13938 ,p_resize_flag => 'N'
13939 ,p_msg_context => 'BUDG'
13940 ,p_attribute1 => l_amg_project_number
13941 ,p_attribute2 => l_amg_task_number
13942 ,p_attribute3 => l_budget_type_code
13943 ,p_attribute4 => l_budget_lines_in(1).resource_alias
13944 ,p_attribute5 => to_char(l_budget_lines_in(1).budget_start_date));
13945 ELSE
13946 pa_interface_utils_pub.map_new_amg_msg
13947 ( p_old_message_code => l_err_stage
13948 ,p_msg_attribute => 'CHANGE'
13949 ,p_resize_flag => 'N'
13950 ,p_msg_context => 'BUDG'
13951 ,p_attribute1 => l_amg_project_number
13952 ,p_attribute2 => l_amg_task_number
13953 ,p_attribute3 => l_budget_type_code
13954 ,p_attribute4 => l_budget_lines_in(1).resource_alias
13955 ,p_attribute5 => to_char(l_budget_lines_in(1).budget_start_date));
13956 END IF;
13957 END IF;--FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13958
13959 RAISE FND_API.G_EXC_ERROR;
13960
13961 ELSIF l_err_code < 0
13962 THEN
13963
13964 IF(l_debug_mode='Y') THEN
13965 pa_debug.g_err_stage := 'summerize_project_totals API falied';
13966 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13967 END IF;
13968
13969 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
13970 THEN
13971 FND_MSG_PUB.add_exc_msg
13972 ( p_pkg_name => 'PA_BUDGET_UTILS'
13973 , p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
13974 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
13975 END IF;
13976
13977 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13978
13979 END IF;--l_err_code > 0
13980
13981
13982 ELSE --insert budget line for new FinPlan model
13983
13984
13985 --Copy the fin plan line data into a table of type pa_fp_rollup_tmp
13986 --If an attribute should not be updated then pass it as null, and
13987 --if an attribute should be updated to null then pass it as FND_API.G_MISS_XXX
13988
13989 l_finplan_lines_tab(1).system_reference1 := l_budget_lines_in(1).pa_task_id;
13990 l_finplan_lines_tab(1).system_reference2 := l_budget_lines_in(1).resource_list_member_id;
13991 l_finplan_lines_tab(1).system_reference3 := l_budget_lines_in(1).cbs_element_id;-- Added for CBS 16604257
13992 l_finplan_lines_tab(1).start_date := l_budget_lines_in(1).budget_start_date;
13993 l_finplan_lines_tab(1).end_date := l_budget_lines_in(1).budget_end_date;
13994 l_finplan_lines_tab(1).period_name := l_budget_lines_in(1).period_name;
13995 l_finplan_lines_tab(1).txn_currency_code := l_budget_lines_in(1).txn_currency_code;
13996 l_finplan_lines_tab(1).txn_raw_cost := PA_TASK_ASSIGNMENTS_PVT.pfnum(p_raw_cost);
13997 l_finplan_lines_tab(1).txn_burdened_cost := PA_TASK_ASSIGNMENTS_PVT.pfnum(p_burdened_cost);
13998 l_finplan_lines_tab(1).txn_revenue := PA_TASK_ASSIGNMENTS_PVT.pfnum(p_revenue);
13999 l_finplan_lines_tab(1).quantity := PA_TASK_ASSIGNMENTS_PVT.pfnum(p_quantity);
14000 l_finplan_lines_tab(1).change_reason_code := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_change_reason_code);
14001 l_finplan_lines_tab(1).description := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_description);
14002 l_finplan_lines_tab(1).attribute_category := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute_category);
14003 l_finplan_lines_tab(1).attribute1 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute1);
14004 l_finplan_lines_tab(1).attribute2 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute2);
14005 l_finplan_lines_tab(1).attribute3 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute3);
14006 l_finplan_lines_tab(1).attribute4 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute4);
14007 l_finplan_lines_tab(1).attribute5 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute5);
14008 l_finplan_lines_tab(1).attribute6 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute6);
14009 l_finplan_lines_tab(1).attribute7 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute7);
14010 l_finplan_lines_tab(1).attribute8 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute8);
14011 l_finplan_lines_tab(1).attribute9 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute9);
14012 l_finplan_lines_tab(1).attribute10 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute10);
14013 l_finplan_lines_tab(1).attribute11 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute11);
14014 l_finplan_lines_tab(1).attribute12 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute12);
14015 l_finplan_lines_tab(1).attribute13 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute13);
14016 l_finplan_lines_tab(1).attribute14 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute14);
14017 l_finplan_lines_tab(1).attribute15 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute15);
14018
14019 IF (p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14020 AND p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14021 AND p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14022 AND p_projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14023 AND p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14024 AND p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14025 AND p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14026 AND p_projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14027 AND p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14028 AND p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14029 AND p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14030 AND p_project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14031 AND p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14032 AND p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14033 AND p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14034 AND p_project_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
14035 THEN
14036 l_finplan_lines_tab(1).projfunc_cost_rate_type := to_char(NULL);
14037 l_finplan_lines_tab(1).projfunc_cost_rate_date_type := to_char(NULL);
14038 l_finplan_lines_tab(1).projfunc_cost_rate_date := to_date(NULL);
14039 l_finplan_lines_tab(1).projfunc_cost_exchange_rate := to_number(NULL);
14040 l_finplan_lines_tab(1).projfunc_rev_rate_type := to_char(NULL);
14041 l_finplan_lines_tab(1).projfunc_rev_rate_date_type := to_char(NULL);
14042 l_finplan_lines_tab(1).projfunc_rev_rate_date := to_date(NULL);
14043 l_finplan_lines_tab(1).projfunc_rev_exchange_rate := to_number(NULL);
14044 l_finplan_lines_tab(1).project_cost_rate_type := to_char(NULL);
14045 l_finplan_lines_tab(1).project_cost_rate_date_type := to_char(NULL);
14046 l_finplan_lines_tab(1).project_cost_rate_date := to_date(NULL);
14047 l_finplan_lines_tab(1).project_cost_exchange_rate := to_number(NULL);
14048 l_finplan_lines_tab(1).project_rev_rate_type := to_char(NULL);
14049 l_finplan_lines_tab(1).project_rev_rate_date_type := to_char(NULL);
14050 l_finplan_lines_tab(1).project_rev_rate_date := to_date(NULL);
14051 l_finplan_lines_tab(1).project_rev_exchange_rate := to_number(NULL);
14052 ELSE
14053 l_finplan_lines_tab(1).projfunc_cost_rate_type := nvl(l_budget_lines_in(1).projfunc_cost_rate_type,FND_API.G_MISS_CHAR);
14054 l_finplan_lines_tab(1).projfunc_cost_rate_date_type := nvl(l_budget_lines_in(1).projfunc_cost_rate_date_type,FND_API.G_MISS_CHAR);
14055 l_finplan_lines_tab(1).projfunc_cost_rate_date := nvl(l_budget_lines_in(1).projfunc_cost_rate_date,FND_API.G_MISS_DATE);
14056 l_finplan_lines_tab(1).projfunc_cost_exchange_rate := nvl(l_budget_lines_in(1).projfunc_cost_exchange_rate,FND_API.G_MISS_NUM);
14057 l_finplan_lines_tab(1).projfunc_rev_rate_type := nvl(l_budget_lines_in(1).projfunc_rev_rate_type,FND_API.G_MISS_CHAR);
14058 l_finplan_lines_tab(1).projfunc_rev_rate_date_type := nvl(l_budget_lines_in(1).projfunc_rev_rate_date_type,FND_API.G_MISS_CHAR);
14059 l_finplan_lines_tab(1).projfunc_rev_rate_date := nvl(l_budget_lines_in(1).projfunc_rev_rate_date,FND_API.G_MISS_DATE);
14060 l_finplan_lines_tab(1).projfunc_rev_exchange_rate := nvl(l_budget_lines_in(1).projfunc_rev_exchange_rate,FND_API.G_MISS_NUM);
14061 l_finplan_lines_tab(1).project_cost_rate_type := nvl(l_budget_lines_in(1).project_cost_rate_type,FND_API.G_MISS_CHAR);
14062 l_finplan_lines_tab(1).project_cost_rate_date_type := nvl(l_budget_lines_in(1).project_cost_rate_date_type,FND_API.G_MISS_CHAR);
14063 l_finplan_lines_tab(1).project_cost_rate_date := nvl(l_budget_lines_in(1).project_cost_rate_date,FND_API.G_MISS_DATE);
14064 l_finplan_lines_tab(1).project_cost_exchange_rate := nvl(l_budget_lines_in(1).project_cost_exchange_rate,FND_API.G_MISS_NUM);
14065 l_finplan_lines_tab(1).project_rev_rate_type := nvl(l_budget_lines_in(1).project_rev_rate_type,FND_API.G_MISS_CHAR);
14066 l_finplan_lines_tab(1).project_rev_rate_date_type := nvl(l_budget_lines_in(1).project_rev_rate_date_type,FND_API.G_MISS_CHAR);
14067 l_finplan_lines_tab(1).project_rev_rate_date := nvl(l_budget_lines_in(1).project_rev_rate_date,FND_API.G_MISS_DATE);
14068 l_finplan_lines_tab(1).project_rev_exchange_rate := nvl(l_budget_lines_in(1).project_rev_exchange_rate,FND_API.G_MISS_NUM);
14069 END IF;
14070
14071 l_finplan_lines_tab(1).pm_product_code := l_budget_lines_in(1).pm_product_code;
14072 l_finplan_lines_tab(1).quantity_source := 'I';
14073 l_finplan_lines_tab(1).raw_cost_source := 'I';
14074 l_finplan_lines_tab(1).burdened_cost_source := 'I';
14075 l_finplan_lines_tab(1).revenue_source := 'I';
14076 l_finplan_lines_tab(1).resource_assignment_id := l_resource_assignment_id;
14077 l_finplan_lines_tab(1).budget_line_id := l_budget_line_id;
14078 l_finplan_lines_tab(1).budget_version_id := l_budget_version_id;
14079
14080 --Lock the budget version before updating a budget line
14081 l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
14082 (p_budget_version_id => l_budget_version_id);
14083
14084 PA_FIN_PLAN_PVT.lock_unlock_version
14085 ( p_budget_version_id => l_budget_version_id
14086 ,p_record_version_number => l_record_version_number
14087 ,p_action => 'L'
14088 ,p_user_id => FND_GLOBAL.User_id
14089 ,p_person_id => null
14090 ,x_return_status => p_return_status
14091 ,x_msg_count => p_msg_count
14092 ,x_msg_data => p_msg_data);
14093
14094 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14095 -- Error message is not added here as the api lock_unlock_version
14096 -- adds the message to stack
14097 IF(l_debug_mode='Y') THEN
14098 pa_debug.g_err_stage := 'Failed in locking the version ' || l_budget_version_id;
14099 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
14100 END IF;
14101 RAISE FND_API.G_EXC_ERROR;
14102 END IF;
14103
14104 --Call PA_FIN_PLAN_PVT.add_fin_plan_lines. This api takes care of updating
14105 --budget lines data in all relevant tables.
14106 PA_FIN_PLAN_PVT.add_fin_plan_lines
14107 ( p_calling_context => PA_FP_CONSTANTS_PKG.G_AMG_API
14108 ,p_fin_plan_version_id => l_budget_version_id
14109 ,p_finplan_lines_tab => l_finplan_lines_tab
14110 ,x_return_status => p_return_status
14111 ,x_msg_count => p_msg_count
14112 ,x_msg_data => p_msg_data );
14113
14114 IF p_return_status <> FND_API.G_RET_STS_SUCCESS
14115 THEN
14116 IF(l_debug_mode='Y') THEN
14117 pa_debug.g_err_stage := 'PA_FIN_PLAN_PVT.add_fin_plan_lines API falied';
14118 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
14119 END IF;
14120 RAISE FND_API.G_EXC_ERROR;
14121 END IF;
14122
14123
14124 --unlock the budget version after updating the budget line
14125 l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
14126 (p_budget_version_id => l_budget_version_id);
14127
14128 PA_FIN_PLAN_PVT.lock_unlock_version
14129 ( p_budget_version_id => l_budget_version_id
14130 ,p_record_version_number => l_record_version_number
14131 ,p_action => 'U'
14132 ,p_user_id => FND_GLOBAL.User_id
14133 ,p_person_id => null
14134 ,x_return_status => p_return_status
14135 ,x_msg_count => p_msg_count
14136 ,x_msg_data => p_msg_data);
14137
14138 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14139 -- Error message is not added here as the api lock_unlock_version
14140 -- adds the message to stack
14141 IF(l_debug_mode='Y') THEN
14142 pa_debug.g_err_stage := 'Failed in unlocking the version ' || l_budget_version_id;
14143 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
14144 END IF;
14145 RAISE FND_API.G_EXC_ERROR;
14146 END IF;
14147
14148
14149 END IF;--end of code to update budget line
14150
14151
14152 IF FND_API.TO_BOOLEAN( p_commit )
14153 THEN
14154 COMMIT;
14155 END IF;
14156
14157 IF(l_debug_mode='Y') THEN
14158 pa_debug.g_err_stage := 'Exiting ' || l_api_name;
14159 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
14160 END IF;
14161
14162 IF ( l_debug_mode = 'Y' ) THEN
14163 pa_debug.reset_curr_function;
14164 END IF;
14165
14166
14167 EXCEPTION
14168
14169 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc
14170 THEN
14171
14172 ROLLBACK TO update_budget_line_pub;
14173
14174 p_return_status := FND_API.G_RET_STS_ERROR;
14175 l_msg_count := FND_MSG_PUB.count_msg;
14176
14177 IF l_msg_count = 1 and p_msg_data IS NULL THEN
14178 PA_INTERFACE_UTILS_PUB.get_messages
14179 (p_encoded => FND_API.G_TRUE
14180 ,p_msg_index => 1
14181 ,p_msg_count => l_msg_count
14182 ,p_msg_data => l_msg_data
14183 ,p_data => l_data
14184 ,p_msg_index_out => l_msg_index_out);
14185 p_msg_data := l_data;
14186 p_msg_count := l_msg_count;
14187 ELSE
14188 p_msg_count := l_msg_count;
14189 END IF;
14190
14191 IF ( l_debug_mode = 'Y' ) THEN
14192 pa_debug.reset_curr_function;
14193 END IF;
14194
14195 RETURN;
14196
14197
14198 WHEN FND_API.G_EXC_ERROR
14199 THEN
14200
14201 ROLLBACK TO update_budget_line_pub;
14202
14203 p_return_status := FND_API.G_RET_STS_ERROR;
14204
14205 FND_MSG_PUB.count_and_get
14206 ( p_count => p_msg_count ,
14207 p_data => p_msg_data );
14208
14209 IF ( l_debug_mode = 'Y' ) THEN
14210 pa_debug.reset_curr_function;
14211 END IF;
14212
14213
14214 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
14215 THEN
14216
14217 ROLLBACK TO update_budget_line_pub;
14218
14219 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14220
14221 FND_MSG_PUB.count_and_get
14222 ( p_count => p_msg_count ,
14223 p_data => p_msg_data );
14224
14225 IF ( l_debug_mode = 'Y' ) THEN
14226 pa_debug.reset_curr_function;
14227 END IF;
14228
14229
14230 WHEN ROW_ALREADY_LOCKED
14231 THEN
14232
14233 ROLLBACK TO update_budget_line_pub;
14234
14235 p_return_status := FND_API.G_RET_STS_ERROR;
14236
14237 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14238 THEN
14239 FND_MESSAGE.set_name('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
14240 FND_MESSAGE.set_token('PROJECT', l_amg_project_number);
14241 FND_MESSAGE.set_token('TASK', l_amg_task_number);
14242 FND_MESSAGE.set_token('BUDGET_TYPE', l_budget_type_code);
14243 FND_MESSAGE.set_token('SOURCE_NAME', '');
14244 FND_MESSAGE.set_token('START_DATE', '');
14245 FND_MESSAGE.set_token('ENTITY', 'G_BUDGET_LINE_CODE');
14246 FND_MSG_PUB.add;
14247 END IF;
14248
14249 FND_MSG_PUB.count_and_get
14250 ( p_count => p_msg_count ,
14251 p_data => p_msg_data );
14252
14253 IF ( l_debug_mode = 'Y' ) THEN
14254 pa_debug.reset_curr_function;
14255 END IF;
14256
14257
14258 WHEN OTHERS
14259 THEN
14260
14261 ROLLBACK TO update_budget_line_pub;
14262
14263 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14264
14265 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
14266 THEN
14267 FND_MSG_PUB.add_exc_msg
14268 ( p_pkg_name => G_PKG_NAME
14269 , p_procedure_name => l_api_name );
14270 END IF;
14271
14272 FND_MSG_PUB.count_and_get
14273 ( p_count => p_msg_count ,
14274 p_data => p_msg_data );
14275
14276 IF ( l_debug_mode = 'Y' ) THEN
14277 pa_debug.reset_curr_function;
14278 END IF;
14279
14280 END update_budget_line;
14281
14282
14283 ----------------------------------------------------------------------------------------
14284 --Name: calculate_amounts
14285 --Type: Procedure
14286 --Description: This procedure can is used to recalculate raw cost,
14287 -- burdened cost and revenue by budget line within
14288 -- a given project.
14289 --
14290 --
14291 --Called subprograms: Pa_Client_Extn_Budget.Calc_Raw_Cost
14292 -- , Pa_Client_Extn_Budget.Calc_Burdened_Cost
14293 -- , Pa_Client_Extn_Budget.Calc_Revenue
14294 --
14295 --
14296 --
14297 --History:
14298 -- AUTUMN-1996 R. Krishnamurthy Created
14299 -- 07-DEC-1996 L. de Werker Changed error handling
14300 -- 25-MAR-2003 Rajagopal Modified the code to make it compatible with
14301 -- new Budgets and forecasts model
14302 --
14303 -- 27-SEP-05 jwhite Bug 4588279
14304 -- For budget_type_code Budgetary Control budgets,
14305 -- add validation to prevent update to
14306 -- periods later than the latest encumbrance year
14307 -- for the set-of-books.
14308 --
14309 PROCEDURE Calculate_Amounts
14310 ( p_api_version_number IN NUMBER
14311 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
14312 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
14313 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
14314 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14315 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14316 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14317 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14318 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14319 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14320 ,p_calc_raw_cost_yn IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14321 ,p_calc_burdened_cost_yn IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14322 ,p_calc_revenue_yn IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14323 ,p_update_db_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14324 ,p_calc_budget_lines_out OUT NOCOPY calc_budget_line_out_tbl_type
14325 -- Bug 2863564 Parameters added for new Fin Plan Model
14326 ,p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE
14327 ,p_fin_plan_type_id IN pa_fin_plan_types_b.fin_plan_type_id%TYPE
14328 ,p_fin_plan_type_name IN pa_fin_plan_types_tl.name%TYPE
14329 ,p_version_type IN pa_budget_versions.version_type%TYPE
14330 ,p_budget_version_number IN pa_budget_versions.version_number%TYPE
14331 ) IS
14332
14333 CURSOR l_budget_type_csr
14334 (p_budget_type_code VARCHAR2 )
14335 IS
14336 SELECT 'X'
14337 FROM pa_budget_types
14338 WHERE budget_type_code = p_budget_type_code;
14339
14340 CURSOR l_task_csr (p_task_id IN NUMBER ) IS
14341 SELECT pm_task_reference,
14342 task_name -- Bug 2863564
14343 FROM pa_tasks
14344 WHERE task_id = p_task_id;
14345
14346 -- Bug 2863564 new variables defined for Financial Planning chnages
14347
14348 l_task_name pa_tasks.task_name%TYPE;
14349 l_context VARCHAR2(30);
14350 l_context_finplan CONSTANT VARCHAR2(30) := PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN;
14351 l_context_budget CONSTANT VARCHAR2(30) := PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET;
14352
14353 -- Bug 2863564 The cursor has been modified for financial planning changes.
14354 -- The changes include fetching of new columns which aren't included in the
14355 -- view definition. Changing the pa_budget_lines_v view could have a large impact.
14356 -- So, cursor has been modified to be based on the direct tables.
14357
14358 --<Patchset M: B and F impact changes : AMG:>-- Bug # 3507156
14359 -- Modified the select statement to selecy alias name directly from pa_resource_list_members table
14360 -- instead of PA_RESOURCES_PKG.GET_RESOURCE_NAME(rlm.resource_id,rlm.resource_type_id)
14361
14362
14363
14364 CURSOR l_resource_assignment_csr
14365 ( c_budget_version_id NUMBER,
14366 c_context VARCHAR2)
14367 IS
14368 SELECT bl.rowid row_id
14369 ,bl.budget_line_id budget_line_id
14370 ,DECODE(c_context,l_context_finplan,bl.txn_currency_code,bl.projfunc_currency_code) txn_currency_code
14371 ,ra.resource_assignment_id resource_assignment_id
14372 ,ra.task_id task_id
14373 ,ra.rate_based_flag rate_based_flag
14374 ,rlm.resource_list_id resource_list_id
14375 ,rlm.resource_list_member_id resource_list_member_id
14376 ,rlm.resource_id resource_id
14377 ,rlm.alias
14378 ,bl.start_date start_date
14379 ,bl.end_date end_date
14380 ,bl.period_name period_name
14381 ,bl.quantity quantity
14382 ,bl.display_quantity display_quantity --IPM Arch Enhancement Bug 4865563
14383 ,DECODE(c_context,l_context_finplan,bl.txn_raw_cost,bl.raw_cost) txn_raw_cost
14384 ,DECODE(c_context,l_context_finplan,bl.txn_burdened_cost,bl.burdened_cost) txn_burdened_cost
14385 ,DECODE(c_context,l_context_finplan,bl.txn_revenue,bl.revenue) txn_revenue
14386 ,bl.project_raw_cost project_raw_cost
14387 ,bl.project_burdened_cost project_burdened_cost
14388 ,bl.project_revenue project_revenue
14389 ,bl.raw_cost projfunc_raw_cost
14390 ,bl.burdened_cost projfunc_burdened_cost
14391 ,bl.revenue projfunc_revenue
14392 FROM pa_budget_lines bl,
14393 pa_resource_assignments ra,
14394 pa_resource_list_members rlm
14395 WHERE bl.budget_version_id = c_budget_version_id
14396 AND bl.resource_assignment_id = ra.resource_assignment_id
14397 AND ra.resource_list_member_id = rlm.resource_list_member_id;
14398
14399 l_resource_assignment_rec l_resource_assignment_csr%ROWTYPE;
14400
14401 -- PL/SQL tables that would be used for bulk processing
14402
14403 l_rowid_tbl row_id_tbl_type;
14404 l_budget_line_id_tbl budget_line_id_tbl_type;
14405 l_txn_currency_code_tbl txn_currency_code_tbl_type;
14406 l_res_assignment_id_tbl res_assignment_id_tbl_type;
14407 l_task_id_tbl task_id_tbl_type;
14408 l_resource_list_id_tbl resource_list_id_tbl_type;
14409 l_resource_list_member_id_tbl res_list_member_id_tbl_type;
14410 l_resource_id_tbl resource_id_tbl_type;
14411 l_resource_name_tbl resource_name_tbl_type;
14412 l_start_date_tbl date_tbl_type;
14413 l_end_date_tbl date_tbl_type;
14414 l_period_name_tbl period_name_tbl_type;
14415 l_quantity_tbl quantity_tbl_type;
14416 l_display_quantity_tbl display_quantity_tbl_type; --IPM Arch Enhancement Bug 4865563
14417 l_txn_raw_cost_tbl raw_cost_tbl_type;
14418 l_txn_burdened_cost_tbl burdened_cost_tbl_type;
14419 l_txn_revenue_tbl revenue_tbl_type;
14420 l_project_raw_cost_tbl raw_cost_tbl_type;
14421 l_project_burdened_cost_tbl burdened_cost_tbl_type;
14422 l_project_revenue_tbl revenue_tbl_type;
14423 l_projfunc_raw_cost_tbl raw_cost_tbl_type;
14424 l_projfunc_burdened_cost_tbl burdened_cost_tbl_type;
14425 l_projfunc_revenue_tbl revenue_tbl_type;
14426 l_rate_based_flag_tbl rate_based_flag_tbl_type;
14427
14428 /* added for 2207723 */
14429 CURSOR l_get_entry_level_csr (c_budget_version_id IN NUMBER)
14430 IS
14431 SELECT m.entry_level_code
14432 FROM pa_budget_versions v
14433 ,pa_budget_entry_methods m
14434 WHERE v.budget_version_id = c_budget_version_id
14435 AND v.budget_entry_method_code = m.budget_entry_method_code
14436 AND v.ci_id IS NULL; -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause v.ci_id IS NULL--Bug # 3507156
14437
14438
14439 l_api_name CONSTANT VARCHAR2(30) := 'Calculate_Amounts';
14440
14441 -- Bug 2863564 l_return_status VARCHAR2(1);
14442 l_project_id NUMBER;
14443 l_dummy VARCHAR2(30);
14444 l_calculated_raw_cost NUMBER := 0;
14445 l_calculated_burdened_cost NUMBER := 0;
14446 l_calculated_revenue NUMBER := 0;
14447 l_err_code NUMBER := 0;
14448 l_err_message VARCHAR2(100);
14449 l_err_stage VARCHAR2(100);
14450 l_err_stack VARCHAR2(100);
14451 l_budget_version_id NUMBER;
14452 l_line_ctr NUMBER := 0;
14453 l_labor_flag VARCHAR2(1);
14454 l_allow_override_flag VARCHAR2(1);
14455 l_pm_task_reference VARCHAR2(30);
14456 l_msg_count NUMBER := 0;
14457 l_msg_data VARCHAR2(2000);
14458 l_function_allowed VARCHAR2(1);
14459 l_resp_id NUMBER := 0;
14460 l_user_id NUMBER := 0;
14461 l_module_name VARCHAR2(80);
14462 l_entry_level pa_budget_entry_methods.entry_level_code%type; /* 2207723 */
14463
14464 p_multiple_task_msg VARCHAR2(1) := 'T';
14465
14466 l_budget_line_id pa_budget_lines.budget_line_id%TYPE; /* FPB2 */
14467
14468 --Included the following variables as part of changes to AMG due to finplan model.
14469 l_txn_currency_code pa_budget_lines.txn_currency_code%TYPE;
14470 l_multi_currency_billing_flag pa_projects_all.multi_currency_billing_flag%TYPE;
14471 l_project_currency_code pa_projects_all.project_currency_code%TYPE;
14472 l_projfunc_currency_code pa_projects_all.projfunc_currency_code%TYPE;
14473 l_project_cost_rate_type pa_projects_all.project_rate_type%TYPE;
14474 l_projfunc_cost_rate_type pa_projects_all.projfunc_cost_rate_type%TYPE;
14475 l_project_bil_rate_type pa_projects_all.project_bil_rate_type%TYPE;
14476 l_projfunc_bil_rate_type pa_projects_all.projfunc_bil_rate_type%TYPE;
14477
14478 l_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE;
14479 l_fin_plan_type_code pa_fin_plan_types_b.fin_plan_type_code%TYPE;
14480 l_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE;
14481
14482 l_version_type pa_budget_versions.version_type%TYPE;
14483 l_record_version_number pa_budget_versions.record_version_number%TYPE;
14484 l_budget_type_code pa_budget_versions.budget_type_code%TYPE;
14485 l_ci_id pa_budget_versions.ci_id%TYPE;
14486
14487 l_debug_mode VARCHAR2(30):= NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
14488 l_debug_level3 CONSTANT NUMBER := 3;
14489 l_debug_level5 CONSTANT NUMBER := 5;
14490
14491 l_plsql_max_array_size NUMBER := 200;
14492 l_security_ret_code VARCHAR2(30);
14493 l_result VARCHAR2(30);
14494
14495
14496 ll_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE;
14497 ll_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE;
14498 ll_version_type pa_budget_versions.version_type%TYPE;
14499 ll_version_number pa_budget_versions.version_number%TYPE;
14500 --needed to get the field values associated to a AMG message
14501
14502 --Added baseline_funding flag and querying from pa_projects_all and not from pa_projects
14503 CURSOR l_amg_project_csr
14504 (p_pa_project_id pa_projects.project_id%type)
14505 IS
14506 SELECT segment1
14507 ,baseline_funding_flag
14508 FROM pa_projects_all p
14509 WHERE p.project_id = p_pa_project_id;
14510
14511 l_amg_project_rec l_amg_project_csr%ROWTYPE;
14512 --l_amg_segment1 VARCHAR2(25); no more used. Replaced by l_amg_project_rec.segment1
14513
14514 -- Bug 2863564 added for new financial planning changes
14515
14516 CURSOR proj_fp_options_cur
14517 (c_project_id IN NUMBER, c_fin_plan_type_id IN NUMBER) IS
14518 SELECT 'x'
14519 FROM pa_proj_fp_options pfo
14520 WHERE pfo.project_id = c_project_id
14521 AND pfo.fin_plan_type_id = c_fin_plan_type_id
14522 AND pfo.fin_plan_option_level_code = PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE;
14523
14524 proj_fp_options_rec proj_fp_options_cur%ROWTYPE;
14525
14526 CURSOR budget_version_info_cur (c_budget_version_id IN NUMBER) IS
14527 SELECT bv.project_id project_id
14528 ,bv.budget_type_code budget_type_code
14529 ,bv.fin_plan_type_id fin_plan_type_id
14530 ,bv.version_type version_type
14531 ,bv.budget_status_code budget_status_code
14532 ,bv.ci_id ci_id -- raja
14533 ,pt.fin_plan_type_code fin_plan_type_code
14534 ,pt.name fin_plan_type_name
14535 ,pa_fin_plan_utils.get_fin_plan_level_code(bv.budget_version_id) plan_level_code
14536 ,bv.locked_by_person_id
14537 ,bv.request_id
14538 ,pt.plan_class_code
14539 ,bv.etc_start_date
14540 ,nvl(bv.wp_version_flag,'N') wp_version_flag
14541 ,bv.plan_processing_code
14542 FROM pa_budget_versions bv,
14543 pa_fin_plan_types_vl pt
14544 WHERE bv.budget_version_id = c_budget_version_id
14545 AND pt.fin_plan_type_id(+) = bv.fin_plan_type_id
14546 AND bv.ci_id IS NULL; -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause bv.ci_id IS NULL--Bug # 3507156
14547
14548
14549 budget_version_info_rec budget_version_info_cur%ROWTYPE;
14550
14551 CURSOR draft_version_cur(
14552 c_project_id pa_budget_versions.project_id%TYPE
14553 ,c_budget_type_code pa_budget_versions.budget_type_code%TYPE)
14554 IS
14555 SELECT budget_version_id
14556 FROM pa_budget_versions
14557 WHERE project_id = c_project_id
14558 AND budget_type_code = c_budget_type_code
14559 AND budget_status_code = 'W'
14560 AND ci_id IS NULL; -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
14561
14562
14563 draft_version_rec draft_version_cur%ROWTYPE;
14564
14565 --Added for bug#3636409
14566 l_workplan_flag VARCHAR2(1) := NULL;
14567 l_editable_flag VARCHAR2(1);
14568 l_autobaseline_flag VARCHAR2(1) := NULL;
14569
14570 l_person_id fnd_user.employee_id%type;
14571 l_resource_id pa_resource_txn_attributes.resource_id%type;
14572 l_resource_name per_all_people_f.full_name%type;
14573 l_locked_by_name per_people_x.full_name%type;
14574
14575 l_rw_cost_rate_override pa_budget_lines.txn_cost_rate_override%TYPE;
14576 l_burden_cost_rate_override pa_budget_lines.burden_cost_rate_override%TYPE;
14577 l_bill_rate_override pa_budget_lines.txn_bill_rate_override%TYPE;
14578
14579 TYPE l_rw_cost_rate_override_tbl_t IS TABLE OF pa_budget_lines.txn_cost_rate_override%TYPE
14580 INDEX BY BINARY_INTEGER;
14581 TYPE l_burdn_cst_rte_override_tbl_t IS TABLE OF pa_budget_lines.burden_cost_rate_override%TYPE
14582 INDEX BY BINARY_INTEGER;
14583 TYPE l_bill_rate_override_tbl_t IS TABLE OF pa_budget_lines.txn_bill_rate_override%TYPE
14584 INDEX BY BINARY_INTEGER;
14585
14586 l_rw_cost_rate_override_tbl l_rw_cost_rate_override_tbl_t;
14587 l_burden_cst_rate_override_tbl l_burdn_cst_rte_override_tbl_t;
14588 l_bill_rate_override_tbl l_bill_rate_override_tbl_t;
14589
14590
14591 l_budget_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
14592 l_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE;
14593 l_bdgt_lines_skip_flag varchar2(1);
14594 l_targ_request_id pa_budget_versions.request_id%TYPE;
14595
14596 --This variable will be used to call pa_resource_asgn_curr maintenance api - IPM Arch Enhancement
14597 l_fp_cols_rec PA_FP_GEN_AMOUNT_UTILS.FP_COLS;
14598
14599 -- Bug 4588279, 27-SEP-05, jwhite ------------------
14600
14601 -- Funds Check API Call
14602 l_fck_req_flag VARCHAR2(1) := NULL;
14603 l_bdgt_intg_flag VARCHAR2(1) := NULL;
14604 l_bdgt_ver_id NUMBER := NULL;
14605 l_encum_type_id NUMBER := NULL;
14606 l_balance_type VARCHAR2(1) := NULL;
14607
14608 --Business Rule Validation
14609 l_period_year gl_period_statuses.period_year%TYPE;
14610
14611 CURSOR l_budget_periods_csr
14612 (p_period_name VARCHAR2
14613 ,p_period_type_code VARCHAR2 )
14614 IS
14615 SELECT PERIOD_YEAR
14616 FROM pa_budget_periods_v
14617 WHERE period_name = p_period_name
14618 AND period_type_code = p_period_type_code;
14619
14620 -- End Bug 4588279, 27-SEP-05, jwhite ------------------
14621
14622
14623
14624 BEGIN
14625 -- Standard begin of API savepoint
14626
14627 SAVEPOINT calculate_amounts_pub;
14628
14629 -- Standard call to check for call compatibility.
14630
14631 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
14632 p_api_version_number ,
14633 l_api_name ,
14634 G_PKG_NAME )
14635 THEN
14636
14637 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14638
14639 END IF;
14640 --product_code is mandatory
14641
14642 IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14643 OR p_pm_product_code IS NULL
14644 THEN
14645 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14646 THEN
14647 pa_interface_utils_pub.map_new_amg_msg
14648 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
14649 ,p_msg_attribute => 'CHANGE'
14650 ,p_resize_flag => 'N'
14651 ,p_msg_context => 'GENERAL'
14652 ,p_attribute1 => ''
14653 ,p_attribute2 => ''
14654 ,p_attribute3 => ''
14655 ,p_attribute4 => ''
14656 ,p_attribute5 => '');
14657 END IF;
14658
14659 RAISE FND_API.G_EXC_ERROR;
14660
14661 END IF;
14662
14663 l_pm_product_code :='Z';
14664 /*added for bug no :2413400*/
14665 OPEN p_product_code_csr (p_pm_product_code);
14666 FETCH p_product_code_csr INTO l_pm_product_code;
14667 CLOSE p_product_code_csr;
14668
14669 IF l_pm_product_code <> 'X'
14670 THEN
14671 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14672 THEN
14673 pa_interface_utils_pub.map_new_amg_msg
14674 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
14675 ,p_msg_attribute => 'CHANGE'
14676 ,p_resize_flag => 'N'
14677 ,p_msg_context => 'GENERAL'
14678 ,p_attribute1 => ''
14679 ,p_attribute2 => ''
14680 ,p_attribute3 => ''
14681 ,p_attribute4 => ''
14682 ,p_attribute5 => '');
14683 END IF;
14684 p_return_status := FND_API.G_RET_STS_ERROR;
14685 RAISE FND_API.G_EXC_ERROR;
14686 END IF;
14687
14688 l_resp_id := FND_GLOBAL.Resp_id;
14689 l_user_id := FND_GLOBAL.User_id;
14690 -- l_module_name := 'PA_FP_MAINTAIN_GENERATED_PLAN'; -- 'PA_PM_UPDATE_BUDGET_LINE';
14691
14692 -- Bug 2863564
14693 -- The code below commented out as all the security checks are shifted to a common API
14694 /*
14695 IF p_update_db_flag = 'Y' THEN
14696 l_resp_id := FND_GLOBAL.Resp_id;
14697 l_user_id := FND_GLOBAL.User_id;
14698 --l_module_name := p_pm_product_code||'.'||'PA_PM_UPDATE_BUDGET_LINE';
14699 l_module_name := 'PA_PM_UPDATE_BUDGET_LINE';
14700
14701 -- As part of enforcing project security, which would determine
14702 -- whether the user has the necessary privileges to update the project
14703 -- need to call the pa_security package
14704 -- If a user does not have privileges to update the project, then
14705 -- cannot update the budget lines
14706
14707 pa_security.initialize (X_user_id => l_user_id,
14708 X_calling_module => l_module_name);
14709
14710 -- Actions performed using the APIs would be subject to
14711 -- function security. If the responsibility does not allow
14712 -- such functions to be executed, the API should not proceed further
14713 -- since the user does not have access to such functions
14714
14715 PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := p_pa_project_id;
14716
14717
14718 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
14719 (p_api_version_number => p_api_version_number,
14720 p_responsibility_id => l_resp_id,
14721 p_function_name => 'PA_PM_UPDATE_BUDGET_LINE',
14722 p_msg_count => l_msg_count,
14723 p_msg_data => l_msg_data,
14724 p_return_status => l_return_status,
14725 p_function_allowed => l_function_allowed );
14726
14727 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
14728 THEN
14729 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14730
14731 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
14732 THEN
14733 RAISE FND_API.G_EXC_ERROR;
14734 END IF;
14735 IF l_function_allowed = 'N' THEN
14736 pa_interface_utils_pub.map_new_amg_msg
14737 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
14738 ,p_msg_attribute => 'CHANGE'
14739 ,p_resize_flag => 'Y'
14740 ,p_msg_context => 'GENERAL'
14741 ,p_attribute1 => ''
14742 ,p_attribute2 => ''
14743 ,p_attribute3 => ''
14744 ,p_attribute4 => ''
14745 ,p_attribute5 => '');
14746 p_return_status := FND_API.G_RET_STS_ERROR;
14747 RAISE FND_API.G_EXC_ERROR;
14748 END IF;
14749 END IF;
14750 */
14751 -- Initialize the message table if requested.
14752
14753 IF FND_API.TO_BOOLEAN( p_init_msg_list )
14754 THEN
14755
14756 FND_MSG_PUB.initialize;
14757
14758 END IF;
14759
14760 -- Set API return status to success
14761
14762 p_return_status := FND_API.G_RET_STS_SUCCESS;
14763
14764
14765 --CHECK FOR MANDATORY FIELDS and CONVERT VALUES to ID's
14766
14767 --product_code is mandatory
14768
14769 -- convert pm_project_reference to id
14770
14771 Pa_project_pvt.Convert_pm_projref_to_id (
14772 p_pm_project_reference => p_pm_project_reference,
14773 p_pa_project_id => p_pa_project_id,
14774 p_out_project_id => l_project_id,
14775 p_return_status => p_return_status );
14776
14777 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
14778 THEN
14779 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14780
14781 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
14782 THEN
14783 RAISE FND_API.G_EXC_ERROR;
14784 END IF;
14785
14786 -- Commenting out the code below as all the security checks are shifted to a common API
14787 /*
14788 IF p_update_db_flag = 'Y' THEN
14789
14790 -- Now verify whether project security allows the user to update
14791 -- project
14792 -- If a user does not have privileges to update the project, then
14793 -- cannot update the budget line
14794
14795 IF pa_security.allow_query (x_project_id => l_project_id ) = 'N' THEN
14796
14797 -- The user does not have query privileges on this project
14798 -- Hence, cannot update the project.Raise error
14799 pa_interface_utils_pub.map_new_amg_msg
14800 ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
14801 ,p_msg_attribute => 'CHANGE'
14802 ,p_resize_flag => 'Y'
14803 ,p_msg_context => 'GENERAL'
14804 ,p_attribute1 => ''
14805 ,p_attribute2 => ''
14806 ,p_attribute3 => ''
14807 ,p_attribute4 => ''
14808 ,p_attribute5 => '');
14809 p_return_status := FND_API.G_RET_STS_ERROR;
14810 RAISE FND_API.G_EXC_ERROR;
14811 ELSE
14812 -- If the user has query privileges, then check whether
14813 -- update privileges are also available
14814 IF pa_security.allow_update (x_project_id => l_project_id ) = 'N' THEN
14815
14816 -- The user does not have update privileges on this project
14817 -- Hence , raise error
14818 pa_interface_utils_pub.map_new_amg_msg
14819 ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
14820 ,p_msg_attribute => 'CHANGE'
14821 ,p_resize_flag => 'Y'
14822 ,p_msg_context => 'GENERAL'
14823 ,p_attribute1 => ''
14824 ,p_attribute2 => ''
14825 ,p_attribute3 => ''
14826 ,p_attribute4 => ''
14827 ,p_attribute5 => '');
14828 p_return_status := FND_API.G_RET_STS_ERROR;
14829 RAISE FND_API.G_EXC_ERROR;
14830 END IF;
14831 END IF;
14832 END IF;
14833 */
14834 -- Get segment1 for AMG messages
14835
14836 OPEN l_amg_project_csr( l_project_id );
14837 FETCH l_amg_project_csr INTO l_amg_project_rec;
14838 CLOSE l_amg_project_csr;
14839
14840 -- Bug 2863564 This is redundant code and thus commented out
14841 /*
14842 -- Get the project and project functional currencies so that they can be used later
14843 pa_fin_plan_utils.Get_Project_Curr_Attributes
14844 ( p_project_id => l_project_id
14845 ,x_multi_currency_billing_flag => l_multi_currency_billing_flag
14846 ,x_project_currency_code => l_project_currency_code
14847 ,x_projfunc_currency_code => l_projfunc_currency_code
14848 ,x_project_cost_rate_type => l_project_cost_rate_type
14849 ,x_projfunc_cost_rate_type => l_projfunc_cost_rate_type
14850 ,x_project_bil_rate_type => l_project_bil_rate_type
14851 ,x_projfunc_bil_rate_type => l_projfunc_bil_rate_type
14852 ,x_return_status => l_return_status
14853 ,x_msg_count => l_msg_count
14854 ,x_msg_data => l_msg_data);
14855
14856 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14857 RAISE FND_API.G_EXC_ERROR;
14858 END IF;
14859
14860 -- In budget model intialise txn currency code to PFC
14861 IF p_budget_type_code IS NOT NULL AND
14862 p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
14863 l_txn_currency_code := l_projfunc_currency_code;
14864 END IF;
14865 */
14866
14867 -- Added Logic by Xin Liu to handle MISS vars based on Manoj's code review.
14868 -- 28-APR-03
14869
14870
14871 IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14872 ll_fin_plan_type_id := NULL;
14873 ELSE
14874 ll_fin_plan_type_id := p_fin_plan_type_id;
14875 END IF;
14876
14877 IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
14878 ll_fin_plan_type_name := NULL;
14879 ELSE
14880 ll_fin_plan_type_name := p_fin_plan_type_name;
14881 END IF;
14882
14883 IF p_budget_version_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14884 ll_version_number := NULL;
14885 ELSE
14886 ll_version_number := p_budget_version_number;
14887 END IF;
14888
14889 -- Changes done.
14890
14891
14892 -- Bug 2863564 New validations included as part of the changes
14893
14894 -- Budget Version Id, Budget Type Info and Fin Plan Type info all shouldn't be missing
14895
14896 IF ((p_budget_version_id IS NULL OR p_budget_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) AND
14897 (p_budget_type_code IS NULL OR p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
14898 (p_fin_plan_type_id IS NULL OR p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) AND
14899 (p_fin_plan_type_name IS NULL OR p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) )
14900 THEN
14901 PA_UTILS.ADD_MESSAGE
14902 (p_app_short_name => 'PA',
14903 p_msg_name => 'PA_BUDGET_FP_BOTH_MISSING');
14904
14905 IF l_debug_mode = 'Y' THEN
14906 pa_debug.g_err_stage:= 'Fin Plan type info and budget type info are missing';
14907 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14908 END IF;
14909 RAISE FND_API.G_EXC_ERROR;
14910 END IF;
14911
14912 -- Both Budget Type Info and Fin Plan Type info shouldn't be provided
14913
14914 IF (p_budget_type_code IS NOT NULL AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
14915 ((p_fin_plan_type_name IS NOT NULL AND p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
14916 (p_fin_plan_type_id IS NOT NULL AND p_fin_plan_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ))
14917 THEN
14918 PA_UTILS.ADD_MESSAGE
14919 (p_app_short_name => 'PA',
14920 p_msg_name => 'PA_BUDGET_FP_BOTH_NOT_NULL');
14921
14922 IF l_debug_mode = 'Y' THEN
14923 pa_debug.g_err_stage:= 'Fin Plan type info and budget type info both are provided';
14924 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14925 END IF;
14926 RAISE FND_API.G_EXC_ERROR;
14927 END IF;
14928
14929 -- get the person_id: used for locking checks
14930 PA_COMP_PROFILE_PUB.GET_USER_INFO
14931 (p_user_id => l_user_id,
14932 x_person_id => l_person_id,
14933 x_resource_id => l_resource_id,
14934 x_resource_name => l_resource_name);
14935
14936 IF (p_budget_version_id IS NOT NULL AND p_budget_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14937 THEN
14938 -- Fetch budget version info
14939 OPEN budget_version_info_cur(p_budget_version_id);
14940 FETCH budget_version_info_cur INTO budget_version_info_rec;
14941
14942 IF budget_version_info_cur%NOTFOUND
14943 THEN
14944
14945 -- Add the error message that i/p plan version id is invlid
14946
14947 PA_UTILS.ADD_MESSAGE(
14948 p_app_short_name => 'PA'
14949 ,p_msg_name => 'PA_FP_INVALID_VERSION_ID'
14950 ,p_token1 => 'BUDGET_VERSION_ID'
14951 ,p_value1 => p_budget_version_id);
14952
14953 IF l_debug_mode = 'Y' THEN
14954 pa_debug.g_err_stage := 'No budget version exists with i/p version id' ;
14955 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14956 END IF;
14957 CLOSE budget_version_info_cur;
14958 RAISE FND_API.G_EXC_ERROR;
14959
14960 ELSE
14961 -- Check if the budget belongs to the same project
14962
14963 IF (budget_version_info_rec.project_id <> l_project_id)
14964 THEN
14965 PA_UTILS.ADD_MESSAGE(
14966 p_app_short_name => 'PA'
14967 ,p_msg_name => 'PA_FP_PROJ_VERSION_MISMATCH');
14968
14969 IF l_debug_mode = 'Y' THEN
14970 pa_debug.g_err_stage := 'i/p version doesnot belong to i/p project' ;
14971 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14972 END IF;
14973 CLOSE budget_version_info_cur;
14974 RAISE FND_API.G_EXC_ERROR;
14975 END IF;
14976
14977 -- The i/p budget version should be a working verion.
14978
14979 IF (budget_version_info_rec.budget_status_code <> 'W')
14980 THEN
14981 PA_UTILS.ADD_MESSAGE(
14982 p_app_short_name => 'PA'
14983 ,p_msg_name => 'PA_FP_INVALID_VERSION_STATUS');
14984
14985 IF l_debug_mode = 'Y' THEN
14986 pa_debug.g_err_stage := 'i/p version is not a working version' ;
14987 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14988 END IF;
14989 CLOSE budget_version_info_cur;
14990 RAISE FND_API.G_EXC_ERROR;
14991 END IF;
14992
14993 -- If the budget version is a control item version throw error
14994
14995 IF budget_version_info_rec.ci_id IS NOT NULL THEN
14996 PA_UTILS.ADD_MESSAGE(
14997 p_app_short_name => 'PA'
14998 ,p_msg_name => 'PA_FP_CI_VERSION_NON_EDITABLE'
14999 ,p_token1 => 'BUDGET_VERSION_ID'
15000 ,p_value1 => p_budget_version_id);
15001 IF l_debug_mode = 'Y' THEN
15002 pa_debug.g_err_stage := 'i/p version is ci version' ;
15003 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15004 END IF;
15005 CLOSE budget_version_info_cur;
15006 RAISE FND_API.G_EXC_ERROR;
15007 END IF;
15008 END IF;
15009
15010
15011 -- Derive the new / old budgets model context value using the budget version info.
15012
15013 IF budget_version_info_rec.fin_plan_type_id IS NOT NULL
15014 THEN
15015 l_context := l_context_finplan;
15016 l_fin_plan_type_id := budget_version_info_rec.fin_plan_type_id;
15017 l_version_type := budget_version_info_rec.version_type;
15018 l_fin_plan_type_code := budget_version_info_rec.fin_plan_type_code;
15019 l_fin_plan_type_name := budget_version_info_rec.fin_plan_type_name;
15020 l_workplan_flag := budget_version_info_rec.wp_version_flag;
15021 l_budget_version_id := p_budget_version_id;
15022
15023
15024 IF l_fin_plan_type_code = 'ORG_FORECAST' THEN
15025
15026 -- Add appropriate exception message
15027
15028 PA_UTILS.ADD_MESSAGE
15029 (p_app_short_name => 'PA',
15030 p_msg_name => 'PA_FP_ORG_FCST_PLAN_TYPE'
15031 );
15032
15033 IF l_debug_mode = 'Y' THEN
15034 pa_debug.g_err_stage := 'Org_Forecast plan type has been passed' ;
15035 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15036 END IF;
15037 RAISE FND_API.G_EXC_ERROR;
15038 END IF;
15039 --bug #3636409. Validation for WorkPlan Versions which cannot be edited using this AMG interface.
15040
15041 IF l_workplan_flag = 'Y' THEN
15042
15043 IF l_debug_mode = 'Y' THEN
15044 pa_debug.g_err_stage := 'WorkPlan Versions cannot be edited using this AMG interface' ;
15045 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15046 END IF;
15047
15048 PA_UTILS.ADD_MESSAGE
15049 (p_app_short_name => 'PA',
15050 p_msg_name => 'PA_FP_WP_BV_NOT_ALLOWED');
15051 RAISE FND_API.G_EXC_ERROR;
15052 END IF;
15053
15054 -- version locked by process
15055 IF ( ( nvl( budget_version_info_rec.locked_by_person_id,0) = -98)
15056 AND ( budget_version_info_rec.request_id is NOT NULL )) THEN
15057 PA_UTILS.ADD_MESSAGE
15058 ( p_app_short_name => 'PA',
15059 p_msg_name => 'PA_FP_LOCKED_BY_PRC');
15060 CLOSE budget_version_info_cur;
15061 RAISE FND_API.G_EXC_ERROR;
15062 END IF;
15063
15064 -- version locked by another user
15065 IF (budget_version_info_rec.locked_by_person_id is not null) then
15066 IF (l_person_id <> budget_version_info_rec.locked_by_person_id) then
15067
15068 l_locked_by_name :=
15069 pa_fin_plan_utils.get_person_name(budget_version_info_rec.locked_by_person_id);
15070 PA_UTILS.ADD_MESSAGE
15071 ( p_app_short_name => 'PA',
15072 p_msg_name => 'PA_FP_LCK_BY_USER',
15073 p_token1 => 'PERSON_NAME',
15074 p_value1 => l_locked_by_name);
15075 CLOSE budget_version_info_cur;
15076 RAISE FND_API.G_EXC_ERROR;
15077 END IF;
15078 END IF;
15079 -- Get the status of the current working version. If the status is submitted then
15080 -- it can not be updated/deleted
15081 IF nvl(budget_version_info_rec.budget_status_code,'X') = 'S' THEN
15082 IF l_debug_mode = 'Y' THEN
15083 pa_debug.g_err_stage := 'Version exists in submitted status';
15084 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15085 END IF;
15086 PA_UTILS.ADD_MESSAGE
15087 ( p_app_short_name => 'PA',
15088 p_msg_name => 'PA_FP_VER_SUB_STS');
15089 CLOSE budget_version_info_cur;
15090 RAISE FND_API.G_EXC_ERROR;
15091 END IF;
15092
15093 l_entry_level := pa_fin_plan_utils.get_fin_plan_level_code(l_budget_version_id);
15094
15095 l_autobaseline_flag := l_amg_project_rec.baseline_funding_flag;
15096
15097 IF l_autobaseline_flag = 'N' THEN
15098
15099 pa_fin_plan_utils.Check_if_plan_type_editable (
15100 P_project_id => l_project_id
15101 ,P_fin_plan_type_id => l_fin_plan_type_id
15102 ,P_version_type => l_version_type
15103 ,X_editable_flag => l_editable_flag
15104 ,X_return_status => p_return_status
15105 ,X_msg_count => p_msg_count
15106 ,X_msg_data => p_msg_data);
15107
15108 -- Throw the error if the above API is not successfully executed
15109
15110 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15111
15112 IF l_debug_mode = 'Y' THEN
15113 pa_debug.g_err_stage := 'Can not check if plan type is editable' ;
15114 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15115 END IF;
15116
15117 RAISE FND_API.G_EXC_ERROR;
15118 END IF;
15119
15120 --Check for l_editable_flag. If it returns N, then raise PA_FP_PLAN_TYPE_NON_EDITABLE.
15121
15122 IF l_editable_flag = 'N' THEN
15123
15124 IF l_debug_mode = 'Y' THEN
15125 pa_debug.g_err_stage := 'Plan type is not editable' ;
15126 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15127 END IF;
15128
15129 PA_UTILS.ADD_MESSAGE
15130 (p_app_short_name => 'PA',
15131 p_msg_name => 'PA_FP_PLAN_TYPE_NON_EDITABLE',
15132 p_token1 => 'PROJECT',
15133 p_value1 => l_amg_project_rec.segment1,
15134 p_token2 => 'PLAN_TYPE',
15135 p_value2 => l_fin_plan_type_name);
15136
15137 RAISE FND_API.G_EXC_ERROR;
15138 END IF;
15139 END IF;
15140
15141 ELSE
15142 l_context := l_context_budget;
15143 l_budget_type_code := budget_version_info_rec.budget_type_code;
15144 l_budget_version_id := p_budget_version_id;
15145 /* added for 2207723 to get the entry level of the budget */
15146 OPEN l_get_entry_level_csr(l_budget_version_id);
15147 FETCH l_get_entry_level_csr into l_entry_level;
15148 CLOSE l_get_entry_level_csr;
15149
15150 END IF;
15151 CLOSE budget_version_info_cur;
15152
15153 ELSIF (p_fin_plan_type_id IS NOT NULL AND p_fin_plan_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
15154 (p_fin_plan_type_name IS NOT NULL AND p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15155 THEN
15156
15157 -- Bug 2863564
15158 -- We are in the contex of new budgets model
15159
15160 l_context := l_context_finplan;
15161
15162 -- Call convert_plan_type_name_to_id api.
15163 -- If Plan Type Id is passed then the existence of a plan type with that id is checked
15164 -- Else using plan type name provided Plan Type Id is fetched.
15165 -- Proper error messages are stacked by the api if any validations fail.
15166
15167 -- Change the p_fin_plan_type_id, p_fin_plan_type_name to
15168 -- ll_fin_plan_type_id,ll_fin_plan_type_name
15169 -- Xin Liu. 28-APR-03
15170
15171 PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
15172 ( p_fin_plan_type_id => ll_fin_plan_type_id
15173 ,p_fin_plan_type_name => ll_fin_plan_type_name
15174 ,x_fin_plan_type_id => l_fin_plan_type_id
15175 ,x_return_status => p_return_status
15176 ,x_msg_count => p_msg_count
15177 ,x_msg_data => p_msg_data);
15178
15179 -- Throw the error if the above API is not successfully executed
15180
15181 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15182
15183 IF l_debug_mode = 'Y' THEN
15184 pa_debug.g_err_stage := 'Plan Type validation have failed' ;
15185 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15186 END IF;
15187 RAISE FND_API.G_EXC_ERROR;
15188 END IF;
15189
15190 -- Now, we have a valid fin plan type id
15191 -- Check if the fin plan type code is 'ORG_FORECAST' if so throw an error
15192
15193 BEGIN
15194 SELECT fin_plan_type_code
15195 ,name
15196 , use_for_workplan_flag
15197 INTO l_fin_plan_type_code
15198 ,l_fin_plan_type_name
15199 ,l_workplan_flag
15200 FROM pa_fin_plan_types_vl
15201 WHERE fin_plan_type_id = l_fin_plan_type_id;
15202
15203 IF l_fin_plan_type_code = 'ORG_FORECAST' THEN
15204
15205 -- Add appropriate exception message
15206
15207 PA_UTILS.ADD_MESSAGE
15208 (p_app_short_name => 'PA',
15209 p_msg_name => 'PA_FP_ORG_FCST_PLAN_TYPE'
15210 );
15211
15212 IF l_debug_mode = 'Y' THEN
15213 pa_debug.g_err_stage := 'Org_Forecast plan type has been passed' ;
15214 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15215 END IF;
15216 RAISE FND_API.G_EXC_ERROR;
15217 END IF;
15218 EXCEPTION
15219 WHEN OTHERS THEN
15220 IF l_debug_mode = 'Y' THEN
15221 pa_debug.g_err_stage := 'Unexpected error while fetching the plan type code'||SQLERRM ;
15222 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15223 END IF;
15224 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15225 END;
15226
15227 --bug #3636409. Validation for WorkPlan Versions which cannot be edited using this AMG interface.
15228
15229 IF l_workplan_flag = 'Y' THEN
15230
15231 IF l_debug_mode = 'Y' THEN
15232 pa_debug.g_err_stage := 'WorkPlan Versions cannot be edited using this AMG interface' ;
15233 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15234 END IF;
15235
15236 PA_UTILS.ADD_MESSAGE
15237 (p_app_short_name => 'PA',
15238 p_msg_name => 'PA_FP_WP_BV_NOT_ALLOWED');
15239 RAISE FND_API.G_EXC_ERROR;
15240 END IF;
15241 --bug #3636409. Validation for workplan versions ends here.
15242
15243 -- Bug 2863564 Check if the plan type has been attached to the project or not.
15244
15245 OPEN proj_fp_options_cur(l_project_id,l_fin_plan_type_id);
15246 FETCH proj_fp_options_cur INTO proj_fp_options_rec;
15247
15248 IF proj_fp_options_cur%NOTFOUND THEN
15249
15250 -- Throw appropriate error message
15251 PA_UTILS.ADD_MESSAGE
15252 (p_app_short_name => 'PA',
15253 p_msg_name => 'PA_FP_NO_PLAN_TYPE_OPTION',
15254 p_token1 => 'PROJECT',
15255 p_value1 => l_amg_project_rec.segment1,
15256 p_token2 => 'PLAN_TYPE',
15257 p_value2 => l_fin_plan_type_name);
15258
15259 IF l_debug_mode = 'Y' THEN
15260 pa_debug.g_err_stage := 'plan type not attached to project' ;
15261 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15262 END IF;
15263 CLOSE proj_fp_options_cur;
15264 RAISE FND_API.G_EXC_ERROR;
15265 END IF;
15266
15267 CLOSE proj_fp_options_cur;
15268
15269 -- Changes done by Xin Liu for post_fpk. Check if p_version_type is G_PA_MISS_CHAR. 24-APR-03
15270 IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15271 l_version_type := NULL;
15272 ELSE
15273 l_version_type := p_version_type;
15274 END IF;
15275 --Changes Done.
15276
15277 -- Bug 2863564
15278 -- Call get_version_type api to do the necessary validations regarding the version type
15279 -- If the version type is passed as null,
15280 -- it returns version_type if it can be fethced uniquely.
15281 -- else if passed as not null
15282 -- it validates the passed value against the fin plan preference code
15283
15284 pa_fin_plan_utils.get_version_type
15285 ( p_project_id => l_project_id
15286 ,p_fin_plan_type_id => l_fin_plan_type_id
15287 ,px_version_type => l_version_type
15288 ,x_return_status => p_return_status
15289 ,x_msg_count => p_msg_count
15290 ,x_msg_data => p_msg_data);
15291
15292 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15293 IF l_debug_mode = 'Y' THEN
15294 pa_debug.g_err_stage := 'getversiontype Failed ' ;
15295 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15296 END IF;
15297 RAISE FND_API.G_EXC_ERROR;
15298 END IF;
15299
15300 --bug #3636409. Validation for allow_edit_after_baseline_flag starts here.
15301 l_autobaseline_flag := l_amg_project_rec.baseline_funding_flag;
15302
15303 IF l_autobaseline_flag = 'N' THEN
15304
15305 pa_fin_plan_utils.Check_if_plan_type_editable (
15306 P_project_id => l_project_id
15307 ,P_fin_plan_type_id => l_fin_plan_type_id
15308 ,P_version_type => l_version_type
15309 ,X_editable_flag => l_editable_flag
15310 ,X_return_status => p_return_status
15311 ,X_msg_count => p_msg_count
15312 ,X_msg_data => p_msg_data);
15313
15314 -- Throw the error if the above API is not successfully executed
15315
15316 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15317
15318 IF l_debug_mode = 'Y' THEN
15319 pa_debug.g_err_stage := 'Can not check if plan type is editable' ;
15320 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15321 END IF;
15322
15323 RAISE FND_API.G_EXC_ERROR;
15324 END IF;
15325
15326 --Check for l_editable_flag. If it returns N, then raise PA_FP_PLAN_TYPE_NON_EDITABLE.
15327
15328 IF l_editable_flag = 'N' THEN
15329
15330 IF l_debug_mode = 'Y' THEN
15331 pa_debug.g_err_stage := 'Plan type is not editable' ;
15332 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15333 END IF;
15334
15335 PA_UTILS.ADD_MESSAGE
15336 (p_app_short_name => 'PA',
15337 p_msg_name => 'PA_FP_PLAN_TYPE_NON_EDITABLE',
15338 p_token1 => 'PROJECT',
15339 p_value1 => l_amg_project_rec.segment1,
15340 p_token2 => 'PLAN_TYPE',
15341 p_value2 => l_fin_plan_type_name);
15342
15343 RAISE FND_API.G_EXC_ERROR;
15344 END IF;
15345 END IF;
15346 --bug #3636409. Validation for allow_edit_after_baseline_flag ends here.
15347
15348
15349 IF p_budget_version_number IS NOT NULL
15350 AND p_budget_Version_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15351 THEN
15352 -- Bug 2863564
15353 -- Fetch the working budget version with the unique combination of
15354 -- l_project_id, l_finplan_type_id,l_version_type, version_number provided
15355
15356 pa_fin_plan_utils.get_version_id
15357 ( p_project_id => l_project_id
15358 ,p_fin_plan_type_id => l_fin_plan_type_id
15359 ,p_version_type => l_version_type
15360 ,p_version_number => p_budget_version_number
15361 ,x_budget_version_id => l_budget_version_id
15362 ,x_ci_id => l_ci_id
15363 ,x_return_status => p_return_status
15364 ,x_msg_count => p_msg_count
15365 ,x_msg_data => p_msg_data );
15366
15367 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15368 IF l_debug_mode = 'Y' THEN
15369 pa_debug.g_err_stage := 'getVersionId api Failed ' ;
15370 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15371 END IF;
15372 RAISE FND_API.G_EXC_ERROR;
15373 END IF;
15374
15375 -- If the budget version is a control item version throw error
15376
15377 IF l_ci_id IS NOT NULL THEN
15378 PA_UTILS.ADD_MESSAGE(
15379 p_app_short_name => 'PA'
15380 ,p_msg_name => 'PA_FP_CI_VERSION_NON_EDITABLE'
15381 ,p_token1 => 'BUDGET_VERSION_ID'
15382 ,p_value1 => p_budget_version_id);
15383
15384 IF l_debug_mode = 'Y' THEN
15385 pa_debug.g_err_stage := 'i/p version is ci version' ;
15386 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15387 END IF;
15388 RAISE FND_API.G_EXC_ERROR;
15389 END IF;
15390 ELSE
15391 -- Fetch the current working version for the project, finplan type and verion type
15392
15393 PA_FIN_PLAN_UTILS.Get_Curr_Working_Version_Info(
15394 p_project_id => l_project_id
15395 ,p_fin_plan_type_id => l_fin_plan_type_id
15396 ,p_version_type => l_version_type
15397 ,x_fp_options_id => l_dummy
15398 ,x_fin_plan_version_id => l_budget_version_id
15399 ,x_return_status => p_return_status
15400 ,x_msg_count => p_msg_count
15401 ,x_msg_data => p_msg_data );
15402
15403 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15404 IF l_debug_mode = 'Y' THEN
15405 pa_debug.g_err_stage := 'Get_Curr_Working_Version_Info api Failed ' ;
15406 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15407 END IF;
15408 RAISE FND_API.G_EXC_ERROR;
15409 END IF;
15410
15411 END IF;
15412
15413 -- Bug 2863564
15414 -- If budget version id can't be found for i/p parameteres throw appropriate error message
15415
15416 -- Changes done by Xin Liu for post_fpk. Added check for G_PA_MISS_NUM. 24-APR-03
15417 IF l_budget_version_id IS NULL OR l_budget_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
15418
15419 -- Throw appropriate error message
15420 PA_UTILS.ADD_MESSAGE
15421 (p_app_short_name => 'PA',
15422 p_msg_name => 'PA_FP_NO_WORKING_VERSION',
15423 p_token1 => 'PROJECT',
15424 p_value1 => l_amg_project_rec.segment1,
15425 p_token2 => 'PLAN_TYPE',
15426 p_value2 => l_fin_plan_type_name,
15427 p_token3 => 'VERSION_NUMBER',
15428 p_value3 => p_budget_Version_number );
15429
15430 IF l_debug_mode = 'Y' THEN
15431 pa_debug.g_err_stage := 'Budget Version does not exist' ;
15432 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15433 END IF;
15434 RAISE FND_API.G_EXC_ERROR;
15435 Else
15436 -- Fetch budget version info
15437 OPEN budget_version_info_cur(l_budget_version_id);
15438 FETCH budget_version_info_cur INTO budget_version_info_rec;
15439 -- version locked by process
15440 IF ( ( nvl( budget_version_info_rec.locked_by_person_id,0) = -98 )
15441 AND ( budget_version_info_rec.request_id is NOT NULL ) ) THEN
15442
15443 PA_UTILS.ADD_MESSAGE
15444 ( p_app_short_name => 'PA',
15445 p_msg_name => 'PA_FP_LOCKED_BY_PRC');
15446
15447 CLOSE budget_version_info_cur;
15448 RAISE FND_API.G_EXC_ERROR;
15449 END IF;
15450
15451 -- version locked by another user
15452 IF (budget_version_info_rec.locked_by_person_id is not null) then
15453 IF (l_person_id <> budget_version_info_rec.locked_by_person_id) then
15454
15455 l_locked_by_name := pa_fin_plan_utils.get_person_name(budget_version_info_rec.locked_by_person_id);
15456 PA_UTILS.ADD_MESSAGE
15457 ( p_app_short_name => 'PA',
15458 p_msg_name => 'PA_FP_LCK_BY_USER',
15459 p_token1 => 'PERSON_NAME',
15460 p_value1 => l_locked_by_name);
15461 CLOSE budget_version_info_cur;
15462 RAISE FND_API.G_EXC_ERROR;
15463 END IF;
15464 END IF;
15465
15466 -- Get the status of the current working version. If the status is submitted then
15467 -- it can not be updated/deleted
15468 IF nvl(budget_version_info_rec.budget_status_code,'X') = 'S' THEN
15469 IF l_debug_mode = 'Y' THEN
15470 pa_debug.g_err_stage := 'Version exists in submitted status';
15471 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15472 END IF;
15473 PA_UTILS.ADD_MESSAGE
15474 ( p_app_short_name => 'PA',
15475 p_msg_name => 'PA_FP_VER_SUB_STS');
15476 CLOSE budget_version_info_cur;
15477 RAISE FND_API.G_EXC_ERROR;
15478 END IF;
15479
15480 IF budget_version_info_rec.plan_processing_code IN ('XLUE','XLUP') THEN
15481
15482 pa_fin_plan_utils.return_and_vldt_plan_prc_code
15483 (p_budget_version_id => l_budget_version_id
15484 ,p_plan_processing_code => budget_version_info_rec.plan_processing_code
15485 ,x_final_plan_prc_code => budget_version_info_rec.plan_processing_code
15486 ,x_targ_request_id => l_targ_request_id
15487 ,x_return_status => p_return_status
15488 ,x_msg_count => p_msg_count
15489 ,x_msg_data => p_msg_data);
15490
15491 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15492 IF l_debug_mode = 'Y' THEN
15493 pa_debug.g_err_stage := 'Validate plan processing code api Failed ' ;
15494 pa_debug.write('Processing Code'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15495 END IF;
15496 RAISE FND_API.G_EXC_ERROR;
15497 END IF;
15498
15499 END IF;
15500
15501 CLOSE budget_version_info_cur;
15502 End if;
15503
15504 -- Bug 2863564
15505 -- Fetch the planning level of the budget version
15506
15507 l_entry_level := pa_fin_plan_utils.get_fin_plan_level_code(l_budget_version_id);
15508
15509 ELSIF p_budget_type_code IS NOT NULL OR p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15510 THEN
15511
15512 -- Bug 2863564
15513 -- The following validation has been commented as its not relevant any more
15514
15515 /*
15516 -- budget type code is mandatory
15517 IF p_budget_type_code IS NULL
15518 OR p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15519
15520 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15521 pa_interface_utils_pub.map_new_amg_msg
15522 ( p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
15523 ,p_msg_attribute => 'CHANGE'
15524 ,p_resize_flag => 'N'
15525 ,p_msg_context => 'BUDG'
15526 ,p_attribute1 => l_amg_segment1
15527 ,p_attribute2 => ''
15528 ,p_attribute3 => p_budget_type_code
15529 ,p_attribute4 => ''
15530 ,p_attribute5 => '');
15531 END IF;
15532 RAISE FND_API.G_EXC_ERROR;
15533 ELSE
15534 */
15535
15536 -- If the budget_type info is passed, we are in the context of old bugets model
15537
15538 l_context := l_context_budget;
15539 l_budget_type_code := p_budget_type_code;
15540
15541 -- Validate the budget type code
15542
15543 OPEN l_budget_type_csr( p_budget_type_code );
15544
15545 FETCH l_budget_type_csr INTO l_dummy;
15546
15547 IF l_budget_type_csr%NOTFOUND THEN
15548 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15549 pa_interface_utils_pub.map_new_amg_msg
15550 ( p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
15551 ,p_msg_attribute => 'CHANGE'
15552 ,p_resize_flag => 'N'
15553 ,p_msg_context => 'BUDG'
15554 ,p_attribute1 => l_amg_project_rec.segment1
15555 ,p_attribute2 => ''
15556 ,p_attribute3 => p_budget_type_code
15557 ,p_attribute4 => ''
15558 ,p_attribute5 => '');
15559 END IF;
15560 CLOSE l_budget_type_csr;
15561 RAISE FND_API.G_EXC_ERROR;
15562 END IF;
15563 CLOSE l_budget_type_csr;
15564
15565 -- fetch the draft version id
15566
15567 OPEN draft_version_cur( l_project_id
15568 ,p_budget_type_code );
15569 FETCH draft_version_cur INTO draft_version_rec;
15570 IF draft_version_cur%NOTFOUND
15571 THEN
15572 -- Throw appropriate error message
15573 PA_UTILS.ADD_MESSAGE
15574 (p_app_short_name => 'PA',
15575 p_msg_name => 'PA_NO_BUDGET_VERSION');
15576
15577 IF l_debug_mode = 'Y' THEN
15578 pa_debug.g_err_stage := 'Draft Budget Version does not exist' ;
15579 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15580 END IF;
15581 CLOSE draft_version_cur;
15582 RAISE FND_API.G_EXC_ERROR;
15583 ELSE
15584 l_budget_version_id := draft_version_rec.budget_version_id;
15585 END IF;
15586 CLOSE draft_version_cur;
15587
15588 -- Get budget entry method details
15589
15590 /* added for 2207723 to get the entry level of the budget */
15591 OPEN l_get_entry_level_csr(l_budget_version_id);
15592 FETCH l_get_entry_level_csr into l_entry_level;
15593 CLOSE l_get_entry_level_csr;
15594
15595
15596 END IF; -- I/p Budget Version Id not null
15597
15598 -- Bug 2863564
15599 -- Call the api that performs the autobaseline checks
15600
15601 PA_FIN_PLAN_UTILS.PERFORM_AUTOBASLINE_CHECKS (
15602 p_budget_version_id => l_budget_version_id
15603 ,x_result => l_result
15604 ,x_return_status => p_return_status
15605 ,x_msg_count => p_msg_count
15606 ,x_msg_data => p_msg_data );
15607
15608 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15609 IF(l_debug_mode='Y') THEN
15610 pa_debug.g_err_stage := 'Auto baseline API falied';
15611 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15612 END IF;
15613 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15614 END IF;
15615
15616 IF l_result = 'F' THEN
15617 IF(l_debug_mode='Y') THEN
15618 pa_debug.g_err_stage := 'Auto baselining enabled for the project';
15619 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15620 END IF;
15621 PA_UTILS.ADD_MESSAGE(
15622 p_app_short_name => 'PA'
15623 ,p_msg_name => 'PA_FP_AB_AR_VER_NON_EDITABLE'
15624 ,p_token1 => 'PROJECT'
15625 ,p_value1 => l_amg_project_rec.segment1);
15626 RAISE FND_API.G_EXC_ERROR;
15627 END IF;
15628
15629 IF l_context = l_context_budget
15630 THEN
15631 -- Derive the version type using the budget amount code to restrict
15632 -- the users editing the 'COST' amounts if the version is 'REVENUE_ONLY'
15633
15634 PA_FIN_PLAN_UTILS.get_version_type_for_bdgt_type
15635 ( p_budget_type_code => l_budget_type_code
15636 ,x_version_type => l_version_type
15637 ,x_return_status => p_return_status
15638 ,x_msg_count => p_msg_count
15639 ,x_msg_data => p_msg_data );
15640
15641 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15642 IF(l_debug_mode='Y') THEN
15643 pa_debug.g_err_stage := 'get_version_type_for_bdgt_type API falied';
15644 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15645 END IF;
15646 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15647 END IF;
15648 END IF;
15649
15650 IF p_update_db_flag = 'Y'
15651 THEN
15652 l_module_name := 'PA_PM_UPDATE_BUDGET_LINE'; --4615645.
15653
15654 -- Bug 2863564 Check for the function security
15655
15656 PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
15657 p_api_version_number => p_api_version_number
15658 ,p_project_id => l_project_id
15659 ,p_fin_plan_type_id => l_fin_plan_type_id /* Bug 3139924 */
15660 ,p_calling_context => l_context
15661 ,p_function_name => l_module_name
15662 ,p_version_type => l_version_type
15663 ,x_return_status => p_return_status
15664 ,x_ret_code => l_security_ret_code );
15665
15666 -- The above API adds the error message to stack. Hence the message is not added here.
15667 -- Also, as security check is important further validations are not done in case this
15668 -- validation fails.
15669
15670 IF (p_return_status <> FND_API.G_RET_STS_SUCCESS OR l_security_ret_code <> 'Y') THEN
15671
15672 IF l_debug_mode = 'Y' THEN
15673 pa_debug.g_err_stage:= 'Security API Failed';
15674 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15675 END IF;
15676
15677 RAISE FND_API.G_EXC_ERROR;
15678 END IF;
15679 END IF;
15680
15681 -- Bug 2863564
15682 -- For Financial Planning model, we need to lock the plan version explicitly
15683 -- before Updating the version.
15684
15685 IF p_update_db_flag = 'Y' AND l_context = l_context_finplan THEN
15686
15687 -- Fetch the record version number of the plan version
15688 l_record_version_number :=
15689 PA_FIN_PLAN_UTILS.RETRIEVE_RECORD_VERSION_NUMBER(l_budget_version_id);
15690
15691 PA_FIN_PLAN_PVT.LOCK_UNLOCK_VERSION
15692 ( p_budget_version_id => l_budget_version_id
15693 ,p_record_version_number => l_record_version_number
15694 ,p_action => 'L'
15695 ,p_user_id => FND_GLOBAL.User_id
15696 ,p_person_id => NULL
15697 ,x_return_status => p_return_status
15698 ,x_msg_count => p_msg_count
15699 ,x_msg_data => p_msg_data);
15700
15701 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15702
15703 -- Error message is not added here as the api lock_unlock_version
15704 -- adds the message to stack
15705 IF(l_debug_mode='Y') THEN
15706 pa_debug.g_err_stage := 'Failed in locking the version';
15707 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15708 END IF;
15709
15710 RAISE FND_API.G_EXC_ERROR;
15711 END IF;
15712
15713 END IF;
15714
15715
15716
15717 -- Bug 4588279, 27-SEP-05, jwhite ---------------------------------------------------
15718
15719 -- For budget_type_code Budgetary Control budgets,
15720 --
15721 -- 1) Add validation rule to prevent update to
15722 -- periods later than the latest encumbrance year for the set-of-books.
15723 --
15724 -- 2) For information purposes, this validation will be performed even if the update mode
15725 -- is disabled ( p_update_db_flag = 'N' )
15726 --
15727 --
15728
15729 -- Since this initilization is performed here, this global can be used in lieu of a test
15730 -- for the following later in this procedure:
15731 -- 1) Update Mode
15732 -- 2) Budget_type_code model
15733 -- 3) Budgetary Control
15734 --
15735
15736 PA_BUDGET_PUB.G_Latest_Encumbrance_Year := -99;
15737
15738
15739 IF ( p_update_db_flag = 'Y' )
15740 THEN
15741 -- UPDATE MODE
15742
15743 IF ( p_budget_type_code IS NOT NULL ) -- budget_type_code model
15744 THEN
15745
15746 -- Test for Budgetary Control
15747
15748 --Check if budgetary control is enabled for the given project and
15749 --budget type code.
15750 PA_BUDGET_FUND_PKG.get_budget_ctrl_options
15751 ( p_project_Id => l_project_id
15752 , p_budget_type_code => p_budget_type_code
15753 , p_calling_mode => 'BUDGET'
15754 , x_fck_req_flag => l_fck_req_flag
15755 , x_bdgt_intg_flag => l_bdgt_intg_flag
15756 , x_bdgt_ver_id => l_bdgt_ver_id
15757 , x_encum_type_id => l_encum_type_id
15758 , x_balance_type => l_balance_type
15759 , x_return_status => p_return_status
15760 , x_msg_data => p_msg_data
15761 , x_msg_count => p_msg_count
15762 );
15763
15764 -- calling api above adds the error message to stack hence not adding the error message here.
15765 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15766 THEN
15767 IF l_debug_mode = 'Y' THEN
15768 pa_debug.g_err_stage:= 'Calculate_Amounts returned unexp error';
15769 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
15770 END IF;
15771 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15772 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
15773 THEN
15774 IF l_debug_mode = 'Y' THEN
15775 pa_debug.g_err_stage:= 'Calculate_Amounts returned error';
15776 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
15777 END IF;
15778 RAISE FND_API.G_EXC_ERROR;
15779 END IF;
15780
15781
15782 --If funds check is required then this budget cannot be updated thru AMG interface
15783 --FOR PERIOD_YEARS THAT FALL AFTER THE LATEST ENCUMBRANCE YEAR.
15784
15785
15786 IF (nvl(l_fck_req_flag,'N') = 'Y')
15787 THEN
15788
15789 --RE-Populate global for subsequent conditional budget LINE validation
15790 -- Storing a value other than -99 is essential to conditional LINE validation
15791
15792 PA_BUDGET_PVT.Get_Latest_BC_Year
15793 ( p_pa_project_id => l_project_id
15794 ,x_latest_encumbrance_year => PA_BUDGET_PUB.G_Latest_Encumbrance_Year
15795 ,x_return_status => p_return_status
15796 ,x_msg_count => p_msg_count
15797 ,x_msg_data => p_msg_data
15798 );
15799
15800
15801 -- calling api above adds the error message to stack hence not adding the error message here.
15802 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15803 THEN
15804 IF l_debug_mode = 'Y' THEN
15805 pa_debug.g_err_stage:= 'Get_Latest_BC_Year returned unexp error';
15806 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
15807 END IF;
15808 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15809 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
15810 THEN
15811 IF l_debug_mode = 'Y' THEN
15812 pa_debug.g_err_stage:= 'Get_Latest_BC_Year returned error';
15813 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
15814 END IF;
15815 RAISE FND_API.G_EXC_ERROR;
15816 END IF;
15817
15818 END IF; --(nvl(l_fck_req_flag,'N') = 'Y')
15819
15820 END IF; -- p_budget_type_code IS NOT NULL
15821
15822
15823 END IF; -- p_update_db_flag = 'Y'
15824
15825 -- End Bug 4588279, 27-SEP-05, jwhite -------------------------------------------------
15826
15827
15828
15829
15830 -- Read all budget lines - Begin Budget lines loop
15831
15832 l_line_ctr := 0;
15833
15834 IF l_context = l_context_finplan THEN
15835 l_time_phased_code := PA_FIN_PLAN_UTILS.Get_Time_Phased_code(l_budget_version_id);
15836 END IF;
15837
15838 OPEN budget_version_info_cur(l_budget_version_id);
15839 FETCH budget_version_info_cur INTO budget_version_info_rec;
15840 close budget_version_info_cur;
15841
15842 --Set this variable to 'N' initially. This would be set to Yes if for some budget lines client extensions are not called.
15843 l_bdgt_lines_skip_flag := 'N';
15844
15845 OPEN l_resource_assignment_csr (l_budget_version_id,l_context);
15846 LOOP
15847
15848 FETCH l_resource_assignment_csr BULK COLLECT INTO
15849 l_rowid_tbl
15850 ,l_budget_line_id_tbl
15851 ,l_txn_currency_code_tbl
15852 ,l_res_assignment_id_tbl
15853 ,l_task_id_tbl
15854 ,l_rate_based_flag_tbl
15855 ,l_resource_list_id_tbl
15856 ,l_resource_list_member_id_tbl
15857 ,l_resource_id_tbl
15858 ,l_resource_name_tbl
15859 ,l_start_date_tbl
15860 ,l_end_date_tbl
15861 ,l_period_name_tbl
15862 ,l_quantity_tbl
15863 ,l_display_quantity_tbl --IPM Arch Enhancement Bug 4865563
15864 ,l_txn_raw_cost_tbl
15865 ,l_txn_burdened_cost_tbl
15866 ,l_txn_revenue_tbl
15867 ,l_project_raw_cost_tbl
15868 ,l_project_burdened_cost_tbl
15869 ,l_project_revenue_tbl
15870 ,l_projfunc_raw_cost_tbl
15871 ,l_projfunc_burdened_cost_tbl
15872 ,l_projfunc_revenue_tbl
15873 LIMIT l_plsql_max_array_size;
15874
15875 IF(l_debug_mode='Y') THEN
15876 pa_debug.g_err_stage := 'fetched ' || sql%rowcount || ' records';
15877 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15878 END IF;
15879
15880 -- For each of the budget line fetched call client extension apis
15881
15882 IF NVL(l_rowid_tbl.last,0) >= 1 THEN /* Only if something is fetched */
15883 FOR i IN l_rowid_tbl.first .. l_rowid_tbl.last
15884 LOOP
15885 l_line_ctr := l_line_ctr + 1;
15886 l_task_name := NULL;
15887 l_pm_task_reference := NULL;
15888 -- Get the pm_task_reference for the task_id
15889 -- Bug # 14794301 - added 'AND l_task_id_tbl(i) <> 0' .Task_id = 0 for a project level task.
15890 -- But records for tasks with task_id = 0 will not be present in pa_tasks table
15891 IF l_entry_level <> 'P' AND l_task_id_tbl(i) <> 0 THEN /* 2207733 do this check only if budget is not at project level other valid
15892 values are 'L', 'M', and 'P' */
15893 --OPEN l_task_csr (l_resource_assignment_rec.task_id);
15894 OPEN l_task_csr (l_task_id_tbl(i));
15895 FETCH l_task_csr INTO l_pm_task_reference
15896 ,l_task_name; -- Bug 2863564
15897 IF l_task_csr%NOTFOUND THEN
15898 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15899 pa_interface_utils_pub.map_new_amg_msg
15900 ( p_old_message_code => 'PA_TASK_ID_INVALID'
15901 ,p_msg_attribute => 'CHANGE'
15902 ,p_resize_flag => 'N'
15903 ,p_msg_context => 'PROJ'
15904 ,p_attribute1 => l_amg_project_rec.segment1
15905 ,p_attribute2 => ''
15906 ,p_attribute3 => ''
15907 ,p_attribute4 => ''
15908 ,p_attribute5 => '');
15909 END IF;
15910 --CLOSE l_task_csr; -- Close cursor will be invoked twice because Exception is not thrown here.
15911 p_multiple_task_msg := 'F';
15912 -- RAISE FND_API.G_EXC_ERROR;
15913 END IF;
15914 CLOSE l_task_csr;
15915 END IF; /* 2207733 */
15916
15917
15918 p_calc_budget_lines_out(l_line_ctr).pa_task_id := l_task_id_tbl(i);
15919 p_calc_budget_lines_out(l_line_ctr).pm_task_reference := l_pm_task_reference;
15920 p_calc_budget_lines_out(l_line_ctr).resource_alias := l_resource_name_tbl(i);
15921 p_calc_budget_lines_out(l_line_ctr).resource_list_member_id := l_resource_list_member_id_tbl(i);
15922 p_calc_budget_lines_out(l_line_ctr).budget_start_date := l_start_date_tbl(i);
15923 p_calc_budget_lines_out(l_line_ctr).budget_end_date := l_end_date_tbl(i);
15924 p_calc_budget_lines_out(l_line_ctr).period_name := l_period_name_tbl(i);
15925 p_calc_budget_lines_out(l_line_ctr).quantity := l_quantity_tbl(i);
15926 p_calc_budget_lines_out(l_line_ctr).display_quantity := l_display_quantity_tbl(i); --IPM Arch Enhancement Bug 4865563
15927 p_calc_budget_lines_out(l_line_ctr).txn_currency_code := l_txn_currency_code_tbl(i);
15928
15929 -- Fix: 03-FEB-97, jwhite
15930 -- Added line to populate line return status. ---------------------------
15931 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_SUCCESS;
15932 -- ------------------------------------------------------------------------------
15933
15934 l_calculated_raw_cost := l_txn_raw_cost_tbl(i);
15935 l_calculated_burdened_cost := l_txn_burdened_cost_tbl(i);
15936 l_calculated_revenue := l_txn_revenue_tbl(i);
15937
15938 --Initialize the three override values to null. These would be appropriately set to new derived values depending on
15939 -- the context.
15940 l_rw_cost_rate_override_tbl(i) := null;
15941 l_burden_cst_rate_override_tbl(i) := null;
15942 l_bill_rate_override_tbl(i) := null;
15943
15944
15945 -- Bug 4588279, 27-SEP-05, jwhite ---------------------
15946 -- For Update-Mode, Budget-Type-Code and Budgetary Control, issue error for any period record that
15947 -- falls after the latest encumbrance year.
15948 --
15949 -- Implicit Assumptions in following code:
15950 -- 1) If ( PA_BUDGET_PUB.G_Latest_Encumbrance_Year > -99), then
15951 -- this is Update-Mode, Budget-Type-Code and Budgetary Control data.
15952 -- 2) Budgetary control is ONLY for GL periods.
15953 --
15954
15955 -- Initialize Period Year Variable
15956 l_period_year := NULL;
15957
15958
15959 IF ( PA_BUDGET_PUB.G_Latest_Encumbrance_Year > -99)
15960 THEN
15961 -- Budgetary Control Enabled Budget-Type-Code and Update_Mode
15962
15963 -- Fetch Period Year for budget LINE Period Name
15964 OPEN l_budget_periods_csr( l_period_name_tbl(i),'G');
15965
15966 FETCH l_budget_periods_csr INTO l_period_year;
15967
15968 CLOSE l_budget_periods_csr;
15969
15970 -- Test Business Rule
15971 IF ( l_period_year > PA_BUDGET_PUB.G_Latest_Encumbrance_Year )
15972 THEN
15973 pa_utils.add_message
15974 ( p_app_short_name => 'PA'
15975 , p_msg_name => 'PA_BC_ENC_YR_NO_CHG_FUTURE');
15976 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_ERROR;
15977 p_multiple_task_msg := 'F';
15978 END IF;
15979
15980 END IF;
15981
15982 -- End Bug 4588279, 27-SEP-05, jwhite ------------------
15983
15984
15985 --if plan type is FORECAST and for such a forecast version if the ETC start date is greater than start date for
15986 --any of the budget lines then dont call the extension for these lines. For these lines report the amounts
15987 -- as such without calling client extesion on these. For other lines for this version we can
15988 --call the client extensions.
15989 --Also for a forecast version with ETC start date greater than budget line start date, if time phasing for the
15990 --forecast version is none then call client extension for such lines.
15991
15992 if ( not(budget_version_info_rec.plan_class_code = 'FORECAST' and
15993 budget_version_info_rec.etc_start_date is not null and --Added this null check for Bug 3636409
15994 budget_version_info_rec.etc_start_date > l_start_date_tbl(i) and
15995 l_time_phased_code is not null and
15996 l_time_phased_code <> 'N')
15997 or
15998 l_context = l_context_budget )
15999 then
16000 IF (p_calc_raw_cost_yn = 'Y' AND
16001 l_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE)
16002 THEN -- calculate raw cost
16003
16004 Pa_client_Extn_Budget.Calc_Raw_Cost
16005 (x_budget_version_id => l_budget_version_id,
16006 x_project_id => l_project_id,
16007 x_task_id => l_task_id_tbl(i),
16008 x_resource_list_member_id => l_resource_list_member_id_tbl(i),
16009 x_resource_list_id => l_resource_list_id_tbl(i),
16010 x_resource_id => l_resource_id_tbl(i),
16011 x_start_date => l_start_date_tbl(i),
16012 x_end_date => l_end_date_tbl(i),
16013 x_period_name => l_period_name_tbl(i),
16014 x_quantity => l_quantity_tbl(i),
16015 x_raw_cost => l_calculated_raw_cost,
16016 x_pm_product_code => p_pm_product_code,
16017 x_error_code => l_err_code,
16018 x_error_message => l_err_message,
16019 --Added the parameter as part of changes to AMG due to finplan model
16020 x_txn_currency_code => l_txn_currency_code_tbl(i));
16021
16022 IF l_err_code > 0
16023 THEN
16024
16025 IF l_context = l_context_budget
16026 THEN
16027 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16028 THEN
16029
16030 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
16031 THEN
16032 pa_interface_utils_pub.map_new_amg_msg
16033 ( p_old_message_code => 'PA_CALC_RAW_COST_FAILED'
16034 ,p_msg_attribute => 'CHANGE'
16035 ,p_resize_flag => 'N'
16036 ,p_msg_context => 'BUDG'
16037 ,p_attribute1 => l_amg_project_rec.segment1
16038 ,p_attribute2 => ''
16039 ,p_attribute3 => p_budget_type_code
16040 ,p_attribute4 => ''
16041 ,p_attribute5 => '');
16042 ELSE
16043 pa_interface_utils_pub.map_new_amg_msg
16044 ( p_old_message_code => l_err_stage
16045 ,p_msg_attribute => 'CHANGE'
16046 ,p_resize_flag => 'N'
16047 ,p_msg_context => 'BUDG'
16048 ,p_attribute1 => l_amg_project_rec.segment1
16049 ,p_attribute2 => ''
16050 ,p_attribute3 => p_budget_type_code
16051 ,p_attribute4 => ''
16052 ,p_attribute5 => '');
16053 END IF;
16054
16055 END IF;
16056 ELSE
16057 PA_UTILS.ADD_MESSAGE(
16058 p_app_short_name => 'PA'
16059 ,p_msg_name => 'PA_FP_CALC_RAW_COST_FAILED'
16060 ,p_token1 => 'PROJECT'
16061 ,p_value1 => l_amg_project_rec.segment1
16062 ,p_token2 => 'TASK'
16063 ,p_value2 => l_task_name
16064 ,p_token3 => 'PLAN_TYPE'
16065 ,p_value3 => l_fin_plan_type_name
16066 ,p_token4 => 'SOURCE_NAME'
16067 ,p_value4 => l_resource_name_tbl(i)
16068 ,p_token5 => 'START_DATE'
16069 ,p_value5 => l_start_date_tbl(i)
16070 );
16071 END IF;
16072
16073 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_ERROR;
16074 p_multiple_task_msg := 'F';
16075 -- RAISE FND_API.G_EXC_ERROR;
16076
16077 ELSIF l_err_code < 0
16078 THEN
16079
16080 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16081 THEN
16082
16083 FND_MSG_PUB.add_exc_msg
16084 ( p_pkg_name => 'PA_CLIENT_EXTN_BUDGET'
16085 , p_procedure_name => 'CALC_RAW_COST'
16086 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
16087
16088 END IF;
16089
16090 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16091 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16092
16093 END IF;
16094
16095 /* if the Client extn amounts override the rate api derived amounts
16096 * then re-derive the override rates. This should be done only for finplan model
16097 */
16098 if l_fin_plan_type_id is not null then
16099 IF l_version_type in ('ALL','COST') Then
16100 If l_rate_based_flag_tbl(i) = 'N' Then
16101 If NVL(l_calculated_raw_cost,0) <> NVL(l_txn_raw_cost_tbl(i),0) Then
16102 l_calculated_raw_cost := pa_currency.round_trans_currency_amt1(l_calculated_raw_cost,l_txn_currency_code_tbl(i));
16103 l_quantity_tbl(i) := l_calculated_raw_cost;
16104 l_display_quantity_tbl(i) := null; --IPM Arch Enhancements Bug 4865563
16105 l_rw_cost_rate_override_tbl(i) := 1;
16106 /* change in raw cost changes the burden cost rate */
16107 If (nvl(l_quantity_tbl(i),0) <> 0 AND nvl(l_quantity_tbl(i),0) <>
16108 nvl(p_calc_budget_lines_out(l_line_ctr).quantity,0)) Then
16109 l_burden_cst_rate_override_tbl(i) := l_txn_burdened_cost_tbl(i)/l_quantity_tbl(i);
16110 End if;
16111 /* change in the quantity changes the bill rate */
16112 If l_version_type = 'ALL' Then
16113 If (nvl(l_quantity_tbl(i),0) <> 0 AND nvl(l_quantity_tbl(i),0) <> nvl(p_calc_budget_lines_out(l_line_ctr).quantity,0)) Then
16114 l_bill_rate_override_tbl(i) := l_txn_revenue_tbl(i)/l_quantity_tbl(i);
16115 End If;
16116 End If;
16117 End If;
16118 Else
16119 If NVL(l_calculated_raw_cost,0) <> NVL(l_txn_raw_cost_tbl(i),0) Then
16120 l_calculated_raw_cost := pa_currency.round_trans_currency_amt1(l_calculated_raw_cost,l_txn_currency_code_tbl(i));
16121 If nvl(l_quantity_tbl(i),0) <> 0 Then
16122 --Bug 5006031 Issue 8
16123 If l_calculated_raw_cost = 0 OR l_calculated_raw_cost IS NULL then
16124 l_rw_cost_rate_override_tbl(i) := 0;
16125 Else
16126 l_rw_cost_rate_override_tbl(i) := l_calculated_raw_cost/l_quantity_tbl(i);
16127 End If;
16128 End If;
16129 End If;
16130 End If;
16131 End If;
16132 end if; --l_fin_plan_type_id is not null
16133 END IF;
16134
16135 IF (p_calc_burdened_cost_yn = 'Y' AND
16136 l_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE)
16137 THEN
16138
16139 -- calculate burdened cost. Note that calculated_raw_cost is being
16140 -- used as the parameter,in case both p_calc_raw_cost_yn and
16141 -- p_calc_burdened_cost_yn are both set to 'Y'.Calculated_raw_cost
16142 -- would either hold the newly calculated value or the value from
16143 -- the database,depending on the value of p_calc_raw_cost_yn flag.
16144
16145 Pa_client_Extn_Budget.Calc_burdened_Cost
16146 ( x_budget_version_id => l_budget_version_id
16147 ,x_project_id => l_project_id
16148 ,x_task_id => l_task_id_tbl(i)
16149 ,x_resource_list_member_id => l_resource_list_member_id_tbl(i)
16150 ,x_resource_list_id => l_resource_list_id_tbl(i)
16151 ,x_resource_id => l_resource_id_tbl(i)
16152 ,x_start_date => l_start_date_tbl(i)
16153 ,x_end_date => l_end_date_tbl(i)
16154 ,x_period_name => l_period_name_tbl(i)
16155 ,x_quantity => l_quantity_tbl(i)
16156 ,x_raw_cost => l_calculated_raw_cost
16157 ,x_burdened_cost => l_calculated_burdened_cost
16158 ,x_pm_product_code => p_pm_product_code
16159 ,x_error_code => l_err_code
16160 ,x_error_message => l_err_message
16161 --Added the parameter as part of changes to AMG due to finplan model
16162 ,x_txn_currency_code => l_txn_currency_code_tbl(i));
16163
16164 IF l_err_code > 0
16165 THEN
16166
16167 IF l_context = l_context_budget
16168 THEN
16169 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16170 THEN
16171
16172 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
16173 THEN
16174 pa_interface_utils_pub.map_new_amg_msg
16175 ( p_old_message_code => 'PA_CALC_BURDENED_COST_FAILED'
16176 ,p_msg_attribute => 'CHANGE'
16177 ,p_resize_flag => 'Y'
16178 ,p_msg_context => 'BUDG'
16179 ,p_attribute1 => l_amg_project_rec.segment1
16180 ,p_attribute2 => ''
16181 ,p_attribute3 => p_budget_type_code
16182 ,p_attribute4 => ''
16183 ,p_attribute5 => '');
16184 ELSE
16185 pa_interface_utils_pub.map_new_amg_msg
16186 ( p_old_message_code => l_err_stage
16187 ,p_msg_attribute => 'CHANGE'
16188 ,p_resize_flag => 'Y'
16189 ,p_msg_context => 'BUDG'
16190 ,p_attribute1 => l_amg_project_rec.segment1
16191 ,p_attribute2 => ''
16192 ,p_attribute3 => p_budget_type_code
16193 ,p_attribute4 => ''
16194 ,p_attribute5 => '');
16195 END IF;
16196
16197 END IF;
16198 ELSE
16199 PA_UTILS.ADD_MESSAGE(
16200 p_app_short_name => 'PA'
16201 ,p_msg_name => 'PA_FP_CALC_BURD_COST_FAILED'
16202 ,p_token1 => 'PROJECT'
16203 ,p_value1 => l_amg_project_rec.segment1
16204 ,p_token2 => 'TASK'
16205 ,p_value2 => l_task_name
16206 ,p_token3 => 'PLAN_TYPE'
16207 ,p_value3 => l_fin_plan_type_name
16208 ,p_token4 => 'SOURCE_NAME'
16209 ,p_value4 => l_resource_name_tbl(i)
16210 ,p_token5 => 'START_DATE'
16211 ,p_value5 => l_start_date_tbl(i)
16212 );
16213 END IF;
16214
16215 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_ERROR;
16216 p_multiple_task_msg := 'F';
16217 -- RAISE FND_API.G_EXC_ERROR;
16218
16219 ELSIF l_err_code < 0
16220 THEN
16221
16222 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16223 THEN
16224
16225 FND_MSG_PUB.add_exc_msg
16226 ( p_pkg_name => 'PA_CLIENT_EXTN_BUDGET'
16227 , p_procedure_name => 'CALC_BURDENED_COST'
16228 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
16229
16230 END IF;
16231
16232 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16233 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16234
16235 END IF;
16236
16237 /* re derive the burden cost rate override after calling the client extn Do it only for finplan model*/
16238 if l_fin_plan_type_id is not null then
16239 IF l_version_type in ('ALL','COST') Then
16240 If NVl(l_calculated_burdened_cost,0) <> NVl(l_txn_burdened_cost_tbl(i),0) Then
16241 l_calculated_burdened_cost := pa_currency.round_trans_currency_amt1(l_calculated_burdened_cost,l_txn_currency_code_tbl(i));
16242 If nvl(l_quantity_tbl(i),0) <> 0 Then
16243 --Bug 5006031 Issue 8
16244 If l_rate_based_flag_tbl(i) = 'Y' Then
16245 If l_calculated_burdened_cost = 0 OR l_calculated_burdened_cost IS NULL then
16246 l_burden_cst_rate_override_tbl(i) := 0;
16247 Else
16248 l_burden_cst_rate_override_tbl(i) := l_calculated_burdened_cost/l_quantity_tbl(i);
16249 End If;
16250 End If;
16251 --l_display_quantity_tbl(i) := l_quantity_tbl(i); --IPM Arch Enhancement Bug 4865563
16252 End if;
16253 End if;
16254 END IF;
16255 end if; --if l_fin_plan_type_id is not null
16256 END IF;
16257
16258 IF (p_calc_revenue_yn = 'Y' AND
16259 l_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST)
16260 THEN
16261
16262 Pa_client_Extn_Budget.Calc_revenue
16263 ( x_budget_version_id => l_budget_version_id
16264 ,x_project_id => l_project_id
16265 ,x_task_id => l_task_id_tbl(i)
16266 ,x_resource_list_member_id => l_resource_list_member_id_tbl(i)
16267 ,x_resource_list_id => l_resource_list_id_tbl(i)
16268 ,x_resource_id => l_resource_id_tbl(i)
16269 ,x_start_date => l_start_date_tbl(i)
16270 ,x_end_date => l_end_date_tbl(i)
16271 ,x_period_name => l_period_name_tbl(i)
16272 ,x_quantity => l_quantity_tbl(i)
16273 ,x_revenue => l_calculated_revenue
16274 ,x_pm_product_code => p_pm_product_code
16275 ,x_error_code => l_err_code
16276 ,x_error_message => l_err_message
16277 --Added the parameter as part of changes to AMG due to finplan model
16278 ,x_txn_currency_code => l_txn_currency_code_tbl(i));
16279
16280
16281 IF l_err_code > 0
16282 THEN
16283
16284 IF l_context = l_context_budget
16285 THEN
16286 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16287 THEN
16288
16289 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
16290 THEN
16291 pa_interface_utils_pub.map_new_amg_msg
16292 ( p_old_message_code => 'PA_CALC_REVENUE_FAILED'
16293 ,p_msg_attribute => 'CHANGE'
16294 ,p_resize_flag => 'N'
16295 ,p_msg_context => 'BUDG'
16296 ,p_attribute1 => l_amg_project_rec.segment1
16297 ,p_attribute2 => ''
16298 ,p_attribute3 => p_budget_type_code
16299 ,p_attribute4 => ''
16300 ,p_attribute5 => '');
16301 ELSE
16302 pa_interface_utils_pub.map_new_amg_msg
16303 ( p_old_message_code => l_err_stage
16304 ,p_msg_attribute => 'CHANGE'
16305 ,p_resize_flag => 'N'
16306 ,p_msg_context => 'BUDG'
16307 ,p_attribute1 => l_amg_project_rec.segment1
16308 ,p_attribute2 => ''
16309 ,p_attribute3 => p_budget_type_code
16310 ,p_attribute4 => ''
16311 ,p_attribute5 => '');
16312 END IF;
16313
16314 END IF;
16315 ELSE
16316 PA_UTILS.ADD_MESSAGE(
16317 p_app_short_name => 'PA'
16318 ,p_msg_name => 'PA_FP_CALC_REVENUE_FAILED'
16319 ,p_token1 => 'PROJECT'
16320 ,p_value1 => l_amg_project_rec.segment1
16321 ,p_token2 => 'TASK'
16322 ,p_value2 => l_task_name
16323 ,p_token3 => 'PLAN_TYPE'
16324 ,p_value3 => l_fin_plan_type_name
16325 ,p_token4 => 'SOURCE_NAME'
16326 ,p_value4 => l_resource_name_tbl(i)
16327 ,p_token5 => 'START_DATE'
16328 ,p_value5 => l_start_date_tbl(i)
16329 );
16330 END IF;
16331
16332 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_ERROR;
16333 p_multiple_task_msg := 'F';
16334 -- RAISE FND_API.G_EXC_ERROR;
16335
16336 ELSIF l_err_code < 0
16337 THEN
16338
16339 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16340 THEN
16341
16342 FND_MSG_PUB.add_exc_msg
16343 ( p_pkg_name => 'PA_CLIENT_EXTN_BUDGET'
16344 , p_procedure_name => 'CALC_REVENUE'
16345 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
16346
16347 END IF;
16348
16349 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16350 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16351
16352 END IF;
16353
16354 /* rederive the override rates */
16355 if l_fin_plan_type_id is not null then
16356 If l_version_type in ('ALL','REVENUE') Then
16357 If l_rate_based_flag_tbl(i) = 'N' Then
16358 If NVL(l_calculated_revenue,0) <> NVL(l_txn_revenue_tbl(i),0) Then
16359 l_calculated_revenue := pa_currency.round_trans_currency_amt1(l_calculated_revenue, l_txn_currency_code_tbl(i));
16360 If l_version_type = 'REVENUE' Then
16361 l_quantity_tbl(i) := l_calculated_revenue;
16362 l_display_quantity_tbl(i) := null; --IPM Arch Enhancements Bug 4865563
16363 l_bill_rate_override_tbl(i) := 1;
16364 Else
16365 If nvl(l_quantity_tbl(i),0) <> 0 Then
16366 l_bill_rate_override_tbl(i) := l_calculated_revenue/l_quantity_tbl(i);
16367 End If;
16368 End If;
16369 End If;
16370 Else
16371 If NVL(l_calculated_revenue,0) <> NVL(l_txn_revenue_tbl(i),0) Then
16372 l_calculated_revenue := pa_currency.round_trans_currency_amt1(l_calculated_revenue,l_txn_currency_code_tbl(i));
16373 If nvl(l_quantity_tbl(i),0) <> 0 Then
16374 --Bug 5006031 Issue 8
16375 If l_calculated_revenue = 0 OR l_calculated_revenue IS NULL then
16376 l_bill_rate_override_tbl(i) := 0;
16377 Else
16378 l_bill_rate_override_tbl(i) := l_calculated_revenue/l_quantity_tbl(i);
16379 End If;
16380 End If;
16381 End If;
16382 End If;
16383 End If;
16384 end if; -- if l_fin_plan_type_id is not null
16385 END IF;
16386 /* Bug 5006031 Issue 8 Start - In IPM, RC drives BC and Rev for amount based transactions
16387 So, RC cannot be null. BC is copied into RC if RC is null and BC not null.*/
16388 IF (l_context = l_context_finplan AND l_rate_based_flag_tbl(i) = 'N' AND (l_calculated_raw_cost is null OR l_calculated_raw_cost = 0 )
16389 AND (l_calculated_burdened_cost IS NOT NULL OR l_calculated_burdened_cost <> 0)) --IPM Arch Enhancments Bug 4865563
16390 THEN
16391 IF (l_txn_raw_cost_tbl(i) is null) then
16392 l_calculated_raw_cost := l_calculated_burdened_cost;
16393 IF(l_debug_mode='Y') THEN
16394 pa_debug.g_err_stage := 'Assigning BC to RC. When BC is entered by the user, BC is copied to RC ';
16395 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16396 END IF;
16397 Elsif l_txn_raw_cost_tbl(i) is not null THEN
16398 l_calculated_burdened_cost := null;
16399 l_calculated_revenue := null;
16400 IF(l_debug_mode='Y') THEN
16401 pa_debug.g_err_stage := 'When existing RC is nulled out, BC and Rev are also nulled out';
16402 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16403 END IF;
16404 End IF;
16405 END IF;
16406 /* Bug 5006031 Issue 8 End */
16407 else ----if plan_class_code = 'FORECAST' and budget_version_info_rec.etc_start_date > l_start_date_tbl(i))
16408 l_bdgt_lines_skip_flag := 'Y';
16409 end if; --if plan_class_code = 'FORECAST' and budget_version_info_rec.etc_start_date > l_start_date_tbl(i))
16410
16411
16412 -- Populate the budget lines out table with the calculated amounts.
16413
16414 p_calc_budget_lines_out(l_line_ctr).quantity := l_quantity_tbl(i);
16415 p_calc_budget_lines_out(l_line_ctr).display_quantity := l_display_quantity_tbl(i); --IPM Arch Enhancement Bug 4865563
16416 p_calc_budget_lines_out(l_line_ctr).calculated_raw_cost := l_calculated_raw_cost;
16417 p_calc_budget_lines_out(l_line_ctr).calculated_burdened_cost := l_calculated_burdened_cost;
16418 p_calc_budget_lines_out(l_line_ctr).calculated_revenue := l_calculated_revenue;
16419
16420 -- PC and PFC amounts would be populated only if update_flag = 'Y'
16421 p_calc_budget_lines_out(l_line_ctr).project_raw_cost := NULL;
16422 p_calc_budget_lines_out(l_line_ctr).project_burdened_cost := NULL;
16423 p_calc_budget_lines_out(l_line_ctr).project_revenue := NULL;
16424 p_calc_budget_lines_out(l_line_ctr).projfunc_raw_cost := NULL;
16425 p_calc_budget_lines_out(l_line_ctr).projfunc_burdened_cost := NULL;
16426 p_calc_budget_lines_out(l_line_ctr).projfunc_revenue := NULL;
16427
16428 -- Raw_cost, Burdened_cost, Revnue Pl/sql tables should be updated with the calculated amounts
16429 -- to enable mass update out of the pl/sql loop
16430
16431 l_txn_raw_cost_tbl(i) := l_calculated_raw_cost;
16432 l_txn_burdened_cost_tbl(i) := l_calculated_burdened_cost;
16433 l_txn_revenue_tbl(i) := l_calculated_revenue;
16434
16435 END LOOP; -- PL/SQL Table loop
16436
16437 -- Bulk update the budget lines if update flag is set.
16438
16439 IF p_update_db_flag = 'Y' THEN
16440 IF p_multiple_task_msg <> 'F' THEN
16441 IF l_context = l_context_budget
16442 THEN
16443 FORALL i IN l_rowid_tbl.first .. l_rowid_tbl.last
16444 UPDATE pa_budget_lines
16445 SET raw_cost = l_txn_raw_cost_tbl(i),
16446 burdened_cost = l_txn_burdened_cost_tbl(i),
16447 revenue = l_txn_revenue_tbl(i),
16448 last_update_date = SYSDATE,
16449 last_updated_by = G_USER_ID,
16450 last_update_login = G_LOGIN_ID
16451 WHERE rowid = l_rowid_tbl(i);
16452 ELSE
16453 FORALL i IN l_rowid_tbl.first .. l_rowid_tbl.last
16454 UPDATE pa_budget_lines
16455 SET quantity = l_quantity_tbl(i),
16456 display_quantity = l_display_quantity_tbl(i), --IPM Arch Enhancements Bug 4865563
16457 txn_raw_cost = l_txn_raw_cost_tbl(i),
16458 txn_burdened_cost = l_txn_burdened_cost_tbl(i),
16459 txn_revenue = l_txn_revenue_tbl(i),
16460 txn_cost_rate_override = decode(l_rw_cost_rate_override_tbl(i), null, txn_cost_rate_override,
16461 l_rw_cost_rate_override_tbl(i)),
16462 burden_cost_rate_override = decode(l_burden_cst_rate_override_tbl(i), null, burden_cost_rate_override,
16463 l_burden_cst_rate_override_tbl(i)),
16464 txn_bill_rate_override = decode (l_bill_rate_override_tbl(i), null, txn_bill_rate_override,
16465 l_bill_rate_override_tbl(i)),
16466 last_update_date = SYSDATE,
16467 last_updated_by = G_USER_ID,
16468 last_update_login = G_LOGIN_ID
16469 WHERE rowid = l_rowid_tbl(i);
16470 END IF;
16471 END IF;
16472 END IF;
16473 END IF; -- if any records are fetched
16474
16475 EXIT WHEN nvl(l_rowid_tbl.last,0) < l_plsql_max_array_size;
16476 END LOOP;
16477 CLOSE l_resource_assignment_csr;
16478
16479 IF p_multiple_task_msg = 'F'
16480 THEN
16481 RAISE FND_API.G_EXC_ERROR;
16482 END IF;
16483
16484 IF p_update_db_flag = 'Y' THEN
16485
16486 IF l_context = l_context_budget THEN --Bug 2863564
16487
16488 -- Bug 2863564
16489 -- Call to MRC apis should be done only in case of old 'BUDGETS' model
16490 -- for NEW Financial Planning Model, this would be taken care by
16491 -- the api pa_fp_edit_line_pkg. PROCESS_BDGTLINES_FOR_VERSION
16492
16493 -- Bug Fix: 4569365. Removed MRC code.
16494 /*
16495 IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS IS NULL
16496 THEN
16497 PA_MRC_FINPLAN.CHECK_MRC_INSTALL
16498 (x_return_status => p_return_status,
16499 x_msg_count => p_msg_count,
16500 x_msg_data => p_msg_data);
16501 END IF;
16502
16503 IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS AND
16504 PA_MRC_FINPLAN.G_FINPLAN_MRC_OPTION_CODE = 'A'
16505 THEN
16506 PA_MRC_FINPLAN.MAINTAIN_ALL_MC_BUDGET_LINES
16507 ( p_fin_plan_version_id => l_budget_version_id
16508 ,p_entire_version => 'Y'
16509 ,x_return_status => p_return_status
16510 ,x_msg_count => p_msg_count
16511 ,x_msg_data => p_msg_data);
16512 END IF;
16513
16514 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16515 IF(l_debug_mode='Y') THEN
16516 pa_debug.g_err_stage := 'MRC failed';
16517 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16518 END IF;
16519 RAISE FND_API.G_EXC_ERROR;
16520 END IF;
16521 */
16522 --Summarizing the totals in the table pa_budget_versions
16523
16524 PA_BUDGET_UTILS.summerize_project_totals
16525 (x_budget_version_id => l_budget_version_id,
16526 x_err_code => l_err_code,
16527 x_err_stage => l_err_stage,
16528 x_err_stack => l_err_stack);
16529
16530 IF l_err_code > 0
16531 THEN
16532
16533 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16534 THEN
16535
16536 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
16537 THEN
16538 pa_interface_utils_pub.map_new_amg_msg
16539 ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
16540 ,p_msg_attribute => 'CHANGE'
16541 ,p_resize_flag => 'N'
16542 ,p_msg_context => 'BUDG'
16543 ,p_attribute1 => l_amg_project_rec.segment1
16544 ,p_attribute2 => ''
16545 ,p_attribute3 => p_budget_type_code
16546 ,p_attribute4 => ''
16547 ,p_attribute5 => '');
16548 ELSE
16549 pa_interface_utils_pub.map_new_amg_msg
16550 ( p_old_message_code => l_err_stage
16551 ,p_msg_attribute => 'CHANGE'
16552 ,p_resize_flag => 'N'
16553 ,p_msg_context => 'BUDG'
16554 ,p_attribute1 => l_amg_project_rec.segment1
16555 ,p_attribute2 => ''
16556 ,p_attribute3 => p_budget_type_code
16557 ,p_attribute4 => ''
16558 ,p_attribute5 => '');
16559 END IF;
16560
16561 END IF;
16562
16563 IF(l_debug_mode='Y') THEN
16564 pa_debug.g_err_stage := 'summerize_project_totals api failed';
16565 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16566 END IF;
16567
16568 RAISE FND_API.G_EXC_ERROR;
16569
16570 ELSIF l_err_code < 0
16571 THEN
16572
16573 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16574 THEN
16575
16576 FND_MSG_PUB.add_exc_msg
16577 ( p_pkg_name => 'PA_BUDGET_UTILS'
16578 , p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
16579 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
16580
16581 END IF;
16582
16583 IF(l_debug_mode='Y') THEN
16584 pa_debug.g_err_stage := 'summerize_project_totals api failed with unexpected error ';
16585 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16586 END IF;
16587 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16588
16589 END IF;
16590
16591 ELSIF l_context = l_context_finplan THEN
16592
16593 -- Bug 2863564
16594 -- Call 'PROCESS_BDGTLINES_FOR_VERSION' api
16595 -- This api does the final processing of budget lines data for a budget version.
16596 -- It includes computing the MC amounts, creating MRC lines if required and
16597 -- rolling up budget lines data, resource_assignments data and period denorm data.
16598
16599 /* PA_FP_EDIT_LINE_PKG.PROCESS_BDGTLINES_FOR_VERSION
16600 ( p_budget_version_id => l_budget_version_id
16601 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN
16602 ,x_return_status => p_return_status
16603 ,x_msg_count => p_msg_count
16604 ,x_msg_data => p_msg_data );
16605
16606 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16607 -- Error message is not added here as the api lock_unlock_version
16608 -- adds the message to stack
16609 IF(l_debug_mode='Y') THEN
16610 pa_debug.g_err_stage := 'Failed in locking the version';
16611 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16612 END IF;
16613 RAISE FND_API.G_EXC_ERROR;
16614 END IF;*/
16615
16616 /* Call PA_FP_MULTI_CURRENCY_PKG.CONVERT_TXN_CURRENCY for the MC conversions. */
16617
16618
16619 PA_FP_MULTI_CURRENCY_PKG.CONVERT_TXN_CURRENCY
16620 ( p_budget_version_id => l_budget_version_id
16621 ,p_entire_version => 'Y'
16622 ,x_return_status => p_return_status
16623 ,x_msg_count => p_msg_count
16624 ,x_msg_data => p_msg_data);
16625
16626 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16627 IF l_debug_mode = 'Y' THEN
16628 pa_debug.g_err_stage := 'Call to PA_FP_MULTI_CURRENCY_PKG.CONVERT_TXN_CURRENCY errored... ';
16629 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16630 END IF;
16631 RAISE FND_API.G_EXC_ERROR;
16632 END IF;
16633
16634 --IPM Architecture Enhancement - Start
16635
16636 PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DTLS
16637 (P_BUDGET_VERSION_ID => l_budget_version_id,
16638 X_FP_COLS_REC => l_fp_cols_rec,
16639 X_RETURN_STATUS => p_return_status,
16640 X_MSG_COUNT => p_msg_count,
16641 X_MSG_DATA => p_msg_data);
16642
16643 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16644 IF l_debug_mode = 'Y' THEN
16645 pa_debug.g_err_stage:= 'Error in PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DETAILS';
16646 pa_debug.write(g_module_name,pa_debug.g_err_stage,l_debug_level5);
16647 END IF;
16648 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
16649 END IF;
16650
16651 pa_res_asg_currency_pub.maintain_data
16652 (p_fp_cols_rec => l_fp_cols_rec,
16653 p_calling_module => 'AMG_API',
16654 p_rollup_flag => 'Y',
16655 p_version_level_flag => 'Y',
16656 x_return_status => p_return_status,
16657 x_msg_data => p_msg_data,
16658 x_msg_count => p_msg_count );
16659
16660 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16661 IF l_debug_mode = 'Y' THEN
16662 pa_debug.g_err_stage:= 'Error in PA_RES_ASG_CURRENCY_PUB.MAINTAIN_DATA';
16663 pa_debug.write(g_module_name,pa_debug.g_err_stage,l_debug_level5);
16664 END IF;
16665 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
16666 END IF;
16667
16668 --IPM Architecture Enhancement - End
16669
16670 /* Call the rollup API to rollup the amounts. */
16671 PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION(
16672 p_budget_version_id => l_budget_version_id
16673 ,p_entire_version => 'Y'
16674 ,x_return_status => p_return_status
16675 ,x_msg_count => p_msg_count
16676 ,x_msg_data => p_msg_data ) ;
16677
16678
16679 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16680 IF l_debug_mode = 'Y' THEN
16681 pa_debug.g_err_stage := 'Call to PA_FP_ROLLUP_PKG errored... ';
16682 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16683 END IF;
16684 RAISE FND_API.G_EXC_ERROR;
16685 END IF;
16686 -- Bug Fix: 4569365. Removed MRC code.
16687 /* Check if MRC is enabled and Call MRC API */
16688 /*
16689 IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS IS NULL THEN
16690 PA_MRC_FINPLAN.CHECK_MRC_INSTALL
16691 (x_return_status => p_return_status,
16692 x_msg_count => p_msg_count,
16693 x_msg_data => p_msg_data);
16694 END IF;
16695
16696 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16697 IF l_debug_mode = 'Y' THEN
16698 pa_debug.g_err_stage := 'Unexpected exception in checking MRC Install '||sqlerrm;
16699 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16700 END IF;
16701 RAISE FND_API.G_EXC_ERROR;
16702 END IF;
16703
16704 IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS AND
16705 PA_MRC_FINPLAN.G_FINPLAN_MRC_OPTION_CODE = 'A' THEN
16706
16707 PA_MRC_FINPLAN.MAINTAIN_ALL_MC_BUDGET_LINES
16708 (p_fin_plan_version_id => l_budget_version_id,
16709 p_entire_version => 'Y',
16710 x_return_status => p_return_status,
16711 x_msg_count => p_msg_count,
16712 x_msg_data => p_msg_data);
16713 END IF;
16714
16715 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16716 IF l_debug_mode = 'Y' THEN
16717 pa_debug.g_err_stage := 'Unexpected exception in MRC API '||sqlerrm;
16718 pa_debug.write('Calculate_Amounts: ' || l_module_name,pa_debug.g_err_stage,l_debug_level5);
16719 END IF;
16720 RAISE FND_API.G_EXC_ERROR;
16721 END IF;
16722 */
16723
16724 -- populating the l_budget_version_id_tbl with p_budget_version_id
16725 l_budget_version_id_tbl := SYSTEM.pa_num_tbl_type(l_budget_version_id);
16726
16727 -- Call PJI delete api first to delete existing summarization data
16728 PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE (
16729 p_fp_version_ids => l_budget_version_id_tbl,
16730 x_return_status => p_return_status,
16731 x_msg_code => p_msg_data);
16732
16733 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16734 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16735 p_msg_name => p_msg_data);
16736 RAISE FND_API.G_EXC_ERROR;
16737 END IF;
16738
16739 -- Call PLAN_CREATE to create summarization data as per the new RBS
16740 PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE (
16741 p_fp_version_ids => l_budget_version_id_tbl,
16742 x_return_status => p_return_status,
16743 x_msg_code => p_msg_data);
16744
16745 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16746 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16747 p_msg_name => p_msg_data);
16748 RAISE FND_API.G_EXC_ERROR;
16749 END IF;
16750
16751
16752 -- Bug 2863564 We need to unlock the version
16753
16754 -- Fetch the record version number of the plan version
16755 l_record_version_number :=
16756 PA_FIN_PLAN_UTILS.RETRIEVE_RECORD_VERSION_NUMBER(l_budget_version_id);
16757
16758 PA_FIN_PLAN_PVT.LOCK_UNLOCK_VERSION
16759 ( p_budget_version_id => l_budget_version_id
16760 ,p_record_version_number => l_record_version_number
16761 ,p_action => 'U'
16762 ,p_user_id => FND_GLOBAL.User_id
16763 ,p_person_id => NULL
16764 ,x_return_status => p_return_status
16765 ,x_msg_count => p_msg_count
16766 ,x_msg_data => p_msg_data);
16767
16768 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16769 -- Error message is not added here as the api lock_unlock_version
16770 -- adds the message to stack
16771 IF(l_debug_mode='Y') THEN
16772 pa_debug.g_err_stage := 'Failed in Unlocking the version';
16773 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16774 END IF;
16775 RAISE FND_API.G_EXC_ERROR;
16776 END IF;
16777
16778 -- We need to populate the PC, PFC amounts also in the OUT table
16779 -- in the context of new budgets model. So, open the
16780 -- resource_assignments_cur and repopulate the complete data.
16781 -- NOTE: If there had been any error in the calculation of amounts
16782 -- by the client extension apis, error would have been raised by now
16783 -- Since the program execution has come till here, we can populate
16784 -- return status success for each budget line fetched.
16785
16786 -- Delete the existing data
16787 p_calc_budget_lines_out.delete;
16788
16789 -- Intialise l_line_ctr to zero once again
16790 l_line_ctr := 0;
16791
16792 OPEN l_resource_assignment_csr (l_budget_version_id,l_context);
16793 LOOP
16794
16795 FETCH l_resource_assignment_csr BULK COLLECT INTO
16796 l_rowid_tbl
16797 ,l_budget_line_id_tbl
16798 ,l_txn_currency_code_tbl
16799 ,l_res_assignment_id_tbl
16800 ,l_task_id_tbl
16801 ,l_rate_based_flag_tbl
16802 ,l_resource_list_id_tbl
16803 ,l_resource_list_member_id_tbl
16804 ,l_resource_id_tbl
16805 ,l_resource_name_tbl
16806 ,l_start_date_tbl
16807 ,l_end_date_tbl
16808 ,l_period_name_tbl
16809 ,l_quantity_tbl
16810 ,l_display_quantity_tbl --IPM Arch Enhancement Bug 4865563
16811 ,l_txn_raw_cost_tbl
16812 ,l_txn_burdened_cost_tbl
16813 ,l_txn_revenue_tbl
16814 ,l_project_raw_cost_tbl
16815 ,l_project_burdened_cost_tbl
16816 ,l_project_revenue_tbl
16817 ,l_projfunc_raw_cost_tbl
16818 ,l_projfunc_burdened_cost_tbl
16819 ,l_projfunc_revenue_tbl
16820 LIMIT l_plsql_max_array_size;
16821
16822 IF(l_debug_mode='Y') THEN
16823 pa_debug.g_err_stage := 'fetched ' || sql%rowcount || ' records';
16824 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16825 END IF;
16826
16827 IF NVL(l_rowid_tbl.last,0) >= 1 THEN
16828 FOR i IN l_rowid_tbl.first .. l_rowid_tbl.last
16829 LOOP
16830
16831 l_line_ctr := l_line_ctr + 1;
16832
16833 p_calc_budget_lines_out(l_line_ctr).pa_task_id := l_task_id_tbl(i);
16834 p_calc_budget_lines_out(l_line_ctr).pm_task_reference := l_pm_task_reference;
16835 p_calc_budget_lines_out(l_line_ctr).resource_alias := l_resource_name_tbl(i);
16836 p_calc_budget_lines_out(l_line_ctr).resource_list_member_id := l_resource_list_member_id_tbl(i);
16837 p_calc_budget_lines_out(l_line_ctr).budget_start_date := l_start_date_tbl(i);
16838 p_calc_budget_lines_out(l_line_ctr).budget_end_date := l_end_date_tbl(i);
16839 p_calc_budget_lines_out(l_line_ctr).period_name := l_period_name_tbl(i);
16840 p_calc_budget_lines_out(l_line_ctr).quantity := l_quantity_tbl(i);
16841 p_calc_budget_lines_out(l_line_ctr).display_quantity := l_display_quantity_tbl(i); --IPM Arch Enhancement Bug 4865563
16842 p_calc_budget_lines_out(l_line_ctr).txn_currency_code := l_txn_currency_code_tbl(i);
16843 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_SUCCESS;
16844 p_calc_budget_lines_out(l_line_ctr).calculated_raw_cost := l_txn_raw_cost_tbl(i);
16845 p_calc_budget_lines_out(l_line_ctr).calculated_burdened_cost := l_txn_burdened_cost_tbl(i);
16846 p_calc_budget_lines_out(l_line_ctr).calculated_revenue := l_txn_revenue_tbl(i);
16847 p_calc_budget_lines_out(l_line_ctr).project_raw_cost := l_project_raw_cost_tbl(i);
16848 p_calc_budget_lines_out(l_line_ctr).project_burdened_cost := l_project_burdened_cost_tbl(i);
16849 p_calc_budget_lines_out(l_line_ctr).project_revenue := l_project_revenue_tbl(i);
16850 p_calc_budget_lines_out(l_line_ctr).projfunc_raw_cost := l_projfunc_raw_cost_tbl(i);
16851 p_calc_budget_lines_out(l_line_ctr).projfunc_burdened_cost := l_projfunc_burdened_cost_tbl(i);
16852 p_calc_budget_lines_out(l_line_ctr).projfunc_revenue := l_projfunc_revenue_tbl(i);
16853
16854 END LOOP;
16855 END IF;
16856
16857 EXIT WHEN NVL(l_rowid_tbl.last,0) < l_plsql_max_array_size;
16858 END LOOP;
16859 CLOSE l_resource_assignment_csr;
16860 END IF;
16861
16862 END IF;
16863
16864 if( l_bdgt_lines_skip_flag = 'Y')
16865 then
16866 PA_UTILS.ADD_MESSAGE
16867 ( p_app_short_name => 'PA'
16868 ,p_msg_name => 'PA_FP_ETC_BL_DATE'
16869 );
16870 end if;
16871
16872
16873 IF FND_API.TO_BOOLEAN( p_commit )
16874 THEN
16875 COMMIT;
16876 END IF;
16877
16878 EXCEPTION
16879
16880 WHEN FND_API.G_EXC_ERROR
16881 THEN
16882 ROLLBACK TO calculate_amounts_pub;
16883
16884 p_return_status := FND_API.G_RET_STS_ERROR;
16885
16886 FND_MSG_PUB.Count_And_Get
16887 (p_count => p_msg_count ,
16888 p_data => p_msg_data );
16889
16890 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
16891 THEN
16892
16893 ROLLBACK TO calculate_amounts_pub;
16894
16895 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16896
16897 FND_MSG_PUB.Count_And_Get
16898 (p_count => p_msg_count ,
16899 p_data => p_msg_data );
16900 WHEN OTHERS
16901 THEN
16902 ROLLBACK TO calculate_amounts_pub;
16903
16904 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16905
16906 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16907 THEN
16908 FND_MSG_PUB.add_exc_msg
16909 ( p_pkg_name => G_PKG_NAME
16910 ,p_procedure_name => l_api_name );
16911 END IF;
16912
16913 FND_MSG_PUB.Count_And_Get
16914 (p_count => p_msg_count ,
16915 p_data => p_msg_data );
16916
16917 END Calculate_Amounts;
16918
16919
16920 ----------------------------------------------------------------------------------------
16921 --Name: Init_Calculate_Amounts
16922 --Type: Procedure
16923 --Description: This procedure can be used to as part of load/exec/fetch concept
16924 --
16925 --
16926 --Called subprograms:
16927 --
16928 --
16929 --
16930 --
16931 --History:
16932 -- AUTUMN-1996 R. Krishnamurthy Created
16933 --
16934 --
16935 PROCEDURE Init_Calculate_Amounts IS
16936 BEGIN
16937 FND_MSG_PUB.Initialize;
16938 -- Initialize global table and record types
16939 G_calc_budget_lines_tbl_count := 0;
16940 G_calc_budget_lines_out_tbl.delete;
16941 END Init_Calculate_Amounts;
16942
16943
16944 ----------------------------------------------------------------------------------------
16945 --Name: Execute_Calculate_Amounts
16946 --Type: Procedure
16947 --Description: This procedure can be used to as part of load/exec/fetch concept
16948 --
16949 --
16950 --Called subprograms:
16951 --
16952 --
16953 --
16954 --
16955 --History:
16956 -- AUTUMN-1996 R. Krishnamurthy Created
16957 -- 25-MAR-2003 Rajagopal Modified for New Fin Plan Model
16958 --
16959 PROCEDURE Execute_Calculate_Amounts
16960 ( p_api_version_number IN NUMBER
16961 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
16962 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
16963 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
16964 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16965 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16966 ,p_tot_budget_lines_calculated OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
16967 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16968 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16969 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16970 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16971 ,p_calc_raw_cost_yn IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16972 ,p_calc_burdened_cost_yn IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16973 ,p_calc_revenue_yn IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16974 ,p_update_db_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16975 -- Bug 2863564 Parameters required for new Fin Plan Model
16976 ,p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE
16977 ,p_fin_plan_type_id IN pa_fin_plan_types_b.fin_plan_type_id%TYPE
16978 ,p_fin_plan_type_name IN pa_fin_plan_types_tl.name%TYPE
16979 ,p_version_type IN pa_budget_versions.version_type%TYPE
16980 ,p_budget_version_number IN pa_budget_versions.version_number%TYPE
16981 ) IS
16982
16983 l_api_name CONSTANT VARCHAR2(30) := 'Execute_Calculate_Amounts';
16984 --Bug 2863564 l_return_status VARCHAR2(1);
16985
16986 BEGIN
16987 -- Standard begin of API savepoint
16988 SAVEPOINT execute_calculate_amounts;
16989
16990 -- Standard call to check for call compatibility.
16991
16992 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
16993 p_api_version_number ,
16994 l_api_name ,
16995 G_PKG_NAME )
16996 THEN
16997 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16998 END IF;
16999 -- Initialize the message table if requested.
17000
17001 IF FND_API.TO_BOOLEAN( p_init_msg_list )
17002 THEN
17003 FND_MSG_PUB.initialize;
17004 END IF;
17005 -- Set API return status to success
17006 p_return_status := FND_API.G_RET_STS_SUCCESS;
17007 p_tot_budget_lines_calculated := 0;
17008
17009 Calculate_Amounts
17010 ( p_api_version_number => p_api_version_number
17011 ,p_commit => p_commit
17012 ,p_init_msg_list => p_init_msg_list
17013 ,p_msg_count => p_msg_count
17014 ,p_msg_data => p_msg_data
17015 ,p_return_status => p_return_status
17016 ,p_pm_product_code => p_pm_product_code
17017 ,p_pa_project_id => p_pa_project_id
17018 ,p_pm_project_reference => p_pm_project_reference
17019 ,p_budget_type_code => p_budget_type_code
17020 ,p_calc_raw_cost_yn => p_calc_raw_cost_yn
17021 ,p_calc_burdened_cost_yn => p_calc_burdened_cost_yn
17022 ,p_calc_revenue_yn => p_calc_revenue_yn
17023 ,p_update_db_flag => p_update_db_flag
17024 ,p_calc_budget_lines_out => G_calc_budget_lines_out_tbl
17025 -- Bug 2863564 new parameters added
17026 ,p_fin_plan_type_name => p_fin_plan_type_name
17027 ,p_fin_plan_type_id => p_fin_plan_type_id
17028 ,p_budget_version_number => p_budget_version_number
17029 ,p_version_type => p_version_type
17030 ,p_budget_version_id => p_budget_version_id
17031 );
17032
17033
17034 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17035 THEN
17036
17037 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17038
17039 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
17040 THEN
17041 RAISE FND_API.G_EXC_ERROR;
17042 END IF;
17043
17044 IF G_calc_budget_lines_out_tbl.EXISTS(1) THEN
17045 p_tot_budget_lines_calculated := G_calc_budget_lines_out_tbl.COUNT;
17046 END IF;
17047
17048 IF fnd_api.to_boolean(p_commit) THEN
17049 COMMIT;
17050 END IF;
17051 EXCEPTION
17052 WHEN FND_API.G_EXC_ERROR THEN
17053 ROLLBACK TO execute_calculate_amounts;
17054 p_return_status := FND_API.G_RET_STS_ERROR;
17055 FND_MSG_PUB.Count_And_Get
17056 ( p_count => p_msg_count ,
17057 p_data => p_msg_data );
17058 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
17059 ROLLBACK TO execute_calculate_amounts;
17060 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17061 FND_MSG_PUB.Count_And_Get
17062 ( p_count => p_msg_count ,
17063 p_data => p_msg_data );
17064 WHEN OTHERS THEN
17065 ROLLBACK TO execute_calculate_amounts;
17066 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17067 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
17068 THEN
17069 FND_MSG_PUB.add_exc_msg
17070 ( p_pkg_name => G_PKG_NAME
17071 , p_procedure_name => l_api_name );
17072 END IF;
17073
17074 FND_MSG_PUB.Count_And_Get
17075 ( p_count => p_msg_count ,
17076 p_data => p_msg_data );
17077 END Execute_Calculate_Amounts;
17078
17079
17080 ----------------------------------------------------------------------------------------
17081 --Name: fetch_calculate_amounts
17082 --Type: Procedure
17083 --Description: This procedure can be used to as part of load/exec/fetch concept
17084 --
17085 --
17086 --Called subprograms:
17087 --
17088 --
17089 --
17090 --
17091 --History:
17092 -- AUTUMN-1996 R. Krishnamurthy Created
17093 --
17094 --
17095 PROCEDURE fetch_calculate_amounts
17096 ( p_api_version_number IN NUMBER
17097 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
17098 ,p_line_index IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17099 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17100 ,p_pa_task_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17101 ,p_pm_task_reference OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17102 ,p_budget_start_date OUT NOCOPY DATE --File.Sql.39 bug 4440895
17103 ,p_budget_end_date OUT NOCOPY DATE --File.Sql.39 bug 4440895
17104 ,p_period_name OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17105 ,p_resource_list_member_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17106 ,p_quantity OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17107 ,p_resource_alias OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17108 ,p_calculated_raw_cost OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17109 ,p_calculated_burdened_cost OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17110 ,p_calculated_revenue OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17111 ,p_line_return_status OUT NOCOPY VARCHAR2
17112 ,p_cbs_element_id OUT NOCOPY NUMBER --16604257
17113 ,p_cost_code OUT NOCOPY VARCHAR2 --16604257
17114 ) IS --File.Sql.39 bug 4440895
17115
17116 l_api_name CONSTANT VARCHAR2(30) := 'fetch_calculate_amounts';
17117
17118 l_index NUMBER;
17119 i NUMBER;
17120
17121 BEGIN
17122
17123 -- Standard call to check for call compatibility.
17124
17125 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
17126 p_api_version_number ,
17127 l_api_name ,
17128 G_PKG_NAME )
17129 THEN
17130
17131 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17132
17133 END IF;
17134
17135 -- Initialize the message table if requested.
17136
17137 IF FND_API.TO_BOOLEAN( p_init_msg_list )
17138 THEN
17139
17140 FND_MSG_PUB.initialize;
17141
17142 END IF;
17143
17144 -- Set API return status to success
17145
17146 p_return_status := FND_API.G_RET_STS_SUCCESS;
17147
17148 -- Check index value,
17149 -- when they don't provide an index we will error out
17150
17151 IF p_line_index = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17152 OR p_line_index IS NULL
17153 THEN
17154 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
17155 THEN
17156 pa_interface_utils_pub.map_new_amg_msg
17157 ( p_old_message_code => 'PA_BUGDET_LINE_INDEX_MISSING'
17158 ,p_msg_attribute => 'CHANGE'
17159 ,p_resize_flag => 'Y'
17160 ,p_msg_context => 'GENERAL'
17161 ,p_attribute1 => ''
17162 ,p_attribute2 => ''
17163 ,p_attribute3 => ''
17164 ,p_attribute4 => ''
17165 ,p_attribute5 => '');
17166 END IF;
17167
17168 p_return_status := FND_API.G_RET_STS_ERROR;
17169 RAISE FND_API.G_EXC_ERROR;
17170 ELSE
17171 l_index := p_line_index;
17172 END IF;
17173
17174 -- Fix: 03-FEB-97, jwhite
17175 -- Changed references to correct global table -------------------------------
17176
17177 --assign global table fields to the outgoing parameter
17178 IF G_calc_budget_lines_out_tbl.EXISTS(l_index) THEN
17179 p_pa_task_id := G_calc_budget_lines_out_tbl(l_index).pa_task_id;
17180 p_pm_task_reference :=
17181 G_calc_budget_lines_out_tbl(l_index).pm_task_reference;
17182 p_budget_start_date :=
17183 G_calc_budget_lines_out_tbl(l_index).budget_start_date;
17184 p_budget_end_date := G_calc_budget_lines_out_tbl(l_index).budget_end_date;
17185 p_period_name := G_calc_budget_lines_out_tbl(l_index).period_name;
17186 p_resource_list_member_id := G_calc_budget_lines_out_tbl(l_index).resource_list_member_id;
17187 p_quantity := G_calc_budget_lines_out_tbl(l_index).quantity;
17188 p_resource_alias := G_calc_budget_lines_out_tbl(l_index).resource_alias;
17189 p_calculated_raw_cost :=
17190 G_calc_budget_lines_out_tbl(l_index).calculated_raw_cost;
17191 p_calculated_burdened_cost :=
17192 G_calc_budget_lines_out_tbl(l_index).calculated_burdened_cost;
17193 p_calculated_revenue :=
17194 G_calc_budget_lines_out_tbl(l_index).calculated_revenue;
17195 p_line_return_status := G_calc_budget_lines_out_tbl(l_index).return_status;
17196 --Bug 16604257 : CBS RBS Phase 2 API changes
17197 p_cbs_element_id := G_calc_budget_lines_out_tbl(l_index).cbs_element_id;
17198 p_cost_code := G_calc_budget_lines_out_tbl(l_index).cost_code;
17199
17200 END IF;
17201 -- ----------------------------------------------------------------------------------------
17202
17203 EXCEPTION
17204
17205 WHEN FND_API.G_EXC_ERROR
17206 THEN
17207 p_return_status := FND_API.G_RET_STS_ERROR;
17208
17209 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
17210 THEN
17211
17212 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17213
17214 WHEN OTHERS THEN
17215
17216 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17217
17218 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
17219 THEN
17220 FND_MSG_PUB.add_exc_msg
17221 ( p_pkg_name => G_PKG_NAME
17222 , p_procedure_name => l_api_name );
17223
17224 END IF;
17225
17226 END fetch_calculate_amounts;
17227
17228
17229 ----------------------------------------------------------------------------------------
17230 --Name: Clear_Calculate_Amounts
17231 --Type: Procedure
17232 --Description: This procedure can be used to as part of load/exec/fetch concept
17233 --
17234 --
17235 --Called subprograms:
17236 --
17237 --
17238 --
17239 --
17240 --History:
17241 -- AUTUMN-1996 R. Krishnamurthy Created
17242 --
17243 --
17244 PROCEDURE Clear_Calculate_Amounts IS
17245 BEGIN
17246 Init_Calculate_Amounts;
17247 END Clear_Calculate_Amounts;
17248
17249 ----------------------------------------------------------------------------------------
17250 --Name: fetch_calculate_amounts
17251 --Type: Procedure
17252 --Description: This procedure can be used to as part of load/exec/fetch concept
17253 --
17254 --
17255 --Called subprograms:
17256 -- fetch_calculate_amounts
17257 --
17258 --History:
17259 -- 24-MAR-2003 Rajagopal Created
17260 --
17261 PROCEDURE fetch_calculate_amounts
17262 ( p_api_version_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17263 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
17264 ,p_line_index IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17265 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17266 ,p_pa_task_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17267 ,p_pm_task_reference OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17268 ,p_budget_start_date OUT NOCOPY DATE --File.Sql.39 bug 4440895
17269 ,p_budget_end_date OUT NOCOPY DATE --File.Sql.39 bug 4440895
17270 ,p_period_name OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17271 ,p_resource_list_member_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17272 ,p_quantity OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17273 ,p_resource_alias OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17274 ,p_calculated_raw_cost OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17275 ,p_calculated_burdened_cost OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17276 ,p_calculated_revenue OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17277 ,p_line_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17278 ,p_txn_currency_code OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17279 ,p_project_raw_cost OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17280 ,p_project_burdened_cost OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17281 ,p_project_revenue OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17282 ,p_projfunc_raw_cost OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17283 ,p_projfunc_burdened_cost OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17284 ,p_projfunc_revenue OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17285 ,p_display_quantity OUT NOCOPY NUMBER --IPM Arch Enhancement Bug 4865563
17286 ,p_cbs_element_id OUT NOCOPY NUMBER --16604257
17287 ,p_cost_code OUT NOCOPY VARCHAR2 --16604257
17288 ) IS
17289
17290 l_api_name CONSTANT VARCHAR2(30) := 'fetch_calculate_amounts';
17291
17292 BEGIN
17293 p_return_status := FND_API.G_RET_STS_SUCCESS;
17294
17295 -- Call the existing fetch_calculate_amounts api
17296
17297 PA_BUDGET_PUB.fetch_calculate_amounts
17298 ( p_api_version_number => p_api_version_number
17299 ,p_init_msg_list => p_init_msg_list
17300 ,p_line_index => p_line_index
17301 ,p_return_status => p_return_status
17302 ,p_pa_task_id => p_pa_task_id
17303 ,p_pm_task_reference => p_pm_task_reference
17304 ,p_budget_start_date => p_budget_start_date
17305 ,p_budget_end_date => p_budget_end_date
17306 ,p_period_name => p_period_name
17307 ,p_resource_list_member_id => p_resource_list_member_id
17308 ,p_quantity => p_quantity
17309 ,p_resource_alias => p_resource_alias
17310 ,p_calculated_raw_cost => p_calculated_raw_cost
17311 ,p_calculated_burdened_cost => p_calculated_burdened_cost
17312 ,p_calculated_revenue => p_calculated_revenue
17313 ,p_line_return_status => p_line_return_status
17314 ,p_cbs_element_id =>p_cbs_element_id
17315 ,p_cost_code => p_cost_code);
17316
17317 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17318
17319 RAISE FND_API.G_EXC_ERROR;
17320
17321 END IF;
17322
17323 -- Fetch the txn currency code of the budget line
17324
17325 IF G_calc_budget_lines_out_tbl.EXISTS(p_line_index) THEN
17326
17327 p_txn_currency_code := G_calc_budget_lines_out_tbl(p_line_index).txn_currency_code;
17328 p_project_raw_cost := G_calc_budget_lines_out_tbl(p_line_index).project_raw_cost;
17329 p_project_burdened_cost := G_calc_budget_lines_out_tbl(p_line_index).project_burdened_cost ;
17330 p_project_revenue := G_calc_budget_lines_out_tbl(p_line_index).project_revenue;
17331 p_projfunc_raw_cost := G_calc_budget_lines_out_tbl(p_line_index).projfunc_raw_cost;
17332 p_projfunc_burdened_cost := G_calc_budget_lines_out_tbl(p_line_index).projfunc_burdened_cost;
17333 p_projfunc_revenue := G_calc_budget_lines_out_tbl(p_line_index).projfunc_revenue;
17334 p_display_quantity := G_calc_budget_lines_out_tbl(p_line_index).display_quantity; --IPM Arch Enhancement Bug 4865563
17335
17336 END IF;
17337
17338 EXCEPTION
17339
17340 WHEN FND_API.G_EXC_ERROR
17341 THEN
17342 p_return_status := FND_API.G_RET_STS_ERROR;
17343
17344 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
17345 THEN
17346
17347 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17348
17349 WHEN OTHERS THEN
17350
17351 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17352
17353 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
17354 THEN
17355 FND_MSG_PUB.add_exc_msg
17356 ( p_pkg_name => G_PKG_NAME
17357 ,p_procedure_name => l_api_name );
17358
17359 END IF;
17360 END fetch_calculate_amounts;
17361
17362 PROCEDURE CREATE_DRAFT_FINPLAN
17363 ( p_api_version_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17364 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
17365 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
17366 ,p_pm_product_code IN pa_budget_versions.pm_product_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17367 ,p_pm_finplan_reference IN pa_budget_versions.pm_budget_reference%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17368 ,p_pm_project_reference IN pa_projects_all. PM_PROJECT_REFERENCE%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17369 ,p_pa_project_id IN pa_budget_versions.project_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17370 ,p_fin_plan_type_id IN pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17371 ,p_fin_plan_type_name IN pa_fin_plan_types_vl.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17372 ,p_version_type IN pa_budget_versions.version_type%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17373 ,p_time_phased_code IN pa_proj_fp_options.cost_time_phased_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17374 ,p_resource_list_name IN pa_resource_lists.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17375 ,p_resource_list_id IN pa_budget_versions.resource_list_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17376 ,p_fin_plan_level_code IN pa_proj_fp_options.cost_fin_plan_level_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17377 ,p_plan_in_multi_curr_flag IN pa_proj_fp_options.plan_in_multi_curr_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17378 ,p_budget_version_name IN pa_budget_versions.version_name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17379 ,p_description IN pa_budget_versions.description%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17380 ,p_change_reason_code IN pa_budget_versions.change_reason_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17381 ,p_raw_cost_flag IN pa_fin_plan_amount_sets.raw_cost_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17382 ,p_burdened_cost_flag IN pa_fin_plan_amount_sets.burdened_cost_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17383 ,p_revenue_flag IN pa_fin_plan_amount_sets.revenue_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17384 ,p_cost_qty_flag IN pa_fin_plan_amount_sets.cost_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17385 ,p_revenue_qty_flag IN pa_fin_plan_amount_sets.revenue_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17386 ,p_all_qty_flag IN pa_fin_plan_amount_sets.all_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17387 ,p_create_new_curr_working_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17388 ,p_replace_current_working_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17389 ,p_using_resource_lists_flag IN VARCHAR2 DEFAULT 'N'
17390 ,p_finplan_trans_tab IN pa_budget_pub.FinPlan_Trans_Tab
17391 ,p_attribute_category IN pa_budget_versions.attribute_category%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17392 ,p_attribute1 IN pa_budget_versions.attribute1%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17393 ,p_attribute2 IN pa_budget_versions.attribute2%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17394 ,p_attribute3 IN pa_budget_versions.attribute3%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17395 ,p_attribute4 IN pa_budget_versions.attribute4%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17396 ,p_attribute5 IN pa_budget_versions.attribute5%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17397 ,p_attribute6 IN pa_budget_versions.attribute6%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17398 ,p_attribute7 IN pa_budget_versions.attribute7%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17399 ,p_attribute8 IN pa_budget_versions.attribute8%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17400 ,p_attribute9 IN pa_budget_versions.attribute9%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17401 ,p_attribute10 IN pa_budget_versions.attribute10%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17402 ,p_attribute11 IN pa_budget_versions.attribute11%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17403 ,p_attribute12 IN pa_budget_versions.attribute12%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17404 ,p_attribute13 IN pa_budget_versions.attribute13%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17405 ,p_attribute14 IN pa_budget_versions.attribute14%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17406 ,p_attribute15 IN pa_budget_versions.attribute15%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17407 ,x_finplan_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17408 ,x_return_status OUT NOCOPY VARCHAR2
17409 ,x_msg_count OUT NOCOPY NUMBER
17410 ,x_msg_data OUT NOCOPY VARCHAR2
17411 )
17412 IS
17413
17414
17415 /* SCALAR VARIABLES */
17416 l_task_number pa_tasks.task_number%TYPE;
17417 l_fp_options_id pa_proj_fp_options.proj_fp_options_id%TYPE;
17418 l_baselined_version_id pa_budget_versions.budget_version_id%TYPE;
17419 l_curr_work_version_id pa_budget_versions.budget_version_id%TYPE;
17420 l_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
17421 l_struct_elem_version_id pa_proj_elem_ver_structure.element_version_id%TYPE;
17422 l_cost_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
17423 l_rev_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
17424 l_all_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
17425 l_created_version_id pa_budget_versions.budget_version_id%TYPE;
17426 l_plan_pref_code pa_proj_fp_options.fin_plan_preference_code%TYPE;
17427 l_uncat_rlmid pa_resource_assignments.resource_list_member_id%TYPE;
17428 l_track_as_labor_flag pa_resource_list_members.track_as_labor_flag%TYPE;
17429 l_unit_of_measure pa_resource_assignments.unit_of_measure%TYPE;
17430 -- Bug Fix: 4569365. Removed MRC code.
17431 -- l_calling_context pa_mrc_finplan.g_calling_module%TYPE := PA_FP_CONSTANTS_PKG.G_CREATE_DRAFT;
17432 l_calling_context VARCHAR2(30) := PA_FP_CONSTANTS_PKG.G_CREATE_DRAFT;
17433
17434 l_plan_tran_context VARCHAR2(30);
17435 l_record_version_number pa_budget_versions.record_version_number%TYPE;
17436 l_mixed_resource_planned_flag VARCHAR2(1);
17437 l_proj_fp_options_id pa_proj_fp_options.proj_fp_options_id%TYPE;
17438 l_CW_version_id pa_budget_versions.budget_version_id%TYPE;
17439 l_CW_record_version_number pa_budget_versions.record_version_number%TYPE;
17440 l_created_ver_rec_ver_num pa_budget_versions.record_version_number%TYPE;
17441
17442 l_project_id PA_PROJECTS_ALL.PROJECT_ID%TYPE;
17443 l_resource_list_name PA_RESOURCE_LISTS.NAME%TYPE;
17444 l_resource_list_id PA_RESOURCE_LISTS.resource_list_id%TYPE;
17445
17446 l_description PA_BUDGET_VERSIONS.description%Type;
17447 l_attribute_category PA_BUDGET_VERSIONS.attribute_category%Type;
17448 l_attribute1 PA_BUDGET_VERSIONS.attribute1%Type;
17449 l_attribute2 PA_BUDGET_VERSIONS.attribute2%Type;
17450 l_attribute3 PA_BUDGET_VERSIONS.attribute2%Type;
17451 l_attribute4 PA_BUDGET_VERSIONS.attribute2%Type;
17452 l_attribute5 PA_BUDGET_VERSIONS.attribute2%Type;
17453 l_attribute6 PA_BUDGET_VERSIONS.attribute2%Type;
17454 l_attribute7 PA_BUDGET_VERSIONS.attribute2%Type;
17455 l_attribute8 PA_BUDGET_VERSIONS.attribute2%Type;
17456 l_attribute9 PA_BUDGET_VERSIONS.attribute2%Type;
17457 l_attribute10 PA_BUDGET_VERSIONS.attribute2%Type;
17458 l_attribute11 PA_BUDGET_VERSIONS.attribute2%Type;
17459 l_attribute12 PA_BUDGET_VERSIONS.attribute2%Type;
17460 l_attribute13 PA_BUDGET_VERSIONS.attribute2%Type;
17461 l_attribute14 PA_BUDGET_VERSIONS.attribute2%Type;
17462 l_attribute15 PA_BUDGET_VERSIONS.attribute2%Type;
17463 l_pm_finplan_reference pa_budget_versions.pm_budget_reference%type;
17464 l_change_reason_code pa_budget_versions.change_reason_code%type;
17465 l_budget_version_name pa_budget_versions.version_name%type;
17466 l_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE ;
17467 l_fin_plan_type_name pa_fin_plan_types_vl.name%TYPE ;
17468 l_version_type pa_budget_versions.version_type%TYPE ;
17469 l_fin_plan_level_code pa_proj_fp_options.cost_fin_plan_level_code%TYPE ;
17470 l_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE ;
17471
17472 L_RAW_COST_FLAG VARCHAR2(1);
17473 L_BURDENED_COST_FLAG VARCHAR2(1);
17474 L_REVENUE_FLAG VARCHAR2(1);
17475 L_COST_QTY_FLAG VARCHAR2(1);
17476 L_REVENUE_QTY_FLAG VARCHAR2(1);
17477
17478 L_ALL_QTY_FLAG VARCHAR2(1);
17479 L_CREATE_NEW_WORKING_FLAG VARCHAR2(1);
17480 L_REPLACE_CURRENT_WORKING_FLAG VARCHAR2(1);
17481 L_USING_RESOURCE_LISTS_FLAG VARCHAR2(1);
17482
17483 l_plan_in_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
17484 l_projfunc_cost_rate_type pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
17485 l_projfunc_cost_rate_date_typ pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE ;
17486 l_projfunc_cost_rate_date pa_proj_fp_options.projfunc_cost_rate_date%TYPE ;
17487 l_projfunc_rev_rate_type pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
17488 l_projfunc_rev_rate_date_typ pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE;
17489 l_projfunc_rev_rate_date pa_proj_fp_options.projfunc_rev_rate_date%TYPE ;
17490 l_project_cost_rate_type pa_proj_fp_options.project_cost_rate_type%TYPE ;
17491 l_project_cost_rate_date_typ pa_proj_fp_options.project_cost_rate_date_type%TYPE ;
17492 l_project_cost_rate_date pa_proj_fp_options.project_cost_rate_date%TYPE ;
17493 l_project_rev_rate_type pa_proj_fp_options.project_rev_rate_type%TYPE ;
17494 l_project_rev_rate_date_typ pa_proj_fp_options.project_rev_rate_date_type%TYPE ;
17495 l_project_rev_rate_date pa_proj_fp_options.project_rev_rate_date%TYPE ;
17496
17497 /**PLSQL TABLES**/
17498 l_pm_task_reference_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
17499 l_task_elem_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17500 l_task_number_tbl SYSTEM.PA_VARCHAR2_100_TBL_TYPE := SYSTEM.PA_VARCHAR2_100_TBL_TYPE();
17501 l_project_assignment_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17502 l_resource_alias_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
17503 l_pm_res_asgmt_ref_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
17504 l_resource_list_member_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17505 l_cbs_element_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17506 l_pm_product_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
17507 l_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
17508 l_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
17509 l_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
17510
17511 l_quantity_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17512 l_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17513 l_burdened_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17514 l_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17515 l_fp_version_ids_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17516
17517 l_attribute_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
17518 l_attribute1_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17519 l_attribute2_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17520 l_attribute3_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17521 l_attribute4_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17522 l_attribute5_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17523 l_attribute6_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17524 l_attribute7_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17525 l_attribute8_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17526 l_attribute9_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17527 l_attribute10_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17528 l_attribute11_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17529 l_attribute12_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17530 l_attribute13_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17531 l_attribute14_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17532 l_attribute15_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17533 l_attribute16_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17534 l_attribute17_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17535 l_attribute18_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17536 l_attribute19_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17537 l_attribute20_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17538 l_attribute21_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17539 l_attribute22_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17540 l_attribute23_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17541 l_attribute24_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17542 l_attribute25_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17543 l_attribute26_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17544 l_attribute27_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17545 l_attribute28_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17546 l_attribute29_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17547 l_attribute30_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17548
17549 /*=======================================================+
17550 | Used to call pa_budget_pvt.get_fin_plan_lines_status. |
17551 +=======================================================*/
17552 l_budget_lines_in pa_budget_pub.budget_line_in_tbl_type;
17553 l_budget_lines_out pa_budget_pub.budget_line_out_tbl_type;
17554
17555 /*===================================================+
17556 | Used to call pa_budget_pvt.validate_budget_lines. |
17557 +===================================================*/
17558 l_res_asg_in_tbl pa_budget_pub.budget_line_in_tbl_type;
17559 l_res_asg_out_tbl pa_budget_pub.budget_line_out_tbl_type;
17560
17561 l_allow_qty_flag VARCHAR2(1); -- Bug 3825873 Used to call validate_budget_lines
17562
17563 --fix later
17564 l_pkg_name VARCHAR2(30) := 'PA_BUDGET_PUB';
17565 g_module_name VARCHAR2(100) := 'CREATE_DRAFT_FINPLAN';
17566 l_api_name VARCHAR2(30) := 'CREATE_DRAFT_FINPLAN';
17567 l_module_name VARCHAR2(100) := 'CREATE_DRAFT_FINPLAN';
17568 l_procedure_name VARCHAR2(30) := 'CREATE_DRAFT_FINPLAN';
17569
17570 l_debug_mode VARCHAR2(1);
17571 l_msg_count NUMBER := 0;
17572 l_msg_data VARCHAR2(150);
17573 l_msg_code VARCHAR2(2000);
17574 l_msg_index_out NUMBER;
17575 l_return_status VARCHAR2(1);
17576
17577 l_user_id NUMBER :=0;
17578 t_person_id NUMBER;
17579 t_resource_id NUMBER;
17580 t_resource_name VARCHAR2(39);
17581 cnt number:=0;
17582
17583 -- added for bug Bug 3986129: FP.M Web ADI Dev changes
17584 l_mfc_cost_type_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17585 l_etc_method_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
17586 l_spread_curve_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17587
17588 --Added for bug 4224464
17589 l_budget_amount_code pa_budget_types.budget_amount_code%type;
17590
17591 l_version_info_rec pa_fp_gen_amount_utils.fp_cols;
17592
17593 --Bug 5475184. In the below set, pt stands for "plan type".
17594 l_pt_amount_set_id pa_proj_fp_options.cost_amount_set_id%TYPE;
17595 l_pt_raw_cost_flag VARCHAR2(1);
17596 l_pt_burdened_flag VARCHAR2(1);
17597 l_pt_revenue_flag VARCHAR2(1);
17598 l_pt_cost_quantity_flag VARCHAR2(1);
17599 l_pt_rev_quantity_flag VARCHAR2(1);
17600 l_pt_all_quantity_flag VARCHAR2(1);
17601 l_pt_bill_rate_flag VARCHAR2(1);
17602 l_pt_cost_rate_flag VARCHAR2(1);
17603 l_pt_burden_rate_flag VARCHAR2(1);
17604
17605 l_cbs_enabled_project varchar2(1) :='N'; -- Added for CBS 16604257
17606 BEGIN
17607
17608 --Standard begin of API savepoint
17609 SAVEPOINT create_draft_finplan_pub;
17610
17611 x_msg_count := 0;
17612 x_return_status := FND_API.G_RET_STS_SUCCESS;
17613 pa_debug.set_err_stack('PA_BUDGET_PUB.CREATE_DRAFT_FINPLAN');
17614 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
17615 l_debug_mode := NVL(l_debug_mode, 'Y');
17616
17617 IF ( l_debug_mode = 'Y' )
17618 THEN
17619 pa_debug.set_process(l_procedure_name || 'PLSQL','LOG',l_debug_mode);
17620 pa_debug.g_err_stage:='Entering CREATE_DRAFT_FINPLAN';
17621 pa_debug.write('CREATE_DRAFT_FINPLAN: ' || g_module_name,pa_debug.g_err_stage,2);
17622 END IF;
17623
17624 l_msg_count := 0;
17625 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
17626 l_module_name := 'create_draft_finplan' || g_module_name;
17627
17628 IF ( l_debug_mode = 'Y' )
17629 THEN
17630 pa_debug.set_curr_function( p_function => 'create_draft_finplan'
17631 ,p_debug_mode => l_debug_mode );
17632 END IF;
17633
17634 l_resource_list_name := p_resource_list_name ;
17635
17636 IF p_resource_list_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
17637 l_resource_list_id := NULL;
17638 ELSE
17639 l_resource_list_id := p_resource_list_id;
17640 END IF;
17641
17642
17643 IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
17644 l_fin_plan_type_id := NULL;
17645 ELSE
17646 l_fin_plan_type_id := p_fin_plan_type_id ;
17647 END IF;
17648
17649 IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17650 l_fin_plan_type_name := NULL;
17651 ELSE
17652 l_fin_plan_type_name := p_fin_plan_type_name ;
17653 END IF;
17654
17655 IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17656 l_version_type := NULL;
17657 ELSE
17658 l_version_type := p_version_type ;
17659 END IF;
17660
17661 IF p_fin_plan_level_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17662 l_fin_plan_level_code := NULL;
17663 ELSE
17664 l_fin_plan_level_code := p_fin_plan_level_code ;
17665 END IF;
17666
17667 IF p_time_phased_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17668 l_time_phased_code := NULL;
17669 ELSE
17670 l_time_phased_code := p_time_phased_code ;
17671
17672 END IF;
17673
17674 IF p_plan_in_multi_curr_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17675 l_plan_in_multi_curr_flag := NULL; --Bug 4586948.
17676 ELSE
17677 l_plan_in_multi_curr_flag := p_plan_in_multi_curr_flag ;
17678 END IF;
17679
17680 IF p_raw_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17681 l_raw_cost_flag := 'N';
17682 ELSE
17683 l_raw_cost_flag := p_raw_cost_flag ;
17684 END IF;
17685
17686 IF p_burdened_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17687 l_burdened_cost_flag := 'N';
17688 ELSE
17689 l_burdened_cost_flag := p_burdened_cost_flag ;
17690 END IF;
17691
17692 IF p_revenue_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17693 l_revenue_flag := 'N';
17694 ELSE
17695 l_revenue_flag := p_revenue_flag ;
17696 END IF;
17697
17698 IF p_cost_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17699 l_cost_qty_flag := 'N';
17700 ELSE
17701 l_cost_qty_flag := p_cost_qty_flag ;
17702 END IF;
17703
17704 IF p_revenue_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17705 l_revenue_qty_flag := 'N';
17706 ELSE
17707 l_revenue_qty_flag := p_revenue_qty_flag ;
17708 END IF;
17709
17710 IF p_all_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17711 l_all_qty_flag := 'N';
17712 ELSE
17713 l_all_qty_flag := p_all_qty_flag ;
17714 END IF;
17715
17716 IF p_create_new_curr_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17717 l_create_new_working_flag := 'N';
17718 ELSE
17719 l_create_new_working_flag := p_create_new_curr_working_flag ;
17720 END IF;
17721
17722 IF p_replace_current_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17723 l_replace_current_working_flag := 'N';
17724 ELSE
17725 l_replace_current_working_flag := p_replace_current_working_flag ;
17726 END IF;
17727
17728 IF p_using_resource_lists_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17729 l_using_resource_lists_flag := 'Y';
17730 ELSE
17731 l_using_resource_lists_flag := p_using_resource_lists_flag ;
17732 END IF;
17733
17734 IF p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17735 THEN
17736 l_attribute_category := NULL;
17737 ELSE
17738 l_attribute_category := p_attribute_category;
17739 END IF;
17740
17741 IF p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17742 THEN
17743 l_attribute1 := NULL;
17744 ELSE
17745 l_attribute1 := p_attribute1;
17746 END IF;
17747 IF p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17748 THEN
17749 l_attribute2 := NULL;
17750 ELSE
17751 l_attribute2 := p_attribute2;
17752 END IF;
17753 IF p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17754 THEN
17755 l_attribute3 := NULL;
17756 ELSE
17757 l_attribute3 := p_attribute3;
17758 END IF;
17759 IF p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17760 THEN
17761 l_attribute4 := NULL;
17762 ELSE
17763 l_attribute4 := p_attribute4;
17764 END IF;
17765
17766 IF p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17767 THEN
17768 l_attribute5 := NULL;
17769 ELSE
17770 l_attribute5 := p_attribute5;
17771 END IF;
17772
17773 IF p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17774 THEN
17775 l_attribute6 := NULL;
17776 ELSE
17777 l_attribute6 := p_attribute6;
17778 END IF;
17779
17780 IF p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17781 THEN
17782 l_attribute7 := NULL;
17783 ELSE
17784 l_attribute7 := p_attribute7;
17785 END IF;
17786
17787 IF p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17788 THEN
17789 l_attribute8 := NULL;
17790 ELSE
17791 l_attribute8 := p_attribute8;
17792 END IF;
17793
17794 IF p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17795 THEN
17796 l_attribute9 := NULL;
17797 ELSE
17798 l_attribute9 := p_attribute9;
17799 END IF;
17800
17801 IF p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17802 THEN
17803 l_attribute10 := NULL;
17804 ELSE
17805 l_attribute10 := p_attribute10;
17806 END IF;
17807
17808 IF p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17809 THEN
17810 l_attribute11 := NULL;
17811 ELSE
17812 l_attribute11 := p_attribute11;
17813 END IF;
17814
17815 IF p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17816 THEN
17817 l_attribute12 := NULL;
17818 ELSE
17819 l_attribute12 := p_attribute12;
17820 END IF;
17821
17822 IF p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17823 THEN
17824 l_attribute13 := NULL;
17825 ELSE
17826 l_attribute13 := p_attribute13;
17827 END IF;
17828
17829 IF p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17830 THEN
17831 l_attribute14:= NULL;
17832 ELSE
17833 l_attribute14:= p_attribute14;
17834 END IF;
17835
17836 IF p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17837 THEN
17838 l_attribute15 := NULL;
17839 ELSE
17840 l_attribute15 := p_attribute15;
17841 END IF;
17842
17843 IF p_pm_finplan_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17844 THEN
17845 l_pm_finplan_reference := NULL;
17846 ELSE
17847 l_pm_finplan_reference := p_pm_finplan_reference;
17848 END IF;
17849
17850 IF p_pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
17851 l_project_id := NULL;
17852 ELSE
17853 l_project_id := p_pa_project_id;
17854 END IF;
17855
17856 IF p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17857 THEN
17858 l_change_reason_code := NULL;
17859 ELSE
17860 l_change_reason_code := p_change_reason_code;
17861 END IF;
17862 -- bug 5031071
17863 IF p_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17864 THEN
17865 l_description := NULL;
17866 ELSE
17867 l_description := p_description;
17868 END IF;
17869
17870
17871
17872 l_user_id := FND_GLOBAL.User_id;
17873
17874 pa_budget_pvt.Validate_Header_Info
17875 ( p_api_version_number => p_api_version_number
17876 ,p_budget_version_name => p_budget_version_name
17877 ,p_init_msg_list => p_init_msg_list
17878 ,px_pa_project_id => l_project_id
17879 ,p_pm_project_reference => p_pm_project_reference
17880 ,p_pm_product_code => p_pm_product_code
17881 ,p_budget_type_code => NULL
17882 ,p_entry_method_code => NULL
17883 ,px_resource_list_name => l_resource_list_name
17884 ,px_resource_list_id => l_resource_list_id
17885 ,px_fin_plan_type_id => l_fin_plan_type_id
17886 ,px_fin_plan_type_name => l_fin_plan_type_name
17887 ,px_version_type => l_version_type
17888 ,px_fin_plan_level_code => l_fin_plan_level_code
17889 ,px_time_phased_code => l_time_phased_code
17890 ,px_plan_in_multi_curr_flag => l_plan_in_multi_curr_flag
17891 ,px_projfunc_cost_rate_type => l_projfunc_cost_rate_type
17892 ,px_projfunc_cost_rate_date_typ => l_projfunc_cost_rate_date_typ
17893 ,px_projfunc_cost_rate_date => l_projfunc_cost_rate_date
17894 ,px_projfunc_rev_rate_type => l_projfunc_rev_rate_type
17895 ,px_projfunc_rev_rate_date_typ => l_projfunc_rev_rate_date_typ
17896 ,px_projfunc_rev_rate_date => l_projfunc_rev_rate_date
17897 ,px_project_cost_rate_type => l_project_cost_rate_type
17898 ,px_project_cost_rate_date_typ => l_project_cost_rate_date_typ
17899 ,px_project_cost_rate_date => l_project_cost_rate_date
17900 ,px_project_rev_rate_type => l_project_rev_rate_type
17901 ,px_project_rev_rate_date_typ => l_project_rev_rate_date_typ
17902 ,px_project_rev_rate_date => l_project_rev_rate_date
17903 ,px_raw_cost_flag => l_raw_cost_flag
17904 ,px_burdened_cost_flag => l_burdened_cost_flag
17905 ,px_revenue_flag => l_revenue_flag
17906 ,px_cost_qty_flag => l_cost_qty_flag
17907 ,px_revenue_qty_flag => l_revenue_qty_flag
17908 ,px_all_qty_flag => l_all_qty_flag
17909 ,p_create_new_curr_working_flag => l_create_new_working_flag
17910 ,p_replace_current_working_flag => l_replace_current_working_flag
17911 ,p_change_reason_code => p_change_reason_code
17912 ,p_calling_module => 'PA_PM_CREATE_DRAFT_BUDGET'
17913 ,p_using_resource_lists_flag => p_using_resource_lists_flag
17914 ,x_budget_amount_code => l_budget_amount_code -- Added for bug 4224464
17915 ,x_msg_count => x_msg_count
17916 ,x_msg_data => x_msg_data
17917 ,x_return_status => x_return_status
17918 );
17919
17920 IF ( x_return_status <> FND_API.G_RET_STS_SUCCESS )
17921 THEN
17922 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17923 END IF;
17924
17925 pa_fin_plan_utils.Get_Curr_Working_Version_Info(
17926 p_project_id => l_project_id
17927 ,p_fin_plan_type_id => l_fin_plan_type_id
17928 ,p_version_type => l_version_type
17929 ,x_fp_options_id => l_fp_options_id
17930 ,x_fin_plan_version_id => l_curr_work_version_id
17931 ,x_return_status => x_return_status
17932 ,x_msg_count => x_msg_count
17933 ,x_msg_data => x_msg_data );
17934
17935 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17936 Raise PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17937 END IF;
17938
17939 IF l_debug_mode = 'Y' THEN
17940 pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,3);
17941 END IF;
17942
17943 IF (l_curr_work_version_id IS NOT NULL) THEN
17944
17945 IF nvl(p_replace_current_working_flag,'N')= 'Y' THEN
17946
17947 l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
17948 (p_budget_version_id => l_curr_work_version_id);
17949 l_user_id := FND_GLOBAL.User_id;
17950 pa_fin_plan_pvt.lock_unlock_version
17951 (p_budget_version_id => l_curr_work_version_id,
17952 p_record_version_number => l_record_version_number,
17953 p_action => 'L',
17954 p_user_id => l_user_id,
17955 p_person_id => NULL,
17956 x_return_status => x_return_status,
17957 x_msg_count => x_msg_count,
17958 x_msg_data => x_msg_data
17959 );
17960
17961 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
17962 IF l_debug_mode = 'Y' THEN
17963 pa_debug.g_err_stage := 'Error in lock unlock version - cannot delete working version';
17964 pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,5);
17965 END IF;
17966 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17967 END IF;
17968
17969 pa_fin_plan_pub.delete_version
17970 ( p_project_id => l_project_id
17971 ,p_budget_version_id => l_curr_work_version_id
17972 ,p_record_version_number => l_record_version_number
17973 ,x_return_status => x_return_status
17974 ,x_msg_count => x_msg_count
17975 ,x_msg_data => x_msg_data
17976 );
17977 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)
17978 THEN
17979 pa_debug.g_err_stage:= 'Could not delete the current working version';
17980 IF l_debug_mode = 'Y' THEN
17981 pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,
17982 PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
17983 END IF;
17984 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17985 ELSE
17986 pa_debug.g_err_stage:= 'Deleted the current working version';
17987 IF l_debug_mode = 'Y' THEN
17988 pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,
17989 PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17990 END IF;
17991 END IF;
17992 END IF; --p_replace_current_working_flag = 'Y'
17993 END IF; -- l_curr_work_version_id IS NOT NULL
17994
17995 IF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST) THEN
17996 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_COST_ONLY;
17997 ELSIF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE) THEN
17998 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_REVENUE_ONLY;
17999 ELSIF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL) THEN
18000 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_COST_AND_REV_SAME;
18001 END IF;
18002
18003 IF l_debug_mode = 'Y' THEN
18004 pa_debug.g_err_stage:= 'Preference code is [' || l_plan_pref_code || ']';
18005 pa_debug.write(l_procedure_name ||
18006 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18007 END IF;
18008
18009 --Bug 5475184. The below block will be used to get the cost/bill rate flags from the plan type option.
18010 --These flags will be set for the new plan version that will be created instead of always setting
18011 --the value 'Y' for these flags in the plan version. Please note that except for these rate flags, other
18012 --amount flags can be passed as input parameters to this API
18013
18014 --Get the amount set id from the plan type option.
18015 SELECT DECODE(l_version_type,
18016 PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST, cost_amount_set_id,
18017 PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE, revenue_amount_set_id,
18018 PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL, all_amount_set_id)
18019 INTO l_pt_amount_set_id
18020 FROM pa_proj_fp_options
18021 WHERE project_id=l_project_id
18022 AND fin_plan_type_id=l_fin_plan_type_id
18023 AND fin_plan_version_id IS NULL;
18024
18025 IF l_debug_mode = 'Y' THEN
18026 pa_debug.g_err_stage:= 'Plan Type amount set id is [' || l_pt_amount_set_id || ']';
18027 pa_debug.write(l_procedure_name ||
18028 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18029 END IF;
18030
18031 --Get the plan type flag values
18032 pa_fin_plan_utils.get_plan_amount_flags (
18033 p_amount_set_id => l_pt_amount_set_id,
18034 x_raw_cost_flag => l_pt_raw_cost_flag,
18035 x_burdened_flag => l_pt_burdened_flag,
18036 x_revenue_flag => l_pt_revenue_flag,
18037 x_cost_quantity_flag => l_pt_cost_quantity_flag,
18038 x_rev_quantity_flag => l_pt_rev_quantity_flag,
18039 x_all_quantity_flag => l_pt_all_quantity_flag,
18040 x_bill_rate_flag => l_pt_bill_rate_flag,
18041 x_cost_rate_flag => l_pt_cost_rate_flag,
18042 x_burden_rate_flag => l_pt_burden_rate_flag,
18043 x_message_count => x_msg_count,
18044 x_return_status => x_return_status,
18045 x_message_data => x_msg_data);
18046
18047 IF l_debug_mode = 'Y' THEN
18048 pa_debug.g_err_stage:= 'Return status from pa_fin_plan_utils.get_plan_amount_flags is [' || x_return_status || ']';
18049 pa_debug.write(l_procedure_name ||
18050 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18051
18052 pa_debug.g_err_stage:= 'l_pt_bill_rate_flag is [' || l_pt_bill_rate_flag || ']';
18053 pa_debug.write(l_procedure_name ||
18054 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18055
18056 pa_debug.g_err_stage:= 'l_pt_cost_rate_flag is [' || l_pt_cost_rate_flag || ']';
18057 pa_debug.write(l_procedure_name ||
18058 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18059
18060 pa_debug.g_err_stage:= 'l_pt_burden_rate_flag is [' || l_pt_burden_rate_flag || ']';
18061 pa_debug.write(l_procedure_name ||
18062 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18063
18064 END IF;
18065
18066 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
18067
18068 pa_debug.g_err_stage:= 'pa_fin_plan_utils.get_plan_amount_flags returned error';
18069 IF l_debug_mode = 'Y' THEN
18070 pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,
18071 PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
18072 END IF;
18073 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18074
18075 END IF;
18076
18077 --Bug 5475184. End of derivation logic for bill/cost rate flags from plan type option.
18078
18079 /* Bug 5478041: Modified the following 6 variables from parameterized variables to
18080 local variables : l_raw_cost_flag,l_burdened_cost_flag,l_revenue_flag,l_cost_qty_flag
18081 l_revenue_qty_flag and l_all_qty_flag*/
18082
18083 pa_fin_plan_utils.GET_OR_CREATE_AMOUNT_SET_ID
18084 (
18085 p_raw_cost_flag => l_raw_cost_flag
18086 ,p_burdened_cost_flag => l_burdened_cost_flag
18087 ,p_revenue_flag => l_revenue_flag
18088 ,p_cost_qty_flag => l_cost_qty_flag
18089 ,p_revenue_qty_flag => l_revenue_qty_flag
18090 ,p_all_qty_flag => l_all_qty_flag
18091 ,p_plan_pref_code => l_plan_pref_code
18092 ,p_bill_rate_flag => /*'Y'*/ l_pt_bill_rate_flag --Bug 5475184
18093 ,p_cost_rate_flag => /*'Y'*/ l_pt_cost_rate_flag --Bug 5475184
18094 ,p_burden_rate_flag => /*'Y'*/ l_pt_burden_rate_flag --Bug 5475184
18095 ,x_cost_amount_set_id => l_cost_amount_set_id
18096 ,x_revenue_amount_set_id => l_rev_amount_set_id
18097 ,x_all_amount_set_id => l_all_amount_set_id
18098 ,x_message_count => x_msg_count
18099 ,x_return_status => x_return_status
18100 ,x_message_data => x_msg_data
18101 );
18102 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
18103 IF l_debug_mode = 'Y' THEN
18104 pa_debug.g_err_stage := 'Error in pa_fin_plan_utils.GET_OR_CREATE_AMOUNT_SET_ID';
18105 pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,5);
18106 END IF;
18107 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18108 END IF;
18109
18110 -- bug 3825873 populating l_allow_qty_flag to call validate_budget_lines
18111
18112 IF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST)
18113 THEN
18114 l_amount_set_id := l_cost_amount_set_id;
18115 l_allow_qty_flag := l_cost_qty_flag; -- p_cost_qty_flag; Bug 5478041
18116 ELSIF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE)
18117 THEN
18118 l_amount_set_id := l_rev_amount_set_id;
18119 l_allow_qty_flag := l_revenue_qty_flag; -- p_revenue_qty_flag;Bug 5478041
18120 ELSIF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL)
18121 THEN
18122 l_amount_set_id := l_all_amount_set_id;
18123 l_allow_qty_flag := l_all_qty_flag; -- p_all_qty_flag; Bug 5478041
18124 END IF;
18125
18126 IF l_debug_mode = 'Y' THEN
18127 pa_debug.g_err_stage:= 'Amount set id is [' || l_amount_set_id || ']';
18128 pa_debug.write(l_procedure_name ||
18129 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18130 END IF;
18131
18132 l_struct_elem_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
18133
18134 IF l_debug_mode = 'Y' THEN
18135 pa_debug.g_err_stage:= 'l_struct_elem_version_id is [' || l_struct_elem_version_id || ']';
18136 pa_debug.write(l_procedure_name ||
18137 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18138 END IF;
18139
18140 l_created_version_id := NULL;
18141
18142
18143 IF l_debug_mode = 'Y' THEN
18144 pa_debug.g_err_stage:= 'Calling Create_Version';
18145 pa_debug.write(l_procedure_name ||
18146 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
18147 END IF;
18148
18149 --dbms_output.put_line('calling pa_fin_plan_pub.Create_Version');
18150 pa_fin_plan_pub.Create_Version (
18151 p_project_id => l_project_id
18152 ,p_fin_plan_type_id => l_fin_plan_type_id
18153 ,p_element_type => l_version_type
18154 ,p_version_name => p_budget_version_name
18155 ,p_description => l_description -- bug 5031071
18156 ,p_ci_id => NULL
18157 ,p_est_proj_raw_cost => NULL
18158 ,p_est_proj_bd_cost => NULL
18159 ,p_est_proj_revenue => NULL
18160 ,p_est_qty => NULL
18161 ,p_est_equip_qty => NULL
18162 ,p_impacted_task_id => NULL
18163 ,p_agreement_id => NULL
18164 ,p_calling_context => l_calling_context
18165 ,p_resource_list_id => l_resource_list_id
18166 ,p_time_phased_code => l_time_phased_code
18167 ,p_fin_plan_level_code => l_fin_plan_level_code /* Bug 6085160 p_fin_plan_level_code */
18168 ,p_plan_in_multi_curr_flag => l_plan_in_multi_curr_flag /*Bug 4290310. p_plan_in_multi_curr_flag. Passing the
18169 l_plan_in_multi_curr_flag as create_version doesnt handle the conversion of G_MISS_XXX values for this variable. Also
18170 l_plan_in_multi_curr_flag is a validated o/p variable from validate_header_info*/
18171 ,p_amount_set_id => l_amount_set_id
18172 ,p_attribute_category => l_attribute_category
18173 ,p_attribute1 => l_attribute1
18174 ,p_attribute2 => l_attribute2
18175 ,p_attribute3 => l_attribute3
18176 ,p_attribute4 => l_attribute4
18177 ,p_attribute5 => l_attribute5
18178 ,p_attribute6 => l_attribute6
18179 ,p_attribute7 => l_attribute7
18180 ,p_attribute8 => l_attribute8
18181 ,p_attribute9 => l_attribute9
18182 ,p_attribute10 => l_attribute10
18183 ,p_attribute11 => l_attribute11
18184 ,p_attribute12 => l_attribute12
18185 ,p_attribute13 => l_attribute13
18186 ,p_attribute14 => l_attribute14
18187 ,p_attribute15 => l_attribute15
18188 ,px_budget_version_id => l_created_version_id
18189 ,p_struct_elem_version_id => NULL --l_struct_elem_version_id commented for bug 5451269
18190 ,p_pm_product_code => p_pm_product_code
18191 ,p_finplan_reference => l_pm_finplan_reference
18192 ,p_change_reason_code => l_change_reason_code
18193 ,x_proj_fp_option_id => l_fp_options_id
18194 ,x_return_status => x_return_status
18195 ,x_msg_count => x_msg_count
18196 ,x_msg_data => x_msg_data );
18197
18198 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
18199 pa_debug.g_err_stage:= 'Error Create_Version';
18200 IF l_debug_mode = 'Y' THEN
18201 pa_debug.write( l_procedure_name ||
18202 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
18203 END IF;
18204 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18205 END IF;
18206 --dbms_output.put_line('after calling pa_fin_plan_pub.Create_Version l_created_version_id is [' || to_char(l_created_version_id) ||']');
18207 /*========================================================+
18208 | Prepare to call pa_budget_pvt.validate_budget_lines() |
18209 *========================================================*/
18210 IF ( p_finplan_trans_tab.COUNT > 0 )
18211 THEN
18212 FOR i IN p_finplan_trans_tab.FIRST .. p_finplan_trans_tab.LAST
18213 LOOP
18214 l_res_asg_in_tbl(i).pm_product_code := p_finplan_trans_tab(i).pm_product_code;
18215 l_res_asg_in_tbl(i).pa_task_id := p_finplan_trans_tab(i).task_id;
18216 l_res_asg_in_tbl(i).pm_task_reference := p_finplan_trans_tab(i).pm_task_reference;
18217 l_res_asg_in_tbl(i).resource_alias := p_finplan_trans_tab(i).resource_alias;
18218 l_res_asg_in_tbl(i).resource_list_member_id := p_finplan_trans_tab(i).resource_list_member_id;
18219 l_res_asg_in_tbl(i).cbs_element_id := p_finplan_trans_tab(i).cbs_element_id;
18220 l_res_asg_in_tbl(i).cost_code := p_finplan_trans_tab(i).cost_code;
18221 l_res_asg_in_tbl(i).budget_start_date := p_finplan_trans_tab(i).start_date;
18222 l_res_asg_in_tbl(i).budget_end_date := p_finplan_trans_tab(i).end_date;
18223 l_res_asg_in_tbl(i).raw_cost := p_finplan_trans_tab(i).raw_cost;
18224 l_res_asg_in_tbl(i).burdened_cost := p_finplan_trans_tab(i).burdened_Cost;
18225 l_res_asg_in_tbl(i).revenue := p_finplan_trans_tab(i).revenue;
18226 l_res_asg_in_tbl(i).quantity := p_finplan_trans_tab(i).quantity;
18227 l_res_asg_in_tbl(i).attribute_category := p_finplan_trans_tab(i).attribute_category;
18228 l_res_asg_in_tbl(i).txn_currency_code := p_finplan_trans_tab(i).currency_code;
18229 l_res_asg_in_tbl(i).period_name := NULL;
18230 l_res_asg_in_tbl(i).description := NULL;
18231 l_res_asg_in_tbl(i).pm_budget_line_reference := NULL;
18232 l_res_asg_in_tbl(i).attribute1 := NULL;
18233 l_res_asg_in_tbl(i).attribute2 := NULL;
18234 l_res_asg_in_tbl(i).attribute3 := NULL;
18235 l_res_asg_in_tbl(i).attribute4 := NULL;
18236 l_res_asg_in_tbl(i).attribute5 := NULL;
18237 l_res_asg_in_tbl(i).attribute6 := NULL;
18238 l_res_asg_in_tbl(i).attribute7 := NULL;
18239 l_res_asg_in_tbl(i).attribute8 := NULL;
18240 l_res_asg_in_tbl(i).attribute9 := NULL;
18241 l_res_asg_in_tbl(i).attribute10 := NULL;
18242 l_res_asg_in_tbl(i).attribute11 := NULL;
18243 l_res_asg_in_tbl(i).attribute12 := NULL;
18244 l_res_asg_in_tbl(i).attribute13 := NULL;
18245 l_res_asg_in_tbl(i).attribute14 := NULL;
18246 l_res_asg_in_tbl(i).attribute15 := NULL;
18247 l_res_asg_in_tbl(i).projfunc_cost_rate_type := NULL;
18248 l_res_asg_in_tbl(i).projfunc_cost_rate_date_type := NULL;
18249 l_res_asg_in_tbl(i).projfunc_cost_rate_date := NULL;
18250 l_res_asg_in_tbl(i).projfunc_cost_exchange_rate := NULL;
18251 l_res_asg_in_tbl(i).projfunc_rev_rate_type := NULL;
18252 l_res_asg_in_tbl(i).projfunc_rev_rate_date_type := NULL;
18253 l_res_asg_in_tbl(i).projfunc_rev_rate_date := NULL;
18254 l_res_asg_in_tbl(i).projfunc_rev_exchange_rate := NULL;
18255 l_res_asg_in_tbl(i).project_cost_rate_type := NULL;
18256 l_res_asg_in_tbl(i).project_cost_rate_date_type := NULL;
18257 l_res_asg_in_tbl(i).project_cost_rate_date := NULL;
18258 l_res_asg_in_tbl(i).project_cost_exchange_rate := NULL;
18259 l_res_asg_in_tbl(i).project_rev_rate_type := NULL;
18260 l_res_asg_in_tbl(i).project_rev_rate_date_type := NULL;
18261 l_res_asg_in_tbl(i).project_rev_rate_date := NULL;
18262 l_res_asg_in_tbl(i).project_rev_exchange_rate := NULL;
18263 l_res_asg_in_tbl(i).change_reason_code := NULL;
18264 END LOOP;
18265
18266 l_version_info_rec.x_budget_version_id := l_created_version_id; -- Added for bug 4290310
18267 /* Bug 5478041: Modified the following 3 variables from parameterized variables to
18268 local variables : l_raw_cost_flag,l_burdened_cost_flag,l_revenue_flag */
18269 --dbms_output.put_line('calling pa_budget_pvt.Validate_Budget_Lines');
18270
18271 --Get the CBS flag 16604257
18272 l_cbs_enabled_project := PA_ALTERNATE_TASK_PVT.Is_Cbs_Enabled(p_Project_Id => l_project_id);
18273
18274 pa_budget_pvt.Validate_Budget_Lines
18275 (p_calling_context => 'RES_ASSGNMT_LEVEL_VALIDATION'
18276 ,p_pa_project_id => l_project_id
18277 ,p_budget_type_code => NULL
18278 ,p_fin_plan_type_id => l_fin_plan_type_id
18279 ,p_version_type => l_version_type
18280 ,p_resource_list_id => l_resource_list_id
18281 ,p_time_phased_code => l_time_phased_code
18282 ,p_budget_entry_method_code => NULL
18283 ,p_entry_level_code => l_fin_plan_level_code --Bug#5510196
18284 ,p_allow_qty_flag => l_allow_qty_flag-- bug 3825873 p_cost_qty_flag
18285 ,p_allow_raw_cost_flag => l_raw_cost_flag
18286 ,p_allow_burdened_cost_flag => l_burdened_cost_flag
18287 ,p_allow_revenue_flag => l_revenue_flag
18288 ,p_multi_currency_flag => l_plan_in_multi_curr_flag /*Bug 4290310.p_plan_in_multi_curr_flag. Passing
18289 the l_plan_in_multi_curr_flag as validate_budget_lines doesnt handle the conversion of G_MISS_XXX values for this variable.
18290 Also l_plan_in_multi_curr_flag is a validated o/p variable from validate_header_info*/
18291 ,p_project_cost_rate_type => NULL
18292 ,p_project_cost_rate_date_typ => NULL
18293 ,p_project_cost_rate_date => NULL
18294 ,p_project_cost_exchange_rate => NULL
18295 ,p_projfunc_cost_rate_type => NULL
18296 ,p_projfunc_cost_rate_date_typ => NULL
18297 ,p_projfunc_cost_rate_date => NULL
18298 ,p_projfunc_cost_exchange_rate => NULL
18299 ,p_project_rev_rate_type => NULL
18300 ,p_project_rev_rate_date_typ => NULL
18301 ,p_project_rev_rate_date => NULL
18302 ,p_project_rev_exchange_rate => NULL
18303 ,p_projfunc_rev_rate_type => NULL
18304 ,p_projfunc_rev_rate_date_typ => NULL
18305 ,p_projfunc_rev_rate_date => NULL
18306 ,p_projfunc_rev_exchange_rate => NULL
18307 ,p_version_info_rec => l_version_info_rec --Added for bug 4290310.
18308 ,px_budget_lines_in => l_res_asg_in_tbl
18309 ,x_budget_lines_out => l_res_asg_out_tbl
18310 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
18311 ,x_etc_method_code_tbl => l_etc_method_code_tbl
18312 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
18313 ,x_msg_count => l_msg_count
18314 ,x_msg_data => l_msg_data
18315 ,x_return_status => l_return_status);
18316
18317 IF(l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
18318 --dbms_output.put_line('error occurred while calling pa_budget_pvt.Validate_Budget_Lines');
18319 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18320 END IF;
18321
18322 END IF; -- p_finplan_trans_tab.COUNT > 0
18323 --dbms_output.put_line('after calling pa_budget_pvt.Validate_Budget_Lines');
18324
18325 /* Calling Add Planning Transaction */
18326
18327 cnt := P_finplan_trans_tab.COUNT;
18328
18329 l_task_number_tbl.EXTEND(cnt);
18330 l_task_elem_version_id_tbl.EXTEND(cnt);
18331 l_pm_task_reference_tbl.EXTEND(cnt);
18332 l_resource_list_member_id_tbl.EXTEND(cnt);
18333 l_cbs_element_id_tbl.EXTEND(cnt); --Bug 16604257 : CBS RBS Phase 2 API changes
18334 l_pm_res_asgmt_ref_tbl.EXTEND(cnt);
18335 l_currency_code_tbl.EXTEND(cnt);
18336 l_pm_product_code_tbl.EXTEND(cnt);
18337
18338 l_start_date_tbl.EXTEND(cnt);
18339 l_end_date_tbl.EXTEND(cnt);
18340
18341 l_quantity_tbl.EXTEND(cnt);
18342 l_raw_cost_tbl.EXTEND(cnt);
18343 l_burdened_cost_tbl.EXTEND(cnt);
18344 l_revenue_tbl.EXTEND(cnt);
18345
18346 l_attribute_category_tbl.EXTEND(cnt);
18347 l_attribute1_tbl.EXTEND(cnt);
18348 l_attribute2_tbl.EXTEND(cnt);
18349 l_attribute3_tbl.EXTEND(cnt);
18350 l_attribute4_tbl.EXTEND(cnt);
18351 l_attribute5_tbl.EXTEND(cnt);
18352 l_attribute6_tbl.EXTEND(cnt);
18353 l_attribute7_tbl.EXTEND(cnt);
18354 l_attribute8_tbl.EXTEND(cnt);
18355 l_attribute9_tbl.EXTEND(cnt);
18356 l_attribute10_tbl.EXTEND(cnt);
18357 l_attribute11_tbl.EXTEND(cnt);
18358 l_attribute12_tbl.EXTEND(cnt);
18359 l_attribute13_tbl.EXTEND(cnt);
18360 l_attribute14_tbl.EXTEND(cnt);
18361 l_attribute15_tbl.EXTEND(cnt);
18362 l_attribute16_tbl.EXTEND(cnt);
18363 l_attribute17_tbl.EXTEND(cnt);
18364 l_attribute18_tbl.EXTEND(cnt);
18365 l_attribute19_tbl.EXTEND(cnt);
18366 l_attribute20_tbl.EXTEND(cnt);
18367 l_attribute21_tbl.EXTEND(cnt);
18368 l_attribute22_tbl.EXTEND(cnt);
18369 l_attribute23_tbl.EXTEND(cnt);
18370 l_attribute24_tbl.EXTEND(cnt);
18371 l_attribute25_tbl.EXTEND(cnt);
18372 l_attribute26_tbl.EXTEND(cnt);
18373 l_attribute27_tbl.EXTEND(cnt);
18374 l_attribute28_tbl.EXTEND(cnt);
18375 l_attribute29_tbl.EXTEND(cnt);
18376 l_attribute30_tbl.EXTEND(cnt);
18377
18378 IF P_finplan_trans_tab.COUNT > 0 THEN -- Added for Bug 3793370
18379 FOR i in 1 .. P_finplan_trans_tab.LAST
18380 LOOP
18381 IF ( P_finplan_trans_tab(i).task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18382 OR P_finplan_trans_tab(i).task_id = 0 ) -- Added for Bug 8688677
18383 THEN
18384 l_task_number_tbl(i) := NULL;
18385 ELSE
18386 BEGIN
18387 SELECT t.task_number
18388 INTO l_task_number
18389 FROM pa_tasks t
18390 WHERE t.task_id = P_finplan_trans_tab(i).task_id;
18391 l_task_number_tbl(i) := l_task_number;
18392
18393 EXCEPTION
18394 WHEN OTHERS THEN
18395 RAISE;
18396 END; -- anonymous
18397 END IF;
18398
18399 IF P_finplan_trans_tab(i).pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18400 l_pm_task_reference_tbl(i) := NULL;
18401 ELSE
18402 l_pm_task_reference_tbl(i) := P_finplan_trans_tab(i).pm_task_reference;
18403 END IF;
18404 IF P_finplan_trans_tab(i).CURRENCY_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18405 l_currency_code_tbl(i) := NULL;
18406 ELSE
18407 l_currency_code_tbl(i) := P_finplan_trans_tab(i).CURRENCY_CODE;
18408 END IF;
18409
18410 IF P_finplan_trans_tab(i).pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18411 l_pm_product_code_tbl(i) := NULL;
18412 ELSE
18413 l_pm_product_code_tbl(i) := P_finplan_trans_tab(i).pm_product_code;
18414 END IF;
18415
18416 IF ( P_finplan_trans_tab(i).task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR l_struct_elem_version_id IS NULL
18417 OR P_finplan_trans_tab(i).task_id = 0 ) -- Added for Bug 8688677
18418 THEN
18419 l_task_elem_version_id_tbl(i) := NULL;
18420 ELSE
18421 BEGIN
18422 SELECT element_version_id
18423 INTO l_task_elem_version_id_tbl(i)
18424 FROM pa_struct_task_wbs_v
18425 WHERE parent_structure_version_id = l_struct_elem_version_id
18426 AND project_id = l_project_id
18427 AND task_id = P_finplan_trans_tab(i).task_id;
18428 EXCEPTION
18429 WHEN OTHERS THEN RAISE;
18430 END; -- anonymous
18431 END IF;
18432
18433 /* Commented out the code for Bug 5079329.
18434 IF P_finplan_trans_tab(i).resource_list_member_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18435 l_resource_list_member_id_tbl(i) := NULL;
18436 ELSE
18437 l_resource_list_member_id_tbl(i) := P_finplan_trans_tab(i).resource_list_member_id;
18438 END IF;
18439 */
18440
18441 /* Added for Bug 5079329*/
18442 l_resource_list_member_id_tbl(i) := l_res_asg_in_tbl(i).resource_list_member_id;
18443 l_cbs_element_id_tbl(i) := l_res_asg_in_tbl(i).cbs_element_id; --Bug 16604257 : CBS RBS Phase 2 API changes
18444
18445 IF P_finplan_trans_tab(i).PM_RES_ASGMT_REFERENCE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18446 l_pm_res_asgmt_ref_tbl(i) := NULL;
18447 ELSE
18448 l_pm_res_asgmt_ref_tbl(i) := P_finplan_trans_tab(i).PM_RES_ASGMT_REFERENCE;
18449 END IF;
18450
18451
18452 IF P_finplan_trans_tab(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18453 l_start_date_tbl(i) := NULL;
18454 ELSE
18455 l_start_date_tbl(i) := P_finplan_trans_tab(i).start_date;
18456 END IF;
18457
18458 IF P_finplan_trans_tab(i).end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18459 l_end_date_tbl(i) := NULL;
18460 ELSE
18461 l_end_date_tbl(i) := P_finplan_trans_tab(i).end_date;
18462 END IF;
18463
18464 IF P_finplan_trans_tab(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18465 l_quantity_tbl(i) := NULL;
18466 ELSE
18467 l_quantity_tbl(i) := P_finplan_trans_tab(i).quantity;
18468 END IF;
18469
18470 IF P_finplan_trans_tab(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18471 l_raw_cost_tbl(i) := NULL;
18472 ELSE
18473 l_raw_cost_tbl(i) := P_finplan_trans_tab(i).raw_cost;
18474 END IF;
18475
18476 IF P_finplan_trans_tab(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18477 l_burdened_cost_tbl(i) := NULL;
18478 ELSE
18479 l_burdened_cost_tbl(i) := P_finplan_trans_tab(i).burdened_cost;
18480 END IF;
18481
18482 IF P_finplan_trans_tab(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18483 L_revenue_tbl(i) := NULL;
18484 ELSE
18485 l_revenue_tbl(i) := P_finplan_trans_tab(i).revenue;
18486 END IF;
18487
18488 --When descriptive flex fields are not passed set them to NULL
18489
18490 IF P_finplan_trans_tab(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18491 l_attribute_category_tbl(i) := NULL;
18492 ELSE
18493 l_attribute_category_tbl(i) := P_finplan_trans_tab(i).attribute_category;
18494 END IF;
18495
18496 IF P_finplan_trans_tab(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18497 l_attribute1_tbl(i) := NULL;
18498 ELSE
18499 l_attribute1_tbl(i) := P_finplan_trans_tab(i).attribute1;
18500 END IF;
18501
18502 IF P_finplan_trans_tab(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18503 l_attribute2_tbl(i) := NULL;
18504 ELSE
18505 l_attribute2_tbl(i) := P_finplan_trans_tab(i).attribute2;
18506 END IF;
18507
18508 IF P_finplan_trans_tab(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18509 l_attribute3_tbl(i) := NULL;
18510 ELSE
18511 l_attribute3_tbl(i) := P_finplan_trans_tab(i).attribute3;
18512 END IF;
18513
18514 IF P_finplan_trans_tab(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18515 l_attribute4_tbl(i) := NULL;
18516 ELSE
18517 l_attribute4_tbl(i) := P_finplan_trans_tab(i).attribute4;
18518 END IF;
18519
18520 IF P_finplan_trans_tab(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18521 l_attribute5_tbl(i) := NULL;
18522 ELSE
18523 l_attribute5_tbl(i) := P_finplan_trans_tab(i).attribute5;
18524 END IF;
18525
18526 IF P_finplan_trans_tab(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18527 l_attribute6_tbl(i) := NULL;
18528 ELSE
18529 l_attribute6_tbl(i) := P_finplan_trans_tab(i).attribute6;
18530 END IF;
18531
18532 IF P_finplan_trans_tab(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18533 l_attribute7_tbl(i) := NULL;
18534 ELSE
18535 l_attribute7_tbl(i) := P_finplan_trans_tab(i).attribute7;
18536 END IF;
18537
18538 IF P_finplan_trans_tab(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18539 l_attribute8_tbl(i) := NULL;
18540 ELSE
18541 l_attribute8_tbl(i) := P_finplan_trans_tab(i).attribute8;
18542 END IF;
18543
18544 IF P_finplan_trans_tab(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18545 l_attribute9_tbl(i) := NULL;
18546 ELSE
18547 l_attribute9_tbl(i) := P_finplan_trans_tab(i).attribute9;
18548 END IF;
18549
18550 IF P_finplan_trans_tab(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18551 l_attribute10_tbl(i) := NULL;
18552 ELSE
18553 l_attribute10_tbl(i) := P_finplan_trans_tab(i).attribute10;
18554 END IF;
18555
18556 IF P_finplan_trans_tab(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18557 l_attribute11_tbl(i) := NULL;
18558 ELSE
18559 l_attribute11_tbl(i) := P_finplan_trans_tab(i).attribute11;
18560 END IF;
18561
18562 IF P_finplan_trans_tab(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18563 l_attribute12_tbl(i) := NULL;
18564 ELSE
18565 l_attribute12_tbl(i) := P_finplan_trans_tab(i).attribute12;
18566 END IF;
18567
18568 IF P_finplan_trans_tab(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18569 l_attribute13_tbl(i) := NULL;
18570 ELSE
18571 l_attribute13_tbl(i) := P_finplan_trans_tab(i).attribute13;
18572 END IF;
18573
18574 IF P_finplan_trans_tab(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18575 l_attribute14_tbl(i) := NULL;
18576 ELSE
18577 l_attribute14_tbl(i) := P_finplan_trans_tab(i).attribute14;
18578 END IF;
18579
18580 IF P_finplan_trans_tab(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18581 l_attribute15_tbl(i) := NULL;
18582 ELSE
18583 l_attribute15_tbl(i) := P_finplan_trans_tab(i).attribute15;
18584 END IF;
18585
18586 IF P_finplan_trans_tab(i).attribute16 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18587 l_attribute16_tbl(i) := NULL;
18588 ELSE
18589 l_attribute16_tbl(i) := P_finplan_trans_tab(i).attribute16;
18590 END IF;
18591
18592 IF P_finplan_trans_tab(i).attribute17 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18593 l_attribute17_tbl(i) := NULL;
18594 ELSE
18595 l_attribute17_tbl(i) := P_finplan_trans_tab(i).attribute17;
18596 END IF;
18597
18598 IF P_finplan_trans_tab(i).attribute18 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18599 l_attribute18_tbl(i) := NULL;
18600 ELSE
18601 l_attribute18_tbl(i) := P_finplan_trans_tab(i).attribute18;
18602 END IF;
18603
18604 IF P_finplan_trans_tab(i).attribute19 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18605 l_attribute19_tbl(i) := NULL;
18606 ELSE
18607 l_attribute19_tbl(i) := P_finplan_trans_tab(i).attribute19;
18608 END IF;
18609
18610 IF P_finplan_trans_tab(i).attribute20 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18611 l_attribute20_tbl(i) := NULL;
18612 ELSE
18613 l_attribute20_tbl(i) := P_finplan_trans_tab(i).attribute20;
18614 END IF;
18615
18616 IF P_finplan_trans_tab(i).attribute21 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18617 l_attribute21_tbl(i) := NULL;
18618 ELSE
18619 l_attribute21_tbl(i) := P_finplan_trans_tab(i).attribute21;
18620 END IF;
18621
18622 IF P_finplan_trans_tab(i).attribute22 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18623 l_attribute22_tbl(i) := NULL;
18624 ELSE
18625 l_attribute22_tbl(i) := P_finplan_trans_tab(i).attribute22;
18626 END IF;
18627
18628 IF P_finplan_trans_tab(i).attribute23 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18629 l_attribute23_tbl(i) := NULL;
18630 ELSE
18631 l_attribute23_tbl(i) := P_finplan_trans_tab(i).attribute23;
18632 END IF;
18633
18634 IF P_finplan_trans_tab(i).attribute24 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18635 l_attribute24_tbl(i) := NULL;
18636 ELSE
18637 l_attribute24_tbl(i) := P_finplan_trans_tab(i).attribute24;
18638 END IF;
18639
18640 IF P_finplan_trans_tab(i).attribute25 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18641 l_attribute25_tbl(i) := NULL;
18642 ELSE
18643 l_attribute25_tbl(i) := P_finplan_trans_tab(i).attribute25;
18644 END IF;
18645
18646 IF P_finplan_trans_tab(i).attribute26 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18647 l_attribute26_tbl(i) := NULL;
18648 ELSE
18649 l_attribute26_tbl(i) := P_finplan_trans_tab(i).attribute26;
18650 END IF;
18651
18652 IF P_finplan_trans_tab(i).attribute27 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18653 l_attribute27_tbl(i) := NULL;
18654 ELSE
18655 l_attribute27_tbl(i) := P_finplan_trans_tab(i).attribute27;
18656 END IF;
18657
18658 IF P_finplan_trans_tab(i).attribute28 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18659 l_attribute28_tbl(i) := NULL;
18660 ELSE
18661 l_attribute28_tbl(i) := P_finplan_trans_tab(i).attribute28;
18662 END IF;
18663
18664 IF P_finplan_trans_tab(i).attribute29 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18665 l_attribute29_tbl(i) := NULL;
18666 ELSE
18667 l_attribute29_tbl(i) := P_finplan_trans_tab(i).attribute29;
18668 END IF;
18669
18670 IF P_finplan_trans_tab(i).attribute30 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18671 l_attribute30_tbl(i) := NULL;
18672 ELSE
18673 l_attribute30_tbl(i) := P_finplan_trans_tab(i).attribute30;
18674 END IF;
18675
18676
18677 END LOOP;
18678
18679 Select decode(plan_class_code,
18680 'BUDGET',PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,
18681 'FORECAST',PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)
18682 Into l_plan_tran_context
18683 From pa_fin_plan_types_b
18684 Where fin_plan_type_id = l_fin_plan_type_id;
18685
18686 /* Calling Add Planning Transaction API */
18687
18688
18689 --dbms_output.put_line('calling pa_fp_planning_transaction_pub.add_planning_transactions bvid [' || to_char(l_created_version_id) || ']');
18690 /*
18691 | Bug 3709462. Passed p_one_to_one_mapping_flag ('Y') to avoid creation of
18692 | Resource Assignments for combinations of Task and Resource.
18693 */
18694 pa_fp_planning_transaction_pub.add_planning_transactions
18695 ( p_context => l_plan_tran_context
18696 , p_one_to_one_mapping_flag => 'Y'
18697 , p_calling_module => 'CREATE_DRAFT_FINPLAN'
18698 , p_project_id => l_project_id
18699 , p_budget_version_id => l_created_version_id
18700 , p_task_elem_version_id_tbl => l_task_elem_version_id_tbl
18701 , p_task_name_tbl => l_pm_task_reference_tbl
18702 , p_task_number_tbl => l_task_number_tbl
18703 , p_planning_start_date_tbl => l_start_date_tbl -- Bug 5026210
18704 , p_planning_end_date_tbl => l_end_date_tbl -- Bug 5026210
18705 , p_resource_list_member_id_tbl => l_resource_list_member_id_tbl
18706 , p_cbs_element_id_tbl => l_cbs_element_id_tbl --Bug 16604257 : CBS RBS Phase 2 API changes
18707 , p_quantity_tbl => l_quantity_tbl
18708 , p_currency_code_tbl => l_currency_code_tbl
18709 , p_raw_cost_tbl => l_raw_cost_tbl
18710 , p_burdened_cost_tbl => l_burdened_cost_tbl
18711 , p_revenue_tbl => l_revenue_tbl
18712 , p_skip_duplicates_flag => 'N'
18713 , p_pm_product_code => l_pm_product_code_tbl
18714 , p_pm_res_asgmt_ref => l_pm_res_asgmt_ref_tbl
18715 , p_attribute_category_tbl => l_attribute_category_tbl
18716 , p_attribute1 => l_attribute1_tbl
18717 , p_attribute2 => l_attribute2_tbl
18718 , p_attribute3 => l_attribute3_tbl
18719 , p_attribute4 => l_attribute4_tbl
18720 , p_attribute5 => l_attribute5_tbl
18721 , p_attribute6 => l_attribute6_tbl
18722 , p_attribute7 => l_attribute7_tbl
18723 , p_attribute8 => l_attribute8_tbl
18724 , p_attribute9 => l_attribute9_tbl
18725 , p_attribute10 => l_attribute10_tbl
18726 , p_attribute11 => l_attribute11_tbl
18727 , p_attribute12 => l_attribute12_tbl
18728 , p_attribute13 => l_attribute13_tbl
18729 , p_attribute14 => l_attribute14_tbl
18730 , p_attribute15 => l_attribute15_tbl
18731 , p_attribute16 => l_attribute16_tbl
18732 , p_attribute17 => l_attribute17_tbl
18733 , p_attribute18 => l_attribute18_tbl
18734 , p_attribute19 => l_attribute19_tbl
18735 , p_attribute20 => l_attribute20_tbl
18736 , p_attribute21 => l_attribute21_tbl
18737 , p_attribute22 => l_attribute22_tbl
18738 , p_attribute23 => l_attribute23_tbl
18739 , p_attribute24 => l_attribute24_tbl
18740 , p_attribute25 => l_attribute25_tbl
18741 , p_attribute26 => l_attribute26_tbl
18742 , p_attribute27 => l_attribute27_tbl
18743 , p_attribute28 => l_attribute28_tbl
18744 , p_attribute29 => l_attribute29_tbl
18745 , p_attribute30 => l_attribute30_tbl
18746 , x_return_status => l_return_status
18747 , x_msg_count => l_msg_count
18748 , x_msg_data => l_msg_data
18749 );
18750 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
18751 THEN
18752 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18753 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR)
18754 THEN
18755 RAISE FND_API.G_EXC_ERROR;
18756 END IF;
18757 END IF; -- 3793370 -- P_finplan_trans_tab.COUNT > 0
18758 /************************************
18759 l_fp_version_ids_tbl.extend;
18760 l_fp_version_ids_tbl(1) := l_created_version_id;
18761 PJI_FM_XBS_ACCUM_MAINT.plan_create( p_fp_version_ids => l_fp_version_ids_tbl
18762 ,x_return_status => l_return_status
18763 ,x_msg_code => l_msg_code
18764 );
18765 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
18766 THEN
18767 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18768 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR)
18769 THEN
18770 RAISE FND_API.G_EXC_ERROR;
18771 END IF;
18772 ********************/
18773
18774 x_finplan_version_id := l_created_version_id;
18775
18776 IF ( p_create_new_curr_working_flag = 'Y' OR
18777 p_replace_current_working_flag = 'Y')
18778 THEN
18779 --dbms_output.put_line('pa_fin_plan_utils.Get_Curr_Working_Version_Info');
18780 pa_fin_plan_utils.Get_Curr_Working_Version_Info(
18781 p_project_id => l_project_id
18782 ,p_fin_plan_type_id => l_fin_plan_type_id
18783 ,p_version_type => l_version_type
18784 ,x_fp_options_id => l_proj_fp_options_id
18785 ,x_fin_plan_version_id => l_CW_version_id
18786 ,x_return_status => x_return_status
18787 ,x_msg_count => x_msg_count
18788 ,x_msg_data => x_msg_data );
18789 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
18790 THEN
18791 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18792 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR)
18793 THEN
18794 RAISE FND_API.G_EXC_ERROR;
18795 END IF;
18796 IF ( l_created_version_id <> l_CW_version_id )
18797 THEN
18798 pa_debug.g_err_stage:= 'l_created_version_id [' || TO_CHAR(l_created_version_id) ||
18799 '] is not same as l_CW_version_id [' || TO_CHAR(l_CW_version_id) || ']';
18800 IF l_debug_mode = 'Y' THEN
18801 pa_debug.write( l_procedure_name ||
18802 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
18803 END IF;
18804
18805 l_CW_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
18806
18807 l_created_ver_rec_ver_num := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_created_version_id);
18808 l_user_id := FND_GLOBAL.User_id;
18809 PA_COMP_PROFILE_PUB.GET_USER_INFO
18810 (p_user_id => l_user_id,
18811 x_person_id => t_person_id,
18812 x_resource_id => t_resource_id,
18813 x_resource_name => t_resource_name);
18814 --dbms_output.put_line('pa_fin_plan_pvt.lock_unlock_version');
18815 pa_fin_plan_pvt.lock_unlock_version
18816 (p_budget_version_id => l_CW_version_id,
18817 p_record_version_number => l_CW_record_version_number,
18818 p_action => 'L',
18819 p_user_id => l_user_id,
18820 p_person_id => NULL,
18821 x_return_status => x_return_status,
18822 x_msg_count => x_msg_count,
18823 x_msg_data => x_msg_data) ;
18824
18825 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
18826 IF l_debug_mode = 'Y' THEN
18827 pa_debug.g_err_stage := 'Error executing lock unlock version';
18828 pa_debug.write('CREATE_DRAFT: ' || g_module_name,pa_debug.g_err_stage,3);
18829 END IF;
18830 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18831 END IF;
18832 IF l_debug_mode = 'Y' THEN
18833 pa_debug.g_err_stage := 'About to call set current working version';
18834 pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,3);
18835 END IF;
18836
18837
18838 l_CW_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
18839 --dbms_output.put_line('pa_fin_plan_pub.Set_Current_Working');
18840 pa_fin_plan_pub.Set_Current_Working
18841 (p_project_id => l_project_id,
18842 p_budget_version_id => l_created_version_id,
18843 p_record_version_number => l_created_ver_rec_ver_num,
18844 p_orig_budget_version_id => l_CW_version_id,
18845 p_orig_record_version_number => l_CW_record_version_number,
18846 x_return_status => x_return_status,
18847 x_msg_count => x_msg_count,
18848 x_msg_data => x_msg_data);
18849
18850 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
18851 IF l_debug_mode = 'Y' THEN
18852 pa_debug.g_err_stage:= 'Error executing Set_Current_Working ';
18853 pa_debug.write('CREATE_DRAFT: ' ||
18854 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
18855 END IF;
18856 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18857 END IF;
18858 END IF; --l_created_version_id <> l_CW_version_id
18859
18860 END IF; --p_create_new_curr_working_flag = 'Y' OR p_replace_current_working_flag = 'Y'
18861 --dbms_output.put_line('PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS');
18862 PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS
18863 (p_fin_plan_version_id => l_created_version_id
18864 ,p_budget_lines_in => l_budget_lines_in
18865 ,p_calling_context => 'CREATE_DRAFT_FINPLAN'
18866 ,x_fp_lines_retn_status_tab => l_budget_lines_out
18867 ,x_return_status => x_return_status
18868 ,x_msg_count => x_msg_count
18869 ,x_msg_data => x_msg_data
18870 );
18871
18872 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
18873 THEN
18874 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18875 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR)
18876 THEN
18877 RAISE FND_API.G_EXC_ERROR;
18878 END IF;
18879 /*====================================================================+
18880 | If any of the budget lines had any rejections, set x_return_status |
18881 | appropriately - So, whoever calls this API would know - there was |
18882 | issue creating atleast one of the budget lines. |
18883 +====================================================================*/
18884 IF ( x_return_status = 'R')
18885 THEN
18886 -- bug 3825873 donot raise error it will rollback the entire changes
18887 -- bug 3825873 RAISE FND_API.G_EXC_ERROR;
18888 x_return_status := 'S';
18889 END IF;
18890
18891 --Changes for bug 3823485
18892 IF FND_API.TO_BOOLEAN( p_commit )
18893 THEN
18894
18895 IF l_debug_mode = 'Y' THEN
18896 pa_debug.g_err_stage := 'About to do a COMMIT';
18897 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18898 END IF;
18899
18900 COMMIT;
18901 END IF;
18902
18903 IF l_debug_mode = 'Y' THEN
18904 pa_debug.g_err_stage := 'Leaving create draft finplan';
18905 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18906
18907 pa_debug.reset_curr_function;
18908 END IF;
18909
18910 EXCEPTION
18911 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
18912
18913 ROLLBACK TO create_draft_finplan_pub;
18914
18915 IF l_debug_mode = 'Y' THEN
18916 pa_debug.g_err_stage:='In invalid args exception';
18917 pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18918 END IF;
18919
18920 l_msg_count := FND_MSG_PUB.count_msg;
18921 IF l_msg_count = 1 THEN
18922
18923 IF l_debug_mode = 'Y' THEN
18924 pa_debug.g_err_stage:='In invalid args exception 1';
18925 pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18926 END IF;
18927
18928 PA_INTERFACE_UTILS_PUB.get_messages
18929 ( p_encoded => FND_API.G_TRUE
18930 ,p_msg_index => 1
18931 ,p_msg_count => l_msg_count
18932 ,p_msg_data => l_msg_data
18933 ,p_data => l_msg_data
18934 ,p_msg_index_out => l_msg_index_out);
18935
18936 x_msg_data := l_msg_data;
18937 x_msg_count := l_msg_count;
18938 ELSE
18939 IF l_debug_mode = 'Y' THEN
18940 pa_debug.g_err_stage:='In invalid args exception 2';
18941 pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18942 END IF;
18943 x_msg_count := l_msg_count;
18944 END IF;
18945
18946
18947 x_return_status := FND_API.G_RET_STS_ERROR;
18948
18949 IF l_debug_mode = 'Y' THEN
18950 pa_debug.g_err_stage:='In invalid args exception 3';
18951 pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18952 pa_debug.reset_curr_function;
18953 END IF;
18954
18955 WHEN OTHERS THEN
18956
18957 ROLLBACK TO create_draft_finplan_pub;
18958
18959 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
18960 x_msg_count := 1;
18961 x_msg_data := SQLERRM;
18962
18963 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
18964 ,p_procedure_name => 'Update_Planning_Transactions');
18965
18966 IF l_debug_mode = 'Y' THEN
18967 pa_debug.g_err_stage:='Unexpected Error' || SQLERRM;
18968 pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18969 pa_debug.reset_curr_function;
18970 END IF;
18971
18972 RAISE;
18973
18974 END CREATE_DRAFT_FINPLAN;
18975
18976 PROCEDURE load_resource_info(
18977 P_PM_PRODUCT_CODE PA_BUDGET_VERSIONS.PM_PRODUCT_CODE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18978 ,P_TASK_ID PA_TASKS.TASK_ID%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18979 ,P_PM_TASK_REFERENCE PA_TASKS.PM_TASK_REFERENCE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18980 ,P_PM_RES_ASGMT_REFERENCE VARCHAR2 DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18981 ,P_RESOURCE_ALIAS VARCHAR2 DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18982 ,P_CURRENCY_CODE PA_BUDGET_LINES.TXN_CURRENCY_CODE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18983 ,P_UNIT_OF_MEASURE_CODE PA_RESOURCE_ASSIGNMENTS.UNIT_OF_MEASURE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18984 ,P_START_DATE PA_RESOURCE_ASSIGNMENTS.PLANNING_START_DATE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
18985 ,P_END_DATE PA_RESOURCE_ASSIGNMENTS.PLANNING_END_DATE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
18986 ,P_QUANTITY NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18987 ,P_RAW_COST NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18988 ,P_BURDENED_COST NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18989 ,P_REVENUE NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18990 ,P_RESOURCE_LIST_MEMBER_ID NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18991 --Bug 16604257 : CBS RBS Phase 2 API changes
18992 ,P_COST_CODE VARCHAR2 DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18993 ,P_CBS_ELEMENT_ID NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18994 --Bug 16604257
18995 ,P_ATTRIBUTE_CATEGORY PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE_CATEGORY%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18996 ,P_ATTRIBUTE1 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE1%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18997 ,P_ATTRIBUTE2 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE2%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18998 ,P_ATTRIBUTE3 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE3%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18999 ,P_ATTRIBUTE4 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE4%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19000 ,P_ATTRIBUTE5 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE5%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19001 ,P_ATTRIBUTE6 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE6%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19002 ,P_ATTRIBUTE7 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE7%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19003 ,P_ATTRIBUTE8 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE8%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19004 ,P_ATTRIBUTE9 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE9%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19005 ,P_ATTRIBUTE10 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE10%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19006 ,P_ATTRIBUTE11 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE11%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19007 ,P_ATTRIBUTE12 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE12%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19008 ,P_ATTRIBUTE13 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE13%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19009 ,P_ATTRIBUTE14 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE14%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19010 ,P_ATTRIBUTE15 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE15%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19011 ,P_ATTRIBUTE16 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE16%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19012 ,P_ATTRIBUTE17 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE17%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19013 ,P_ATTRIBUTE18 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE18%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19014 ,P_ATTRIBUTE19 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE19%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19015 ,P_ATTRIBUTE20 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE20%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19016 ,P_ATTRIBUTE21 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE21%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19017 ,P_ATTRIBUTE22 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE22%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19018 ,P_ATTRIBUTE23 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE23%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19019 ,P_ATTRIBUTE24 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE24%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19020 ,P_ATTRIBUTE25 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE25%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19021 ,P_ATTRIBUTE26 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE26%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19022 ,P_ATTRIBUTE27 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE27%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19023 ,P_ATTRIBUTE28 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE28%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19024 ,P_ATTRIBUTE29 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE29%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19025 ,P_ATTRIBUTE30 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE30%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19026 ) IS
19027 cnt number:=0;
19028 BEGIN
19029 G_PM_PRODUCT_CODE_TBL.extend(1);
19030 G_TASK_ID_TBL.extend(1);
19031 G_PM_TASK_REFERENCE_TBL.extend(1);
19032 G_PM_RES_ASGMT_REFERENCE_TBL.extend(1);
19033 G_RESOURCE_ALIAS_TBL.extend(1);
19034 G_CURRENCY_CODE_TBL.extend(1);
19035 G_UNIT_OF_MEASURE_CODE_TBL.extend(1);
19036 G_START_DATE_TBL.extend(1);
19037 G_END_DATE_TBL.extend(1);
19038 G_QUANTITY_TBL.extend(1);
19039 G_RAW_COST_TBL.extend(1);
19040 G_BURDENED_COST_TBL.extend(1);
19041 G_REVENUE_TBL.extend(1);
19042 G_RESOURCE_LIST_MEMBER_ID_TBL.extend(1);
19043 --Bug 16604257 : CBS RBS Phase 2 API changes
19044 G_CBS_ELEMENT_ID_TBL.extend(1);
19045 G_COST_CODE_TBL.extend(1);
19046 --Bug 16604257
19047 G_ATTRIBUTE_CATEGORY_TBL.extend(1);
19048 G_ATTRIBUTE1_TBL.extend(1);
19049 G_ATTRIBUTE2_TBL.extend(1);
19050 G_ATTRIBUTE3_TBL.extend(1);
19051 G_ATTRIBUTE4_TBL.extend(1);
19052 G_ATTRIBUTE5_TBL.extend(1);
19053 G_ATTRIBUTE6_TBL.extend(1);
19054 G_ATTRIBUTE7_TBL.extend(1);
19055 G_ATTRIBUTE8_TBL.extend(1);
19056 G_ATTRIBUTE9_TBL.extend(1);
19057 G_ATTRIBUTE10_TBL.extend(1);
19058 G_ATTRIBUTE11_TBL.extend(1);
19059 G_ATTRIBUTE12_TBL .extend(1);
19060 G_ATTRIBUTE13_TBL.extend(1);
19061 G_ATTRIBUTE14_TBL.extend(1);
19062 G_ATTRIBUTE15_TBL.extend(1);
19063 G_ATTRIBUTE16_TBL.extend(1);
19064 G_ATTRIBUTE17_TBL.extend(1);
19065 G_ATTRIBUTE18_TBL.extend(1);
19066 G_ATTRIBUTE19_TBL.extend(1);
19067 G_ATTRIBUTE20_TBL.extend(1);
19068 G_ATTRIBUTE21_TBL.extend(1);
19069 G_ATTRIBUTE22_TBL.extend(1);
19070 G_ATTRIBUTE23_TBL.extend(1);
19071 G_ATTRIBUTE24_TBL.extend(1);
19072 G_ATTRIBUTE25_TBL.extend(1);
19073 G_ATTRIBUTE26_TBL.extend(1);
19074 G_ATTRIBUTE27_TBL.extend(1);
19075 G_ATTRIBUTE28_TBL.extend(1);
19076 G_ATTRIBUTE29_TBL.extend(1);
19077 G_ATTRIBUTE30_TBL.extend(1);
19078 --dbms_output.put_line('extending over');
19079
19080 --find the count on the table.
19081 cnt := G_START_DATE_TBL.COUNT;
19082 --dbms_output.put_line('G has [' || to_char(cnt) || '] records');
19083
19084 G_PM_PRODUCT_CODE_TBL(cnt) := P_PM_PRODUCT_CODE;
19085 G_TASK_ID_TBL(cnt) := P_TASK_ID;
19086 G_PM_TASK_REFERENCE_TBL(cnt) := P_PM_TASK_REFERENCE;
19087 G_PM_RES_ASGMT_REFERENCE_TBL(cnt) := P_PM_RES_ASGMT_REFERENCE;
19088 G_RESOURCE_ALIAS_TBL(cnt) := P_RESOURCE_ALIAS;
19089 G_CURRENCY_CODE_TBL(cnt) := P_CURRENCY_CODE;
19090 G_UNIT_OF_MEASURE_CODE_TBL(cnt) := P_UNIT_OF_MEASURE_CODE;
19091 G_START_DATE_TBL(cnt) := P_START_DATE;
19092 G_END_DATE_TBL(cnt) := P_END_DATE;
19093 G_QUANTITY_TBL(cnt) := P_QUANTITY;
19094 G_RAW_COST_TBL(cnt) := P_RAW_COST;
19095 G_BURDENED_COST_TBL(cnt) := P_BURDENED_COST;
19096 G_REVENUE_TBL(cnt) := P_REVENUE;
19097 G_RESOURCE_LIST_MEMBER_ID_TBL(cnt) := P_RESOURCE_LIST_MEMBER_ID;
19098 --Bug 16604257 : CBS RBS Phase 2 API changes
19099 G_CBS_ELEMENT_ID_TBL(cnt) := P_CBS_ELEMENT_ID;
19100 G_COST_CODE_TBL(cnt) :=P_COST_CODE;
19101 --Bug 16604257
19102
19103 G_ATTRIBUTE_CATEGORY_TBL(cnt) := P_ATTRIBUTE_CATEGORY;
19104 G_ATTRIBUTE1_TBL(cnt) := P_ATTRIBUTE1;
19105 G_ATTRIBUTE2_TBL(cnt) := P_ATTRIBUTE2;
19106 G_ATTRIBUTE3_TBL(cnt) := P_ATTRIBUTE3;
19107 G_ATTRIBUTE4_TBL(cnt) := P_ATTRIBUTE4;
19108 G_ATTRIBUTE5_TBL(cnt) := P_ATTRIBUTE5;
19109 G_ATTRIBUTE6_TBL(cnt) := P_ATTRIBUTE6;
19110 G_ATTRIBUTE7_TBL(cnt) := P_ATTRIBUTE7;
19111 G_ATTRIBUTE8_TBL(cnt) := P_ATTRIBUTE8;
19112 G_ATTRIBUTE9_TBL(cnt) := P_ATTRIBUTE9;
19113 G_ATTRIBUTE10_TBL(cnt) := P_ATTRIBUTE10;
19114 G_ATTRIBUTE11_TBL(cnt) := P_ATTRIBUTE11;
19115 G_ATTRIBUTE12_TBL (cnt) := P_ATTRIBUTE12;
19116 G_ATTRIBUTE13_TBL(cnt) := P_ATTRIBUTE13;
19117 G_ATTRIBUTE14_TBL(cnt) := P_ATTRIBUTE14;
19118 G_ATTRIBUTE15_TBL(cnt) := P_ATTRIBUTE15;
19119 G_ATTRIBUTE16_TBL(cnt) := P_ATTRIBUTE16;
19120 G_ATTRIBUTE17_TBL(cnt) := P_ATTRIBUTE17;
19121 G_ATTRIBUTE18_TBL(cnt) := P_ATTRIBUTE18;
19122 G_ATTRIBUTE19_TBL(cnt) := P_ATTRIBUTE19;
19123 G_ATTRIBUTE20_TBL(cnt) := P_ATTRIBUTE20;
19124 G_ATTRIBUTE21_TBL(cnt) := P_ATTRIBUTE21;
19125 G_ATTRIBUTE22_TBL(cnt) := P_ATTRIBUTE22;
19126 G_ATTRIBUTE23_TBL(cnt) := P_ATTRIBUTE23;
19127 G_ATTRIBUTE24_TBL(cnt) := P_ATTRIBUTE24;
19128 G_ATTRIBUTE25_TBL(cnt) := P_ATTRIBUTE25;
19129 G_ATTRIBUTE26_TBL(cnt) := P_ATTRIBUTE26;
19130 G_ATTRIBUTE27_TBL(cnt) := P_ATTRIBUTE27;
19131 G_ATTRIBUTE28_TBL(cnt) := P_ATTRIBUTE28;
19132 G_ATTRIBUTE29_TBL(cnt) := P_ATTRIBUTE29;
19133 G_ATTRIBUTE30_TBL(cnt) := P_ATTRIBUTE30;
19134 --dbms_output.put_line('done with assigning to global tables');
19135 END load_resource_info;
19136
19137 PROCEDURE EXECUTE_CREATE_DRAFT_FINPLAN
19138 ( p_api_version_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19139 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
19140 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
19141 ,p_pm_product_code IN pa_budget_versions.pm_product_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19142 ,p_pm_finplan_reference IN pa_budget_versions.pm_budget_reference%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19143 ,p_pm_project_reference IN pa_projects_all.PM_PROJECT_REFERENCE%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19144 ,p_pa_project_id IN pa_budget_versions.project_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19145 ,p_fin_plan_type_id IN pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19146 ,p_fin_plan_type_name IN pa_fin_plan_types_vl.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19147 ,p_version_type IN pa_budget_versions.version_type%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19148 ,p_time_phased_code IN pa_proj_fp_options.cost_time_phased_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19149 ,p_resource_list_name IN pa_resource_lists.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19150 ,p_resource_list_id IN pa_budget_versions.resource_list_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19151 ,p_fin_plan_level_code IN pa_proj_fp_options.cost_fin_plan_level_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19152 ,P_PLAN_IN_MULTI_CURR_FLAG IN pa_proj_fp_options.plan_in_multi_curr_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19153 ,p_budget_version_name IN pa_budget_versions.version_name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19154 ,p_description IN pa_budget_versions.description%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19155 ,p_change_reason_code IN pa_budget_versions.change_reason_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19156 ,p_raw_cost_flag IN pa_fin_plan_amount_sets.raw_cost_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19157 ,p_burdened_cost_flag IN pa_fin_plan_amount_sets.burdened_cost_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19158 ,p_revenue_flag IN pa_fin_plan_amount_sets.revenue_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19159 ,p_cost_qty_flag IN pa_fin_plan_amount_sets.cost_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19160 ,p_revenue_qty_flag IN pa_fin_plan_amount_sets.revenue_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19161 ,p_all_qty_flag IN pa_fin_plan_amount_sets.all_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19162 ,p_attribute_category IN pa_budget_versions.attribute_category%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19163 ,p_attribute1 IN pa_budget_versions.attribute1%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19164 ,p_attribute2 IN pa_budget_versions.attribute2%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19165 ,p_attribute3 IN pa_budget_versions.attribute3%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19166 ,p_attribute4 IN pa_budget_versions.attribute4%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19167 ,p_attribute5 IN pa_budget_versions.attribute5%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19168 ,p_attribute6 IN pa_budget_versions.attribute6%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19169 ,p_attribute7 IN pa_budget_versions.attribute7%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19170 ,p_attribute8 IN pa_budget_versions.attribute8%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19171 ,p_attribute9 IN pa_budget_versions.attribute9%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19172 ,p_attribute10 IN pa_budget_versions.attribute10%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19173 ,p_attribute11 IN pa_budget_versions.attribute11%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19174 ,p_attribute12 IN pa_budget_versions.attribute12%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19175 ,p_attribute13 IN pa_budget_versions.attribute13%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19176 ,p_attribute14 IN pa_budget_versions.attribute14%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19177 ,p_attribute15 IN pa_budget_versions.attribute15%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19178 ,p_create_new_curr_working_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19179 ,p_replace_current_working_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19180 ,p_using_resource_lists_flag IN VARCHAR2 DEFAULT 'N'
19181 ,x_finplan_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
19182 ,x_return_status OUT NOCOPY VARCHAR2
19183 ,x_msg_count OUT NOCOPY NUMBER
19184 ,x_msg_data OUT NOCOPY VARCHAR2
19185 )
19186 IS
19187 l_finplan_trans_tab pa_budget_pub.FinPlan_Trans_Tab;
19188 BEGIN
19189 --dbms_output.put_line('populating table of records');
19190 FOR i IN G_START_DATE_TBL.FIRST .. G_START_DATE_TBL.LAST
19191 LOOP
19192 l_finplan_trans_tab(i).pm_product_code := G_PM_PRODUCT_CODE_TBL(i);
19193 l_finplan_trans_tab(i).TASK_ID := G_TASK_ID_TBL(i);
19194 l_finplan_trans_tab(i).PM_TASK_REFERENCE := G_PM_TASK_REFERENCE_TBL(i);
19195 l_finplan_trans_tab(i).PM_RES_ASGMT_REFERENCE := G_PM_RES_ASGMT_REFERENCE_TBL(i);
19196 l_finplan_trans_tab(i).RESOURCE_ALIAS := G_RESOURCE_ALIAS_TBL(i);
19197 l_finplan_trans_tab(i).CURRENCY_CODE := G_CURRENCY_CODE_TBL(i);
19198 l_finplan_trans_tab(i).UNIT_OF_MEASURE_CODE := G_UNIT_OF_MEASURE_CODE_TBL(i);
19199 l_finplan_trans_tab(i).START_DATE := G_START_DATE_TBL(i);
19200 l_finplan_trans_tab(i).END_DATE := G_END_DATE_TBL(i);
19201 l_finplan_trans_tab(i).QUANTITY := G_QUANTITY_TBL(i);
19202 l_finplan_trans_tab(i).RAW_COST := G_RAW_COST_TBL(i);
19203 l_finplan_trans_tab(i).BURDENED_COST := G_BURDENED_COST_TBL(i);
19204 l_finplan_trans_tab(i).REVENUE := G_REVENUE_TBL(I);
19205 l_finplan_trans_tab(i).RESOURCE_LIST_MEMBER_ID := G_RESOURCE_LIST_MEMBER_ID_TBL(i);
19206 --Bug 16604257 : CBS RBS Phase 2 API changes
19207 l_finplan_trans_tab(i).CBS_ELEMENT_ID := G_CBS_ELEMENT_ID_TBL(i);
19208 l_finplan_trans_tab(i).COST_CODE := G_COST_CODE_TBL(i);
19209 --Bug 16604257
19210 l_finplan_trans_tab(i).ATTRIBUTE_CATEGORY := G_ATTRIBUTE_CATEGORY_TBL(i);
19211 l_finplan_trans_tab(i).ATTRIBUTE1 := G_ATTRIBUTE1_TBL(i);
19212 l_finplan_trans_tab(i).ATTRIBUTE2 := G_ATTRIBUTE2_TBL(i);
19213 l_finplan_trans_tab(i).ATTRIBUTE3 := G_ATTRIBUTE3_TBL(i);
19214 l_finplan_trans_tab(i).ATTRIBUTE4 := G_ATTRIBUTE4_TBL(i);
19215 l_finplan_trans_tab(i).ATTRIBUTE5 := G_ATTRIBUTE5_TBL(i);
19216 l_finplan_trans_tab(i).ATTRIBUTE6 := G_ATTRIBUTE6_TBL(i);
19217 l_finplan_trans_tab(i).ATTRIBUTE7 := G_ATTRIBUTE7_TBL(i);
19218 l_finplan_trans_tab(i).ATTRIBUTE8 := G_ATTRIBUTE8_TBL(i);
19219 l_finplan_trans_tab(i).ATTRIBUTE9 := G_ATTRIBUTE9_TBL(i);
19220 l_finplan_trans_tab(i).ATTRIBUTE10 := G_ATTRIBUTE10_TBL(i);
19221 l_finplan_trans_tab(i).ATTRIBUTE11 := G_ATTRIBUTE11_TBL(i);
19222 l_finplan_trans_tab(i).ATTRIBUTE12 := G_ATTRIBUTE12_TBL(i);
19223 l_finplan_trans_tab(i).ATTRIBUTE13 := G_ATTRIBUTE13_TBL(i);
19224 l_finplan_trans_tab(i).ATTRIBUTE14 := G_ATTRIBUTE14_TBL(i);
19225 l_finplan_trans_tab(i).ATTRIBUTE15 := G_ATTRIBUTE15_TBL(i);
19226 l_finplan_trans_tab(i).ATTRIBUTE16 := G_ATTRIBUTE16_TBL(i);
19227 l_finplan_trans_tab(i).ATTRIBUTE17 := G_ATTRIBUTE17_TBL(i);
19228 l_finplan_trans_tab(i).ATTRIBUTE18 := G_ATTRIBUTE18_TBL(i);
19229 l_finplan_trans_tab(i).ATTRIBUTE19 := G_ATTRIBUTE19_TBL(i);
19230 l_finplan_trans_tab(i).ATTRIBUTE20 := G_ATTRIBUTE20_TBL(i);
19231 l_finplan_trans_tab(i).ATTRIBUTE21 := G_ATTRIBUTE21_TBL(i);
19232 l_finplan_trans_tab(i).ATTRIBUTE22 := G_ATTRIBUTE22_TBL(i);
19233 l_finplan_trans_tab(i).ATTRIBUTE23 := G_ATTRIBUTE23_TBL(i);
19234 l_finplan_trans_tab(i).ATTRIBUTE24 := G_ATTRIBUTE24_TBL(i);
19235 l_finplan_trans_tab(i).ATTRIBUTE25 := G_ATTRIBUTE25_TBL(i);
19236 l_finplan_trans_tab(i).ATTRIBUTE26 := G_ATTRIBUTE26_TBL(i);
19237 l_finplan_trans_tab(i).ATTRIBUTE27 := G_ATTRIBUTE27_TBL(i);
19238 l_finplan_trans_tab(i).ATTRIBUTE28 := G_ATTRIBUTE28_TBL(i);
19239 l_finplan_trans_tab(i).ATTRIBUTE29 := G_ATTRIBUTE29_TBL(i);
19240 l_finplan_trans_tab(i).ATTRIBUTE30 := G_ATTRIBUTE30_TBL(i);
19241 END LOOP;
19242
19243 --dbms_output.put_line('Before calling PA_FIN_PLAN_PUB.CREATE_DRAFT_FINPLAN');
19244 PA_BUDGET_PUB.CREATE_DRAFT_FINPLAN
19245 ( p_api_version_number => p_api_version_number
19246 ,p_commit => p_commit
19247 ,p_init_msg_list => p_init_msg_list
19248 ,p_pm_product_code => p_pm_product_code
19249 ,p_pm_finplan_reference => p_pm_finplan_reference
19250 ,p_pm_project_reference => p_pm_project_reference
19251 ,p_pa_project_id => p_pa_project_id
19252 ,p_fin_plan_type_id => p_fin_plan_type_id
19253 ,p_fin_plan_type_name => p_fin_plan_type_name
19254 ,p_version_type => p_version_type
19255 ,p_time_phased_code => p_time_phased_code
19256 ,p_resource_list_name => p_resource_list_name
19257 ,p_resource_list_id => p_resource_list_id
19258 ,p_fin_plan_level_code => p_fin_plan_level_code
19259 ,p_plan_in_multi_curr_flag => P_plan_in_multi_curr_flag
19260 ,p_budget_version_name => p_budget_version_name
19261 ,p_description => p_description
19262 ,p_change_reason_code => p_change_reason_code
19263 ,p_raw_cost_flag => p_raw_cost_flag
19264 ,p_burdened_cost_flag => p_burdened_cost_flag
19265 ,p_revenue_flag => p_revenue_flag
19266 ,p_cost_qty_flag => p_cost_qty_flag
19267 ,p_revenue_qty_flag => p_revenue_qty_flag
19268 ,p_all_qty_flag => p_all_qty_flag
19269 ,p_attribute_category => p_attribute_category
19270 ,p_attribute1 => p_attribute1
19271 ,p_attribute2 => p_attribute2
19272 ,p_attribute3 => p_attribute3
19273 ,p_attribute4 => p_attribute4
19274 ,p_attribute5 => p_attribute5
19275 ,p_attribute6 => p_attribute6
19276 ,p_attribute7 => p_attribute7
19277 ,p_attribute8 => p_attribute8
19278 ,p_attribute9 => p_attribute9
19279 ,p_attribute10 => p_attribute10
19280 ,p_attribute11 => p_attribute11
19281 ,p_attribute12 => p_attribute12
19282 ,p_attribute13 => p_attribute13
19283 ,p_attribute14 => p_attribute14
19284 ,p_attribute15 => p_attribute15
19285 ,p_create_new_curr_working_flag => p_create_new_curr_working_flag
19286 ,p_replace_current_working_flag => p_replace_current_working_flag
19287 ,p_using_resource_lists_flag => p_using_resource_lists_flag
19288 ,p_finplan_trans_tab => l_finplan_trans_tab
19289 ,x_finplan_version_id => x_finplan_version_id
19290 ,x_return_status => x_return_status
19291 ,x_msg_count => x_msg_count
19292 ,x_msg_data => x_msg_data
19293 );
19294 --dbms_output.put_line('after call to PA_FIN_PLAN_PUB.CREATE_DRAFT_FINPLAN');
19295
19296 /*
19297 * Empty the tables after each call to CREATE_DRAFT_FINPLAN
19298 */
19299 G_PM_PRODUCT_CODE_TBL.DELETE;
19300 G_TASK_ID_TBL.DELETE;
19301 G_PM_TASK_REFERENCE_TBL.DELETE;
19302 G_PM_RES_ASGMT_REFERENCE_TBL.DELETE;
19303 G_RESOURCE_ALIAS_TBL.DELETE;
19304 G_CURRENCY_CODE_TBL.DELETE;
19305 G_UNIT_OF_MEASURE_CODE_TBL.DELETE;
19306 G_START_DATE_TBL.DELETE;
19307 G_END_DATE_TBL.DELETE;
19308 G_QUANTITY_TBL.DELETE;
19309 G_RAW_COST_TBL.DELETE;
19310 G_BURDENED_COST_TBL.DELETE;
19311 G_REVENUE_TBL.DELETE;
19312 G_RESOURCE_LIST_MEMBER_ID_TBL.DELETE;
19313 --Bug 16604257 : CBS RBS Phase 2 API changes
19314 G_CBS_ELEMENT_ID_TBL.DELETE;
19315 G_COST_CODE_TBL.DELETE;
19316 --Bug 16604257
19317 G_ATTRIBUTE_CATEGORY_TBL.DELETE;
19318 G_ATTRIBUTE1_TBL.DELETE;
19319 G_ATTRIBUTE2_TBL.DELETE;
19320 G_ATTRIBUTE3_TBL.DELETE;
19321 G_ATTRIBUTE4_TBL.DELETE;
19322 G_ATTRIBUTE5_TBL.DELETE;
19323 G_ATTRIBUTE6_TBL.DELETE;
19324 G_ATTRIBUTE7_TBL.DELETE;
19325 G_ATTRIBUTE8_TBL.DELETE;
19326 G_ATTRIBUTE9_TBL.DELETE;
19327 G_ATTRIBUTE10_TBL.DELETE;
19328 G_ATTRIBUTE11_TBL.DELETE;
19329 G_ATTRIBUTE12_TBL.DELETE;
19330 G_ATTRIBUTE13_TBL.DELETE;
19331 G_ATTRIBUTE14_TBL.DELETE;
19332 G_ATTRIBUTE15_TBL.DELETE;
19333 G_ATTRIBUTE16_TBL.DELETE;
19334 G_ATTRIBUTE17_TBL.DELETE;
19335 G_ATTRIBUTE18_TBL.DELETE;
19336 G_ATTRIBUTE19_TBL.DELETE;
19337 G_ATTRIBUTE20_TBL.DELETE;
19338 G_ATTRIBUTE21_TBL.DELETE;
19339 G_ATTRIBUTE22_TBL.DELETE;
19340 G_ATTRIBUTE23_TBL.DELETE;
19341 G_ATTRIBUTE24_TBL.DELETE;
19342 G_ATTRIBUTE25_TBL.DELETE;
19343 G_ATTRIBUTE26_TBL.DELETE;
19344 G_ATTRIBUTE27_TBL.DELETE;
19345 G_ATTRIBUTE28_TBL.DELETE;
19346 G_ATTRIBUTE29_TBL.DELETE;
19347 G_ATTRIBUTE30_TBL.DELETE;
19348 --dbms_output.put_line('leaving EXECUTE_CREATE_DRAFT_FINPLAN');
19349
19350 END EXECUTE_CREATE_DRAFT_FINPLAN;
19351
19352
19353 ----------------------------------------------------------------------------------------
19354 --Name: update_plannning_element_attr
19355 --Type: Procedure
19356 --Description: This procedure can be used to update attributes of existing
19357 -- Planning Elements
19358 --
19359 --
19360 --Called subprograms: pa_budget_pvt.validate_header_info,pa_budget_pvt.validate_budget_lines
19361 -- pa_fp_planning_transaction_pub.update_planning_transactions
19362 --
19363 --
19364 --
19365
19366 PROCEDURE update_plannning_element_attr
19367 (p_api_version_number IN NUMBER
19368 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
19369 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
19370 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19371 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19372 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19373 ,p_fin_plan_type_id IN pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19374 ,p_fin_plan_type_name IN pa_fin_plan_types_tl.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19375 ,p_budget_version_number IN pa_budget_versions.version_number%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19376 ,p_version_type IN pa_budget_versions.version_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19377 ,p_planning_element_rec_tbl IN planning_element_rec_tbl_type
19378 ,p_distribute_amounts IN VARCHAR2 DEFAULT 'Y' -- Bug 9610380
19379 ,x_msg_count OUT NOCOPY NUMBER
19380 ,x_msg_data OUT NOCOPY VARCHAR2
19381 ,x_return_status OUT NOCOPY VARCHAR2)
19382 IS
19383
19384 CURSOR c_get_plan_class_code(c_fin_plan_type_id pa_budget_versions.fin_plan_type_id%TYPE) is
19385 SELECT plan_class_code
19386 FROM pa_fin_plan_types_b
19387 WHERE fin_plan_type_id=c_fin_plan_type_id;
19388
19389 l_msg_count NUMBER := 0;
19390 l_data VARCHAR2(2000);
19391 l_msg_data VARCHAR2(2000);
19392 l_msg_index_out NUMBER;
19393 l_return_status VARCHAR2(2000);
19394 l_debug_mode VARCHAR2(30);
19395 i NUMBER;
19396
19397 l_module_name VARCHAR2(100) :='update_plannning_element_attr';
19398 l_api_name CONSTANT VARCHAR2(100) := 'update_plannning_element_attr';
19399
19400 l_project_id NUMBER;
19401 l_budget_type_code pa_budget_types.budget_type_code%TYPE;
19402 l_fin_plan_type_id NUMBER;
19403 l_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE;
19404 l_fin_plan_class_code varchar2(30);
19405 l_version_type pa_budget_versions.version_type%TYPE;
19406 l_budget_version_id NUMBER;
19407 l_budget_entry_method_code pa_budget_entry_methods.budget_entry_method_code%TYPE;
19408 l_resource_list_id pa_resource_lists_all_bg.resource_list_id%TYPE;
19409 l_budget_amount_code pa_budget_types.budget_amount_code%type;
19410 l_entry_level_code pa_proj_fp_options.cost_fin_plan_level_code%TYPE;
19411 l_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE;
19412 l_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
19413 l_categorization_code pa_budget_entry_methods.categorization_code%TYPE;
19414 l_project_number pa_projects_all.segment1%type;
19415
19416 l_mfc_cost_type_id_tbl SYSTEM.pa_num_tbl_type;
19417 l_etc_method_code_tbl SYSTEM.pa_varchar2_30_tbl_type;
19418 l_spread_curve_id_tbl SYSTEM.pa_num_tbl_type;
19419
19420 l_version_info_rec pa_fp_gen_amount_utils.fp_cols;
19421
19422 l_budget_lines_in_tbl PA_BUDGET_PUB.G_BUDGET_LINES_IN_TBL%TYPE;
19423 l_budget_lines_out_tbl PA_BUDGET_PUB.G_BUDGET_LINES_OUT_TBL%TYPE;
19424 l_planning_start_date_tbl SYSTEM.pa_date_tbl_type;
19425 l_planning_end_date_tbl SYSTEM.pa_date_tbl_type;
19426 l_spread_curve_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE;
19427 l_sp_fixed_date_tbl SYSTEM.PA_DATE_TBL_TYPE;
19428 l_etc_method_name_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE;
19429
19430 l_uom_tbl SYSTEM.pa_varchar2_80_tbl_type;
19431 l_mfc_cost_type_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE;
19432
19433 l_resource_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE;
19434
19435 l_currency_code varchar2(25);
19436 l_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE;
19437
19438 l_assignment_description_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE ;
19439 l_attribute_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE ;
19440 l_attribute1_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19441 l_attribute2_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19442 l_attribute3_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19443 l_attribute4_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19444 l_attribute5_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19445 l_attribute6_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19446 l_attribute7_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19447 l_attribute8_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19448 l_attribute9_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19449 l_attribute10_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19450 l_attribute11_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19451 l_attribute12_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19452 l_attribute13_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19453 l_attribute14_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19454 l_attribute15_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19455 l_attribute16_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19456 l_attribute17_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19457 l_attribute18_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19458 l_attribute19_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19459 l_attribute20_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19460 l_attribute21_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19461 l_attribute22_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19462 l_attribute23_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19463 l_attribute24_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19464 l_attribute25_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19465 l_attribute26_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19466 l_attribute27_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19467 l_attribute28_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19468 l_attribute29_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19469 l_attribute30_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19470 --Added for bug 6408139 to pass G_PA_MISS_CHAR
19471 l_pa_miss_char varchar2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
19472
19473 -- Bug 9610380
19474 l_distribute_amounts varchar2(1);
19475 l_err_value varchar2(1);
19476 l_err_field varchar2(20);
19477
19478 BEGIN
19479 -- Set the error stack.
19480 pa_debug.set_err_stack('PA_BUDGET_PUB.update_plannning_element_attr');
19481
19482 -- Get the Debug mode into local variable and set it to 'Y'if its NULL
19483 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
19484 l_debug_mode := NVL(l_debug_mode, 'Y');
19485
19486 -- Initialize the return status to success
19487 x_return_status := FND_API.G_RET_STS_SUCCESS;
19488
19489 IF FND_API.TO_BOOLEAN( p_init_msg_list )
19490 THEN
19491 FND_MSG_PUB.initialize;
19492 END IF;
19493
19494 --initialize
19495
19496 l_project_id := p_pa_project_id;
19497 /* 9841421 Start */
19498 IF (p_fin_plan_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
19499 p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
19500 THEN
19501 l_fin_plan_type_id := p_fin_plan_type_id;
19502 l_fin_plan_type_name := p_fin_plan_type_name;
19503
19504 ELSE
19505 IF (p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
19506 p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
19507 THEN
19508 IF l_debug_mode = 'Y' THEN
19509 pa_debug.write_file('Parameter p_fin_plan_type_id = ' || p_fin_plan_type_id, 5);
19510 pa_debug.write_file('Parameter p_fin_plan_type_name = ' || p_fin_plan_type_name, 5);
19511 END IF;
19512 raise PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
19513 END IF;
19514
19515 IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
19516 SELECT fin_plan_type_id
19517 INTO l_fin_plan_type_id
19518 FROM pa_fin_plan_types_vl
19519 WHERE name = p_fin_plan_type_name;
19520 ELSE
19521 l_fin_plan_type_id := p_fin_plan_type_id;
19522 END IF;
19523
19524 IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
19525 SELECT name
19526 INTO l_fin_plan_type_name
19527 FROM pa_fin_plan_types_vl
19528 WHERE fin_plan_type_id = p_fin_plan_type_id;
19529 ELSE
19530 l_fin_plan_type_name := p_fin_plan_type_name;
19531 END IF;
19532 END IF;
19533 /* 9841421 End */
19534
19535 l_version_type := p_version_type;
19536
19537
19538 l_mfc_cost_type_id_tbl := SYSTEM.pa_num_tbl_type();
19539 l_etc_method_code_tbl := SYSTEM.pa_varchar2_30_tbl_type();
19540 l_spread_curve_id_tbl := SYSTEM.pa_num_tbl_type();
19541
19542
19543 l_planning_start_date_tbl := SYSTEM.pa_date_tbl_type();
19544 l_planning_end_date_tbl := SYSTEM.pa_date_tbl_type();
19545 l_spread_curve_name_tbl := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
19546 l_sp_fixed_date_tbl := SYSTEM.PA_DATE_TBL_TYPE();
19547 l_etc_method_name_tbl := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
19548
19549 l_uom_tbl := SYSTEM.pa_varchar2_80_tbl_type();
19550 l_mfc_cost_type_tbl := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
19551
19552 l_resource_assignment_id_tbl := SYSTEM.pa_num_tbl_type();
19553
19554
19555 l_currency_code_tbl := SYSTEM.pa_varchar2_15_tbl_type();
19556
19557 l_assignment_description_tbl := SYSTEM.pa_varchar2_240_tbl_type();
19558 l_attribute_category_tbl := SYSTEM.pa_varchar2_30_tbl_type();
19559 l_attribute1_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19560 l_attribute2_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19561 l_attribute3_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19562 l_attribute4_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19563 l_attribute5_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19564 l_attribute6_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19565 l_attribute7_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19566 l_attribute8_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19567 l_attribute9_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19568 l_attribute10_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19569 l_attribute11_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19570 l_attribute12_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19571 l_attribute13_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19572 l_attribute14_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19573 l_attribute15_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19574 l_attribute16_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19575 l_attribute17_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19576 l_attribute18_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19577 l_attribute19_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19578 l_attribute20_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19579 l_attribute21_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19580 l_attribute22_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19581 l_attribute23_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19582 l_attribute24_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19583 l_attribute25_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19584 l_attribute26_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19585 l_attribute27_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19586 l_attribute28_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19587 l_attribute29_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19588 l_attribute30_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19589
19590 pa_budget_pvt.G_res_assign_tbl.delete;
19591 l_distribute_amounts := p_distribute_amounts; -- Bug 9610380
19592 --end initialize
19593
19594 -- Bug 9610380 : Start
19595 IF (l_distribute_amounts is NULL) OR (l_distribute_amounts <> 'N' AND l_distribute_amounts <> 'Y')
19596 THEN
19597 IF l_debug_mode = 'Y' THEN
19598 pa_debug.write_file('Failed because the value of p_distrib_amts is not valid',5);
19599 END IF;
19600 l_err_value := l_distribute_amounts;
19601 l_err_field := 'p_distribute_amounts';
19602 FND_MESSAGE.SET_NAME('PA','PA_PMC_INVALID_LOV_VAL');
19603 FND_MESSAGE.SET_TOKEN('VALUE',l_err_value);
19604 FND_MESSAGE.SET_TOKEN('FIELD',l_err_field);
19605 FND_MSG_PUB.add;
19606 raise PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
19607 END IF;
19608 -- Bug 9610380 : End
19609
19610 if p_planning_element_rec_tbl.count = 0 then
19611 IF l_debug_mode = 'Y' THEN
19612 pa_debug.write_file('No Planning Elements Passed',5);
19613 END IF;
19614 pa_debug.reset_err_stack;
19615 return;
19616 end if;
19617
19618
19619 -- DBMS_OUTPUT.PUT_LINE('p_api_version_number '||p_api_version_number);
19620 -- DBMS_OUTPUT.PUT_LINE(' l_api_name '|| l_api_name);
19621 -- DBMS_OUTPUT.PUT_LINE('p_init_msg_list'||p_init_msg_list);
19622 -- DBMS_OUTPUT.PUT_LINE('l_project_id'||l_project_id);
19623 -- DBMS_OUTPUT.PUT_LINE('p_pm_project_reference'||p_pm_project_reference);
19624 -- DBMS_OUTPUT.PUT_LINE('p_pm_product_code'||p_pm_product_code);
19625 -- DBMS_OUTPUT.PUT_LINE('l_fin_plan_type_id'||l_fin_plan_type_id);
19626 -- DBMS_OUTPUT.PUT_LINE('l_fin_plan_type_name'||l_fin_plan_type_name);
19627 -- DBMS_OUTPUT.PUT_LINE('p_budget_version_number'||p_budget_version_number);
19628 -- DBMS_OUTPUT.PUT_LINE('l_version_type'||l_version_type);
19629
19630
19631 PA_BUDGET_PVT.validate_header_info(
19632 p_api_version_number => p_api_version_number
19633 ,p_api_name => l_api_name
19634 ,p_init_msg_list => p_init_msg_list
19635 ,px_pa_project_id => l_project_id
19636 ,p_pm_project_reference => p_pm_project_reference
19637 ,p_pm_product_code => p_pm_product_code
19638 ,px_budget_type_code => l_budget_type_code
19639 ,px_fin_plan_type_id => l_fin_plan_type_id
19640 ,px_fin_plan_type_name => l_fin_plan_type_name
19641 ,px_version_type => l_version_type
19642 ,p_budget_version_number => p_budget_version_number
19643 ,p_change_reason_code => NULL
19644 ,p_function_name => 'PA_PM_UPDATE_BUDGET'
19645 ,x_budget_entry_method_code => l_budget_entry_method_code
19646 ,x_resource_list_id => l_resource_list_id
19647 ,x_budget_version_id => l_budget_version_id
19648 ,x_fin_plan_level_code => l_entry_level_code
19649 ,x_time_phased_code => l_time_phased_code
19650 ,x_plan_in_multi_curr_flag => l_multi_curr_flag
19651 ,x_budget_amount_code => l_budget_amount_code
19652 ,x_categorization_code => l_categorization_code
19653 ,x_project_number => l_project_number
19654 /* Plan Amount Entry flags introduced by bug 6408139 */
19655 /*Passing all as G_PA_MISS_CHAR since validations not required*/
19656 ,px_raw_cost_flag => l_pa_miss_char
19657 ,px_burdened_cost_flag => l_pa_miss_char
19658 ,px_revenue_flag => l_pa_miss_char
19659 ,px_cost_qty_flag => l_pa_miss_char
19660 ,px_revenue_qty_flag => l_pa_miss_char
19661 ,px_all_qty_flag => l_pa_miss_char
19662 ,px_bill_rate_flag => l_pa_miss_char
19663 ,px_cost_rate_flag => l_pa_miss_char
19664 ,px_burden_rate_flag => l_pa_miss_char
19665 /* Plan Amount Entry flags introduced by bug 6408139 */
19666 ,x_msg_count => l_msg_count
19667 ,x_msg_data => l_msg_data
19668 ,x_return_status => l_return_status );
19669 /*
19670 DBMS_OUTPUT.PUT_LINE('return status is '||l_return_status);
19671 */
19672 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
19673 THEN
19674 IF l_debug_mode = 'Y' THEN
19675 pa_debug.write_file('Failed due to error in pa_budget_pvt.validate_header_info',5);
19676 END IF;
19677 raise PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
19678 END IF;
19679
19680 --DBMS_OUTPUT.PUT_LINE('PA_BUDGET_PVT.validate_header_info successful project number is '||l_project_number||' bversion id '||l_budget_version_id);
19681
19682 l_version_info_rec.x_budget_version_id := l_budget_version_id;
19683
19684 FOR i IN p_planning_element_rec_tbl.first..p_planning_element_rec_tbl.last LOOP
19685 -- how we will handle project id
19686 --make these null when pa.g_miss num and fnd g miss num when null
19687 l_budget_lines_in_tbl(i).pa_task_id := p_planning_element_rec_tbl(i).pa_task_id;
19688 l_budget_lines_in_tbl(i).pm_task_reference := p_planning_element_rec_tbl(i).pm_task_reference;
19689 l_budget_lines_in_tbl(i).resource_alias := p_planning_element_rec_tbl(i).resource_alias;
19690 l_budget_lines_in_tbl(i).resource_list_member_id := p_planning_element_rec_tbl(i).resource_list_member_id;
19691
19692 l_budget_lines_in_tbl(i).cbs_element_id := p_planning_element_rec_tbl(i).cbs_element_id;
19693 l_budget_lines_in_tbl(i).cost_code := p_planning_element_rec_tbl(i).cost_code;
19694
19695 l_planning_start_date_tbl.extend(1);
19696 l_planning_start_date_tbl(i) := p_planning_element_rec_tbl(i).planning_start_date;
19697 if l_planning_start_date_tbl(i) is null then
19698 l_planning_start_date_tbl(i) :=FND_API.G_MISS_DATE;
19699 elsif l_planning_start_date_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
19700 l_planning_start_date_tbl(i) := null;
19701 end if;
19702
19703 l_planning_end_date_tbl.extend(1);
19704 l_planning_end_date_tbl(i) := p_planning_element_rec_tbl(i).planning_end_date;
19705 if l_planning_end_date_tbl(i) is null then
19706 l_planning_end_date_tbl(i) :=FND_API.G_MISS_DATE;
19707 elsif l_planning_end_date_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
19708 l_planning_end_date_tbl(i) := null;
19709 end if;
19710
19711 l_spread_curve_name_tbl.extend(1);
19712 l_spread_curve_name_tbl(i) := p_planning_element_rec_tbl(i).spread_curve;
19713 if l_spread_curve_name_tbl(i)is null then
19714 l_spread_curve_name_tbl(i) :=FND_API.G_MISS_CHAR;
19715 elsif l_spread_curve_name_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
19716 l_spread_curve_name_tbl(i) := null;
19717 end if;
19718
19719 l_sp_fixed_date_tbl.extend(1);
19720 l_sp_fixed_date_tbl(i) := p_planning_element_rec_tbl(i).fixed_date;
19721 if l_sp_fixed_date_tbl(i) is null then
19722 l_sp_fixed_date_tbl(i) :=FND_API.G_MISS_DATE;
19723 elsif l_sp_fixed_date_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
19724 l_sp_fixed_date_tbl(i) := null;
19725 end if;
19726
19727 l_etc_method_name_tbl.extend(1);
19728 l_etc_method_name_tbl(i) := p_planning_element_rec_tbl(i).etc_method_name;
19729 if l_etc_method_name_tbl(i) is null then
19730 l_etc_method_name_tbl(i) :=FND_API.G_MISS_CHAR;
19731 elsif l_etc_method_name_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
19732 l_etc_method_name_tbl(i) := null;
19733 end if;
19734
19735 l_uom_tbl.extend(1);
19736 l_uom_tbl(i):=null;
19737 l_mfc_cost_type_tbl.extend(1);
19738 l_mfc_cost_type_tbl(i):=null;
19739
19740 end loop;
19741
19742 pa_budget_pvt.Validate_Budget_Lines
19743 (p_calling_context => 'UPDATE_PLANNING_ELEMENT_ATTR'
19744 ,p_pa_project_id => l_project_id
19745 ,p_budget_type_code => NULL
19746 ,p_fin_plan_type_id => l_fin_plan_type_id
19747 ,p_version_type => l_version_type
19748 ,p_resource_list_id => l_resource_list_id
19749 ,p_time_phased_code => l_time_phased_code
19750 ,p_budget_entry_method_code => NULL
19751 ,p_entry_level_code => l_entry_level_code
19752 ,p_allow_qty_flag => null
19753 ,p_allow_raw_cost_flag => null
19754 ,p_allow_burdened_cost_flag => null
19755 ,p_allow_revenue_flag => null
19756 ,p_multi_currency_flag => l_multi_curr_flag
19757 ,p_project_cost_rate_type => null
19758 ,p_project_cost_rate_date_typ => null
19759 ,p_project_cost_rate_date => null
19760 ,p_project_cost_exchange_rate => null
19761 ,p_projfunc_cost_rate_type => null
19762 ,p_projfunc_cost_rate_date_typ => null
19763 ,p_projfunc_cost_rate_date => null
19764 ,p_projfunc_cost_exchange_rate => null
19765 ,p_project_rev_rate_type => null
19766 ,p_project_rev_rate_date_typ => null
19767 ,p_project_rev_rate_date => null
19768 ,p_project_rev_exchange_rate => null
19769 ,p_projfunc_rev_rate_type => null
19770 ,p_projfunc_rev_rate_date_typ => null
19771 ,p_projfunc_rev_rate_date => null
19772 ,p_projfunc_rev_exchange_rate => null
19773 ,p_planning_start_date_tbl => l_planning_start_date_tbl
19774 ,p_planning_end_date_tbl => l_planning_end_date_tbl
19775 ,p_spread_curve_name_tbl => l_spread_curve_name_tbl
19776 ,p_sp_fixed_date_tbl => l_sp_fixed_date_tbl
19777 ,p_etc_method_name_tbl => l_etc_method_name_tbl
19778 ,p_uom_tbl => l_uom_tbl
19779 ,p_mfc_cost_type_tbl => l_mfc_cost_type_tbl
19780 ,p_version_info_rec => l_version_info_rec
19781 ,px_budget_lines_in => l_budget_lines_in_tbl
19782 ,x_budget_lines_out => l_budget_lines_out_tbl
19783 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
19784 ,x_etc_method_code_tbl => l_etc_method_code_tbl
19785 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
19786 ,x_msg_count => l_msg_count
19787 ,x_msg_data => l_msg_data
19788 ,x_return_status => l_return_status);
19789
19790 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19791
19792 IF l_debug_mode = 'Y' THEN
19793 pa_debug.write_file('Failed due to error in pa_budget_pvt.validate_budget_lines',5);
19794 END IF;
19795 raise PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
19796 END IF;
19797
19798 --DBMS_OUTPUT.PUT_LINE('PA_BUDGET_PVT.validate_budget_lines successful');
19799 /*
19800 for i in l_etc_method_code_tbl.first..l_etc_method_code_tbl.count loop
19801 DBMS_OUTPUT.PUT_LINE('resource alias '||i||' '||l_budget_lines_in_tbl(i).pm_task_reference);
19802 end loop;
19803 */
19804 l_resource_assignment_id_tbl.extend(l_budget_lines_in_tbl.count);
19805 l_currency_code_tbl.extend(l_budget_lines_in_tbl.count);
19806
19807 l_assignment_description_tbl.extend(l_budget_lines_in_tbl.count);
19808 l_attribute_category_tbl.extend(l_budget_lines_in_tbl.count);
19809 l_attribute1_tbl.extend(l_budget_lines_in_tbl.count);
19810 l_attribute2_tbl.extend(l_budget_lines_in_tbl.count);
19811 l_attribute3_tbl.extend(l_budget_lines_in_tbl.count);
19812 l_attribute4_tbl.extend(l_budget_lines_in_tbl.count);
19813 l_attribute5_tbl.extend(l_budget_lines_in_tbl.count);
19814 l_attribute6_tbl.extend(l_budget_lines_in_tbl.count);
19815 l_attribute7_tbl.extend(l_budget_lines_in_tbl.count);
19816 l_attribute8_tbl.extend(l_budget_lines_in_tbl.count);
19817 l_attribute9_tbl.extend(l_budget_lines_in_tbl.count);
19818 l_attribute10_tbl.extend(l_budget_lines_in_tbl.count);
19819 l_attribute11_tbl.extend(l_budget_lines_in_tbl.count);
19820 l_attribute12_tbl.extend(l_budget_lines_in_tbl.count);
19821 l_attribute13_tbl.extend(l_budget_lines_in_tbl.count);
19822 l_attribute14_tbl.extend(l_budget_lines_in_tbl.count);
19823 l_attribute15_tbl.extend(l_budget_lines_in_tbl.count);
19824 l_attribute16_tbl.extend(l_budget_lines_in_tbl.count);
19825 l_attribute17_tbl.extend(l_budget_lines_in_tbl.count);
19826 l_attribute18_tbl.extend(l_budget_lines_in_tbl.count);
19827 l_attribute19_tbl.extend(l_budget_lines_in_tbl.count);
19828 l_attribute20_tbl.extend(l_budget_lines_in_tbl.count);
19829 l_attribute21_tbl.extend(l_budget_lines_in_tbl.count);
19830 l_attribute22_tbl.extend(l_budget_lines_in_tbl.count);
19831 l_attribute23_tbl.extend(l_budget_lines_in_tbl.count);
19832 l_attribute24_tbl.extend(l_budget_lines_in_tbl.count);
19833 l_attribute25_tbl.extend(l_budget_lines_in_tbl.count);
19834 l_attribute26_tbl.extend(l_budget_lines_in_tbl.count);
19835 l_attribute27_tbl.extend(l_budget_lines_in_tbl.count);
19836 l_attribute28_tbl.extend(l_budget_lines_in_tbl.count);
19837 l_attribute29_tbl.extend(l_budget_lines_in_tbl.count);
19838 l_attribute30_tbl.extend(l_budget_lines_in_tbl.count);
19839
19840
19841 open c_get_plan_class_code(l_fin_plan_type_id);
19842 fetch c_get_plan_class_code into l_fin_plan_class_code;
19843 close c_get_plan_class_code;
19844
19845 SELECT decode(pf.approved_rev_plan_type_flag,'Y'
19846 ,pa.PROJFUNC_CURRENCY_CODE
19847 ,pa.PROJECT_CURRENCY_CODE)
19848 INTO l_currency_code
19849 FROM pa_projects_all pa,
19850 pa_proj_fp_options pf
19851 WHERE pa.project_id=l_project_id
19852 AND pa.project_id=pf.project_id
19853 AND pf.fin_plan_version_id=l_budget_version_id;
19854
19855 FOR i IN 1..l_budget_lines_in_tbl.COUNT loop
19856 /*
19857 begin
19858 select resource_assignment_id
19859 into l_resource_assignment_id_tbl(i)
19860 from pa_resource_assignments
19861 where budget_version_id=l_budget_version_id
19862 and task_id=l_budget_lines_in_tbl(i).pa_task_id
19863 and resource_list_member_id=l_budget_lines_in_tbl(i).resource_list_member_id
19864 and project_id=l_project_id
19865 and PROJECT_ASSIGNMENT_ID =-1;
19866 exception when no_data_found then
19867 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
19868 p_msg_name => 'RES_ASSGN_DOESNT_EXIST_AMG',
19869 p_token1 => 'PROJECT_OR_TASK_NUMBER',
19870 p_value1 => l_budget_lines_in_tbl(i).pm_task_reference,
19871 p_token2 => 'RESOURCE',
19872 p_value2 => l_budget_lines_in_tbl(i).resource_alias);
19873 end;*/
19874 l_resource_assignment_id_tbl(i) := pa_budget_pvt.G_res_assign_tbl(i).resource_assignment_id;
19875 begin
19876 select txn_currency_code into l_currency_code_tbl(i)
19877 from pa_budget_lines
19878 where resource_assignment_id=l_resource_assignment_id_tbl(i)
19879 and rownum=1;
19880 exception when no_data_found then
19881 l_currency_code_tbl(i):=l_currency_code;
19882 end;
19883
19884
19885 l_assignment_description_tbl(i) := p_planning_element_rec_tbl(i).assignment_description;
19886 if l_assignment_description_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
19887 l_assignment_description_tbl(i):=null;
19888 elsif l_assignment_description_tbl(i) = null then
19889 l_assignment_description_tbl(i):=FND_API.G_MISS_CHAR;
19890 end if;
19891
19892 l_attribute_category_tbl(i) := p_planning_element_rec_tbl(i).attribute_category;
19893 l_attribute1_tbl(i) := p_planning_element_rec_tbl(i).attribute1;
19894 l_attribute2_tbl(i) := p_planning_element_rec_tbl(i).attribute2;
19895 l_attribute3_tbl(i) := p_planning_element_rec_tbl(i).attribute3;
19896 l_attribute4_tbl(i) := p_planning_element_rec_tbl(i).attribute4;
19897 l_attribute5_tbl(i) := p_planning_element_rec_tbl(i).attribute5;
19898 l_attribute6_tbl(i) := p_planning_element_rec_tbl(i).attribute6;
19899 l_attribute7_tbl(i) := p_planning_element_rec_tbl(i).attribute7;
19900 l_attribute8_tbl(i) := p_planning_element_rec_tbl(i).attribute8;
19901 l_attribute9_tbl(i) := p_planning_element_rec_tbl(i).attribute9;
19902 l_attribute10_tbl(i) := p_planning_element_rec_tbl(i).attribute10;
19903 l_attribute11_tbl(i) := p_planning_element_rec_tbl(i).attribute11;
19904 l_attribute12_tbl(i) := p_planning_element_rec_tbl(i).attribute12;
19905 l_attribute13_tbl(i) := p_planning_element_rec_tbl(i).attribute13;
19906 l_attribute14_tbl(i) := p_planning_element_rec_tbl(i).attribute14;
19907 l_attribute15_tbl(i) := p_planning_element_rec_tbl(i).attribute15;
19908 l_attribute16_tbl(i) := p_planning_element_rec_tbl(i).attribute16;
19909 l_attribute17_tbl(i) := p_planning_element_rec_tbl(i).attribute17;
19910 l_attribute18_tbl(i) := p_planning_element_rec_tbl(i).attribute18;
19911 l_attribute19_tbl(i) := p_planning_element_rec_tbl(i).attribute19;
19912 l_attribute20_tbl(i) := p_planning_element_rec_tbl(i).attribute20;
19913 l_attribute21_tbl(i) := p_planning_element_rec_tbl(i).attribute21;
19914 l_attribute22_tbl(i) := p_planning_element_rec_tbl(i).attribute22;
19915 l_attribute23_tbl(i) := p_planning_element_rec_tbl(i).attribute23;
19916 l_attribute24_tbl(i) := p_planning_element_rec_tbl(i).attribute24;
19917 l_attribute25_tbl(i) := p_planning_element_rec_tbl(i).attribute25;
19918 l_attribute26_tbl(i) := p_planning_element_rec_tbl(i).attribute26;
19919 l_attribute27_tbl(i) := p_planning_element_rec_tbl(i).attribute27;
19920 l_attribute28_tbl(i) := p_planning_element_rec_tbl(i).attribute28;
19921 l_attribute29_tbl(i) := p_planning_element_rec_tbl(i).attribute29;
19922 l_attribute30_tbl(i) := p_planning_element_rec_tbl(i).attribute30;
19923
19924 end loop;
19925
19926 pa_fp_planning_transaction_pub.update_planning_transactions(
19927 p_context => l_fin_plan_class_code
19928 ,p_budget_version_id => l_budget_version_id
19929 ,p_resource_assignment_id_tbl => l_resource_assignment_id_tbl
19930 ,p_planning_start_date_tbl => l_planning_start_date_tbl
19931 ,p_planning_end_date_tbl => l_planning_end_date_tbl
19932 ,p_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
19933 ,p_etc_method_code_tbl => l_etc_method_code_tbl
19934 ,p_spread_curve_id_tbl => l_spread_curve_id_tbl
19935 ,p_sp_fixed_date_tbl => l_sp_fixed_date_tbl
19936 ,p_currency_code_tbl => l_currency_code_tbl
19937 ,p_assignment_description_tbl => l_assignment_description_tbl
19938 ,p_attribute_category_tbl => l_attribute_category_tbl
19939 ,p_attribute1_tbl => l_attribute1_tbl
19940 ,p_attribute2_tbl => l_attribute2_tbl
19941 ,p_attribute3_tbl => l_attribute3_tbl
19942 ,p_attribute4_tbl => l_attribute4_tbl
19943 ,p_attribute5_tbl => l_attribute5_tbl
19944 ,p_attribute6_tbl => l_attribute6_tbl
19945 ,p_attribute7_tbl => l_attribute7_tbl
19946 ,p_attribute8_tbl => l_attribute8_tbl
19947 ,p_attribute9_tbl => l_attribute9_tbl
19948 ,p_attribute10_tbl => l_attribute10_tbl
19949 ,p_attribute11_tbl => l_attribute11_tbl
19950 ,p_attribute12_tbl => l_attribute12_tbl
19951 ,p_attribute13_tbl => l_attribute13_tbl
19952 ,p_attribute14_tbl => l_attribute14_tbl
19953 ,p_attribute15_tbl => l_attribute15_tbl
19954 ,p_attribute16_tbl => l_attribute16_tbl
19955 ,p_attribute17_tbl => l_attribute17_tbl
19956 ,p_attribute18_tbl => l_attribute18_tbl
19957 ,p_attribute19_tbl => l_attribute19_tbl
19958 ,p_attribute20_tbl => l_attribute20_tbl
19959 ,p_attribute21_tbl => l_attribute21_tbl
19960 ,p_attribute22_tbl => l_attribute22_tbl
19961 ,p_attribute23_tbl => l_attribute23_tbl
19962 ,p_attribute24_tbl => l_attribute24_tbl
19963 ,p_attribute25_tbl => l_attribute25_tbl
19964 ,p_attribute26_tbl => l_attribute26_tbl
19965 ,p_attribute27_tbl => l_attribute27_tbl
19966 ,p_attribute28_tbl => l_attribute28_tbl
19967 ,p_attribute29_tbl => l_attribute29_tbl
19968 ,p_attribute30_tbl => l_attribute30_tbl
19969 ,p_pji_rollup_required => 'Y'
19970 ,p_distrib_amts => l_distribute_amounts -- Bug 9610380
19971 ,x_msg_count => l_msg_count
19972 ,x_msg_data => l_msg_data
19973 ,x_return_status => l_return_status
19974 );
19975
19976 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
19977 THEN
19978 IF l_debug_mode = 'Y' THEN
19979 pa_debug.write_file('Failed due to error in update_planning_transactions',5);
19980 END IF;
19981 raise PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
19982 END IF;
19983
19984
19985
19986 pa_debug.reset_err_stack;
19987
19988 EXCEPTION
19989 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
19990
19991 l_msg_count := FND_MSG_PUB.count_msg;
19992
19993 IF l_msg_count = 1 THEN
19994 PA_INTERFACE_UTILS_PUB.get_messages
19995 ( p_encoded => FND_API.G_TRUE
19996 ,p_msg_index => 1
19997 ,p_msg_count => l_msg_count
19998 ,p_msg_data => l_msg_data
19999 ,p_data => l_data
20000 ,p_msg_index_out => l_msg_index_out);
20001 x_msg_data := l_data;
20002 x_msg_count := l_msg_count;
20003 ELSE
20004 x_msg_count := l_msg_count;
20005 x_msg_data := l_msg_data;
20006 END IF;
20007 IF l_debug_mode = 'Y' THEN
20008 pa_debug.g_err_stage:='Invalid Arguments Passed';
20009 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
20010 pa_debug.write_file('update_plannning_element_attr ' || x_msg_data,5);
20011 END IF;
20012
20013 x_return_status:= FND_API.G_RET_STS_ERROR;
20014
20015
20016 pa_debug.reset_err_stack;
20017
20018
20019 WHEN Others THEN
20020
20021
20022 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20023 x_msg_count := 1;
20024 x_msg_data := SQLERRM;
20025 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_BUDGET_PUB'
20026 ,p_procedure_name => 'update_plannning_element_attr');
20027 IF l_debug_mode = 'Y' THEN
20028 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
20029 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
20030 pa_debug.write_file('update_plannning_element_attr ' || pa_debug.G_Err_Stack,5);
20031 END IF;
20032
20033 pa_debug.reset_err_stack;
20034
20035 END update_plannning_element_attr;
20036
20037
20038 end PA_BUDGET_PUB;