[Home] [Help]
PACKAGE BODY: APPS.PA_BUDGET_PUB
Source
1 package body PA_BUDGET_PUB as
2 --$Header: PAPMBUPB.pls 120.26.12010000.3 2008/09/09 22:50:47 snizam 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 BEGIN
281
282 --Standard begin of API savepoint
283 SAVEPOINT create_draft_budget_pub;
284 p_msg_count := 0;
285 p_return_status := FND_API.G_RET_STS_SUCCESS;
286 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
287 l_module_name := 'create_draft_budget' || g_module_name;
288
289 -- Changes for bug 3182963
290 IF l_debug_mode = 'Y' THEN
291 pa_debug.set_curr_function( p_function => 'create_draft_budget',
292 p_debug_mode => l_debug_mode );
293 END IF;
294
295
296
297 -- Standard call to check for call compatibility.
298 IF NOT FND_API.Compatible_API_Call ( PA_BUDGET_PUB.g_api_version_number ,
299 p_api_version_number ,
300 l_api_name ,
301 G_PKG_NAME )
302 THEN
303 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
304 END IF;
305
306 --dbms_output.put_line('copying input parameters to local variables');
307
308 --Copy the input parametes into the local variables.
309
310 l_resource_list_name := p_resource_list_name ;
311
312 -- G_MISS_NUM can not fit in l_resource_list_id . Hence make it null
313 IF p_resource_list_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
314 -- dbms_output.put_line('Copying the miss num to l_resource_list_id');
315 l_resource_list_id := NULL;
316 ELSE
317 l_resource_list_id := p_resource_list_id;
318 END IF;
319
320 --Check if input parameters is G_PA_MISS_XXX. If true set to NULL
321 --Changes made by Xin Liu for post_fpk. 24-APR-03
322
323 IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
324 l_fin_plan_type_id := NULL;
325 ELSE
326 l_fin_plan_type_id := p_fin_plan_type_id ;
327 END IF;
328
329 IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
330 l_fin_plan_type_name := NULL;
331 ELSE
332 l_fin_plan_type_name := p_fin_plan_type_name ;
333 END IF;
334
335 IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
336 l_version_type := NULL;
337 ELSE
338 l_version_type := p_version_type ;
339 END IF;
340
341 IF p_fin_plan_level_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
342 l_fin_plan_level_code := NULL;
343 ELSE
344 l_fin_plan_level_code := p_fin_plan_level_code ;
345 END IF;
346
347 IF p_time_phased_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
348 l_time_phased_code := NULL;
349 ELSE
350 l_time_phased_code := p_time_phased_code ;
351 END IF;
352
353 IF p_plan_in_multi_curr_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
354 l_plan_in_multi_curr_flag := NULL; --Bug 4586948.
355 ELSE
356 l_plan_in_multi_curr_flag := p_plan_in_multi_curr_flag ;
357 END IF;
358
359 IF p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
360 l_projfunc_cost_rate_type := NULL;
361 ELSE
362 l_projfunc_cost_rate_type := p_projfunc_cost_rate_type ;
363 END IF;
364
365 IF p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
366 l_projfunc_cost_rate_date_typ := NULL;
367 ELSE
368 l_projfunc_cost_rate_date_typ := p_projfunc_cost_rate_date_typ ;
369 END IF;
370
371 IF p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
372 l_projfunc_cost_rate_date := NULL;
373 ELSE
374 l_projfunc_cost_rate_date := p_projfunc_cost_rate_date ;
375 END IF;
376
377 IF p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
378 l_projfunc_rev_rate_type := NULL;
379 ELSE
380 l_projfunc_rev_rate_type := p_projfunc_rev_rate_type ;
381 END IF;
382
383 IF p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
384 l_projfunc_rev_rate_date_typ := NULL;
385 ELSE
386 l_projfunc_rev_rate_date_typ := p_projfunc_rev_rate_date_typ ;
387 END IF;
388
389 IF p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
390 l_projfunc_rev_rate_date := NULL;
391 ELSE
392 l_projfunc_rev_rate_date := p_projfunc_rev_rate_date ;
393 END IF;
394
395 IF p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
396 l_project_cost_rate_type := NULL;
397 ELSE
398 l_project_cost_rate_type := p_project_cost_rate_type ;
399 END IF;
400
401 IF p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
402 l_project_cost_rate_date_typ := NULL;
403 ELSE
404 l_project_cost_rate_date_typ := p_project_cost_rate_date_typ ;
405 END IF;
406
407 IF p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
408 l_project_cost_rate_date := NULL;
409 ELSE
410 l_project_cost_rate_date := p_project_cost_rate_date ;
411 END IF;
412
413 IF p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
414 l_project_rev_rate_type := NULL;
415 ELSE
416 l_project_rev_rate_type := p_project_rev_rate_type ;
417 END IF;
418
419 IF p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
420 l_project_rev_rate_date_typ := NULL;
421 ELSE
422 l_project_rev_rate_date_typ := p_project_rev_rate_date_typ ;
423 END IF;
424
425 IF p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
426 l_project_rev_rate_date := NULL;
427 ELSE
428 l_project_rev_rate_date := p_project_rev_rate_date ;
429 END IF;
430
431 IF p_raw_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
432 l_raw_cost_flag := 'N';
433 ELSE
434 l_raw_cost_flag := p_raw_cost_flag ;
435 END IF;
436
437 IF p_burdened_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
438 l_burdened_cost_flag := 'N';
439 ELSE
440 l_burdened_cost_flag := p_burdened_cost_flag ;
441 END IF;
442
443 IF p_revenue_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
444 l_revenue_flag := 'N';
445 ELSE
446 l_revenue_flag := p_revenue_flag ;
447 END IF;
448
449 IF p_cost_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
450 l_cost_qty_flag := 'N';
451 ELSE
452 l_cost_qty_flag := p_cost_qty_flag ;
453 END IF;
454
455 IF p_revenue_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
456 l_revenue_qty_flag := 'N';
457 ELSE
458 l_revenue_qty_flag := p_revenue_qty_flag ;
459 END IF;
460
461 IF p_all_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
462 l_all_qty_flag := 'N';
463 ELSE
464 l_all_qty_flag := p_all_qty_flag ;
465 END IF;
466
467 IF p_create_new_curr_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
468 l_create_new_working_flag := 'N';
469 ELSE
470 l_create_new_working_flag := p_create_new_curr_working_flag ;
471 END IF;
472
473 IF p_replace_current_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
474 l_replace_current_working_flag := 'N';
475 ELSE
476 l_replace_current_working_flag := p_replace_current_working_flag ;
477 END IF;
478
479 IF p_using_resource_lists_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
480 l_using_resource_lists_flag := 'Y';
481 ELSE
482 l_using_resource_lists_flag := p_using_resource_lists_flag ;
483 END IF;
484
485
486 -- G_MISS_NUM can not fit in l_project_id . Hence make it null
487 IF p_pa_project_id= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
488 --dbms_output.put_line('Copying the miss num to l_project_id');
489 l_project_id := NULL;
490 ELSE
491 l_project_id := p_pa_project_id;
492 END IF;
493 --Get the user id and responsibility Ids
494 l_user_id := FND_GLOBAL.User_id;
495 l_resp_id := FND_GLOBAL.Resp_id;
496
497 -- This api will initialize the data that will be used by the map_new_amg_msg.
498 -- Commented out the procedure call as required by Venkatesh. 25-APR-03
499 /*
500 PA_INTERFACE_UTILS_PUB.Set_Global_Info
501 ( p_api_version_number => 1.0
502 ,p_responsibility_id => l_resp_id
503 ,p_user_id => l_user_id
504 ,p_calling_mode => 'AMG' --bug 2783845
505 ,p_msg_count => p_msg_count
506 ,p_msg_data => p_msg_data
507 ,p_return_status => p_return_status);
508
509 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
510 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
511 END IF;
512 */
513
514 IF l_debug_mode = 'Y' THEN
515 pa_debug.g_err_stage := 'About to call validate header info';
516 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
517 END IF;
518
519 --Call the api that validates the input information
520 pa_budget_pvt.Validate_Header_Info
521 ( p_api_version_number => p_api_version_number
522 /* Bug 3133930- parameter included to pass version name */
523 ,p_budget_version_name => p_budget_version_name
524 ,p_init_msg_list => p_init_msg_list
525 ,px_pa_project_id => l_project_id
526 ,p_pm_project_reference => p_pm_project_reference
527 ,p_pm_product_code => p_pm_product_code
528 ,p_budget_type_code => p_budget_type_code
529 ,p_entry_method_code => p_entry_method_code
530 ,px_resource_list_name => l_resource_list_name
531 ,px_resource_list_id => l_resource_list_id
532 ,px_fin_plan_type_id => l_fin_plan_type_id
533 ,px_fin_plan_type_name => l_fin_plan_type_name
534 ,px_version_type => l_version_type
535 ,px_fin_plan_level_code => l_fin_plan_level_code
536 ,px_time_phased_code => l_time_phased_code
537 ,px_plan_in_multi_curr_flag => l_plan_in_multi_curr_flag
538 ,px_projfunc_cost_rate_type => l_projfunc_cost_rate_type
539 ,px_projfunc_cost_rate_date_typ => l_projfunc_cost_rate_date_typ
540 ,px_projfunc_cost_rate_date => l_projfunc_cost_rate_date
541 ,px_projfunc_rev_rate_type => l_projfunc_rev_rate_type
542 ,px_projfunc_rev_rate_date_typ => l_projfunc_rev_rate_date_typ
543 ,px_projfunc_rev_rate_date => l_projfunc_rev_rate_date
544 ,px_project_cost_rate_type => l_project_cost_rate_type
545 ,px_project_cost_rate_date_typ => l_project_cost_rate_date_typ
546 ,px_project_cost_rate_date => l_project_cost_rate_date
547 ,px_project_rev_rate_type => l_project_rev_rate_type
548 ,px_project_rev_rate_date_typ => l_project_rev_rate_date_typ
549 ,px_project_rev_rate_date => l_project_rev_rate_date
550 ,px_raw_cost_flag => l_raw_cost_flag
551 ,px_burdened_cost_flag => l_burdened_cost_flag
552 ,px_revenue_flag => l_revenue_flag
553 ,px_cost_qty_flag => l_cost_qty_flag
554 ,px_revenue_qty_flag => l_revenue_qty_flag
555 ,px_all_qty_flag => l_all_qty_flag
556 ,p_create_new_curr_working_flag => l_create_new_working_flag
557 ,p_replace_current_working_flag => l_replace_current_working_flag
558 ,p_change_reason_code => p_change_reason_code
559 ,p_calling_module => 'PA_PM_CREATE_DRAFT_BUDGET'
560 ,p_using_resource_lists_flag => p_using_resource_lists_flag
561 ,x_budget_amount_code => l_budget_amount_code -- Added for bug 4224464
562 ,x_msg_count => p_msg_count
563 ,x_msg_data => p_msg_data
564 ,x_return_status => p_return_status);
565
566 IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
567
568 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
569
570 END IF;
571
572 IF l_debug_mode = 'Y' THEN
573 pa_debug.g_err_stage := 'Validate Header got executed successfully';
574 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
575 END IF;
576
577 -- Copy the input pl/sql table to a local pl/sql table. This is necessary since the
578 -- input table is a IN variable and hence read only.
579 l_budget_lines_in := p_budget_lines_in;
580
581
582 -- Budget type code and budget entry method,project id should be valid at this point
583 -- Hence exception handling is not done
584
585 IF (p_budget_type_code IS NOT NULL AND
586 p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
587
588 SELECT budget_amount_code
589 INTO l_budget_amount_code
590 FROM pa_budget_types
591 WHERE budget_type_code = p_budget_type_code;
592
593 SELECT time_phased_type_code
594 ,categorization_code
595 ,entry_level_code
596 INTO l_time_phased_type_code
597 ,l_categorization_code
598 ,l_entry_level_code
599 FROM pa_budget_entry_methods
600 WHERE budget_entry_method_code = p_entry_method_code
601 AND trunc(sysdate) BETWEEN trunc(start_date_active) and trunc(nvl(end_date_active,sysdate));
602
603 END IF;
604
605 SELECT segment1
606 INTO l_amg_segment1
607 FROM pa_projects_all
608 WHERE project_id=l_project_id;
609
610 IF l_debug_mode = 'Y' THEN
611 pa_debug.g_err_stage := 'Got the budget type details and segment1 of the project';
612 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
613 END IF;
614
615
616 /* After bug fix for bug 4052562, note that the below API returns UOM from rlm table as DOLLARS instead of
617 * pa_resources table. Due to this, the below api may not be suitable for usage
618 * for old budgets model which retrieves UOM from pa_resources (HOURS). As such,
619 * since UOM is not used in create_draft_budget api FOR OLD BUDGETS MODEL, reusing
620 * the below api for both old and new budget model resource lists. If for some
621 * reason in future, UOM of uncatrlm is to be used even for old budgets model,
622 * we should consider using pa_get_resource.get_uncateg_Resource_info. Not
623 * changing it now, since, pa_get_resource.get_uncateg_resource_info owned by RF
624 * team, as of now, has the same performance issue of full table scans on RLM
625 * and pa_resources tables. */
626 --Get the uncategorized resource list info.
627 pa_fin_plan_utils.Get_Uncat_Resource_List_Info
628 (x_resource_list_id => l_uncategorized_res_list_id,
629 x_resource_list_member_id => l_uncategorized_rlmid,
630 x_track_as_labor_flag => l_unc_track_as_labor_flag,
631 x_unit_of_measure => l_unc_unit_of_measure,
632 x_return_status => p_return_status,
633 x_msg_count => p_msg_count,
634 x_msg_data => p_msg_data );
635
636 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
637 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
638 -- RAISE FND_API.G_EXC_ERROR;
639 END IF; -- IF l_err_code <> 0 THEN
640
641 IF l_debug_mode = 'Y' THEN
642 pa_debug.g_err_stage := 'Got the uncategorized res list info';
643 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
644 END IF;
645
646 --Added by Xin Liu for supporting Project Connect 4.0
647 --5/6/2003
648
649 If l_using_resource_lists_flag = 'N' THEN
650
651 l_resource_list_id :=l_uncategorized_res_list_id;
652
653 END IF;
654
655 --When description is not passed, set value to NULL
656
657 IF p_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
658 THEN
659 l_description := NULL;
660 ELSE
661 l_description := p_description;
662 END IF;
663
664 /* -- dbms_output.put_line('Before setting flex fields to NULL, when not passed'); */
665
666 --When descriptive flex fields are not passed set them to NULL
667 IF p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
668 THEN
669 l_attribute_category := NULL;
670 ELSE
671 l_attribute_category := p_attribute_category;
672 END IF;
673 IF p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
674 THEN
675 l_attribute1 := NULL;
676 ELSE
677 l_attribute1 := p_attribute1;
678 END IF;
679 IF p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
680 THEN
681 l_attribute2 := NULL;
682 ELSE
683 l_attribute2 := p_attribute2;
684 END IF;
685 IF p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
686 THEN
687 l_attribute3 := NULL;
688 ELSE
689 l_attribute3 := p_attribute3;
690 END IF;
691 IF p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
692 THEN
693 l_attribute4 := NULL;
694 ELSE
695 l_attribute4 := p_attribute4;
696 END IF;
697
698 IF p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
699 THEN
700 l_attribute5 := NULL;
701 ELSE
702 l_attribute5 := p_attribute5;
703 END IF;
704
705 IF p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
706 THEN
707 l_attribute6 := NULL;
708 ELSE
709 l_attribute6 := p_attribute6;
710 END IF;
711
712 IF p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
713 THEN
714 l_attribute7 := NULL;
715 ELSE
716 l_attribute7 := p_attribute7;
717 END IF;
718
719 IF p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
720 THEN
721 l_attribute8 := NULL;
722 ELSE
723 l_attribute8 := p_attribute8;
724 END IF;
725 IF p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
726 THEN
727 l_attribute9 := NULL;
728 ELSE
729 l_attribute9 := p_attribute9;
730 END IF;
731 IF p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
732 THEN
733 l_attribute10 := NULL;
734 ELSE
735 l_attribute10 := p_attribute10;
736 END IF;
737 IF p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
738 THEN
739 l_attribute11 := NULL;
740 ELSE
741 l_attribute11 := p_attribute11;
742 END IF;
743 IF p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
744 THEN
745 l_attribute12 := NULL;
746 ELSE
747 l_attribute12 := p_attribute12;
748 END IF;
749 IF p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
750 THEN
751 l_attribute13 := NULL;
752 ELSE
753 l_attribute13 := p_attribute13;
754 END IF;
755 IF p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
756 THEN
757 l_attribute14:= NULL;
758 ELSE
759 l_attribute14:= p_attribute14;
760 END IF;
761
762 IF p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
763 THEN
764 l_attribute15 := NULL;
765 ELSE
766 l_attribute15 := p_attribute15;
767 END IF;
768
769
770 IF p_pm_budget_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
771 THEN
772 l_pm_budget_reference := NULL;
773 ELSE
774 l_pm_budget_reference := p_pm_budget_reference;
775 END IF;
776
777 IF p_budget_version_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
778 THEN
779 l_budget_version_name := NULL;
780 ELSE
781 l_budget_version_name := p_budget_version_name;
782 END IF;
783
784 IF p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
785 THEN
786 l_change_reason_code := NULL;
787 ELSE
788 l_change_reason_code := p_change_reason_code;
789 END IF;
790
791
792 IF l_debug_mode = 'Y' THEN
793 pa_debug.g_err_stage := 'Done with the initialisation of flex fields, dexcription, etc';
794 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
795 END IF;
796
797
798 IF p_budget_type_code IS NOT NULL AND
799 p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
800
801 -- Lock the existing working version.
802 OPEN l_budget_version_csr( l_project_id, p_budget_type_code );
803 FETCH l_budget_version_csr INTO l_budget_version_rec;
804 IF l_budget_version_csr%FOUND THEN
805
806 OPEN l_lock_old_budget_csr( l_budget_version_rec.budget_Version_id );
807 CLOSE l_lock_old_budget_csr; --FYI, does not release locks
808
809 END IF;
810 CLOSE l_budget_version_csr;
811
812 /* It is assumed that if the program reaches till this point,then there are no budget lines with errors in the out plsql table*/
813
814 --Call the api that creates the draft budget
815 PA_BUDGET_UTILS.create_draft
816 (x_project_id => l_project_id
817 ,x_budget_type_code => p_budget_type_code
818 ,x_version_name => l_budget_version_name
819 ,x_description => l_description
820 ,x_resource_list_id => l_resource_list_id
821 ,x_change_reason_code => l_change_reason_code
822 ,x_budget_entry_method_code => p_entry_method_code
823 ,x_attribute_category => l_attribute_category
824 ,x_attribute1 => l_attribute1
825 ,x_attribute2 => l_attribute2
826 ,x_attribute3 => l_attribute3
827 ,x_attribute4 => l_attribute4
828 ,x_attribute5 => l_attribute5
829 ,x_attribute6 => l_attribute6
830 ,x_attribute7 => l_attribute7
831 ,x_attribute8 => l_attribute8
832 ,x_attribute9 => l_attribute9
833 ,x_attribute10 => l_attribute10
834 ,x_attribute11 => l_attribute11
835 ,x_attribute12 => l_attribute12
836 ,x_attribute13 => l_attribute13
837 ,x_attribute14 => l_attribute14
838 ,x_attribute15 => l_attribute15
839 ,x_budget_version_id => l_budget_version_id
840 ,x_err_code => l_err_code
841 ,x_err_stage => l_err_stage
842 ,x_err_stack => l_err_stack
843 ,x_pm_product_code => p_pm_product_code
844 ,x_pm_budget_reference => l_pm_budget_reference );
845
846 -----------
847 -- temporary solution
848 -- COMMIT in DELETE_DRAFT removes all savepoints!!!
849
850 SAVEPOINT create_draft_budget_pub;
851 -----------
852
853 IF l_err_code > 0
854 THEN
855 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
856 THEN
857
858 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
859 THEN
860 pa_interface_utils_pub.map_new_amg_msg
861 ( p_old_message_code => 'PA_CREATE_DRAFT_FAILED'
862 ,p_msg_attribute => 'CHANGE'
863 ,p_resize_flag => 'N'
864 ,p_msg_context => 'BUDG'
865 ,p_attribute1 => l_amg_segment1
866 ,p_attribute2 => ''
867 ,p_attribute3 => p_budget_type_code
868 ,p_attribute4 => ''
869 ,p_attribute5 => '');
870 ELSE
871 pa_interface_utils_pub.map_new_amg_msg
872 ( p_old_message_code => l_err_stage
873 ,p_msg_attribute => 'CHANGE'
874 ,p_resize_flag => 'N'
875 ,p_msg_context => 'BUDG'
876 ,p_attribute1 => l_amg_segment1
877 ,p_attribute2 => ''
878 ,p_attribute3 => p_budget_type_code
879 ,p_attribute4 => ''
880 ,p_attribute5 => '');
881 END IF;
882
883 END IF;
884
885 IF l_debug_mode = 'Y' THEN
886 pa_debug.g_err_stage := 'Error executing create draft';
887 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
888 END IF;
889
890 RAISE FND_API.G_EXC_ERROR;
891
892 ELSIF l_err_code < 0
893 THEN
894
895 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
896 THEN
897
898 FND_MSG_PUB.add_exc_msg
899 ( p_pkg_name => 'PA_BUDGET_UTILS'
900 , p_procedure_name => 'CREATE_DRAFT'
901 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
902
903 END IF;
904
905 IF l_debug_mode = 'Y' THEN
906 pa_debug.g_err_stage := 'SQL Error executing create draft';
907 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
908 END IF;
909
910
911 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
912
913 END IF;
914
915 IF l_debug_mode = 'Y' THEN
916 pa_debug.g_err_stage := 'Created the version in the budget model';
917 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
918 END IF;
919
920 -- Commenting out this select as the create draft now returns the id of hte
921 -- newly created version
922 -- SELECT pa_budget_versions_s.currval --because x_budget_version_id in procedure
923 -- INTO l_budget_version_id --PA_BUDGET_UTILS.create_draft returns nothing: BUG.
924 -- FROM SYS.DUAL;
925
926 IF l_debug_mode = 'Y' THEN
927 pa_debug.g_err_stage := 'Created version is is '|| l_budget_version_id ;
928 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
929
930 pa_debug.g_err_stage := 'About to call validate budget lines';
931 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
932 END IF;
933
934 --Validate the budget lines.
935 IF ( nvl(l_budget_lines_in.last,0) > 0 ) THEN
936
937 --Added by Xin Liu. Handle G_MISS_XXX for l_budget_lines_in before calling Validate_Budget_Lines.
938 FOR i in l_budget_lines_in.FIRST..l_budget_lines_in.LAST LOOP
939
940 IF l_budget_lines_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
941 l_budget_lines_in(i).pa_task_id := NULL;
942 END IF;
943
944 IF l_budget_lines_in(i).pm_task_reference =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
945 l_budget_lines_in(i).pm_task_reference := NULL;
946 END IF;
947
948 IF l_budget_lines_in(i).resource_alias= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
949 l_budget_lines_in(i).resource_alias := NULL;
950 END IF;
951
952 IF l_budget_lines_in(i).resource_list_member_id =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
953 l_budget_lines_in(i).resource_list_member_id:= NULL;
954 END IF;
955
956 IF l_budget_lines_in(i).budget_start_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
957 l_budget_lines_in(i).budget_start_date:= NULL;
958 END IF;
959 IF l_budget_lines_in(i).budget_end_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
960 l_budget_lines_in(i).budget_end_date:= NULL;
961 END IF;
962
963 IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
964 l_budget_lines_in(i).period_name := NULL;
965 END IF;
966
967 IF l_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
968 l_budget_lines_in(i).raw_cost := NULL;
969 END IF;
970
971 IF l_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
972 l_budget_lines_in(i).burdened_cost := NULL;
973 END IF;
974
975 IF l_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
976 l_budget_lines_in(i).revenue := NULL;
977 END IF;
978
979 IF l_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
980 l_budget_lines_in(i).quantity := NULL;
981 END IF;
982
983
984 IF l_budget_lines_in(i).change_reason_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
985 l_budget_lines_in(i).change_reason_code :=NULL;
986 END IF;
987
988 IF l_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
989 l_budget_lines_in(i).description := NULL;
990 END IF;
991
992 IF l_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
993 l_budget_lines_in(i).attribute_category := NULL;
994 END IF;
995
996 IF l_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
997 l_budget_lines_in(i).attribute1 := NULL;
998 END IF;
999
1000 IF l_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1001 l_budget_lines_in(i).attribute2 := NULL;
1002 END IF;
1003
1004 IF l_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1005 l_budget_lines_in(i).attribute3 := NULL;
1006 END IF;
1007
1008 IF l_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1009 l_budget_lines_in(i).attribute4 := NULL;
1010 END IF;
1011
1012 IF l_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1013 l_budget_lines_in(i).attribute5 := NULL;
1014 END IF;
1015
1016 IF l_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1017 l_budget_lines_in(i).attribute6 := NULL;
1018 END IF;
1019
1020 IF l_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1021 l_budget_lines_in(i).attribute7 := NULL;
1022 END IF;
1023
1024 IF l_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1025 l_budget_lines_in(i).attribute8 := NULL;
1026 END IF;
1027
1028 IF l_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1029 l_budget_lines_in(i).attribute9 := NULL;
1030 END IF;
1031
1032 IF l_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1033 l_budget_lines_in(i).attribute10 := NULL;
1034 END IF;
1035
1036 IF l_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1037 l_budget_lines_in(i).attribute11 := NULL;
1038 END IF;
1039
1040 IF l_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1041 l_budget_lines_in(i).attribute12 := NULL;
1042 END IF;
1043
1044 IF l_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1045 l_budget_lines_in(i).attribute13 := NULL;
1046 END IF;
1047
1048 IF l_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1049 l_budget_lines_in(i).attribute14 := NULL;
1050 END IF;
1051
1052 IF l_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1053 l_budget_lines_in(i).attribute15 := NULL;
1054 END IF;
1055
1056 IF l_budget_lines_in(i).txn_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1057 l_budget_lines_in(i).txn_currency_code := NULL;
1058 END IF;
1059
1060 IF l_budget_lines_in(i).projfunc_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1061 l_budget_lines_in(i).PROJFUNC_COST_RATE_TYPE := NULL;
1062 END IF;
1063
1064 IF l_budget_lines_in(i).projfunc_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1065 l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
1066 END IF;
1067
1068 IF l_budget_lines_in(i).projfunc_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1069 l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE := NULL;
1070 END IF;
1071
1072 IF l_budget_lines_in(i).projfunc_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1073 l_budget_lines_in(i).PROJFUNC_COST_EXCHANGE_RATE := NULL;
1074 END IF;
1075
1076 IF l_budget_lines_in(i).projfunc_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1077 l_budget_lines_in(i).PROJFUNC_REV_RATE_TYPE := NULL;
1078 END IF;
1079
1080 IF l_budget_lines_in(i).projfunc_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1081 l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
1082 END IF;
1083
1084 IF l_budget_lines_in(i).projfunc_rev_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1085 l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE := NULL;
1086 END IF;
1087
1088 IF l_budget_lines_in(i).projfunc_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1089 l_budget_lines_in(i).PROJFUNC_REV_EXCHANGE_RATE := NULL;
1090 END IF;
1091
1092 IF l_budget_lines_in(i).project_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1093 l_budget_lines_in(i).PROJECT_COST_RATE_TYPE := NULL;
1094 END IF;
1095
1096 IF l_budget_lines_in(i).project_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1097 l_budget_lines_in(i).PROJECT_COST_RATE_DATE_TYPE := NULL;
1098 END IF;
1099
1100 IF l_budget_lines_in(i).project_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1101 l_budget_lines_in(i).PROJECT_COST_RATE_DATE := NULL;
1102 END IF;
1103
1104 IF l_budget_lines_in(i).project_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1105 l_budget_lines_in(i).PROJECT_COST_EXCHANGE_RATE := NULL;
1106 END IF;
1107
1108 IF l_budget_lines_in(i).project_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1109 l_budget_lines_in(i).PROJECT_REV_RATE_TYPE := NULL;
1110 END IF;
1111
1112 IF l_budget_lines_in(i).project_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1113 l_budget_lines_in(i).PROJECT_REV_RATE_DATE_TYPE := NULL;
1114 END IF;
1115
1116 IF l_budget_lines_in(i).project_rev_rate_date =PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1117 l_budget_lines_in(i).PROJECT_REV_RATE_DATE := NULL;
1118 END IF;
1119
1120 IF l_budget_lines_in(i).project_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1121 l_budget_lines_in(i).PROJECT_REV_EXCHANGE_RATE := NULL;
1122 END IF;
1123
1124 /* Bug 3218822 - Use the validated pm_product_code of the header for the budget line if
1125 pm_product_code is passed as Null at the line level */
1126
1127 IF l_budget_lines_in(i).pm_product_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
1128 l_budget_lines_in(i).pm_product_code IS NULL THEN
1129 l_budget_lines_in(i).pm_product_code := p_pm_product_code;
1130 END IF;
1131
1132 IF l_budget_lines_in(i).pm_budget_line_reference=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1133 l_budget_lines_in(i).pm_budget_line_reference := NULL;
1134 END IF;
1135
1136
1137 END LOOP;
1138 /** Bug 3709462
1139 --3569883 start
1140 select fin_plan_type_id
1141 into l_fp_type_id
1142 from pa_budget_versions
1143 where budget_version_id = l_budget_version_id;
1144
1145 select DECODE(l_fp_type_id, null, 'Y','N') into l_old_model from dual;
1146 --3569883 end
1147 **/ -- Bug 3709462 we are in old model context no additional checks are necessary
1148 -- l_old_model := 'Y';
1149 --Done with Changes by xin liu
1150 pa_budget_pvt.Validate_Budget_Lines
1151 ( p_pa_project_id => l_project_id
1152 ,p_budget_type_code => p_budget_type_code
1153 ,p_fin_plan_type_id => NULL
1154 ,p_version_type => NULL
1155 ,p_resource_list_id => l_resource_list_id
1156 ,p_time_phased_code => l_time_phased_type_code
1157 ,p_budget_entry_method_code => p_entry_method_code
1158 ,p_entry_level_code => l_entry_level_code
1159 ,p_allow_qty_flag => NULL
1160 ,p_allow_raw_cost_flag => NULL
1161 ,p_allow_burdened_cost_flag => NULL
1162 ,p_allow_revenue_flag => NULL
1163 ,p_multi_currency_flag => NULL
1164 ,p_project_cost_rate_type => NULL
1165 ,p_project_cost_rate_date_typ => NULL
1166 ,p_project_cost_rate_date => NULL
1167 ,p_project_cost_exchange_rate => NULL
1168 ,p_projfunc_cost_rate_type => NULL
1169 ,p_projfunc_cost_rate_date_typ => NULL
1170 ,p_projfunc_cost_rate_date => NULL
1171 ,p_projfunc_cost_exchange_rate => NULL
1172 ,p_project_rev_rate_type => NULL
1173 ,p_project_rev_rate_date_typ => NULL
1174 ,p_project_rev_rate_date => NULL
1175 ,p_project_rev_exchange_rate => NULL
1176 ,p_projfunc_rev_rate_type => NULL
1177 ,p_projfunc_rev_rate_date_typ => NULL
1178 ,p_projfunc_rev_rate_date => NULL
1179 ,p_projfunc_rev_exchange_rate => NULL
1180 ,px_budget_lines_in => l_budget_lines_in
1181 ,x_budget_lines_out => p_budget_lines_out /* Bug 3133930*/
1182 -- ,x_old_model => l_old_model --3569883
1183 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
1184 ,x_etc_method_code_tbl => l_etc_method_code_tbl
1185 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
1186 ,x_msg_count => p_msg_count
1187 ,x_msg_data => p_msg_data
1188 ,x_return_status => p_return_status);
1189
1190 IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1191
1192 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1193
1194 END IF;
1195
1196 IF l_debug_mode = 'Y' THEN
1197 pa_debug.g_err_stage := 'Validate Budget Lines got executed successfully';
1198 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1199 END IF;
1200
1201 END IF;--IF ( nvl(l_budget_lines_in.last,0) > 0 ) THEN
1202
1203
1204
1205
1206 /*
1207 -- Not necessary now since the same is passed as parameters to create_draft
1208 --add the pm_budget_reference and pm_product_code to the just created budget
1209 UPDATE pa_budget_versions
1210 SET pm_budget_reference = p_pm_budget_reference
1211 , pm_product_code = p_pm_product_code
1212 WHERE budget_version_id = l_budget_version_id;
1213 */
1214
1215
1216 -- BUDGET LINES
1217
1218 i := l_budget_lines_in.first;
1219
1220 IF l_budget_lines_in.exists(i)
1221 THEN
1222
1223 <<budget_line>>
1224 WHILE i IS NOT NULL LOOP
1225
1226 /* initialize return status for budget line to success */
1227
1228 /* Bug 3133930 initialization is removed here as it has been done in
1229 validate_budget_lines */
1230 /* p_budget_lines_out(i).return_status := FND_API.G_RET_STS_SUCCESS; */
1231
1232 l_budget_line_in_rec := l_budget_lines_in(i);
1233 IF l_budget_line_in_rec.pm_budget_line_reference =
1234 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1235 l_budget_line_in_rec.pm_budget_line_reference := NULL;
1236 END IF;
1237
1238 IF l_categorization_code = 'N' THEN
1239 l_budget_rlmid := l_uncategorized_rlmid;
1240 l_budget_alias := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
1241 ELSE
1242 l_budget_rlmid := l_budget_line_in_rec.resource_list_member_id;
1243 l_budget_alias := l_budget_line_in_rec.resource_alias;
1244 END IF;
1245
1246 /* For bug # 675869 Fix */
1247 IF l_budget_line_in_rec.period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1248 l_budget_line_in_rec.period_name := NULL;
1249 END IF;
1250 /* End Of bug # 675869 Fix */
1251
1252
1253 --Call the api that inserts the budget line
1254 pa_budget_pvt.insert_budget_line
1255 ( p_return_status => l_return_status
1256 ,p_pa_project_id => l_project_id
1257 ,p_budget_type_code => p_budget_type_code
1258 ,p_pa_task_id => l_budget_line_in_rec.pa_task_id
1259 ,p_pm_task_reference => l_budget_line_in_rec.pm_task_reference
1260 ,p_resource_alias => l_budget_alias
1261 ,p_member_id => l_budget_rlmid
1262 ,p_budget_start_date => l_budget_line_in_rec.budget_start_date
1263 ,p_budget_end_date => l_budget_line_in_rec.budget_end_date
1264 ,p_period_name => l_budget_line_in_rec.period_name
1265 ,p_description => l_budget_line_in_rec.description
1266 ,p_raw_cost => l_budget_line_in_rec.raw_cost
1267 ,p_burdened_cost => l_budget_line_in_rec.burdened_cost
1268 ,p_revenue => l_budget_line_in_rec.revenue
1269 ,p_quantity => l_budget_line_in_rec.quantity
1270 ,p_pm_product_code => l_budget_line_in_rec.pm_product_code
1271 ,p_pm_budget_line_reference => l_budget_line_in_rec.pm_budget_line_reference
1272 ,p_resource_list_id => l_resource_list_id
1273 ,p_attribute_category => l_budget_line_in_rec.attribute_category
1274 ,p_attribute1 => l_budget_line_in_rec.attribute1
1275 ,p_attribute2 => l_budget_line_in_rec.attribute2
1276 ,p_attribute3 => l_budget_line_in_rec.attribute3
1277 ,p_attribute4 => l_budget_line_in_rec.attribute4
1278 ,p_attribute5 => l_budget_line_in_rec.attribute5
1279 ,p_attribute6 => l_budget_line_in_rec.attribute6
1280 ,p_attribute7 => l_budget_line_in_rec.attribute7
1281 ,p_attribute8 => l_budget_line_in_rec.attribute8
1282 ,p_attribute9 => l_budget_line_in_rec.attribute9
1283 ,p_attribute10 => l_budget_line_in_rec.attribute10
1284 ,p_attribute11 => l_budget_line_in_rec.attribute11
1285 ,p_attribute12 => l_budget_line_in_rec.attribute12
1286 ,p_attribute13 => l_budget_line_in_rec.attribute13
1287 ,p_attribute14 => l_budget_line_in_rec.attribute14
1288 ,p_attribute15 => l_budget_line_in_rec.attribute15
1289 ,p_time_phased_type_code => l_time_phased_type_code
1290 ,p_entry_level_code => l_entry_level_code
1291 ,p_budget_amount_code => l_budget_amount_code
1292 ,p_budget_entry_method_code => p_entry_method_code
1293 ,p_categorization_code => l_categorization_code
1294 ,p_budget_version_id => l_budget_version_id );
1295 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
1296 THEN
1297 p_budget_lines_out(i).return_status := l_return_status;
1298
1299 IF l_debug_mode = 'Y' THEN
1300 pa_debug.g_err_stage := 'Unexpected Error inserting line '||i;
1301 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1302 END IF;
1303
1304 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1305
1306 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
1307 THEN
1308 p_budget_lines_out(i).return_status := l_return_status;
1309 p_multiple_task_msg := 'F';
1310 IF l_debug_mode = 'Y' THEN
1311 pa_debug.g_err_stage := 'Error inserting line '||i;
1312 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1313 END IF;
1314
1315 -- RAISE FND_API.G_EXC_ERROR;
1316
1317 END IF;
1318
1319 IF l_debug_mode = 'Y' THEN
1320 pa_debug.g_err_stage := 'Done with the insertion of line '||i;
1321 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1322 END IF;
1323
1324
1325 i := l_budget_lines_in.next(i);
1326
1327 END LOOP budget_line;
1328
1329 IF p_multiple_task_msg = 'F'
1330 THEN
1331 RAISE FND_API.G_EXC_ERROR;
1332 END IF;
1333
1334 END IF;
1335
1336 ELSE--Create a version in the finplan model
1337
1338 IF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
1339
1340 l_allow_qty_flag := p_cost_qty_flag;
1341
1342 ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
1343
1344 l_allow_qty_flag := p_revenue_qty_flag;
1345
1346 ELSE
1347
1348 l_allow_qty_flag := P_all_qty_flag;
1349
1350 END IF;
1351
1352 IF l_debug_mode = 'Y' THEN
1353 pa_debug.g_err_stage := 'l_allow_qty_flag is '||l_allow_qty_flag;
1354 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1355 END IF;
1356
1357 --Call the api only if budget lines exist
1358 -- dbms_output.put_line('l_budget_lines_in.last '||l_budget_lines_in.last);
1359 IF ( nvl(l_budget_lines_in.last,0) > 0 ) THEN
1360
1361 IF l_debug_mode = 'Y' THEN
1362 pa_debug.g_err_stage := 'About to call validate budget lines in finplan model';
1363 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1364 END IF;
1365
1366 --Added by Xin Liu. Handle G_MISS_XXX for l_budget_lines_in before calling Validate_Budget_Lines.
1367 FOR i in l_budget_lines_in.FIRST..l_budget_lines_in.LAST LOOP
1368
1369 IF l_budget_lines_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1370 l_budget_lines_in(i).pa_task_id := NULL;
1371 END IF;
1372
1373 IF l_budget_lines_in(i).pm_task_reference =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1374 l_budget_lines_in(i).pm_task_reference := NULL;
1375 END IF;
1376
1377 IF l_budget_lines_in(i).resource_alias= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1378 l_budget_lines_in(i).resource_alias := NULL;
1379 END IF;
1380
1381 IF l_budget_lines_in(i).resource_list_member_id =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1382 l_budget_lines_in(i).resource_list_member_id:= NULL;
1383 END IF;
1384
1385 IF l_budget_lines_in(i).budget_start_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1386 l_budget_lines_in(i).budget_start_date:= NULL;
1387 END IF;
1388 IF l_budget_lines_in(i).budget_end_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1389 l_budget_lines_in(i).budget_end_date:= NULL;
1390 END IF;
1391
1392 IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1393 l_budget_lines_in(i).period_name := NULL;
1394 END IF;
1395
1396 IF l_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1397 l_budget_lines_in(i).raw_cost := NULL;
1398 END IF;
1399
1400 IF l_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1401 l_budget_lines_in(i).burdened_cost := NULL;
1402 END IF;
1403
1404 IF l_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1405 l_budget_lines_in(i).revenue := NULL;
1406 END IF;
1407
1408 IF l_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1409 l_budget_lines_in(i).quantity := NULL;
1410 END IF;
1411
1412
1413 IF l_budget_lines_in(i).change_reason_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1414 l_budget_lines_in(i).change_reason_code :=NULL;
1415 END IF;
1416
1417 IF l_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1418 l_budget_lines_in(i).description := NULL;
1419 END IF;
1420
1421 IF l_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1422 l_budget_lines_in(i).attribute_category := NULL;
1423 END IF;
1424
1425 IF l_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1426 l_budget_lines_in(i).attribute1 := NULL;
1427 END IF;
1428
1429 IF l_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1430 l_budget_lines_in(i).attribute2 := NULL;
1431 END IF;
1432
1433 IF l_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1434 l_budget_lines_in(i).attribute3 := NULL;
1435 END IF;
1436
1437 IF l_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1438 l_budget_lines_in(i).attribute4 := NULL;
1439 END IF;
1440
1441 IF l_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1442 l_budget_lines_in(i).attribute5 := NULL;
1443 END IF;
1444
1445 IF l_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1446 l_budget_lines_in(i).attribute6 := NULL;
1447 END IF;
1448
1449 IF l_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1450 l_budget_lines_in(i).attribute7 := NULL;
1451 END IF;
1452
1453 IF l_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1454 l_budget_lines_in(i).attribute8 := NULL;
1455 END IF;
1456
1457 IF l_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1458 l_budget_lines_in(i).attribute9 := NULL;
1459 END IF;
1460
1461 IF l_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1462 l_budget_lines_in(i).attribute10 := NULL;
1463 END IF;
1464
1465 IF l_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1466 l_budget_lines_in(i).attribute11 := NULL;
1467 END IF;
1468
1469 IF l_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1470 l_budget_lines_in(i).attribute12 := NULL;
1471 END IF;
1472
1473 IF l_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1474 l_budget_lines_in(i).attribute13 := NULL;
1475 END IF;
1476
1477 IF l_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1478 l_budget_lines_in(i).attribute14 := NULL;
1479 END IF;
1480
1481 IF l_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1482 l_budget_lines_in(i).attribute15 := NULL;
1483 END IF;
1484
1485 IF l_budget_lines_in(i).txn_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1486 l_budget_lines_in(i).txn_currency_code := NULL;
1487 END IF;
1488
1489 IF l_budget_lines_in(i).projfunc_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1490 l_budget_lines_in(i).PROJFUNC_COST_RATE_TYPE := NULL;
1491 END IF;
1492
1493 IF l_budget_lines_in(i).projfunc_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1494 l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
1495 END IF;
1496
1497 IF l_budget_lines_in(i).projfunc_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1498 l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE := NULL;
1499 END IF;
1500
1501 IF l_budget_lines_in(i).projfunc_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1502 l_budget_lines_in(i).PROJFUNC_COST_EXCHANGE_RATE := NULL;
1503 END IF;
1504
1505 IF l_budget_lines_in(i).projfunc_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1506 l_budget_lines_in(i).PROJFUNC_REV_RATE_TYPE := NULL;
1507 END IF;
1508
1509 IF l_budget_lines_in(i).projfunc_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1510 l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
1511 END IF;
1512
1513 IF l_budget_lines_in(i).projfunc_rev_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1514 l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE := NULL;
1515 END IF;
1516
1517 IF l_budget_lines_in(i).projfunc_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1518 l_budget_lines_in(i).PROJFUNC_REV_EXCHANGE_RATE := NULL;
1519 END IF;
1520
1521 IF l_budget_lines_in(i).project_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1522 l_budget_lines_in(i).PROJECT_COST_RATE_TYPE := NULL;
1523 END IF;
1524
1525 IF l_budget_lines_in(i).project_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1526 l_budget_lines_in(i).PROJECT_COST_RATE_DATE_TYPE := NULL;
1527 END IF;
1528
1529 IF l_budget_lines_in(i).project_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1530 l_budget_lines_in(i).PROJECT_COST_RATE_DATE := NULL;
1531 END IF;
1532
1533 IF l_budget_lines_in(i).project_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1534 l_budget_lines_in(i).PROJECT_COST_EXCHANGE_RATE := NULL;
1535 END IF;
1536
1537 IF l_budget_lines_in(i).project_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1538 l_budget_lines_in(i).PROJECT_REV_RATE_TYPE := NULL;
1539 END IF;
1540
1541 IF l_budget_lines_in(i).project_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1542 l_budget_lines_in(i).PROJECT_REV_RATE_DATE_TYPE := NULL;
1543 END IF;
1544
1545 IF l_budget_lines_in(i).project_rev_rate_date =PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1546 l_budget_lines_in(i).PROJECT_REV_RATE_DATE := NULL;
1547 END IF;
1548
1549 IF l_budget_lines_in(i).project_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1550 l_budget_lines_in(i).PROJECT_REV_EXCHANGE_RATE := NULL;
1551 END IF;
1552
1553 /* Bug 3218822 - Use the validated pm_product_code of the header for the budget line if
1554 pm_product_code is passed as Null at the line level */
1555
1556 IF l_budget_lines_in(i).pm_product_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
1557 l_budget_lines_in(i).pm_product_code IS NULL THEN
1558 l_budget_lines_in(i).pm_product_code := p_pm_product_code;
1559 END IF;
1560
1561 IF l_budget_lines_in(i).pm_budget_line_reference=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1562 l_budget_lines_in(i).pm_budget_line_reference := NULL;
1563 END IF;
1564
1565
1566 END LOOP;
1567 --Done with Changes by xin liu
1568 /** Bug 3709462
1569 --3569883 start
1570 select fin_plan_type_id
1571 into l_fp_type_id
1572 from pa_budget_versions
1573 where budget_version_id = l_budget_version_id;
1574
1575 select DECODE(l_fp_type_id, null, 'Y','N') into l_old_model from dual;
1576 --3569883 end
1577 **/
1578 -- Bug 3709462 We are in new model context, no new checks are necessary
1579 -- l_old_model := 'N';
1580 --Validate the finplan lines passed
1581 pa_budget_pvt.Validate_Budget_Lines
1582 ( p_pa_project_id => l_project_id
1583 ,p_budget_type_code => NULL
1584 ,p_fin_plan_type_id => l_fin_plan_type_id
1585 ,p_version_type => l_version_type
1586 ,p_resource_list_id => l_resource_list_id
1587 ,p_time_phased_code => l_time_phased_code
1588 ,p_budget_entry_method_code => NULL
1589 ,p_entry_level_code => l_fin_plan_level_code
1590 ,p_allow_qty_flag => l_allow_qty_flag
1591 ,p_allow_raw_cost_flag => p_raw_cost_flag
1592 ,p_allow_burdened_cost_flag => p_burdened_cost_flag
1593 ,p_allow_revenue_flag => p_revenue_flag
1594 ,p_multi_currency_flag => l_plan_in_multi_curr_flag
1595 ,p_project_cost_rate_type => l_project_cost_rate_type
1596 ,p_project_cost_rate_date_typ => l_project_cost_rate_date_typ
1597 ,p_project_cost_rate_date => l_project_cost_rate_date
1598 ,p_project_cost_exchange_rate => NULL
1599 ,p_projfunc_cost_rate_type => l_projfunc_cost_rate_type
1600 ,p_projfunc_cost_rate_date_typ => l_projfunc_cost_rate_date_typ
1601 ,p_projfunc_cost_rate_date => l_projfunc_cost_rate_date
1602 ,p_projfunc_cost_exchange_rate => NULL
1603 ,p_project_rev_rate_type => l_project_rev_rate_type
1604 ,p_project_rev_rate_date_typ => l_project_rev_rate_date_typ
1605 ,p_project_rev_rate_date => l_project_rev_rate_date
1606 ,p_project_rev_exchange_rate => NULL
1607 ,p_projfunc_rev_rate_type => l_projfunc_rev_rate_type
1608 ,p_projfunc_rev_rate_date_typ => l_projfunc_rev_rate_date_typ
1609 ,p_projfunc_rev_rate_date => l_projfunc_rev_rate_date
1610 ,p_projfunc_rev_exchange_rate => NULL
1611 ,px_budget_lines_in => l_budget_lines_in
1612 ,x_budget_lines_out => p_budget_lines_out /* Bug 3133930*/
1613 -- ,x_old_model => l_old_model --3569883
1614 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
1615 ,x_etc_method_code_tbl => l_etc_method_code_tbl
1616 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
1617 ,x_msg_count => p_msg_count
1618 ,x_msg_data => p_msg_data
1619 ,x_return_status => p_return_status);
1620
1621 IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1622
1623 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1624
1625 END IF;
1626
1627 IF l_debug_mode = 'Y' THEN
1628 pa_debug.g_err_stage := 'Validate budget lines got executed successfully';
1629 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1630 END IF;
1631
1632 -- Initialise the index for the fin plan lines table
1633 j :=1;
1634
1635 -- Intilalise the UOM and track as labor flag to the values associated with
1636 -- the uncategorized resource list.
1637 l_unit_of_measure := l_unc_unit_of_measure;
1638 l_track_as_labor_flag := l_unc_track_as_labor_flag;
1639
1640 --dbms_output.put_line('l_budget_lines_in.FIRST '||l_budget_lines_in.FIRST);
1641 --dbms_output.put_line('l_budget_lines_in.LAST '||l_budget_lines_in.LAST);
1642
1643 -- Copy the fin plan lines into a table of type pa_fp_rollup_tmp
1644 FOR i in l_budget_lines_in.FIRST..l_budget_lines_in.LAST LOOP
1645
1646 --dbms_output.put_line('In the for loop');
1647
1648 IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1649 l_budget_lines_in(i).period_name := NULL;
1650 END IF;
1651
1652 --Lines should be processed only if atleast one of the amounts exist
1653 IF (nvl(l_budget_lines_in(i).quantity,0)<>0 OR
1654 nvl(l_budget_lines_in(i).raw_cost,0)<>0 OR
1655 nvl(l_budget_lines_in(i).burdened_cost,0)<>0 OR
1656 nvl(l_budget_lines_in(i).revenue,0) <>0) THEN
1657
1658
1659 -- Get UOM and track as labor flag only if the resource list is not uncategorized
1660 -- If it is is uncategorized then we can make use of the uom and track as labor
1661 -- flag obtained earlier
1662 IF (l_resource_list_id <> l_uncategorized_res_list_id) THEN
1663 -- Bug 3807633.. We can directly fetch UOM from pa_resource_list_members
1664 -- for FINPLAN MODEL(FP.M Changes) as old non-migrated resource
1665 -- list cannot be used and only New and Migrated resource
1666 -- list can be used for FINPLAN Model.
1667 SELECT prlm.unit_of_measure
1668 INTO l_unit_of_measure
1669 FROM pa_resource_list_members prlm
1670 WHERE prlm.resource_list_member_id = l_budget_lines_in(i).resource_list_member_id;
1671
1672 END IF;
1673
1674 --dbms_output.put_line('copying from budget to rollup finplan');
1675
1676 -- Convert flex field attributes to NULL if they have Miss Char as value
1677
1678 l_finplan_lines_tab(j).system_reference1 := l_budget_lines_in(i).pa_task_id;
1679 l_finplan_lines_tab(j).system_reference2 := l_budget_lines_in(i).resource_list_member_id ;
1680 l_finplan_lines_tab(j).start_date := l_budget_lines_in(i).budget_start_date;
1681 l_finplan_lines_tab(j).end_date := l_budget_lines_in(i).budget_end_date;
1682 l_finplan_lines_tab(j).period_name := l_budget_lines_in(i).period_name;
1683 l_finplan_lines_tab(j).system_reference4 := l_unit_of_measure ;
1684 -- l_finplan_lines_tab(j).system_reference5 := l_track_as_labor_flag ;
1685 l_finplan_lines_tab(j).system_reference5 := NULL; -- 3807633 track_as_labor_flag not mantained in FPM changes
1686 l_finplan_lines_tab(j).txn_currency_code := l_budget_lines_in(i).txn_currency_code ;
1687 l_finplan_lines_tab(j).projfunc_raw_cost := NULL;
1688 l_finplan_lines_tab(j).projfunc_burdened_cost := NULL;
1689 l_finplan_lines_tab(j).projfunc_revenue := NULL;
1690 l_finplan_lines_tab(j).project_raw_cost := NULL ;
1691 l_finplan_lines_tab(j).project_burdened_cost := NULL;
1692 l_finplan_lines_tab(j).project_revenue := NULL;
1693
1694 IF l_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1695 l_finplan_lines_tab(j).txn_raw_cost := NULL;
1696 ELSE
1697 l_finplan_lines_tab(j).txn_raw_cost := l_budget_lines_in(i).raw_cost ;
1698 END IF;
1699
1700 IF l_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1701 l_finplan_lines_tab(j).txn_burdened_cost := NULL;
1702 ELSE
1703 l_finplan_lines_tab(j).txn_burdened_cost := l_budget_lines_in(i).burdened_cost;
1704 END IF;
1705
1706 IF l_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1707 l_finplan_lines_tab(j).txn_revenue := NULL;
1708 ELSE
1709 l_finplan_lines_tab(j).txn_revenue := l_budget_lines_in(i).revenue;
1710 END IF;
1711
1712 IF l_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1713 l_finplan_lines_tab(j).quantity := NULL;
1714 ELSE
1715 l_finplan_lines_tab(j).quantity := l_budget_lines_in(i).quantity;
1716 END IF;
1717
1718
1719 IF l_budget_lines_in(i).change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1720 l_finplan_lines_tab(j).change_reason_code :=NULL;
1721 ELSE
1722 l_finplan_lines_tab(j).change_reason_code := l_budget_lines_in(i).change_reason_code ;
1723 END IF;
1724
1725 IF l_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1726 l_finplan_lines_tab(j).description := NULL;
1727 ELSE
1728 l_finplan_lines_tab(j).description := l_budget_lines_in(i).description;
1729 END IF;
1730
1731 IF l_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1732 l_finplan_lines_tab(j).attribute_category := NULL;
1733 ELSE
1734 l_finplan_lines_tab(j).attribute_category := l_budget_lines_in(i).attribute_category;
1735 END IF;
1736
1737 IF l_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1738 l_finplan_lines_tab(j).attribute1 := NULL;
1739 ELSE
1740 l_finplan_lines_tab(j).attribute1 := l_budget_lines_in(i).attribute1;
1741 END IF;
1742
1743 IF l_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1744 l_finplan_lines_tab(j).attribute2 := NULL;
1745 ELSE
1746 l_finplan_lines_tab(j).attribute2 := l_budget_lines_in(i).attribute2;
1747 END IF;
1748
1749 IF l_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1750 l_finplan_lines_tab(j).attribute3 := NULL;
1751 ELSE
1752 l_finplan_lines_tab(j).attribute3 := l_budget_lines_in(i).attribute3;
1753 END IF;
1754
1755 IF l_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1756 l_finplan_lines_tab(j).attribute4 := NULL;
1757 ELSE
1758 l_finplan_lines_tab(j).attribute4 := l_budget_lines_in(i).attribute4;
1759 END IF;
1760
1761 IF l_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1762 l_finplan_lines_tab(j).attribute5 := NULL;
1763 ELSE
1764 l_finplan_lines_tab(j).attribute5 := l_budget_lines_in(i).attribute5;
1765 END IF;
1766
1767 IF l_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1768 l_finplan_lines_tab(j).attribute6 := NULL;
1769 ELSE
1770 l_finplan_lines_tab(j).attribute6 := l_budget_lines_in(i).attribute6;
1771 END IF;
1772
1773 IF l_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1774 l_finplan_lines_tab(j).attribute7 := NULL;
1775 ELSE
1776 l_finplan_lines_tab(j).attribute7 := l_budget_lines_in(i).attribute7;
1777 END IF;
1778
1779 IF l_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1780 l_finplan_lines_tab(j).attribute8 := NULL;
1781 ELSE
1782 l_finplan_lines_tab(j).attribute8 := l_budget_lines_in(i).attribute8;
1783 END IF;
1784
1785 IF l_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1786 l_finplan_lines_tab(j).attribute9 := NULL;
1787 ELSE
1788 l_finplan_lines_tab(j).attribute9 := l_budget_lines_in(i).attribute9;
1789 END IF;
1790
1791 IF l_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1792 l_finplan_lines_tab(j).attribute10 := NULL;
1793 ELSE
1794 l_finplan_lines_tab(j).attribute10 := l_budget_lines_in(i).attribute10;
1795 END IF;
1796
1797 IF l_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1798 l_finplan_lines_tab(j).attribute11 := NULL;
1799 ELSE
1800 l_finplan_lines_tab(j).attribute11 := l_budget_lines_in(i).attribute11;
1801 END IF;
1802
1803 IF l_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1804 l_finplan_lines_tab(j).attribute12 := NULL;
1805 ELSE
1806 l_finplan_lines_tab(j).attribute12 := l_budget_lines_in(i).attribute12;
1807 END IF;
1808
1809 IF l_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1810 l_finplan_lines_tab(j).attribute13 := NULL;
1811 ELSE
1812 l_finplan_lines_tab(j).attribute13 := l_budget_lines_in(i).attribute13;
1813 END IF;
1814
1815 IF l_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1816 l_finplan_lines_tab(j).attribute14 := NULL;
1817 ELSE
1818 l_finplan_lines_tab(j).attribute14 := l_budget_lines_in(i).attribute14;
1819 END IF;
1820
1821 IF l_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1822 l_finplan_lines_tab(j).attribute15 := NULL;
1823 ELSE
1824 l_finplan_lines_tab(j).attribute15 := l_budget_lines_in(i).attribute15;
1825 END IF;
1826
1827 -- Added by Xin Liu
1828
1829 IF l_budget_lines_in(i).projfunc_cost_rate_type =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1830 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := NULL;
1831 ELSE
1832 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := l_budget_lines_in(i).projfunc_cost_rate_type ;
1833 END IF;
1834
1835 IF l_budget_lines_in(i).projfunc_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1836 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
1837 ELSE
1838 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE :=l_budget_lines_in(i).projfunc_cost_rate_date_type ;
1839 END IF;
1840
1841 IF l_budget_lines_in(i).projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1842 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE := NULL;
1843 ELSE
1844 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE := l_budget_lines_in(i).projfunc_cost_rate_date ;
1845 END IF;
1846
1847 IF l_budget_lines_in(i).projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1848 l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := NULL;
1849 ELSE
1850 l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := l_budget_lines_in(i).projfunc_cost_exchange_rate ;
1851 END IF;
1852
1853 IF l_budget_lines_in(i).projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1854 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE := NULL;
1855 ELSE
1856 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE := l_budget_lines_in(i).projfunc_rev_rate_type ;
1857 END IF;
1858
1859 IF l_budget_lines_in(i).projfunc_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1860 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
1861 ELSE
1862 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := l_budget_lines_in(i).projfunc_rev_rate_date_type ;
1863 END IF;
1864
1865 IF l_budget_lines_in(i).projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1866 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE := NULL;
1867 ELSE
1868 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE := l_budget_lines_in(i).projfunc_rev_rate_date;
1869 END IF;
1870
1871 IF l_budget_lines_in(i).projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1872 l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE := NULL;
1873 ELSE
1874 l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE := l_budget_lines_in(i).projfunc_rev_exchange_rate ;
1875 END IF;
1876
1877 IF l_budget_lines_in(i).project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1878 l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE := NULL;
1879 ELSE
1880 l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE := l_budget_lines_in(i).project_cost_rate_type;
1881 END IF;
1882
1883 IF l_budget_lines_in(i).project_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1884 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := NULL;
1885 ELSE
1886 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := l_budget_lines_in(i).project_cost_rate_date_type ;
1887 END IF;
1888
1889 IF l_budget_lines_in(i).project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1890 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE := NULL;
1891 ELSE
1892 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE := l_budget_lines_in(i).project_cost_rate_date ;
1893 END IF;
1894
1895 IF l_budget_lines_in(i).project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1896 l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE := NULL;
1897 ELSE
1898 l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE := l_budget_lines_in(i).project_cost_exchange_rate ;
1899 END IF;
1900
1901 IF l_budget_lines_in(i).project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1902 l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE := NULL;
1903 ELSE
1904 l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE := l_budget_lines_in(i).project_rev_rate_type ;
1905 END IF;
1906
1907 IF l_budget_lines_in(i).project_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1908 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE := NULL;
1909 ELSE
1910 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE := l_budget_lines_in(i).project_rev_rate_date_type ;
1911 END IF;
1912
1913 IF l_budget_lines_in(i).project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
1914 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE := NULL;
1915 ELSE
1916 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE := l_budget_lines_in(i).project_rev_rate_date ;
1917 END IF;
1918
1919 IF l_budget_lines_in(i).project_rev_exchange_rate =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
1920 l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE := NULL;
1921 ELSE
1922 l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE := l_budget_lines_in(i).project_rev_exchange_rate ;
1923 END IF;
1924
1925 /* Bug 3218822 - Use the validated pm_product_code of the header for the budget line if
1926 pm_product_code is passed as Null at the line level */
1927
1928 IF l_budget_lines_in(i).pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
1929 l_budget_lines_in(i).pm_product_code IS NULL THEN
1930 l_finplan_lines_tab(j).pm_product_code := p_pm_product_code ;
1931 ELSE
1932 l_finplan_lines_tab(j).pm_product_code := l_budget_lines_in(i).pm_product_code ;
1933 END IF;
1934
1935 IF l_budget_lines_in(i).pm_budget_line_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
1936 l_finplan_lines_tab(j).pm_budget_line_reference := NULL;
1937 ELSE
1938 l_finplan_lines_tab(j).pm_budget_line_reference := l_budget_lines_in(i).pm_budget_line_reference ;
1939 END IF;
1940 -- Done with Changes.
1941 l_finplan_lines_tab(j).quantity_source := 'I' ;
1942 l_finplan_lines_tab(j).raw_cost_source := 'I' ;
1943 l_finplan_lines_tab(j).burdened_cost_source := 'I' ;
1944 l_finplan_lines_tab(j).revenue_source := 'I' ;
1945 l_finplan_lines_tab(j).resource_assignment_id := -1 ;
1946
1947 --increment the index for fin plan lines table
1948 j := j+1;
1949
1950 END IF;--IF (nvl(l_budget_lines_in(i).quantity,0)<>0 OR
1951
1952 END LOOP;--Loop for copying fin plan lines into table of type rollup temp
1953
1954 IF l_debug_mode = 'Y' THEN
1955 pa_debug.g_err_stage := 'Done with the copying of budget lines to fin plan lines';
1956 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1957 END IF;
1958
1959 END IF;
1960
1961 IF l_debug_mode = 'Y' THEN
1962 pa_debug.g_err_stage := 'About to call the create draft api in fin plan pvt';
1963 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1964 END IF;
1965
1966 -- If either of the create , replace current working version flags are Y then lock the
1967 -- Current working version.
1968
1969 IF (p_replace_current_working_flag = 'Y' OR
1970 p_create_new_curr_working_flag = 'Y') THEN
1971 --Get the current working version info
1972 pa_fin_plan_utils.Get_Curr_Working_Version_Info(
1973 p_project_id => l_project_id
1974 ,p_fin_plan_type_id => l_fin_plan_type_id
1975 ,p_version_type => l_version_type
1976 ,x_fp_options_id => l_proj_fp_options_id
1977 ,x_fin_plan_version_id => l_CW_version_id
1978 ,x_return_status => p_return_status
1979 ,x_msg_count => p_msg_count
1980 ,x_msg_data => p_msg_data );
1981
1982 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1983 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1984 END IF;
1985
1986 IF l_CW_version_id IS NOT NULL THEN
1987
1988 -- Bug # 3507156 : Patchset M: B and F impact changes : AMG
1989 -- Commented the call to PA_FP_REFRESH_ELEMENTS_PUB.GET_REFRESH_PLAN_ELE_DTLS
1990 -- Comment START
1991 /*
1992 --Added by Xin Liu
1993 --Check if the current working version is locked for WBS refresh or not
1994 PA_FP_REFRESH_ELEMENTS_PUB.GET_REFRESH_PLAN_ELE_DTLS
1995 (
1996 p_budget_version_id => l_CW_version_id
1997 , p_proj_fp_options_id => NULL
1998 , x_refresh_required_flag => l_refresh_required_flag
1999 , x_request_id => l_request_id
2000 , x_process_code => l_process_code
2001 , x_return_status => p_return_status
2002 , x_msg_count => p_msg_count
2003 , x_msg_data => p_msg_data
2004 );
2005
2006 IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2007
2008 IF l_debug_mode = 'Y' THEN
2009 pa_debug.g_err_stage := 'Error executing get refresh plan ele dtls';
2010 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2011 END IF;
2012 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2013
2014 END IF;
2015
2016 IF ( NVL(l_refresh_required_flag, 'N') = 'Y' ) THEN
2017
2018 IF l_debug_mode = 'Y' THEN
2019 pa_debug.g_err_stage := 'Plan version must be refreshed for new plannable-task state.';
2020 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
2021 END IF;
2022
2023 pa_interface_utils_pub.map_new_amg_msg
2024 ( p_old_message_code => 'PA_FP_AMG_WBS_IN_PROC_MSG'
2025 ,p_msg_attribute => 'CHANGE'
2026 ,p_resize_flag => 'Y'
2027 ,p_msg_context => 'GENERAL'
2028 ,p_attribute1 => ''
2029 ,p_attribute2 => ''
2030 ,p_attribute3 => ''
2031 ,p_attribute4 => ''
2032 ,p_attribute5 => '');
2033
2034 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2035
2036 END IF;
2037
2038 --End changes done by Xin Liu for WBS refresh
2039 */
2040 -- Comment END
2041 -- Bug # 3507156 : Patchset M: B and F impact changes : AMG
2042
2043 select locked_by_person_id
2044 into l_locked_by_person_id from pa_budget_versions
2045 where budget_version_id = l_CW_version_id;
2046
2047 --Get the record version number of the current working version
2048 l_CW_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
2049
2050 pa_fin_plan_pvt.lock_unlock_version
2051 (p_budget_version_id => l_CW_version_id,
2052 p_record_version_number => l_CW_record_version_number,
2053 p_action => 'L',
2054 p_user_id => l_user_id,
2055 p_person_id => NULL,
2056 x_return_status => p_return_status,
2057 x_msg_count => p_msg_count,
2058 x_msg_data => p_msg_data) ;
2059
2060 IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2061
2062 IF l_debug_mode = 'Y' THEN
2063 pa_debug.g_err_stage := 'Error executing lock unlock version';
2064 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2065 END IF;
2066 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2067
2068 END IF;
2069
2070 END IF;--IF l_CW_version_id IS NOT NULL THEN
2071
2072 END IF;--IF (p_replace_current_working_flag = 'Y' OR
2073
2074 --Call the api that creates the fin plan version
2075 PA_FIN_PLAN_PVT.CREATE_DRAFT(
2076 p_project_id => l_project_id
2077 ,p_fin_plan_type_id => l_fin_plan_type_id
2078 ,p_version_type => l_version_type
2079 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_AMG_API--Bug 4224464.Changed this to AMG_API as this is a AMG flow.
2080 ,p_time_phased_code => l_time_phased_code
2081 ,p_resource_list_id => l_resource_list_id
2082 ,p_fin_plan_level_code => l_fin_plan_level_code
2083 ,p_plan_in_mc_flag => l_plan_in_multi_curr_flag
2084 ,p_version_name => l_budget_version_name
2085 ,p_description => l_description
2086 ,p_change_reason_code => l_change_reason_code
2087 ,p_raw_cost_flag => l_raw_cost_flag
2088 ,p_burdened_cost_flag => l_burdened_cost_flag
2089 ,p_revenue_flag => l_revenue_flag
2090 ,p_cost_qty_flag => l_cost_qty_flag
2091 ,p_revenue_qty_flag => l_revenue_qty_flag
2092 ,p_all_qty_flag => l_all_qty_flag
2093 ,p_attribute_category => l_attribute_category
2094 ,p_attribute1 => l_attribute1
2095 ,p_attribute2 => l_attribute2
2096 ,p_attribute3 => l_attribute3
2097 ,p_attribute4 => l_attribute4
2098 ,p_attribute5 => l_attribute5
2099 ,p_attribute6 => l_attribute6
2100 ,p_attribute7 => l_attribute7
2101 ,p_attribute8 => l_attribute8
2102 ,p_attribute9 => l_attribute9
2103 ,p_attribute10 => l_attribute10
2104 ,p_attribute11 => l_attribute11
2105 ,p_attribute12 => l_attribute12
2106 ,p_attribute13 => l_attribute13
2107 ,p_attribute14 => l_attribute14
2108 ,p_attribute15 => l_attribute15
2109 ,p_projfunc_cost_rate_type => l_projfunc_cost_rate_type
2110 ,p_projfunc_cost_rate_date_type => l_projfunc_cost_rate_date_typ
2111 ,p_projfunc_cost_rate_date => l_projfunc_cost_rate_date
2112 ,p_projfunc_rev_rate_type => l_projfunc_rev_rate_type
2113 ,p_projfunc_rev_rate_date_type => l_projfunc_rev_rate_date_typ
2114 ,p_projfunc_rev_rate_date => l_projfunc_rev_rate_date
2115 ,p_project_cost_rate_type => l_project_cost_rate_type
2116 ,p_project_cost_rate_date_type => l_project_cost_rate_date_typ
2117 ,p_project_cost_rate_date => l_project_cost_rate_date
2118 ,p_project_rev_rate_type => l_project_rev_rate_type
2119 ,p_project_rev_rate_date_type => l_project_rev_rate_date_typ
2120 ,p_project_rev_rate_date => l_project_rev_rate_date
2121 ,p_pm_product_code => p_pm_product_code
2122 ,p_pm_budget_reference => l_pm_budget_reference -- p_pm_project_reference changed to budget reference for bug 3858543
2123 ,p_budget_lines_tab => l_finplan_lines_tab
2124 -- Start of additional columns for B
2125 ,p_ci_id => NULL
2126 ,p_est_proj_raw_cost => NULL
2127 ,p_est_proj_bd_cost => NULL
2128 ,p_est_proj_revenue => NULL
2129 ,p_est_qty => NULL
2130 ,p_impacted_task_id => NULL
2131 ,p_agreement_id => NULL
2132 -- End of additional columns for Bug
2133 ,p_create_new_curr_working_flag => l_create_new_working_flag
2134 ,p_replace_current_working_flag => l_replace_current_working_flag
2135 ,x_budget_version_id => l_budget_version_id
2136 ,x_return_status => p_return_status
2137 ,x_msg_count => p_msg_count
2138 ,x_msg_data => p_msg_data);
2139
2140
2141 IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2142
2143 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2144
2145 END IF;
2146
2147 -- Added for Bug #4680197 Unlock the budget version incase is it locked in this create_draft api.
2148 IF p_create_new_curr_working_flag = 'Y'
2149 AND l_CW_version_id IS NOT NULL
2150 AND l_locked_by_person_id IS NULL THEN
2151 --Get the record version number of the current working version
2152 l_CW_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
2153 pa_fin_plan_pvt.lock_unlock_version
2154 (p_budget_version_id => l_CW_version_id,
2155 p_record_version_number => l_CW_record_version_number,
2156 p_action => 'U',
2157 p_user_id => l_user_id,
2158 p_person_id => NULL,
2159 x_return_status => p_return_status,
2160 x_msg_count => p_msg_count,
2161 x_msg_data => p_msg_data) ;
2162
2163 IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
2164
2165 IF l_debug_mode = 'Y' THEN
2166 pa_debug.g_err_stage := 'Error executing lock unlock version';
2167 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2168 END IF;
2169 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2170 END IF;
2171 END IF;
2172 --Changes ended for Bug #4680197
2173
2174
2175 IF l_debug_mode = 'Y' THEN
2176 pa_debug.g_err_stage := 'Succesfully executed the fin plan pvt create draft ';
2177 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2178 END IF;
2179
2180
2181
2182 END IF;--IF p_budget_type_code IS NOT NULL
2183
2184 IF l_debug_mode = 'Y' THEN
2185 pa_debug.g_err_stage := 'About to check the overlapping dates';
2186 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2187 END IF;
2188
2189 -- check for overlapping dates
2190 pa_budget_lines_v_pkg.check_overlapping_dates( x_budget_version_id => l_budget_version_id
2191 ,x_resource_name => l_resource_name
2192 ,x_err_code => l_err_code );
2193
2194 IF l_err_code > 0
2195 THEN
2196
2197 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2198 THEN
2199 FND_MESSAGE.SET_NAME('PA','PA_CHECK_DATES_FAILED');
2200 FND_MESSAGE.SET_TOKEN('RNAME',l_resource_name);
2201
2202 FND_MSG_PUB.add;
2203 END IF;
2204
2205 IF l_debug_mode = 'Y' THEN
2206 pa_debug.g_err_stage := 'Error executing check_overlapping_dates';
2207 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
2208 END IF;
2209
2210
2211 RAISE FND_API.G_EXC_ERROR;
2212
2213 ELSIF l_err_code < 0
2214 THEN
2215
2216 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2217 THEN
2218
2219 FND_MSG_PUB.add_exc_msg
2220 ( p_pkg_name => 'PA_BUDGET_LINES_V_PKG'
2221 , p_procedure_name => 'CHECK_OVERLAPPING_DATES'
2222 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
2223
2224 END IF;
2225
2226 IF l_debug_mode = 'Y' THEN
2227 pa_debug.g_err_stage := 'Unexpected Error executing check_overlapping_dates';
2228 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
2229 END IF;
2230
2231 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2232
2233 END IF;
2234
2235 --Bug # 3507156 : Patchset M: B and F impact changes : AMG
2236 --Added a call to PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS to get the return statuses of the input budget lines.
2237
2238 PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS(
2239 p_fin_plan_version_id => l_budget_version_id
2240 ,p_budget_lines_in => l_budget_lines_in /* Bug # 3589304 */
2241 ,x_fp_lines_retn_status_tab => p_budget_lines_out
2242 ,x_return_status => p_return_status
2243 ,x_msg_count => p_msg_count
2244 ,x_msg_data => p_msg_data );
2245
2246
2247 IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2248
2249 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2250
2251 END IF;
2252
2253 IF l_debug_mode = 'Y' THEN
2254 pa_debug.g_err_stage := 'PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS got executed successfully';
2255 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2256 END IF;
2257
2258
2259 --summarizing the totals in the table pa_budget_versions
2260
2261 /*Summarizing of totals should be done only in the buget model*/
2262 IF (p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR and p_budget_type_code IS NOT NULL) THEN
2263
2264 IF l_debug_mode = 'Y' THEN
2265 pa_debug.g_err_stage := 'About to summarize totals in budget model';
2266 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2267 END IF;
2268
2269 pa_budget_utils.summerize_project_totals( x_budget_version_id => l_budget_version_id
2270 , x_err_code => l_err_code
2271 , x_err_stage => l_err_stage
2272 , x_err_stack => l_err_stack );
2273
2274
2275 IF l_err_code > 0
2276 THEN
2277
2278 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2279 THEN
2280
2281 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
2282 THEN
2283 pa_interface_utils_pub.map_new_amg_msg
2284 ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
2285 ,p_msg_attribute => 'CHANGE'
2286 ,p_resize_flag => 'N'
2287 ,p_msg_context => 'BUDG'
2288 ,p_attribute1 => l_amg_segment1
2289 ,p_attribute2 => ''
2290 ,p_attribute3 => p_budget_type_code
2291 ,p_attribute4 => ''
2292 ,p_attribute5 => '');
2293 else
2294 pa_interface_utils_pub.map_new_amg_msg
2295 ( p_old_message_code => l_err_stage
2296 ,p_msg_attribute => 'CHANGE'
2297 ,p_resize_flag => 'N'
2298 ,p_msg_context => 'BUDG'
2299 ,p_attribute1 => l_amg_segment1
2300 ,p_attribute2 => ''
2301 ,p_attribute3 => p_budget_type_code
2302 ,p_attribute4 => ''
2303 ,p_attribute5 => '');
2304 end IF;
2305
2306 END IF;
2307
2308 IF l_debug_mode = 'Y' THEN
2309 pa_debug.g_err_stage := 'Error in summarizing totals in budget model';
2310 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
2311 END IF;
2312
2313
2314 RAISE FND_API.G_EXC_ERROR;
2315
2316 ELSIF l_err_code < 0
2317 THEN
2318
2319 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2320 THEN
2321
2322 FND_MSG_PUB.add_exc_msg
2323 ( p_pkg_name => 'PA_BUDGET_UTILS'
2324 , p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
2325 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
2326
2327 END IF;
2328
2329 IF l_debug_mode = 'Y' THEN
2330 pa_debug.g_err_stage := 'Unexpected Error in summarizing totals in budget model';
2331 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
2332 END IF;
2333
2334
2335 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2336
2337 END IF;
2338
2339
2340 END IF;
2341
2342
2343 IF FND_API.TO_BOOLEAN( p_commit )
2344 THEN
2345
2346 IF l_debug_mode = 'Y' THEN
2347 pa_debug.g_err_stage := 'About to do a COMMIT';
2348 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2349 END IF;
2350
2351 COMMIT;
2352 END IF;
2353
2354 IF l_debug_mode = 'Y' THEN
2355 pa_debug.g_err_stage := 'Leaving create draft budget';
2356 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2357 END IF;
2358
2359 --Changes for bug 3182963
2360 IF l_debug_mode = 'Y' THEN
2361 pa_debug.reset_curr_function;
2362 END IF;
2363
2364
2365 EXCEPTION
2366 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
2367 -- dbms_output.put_line('MSG count in the stack ' || FND_MSG_PUB.count_msg);
2368 ROLLBACK TO create_draft_budget_pub;
2369
2370 IF p_return_status IS NULL OR
2371 p_return_status = FND_API.G_RET_STS_SUCCESS THEN
2372 p_return_status := FND_API.G_RET_STS_ERROR;
2373 END IF;
2374
2375 l_msg_count := FND_MSG_PUB.count_msg;
2376 -- dbms_output.put_line('MSG count in the stack ' || l_msg_count);
2377
2378 IF l_msg_count = 1 AND p_msg_data IS NULL THEN
2379 PA_INTERFACE_UTILS_PUB.get_messages
2380 (p_encoded => FND_API.G_TRUE,
2381 p_msg_index => 1,
2382 p_msg_count => l_msg_count,
2383 p_msg_data => l_msg_data,
2384 p_data => l_data,
2385 p_msg_index_out => l_msg_index_out);
2386
2387 p_msg_data := l_data;
2388 p_msg_count := l_msg_count;
2389 ELSE
2390 p_msg_count := l_msg_count;
2391 END IF;
2392
2393 IF l_debug_mode = 'Y' THEN
2394 pa_debug.reset_curr_function;
2395 END IF;
2396
2397 -- dbms_output.put_line('MSG count in the stack ' || l_msg_count);
2398
2399 RETURN;
2400
2401 WHEN FND_API.G_EXC_ERROR
2402 THEN
2403
2404 /* -- dbms_output.put_line('handling an G_EXC_ERROR exception in create_draft_budget'); */
2405
2406 ROLLBACK TO create_draft_budget_pub;
2407
2408 p_return_status := FND_API.G_RET_STS_ERROR;
2409
2410 FND_MSG_PUB.Count_And_Get
2411 ( p_count => p_msg_count ,
2412 p_data => p_msg_data );
2413 --Changes for bug 3182963
2414 IF l_debug_mode = 'Y' THEN
2415 pa_debug.reset_curr_function;
2416 END IF;
2417
2418
2419 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
2420 THEN
2421
2422 /* -- dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception in create_draft_budget'); */
2423
2424 ROLLBACK TO create_draft_budget_pub;
2425
2426 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2427
2428 FND_MSG_PUB.Count_And_Get
2429 ( p_count => p_msg_count ,
2430 p_data => p_msg_data );
2431
2432 --Changes for bug 3182963
2433 IF l_debug_mode = 'Y' THEN
2434 pa_debug.reset_curr_function;
2435 END IF;
2436
2437
2438 WHEN ROW_ALREADY_LOCKED
2439 THEN
2440 ROLLBACK TO create_draft_budget_pub;
2441
2442 p_return_status := FND_API.G_RET_STS_ERROR;
2443
2444 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2445 THEN
2446 FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
2447 FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
2448 FND_MESSAGE.SET_TOKEN('TASK', '');
2449 FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', p_budget_type_code);
2450 FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
2451 FND_MESSAGE.SET_TOKEN('START_DATE', '');
2452 FND_MESSAGE.SET_TOKEN('ENTITY', 'G_BUDGET_CODE');
2453 FND_MSG_PUB.ADD;
2454 END IF;
2455
2456 FND_MSG_PUB.Count_And_Get
2457 ( p_count => p_msg_count ,
2458 p_data => p_msg_data );
2459
2460 --Changes for bug 3182963
2461 IF l_debug_mode = 'Y' THEN
2462 pa_debug.reset_curr_function;
2463 END IF;
2464
2465
2466 WHEN OTHERS
2467 THEN
2468
2469 /* -- dbms_output.put_line('handling an OTHERS exception'); */
2470
2471 ROLLBACK TO create_draft_budget_pub;
2472
2473 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2474
2475 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2476 THEN
2477 FND_MSG_PUB.add_exc_msg
2478 ( p_pkg_name => G_PKG_NAME
2479 , p_procedure_name => l_api_name );
2480
2481 END IF;
2482
2483 FND_MSG_PUB.Count_And_Get
2484 ( p_count => p_msg_count ,
2485 p_data => p_msg_data );
2486
2487 --Changes for bug 3182963
2488 IF l_debug_mode = 'Y' THEN
2489 pa_debug.reset_curr_function;
2490 END IF;
2491
2492
2493 END create_draft_budget;
2494
2495
2496
2497 ----------------------------------------------------------------------------------------
2498 --Name: init_budget
2499 --Type: Procedure
2500 --Description: This procedure can be used to initialize the global PL/SQL
2501 -- tables that are used by a LOAD/EXECUTE/FETCH cycle.
2502 --
2503 --
2504 --Called subprograms:
2505 --
2506 --
2507 --
2508 --History:
2509 -- 20-SEP-1996 L. de Werker Created
2510 --
2511 --
2512 PROCEDURE init_budget
2513
2514 IS
2515
2516 BEGIN
2517
2518 FND_MSG_PUB.Initialize;
2519
2520 -- Initialize global table and record types
2521
2522 G_budget_lines_in_tbl.delete;
2523
2524 G_budget_lines_tbl_count := 0;
2525
2526 G_budget_lines_out_tbl.delete;
2527
2528
2529 END init_budget;
2530
2531
2532 ----------------------------------------------------------------------------------------
2533 --Name: load_budget_line
2534 --Type: Procedure
2535 --Description: This procedure can be used to load a budget line
2536 -- in a global PL/SQL table.
2537 --
2538 --Called subprograms:
2539 --
2540 --
2541 --
2542 --History:
2543 -- 24-SEP-1996 L. de Werker Created
2544 -- 28-NOV-1996 L. de Werker Add 16 parameters for descriptive flexfields
2545 -- 11-Mar-2003 Srikanth Included the parameters for Fin Plan Model
2546
2547 PROCEDURE load_budget_line
2548 ( p_api_version_number IN NUMBER
2549 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
2550 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
2551 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2552 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2553 ,p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2554 ,p_resource_alias IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2555 ,p_resource_list_member_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2556 ,p_budget_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2557 ,p_budget_end_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2558 ,p_period_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2559 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2560 ,p_raw_cost IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2561 ,p_burdened_cost IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2562 ,p_revenue IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2563 ,p_quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2564 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2565 ,p_pm_budget_line_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2566 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2567 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2568 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2569 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2570 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2571 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2572 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2573 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2574 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2575 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2576 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2577 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2578 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2579 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2580 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2581 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2582
2583 --Parameters for fin plan model
2584
2585 --Changes the default of the following parameters from NULL to G_PA_MISS_XXX 24-APR-03 by Xin Liu
2586 ,p_txn_currency_code IN pa_fp_txn_currencies.txn_currency_code%TYPE
2587 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2588 ,p_projfunc_cost_rate_type IN pa_proj_fp_options.projfunc_cost_rate_type%TYPE
2589 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2590 ,p_projfunc_cost_rate_date_type IN pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE
2591 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2592 ,p_projfunc_cost_rate_date IN pa_proj_fp_options.projfunc_cost_rate_date%TYPE
2593 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2594 ,p_projfunc_cost_exchange_rate IN pa_budget_lines.projfunc_cost_exchange_rate%TYPE
2595 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2596 ,p_projfunc_rev_rate_type IN pa_proj_fp_options.projfunc_rev_rate_type%TYPE
2597 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2598 ,p_projfunc_rev_rate_date_type IN pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE
2599 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2600 ,p_projfunc_rev_rate_date IN pa_proj_fp_options.projfunc_rev_rate_date%TYPE
2601 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2602 ,p_projfunc_rev_exchange_rate IN pa_budget_lines.projfunc_cost_exchange_rate%TYPE
2603 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2604 ,p_project_cost_rate_type IN pa_proj_fp_options.project_cost_rate_type%TYPE
2605 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2606 ,p_project_cost_rate_date_type IN pa_proj_fp_options.project_cost_rate_date_type%TYPE
2607 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2608 ,p_project_cost_rate_date IN pa_proj_fp_options.project_cost_rate_date%TYPE
2609 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2610 ,p_project_cost_exchange_rate IN pa_budget_lines.project_cost_exchange_rate%TYPE
2611 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2612 ,p_project_rev_rate_type IN pa_proj_fp_options.project_rev_rate_type%TYPE
2613 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2614 ,p_project_rev_rate_date_type IN pa_proj_fp_options.project_rev_rate_date_type%TYPE
2615 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2616 ,p_project_rev_rate_date IN pa_proj_fp_options.project_rev_rate_date%TYPE
2617 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2618 ,p_project_rev_exchange_rate IN pa_budget_lines.project_rev_exchange_rate%TYPE
2619 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2620 ,p_change_reason_code IN pa_budget_lines.change_reason_code%TYPE
2621 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2622 )
2623
2624 IS
2625
2626 l_api_name CONSTANT VARCHAR2(30) := 'load_budget_line';
2627 l_return_status VARCHAR2(1);
2628 l_err_stage VARCHAR2(120);
2629 l_msg_entity VARCHAR2(100);
2630 l_msg_entity_index NUMBER;
2631
2632
2633 BEGIN
2634
2635 -- Standard begin of API savepoint
2636
2637 SAVEPOINT load_budget_line_pub;
2638
2639 -- Standard call to check for call compatibility.
2640
2641 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
2642 p_api_version_number ,
2643 l_api_name ,
2644 G_PKG_NAME )
2645 THEN
2646
2647 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2648
2649 END IF;
2650
2651 -- Initialize the message table if requested.
2652
2653 IF FND_API.TO_BOOLEAN( p_init_msg_list )
2654 THEN
2655
2656 FND_MSG_PUB.initialize;
2657
2658 END IF;
2659
2660 -- Set API return status to success
2661
2662 p_return_status := FND_API.G_RET_STS_SUCCESS;
2663
2664 -- assign a value to the global counter for this table
2665 G_budget_lines_tbl_count := G_budget_lines_tbl_count + 1;
2666
2667
2668 -- assign incoming parameters to the fields of pl/sql global table G_budget_lines_in_tbl
2669 G_budget_lines_in_tbl(G_budget_lines_tbl_count).pa_task_id := p_pa_task_id;
2670 G_budget_lines_in_tbl(G_budget_lines_tbl_count).pm_task_reference := p_pm_task_reference;
2671 G_budget_lines_in_tbl(G_budget_lines_tbl_count).resource_alias := p_resource_alias;
2672 G_budget_lines_in_tbl(G_budget_lines_tbl_count).resource_list_member_id := p_resource_list_member_id;
2673 G_budget_lines_in_tbl(G_budget_lines_tbl_count).budget_start_date := p_budget_start_date;
2674 G_budget_lines_in_tbl(G_budget_lines_tbl_count).budget_end_date := p_budget_end_date;
2675 G_budget_lines_in_tbl(G_budget_lines_tbl_count).period_name := p_period_name;
2676 G_budget_lines_in_tbl(G_budget_lines_tbl_count).description := p_description;
2677 G_budget_lines_in_tbl(G_budget_lines_tbl_count).raw_cost := p_raw_cost;
2678 G_budget_lines_in_tbl(G_budget_lines_tbl_count).burdened_cost := p_burdened_cost;
2679 G_budget_lines_in_tbl(G_budget_lines_tbl_count).revenue := p_revenue;
2680 G_budget_lines_in_tbl(G_budget_lines_tbl_count).quantity := p_quantity;
2681 G_budget_lines_in_tbl(G_budget_lines_tbl_count).pm_product_code
2682 := p_pm_product_code;
2683 G_budget_lines_in_tbl(G_budget_lines_tbl_count).pm_budget_line_reference
2684 := p_pm_budget_line_reference;
2685 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute_category := p_attribute_category;
2686 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute1
2687 := p_attribute1;
2688 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute2
2689 := p_attribute2;
2690 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute3
2691 := p_attribute3;
2692 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute4
2693 := p_attribute4;
2694 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute5
2695 := p_attribute5;
2696 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute6
2697 := p_attribute6;
2698 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute7
2699 := p_attribute7;
2700 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute8
2701 := p_attribute8;
2702 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute9
2703 := p_attribute9;
2704 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute10
2705 := p_attribute10;
2706 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute11
2707 := p_attribute11;
2708 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute12
2709 := p_attribute12;
2710 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute13
2711 := p_attribute13;
2712 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute14
2713 := p_attribute14;
2714 G_budget_lines_in_tbl(G_budget_lines_tbl_count).attribute15
2715 := p_attribute15;
2716
2717 -- The parameters included for fin plan model
2718 G_budget_lines_in_tbl(G_budget_lines_tbl_count).txn_currency_code := p_txn_currency_code ;
2719 G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_cost_rate_type := p_projfunc_cost_rate_type ;
2720 G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_cost_rate_date_type := p_projfunc_cost_rate_date_type ;
2721 G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_cost_rate_date := p_projfunc_cost_rate_date ;
2722 G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_cost_exchange_rate := p_projfunc_cost_exchange_rate ;
2723 G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_rev_rate_type := p_projfunc_rev_rate_type ;
2724 G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_rev_rate_date_type := p_projfunc_rev_rate_date_type ;
2725 G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_rev_rate_date := p_projfunc_rev_rate_date ;
2726 G_budget_lines_in_tbl(G_budget_lines_tbl_count).projfunc_rev_exchange_rate := p_projfunc_rev_exchange_rate ;
2727 G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_cost_rate_type := p_project_cost_rate_type ;
2728 G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_cost_rate_date_type := p_project_cost_rate_date_type ;
2729 G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_cost_rate_date := p_project_cost_rate_date ;
2730 G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_cost_exchange_rate := p_project_cost_exchange_rate ;
2731 G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_rev_rate_type := p_project_rev_rate_type ;
2732 G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_rev_rate_date_type := p_project_rev_rate_date_type ;
2733 G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_rev_rate_date := p_project_rev_rate_date ;
2734 G_budget_lines_in_tbl(G_budget_lines_tbl_count).project_rev_exchange_rate := p_project_rev_exchange_rate ;
2735 G_budget_lines_in_tbl(G_budget_lines_tbl_count).change_reason_code := p_change_reason_code ;
2736
2737
2738
2739 EXCEPTION
2740
2741 WHEN FND_API.G_EXC_ERROR
2742 THEN
2743 ROLLBACK TO load_budget_line_pub;
2744
2745 p_return_status := FND_API.G_RET_STS_ERROR;
2746
2747 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
2748 THEN
2749 ROLLBACK TO load_budget_line_pub;
2750
2751 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2752
2753 WHEN OTHERS THEN
2754 ROLLBACK TO load_budget_line_pub;
2755
2756 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2757
2758 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2759 THEN
2760 FND_MSG_PUB.add_exc_msg
2761 ( p_pkg_name => G_PKG_NAME
2762 , p_procedure_name => l_api_name );
2763
2764 END IF;
2765
2766 END load_budget_line;
2767
2768 ----------------------------------------------------------------------------------------
2769 --Name: execute_create_draft_budget
2770 --Type: Procedure
2771 --Description: This procedure can be used to create a draft budget
2772 -- using global PL/SQL tables.
2773 --
2774 --Called subprograms:
2775 --
2776 --
2777 --
2778 --History:
2779 -- 23-SEP-1996 L. de Werker Created
2780 -- 28-NOV-1996 L. de Werker Add 16 parameters for descriptive flexfields
2781 -- 29-NOV-1996 L. de Werker Added parameter p_pm_budget_reference
2782 -- 01-sep-2004 tpalaniv Added parameter p_pm_budget_reference while calling create_draft_budget
2783 PROCEDURE execute_create_draft_budget
2784 ( p_api_version_number IN NUMBER
2785 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
2786 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
2787 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2788 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2789 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2790 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2791 ,p_pm_budget_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2792 , p_budget_version_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2793 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2794 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2795 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2796 ,p_change_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2797 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2798 ,p_entry_method_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2799 ,p_resource_list_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2800 ,p_resource_list_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2801 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2802 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2803 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2804 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2805 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2806 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2807 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2808 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2809 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2810 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2811 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2812 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2813 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2814 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2815 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2816 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2817
2818 --Added the following parameters for changes in AMG due to finplan model
2819 ,p_fin_plan_type_id IN pa_fin_plan_types_b.fin_plan_type_id%TYPE
2820 ,p_fin_plan_type_name IN pa_fin_plan_types_vl.name%TYPE
2821 ,p_version_type IN pa_budget_versions.version_type%TYPE
2822 ,p_fin_plan_level_code IN pa_proj_fp_options.cost_fin_plan_level_code%TYPE
2823 ,p_time_phased_code IN pa_proj_fp_options.cost_time_phased_code%TYPE
2824 ,p_plan_in_multi_curr_flag IN pa_proj_fp_options.plan_in_multi_curr_flag%TYPE
2825 ,p_projfunc_cost_rate_type IN pa_proj_fp_options.projfunc_cost_rate_type%TYPE
2826 ,p_projfunc_cost_rate_date_typ IN pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE
2827 ,p_projfunc_cost_rate_date IN pa_proj_fp_options.projfunc_cost_rate_date%TYPE
2828 ,p_projfunc_rev_rate_type IN pa_proj_fp_options.projfunc_rev_rate_type%TYPE
2829 ,p_projfunc_rev_rate_date_typ IN pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE
2830 ,p_projfunc_rev_rate_date IN pa_proj_fp_options.projfunc_rev_rate_date%TYPE
2831 ,p_project_cost_rate_type IN pa_proj_fp_options.project_cost_rate_type%TYPE
2832 ,p_project_cost_rate_date_typ IN pa_proj_fp_options.project_cost_rate_date_type%TYPE
2833 ,p_project_cost_rate_date IN pa_proj_fp_options.project_cost_rate_date%TYPE
2834 ,p_project_rev_rate_type IN pa_proj_fp_options.project_rev_rate_type%TYPE
2835 ,p_project_rev_rate_date_typ IN pa_proj_fp_options.project_rev_rate_date_type%TYPE
2836 ,p_project_rev_rate_date IN pa_proj_fp_options.project_rev_rate_date%TYPE
2837 ,p_raw_cost_flag IN VARCHAR2
2838 ,p_burdened_cost_flag IN VARCHAR2
2839 ,p_revenue_flag IN VARCHAR2
2840 ,p_cost_qty_flag IN VARCHAR2
2841 ,p_revenue_qty_flag IN VARCHAR2
2842 ,P_all_qty_flag IN VARCHAR2
2843 ,p_create_new_curr_working_flag IN VARCHAR2
2844 ,p_replace_current_working_flag IN VARCHAR2
2845 ,p_using_resource_lists_flag IN VARCHAR2
2846 )
2847
2848
2849 IS
2850
2851 l_api_name CONSTANT VARCHAR2(30) := 'execute_create_draft_budget';
2852 i NUMBER;
2853 l_return_status VARCHAR2(1);
2854 l_err_stage VARCHAR2(120);
2855
2856
2857 BEGIN
2858
2859 -- Standard begin of API savepoint
2860
2861 SAVEPOINT execute_create_budget_pub;
2862
2863 -- Standard call to check for call compatibility.
2864
2865 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
2866 p_api_version_number ,
2867 l_api_name ,
2868 G_PKG_NAME )
2869 THEN
2870
2871 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2872
2873 END IF;
2874
2875 -- Initialize the message table if requested.
2876
2877 IF FND_API.TO_BOOLEAN( p_init_msg_list )
2878 THEN
2879
2880 FND_MSG_PUB.initialize;
2881
2882 END IF;
2883
2884 -- Set API return status to success
2885
2886 p_return_status := FND_API.G_RET_STS_SUCCESS;
2887
2888 create_draft_budget
2889 ( p_api_version_number => p_api_version_number
2890 ,p_commit => FND_API.G_FALSE
2891 ,p_init_msg_list => FND_API.G_FALSE
2892 ,p_msg_count => p_msg_count
2893 ,p_msg_data => p_msg_data
2894 ,p_return_status => l_return_status
2895 ,p_pm_product_code => p_pm_product_code
2896 ,p_budget_version_name => p_budget_version_name
2897 ,p_pa_project_id => p_pa_project_id
2898 ,p_pm_project_reference => p_pm_project_reference
2899 ,p_pm_budget_reference => p_pm_budget_reference -- Added for bug 3858543
2900 ,p_budget_type_code => p_budget_type_code
2901 ,p_change_reason_code => p_change_reason_code
2902 ,p_description => p_description
2903 ,p_entry_method_code => p_entry_method_code
2904 ,p_resource_list_name => p_resource_list_name
2905 ,p_resource_list_id => p_resource_list_id
2906 ,p_attribute_category => p_attribute_category
2907 ,p_attribute1 => p_attribute1
2908 ,p_attribute2 => p_attribute2
2909 ,p_attribute3 => p_attribute3
2910 ,p_attribute4 => p_attribute4
2911 ,p_attribute5 => p_attribute5
2912 ,p_attribute6 => p_attribute6
2913 ,p_attribute7 => p_attribute7
2914 ,p_attribute8 => p_attribute8
2915 ,p_attribute9 => p_attribute9
2916 ,p_attribute10 => p_attribute10
2917 ,p_attribute11 => p_attribute11
2918 ,p_attribute12 => p_attribute12
2919 ,p_attribute13 => p_attribute13
2920 ,p_attribute14 => p_attribute14
2921 ,p_attribute15 => p_attribute15
2922 ,p_budget_lines_in => G_budget_lines_in_tbl
2923 ,p_budget_lines_out => G_budget_lines_out_tbl
2924
2925 --New parameters for finplan model
2926 ,p_fin_plan_type_id => p_fin_plan_type_id
2927 ,p_fin_plan_type_name => p_fin_plan_type_name
2928 ,p_version_type => p_version_type
2929 ,p_fin_plan_level_code => p_fin_plan_level_code
2930 ,p_time_phased_code => p_time_phased_code
2931 ,p_plan_in_multi_curr_flag => p_plan_in_multi_curr_flag
2932 ,p_projfunc_cost_rate_type => p_projfunc_cost_rate_type
2933 ,p_projfunc_cost_rate_date_typ => p_projfunc_cost_rate_date_typ
2934 ,p_projfunc_cost_rate_date => p_projfunc_cost_rate_date
2935 ,p_projfunc_rev_rate_type => p_projfunc_rev_rate_type
2936 ,p_projfunc_rev_rate_date_typ => p_projfunc_rev_rate_date_typ
2937 ,p_projfunc_rev_rate_date => p_projfunc_rev_rate_date
2938 ,p_project_cost_rate_type => p_project_cost_rate_type
2939 ,p_project_cost_rate_date_typ => p_project_cost_rate_date_typ
2940 ,p_project_cost_rate_date => p_project_cost_rate_date
2941 ,p_project_rev_rate_type => p_project_rev_rate_type
2942 ,p_project_rev_rate_date_typ => p_project_rev_rate_date_typ
2943 ,p_project_rev_rate_date => p_project_rev_rate_date
2944 ,p_raw_cost_flag => p_raw_cost_flag
2945 ,p_burdened_cost_flag => p_burdened_cost_flag
2946 ,p_revenue_flag => p_revenue_flag
2947 ,p_cost_qty_flag => p_cost_qty_flag
2948 ,p_revenue_qty_flag => p_revenue_qty_flag
2949 ,P_all_qty_flag => P_all_qty_flag
2950 ,p_create_new_curr_working_flag=> p_create_new_curr_working_flag
2951 ,p_replace_current_working_flag=> p_replace_current_working_flag
2952 ,p_using_resource_lists_flag => p_using_resource_lists_flag);
2953
2954
2955 -- Temporary solution because of commit in delete_budget!!!!
2956
2957 SAVEPOINT execute_create_budget_pub;
2958
2959 /* -- dbms_output.put_line('Return status create_draft_budget: '||l_return_status); */
2960
2961 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
2962 THEN
2963
2964 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2965
2966 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
2967 THEN
2968
2969 RAISE FND_API.G_EXC_ERROR;
2970 END IF;
2971
2972 IF fnd_api.to_boolean(p_commit)
2973 THEN
2974 COMMIT;
2975 END IF;
2976
2977
2978 EXCEPTION
2979
2980 WHEN FND_API.G_EXC_ERROR
2981 THEN
2982
2983
2984 ROLLBACK TO execute_create_budget_pub;
2985
2986 p_return_status := FND_API.G_RET_STS_ERROR;
2987
2988 FND_MSG_PUB.Count_And_Get
2989 ( p_count => p_msg_count ,
2990 p_data => p_msg_data );
2991
2992 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
2993 THEN
2994
2995 /* -- dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
2996
2997 ROLLBACK TO execute_create_budget_pub;
2998
2999 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3000
3001 FND_MSG_PUB.Count_And_Get
3002 ( p_count => p_msg_count ,
3003 p_data => p_msg_data );
3004
3005 WHEN OTHERS THEN
3006
3007
3008 ROLLBACK TO execute_create_budget_pub;
3009
3010 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3011
3012 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3013 THEN
3014 FND_MSG_PUB.add_exc_msg
3015 ( p_pkg_name => G_PKG_NAME
3016 , p_procedure_name => l_api_name );
3017
3018 END IF;
3019
3020 FND_MSG_PUB.Count_And_Get
3021 ( p_count => p_msg_count ,
3022 p_data => p_msg_data );
3023
3024 END execute_create_draft_budget;
3025
3026
3027 ----------------------------------------------------------------------------------------
3028 --Name: fetch_budget_line
3029 --Type: Procedure
3030 --Description: This procedure can be used to fetch the outcoming
3031 -- parameters for budget lines as part of the LOAD/EXECUTE/FETCH cycle.
3032 --
3033 --
3034 --Called subprograms:
3035 --
3036 --
3037 --
3038 --History:
3039 -- 30-SEP-1996 L. de Werker Created
3040 --
3041 --
3042 PROCEDURE fetch_budget_line
3043 ( p_api_version_number IN NUMBER
3044 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
3045 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3046 ,p_line_index IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3047 ,p_line_return_status OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
3048
3049 IS
3050
3051 l_api_name CONSTANT VARCHAR2(30) := 'fetch_budget_line';
3052 l_index NUMBER;
3053 i NUMBER;
3054
3055 BEGIN
3056
3057 -- Standard begin of API savepoint
3058
3059 SAVEPOINT fetch_budget_line_pub;
3060
3061 -- Standard call to check for call compatibility.
3062
3063 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
3064 p_api_version_number ,
3065 l_api_name ,
3066 G_PKG_NAME )
3067 THEN
3068
3069 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3070
3071 END IF;
3072
3073 -- Initialize the message table if requested.
3074
3075 IF FND_API.TO_BOOLEAN( p_init_msg_list )
3076 THEN
3077
3078 FND_MSG_PUB.initialize;
3079
3080 END IF;
3081
3082 -- Set API return status to success
3083
3084 p_return_status := FND_API.G_RET_STS_SUCCESS;
3085
3086 -- Check budget line index value,
3087 -- when they don't provide an index we will error out
3088
3089 IF p_line_index = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3090 OR p_line_index IS NULL
3091 THEN
3092 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3093 THEN
3094 pa_interface_utils_pub.map_new_amg_msg
3095 ( p_old_message_code => 'PA_BUGDET_LINE_INDEX_MISSING'
3096 ,p_msg_attribute => 'CHANGE'
3097 ,p_resize_flag => 'Y'
3098 ,p_msg_context => 'GENERAL'
3099 ,p_attribute1 => ''
3100 ,p_attribute2 => ''
3101 ,p_attribute3 => ''
3102 ,p_attribute4 => ''
3103 ,p_attribute5 => '');
3104 END IF;
3105
3106 p_return_status := FND_API.G_RET_STS_ERROR;
3107 RAISE FND_API.G_EXC_ERROR;
3108 ELSE
3109 l_index := p_line_index;
3110 END IF;
3111
3112 --assign global table fields to the outgoing parameter
3113 p_line_return_status := G_budget_lines_out_tbl(l_index).return_status;
3114
3115
3116
3117 EXCEPTION
3118
3119 WHEN FND_API.G_EXC_ERROR
3120 THEN
3121
3122 ROLLBACK TO fetch_budget_line_pub;
3123
3124 p_return_status := FND_API.G_RET_STS_ERROR;
3125
3126 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
3127 THEN
3128
3129 ROLLBACK TO fetch_budget_line_pub;
3130
3131 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3132
3133 WHEN OTHERS THEN
3134
3135 ROLLBACK TO fetch_budget_line_pub;
3136
3137 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3138
3139 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3140 THEN
3141 FND_MSG_PUB.add_exc_msg
3142 ( p_pkg_name => G_PKG_NAME
3143 , p_procedure_name => l_api_name );
3144
3145 END IF;
3146
3147
3148 END fetch_budget_line;
3149
3150 ----------------------------------------------------------------------------------------
3151 --Name: clear_budget
3152 --Type: Procedure
3153 --Description: This procedure can be used to clear the global PL/SQL
3154 -- tables that are used by a LOAD/EXECUTE/FETCH cycle.
3155 --
3156 --
3157 --Called subprograms:
3158 --
3159 --
3160 --
3161 --History:
3162 -- 23-SEP-1996 L. de Werker Created
3163 --
3164 --
3165 PROCEDURE clear_budget
3166
3167 IS
3168
3169 BEGIN
3170
3171
3172 init_budget;
3173
3174
3175 END clear_budget;
3176
3177
3178 ----------------------------------------------------------------------------------------
3179 --Name: Baseline_Budget
3180 --Type: Procedure
3181 --Description: This procedure can be used to baseline
3182 -- a budget for a given project.
3183 --
3184 --
3185 --Called subprograms: pa_budget_core.verify
3186 -- pa_budget_core.baseline
3187 -- PA_BUDGET_FUND_PKG.get_budget_ctrl_options
3188 --
3189 --
3190 --
3191 --History:
3192 -- 30-SEP-1996 L. de Werker Created
3193 -- 03-DEC-1996 L. de Werker Added check for previous baselined budgets.
3194 -- 03-MAR-1997 L. de Werker Added workflow enabling
3195 -- 24-JUN-97 jwhite Workflow had been commented-out, renabled it
3196 -- as per latest specifications.
3197 -- 21-JUL-97 jwhite Added Check_Baseline_Rules procedure
3198 -- to validations section.
3199 -- 29-JUL-97 jwhite Radically changed validations and WF implementation
3200 -- as per new specs from jlowell.
3201 -- 12-AUG-97 jwhite Added new OUT-parameter, p_workflow_started
3202 -- as per workflow implementation.
3203 -- 08-SEP-97 jwhite Updated to latest specifications: added
3204 -- wrappers for Start_Budget_WF and
3205 -- Budget_WF_Is_Used, new parameters to
3206 -- Verify_Budget_Rules calls, etc.
3207 -- 11-SEP-97 jwhite Added new concept of warnings_only ('W')
3208 -- for the p_return_status with respect
3209 -- to the Verify_Budget_Rules calls.
3210 --
3211 -- 02-MAY-01 jwhite As per the Non-Project Budget Ingtegration
3212 -- development effort, if budget is enabled for budgetary
3213 -- controls, the baseline process will be
3214 -- aborted.
3215 -- 02-FEB-03 sgoteti Made changes for the finplan model
3216
3217
3218 PROCEDURE Baseline_Budget
3219 ( p_api_version_number IN NUMBER
3220 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
3221 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
3222 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
3223 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3224 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3225 ,p_workflow_started OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3226 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3227 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3228 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3229 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3230 ,p_mark_as_original IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3231
3232 --Parameters due to Fin Plan Model
3233 ,p_fin_plan_type_id IN pa_fin_plan_types_b.fin_plan_type_id%TYPE
3234 ,p_fin_plan_type_name IN pa_fin_plan_types_tl.name%TYPE
3235 ,p_version_type IN pa_budget_versions.version_type%TYPE)
3236
3237 IS
3238
3239 CURSOR l_budget_types_csr
3240 (p_budget_type_code VARCHAR2 )
3241 IS
3242 SELECT 1
3243 FROM pa_budget_types
3244 WHERE budget_type_code = p_budget_type_code;
3245
3246 -- Changed the cursor so that it can be used in both old budget model
3247 -- and finplan model
3248 CURSOR l_budget_lines_csr
3249 (p_budget_version_id NUMBER )
3250 IS
3251 SELECT 1
3252 FROM pa_budget_lines
3253 WHERE budget_version_id = p_budget_version_id;
3254
3255 CURSOR l_budget_versions_csr
3256 (c_project_id NUMBER
3257 ,c_budget_type_code VARCHAR2)
3258
3259 IS
3260 SELECT budget_version_id
3261 FROM pa_budget_versions
3262 WHERE project_id = c_project_id
3263 AND budget_type_code = c_budget_type_code
3264 AND budget_status_code = 'W'
3265 AND ci_id IS NULL; -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
3266
3267
3268 l_budget_versions_rec l_budget_versions_csr%ROWTYPE;
3269
3270
3271 CURSOR l_baselined_csr
3272 ( c_project_id NUMBER
3273 ,c_budget_type_code VARCHAR2 )
3274
3275 IS
3276 SELECT budget_version_id
3277 FROM pa_budget_versions
3278 WHERE project_id = c_project_id
3279 AND budget_type_code = c_budget_type_code
3280 AND budget_status_code = 'B'
3281 AND ci_id IS NULL; -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
3282
3283
3284 l_baselined_rec l_baselined_csr%ROWTYPE;
3285
3286
3287 -- 01-AUG-97, jwhite
3288 -- Cursor for Verify_Budget_Rules
3289
3290 CURSOR l_budget_rules_csr(p_draft_version_id NUMBER)
3291 IS
3292 SELECT v.resource_list_id,
3293 t.project_type_class_code
3294 FROM pa_project_types t,
3295 pa_projects p,
3296 pa_budget_versions v
3297 WHERE v.budget_version_id = p_draft_version_id
3298 AND v.project_id = p.project_id
3299 AND p.project_type = t.project_type
3300 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
3301
3302
3303
3304 -- 24-JUN-97, jwhite
3305 -- ROW LOCKING ---------------------------------------------------------------
3306
3307 CURSOR l_lock_budget_csr (p_budget_version_id NUMBER)
3308 IS
3309 SELECT 'x'
3310 FROM pa_budget_versions
3311 WHERE budget_version_id = p_budget_version_id
3312 AND ci_id IS NULL -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
3313 FOR UPDATE NOWAIT;
3314
3315 -- --------------------------------------------------------------------------------------
3316
3317
3318
3319 l_api_name CONSTANT VARCHAR2(30) := 'baseline_budget';
3320 l_return_status VARCHAR2(1);
3321 l_project_id NUMBER;
3322
3323 l_budget_version_id NUMBER;
3324 l_mark_as_original pa_budget_versions.current_original_flag%TYPE;
3325
3326 l_err_code NUMBER;
3327 l_err_stage VARCHAR2(120);
3328 l_err_stack VARCHAR2(630);
3329 i NUMBER;
3330 l_row_found NUMBER;
3331 l_msg_count NUMBER ;
3332 l_msg_data VARCHAR2(2000);
3333 l_function_allowed VARCHAR2(1);
3334 l_resp_id NUMBER := 0;
3335 l_user_id NUMBER := 0;
3336 l_module_name VARCHAR2(80);
3337
3338 l_workflow_is_used VARCHAR2(1) := NULL;
3339 l_resource_list_id NUMBER;
3340 l_project_type_class_code pa_project_types.project_type_class_code%TYPE;
3341
3342 l_warnings_only_flag VARCHAR2(1) := 'Y';
3343 l_err_msg_count NUMBER := 0;
3344
3345 --needed to get the field values associated to a AMG message
3346
3347 CURSOR l_amg_project_csr
3348 (p_pa_project_id pa_projects.project_id%type)
3349 IS
3350 SELECT segment1
3351 FROM pa_projects p
3352 WHERE p.project_id = p_pa_project_id;
3353
3354 l_amg_segment1 VARCHAR2(25);
3355
3356 -- Needed to check whether the plan type id passed is attached to the project or Not
3357 CURSOR l_plan_type_option_csr
3358 (c_project_id pa_projects_all.project_id%TYPE,
3359 c_fin_plan_type_id pa_proj_fp_options.proj_fp_options_id%TYPE)
3360 IS
3361 SELECT 'X'
3362 FROM pa_proj_fp_options pfo
3363 WHERE pfo.project_id=c_project_id
3364 AND pfo.fin_plan_type_id=c_fin_plan_type_id
3365 AND pfo.fin_plan_option_level_code=PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE;
3366
3367 -- Needed to get the version id and record version number of the original baselined version
3368 CURSOR l_orig_baselined_ver_csr
3369 (c_project_id pa_projects_all.project_id%TYPE,
3370 c_fin_plan_type_id pa_budget_versions.fin_plan_type_id%TYPE,
3371 c_version_type pa_budget_versions.version_type%TYPE)
3372 IS
3373 SELECT budget_version_id
3374 ,record_version_number
3375 FROM pa_budget_versions
3376 WHERE project_id=c_project_id
3377 AND fin_plan_type_id=c_fin_plan_type_id
3378 AND version_type=c_version_type
3379 AND current_original_flag='Y'
3380 AND ci_id IS NULL; -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
3381
3382
3383 l_orig_baselined_ver_rec l_orig_baselined_ver_csr%ROWTYPE;
3384
3385
3386 -- Budget Integration Variables --------------------------
3387
3388 l_fck_req_flag VARCHAR2(1) := NULL;
3389 l_bdgt_intg_flag VARCHAR2(1) := NULL;
3390 l_bdgt_ver_id NUMBER := NULL;
3391 l_encum_type_id NUMBER := NULL;
3392 l_balance_type VARCHAR2(1) := NULL;
3393
3394 -- --------------------------------------------------------
3395 l_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE;
3396 l_debug_mode VARCHAR2(1);
3397 l_debug_level2 CONSTANT NUMBER := 2;
3398 l_debug_level3 CONSTANT NUMBER := 3;
3399 l_debug_level4 CONSTANT NUMBER := 4;
3400 l_debug_level5 CONSTANT NUMBER := 5;
3401 l_version_type pa_budget_Versions.version_type%TYPE;
3402 l_security_ret_code VARCHAR2(1);
3403 l_baselined_Ver_options_id pa_proj_fp_options.proj_fp_options_id%TYPE;
3404 l_baselined_version_id pa_budget_Versions.budget_version_id%TYPE;
3405 l_CW_ver_options_id pa_proj_fp_options.proj_fp_options_id%TYPE;
3406 l_curr_working_version_id pa_budget_Versions.budget_version_id%TYPE;
3407 l_CB_record_version_number pa_budget_Versions.record_version_number%TYPE;
3408 l_CW_record_version_number pa_budget_Versions.record_version_number%TYPE;
3409 l_any_error_occurred_flag VARCHAR2(1);
3410 l_data VARCHAR2(2000);
3411 l_msg_index_out NUMBER;
3412 l_dummy VARCHAR2(1);
3413 l_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE;
3414 l_result VARCHAR2(1);
3415 ll_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE;
3416 ll_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE;
3417 l_fc_version_created_flag VARCHAR2(1);
3418 l_final_plan_prc_code VARCHAR2(10);
3419 l_targ_request_id pa_budget_versions.request_id%TYPE;
3420 BEGIN
3421
3422 --Standard begin of API savepoint
3423
3424 SAVEPOINT baseline_budget_pub;
3425
3426
3427 --Standard call to check for call compatibility.
3428
3429 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
3430 p_api_version_number ,
3431 l_api_name ,
3432 G_PKG_NAME )
3433 THEN
3434
3435 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3436
3437 END IF;
3438
3439 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
3440
3441
3442 pa_debug.set_curr_function( p_function => 'baseline_budget',
3443 p_debug_mode => l_debug_mode );
3444
3445
3446 --Initialize the message table if requested.
3447 IF FND_API.TO_BOOLEAN( p_init_msg_list )
3448 THEN
3449
3450 FND_MSG_PUB.initialize;
3451
3452 END IF;
3453
3454 --Get the user id and responsibility Ids
3455 l_user_id := FND_GLOBAL.User_id;
3456 l_resp_id := FND_GLOBAL.Resp_id;
3457
3458
3459 -- This api will initialize the data that will be used by the map_new_amg_msg.
3460 -- commented out the procedure call as required by venkatesh. 25-APR-03
3461 /*
3462 PA_INTERFACE_UTILS_PUB.Set_Global_Info
3463 ( p_api_version_number => 1.0
3464 ,p_responsibility_id => l_resp_id
3465 ,p_user_id => l_user_id
3466 ,p_calling_mode => 'AMG' --bug 2783845
3467 ,p_msg_count => l_msg_count
3468 ,p_msg_data => l_msg_data
3469 ,p_return_status => l_return_status);
3470
3471 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3472 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3473 END IF;
3474 */
3475 --product_code is mandatory
3476 IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3477 OR p_pm_product_code IS NULL
3478 THEN
3479 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3480 THEN
3481 pa_interface_utils_pub.map_new_amg_msg
3482 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
3483 ,p_msg_attribute => 'CHANGE'
3484 ,p_resize_flag => 'N'
3485 ,p_msg_context => 'GENERAL'
3486 ,p_attribute1 => ''
3487 ,p_attribute2 => ''
3488 ,p_attribute3 => ''
3489 ,p_attribute4 => ''
3490 ,p_attribute5 => '');
3491 END IF;
3492
3493 IF l_debug_mode = 'Y' THEN
3494 pa_debug.g_err_stage:= 'Product code is missing';
3495 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3496 END IF;
3497
3498 -- RAISE FND_API.G_EXC_ERROR;
3499 l_any_error_occurred_flag := 'Y';
3500
3501 ELSE
3502 l_pm_product_code :='Z';
3503 /*added for bug no :2413400*/
3504 -- dbms_output.put_line('p_pm_product_code is '||p_pm_product_code);
3505 -- dbms_output.put_line('l_pm_product_code is '||l_pm_product_code);
3506 OPEN p_product_code_csr (p_pm_product_code);
3507 FETCH p_product_code_csr INTO l_pm_product_code;
3508 CLOSE p_product_code_csr;
3509 -- dbms_output.put_line('l_pm_product_code is 2'||l_pm_product_code);
3510 IF l_pm_product_code <> 'X'
3511 THEN
3512
3513 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3514 THEN
3515 pa_interface_utils_pub.map_new_amg_msg
3516 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
3517 ,p_msg_attribute => 'CHANGE'
3518 ,p_resize_flag => 'N'
3519 ,p_msg_context => 'GENERAL'
3520 ,p_attribute1 => ''
3521 ,p_attribute2 => ''
3522 ,p_attribute3 => ''
3523 ,p_attribute4 => ''
3524 ,p_attribute5 => '');
3525 END IF;
3526 p_return_status := FND_API.G_RET_STS_ERROR;
3527 -- RAISE FND_API.G_EXC_ERROR;
3528 l_any_error_occurred_flag := 'Y';
3529 IF l_debug_mode = 'Y' THEN
3530 pa_debug.g_err_stage:= 'Product code is invalid';
3531 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3532 END IF;
3533 -- dbms_output.put_line('Product Code is invalid');
3534 END IF;
3535 -- dbms_output.put_line('Validated the code');
3536 END IF;
3537
3538 --l_module_name := p_pm_product_code||'.'||'PA_PM_BASELINE_BUDGET';
3539 l_module_name := 'PA_PM_BASELINE_BUDGET';
3540
3541 --Commented out the existing calls to security APIs. call the api that has all the
3542 --security checks (As part of the changes to AMG for finplan model)
3543
3544 -- As part of enforcing project security, which would determine
3545 -- whether the user has the necessary privileges to update the project
3546 -- need to call the pa_security package
3547 -- If a user does not have privileges to update the project, then
3548 -- cannot baseline the budget
3549
3550 --pa_security.initialize (X_user_id => l_user_id,
3551 -- X_calling_module => l_module_name);
3552
3553 -- Actions performed using the APIs would be subject to
3554 -- function security. If the responsibility does not allow
3555 -- such functions to be executed, the API should not proceed further
3556 -- since the user does not have access to such functions
3557
3558 --PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := p_pa_project_id; Moved this to later part of code
3559
3560
3561 --PA_PM_FUNCTION_SECURITY_PUB.check_function_security
3562 --(p_api_version_number => p_api_version_number,
3563 -- p_responsibility_id => l_resp_id,
3564 -- p_function_name => 'PA_PM_BASELINE_BUDGET',
3565 -- p_msg_count => l_msg_count,
3566 -- p_msg_data => l_msg_data,
3567 -- p_return_status => l_return_status,
3568 -- p_function_allowed => l_function_allowed );
3569
3570 --IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
3571 --THEN
3572 -- RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3573 --
3574 --ELSIF l_return_status = FND_API.G_RET_STS_ERROR
3575 --THEN
3576 -- RAISE FND_API.G_EXC_ERROR;
3577 --END IF;
3578 --IF l_function_allowed = 'N' THEN
3579 -- pa_interface_utils_pub.map_new_amg_msg
3580 -- ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
3581 -- ,p_msg_attribute => 'CHANGE'
3582 -- ,p_resize_flag => 'Y'
3583 -- ,p_msg_context => 'GENERAL'
3584 -- ,p_attribute1 => ''
3585 -- ,p_attribute2 => ''
3586 -- ,p_attribute3 => ''
3587 -- ,p_attribute4 => ''
3588 -- ,p_attribute5 => '');
3589 -- p_return_status := FND_API.G_RET_STS_ERROR;
3590 -- RAISE FND_API.G_EXC_ERROR;
3591 --END IF;
3592
3593
3594 -- Set API return status to success
3595
3596 p_return_status := FND_API.G_RET_STS_SUCCESS;
3597
3598
3599
3600 -- 12-AUG-97, jwhite:
3601 -- Initialize New OUT-parameter to indicate workflow status
3602
3603 -- Set Worflow Started Status -------------------------------------------------
3604
3605 p_workflow_started := 'N';
3606 -- ------------------------------------------------------------------------------------
3607
3608
3609 --CHECK FOR MANDATORY FIELDS and CONVERT VALUES to ID's
3610
3611 /* -- dbms_output.put_line('Check for Mandatory Fields'); */
3612
3613 -- convert pm_project_reference to id
3614 Pa_project_pvt.Convert_pm_projref_to_id (
3615 p_pm_project_reference => p_pm_project_reference,
3616 p_pa_project_id => p_pa_project_id,
3617 p_out_project_id => l_project_id,
3618 p_return_status => l_return_status );
3619
3620 PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := l_project_id;
3621
3622 IF l_debug_mode = 'Y' THEN
3623 pa_debug.g_err_stage:= 'Convert_pm_projref_to_id returned status '||l_return_status;
3624 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3625 END IF;
3626
3627 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
3628 THEN
3629 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3630
3631 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
3632 THEN
3633 RAISE FND_API.G_EXC_ERROR;
3634
3635 END IF;
3636
3637 IF l_project_id IS NULL --never happens because previous procedure checks this.
3638 THEN
3639 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3640 THEN
3641 pa_interface_utils_pub.map_new_amg_msg
3642 ( p_old_message_code => 'PA_PROJECT_IS_MISSING'
3643 ,p_msg_attribute => 'CHANGE'
3644 ,p_resize_flag => 'N'
3645 ,p_msg_context => 'GENERAL'
3646 ,p_attribute1 => ''
3647 ,p_attribute2 => ''
3648 ,p_attribute3 => ''
3649 ,p_attribute4 => ''
3650 ,p_attribute5 => '');
3651 END IF;
3652
3653 IF l_debug_mode = 'Y' THEN
3654 pa_debug.g_err_stage:= 'Project id is null ';
3655 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3656 END IF;
3657
3658 RAISE FND_API.G_EXC_ERROR;
3659
3660 END IF;
3661
3662 -- Get segment1 for AMG messages
3663
3664 OPEN l_amg_project_csr( l_project_id );
3665 FETCH l_amg_project_csr INTO l_amg_segment1;
3666 CLOSE l_amg_project_csr;
3667
3668 -- Added Logic by Xin Liu to handle MISS vars based on Manoj's code review.
3669 -- 28-APR-03
3670 IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3671 ll_fin_plan_type_id := NULL;
3672 ELSE
3673 ll_fin_plan_type_id := p_fin_plan_type_id;
3674 END IF;
3675
3676 IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
3677 ll_fin_plan_type_name := NULL;
3678 ELSE
3679 ll_fin_plan_type_name := p_fin_plan_type_name;
3680 END IF;
3681
3682 -- Changes done.
3683
3684
3685 -- Both Budget Type Code and Fin Plan Type Id should not be null
3686 IF ((p_budget_type_code IS NULL OR p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
3687 (p_fin_plan_type_name IS NULL OR p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
3688 (p_fin_plan_type_id IS NULL OR p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) )THEN
3689
3690 PA_UTILS.ADD_MESSAGE
3691 (p_app_short_name => 'PA',
3692 p_msg_name => 'PA_BUDGET_FP_BOTH_MISSING');
3693
3694 IF l_debug_mode = 'Y' THEN
3695 pa_debug.g_err_stage:= 'budget type code and fin plan type id, both are null ';
3696 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3697 END IF;
3698
3699 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3700
3701 END IF;
3702
3703 -- Both Budget Type Code and Fin Plan Type Id should not be not null
3704 IF ((p_budget_type_code IS NOT NULL AND
3705 p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
3706 ((p_fin_plan_type_name IS NOT NULL AND p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3707 (p_fin_plan_type_id IS NOT NULL AND p_fin_plan_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) THEN
3708
3709 PA_UTILS.ADD_MESSAGE
3710 (p_app_short_name => 'PA',
3711 p_msg_name => 'PA_BUDGET_FP_BOTH_NOT_NULL');
3712
3713 IF l_debug_mode = 'Y' THEN
3714 pa_debug.g_err_stage:= 'budget type code and fin plan type id, both are not null ';
3715 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3716 END IF;
3717
3718 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3719
3720 END IF;
3721
3722 -- Check whether the user has privileges to call this api.
3723 -- Check whether budget type code or fin plan passed are valid or not
3724 IF p_budget_type_code IS NOT NULL
3725 AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3726 THEN
3727 -- This api adds the message to stack in case of error
3728 PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
3729 p_api_version_number => p_api_version_number
3730 ,p_project_id => l_project_id
3731 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET
3732 ,p_function_name => l_module_name
3733 ,p_version_type => NULL
3734 ,x_return_status => l_return_status
3735 ,x_ret_code => l_security_ret_code );
3736
3737 IF l_return_status <> FND_API.G_RET_STS_SUCCESS OR
3738 l_security_ret_code = 'N' THEN
3739
3740 IF l_debug_mode = 'Y' THEN
3741 pa_debug.g_err_stage := 'Security API failed' ;
3742 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3743 END IF;
3744
3745 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3746
3747 END IF;
3748
3749
3750 OPEN l_budget_types_csr( p_budget_type_code );
3751
3752 FETCH l_budget_types_csr
3753 INTO l_row_found;
3754
3755 IF l_budget_types_csr%NOTFOUND
3756 THEN
3757 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3758 THEN
3759 pa_interface_utils_pub.map_new_amg_msg
3760 ( p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
3761 ,p_msg_attribute => 'CHANGE'
3762 ,p_resize_flag => 'N'
3763 ,p_msg_context => 'BUDG'
3764 ,p_attribute1 => l_amg_segment1
3765 ,p_attribute2 => ''
3766 ,p_attribute3 => p_budget_type_code
3767 ,p_attribute4 => ''
3768 ,p_attribute5 => '');
3769 END IF;
3770
3771 CLOSE l_budget_types_csr;
3772 IF l_debug_mode = 'Y' THEN
3773 pa_debug.g_err_stage:= 'Invalid budget type ';
3774 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3775 END IF;
3776
3777 RAISE FND_API.G_EXC_ERROR;
3778
3779 ELSE
3780 CLOSE l_budget_types_csr;
3781 END IF;
3782
3783 --Added this validation for bug#4460120
3784 --Verify that the budget is not of type FORECASTING_BUDGET_TYPE
3785 IF p_budget_type_code='FORECASTING_BUDGET_TYPE' THEN
3786 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3787 THEN
3788 PA_UTILS.add_message
3789 (p_app_short_name => 'PA',
3790 p_msg_name => 'PA_FP_CANT_BLINE_FCST_BUD_TYPE');
3791 END IF;
3792 IF l_debug_mode = 'Y' THEN
3793 pa_debug.g_err_stage := 'Budget of type FORECASTING_BUDGET_TYPE' ;
3794 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
3795 END IF;
3796 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3797 END IF;
3798
3799 ELSE -- API is called in the context of fin plan
3800
3801 --Call the api that converts the fin plan type name to ID .This api adds the
3802 --message to stack in case of error
3803
3804 --Changed p_fin_plan_type_id to ll_fin_plan_type_id,
3805 -- p_fin_plan_type_name to ll_fin_plan_type_name
3806 --Xin Liu 28-APR-03
3807 PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
3808 ( p_fin_plan_type_id => ll_fin_plan_type_id
3809 ,p_fin_plan_type_name => ll_fin_plan_type_name
3810 ,x_fin_plan_type_id => l_fin_plan_type_id
3811 ,x_return_status => l_return_status
3812 ,x_msg_count => l_msg_count
3813 ,x_msg_data => l_msg_data);
3814
3815 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3816
3817 IF l_debug_mode = 'Y' THEN
3818 pa_debug.g_err_stage := 'Can not get the value of Fin Plan Type Id' ;
3819 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3820 END IF;
3821
3822
3823 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3824
3825 END IF;
3826
3827 -- dbms_output.put_line('Obtained the plan type id'||l_fin_plan_type_id);
3828
3829 OPEN l_plan_type_option_csr( l_project_id
3830 ,l_fin_plan_type_id) ;
3831 FETCH l_plan_type_option_csr INTO l_dummy;
3832 IF l_plan_type_option_csr%NOTFOUND THEN
3833
3834 IF l_debug_mode = 'Y' THEN
3835 pa_debug.g_err_stage := 'Plan type options does not exiss' ;
3836 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3837 END IF;
3838
3839 SELECT name
3840 INTO l_fin_plan_type_name
3841 FROM pa_fin_plan_types_vl
3842 WHERE fin_plan_type_id = l_fin_plan_type_id;
3843
3844 PA_UTILS.ADD_MESSAGE
3845 (p_app_short_name => 'PA',
3846 p_msg_name => 'PA_FP_NO_PLAN_TYPE_OPTION',
3847 p_token1 => 'PROJECT',
3848 p_value1 => l_amg_segment1,
3849 p_token2 => 'PLAN_TYPE',
3850 p_value2 => l_fin_plan_type_name);
3851
3852
3853 CLOSE l_plan_type_option_csr;
3854
3855 IF l_debug_mode = 'Y' THEN
3856 pa_debug.g_err_stage:= 'Plan type is not yet added to the project';
3857 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
3858 END IF;
3859
3860 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3861
3862 ELSE
3863
3864 CLOSE l_plan_type_option_csr;
3865
3866 END IF;
3867
3868 --Added by Xin Liu to Handle the G_miss case.
3869 --28-APR-03
3870 IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
3871 l_version_type := NULL;
3872 ELSE
3873 l_version_type := p_version_type;
3874 END IF;
3875
3876 --Derive the version type.
3877 pa_fin_plan_utils.get_version_type
3878 ( p_project_id => l_project_id
3879 ,p_fin_plan_type_id => l_fin_plan_type_id
3880 ,px_version_type => l_version_type
3881 ,x_return_status => l_return_status
3882 ,x_msg_count => l_msg_count
3883 ,x_msg_data => l_msg_data);
3884
3885 -- dbms_output.put_line('Got the version type');
3886 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3887
3888 IF l_debug_mode = 'Y' THEN
3889 pa_debug.g_err_stage := 'get_version_type failed' ;
3890 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3891 END IF;
3892
3893 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3894
3895 END IF;
3896
3897
3898 PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
3899 p_api_version_number => p_api_version_number
3900 ,p_project_id => l_project_id
3901 ,p_fin_plan_type_id => l_fin_plan_type_id /* Bug 3139924 */
3902 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN
3903 ,p_function_name => l_module_name
3904 ,p_version_type => l_version_type
3905 ,x_return_status => l_return_status
3906 ,x_ret_code => l_security_ret_code );
3907
3908 IF l_return_status <> FND_API.G_RET_STS_SUCCESS OR
3909 l_security_ret_code = 'N' THEN
3910
3911 IF l_debug_mode = 'Y' THEN
3912 pa_debug.g_err_stage := 'Security API failed' ;
3913 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3914 END IF;
3915
3916 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3917
3918 END IF;
3919
3920 -- Get the current baselined version
3921 pa_fin_plan_utils.Get_Baselined_Version_Info(
3922 p_project_id => l_project_id
3923 ,p_fin_plan_type_id => l_fin_plan_type_id
3924 ,p_version_type => l_version_type
3925 ,x_fp_options_id => l_baselined_Ver_options_id
3926 ,x_fin_plan_version_id => l_baselined_version_id
3927 ,x_return_status => l_return_status
3928 ,x_msg_count => l_msg_count
3929 ,x_msg_data => l_msg_data);
3930
3931 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
3932 THEN
3933 -- RAISE FND_API.G_EXC_ERROR;
3934 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3935 END IF;
3936
3937 END IF;--IF p_budget_type_code IS NOT NULL
3938 -- Budget Integration Validation ---------------------------------------
3939
3940 --This validation is required only in budget model
3941 IF( p_budget_type_code IS NOT NULL
3942 AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
3943
3944
3945 PA_BUDGET_FUND_PKG.get_budget_ctrl_options (p_project_Id => l_project_id
3946 , p_budget_type_code => p_budget_type_code
3947 , p_calling_mode => 'BUDGET'
3948 , x_fck_req_flag => l_fck_req_flag
3949 , x_bdgt_intg_flag => l_bdgt_intg_flag
3950 , x_bdgt_ver_id => l_bdgt_ver_id
3951 , x_encum_type_id => l_encum_type_id
3952 , x_balance_type => l_balance_type
3953 , x_return_status => l_return_status
3954 , x_msg_data => l_msg_data
3955 , x_msg_count => l_msg_count
3956 );
3957
3958
3959 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
3960 THEN
3961 IF l_debug_mode = 'Y' THEN
3962 pa_debug.g_err_stage := 'Unexpected error in budget ctrl options' ;
3963 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
3964 END IF;
3965
3966 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3967
3968
3969 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
3970 THEN
3971 -- RAISE FND_API.G_EXC_ERROR;
3972 l_any_error_occurred_flag := 'Y';
3973
3974 END IF;
3975
3976
3977 IF (nvl(l_fck_req_flag,'N') = 'Y')
3978 THEN
3979 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3980 THEN
3981 pa_interface_utils_pub.map_new_amg_msg
3982 ( p_old_message_code => 'PA_BC_BGT_TYPE_IS_BAD_AMG'
3983 ,p_msg_attribute => 'CHANGE'
3984 ,p_resize_flag => 'N'
3985 ,p_msg_context => 'BUDG'
3986 ,p_attribute1 => l_amg_segment1
3987 ,p_attribute2 => ''
3988 ,p_attribute3 => p_budget_type_code
3989 ,p_attribute4 => ''
3990 ,p_attribute5 => '');
3991 END IF;
3992
3993 -- RAISE FND_API.G_EXC_ERROR;
3994 l_any_error_occurred_flag := 'Y';
3995 END IF;
3996
3997
3998 -- ----------------------------------------------------------------------
3999 END IF;--end of the if for bugetary controls
4000
4001
4002 -- mark_as_original defaults to YES ('Y') when this is the first time this budget is baselined
4003 -- otherwise it will default to NO ('N')
4004 IF p_mark_as_original IS NULL
4005 OR p_mark_as_original = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4006 OR UPPER(p_mark_as_original) NOT IN ('N','Y') THEN
4007
4008 IF( p_budget_type_code IS NOT NULL
4009 AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
4010
4011 OPEN l_baselined_csr( l_project_id
4012 ,p_budget_type_code);
4013
4014 FETCH l_baselined_csr INTO l_baselined_rec;
4015
4016 IF l_baselined_csr%NOTFOUND
4017 THEN
4018 l_mark_as_original := 'Y';
4019 ELSE
4020 l_mark_as_original := 'N';
4021 END IF;
4022
4023 CLOSE l_baselined_csr;
4024
4025 ELSE--Fin Plan Model . Get the baselined version details
4026
4027
4028 IF l_baselined_version_id IS NULL
4029 THEN
4030 l_mark_as_original := 'Y';
4031 ELSE
4032 l_mark_as_original := 'N';
4033 END IF;
4034
4035 END IF;
4036
4037 ELSE --Mark as original param is passed
4038 l_mark_as_original := UPPER(p_mark_as_original);
4039
4040 END IF;
4041 -- dbms_output.put_line('Done with mark as orig');
4042
4043 /* -- dbms_output.put_line('Mark_as_original = '||l_mark_as_original); */
4044
4045 -- get the budget version ID associated with this project / budget_type_code combination
4046
4047 IF( p_budget_type_code IS NOT NULL
4048 AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
4049
4050 OPEN l_budget_versions_csr ( l_project_id
4051 ,p_budget_type_code);
4052
4053 FETCH l_budget_versions_csr
4054 INTO l_budget_versions_rec;
4055
4056 IF l_budget_versions_csr%NOTFOUND
4057 THEN
4058 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4059 THEN
4060 pa_interface_utils_pub.map_new_amg_msg
4061 ( p_old_message_code => 'PA_NO_BUDGET_VERSION'
4062 ,p_msg_attribute => 'CHANGE'
4063 ,p_resize_flag => 'N'
4064 ,p_msg_context => 'BUDG'
4065 ,p_attribute1 => l_amg_segment1
4066 ,p_attribute2 => ''
4067 ,p_attribute3 => p_budget_type_code
4068 ,p_attribute4 => ''
4069 ,p_attribute5 => '');
4070 END IF;
4071
4072 CLOSE l_budget_versions_csr;
4073 RAISE FND_API.G_EXC_ERROR;
4074
4075 IF l_debug_mode = 'Y' THEN
4076 pa_debug.g_err_stage := 'Curr working version does not exist' ;
4077 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4078 END IF;
4079 l_any_error_occurred_flag := 'Y';
4080 ELSE
4081
4082 CLOSE l_budget_versions_csr;
4083
4084 END IF;
4085
4086 l_curr_working_version_id := l_budget_versions_rec.budget_version_id;
4087
4088 ELSE -- Fin Plan Model. Get the current working version info
4089
4090 pa_fin_plan_utils.Get_Curr_Working_Version_Info(
4091 p_project_id => l_project_id
4092 ,p_fin_plan_type_id => l_fin_plan_type_id
4093 ,p_version_type => l_version_type
4094 ,x_fp_options_id => l_CW_ver_options_id
4095 ,x_fin_plan_version_id => l_curr_working_version_id
4096 ,x_return_status => l_return_status
4097 ,x_msg_count => l_msg_count
4098 ,x_msg_data => l_msg_data );
4099
4100 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4101 IF l_debug_mode = 'Y' THEN
4102 pa_debug.g_err_stage := 'Unexpected error in Get_Baselined_Version_Info' ;
4103 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
4104 END IF;
4105 l_any_error_occurred_flag := 'Y';
4106 END IF;
4107
4108 IF l_curr_working_version_id IS NULL
4109 THEN
4110 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4111 THEN
4112 pa_interface_utils_pub.map_new_amg_msg
4113 ( p_old_message_code => 'PA_NO_BUDGET_VERSION'
4114 ,p_msg_attribute => 'CHANGE'
4115 ,p_resize_flag => 'N'
4116 ,p_msg_context => 'BUDG'
4117 ,p_attribute1 => l_amg_segment1
4118 ,p_attribute2 => ''
4119 ,p_attribute3 => p_budget_type_code
4120 ,p_attribute4 => ''
4121 ,p_attribute5 => '');
4122 END IF;
4123 -- Raising the error since its not possible to proceed if there is no
4124 -- Current working version
4125 RAISE FND_API.G_EXC_ERROR;
4126 l_any_error_occurred_flag := 'Y';
4127 IF l_debug_mode = 'Y' THEN
4128 pa_debug.g_err_stage := 'Curr working version does not exist' ;
4129 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4130 END IF;
4131
4132 END IF;
4133
4134 pa_fin_plan_utils.return_and_vldt_plan_prc_code
4135 (p_budget_version_id => l_curr_working_version_id
4136 ,x_final_plan_prc_code => l_final_plan_prc_code
4137 ,x_targ_request_id => l_targ_request_id
4138 ,x_return_status => l_return_status
4139 ,x_msg_count => l_msg_count
4140 ,x_msg_data => l_msg_data);
4141
4142 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4143 IF l_debug_mode = 'Y' THEN
4144 pa_debug.g_err_stage := 'Unexpected error in Get_Baselined_Version_Info' ;
4145 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
4146 END IF;
4147 l_any_error_occurred_flag := 'Y';
4148 END IF;
4149
4150
4151 END IF;
4152
4153 -- Call the api that performs the autobaseline checks
4154 -- Bug 3099706 : Skip the autobaseline checks if this API is called from
4155 -- PA_AGREEMENT_PUB.create_baselined_budget. This API will only be called
4156 -- in Autobaseline enabled AR plan type / budget type cases only.
4157 -- This check is valid in all other cases when a budget needs to be baselined.
4158
4159 -- dbms_output.put_line('Value of PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB = '||PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB);
4160
4161 IF (nvl(PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB,'N') = 'N') THEN
4162 -- dbms_output.put_line('about to call autobaseline checks API ');
4163
4164 pa_fin_plan_utils.perform_autobasline_checks
4165 ( p_budget_version_id => l_curr_working_version_id
4166 ,x_result => l_result
4167 ,x_return_status => p_return_status
4168 ,x_msg_count => p_msg_count
4169 ,x_msg_data => p_msg_data );
4170
4171 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4172 IF(l_debug_mode='Y') THEN
4173 pa_debug.g_err_stage := 'Auto baseline API falied';
4174 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
4175 END IF;
4176 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4177 END IF;
4178
4179
4180 IF l_result = 'F' THEN
4181 IF(l_debug_mode='Y') THEN
4182 pa_debug.g_err_stage := 'Auto baseline checks falied';
4183 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
4184 END IF;
4185 l_any_error_occurred_flag:='Y';
4186 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4187 ,p_msg_name => 'PA_FP_APP_REV_BL_VER_AB_PROJ'
4188 ,p_token1 => 'PROJECT'
4189 ,p_value1 => l_amg_segment1);
4190
4191 END IF;
4192 END IF; -- bug 3099706
4193
4194 IF (nvl(PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB,'N') = 'Y') THEN
4195 PA_FP_CONSTANTS_PKG.G_CALLED_FROM_AGREEMENT_PUB := 'N'; -- reset the value bug 3099706
4196 END IF;
4197 -- dbms_output.put_line('Got the CW version ' || l_curr_working_version_id);
4198
4199
4200 -- check for budget lines in pa_resource_assignments,
4201 -- we only permit submit/baseline action when there are budget lines
4202
4203 OPEN l_budget_lines_csr(l_curr_working_version_id);
4204
4205 FETCH l_budget_lines_csr
4206 INTO l_row_found;
4207
4208 IF l_budget_lines_csr%NOTFOUND
4209 THEN
4210 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4211 THEN
4212 pa_interface_utils_pub.map_new_amg_msg
4213 ( p_old_message_code => 'PA_NO_BUDGET_LINES'
4214 ,p_msg_attribute => 'CHANGE'
4215 ,p_resize_flag => 'N'
4216 ,p_msg_context => 'BUDG'
4217 ,p_attribute1 => l_amg_segment1
4218 ,p_attribute2 => ''
4219 ,p_attribute3 => p_budget_type_code
4220 ,p_attribute4 => ''
4221 ,p_attribute5 => '');
4222 END IF;
4223
4224 CLOSE l_budget_lines_csr;
4225 -- RAISE FND_API.G_EXC_ERROR;
4226 l_any_error_occurred_flag := 'Y';
4227 IF l_debug_mode = 'Y' THEN
4228 pa_debug.g_err_stage := 'Budget Lines do not exist for current working version' ;
4229 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4230 END IF;
4231
4232 ELSE
4233
4234 CLOSE l_budget_lines_csr;
4235
4236 END IF;
4237
4238
4239 -- dbms_output.put_line('done with BL Check');
4240
4241 -- verify budget (up to this date (sept 96) not implemented)
4242 --
4243 pa_budget_core.verify( x_budget_version_id => l_curr_working_version_id
4244 ,x_err_code => l_err_code
4245 ,x_err_stage => l_err_stage
4246 ,x_err_stack => l_err_stack );
4247
4248 IF l_err_code > 0
4249 THEN
4250
4251 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4252 THEN
4253
4254 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
4255 THEN
4256 pa_interface_utils_pub.map_new_amg_msg
4257 ( p_old_message_code => 'PA_VERIFY_FAILED'
4258 ,p_msg_attribute => 'CHANGE'
4259 ,p_resize_flag => 'N'
4260 ,p_msg_context => 'BUDG'
4261 ,p_attribute1 => l_amg_segment1
4262 ,p_attribute2 => ''
4263 ,p_attribute3 => p_budget_type_code
4264 ,p_attribute4 => ''
4265 ,p_attribute5 => '');
4266 ELSE
4267 pa_interface_utils_pub.map_new_amg_msg
4268 ( p_old_message_code => l_err_stage
4269 ,p_msg_attribute => 'CHANGE'
4270 ,p_resize_flag => 'N'
4271 ,p_msg_context => 'BUDG'
4272 ,p_attribute1 => l_amg_segment1
4273 ,p_attribute2 => ''
4274 ,p_attribute3 => p_budget_type_code
4275 ,p_attribute4 => ''
4276 ,p_attribute5 => '');
4277 END IF;
4278
4279 END IF;
4280
4281 -- RAISE FND_API.G_EXC_ERROR;
4282 l_any_error_occurred_flag := 'Y';
4283
4284 ELSIF l_err_code < 0
4285 THEN
4286
4287 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4288 THEN
4289
4290 FND_MSG_PUB.add_exc_msg
4291 ( p_pkg_name => 'PA_BUDGET_CORE'
4292 , p_procedure_name => 'VERIFY'
4293 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
4294
4295 END IF;
4296
4297 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4298
4299 END IF;
4300 -- dbms_output.put_line('About to verify budget rules');
4301
4302 --Verify Budget Rules should be called in budget model Only. In FinPlan model
4303 --The baseline api in fin plan pub inturn calls the verify budget rules
4304 IF p_budget_type_code IS NOT NULL
4305 AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
4306
4307 IF l_debug_mode = 'Y' THEN
4308 pa_debug.g_err_stage := 'About to verify the budget rules in budget model' ;
4309 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4310 END IF;
4311
4312
4313 -- ------------------------------------------------------------------------------------
4314 -- 29-JUL-97, jwhite
4315 -- Added SUBMISSION/BASELINE RULES and WORFLOW
4316 -- ------------------------------------------------------------------------------------
4317
4318 -- Retrieve Required IN-parameters for Verify_Budget_Rules Calls
4319
4320 OPEN l_budget_rules_csr(l_curr_working_version_id);
4321
4322 FETCH l_budget_rules_csr
4323 INTO l_resource_list_id
4324 , l_project_type_class_code;
4325
4326 IF ( l_budget_rules_csr%NOTFOUND)
4327 THEN
4328
4329 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4330 THEN
4331 pa_interface_utils_pub.map_new_amg_msg
4332 ( p_old_message_code => 'PA_NO_BUDGET_RULES_ATTR'
4333 ,p_msg_attribute => 'CHANGE'
4334 ,p_resize_flag => 'N'
4335 ,p_msg_context => 'BUDG'
4336 ,p_attribute1 => l_amg_segment1
4337 ,p_attribute2 => ''
4338 ,p_attribute3 => p_budget_type_code
4339 ,p_attribute4 => ''
4340 ,p_attribute5 => '');
4341 END IF;
4342
4343 CLOSE l_budget_rules_csr;
4344 -- RAISE FND_API.G_EXC_ERROR;
4345 l_any_error_occurred_flag := 'Y';
4346
4347 ELSE
4348
4349 CLOSE l_budget_rules_csr;
4350
4351 END IF;
4352
4353
4354 --
4355 -- SUBMISSION RULES -------------------------------------------------------------
4356 --
4357
4358 /* -- dbms_output.put_line('Verify Budget Rules - SUBMIT'); */
4359
4360
4361 PA_BUDGET_UTILS.VERIFY_BUDGET_RULES
4362 (p_draft_version_id => l_curr_working_version_id
4363 , p_mark_as_original => l_mark_as_original
4364 , p_event => 'SUBMIT'
4365 , p_project_id => l_project_id
4366 , p_budget_type_code => p_budget_type_code
4367 , p_resource_list_id => l_resource_list_id
4368 , p_project_type_class_code => l_project_type_class_code
4369 , p_created_by => l_user_id
4370 , p_calling_module => 'PAPMBUPB'
4371 , p_warnings_only_flag => l_warnings_only_flag
4372 , p_err_msg_count => l_err_msg_count
4373 , p_err_code => l_err_code
4374 , p_err_stage => l_err_stage
4375 , p_err_stack => l_err_stack
4376 );
4377
4378 -- 11-SEP-97, jwhite: Warnings-OK Concept -----------------------------------
4379 --
4380 IF (l_err_msg_count > 0)
4381 THEN
4382 IF (l_warnings_only_flag = 'Y')
4383 THEN
4384 p_return_status := 'W';
4385 ELSE
4386 -- RAISE FND_API.G_EXC_ERROR;
4387 l_any_error_occurred_flag := 'Y';
4388 END IF;
4389 -- dbms_output.put_line('Count after verify the baseline rules is >0');
4390
4391 END IF;
4392 --
4393
4394 -- LOCK DRAFT BUDGET VERSION Since Primary Verification Finished
4395
4396 OPEN l_lock_budget_csr(l_curr_working_version_id);
4397 CLOSE l_lock_budget_csr;
4398
4399 -- dbms_output.put_line('About to verify the baseline rules');
4400 --
4401 -- BASELINE RULES -------------------------------------------------------------
4402 --
4403
4404 PA_BUDGET_UTILS.VERIFY_BUDGET_RULES
4405 (p_draft_version_id => l_curr_working_version_id
4406 , p_mark_as_original => l_mark_as_original
4407 , p_event => 'BASELINE'
4408 , p_project_id => l_project_id
4409 , p_budget_type_code => p_budget_type_code
4410 , p_resource_list_id => l_resource_list_id
4411 , p_project_type_class_code => l_project_type_class_code
4412 , p_created_by => l_user_id
4413 , p_calling_module => 'PAPMBUPB'
4414 , p_warnings_only_flag => l_warnings_only_flag
4415 , p_err_msg_count => l_err_msg_count
4416 , p_err_code => l_err_code
4417 , p_err_stage => l_err_stage
4418 , p_err_stack => l_err_stack
4419 );
4420
4421 -- 11-SEP-97, jwhite: Warnings-OK Concept -----------------------------------
4422 --
4423 IF (l_err_msg_count > 0)
4424 THEN
4425 IF (l_warnings_only_flag = 'Y')
4426 THEN
4427 p_return_status := 'W';
4428 ELSE
4429 -- RAISE FND_API.G_EXC_ERROR;
4430 l_any_error_occurred_flag := 'Y';
4431 END IF;
4432 END IF;
4433
4434 ELSE -- Verify budget rules will be called by the baseline api in fin plan model.
4435 -- Lock the version in the finplan model
4436
4437 --Get the record version number of the current working version
4438 l_CW_record_version_number :=pa_fin_plan_utils.Retrieve_Record_Version_Number(l_curr_working_version_id);
4439
4440 -- Lock the current working version
4441
4442 pa_fin_plan_pvt.lock_unlock_version
4443 (p_budget_version_id => l_curr_working_version_id,
4444 p_record_version_number => l_CW_record_version_number,
4445 p_action => 'L',
4446 p_user_id => l_user_id,
4447 p_person_id => NULL,
4448 x_return_status => p_return_status,
4449 x_msg_count => p_msg_count,
4450 x_msg_data => p_msg_data) ;
4451
4452 IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
4453
4454 IF l_debug_mode = 'Y' THEN
4455 pa_debug.g_err_stage := 'Error executing lock unlock version';
4456 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4457 END IF;
4458 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4459
4460 END IF;
4461 -- dbms_output.put_line('The no of messages in the stack 2 '||FND_MSG_PUB.count_msg);
4462
4463 END IF;--If for buget model check
4464
4465 -- dbms_output.put_line('Starting with workflow l_err_code '||l_err_code);
4466 --
4467
4468 --
4469 -- ENABLE WORKFLOW? ---------------------------------------------------
4470 --
4471
4472 /* -- dbms_output.put_line('Call BUDGET_WF_IS_USED'); */
4473
4474 IF p_budget_type_code IS NOT NULL
4475 AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4476 THEN
4477
4478 PA_BUDGET_WF.Budget_Wf_Is_Used
4479 ( p_draft_version_id => l_curr_working_version_id
4480 , p_project_id => l_project_id
4481 , p_budget_type_code => p_budget_type_code
4482 , p_pm_product_code => p_pm_product_code
4483 , p_result => l_workflow_is_used
4484 , p_err_code => l_err_code
4485 , p_err_stage => l_err_stage
4486 , p_err_stack => l_err_stack
4487 );
4488
4489 ELSE --Fin Plan Model. Pass the version type and plan type id
4490
4491 PA_BUDGET_WF.Budget_Wf_Is_Used
4492 ( p_draft_version_id => l_curr_working_version_id
4493 , p_project_id => l_project_id
4494 , p_budget_type_code => NULL
4495 , p_pm_product_code => p_pm_product_code
4496 , p_result => l_workflow_is_used
4497 , p_err_code => l_err_code
4498 , p_err_stage => l_err_stage
4499 , p_err_stack => l_err_stack
4500 , p_fin_plan_type_id => l_fin_plan_type_id
4501 , p_version_type => l_version_type
4502 );
4503
4504 END IF;
4505
4506 -- dbms_output.put_line('l_err_code after is WD '||l_err_code);
4507 IF (l_err_code > 0)
4508 THEN
4509 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4510 THEN
4511 FND_MESSAGE.SET_NAME('PA','PA_WF_CLIENT_EXTN');
4512 FND_MESSAGE.SET_TOKEN('EXTNAME', 'PA_BUDGET_WF.BUDGET_WF_IS_USED');
4513 FND_MESSAGE.SET_TOKEN('ERRCODE',l_err_code);
4514 FND_MESSAGE.SET_TOKEN('ERRMSG', l_err_stage);
4515 FND_MSG_PUB.add;
4516 END IF;
4517
4518 -- RAISE FND_API.G_EXC_ERROR;
4519 l_any_error_occurred_flag := 'Y';
4520 ELSIF (l_err_code < 0)
4521 THEN
4522 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4523 THEN
4524 FND_MSG_PUB.add_exc_msg
4525 ( p_pkg_name => 'PA_BUDGET_WF'
4526 , p_procedure_name => 'BUDGET_WF_IS_USED'
4527 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
4528 END IF;
4529
4530 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4531 END IF;
4532
4533 -- Stop further processing if any errors are reported
4534 -- dbms_output.put_line('l_any_error_occurred_flag is '||l_any_error_occurred_flag);
4535 IF(l_any_error_occurred_flag='Y') THEN
4536 IF(l_debug_mode='Y') THEN
4537 pa_debug.g_err_stage := 'About to display all the messages';
4538 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
4539 END IF;
4540 -- dbms_output.put_line('Displaying all messages');
4541 l_return_status := FND_API.G_RET_STS_ERROR;
4542 l_any_error_occurred_flag := 'Y';
4543 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4544 END IF;
4545 -- dbms_output.put_line('Starting with workflow = T');
4546
4547 IF (l_workflow_is_used = 'T' ) THEN
4548
4549 -- ENABLE Workflow !!! -------------------------------------------------------------
4550
4551 -- when the client extension returns 'T',
4552 -- the baseline action will be skipped here, since the baselining is done later
4553 -- by the baseliner as part of the workflow process.
4554
4555 /* -- dbms_output.put_line('WORKFLOW USED...Update Draft to Submitted, IN_ROUTE'); */
4556
4557 UPDATE pa_budget_versions
4558 SET budget_status_code = 'S', WF_status_code = 'IN_ROUTE'
4559 WHERE budget_version_id = l_curr_working_version_id;
4560
4561 /* -- dbms_output.put_line('WORKFLOW USED...START_BUDGET_WF API'); */
4562
4563 PA_BUDGET_WF.Start_Budget_Wf
4564 (p_draft_version_id => l_curr_working_version_id
4565 , p_project_id => l_project_id
4566 , p_budget_type_code => p_budget_type_code
4567 , p_mark_as_original => l_mark_as_original
4568 , p_err_code => l_err_code
4569 , p_err_stage => l_err_stage
4570 , p_err_stack => l_err_stack
4571 );
4572
4573 IF (l_err_code > 0)
4574 THEN
4575 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4576 THEN
4577 FND_MESSAGE.SET_NAME('PA','PA_WF_CLIENT_EXTN');
4578 FND_MESSAGE.SET_TOKEN('EXTNAME', 'PA_BUDGET_WF.START_BUDGET_WF');
4579 FND_MESSAGE.SET_TOKEN('ERRCODE',l_err_code);
4580 FND_MESSAGE.SET_TOKEN('ERRMSG', l_err_stage);
4581 FND_MSG_PUB.add;
4582 END IF;
4583
4584 RAISE FND_API.G_EXC_ERROR;
4585
4586 ELSIF (l_err_code < 0)
4587 THEN
4588 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4589 THEN
4590 FND_MSG_PUB.add_exc_msg
4591 ( p_pkg_name => 'PA_BUDGET_WF'
4592 , p_procedure_name => 'START_BUDGET_WF'
4593 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
4594 END IF;
4595
4596 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4597 END IF;
4598
4599
4600
4601 p_workflow_started := 'Y';
4602
4603 -- NOTE: A commit is required to actually start/activate the workflow instance opened
4604 -- by the previous Start_Budget_WF procedure.
4605
4606
4607 IF FND_API.TO_BOOLEAN( p_commit )
4608 THEN
4609 COMMIT;
4610 END IF;
4611
4612 RETURN;
4613 ELSE
4614
4615 -- STRAIGHT BASELINE, NO Workflow
4616
4617
4618 UPDATE pa_budget_versions
4619 SET budget_status_code = 'S', WF_status_code = NULL
4620 WHERE budget_version_id = l_curr_working_version_id;
4621
4622
4623 END IF;
4624
4625 IF l_debug_mode = 'Y' THEN
4626 pa_debug.g_err_stage := 'Budget rules verified' ;
4627 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4628 END IF;
4629
4630 -- -------------------------------------------------------------------------------------
4631
4632 -- calling private API 'BASELINE'
4633 -- Hardcode p_verify_budget_rules to 'N' becuase verify_budget_rules already called.
4634
4635 /* -- dbms_output.put_line('Call PA_BUDGET_CORE.BASELINE'); */
4636
4637
4638
4639
4640 IF p_budget_type_code IS NOT NULL
4641 AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
4642
4643 IF l_debug_mode = 'Y' THEN
4644 pa_debug.g_err_stage := 'About to baseline the budget ' ;
4645 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4646 END IF;
4647
4648 -- dbms_output.put_line('About to call the baseline api in budget core');
4649 pa_budget_core.baseline ( x_draft_version_id => l_curr_working_version_id
4650 ,x_mark_as_original => l_mark_as_original
4651 ,x_verify_budget_rules => 'N'
4652 ,x_err_code => l_err_code
4653 ,x_err_stage => l_err_stage
4654 ,x_err_stack => l_err_stack );
4655
4656
4657
4658 IF l_err_code > 0
4659 THEN
4660
4661 /* -- dbms_output.put_line('Err_code: '||l_err_code); */
4662 /* -- dbms_output.put_line('Err_stage: '||l_err_stage); */
4663 /* -- dbms_output.put_line('Err_stack: '||l_err_stack); */
4664
4665 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4666 THEN
4667
4668 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
4669 THEN
4670 pa_interface_utils_pub.map_new_amg_msg
4671 ( p_old_message_code => 'PA_BASELINE_FAILED'
4672 ,p_msg_attribute => 'CHANGE'
4673 ,p_resize_flag => 'N'
4674 ,p_msg_context => 'BUDG'
4675 ,p_attribute1 => l_amg_segment1
4676 ,p_attribute2 => ''
4677 ,p_attribute3 => p_budget_type_code
4678 ,p_attribute4 => ''
4679 ,p_attribute5 => '');
4680 ELSE
4681 pa_interface_utils_pub.map_new_amg_msg
4682 ( p_old_message_code => l_err_stage
4683 ,p_msg_attribute => 'CHANGE'
4684 ,p_resize_flag => 'N'
4685 ,p_msg_context => 'BUDG'
4686 ,p_attribute1 => l_amg_segment1
4687 ,p_attribute2 => ''
4688 ,p_attribute3 => p_budget_type_code
4689 ,p_attribute4 => ''
4690 ,p_attribute5 => '');
4691 END IF;
4692
4693 END IF;
4694
4695 RAISE FND_API.G_EXC_ERROR;
4696
4697 ELSIF l_err_code < 0
4698 THEN
4699
4700 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4701 THEN
4702
4703 /* -- dbms_output.put_line('Err_code: '||l_err_code); */
4704 /* -- dbms_output.put_line('Err_stage: '||l_err_stage); */
4705 /* -- dbms_output.put_line('Err_stack: '||l_err_stack); */
4706
4707 FND_MSG_PUB.add_exc_msg
4708 ( p_pkg_name => 'PA_BUDGET_CORE'
4709 , p_procedure_name => 'BASELINE'
4710 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
4711
4712 END IF;
4713
4714 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4715
4716 END IF;
4717
4718 -- after calling BASELINE, set the budget_status_code back to 'W' (Working)
4719 -- the concept of submitting budget is not available in the public API's!
4720
4721 UPDATE pa_budget_versions
4722 SET budget_status_code = 'W'
4723 WHERE budget_version_id = l_curr_working_version_id;
4724
4725 ELSE--Fin Plan Model. Call the baseline api in fin plan pub
4726
4727 --Get the record version number of the current baselined version
4728 IF l_baselined_version_id IS NOT NULL THEN
4729 --Get the record version number
4730 l_CB_record_version_number :=pa_fin_plan_utils.Retrieve_Record_Version_Number(l_baselined_version_id);
4731 ELSE
4732 l_CB_record_version_number:=NULL;
4733 END IF;
4734
4735 --Get the record version number of the current working version (As it will be incremented by the lock_unlock_version)
4736 l_CW_record_version_number :=pa_fin_plan_utils.Retrieve_Record_Version_Number(l_curr_working_version_id);
4737
4738 IF l_debug_mode = 'Y' THEN
4739 pa_debug.g_err_stage := 'About to baseline the finplan ' ;
4740 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4741 END IF;
4742
4743 -- dbms_output.put_line('About to call baseline api');
4744
4745 IF (l_mark_as_original = 'Y') THEN
4746
4747 -- Fetch the details of original baseline version
4748 -- so that they can be used to set its orginal flag
4749
4750 OPEN l_orig_baselined_ver_csr(l_project_id,
4751 l_fin_plan_type_id,
4752 l_version_type);
4753 FETCH l_orig_baselined_ver_csr INTO l_orig_baselined_ver_rec;
4754 CLOSE l_orig_baselined_ver_csr;
4755
4756 END IF;
4757
4758 pa_fin_plan_pub.Baseline
4759 ( p_project_id => l_project_id
4760 ,p_budget_version_id => l_curr_working_version_id
4761 ,p_record_version_number => l_CW_record_version_number
4762 ,p_orig_budget_version_id => l_baselined_version_id
4763 ,p_orig_record_version_number => l_CB_record_version_number
4764 ,x_fc_version_created_flag => l_fc_version_created_flag
4765 ,x_return_status => l_return_status
4766 ,x_msg_count => l_msg_count
4767 ,x_msg_data => l_msg_data );
4768
4769 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4770
4771 IF l_debug_mode = 'Y' THEN
4772 pa_debug.g_err_stage:= 'Error in fin plan pub baseline ';
4773 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
4774 END IF;
4775 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4776
4777 END IF;
4778
4779 -- dbms_output.put_line('About to call mark as original api');
4780
4781 --If the mark as original parameter is Y then call the api that sets the just now baselined version
4782 --as the orginal version
4783 IF (l_mark_as_original = 'Y') THEN
4784
4785 IF l_debug_mode = 'Y' THEN
4786 pa_debug.g_err_stage := 'About to mark the created version as original baselined ' ;
4787 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4788 END IF;
4789
4790 -- Fetch the details current baselined version
4791 pa_fin_plan_utils.Get_Baselined_Version_Info(
4792 p_project_id => l_project_id
4793 ,p_fin_plan_type_id => l_fin_plan_type_id
4794 ,p_version_type => l_version_type
4795 ,x_fp_options_id => l_baselined_Ver_options_id
4796 ,x_fin_plan_version_id => l_baselined_version_id
4797 ,x_return_status => l_return_status
4798 ,x_msg_count => l_msg_count
4799 ,x_msg_data => l_msg_data);
4800
4801 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
4802 THEN
4803 -- RAISE FND_API.G_EXC_ERROR;
4804 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4805 END IF;
4806
4807 l_CB_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_baselined_version_id);
4808
4809 IF l_orig_baselined_ver_rec.budget_version_id IS NOT NULL THEN
4810
4811 l_orig_baselined_ver_rec.record_version_number:=pa_fin_plan_utils.Retrieve_Record_Version_Number
4812 (l_orig_baselined_ver_rec.budget_version_id);
4813
4814 END IF;
4815
4816 -- dbms_output.put_line('The verid to be marked as orig is '||l_baselined_version_id);
4817 -- dbms_output.put_line('The orig verid to be marked as orig is '||l_orig_baselined_ver_rec.budget_version_id);
4818
4819 pa_fin_plan_pub.Mark_As_Original
4820 ( p_project_id => l_project_id
4821 ,p_budget_version_id => l_baselined_version_id
4822 ,p_record_version_number => l_Cb_record_version_number
4823 ,p_orig_budget_version_id => l_orig_baselined_ver_rec.budget_version_id
4824 ,p_orig_record_version_number => l_orig_baselined_ver_rec.record_version_number
4825 ,x_return_status => l_return_status
4826 ,x_msg_count => l_msg_count
4827 ,x_msg_data => l_msg_data );
4828
4829 IF l_return_status <> FND_API.G_RET_STS_SUCCESS OR
4830 l_msg_count <> 0THEN
4831
4832 IF l_debug_mode = 'Y' THEN
4833 pa_debug.g_err_stage:= 'Error while marking the newly created version as the original version ';
4834 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level5);
4835 END IF;
4836 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4837
4838 END IF;
4839
4840 END IF;
4841
4842 --Bug 6453987 - skkoppul - Unlocking the working version
4843
4844 pa_fin_plan_pvt.lock_unlock_version
4845 (p_budget_version_id => l_curr_working_version_id,
4846 p_record_version_number => l_CW_record_version_number,
4847 p_action => 'U',
4848 p_user_id => l_user_id,
4849 p_person_id => NULL,
4850 x_return_status => p_return_status,
4851 x_msg_count => p_msg_count,
4852 x_msg_data => p_msg_data) ;
4853
4854 IF p_return_status<>FND_API.G_RET_STS_SUCCESS THEN
4855
4856 IF l_debug_mode = 'Y' THEN
4857 pa_debug.g_err_stage := 'Error executing lock unlock version';
4858 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4859 END IF;
4860 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4861
4862 END IF;
4863
4864 --End changes bug 6453987 - skkoppul
4865
4866
4867 END IF;-- IF p_budget_type_code IS NOT NULL
4868
4869
4870 IF FND_API.TO_BOOLEAN( p_commit )
4871 THEN
4872 COMMIT;
4873 END IF;
4874
4875 IF l_debug_mode = 'Y' THEN
4876 pa_debug.g_err_stage:= 'Leaving baseline budget';
4877 pa_debug.write('baseline_budget ' || g_module_name,pa_debug.g_err_stage,l_debug_level3);
4878 END IF;
4879
4880 pa_debug.reset_curr_function;
4881
4882
4883 EXCEPTION
4884
4885 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
4886 ROLLBACK TO baseline_budget_pub;
4887
4888 IF p_return_status IS NULL OR
4889 p_return_status = FND_API.G_RET_STS_SUCCESS THEN
4890 p_return_status := FND_API.G_RET_STS_ERROR;
4891 END IF;
4892 l_msg_count := FND_MSG_PUB.count_msg;
4893 IF l_msg_count = 1 THEN
4894 PA_INTERFACE_UTILS_PUB.get_messages
4895 (p_encoded => FND_API.G_TRUE,
4896 p_msg_index => 1,
4897 p_msg_count => l_msg_count,
4898 p_msg_data => l_msg_data,
4899 p_data => l_data,
4900 p_msg_index_out => l_msg_index_out);
4901
4902 p_msg_data := l_data;
4903 p_msg_count := l_msg_count;
4904 ELSE
4905 p_msg_count := l_msg_count;
4906 END IF;
4907 pa_debug.reset_curr_function;
4908
4909 RETURN;
4910
4911 WHEN FND_API.G_EXC_ERROR
4912 THEN
4913
4914
4915 ROLLBACK TO baseline_budget_pub;
4916
4917 p_return_status := FND_API.G_RET_STS_ERROR;
4918
4919 FND_MSG_PUB.Count_And_Get
4920 ( p_count => p_msg_count ,
4921 p_data => p_msg_data );
4922
4923 pa_debug.reset_curr_function;
4924
4925 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
4926 THEN
4927
4928
4929 ROLLBACK TO baseline_budget_pub;
4930
4931 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4932
4933 FND_MSG_PUB.Count_And_Get
4934 ( p_count => p_msg_count ,
4935 p_data => p_msg_data );
4936
4937 pa_debug.reset_curr_function;
4938
4939 WHEN ROW_ALREADY_LOCKED
4940 THEN
4941
4942 ROLLBACK TO baseline_budget_pub;
4943
4944 p_return_status := FND_API.G_RET_STS_ERROR ;
4945
4946 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4947 THEN
4948 FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
4949 FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
4950 FND_MESSAGE.SET_TOKEN('TASK', '');
4951 FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', p_budget_type_code);
4952 FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
4953 FND_MESSAGE.SET_TOKEN('START_DATE', '');
4954 FND_MESSAGE.SET_TOKEN('ENTITY', 'BUDGET_VERSIONS');
4955 FND_MSG_PUB.Add;
4956 END IF;
4957
4958 FND_MSG_PUB.Count_And_Get
4959 (p_count => p_msg_count
4960 , p_data => p_msg_data
4961 );
4962 pa_debug.reset_curr_function;
4963
4964
4965 WHEN OTHERS
4966 THEN
4967
4968
4969 ROLLBACK TO baseline_budget_pub;
4970
4971 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4972
4973 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4974 THEN
4975 FND_MSG_PUB.add_exc_msg
4976 ( p_pkg_name => G_PKG_NAME
4977 , p_procedure_name => l_api_name );
4978
4979 END IF;
4980
4981 FND_MSG_PUB.Count_And_Get
4982 ( p_count => p_msg_count ,
4983 p_data => p_msg_data );
4984
4985 pa_debug.reset_curr_function;
4986
4987
4988 END baseline_budget;
4989
4990
4991 ----------------------------------------------------------------------------------------
4992 --Name: add_budget_line
4993 --Type: Procedure
4994 --Description: This procedure can be used to add a budgetline to an
4995 -- existing WORKING budget.
4996 --
4997 --Called subprograms:
4998 -- pa_budget_pvt.insert_budget_line
4999 -- pa_budget_lines_v_pkg.check_overlapping_dates
5000 -- PA_BUDGET_UTILS.summerize_project_totals
5001 --
5002 --
5003 --
5004 --History:
5005 -- 01-OCT-1996 L. de Werker Created
5006 -- 19-NOV-1996 L. de Werker Changed to use pa_budget_pvt.insert_budget_line
5007 -- 28-NOV-1996 L. de Werker Add 16 parameters for descriptive flexfields
5008 -- 26-APR-2005 Ritesh Shukla Bug 4224464: FP.M Changes - Did changes in
5009 -- add_budget_line for FP.M FinPlan model.
5010
5011 PROCEDURE Add_Budget_Line
5012 ( p_api_version_number IN NUMBER
5013 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
5014 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
5015 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5016 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5017 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5018 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5019 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5020 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5021 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5022 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5023 ,p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5024 ,p_resource_alias IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5025 ,p_resource_list_member_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5026 ,p_budget_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5027 ,p_budget_end_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5028 ,p_period_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5029 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5030 ,p_raw_cost IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5031 ,p_burdened_cost IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5032 ,p_revenue IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5033 ,p_quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5034 ,p_pm_budget_line_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5035 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5036 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5037 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5038 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5039 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5040 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5041 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5042 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5043 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5044 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5045 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5046 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5047 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5048 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5049 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5050 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5051 --Parameters added for FP.M
5052 ,p_fin_plan_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5053 ,p_fin_plan_type_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5054 ,p_version_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5055 ,p_version_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5056 ,p_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5057 ,p_change_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
5058
5059 IS
5060
5061
5062 l_api_name CONSTANT VARCHAR2(30) := 'Add_Budget_Line';
5063 l_err_code NUMBER;
5064 l_err_stage VARCHAR2(120);
5065 l_err_stack VARCHAR2(630);
5066
5067 l_project_id NUMBER := p_pa_project_id;
5068 l_budget_type_code pa_budget_types.budget_type_code%TYPE := p_budget_type_code;
5069 l_fin_plan_type_id NUMBER := p_fin_plan_type_id;
5070 l_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE := p_fin_plan_type_name;
5071 l_version_type pa_budget_versions.version_type%TYPE := p_version_type;
5072 l_budget_version_id NUMBER;
5073 l_budget_entry_method_code pa_budget_entry_methods.budget_entry_method_code%TYPE;
5074 l_resource_list_id pa_resource_lists_all_bg.resource_list_id%TYPE;
5075 l_budget_amount_code pa_budget_types.budget_amount_code%type;
5076 l_entry_level_code pa_proj_fp_options.cost_fin_plan_level_code%TYPE;
5077 l_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE;
5078 l_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
5079 l_categorization_code pa_budget_entry_methods.categorization_code%TYPE;
5080 l_record_version_number pa_budget_versions.record_version_number%TYPE;
5081
5082 l_resource_name VARCHAR2(80); --bug 3711693
5083
5084 l_budget_lines_in budget_line_in_tbl_type;
5085 l_budget_lines_out_tbl budget_line_out_tbl_type;
5086 l_mfc_cost_type_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5087 l_etc_method_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
5088 l_spread_curve_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5089
5090 l_finplan_lines_tab pa_fin_plan_pvt.budget_lines_tab;
5091 l_version_info_rec pa_fp_gen_amount_utils.fp_cols;
5092
5093 --Following parameters are needed for amounts check
5094 l_amount_set_id pa_proj_fp_options.all_amount_set_id%TYPE;
5095 lx_raw_cost_flag VARCHAR2(1) := NULL;
5096 lx_burdened_cost_flag VARCHAR2(1) := NULL;
5097 lx_revenue_flag VARCHAR2(1) := NULL;
5098 lx_cost_qty_flag VARCHAR2(1) := NULL;
5099 lx_revenue_qty_flag VARCHAR2(1) := NULL;
5100 lx_all_qty_flag VARCHAR2(1) := NULL;
5101 l_bill_rate_flag pa_fin_plan_amount_sets.bill_rate_flag%type;
5102 l_cost_rate_flag pa_fin_plan_amount_sets.cost_rate_flag%type;
5103 l_burden_rate_flag pa_fin_plan_amount_sets.burden_rate_flag%type;
5104 l_allow_qty_flag VARCHAR2(1);
5105
5106 l_msg_count NUMBER := 0;
5107 l_msg_data VARCHAR2(2000);
5108 l_function_allowed VARCHAR2(1);
5109 l_module_name VARCHAR2(80);
5110 l_data VARCHAR2(2000);
5111 l_msg_index_out NUMBER;
5112
5113 l_amg_project_number pa_projects_all.segment1%TYPE;
5114 l_amg_task_number VARCHAR2(50);
5115
5116 --debug variables
5117 l_debug_mode VARCHAR2(1);
5118 l_debug_level2 CONSTANT NUMBER := 2;
5119 l_debug_level3 CONSTANT NUMBER := 3;
5120 l_debug_level4 CONSTANT NUMBER := 4;
5121 l_debug_level5 CONSTANT NUMBER := 5;
5122 --Added for bug 6408139 to pass G_PA_MISS_CHAR
5123 l_pa_miss_char varchar2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
5124
5125
5126 BEGIN
5127
5128
5129 --Standard begin of API savepoint
5130
5131 SAVEPOINT add_budget_line_pub;
5132
5133 p_msg_count := 0;
5134 p_return_status := FND_API.G_RET_STS_SUCCESS;
5135 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
5136 l_module_name := g_module_name || ':Add_Budget_Line';
5137
5138 IF ( l_debug_mode = 'Y' )
5139 THEN
5140 pa_debug.set_curr_function( p_function => 'Add_Budget_Line',
5141 p_debug_mode => l_debug_mode );
5142 END IF;
5143
5144 IF ( l_debug_mode = 'Y' )
5145 THEN
5146 pa_debug.g_err_stage:='Entering ' || l_api_name;
5147 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5148 END IF;
5149
5150 --Initialize the message table if requested.
5151 IF FND_API.TO_BOOLEAN( p_init_msg_list )
5152 THEN
5153 FND_MSG_PUB.initialize;
5154 END IF;
5155
5156 --Set API return status to success
5157 p_return_status := FND_API.G_RET_STS_SUCCESS;
5158
5159 --Call PA_BUDGET_PVT.validate_header_info to do the necessary
5160 --header level validations
5161 PA_BUDGET_PVT.validate_header_info
5162 ( p_api_version_number => p_api_version_number
5163 ,p_api_name => l_api_name
5164 ,p_init_msg_list => p_init_msg_list
5165 ,px_pa_project_id => l_project_id
5166 ,p_pm_project_reference => p_pm_project_reference
5167 ,p_pm_product_code => p_pm_product_code
5168 ,px_budget_type_code => l_budget_type_code
5169 ,px_fin_plan_type_id => l_fin_plan_type_id
5170 ,px_fin_plan_type_name => l_fin_plan_type_name
5171 ,px_version_type => l_version_type
5172 ,p_budget_version_number => p_version_number
5173 ,p_change_reason_code => NULL
5174 ,p_function_name => 'PA_PM_ADD_BUDGET_LINE'
5175 ,x_budget_entry_method_code => l_budget_entry_method_code
5176 ,x_resource_list_id => l_resource_list_id
5177 ,x_budget_version_id => l_budget_version_id
5178 ,x_fin_plan_level_code => l_entry_level_code
5179 ,x_time_phased_code => l_time_phased_code
5180 ,x_plan_in_multi_curr_flag => l_multi_curr_flag
5181 ,x_budget_amount_code => l_budget_amount_code
5182 ,x_categorization_code => l_categorization_code
5183 ,x_project_number => l_amg_project_number
5184 /* Plan Amount Entry flags introduced by bug 6408139 */
5185 /*Passing all as G_PA_MISS_CHAR since validations not required*/
5186 ,px_raw_cost_flag => l_pa_miss_char
5187 ,px_burdened_cost_flag => l_pa_miss_char
5188 ,px_revenue_flag => l_pa_miss_char
5189 ,px_cost_qty_flag => l_pa_miss_char
5190 ,px_revenue_qty_flag => l_pa_miss_char
5191 ,px_all_qty_flag => l_pa_miss_char
5192 ,px_bill_rate_flag => l_pa_miss_char
5193 ,px_cost_rate_flag => l_pa_miss_char
5194 ,px_burden_rate_flag => l_pa_miss_char
5195 /* Plan Amount Entry flags introduced by bug 6408139 */
5196 ,x_msg_count => p_msg_count
5197 ,x_msg_data => p_msg_data
5198 ,x_return_status => p_return_status );
5199
5200 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5201 IF(l_debug_mode='Y') THEN
5202 pa_debug.g_err_stage := 'validate header info API falied';
5203 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5204 END IF;
5205 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5206 END IF;
5207
5208
5209 --Get Task number for AMG Messages
5210
5211 IF p_pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5212 l_budget_lines_in(1).pa_task_id := NULL;
5213 ELSE
5214 l_budget_lines_in(1).pa_task_id := p_pa_task_id;
5215 END IF;
5216
5217 IF p_pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5218 l_budget_lines_in(1).pm_task_reference := NULL;
5219 ELSE
5220 l_budget_lines_in(1).pm_task_reference := p_pm_task_reference;
5221 END IF;
5222
5223 l_amg_task_number := PA_INTERFACE_UTILS_PUB.get_task_number_amg
5224 (p_task_number=> ''
5225 ,p_task_reference => l_budget_lines_in(1).pm_task_reference
5226 ,p_task_id => l_budget_lines_in(1).pa_task_id);
5227
5228
5229 --Insert budget line for old FORMS based Budgets Model
5230 IF l_budget_type_code IS NOT NULL
5231 THEN
5232
5233 --Insert BUDGET LINES
5234 PA_BUDGET_PVT.insert_budget_line
5235 ( p_return_status => p_return_status
5236 ,p_pa_project_id => l_project_id
5237 ,p_budget_type_code => l_budget_type_code
5238 ,p_pa_task_id => p_pa_task_id
5239 ,p_pm_task_reference => p_pm_task_reference
5240 ,p_resource_alias => p_resource_alias
5241 ,p_member_id => p_resource_list_member_id
5242 ,p_budget_start_date => p_budget_start_date
5243 ,p_budget_end_date => p_budget_end_date
5244 ,p_period_name => p_period_name
5245 ,p_description => p_description
5246 ,p_raw_cost => p_raw_cost
5247 ,p_burdened_cost => p_burdened_cost
5248 ,p_revenue => p_revenue
5249 ,p_quantity => p_quantity
5250 ,p_pm_product_code => p_pm_product_code
5251 ,p_pm_budget_line_reference => p_pm_budget_line_reference
5252 ,p_resource_list_id => l_resource_list_id
5253 ,p_attribute_category => p_attribute_category
5254 ,p_attribute1 => p_attribute1
5255 ,p_attribute2 => p_attribute2
5256 ,p_attribute3 => p_attribute3
5257 ,p_attribute4 => p_attribute4
5258 ,p_attribute5 => p_attribute5
5259 ,p_attribute6 => p_attribute6
5260 ,p_attribute7 => p_attribute7
5261 ,p_attribute8 => p_attribute8
5262 ,p_attribute9 => p_attribute9
5263 ,p_attribute10 => p_attribute10
5264 ,p_attribute11 => p_attribute11
5265 ,p_attribute12 => p_attribute12
5266 ,p_attribute13 => p_attribute13
5267 ,p_attribute14 => p_attribute14
5268 ,p_attribute15 => p_attribute15
5269 ,p_time_phased_type_code => l_time_phased_code
5270 ,p_entry_level_code => l_entry_level_code
5271 ,p_budget_amount_code => l_budget_amount_code
5272 ,p_budget_entry_method_code => l_budget_entry_method_code
5273 ,p_categorization_code => l_categorization_code
5274 ,p_budget_version_id => l_budget_version_id
5275 ,p_change_reason_code => p_change_reason_code);
5276
5277 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5278 THEN
5279 IF(l_debug_mode='Y') THEN
5280 pa_debug.g_err_stage := 'PA_BUDGET_PVT.insert_budget_line API falied - unexpected error';
5281 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5282 END IF;
5283 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5284
5285 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
5286 THEN
5287 IF(l_debug_mode='Y') THEN
5288 pa_debug.g_err_stage := 'PA_BUDGET_PVT.insert_budget_line API falied - expected error';
5289 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5290 END IF;
5291 RAISE FND_API.G_EXC_ERROR;
5292 END IF;
5293
5294
5295 --check for overlapping dates
5296 PA_BUDGET_LINES_V_PKG.check_overlapping_dates
5297 ( x_budget_version_id => l_budget_version_id --IN
5298 ,x_resource_name => l_resource_name --OUT
5299 ,x_err_code => l_err_code );
5300
5301 IF l_err_code > 0
5302 THEN
5303
5304 IF(l_debug_mode='Y') THEN
5305 pa_debug.g_err_stage := 'check_overlapping_dates API falied';
5306 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5307 END IF;
5308
5309 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5310 THEN
5311 FND_MESSAGE.SET_NAME('PA','PA_CHECK_DATES_FAILED');
5312 FND_MESSAGE.SET_TOKEN('Rname',l_resource_name);
5313
5314 FND_MSG_PUB.add;
5315 END IF;
5316
5317 RAISE FND_API.G_EXC_ERROR;
5318
5319 ELSIF l_err_code < 0
5320 THEN
5321
5322 IF(l_debug_mode='Y') THEN
5323 pa_debug.g_err_stage := 'check_overlapping_dates API falied';
5324 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5325 END IF;
5326
5327 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5328 THEN
5329 FND_MSG_PUB.add_exc_msg
5330 ( p_pkg_name => 'PA_BUDGET_LINES_V_PKG'
5331 , p_procedure_name => 'CHECK_OVERLAPPING_DATES'
5332 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
5333 END IF;
5334
5335 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5336
5337 END IF;
5338
5339
5340 --summarizing the totals in the table pa_budget_versions
5341 PA_BUDGET_UTILS.summerize_project_totals
5342 ( x_budget_version_id => l_budget_version_id
5343 , x_err_code => l_err_code
5344 , x_err_stage => l_err_stage
5345 , x_err_stack => l_err_stack );
5346
5347 IF l_err_code > 0 THEN
5348
5349 IF(l_debug_mode='Y') THEN
5350 pa_debug.g_err_stage := 'summerize_project_totals API falied';
5351 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5352 END IF;
5353
5354 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5355 THEN
5356 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
5357 THEN
5358 pa_interface_utils_pub.map_new_amg_msg
5359 ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
5360 ,p_msg_attribute => 'CHANGE'
5361 ,p_resize_flag => 'N'
5362 ,p_msg_context => 'BUDG'
5363 ,p_attribute1 => l_amg_project_number
5364 ,p_attribute2 => l_amg_task_number
5365 ,p_attribute3 => p_budget_type_code
5366 ,p_attribute4 => l_resource_name
5367 ,p_attribute5 => to_char(p_budget_start_date));
5368 ELSE
5369 pa_interface_utils_pub.map_new_amg_msg
5370 ( p_old_message_code => l_err_stage
5371 ,p_msg_attribute => 'CHANGE'
5372 ,p_resize_flag => 'N'
5373 ,p_msg_context => 'BUDG'
5374 ,p_attribute1 => l_amg_project_number
5375 ,p_attribute2 => l_amg_task_number
5376 ,p_attribute3 => p_budget_type_code
5377 ,p_attribute4 => l_resource_name
5378 ,p_attribute5 => to_char(p_budget_start_date));
5379 END IF;
5380 END IF;
5381
5382 RAISE FND_API.G_EXC_ERROR;
5383
5384 ELSIF l_err_code < 0 THEN
5385
5386 IF(l_debug_mode='Y') THEN
5387 pa_debug.g_err_stage := 'summerize_project_totals API falied';
5388 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5389 END IF;
5390
5391 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5392 THEN
5393 FND_MSG_PUB.add_exc_msg
5394 ( p_pkg_name => 'PA_BUDGET_UTILS'
5395 , p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
5396 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
5397 END IF;
5398
5399 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5400
5401 END IF;
5402
5403
5404 ELSE --insert budget line for new FinPlan model
5405
5406
5407 --Store the budget line data in budget line table
5408
5409 IF p_resource_alias = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5410 l_budget_lines_in(1).resource_alias := NULL;
5411 ELSE
5412 l_budget_lines_in(1).resource_alias := p_resource_alias;
5413 END IF;
5414
5415 IF p_resource_list_member_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5416 l_budget_lines_in(1).resource_list_member_id := NULL;
5417 ELSE
5418 l_budget_lines_in(1).resource_list_member_id := p_resource_list_member_id;
5419 END IF;
5420
5421 IF p_budget_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
5422 l_budget_lines_in(1).budget_start_date := NULL;
5423 ELSE
5424 l_budget_lines_in(1).budget_start_date := p_budget_start_date;
5425 END IF;
5426
5427 IF p_budget_end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
5428 l_budget_lines_in(1).budget_end_date := NULL;
5429 ELSE
5430 l_budget_lines_in(1).budget_end_date := p_budget_end_date;
5431 END IF;
5432
5433 IF p_period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5434 l_budget_lines_in(1).period_name := NULL;
5435 ELSE
5436 l_budget_lines_in(1).period_name := p_period_name;
5437 END IF;
5438
5439 IF p_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5440 l_budget_lines_in(1).description := NULL;
5441 ELSE
5442 l_budget_lines_in(1).description := p_description;
5443 END IF;
5444
5445 IF p_raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5446 l_budget_lines_in(1).raw_cost := NULL;
5447 ELSE
5448 l_budget_lines_in(1).raw_cost := p_raw_cost;
5449 END IF;
5450
5451 IF p_burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5452 l_budget_lines_in(1).burdened_cost := NULL;
5453 ELSE
5454 l_budget_lines_in(1).burdened_cost := p_burdened_cost;
5455 END IF;
5456
5457 IF p_revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5458 l_budget_lines_in(1).revenue := NULL;
5459 ELSE
5460 l_budget_lines_in(1).revenue := p_revenue;
5461 END IF;
5462
5463 IF p_quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5464 l_budget_lines_in(1).quantity := NULL;
5465 ELSE
5466 l_budget_lines_in(1).quantity := p_quantity;
5467 END IF;
5468
5469 IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5470 l_budget_lines_in(1).pm_product_code := NULL;
5471 ELSE
5472 l_budget_lines_in(1).pm_product_code := p_pm_product_code;
5473 END IF;
5474
5475 IF p_pm_budget_line_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5476 l_budget_lines_in(1).pm_budget_line_reference := NULL;
5477 ELSE
5478 l_budget_lines_in(1).pm_budget_line_reference := p_pm_budget_line_reference;
5479 END IF;
5480
5481 IF p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5482 l_budget_lines_in(1).attribute_category := NULL;
5483 ELSE
5484 l_budget_lines_in(1).attribute_category := p_attribute_category;
5485 END IF;
5486
5487 IF p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5488 l_budget_lines_in(1).attribute1 := NULL;
5489 ELSE
5490 l_budget_lines_in(1).attribute1 := p_attribute1;
5491 END IF;
5492
5493 IF p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5494 l_budget_lines_in(1).attribute2 := NULL;
5495 ELSE
5496 l_budget_lines_in(1).attribute2 := p_attribute2;
5497 END IF;
5498
5499 IF p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5500 l_budget_lines_in(1).attribute3 := NULL;
5501 ELSE
5502 l_budget_lines_in(1).attribute3 := p_attribute3;
5503 END IF;
5504
5505 IF p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5506 l_budget_lines_in(1).attribute4 := NULL;
5507 ELSE
5508 l_budget_lines_in(1).attribute4 := p_attribute4;
5509 END IF;
5510
5511 IF p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5512 l_budget_lines_in(1).attribute5 := NULL;
5513 ELSE
5514 l_budget_lines_in(1).attribute5 := p_attribute5;
5515 END IF;
5516
5517 IF p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5518 l_budget_lines_in(1).attribute6 := NULL;
5519 ELSE
5520 l_budget_lines_in(1).attribute6 := p_attribute6;
5521 END IF;
5522
5523 IF p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5524 l_budget_lines_in(1).attribute7 := NULL;
5525 ELSE
5526 l_budget_lines_in(1).attribute7 := p_attribute7;
5527 END IF;
5528
5529 IF p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5530 l_budget_lines_in(1).attribute8 := NULL;
5531 ELSE
5532 l_budget_lines_in(1).attribute8 := p_attribute8;
5533 END IF;
5534
5535 IF p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5536 l_budget_lines_in(1).attribute9 := NULL;
5537 ELSE
5538 l_budget_lines_in(1).attribute9 := p_attribute9;
5539 END IF;
5540
5541 IF p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5542 l_budget_lines_in(1).attribute10 := NULL;
5543 ELSE
5544 l_budget_lines_in(1).attribute10 := p_attribute10;
5545 END IF;
5546
5547 IF p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5548 l_budget_lines_in(1).attribute11 := NULL;
5549 ELSE
5550 l_budget_lines_in(1).attribute11 := p_attribute11;
5551 END IF;
5552
5553 IF p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5554 l_budget_lines_in(1).attribute12 := NULL;
5555 ELSE
5556 l_budget_lines_in(1).attribute12 := p_attribute12;
5557 END IF;
5558
5559 IF p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5560 l_budget_lines_in(1).attribute13 := NULL;
5561 ELSE
5562 l_budget_lines_in(1).attribute13 := p_attribute13;
5563 END IF;
5564
5565 IF p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5566 l_budget_lines_in(1).attribute14 := NULL;
5567 ELSE
5568 l_budget_lines_in(1).attribute14 := p_attribute14;
5569 END IF;
5570
5571 IF p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5572 l_budget_lines_in(1).attribute15 := NULL;
5573 ELSE
5574 l_budget_lines_in(1).attribute15 := p_attribute15;
5575 END IF;
5576
5577 IF p_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5578 l_budget_lines_in(1).txn_currency_code := NULL;
5579 ELSE
5580 l_budget_lines_in(1).txn_currency_code := p_currency_code;
5581 END IF;
5582
5583 IF p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
5584 l_budget_lines_in(1).change_reason_code := NULL;
5585 ELSE
5586 l_budget_lines_in(1).change_reason_code := p_change_reason_code;
5587 END IF;
5588
5589 --Since currency attributes are defaulted to G_MISS values in
5590 --PA_BUDGET_PUB.budget_line_in_rec_type so we have to explicitly
5591 --make them null
5592 l_budget_lines_in(1).projfunc_cost_rate_type := NULL;
5593 l_budget_lines_in(1).projfunc_cost_rate_date_type := NULL;
5594 l_budget_lines_in(1).projfunc_cost_rate_date := NULL;
5595 l_budget_lines_in(1).projfunc_cost_exchange_rate := NULL;
5596 l_budget_lines_in(1).projfunc_rev_rate_type := NULL;
5597 l_budget_lines_in(1).projfunc_rev_rate_date_type := NULL;
5598 l_budget_lines_in(1).projfunc_rev_rate_date := NULL;
5599 l_budget_lines_in(1).projfunc_rev_exchange_rate := NULL;
5600 l_budget_lines_in(1).project_cost_rate_type := NULL;
5601 l_budget_lines_in(1).project_cost_rate_date_type := NULL;
5602 l_budget_lines_in(1).project_cost_rate_date := NULL;
5603 l_budget_lines_in(1).project_cost_exchange_rate := NULL;
5604 l_budget_lines_in(1).project_rev_rate_type := NULL;
5605 l_budget_lines_in(1).project_rev_rate_date_type := NULL;
5606 l_budget_lines_in(1).project_rev_rate_date := NULL;
5607 l_budget_lines_in(1).project_rev_exchange_rate := NULL;
5608
5609
5610 --Send the budget version id to validate_budget_lines API for
5611 --actuals on FORECAST check
5612 l_version_info_rec.x_budget_version_id := l_budget_version_id;
5613
5614 --Get entry method options and validate them against cost, rev and quantity passed
5615 l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(l_budget_version_id);
5616
5617 PA_FIN_PLAN_UTILS.get_plan_amount_flags(
5618 P_AMOUNT_SET_ID => l_amount_set_id
5619 ,X_RAW_COST_FLAG => lx_raw_cost_flag
5620 ,X_BURDENED_FLAG => lx_burdened_cost_flag
5621 ,X_REVENUE_FLAG => lx_revenue_flag
5622 ,X_COST_QUANTITY_FLAG => lx_cost_qty_flag
5623 ,X_REV_QUANTITY_FLAG => lx_revenue_qty_flag
5624 ,X_ALL_QUANTITY_FLAG => lx_all_qty_flag
5625 ,X_BILL_RATE_FLAG => l_bill_rate_flag
5626 ,X_COST_RATE_FLAG => l_cost_rate_flag
5627 ,X_BURDEN_RATE_FLAG => l_burden_rate_flag
5628 ,x_message_count => p_msg_count
5629 ,x_return_status => p_return_status
5630 ,x_message_data => p_msg_data) ;
5631
5632 IF p_return_status <> FND_API.G_RET_STS_SUCCESS
5633 THEN
5634 IF(l_debug_mode='Y') THEN
5635 pa_debug.g_err_stage := 'get_plan_amount_flags API falied';
5636 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5637 END IF;
5638 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5639 END IF;
5640
5641 --Derive the value of all_qty_flag based on version_type
5642 IF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
5643 l_allow_qty_flag := lx_cost_qty_flag;
5644 ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
5645 l_allow_qty_flag := lx_revenue_qty_flag;
5646 ELSE
5647 l_allow_qty_flag := lx_all_qty_flag;
5648 END IF;
5649
5650
5651 --Validate the budget line data
5652 PA_BUDGET_PVT.Validate_Budget_Lines
5653 ( p_calling_context => 'BUDGET_LINE_LEVEL_VALIDATION'
5654 ,p_pa_project_id => l_project_id
5655 ,p_budget_type_code => l_budget_type_code
5656 ,p_fin_plan_type_id => l_fin_plan_type_id
5657 ,p_version_type => l_version_type
5658 ,p_resource_list_id => l_resource_list_id
5659 ,p_time_phased_code => l_time_phased_code
5660 ,p_budget_entry_method_code => l_budget_entry_method_code
5661 ,p_entry_level_code => l_entry_level_code
5662 ,p_allow_qty_flag => l_allow_qty_flag
5663 ,p_allow_raw_cost_flag => lx_raw_cost_flag
5664 ,p_allow_burdened_cost_flag => lx_burdened_cost_flag
5665 ,p_allow_revenue_flag => lx_revenue_flag
5666 ,p_multi_currency_flag => l_multi_curr_flag
5667 ,p_project_cost_rate_type => NULL
5668 ,p_project_cost_rate_date_typ => NULL
5669 ,p_project_cost_rate_date => NULL
5670 ,p_project_cost_exchange_rate => NULL
5671 ,p_projfunc_cost_rate_type => NULL
5672 ,p_projfunc_cost_rate_date_typ => NULL
5673 ,p_projfunc_cost_rate_date => NULL
5674 ,p_projfunc_cost_exchange_rate => NULL
5675 ,p_project_rev_rate_type => NULL
5676 ,p_project_rev_rate_date_typ => NULL
5677 ,p_project_rev_rate_date => NULL
5678 ,p_project_rev_exchange_rate => NULL
5679 ,p_projfunc_rev_rate_type => NULL
5680 ,p_projfunc_rev_rate_date_typ => NULL
5681 ,p_projfunc_rev_rate_date => NULL
5682 ,p_projfunc_rev_exchange_rate => NULL
5683 ,p_version_info_rec => l_version_info_rec
5684 ,px_budget_lines_in => l_budget_lines_in
5685 ,x_budget_lines_out => l_budget_lines_out_tbl
5686 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
5687 ,x_etc_method_code_tbl => l_etc_method_code_tbl
5688 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
5689 ,x_msg_count => p_msg_count
5690 ,x_msg_data => p_msg_data
5691 ,x_return_status => p_return_status );
5692
5693 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5694 IF(l_debug_mode='Y') THEN
5695 pa_debug.g_err_stage := 'validate budget lines API falied';
5696 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5697 END IF;
5698 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5699 END IF;
5700
5701
5702 --Copy the fin plan line data into a table of type pa_fp_rollup_tmp
5703
5704 l_finplan_lines_tab(1).system_reference1 := l_budget_lines_in(1).pa_task_id;
5705 l_finplan_lines_tab(1).system_reference2 := l_budget_lines_in(1).resource_list_member_id;
5706 l_finplan_lines_tab(1).start_date := l_budget_lines_in(1).budget_start_date;
5707 l_finplan_lines_tab(1).end_date := l_budget_lines_in(1).budget_end_date;
5708 l_finplan_lines_tab(1).period_name := l_budget_lines_in(1).period_name;
5709 l_finplan_lines_tab(1).txn_currency_code := l_budget_lines_in(1).txn_currency_code;
5710 l_finplan_lines_tab(1).txn_raw_cost := l_budget_lines_in(1).raw_cost;
5711 l_finplan_lines_tab(1).txn_burdened_cost := l_budget_lines_in(1).burdened_cost;
5712 l_finplan_lines_tab(1).txn_revenue := l_budget_lines_in(1).revenue;
5713 l_finplan_lines_tab(1).quantity := l_budget_lines_in(1).quantity;
5714 l_finplan_lines_tab(1).change_reason_code := l_budget_lines_in(1).change_reason_code;
5715 l_finplan_lines_tab(1).description := l_budget_lines_in(1).description;
5716 l_finplan_lines_tab(1).attribute_category := l_budget_lines_in(1).attribute_category;
5717 l_finplan_lines_tab(1).attribute1 := l_budget_lines_in(1).attribute1;
5718 l_finplan_lines_tab(1).attribute2 := l_budget_lines_in(1).attribute2;
5719 l_finplan_lines_tab(1).attribute3 := l_budget_lines_in(1).attribute3;
5720 l_finplan_lines_tab(1).attribute4 := l_budget_lines_in(1).attribute4;
5721 l_finplan_lines_tab(1).attribute5 := l_budget_lines_in(1).attribute5;
5722 l_finplan_lines_tab(1).attribute6 := l_budget_lines_in(1).attribute6;
5723 l_finplan_lines_tab(1).attribute7 := l_budget_lines_in(1).attribute7;
5724 l_finplan_lines_tab(1).attribute8 := l_budget_lines_in(1).attribute8;
5725 l_finplan_lines_tab(1).attribute9 := l_budget_lines_in(1).attribute9;
5726 l_finplan_lines_tab(1).attribute10 := l_budget_lines_in(1).attribute10;
5727 l_finplan_lines_tab(1).attribute11 := l_budget_lines_in(1).attribute11;
5728 l_finplan_lines_tab(1).attribute12 := l_budget_lines_in(1).attribute12;
5729 l_finplan_lines_tab(1).attribute13 := l_budget_lines_in(1).attribute13;
5730 l_finplan_lines_tab(1).attribute14 := l_budget_lines_in(1).attribute14;
5731 l_finplan_lines_tab(1).attribute15 := l_budget_lines_in(1).attribute15;
5732 l_finplan_lines_tab(1).projfunc_cost_rate_type := l_budget_lines_in(1).projfunc_cost_rate_type;
5733 l_finplan_lines_tab(1).projfunc_cost_rate_date_type := l_budget_lines_in(1).projfunc_cost_rate_date_type;
5734 l_finplan_lines_tab(1).projfunc_cost_rate_date := l_budget_lines_in(1).projfunc_cost_rate_date;
5735 l_finplan_lines_tab(1).projfunc_cost_exchange_rate := l_budget_lines_in(1).projfunc_cost_exchange_rate;
5736 l_finplan_lines_tab(1).projfunc_rev_rate_type := l_budget_lines_in(1).projfunc_rev_rate_type;
5737 l_finplan_lines_tab(1).projfunc_rev_rate_date_type := l_budget_lines_in(1).projfunc_rev_rate_date_type;
5738 l_finplan_lines_tab(1).projfunc_rev_rate_date := l_budget_lines_in(1).projfunc_rev_rate_date;
5739 l_finplan_lines_tab(1).projfunc_rev_exchange_rate := l_budget_lines_in(1).projfunc_rev_exchange_rate;
5740 l_finplan_lines_tab(1).project_cost_rate_type := l_budget_lines_in(1).project_cost_rate_type;
5741 l_finplan_lines_tab(1).project_cost_rate_date_type := l_budget_lines_in(1).project_cost_rate_date_type;
5742 l_finplan_lines_tab(1).project_cost_rate_date := l_budget_lines_in(1).project_cost_rate_date;
5743 l_finplan_lines_tab(1).project_cost_exchange_rate := l_budget_lines_in(1).project_cost_exchange_rate;
5744 l_finplan_lines_tab(1).project_rev_rate_type := l_budget_lines_in(1).project_rev_rate_type;
5745 l_finplan_lines_tab(1).project_rev_rate_date_type := l_budget_lines_in(1).project_rev_rate_date_type;
5746 l_finplan_lines_tab(1).project_rev_rate_date := l_budget_lines_in(1).project_rev_rate_date;
5747 l_finplan_lines_tab(1).project_rev_exchange_rate := l_budget_lines_in(1).project_rev_exchange_rate;
5748 l_finplan_lines_tab(1).pm_product_code := l_budget_lines_in(1).pm_product_code;
5749 l_finplan_lines_tab(1).pm_budget_line_reference := l_budget_lines_in(1).pm_budget_line_reference;
5750 l_finplan_lines_tab(1).quantity_source := 'I';
5751 l_finplan_lines_tab(1).raw_cost_source := 'I';
5752 l_finplan_lines_tab(1).burdened_cost_source := 'I';
5753 l_finplan_lines_tab(1).revenue_source := 'I';
5754 l_finplan_lines_tab(1).resource_assignment_id := -1;
5755
5756
5757 --Lock the budget version before inserting a budget line
5758 l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
5759 (p_budget_version_id => l_budget_version_id);
5760
5761 PA_FIN_PLAN_PVT.lock_unlock_version
5762 ( p_budget_version_id => l_budget_version_id
5763 ,p_record_version_number => l_record_version_number
5764 ,p_action => 'L'
5765 ,p_user_id => FND_GLOBAL.User_id
5766 ,p_person_id => null
5767 ,x_return_status => p_return_status
5768 ,x_msg_count => p_msg_count
5769 ,x_msg_data => p_msg_data);
5770
5771 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5772 -- Error message is not added here as the api lock_unlock_version
5773 -- adds the message to stack
5774 IF(l_debug_mode='Y') THEN
5775 pa_debug.g_err_stage := 'Failed in locking the version ' || l_budget_version_id;
5776 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
5777 END IF;
5778 RAISE FND_API.G_EXC_ERROR;
5779 END IF;
5780
5781 --Call PA_FIN_PLAN_PVT.add_fin_plan_lines. This api takes care of inserting
5782 --budget lines data in all relevant tables.
5783 PA_FIN_PLAN_PVT.add_fin_plan_lines
5784 ( p_calling_context => PA_FP_CONSTANTS_PKG.G_AMG_API--Bug 4224464.Changed this to AMG_API as this is a AMG flow.
5785 ,p_fin_plan_version_id => l_budget_version_id
5786 ,p_finplan_lines_tab => l_finplan_lines_tab
5787 ,x_return_status => p_return_status
5788 ,x_msg_count => p_msg_count
5789 ,x_msg_data => p_msg_data );
5790
5791 IF p_return_status <> FND_API.G_RET_STS_SUCCESS
5792 THEN
5793 IF(l_debug_mode='Y') THEN
5794 pa_debug.g_err_stage := 'PA_FIN_PLAN_PVT.add_fin_plan_lines API falied';
5795 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5796 END IF;
5797 RAISE FND_API.G_EXC_ERROR;
5798 END IF;
5799
5800
5801 --unlock the budget version after inserting the budget line
5802 l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
5803 (p_budget_version_id => l_budget_version_id);
5804
5805 PA_FIN_PLAN_PVT.lock_unlock_version
5806 ( p_budget_version_id => l_budget_version_id
5807 ,p_record_version_number => l_record_version_number
5808 ,p_action => 'U'
5809 ,p_user_id => FND_GLOBAL.User_id
5810 ,p_person_id => null
5811 ,x_return_status => p_return_status
5812 ,x_msg_count => p_msg_count
5813 ,x_msg_data => p_msg_data);
5814
5815 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5816 -- Error message is not added here as the api lock_unlock_version
5817 -- adds the message to stack
5818 IF(l_debug_mode='Y') THEN
5819 pa_debug.g_err_stage := 'Failed in unlocking the version ' || l_budget_version_id;
5820 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
5821 END IF;
5822 RAISE FND_API.G_EXC_ERROR;
5823 END IF;
5824
5825
5826 END IF; --end of code to insert budget line
5827
5828
5829 IF FND_API.to_boolean( p_commit )
5830 THEN
5831 COMMIT;
5832 END IF;
5833
5834 IF(l_debug_mode='Y') THEN
5835 pa_debug.g_err_stage := 'Exiting ' || l_api_name;
5836 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5837 END IF;
5838
5839 IF ( l_debug_mode = 'Y' ) THEN
5840 pa_debug.reset_curr_function;
5841 END IF;
5842
5843 EXCEPTION
5844
5845 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc
5846 THEN
5847
5848 ROLLBACK TO add_budget_line_pub;
5849
5850 p_return_status := FND_API.G_RET_STS_ERROR;
5851 l_msg_count := FND_MSG_PUB.count_msg;
5852
5853 IF l_msg_count = 1 and p_msg_data IS NULL THEN
5854 PA_INTERFACE_UTILS_PUB.get_messages
5855 (p_encoded => FND_API.G_TRUE
5856 ,p_msg_index => 1
5857 ,p_msg_count => l_msg_count
5858 ,p_msg_data => l_msg_data
5859 ,p_data => l_data
5860 ,p_msg_index_out => l_msg_index_out);
5861 p_msg_data := l_data;
5862 p_msg_count := l_msg_count;
5863 ELSE
5864 p_msg_count := l_msg_count;
5865 END IF;
5866
5867 IF ( l_debug_mode = 'Y' ) THEN
5868 pa_debug.reset_curr_function;
5869 END IF;
5870
5871 RETURN;
5872
5873
5874 WHEN FND_API.G_EXC_ERROR
5875 THEN
5876
5877 ROLLBACK TO add_budget_line_pub;
5878
5879 p_return_status := FND_API.G_RET_STS_ERROR;
5880
5881 FND_MSG_PUB.count_and_get
5882 ( p_count => p_msg_count ,
5883 p_data => p_msg_data );
5884
5885 IF ( l_debug_mode = 'Y' ) THEN
5886 pa_debug.reset_curr_function;
5887 END IF;
5888
5889
5890 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
5891 THEN
5892
5893 ROLLBACK TO add_budget_line_pub;
5894
5895 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5896
5897 FND_MSG_PUB.count_and_get
5898 ( p_count => p_msg_count ,
5899 p_data => p_msg_data );
5900
5901 IF ( l_debug_mode = 'Y' ) THEN
5902 pa_debug.reset_curr_function;
5903 END IF;
5904
5905
5906 WHEN ROW_ALREADY_LOCKED
5907 THEN
5908
5909 ROLLBACK TO add_budget_line_pub;
5910
5911 p_return_status := FND_API.G_RET_STS_ERROR;
5912
5913 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5914 THEN
5915 FND_MESSAGE.set_name('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
5916 FND_MESSAGE.set_token('PROJECT', l_amg_project_number);
5917 FND_MESSAGE.set_token('TASK', l_amg_task_number);
5918 FND_MESSAGE.set_token('BUDGET_TYPE', l_budget_type_code);
5919 FND_MESSAGE.set_token('SOURCE_NAME', '');
5920 FND_MESSAGE.set_token('START_DATE', '');
5921 FND_MESSAGE.set_token('ENTITY', 'G_BUDGET_LINE_CODE');
5922 FND_MSG_PUB.add;
5923 END IF;
5924
5925 FND_MSG_PUB.count_and_get
5926 ( p_count => p_msg_count ,
5927 p_data => p_msg_data );
5928
5929 IF ( l_debug_mode = 'Y' ) THEN
5930 pa_debug.reset_curr_function;
5931 END IF;
5932
5933
5934 WHEN OTHERS
5935 THEN
5936
5937 ROLLBACK TO add_budget_line_pub;
5938
5939 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5940
5941 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5942 THEN
5943 FND_MSG_PUB.add_exc_msg
5944 ( p_pkg_name => G_PKG_NAME
5945 , p_procedure_name => l_api_name );
5946 END IF;
5947
5948 FND_MSG_PUB.count_and_get
5949 ( p_count => p_msg_count ,
5950 p_data => p_msg_data );
5951
5952 IF ( l_debug_mode = 'Y' ) THEN
5953 pa_debug.reset_curr_function;
5954 END IF;
5955
5956 END Add_Budget_Line;
5957
5958
5959 ----------------------------------------------------------------------------------------
5960 --Name: delete_draft_budget
5961 --Type: Procedure
5962 --Description: This procedure can be used to delete a draft budget
5963 --
5964 --
5965 --Called subprograms:
5966 --
5967 --
5968 --
5969 --History:
5970 -- 07-OCT-1996 L. de Werker Created
5971 -- 07-DEC-1996 L. de Werker Added locking mechanism
5972 -- 19-MAR-2003 Srikanth Made Changes to make this api work for Fin Plan Model
5973 -- 11-APR-2005 Rishukla Bug 4224464: FP M Changes for delete_draft_budget
5974
5975 PROCEDURE delete_draft_budget
5976 ( p_api_version_number IN NUMBER
5977 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
5978 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
5979 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5980 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5981 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5982 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5983 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5984 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5985 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5986
5987 -- Parameters required for Fin Plan Model
5988 ,p_fin_plan_type_name IN pa_fin_plan_types_vl.name%TYPE
5989 ,p_fin_plan_type_id IN pa_fin_plan_types_b.fin_plan_type_id%TYPE
5990 ,p_version_number IN pa_budget_versions.version_number%TYPE
5991 ,p_version_type IN pa_budget_versions.version_type%TYPE
5992 )
5993
5994 IS
5995
5996 CURSOR l_budget_version_csr
5997 ( p_project_id NUMBER
5998 , p_budget_type_code VARCHAR2 )
5999 IS
6000 SELECT budget_version_id
6001 FROM pa_budget_versions
6002 WHERE project_id = p_project_id
6003 AND budget_type_code = p_budget_type_code
6004 AND budget_status_code = 'W'
6005 AND ci_id IS NULL; -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
6006
6007
6008 CURSOR l_budget_type_csr
6009 ( p_budget_type_code VARCHAR2 )
6010 IS
6011 SELECT 1
6012 FROM pa_budget_types
6013 WHERE budget_type_code = p_budget_type_code;
6014
6015 --Bug 4224464: Following cursor has been added as part of
6016 --FP M Changes for delete_draft_budget
6017 --This cursor is used to check if a fin_plan_type_id is
6018 --used to store workplan data
6019 CURSOR l_use_for_wp_csr
6020 ( p_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE)
6021 IS
6022 SELECT 1
6023 FROM pa_fin_plan_types_b
6024 WHERE fin_plan_type_id = p_fin_plan_type_id
6025 AND use_for_workplan_flag = 'Y';
6026
6027
6028 CURSOR l_lock_budget_csr( p_budget_version_id NUMBER )
6029 IS
6030 SELECT 'x'
6031 FROM pa_budget_versions bv
6032 , pa_resource_assignments ra
6033 , pa_budget_lines bl
6034 WHERE bv.budget_version_id = p_budget_version_id
6035 AND bv.budget_version_id = ra.budget_version_id (+)
6036 AND ra.resource_assignment_id = bl.resource_assignment_id (+)
6037 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
6038
6039 FOR UPDATE OF bv.budget_version_id,ra.budget_version_id,bl.resource_assignment_id NOWAIT;
6040
6041 l_api_name CONSTANT VARCHAR2(30) := 'delete_draft_budget';
6042
6043 i NUMBER;
6044 l_return_status VARCHAR2(1);
6045 l_err_code NUMBER;
6046 l_err_stage VARCHAR2(120);
6047 l_err_stack VARCHAR2(630);
6048 l_dummy NUMBER :=0;
6049 l_budget_version_id NUMBER;
6050 l_ci_id pa_budget_versions.ci_id%TYPE;
6051 l_project_id NUMBER;
6052 l_budget_type_code VARCHAR2(30);
6053 l_msg_count NUMBER ;
6054 l_msg_data VARCHAR2(2000);
6055 l_function_allowed VARCHAR2(1);
6056 l_resp_id NUMBER := 0;
6057 l_user_id NUMBER := 0;
6058 l_module_name VARCHAR2(80) := g_module_name ||'.DELETE_DRAFT_BUDGET';
6059 l_fp_options_id NUMBER;
6060
6061 --needed to get the field values associated to a AMG message
6062
6063 CURSOR l_amg_project_csr
6064 (p_pa_project_id pa_projects.project_id%type)
6065 IS
6066 SELECT segment1
6067 FROM pa_projects p
6068 WHERE p.project_id = p_pa_project_id;
6069
6070 l_amg_segment1 VARCHAR2(25);
6071
6072 --Included the following variables as part of Changes due to Fin Plan Model
6073 l_any_error_occurred_flag VARCHAR2(1):='N';
6074 l_baseline_funding_flag VARCHAR2(1):='N';
6075 l_data VARCHAR2(2000);
6076 l_msg_index_out NUMBER;
6077 l_debug_mode VARCHAR2(1);
6078
6079 l_debug_level3 CONSTANT NUMBER := 3;
6080 l_debug_level5 CONSTANT NUMBER := 5;
6081 l_security_ret_code VARCHAR2(1);
6082 l_fin_plan_type_id NUMBER;
6083 l_version_type pa_budget_versions.version_type%TYPE;
6084 l_proj_fp_options_id NUMBER;
6085 l_result VARCHAR2(1);
6086 l_record_version_number pa_budget_versions.record_version_number%TYPE;
6087 l_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE;
6088 --Added by Xin Liu. 28-APR-03
6089 ll_fin_plan_type_id pa_proj_fp_options.fin_plan_type_id%TYPE;
6090 ll_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE;
6091 ll_version_type pa_budget_versions.version_type%TYPE;
6092 ll_version_number pa_budget_versions.version_number%TYPE;
6093
6094 BEGIN
6095
6096 -- Standard begin of API savepoint
6097
6098 SAVEPOINT delete_draft_budget_pub;
6099
6100 -- Standard call to check for call compatibility.
6101
6102 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
6103 p_api_version_number ,
6104 l_api_name ,
6105 G_PKG_NAME )
6106 THEN
6107
6108 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6109
6110 END IF;
6111
6112 p_msg_count := 0;
6113 p_return_status := FND_API.G_RET_STS_SUCCESS;
6114 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
6115
6116 IF ( l_debug_mode = 'Y' )
6117 THEN
6118 pa_debug.set_curr_function( p_function => 'delete_draft_budget',
6119 p_debug_mode => l_debug_mode );
6120 END IF;
6121
6122 -- Initialize the message table if requested.
6123
6124 IF FND_API.TO_BOOLEAN( p_init_msg_list )
6125 THEN
6126
6127 FND_MSG_PUB.initialize;
6128
6129 END IF;
6130 -- This api will initialize the data that will be used by the map_new_amg_msg.
6131 l_resp_id := FND_GLOBAL.Resp_id;
6132 l_user_id := FND_GLOBAL.User_id;
6133
6134 -- Added Logic by Xin Liu to handle MISS vars based on Manoj's code review.
6135 -- 28-APR-03
6136 IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6137 ll_fin_plan_type_id := NULL;
6138 ELSE
6139 ll_fin_plan_type_id := p_fin_plan_type_id;
6140 END IF;
6141
6142 IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6143 ll_fin_plan_type_name := NULL;
6144 ELSE
6145 ll_fin_plan_type_name := p_fin_plan_type_name;
6146 END IF;
6147
6148 IF p_version_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6149 ll_version_number := NULL;
6150 ELSE
6151 ll_version_number := p_version_number;
6152 END IF;
6153
6154
6155 -- Changes done.
6156
6157
6158 -- Both Budget Type Code and Fin Plan Type Id should not be null
6159 -- Changes done by Xin Liu, 24-APR-03, for Fin plan Type Id and Name for G_PA_MISS_XXX
6160 IF ((p_budget_type_code IS NULL OR
6161 p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
6162 (p_fin_plan_type_name IS NULL OR p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
6163 (p_fin_plan_type_id IS NULL OR p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) )THEN
6164
6165 PA_UTILS.ADD_MESSAGE
6166 (p_app_short_name => 'PA',
6167 p_msg_name => 'PA_BUDGET_FP_BOTH_MISSING');
6168
6169 IF l_debug_mode = 'Y' THEN
6170 pa_debug.g_err_stage:= 'Fin Plan type info and budget type info are missing';
6171 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6172 END IF;
6173
6174 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6175
6176 END IF;
6177
6178 -- Both Budget Type Code and Fin Plan Type Id should not be not null
6179 -- Changes done by Xin Liu, 24-APR-03, for Fin plan Type Id and Name for G_PA_MISS_XXX
6180 IF ((p_budget_type_code IS NOT NULL AND
6181 p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
6182 ((p_fin_plan_type_name IS NOT NULL AND p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
6183 (p_fin_plan_type_id IS NOT NULL AND p_fin_plan_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) THEN
6184
6185 PA_UTILS.ADD_MESSAGE
6186 (p_app_short_name => 'PA',
6187 p_msg_name => 'PA_BUDGET_FP_BOTH_NOT_NULL');
6188
6189 IF l_debug_mode = 'Y' THEN
6190 pa_debug.g_err_stage:= 'Fin Plan type info and budget type info both are provided';
6191 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6192 END IF;
6193
6194 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6195
6196 END IF;
6197
6198
6199 -- product_code is mandatory
6200
6201 IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6202 OR p_pm_product_code IS NULL
6203 THEN
6204 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6205 THEN
6206 pa_interface_utils_pub.map_new_amg_msg
6207 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
6208 ,p_msg_attribute => 'CHANGE'
6209 ,p_resize_flag => 'N'
6210 ,p_msg_context => 'GENERAL'
6211 ,p_attribute1 => ''
6212 ,p_attribute2 => ''
6213 ,p_attribute3 => ''
6214 ,p_attribute4 => ''
6215 ,p_attribute5 => '');
6216 END IF;
6217 IF l_debug_mode = 'Y' THEN
6218 pa_debug.g_err_stage := 'Product code is missing' ;
6219 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6220 END IF;
6221
6222 -- RAISE FND_API.G_EXC_ERROR;
6223 l_any_error_occurred_flag:='Y' ;
6224 END IF;
6225
6226 l_pm_product_code :='Z';
6227 /*added for bug no :2413400*/
6228 OPEN p_product_code_csr (p_pm_product_code);
6229 FETCH p_product_code_csr INTO l_pm_product_code;
6230 CLOSE p_product_code_csr;
6231 IF l_pm_product_code <> 'X'
6232 THEN
6233
6234 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6235 THEN
6236 pa_interface_utils_pub.map_new_amg_msg
6237 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
6238 ,p_msg_attribute => 'CHANGE'
6239 ,p_resize_flag => 'N'
6240 ,p_msg_context => 'GENERAL'
6241 ,p_attribute1 => ''
6242 ,p_attribute2 => ''
6243 ,p_attribute3 => ''
6244 ,p_attribute4 => ''
6245 ,p_attribute5 => '');
6246 END IF;
6247 p_return_status := FND_API.G_RET_STS_ERROR;
6248 --RAISE FND_API.G_EXC_ERROR;
6249 l_any_error_occurred_flag:='Y';
6250 IF l_debug_mode = 'Y' THEN
6251 pa_debug.g_err_stage := 'Product code is invalid' ;
6252 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6253 END IF;
6254
6255 END IF;
6256
6257
6258 -- convert pm_project_reference to id
6259
6260 Pa_project_pvt.Convert_pm_projref_to_id (
6261 p_pm_project_reference => p_pm_project_reference,
6262 p_pa_project_id => p_pa_project_id,
6263 p_out_project_id => l_project_id,
6264 p_return_status => l_return_status );
6265
6266
6267 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6268 THEN
6269 IF l_debug_mode = 'Y' THEN
6270 pa_debug.g_err_stage := 'Unexpected error while getting project id' ;
6271 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6272 END IF;
6273
6274 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6275
6276 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6277 THEN
6278 IF l_debug_mode = 'Y' THEN
6279 pa_debug.g_err_stage := 'Error while getting project id' ;
6280 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6281 END IF;
6282
6283 RAISE FND_API.G_EXC_ERROR;
6284
6285 END IF;
6286
6287 -- Get segment1 for AMG messages
6288
6289 OPEN l_amg_project_csr( l_project_id );
6290 FETCH l_amg_project_csr INTO l_amg_segment1;
6291 CLOSE l_amg_project_csr;
6292
6293 --Do the processing required for budget model
6294 IF (p_budget_type_code IS NOT NULL AND
6295 p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
6296
6297 --Check for the security
6298 PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
6299 p_api_version_number => p_api_version_number
6300 ,p_project_id => l_project_id
6301 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET
6302 ,p_function_name => 'PA_PM_DELETE_DRAFT_BUDGET'
6303 ,p_version_type => null
6304 ,x_return_status => p_return_status
6305 ,x_ret_code => l_security_ret_code );
6306
6307 -- the above API adds the error message to stack. Hence the message is not added here.
6308 -- Also, as security check is important further validations are not done in case this
6309 -- validation fails.
6310 IF (p_return_status<>FND_API.G_RET_STS_SUCCESS OR
6311 l_security_ret_code = 'N') THEN
6312 -- dbms_output.put_line('Security api failed l_security_ret_code '||l_security_ret_code);
6313 IF l_debug_mode = 'Y' THEN
6314 pa_debug.g_err_stage:= 'Security API Failed';
6315 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6316 END IF;
6317
6318 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6319 END IF;
6320
6321 OPEN l_budget_type_csr( p_budget_type_code );
6322
6323 FETCH l_budget_type_csr INTO l_dummy;
6324
6325 IF l_budget_type_csr%NOTFOUND
6326 THEN
6327 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6328 THEN
6329 pa_interface_utils_pub.map_new_amg_msg
6330 (p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
6331 ,p_msg_attribute => 'CHANGE'
6332 ,p_resize_flag => 'N'
6333 ,p_msg_context => 'BUDG'
6334 ,p_attribute1 => l_amg_segment1
6335 ,p_attribute2 => ''
6336 ,p_attribute3 => p_budget_type_code
6337 ,p_attribute4 => ''
6338 ,p_attribute5 => '');
6339 END IF;
6340 IF l_debug_mode = 'Y' THEN
6341 pa_debug.g_err_stage := 'Budget Type is invalid' ;
6342 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6343 END IF;
6344
6345
6346 CLOSE l_budget_type_csr;
6347 RAISE FND_API.G_EXC_ERROR;
6348
6349 END IF;
6350
6351 CLOSE l_budget_type_csr;
6352
6353 --Verify that the budget is not of type FORECASTING_BUDGET_TYPE
6354 IF p_budget_type_code='FORECASTING_BUDGET_TYPE' THEN
6355 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6356 THEN
6357 PA_UTILS.add_message
6358 (p_app_short_name => 'PA',
6359 p_msg_name => 'PA_FP_CANT_EDIT_FCST_BUD_TYPE');
6360 END IF;
6361 IF l_debug_mode = 'Y' THEN
6362 pa_debug.g_err_stage := 'Budget of type FORECASTING_BUDGET_TYPE' ;
6363 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6364 END IF;
6365 l_any_error_occurred_flag := 'Y';
6366 END IF;
6367
6368 -- get the corresponding budget_version_id
6369 -- we do not verify p_version_number here because
6370 -- as per FD, this parameter should be ignored for
6371 -- FORMS budget model.
6372 OPEN l_budget_version_csr
6373 (p_project_id => l_project_id
6374 ,p_budget_type_code => p_budget_type_code );
6375
6376 FETCH l_budget_version_csr INTO l_budget_version_id;
6377
6378 IF l_budget_version_csr%NOTFOUND
6379 THEN
6380 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6381 THEN
6382 pa_interface_utils_pub.map_new_amg_msg
6383 ( p_old_message_code => 'PA_NO_BUDGET_VERSION'
6384 ,p_msg_attribute => 'CHANGE'
6385 ,p_resize_flag => 'N'
6386 ,p_msg_context => 'BUDG'
6387 ,p_attribute1 => l_amg_segment1
6388 ,p_attribute2 => ''
6389 ,p_attribute3 => p_budget_type_code
6390 ,p_attribute4 => ''
6391 ,p_attribute5 => '');
6392 END IF;
6393 IF l_debug_mode = 'Y' THEN
6394 pa_debug.g_err_stage := 'Budget version does not exist' ;
6395 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6396 END IF;
6397
6398
6399 CLOSE l_budget_version_csr;
6400 RAISE FND_API.G_EXC_ERROR;
6401
6402 END IF;
6403
6404 CLOSE l_budget_version_csr;
6405
6406
6407 --Check if budgetary control is enabled for this project and budget version
6408 --If a record is present for this budget version in PA_BC_BALANCES table
6409 --then we do not proceed with delete.
6410 IF ( PA_BUDGET_PVT.is_bc_enabled_for_budget(l_budget_version_id) )
6411 THEN
6412 IF(l_debug_mode='Y') THEN
6413 pa_debug.g_err_stage := 'Cannnot delete budget version - '
6414 || 'budgetary control is enabled';
6415 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6416 END IF;
6417
6418 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6419 THEN
6420 PA_UTILS.ADD_MESSAGE(
6421 p_app_short_name => 'PA'
6422 ,p_msg_name => 'PA_FP_DEL_BC_ENABLED_BV_AMG'
6423 ,p_token1 => 'PROJECT'
6424 ,p_value1 => l_amg_segment1
6425 ,p_token2 => 'BUDGET_TYPE'
6426 ,p_value2 => p_budget_type_code
6427 ,p_token3 => 'BUDGET_VERSION_ID'
6428 ,p_value3 => l_budget_version_id);
6429 END IF;
6430
6431 RAISE FND_API.G_EXC_ERROR;
6432
6433 END IF;--budgetary control enabled check
6434
6435
6436 OPEN l_lock_budget_csr( l_budget_version_id );
6437
6438 --Stop Further processing if any errors are reported
6439 IF(l_any_error_occurred_flag='Y') THEN
6440 IF(l_debug_mode='Y') THEN
6441 pa_debug.g_err_stage := 'About to display all the messages';
6442 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6443 END IF;
6444 p_return_status := FND_API.G_RET_STS_ERROR;
6445 l_any_error_occurred_flag := 'Y';
6446 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6447 END IF;
6448
6449 PA_BUDGET_UTILS.delete_draft( x_budget_version_id => l_budget_version_id
6450 ,x_err_code => l_err_code
6451 ,x_err_stage => l_err_stage
6452 ,x_err_stack => l_err_stack );
6453
6454 IF l_err_code > 0
6455 THEN
6456
6457 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6458 THEN
6459
6460 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
6461 THEN
6462 IF(l_debug_mode='Y') THEN
6463 pa_debug.g_err_stage := 'Delete draft falied';
6464 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6465 END IF;
6466 pa_interface_utils_pub.map_new_amg_msg
6467 ( p_old_message_code => 'PA_DELETE_DRAFT_FAILED'
6468 ,p_msg_attribute => 'CHANGE'
6469 ,p_resize_flag => 'N'
6470 ,p_msg_context => 'BUDG'
6471 ,p_attribute1 => l_amg_segment1
6472 ,p_attribute2 => ''
6473 ,p_attribute3 => p_budget_type_code
6474 ,p_attribute4 => ''
6475 ,p_attribute5 => '');
6476 ELSE
6477 IF(l_debug_mode='Y') THEN
6478 pa_debug.g_err_stage := 'Error in Delete draft';
6479 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6480 END IF;
6481
6482 pa_interface_utils_pub.map_new_amg_msg
6483 ( p_old_message_code => l_err_stage
6484 ,p_msg_attribute => 'CHANGE'
6485 ,p_resize_flag => 'N'
6486 ,p_msg_context => 'BUDG'
6487 ,p_attribute1 => l_amg_segment1
6488 ,p_attribute2 => ''
6489 ,p_attribute3 => p_budget_type_code
6490 ,p_attribute4 => ''
6491 ,p_attribute5 => '');
6492 END IF;
6493
6494 END IF;
6495
6496 RAISE FND_API.G_EXC_ERROR;
6497
6498 ELSIF l_err_code < 0
6499 THEN
6500
6501
6502 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6503 THEN
6504 IF(l_debug_mode='Y') THEN
6505 pa_debug.g_err_stage := 'Unexpected Error in Delete draft';
6506 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6507 END IF;
6508
6509 FND_MSG_PUB.add_exc_msg
6510 ( p_pkg_name => 'PA_BUDGET_UTILS'
6511 , p_procedure_name => 'DELETE_DRAFT'
6512 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
6513
6514 END IF;
6515
6516 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6517
6518 END IF;
6519
6520 CLOSE l_lock_budget_csr; --FYI, does not release locks
6521
6522
6523 ELSE -- Fin Plan Model
6524
6525
6526 -- validate the plan type passed
6527 PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
6528 ( p_fin_plan_type_id => ll_fin_plan_type_id
6529 ,p_fin_plan_type_name => ll_fin_plan_type_name
6530 ,x_fin_plan_type_id => l_fin_plan_type_id
6531 ,x_return_status => p_return_status
6532 ,x_msg_count => p_msg_count
6533 ,x_msg_data => p_msg_data);
6534 -- Throw the error if the above API is not successfully executed
6535 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6536
6537 IF l_debug_mode = 'Y' THEN
6538 pa_debug.g_err_stage := 'Can not get the value of Fin Plan Type Id' ;
6539 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6540 END IF;
6541
6542 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6543
6544 END IF;
6545
6546 --Bug 4224464: Following validation has been added as part of
6547 --FP M Changes for delete_draft_budget
6548 --check if the fin_plan_type_id is used to store workplan data
6549 --first reset the value of l_dummy
6550 l_dummy := 0;
6551 OPEN l_use_for_wp_csr( l_fin_plan_type_id );
6552 FETCH l_use_for_wp_csr INTO l_dummy;
6553 CLOSE l_use_for_wp_csr;
6554
6555 IF l_dummy = 1
6556 THEN
6557 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6558 THEN
6559 PA_UTILS.add_message
6560 (p_app_short_name => 'PA',
6561 p_msg_name => 'PA_FP_CANT_DEL_WP_DATA');
6562 END IF;
6563 IF l_debug_mode = 'Y' THEN
6564 pa_debug.g_err_stage := 'Fin Plan Type Id is used for WP' ;
6565 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6566 END IF;
6567
6568 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6569
6570 END IF;
6571
6572 --Validate / get the version type
6573 --Changes done by Xin Liu for post_fpk. Check if p_version_type is G_PA_MISS_CHAR. 24-APR-03
6574 IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6575 l_version_type := NULL;
6576 ELSE
6577 l_version_type := p_version_type;
6578 END IF;
6579 --Changes Done.
6580
6581 pa_fin_plan_utils.get_version_type
6582 ( p_project_id => l_project_id
6583 ,p_fin_plan_type_id => l_fin_plan_type_id
6584 ,px_version_type => l_version_type
6585 ,x_return_status => p_return_status
6586 ,x_msg_count => p_msg_count
6587 ,x_msg_data => p_msg_data);
6588
6589 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6590
6591 IF l_debug_mode = 'Y' THEN
6592 pa_debug.g_err_stage := 'Failed in get_Version_type' ;
6593 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6594 END IF;
6595 -- dbms_output.put_line('Exc in getting ver type');
6596
6597 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6598
6599 END IF;
6600
6601 --Check for the security
6602 PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
6603 p_api_version_number => p_api_version_number
6604 ,p_project_id => l_project_id
6605 ,p_fin_plan_type_id => l_fin_plan_type_id /* Bug 3139924 */
6606 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN
6607 ,p_function_name => 'PA_PM_DELETE_DRAFT_BUDGET'
6608 ,p_version_type => l_version_type
6609 ,x_return_status => p_return_status
6610 ,x_ret_code => l_security_ret_code );
6611
6612 IF (p_return_status <>FND_API.G_RET_STS_SUCCESS OR
6613 l_security_ret_code='N') THEN
6614 -- dbms_output.put_line('Exc in security');
6615 IF l_debug_mode = 'Y' THEN
6616 pa_debug.g_err_stage := 'Security API failed' ;
6617 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6618 END IF;
6619 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6620 END IF;
6621
6622 --Bug 4224464: Following validation has been added as part of
6623 --FP M Changes for delete_draft_budget.
6624 --If version number is null, then current working version should be
6625 --deleted. If current working version doesn't exist then error
6626 --message is thrown
6627 IF ll_version_number IS NULL THEN
6628
6629 PA_FIN_PLAN_UTILS.get_curr_working_version_info
6630 ( p_project_id => l_project_id
6631 ,p_fin_plan_type_id => l_fin_plan_type_id
6632 ,p_version_type => l_version_type
6633 ,x_fp_options_id => l_fp_options_id
6634 ,x_fin_plan_version_id => l_budget_version_id
6635 ,x_return_status => p_return_status
6636 ,x_msg_count => p_msg_count
6637 ,x_msg_data => p_msg_data );
6638
6639 ELSE --version_number not NULL
6640 --Derive the version Id depending on the parameters passed as input.
6641
6642 PA_FIN_PLAN_UTILS.get_version_id
6643 ( p_project_id => l_project_id
6644 ,p_fin_plan_type_id => l_fin_plan_type_id
6645 ,p_version_type => l_version_type
6646 ,p_version_number => ll_version_number
6647 ,x_budget_version_id => l_budget_version_id
6648 ,x_ci_id => l_ci_id -- 2863564
6649 ,x_return_status => p_return_status
6650 ,x_msg_count => p_msg_count
6651 ,x_msg_data => p_msg_data );
6652
6653 -- If the budget version is a control item version throw error
6654 IF l_ci_id IS NOT NULL THEN
6655 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6656 PA_UTILS.ADD_MESSAGE(
6657 p_app_short_name => 'PA'
6658 ,p_msg_name => 'PA_FP_CI_VERSION_NON_EDITABLE'
6659 ,p_token1 => 'BUDGET_VERSION_ID'
6660 ,p_value1 => l_budget_version_id);
6661 END IF;
6662 IF l_debug_mode = 'Y' THEN
6663 pa_debug.g_err_stage := 'i/p version is ci version' ;
6664 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6665 END IF;
6666 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6667 END IF;
6668
6669 END IF; --version_number IS NULL
6670
6671 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6672 IF l_debug_mode = 'Y' THEN
6673 pa_debug.g_err_stage := 'get Version Id Failed ' ;
6674 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6675 END IF;
6676
6677 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6678 END IF;
6679
6680 IF l_budget_version_id IS NULL THEN
6681
6682 --Get the plan type name
6683 SELECT name
6684 INTO l_fin_plan_type_name
6685 FROM pa_fin_plan_types_vl
6686 WHERE fin_plan_type_id = l_fin_plan_type_id;
6687
6688 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6689 THEN
6690 PA_UTILS.add_message
6691 (p_app_short_name => 'PA'
6692 ,p_msg_name => 'PA_FP_NO_WORKING_VERSION'
6693 ,p_token1 => 'PROJECT'
6694 ,p_value1 => l_amg_segment1
6695 ,p_token2 => 'PLAN_TYPE'
6696 ,p_value2 => l_fin_plan_type_name
6697 ,p_token3 => 'VERSION_NUMBER'
6698 ,p_value3 => ll_version_number );
6699 END IF;
6700
6701 IF l_debug_mode = 'Y' THEN
6702 pa_debug.g_err_stage := 'Working Budget Version does not exist' ;
6703 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6704 END IF;
6705 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6706
6707 END IF;
6708
6709 --Bug 4224464: Following validation has been added as part of
6710 --FP M Changes for delete_draft_budget. If the budget version
6711 --belongs to an org forecast project then throw an error
6712 IF (PA_FIN_PLAN_UTILS.is_orgforecast_plan(l_budget_version_id) = 'Y')
6713 THEN
6714 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6715 THEN
6716 PA_UTILS.add_message
6717 (p_app_short_name => 'PA',
6718 p_msg_name => 'PA_FP_CANT_DEL_ORG_FCST_PLAN');
6719 END IF;
6720 IF l_debug_mode = 'Y' THEN
6721 pa_debug.g_err_stage := 'Cannot delete draft budgets attached' ||
6722 'to an organisation forecasting project';
6723 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6724 END IF;
6725
6726 p_return_status := FND_API.G_RET_STS_ERROR;
6727 l_any_error_occurred_flag:='Y' ;
6728 END IF; --org_forecast = 'Y'
6729
6730 --Lock the version before deleting it
6731 l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
6732 (p_budget_version_id => l_budget_version_id);
6733 pa_fin_plan_pvt.lock_unlock_version
6734 ( p_budget_version_id => l_budget_version_id
6735 ,p_record_version_number => l_record_version_number
6736 ,p_action => 'L'
6737 ,p_user_id => l_user_id
6738 ,p_person_id => null
6739 ,x_return_status => p_return_status
6740 ,x_msg_count => p_msg_count
6741 ,x_msg_data => p_msg_data);
6742
6743 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6744 -- Error message is not added here as the api lock_unlock_version
6745 -- adds the message to stack
6746 IF(l_debug_mode='Y') THEN
6747 pa_debug.g_err_stage := 'Failed in locking the version';
6748 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6749 END IF;
6750 l_any_error_occurred_flag:='Y';
6751 END IF;
6752
6753 --Stop Further processing if any errors are reported
6754 IF(l_any_error_occurred_flag='Y') THEN
6755 IF(l_debug_mode='Y') THEN
6756 pa_debug.g_err_stage := 'About to display all the messages';
6757 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6758 END IF;
6759 p_return_status := FND_API.G_RET_STS_ERROR;
6760 l_any_error_occurred_flag := 'Y';
6761 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6762 END IF;
6763
6764 --Delete the version
6765 l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
6766 (p_budget_version_id => l_budget_version_id);
6767 PA_FIN_PLAN_PUB.Delete_Version
6768 ( p_project_id => l_project_id
6769 ,p_budget_version_id => l_budget_version_id
6770 ,p_record_version_number => l_record_version_number
6771 ,x_return_status => p_return_status
6772 ,x_msg_count => p_msg_count
6773 ,x_msg_data => p_msg_data );
6774
6775 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6776
6777 IF(l_debug_mode='Y') THEN
6778 pa_debug.g_err_stage := 'Failed in deleting the version';
6779 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
6780 END IF;
6781 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6782 END IF;
6783
6784 --Bug 4224464: Following DMLs have been added as part of
6785 --FP M Changes for delete_draft_budget
6786 --If the budget version being deleted is a generation source
6787 --then we null out the GEN_SRC_XXX_PLAN_VERSION_ID column in
6788 --pa_proj_fp_options table and increase the record_version_no
6789 IF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST
6790 THEN
6791 UPDATE pa_proj_fp_options
6792 SET gen_src_cost_plan_version_id = NULL,
6793 record_version_number = record_version_number + 1,
6794 last_update_date = SYSDATE,
6795 last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
6796 last_update_login = FND_GLOBAL.LOGIN_ID
6797 WHERE project_id = l_project_id
6798 AND gen_src_cost_plan_version_id = l_budget_version_id;
6799 ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE
6800 THEN
6801 UPDATE pa_proj_fp_options
6802 SET gen_src_rev_plan_version_id = NULL,
6803 record_version_number = record_version_number + 1,
6804 last_update_date = SYSDATE,
6805 last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
6806 last_update_login = FND_GLOBAL.LOGIN_ID
6807 WHERE project_id = l_project_id
6808 AND gen_src_rev_plan_version_id = l_budget_version_id;
6809 ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL
6810 THEN
6811 UPDATE pa_proj_fp_options
6812 SET gen_src_all_plan_version_id = NULL,
6813 record_version_number = record_version_number + 1,
6814 last_update_date = SYSDATE,
6815 last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
6816 last_update_login = FND_GLOBAL.LOGIN_ID
6817 WHERE project_id = l_project_id
6818 AND gen_src_all_plan_version_id = l_budget_version_id;
6819 END IF;
6820
6821 --if any record had been updated in pa_proj_fp_options then
6822 --we do a dummy update in pa_budget_versions also for the
6823 --budget version that is being updated to increase the record version number
6824 IF SQL%ROWCOUNT > 0 THEN
6825 UPDATE pa_budget_versions
6826 SET record_version_number = record_version_number + 1,
6827 last_update_date = SYSDATE,
6828 last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
6829 last_update_login = FND_GLOBAL.LOGIN_ID
6830 WHERE project_id = l_project_id
6831 AND budget_version_id = l_budget_version_id;
6832 END IF;
6833
6834
6835 END IF;
6836
6837
6838 IF fnd_api.to_boolean(p_commit)
6839 THEN
6840 COMMIT;
6841 END IF;
6842
6843
6844 IF(l_debug_mode='Y') THEN
6845 pa_debug.g_err_stage := 'Exiting delete draft budget';
6846 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
6847 END IF;
6848
6849 IF ( l_debug_mode = 'Y' ) THEN
6850 pa_debug.reset_curr_function;
6851 END IF;
6852
6853 EXCEPTION
6854 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
6855
6856 p_return_status := FND_API.G_RET_STS_ERROR;
6857 l_msg_count := FND_MSG_PUB.count_msg;
6858
6859 IF l_msg_count = 1 and p_msg_data IS NULL THEN
6860 PA_INTERFACE_UTILS_PUB.get_messages
6861 (p_encoded => FND_API.G_TRUE
6862 ,p_msg_index => 1
6863 ,p_msg_count => l_msg_count
6864 ,p_msg_data => l_msg_data
6865 ,p_data => l_data
6866 ,p_msg_index_out => l_msg_index_out);
6867 p_msg_data := l_data;
6868 p_msg_count := l_msg_count;
6869 ELSE
6870 p_msg_count := l_msg_count;
6871 END IF;
6872 IF ( l_debug_mode = 'Y' ) THEN
6873 pa_debug.reset_curr_function;
6874 END IF;
6875 RETURN;
6876
6877 WHEN FND_API.G_EXC_ERROR
6878 THEN
6879
6880 ROLLBACK TO delete_draft_budget_pub;
6881
6882 p_return_status := FND_API.G_RET_STS_ERROR;
6883
6884 FND_MSG_PUB.Count_And_Get
6885 ( p_count => p_msg_count ,
6886 p_data => p_msg_data );
6887 IF ( l_debug_mode = 'Y' ) THEN
6888 pa_debug.reset_curr_function;
6889 END IF;
6890
6891 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
6892 THEN
6893
6894 ROLLBACK TO delete_draft_budget_pub;
6895
6896 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6897
6898 FND_MSG_PUB.Count_And_Get
6899 ( p_count => p_msg_count ,
6900 p_data => p_msg_data );
6901 IF ( l_debug_mode = 'Y' ) THEN
6902 pa_debug.reset_curr_function;
6903 END IF;
6904
6905 WHEN ROW_ALREADY_LOCKED
6906 THEN
6907 ROLLBACK TO delete_draft_budget_pub;
6908
6909 p_return_status := FND_API.G_RET_STS_ERROR;
6910
6911 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6912 THEN
6913 FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
6914 FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
6915 FND_MESSAGE.SET_TOKEN('TASK', '');
6916 FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', p_budget_type_code);
6917 FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
6918 FND_MESSAGE.SET_TOKEN('START_DATE', '');
6919 FND_MESSAGE.SET_TOKEN('ENTITY', 'G_BUDGET_CODE');
6920 FND_MSG_PUB.ADD;
6921 END IF;
6922
6923 FND_MSG_PUB.Count_And_Get
6924 ( p_count => p_msg_count ,
6925 p_data => p_msg_data );
6926 IF ( l_debug_mode = 'Y' ) THEN
6927 pa_debug.reset_curr_function;
6928 END IF;
6929
6930 WHEN OTHERS THEN
6931
6932 ROLLBACK TO delete_draft_budget_pub;
6933
6934 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6935
6936 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6937 THEN
6938 FND_MSG_PUB.add_exc_msg
6939 ( p_pkg_name => G_PKG_NAME
6940 , p_procedure_name => l_api_name );
6941
6942 END IF;
6943
6944 FND_MSG_PUB.Count_And_Get
6945 ( p_count => p_msg_count ,
6946 p_data => p_msg_data );
6947 IF ( l_debug_mode = 'Y' ) THEN
6948 pa_debug.reset_curr_function;
6949 END IF;
6950
6951 END delete_draft_budget;
6952
6953
6954 ----------------------------------------------------------------------------------------
6955 --Name: delete_baseline_budget
6956 --Type: Procedure
6957 --Description: This procedure can be used to delete an existing baseline budget
6958 -- version except the current original and current baseline budget
6959 -- versions.
6960 --
6961 --Called subprograms:
6962 -- FND_API.compatible_api_call
6963 -- PA_PROJECT_PVT.convert_pm_projref_to_id
6964 -- PA_PM_FUNCTION_SECURITY_PUB.check_budget_security
6965 -- PA_BUDGET_UTILS.delete_draft
6966 -- PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
6967 -- PA_FIN_PLAN_UTILS.get_version_type
6968 -- PA_FIN_PLAN_UTILS.is_orgforecast_plan
6969 -- PA_FIN_PLAN_UTILS.retrieve_record_version_number
6970 -- PA_FIN_PLAN_PVT.lock_unlock_version
6971 -- PA_FIN_PLAN_PUB.delete_version
6972 --
6973 --History:
6974 -- 05-APR-2005 Rishukla Created.
6975
6976 PROCEDURE delete_baseline_budget
6977 ( p_api_version_number IN NUMBER
6978 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
6979 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
6980 ,p_msg_count OUT NOCOPY NUMBER
6981 ,p_msg_data OUT NOCOPY VARCHAR2
6982 ,p_return_status OUT NOCOPY VARCHAR2
6983 ,p_pm_product_code IN pa_projects_all.pm_product_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6984 ,p_pa_project_id IN pa_projects_all.project_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6985 ,p_pm_project_reference IN pa_projects_all.pm_project_reference%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6986 ,p_budget_type_code IN pa_budget_versions.budget_type_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6987 ,p_fin_plan_type_id IN pa_fin_plan_types_b.fin_plan_type_id%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6988 ,p_fin_plan_type_name IN pa_fin_plan_types_vl.name%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6989 ,p_version_type IN pa_budget_versions.version_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6990 ,p_version_number IN pa_budget_versions.version_number%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6991 )
6992
6993 IS
6994
6995 --This cursor is used to check if a valid combination of
6996 --project_id, budget_type_code and version_number has
6997 --been passed to this api for a baseline budget
6998 --version. If yes, then current and current_original
6999 --flags and budget_version_id are retrieved
7000 CURSOR l_budget_version_no_csr
7001 ( p_project_id NUMBER
7002 , p_budget_type_code VARCHAR2
7003 , p_version_number NUMBER )
7004 IS
7005 SELECT budget_version_id
7006 ,current_flag
7007 ,current_original_flag
7008 FROM pa_budget_versions
7009 WHERE project_id = p_project_id
7010 AND budget_type_code = p_budget_type_code
7011 AND version_number = p_version_number
7012 AND budget_status_code = 'B';
7013
7014 l_budget_version_no_rec l_budget_version_no_csr%ROWTYPE;
7015
7016
7017 --This cursor is used to check if a valid combination of
7018 --project_id, fin_plan_type_id, version_type and version_number
7019 --has been passed to this api for a baseline budget
7020 --version. If yes, then budget_version_id is retrieved
7021 CURSOR l_finplan_version_no_csr
7022 ( p_project_id NUMBER
7023 , p_fin_plan_type_id NUMBER
7024 , p_version_type VARCHAR2
7025 , p_version_number NUMBER )
7026 IS
7027 SELECT budget_version_id
7028 FROM pa_budget_versions
7029 WHERE project_id = p_project_id
7030 AND fin_plan_type_id = p_fin_plan_type_id
7031 AND version_type = p_version_type
7032 AND version_number = p_version_number
7033 AND ci_id IS NULL --Added for better readability (Venketesh's suggestion)
7034 AND budget_status_code = 'B';
7035
7036 --This cursor is used to verify a budget_type_code
7037 CURSOR l_budget_type_csr
7038 ( p_budget_type_code VARCHAR2 )
7039 IS
7040 SELECT 1
7041 FROM pa_budget_types
7042 WHERE budget_type_code = p_budget_type_code;
7043
7044 --This cursor is used to check if a fin_plan_type_id is
7045 --used to store workplan data
7046 CURSOR l_use_for_wp_csr
7047 ( p_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE)
7048 IS
7049 SELECT 1
7050 FROM pa_fin_plan_types_b
7051 WHERE fin_plan_type_id = p_fin_plan_type_id
7052 AND use_for_workplan_flag = 'Y';
7053
7054 --needed to get the field values associated to a AMG message
7055 CURSOR l_amg_project_csr
7056 (p_pa_project_id pa_projects.project_id%type)
7057 IS
7058 SELECT segment1
7059 FROM pa_projects p
7060 WHERE p.project_id = p_pa_project_id;
7061
7062 l_amg_segment1 VARCHAR2(25);
7063
7064 l_api_name CONSTANT VARCHAR2(30) := 'DELETE_BASELINE_BUDGET';
7065 l_module_name CONSTANT VARCHAR2(100) := g_module_name || '.DELETE_BASELINE_BUDGET';
7066
7067 l_return_status VARCHAR2(1);
7068 l_err_code NUMBER;
7069 l_err_stage VARCHAR2(120);
7070 l_err_stack VARCHAR2(630);
7071 l_dummy NUMBER := 0;
7072
7073 l_msg_count NUMBER := 0;
7074 l_msg_data VARCHAR2(2000);
7075 l_msg_index_out NUMBER;
7076 l_data VARCHAR2(2000);
7077
7078 l_any_error_occurred_flag VARCHAR2(1):='N';
7079
7080 l_debug_mode VARCHAR2(1);
7081 l_debug_level2 CONSTANT NUMBER := 2;
7082 l_debug_level3 CONSTANT NUMBER := 3;
7083 l_debug_level4 CONSTANT NUMBER := 4;
7084 l_debug_level5 CONSTANT NUMBER := 5;
7085
7086 l_security_ret_code VARCHAR2(1);
7087 l_function_name VARCHAR2(80);
7088 l_record_version_number pa_budget_versions.record_version_number%TYPE;
7089
7090 l_project_id NUMBER;
7091 l_budget_type_code pa_budget_versions.budget_type_code%TYPE;
7092 l_budget_version_id NUMBER;
7093 l_fin_plan_type_id NUMBER;
7094 l_fin_plan_type_name pa_fin_plan_types_vl.name%TYPE;
7095 l_version_type pa_budget_versions.version_type%TYPE;
7096 l_version_number NUMBER;
7097 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
7098
7099
7100 BEGIN
7101
7102 --Standard begin of API savepoint
7103
7104 SAVEPOINT delete_baseline_budget_pub;
7105
7106 p_msg_count := 0;
7107 p_return_status := FND_API.G_RET_STS_SUCCESS;
7108 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
7109
7110 IF ( l_debug_mode = 'Y' )
7111 THEN
7112 pa_debug.set_curr_function( p_function => 'delete_baseline_budget',
7113 p_debug_mode => l_debug_mode );
7114 END IF;
7115
7116 IF ( l_debug_mode = 'Y' )
7117 THEN
7118 pa_debug.g_err_stage:='Entering ' || l_api_name;
7119 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
7120 END IF;
7121
7122 --Initialize the message table if requested.
7123
7124 IF FND_API.to_boolean( p_init_msg_list )
7125 THEN
7126 FND_MSG_PUB.initialize;
7127 END IF;
7128
7129 --Standard call to check for call compatibility.
7130
7131 IF NOT FND_API.compatible_api_call ( g_api_version_number ,
7132 p_api_version_number ,
7133 l_api_name ,
7134 G_PKG_NAME )
7135 THEN
7136 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7137 END IF;
7138
7139 --Convert following IN parameters from G_PA_MISS_XXX to null
7140
7141 IF p_pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
7142 l_project_id := NULL;
7143 ELSE
7144 l_project_id := p_pa_project_id;
7145 END IF;
7146
7147 IF p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
7148 l_budget_type_code := NULL;
7149 ELSE
7150 l_budget_type_code := p_budget_type_code;
7151 END IF;
7152
7153 IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
7154 l_fin_plan_type_id := NULL;
7155 ELSE
7156 l_fin_plan_type_id := p_fin_plan_type_id;
7157 END IF;
7158
7159 IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
7160 l_fin_plan_type_name := NULL;
7161 ELSE
7162 l_fin_plan_type_name := p_fin_plan_type_name;
7163 END IF;
7164
7165 IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
7166 l_version_type := NULL;
7167 ELSE
7168 l_version_type := p_version_type;
7169 END IF;
7170
7171 IF p_version_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
7172 l_version_number := NULL;
7173 ELSE
7174 l_version_number := p_version_number;
7175 END IF;
7176
7177 --Both Budget Type Code and Fin Plan Type Id should not be null simultaneously
7178
7179 IF (l_budget_type_code IS NULL AND l_fin_plan_type_name IS NULL AND l_fin_plan_type_id IS NULL)
7180 THEN
7181
7182 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7183 PA_UTILS.add_message
7184 (p_app_short_name => 'PA',
7185 p_msg_name => 'PA_BUDGET_FP_BOTH_MISSING');
7186 END IF;
7187
7188 IF l_debug_mode = 'Y' THEN
7189 pa_debug.g_err_stage:= 'Fin Plan type info and budget type info are missing';
7190 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7191 END IF;
7192
7193 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7194
7195 END IF;
7196
7197 --Both Budget Type Code and Fin Plan Type Id should not be not null simultaneously
7198
7199 IF ((l_budget_type_code IS NOT NULL) AND
7200 (l_fin_plan_type_name IS NOT NULL OR l_fin_plan_type_id IS NOT NULL ))
7201 THEN
7202
7203 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7204 PA_UTILS.add_message
7205 (p_app_short_name => 'PA',
7206 p_msg_name => 'PA_BUDGET_FP_BOTH_NOT_NULL');
7207 END IF;
7208
7209 IF l_debug_mode = 'Y' THEN
7210 pa_debug.g_err_stage:= 'Fin Plan type info and budget type info both are provided';
7211 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7212 END IF;
7213
7214 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7215
7216 END IF;
7217
7218
7219 --product_code is mandatory
7220 IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7221 OR p_pm_product_code IS NULL
7222 THEN
7223 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7224 --This function checks if the message being written to the message table
7225 --is higher or equal to the message level threshold.
7226 THEN
7227 PA_UTILS.add_message
7228 (p_app_short_name => 'PA',
7229 p_msg_name => 'PA_PRODUCT_CODE_IS_MISSING_AMG');
7230 END IF;
7231 IF l_debug_mode = 'Y' THEN
7232 pa_debug.g_err_stage := 'Product code is missing' ;
7233 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7234 END IF;
7235
7236 p_return_status := FND_API.G_RET_STS_ERROR;
7237 l_any_error_occurred_flag:='Y' ;
7238
7239 ELSE --p_pm_product_code is not null
7240
7241 l_pm_product_code :='Z';
7242 OPEN p_product_code_csr (p_pm_product_code);
7243 FETCH p_product_code_csr INTO l_pm_product_code;
7244 CLOSE p_product_code_csr;
7245
7246 IF l_pm_product_code <> 'X'
7247 THEN
7248
7249 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7250 THEN
7251 PA_UTILS.add_message
7252 (p_app_short_name => 'PA',
7253 p_msg_name => 'PA_PRODUCT_CODE_IS_INVALID_AMG');
7254 END IF;
7255 p_return_status := FND_API.G_RET_STS_ERROR;
7256 l_any_error_occurred_flag:='Y';
7257 IF l_debug_mode = 'Y' THEN
7258 pa_debug.g_err_stage := 'Product code is invalid' ;
7259 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7260 END IF;
7261
7262 END IF; --l_pm_product_code <> 'X'
7263
7264 END IF; --p_pm_product_code IS NULL
7265
7266
7267 --p_version_number is mandatory
7268 IF l_version_number IS NULL
7269 THEN
7270 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7271 THEN
7272 PA_UTILS.add_message
7273 (p_app_short_name => 'PA',
7274 p_msg_name => 'PA_FP_VERSION_NUMBER_REQD');
7275 END IF;
7276 IF l_debug_mode = 'Y' THEN
7277 pa_debug.g_err_stage := 'Version Number is missing' ;
7278 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7279 END IF;
7280
7281 p_return_status := FND_API.G_RET_STS_ERROR;
7282 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7283
7284 END IF; --l_version_number IS NULL
7285
7286
7287 --convert pm_project_reference to id
7288 PA_PROJECT_PVT.convert_pm_projref_to_id (
7289 p_pm_project_reference => p_pm_project_reference,
7290 p_pa_project_id => l_project_id,
7291 p_out_project_id => l_project_id,
7292 p_return_status => l_return_status );
7293
7294 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7295 THEN
7296 IF l_debug_mode = 'Y' THEN
7297 pa_debug.g_err_stage := 'Unexpected error while getting project id' ;
7298 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7299 END IF;
7300
7301 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7302
7303 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7304 THEN
7305 IF l_debug_mode = 'Y' THEN
7306 pa_debug.g_err_stage := 'Error while getting project id' ;
7307 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7308 END IF;
7309
7310 RAISE FND_API.G_EXC_ERROR;
7311
7312 END IF;
7313
7314 -- Get segment1 for AMG messages
7315 OPEN l_amg_project_csr( l_project_id );
7316 FETCH l_amg_project_csr INTO l_amg_segment1;
7317 CLOSE l_amg_project_csr;
7318
7319
7320 --Do the processing required for budget model
7321 IF (l_budget_type_code IS NOT NULL) THEN
7322
7323 --Verify the budget type code passed
7324 OPEN l_budget_type_csr( l_budget_type_code );
7325 FETCH l_budget_type_csr INTO l_dummy;
7326
7327 IF l_budget_type_csr%NOTFOUND
7328 THEN
7329 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7330 THEN
7331 PA_INTERFACE_UTILS_PUB.map_new_amg_msg
7332 ( p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
7333 ,p_msg_attribute => 'CHANGE'
7334 ,p_resize_flag => 'N'
7335 ,p_msg_context => 'BUDG'
7336 ,p_attribute1 => l_amg_segment1
7337 ,p_attribute2 => ''
7338 ,p_attribute3 => l_budget_type_code
7339 ,p_attribute4 => ''
7340 ,p_attribute5 => '');
7341 END IF;
7342 IF l_debug_mode = 'Y' THEN
7343 pa_debug.g_err_stage := 'Budget Type is invalid' ;
7344 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7345 END IF;
7346
7347 CLOSE l_budget_type_csr;
7348 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7349
7350 END IF; --l_budget_type_csr%NOTFOUND
7351 CLOSE l_budget_type_csr;
7352
7353 --Verify the version number passed and derive budget_version_id if it is valid
7354 OPEN l_budget_version_no_csr
7355 (p_project_id => l_project_id
7356 ,p_budget_type_code => l_budget_type_code
7357 ,p_version_number => l_version_number);
7358 FETCH l_budget_version_no_csr INTO l_budget_version_no_rec;
7359 CLOSE l_budget_version_no_csr;
7360
7361 IF (l_budget_version_no_rec.budget_version_id IS NULL)
7362 THEN
7363 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7364 THEN
7365 PA_UTILS.add_message
7366 (p_app_short_name => 'PA',
7367 p_msg_name => 'PA_FP_VERSION_NO_IS_INVALID');
7368 END IF;
7369 IF l_debug_mode = 'Y' THEN
7370 pa_debug.g_err_stage := 'Budget version number is invalid' ;
7371 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7372 END IF;
7373
7374 p_return_status := FND_API.G_RET_STS_ERROR;
7375 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7376
7377 ELSE --l_budget_version_no_rec has been fetched
7378
7379 IF (l_budget_version_no_rec.current_flag = 'Y'
7380 OR l_budget_version_no_rec.current_original_flag = 'Y') THEN
7381 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
7382 PA_UTILS.add_message
7383 (p_app_short_name => 'PA',
7384 p_msg_name => 'PA_FP_DEL_CUR_OR_ORIG_BASELINE');
7385 END IF;
7386
7387 IF l_debug_mode = 'Y' THEN
7388 pa_debug.g_err_stage := 'baseline versions marked as current' ||
7389 'or current original can not be deleted';
7390 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7391 END IF;
7392
7393 p_return_status := FND_API.G_RET_STS_ERROR;
7394 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7395 END IF;
7396 END IF; --l_budget_version_no_rec.budget_version_id IS NULL
7397
7398 --Check for the security. We select the function security based
7399 --on whether the budget type is Approved or not.
7400 IF (l_budget_type_code = 'AC' OR l_budget_type_code = 'AR')
7401 THEN
7402 --Approved Budget (Cost or Revenue)
7403 l_function_name:='PA_FP_DEL_BSLN_APPRVD_BDGT';
7404 ELSE --for baseline budgets the only other values should be 'FR' or user defined
7405 --Budget (not approved cost or revenue)
7406 l_function_name:='PA_FP_DEL_BSLN_BDGT';
7407 END IF;
7408
7409 PA_PM_FUNCTION_SECURITY_PUB.check_budget_security (
7410 p_api_version_number => p_api_version_number
7411 ,p_project_id => l_project_id
7412 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET
7413 ,p_function_name => l_function_name
7414 ,p_version_type => null
7415 ,x_return_status => p_return_status
7416 ,x_ret_code => l_security_ret_code );
7417
7418 -- the above API adds the error message to stack. Hence the message is not added here.
7419 -- Also, as security check is important further validations are not done in case this
7420 -- validation fails.
7421 IF (p_return_status<>FND_API.G_RET_STS_SUCCESS OR l_security_ret_code = 'N')
7422 THEN
7423 IF l_debug_mode = 'Y' THEN
7424 pa_debug.g_err_stage:= 'Security API Failed';
7425 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7426 END IF;
7427
7428 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7429 END IF;
7430
7431
7432 --Check if budgetary control is enabled for this project and budget version
7433 --If a record is present for this budget version in PA_BC_BALANCES table
7434 --then we do not proceed with delete.
7435 IF ( PA_BUDGET_PVT.is_bc_enabled_for_budget(l_budget_version_no_rec.budget_version_id) )
7436 THEN
7437 IF(l_debug_mode='Y') THEN
7438 pa_debug.g_err_stage := 'Cannnot delete budget version - '
7439 || 'budgetary control is enabled';
7440 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7441 END IF;
7442
7443 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7444 THEN
7445 PA_UTILS.ADD_MESSAGE(
7446 p_app_short_name => 'PA'
7447 ,p_msg_name => 'PA_FP_DEL_BC_ENABLED_BV_AMG'
7448 ,p_token1 => 'PROJECT'
7449 ,p_value1 => l_amg_segment1
7450 ,p_token2 => 'BUDGET_TYPE'
7451 ,p_value2 => l_budget_type_code
7452 ,p_token3 => 'BUDGET_VERSION_ID'
7453 ,p_value3 => l_budget_version_no_rec.budget_version_id);
7454 END IF;
7455
7456 RAISE FND_API.G_EXC_ERROR;
7457
7458 END IF;--budgetary control enabled check
7459
7460
7461 --Stop Further processing if any errors are reported
7462 IF(l_any_error_occurred_flag='Y') THEN
7463 IF(l_debug_mode='Y') THEN
7464 pa_debug.g_err_stage := 'About to display all the messages';
7465 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7466 END IF;
7467 p_return_status := FND_API.G_RET_STS_ERROR;
7468 l_any_error_occurred_flag := 'Y';
7469 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7470 END IF;
7471
7472 --Calling delete API
7473 PA_BUDGET_UTILS.delete_draft( x_budget_version_id => l_budget_version_no_rec.budget_version_id
7474 ,x_err_code => l_err_code
7475 ,x_err_stage => l_err_stage
7476 ,x_err_stack => l_err_stack );
7477
7478 IF l_err_code > 0 THEN
7479
7480 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7481 THEN
7482 IF NOT PA_PROJECT_PVT.check_valid_message(l_err_stage)
7483 THEN
7484 IF(l_debug_mode='Y') THEN
7485 pa_debug.g_err_stage := 'PA_BUDGET_UTILS.DELETE_DRAFT falied';
7486 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7487 END IF;
7488 PA_INTERFACE_UTILS_PUB.map_new_amg_msg
7489 ( p_old_message_code => 'PA_DELETE_DRAFT_FAILED'
7490 ,p_msg_attribute => 'CHANGE'
7491 ,p_resize_flag => 'N'
7492 ,p_msg_context => 'BUDG'
7493 ,p_attribute1 => l_amg_segment1
7494 ,p_attribute2 => ''
7495 ,p_attribute3 => l_budget_type_code
7496 ,p_attribute4 => ''
7497 ,p_attribute5 => '');
7498
7499 ELSE --valid error message has been returned by Delete_Draft
7500
7501 IF(l_debug_mode='Y') THEN
7502 pa_debug.g_err_stage := 'Error in Delete_draft api';
7503 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7504 END IF;
7505 PA_INTERFACE_UTILS_PUB.map_new_amg_msg
7506 ( p_old_message_code => l_err_stage
7507 ,p_msg_attribute => 'CHANGE'
7508 ,p_resize_flag => 'N'
7509 ,p_msg_context => 'BUDG'
7510 ,p_attribute1 => l_amg_segment1
7511 ,p_attribute2 => ''
7512 ,p_attribute3 => l_budget_type_code
7513 ,p_attribute4 => ''
7514 ,p_attribute5 => '');
7515 END IF;
7516
7517 END IF; --FND_MSG_PUB.check_msg_level
7518 RAISE FND_API.G_EXC_ERROR;
7519
7520 ELSIF l_err_code < 0 THEN
7521
7522 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7523 THEN
7524 IF(l_debug_mode='Y') THEN
7525 pa_debug.g_err_stage := 'Unexpected Error in Delete_draft api';
7526 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7527 END IF;
7528
7529 FND_MSG_PUB.add_exc_msg
7530 ( p_pkg_name => 'PA_BUDGET_UTILS'
7531 , p_procedure_name => 'DELETE_DRAFT'
7532 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
7533 END IF; --FND_MSG_PUB.check_msg_level
7534
7535 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7536
7537 END IF; --l_err_code > 0
7538
7539 ELSE --finplan model
7540
7541 --validate the plan type passed
7542 PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
7543 ( p_fin_plan_type_id => l_fin_plan_type_id
7544 ,p_fin_plan_type_name => l_fin_plan_type_name
7545 ,x_fin_plan_type_id => l_fin_plan_type_id
7546 ,x_return_status => p_return_status
7547 ,x_msg_count => p_msg_count
7548 ,x_msg_data => p_msg_data);
7549 --Throw the error if the above API is not successfully executed
7550 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7551 IF l_debug_mode = 'Y' THEN
7552 pa_debug.g_err_stage := 'Cannot get the value of Fin Plan Type Id' ;
7553 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7554 END IF;
7555 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7556
7557 END IF;
7558
7559 --check if the fin_plan_type_id is used to store workplan data
7560 --first reset the l_dummy value
7561 l_dummy := 0;
7562 OPEN l_use_for_wp_csr( l_fin_plan_type_id );
7563 FETCH l_use_for_wp_csr INTO l_dummy;
7564 CLOSE l_use_for_wp_csr;
7565
7566 IF l_dummy = 1
7567 THEN
7568 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7569 THEN
7570 PA_UTILS.add_message
7571 (p_app_short_name => 'PA',
7572 p_msg_name => 'PA_FP_CANT_DEL_WP_DATA');
7573 END IF;
7574 IF l_debug_mode = 'Y' THEN
7575 pa_debug.g_err_stage := 'Fin Plan Type Id is used for WP' ;
7576 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7577 END IF;
7578
7579 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7580
7581 END IF;
7582
7583 --Validate / get the version type
7584 PA_FIN_PLAN_UTILS.get_version_type
7585 ( p_project_id => l_project_id
7586 ,p_fin_plan_type_id => l_fin_plan_type_id
7587 ,px_version_type => l_version_type
7588 ,x_return_status => p_return_status
7589 ,x_msg_count => p_msg_count
7590 ,x_msg_data => p_msg_data);
7591
7592 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7593 IF l_debug_mode = 'Y' THEN
7594 pa_debug.g_err_stage := 'Failed in get_Version_type' ;
7595 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7596 END IF;
7597 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7598 END IF;
7599
7600 --Check for the security
7601 l_function_name:='PA_PM_DELETE_BASELINE_BUDGET';
7602 PA_PM_FUNCTION_SECURITY_PUB.check_budget_security (
7603 p_api_version_number => p_api_version_number
7604 ,p_project_id => l_project_id
7605 ,p_fin_plan_type_id => l_fin_plan_type_id
7606 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN
7607 ,p_function_name => l_function_name
7608 ,p_version_type => l_version_type
7609 ,x_return_status => p_return_status
7610 ,x_ret_code => l_security_ret_code );
7611
7612 IF (p_return_status <>FND_API.G_RET_STS_SUCCESS OR
7613 l_security_ret_code='N') THEN
7614 IF l_debug_mode = 'Y' THEN
7615 pa_debug.g_err_stage := 'Security API failed' ;
7616 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7617 END IF;
7618 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7619 END IF;
7620
7621 --Verify the version number passed and derive budget_version_id if it is valid
7622 OPEN l_finplan_version_no_csr
7623 (p_project_id => l_project_id
7624 ,p_fin_plan_type_id => l_fin_plan_type_id
7625 ,p_version_type => l_version_type
7626 ,p_version_number => l_version_number);
7627 FETCH l_finplan_version_no_csr INTO l_budget_version_id;
7628 CLOSE l_finplan_version_no_csr;
7629
7630 IF (l_budget_version_id IS NULL)
7631 THEN
7632 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7633 THEN
7634 PA_UTILS.add_message
7635 (p_app_short_name => 'PA',
7636 p_msg_name => 'PA_FP_VERSION_NO_IS_INVALID');
7637 END IF;
7638 IF l_debug_mode = 'Y' THEN
7639 pa_debug.g_err_stage := 'Budget version number is invalid' ;
7640 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7641 END IF;
7642
7643 p_return_status := FND_API.G_RET_STS_ERROR;
7644 l_any_error_occurred_flag:='Y' ;
7645 END IF; --l_budget_version_id IS NULL
7646
7647 --if the budget version belongs to an org forecast project then throw an error
7648 IF (PA_FIN_PLAN_UTILS.is_orgforecast_plan(l_budget_version_id) = 'Y')
7649 THEN
7650 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7651 THEN
7652 PA_UTILS.add_message
7653 (p_app_short_name => 'PA',
7654 p_msg_name => 'PA_FP_CANT_DEL_ORG_FCST_PLAN');
7655 END IF;
7656 IF l_debug_mode = 'Y' THEN
7657 pa_debug.g_err_stage := 'Cannot delete baseline budgets attached' ||
7658 'to an organisation forecasting project';
7659 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7660 END IF;
7661
7662 p_return_status := FND_API.G_RET_STS_ERROR;
7663 l_any_error_occurred_flag:='Y' ;
7664 END IF; --org_forecast = 'Y'
7665
7666 --Stop Further processing if any errors are reported
7667 IF(l_any_error_occurred_flag='Y') THEN
7668 IF(l_debug_mode='Y') THEN
7669 pa_debug.g_err_stage := 'About to display all the messages';
7670 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7671 END IF;
7672 p_return_status := FND_API.G_RET_STS_ERROR;
7673 l_any_error_occurred_flag := 'Y';
7674 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7675 END IF;
7676
7677 --Delete the version
7678 l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
7679 (p_budget_version_id => l_budget_version_id);
7680 PA_FIN_PLAN_PUB.delete_version
7681 ( p_project_id => l_project_id
7682 ,p_budget_version_id => l_budget_version_id
7683 ,p_record_version_number => l_record_version_number
7684 ,x_return_status => p_return_status
7685 ,x_msg_count => p_msg_count
7686 ,x_msg_data => p_msg_data );
7687
7688 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7689
7690 IF(l_debug_mode='Y') THEN
7691 pa_debug.g_err_stage := 'Failed in deleting the version';
7692 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7693 END IF;
7694 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7695 END IF;
7696
7697 --If the budget version being deleted is a generation source
7698 --then we null out the GEN_SRC_XXX_PLAN_VERSION_ID column in
7699 --pa_proj_fp_options table and increase the record_version_no
7700 IF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST
7701 THEN
7702 UPDATE pa_proj_fp_options
7703 SET gen_src_cost_plan_version_id = NULL,
7704 record_version_number = record_version_number + 1,
7705 last_update_date = SYSDATE,
7706 last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
7707 last_update_login = FND_GLOBAL.LOGIN_ID
7708 WHERE project_id = l_project_id
7709 AND gen_src_cost_plan_version_id = l_budget_version_id;
7710 ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE
7711 THEN
7712 UPDATE pa_proj_fp_options
7713 SET gen_src_rev_plan_version_id = NULL,
7714 record_version_number = record_version_number + 1,
7715 last_update_date = SYSDATE,
7716 last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
7717 last_update_login = FND_GLOBAL.LOGIN_ID
7718 WHERE project_id = l_project_id
7719 AND gen_src_rev_plan_version_id = l_budget_version_id;
7720 ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL
7721 THEN
7722 UPDATE pa_proj_fp_options
7723 SET gen_src_all_plan_version_id = NULL,
7724 record_version_number = record_version_number + 1,
7725 last_update_date = SYSDATE,
7726 last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
7727 last_update_login = FND_GLOBAL.LOGIN_ID
7728 WHERE project_id = l_project_id
7729 AND gen_src_all_plan_version_id = l_budget_version_id;
7730 END IF;
7731
7732 --if any record had been updated in pa_proj_fp_options then
7733 --we do a dummy update in pa_budget_versions also for the
7734 --budget version that is being updated to increase the record version number
7735 IF SQL%ROWCOUNT > 0 THEN
7736 UPDATE pa_budget_versions
7737 SET record_version_number = record_version_number + 1,
7738 last_update_date = SYSDATE,
7739 last_updated_by = to_number(nvl(fnd_profile.value('USER_ID'),fnd_global.user_id)),
7740 last_update_login = FND_GLOBAL.LOGIN_ID
7741 WHERE project_id = l_project_id
7742 AND budget_version_id = l_budget_version_id;
7743 END IF;
7744
7745 End IF; --l_budget_type_code IS NOT NULL
7746
7747
7748 IF fnd_api.to_boolean(p_commit)
7749 THEN
7750 COMMIT;
7751 END IF;
7752
7753 IF(l_debug_mode='Y') THEN
7754 pa_debug.g_err_stage := 'Exiting delete baseline budget version';
7755 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
7756 END IF;
7757
7758 IF ( l_debug_mode = 'Y' ) THEN
7759 pa_debug.reset_curr_function;
7760 END IF;
7761
7762 EXCEPTION
7763 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc
7764 THEN
7765
7766 p_return_status := FND_API.G_RET_STS_ERROR;
7767 l_msg_count := FND_MSG_PUB.count_msg;
7768
7769 IF l_msg_count = 1 and p_msg_data IS NULL THEN
7770 PA_INTERFACE_UTILS_PUB.get_messages
7771 (p_encoded => FND_API.G_TRUE
7772 ,p_msg_index => 1
7773 ,p_msg_count => l_msg_count
7774 ,p_msg_data => l_msg_data
7775 ,p_data => l_data
7776 ,p_msg_index_out => l_msg_index_out);
7777 p_msg_data := l_data;
7778 p_msg_count := l_msg_count;
7779 ELSE
7780 p_msg_count := l_msg_count;
7781 END IF;
7782
7783 IF ( l_debug_mode = 'Y' ) THEN
7784 pa_debug.reset_curr_function;
7785 END IF;
7786
7787 RETURN;
7788
7789 WHEN FND_API.G_EXC_ERROR
7790 THEN
7791
7792 ROLLBACK TO delete_baseline_budget_pub;
7793
7794 p_return_status := FND_API.G_RET_STS_ERROR;
7795
7796 FND_MSG_PUB.count_and_get
7797 ( p_count => p_msg_count ,
7798 p_data => p_msg_data );
7799
7800 IF ( l_debug_mode = 'Y' ) THEN
7801 pa_debug.reset_curr_function;
7802 END IF;
7803
7804 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
7805 THEN
7806
7807 ROLLBACK TO delete_baseline_budget_pub;
7808
7809 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7810
7811 FND_MSG_PUB.count_and_get
7812 ( p_count => p_msg_count ,
7813 p_data => p_msg_data );
7814
7815 IF ( l_debug_mode = 'Y' ) THEN
7816 pa_debug.reset_curr_function;
7817 END IF;
7818
7819 WHEN ROW_ALREADY_LOCKED
7820 THEN
7821 ROLLBACK TO delete_baseline_budget_pub;
7822
7823 p_return_status := FND_API.G_RET_STS_ERROR;
7824
7825 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7826 THEN
7827 FND_MESSAGE.set_name('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
7828 FND_MESSAGE.set_token('PROJECT', l_amg_segment1);
7829 FND_MESSAGE.set_token('TASK', '');
7830 FND_MESSAGE.set_token('BUDGET_TYPE', p_budget_type_code);
7831 FND_MESSAGE.set_token('SOURCE_NAME', '');
7832 FND_MESSAGE.set_token('START_DATE', '');
7833 FND_MESSAGE.set_token('ENTITY', 'G_BUDGET_CODE');
7834 FND_MSG_PUB.add;
7835 END IF;
7836
7837 FND_MSG_PUB.count_and_get
7838 ( p_count => p_msg_count ,
7839 p_data => p_msg_data );
7840
7841 IF ( l_debug_mode = 'Y' ) THEN
7842 pa_debug.reset_curr_function;
7843 END IF;
7844
7845 WHEN OTHERS THEN
7846
7847 ROLLBACK TO delete_baseline_budget_pub;
7848
7849 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7850
7851 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7852 THEN
7853 FND_MSG_PUB.add_exc_msg
7854 ( p_pkg_name => G_PKG_NAME
7855 , p_procedure_name => l_api_name );
7856
7857 END IF;
7858
7859 FND_MSG_PUB.count_and_get
7860 ( p_count => p_msg_count ,
7861 p_data => p_msg_data );
7862
7863 IF ( l_debug_mode = 'Y' ) THEN
7864 pa_debug.reset_curr_function;
7865 END IF;
7866
7867 END delete_baseline_budget;
7868
7869
7870
7871 ----------------------------------------------------------------------------------------
7872 --Name: delete_budget_line
7873 --Type: Procedure
7874 --Description: This procedure can be used to delete a budget_line of a draft budget
7875 --
7876 --
7877 --Called subprograms:
7878 --
7879 --
7880 --
7881 --History:
7882 -- 07-OCT-1996 L. de Werker Created
7883 -- 28-NOV-1996 L. de Werker Add parameter p_period_name and functionality to get
7884 -- start_date from p_period_name
7885 -- 07-DEC-1996 L. de Werker Added locking mechanism
7886 -- 16-MAY-2005 Ritesh Shukla Modified this procedure for FP.M
7887 -- 16-Apr-2007 rthumma Bug# 5998035 : Added call to PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions API
7888 -- for deleting the data from pa_resource_assignments
7889 -- 29-Feb-2008 paljain Bug# 6854131 : Removed second call to close cursor l_budget_line_rowid_csr
7890 --
7891 PROCEDURE delete_budget_line
7892 ( p_api_version_number IN NUMBER
7893 ,p_commit IN VARCHAR2
7894 ,p_init_msg_list IN VARCHAR2
7895 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7896 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7897 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7898 ,p_pm_product_code IN VARCHAR2
7899 ,p_pa_project_id IN NUMBER
7900 ,p_pm_project_reference IN VARCHAR2
7901 ,p_budget_type_code IN VARCHAR2
7902 ,p_pa_task_id IN NUMBER
7903 ,p_pm_task_reference IN VARCHAR2
7904 ,p_resource_alias IN VARCHAR2
7905 ,p_resource_list_member_id IN NUMBER
7906 ,p_start_date IN DATE
7907 ,p_period_name IN VARCHAR2
7908 --Parameters added for FP.M
7909 ,p_fin_plan_type_id IN NUMBER
7910 ,p_fin_plan_type_name IN VARCHAR2
7911 ,p_version_type IN VARCHAR2
7912 ,p_version_number IN NUMBER
7913 ,p_currency_code IN VARCHAR2 )
7914
7915 IS
7916
7917
7918 CURSOR l_resource_assignment_csr
7919 (p_budget_version_id NUMBER
7920 ,p_task_id NUMBER
7921 ,p_member_id NUMBER )
7922 IS
7923 SELECT resource_assignment_id
7924 FROM pa_resource_assignments
7925 WHERE budget_version_id = p_budget_version_id
7926 AND task_id = p_task_id
7927 AND resource_list_member_id = p_member_id;
7928
7929 CURSOR l_budget_line_rowid_csr
7930 ( p_resource_assignment_id NUMBER
7931 ,p_budget_start_date DATE
7932 ,p_currency_code VARCHAR2)
7933 IS
7934 SELECT rowidtochar(rowid)
7935 ,txn_currency_code
7936 ,start_date
7937 ,end_date
7938 FROM pa_budget_lines
7939 WHERE resource_assignment_id = p_resource_assignment_id
7940 AND trunc(start_date) = nvl(trunc(p_budget_start_date),trunc(start_date))
7941 AND txn_currency_code = nvl(p_currency_code,txn_currency_code);
7942
7943 -- FP.M Data Model Logic
7944
7945 CURSOR l_uncategorized_list_csr
7946 IS
7947 SELECT prlm.resource_list_member_id
7948 FROM pa_resource_lists prl
7949 , pa_resource_list_members prlm
7950 WHERE prl.resource_list_id = prlm.resource_list_id
7951 AND prl.uncategorized_flag='Y'
7952 and prlm.resource_class_code = 'FINANCIAL_ELEMENTS';
7953
7954 -- End: FP.M Resource LIst Data Model Impact Changes ------
7955
7956 -- needed to get the budget_start_date of a period
7957 CURSOR l_budget_periods_csr
7958 (p_period_name VARCHAR2
7959 ,p_time_phased_type_code VARCHAR2 )
7960 IS
7961 SELECT trunc(period_start_date)
7962 FROM pa_budget_periods_v
7963 WHERE period_name = p_period_name
7964 AND period_type_code = p_time_phased_type_code;
7965
7966 --needed to validate to given start_date
7967 CURSOR l_start_date_csr
7968 (p_start_date DATE
7969 ,p_time_phased_type_code VARCHAR2 )
7970 IS
7971 SELECT 1
7972 FROM pa_budget_periods_v
7973 WHERE trunc(period_start_date) = trunc(p_start_date)
7974 AND period_type_code = p_time_phased_type_code;
7975
7976 --needed to lock the budget line row
7977 CURSOR l_lock_budget_line_csr( p_budget_line_rowid VARCHAR2)
7978 IS
7979 SELECT 'x'
7980 FROM pa_budget_lines
7981 WHERE rowid = p_budget_line_rowid
7982 FOR UPDATE NOWAIT;
7983
7984 --This cursor is used to get the approved rev plan type flag of the plan type
7985 CURSOR l_approved_revenue_flag_csr
7986 ( c_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE
7987 ,c_project_id pa_projects_all.project_id%TYPE)
7988 IS
7989 SELECT approved_rev_plan_type_flag
7990 FROM pa_proj_fp_options
7991 WHERE project_id=c_project_id
7992 AND fin_plan_type_id=c_fin_plan_type_id
7993 AND fin_plan_option_level_code=PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE;
7994
7995 l_app_rev_plan_type_flag VARCHAR2(1);
7996
7997 --This cursor is used to compare a currency code with pfc
7998 CURSOR l_proj_func_currency_csr
7999 ( c_project_id NUMBER
8000 ,c_currency_code VARCHAR2)
8001 IS
8002 SELECT 1
8003 FROM pa_projects_all
8004 WHERE project_id = c_project_id
8005 AND projfunc_currency_code = c_currency_code;
8006
8007 --This cursor is used to fetch the txn currencies of the plan version
8008 --and validate currency_code against them.
8009 CURSOR l_plan_ver_txn_curr_csr
8010 ( c_fin_plan_version_id NUMBER
8011 ,c_currency_code VARCHAR2)
8012 IS
8013 SELECT 1
8014 FROM pa_fp_txn_currencies
8015 WHERE fin_plan_version_id = c_fin_plan_version_id
8016 AND txn_currency_code = c_currency_code;
8017
8018 --Cursor to derive plan_class_code and etc_start_date for a budget version
8019 CURSOR budget_version_info_cur (c_budget_version_id IN NUMBER)
8020 IS
8021 SELECT pt.plan_class_code
8022 ,bv.etc_start_date
8023 FROM pa_budget_versions bv,
8024 pa_fin_plan_types_b pt
8025 WHERE bv.budget_version_id = c_budget_version_id
8026 AND pt.fin_plan_type_id = bv.fin_plan_type_id;
8027
8028 l_plan_class_code pa_fin_plan_types_b.plan_class_code%TYPE;
8029 l_etc_start_date pa_budget_versions.etc_start_date%TYPE;
8030
8031 i NUMBER := 0;
8032 l_dummy NUMBER;
8033
8034 l_api_name CONSTANT VARCHAR2(30) := 'delete_budget_line';
8035
8036 l_resource_assignment_id pa_resource_assignments.resource_assignment_id%type;
8037 l_budget_line_rowid VARCHAR(20);
8038
8039 l_err_code NUMBER;
8040 l_err_stage VARCHAR2(120);
8041 l_err_stack VARCHAR2(630);
8042
8043 l_project_id NUMBER := p_pa_project_id;
8044 l_budget_type_code pa_budget_types.budget_type_code%TYPE := p_budget_type_code;
8045 l_fin_plan_type_id NUMBER := p_fin_plan_type_id;
8046 l_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE := p_fin_plan_type_name;
8047 l_version_type pa_budget_versions.version_type%TYPE := p_version_type;
8048 l_budget_version_id NUMBER;
8049 l_budget_entry_method_code pa_budget_entry_methods.budget_entry_method_code%TYPE;
8050 l_resource_list_id NUMBER;
8051 l_budget_amount_code pa_budget_types.budget_amount_code%type;
8052 l_entry_level_code pa_proj_fp_options.cost_fin_plan_level_code%TYPE;
8053 l_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE;
8054 l_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
8055 l_categorization_code pa_budget_entry_methods.categorization_code%TYPE;
8056 l_record_version_number NUMBER;
8057 l_task_id NUMBER;
8058 l_resource_list_member_id NUMBER;
8059 l_currency_code VARCHAR2(15);
8060 l_start_date DATE;
8061
8062 l_resource_assignment_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8063 l_delete_budget_lines_tab SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
8064 l_txn_currency_code_tab SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8065 l_line_start_date_tab SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8066 l_line_end_date_tab SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8067 l_txn_currency_code VARCHAR2(15);
8068 l_line_start_date DATE;
8069 l_line_end_date DATE;
8070
8071 l_msg_count NUMBER := 0;
8072 l_msg_data VARCHAR2(2000);
8073 l_module_name VARCHAR2(80);
8074 l_data VARCHAR2(2000);
8075 l_msg_index_out NUMBER;
8076
8077 l_amg_project_number pa_projects_all.segment1%TYPE;
8078 l_amg_task_number VARCHAR2(50);
8079
8080 -- Bug# 5998035
8081 l_call_del_planning_trans VARCHAR2(1) := 'N';
8082 l_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
8083
8084 --debug variables
8085 l_debug_mode VARCHAR2(1);
8086 l_debug_level2 CONSTANT NUMBER := 2;
8087 l_debug_level3 CONSTANT NUMBER := 3;
8088 l_debug_level4 CONSTANT NUMBER := 4;
8089 l_debug_level5 CONSTANT NUMBER := 5;
8090 --Added for bug 6408139 to pass G_PA_MISS_CHAR
8091 l_pa_miss_char varchar2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
8092
8093
8094 BEGIN
8095
8096
8097 --Standard begin of API savepoint
8098 SAVEPOINT delete_budget_line_pub;
8099
8100 p_msg_count := 0;
8101 p_return_status := FND_API.G_RET_STS_SUCCESS;
8102 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
8103 l_module_name := g_module_name || ':Delete_Budget_Line ';
8104
8105 IF ( l_debug_mode = 'Y' )
8106 THEN
8107 pa_debug.set_curr_function( p_function => l_api_name
8108 ,p_debug_mode => l_debug_mode );
8109 END IF;
8110
8111 IF ( l_debug_mode = 'Y' )
8112 THEN
8113 pa_debug.g_err_stage:='Entering ' || l_api_name;
8114 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8115 END IF;
8116
8117 --Initialize the message table if requested.
8118 IF FND_API.TO_BOOLEAN( p_init_msg_list )
8119 THEN
8120 FND_MSG_PUB.initialize;
8121 END IF;
8122
8123 --Set API return status to success
8124 p_return_status := FND_API.G_RET_STS_SUCCESS;
8125
8126 --Call PA_BUDGET_PVT.validate_header_info to do the necessary
8127 --header level validations
8128 PA_BUDGET_PVT.validate_header_info
8129 ( p_api_version_number => p_api_version_number
8130 ,p_api_name => l_api_name
8131 ,p_init_msg_list => p_init_msg_list
8132 ,px_pa_project_id => l_project_id
8133 ,p_pm_project_reference => p_pm_project_reference
8134 ,p_pm_product_code => p_pm_product_code
8135 ,px_budget_type_code => l_budget_type_code
8136 ,px_fin_plan_type_id => l_fin_plan_type_id
8137 ,px_fin_plan_type_name => l_fin_plan_type_name
8138 ,px_version_type => l_version_type
8139 ,p_budget_version_number => p_version_number
8140 ,p_change_reason_code => NULL
8141 ,p_function_name => 'PA_PM_DELETE_BUDGET_LINE'
8142 ,x_budget_entry_method_code => l_budget_entry_method_code
8143 ,x_resource_list_id => l_resource_list_id
8144 ,x_budget_version_id => l_budget_version_id
8145 ,x_fin_plan_level_code => l_entry_level_code
8146 ,x_time_phased_code => l_time_phased_code
8147 ,x_plan_in_multi_curr_flag => l_multi_curr_flag
8148 ,x_budget_amount_code => l_budget_amount_code
8149 ,x_categorization_code => l_categorization_code
8150 ,x_project_number => l_amg_project_number
8151 /* Plan Amount Entry flags introduced by bug 6408139 */
8152 /*Passing all as G_PA_MISS_CHAR since validations not required*/
8153 ,px_raw_cost_flag => l_pa_miss_char
8154 ,px_burdened_cost_flag => l_pa_miss_char
8155 ,px_revenue_flag => l_pa_miss_char
8156 ,px_cost_qty_flag => l_pa_miss_char
8157 ,px_revenue_qty_flag => l_pa_miss_char
8158 ,px_all_qty_flag => l_pa_miss_char
8159 ,px_bill_rate_flag => l_pa_miss_char
8160 ,px_cost_rate_flag => l_pa_miss_char
8161 ,px_burden_rate_flag => l_pa_miss_char
8162 /* Plan Amount Entry flags introduced by bug 6408139 */
8163 ,x_msg_count => p_msg_count
8164 ,x_msg_data => p_msg_data
8165 ,x_return_status => p_return_status );
8166
8167 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8168 IF(l_debug_mode='Y') THEN
8169 pa_debug.g_err_stage := 'validate header info API falied';
8170 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8171 END IF;
8172 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8173 END IF;
8174
8175
8176 -- convert pm_task_reference to pa_task_id
8177 -- if both task_id and task_reference are not passed or NULL, then we will default to 0, because this
8178 -- is the value of task_id when budgetting is done at the project level.
8179
8180 IF (p_pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8181 OR p_pa_task_id IS NULL )
8182 AND (p_pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8183 OR p_pm_task_reference IS NULL )
8184 THEN
8185
8186 l_task_id := 0;
8187
8188 ELSE
8189
8190 PA_PROJECT_PVT.Convert_pm_taskref_to_id ( p_pa_project_id => l_project_id,
8191 p_pa_task_id => p_pa_task_id,
8192 p_pm_task_reference => p_pm_task_reference,
8193 p_out_task_id => l_task_id,
8194 p_return_status => p_return_status );
8195
8196 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
8197 THEN
8198 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8199
8200 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
8201 THEN
8202 RAISE FND_API.G_EXC_ERROR;
8203 END IF;
8204
8205 END IF;
8206
8207 l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
8208 (p_task_number=> ''
8209 ,p_task_reference => p_pm_task_reference
8210 ,p_task_id => l_task_id);
8211
8212 -- convert resource alias to (resource) member id if passed and NOT NULL
8213 -- if resource alias is (passed and not NULL)
8214 -- and resource member is (passed and not NULL)
8215 -- then we convert the alias to the id
8216 -- else we default to the uncategorized resource member
8217
8218 IF (p_resource_alias <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8219 AND p_resource_alias IS NOT NULL)
8220 OR (p_resource_list_member_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8221 AND p_resource_list_member_id IS NOT NULL)
8222 THEN
8223
8224 pa_resource_pub.Convert_alias_to_id
8225 ( p_project_id => p_pa_project_id
8226 ,p_resource_list_id => l_resource_list_id
8227 ,p_alias => p_resource_alias
8228 ,p_resource_list_member_id => p_resource_list_member_id
8229 ,p_out_resource_list_member_id => l_resource_list_member_id
8230 ,p_return_status => p_return_status );
8231
8232 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
8233 THEN
8234 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8235 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
8236 THEN
8237 RAISE FND_API.G_EXC_ERROR;
8238 END IF;
8239
8240 ELSE
8241
8242 OPEN l_uncategorized_list_csr;
8243 FETCH l_uncategorized_list_csr INTO l_resource_list_member_id;
8244 CLOSE l_uncategorized_list_csr;
8245
8246 END IF;
8247
8248 -- No check has been made to see if RLM id passed belongs to PRL stamped at Budget Version Level
8249 -- Bug 4375976 has been logged to take care of this in API pa_resource_pub.Convert_alias_to_id
8250
8251 --Check the existence of resource assignment
8252 OPEN l_resource_assignment_csr
8253 (l_budget_version_id
8254 ,l_task_id
8255 ,l_resource_list_member_id);
8256
8257 FETCH l_resource_assignment_csr INTO l_resource_assignment_id;
8258
8259 IF l_resource_assignment_csr%NOTFOUND
8260 THEN
8261 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8262 THEN
8263 pa_interface_utils_pub.map_new_amg_msg
8264 ( p_old_message_code => 'PA_NO_RESOURCE_ASSIGNMENT'
8265 ,p_msg_attribute => 'CHANGE'
8266 ,p_resize_flag => 'N'
8267 ,p_msg_context => 'BUDG'
8268 ,p_attribute1 => l_amg_project_number
8269 ,p_attribute2 => l_amg_task_number
8270 ,p_attribute3 => p_budget_type_code
8271 ,p_attribute4 => ''
8272 ,p_attribute5 => to_char(p_start_date));
8273 END IF;
8274
8275 CLOSE l_resource_assignment_csr;
8276 RAISE FND_API.G_EXC_ERROR;
8277
8278 END IF;
8279
8280 CLOSE l_resource_assignment_csr;
8281
8282
8283 --Period name/start date check
8284 IF p_period_name IS NOT NULL
8285 AND p_period_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8286 THEN
8287
8288 OPEN l_budget_periods_csr( p_period_name => p_period_name
8289 ,p_time_phased_type_code => l_time_phased_code );
8290
8291 FETCH l_budget_periods_csr INTO l_start_date;
8292
8293 IF l_budget_periods_csr%NOTFOUND
8294 THEN
8295 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8296 THEN
8297 pa_interface_utils_pub.map_new_amg_msg
8298 ( p_old_message_code => 'PA_PERIOD_NAME_INVALID'
8299 ,p_msg_attribute => 'CHANGE'
8300 ,p_resize_flag => 'N'
8301 ,p_msg_context => 'BUDG'
8302 ,p_attribute1 => l_amg_project_number
8303 ,p_attribute2 => l_amg_task_number
8304 ,p_attribute3 => l_budget_type_code
8305 ,p_attribute4 => ''
8306 ,p_attribute5 => to_char(p_start_date));
8307 END IF;
8308
8309 CLOSE l_budget_periods_csr;
8310 RAISE FND_API.G_EXC_ERROR;
8311 END IF;
8312 CLOSE l_budget_periods_csr;
8313
8314 ELSIF p_start_date IS NOT NULL
8315 AND p_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8316 THEN
8317
8318 -- Fix: 27-JAN-97, jwhite
8319 -- Added condition for 'G' or 'P' time-phased-type code as only
8320 -- required for period phased budgets.
8321 IF (l_time_phased_code IN ('G', 'P') ) THEN
8322
8323 OPEN l_start_date_csr(p_start_date => p_start_date
8324 ,p_time_phased_type_code => l_time_phased_code );
8325
8326 FETCH l_start_date_csr INTO l_dummy;
8327
8328 IF l_start_date_csr%NOTFOUND
8329 THEN
8330 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8331 THEN
8332 pa_interface_utils_pub.map_new_amg_msg
8333 ( p_old_message_code => 'PA_START_DATE_INVALID'
8334 ,p_msg_attribute => 'CHANGE'
8335 ,p_resize_flag => 'N'
8336 ,p_msg_context => 'PROJ'
8337 ,p_attribute1 => l_amg_project_number
8338 ,p_attribute2 => ''
8339 ,p_attribute3 => ''
8340 ,p_attribute4 => ''
8341 ,p_attribute5 => '');
8342 END IF;
8343
8344 CLOSE l_start_date_csr;
8345 RAISE FND_API.G_EXC_ERROR;
8346 END IF;
8347
8348 CLOSE l_start_date_csr;
8349
8350 END IF;--(l_time_phased_code IN ('G', 'P') )
8351
8352 l_start_date := p_start_date;
8353
8354 ELSE
8355
8356 /* Added code for Bug# 5998035 */
8357 -- If start_date and period_name are passed as NULL
8358 IF (p_period_name IS NULL and p_start_date IS NULL) THEN
8359 -- If time phased then set l_call_del_planning_trans to 'Y'
8360 IF (l_time_phased_code IN ('G', 'P') AND l_fin_plan_type_id IS NOT NULL) THEN
8361 l_call_del_planning_trans := 'Y';
8362 END IF;
8363 END IF;
8364 /* End of code for Bug# 5998035 */
8365 l_start_date := NULL; --when no start_date or period_name is passed or both are NULL
8366 --, then all periods will be deleted
8367
8368 END IF;--Period name/start date check
8369
8370 --DO G_MISS_CHAR to NULL conv for currency_code
8371 IF p_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
8372 l_currency_code := NULL;
8373 ELSE
8374 l_currency_code := p_currency_code;
8375 END IF;
8376
8377 --Following validations are required only for the new model
8378 IF l_fin_plan_type_id IS NOT NULL
8379 THEN
8380
8381 --Validate currency_code if it is not null
8382 --Validate the txn currency code provided by the user. The follwing checks are made.
8383 --If the version is an approved revenue version then the txn curr code should be PFC.
8384 --else If the version is MC enabled then txn curr code should be among the txn
8385 --currencies provided at the version level.
8386
8387 IF l_currency_code IS NOT NULL THEN
8388
8389 l_dummy := 0; --reset the value of l_dummy
8390
8391 --Get the approved revenue plan type flag
8392 OPEN l_approved_revenue_flag_csr( l_fin_plan_type_id
8393 ,l_project_id);
8394 FETCH l_approved_revenue_flag_csr INTO l_app_rev_plan_type_flag;
8395 CLOSE l_approved_revenue_flag_csr;
8396
8397 -- check for approved rev plan type flag is made here because in case plan type is at
8398 -- cost and revenue separately then version can have currencies other than PFC.
8399 IF( nvl(l_app_rev_plan_type_flag,'N') = 'Y' AND
8400 l_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST)
8401 THEN
8402
8403 OPEN l_proj_func_currency_csr( l_project_id
8404 ,l_currency_code);
8405 FETCH l_proj_func_currency_csr INTO l_dummy;
8406 CLOSE l_proj_func_currency_csr;
8407
8408 IF l_dummy = 0 THEN --currency_code not equal to PFC
8409
8410 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8411 THEN
8412 PA_UTILS.ADD_MESSAGE
8413 ( p_app_short_name => 'PA',
8414 p_msg_name => 'PA_FP_TXN_NOT_PFC_FOR_APP_REV',
8415 p_token1 => 'PROJECT',
8416 p_value1 => l_amg_project_number,
8417 p_token2 => 'PLAN_TYPE',
8418 p_value2 => l_fin_plan_type_name,
8419 p_token3 => 'CURRENCY',
8420 p_value3 => l_currency_code);
8421 END IF;
8422
8423 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8424
8425 END IF;--l_dummy = 0
8426
8427 ELSE-- Version is not approved for revenue. The txn curr must be available in fp txn curr table
8428
8429 OPEN l_plan_ver_txn_curr_csr( l_budget_version_id
8430 ,l_currency_code);
8431 FETCH l_plan_ver_txn_curr_csr INTO l_dummy;
8432 CLOSE l_plan_ver_txn_curr_csr;
8433
8434 IF l_dummy = 0 THEN --currency_code is not valid
8435
8436 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8437 THEN
8438 PA_UTILS.ADD_MESSAGE
8439 ( p_app_short_name => 'PA',
8440 p_msg_name => 'PA_FP_TXN_NOT_ADDED_FOR_PT',
8441 p_token1 => 'PROJECT',
8442 p_value1 => l_amg_project_number,
8443 p_token2 => 'PLAN_TYPE',
8444 p_value2 => l_fin_plan_type_name,
8445 p_token3 => 'CURRENCY',
8446 p_value3 => l_currency_code);
8447 END IF;
8448
8449 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8450
8451 END IF;--l_dummy = 0
8452
8453 END IF;
8454
8455 END IF;--l_currency_code IS NOT NULL
8456
8457 --If multi-currency is enabled and one of period_name or start_date is
8458 --not null, then currency_code cannot be null.
8459 IF (l_multi_curr_flag = 'Y' AND
8460 l_currency_code IS NULL AND
8461 l_start_date IS NOT NULL)
8462 THEN
8463 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8464 THEN
8465 PA_UTILS.add_message
8466 (p_app_short_name => 'PA'
8467 ,p_msg_name => 'PA_FP_CURRENCY_NULL_AMG'
8468 ,p_token1 => 'PROJECT'
8469 ,p_value1 => l_amg_project_number
8470 ,p_token2 => 'PLAN_TYPE'
8471 ,p_value2 => l_fin_plan_type_name
8472 ,p_token3 => 'TASK'
8473 ,p_value3 => l_amg_task_number
8474 ,p_token4 => 'START_DATE'
8475 ,p_value4 => to_char(l_start_date) );
8476 END IF;
8477
8478 IF l_debug_mode = 'Y' THEN
8479 pa_debug.g_err_stage := 'For multi-currency enabled, currency code is'
8480 || 'null but start_date is not null';
8481 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8482 END IF;
8483
8484 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8485 END IF;
8486
8487
8488 --In case of new model, check if Actuals have been entered for the FORECAST Line.
8489 OPEN budget_version_info_cur(l_budget_version_id);
8490 FETCH budget_version_info_cur
8491 INTO l_plan_class_code
8492 ,l_etc_start_date;
8493 CLOSE budget_version_info_cur;
8494 --Since we have already validated the presence of a budget version id
8495 --in PA_BUDGET_PVT.validate_header_info, hence we do not check for
8496 --budget_version_info_cur%NOT FOUND here.
8497
8498 /* Added for Bug# 5998035 */
8499 IF ( l_time_phased_code NOT IN ('G', 'P') AND l_etc_start_date IS NULL) THEN
8500 l_call_del_planning_trans := 'Y';
8501 END IF;
8502 IF (l_plan_class_code IS NOT NULL AND
8503 l_plan_class_code = 'FORECAST' AND
8504 l_etc_start_date IS NOT NULL AND
8505 ((l_start_date IS NOT NULL AND l_etc_start_date > l_start_date) OR l_start_date IS NULL) AND -- Bug 5998035
8506 l_time_phased_code IS NOT NULL AND
8507 l_time_phased_code <> 'N')
8508 THEN
8509 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8510 THEN
8511 PA_UTILS.add_message
8512 (p_app_short_name => 'PA'
8513 ,p_msg_name => 'PA_FP_FCST_ACTUALS_AMG'
8514 ,p_token1 => 'PROJECT'
8515 ,p_value1 => l_amg_project_number
8516 ,p_token2 => 'PLAN_TYPE'
8517 ,p_value2 => l_fin_plan_type_name
8518 ,p_token3 => 'TASK'
8519 ,p_value3 => l_amg_task_number
8520 ,p_token4 => 'CURRENCY'
8521 ,p_value4 => l_currency_code
8522 ,p_token5 => 'START_DATE'
8523 ,p_value5 => to_char(l_start_date) );
8524 END IF;
8525
8526 IF l_debug_mode = 'Y' THEN
8527 pa_debug.g_err_stage := 'Forecast Line has actuals and hence cannot be edited';
8528 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8529 END IF;
8530
8531 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8532 END IF;--end of actuals-on-FORECAST check
8533
8534 ELSE -- old FORMS based Budgets Model
8535
8536 --Currency_code value, even if specified, should be ignored in
8537 --case of old Budgets Model
8538 l_currency_code := NULL;
8539
8540 END IF; --l_fin_plan_type_id IS NOT NULL
8541
8542
8543 --Checking existence of budget line
8544 /* Added code for Bug# 5998035 */
8545 --Skipping this loop while calling delete_planning_transactions
8546 IF ( l_call_del_planning_trans <> 'Y' ) THEN --Bug# 5998035
8547 OPEN l_budget_line_rowid_csr( l_resource_assignment_id
8548 ,l_start_date
8549 ,l_currency_code );
8550
8551 FETCH l_budget_line_rowid_csr INTO l_budget_line_rowid
8552 ,l_txn_currency_code
8553 ,l_line_start_date
8554 ,l_line_end_date ;
8555
8556 IF l_budget_line_rowid_csr%NOTFOUND
8557 THEN
8558 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8559 THEN
8560 pa_interface_utils_pub.map_new_amg_msg
8561 ( p_old_message_code => 'PA_BUDGET_LINE_NOT_FOUND'
8562 ,p_msg_attribute => 'CHANGE'
8563 ,p_resize_flag => 'N'
8564 ,p_msg_context => 'BUDG'
8565 ,p_attribute1 => l_amg_project_number
8566 ,p_attribute2 => l_amg_task_number
8567 ,p_attribute3 => l_budget_type_code
8568 ,p_attribute4 => ''
8569 ,p_attribute5 => to_char(l_start_date));
8570 END IF;
8571
8572 CLOSE l_budget_line_rowid_csr;
8573 RAISE FND_API.G_EXC_ERROR;
8574
8575 END IF;
8576
8577 --Loop for deleting budget lines begins
8578 WHILE l_budget_line_rowid_csr%FOUND LOOP
8579
8580 --Do the processing for FORMS based Budgets Model
8581 IF l_budget_type_code IS NOT NULL
8582 THEN
8583 BEGIN
8584
8585 OPEN l_lock_budget_line_csr( l_budget_line_rowid );
8586 CLOSE l_lock_budget_line_csr;
8587
8588 /*FPB2: MRC PA_BUDGET_LINES_V_PKG.delete_row( l_budget_line_rowid ); */
8589 pa_budget_lines_v_pkg.delete_row(X_Rowid => l_budget_line_rowid);
8590 -- Bug Fix: 4569365. Removed MRC code.
8591 --, x_mrc_flag => 'Y'); /* FPB2: Added x_mrc_flag for MRC changes */
8592
8593
8594 --this exception part is here because this procedure doesn't handle the exceptions itself.
8595 EXCEPTION
8596 WHEN ROW_ALREADY_LOCKED THEN RAISE;
8597
8598 WHEN OTHERS
8599 THEN
8600
8601 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8602 THEN
8603 FND_MSG_PUB.add_exc_msg
8604 ( p_pkg_name => 'PA_BUDGET_LINES_V_PKG'
8605 , p_procedure_name => 'DELETE_ROW'
8606 , p_error_text => SQLCODE );
8607
8608 END IF;
8609
8610 CLOSE l_budget_line_rowid_csr;
8611
8612 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8613 END;
8614
8615 ELSIF l_fin_plan_type_id IS NOT NULL --new FINPLAN model
8616 THEN
8617
8618 i := i + 1; --incrementing the counter
8619
8620 --Store the data for PA_FP_CALC_PLAN_PKG.calculate API call
8621 l_resource_assignment_tab.extend(1);
8622 l_delete_budget_lines_tab.extend(1);
8623 l_txn_currency_code_tab.extend(1);
8624 l_line_start_date_tab.extend(1);
8625 l_line_end_date_tab.extend(1);
8626
8627 l_resource_assignment_tab(i) := l_resource_assignment_id;
8628 l_delete_budget_lines_tab(i) := 'Y';
8629 l_txn_currency_code_tab(i) := l_txn_currency_code;
8630 l_line_start_date_tab(i) := l_line_start_date;
8631 l_line_end_date_tab(i) := l_line_end_date;
8632
8633 END IF;--l_budget_type_code IS NOT NULL
8634
8635 FETCH l_budget_line_rowid_csr INTO l_budget_line_rowid
8636 ,l_txn_currency_code
8637 ,l_line_start_date
8638 ,l_line_end_date ;
8639
8640 END LOOP;
8641
8642 /* Added for Bug# 5998035 */
8643 ELSE
8644
8645 l_resource_assignment_tab.extend(1);
8646 l_currency_code_tbl.extend(1);
8647
8648 l_resource_assignment_tab(1) := l_resource_assignment_id;
8649 l_currency_code_tbl(1) := l_currency_code;
8650
8651 END IF; -- Bug# 5998035
8652
8653 IF l_budget_line_rowid_csr%ISOPEN THEN -- Bug 5998035
8654 -- Bug 6854131
8655 CLOSE l_budget_line_rowid_csr;
8656 END IF;
8657
8658 IF l_budget_type_code IS NOT NULL --old budgets model
8659 THEN
8660 --summarizing the totals in the table pa_budget_versions
8661 PA_BUDGET_UTILS.summerize_project_totals( x_budget_version_id => l_budget_version_id
8662 , x_err_code => l_err_code
8663 , x_err_stage => l_err_stage
8664 , x_err_stack => l_err_stack );
8665
8666 IF l_err_code > 0
8667 THEN
8668
8669 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8670 THEN
8671
8672 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
8673 THEN
8674 pa_interface_utils_pub.map_new_amg_msg
8675 ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
8676 ,p_msg_attribute => 'CHANGE'
8677 ,p_resize_flag => 'N'
8678 ,p_msg_context => 'BUDG'
8679 ,p_attribute1 => l_amg_project_number
8680 ,p_attribute2 => l_amg_task_number
8681 ,p_attribute3 => p_budget_type_code
8682 ,p_attribute4 => ''
8683 ,p_attribute5 => to_char(p_start_date));
8684 ELSE
8685 pa_interface_utils_pub.map_new_amg_msg
8686 ( p_old_message_code => l_err_stage
8687 ,p_msg_attribute => 'CHANGE'
8688 ,p_resize_flag => 'N'
8689 ,p_msg_context => 'BUDG'
8690 ,p_attribute1 => l_amg_project_number
8691 ,p_attribute2 => l_amg_task_number
8692 ,p_attribute3 => p_budget_type_code
8693 ,p_attribute4 => ''
8694 ,p_attribute5 => to_char(p_start_date));
8695 END IF;
8696
8697 END IF;
8698
8699 RAISE FND_API.G_EXC_ERROR;
8700
8701 ELSIF l_err_code < 0
8702 THEN
8703
8704 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8705 THEN
8706
8707 FND_MSG_PUB.add_exc_msg
8708 ( p_pkg_name => 'PA_BUDGET_UTILS'
8709 , p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
8710 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
8711
8712 END IF;
8713
8714 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8715
8716 END IF;
8717
8718 ELSIF l_fin_plan_type_id IS NOT NULL --new FINPLAN model
8719 THEN
8720
8721 --Lock the budget version before deleting a budget line
8722 l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
8723 (p_budget_version_id => l_budget_version_id);
8724
8725 PA_FIN_PLAN_PVT.lock_unlock_version
8726 ( p_budget_version_id => l_budget_version_id
8727 ,p_record_version_number => l_record_version_number
8728 ,p_action => 'L'
8729 ,p_user_id => FND_GLOBAL.User_id
8730 ,p_person_id => null
8731 ,x_return_status => p_return_status
8732 ,x_msg_count => p_msg_count
8733 ,x_msg_data => p_msg_data);
8734
8735 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8736 -- Error message is not added here as the api lock_unlock_version
8737 -- adds the message to stack
8738 IF(l_debug_mode='Y') THEN
8739 pa_debug.g_err_stage := 'Failed in locking the version ' || l_budget_version_id;
8740 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8741 END IF;
8742 RAISE FND_API.G_EXC_ERROR;
8743 END IF;
8744
8745 --Call PA_FP_CALC_PLAN_PKG.calculate api to delete the budget line(s)
8746 /* Added the following code for Bug# 5998035 */
8747 IF (l_call_del_planning_trans = 'Y') THEN
8748 -- Call PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions if period_name and start_date are NULL
8749 PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions
8750 (p_context => l_plan_class_code
8751 ,p_task_or_res => 'ASSIGNMENT'
8752 ,p_resource_assignment_tbl => l_resource_assignment_tab
8753 ,p_currency_code_tbl => l_currency_code_tbl
8754 ,x_return_status => p_return_status
8755 ,x_msg_count => p_msg_count
8756 ,x_msg_data => p_msg_data
8757 );
8758 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8759 IF(l_debug_mode='Y') THEN
8760 pa_debug.g_err_stage := 'PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions API has thrown error';
8761 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8762 END IF;
8763 RAISE FND_API.G_EXC_ERROR;
8764 END IF;
8765 /* End of code for Bug# 5998035 */
8766 ELSE
8767 PA_FP_CALC_PLAN_PKG.calculate
8768 (p_project_id => l_project_id
8769 ,p_budget_version_id => l_budget_version_id
8770 ,p_spread_required_flag => 'N'
8771 ,p_source_context => 'BUDGET_LINE'
8772 ,p_calling_module => PA_FP_CONSTANTS_PKG.G_AMG_API
8773 ,p_resource_assignment_tab => l_resource_assignment_tab
8774 ,p_delete_budget_lines_tab => l_delete_budget_lines_tab
8775 ,p_txn_currency_code_tab => l_txn_currency_code_tab
8776 ,p_line_start_date_tab => l_line_start_date_tab
8777 ,p_line_end_date_tab => l_line_end_date_tab
8778 ,x_return_status => p_return_status
8779 ,x_msg_count => p_msg_count
8780 ,x_msg_data => p_msg_data );
8781 END IF;
8782
8783 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8784 IF(l_debug_mode='Y') THEN
8785 pa_debug.g_err_stage := 'PA_FP_CALC_PLAN_PKG.calculate API has thrown error';
8786 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8787 END IF;
8788 RAISE FND_API.G_EXC_ERROR;
8789 END IF;
8790
8791 --unlock the budget version after deleting the budget line
8792 l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
8793 (p_budget_version_id => l_budget_version_id);
8794
8795 PA_FIN_PLAN_PVT.lock_unlock_version
8796 ( p_budget_version_id => l_budget_version_id
8797 ,p_record_version_number => l_record_version_number
8798 ,p_action => 'U'
8799 ,p_user_id => FND_GLOBAL.User_id
8800 ,p_person_id => null
8801 ,x_return_status => p_return_status
8802 ,x_msg_count => p_msg_count
8803 ,x_msg_data => p_msg_data);
8804
8805 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8806 -- Error message is not added here as the api lock_unlock_version
8807 -- adds the message to stack
8808 IF(l_debug_mode='Y') THEN
8809 pa_debug.g_err_stage := 'Failed in unlocking the version ' || l_budget_version_id;
8810 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8811 END IF;
8812 RAISE FND_API.G_EXC_ERROR;
8813 END IF;
8814
8815 END IF;--end of code to delete budget line
8816
8817 IF fnd_api.to_boolean(p_commit)
8818 THEN
8819 COMMIT;
8820 END IF;
8821
8822 IF ( l_debug_mode = 'Y' ) THEN
8823 pa_debug.reset_curr_function;
8824 END IF;
8825
8826
8827 EXCEPTION
8828
8829 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc
8830 THEN
8831
8832 ROLLBACK TO delete_budget_line_pub;
8833
8834 p_return_status := FND_API.G_RET_STS_ERROR;
8835 l_msg_count := FND_MSG_PUB.count_msg;
8836
8837 IF l_msg_count = 1 and p_msg_data IS NULL THEN
8838 PA_INTERFACE_UTILS_PUB.get_messages
8839 (p_encoded => FND_API.G_TRUE
8840 ,p_msg_index => 1
8841 ,p_msg_count => l_msg_count
8842 ,p_msg_data => l_msg_data
8843 ,p_data => l_data
8844 ,p_msg_index_out => l_msg_index_out);
8845 p_msg_data := l_data;
8846 p_msg_count := l_msg_count;
8847 ELSE
8848 p_msg_count := l_msg_count;
8849 END IF;
8850
8851 IF ( l_debug_mode = 'Y' ) THEN
8852 pa_debug.reset_curr_function;
8853 END IF;
8854
8855 RETURN;
8856
8857
8858 WHEN FND_API.G_EXC_ERROR
8859 THEN
8860
8861 ROLLBACK TO delete_budget_line_pub;
8862
8863 p_return_status := FND_API.G_RET_STS_ERROR;
8864
8865 FND_MSG_PUB.Count_And_Get
8866 ( p_count => p_msg_count ,
8867 p_data => p_msg_data );
8868
8869 IF ( l_debug_mode = 'Y' ) THEN
8870 pa_debug.reset_curr_function;
8871 END IF;
8872
8873
8874 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8875 THEN
8876
8877 ROLLBACK TO delete_budget_line_pub;
8878
8879 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8880
8881 FND_MSG_PUB.Count_And_Get
8882 ( p_count => p_msg_count ,
8883 p_data => p_msg_data );
8884
8885 IF ( l_debug_mode = 'Y' ) THEN
8886 pa_debug.reset_curr_function;
8887 END IF;
8888
8889
8890 WHEN ROW_ALREADY_LOCKED
8891 THEN
8892 ROLLBACK TO delete_budget_line_pub;
8893
8894 p_return_status := FND_API.G_RET_STS_ERROR;
8895
8896 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
8897 THEN
8898 FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
8899 FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_project_number);
8900 FND_MESSAGE.SET_TOKEN('TASK', l_amg_task_number);
8901 FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', l_budget_type_code);
8902 FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
8903 FND_MESSAGE.SET_TOKEN('START_DATE',fnd_date.date_to_chardate(p_start_date));
8904 FND_MESSAGE.SET_TOKEN('ENTITY', 'G_BUDGET_LINE_CODE');
8905 FND_MSG_PUB.ADD;
8906 END IF;
8907
8908 FND_MSG_PUB.Count_And_Get
8909 ( p_count => p_msg_count ,
8910 p_data => p_msg_data );
8911
8912 IF ( l_debug_mode = 'Y' ) THEN
8913 pa_debug.reset_curr_function;
8914 END IF;
8915
8916
8917 WHEN OTHERS THEN
8918
8919 ROLLBACK TO delete_budget_line_pub;
8920
8921 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8922
8923 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8924 THEN
8925 FND_MSG_PUB.add_exc_msg
8926 ( p_pkg_name => G_PKG_NAME
8927 , p_procedure_name => l_api_name );
8928
8929 END IF;
8930
8931 FND_MSG_PUB.Count_And_Get
8932 ( p_count => p_msg_count ,
8933 p_data => p_msg_data );
8934
8935 IF ( l_debug_mode = 'Y' ) THEN
8936 pa_debug.reset_curr_function;
8937 END IF;
8938
8939 END delete_budget_line;
8940
8941
8942 ----------------------------------------------------------------------------------------
8943 --Name: update_budget
8944 --Type: Procedure
8945 --Description: This procedure can be used to update a working budget and it's
8946 -- budget lines.
8947 --
8948 --Called subprograms: pa_budget_pvt.insert_budget_line
8949 -- pa_budget_pvt.update_budget_line_sql
8950 --
8951 --
8952 --
8953 --History:
8954 -- 14-OCT-1996 L. de Werker Created
8955 -- 19-NOV-1996 L. de Werker Changed for use of INSERT_BUDGET_LINE and
8956 -- UPDATE_BUDGET_LINE_SQL
8957 -- 28-NOV-1996 L. de Werker Added 16 parameters for descriptive flexfields
8958 -- 05-DEC-1996 L. de Werker Added validation for change_reason_code
8959 -- Corrected error when no resource assignment is found.
8960 -- 26-APR-2005 Bug 4224464. Changed the procedure update_budget to support finplan model.
8961
8962 PROCEDURE update_budget
8963 ( p_api_version_number IN NUMBER
8964 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
8965 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
8966 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8967 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8968 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8969 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8970 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8971 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8972 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8973 ,p_change_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8974 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8975 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8976 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8977 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8978 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8979 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8980 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8981 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8982 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8983 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8984 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8985 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8986 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8987 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8988 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8989 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8990 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8991 ,p_budget_lines_in IN budget_line_in_tbl_type
8992 ,p_budget_lines_out OUT NOCOPY budget_line_out_tbl_type
8993 --Added for the bug 3453650
8994 ,p_resource_list_id IN pa_budget_versions.resource_list_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8995 ,p_set_current_working_flag IN pa_budget_versions.current_working_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8996 -- ,p_locked_by_person_id IN pa_budget_versions.locked_by_person_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8997 ,p_budget_version_number IN pa_budget_versions.version_number%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8998 ,p_budget_version_name IN pa_budget_versions.version_name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8999 ,p_version_type IN pa_budget_versions.version_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3453650
9000 ,p_finplan_type_id IN pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9001 ,p_finplan_type_name IN pa_fin_plan_types_vl.name%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9002 ,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
9003 ,p_time_phased_code IN pa_proj_fp_options.cost_time_phased_code%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9004 ,p_projfunc_cost_rate_type IN pa_proj_fp_options.projfunc_cost_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9005 ,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
9006 ,p_projfunc_cost_rate_date IN pa_proj_fp_options.projfunc_cost_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
9007 ,p_projfunc_cost_exchange_rate IN pa_budget_lines.projfunc_cost_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9008 ,p_projfunc_rev_rate_type IN pa_proj_fp_options.projfunc_rev_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9009 ,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
9010 ,p_projfunc_rev_rate_date IN pa_proj_fp_options.projfunc_rev_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
9011 ,p_projfunc_rev_exchange_rate IN pa_budget_lines.projfunc_cost_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9012 ,p_project_cost_rate_type IN pa_proj_fp_options.project_cost_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9013 ,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
9014 ,p_project_cost_rate_date IN pa_proj_fp_options.project_cost_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
9015 ,p_project_cost_exchange_rate IN pa_budget_lines.project_cost_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9016 ,p_project_rev_rate_type IN pa_proj_fp_options.project_rev_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9017 ,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
9018 ,p_project_rev_rate_date IN pa_proj_fp_options.project_rev_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
9019 ,p_project_rev_exchange_rate IN pa_budget_lines.project_rev_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9020 /* Plan Amount Entry flags introduced by bug 6408139 */
9021 ,p_raw_cost_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9022 ,p_burdened_cost_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9023 ,p_revenue_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9024 ,p_cost_qty_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9025 ,p_revenue_qty_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9026 ,p_all_qty_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9027 ,p_bill_rate_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9028 ,p_cost_rate_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9029 ,p_burden_rate_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9030 )
9031 IS
9032
9033
9034 --needed to check the validity of the incoming budget type
9035
9036 CURSOR l_budget_type_csr
9037 (p_budget_type_code VARCHAR2 )
9038 IS
9039 SELECT budget_amount_code
9040 FROM pa_budget_types
9041 WHERE budget_type_code = p_budget_type_code;
9042
9043 --needed to check whether budget line already exists
9044
9045 CURSOR l_budget_line_csr
9046 (p_resource_assigment_id NUMBER
9047 ,p_budget_start_date DATE )
9048 IS
9049 SELECT 'X'
9050 FROM pa_budget_lines
9051 WHERE resource_assignment_id = p_resource_assigment_id
9052 AND start_date = p_budget_start_date;
9053
9054 --needed to get the current budget version data
9055
9056 CURSOR l_budget_version_csr
9057 ( p_project_id NUMBER
9058 , p_budget_type_code VARCHAR2 )
9059 IS
9060 SELECT budget_version_id
9061 , budget_entry_method_code
9062 , resource_list_id
9063 , change_reason_code
9064 , description
9065 FROM pa_budget_versions
9066 WHERE project_id = p_project_id
9067 AND budget_type_code = p_budget_type_code
9068 AND budget_status_code = 'W';
9069
9070 --needed to get the current budget entry method data
9071
9072 CURSOR l_budget_entry_method_csr
9073 ( p_budget_entry_method_code VARCHAR2)
9074 IS
9075 SELECT time_phased_type_code
9076 , entry_level_code
9077 , categorization_code
9078 FROM pa_budget_entry_methods
9079 WHERE budget_entry_method_code = p_budget_entry_method_code;
9080
9081 --needed to get the resource assignment for this budget_version / task / member combination
9082
9083 CURSOR l_resource_assignment_csr
9084 (p_budget_version_id NUMBER
9085 ,p_task_id NUMBER
9086 ,p_member_id NUMBER )
9087 IS
9088 SELECT resource_assignment_id
9089 FROM pa_resource_assignments
9090 WHERE budget_version_id = p_budget_version_id
9091 AND task_id = p_task_id
9092 AND resource_list_member_id = p_member_id;
9093
9094 -- needed to get the budget_start_date of a period
9095
9096 CURSOR l_budget_periods_csr
9097 (p_period_name VARCHAR2
9098 ,p_period_type_code VARCHAR2 )
9099 IS
9100 SELECT trunc(period_start_date)
9101 FROM pa_budget_periods_v
9102 WHERE period_name = p_period_name
9103 AND period_type_code = p_period_type_code;
9104
9105 -- the uncategorized resource list
9106
9107
9108
9109
9110 -- FP.M Resource LIst Data Model Impact Changes, 09-JUN-04, jwhite -----------------------------
9111
9112 -- Augmented original code with additional filter
9113
9114 /* -- Original Logic
9115
9116 CURSOR l_uncategorized_list_csr
9117 IS
9118 SELECT prlm.resource_list_member_id
9119 FROM pa_resource_lists prl
9120 , pa_resource_list_members prlm
9121 WHERE prl.resource_list_id = prlm.resource_list_id
9122 AND prl.uncategorized_flag='Y';
9123
9124 */
9125
9126 -- FP.M Data Model Logic
9127
9128 CURSOR l_uncategorized_list_csr
9129 IS
9130 SELECT prlm.resource_list_member_id
9131 FROM pa_resource_lists prl
9132 , pa_resource_list_members prlm
9133 WHERE prl.resource_list_id = prlm.resource_list_id
9134 AND prl.uncategorized_flag='Y'
9135 and prlm.resource_class_code = 'FINANCIAL_ELEMENTS';
9136
9137
9138 -- End: FP.M Resource LIst Data Model Impact Changes -----------------------------
9139
9140
9141
9142
9143 CURSOR l_budget_change_reason_csr ( p_change_reason_code VARCHAR2 )
9144 IS
9145 SELECT 'x'
9146 FROM pa_lookups
9147 WHERE lookup_type = 'BUDGET CHANGE REASON'
9148 AND lookup_code = p_change_reason_code;
9149
9150 --needed for locking of budget rows
9151
9152 CURSOR l_lock_budget_csr( p_budget_version_id NUMBER )
9153 IS
9154 SELECT 'x'
9155 FROM pa_budget_versions bv
9156 , pa_resource_assignments ra
9157 , pa_budget_lines bl
9158 WHERE bv.budget_version_id = p_budget_version_id
9159 AND bv.budget_version_id = ra.budget_version_id (+)
9160 AND ra.resource_assignment_id = bl.resource_assignment_id (+)
9161 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
9162 FOR UPDATE OF bv.budget_version_id,ra.budget_version_id,bl.resource_assignment_id NOWAIT;
9163
9164 l_api_name CONSTANT VARCHAR2(30) := 'update_budget';
9165
9166 l_return_status VARCHAR2(1);
9167 l_project_id NUMBER;
9168 l_task_id NUMBER;
9169 l_dummy VARCHAR2(1);
9170 l_budget_version_id NUMBER;
9171 l_budget_entry_method_code VARCHAR2(30);
9172 l_change_reason_code VARCHAR2(30);
9173 l_description VARCHAR2(255);
9174 l_budget_line_index NUMBER;
9175 l_budget_line_in_rec pa_budget_pub.budget_line_in_rec_type;
9176 l_time_phased_type_code VARCHAR2(30);
9177 l_resource_assignment_id NUMBER;
9178 l_budget_start_date DATE;
9179 l_resource_list_id NUMBER;
9180 l_resource_list_member_id NUMBER;
9181 l_resource_name VARCHAR2(80); --bug 3711693
9182 l_budget_amount_code VARCHAR2(30);
9183 l_entry_level_code VARCHAR2(30);
9184 l_categorization_code VARCHAR2(30);
9185
9186 l_msg_count NUMBER;
9187 l_msg_data VARCHAR2(2000);
9188
9189 l_err_code NUMBER;
9190 l_err_stage VARCHAR2(120);
9191 l_err_stack VARCHAR2(630);
9192
9193 --used by dynamic SQL
9194 l_statement VARCHAR2(2000);
9195 l_update_yes_flag VARCHAR2(1);
9196 l_cursor_id NUMBER;
9197 l_rows NUMBER;
9198 l_new_resource_assignment BOOLEAN;
9199 l_function_allowed VARCHAR2(1);
9200 l_resp_id NUMBER := 0;
9201 l_user_id NUMBER := 0;
9202 l_module_name VARCHAR2(80);
9203 l_budget_rlmid NUMBER;
9204 l_budget_alias VARCHAR2(80); --bug 3711693
9205 l_uncategorized_list_id NUMBER;
9206 l_uncategorized_rlmid NUMBER;
9207 l_uncategorized_resid NUMBER;
9208 l_track_as_labor_flag VARCHAR2(1);
9209 l_multi_currency_billing_flag PA_PROJECTS_ALL.MULTI_CURRENCY_BILLING_FLAG%TYPE;
9210
9211 l_amg_segment1 VARCHAR2(25);
9212 l_amg_task_number VARCHAR2(50);
9213
9214 --needed to get the field values associated to a AMG message
9215
9216 CURSOR l_amg_project_csr
9217 (p_pa_project_id pa_projects.project_id%type)
9218 IS
9219 SELECT segment1
9220 FROM pa_projects p
9221 WHERE p.project_id = p_pa_project_id;
9222
9223 CURSOR l_amg_task_csr
9224 (p_pa_task_id pa_tasks.task_id%type)
9225 IS
9226 SELECT task_number
9227 FROM pa_tasks p
9228 WHERE p.task_id = p_pa_task_id;
9229
9230 p_multiple_task_msg VARCHAR2(1) := 'T';
9231
9232 --Added for the bug 3453650
9233 CURSOR l_budget_attrs_csr(p_budget_type_code VARCHAR2,p_project_id number)
9234 IS
9235 SELECT BUDGET_VERSION_ID,version_name,budget_entry_method_code,
9236 RESOURCE_LIST_ID,CHANGE_REASON_CODE,DESCRIPTION
9237 FROM PA_BUDGET_VERSIONS
9238 --WHERE VERSION_NAME=p_budget_version_number
9239 Where budget_type_code=p_budget_type_code
9240 and project_id = p_project_id
9241 and budget_status_code = 'W';
9242
9243 /* Version number is mandatory for the finplan model */
9244 CURSOR l_finplan_attrs_csr(c_budget_version_id NUMBER)
9245 IS
9246 SELECT version_name,CURRENT_WORKING_FLAG,
9247 RESOURCE_LIST_ID,CHANGE_REASON_CODE,DESCRIPTION,version_type
9248 FROM PA_BUDGET_VERSIONS
9249 WHERE budget_version_id = c_budget_version_id;
9250
9251 CURSOR l_finplan_type_name_csr(p_finplan_type_id NUMBER)
9252 IS
9253 SELECT name
9254 FROM pa_fin_plan_types_vl
9255 WHERE fin_plan_type_id=p_finplan_type_id;
9256
9257
9258
9259 CURSOR get_resource_list_name_csr(p_resource_list_id NUMBER)
9260 IS
9261 SELECT name
9262 FROM pa_resource_lists
9263 WHERE p_resource_list_id=p_resource_list_id;
9264
9265 CURSOR get_status_code_csr(p_budget_version_id NUMBER)
9266 IS
9267 select budget_status_code
9268 from pa_budget_versions
9269 where budget_version_id = p_budget_version_id;
9270
9271 CURSOR l_finplan_line_csr
9272 (p_resource_assigment_id NUMBER
9273 ,p_budget_start_date DATE
9274 ,p_txn_currency_code VARCHAR2)
9275 IS
9276 SELECT 'X'
9277 FROM pa_budget_lines
9278 WHERE resource_assignment_id = p_resource_assigment_id
9279 AND start_date = p_budget_start_date
9280 AND txn_currency_code = p_txn_currency_code;
9281
9282 /*Added a new cursor c_dff_values for Bug 6417360*/
9283 cursor c_dff_values(p_budget_version_id NUMBER)
9284 is
9285 select attribute_category,
9286 attribute1,
9287 attribute2,
9288 attribute3,
9289 attribute4,
9290 attribute5,
9291 attribute6,
9292 attribute7,
9293 attribute8,
9294 attribute9,
9295 attribute10,
9296 attribute11,
9297 attribute12,
9298 attribute13,
9299 attribute14,
9300 attribute15
9301 from pa_budget_versions
9302 where budget_version_id = p_budget_version_id;
9303 /*End of code for Bug 6417360*/
9304
9305 l_budget_version_name pa_budget_versions.version_name%TYPE := null;
9306 l_fin_plan_type_id number;
9307 l_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE:=null;
9308 l_current_working_flag pa_budget_versions.current_working_flag%TYPE :=null;
9309 l_budget_entry_code pa_budget_versions.budget_entry_method_code%TYPE :=null;
9310 -- l_locked_by_person_id pa_budget_versions.locked_by_person_id%TYPE;
9311 l_record_version_number pa_budget_versions.record_version_number%TYPE;
9312
9313 l_amount_set_id pa_proj_fp_options.all_amount_set_id%TYPE;
9314 l_fin_plan_level_code pa_proj_fp_options.cost_fin_plan_level_code%TYPE :=null;
9315 l_person_id per_all_people_f.person_id%TYPE;
9316 l_resource_id per_all_people_f.person_id%TYPE;
9317 l_baselined_version_id NUMBER;
9318 l_debug_mode VARCHAR2(1);
9319 l_version_type pa_budget_versions.version_type%TYPE;
9320 l_curr_work_version_id VARCHAR2(15);
9321 l_debug_level5 CONSTANT NUMBER :=5;
9322 l_baselined_Ver_options_id VARCHAR2(15);
9323 l_budget_lines_in budget_line_in_tbl_type;
9324 l_debug_level3 CONSTANT NUMBER := 3;
9325 l_finplan_lines_tab pa_fin_plan_pvt.budget_lines_tab;
9326 l_uncategorized_res_list_id pa_resource_list_members.resource_list_id%TYPE;
9327 l_unit_of_measure pa_resources.unit_of_measure%TYPE;
9328 l_unc_track_as_labor_flag pa_resource_list_members.track_as_labor_flag%TYPE;
9329 l_unc_unit_of_measure pa_resources.unit_of_measure%TYPE;
9330 -- Bug Fix: 4569365. Removed MRC code.
9331 -- l_calling_context pa_mrc_finplan.g_calling_module%TYPE;
9332 l_calling_context VARCHAR2(30);
9333
9334 l_budget_status_code pa_budget_versions.budget_status_code%TYPE;
9335
9336 lx_budget_version_name pa_budget_versions.version_name%TYPE := null;
9337 lx_budget_version_number pa_budget_versions.version_number%TYPE :=null;
9338 lx_version_type pa_budget_versions.version_type%TYPE := null;
9339 lx_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE :=null;
9340 lx_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE:=null;
9341 lx_set_current_working_flag pa_budget_versions.current_working_flag%TYPE :=null;
9342 lx_locked_by_person_id pa_budget_versions.locked_by_person_id%TYPE;
9343 lx_resource_list_id pa_budget_versions.resource_list_id%TYPE;
9344 lx_plan_in_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
9345 lx_time_phased_type_code pa_proj_fp_options.cost_time_phased_code%TYPE;
9346 lx_resource_list_name pa_resource_lists_all_bg.Name%TYPE := null;
9347 lx_raw_cost_flag VARCHAR2(1) ;
9348 lx_burdened_cost_flag VARCHAR2(1);
9349 lx_revenue_flag VARCHAR2(1);
9350 lx_cost_qty_flag VARCHAR2(1);
9351 lx_revenue_qty_flag VARCHAR2(1);
9352 lx_all_qty_flag VARCHAR2(1);
9353 x_return_status VARCHAR2(1);
9354 lx_projfunc_cost_rate_type pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
9355 lx_projfunc_cost_rate_date_typ pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE ;
9356 lx_projfunc_cost_rate_date pa_proj_fp_options.projfunc_cost_rate_date%TYPE ;
9357 lx_projfunc_rev_rate_type pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
9358 lx_projfunc_rev_rate_date_typ pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE;
9359 lx_projfunc_rev_rate_date pa_proj_fp_options.projfunc_rev_rate_date%TYPE ;
9360 lx_project_cost_rate_type pa_proj_fp_options.project_cost_rate_type%TYPE ;
9361 lx_project_cost_rate_date_typ pa_proj_fp_options.project_cost_rate_date_type%TYPE ;
9362 lx_project_cost_rate_date pa_proj_fp_options.project_cost_rate_date%TYPE ;
9363 lx_project_rev_rate_type pa_proj_fp_options.project_rev_rate_type%TYPE ;
9364 lx_project_rev_rate_date_typ pa_proj_fp_options.project_rev_rate_date_type%TYPE ;
9365 lx_project_rev_rate_date pa_proj_fp_options.project_rev_rate_date%TYPE ;
9366
9367 l_project_currency_code pa_projects_all.project_currency_code%TYPE; -- 3453650
9368 l_projfunc_currency_code pa_projects_all.projfunc_currency_code%TYPE; -- 3453650
9369
9370 i number;
9371 j number;
9372 lx_change_reason_code VARCHAR2(30);
9373
9374 l_data VARCHAR2(2000);
9375 l_msg_index_out NUMBER;
9376
9377 /*Commenting the old variables and adding new ones for bug 6408139*/
9378 /*Earlier they were not being used anywhere else, but now will be used */
9379 -- l_bill_rate_flag pa_fin_plan_amount_sets.bill_rate_flag%type;
9380 -- l_cost_rate_flag pa_fin_plan_amount_sets.cost_rate_flag%type;
9381 -- l_burden_rate_flag pa_fin_plan_amount_sets.burden_rate_flag%type;
9382 lx_bill_rate_flag pa_fin_plan_amount_sets.bill_rate_flag%type;
9383 lx_cost_rate_flag pa_fin_plan_amount_sets.cost_rate_flag%type;
9384 lx_burden_rate_flag pa_fin_plan_amount_sets.burden_rate_flag%type;
9385 l_using_resource_lists_flag VARCHAR2(1);
9386 l_mfc_cost_type_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
9387 l_etc_method_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
9388 l_spread_curve_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
9389 l_budget_type_code pa_budget_types.budget_type_code%TYPE;
9390 l_amg_project_number pa_projects_all.segment1%TYPE;
9391 l_proj_fp_options_id pa_proj_fp_options.proj_fp_options_id%TYPE;
9392 l_CW_version_id pa_budget_versions.budget_version_id%TYPE;
9393 l_CW_record_version_number pa_budget_versions.record_Version_number%TYPE;
9394 l_allow_qty_flag VARCHAR2(1);
9395 l_conv_attrs_to_be_validated VARCHAR2(30);
9396 l_is_rate_type_valid BOOLEAN;
9397 l_call_validate_curr_api_flg VARCHAR2(1);
9398 l_projfunc_cost_rate_type pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
9399 l_projfunc_rev_rate_type pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
9400 l_project_cost_rate_type pa_proj_fp_options.project_cost_rate_type%TYPE ;
9401 l_project_rev_rate_type pa_proj_fp_options.project_rev_rate_type%TYPE ;
9402 l_projfunc_cost_exchange_rate pa_budget_lines.projfunc_cost_exchange_rate%TYPE;
9403 l_projfunc_rev_exchange_rate pa_budget_lines.projfunc_rev_exchange_rate%TYPE;
9404 l_project_cost_exchange_rate pa_budget_lines.project_cost_exchange_rate%TYPE;
9405 l_project_rev_exchange_rate pa_budget_lines.project_rev_exchange_rate%TYPE;
9406
9407 l_version_info_rec pa_fp_gen_amount_utils.fp_cols;
9408 /*Added local variables for bug 6408139*/
9409 l_plan_pref_code pa_proj_fp_options.fin_plan_preference_code%TYPE;
9410 l_cost_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
9411 l_rev_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
9412 l_all_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
9413 l_proj_fp_options_id_new pa_proj_fp_options.proj_fp_options_id%TYPE;
9414
9415
9416 /*Added local variables for Bug 6417360*/
9417 l_attribute_category pa_budget_versions.attribute_category%type;
9418 l_attribute1 pa_budget_versions.attribute1%type;
9419 l_attribute2 pa_budget_versions.attribute2%type;
9420 l_attribute3 pa_budget_versions.attribute3%type;
9421 l_attribute4 pa_budget_versions.attribute4%type;
9422 l_attribute5 pa_budget_versions.attribute5%type;
9423 l_attribute6 pa_budget_versions.attribute6%type;
9424 l_attribute7 pa_budget_versions.attribute7%type;
9425 l_attribute8 pa_budget_versions.attribute8%type;
9426 l_attribute9 pa_budget_versions.attribute9%type;
9427 l_attribute10 pa_budget_versions.attribute10%type;
9428 l_attribute11 pa_budget_versions.attribute11%type;
9429 l_attribute12 pa_budget_versions.attribute12%type;
9430 l_attribute13 pa_budget_versions.attribute13%type;
9431 l_attribute14 pa_budget_versions.attribute14%type;
9432 l_attribute15 pa_budget_versions.attribute15%type;
9433
9434 l_validate_status varchar2(1);
9435 /*End of code for Bug 6417360*/
9436
9437 BEGIN
9438
9439 -- Standard begin of API savepoint
9440
9441 SAVEPOINT update_budget_pub;
9442
9443 --Added for the bug 3453650
9444 IF p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9445 lx_change_reason_code := NULL;
9446 ELSE
9447 lx_change_reason_code := p_change_reason_code ;
9448 END IF;
9449
9450 IF p_set_current_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9451 lx_set_current_working_flag := NULL;
9452 ELSE
9453 lx_set_current_working_flag := p_set_current_working_flag ;
9454 END IF;
9455
9456 IF p_budget_version_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
9457 lx_budget_version_number := NULL;
9458 ELSE
9459 lx_budget_version_number := p_budget_version_number ;
9460 END IF;
9461
9462 IF p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9463 lx_projfunc_cost_rate_type := NULL;
9464 ELSE
9465 lx_projfunc_cost_rate_type := p_projfunc_cost_rate_type ;
9466 END IF;
9467
9468 IF p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9469 lx_projfunc_cost_rate_date_typ := NULL;
9470 ELSE
9471 lx_projfunc_cost_rate_date_typ := p_projfunc_cost_rate_date_typ ;
9472 END IF;
9473
9474 IF p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
9475 lx_projfunc_cost_rate_date := NULL;
9476 ELSE
9477 lx_projfunc_cost_rate_date := p_projfunc_cost_rate_date ;
9478 END IF;
9479
9480 IF p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9481 lx_projfunc_rev_rate_type := NULL;
9482 ELSE
9483 lx_projfunc_rev_rate_type := p_projfunc_rev_rate_type ;
9484 END IF;
9485
9486 IF p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9487 lx_projfunc_rev_rate_date_typ := NULL;
9488 ELSE
9489 lx_projfunc_rev_rate_date_typ := p_projfunc_rev_rate_date_typ ;
9490 END IF;
9491
9492 IF p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
9493 lx_projfunc_rev_rate_date := NULL;
9494 ELSE
9495 lx_projfunc_rev_rate_date := p_projfunc_rev_rate_date ;
9496 END IF;
9497
9498 IF p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9499 lx_project_cost_rate_type := NULL;
9500 ELSE
9501 lx_project_cost_rate_type := p_project_cost_rate_type ;
9502 END IF;
9503
9504 IF p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9505 lx_project_cost_rate_date_typ := NULL;
9506 ELSE
9507 lx_project_cost_rate_date_typ := p_project_cost_rate_date_typ ;
9508 END IF;
9509
9510 IF p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
9511 lx_project_cost_rate_date := NULL;
9512 ELSE
9513 lx_project_cost_rate_date := p_project_cost_rate_date ;
9514 END IF;
9515
9516 IF p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9517 lx_project_rev_rate_type := NULL;
9518 ELSE
9519 lx_project_rev_rate_type := p_project_rev_rate_type ;
9520 END IF;
9521
9522 IF p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9523 lx_project_rev_rate_date_typ := NULL;
9524 ELSE
9525 lx_project_rev_rate_date_typ := p_project_rev_rate_date_typ ;
9526 END IF;
9527
9528 IF p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
9529 lx_project_rev_rate_date := NULL;
9530 ELSE
9531 lx_project_rev_rate_date := p_project_rev_rate_date ;
9532 END IF;
9533 /*Added checks for Plan Amount Entry Flags for bug 6408139*/
9534 /*If the flags are PASSED as NULL, then it would mean that */
9535 /*user wants to make the flag as 'N' */
9536 IF p_raw_cost_flag = NULL THEN
9537 lx_raw_cost_flag := 'N';
9538 ELSE
9539 lx_raw_cost_flag := p_raw_cost_flag ;
9540 END IF;
9541
9542 IF p_burdened_cost_flag = NULL THEN
9543 lx_burdened_cost_flag := 'N';
9544 ELSE
9545 lx_burdened_cost_flag := p_burdened_cost_flag ;
9546 END IF;
9547
9548 IF p_revenue_flag = NULL THEN
9549 lx_revenue_flag := 'N';
9550 ELSE
9551 lx_revenue_flag := p_revenue_flag ;
9552 END IF;
9553
9554 IF p_cost_qty_flag = NULL THEN
9555 lx_cost_qty_flag := 'N';
9556 ELSE
9557 lx_cost_qty_flag := p_cost_qty_flag ;
9558 END IF;
9559
9560 IF p_revenue_qty_flag = NULL THEN
9561 lx_revenue_qty_flag := 'N';
9562 ELSE
9563 lx_revenue_qty_flag := p_revenue_qty_flag ;
9564 END IF;
9565
9566 IF p_all_qty_flag = NULL THEN
9567 lx_all_qty_flag := 'N';
9568 ELSE
9569 lx_all_qty_flag := p_all_qty_flag ;
9570 END IF;
9571
9572 IF p_bill_rate_flag = NULL THEN
9573 lx_bill_rate_flag := 'N';
9574 ELSE
9575 lx_bill_rate_flag := p_bill_rate_flag ;
9576 END IF;
9577
9578 IF p_cost_rate_flag = NULL THEN
9579 lx_cost_rate_flag := 'N';
9580 ELSE
9581 lx_cost_rate_flag := p_cost_rate_flag ;
9582 END IF;
9583
9584 IF p_burden_rate_flag = NULL THEN
9585 lx_burden_rate_flag := 'N';
9586 ELSE
9587 lx_burden_rate_flag := p_burden_rate_flag ;
9588 END IF;
9589 /*Checks End for Plan Amount Entry Flags for bug 6408139*/
9590
9591 l_user_id := FND_GLOBAL.User_id;
9592
9593 /* The G_MISS_XXX/null handling for these variables below has been deleted from the existing code in update_budget
9594 . This handling would be done in validate_header_info now */
9595 l_project_id := p_pa_project_id;
9596 l_budget_type_code := p_budget_type_code;
9597 l_fin_plan_type_id := p_finplan_type_id;
9598 lx_fin_plan_type_name := p_finplan_type_name;
9599 lx_version_type := p_version_type ;
9600
9601 --Call PA_BUDGET_PVT.validate_header_info to do the necessary
9602 --header level validations
9603 PA_BUDGET_PVT.validate_header_info
9604 ( p_api_version_number => p_api_version_number
9605 ,p_api_name => l_api_name
9606 ,p_init_msg_list => p_init_msg_list
9607 ,px_pa_project_id => l_project_id
9608 ,p_pm_project_reference => p_pm_project_reference
9609 ,p_pm_product_code => p_pm_product_code
9610 ,px_budget_type_code => l_budget_type_code
9611 ,px_fin_plan_type_id => l_fin_plan_type_id
9612 ,px_fin_plan_type_name => lx_fin_plan_type_name
9613 ,px_version_type => lx_version_type
9614 ,p_budget_version_number => p_budget_version_number
9615 ,p_change_reason_code => lx_change_reason_code
9616 ,p_function_name => 'PA_PM_UPDATE_BUDGET'
9617 ,x_budget_entry_method_code => l_budget_entry_method_code
9618 ,x_resource_list_id => lx_resource_list_id
9619 ,x_budget_version_id => l_budget_version_id
9620 ,x_fin_plan_level_code => l_fin_plan_level_code
9621 ,x_time_phased_code => lx_time_phased_type_code
9622 ,x_plan_in_multi_curr_flag => lx_plan_in_multi_curr_flag
9623 ,x_budget_amount_code => l_budget_amount_code
9624 ,x_categorization_code => l_categorization_code
9625 ,x_project_number => l_amg_project_number
9626 /* Plan Amount Entry flags introduced by bug 6408139 */
9627 ,px_raw_cost_flag => lx_raw_cost_flag
9628 ,px_burdened_cost_flag => lx_burdened_cost_flag
9629 ,px_revenue_flag => lx_revenue_flag
9630 ,px_cost_qty_flag => lx_cost_qty_flag
9631 ,px_revenue_qty_flag => lx_revenue_qty_flag
9632 ,px_all_qty_flag => lx_all_qty_flag
9633 ,px_bill_rate_flag => lx_bill_rate_flag
9634 ,px_cost_rate_flag => lx_cost_rate_flag
9635 ,px_burden_rate_flag => lx_burden_rate_flag
9636 /* Plan Amount Entry flags introduced by bug 6408139 */
9637 ,x_msg_count => p_msg_count
9638 ,x_msg_data => p_msg_data
9639 ,x_return_status => p_return_status );
9640
9641 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9642 IF(l_debug_mode='Y') THEN
9643 pa_debug.g_err_stage := 'validate header info API falied';
9644 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
9645 END IF;
9646 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9647 END IF;
9648
9649 OPEN l_amg_project_csr( l_project_id );
9650 FETCH l_amg_project_csr INTO l_amg_segment1;
9651 CLOSE l_amg_project_csr;
9652
9653 IF l_budget_type_code IS NOT NULL THEN
9654
9655 OPEN l_budget_attrs_csr(l_budget_type_code,l_project_id);
9656 FETCH l_budget_attrs_csr INTO l_budget_version_id,l_budget_version_name,l_budget_entry_method_code,
9657 l_resource_list_id,l_change_reason_code,l_description;
9658 CLOSE l_budget_attrs_csr;
9659
9660
9661 OPEN l_budget_entry_method_csr( l_budget_entry_method_code );
9662 FETCH l_budget_entry_method_csr INTO l_time_phased_type_code
9663 , l_entry_level_code
9664 , l_categorization_code;
9665 CLOSE l_budget_entry_method_csr;
9666
9667 ELSE
9668
9669 --Bug 5031071 l_budget_version_id fetched above and will contain the value
9670 OPEN l_finplan_attrs_csr(l_budget_version_id);
9671 FETCH l_finplan_attrs_csr INTO l_budget_version_name,l_current_working_flag,
9672 l_resource_list_id,l_change_reason_code,l_description,l_version_type;
9673 CLOSE l_finplan_attrs_csr;
9674
9675
9676 END IF;
9677
9678
9679 IF l_budget_version_id IS NULL THEN
9680
9681 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9682 THEN
9683 pa_interface_utils_pub.map_new_amg_msg
9684 ( p_old_message_code => 'PA_NO_BUDGET_VERSION'
9685 ,p_msg_attribute => 'CHANGE'
9686 ,p_resize_flag => 'N'
9687 ,p_msg_context => 'BUDG'
9688 ,p_attribute1 => l_amg_segment1
9689 ,p_attribute2 => ''
9690 ,p_attribute3 => lx_fin_plan_type_name
9691 ,p_attribute4 => ''
9692 ,p_attribute5 => '');
9693 END IF;
9694 p_multiple_task_msg := 'F'; -- 3453650
9695 END IF;
9696
9697 IF l_budget_type_code IS NULL THEN
9698 PA_COMP_PROFILE_PUB.GET_USER_INFO
9699 (p_user_id => l_user_id,
9700 x_person_id => l_person_id,
9701 x_resource_id => l_resource_id,
9702 x_resource_name => l_resource_name);
9703
9704 l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
9705 (p_budget_version_id => l_budget_version_id);
9706
9707 --Try to lock the version before updating the version. This is required so that nobody else can access it.
9708 pa_fin_plan_pvt.lock_unlock_version
9709 (p_budget_version_id => l_budget_version_id,
9710 p_record_version_number => l_record_version_number,
9711 p_action => 'L',
9712 p_user_id => l_user_id,
9713 p_person_id => lx_locked_by_person_id,
9714 x_return_status => x_return_status,
9715 x_msg_count => l_msg_count,
9716 x_msg_data => l_msg_data) ;
9717
9718
9719 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
9720
9721 IF l_debug_mode = 'Y' THEN
9722 pa_debug.g_err_stage := 'Error in lock unlock version - Cannot lock the version';
9723 pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,5);
9724 END IF;
9725
9726 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9727 END IF;
9728 END IF; -- END IF FOR l_budget_type_code is not null
9729
9730
9731 l_time_phased_type_code := PA_FIN_PLAN_UTILS.Get_Time_Phased_code(l_budget_version_id);
9732
9733 IF p_multiple_task_msg = 'F' THEN
9734 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9735 END IF;
9736
9737 IF (p_budget_version_name IS NOT NULL AND p_budget_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9738 --(p_budget_version_name <> l_budget_version_name) THEN
9739 ((p_budget_version_name <> l_budget_version_name OR l_budget_version_name IS NULL)) THEN --Bug 6600625
9740 lx_budget_version_name := p_budget_version_name;
9741 ELSE
9742 lx_budget_version_name := l_budget_version_name;
9743 END IF;
9744
9745 /*Commenting for bug 6408139 */
9746 /*
9747 --Added after review comments
9748 IF l_budget_type_code IS NULL THEN
9749 -- dbms_output.put_line ('about to get plan amt flags ');
9750 l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(l_budget_version_id);
9751
9752 PA_FIN_PLAN_UTILS.GET_PLAN_AMOUNT_FLAGS(
9753 P_AMOUNT_SET_ID => l_amount_set_id
9754 ,X_RAW_COST_FLAG => lx_raw_cost_flag
9755 ,X_BURDENED_FLAG => lx_burdened_cost_flag
9756 ,X_REVENUE_FLAG => lx_revenue_flag
9757 ,X_COST_QUANTITY_FLAG => lx_cost_qty_flag
9758 ,X_REV_QUANTITY_FLAG => lx_revenue_qty_flag
9759 ,X_ALL_QUANTITY_FLAG => lx_all_qty_flag
9760 ,X_BILL_RATE_FLAG => l_bill_rate_flag
9761 ,X_COST_RATE_FLAG => l_cost_rate_flag
9762 ,X_BURDEN_RATE_FLAG => l_burden_rate_flag
9763 ,x_message_count => l_msg_count
9764 ,x_return_status => x_return_status
9765 ,x_message_data => l_msg_data) ;
9766
9767 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
9768 THEN
9769 -- RAISE FND_API.G_EXC_ERROR;
9770 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9771 END IF;
9772 END IF; -- BUDGET_TYPE_CODE IS NULL FOR FINPLAN MODEL. */
9773 /*Commenting ends for bug 6408139 */
9774
9775
9776 /* Modified code for bug 6408139*/
9777 /* Bug 6408139 : Get Plan Amount Entry flags ONLY if ALL the passed ones are G_PA_MISS_CHAR */
9778 /* If even a single flag has been passed as NOT G_PA_MISS_CHAR, then we have already got the */
9779 /* flags from validate_header_info */
9780 IF l_budget_type_code IS NULL THEN
9781
9782 IF ( ( lx_raw_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9783 ( lx_burdened_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9784 ( lx_revenue_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9785 ( lx_cost_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9786 ( lx_revenue_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9787 ( lx_all_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9788 ( lx_bill_rate_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9789 ( lx_cost_rate_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
9790 ( lx_burden_rate_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) THEN
9791
9792 l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(l_budget_version_id);
9793
9794 PA_FIN_PLAN_UTILS.GET_PLAN_AMOUNT_FLAGS(
9795 P_AMOUNT_SET_ID => l_amount_set_id
9796 ,X_RAW_COST_FLAG => lx_raw_cost_flag
9797 ,X_BURDENED_FLAG => lx_burdened_cost_flag
9798 ,X_REVENUE_FLAG => lx_revenue_flag
9799 ,X_COST_QUANTITY_FLAG => lx_cost_qty_flag
9800 ,X_REV_QUANTITY_FLAG => lx_revenue_qty_flag
9801 ,X_ALL_QUANTITY_FLAG => lx_all_qty_flag
9802 ,X_BILL_RATE_FLAG => lx_bill_rate_flag -- l_bill_rate_flag
9803 ,X_COST_RATE_FLAG => lx_cost_rate_flag -- l_cost_rate_flag
9804 ,X_BURDEN_RATE_FLAG => lx_burden_rate_flag -- l_burden_rate_flag
9805 ,x_message_count => l_msg_count
9806 ,x_return_status => x_return_status
9807 ,x_message_data => l_msg_data) ;
9808
9809 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
9810 THEN
9811 -- RAISE FND_API.G_EXC_ERROR;
9812 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9813 END IF;
9814
9815 END IF ; -- Getting plan flags only when all are passed as G_PA_MISS_CHAR
9816 END IF; -- BUDGET_TYPE_CODE IS NULL FOR FINPLAN MODEL.
9817 /*Modified code ends for bug 6408139*/
9818
9819
9820 OPEN l_lock_budget_csr( l_budget_version_id ); -- 3453650
9821 CLOSE l_lock_budget_csr; --FYI, does not release locks
9822
9823 /* -- Changes made by Xin Liu for using of SQL BIND VARIABLE 12-MAY-2003 */
9824 --building the dynamic SQL statement
9825
9826 l_statement := ' UPDATE PA_BUDGET_VERSIONS SET ';
9827
9828 IF (p_description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_description IS NULL)
9829 AND nvl(p_description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> nvl(l_description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
9830 THEN
9831
9832 l_statement := l_statement ||
9833 ' DESCRIPTION = :xDescription'||',';
9834
9835 l_update_yes_flag := 'Y';
9836 END IF;
9837
9838 IF (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_change_reason_code IS NULL)
9839 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)
9840 THEN
9841
9842 IF ( p_change_reason_code IS NOT NULL AND
9843 p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
9844 THEN
9845
9846 OPEN l_budget_change_reason_csr( p_change_reason_code );
9847 FETCH l_budget_change_reason_csr INTO l_dummy;
9848
9849 IF l_budget_change_reason_csr%NOTFOUND
9850 THEN
9851 CLOSE l_budget_change_reason_csr;
9852
9853 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9854 THEN
9855 pa_interface_utils_pub.map_new_amg_msg
9856 ( p_old_message_code => 'PA_CHANGE_REASON_INVALID'
9857 ,p_msg_attribute => 'CHANGE'
9858 ,p_resize_flag => 'N'
9859 ,p_msg_context => 'BUDG'
9860 ,p_attribute1 => l_amg_segment1
9861 ,p_attribute2 => ''
9862 ,p_attribute3 => l_budget_type_code
9863 ,p_attribute4 => ''
9864 ,p_attribute5 => '');
9865 END IF;
9866
9867 RAISE FND_API.G_EXC_ERROR;
9868 END IF;
9869
9870 CLOSE l_budget_change_reason_csr;
9871
9872 END IF;
9873
9874 l_statement := l_statement ||
9875 ' CHANGE_REASON_CODE = :xChangeReasonCode'||',';
9876
9877 l_update_yes_flag := 'Y';
9878
9879 END IF;
9880
9881 /*Addition for the bug 3453650 starts */
9882 -- commented below code for the bug 4702500/4730094
9883 /*
9884 IF l_budget_type_code IS NULL THEN
9885
9886 IF (p_set_current_working_flag IS NULL
9887 OR p_set_current_working_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
9888 AND (nvl(p_set_current_working_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
9889 nvl(l_current_working_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
9890 THEN
9891 l_statement := l_statement || 'CURRENT_WORKING_FLAG = :xSetCurrentWorkingFlag' || ',';
9892 l_update_yes_flag := 'Y';
9893
9894 END IF;
9895
9896 END IF; --l_budget_type_code is null
9897 */
9898
9899 IF (p_budget_version_name IS NULL
9900 OR p_budget_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
9901 AND (nvl(p_budget_version_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
9902 nvl(l_budget_version_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
9903 then
9904 l_statement := l_statement || 'VERSION_NAME = :xBudgetVersionName' || ',';
9905
9906 l_update_yes_flag := 'Y';
9907 end if;
9908
9909 /*Addition for the bug 3453650 ends */
9910
9911 /*Below code is added for Bug 6417360*/
9912
9913 open c_dff_values(l_budget_version_id);
9914
9915 fetch c_dff_values into l_attribute_category,
9916 l_attribute1,
9917 l_attribute2,
9918 l_attribute3,
9919 l_attribute4,
9920 l_attribute5,
9921 l_attribute6,
9922 l_attribute7,
9923 l_attribute8,
9924 l_attribute9,
9925 l_attribute10,
9926 l_attribute11,
9927 l_attribute12,
9928 l_attribute13,
9929 l_attribute14,
9930 l_attribute15;
9931 close c_dff_values;
9932
9933 --Validate PA_BUDGET_VERSIONS_DESC_FLEX
9934
9935 -- 6188316 Adding double quotes for all 15 attributes and category values being appended to Update Query String
9936
9937 if ((p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9938 or p_attribute_category is null)
9939 and nvl(p_attribute_category,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
9940 <> nvl(l_attribute_category,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
9941 l_attribute_category := p_attribute_category;
9942 if l_attribute_category is null then
9943
9944 l_statement := l_statement ||
9945 ' ATTRIBUTE_CATEGORY = null,';
9946 else
9947 l_statement := l_statement ||
9948 ' ATTRIBUTE_CATEGORY = '''||l_attribute_category||''',';
9949 end if;
9950 l_update_yes_flag := 'Y';
9951 end if;
9952
9953 if ((p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9954 or p_attribute1 is null)
9955 and nvl(p_attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
9956 <> nvl(l_attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
9957 l_attribute1 := p_attribute1;
9958 -- dbms_output.put_line(' came inside the outer if ');
9959 if l_attribute1 is null then
9960 -- dbms_output.put_line(' came inside the inner if ');
9961 l_statement := l_statement ||
9962 ' ATTRIBUTE1 = null,';
9963 else
9964 l_statement := l_statement ||
9965 ' ATTRIBUTE1 = '''||l_attribute1||''',';
9966 end if;
9967 l_update_yes_flag := 'Y';
9968 end if;
9969
9970 if ((p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9971 or p_attribute2 is null)
9972 and nvl(p_attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
9973 <> nvl(l_attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
9974 l_attribute2 := p_attribute2;
9975 if l_attribute2 is null then
9976 l_statement := l_statement ||
9977 ' ATTRIBUTE2 = null,';
9978 else
9979 l_statement := l_statement ||
9980 ' ATTRIBUTE2 = '''||l_attribute2||''',';
9981 end if;
9982 l_update_yes_flag := 'Y';
9983 end if;
9984
9985 if ((p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9986 or p_attribute3 is null)
9987 and nvl(p_attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
9988 <> nvl(l_attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
9989 l_attribute3 := p_attribute3;
9990 if l_attribute3 is null then
9991 l_statement := l_statement ||
9992 ' ATTRIBUTE3 = null,';
9993 else
9994 l_statement := l_statement ||
9995 ' ATTRIBUTE3 = '''||l_attribute3||''',';
9996 end if;
9997 l_update_yes_flag := 'Y';
9998 end if;
9999
10000 if ((p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10001 or p_attribute4 is null)
10002 and nvl(p_attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10003 <> nvl(l_attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10004 l_attribute4 := p_attribute4;
10005 if l_attribute4 is null then
10006 l_statement := l_statement ||
10007 ' ATTRIBUTE4 = null,';
10008 else
10009 l_statement := l_statement ||
10010 ' ATTRIBUTE4 = '''||l_attribute4||''',';
10011 end if;
10012 l_update_yes_flag := 'Y';
10013 end if;
10014
10015 if ((p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10016 or p_attribute5 is null)
10017 and nvl(p_attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10018 <> nvl(l_attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10019 l_attribute5 := p_attribute5;
10020 if l_attribute5 is null then
10021 l_statement := l_statement ||
10022 ' ATTRIBUTE5 = null,';
10023 else
10024 l_statement := l_statement ||
10025 ' ATTRIBUTE5 = '''||l_attribute5||''',';
10026 end if;
10027 l_update_yes_flag := 'Y';
10028 end if;
10029
10030 if ((p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10031 or p_attribute6 is null)
10032 and nvl(p_attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10033 <> nvl(l_attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10034 l_attribute6 := p_attribute6;
10035 if l_attribute6 is null then
10036 l_statement := l_statement ||
10037 ' ATTRIBUTE6 = null,';
10038 else
10039 l_statement := l_statement ||
10040 ' ATTRIBUTE6 = '''||l_attribute6||''',';
10041 end if;
10042 l_update_yes_flag := 'Y';
10043 end if;
10044
10045 if ((p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10046 or p_attribute7 is null)
10047 and nvl(p_attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10048 <> nvl(l_attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10049 l_attribute7 := p_attribute7;
10050 if l_attribute7 is null then
10051 l_statement := l_statement ||
10052 ' ATTRIBUTE7 = null,';
10053 else
10054 l_statement := l_statement ||
10055 ' ATTRIBUTE7 = '''||l_attribute7||''',';
10056 end if;
10057 l_update_yes_flag := 'Y';
10058 end if;
10059
10060 if ((p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10061 or p_attribute8 is null)
10062 and nvl(p_attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10063 <> nvl(l_attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10064 l_attribute8 := p_attribute8;
10065 if l_attribute8 is null then
10066 l_statement := l_statement ||
10067 ' ATTRIBUTE8 = null,';
10068 else
10069 l_statement := l_statement ||
10070 ' ATTRIBUTE8 = '''||l_attribute8||''',';
10071 end if;
10072 l_update_yes_flag := 'Y';
10073 end if;
10074
10075 if ((p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10076 or p_attribute9 is null)
10077 and nvl(p_attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10078 <> nvl(l_attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10079 l_attribute9 := p_attribute9;
10080 if l_attribute9 is null then
10081 l_statement := l_statement ||
10082 ' ATTRIBUTE9 = null,';
10083 else
10084 l_statement := l_statement ||
10085 ' ATTRIBUTE9 = '''||l_attribute9||''',';
10086 end if;
10087 l_update_yes_flag := 'Y';
10088 end if;
10089
10090 if ((p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10091 or p_attribute10 is null)
10092 and nvl(p_attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10093 <> nvl(l_attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10094 l_attribute10 := p_attribute10;
10095 if l_attribute10 is null then
10096 l_statement := l_statement ||
10097 ' ATTRIBUTE10 = null,';
10098 else
10099 l_statement := l_statement ||
10100 ' ATTRIBUTE10 = '''||l_attribute10||''',';
10101 end if;
10102 l_update_yes_flag := 'Y';
10103 end if;
10104
10105 if ((p_attribute11 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10106 or p_attribute11 is null)
10107 and nvl(p_attribute11,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10108 <> nvl(l_attribute11,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10109 l_attribute11 := p_attribute11;
10110 if l_attribute11 is null then
10111 l_statement := l_statement ||
10112 ' ATTRIBUTE11 = null,';
10113 else
10114 l_statement := l_statement ||
10115 ' ATTRIBUTE11 = '''||l_attribute11||''',';
10116 end if;
10117 l_update_yes_flag := 'Y';
10118 end if;
10119
10120 if ((p_attribute12 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10121 or p_attribute12 is null)
10122 and nvl(p_attribute12,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10123 <> nvl(l_attribute12,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10124 l_attribute12 := p_attribute12;
10125 if l_attribute12 is null then
10126 l_statement := l_statement ||
10127 ' ATTRIBUTE12 = null,';
10128 else
10129 l_statement := l_statement ||
10130 ' ATTRIBUTE12 = '''||l_attribute12||''',';
10131 end if;
10132 l_update_yes_flag := 'Y';
10133 end if;
10134
10135 if ((p_attribute13 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10136 or p_attribute13 is null)
10137 and nvl(p_attribute13,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10138 <> nvl(l_attribute13,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10139 l_attribute13 := p_attribute13;
10140 if l_attribute13 is null then
10141 l_statement := l_statement ||
10142 ' ATTRIBUTE13 = null,';
10143 else
10144 l_statement := l_statement ||
10145 ' ATTRIBUTE13 = '''||l_attribute13||''',';
10146 end if;
10147 l_update_yes_flag := 'Y';
10148 end if;
10149
10150 if ((p_attribute14 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10151 or p_attribute14 is null)
10152 and nvl(p_attribute14,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10153 <> nvl(l_attribute14,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10154 l_attribute14 := p_attribute14;
10155 if l_attribute14 is null then
10156 l_statement := l_statement ||
10157 ' ATTRIBUTE14 = null,';
10158 else
10159 l_statement := l_statement ||
10160 ' ATTRIBUTE14 = '''||l_attribute14||''',';
10161 end if;
10162 l_update_yes_flag := 'Y';
10163 end if;
10164
10165 if ((p_attribute15 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10166 or p_attribute15 is null)
10167 and nvl(p_attribute15,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10168 <> nvl(l_attribute15,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
10169 l_attribute15 := p_attribute15;
10170 if l_attribute15 is null then
10171 l_statement := l_statement ||
10172 ' ATTRIBUTE15 = null,';
10173 else
10174 l_statement := l_statement ||
10175 ' ATTRIBUTE15 = '''||l_attribute15||''',';
10176 end if;
10177 l_update_yes_flag := 'Y';
10178 end if;
10179 /*
10180 dbms_output.put_line('statement ');
10181 dbms_output.put_line('l_attribute_category '||l_attribute_category);
10182 dbms_output.put_line('l_attribute1 '||l_attribute1);
10183 dbms_output.put_line('l_attribute2 '||l_attribute2);
10184 dbms_output.put_line('l_attribute3 '||l_attribute3);
10185 dbms_output.put_line('l_attribute4 '||l_attribute4);
10186 dbms_output.put_line('l_attribute5 '||l_attribute5);
10187
10188 dbms_output.put_line('l_attribute6 '||l_attribute6);
10189 dbms_output.put_line('l_attribute7 '||l_attribute7);
10190 dbms_output.put_line('l_attribute8 '||l_attribute8);
10191 dbms_output.put_line('l_attribute9 '||l_attribute9);
10192 dbms_output.put_line('l_attribute10 '||l_attribute10);
10193
10194 dbms_output.put_line('l_attribute11 '||l_attribute11);
10195 dbms_output.put_line('l_attribute12 '||l_attribute12);
10196 dbms_output.put_line('l_attribute13 '||l_attribute13);
10197 dbms_output.put_line('l_attribute14 '||l_attribute14);
10198 dbms_output.put_line('l_attribute15 '||l_attribute15);*/
10199
10200
10201 pa_task_utils.validate_flex_fields(
10202 p_desc_flex_name => 'PA_BUDGET_VERSIONS_DESC_FLEX'
10203 ,p_attribute_category => l_attribute_category
10204 ,p_attribute1 => l_attribute1
10205 ,p_attribute2 => l_attribute2
10206 ,p_attribute3 => l_attribute3
10207 ,p_attribute4 => l_attribute4
10208 ,p_attribute5 => l_attribute5
10209 ,p_attribute6 => l_attribute6
10210 ,p_attribute7 => l_attribute7
10211 ,p_attribute8 => l_attribute8
10212 ,p_attribute9 => l_attribute9
10213 ,p_attribute10 => l_attribute10
10214 ,p_attribute11 => l_attribute11
10215 ,p_attribute12 => l_attribute12
10216 ,p_attribute13 => l_attribute13
10217 ,p_attribute14 => l_attribute14
10218 ,p_attribute15 => l_attribute15
10219 ,p_RETURN_msg => l_msg_data
10220 ,p_validate_status => l_validate_status
10221 );
10222 IF l_validate_status = 'N'
10223 THEN
10224 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10225 THEN
10226 pa_interface_utils_pub.map_new_amg_msg
10227 ( p_old_message_code => 'PA_INVALID_FF_VALUES'
10228 ,p_msg_attribute => 'CHANGE'
10229 ,p_resize_flag => 'N'
10230 ,p_msg_context => 'FLEX'
10231 ,p_attribute1 => l_msg_data
10232 ,p_attribute2 => ''
10233 ,p_attribute3 => ''
10234 ,p_attribute4 => ''
10235 ,p_attribute5 => '');
10236 END IF;
10237 RAISE FND_API.G_EXC_ERROR;
10238 END IF;
10239
10240 /*End of code for Bug 6417360*/
10241
10242 IF l_update_yes_flag = 'Y'
10243 THEN
10244 l_statement := l_statement ||
10245 ' LAST_UPDATE_DATE = '||''''||
10246 SYSDATE||''''||',';
10247
10248 l_statement := l_statement ||
10249 ' LAST_UPDATED_BY = '||G_USER_ID||',';
10250
10251 l_statement := l_statement ||
10252 ' LAST_UPDATE_LOGIN = '||G_LOGIN_ID;
10253
10254 l_statement := l_statement ||
10255 ' WHERE BUDGET_VERSION_ID = '||TO_CHAR(l_budget_version_id);
10256
10257 l_cursor_id := DBMS_SQL.open_cursor;
10258 DBMS_SQL.parse(l_cursor_id, l_statement, DBMS_SQL.native);
10259
10260 IF (p_description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_description IS NULL)
10261 AND nvl(p_description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10262 nvl(l_description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10263 THEN
10264 DBMS_SQL.BIND_VARIABLE(l_cursor_id, ':xDescription', p_description);
10265
10266 END IF;
10267
10268 IF (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_change_reason_code IS NULL)
10269 AND nvl(p_change_reason_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10270 nvl(l_change_reason_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10271 THEN
10272 DBMS_SQL.BIND_VARIABLE(l_cursor_id, ':xChangeReasonCode', p_change_reason_code);
10273
10274 END IF;
10275
10276
10277 /*Addition for the bug 3453650 starts */
10278 IF l_budget_type_code IS NULL THEN
10279 IF (p_set_current_working_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_set_current_working_flag IS NULL)
10280 AND nvl(p_set_current_working_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10281 nvl(l_current_working_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10282 THEN
10283 -- Get the details of the current working version so as to pass it to the
10284 -- Set Current Working API.
10285 pa_fin_plan_utils.Get_Curr_Working_Version_Info(
10286 p_project_id => l_project_id
10287 ,p_fin_plan_type_id => l_fin_plan_type_id
10288 ,p_version_type => lx_version_type
10289 ,x_fp_options_id => l_proj_fp_options_id
10290 ,x_fin_plan_version_id => l_CW_version_id
10291 ,x_return_status => x_return_status
10292 ,x_msg_count => l_msg_count
10293 ,x_msg_data => l_msg_data );
10294
10295 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10296 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10297 END IF;
10298
10299 -- Further processing is required only if the version to be updated is not the current working verion
10300 IF l_budget_version_id <> l_CW_version_id THEN
10301
10302 --Get the record version number of the current working version
10303 l_CW_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
10304
10305 --Get the record version number of the version to be updated
10306 l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_budget_version_id);
10307
10308 pa_fin_plan_pvt.lock_unlock_version
10309 (p_budget_version_id => l_CW_version_id,
10310 p_record_version_number => l_CW_record_version_number,
10311 p_action => 'L',
10312 p_user_id => l_user_id,
10313 p_person_id => lx_locked_by_person_id,
10314 x_return_status => x_return_status,
10315 x_msg_count => l_msg_count,
10316 x_msg_data => l_msg_data) ;
10317
10318 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
10319
10320 IF l_debug_mode = 'Y' THEN
10321 pa_debug.g_err_stage := 'Error executing lock unlock version';
10322 pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,3);
10323 END IF;
10324
10325 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10326
10327 END IF;
10328
10329 IF l_debug_mode = 'Y' THEN
10330 pa_debug.g_err_stage := 'About to call set current working version';
10331 pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,3);
10332 END IF;
10333
10334 -- Getting the rec ver number again as it will be incremented by the api lock_unlock_version
10335 l_CW_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
10336
10337 pa_fin_plan_pub.Set_Current_Working
10338 (p_project_id => l_project_id,
10339 p_budget_version_id => l_budget_version_id,
10340 p_record_version_number => l_record_version_number,
10341 p_orig_budget_version_id => l_CW_version_id,
10342 p_orig_record_version_number => l_CW_record_version_number,
10343 x_return_status => x_return_status,
10344 x_msg_count => l_msg_count,
10345 x_msg_data => l_msg_data);
10346
10347 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10348 IF l_debug_mode= 'Y' THEN
10349 pa_debug.g_err_stage:= 'Error executing Set_Current_Working ';
10350 pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
10351 END IF;
10352 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10353 END IF;
10354
10355 END IF; -- IF l_created_version_id <> l_CW_version_id THEN
10356
10357
10358 END IF;
10359
10360 END IF; -- l_budget_type_code IS NULL
10361
10362 IF (p_budget_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_budget_version_name IS NULL)
10363 AND nvl(p_budget_version_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
10364 nvl(l_budget_version_name,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
10365 THEN
10366 DBMS_SQL.BIND_VARIABLE(l_cursor_id, ':xBudgetVersionName', lx_budget_version_name);
10367
10368 END IF;
10369 /*Addition for the bug 3453650 ends */
10370
10371 l_rows := DBMS_SQL.execute(l_cursor_id);
10372
10373 IF DBMS_SQL.is_open (l_cursor_id)
10374 THEN
10375 DBMS_SQL.close_cursor (l_cursor_id);
10376 END IF;
10377
10378 END IF;
10379
10380 /* Bug 6408139 : We are setting the amount_set_id ONLY when atleast some of the */
10381 /* input amount entry flags ARE not G_PA_MISS_CHAR , which means, user wants to */
10382 /* change some flag*/
10383 IF l_budget_type_code IS NULL THEN -- finplan model
10384
10385 IF (( lx_raw_cost_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10386 ( lx_burdened_cost_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10387 ( lx_revenue_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10388 ( lx_cost_qty_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10389 ( lx_revenue_qty_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10390 ( lx_all_qty_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10391 ( lx_bill_rate_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10392 ( lx_cost_rate_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
10393 ( lx_burden_rate_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) ) THEN
10394
10395 --Get the preference code
10396 IF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST) THEN
10397 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_COST_ONLY;
10398 ELSIF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE) THEN
10399 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_REVENUE_ONLY;
10400 ELSIF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL) THEN
10401 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_COST_AND_REV_SAME;
10402 END IF;
10403
10404 IF l_debug_mode = 'Y' THEN
10405 pa_debug.g_err_stage := 'Preference code is -> ' || l_plan_pref_code;
10406 pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,3);
10407 END IF;
10408
10409
10410 --Get the amount set id.
10411 pa_fin_plan_utils.GET_OR_CREATE_AMOUNT_SET_ID
10412 (
10413 p_raw_cost_flag => lx_raw_cost_flag
10414 ,p_burdened_cost_flag => lx_burdened_cost_flag
10415 ,p_revenue_flag => lx_revenue_flag
10416 ,p_cost_qty_flag => lx_cost_qty_flag
10417 ,p_revenue_qty_flag => lx_revenue_qty_flag
10418 ,p_all_qty_flag => lx_all_qty_flag
10419 ,p_plan_pref_code => l_plan_pref_code
10420 ,p_bill_rate_flag => lx_bill_rate_flag
10421 ,p_cost_rate_flag => lx_cost_rate_flag
10422 ,p_burden_rate_flag => lx_burden_rate_flag
10423 ,x_cost_amount_set_id => l_cost_amount_set_id
10424 ,x_revenue_amount_set_id => l_rev_amount_set_id
10425 ,x_all_amount_set_id => l_all_amount_set_id
10426 ,x_message_count => l_msg_count
10427 ,x_return_status => x_return_status
10428 ,x_message_data => l_msg_data
10429 );
10430
10431 IF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST) THEN
10432 l_amount_set_id := l_cost_amount_set_id;
10433 ELSIF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE) THEN
10434 l_amount_set_id := l_rev_amount_set_id;
10435 ELSIF(lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL) THEN
10436 l_amount_set_id := l_all_amount_set_id;
10437 END IF;
10438
10439 IF l_debug_mode = 'Y' THEN
10440 pa_debug.g_err_stage:= 'Amount set id is -> ' || l_amount_set_id;
10441 pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,3);
10442 END IF;
10443
10444 l_proj_fp_options_id_new := PA_PROJ_FP_OPTIONS_PUB.Get_FP_Option_ID
10445 (p_project_id => l_project_id
10446 ,p_plan_type_id => l_fin_plan_type_id
10447 ,p_plan_version_id => l_budget_version_id
10448 );
10449
10450
10451 IF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
10452 UPDATE pa_proj_fp_options
10453 SET cost_amount_set_id = l_amount_set_id
10454 WHERE proj_fp_options_id = l_proj_fp_options_id_new;
10455 ELSIF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
10456 UPDATE pa_proj_fp_options
10457 SET revenue_amount_set_id = l_amount_set_id
10458 WHERE proj_fp_options_id = l_proj_fp_options_id_new;
10459 ELSIF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL THEN
10460 UPDATE pa_proj_fp_options
10461 SET all_amount_set_id = l_amount_set_id
10462 WHERE proj_fp_options_id = l_proj_fp_options_id_new;
10463 END IF;
10464
10465 END IF ; -- G_PA_MISS_CHAR condition
10466
10467 END IF ; --IF l_budget_type_code IS NULL THEN
10468
10469 /*Bug 6408139 : Code addition ends*/
10470
10471 l_budget_lines_in := p_budget_lines_in;
10472 -- Changes for the bug 3453650
10473 IF ( nvl(l_budget_lines_in.last,0) > 0 ) THEN
10474
10475 IF l_debug_mode = 'Y' THEN
10476 pa_debug.g_err_stage := 'About to call validate budget lines in Budgets model';
10477 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10478 END IF;
10479
10480 --Handle G_MISS_XXX for l_budget_lines_in before calling Validate_Budget_Lines.
10481 FOR i in l_budget_lines_in.FIRST..l_budget_lines_in.LAST LOOP
10482
10483 IF l_budget_lines_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10484 l_budget_lines_in(i).pa_task_id := NULL;
10485 END IF;
10486
10487 IF l_budget_lines_in(i).pm_task_reference =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10488 l_budget_lines_in(i).pm_task_reference := NULL;
10489 END IF;
10490
10491 IF l_budget_lines_in(i).resource_alias= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10492 l_budget_lines_in(i).resource_alias := NULL;
10493 END IF;
10494
10495 IF l_budget_lines_in(i).resource_list_member_id =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10496 l_budget_lines_in(i).resource_list_member_id:= NULL;
10497 END IF;
10498
10499 IF l_budget_lines_in(i).budget_start_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10500 l_budget_lines_in(i).budget_start_date:= NULL;
10501 END IF;
10502 IF l_budget_lines_in(i).budget_end_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10503 l_budget_lines_in(i).budget_end_date:= NULL;
10504 END IF;
10505
10506 IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10507 l_budget_lines_in(i).period_name := NULL;
10508 END IF;
10509
10510 IF l_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10511 l_budget_lines_in(i).raw_cost := NULL;
10512 END IF;
10513
10514 IF l_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10515 l_budget_lines_in(i).burdened_cost := NULL;
10516 END IF;
10517
10518 IF l_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10519 l_budget_lines_in(i).revenue := NULL;
10520 END IF;
10521
10522 IF l_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10523 l_budget_lines_in(i).quantity := NULL;
10524 END IF;
10525
10526
10527 IF l_budget_lines_in(i).change_reason_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10528 l_budget_lines_in(i).change_reason_code :=NULL;
10529 END IF;
10530
10531 IF l_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10532 l_budget_lines_in(i).description := NULL;
10533 END IF;
10534
10535 IF l_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10536 l_budget_lines_in(i).attribute_category := NULL;
10537 END IF;
10538
10539 IF l_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10540 l_budget_lines_in(i).attribute1 := NULL;
10541 END IF;
10542
10543 IF l_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10544 l_budget_lines_in(i).attribute2 := NULL;
10545 END IF;
10546
10547 IF l_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10548 l_budget_lines_in(i).attribute3 := NULL;
10549 END IF;
10550
10551 IF l_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10552 l_budget_lines_in(i).attribute4 := NULL;
10553 END IF;
10554
10555 IF l_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10556 l_budget_lines_in(i).attribute5 := NULL;
10557 END IF;
10558
10559 IF l_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10560 l_budget_lines_in(i).attribute6 := NULL;
10561 END IF;
10562
10563 IF l_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10564 l_budget_lines_in(i).attribute7 := NULL;
10565 END IF;
10566
10567 IF l_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10568 l_budget_lines_in(i).attribute8 := NULL;
10569 END IF;
10570
10571 IF l_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10572 l_budget_lines_in(i).attribute9 := NULL;
10573 END IF;
10574
10575 IF l_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10576 l_budget_lines_in(i).attribute10 := NULL;
10577 END IF;
10578
10579 IF l_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10580 l_budget_lines_in(i).attribute11 := NULL;
10581 END IF;
10582
10583 IF l_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10584 l_budget_lines_in(i).attribute12 := NULL;
10585 END IF;
10586
10587 IF l_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10588 l_budget_lines_in(i).attribute13 := NULL;
10589 END IF;
10590
10591 IF l_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10592 l_budget_lines_in(i).attribute14 := NULL;
10593 END IF;
10594
10595 IF l_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10596 l_budget_lines_in(i).attribute15 := NULL;
10597 END IF;
10598
10599 IF l_budget_lines_in(i).txn_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10600 l_budget_lines_in(i).txn_currency_code := NULL;
10601 END IF;
10602
10603 IF l_budget_lines_in(i).projfunc_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10604 l_budget_lines_in(i).PROJFUNC_COST_RATE_TYPE := NULL;
10605 END IF;
10606
10607 IF l_budget_lines_in(i).projfunc_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10608 l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
10609 END IF;
10610
10611 IF l_budget_lines_in(i).projfunc_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10612 l_budget_lines_in(i).PROJFUNC_COST_RATE_DATE := NULL;
10613 END IF;
10614
10615 IF l_budget_lines_in(i).projfunc_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10616 l_budget_lines_in(i).PROJFUNC_COST_EXCHANGE_RATE := NULL;
10617 END IF;
10618
10619 IF l_budget_lines_in(i).projfunc_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10620 l_budget_lines_in(i).PROJFUNC_REV_RATE_TYPE := NULL;
10621 END IF;
10622
10623 IF l_budget_lines_in(i).projfunc_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10624 l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
10625 END IF;
10626
10627 IF l_budget_lines_in(i).projfunc_rev_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10628 l_budget_lines_in(i).PROJFUNC_REV_RATE_DATE := NULL;
10629 END IF;
10630
10631 IF l_budget_lines_in(i).projfunc_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10632 l_budget_lines_in(i).PROJFUNC_REV_EXCHANGE_RATE := NULL;
10633 END IF;
10634
10635 IF l_budget_lines_in(i).project_cost_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10636 l_budget_lines_in(i).PROJECT_COST_RATE_TYPE := NULL;
10637 END IF;
10638
10639 IF l_budget_lines_in(i).project_cost_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10640 l_budget_lines_in(i).PROJECT_COST_RATE_DATE_TYPE := NULL;
10641 END IF;
10642
10643 IF l_budget_lines_in(i).project_cost_rate_date=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10644 l_budget_lines_in(i).PROJECT_COST_RATE_DATE := NULL;
10645 END IF;
10646
10647 IF l_budget_lines_in(i).project_cost_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10648 l_budget_lines_in(i).PROJECT_COST_EXCHANGE_RATE := NULL;
10649 END IF;
10650
10651 IF l_budget_lines_in(i).project_rev_rate_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10652 l_budget_lines_in(i).PROJECT_REV_RATE_TYPE := NULL;
10653 END IF;
10654
10655 IF l_budget_lines_in(i).project_rev_rate_date_type=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10656 l_budget_lines_in(i).PROJECT_REV_RATE_DATE_TYPE := NULL;
10657 END IF;
10658
10659 IF l_budget_lines_in(i).project_rev_rate_date =PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
10660 l_budget_lines_in(i).PROJECT_REV_RATE_DATE := NULL;
10661 END IF;
10662
10663 IF l_budget_lines_in(i).project_rev_exchange_rate=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
10664 l_budget_lines_in(i).PROJECT_REV_EXCHANGE_RATE := NULL;
10665 END IF;
10666
10667 IF l_budget_lines_in(i).pm_product_code =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10668 l_budget_lines_in(i).pm_product_code := NULL;
10669 END IF;
10670
10671 IF l_budget_lines_in(i).pm_budget_line_reference=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
10672 l_budget_lines_in(i).pm_budget_line_reference := NULL;
10673 END IF;
10674 END LOOP;
10675 END IF; -- ( nvl(l_budget_lines_in.last,0) > 0 )
10676
10677 l_version_info_rec.x_budget_version_id := l_budget_version_id; --Added for bug 4290310.
10678
10679 IF l_budget_type_code IS NOT NULL THEN
10680
10681 pa_budget_pvt.Validate_Budget_Lines
10682 (p_pa_project_id => l_project_id
10683 ,p_budget_type_code => l_budget_type_code
10684 ,p_fin_plan_type_id => NULL
10685 ,p_version_type => NULL
10686 ,p_resource_list_id => lx_resource_list_id
10687 ,p_time_phased_code => lx_time_phased_type_code
10688 ,p_budget_entry_method_code => l_budget_entry_method_code
10689 ,p_entry_level_code => l_entry_level_code
10690 ,p_allow_qty_flag => NULL
10691 ,p_allow_raw_cost_flag => NULL
10692 ,p_allow_burdened_cost_flag => NULL
10693 ,p_allow_revenue_flag => NULL
10694 ,p_multi_currency_flag => NULL
10695 ,p_project_cost_rate_type => NULL
10696 ,p_project_cost_rate_date_typ => NULL
10697 ,p_project_cost_rate_date => NULL
10698 ,p_project_cost_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10699 ,p_projfunc_cost_rate_type => NULL
10700 ,p_projfunc_cost_rate_date_typ => NULL
10701 ,p_projfunc_cost_rate_date => NULL
10702 ,p_projfunc_cost_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10703 ,p_project_rev_rate_type => NULL
10704 ,p_project_rev_rate_date_typ => NULL
10705 ,p_project_rev_rate_date => NULL
10706 ,p_project_rev_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10707 ,p_projfunc_rev_rate_type => NULL
10708 ,p_projfunc_rev_rate_date_typ => NULL
10709 ,p_projfunc_rev_rate_date => NULL
10710 ,p_projfunc_rev_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10711 ,px_budget_lines_in => l_budget_lines_in
10712 ,x_budget_lines_out => p_budget_lines_out /* Bug 3368135*/
10713 /* Bug 3986129: FP.M Web ADI Dev changes: New parameters added */
10714 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
10715 ,x_etc_method_code_tbl => l_etc_method_code_tbl
10716 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
10717 ,x_msg_count => p_msg_count
10718 ,x_msg_data => p_msg_data
10719 ,x_return_status => p_return_status);
10720
10721 IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN -- 3453650
10722 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10723 END IF;
10724
10725 ELSE --l_budget_type_code IS NOT NULL
10726
10727 IF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
10728 l_allow_qty_flag := lx_cost_qty_flag;
10729 ELSIF lx_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
10730 l_allow_qty_flag := lx_revenue_qty_flag;
10731 ELSE
10732 l_allow_qty_flag := lx_all_qty_flag;
10733 END IF;
10734
10735 --Validate the finplan lines passed
10736 pa_budget_pvt.Validate_Budget_Lines
10737 ( p_pa_project_id => l_project_id
10738 ,p_budget_type_code => NULL
10739 ,p_fin_plan_type_id => l_fin_plan_type_id
10740 ,p_version_type => lx_version_type
10741 ,p_resource_list_id => lx_resource_list_id
10742 ,p_time_phased_code => lx_time_phased_type_code
10743 ,p_budget_entry_method_code => NULL
10744 ,p_entry_level_code => l_fin_plan_level_code
10745 ,p_allow_qty_flag => l_allow_qty_flag
10746 ,p_allow_raw_cost_flag => lx_raw_cost_flag
10747 ,p_allow_burdened_cost_flag => lx_burdened_cost_flag
10748 ,p_allow_revenue_flag => lx_revenue_flag --Bug 4422201.Passing the correct flag for this parameter.
10749 ,p_multi_currency_flag => lx_plan_in_multi_curr_flag
10750 ,p_project_cost_rate_type => lx_project_cost_rate_type
10751 ,p_project_cost_rate_date_typ => lx_project_cost_rate_date_typ
10752 ,p_project_cost_rate_date => lx_project_cost_rate_date
10753 ,p_project_cost_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10754 ,p_projfunc_cost_rate_type => lx_projfunc_cost_rate_type
10755 ,p_projfunc_cost_rate_date_typ => lx_projfunc_cost_rate_date_typ
10756 ,p_projfunc_cost_rate_date => lx_projfunc_cost_rate_date
10757 ,p_projfunc_cost_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10758 ,p_project_rev_rate_type => lx_project_rev_rate_type
10759 ,p_project_rev_rate_date_typ => lx_project_rev_rate_date_typ
10760 ,p_project_rev_rate_date => lx_project_rev_rate_date
10761 ,p_project_rev_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10762 ,p_projfunc_rev_rate_type => lx_projfunc_rev_rate_type
10763 ,p_projfunc_rev_rate_date_typ => lx_projfunc_rev_rate_date_typ
10764 ,p_projfunc_rev_rate_date => lx_projfunc_rev_rate_date
10765 ,p_projfunc_rev_exchange_rate => PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Passing this as G_MISS_XXX as this is obsolete parameter
10766 ,p_version_info_rec => l_version_info_rec -- Added for bug 4290310.
10767 ,px_budget_lines_in => l_budget_lines_in
10768 ,x_budget_lines_out => p_budget_lines_out /* Bug 3368135*/
10769 /* Bug 3986129: FP.M Web ADI Dev changes: New parameters added */
10770 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
10771 ,x_etc_method_code_tbl => l_etc_method_code_tbl
10772 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
10773 ,x_msg_count => p_msg_count
10774 ,x_msg_data => p_msg_data
10775 ,x_return_status => p_return_status);
10776
10777 IF(p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10778 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10779 END IF;
10780 END IF; --l_budget_type_code IS NOT NULL
10781
10782 --In the below code for finplan model validate header level currency conversion attributes and update them.
10783 IF (l_budget_type_code IS NULL)
10784 THEN
10785 IF(lx_plan_in_multi_curr_flag = 'N')
10786 THEN
10787 IF((p_projfunc_cost_rate_type is null OR p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10788 (p_projfunc_cost_rate_date_typ is null OR p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10789 (p_projfunc_cost_rate_date is null OR p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) AND
10790 (p_projfunc_rev_rate_type is null OR p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10791 (p_projfunc_rev_rate_date_typ is null OR p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10792 (p_projfunc_rev_rate_date is null OR p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) AND
10793 (p_project_cost_rate_type is null OR p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10794 (p_project_cost_rate_date_typ is null OR p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10795 (p_project_cost_rate_date is null OR p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) AND
10796 (p_project_rev_rate_type is null OR p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10797 (p_project_rev_rate_date_typ is null OR p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
10798 (p_project_rev_rate_date is null OR p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ))
10799 THEN
10800 NULL;
10801 ELSE
10802 /*even if one of the currency conversion attributes is not null then call validate header info
10803 *coz its possible tht multi currency flag could be No and we can still have values for the currency conversion
10804 *attributes*/
10805 l_call_validate_curr_api_flg := 'Y'; --Setting this flag to call the validate_currency_conversion API later.
10806 END IF;
10807 ELSIF (lx_plan_in_multi_curr_flag = 'Y') THEN
10808 IF( p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
10809 p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
10810 p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
10811 p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
10812 p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
10813 p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
10814 p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
10815 p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
10816 p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
10817 p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
10818 p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
10819 p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
10820 THEN --if the user doesnt want them to change then we need not call validate API
10821 NULL;
10822 ELSE
10823 /*Here there could be two cases. All the passed MC conversion attributes could be null or one of them could be not null
10824 *When even one of them is not null then validate_conversion_attributes API has to be called surely for validating the attribute
10825 * which has been passed.
10826 *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
10827 *of now assuming validate_conversion_attribute api would raise this error we are calling the validate conversion API. If this
10828 * API doesnt raise the error for this case then we will raise the error from here itself*/
10829 /*validate_conversion_attribute API raises the error when all the MC conversion attributes are null. So we are not
10830 raising this error from here.*/
10831
10832 l_call_validate_curr_api_flg := 'Y';--Setting this flag to call the validate_currency_conversion API later.
10833 END IF;
10834 END IF;
10835
10836 IF(l_call_validate_curr_api_flg = 'Y') --Now call the validate_currency_conversion API
10837 THEN
10838 -- Depending on px_version_type initialise l_conv_attrs_to_be_validated
10839
10840 IF (lx_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_ALL) THEN
10841 l_conv_attrs_to_be_validated := lx_version_type;
10842 ELSE
10843 l_conv_attrs_to_be_validated := PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_BOTH;
10844 END IF;
10845
10846 IF l_conv_attrs_to_be_validated = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
10847
10848 lx_project_rev_rate_type :=NULL;
10849 lx_project_rev_rate_date_typ :=NULL;
10850 lx_project_rev_rate_date :=NULL;
10851
10852 lx_projfunc_rev_rate_type :=NULL;
10853 lx_projfunc_rev_rate_date_typ :=NULL;
10854 lx_projfunc_rev_rate_date :=NULL;
10855
10856 ELSIF l_conv_attrs_to_be_validated = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
10857
10858 lx_project_cost_rate_type :=NULL;
10859 lx_project_cost_rate_date_typ :=NULL;
10860 lx_project_cost_rate_date :=NULL;
10861
10862 lx_projfunc_cost_rate_type :=NULL;
10863 lx_projfunc_cost_rate_date_typ :=NULL;
10864 lx_projfunc_cost_rate_date :=NULL;
10865
10866 END IF;
10867
10868 SELECT p.project_currency_code
10869 ,p.projfunc_currency_code
10870 INTO l_project_currency_code
10871 ,l_projfunc_currency_code
10872 FROM pa_projects_all p
10873 WHERE p.project_id = l_project_id;
10874
10875
10876 SELECT projfunc_cost_rate_type
10877 ,projfunc_rev_rate_type
10878 ,project_cost_rate_type
10879 ,project_rev_rate_type
10880 INTO l_projfunc_cost_rate_type
10881 ,l_projfunc_rev_rate_type
10882 ,l_project_cost_rate_type
10883 ,l_project_rev_rate_type
10884 FROM pa_proj_fp_options
10885 WHERE project_id = l_project_id
10886 AND fin_plan_type_id=l_fin_plan_type_id
10887 AND fin_plan_version_id IS NULL
10888 AND fin_plan_option_level_code= PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE;
10889
10890 pa_budget_pvt.valid_rate_type
10891 (p_pt_project_cost_rate_type => l_project_cost_rate_type,
10892 p_pt_project_rev_rate_type => l_project_rev_rate_type,
10893 p_pt_projfunc_cost_rate_type=> l_projfunc_cost_rate_type,
10894 p_pt_projfunc_rev_rate_type => l_projfunc_rev_rate_type,
10895 p_pv_project_cost_rate_type => lx_project_cost_rate_type,
10896 p_pv_project_rev_rate_type => lx_projfunc_rev_rate_type,
10897 p_pv_projfunc_cost_rate_type=> lx_projfunc_cost_rate_type,
10898 p_pv_projfunc_rev_rate_type => lx_projfunc_rev_rate_date,
10899 x_is_rate_type_valid => l_is_rate_type_valid,
10900 x_return_status => p_return_status,
10901 x_msg_count => p_msg_count,
10902 x_msg_data => p_msg_data);
10903
10904 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10905 IF l_debug_mode = 'Y' THEN
10906 pa_debug.g_err_stage:= 'valid_rate_type returned error';
10907 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10908 END IF;
10909 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10910 END IF;
10911
10912 pa_fin_plan_utils.validate_currency_attributes
10913 (px_project_cost_rate_type => lx_project_cost_rate_type
10914 ,px_project_cost_rate_date_typ => lx_project_cost_rate_date_typ
10915 ,px_project_cost_rate_date => lx_project_cost_rate_date
10916 ,px_project_cost_exchange_rate => l_project_cost_exchange_rate
10917 ,px_projfunc_cost_rate_type => lx_projfunc_cost_rate_type
10918 ,px_projfunc_cost_rate_date_typ => lx_projfunc_cost_rate_date_typ
10919 ,px_projfunc_cost_rate_date => lx_projfunc_cost_rate_date
10920 ,px_projfunc_cost_exchange_rate => l_projfunc_cost_exchange_rate
10921 ,px_project_rev_rate_type => lx_project_rev_rate_type
10922 ,px_project_rev_rate_date_typ => lx_project_rev_rate_date_typ
10923 ,px_project_rev_rate_date => lx_project_rev_rate_date
10924 ,px_project_rev_exchange_rate => l_project_rev_exchange_rate
10925 ,px_projfunc_rev_rate_type => lx_projfunc_rev_rate_type
10926 ,px_projfunc_rev_rate_date_typ => lx_projfunc_rev_rate_date_typ
10927 ,px_projfunc_rev_rate_date => lx_projfunc_rev_rate_date
10928 ,px_projfunc_rev_exchange_rate => l_projfunc_rev_exchange_rate
10929 ,p_project_currency_code => l_project_currency_code
10930 ,p_projfunc_currency_code => l_projfunc_currency_code
10931 ,p_context => PA_FP_CONSTANTS_PKG.G_AMG_API_HEADER
10932 ,p_attrs_to_be_validated => l_conv_attrs_to_be_validated
10933 ,x_return_status => p_return_status
10934 ,x_msg_count => p_msg_count
10935 ,x_msg_data => p_msg_data);
10936
10937 IF (p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10938 p_return_status:=FND_API.G_RET_STS_ERROR;
10939 IF l_debug_mode = 'Y' THEN
10940 pa_debug.g_err_stage:= 'Validate currency attributes returned error';
10941 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10942 END IF;
10943 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10944 END IF;
10945
10946 IF l_debug_mode = 'Y' THEN
10947 pa_debug.g_err_stage := 'Updating pa_proj_fp_options with multi currency conversion attributes';
10948 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10949 END IF;
10950
10951 update pa_proj_fp_options
10952 set
10953 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)
10954 ,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)
10955 ,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)
10956 ,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)
10957 ,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)
10958 ,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)
10959 ,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)
10960 ,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)
10961 ,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)
10962 ,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)
10963 ,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)
10964 ,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)
10965 ,record_version_number = record_version_number +1
10966 ,last_update_date = SYSDATE
10967 ,last_updated_by = G_USER_ID
10968 ,last_update_login = G_LOGIN_ID
10969 where project_id = l_project_id
10970 and fin_plan_type_id = l_fin_plan_type_id
10971 and fin_plan_version_id = l_budget_version_id;
10972 END IF; --(l_call_validate_curr_api_flg = 'Y')
10973 END IF;--For finplan model validate header level currency conversion attributes.
10974
10975 --Major changes for the bug 3453650
10976
10977 -- BUDGET LINES
10978
10979 l_budget_line_index := p_budget_lines_in.first;
10980
10981 IF p_budget_lines_in.exists(l_budget_line_index)
10982 THEN
10983 IF l_budget_type_code IS NOT NULL THEN -- bug 3453650
10984 OPEN l_budget_entry_method_csr( l_budget_entry_method_code );
10985 FETCH l_budget_entry_method_csr INTO l_time_phased_type_code
10986 , l_entry_level_code
10987 , l_categorization_code;
10988 CLOSE l_budget_entry_method_csr;
10989 END IF;
10990
10991 --Initializing the variable j which is used to build the l_finplan_lines_tab for the finplan model.
10992 j:=1;
10993 <<budget_line>>
10994 WHILE l_budget_line_index IS NOT NULL LOOP
10995
10996 --dbms_output.put_line('In budget lines LOOP');
10997
10998 --initialize return status for budget line to success
10999 p_budget_lines_out(l_budget_line_index).return_status := FND_API.G_RET_STS_SUCCESS;
11000
11001 /*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
11002 *.output parameter of vallidate_budget_lines(this call to validate_budget_lines has been made before this point in code). */
11003 l_budget_line_in_rec := l_budget_lines_in(l_budget_line_index);--p_budget_lines_in(l_budget_line_index);
11004
11005
11006 IF l_budget_line_in_rec.period_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11007 AND l_budget_line_in_rec.period_name IS NOT NULL
11008 THEN
11009
11010 OPEN l_budget_periods_csr( l_budget_line_in_rec.period_name
11011 ,l_time_phased_type_code);
11012
11013 FETCH l_budget_periods_csr INTO l_budget_start_date; --is needed to be able to identify a budgetline
11014
11015 IF l_budget_periods_csr%NOTFOUND
11016 THEN
11017
11018 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11019 THEN
11020 pa_interface_utils_pub.map_new_amg_msg
11021 ( p_old_message_code => 'PA_BUDGET_PERIOD_IS_INVALID'
11022 ,p_msg_attribute => 'CHANGE'
11023 ,p_resize_flag => 'Y'
11024 ,p_msg_context => 'BUDG'
11025 ,p_attribute1 => l_amg_segment1
11026 ,p_attribute2 => ''
11027 ,p_attribute3 => l_budget_type_code
11028 ,p_attribute4 => ''
11029 ,p_attribute5 => '');
11030 END IF;
11031
11032 CLOSE l_budget_periods_csr;
11033 p_budget_lines_out(l_budget_line_index).return_status := FND_API.G_RET_STS_ERROR;
11034 p_multiple_task_msg := 'F';
11035
11036
11037 END IF;
11038
11039 CLOSE l_budget_periods_csr;
11040
11041 ELSIF l_budget_line_in_rec.budget_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
11042 AND l_budget_line_in_rec.budget_start_date IS NOT NULL
11043 THEN
11044
11045 l_budget_start_date := trunc(l_budget_line_in_rec.budget_start_date);
11046
11047 ELSE
11048
11049 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11050 THEN
11051 pa_interface_utils_pub.map_new_amg_msg
11052 ( p_old_message_code => 'PA_START_DATE_MISSING'
11053 ,p_msg_attribute => 'CHANGE'
11054 ,p_resize_flag => 'N'
11055 ,p_msg_context => 'BUDG'
11056 ,p_attribute1 => l_amg_segment1
11057 ,p_attribute2 => ''
11058 ,p_attribute3 => l_budget_type_code
11059 ,p_attribute4 => ''
11060 ,p_attribute5 => '');
11061 END IF;
11062
11063 p_budget_lines_out(l_budget_line_index).return_status := FND_API.G_RET_STS_ERROR;
11064 p_multiple_task_msg := 'F';
11065 -- RAISE FND_API.G_EXC_ERROR;
11066
11067 END IF;
11068
11069
11070 -- if resource alias is (passed and not NULL)
11071 -- and resource member is (passed and not NULL)
11072 -- then we convert the alias to the id
11073 -- else we default to the uncategorized resource member
11074
11075 IF l_budget_type_code IS NOT NULL THEN
11076
11077 IF l_categorization_code = 'N' THEN
11078 pa_get_resource.Get_Uncateg_Resource_Info
11079 (p_resource_list_id => l_uncategorized_list_id,
11080 p_resource_list_member_id => l_uncategorized_rlmid,
11081 p_resource_id => l_uncategorized_resid,
11082 p_track_as_labor_flag => l_track_as_labor_flag,
11083 p_err_code => l_err_code,
11084 p_err_stage => l_err_stage,
11085 p_err_stack => l_err_stack );
11086 IF l_err_code <> 0 THEN
11087 IF NOT pa_project_pvt.check_valid_message(l_err_stage) THEN
11088 pa_interface_utils_pub.map_new_amg_msg
11089 ( p_old_message_code => 'PA_NO_UNCATEGORIZED_LIST'
11090 ,p_msg_attribute => 'CHANGE'
11091 ,p_resize_flag => 'N'
11092 ,p_msg_context => 'BUDG'
11093 ,p_attribute1 => l_amg_segment1
11094 ,p_attribute2 => ''
11095 ,p_attribute3 => l_budget_type_code
11096 ,p_attribute4 => ''
11097 ,p_attribute5 => to_char(l_budget_start_date));
11098 ELSE
11099 pa_interface_utils_pub.map_new_amg_msg
11100 ( p_old_message_code => l_err_stage
11101 ,p_msg_attribute => 'CHANGE'
11102 ,p_resize_flag => 'N'
11103 ,p_msg_context => 'BUDG'
11104 ,p_attribute1 => l_amg_segment1
11105 ,p_attribute2 => ''
11106 ,p_attribute3 => l_budget_type_code
11107 ,p_attribute4 => ''
11108 ,p_attribute5 => to_char(l_budget_start_date));
11109 END IF;
11110 p_multiple_task_msg := 'F';
11111 -- RAISE FND_API.G_EXC_ERROR;
11112 END IF;
11113
11114 l_resource_list_member_id := l_uncategorized_rlmid;
11115 l_budget_alias := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
11116
11117 ELSIF l_categorization_code = 'R' THEN
11118 IF (l_budget_line_in_rec.resource_alias <>
11119 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11120 AND l_budget_line_in_rec.resource_alias IS NOT NULL)
11121 OR (l_budget_line_in_rec.resource_list_member_id
11122 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11123 AND l_budget_line_in_rec.resource_list_member_id IS NOT NULL) THEN
11124
11125 pa_resource_pub.convert_alias_to_id
11126 ( p_project_id => l_project_id --Passing the project id here.
11127 ,p_resource_list_id => lx_resource_list_id --3453650
11128 ,p_alias =>l_budget_line_in_rec.resource_alias
11129 ,p_resource_list_member_id =>l_budget_line_in_rec.resource_list_member_id
11130 ,p_out_resource_list_member_id => l_resource_list_member_id
11131 ,p_return_status => l_return_status );
11132
11133 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11134 p_budget_lines_out(l_budget_line_index).return_status :=
11135 l_return_status;
11136 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11137 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11138 p_budget_lines_out(l_budget_line_index).return_status :=
11139 l_return_status;
11140 p_multiple_task_msg := 'F';
11141 -- RAISE FND_API.G_EXC_ERROR;
11142 END IF;
11143 l_budget_alias := l_budget_line_in_rec.resource_alias;
11144 END IF; -- If l_budget_line_in_rec.resource_alias <>
11145 END IF; -- If l_categorization_code = 'N'
11146
11147 -- convert pm_task_reference to pa_task_id
11148 -- only if entry_level_code in ('L','M','T')
11149 IF l_entry_level_code = 'P' THEN
11150 l_task_id := 0;
11151 END IF;
11152
11153 IF l_entry_level_code in ('T','L','M') THEN
11154 Pa_project_pvt.Convert_pm_taskref_to_id
11155 (p_pa_project_id => l_project_id,
11156 p_pa_task_id => l_budget_line_in_rec.pa_task_id,
11157 p_pm_task_reference => l_budget_line_in_rec.pm_task_reference,
11158 p_out_task_id => l_task_id,
11159 p_return_status => l_return_status );
11160 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11161 p_budget_lines_out(l_budget_line_index).return_status :=
11162 l_return_status;
11163 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11164 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11165 p_budget_lines_out(l_budget_line_index).return_status :=
11166 l_return_status;
11167 p_multiple_task_msg := 'F';
11168 -- RAISE FND_API.G_EXC_ERROR;
11169 END IF;
11170 END IF;
11171
11172 ELSE -- Bug 3453650 budget_type_code is not null
11173
11174 pa_get_resource.Get_Uncateg_Resource_Info
11175 (p_resource_list_id => l_uncategorized_list_id,
11176 p_resource_list_member_id => l_uncategorized_rlmid,
11177 p_resource_id => l_uncategorized_resid,
11178 p_track_as_labor_flag => l_track_as_labor_flag,
11179 p_err_code => l_err_code,
11180 p_err_stage => l_err_stage,
11181 p_err_stack => l_err_stack );
11182 IF l_err_code <> 0 THEN
11183 IF NOT pa_project_pvt.check_valid_message(l_err_stage) THEN
11184 pa_interface_utils_pub.map_new_amg_msg
11185 ( p_old_message_code => 'PA_NO_UNCATEGORIZED_LIST'
11186 ,p_msg_attribute => 'CHANGE'
11187 ,p_resize_flag => 'N'
11188 ,p_msg_context => 'BUDG'
11189 ,p_attribute1 => l_amg_segment1
11190 ,p_attribute2 => ''
11191 ,p_attribute3 => lx_fin_plan_type_name
11192 ,p_attribute4 => ''
11193 ,p_attribute5 => to_char(l_budget_start_date));
11194 ELSE
11195 pa_interface_utils_pub.map_new_amg_msg
11196 ( p_old_message_code => l_err_stage
11197 ,p_msg_attribute => 'CHANGE'
11198 ,p_resize_flag => 'N'
11199 ,p_msg_context => 'BUDG'
11200 ,p_attribute1 => l_amg_segment1
11201 ,p_attribute2 => ''
11202 ,p_attribute3 => lx_fin_plan_type_name
11203 ,p_attribute4 => ''
11204 ,p_attribute5 => to_char(l_budget_start_date));
11205 END IF;
11206 p_multiple_task_msg := 'F';
11207 END IF;
11208
11209 IF (nvl(l_uncategorized_list_id,-99) = lx_resource_list_id) THEN
11210
11211 l_budget_line_in_rec.resource_list_member_id :=l_uncategorized_rlmid;
11212 l_budget_line_in_rec.resource_alias := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
11213 l_resource_list_member_id := l_uncategorized_rlmid; -- bug 3453650
11214
11215 ELSE
11216 --end comment for 3453650
11217
11218 -- convert resource alias to (resource) member id
11219 -- if resource alias is (passed and not NULL)
11220 -- and resource member is (passed and not NULL)
11221 -- then we convert the alias to the id
11222 -- else we default to the uncategorized resource member
11223
11224 IF (l_budget_line_in_rec.resource_alias <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11225 AND l_budget_line_in_rec.resource_alias IS NOT NULL)
11226 OR (l_budget_line_in_rec.resource_list_member_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11227 AND l_budget_line_in_rec.resource_list_member_id IS NOT NULL)
11228 THEN
11229 pa_resource_pub.Convert_alias_to_id
11230 ( p_project_id => l_project_id
11231 ,p_resource_list_id => lx_resource_list_id -- 3453650
11232 ,p_alias => l_budget_line_in_rec.resource_alias
11233 ,p_resource_list_member_id => l_budget_line_in_rec.resource_list_member_id
11234 ,p_out_resource_list_member_id => l_resource_list_member_id -- 3453650
11235 ,p_return_status => x_return_status );
11236
11237 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11238 p_budget_lines_out(l_budget_line_index).return_status := x_return_status;
11239 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11240 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11241 p_budget_lines_out(l_budget_line_index).return_status :=
11242 x_return_status;
11243 p_multiple_task_msg := 'F';
11244 END IF;
11245 l_budget_alias := l_budget_line_in_rec.resource_alias;
11246
11247 END IF; -- l_budget_line_in_rec.resource_alias <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11248 END IF; -- nvl(l_uncategorized_res_list_id,-99) = lx_resource_list_id Bug 3454650
11249 IF l_fin_plan_level_code = 'P' THEN
11250 l_task_id := 0;
11251 END IF;
11252
11253 IF l_fin_plan_level_code in ('T','L','M') THEN
11254 Pa_project_pvt.Convert_pm_taskref_to_id
11255 (p_pa_project_id => l_project_id,
11256 p_pa_task_id => l_budget_line_in_rec.pa_task_id,
11257 p_pm_task_reference => l_budget_line_in_rec.pm_task_reference,
11258 p_out_task_id => l_task_id,
11259 p_return_status => l_return_status );
11260 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11261 p_budget_lines_out(l_budget_line_index).return_status :=
11262 l_return_status;
11263 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11264 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11265 p_budget_lines_out(l_budget_line_index).return_status :=
11266 l_return_status;
11267 p_multiple_task_msg := 'F';
11268
11269 END IF;
11270 END IF; -- l_fin_plan_level_code in ('T','L','M')
11271 END IF; -- IF BUDGET TYPE CODE IS NOT NULL
11272
11273 l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
11274 (p_task_number=> ''
11275 ,p_task_reference => ''
11276 ,p_task_id => l_task_id);
11277
11278 --get the resource assignment id
11279
11280 OPEN l_resource_assignment_csr( l_budget_version_id
11281 ,l_task_id
11282 ,l_resource_list_member_id);
11283
11284 FETCH l_resource_assignment_csr INTO l_resource_assignment_id;
11285
11286 IF l_resource_assignment_csr%NOTFOUND
11287 THEN
11288 l_new_resource_assignment := TRUE;
11289 ELSE
11290 l_new_resource_assignment := FALSE;
11291 END IF;
11292
11293 CLOSE l_resource_assignment_csr;
11294
11295
11296 IF l_budget_line_in_rec.pm_budget_line_reference =
11297 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11298 l_budget_line_in_rec.pm_budget_line_reference := NULL;
11299 END IF;
11300
11301 /* Bug: 3453650 Added the below code*/
11302
11303 l_dummy := Null; -- Added for bug 4192109
11304
11305 IF l_budget_type_code IS NOT NULL THEN
11306 -- dbms_output.put_line('Checking existence of budget line . l_budget_start_date = ' || l_budget_start_date);
11307 OPEN l_budget_line_csr( l_resource_assignment_id, l_budget_start_date);
11308
11309 FETCH l_budget_line_csr INTO l_dummy;
11310 CLOSE l_budget_line_csr;
11311 ELSE
11312 IF l_budget_line_in_rec.txn_currency_code IS NULL THEN
11313 pa_interface_utils_pub.map_new_amg_msg
11314 ( p_old_message_code => 'PA_NO_TXN_CURRENCY_CODE'
11315 ,p_msg_attribute => 'CHANGE'
11316 ,p_resize_flag => 'N'
11317 ,p_msg_context => 'BUDG'
11318 ,p_attribute1 => l_amg_segment1
11319 ,p_attribute2 => ''
11320 ,p_attribute3 => lx_fin_plan_type_name
11321 ,p_attribute4 => ''
11322 ,p_attribute5 => '');
11323
11324 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11325 END IF;
11326
11327 OPEN l_finplan_line_csr(l_resource_assignment_id
11328 ,l_budget_start_date
11329 ,l_budget_line_in_rec.txn_currency_code);
11330 FETCH l_finplan_line_csr into l_dummy;
11331 CLOSE l_finplan_line_csr;
11332 END IF; -- l_budget_type_code IS NOT NULL
11333
11334 IF l_budget_type_code IS NOT NULL THEN
11335 --if new line then call insert_budget_line (for old model)
11336 IF (l_dummy <> 'X' OR l_dummy IS NULL) OR (l_new_resource_assignment) OR (lx_resource_list_id <> l_resource_list_id) THEN
11337 pa_budget_pvt.insert_budget_line
11338 ( p_return_status => l_return_status
11339 ,p_pa_project_id => l_project_id
11340 ,p_budget_type_code => l_budget_type_code
11341 ,p_pa_task_id => l_budget_line_in_rec.pa_task_id
11342 ,p_pm_task_reference => l_budget_line_in_rec.pm_task_reference
11343 ,p_resource_alias => l_budget_alias
11344 ,p_member_id => l_resource_list_member_id
11345 ,p_budget_start_date => l_budget_line_in_rec.budget_start_date
11346 ,p_budget_end_date => l_budget_line_in_rec.budget_end_date
11347 ,p_period_name => l_budget_line_in_rec.period_name
11348 ,p_description => l_budget_line_in_rec.description
11349 ,p_raw_cost => l_budget_line_in_rec.raw_cost
11350 ,p_burdened_cost => l_budget_line_in_rec.burdened_cost
11351 ,p_revenue => l_budget_line_in_rec.revenue
11352 ,p_quantity => l_budget_line_in_rec.quantity
11353 ,p_pm_product_code => l_budget_line_in_rec.pm_product_code
11354 ,p_pm_budget_line_reference => l_budget_line_in_rec.pm_budget_line_reference
11355 ,p_resource_list_id => lx_resource_list_id
11356 ,p_attribute_category => l_budget_line_in_rec.attribute_category
11357 ,p_attribute1 => l_budget_line_in_rec.attribute1
11358 ,p_attribute2 => l_budget_line_in_rec.attribute2
11359 ,p_attribute3 => l_budget_line_in_rec.attribute3
11360 ,p_attribute4 => l_budget_line_in_rec.attribute4
11361 ,p_attribute5 => l_budget_line_in_rec.attribute5
11362 ,p_attribute6 => l_budget_line_in_rec.attribute6
11363 ,p_attribute7 => l_budget_line_in_rec.attribute7
11364 ,p_attribute8 => l_budget_line_in_rec.attribute8
11365 ,p_attribute9 => l_budget_line_in_rec.attribute9
11366 ,p_attribute10 => l_budget_line_in_rec.attribute10
11367 ,p_attribute11 => l_budget_line_in_rec.attribute11
11368 ,p_attribute12 => l_budget_line_in_rec.attribute12
11369 ,p_attribute13 => l_budget_line_in_rec.attribute13
11370 ,p_attribute14 => l_budget_line_in_rec.attribute14
11371 ,p_attribute15 => l_budget_line_in_rec.attribute15
11372 ,p_time_phased_type_code => lx_time_phased_type_code
11373 ,p_entry_level_code => l_entry_level_code
11374 ,p_budget_amount_code => l_budget_amount_code
11375 ,p_budget_entry_method_code => l_budget_entry_method_code
11376 ,p_categorization_code => l_categorization_code
11377 ,p_budget_version_id => l_budget_version_id
11378 ,p_change_reason_code => l_budget_line_in_rec.change_reason_code );
11379
11380 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
11381 THEN
11382 p_budget_lines_out(l_budget_line_index).return_status := l_return_status;
11383 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11384
11385 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
11386 THEN
11387 p_budget_lines_out(l_budget_line_index).return_status := l_return_status;
11388 p_multiple_task_msg := 'F';
11389 END IF;
11390
11391 ELSE -- If the line is already existing, then call update_budget_line_sql
11392 -- ELSE for the condition : (l_dummy <> 'X' OR l_dummy IS NULL) OR (l
11393
11394
11395 /*Note carefully that while making the comparision below we are reading from p_budget_lines_in and not from
11396 *. l_budget_lines_in. l_budget_lines is an o/p parameter of validate_budget_lines call to which is made
11397 * above in the code flow. And before calling validate_budget_lines G_MISS_XXX handling is done for the values
11398 * present in l_budget_lines. So we cant use l_budget_lines in making the comparision again*/
11399 IF p_budget_lines_in(l_budget_line_index).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11400 l_budget_line_in_rec.raw_cost := NULL;
11401 ELSIF(p_budget_lines_in(l_budget_line_index).raw_cost is null) THEN
11402 l_budget_line_in_rec.raw_cost := FND_API.G_MISS_NUM;
11403 ELSE
11404 l_budget_line_in_rec.raw_cost := l_budget_line_in_rec.raw_cost;
11405 END IF;
11406
11407 IF p_budget_lines_in(l_budget_line_index).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11408 l_budget_line_in_rec.burdened_cost := NULL;
11409 ELSIF(p_budget_lines_in(l_budget_line_index).burdened_cost is null) THEN
11410 l_budget_line_in_rec.burdened_cost := FND_API.G_MISS_NUM;
11411 ELSE
11412 l_budget_line_in_rec.burdened_cost := l_budget_line_in_rec.burdened_cost;
11413 END IF;
11414
11415 IF p_budget_lines_in(l_budget_line_index).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11416 l_budget_line_in_rec.revenue := NULL;
11417 ELSIF(p_budget_lines_in(l_budget_line_index).revenue is null) THEN
11418 l_budget_line_in_rec.revenue := FND_API.G_MISS_NUM;
11419 ELSE
11420 l_budget_line_in_rec.revenue := l_budget_line_in_rec.revenue;
11421 END IF;
11422
11423 IF p_budget_lines_in(l_budget_line_index).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11424 l_budget_line_in_rec.quantity := NULL;
11425 ELSIF(p_budget_lines_in(l_budget_line_index).quantity is null) THEN
11426 l_budget_line_in_rec.quantity := FND_API.G_MISS_NUM;
11427 ELSE
11428 l_budget_line_in_rec.quantity := l_budget_line_in_rec.quantity;
11429 END IF;
11430
11431 IF p_budget_lines_in(l_budget_line_index).change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11432 l_budget_line_in_rec.change_reason_code :=NULL;
11433 ELSIF(p_budget_lines_in(l_budget_line_index).change_reason_code is null) THEN
11434 l_budget_line_in_rec.change_reason_code := FND_API.G_MISS_CHAR;
11435 ELSE
11436 l_budget_line_in_rec.change_reason_code := l_budget_line_in_rec.change_reason_code ;
11437 END IF;
11438
11439 IF p_budget_lines_in(l_budget_line_index).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11440 l_budget_line_in_rec.description := NULL;
11441 ELSIF(p_budget_lines_in(l_budget_line_index).description is null) THEN
11442 l_budget_line_in_rec.description := FND_API.G_MISS_CHAR;
11443 ELSE
11444 l_budget_line_in_rec.description := l_budget_line_in_rec.description;
11445 END IF;
11446
11447 IF p_budget_lines_in(l_budget_line_index).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11448 l_budget_line_in_rec.attribute_category := NULL;
11449 ELSIF(p_budget_lines_in(l_budget_line_index).attribute_category is null) THEN
11450 l_budget_line_in_rec.attribute_category := FND_API.G_MISS_CHAR;
11451 ELSE
11452 l_budget_line_in_rec.attribute_category := l_budget_line_in_rec.attribute_category;
11453 END IF;
11454
11455 IF p_budget_lines_in(l_budget_line_index).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11456 l_budget_line_in_rec.attribute1 := NULL;
11457 ELSIF(p_budget_lines_in(l_budget_line_index).attribute1 is null) THEN
11458 l_budget_line_in_rec.attribute1 := FND_API.G_MISS_CHAR;
11459 ELSE
11460 l_budget_line_in_rec.attribute1 := l_budget_line_in_rec.attribute1;
11461 END IF;
11462
11463 IF p_budget_lines_in(l_budget_line_index).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11464 l_budget_line_in_rec.attribute2 := NULL;
11465 ELSIF(p_budget_lines_in(l_budget_line_index).attribute2 is null) THEN
11466 l_budget_line_in_rec.attribute2 := FND_API.G_MISS_CHAR;
11467 ELSE
11468 l_budget_line_in_rec.attribute2 := l_budget_line_in_rec.attribute2;
11469 END IF;
11470
11471 IF p_budget_lines_in(l_budget_line_index).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11472 l_budget_line_in_rec.attribute3 := NULL;
11473 ELSIF(p_budget_lines_in(l_budget_line_index).attribute3 is null) THEN
11474 l_budget_line_in_rec.attribute3 := FND_API.G_MISS_CHAR;
11475 ELSE
11476 l_budget_line_in_rec.attribute3 := l_budget_line_in_rec.attribute3;
11477 END IF;
11478
11479 IF p_budget_lines_in(l_budget_line_index).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11480 l_budget_line_in_rec.attribute4 := NULL;
11481 ELSIF(p_budget_lines_in(l_budget_line_index).attribute4 is null) THEN
11482 l_budget_line_in_rec.attribute4 := FND_API.G_MISS_CHAR;
11483 ELSE
11484 l_budget_line_in_rec.attribute4 := l_budget_line_in_rec.attribute4;
11485 END IF;
11486
11487 IF p_budget_lines_in(l_budget_line_index).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11488 l_budget_line_in_rec.attribute5 := NULL;
11489 ELSIF(p_budget_lines_in(l_budget_line_index).attribute5 is null) THEN
11490 l_budget_line_in_rec.attribute5 := FND_API.G_MISS_CHAR;
11491 ELSE
11492 l_budget_line_in_rec.attribute5 := l_budget_line_in_rec.attribute5;
11493 END IF;
11494
11495 IF p_budget_lines_in(l_budget_line_index).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11496 l_budget_line_in_rec.attribute6 := NULL;
11497 ELSIF(p_budget_lines_in(l_budget_line_index).attribute6 is null) THEN
11498 l_budget_line_in_rec.attribute6 := FND_API.G_MISS_CHAR;
11499 ELSE
11500 l_budget_line_in_rec.attribute6 := l_budget_line_in_rec.attribute6;
11501 END IF;
11502
11503 IF p_budget_lines_in(l_budget_line_index).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11504 l_budget_line_in_rec.attribute7 := NULL;
11505 ELSIF(p_budget_lines_in(l_budget_line_index).attribute7 is null) THEN
11506 l_budget_line_in_rec.attribute7 := FND_API.G_MISS_CHAR;
11507 ELSE
11508 l_budget_line_in_rec.attribute7 := l_budget_line_in_rec.attribute7;
11509 END IF;
11510
11511 IF p_budget_lines_in(l_budget_line_index).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11512 l_budget_line_in_rec.attribute8 := NULL;
11513 ELSIF(p_budget_lines_in(l_budget_line_index).attribute8 is null) THEN
11514 l_budget_line_in_rec.attribute8 := FND_API.G_MISS_CHAR;
11515 ELSE
11516 l_budget_line_in_rec.attribute8 := l_budget_line_in_rec.attribute8;
11517 END IF;
11518
11519 IF p_budget_lines_in(l_budget_line_index).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11520 l_budget_line_in_rec.attribute9 := NULL;
11521 ELSIF(p_budget_lines_in(l_budget_line_index).attribute9 is null) THEN
11522 l_budget_line_in_rec.attribute9 := FND_API.G_MISS_CHAR;
11523 ELSE
11524 l_budget_line_in_rec.attribute9 := l_budget_line_in_rec.attribute9;
11525 END IF;
11526
11527 IF p_budget_lines_in(l_budget_line_index).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11528 l_budget_line_in_rec.attribute10 := NULL;
11529 ELSIF(p_budget_lines_in(l_budget_line_index).attribute10 is null) THEN
11530 l_budget_line_in_rec.attribute10 := FND_API.G_MISS_CHAR;
11531 ELSE
11532 l_budget_line_in_rec.attribute10 := l_budget_line_in_rec.attribute10;
11533 END IF;
11534
11535 IF p_budget_lines_in(l_budget_line_index).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11536 l_budget_line_in_rec.attribute11 := NULL;
11537 ELSIF(p_budget_lines_in(l_budget_line_index).attribute11 is null) THEN
11538 l_budget_line_in_rec.attribute11 := FND_API.G_MISS_CHAR;
11539 ELSE
11540 l_budget_line_in_rec.attribute11 := l_budget_line_in_rec.attribute11;
11541 END IF;
11542
11543 IF p_budget_lines_in(l_budget_line_index).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11544 l_budget_line_in_rec.attribute12 := NULL;
11545 ELSIF(p_budget_lines_in(l_budget_line_index).attribute12 is null) THEN
11546 l_budget_line_in_rec.attribute12 := FND_API.G_MISS_CHAR;
11547 ELSE
11548 l_budget_line_in_rec.attribute12 := l_budget_line_in_rec.attribute12;
11549 END IF;
11550
11551 IF p_budget_lines_in(l_budget_line_index).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11552 l_budget_line_in_rec.attribute13 := NULL;
11553 ELSIF(p_budget_lines_in(l_budget_line_index).attribute13 is null) THEN
11554 l_budget_line_in_rec.attribute13 := FND_API.G_MISS_CHAR;
11555 ELSE
11556 l_budget_line_in_rec.attribute13 := l_budget_line_in_rec.attribute13;
11557 END IF;
11558
11559 IF p_budget_lines_in(l_budget_line_index).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11560 l_budget_line_in_rec.attribute14 := NULL;
11561 ELSIF(p_budget_lines_in(l_budget_line_index).attribute14 is null) THEN
11562 l_budget_line_in_rec.attribute14 := FND_API.G_MISS_CHAR;
11563 ELSE
11564 l_budget_line_in_rec.attribute14 := l_budget_line_in_rec.attribute14;
11565 END IF;
11566
11567 IF p_budget_lines_in(l_budget_line_index).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11568 l_budget_line_in_rec.attribute15 := NULL;
11569 ELSIF(p_budget_lines_in(l_budget_line_index).attribute15 is null) THEN
11570 l_budget_line_in_rec.attribute15 := FND_API.G_MISS_CHAR;
11571 ELSE
11572 l_budget_line_in_rec.attribute15 := l_budget_line_in_rec.attribute15;
11573 END IF;
11574
11575 PA_BUDGET_PVT.UPDATE_BUDGET_LINE_SQL
11576 ( p_return_status => l_return_status
11577 --,p_budget_amount_code => l_budget_amount_code
11578 ,p_budget_entry_method_code => l_budget_entry_method_code
11579 ,p_resource_assignment_id => l_resource_assignment_id
11580 ,p_start_date => l_budget_start_date
11581 ,p_time_phased_type_code => lx_time_phased_type_code
11582 ,p_description => l_budget_line_in_rec.description
11583 ,p_quantity => l_budget_line_in_rec.quantity
11584 ,p_raw_cost => l_budget_line_in_rec.raw_cost
11585 ,p_burdened_cost => l_budget_line_in_rec.burdened_cost
11586 ,p_revenue => l_budget_line_in_rec.revenue
11587 ,p_change_reason_code => l_budget_line_in_rec.change_reason_code
11588 ,p_attribute_category => l_budget_line_in_rec.attribute_category
11589 ,p_attribute1 => l_budget_line_in_rec.attribute1
11590 ,p_attribute2 => l_budget_line_in_rec.attribute2
11591 ,p_attribute3 => l_budget_line_in_rec.attribute3
11592 ,p_attribute4 => l_budget_line_in_rec.attribute4
11593 ,p_attribute5 => l_budget_line_in_rec.attribute5
11594 ,p_attribute6 => l_budget_line_in_rec.attribute6
11595 ,p_attribute7 => l_budget_line_in_rec.attribute7
11596 ,p_attribute8 => l_budget_line_in_rec.attribute8
11597 ,p_attribute9 => l_budget_line_in_rec.attribute9
11598 ,p_attribute10 => l_budget_line_in_rec.attribute10
11599 ,p_attribute11 => l_budget_line_in_rec.attribute11
11600 ,p_attribute12 => l_budget_line_in_rec.attribute12
11601 ,p_attribute13 => l_budget_line_in_rec.attribute13
11602 ,p_attribute14 => l_budget_line_in_rec.attribute14
11603 ,p_attribute15 => l_budget_line_in_rec.attribute15
11604 );
11605
11606 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11607 p_budget_lines_out(l_budget_line_index).return_status := l_return_status;
11608 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11609
11610 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11611 p_budget_lines_out(l_budget_line_index).return_status := l_return_status;
11612 p_multiple_task_msg := 'F';
11613
11614 END IF; -- l_return_status = FND_API.G_RET_STS_UNE
11615
11616 END IF; -- End for the condition : (l_dummy <> 'X' OR l_dummy IS NULL) OR
11617
11618 ELSE -- l_budget_type_code IS NOT NULL (Inserting lines for the finplan model)
11619 --Checking it its a new budget line.
11620 IF (l_dummy <> 'X' OR l_dummy IS NULL) OR (l_new_resource_assignment) OR (lx_resource_list_id <> l_resource_list_id) THEN
11621 --This is a new line case.
11622 --Get the uncategorized resource list info.
11623 pa_fin_plan_utils.Get_Uncat_Resource_List_Info
11624 (x_resource_list_id => l_uncategorized_res_list_id,
11625 x_resource_list_member_id => l_uncategorized_rlmid,
11626 x_track_as_labor_flag => l_unc_track_as_labor_flag,
11627 x_unit_of_measure => l_unc_unit_of_measure,
11628 x_return_status => p_return_status,
11629 x_msg_count => p_msg_count,
11630 x_msg_data => p_msg_data);
11631
11632 i := l_budget_line_index;
11633
11634 IF l_budget_lines_in(i).period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11635 l_budget_lines_in(i).period_name := NULL;
11636 END IF;
11637
11638 --Lines should be processed only if atleast one of the amounts exist
11639 IF (nvl(l_budget_lines_in(i).quantity,0)<>0 OR
11640 nvl(l_budget_lines_in(i).raw_cost,0)<>0 OR
11641 nvl(l_budget_lines_in(i).burdened_cost,0)<>0 OR
11642 nvl(l_budget_lines_in(i).revenue,0) <>0) THEN
11643
11644 -- Get UOM and track as labor flag only if the resource list is not uncategorized
11645 -- If it is is uncategorized then we can make use of the uom and track as labor
11646 -- flag obtained earlier
11647 --Commented out the below code to get the unit of measure and track_as_labor_flag value
11648 --because these values are used only while passing to add_fin_plan_lines(and further to create_fin_plan_lines )
11649 --where they are simply populated in pa_fp_rollup_tmp but are not used anywhere.
11650 /* IF (lx_resource_list_id <> l_uncategorized_res_list_id) THEN -- bug 3453650
11651
11652 SELECT pr.unit_of_measure
11653 ,prlm.track_as_labor_flag
11654 INTO l_unit_of_measure
11655 ,l_track_as_labor_flag
11656 FROM pa_resources pr
11657 ,pa_resource_lists prl
11658 ,pa_resource_list_members prlm
11659 WHERE prl.resource_list_id = lx_resource_list_id -- bug 3453650
11660 AND pr.resource_id = prlm.resource_id
11661 AND prl.resource_list_id = prlm.resource_list_id
11662 AND prlm.resource_list_member_id = l_budget_lines_in(i).resource_list_member_id;
11663
11664 END IF;*/
11665
11666 -- dbms_output.put_line('copying from budget to rollup finplan');
11667 -- Convert flex field attributes to NULL if they have Miss Char as value
11668
11669 l_finplan_lines_tab(j).system_reference1 := l_budget_lines_in(i).pa_task_id;
11670 l_finplan_lines_tab(j).system_reference2 := l_budget_lines_in(i).resource_list_member_id;
11671 l_finplan_lines_tab(j).start_date := l_budget_lines_in(i).budget_start_date;
11672 l_finplan_lines_tab(j).end_date := l_budget_lines_in(i).budget_end_date;
11673 l_finplan_lines_tab(j).period_name := l_budget_lines_in(i).period_name;
11674 l_finplan_lines_tab(j).system_reference4 := l_unit_of_measure ;
11675 l_finplan_lines_tab(j).system_reference5 := l_track_as_labor_flag ;
11676 l_finplan_lines_tab(j).txn_currency_code := l_budget_lines_in(i).txn_currency_code;
11677 l_finplan_lines_tab(j).projfunc_raw_cost := NULL;
11678 l_finplan_lines_tab(j).projfunc_burdened_cost := NULL;
11679 l_finplan_lines_tab(j).projfunc_revenue := NULL;
11680 l_finplan_lines_tab(j).project_raw_cost := NULL ;
11681 l_finplan_lines_tab(j).project_burdened_cost := NULL;
11682 l_finplan_lines_tab(j).project_revenue := NULL;
11683
11684 /*Note carefully that while making the comparision below we are reading from p_budget_lines_in and not from
11685 *. l_budget_lines_in. l_budget_lines is an o/p parameter of validate_budget_lines call to which is made
11686 * above in the code flow. And before calling validate_budget_lines G_MISS_XXX handling is done for the values
11687 * present in l_budget_lines. So we cant use l_budget_lines in making the comparision again*/
11688 IF p_budget_lines_in(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11689 l_finplan_lines_tab(j).txn_raw_cost := NULL;
11690 ELSIF(p_budget_lines_in(i).raw_cost is null) THEN
11691 l_finplan_lines_tab(j).txn_raw_cost := FND_API.G_MISS_NUM;
11692 ELSE
11693 l_finplan_lines_tab(j).txn_raw_cost := l_budget_lines_in(i).raw_cost;
11694 END IF;
11695
11696 IF p_budget_lines_in(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11697 l_finplan_lines_tab(j).txn_burdened_cost := NULL;
11698 ELSIF(p_budget_lines_in(i).burdened_cost is null) THEN
11699 l_finplan_lines_tab(j).txn_burdened_cost := FND_API.G_MISS_NUM;
11700 ELSE
11701 l_finplan_lines_tab(j).txn_burdened_cost := l_budget_lines_in(i).burdened_cost;
11702 END IF;
11703
11704 IF p_budget_lines_in(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11705 l_finplan_lines_tab(j).txn_revenue := NULL;
11706 ELSIF(p_budget_lines_in(i).revenue is null) THEN
11707 l_finplan_lines_tab(j).txn_revenue := FND_API.G_MISS_NUM;
11708 ELSE
11709 l_finplan_lines_tab(j).txn_revenue := l_budget_lines_in(i).revenue;
11710 END IF;
11711
11712 IF p_budget_lines_in(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11713 l_finplan_lines_tab(j).quantity := NULL;
11714 ELSIF(p_budget_lines_in(i).quantity is null) THEN
11715 l_finplan_lines_tab(j).quantity := FND_API.G_MISS_NUM;
11716 ELSE
11717 l_finplan_lines_tab(j).quantity := l_budget_lines_in(i).quantity;
11718 END IF;
11719
11720 IF p_budget_lines_in(i).change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11721 l_finplan_lines_tab(j).change_reason_code :=NULL;
11722 ELSIF(p_budget_lines_in(i).change_reason_code is null) THEN
11723 l_finplan_lines_tab(j).change_reason_code := FND_API.G_MISS_CHAR;
11724 ELSE
11725 l_finplan_lines_tab(j).change_reason_code := l_budget_lines_in(i).change_reason_code ;
11726 END IF;
11727
11728 IF p_budget_lines_in(i).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11729 l_finplan_lines_tab(j).description := NULL;
11730 ELSIF(p_budget_lines_in(i).description is null) THEN
11731 l_finplan_lines_tab(j).description := FND_API.G_MISS_CHAR;
11732 ELSE
11733 l_finplan_lines_tab(j).description := l_budget_lines_in(i).description;
11734 END IF;
11735
11736 IF p_budget_lines_in(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11737 l_finplan_lines_tab(j).attribute_category := NULL;
11738 ELSIF(p_budget_lines_in(i).attribute_category is null) THEN
11739 l_finplan_lines_tab(j).attribute_category := FND_API.G_MISS_CHAR;
11740 ELSE
11741 l_finplan_lines_tab(j).attribute_category := l_budget_lines_in(i).attribute_category;
11742 END IF;
11743
11744 IF p_budget_lines_in(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11745 l_finplan_lines_tab(j).attribute1 := NULL;
11746 ELSIF(p_budget_lines_in(i).attribute1 is null) THEN
11747 l_finplan_lines_tab(j).attribute1 := FND_API.G_MISS_CHAR;
11748 ELSE
11749 l_finplan_lines_tab(j).attribute1 := l_budget_lines_in(i).attribute1;
11750 END IF;
11751
11752 IF p_budget_lines_in(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11753 l_finplan_lines_tab(j).attribute2 := NULL;
11754 ELSIF(p_budget_lines_in(i).attribute2 is null) THEN
11755 l_finplan_lines_tab(j).attribute2 := FND_API.G_MISS_CHAR;
11756 ELSE
11757 l_finplan_lines_tab(j).attribute2 := l_budget_lines_in(i).attribute2;
11758 END IF;
11759
11760 IF p_budget_lines_in(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11761 l_finplan_lines_tab(j).attribute3 := NULL;
11762 ELSIF(p_budget_lines_in(i).attribute3 is null) THEN
11763 l_finplan_lines_tab(j).attribute3 := FND_API.G_MISS_CHAR;
11764 ELSE
11765 l_finplan_lines_tab(j).attribute3 := l_budget_lines_in(i).attribute3;
11766 END IF;
11767
11768 IF p_budget_lines_in(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11769 l_finplan_lines_tab(j).attribute4 := NULL;
11770 ELSIF(p_budget_lines_in(i).attribute4 is null) THEN
11771 l_finplan_lines_tab(j).attribute4 := FND_API.G_MISS_CHAR;
11772 ELSE
11773 l_finplan_lines_tab(j).attribute4 := l_budget_lines_in(i).attribute4;
11774 END IF;
11775
11776 IF p_budget_lines_in(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11777 l_finplan_lines_tab(j).attribute5 := NULL;
11778 ELSIF(p_budget_lines_in(i).attribute5 is null) THEN
11779 l_finplan_lines_tab(j).attribute5 := FND_API.G_MISS_CHAR;
11780 ELSE
11781 l_finplan_lines_tab(j).attribute5 := l_budget_lines_in(i).attribute5;
11782 END IF;
11783
11784 IF p_budget_lines_in(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11785 l_finplan_lines_tab(j).attribute6 := NULL;
11786 ELSIF(p_budget_lines_in(i).attribute6 is null) THEN
11787 l_finplan_lines_tab(j).attribute6 := FND_API.G_MISS_CHAR;
11788 ELSE
11789 l_finplan_lines_tab(j).attribute6 := l_budget_lines_in(i).attribute6;
11790 END IF;
11791
11792 IF p_budget_lines_in(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11793 l_finplan_lines_tab(j).attribute7 := NULL;
11794 ELSIF(p_budget_lines_in(i).attribute7 is null) THEN
11795 l_finplan_lines_tab(j).attribute7 := FND_API.G_MISS_CHAR;
11796 ELSE
11797 l_finplan_lines_tab(j).attribute7 := l_budget_lines_in(i).attribute7;
11798 END IF;
11799
11800 IF p_budget_lines_in(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11801 l_finplan_lines_tab(j).attribute8 := NULL;
11802 ELSIF(p_budget_lines_in(i).attribute8 is null) THEN
11803 l_finplan_lines_tab(j).attribute8 := FND_API.G_MISS_CHAR;
11804 ELSE
11805 l_finplan_lines_tab(j).attribute8 := l_budget_lines_in(i).attribute8;
11806 END IF;
11807
11808 IF p_budget_lines_in(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11809 l_finplan_lines_tab(j).attribute9 := NULL;
11810 ELSIF(p_budget_lines_in(i).attribute9 is null) THEN
11811 l_finplan_lines_tab(j).attribute9 := FND_API.G_MISS_CHAR;
11812 ELSE
11813 l_finplan_lines_tab(j).attribute9 := l_budget_lines_in(i).attribute9;
11814 END IF;
11815
11816 IF p_budget_lines_in(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11817 l_finplan_lines_tab(j).attribute10 := NULL;
11818 ELSIF(p_budget_lines_in(i).attribute10 is null) THEN
11819 l_finplan_lines_tab(j).attribute10 := FND_API.G_MISS_CHAR;
11820 ELSE
11821 l_finplan_lines_tab(j).attribute10 := l_budget_lines_in(i).attribute10;
11822 END IF;
11823
11824 IF p_budget_lines_in(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11825 l_finplan_lines_tab(j).attribute11 := NULL;
11826 ELSIF(p_budget_lines_in(i).attribute11 is null) THEN
11827 l_finplan_lines_tab(j).attribute11 := FND_API.G_MISS_CHAR;
11828 ELSE
11829 l_finplan_lines_tab(j).attribute11 := l_budget_lines_in(i).attribute11;
11830 END IF;
11831
11832 IF p_budget_lines_in(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11833 l_finplan_lines_tab(j).attribute12 := NULL;
11834 ELSIF(p_budget_lines_in(i).attribute12 is null) THEN
11835 l_finplan_lines_tab(j).attribute12 := FND_API.G_MISS_CHAR;
11836 ELSE
11837 l_finplan_lines_tab(j).attribute12 := l_budget_lines_in(i).attribute12;
11838 END IF;
11839
11840 IF p_budget_lines_in(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11841 l_finplan_lines_tab(j).attribute13 := NULL;
11842 ELSIF(p_budget_lines_in(i).attribute13 is null) THEN
11843 l_finplan_lines_tab(j).attribute13 := FND_API.G_MISS_CHAR;
11844 ELSE
11845 l_finplan_lines_tab(j).attribute13 := l_budget_lines_in(i).attribute13;
11846 END IF;
11847
11848 IF p_budget_lines_in(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11849 l_finplan_lines_tab(j).attribute14 := NULL;
11850 ELSIF(p_budget_lines_in(i).attribute14 is null) THEN
11851 l_finplan_lines_tab(j).attribute14 := FND_API.G_MISS_CHAR;
11852 ELSE
11853 l_finplan_lines_tab(j).attribute14 := l_budget_lines_in(i).attribute14;
11854 END IF;
11855
11856 IF p_budget_lines_in(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11857 l_finplan_lines_tab(j).attribute15 := NULL;
11858 ELSIF(p_budget_lines_in(i).attribute15 is null) THEN
11859 l_finplan_lines_tab(j).attribute15 := FND_API.G_MISS_CHAR;
11860 ELSE
11861 l_finplan_lines_tab(j).attribute15 := l_budget_lines_in(i).attribute15;
11862 END IF;
11863
11864 IF p_budget_lines_in(i).projfunc_cost_rate_type =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11865 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := NULL;
11866 ELSIF(p_budget_lines_in(i).projfunc_cost_rate_type is null) THEN
11867 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := FND_API.G_MISS_CHAR;
11868 ELSE
11869 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := l_budget_lines_in(i).projfunc_cost_rate_type;
11870 END IF;
11871
11872 IF p_budget_lines_in(i).projfunc_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11873 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
11874 ELSIF(p_budget_lines_in(i).projfunc_cost_rate_date_type is null) THEN
11875 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE := FND_API.G_MISS_CHAR;
11876 ELSE
11877 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE :=l_budget_lines_in(i).projfunc_cost_rate_date_type;
11878 END IF;
11879
11880 IF p_budget_lines_in(i).projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
11881 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE := NULL;
11882 ELSIF(p_budget_lines_in(i).projfunc_cost_rate_date is null) THEN
11883 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE := FND_API.G_MISS_DATE;
11884 ELSE
11885 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE := l_budget_lines_in(i).projfunc_cost_rate_date ;
11886 END IF;
11887
11888 IF p_budget_lines_in(i).projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11889 l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := NULL;
11890 ELSIF(p_budget_lines_in(i).projfunc_cost_exchange_rate is null) THEN
11891 l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := FND_API.G_MISS_NUM;
11892 ELSE
11893 l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := l_budget_lines_in(i).projfunc_cost_exchange_rate ;
11894 END IF;
11895
11896 IF p_budget_lines_in(i).projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11897 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE := NULL;
11898 ELSIF(p_budget_lines_in(i).projfunc_rev_rate_type is null) THEN
11899 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE := FND_API.G_MISS_CHAR;
11900 ELSE
11901 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE := l_budget_lines_in(i).projfunc_rev_rate_type ;
11902 END IF;
11903
11904 IF p_budget_lines_in(i).projfunc_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11905 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
11906 ELSIF(p_budget_lines_in(i).projfunc_rev_rate_date_type is null) THEN
11907 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := FND_API.G_MISS_CHAR;
11908 ELSE
11909 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := l_budget_lines_in(i).projfunc_rev_rate_date_type ;
11910 END IF;
11911
11912 IF p_budget_lines_in(i).projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
11913 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE := NULL;
11914 ELSIF(p_budget_lines_in(i).projfunc_rev_rate_date is null) THEN
11915 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE := FND_API.G_MISS_DATE;
11916 ELSE
11917 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE := l_budget_lines_in(i).projfunc_rev_rate_date;
11918 END IF;
11919
11920 IF p_budget_lines_in(i).projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11921 l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE := NULL;
11922 ELSIF(p_budget_lines_in(i).projfunc_rev_exchange_rate is null) THEN
11923 l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE := FND_API.G_MISS_NUM;
11924 ELSE
11925 l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE := l_budget_lines_in(i).projfunc_rev_exchange_rate ;
11926 END IF;
11927
11928 IF p_budget_lines_in(i).project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11929 l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE := NULL;
11930 ELSIF(p_budget_lines_in(i).project_cost_rate_type is null) THEN
11931 l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE := FND_API.G_MISS_CHAR;
11932 ELSE
11933 l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE := l_budget_lines_in(i).project_cost_rate_type;
11934 END IF;
11935
11936 IF p_budget_lines_in(i).project_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11937 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := NULL;
11938 ELSIF(p_budget_lines_in(i).project_cost_rate_date_type is null) THEN
11939 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := FND_API.G_MISS_CHAR;
11940 ELSE
11941 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := l_budget_lines_in(i).project_cost_rate_date_type ;
11942 END IF;
11943
11944 IF p_budget_lines_in(i).project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
11945 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE := NULL;
11946 ELSIF(p_budget_lines_in(i).project_cost_rate_date is null) THEN
11947 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE := FND_API.G_MISS_DATE;
11948 ELSE
11949 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE := l_budget_lines_in(i).project_cost_rate_date;
11950 END IF;
11951
11952 IF p_budget_lines_in(i).project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11953 l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE := NULL;
11954 ELSIF(p_budget_lines_in(i).project_cost_exchange_rate is null) THEN
11955 l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE := FND_API.G_MISS_NUM;
11956 ELSE
11957 l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE := l_budget_lines_in(i).project_cost_exchange_rate ;
11958 END IF;
11959
11960 IF p_budget_lines_in(i).project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11961 l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE := NULL;
11962 ELSIF(p_budget_lines_in(i).project_rev_rate_type is null) THEN
11963 l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE := FND_API.G_MISS_CHAR;
11964 ELSE
11965 l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE := l_budget_lines_in(i).project_rev_rate_type ;
11966 END IF;
11967
11968 IF p_budget_lines_in(i).project_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11969 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE := NULL;
11970 ELSIF(p_budget_lines_in(i).project_rev_rate_date_type is null) THEN
11971 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE := FND_API.G_MISS_CHAR;
11972 ELSE
11973 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE := l_budget_lines_in(i).project_rev_rate_date_type;
11974 END IF;
11975
11976 IF p_budget_lines_in(i).project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
11977 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE := NULL;
11978 ELSIF(p_budget_lines_in(i).project_rev_rate_date is null) THEN
11979 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE := FND_API.G_MISS_DATE;
11980 ELSE
11981 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE := l_budget_lines_in(i).project_rev_rate_date ;
11982 END IF;
11983
11984 IF p_budget_lines_in(i).project_rev_exchange_rate =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
11985 l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE := NULL;
11986 ELSIF(p_budget_lines_in(i).project_rev_exchange_rate is null) THEN
11987 l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE := FND_API.G_MISS_NUM;
11988 ELSE
11989 l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE := l_budget_lines_in(i).project_rev_exchange_rate ;
11990 END IF;
11991
11992 IF p_budget_lines_in(i).pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
11993 l_finplan_lines_tab(j).pm_product_code := NULL;
11994 ELSIF(p_budget_lines_in(i).pm_product_code is null) THEN
11995 l_finplan_lines_tab(j).pm_product_code := FND_API.G_MISS_CHAR;
11996 ELSE
11997 l_finplan_lines_tab(j).pm_product_code := l_budget_lines_in(i).pm_product_code ;
11998 END IF;
11999
12000 IF p_budget_lines_in(i).pm_budget_line_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12001 l_finplan_lines_tab(j).pm_budget_line_reference := NULL;
12002 ELSIF(p_budget_lines_in(i).pm_budget_line_reference is null) THEN
12003 l_finplan_lines_tab(j).pm_budget_line_reference := FND_API.G_MISS_CHAR;
12004 ELSE
12005 l_finplan_lines_tab(j).pm_budget_line_reference := l_budget_lines_in(i).pm_budget_line_reference ;
12006 END IF;
12007
12008 l_finplan_lines_tab(j).quantity_source := 'I';
12009 l_finplan_lines_tab(j).raw_cost_source := 'I';
12010 l_finplan_lines_tab(j).burdened_cost_source := 'I';
12011 l_finplan_lines_tab(j).revenue_source := 'I';
12012 l_finplan_lines_tab(j).resource_assignment_id := -1 ;
12013
12014 --increment the index for fin plan lines table
12015 j := j+1;
12016 END IF; --IF (nvl(l_budget_lines_in(i).quantity,0)<>0 OR
12017 ELSE
12018 --its an already existing budget line
12019 i := l_budget_line_index;
12020
12021 l_finplan_lines_tab(j).system_reference1 := l_budget_line_in_rec.pa_task_id;
12022 l_finplan_lines_tab(j).system_reference2 := l_budget_line_in_rec.resource_list_member_id;
12023 l_finplan_lines_tab(j).start_date := l_budget_line_in_rec.budget_start_date;
12024 l_finplan_lines_tab(j).end_date := l_budget_line_in_rec.budget_end_date;
12025 l_finplan_lines_tab(j).period_name := l_budget_line_in_rec.period_name;
12026 l_finplan_lines_tab(j).system_reference4 := l_unit_of_measure ;
12027 l_finplan_lines_tab(j).system_reference5 := l_track_as_labor_flag ;
12028 l_finplan_lines_tab(j).txn_currency_code := l_budget_line_in_rec.txn_currency_code;
12029 l_finplan_lines_tab(j).projfunc_raw_cost := NULL;
12030 l_finplan_lines_tab(j).projfunc_burdened_cost := NULL;
12031 l_finplan_lines_tab(j).projfunc_revenue := NULL;
12032 l_finplan_lines_tab(j).project_raw_cost := NULL ;
12033 l_finplan_lines_tab(j).project_burdened_cost := NULL;
12034 l_finplan_lines_tab(j).project_revenue := NULL;
12035
12036 /*Note carefully that while making the comparision below we are reading from p_budget_lines_in and not from
12037 *. l_budget_lines_in. l_budget_lines is an o/p parameter of validate_budget_lines call to which is made
12038 * above in the code flow. And before calling validate_budget_lines G_MISS_XXX handling is done for the values
12039 * present in l_budget_lines. So we cant use l_budget_lines in making the comparision again*/
12040 IF p_budget_lines_in(l_budget_line_index).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12041 l_finplan_lines_tab(j).txn_raw_cost := NULL;
12042 ELSIF(p_budget_lines_in(l_budget_line_index).raw_cost is null) THEN
12043 l_finplan_lines_tab(j).txn_raw_cost := FND_API.G_MISS_NUM;
12044 ELSE
12045 l_finplan_lines_tab(j).txn_raw_cost := l_budget_line_in_rec.raw_cost;
12046 END IF;
12047
12048 IF p_budget_lines_in(l_budget_line_index).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12049 l_finplan_lines_tab(j).txn_burdened_cost := NULL;
12050 ELSIF(p_budget_lines_in(l_budget_line_index).burdened_cost is null) THEN
12051 l_finplan_lines_tab(j).txn_burdened_cost := FND_API.G_MISS_NUM;
12052 ELSE
12053 l_finplan_lines_tab(j).txn_burdened_cost := l_budget_line_in_rec.burdened_cost;
12054 END IF;
12055
12056 IF p_budget_lines_in(l_budget_line_index).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12057 l_finplan_lines_tab(j).txn_revenue := NULL;
12058 ELSIF(p_budget_lines_in(l_budget_line_index).revenue is null) THEN
12059 l_finplan_lines_tab(j).txn_revenue := FND_API.G_MISS_NUM;
12060 ELSE
12061 l_finplan_lines_tab(j).txn_revenue := l_budget_line_in_rec.revenue;
12062 END IF;
12063
12064 IF p_budget_lines_in(l_budget_line_index).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12065 l_finplan_lines_tab(j).quantity := NULL;
12066 ELSIF(p_budget_lines_in(l_budget_line_index).quantity is null) THEN
12067 l_finplan_lines_tab(j).quantity := FND_API.G_MISS_NUM;
12068 ELSE
12069 l_finplan_lines_tab(j).quantity := l_budget_line_in_rec.quantity;
12070 END IF;
12071
12072 IF p_budget_lines_in(l_budget_line_index).change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12073 l_finplan_lines_tab(j).change_reason_code :=NULL;
12074 ELSIF(p_budget_lines_in(l_budget_line_index).change_reason_code is null) THEN
12075 l_finplan_lines_tab(j).change_reason_code := FND_API.G_MISS_CHAR;
12076 ELSE
12077 l_finplan_lines_tab(j).change_reason_code := l_budget_line_in_rec.change_reason_code ;
12078 END IF;
12079
12080 IF p_budget_lines_in(l_budget_line_index).description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12081 l_finplan_lines_tab(j).description := NULL;
12082 ELSIF(p_budget_lines_in(l_budget_line_index).description is null) THEN
12083 l_finplan_lines_tab(j).description := FND_API.G_MISS_CHAR;
12084 ELSE
12085 l_finplan_lines_tab(j).description := l_budget_line_in_rec.description;
12086 END IF;
12087
12088 IF p_budget_lines_in(l_budget_line_index).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12089 l_finplan_lines_tab(j).attribute_category := NULL;
12090 ELSIF(p_budget_lines_in(l_budget_line_index).attribute_category is null) THEN
12091 l_finplan_lines_tab(j).attribute_category := FND_API.G_MISS_CHAR;
12092 ELSE
12093 l_finplan_lines_tab(j).attribute_category := l_budget_line_in_rec.attribute_category;
12094 END IF;
12095
12096 IF p_budget_lines_in(l_budget_line_index).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12097 l_finplan_lines_tab(j).attribute1 := NULL;
12098 ELSIF(p_budget_lines_in(l_budget_line_index).attribute1 is null) THEN
12099 l_finplan_lines_tab(j).attribute1 := FND_API.G_MISS_CHAR;
12100 ELSE
12101 l_finplan_lines_tab(j).attribute1 := l_budget_line_in_rec.attribute1;
12102 END IF;
12103
12104 IF p_budget_lines_in(l_budget_line_index).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12105 l_finplan_lines_tab(j).attribute2 := NULL;
12106 ELSIF(p_budget_lines_in(l_budget_line_index).attribute2 is null) THEN
12107 l_finplan_lines_tab(j).attribute2 := FND_API.G_MISS_CHAR;
12108 ELSE
12109 l_finplan_lines_tab(j).attribute2 := l_budget_line_in_rec.attribute2;
12110 END IF;
12111
12112 IF p_budget_lines_in(l_budget_line_index).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12113 l_finplan_lines_tab(j).attribute3 := NULL;
12114 ELSIF(p_budget_lines_in(l_budget_line_index).attribute3 is null) THEN
12115 l_finplan_lines_tab(j).attribute3 := FND_API.G_MISS_CHAR;
12116 ELSE
12117 l_finplan_lines_tab(j).attribute3 := l_budget_line_in_rec.attribute3;
12118 END IF;
12119
12120 IF p_budget_lines_in(l_budget_line_index).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12121 l_finplan_lines_tab(j).attribute4 := NULL;
12122 ELSIF(p_budget_lines_in(l_budget_line_index).attribute4 is null) THEN
12123 l_finplan_lines_tab(j).attribute4 := FND_API.G_MISS_CHAR;
12124 ELSE
12125 l_finplan_lines_tab(j).attribute4 := l_budget_line_in_rec.attribute4;
12126 END IF;
12127
12128 IF p_budget_lines_in(l_budget_line_index).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12129 l_finplan_lines_tab(j).attribute5 := NULL;
12130 ELSIF(p_budget_lines_in(l_budget_line_index).attribute5 is null) THEN
12131 l_finplan_lines_tab(j).attribute5 := FND_API.G_MISS_CHAR;
12132 ELSE
12133 l_finplan_lines_tab(j).attribute5 := l_budget_line_in_rec.attribute5;
12134 END IF;
12135
12136 IF p_budget_lines_in(l_budget_line_index).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12137 l_finplan_lines_tab(j).attribute6 := NULL;
12138 ELSIF(p_budget_lines_in(l_budget_line_index).attribute6 is null) THEN
12139 l_finplan_lines_tab(j).attribute6 := FND_API.G_MISS_CHAR;
12140 ELSE
12141 l_finplan_lines_tab(j).attribute6 := l_budget_line_in_rec.attribute6;
12142 END IF;
12143
12144 IF p_budget_lines_in(l_budget_line_index).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12145 l_finplan_lines_tab(j).attribute7 := NULL;
12146 ELSIF(p_budget_lines_in(l_budget_line_index).attribute7 is null) THEN
12147 l_finplan_lines_tab(j).attribute7 := FND_API.G_MISS_CHAR;
12148 ELSE
12149 l_finplan_lines_tab(j).attribute7 := l_budget_line_in_rec.attribute7;
12150 END IF;
12151
12152 IF p_budget_lines_in(l_budget_line_index).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12153 l_finplan_lines_tab(j).attribute8 := NULL;
12154 ELSIF(p_budget_lines_in(l_budget_line_index).attribute8 is null) THEN
12155 l_finplan_lines_tab(j).attribute8 := FND_API.G_MISS_CHAR;
12156 ELSE
12157 l_finplan_lines_tab(j).attribute8 := l_budget_line_in_rec.attribute8;
12158 END IF;
12159
12160 IF p_budget_lines_in(l_budget_line_index).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12161 l_finplan_lines_tab(j).attribute9 := NULL;
12162 ELSIF(p_budget_lines_in(l_budget_line_index).attribute9 is null) THEN
12163 l_finplan_lines_tab(j).attribute9 := FND_API.G_MISS_CHAR;
12164 ELSE
12165 l_finplan_lines_tab(j).attribute9 := l_budget_line_in_rec.attribute9;
12166 END IF;
12167
12168 IF p_budget_lines_in(l_budget_line_index).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12169 l_finplan_lines_tab(j).attribute10 := NULL;
12170 ELSIF(p_budget_lines_in(l_budget_line_index).attribute10 is null) THEN
12171 l_finplan_lines_tab(j).attribute10 := FND_API.G_MISS_CHAR;
12172 ELSE
12173 l_finplan_lines_tab(j).attribute10 := l_budget_line_in_rec.attribute10;
12174 END IF;
12175
12176 IF p_budget_lines_in(l_budget_line_index).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12177 l_finplan_lines_tab(j).attribute11 := NULL;
12178 ELSIF(p_budget_lines_in(l_budget_line_index).attribute11 is null) THEN
12179 l_finplan_lines_tab(j).attribute11 := FND_API.G_MISS_CHAR;
12180 ELSE
12181 l_finplan_lines_tab(j).attribute11 := l_budget_line_in_rec.attribute11;
12182 END IF;
12183
12184 IF p_budget_lines_in(l_budget_line_index).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12185 l_finplan_lines_tab(j).attribute12 := NULL;
12186 ELSIF(p_budget_lines_in(l_budget_line_index).attribute12 is null) THEN
12187 l_finplan_lines_tab(j).attribute12 := FND_API.G_MISS_CHAR;
12188 ELSE
12189 l_finplan_lines_tab(j).attribute12 := l_budget_line_in_rec.attribute12;
12190 END IF;
12191
12192 IF p_budget_lines_in(l_budget_line_index).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12193 l_finplan_lines_tab(j).attribute13 := NULL;
12194 ELSIF(p_budget_lines_in(l_budget_line_index).attribute13 is null) THEN
12195 l_finplan_lines_tab(j).attribute13 := FND_API.G_MISS_CHAR;
12196 ELSE
12197 l_finplan_lines_tab(j).attribute13 := l_budget_line_in_rec.attribute13;
12198 END IF;
12199
12200 IF p_budget_lines_in(l_budget_line_index).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12201 l_finplan_lines_tab(j).attribute14 := NULL;
12202 ELSIF(p_budget_lines_in(l_budget_line_index).attribute14 is null) THEN
12203 l_finplan_lines_tab(j).attribute14 := FND_API.G_MISS_CHAR;
12204 ELSE
12205 l_finplan_lines_tab(j).attribute14 := l_budget_line_in_rec.attribute14;
12206 END IF;
12207
12208 IF p_budget_lines_in(l_budget_line_index).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12209 l_finplan_lines_tab(j).attribute15 := NULL;
12210 ELSIF(p_budget_lines_in(l_budget_line_index).attribute15 is null) THEN
12211 l_finplan_lines_tab(j).attribute15 := FND_API.G_MISS_CHAR;
12212 ELSE
12213 l_finplan_lines_tab(j).attribute15 := l_budget_line_in_rec.attribute15;
12214 END IF;
12215
12216 IF p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_type =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12217 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := NULL;
12218 ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_type is null) THEN
12219 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := FND_API.G_MISS_CHAR;
12220 ELSE
12221 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_TYPE := l_budget_line_in_rec.projfunc_cost_rate_type;
12222 END IF;
12223
12224 IF p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12225 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE := NULL;
12226 ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_date_type is null) THEN
12227 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE := FND_API.G_MISS_CHAR;
12228 ELSE
12229 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE_TYPE :=l_budget_line_in_rec.projfunc_cost_rate_date_type;
12230 END IF;
12231
12232 IF p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12233 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE := NULL;
12234 ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_cost_rate_date is null) THEN
12235 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE := FND_API.G_MISS_DATE;
12236 ELSE
12237 l_finplan_lines_tab(j).PROJFUNC_COST_RATE_DATE := l_budget_line_in_rec.projfunc_cost_rate_date ;
12238 END IF;
12239
12240 IF p_budget_lines_in(l_budget_line_index).projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12241 l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := NULL;
12242 ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_cost_exchange_rate is null) THEN
12243 l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := FND_API.G_MISS_NUM;
12244 ELSE
12245 l_finplan_lines_tab(j).PROJFUNC_COST_EXCHANGE_RATE := l_budget_line_in_rec.projfunc_cost_exchange_rate ;
12246 END IF;
12247
12248 IF p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12249 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE := NULL;
12250 ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_type is null) THEN
12251 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE := FND_API.G_MISS_CHAR;
12252 ELSE
12253 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_TYPE := l_budget_line_in_rec.projfunc_rev_rate_type ;
12254 END IF;
12255
12256 IF p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12257 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := NULL;
12258 ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_date_type is null) THEN
12259 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := FND_API.G_MISS_CHAR;
12260 ELSE
12261 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE_TYPE := l_budget_line_in_rec.projfunc_rev_rate_date_type ;
12262 END IF;
12263
12264 IF p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12265 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE := NULL;
12266 ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_rev_rate_date is null) THEN
12267 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE := FND_API.G_MISS_DATE;
12268 ELSE
12269 l_finplan_lines_tab(j).PROJFUNC_REV_RATE_DATE := l_budget_line_in_rec.projfunc_rev_rate_date;
12270 END IF;
12271
12272 IF p_budget_lines_in(l_budget_line_index).projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12273 l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE := NULL;
12274 ELSIF(p_budget_lines_in(l_budget_line_index).projfunc_rev_exchange_rate is null) THEN
12275 l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE := FND_API.G_MISS_NUM;
12276 ELSE
12277 l_finplan_lines_tab(j).PROJFUNC_REV_EXCHANGE_RATE := l_budget_line_in_rec.projfunc_rev_exchange_rate ;
12278 END IF;
12279
12280 IF p_budget_lines_in(l_budget_line_index).project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12281 l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE := NULL;
12282 ELSIF(p_budget_lines_in(l_budget_line_index).project_cost_rate_type is null) THEN
12283 l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE := FND_API.G_MISS_CHAR;
12284 ELSE
12285 l_finplan_lines_tab(j).PROJECT_COST_RATE_TYPE := l_budget_line_in_rec.project_cost_rate_type;
12286 END IF;
12287
12288 IF p_budget_lines_in(l_budget_line_index).project_cost_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12289 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := NULL;
12290 ELSIF(p_budget_lines_in(l_budget_line_index).project_cost_rate_date_type is null) THEN
12291 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := FND_API.G_MISS_CHAR;
12292 ELSE
12293 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE_TYPE := l_budget_line_in_rec.project_cost_rate_date_type ;
12294 END IF;
12295
12296 IF p_budget_lines_in(l_budget_line_index).project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12297 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE := NULL;
12298 ELSIF(p_budget_lines_in(l_budget_line_index).project_cost_rate_date is null) THEN
12299 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE := FND_API.G_MISS_DATE;
12300 ELSE
12301 l_finplan_lines_tab(j).PROJECT_COST_RATE_DATE := l_budget_line_in_rec.project_cost_rate_date;
12302 END IF;
12303
12304 IF p_budget_lines_in(l_budget_line_index).project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12305 l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE := NULL;
12306 ELSIF(p_budget_lines_in(l_budget_line_index).project_cost_exchange_rate is null) THEN
12307 l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE := FND_API.G_MISS_NUM;
12308 ELSE
12309 l_finplan_lines_tab(j).PROJECT_COST_EXCHANGE_RATE := l_budget_line_in_rec.project_cost_exchange_rate ;
12310 END IF;
12311
12312 IF p_budget_lines_in(l_budget_line_index).project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12313 l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE := NULL;
12314 ELSIF(p_budget_lines_in(l_budget_line_index).project_rev_rate_type is null) THEN
12315 l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE := FND_API.G_MISS_CHAR;
12316 ELSE
12317 l_finplan_lines_tab(j).PROJECT_REV_RATE_TYPE := l_budget_line_in_rec.project_rev_rate_type ;
12318 END IF;
12319
12320 IF p_budget_lines_in(l_budget_line_index).project_rev_rate_date_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12321 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE := NULL;
12322 ELSIF(p_budget_lines_in(l_budget_line_index).project_rev_rate_date_type is null) THEN
12323 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE := FND_API.G_MISS_CHAR;
12324 ELSE
12325 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE_TYPE := l_budget_line_in_rec.project_rev_rate_date_type;
12326 END IF;
12327
12328 IF p_budget_lines_in(l_budget_line_index).project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12329 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE := NULL;
12330 ELSIF(p_budget_lines_in(l_budget_line_index).project_rev_rate_date is null) THEN
12331 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE := FND_API.G_MISS_DATE;
12332 ELSE
12333 l_finplan_lines_tab(j).PROJECT_REV_RATE_DATE := l_budget_line_in_rec.project_rev_rate_date ;
12334 END IF;
12335
12336 IF p_budget_lines_in(l_budget_line_index).project_rev_exchange_rate =PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12337 l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE := NULL;
12338 ELSIF(p_budget_lines_in(l_budget_line_index).project_rev_exchange_rate is null) THEN
12339 l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE := FND_API.G_MISS_NUM;
12340 ELSE
12341 l_finplan_lines_tab(j).PROJECT_REV_EXCHANGE_RATE := l_budget_line_in_rec.project_rev_exchange_rate;
12342 END IF;
12343
12344 IF p_budget_lines_in(l_budget_line_index).pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12345 l_finplan_lines_tab(j).pm_product_code := NULL;
12346 ELSIF(p_budget_lines_in(l_budget_line_index).pm_product_code is null) THEN
12347 l_finplan_lines_tab(j).pm_product_code := FND_API.G_MISS_CHAR;
12348 ELSE
12349 l_finplan_lines_tab(j).pm_product_code := l_budget_line_in_rec.pm_product_code ;
12350 END IF;
12351
12352 IF p_budget_lines_in(l_budget_line_index).pm_budget_line_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
12353 l_finplan_lines_tab(j).pm_budget_line_reference := NULL;
12354 ELSIF(p_budget_lines_in(l_budget_line_index).pm_budget_line_reference is null) THEN
12355 l_finplan_lines_tab(j).pm_budget_line_reference := FND_API.G_MISS_CHAR;
12356 ELSE
12357 l_finplan_lines_tab(j).pm_budget_line_reference := l_budget_line_in_rec.pm_budget_line_reference ;
12358 END IF;
12359
12360 l_finplan_lines_tab(j).quantity_source := 'I';
12361 l_finplan_lines_tab(j).raw_cost_source := 'I';
12362 l_finplan_lines_tab(j).burdened_cost_source := 'I';
12363 l_finplan_lines_tab(j).revenue_source := 'I';
12364 l_finplan_lines_tab(j).resource_assignment_id := l_resource_assignment_id ;
12365 --increment the index for fin plan lines table
12366 j := j+1;
12367 END IF;
12368 -- Actual insertion will take place outside the loop as
12369 -- as the call to CREATE_FINPLAN_LINES expects a table
12370 -- of budget line records.
12371 --Major changes for the bug 3453650 for the finplan model.
12372
12373
12374 END IF; -- l_budget_type_code IS NOT NULL
12375
12376 l_budget_line_index := p_budget_lines_in.next(l_budget_line_index);
12377
12378 END LOOP budget_line;
12379
12380 IF l_budget_type_code IS NULL THEN
12381
12382 -- Bug : 3453650: Calling the create finplan lines api to create the
12383 -- budget lines for the finplan model and passing the l_finplan_lines_tab
12384 -- table which was built earlier in the api
12385
12386 IF ( nvl(l_finplan_lines_tab.last,0) > 0 ) THEN
12387
12388 -- dbms_output.put_line ('Calling add_finplan_lines');
12389
12390 PA_FIN_PLAN_PVT.ADD_FIN_PLAN_LINES
12391 ( p_calling_context => PA_FP_CONSTANTS_PKG.G_AMG_API /* Bug# 2674353 */
12392 ,p_fin_plan_version_id => l_budget_version_id
12393 ,p_finplan_lines_tab => l_finplan_lines_tab
12394 ,x_return_status => l_return_status
12395 ,x_msg_count => l_msg_count
12396 ,x_msg_data => l_msg_data );
12397
12398 -- dbms_output.put_line ('after Calling add_finplan_lines ' || l_return_status || ' p_multiple_task_msg ' || p_multiple_task_msg);
12399
12400 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12401 pa_debug.g_err_stage:= 'Error Calling ADD_FINPLAN_LINES';
12402 IF L_DEBUG_MODE = 'Y' THEN
12403 pa_debug.write('UPDATE_BUDGET: ' || g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
12404 END IF;
12405 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12406 END IF;
12407 END IF;
12408
12409
12410 -- Unlock the version now that the budget version is updated.
12411 l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
12412 (p_budget_version_id => l_budget_version_id);
12413
12414 --Try to lock the version before updating the version. This is required so that nobody else can access it.
12415 pa_fin_plan_pvt.lock_unlock_version
12416 (p_budget_version_id => l_budget_version_id,
12417 p_record_version_number => l_record_version_number,
12418 p_action => 'U',
12419 p_user_id => l_user_id,
12420 p_person_id => lx_locked_by_person_id,
12421 x_return_status => x_return_status,
12422 x_msg_count => l_msg_count,
12423 x_msg_data => l_msg_data) ;
12424
12425 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
12426
12427 IF l_debug_mode = 'Y' THEN
12428 pa_debug.g_err_stage := 'Error in lock unlock version - Cannot lock the version';
12429 pa_debug.write('CREATE_DRAFT: ' || g_module_name,pa_debug.g_err_stage,5);
12430 END IF;
12431
12432 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12433 END IF;
12434
12435 END IF; -- END OF l_budget_type_code is null
12436
12437 IF p_multiple_task_msg = 'F' THEN
12438 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12439 END IF;
12440
12441 --summarizing the totals in the table pa_budget_versions
12442 /*Added the below if condition for the bug 3453650*/
12443 IF l_budget_type_code IS NOT NULL THEN
12444
12445 -- check for overlapping dates
12446 pa_budget_lines_v_pkg.check_overlapping_dates( x_budget_version_id => l_budget_version_id --IN
12447 ,x_resource_name => l_resource_name --OUT
12448 ,x_err_code => l_err_code );
12449
12450 -- dbms_output.put_line ('after calling pa_budget_lines_v_pkg.check_overlapping_dates ' || l_err_code );
12451
12452 IF l_err_code > 0 THEN
12453 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12454 FND_MESSAGE.SET_NAME('PA','PA_CHECK_DATES_FAILED');
12455 FND_MESSAGE.SET_TOKEN('Rname',l_resource_name);
12456
12457 FND_MSG_PUB.add;
12458 END IF;
12459 RAISE FND_API.G_EXC_ERROR;
12460 ELSIF l_err_code < 0 THEN
12461 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
12462 FND_MSG_PUB.add_exc_msg
12463 ( p_pkg_name => 'PA_BUDGET_LINES_V_PKG'
12464 , p_procedure_name => 'CHECK_OVERLAPPING_DATES'
12465 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
12466 END IF;
12467 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12468 END IF;
12469
12470
12471 PA_BUDGET_UTILS.summerize_project_totals( x_budget_version_id => l_budget_version_id
12472 , x_err_code => l_err_code
12473 , x_err_stage => l_err_stage
12474 , x_err_stack => l_err_stack );
12475
12476 IF l_err_code > 0 THEN
12477 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12478 IF NOT pa_project_pvt.check_valid_message(l_err_stage) THEN
12479 pa_interface_utils_pub.map_new_amg_msg
12480 ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
12481 ,p_msg_attribute => 'CHANGE'
12482 ,p_resize_flag => 'N'
12483 ,p_msg_context => 'BUDG'
12484 ,p_attribute1 => l_amg_segment1
12485 ,p_attribute2 => l_amg_task_number
12486 ,p_attribute3 => l_budget_type_code
12487 ,p_attribute4 => ''
12488 ,p_attribute5 => to_char(l_budget_start_date));
12489 ELSE
12490 pa_interface_utils_pub.map_new_amg_msg
12491 ( p_old_message_code => l_err_stage
12492 ,p_msg_attribute => 'CHANGE'
12493 ,p_resize_flag => 'N'
12494 ,p_msg_context => 'BUDG'
12495 ,p_attribute1 => l_amg_segment1
12496 ,p_attribute2 => l_amg_task_number
12497 ,p_attribute3 => l_budget_type_code
12498 ,p_attribute4 => ''
12499 ,p_attribute5 => to_char(l_budget_start_date));
12500 END IF;
12501 END IF;
12502 RAISE FND_API.G_EXC_ERROR;
12503 ELSIF l_err_code < 0 THEN
12504 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
12505 FND_MSG_PUB.add_exc_msg
12506 ( p_pkg_name => 'PA_BUDGET_UTILS'
12507 , p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
12508 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
12509
12510 END IF;
12511 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12512 END IF; -- l_err_code > 0
12513 END IF; -- l_budget_type_code IS NOT NULL
12514
12515 END IF; --if there are budget lines
12516
12517 IF FND_API.TO_BOOLEAN( p_commit ) THEN
12518 COMMIT;
12519 END IF;
12520
12521
12522 EXCEPTION
12523
12524 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12525 -- dbms_output.put_line('Invalid_Arg_Exc MSG count in the stack ' || FND_MSG_PUB.count_msg);
12526 ROLLBACK TO update_budget_pub;
12527
12528 IF p_return_status IS NULL OR
12529 p_return_status = FND_API.G_RET_STS_SUCCESS THEN
12530 p_return_status := FND_API.G_RET_STS_ERROR;
12531 END IF;
12532
12533 l_msg_count := FND_MSG_PUB.count_msg;
12534 -- dbms_output.put_line('Invalid_Arg_Exc MSG count in the stack ' || l_msg_count);
12535
12536 IF l_msg_count = 1 AND p_msg_data IS NULL THEN
12537 PA_INTERFACE_UTILS_PUB.get_messages
12538 (p_encoded => FND_API.G_TRUE,
12539 p_msg_index => 1,
12540 p_msg_count => l_msg_count,
12541 p_msg_data => l_msg_data,
12542 p_data => l_data,
12543 p_msg_index_out => l_msg_index_out);
12544
12545 p_msg_data := l_data;
12546 p_msg_count := l_msg_count;
12547 ELSE
12548 p_msg_count := l_msg_count;
12549 END IF;
12550 --Changes for bug 3182963
12551 IF l_debug_mode = 'Y' THEN
12552 pa_debug.reset_curr_function;
12553 END IF;
12554 -- dbms_output.put_line('Invalid_Arg_Exc MSG count in the stack ' || l_msg_count);
12555
12556 RETURN;
12557
12558 WHEN FND_API.G_EXC_ERROR
12559 THEN
12560
12561
12562 ROLLBACK TO update_budget_pub;
12563
12564 p_return_status := FND_API.G_RET_STS_ERROR;
12565
12566 FND_MSG_PUB.Count_And_Get
12567 ( p_count => p_msg_count ,
12568 p_data => p_msg_data );
12569
12570 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
12571 THEN
12572
12573
12574 ROLLBACK TO update_budget_pub;
12575
12576 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12577
12578 FND_MSG_PUB.Count_And_Get
12579 ( p_count => p_msg_count ,
12580 p_data => p_msg_data );
12581
12582 WHEN ROW_ALREADY_LOCKED
12583 THEN
12584 ROLLBACK TO update_budget_pub;
12585
12586 p_return_status := FND_API.G_RET_STS_ERROR;
12587
12588 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
12589 THEN
12590 FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
12591 FND_MESSAGE.SET_TOKEN('PROJECT', l_amg_segment1);
12592 FND_MESSAGE.SET_TOKEN('TASK', l_amg_task_number);
12593 FND_MESSAGE.SET_TOKEN('BUDGET_TYPE', l_budget_type_code);
12594 FND_MESSAGE.SET_TOKEN('SOURCE_NAME', '');
12595 -- FND_MESSAGE.SET_TOKEN('START_DATE', to_char(l_budget_start_date));
12596 FND_MESSAGE.SET_TOKEN('START_DATE',
12597 fnd_date.date_to_chardate(l_budget_start_date));
12598 FND_MESSAGE.SET_TOKEN('ENTITY', 'G_BUDGET_CODE');
12599 FND_MSG_PUB.ADD;
12600 END IF;
12601
12602 FND_MSG_PUB.Count_And_Get
12603 ( p_count => p_msg_count ,
12604 p_data => p_msg_data );
12605
12606 WHEN OTHERS
12607 THEN
12608
12609
12610 ROLLBACK TO update_budget_pub;
12611
12612 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12613
12614 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
12615 THEN
12616 FND_MSG_PUB.add_exc_msg
12617 ( p_pkg_name => G_PKG_NAME
12618 , p_procedure_name => l_api_name );
12619
12620 END IF;
12621
12622 FND_MSG_PUB.Count_And_Get
12623 ( p_count => p_msg_count ,
12624 p_data => p_msg_data );
12625
12626
12627 END update_budget;
12628
12629
12630 ----------------------------------------------------------------------------------------
12631 --Name: execute_update_budget
12632 --Type: Procedure
12633 --Description: This procedure can be used to update a working (draft) budget
12634 -- using global PL/SQL tables.
12635 --
12636 --Called subprograms:
12637 --
12638 --
12639 --
12640 --History:
12641 -- 14-OCT-1996 L. de Werker Created
12642 -- 28-NOV-1996 L. de Werker Add 16 parameters for descriptive flexfields
12643 --
12644
12645 PROCEDURE execute_update_budget
12646 ( p_api_version_number IN NUMBER
12647 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
12648 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
12649 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12650 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12651 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12652 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12653 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12654 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12655 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12656 ,p_change_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12657 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12658 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12659 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12660 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12661 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12662 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12663 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12664 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12665 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12666 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12667 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12668 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12669 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12670 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12671 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12672 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12673 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12674 --Added for the bug 3453650
12675 ,p_resource_list_id IN pa_budget_versions.resource_list_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12676 ,p_set_current_working_flag IN pa_budget_versions.current_working_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12677 ,p_budget_version_number IN pa_budget_versions.version_number%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12678 ,p_budget_version_name IN pa_budget_versions.version_name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12679 ,p_version_type IN pa_budget_versions.version_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12680 ,p_finplan_type_id IN pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12681 ,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
12682 ,p_time_phased_code IN pa_proj_fp_options.cost_time_phased_code%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12683 ,p_projfunc_cost_rate_type IN pa_proj_fp_options.projfunc_cost_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12684 ,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
12685 ,p_projfunc_cost_rate_date IN pa_proj_fp_options.projfunc_cost_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12686 ,p_projfunc_cost_exchange_rate IN pa_budget_lines.projfunc_cost_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12687 ,p_projfunc_rev_rate_type IN pa_proj_fp_options.projfunc_rev_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12688 ,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
12689 ,p_projfunc_rev_rate_date IN pa_proj_fp_options.projfunc_rev_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12690 ,p_projfunc_rev_exchange_rate IN pa_budget_lines.projfunc_cost_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12691 ,p_project_cost_rate_type IN pa_proj_fp_options.project_cost_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12692 ,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
12693 ,p_project_cost_rate_date IN pa_proj_fp_options.project_cost_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12694 ,p_project_cost_exchange_rate IN pa_budget_lines.project_cost_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12695 ,p_project_rev_rate_type IN pa_proj_fp_options.project_rev_rate_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12696 ,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
12697 ,p_project_rev_rate_date IN pa_proj_fp_options.project_rev_rate_date%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12698 ,p_project_rev_exchange_rate IN pa_budget_lines.project_rev_exchange_rate%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12699 )
12700
12701 IS
12702
12703 l_api_name CONSTANT VARCHAR2(30) := 'execute_update_budget';
12704
12705 i NUMBER;
12706 l_return_status VARCHAR2(1);
12707 l_err_stage VARCHAR2(120);
12708
12709
12710 BEGIN
12711
12712 -- Standard begin of API savepoint
12713
12714 SAVEPOINT execute_update_budget_pub;
12715
12716 -- Standard call to check for call compatibility.
12717
12718 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
12719 p_api_version_number ,
12720 l_api_name ,
12721 G_PKG_NAME )
12722 THEN
12723
12724 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12725
12726 END IF;
12727
12728 -- Initialize the message table if requested.
12729
12730 IF FND_API.TO_BOOLEAN( p_init_msg_list )
12731 THEN
12732
12733 FND_MSG_PUB.initialize;
12734
12735 END IF;
12736
12737 -- Set API return status to success
12738
12739 p_return_status := FND_API.G_RET_STS_SUCCESS;
12740
12741
12742 -- product_code is mandatory
12743
12744 IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12745 OR p_pm_product_code IS NULL
12746 THEN
12747 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
12748 THEN
12749 pa_interface_utils_pub.map_new_amg_msg
12750 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
12751 ,p_msg_attribute => 'CHANGE'
12752 ,p_resize_flag => 'N'
12753 ,p_msg_context => 'GENERAL'
12754 ,p_attribute1 => ''
12755 ,p_attribute2 => ''
12756 ,p_attribute3 => ''
12757 ,p_attribute4 => ''
12758 ,p_attribute5 => '');
12759 END IF;
12760
12761 RAISE FND_API.G_EXC_ERROR;
12762
12763 END IF;
12764
12765 l_pm_product_code :='Z';
12766 /*added for bug no :2413400*/
12767 OPEN p_product_code_csr (p_pm_product_code);
12768 FETCH p_product_code_csr INTO l_pm_product_code;
12769 CLOSE p_product_code_csr;
12770 IF l_pm_product_code <> 'X'
12771 THEN
12772
12773 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
12774 THEN
12775 pa_interface_utils_pub.map_new_amg_msg
12776 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
12777 ,p_msg_attribute => 'CHANGE'
12778 ,p_resize_flag => 'N'
12779 ,p_msg_context => 'GENERAL'
12780 ,p_attribute1 => ''
12781 ,p_attribute2 => ''
12782 ,p_attribute3 => ''
12783 ,p_attribute4 => ''
12784 ,p_attribute5 => '');
12785 END IF;
12786 p_return_status := FND_API.G_RET_STS_ERROR;
12787 RAISE FND_API.G_EXC_ERROR;
12788 END IF;
12789
12790
12791 /* -- dbms_output.put_line('Before update_budget'); */
12792
12793 update_budget( p_api_version_number => p_api_version_number
12794 ,p_commit => FND_API.G_FALSE
12795 ,p_init_msg_list => FND_API.G_FALSE
12796 ,p_msg_count => p_msg_count
12797 ,p_msg_data => p_msg_data
12798 ,p_return_status => l_return_status
12799 ,p_pm_product_code => p_pm_product_code
12800 ,p_pa_project_id => p_pa_project_id
12801 ,p_pm_project_reference => p_pm_project_reference
12802 ,p_budget_type_code => p_budget_type_code
12803 ,p_change_reason_code => p_change_reason_code
12804 ,p_description => p_description
12805 ,p_budget_lines_in => G_budget_lines_in_tbl
12806 ,p_budget_lines_out => G_budget_lines_out_tbl
12807 -- Added for bug 4224464
12808 --Added the new parameters for the bug 3453650
12809 ,p_resource_list_id => p_resource_list_id
12810 ,p_set_current_working_flag => p_set_current_working_flag
12811 ,p_budget_version_number => p_budget_version_number
12812 ,p_budget_version_name => p_budget_version_name
12813 ,p_version_type => p_version_type -- 3453650
12814 ,p_finplan_type_id => p_finplan_type_id
12815 ,p_plan_in_multi_curr_flag => p_plan_in_multi_curr_flag
12816 ,p_time_phased_code => p_time_phased_code
12817 ,p_projfunc_cost_rate_type => p_projfunc_cost_rate_type
12818 ,p_projfunc_cost_rate_date_typ => p_projfunc_cost_rate_date_typ
12819 ,p_projfunc_cost_rate_date => p_projfunc_cost_rate_date
12820 ,p_projfunc_cost_exchange_rate => p_projfunc_cost_exchange_rate
12821 ,p_projfunc_rev_rate_type => p_projfunc_rev_rate_type
12822 ,p_projfunc_rev_rate_date_typ => p_projfunc_rev_rate_date_typ
12823 ,p_projfunc_rev_rate_date => p_projfunc_rev_rate_date
12824 ,p_projfunc_rev_exchange_rate => p_projfunc_rev_exchange_rate
12825 ,p_project_cost_rate_type => p_project_cost_rate_type
12826 ,p_project_cost_rate_date_typ => p_project_cost_rate_date_typ
12827 ,p_project_cost_rate_date => p_project_cost_rate_date
12828 ,p_project_cost_exchange_rate => p_project_cost_exchange_rate
12829 ,p_project_rev_rate_type => p_project_rev_rate_type
12830 ,p_project_rev_rate_date_typ => p_project_rev_rate_date_typ
12831 ,p_project_rev_rate_date => p_project_rev_rate_date
12832 ,p_project_rev_exchange_rate => p_project_rev_exchange_rate );
12833
12834 /* -- dbms_output.put_line('After update_budget'); */
12835
12836 /* -- dbms_output.put_line('Return status update_budget: '||l_return_status); */
12837
12838 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
12839 THEN
12840
12841 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12842
12843 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
12844 THEN
12845
12846 RAISE FND_API.G_EXC_ERROR;
12847 END IF;
12848
12849 IF fnd_api.to_boolean(p_commit)
12850 THEN
12851 COMMIT;
12852 END IF;
12853
12854
12855 EXCEPTION
12856
12857 WHEN FND_API.G_EXC_ERROR
12858 THEN
12859
12860 /* -- dbms_output.put_line('handling an G_EXC_ERROR exception in execute_update_budget'); */
12861
12862 ROLLBACK TO execute_update_budget_pub;
12863
12864 p_return_status := FND_API.G_RET_STS_ERROR;
12865
12866 FND_MSG_PUB.Count_And_Get
12867 ( p_count => p_msg_count ,
12868 p_data => p_msg_data );
12869
12870 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
12871 THEN
12872
12873 /* -- dbms_output.put_line('handling an G_EXC_UNEXPECTED_ERROR exception'); */
12874
12875 ROLLBACK TO execute_update_budget_pub;
12876
12877 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12878
12879 FND_MSG_PUB.Count_And_Get
12880 ( p_count => p_msg_count ,
12881 p_data => p_msg_data );
12882
12883 WHEN OTHERS THEN
12884
12885 /* -- dbms_output.put_line('handling an OTHERS exception in execute_update_budget'); */
12886
12887 ROLLBACK TO execute_update_budget_pub;
12888
12889 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12890
12891 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
12892 THEN
12893 FND_MSG_PUB.add_exc_msg
12894 ( p_pkg_name => G_PKG_NAME
12895 , p_procedure_name => l_api_name );
12896
12897 END IF;
12898
12899 FND_MSG_PUB.Count_And_Get
12900 ( p_count => p_msg_count ,
12901 p_data => p_msg_data );
12902
12903 END execute_update_budget;
12904
12905
12906 ----------------------------------------------------------------------------------------
12907 --Name: update_budget_line
12908 --Type: Procedure
12909 --Description: This procedure can be used to update a budgetline of an
12910 -- existing WORKING budget.
12911 --
12912 --Called subprograms: pa_budget_pvt.update_budget_line_sql
12913 --
12914 --
12915 --
12916 --
12917 --History:
12918 -- 10-OCT-1996 L. de Werker Created
12919 -- 19-NOV-1996 L. de Werker Changed to let it use update_budget_line_sql
12920 -- 28-NOV-1996 L. de Werker Add 16 parameters for descriptive flexfields
12921 -- 11-MAY-2005 Ritesh Shukla Bug 4224464: FP.M Changes for update_budget_line
12922
12923 PROCEDURE update_budget_line
12924 ( p_api_version_number IN NUMBER
12925 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
12926 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
12927 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12928 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12929 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12930 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12931 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12932 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12933 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12934 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12935 ,p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12936 ,p_resource_alias IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12937 ,p_resource_list_member_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12938 ,p_budget_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12939 ,p_budget_end_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12940 ,p_period_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12941 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12942 ,p_raw_cost IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12943 ,p_burdened_cost IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12944 ,p_revenue IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12945 ,p_quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12946 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12947 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12948 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12949 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12950 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12951 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12952 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12953 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12954 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12955 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12956 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12957 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12958 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12959 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12960 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12961 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12962 --Parameters added for FP.M
12963 ,p_fin_plan_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12964 ,p_fin_plan_type_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12965 ,p_version_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12966 ,p_version_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12967 ,p_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12968 ,p_change_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12969 ,p_projfunc_cost_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12970 ,p_projfunc_cost_rate_date_typ IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12971 ,p_projfunc_cost_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12972 ,p_projfunc_cost_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12973 ,p_projfunc_rev_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12974 ,p_projfunc_rev_rate_date_typ IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12975 ,p_projfunc_rev_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12976 ,p_projfunc_rev_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12977 ,p_project_cost_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12978 ,p_project_cost_rate_date_typ IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12979 ,p_project_cost_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12980 ,p_project_cost_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12981 ,p_project_rev_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12982 ,p_project_rev_rate_date_typ IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12983 ,p_project_rev_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12984 ,p_project_rev_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12985 )
12986
12987 IS
12988
12989
12990 --needed to get the resource assignment for this budget_version / task / member combination
12991 CURSOR l_resource_assignment_csr
12992 (p_budget_version_id NUMBER
12993 ,p_task_id NUMBER
12994 ,p_member_id NUMBER )
12995 IS
12996 SELECT resource_assignment_id
12997 FROM pa_resource_assignments
12998 WHERE budget_version_id = p_budget_version_id
12999 AND task_id = p_task_id
13000 AND resource_list_member_id = p_member_id;
13001
13002 --needed to check whether budget line already exists
13003 CURSOR l_budget_line_csr
13004 (p_resource_assigment_id NUMBER
13005 ,p_budget_start_date DATE
13006 ,p_currency_code VARCHAR2)
13007 IS
13008 SELECT rowidtochar(rowid)
13009 ,budget_line_id
13010 FROM pa_budget_lines
13011 WHERE resource_assignment_id = p_resource_assigment_id
13012 AND trunc(start_date) = nvl(trunc(p_budget_start_date),trunc(start_date))
13013 AND txn_currency_code = nvl(p_currency_code,txn_currency_code);
13014
13015 --needed to lock the budget line row
13016 CURSOR l_lock_budget_line_csr( p_budget_line_rowid VARCHAR2)
13017 IS
13018 SELECT 'x'
13019 FROM pa_budget_lines
13020 WHERE rowid = p_budget_line_rowid
13021 FOR UPDATE NOWAIT;
13022
13023 l_api_name CONSTANT VARCHAR2(30) := 'update_budget_line';
13024
13025 l_resource_assignment_id NUMBER;
13026 l_budget_line_id NUMBER;
13027 l_budget_line_rowid VARCHAR(20);
13028
13029 l_err_code NUMBER;
13030 l_err_stage VARCHAR2(120);
13031 l_err_stack VARCHAR2(630);
13032
13033 l_project_id NUMBER := p_pa_project_id;
13034 l_budget_type_code pa_budget_types.budget_type_code%TYPE := p_budget_type_code;
13035 l_fin_plan_type_id NUMBER := p_fin_plan_type_id;
13036 l_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE := p_fin_plan_type_name;
13037 l_version_type pa_budget_versions.version_type%TYPE := p_version_type;
13038 l_budget_version_id NUMBER;
13039 l_budget_entry_method_code pa_budget_entry_methods.budget_entry_method_code%TYPE;
13040 l_resource_list_id NUMBER;
13041 l_budget_amount_code pa_budget_types.budget_amount_code%type;
13042 l_entry_level_code pa_proj_fp_options.cost_fin_plan_level_code%TYPE;
13043 l_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE;
13044 l_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
13045 l_categorization_code pa_budget_entry_methods.categorization_code%TYPE;
13046 l_record_version_number pa_budget_versions.record_version_number%TYPE;
13047
13048 l_budget_lines_in budget_line_in_tbl_type;
13049 l_budget_lines_out_tbl budget_line_out_tbl_type;
13050 l_mfc_cost_type_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13051 l_etc_method_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
13052 l_spread_curve_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13053
13054 l_finplan_lines_tab pa_fin_plan_pvt.budget_lines_tab;
13055 l_version_info_rec pa_fp_gen_amount_utils.fp_cols;
13056
13057 --Following parameters are needed for amounts check
13058 l_amount_set_id NUMBER;
13059 lx_raw_cost_flag VARCHAR2(1) := NULL;
13060 lx_burdened_cost_flag VARCHAR2(1) := NULL;
13061 lx_revenue_flag VARCHAR2(1) := NULL;
13062 lx_cost_qty_flag VARCHAR2(1) := NULL;
13063 lx_revenue_qty_flag VARCHAR2(1) := NULL;
13064 lx_all_qty_flag VARCHAR2(1) := NULL;
13065 l_bill_rate_flag pa_fin_plan_amount_sets.bill_rate_flag%type;
13066 l_cost_rate_flag pa_fin_plan_amount_sets.cost_rate_flag%type;
13067 l_burden_rate_flag pa_fin_plan_amount_sets.burden_rate_flag%type;
13068 l_allow_qty_flag VARCHAR2(1);
13069
13070 l_msg_count NUMBER := 0;
13071 l_msg_data VARCHAR2(2000);
13072 l_function_allowed VARCHAR2(1);
13073 l_module_name VARCHAR2(80);
13074 l_data VARCHAR2(2000);
13075 l_msg_index_out NUMBER;
13076
13077 l_amg_project_number pa_projects_all.segment1%TYPE;
13078 l_amg_task_number VARCHAR2(50);
13079
13080 --debug variables
13081 l_debug_mode VARCHAR2(1);
13082 l_debug_level2 CONSTANT NUMBER := 2;
13083 l_debug_level3 CONSTANT NUMBER := 3;
13084 l_debug_level4 CONSTANT NUMBER := 4;
13085 l_debug_level5 CONSTANT NUMBER := 5;
13086 --Added for bug 6408139 to pass G_PA_MISS_CHAR
13087 l_pa_miss_char varchar2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
13088
13089
13090 BEGIN
13091
13092
13093 --Standard begin of API savepoint
13094 SAVEPOINT update_budget_line_pub;
13095
13096 p_msg_count := 0;
13097 p_return_status := FND_API.G_RET_STS_SUCCESS;
13098 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
13099 l_module_name := g_module_name || ':Update_Budget_Line ';
13100
13101 IF ( l_debug_mode = 'Y' )
13102 THEN
13103 pa_debug.set_curr_function( p_function => l_api_name
13104 ,p_debug_mode => l_debug_mode );
13105 END IF;
13106
13107 IF ( l_debug_mode = 'Y' )
13108 THEN
13109 pa_debug.g_err_stage:='Entering ' || l_api_name;
13110 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
13111 END IF;
13112
13113 --Initialize the message table if requested.
13114 IF FND_API.TO_BOOLEAN( p_init_msg_list )
13115 THEN
13116 FND_MSG_PUB.initialize;
13117 END IF;
13118
13119 --Set API return status to success
13120 p_return_status := FND_API.G_RET_STS_SUCCESS;
13121
13122 --Call PA_BUDGET_PVT.validate_header_info to do the necessary
13123 --header level validations
13124 PA_BUDGET_PVT.validate_header_info
13125 ( p_api_version_number => p_api_version_number
13126 ,p_api_name => l_api_name
13127 ,p_init_msg_list => p_init_msg_list
13128 ,px_pa_project_id => l_project_id
13129 ,p_pm_project_reference => p_pm_project_reference
13130 ,p_pm_product_code => p_pm_product_code
13131 ,px_budget_type_code => l_budget_type_code
13132 ,px_fin_plan_type_id => l_fin_plan_type_id
13133 ,px_fin_plan_type_name => l_fin_plan_type_name
13134 ,px_version_type => l_version_type
13135 ,p_budget_version_number => p_version_number
13136 ,p_change_reason_code => NULL
13137 ,p_function_name => 'PA_PM_UPDATE_BUDGET_LINE'
13138 ,x_budget_entry_method_code => l_budget_entry_method_code
13139 ,x_resource_list_id => l_resource_list_id
13140 ,x_budget_version_id => l_budget_version_id
13141 ,x_fin_plan_level_code => l_entry_level_code
13142 ,x_time_phased_code => l_time_phased_code
13143 ,x_plan_in_multi_curr_flag => l_multi_curr_flag
13144 ,x_budget_amount_code => l_budget_amount_code
13145 ,x_categorization_code => l_categorization_code
13146 ,x_project_number => l_amg_project_number
13147 /* Plan Amount Entry flags introduced by bug 6408139 */
13148 /*Passing all as G_PA_MISS_CHAR since validations not required*/
13149 ,px_raw_cost_flag => l_pa_miss_char
13150 ,px_burdened_cost_flag => l_pa_miss_char
13151 ,px_revenue_flag => l_pa_miss_char
13152 ,px_cost_qty_flag => l_pa_miss_char
13153 ,px_revenue_qty_flag => l_pa_miss_char
13154 ,px_all_qty_flag => l_pa_miss_char
13155 ,px_bill_rate_flag => l_pa_miss_char
13156 ,px_cost_rate_flag => l_pa_miss_char
13157 ,px_burden_rate_flag => l_pa_miss_char
13158 /* Plan Amount Entry flags introduced by bug 6408139 */
13159 ,x_msg_count => p_msg_count
13160 ,x_msg_data => p_msg_data
13161 ,x_return_status => p_return_status );
13162
13163 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13164 IF(l_debug_mode='Y') THEN
13165 pa_debug.g_err_stage := 'validate header info API falied';
13166 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13167 END IF;
13168 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13169 END IF;
13170
13171 --Store the budget line data in budget line table
13172
13173 IF p_pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13174 l_budget_lines_in(1).pa_task_id := NULL;
13175 ELSE
13176 l_budget_lines_in(1).pa_task_id := p_pa_task_id;
13177 END IF;
13178
13179 IF p_pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13180 l_budget_lines_in(1).pm_task_reference := NULL;
13181 ELSE
13182 l_budget_lines_in(1).pm_task_reference := p_pm_task_reference;
13183 END IF;
13184
13185 IF p_resource_alias = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13186 l_budget_lines_in(1).resource_alias := NULL;
13187 ELSE
13188 l_budget_lines_in(1).resource_alias := p_resource_alias;
13189 END IF;
13190
13191 IF p_resource_list_member_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13192 l_budget_lines_in(1).resource_list_member_id := NULL;
13193 ELSE
13194 l_budget_lines_in(1).resource_list_member_id := p_resource_list_member_id;
13195 END IF;
13196
13197 IF p_budget_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13198 l_budget_lines_in(1).budget_start_date := NULL;
13199 ELSE
13200 l_budget_lines_in(1).budget_start_date := p_budget_start_date;
13201 END IF;
13202
13203 IF p_budget_end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13204 l_budget_lines_in(1).budget_end_date := NULL;
13205 ELSE
13206 l_budget_lines_in(1).budget_end_date := p_budget_end_date;
13207 END IF;
13208
13209 IF p_period_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13210 l_budget_lines_in(1).period_name := NULL;
13211 ELSE
13212 l_budget_lines_in(1).period_name := p_period_name;
13213 END IF;
13214
13215 IF p_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13216 l_budget_lines_in(1).description := NULL;
13217 ELSE
13218 l_budget_lines_in(1).description := p_description;
13219 END IF;
13220
13221 IF p_raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13222 l_budget_lines_in(1).raw_cost := NULL;
13223 ELSE
13224 l_budget_lines_in(1).raw_cost := p_raw_cost;
13225 END IF;
13226
13227 IF p_burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13228 l_budget_lines_in(1).burdened_cost := NULL;
13229 ELSE
13230 l_budget_lines_in(1).burdened_cost := p_burdened_cost;
13231 END IF;
13232
13233 IF p_revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13234 l_budget_lines_in(1).revenue := NULL;
13235 ELSE
13236 l_budget_lines_in(1).revenue := p_revenue;
13237 END IF;
13238
13239 IF p_quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13240 l_budget_lines_in(1).quantity := NULL;
13241 ELSE
13242 l_budget_lines_in(1).quantity := p_quantity;
13243 END IF;
13244
13245 IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13246 l_budget_lines_in(1).pm_product_code := NULL;
13247 ELSE
13248 l_budget_lines_in(1).pm_product_code := p_pm_product_code;
13249 END IF;
13250
13251 IF p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13252 l_budget_lines_in(1).attribute_category := NULL;
13253 ELSE
13254 l_budget_lines_in(1).attribute_category := p_attribute_category;
13255 END IF;
13256
13257 IF p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13258 l_budget_lines_in(1).attribute1 := NULL;
13259 ELSE
13260 l_budget_lines_in(1).attribute1 := p_attribute1;
13261 END IF;
13262
13263 IF p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13264 l_budget_lines_in(1).attribute2 := NULL;
13265 ELSE
13266 l_budget_lines_in(1).attribute2 := p_attribute2;
13267 END IF;
13268
13269 IF p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13270 l_budget_lines_in(1).attribute3 := NULL;
13271 ELSE
13272 l_budget_lines_in(1).attribute3 := p_attribute3;
13273 END IF;
13274
13275 IF p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13276 l_budget_lines_in(1).attribute4 := NULL;
13277 ELSE
13278 l_budget_lines_in(1).attribute4 := p_attribute4;
13279 END IF;
13280
13281 IF p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13282 l_budget_lines_in(1).attribute5 := NULL;
13283 ELSE
13284 l_budget_lines_in(1).attribute5 := p_attribute5;
13285 END IF;
13286
13287 IF p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13288 l_budget_lines_in(1).attribute6 := NULL;
13289 ELSE
13290 l_budget_lines_in(1).attribute6 := p_attribute6;
13291 END IF;
13292
13293 IF p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13294 l_budget_lines_in(1).attribute7 := NULL;
13295 ELSE
13296 l_budget_lines_in(1).attribute7 := p_attribute7;
13297 END IF;
13298
13299 IF p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13300 l_budget_lines_in(1).attribute8 := NULL;
13301 ELSE
13302 l_budget_lines_in(1).attribute8 := p_attribute8;
13303 END IF;
13304
13305 IF p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13306 l_budget_lines_in(1).attribute9 := NULL;
13307 ELSE
13308 l_budget_lines_in(1).attribute9 := p_attribute9;
13309 END IF;
13310
13311 IF p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13312 l_budget_lines_in(1).attribute10 := NULL;
13313 ELSE
13314 l_budget_lines_in(1).attribute10 := p_attribute10;
13315 END IF;
13316
13317 IF p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13318 l_budget_lines_in(1).attribute11 := NULL;
13319 ELSE
13320 l_budget_lines_in(1).attribute11 := p_attribute11;
13321 END IF;
13322
13323 IF p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13324 l_budget_lines_in(1).attribute12 := NULL;
13325 ELSE
13326 l_budget_lines_in(1).attribute12 := p_attribute12;
13327 END IF;
13328
13329 IF p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13330 l_budget_lines_in(1).attribute13 := NULL;
13331 ELSE
13332 l_budget_lines_in(1).attribute13 := p_attribute13;
13333 END IF;
13334
13335 IF p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13336 l_budget_lines_in(1).attribute14 := NULL;
13337 ELSE
13338 l_budget_lines_in(1).attribute14 := p_attribute14;
13339 END IF;
13340
13341 IF p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13342 l_budget_lines_in(1).attribute15 := NULL;
13343 ELSE
13344 l_budget_lines_in(1).attribute15 := p_attribute15;
13345 END IF;
13346
13347 IF p_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13348 l_budget_lines_in(1).txn_currency_code := NULL;
13349 ELSE
13350 l_budget_lines_in(1).txn_currency_code := p_currency_code;
13351 END IF;
13352
13353 IF p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13354 l_budget_lines_in(1).projfunc_cost_rate_type := NULL;
13355 ELSE
13356 l_budget_lines_in(1).projfunc_cost_rate_type := p_projfunc_cost_rate_type;
13357 END IF;
13358
13359 IF p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13360 l_budget_lines_in(1).projfunc_cost_rate_date_type := NULL;
13361 ELSE
13362 l_budget_lines_in(1).projfunc_cost_rate_date_type := p_projfunc_cost_rate_date_typ;
13363 END IF;
13364
13365 IF p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13366 l_budget_lines_in(1).projfunc_cost_rate_date := NULL;
13367 ELSE
13368 l_budget_lines_in(1).projfunc_cost_rate_date := p_projfunc_cost_rate_date;
13369 END IF;
13370
13371 IF p_projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13372 l_budget_lines_in(1).projfunc_cost_exchange_rate := NULL;
13373 ELSE
13374 l_budget_lines_in(1).projfunc_cost_exchange_rate := p_projfunc_cost_exchange_rate;
13375 END IF;
13376
13377 IF p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13378 l_budget_lines_in(1).projfunc_rev_rate_type := NULL;
13379 ELSE
13380 l_budget_lines_in(1).projfunc_rev_rate_type := p_projfunc_rev_rate_type;
13381 END IF;
13382
13383 IF p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13384 l_budget_lines_in(1).projfunc_rev_rate_date_type := NULL;
13385 ELSE
13386 l_budget_lines_in(1).projfunc_rev_rate_date_type := p_projfunc_rev_rate_date_typ;
13387 END IF;
13388
13389 IF p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13390 l_budget_lines_in(1).projfunc_rev_rate_date := NULL;
13391 ELSE
13392 l_budget_lines_in(1).projfunc_rev_rate_date := p_projfunc_rev_rate_date;
13393 END IF;
13394
13395 IF p_projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13396 l_budget_lines_in(1).projfunc_rev_exchange_rate := NULL;
13397 ELSE
13398 l_budget_lines_in(1).projfunc_rev_exchange_rate := p_projfunc_rev_exchange_rate;
13399 END IF;
13400
13401 IF p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13402 l_budget_lines_in(1).project_cost_rate_type := NULL;
13403 ELSE
13404 l_budget_lines_in(1).project_cost_rate_type := p_project_cost_rate_type;
13405 END IF;
13406
13407 IF p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13408 l_budget_lines_in(1).project_cost_rate_date_type := NULL;
13409 ELSE
13410 l_budget_lines_in(1).project_cost_rate_date_type := p_project_cost_rate_date_typ;
13411 END IF;
13412
13413 IF p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13414 l_budget_lines_in(1).project_cost_rate_date := NULL;
13415 ELSE
13416 l_budget_lines_in(1).project_cost_rate_date := p_project_cost_rate_date;
13417 END IF;
13418
13419 IF p_project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13420 l_budget_lines_in(1).project_cost_exchange_rate := NULL;
13421 ELSE
13422 l_budget_lines_in(1).project_cost_exchange_rate := p_project_cost_exchange_rate;
13423 END IF;
13424
13425 IF p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13426 l_budget_lines_in(1).project_rev_rate_type := NULL;
13427 ELSE
13428 l_budget_lines_in(1).project_rev_rate_type := p_project_rev_rate_type;
13429 END IF;
13430
13431 IF p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13432 l_budget_lines_in(1).project_rev_rate_date_type := NULL;
13433 ELSE
13434 l_budget_lines_in(1).project_rev_rate_date_type := p_project_rev_rate_date_typ;
13435 END IF;
13436
13437 IF p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13438 l_budget_lines_in(1).project_rev_rate_date := NULL;
13439 ELSE
13440 l_budget_lines_in(1).project_rev_rate_date := p_project_rev_rate_date;
13441 END IF;
13442
13443 IF p_project_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13444 l_budget_lines_in(1).project_rev_exchange_rate := NULL;
13445 ELSE
13446 l_budget_lines_in(1).project_rev_exchange_rate := p_project_rev_exchange_rate;
13447 END IF;
13448
13449 IF p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13450 l_budget_lines_in(1).change_reason_code := NULL;
13451 ELSE
13452 l_budget_lines_in(1).change_reason_code := p_change_reason_code;
13453 END IF;
13454
13455 --Send the budget version id to validate_budget_lines API for
13456 --actuals on FORECAST check
13457 l_version_info_rec.x_budget_version_id := l_budget_version_id;
13458
13459 --Get entry method options and validate them against cost, rev and quantity passed
13460 IF l_budget_type_code IS NULL AND l_fin_plan_type_id IS NOT NULL
13461 THEN
13462
13463 l_amount_set_id := PA_FIN_PLAN_UTILS.get_amount_set_id(l_budget_version_id);
13464
13465 PA_FIN_PLAN_UTILS.get_plan_amount_flags(
13466 P_AMOUNT_SET_ID => l_amount_set_id
13467 ,X_RAW_COST_FLAG => lx_raw_cost_flag
13468 ,X_BURDENED_FLAG => lx_burdened_cost_flag
13469 ,X_REVENUE_FLAG => lx_revenue_flag
13470 ,X_COST_QUANTITY_FLAG => lx_cost_qty_flag
13471 ,X_REV_QUANTITY_FLAG => lx_revenue_qty_flag
13472 ,X_ALL_QUANTITY_FLAG => lx_all_qty_flag
13473 ,X_BILL_RATE_FLAG => l_bill_rate_flag
13474 ,X_COST_RATE_FLAG => l_cost_rate_flag
13475 ,X_BURDEN_RATE_FLAG => l_burden_rate_flag
13476 ,x_message_count => p_msg_count
13477 ,x_return_status => p_return_status
13478 ,x_message_data => p_msg_data) ;
13479
13480 IF p_return_status <> FND_API.G_RET_STS_SUCCESS
13481 THEN
13482 IF(l_debug_mode='Y') THEN
13483 pa_debug.g_err_stage := 'get_plan_amount_flags API falied';
13484 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13485 END IF;
13486 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13487 END IF;
13488
13489 --Derive the value of all_qty_flag based on version_type
13490 IF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
13491 l_allow_qty_flag := lx_cost_qty_flag;
13492 ELSIF l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
13493 l_allow_qty_flag := lx_revenue_qty_flag;
13494 ELSE
13495 l_allow_qty_flag := lx_all_qty_flag;
13496 END IF;
13497
13498 END IF;--IF l_budget_type_code IS NULL AND l_fin_plan_type_id IS NOT NULL
13499
13500
13501 --Validate the budget line data
13502 PA_BUDGET_PVT.Validate_Budget_Lines
13503 ( p_calling_context => 'BUDGET_LINE_LEVEL_VALIDATION'
13504 ,p_pa_project_id => l_project_id
13505 ,p_budget_type_code => l_budget_type_code
13506 ,p_fin_plan_type_id => l_fin_plan_type_id
13507 ,p_version_type => l_version_type
13508 ,p_resource_list_id => l_resource_list_id
13509 ,p_time_phased_code => l_time_phased_code
13510 ,p_budget_entry_method_code => l_budget_entry_method_code
13511 ,p_entry_level_code => l_entry_level_code
13512 ,p_allow_qty_flag => l_allow_qty_flag
13513 ,p_allow_raw_cost_flag => lx_raw_cost_flag
13514 ,p_allow_burdened_cost_flag => lx_burdened_cost_flag
13515 ,p_allow_revenue_flag => lx_revenue_flag
13516 ,p_multi_currency_flag => l_multi_curr_flag
13517 ,p_project_cost_rate_type => NULL
13518 ,p_project_cost_rate_date_typ => NULL
13519 ,p_project_cost_rate_date => NULL
13520 ,p_project_cost_exchange_rate => NULL
13521 ,p_projfunc_cost_rate_type => NULL
13522 ,p_projfunc_cost_rate_date_typ => NULL
13523 ,p_projfunc_cost_rate_date => NULL
13524 ,p_projfunc_cost_exchange_rate => NULL
13525 ,p_project_rev_rate_type => NULL
13526 ,p_project_rev_rate_date_typ => NULL
13527 ,p_project_rev_rate_date => NULL
13528 ,p_project_rev_exchange_rate => NULL
13529 ,p_projfunc_rev_rate_type => NULL
13530 ,p_projfunc_rev_rate_date_typ => NULL
13531 ,p_projfunc_rev_rate_date => NULL
13532 ,p_projfunc_rev_exchange_rate => NULL
13533 ,p_version_info_rec => l_version_info_rec
13534 ,px_budget_lines_in => l_budget_lines_in
13535 ,x_budget_lines_out => l_budget_lines_out_tbl
13536 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
13537 ,x_etc_method_code_tbl => l_etc_method_code_tbl
13538 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
13539 ,x_msg_count => p_msg_count
13540 ,x_msg_data => p_msg_data
13541 ,x_return_status => p_return_status );
13542
13543 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13544 IF(l_debug_mode='Y') THEN
13545 pa_debug.g_err_stage := 'validate budget lines API falied';
13546 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13547 END IF;
13548 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13549 END IF;
13550
13551 --Get Task number for AMG Messages
13552 l_amg_task_number := PA_INTERFACE_UTILS_PUB.get_task_number_amg
13553 (p_task_number=> ''
13554 ,p_task_reference => l_budget_lines_in(1).pm_task_reference
13555 ,p_task_id => l_budget_lines_in(1).pa_task_id);
13556
13557
13558 --Check the existence of resource assignment
13559 OPEN l_resource_assignment_csr( l_budget_version_id
13560 ,l_budget_lines_in(1).pa_task_id
13561 ,l_budget_lines_in(1).resource_list_member_id );
13562
13563 FETCH l_resource_assignment_csr INTO l_resource_assignment_id;
13564
13565 IF l_resource_assignment_csr%NOTFOUND
13566 THEN
13567 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13568 THEN
13569 pa_interface_utils_pub.map_new_amg_msg
13570 ( p_old_message_code => 'PA_NO_RESOURCE_ASSIGNMENT'
13571 ,p_msg_attribute => 'CHANGE'
13572 ,p_resize_flag => 'N'
13573 ,p_msg_context => 'BUDG'
13574 ,p_attribute1 => l_amg_project_number
13575 ,p_attribute2 => l_amg_task_number
13576 ,p_attribute3 => l_budget_type_code
13577 ,p_attribute4 => l_budget_lines_in(1).resource_alias
13578 ,p_attribute5 => to_char(l_budget_lines_in(1).budget_start_date));
13579 END IF;
13580
13581 CLOSE l_resource_assignment_csr;
13582 RAISE FND_API.G_EXC_ERROR;
13583 END IF; --l_resource_assignment_csr%NOTFOUND
13584
13585 CLOSE l_resource_assignment_csr;
13586
13587 --Currency_code value, even if specified, should be ignored in
13588 --case of old Budgets Model
13589 IF l_budget_type_code IS NOT NULL
13590 THEN
13591 l_budget_lines_in(1).txn_currency_code := NULL;
13592 END IF;
13593
13594 --Checking existence of budget line
13595 OPEN l_budget_line_csr( l_resource_assignment_id
13596 ,l_budget_lines_in(1).budget_start_date
13597 ,l_budget_lines_in(1).txn_currency_code);
13598
13599 FETCH l_budget_line_csr INTO l_budget_line_rowid
13600 ,l_budget_line_id;
13601
13602 IF l_budget_line_csr%NOTFOUND
13603 THEN
13604 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13605 THEN
13606 pa_interface_utils_pub.map_new_amg_msg
13607 ( p_old_message_code => 'PA_BUDGET_LINE_NOT_FOUND'
13608 ,p_msg_attribute => 'CHANGE'
13609 ,p_resize_flag => 'N'
13610 ,p_msg_context => 'BUDG'
13611 ,p_attribute1 => l_amg_project_number
13612 ,p_attribute2 => l_amg_task_number
13613 ,p_attribute3 => l_budget_type_code
13614 ,p_attribute4 => l_budget_lines_in(1).resource_alias
13615 ,p_attribute5 => to_char(l_budget_lines_in(1).budget_start_date));
13616 END IF;
13617
13618 CLOSE l_budget_line_csr;
13619 RAISE FND_API.G_EXC_ERROR;
13620 END IF;--l_budget_line_csr%NOTFOUND
13621
13622 CLOSE l_budget_line_csr;
13623
13624
13625 --Update budget line for old FORMS based Budgets Model
13626 IF l_budget_type_code IS NOT NULL
13627 THEN
13628
13629 --Take a db lock on the table pa_budget_lines
13630 OPEN l_lock_budget_line_csr( l_budget_line_rowid );
13631 CLOSE l_lock_budget_line_csr; --FYI, does not release lock
13632
13633 --Calling update_budget_line_sql to build a dynamic update statement
13634 pa_budget_pvt.update_budget_line_sql
13635 ( p_return_status => p_return_status
13636 ,p_budget_entry_method_code => l_budget_entry_method_code
13637 ,p_resource_assignment_id => l_resource_assignment_id
13638 ,p_start_date => l_budget_lines_in(1).budget_start_date
13639 ,p_time_phased_type_code => l_time_phased_code
13640 ,p_description => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_description)
13641 ,p_quantity => PA_TASK_ASSIGNMENTS_PVT.pfnum(p_quantity)
13642 ,p_raw_cost => PA_TASK_ASSIGNMENTS_PVT.pfnum(p_raw_cost)
13643 ,p_burdened_cost => PA_TASK_ASSIGNMENTS_PVT.pfnum(p_burdened_cost)
13644 ,p_revenue => PA_TASK_ASSIGNMENTS_PVT.pfnum(p_revenue)
13645 ,p_change_reason_code => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_change_reason_code)
13646 ,p_attribute_category => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute_category)
13647 ,p_attribute1 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute1)
13648 ,p_attribute2 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute2)
13649 ,p_attribute3 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute3)
13650 ,p_attribute4 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute4)
13651 ,p_attribute5 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute5)
13652 ,p_attribute6 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute6)
13653 ,p_attribute7 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute7)
13654 ,p_attribute8 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute8)
13655 ,p_attribute9 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute9)
13656 ,p_attribute10 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute10)
13657 ,p_attribute11 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute11)
13658 ,p_attribute12 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute12)
13659 ,p_attribute13 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute13)
13660 ,p_attribute14 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute14)
13661 ,p_attribute15 => PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute15)
13662 );
13663
13664 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
13665 THEN
13666 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13667 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
13668 THEN
13669 RAISE FND_API.G_EXC_ERROR;
13670 END IF;
13671
13672 --summarizing the totals in the table pa_budget_versions
13673 PA_BUDGET_UTILS.summerize_project_totals
13674 (x_budget_version_id => l_budget_version_id
13675 ,x_err_code => l_err_code
13676 ,x_err_stage => l_err_stage
13677 ,x_err_stack => l_err_stack );
13678
13679 IF l_err_code > 0
13680 THEN
13681 IF(l_debug_mode='Y') THEN
13682 pa_debug.g_err_stage := 'summerize_project_totals API falied';
13683 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13684 END IF;
13685
13686 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13687 THEN
13688 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
13689 THEN
13690 pa_interface_utils_pub.map_new_amg_msg
13691 ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
13692 ,p_msg_attribute => 'CHANGE'
13693 ,p_resize_flag => 'N'
13694 ,p_msg_context => 'BUDG'
13695 ,p_attribute1 => l_amg_project_number
13696 ,p_attribute2 => l_amg_task_number
13697 ,p_attribute3 => l_budget_type_code
13698 ,p_attribute4 => l_budget_lines_in(1).resource_alias
13699 ,p_attribute5 => to_char(l_budget_lines_in(1).budget_start_date));
13700 ELSE
13701 pa_interface_utils_pub.map_new_amg_msg
13702 ( p_old_message_code => l_err_stage
13703 ,p_msg_attribute => 'CHANGE'
13704 ,p_resize_flag => 'N'
13705 ,p_msg_context => 'BUDG'
13706 ,p_attribute1 => l_amg_project_number
13707 ,p_attribute2 => l_amg_task_number
13708 ,p_attribute3 => l_budget_type_code
13709 ,p_attribute4 => l_budget_lines_in(1).resource_alias
13710 ,p_attribute5 => to_char(l_budget_lines_in(1).budget_start_date));
13711 END IF;
13712 END IF;--FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13713
13714 RAISE FND_API.G_EXC_ERROR;
13715
13716 ELSIF l_err_code < 0
13717 THEN
13718
13719 IF(l_debug_mode='Y') THEN
13720 pa_debug.g_err_stage := 'summerize_project_totals API falied';
13721 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13722 END IF;
13723
13724 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
13725 THEN
13726 FND_MSG_PUB.add_exc_msg
13727 ( p_pkg_name => 'PA_BUDGET_UTILS'
13728 , p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
13729 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
13730 END IF;
13731
13732 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13733
13734 END IF;--l_err_code > 0
13735
13736
13737 ELSE --insert budget line for new FinPlan model
13738
13739
13740 --Copy the fin plan line data into a table of type pa_fp_rollup_tmp
13741 --If an attribute should not be updated then pass it as null, and
13742 --if an attribute should be updated to null then pass it as FND_API.G_MISS_XXX
13743
13744 l_finplan_lines_tab(1).system_reference1 := l_budget_lines_in(1).pa_task_id;
13745 l_finplan_lines_tab(1).system_reference2 := l_budget_lines_in(1).resource_list_member_id;
13746 l_finplan_lines_tab(1).start_date := l_budget_lines_in(1).budget_start_date;
13747 l_finplan_lines_tab(1).end_date := l_budget_lines_in(1).budget_end_date;
13748 l_finplan_lines_tab(1).period_name := l_budget_lines_in(1).period_name;
13749 l_finplan_lines_tab(1).txn_currency_code := l_budget_lines_in(1).txn_currency_code;
13750 l_finplan_lines_tab(1).txn_raw_cost := PA_TASK_ASSIGNMENTS_PVT.pfnum(p_raw_cost);
13751 l_finplan_lines_tab(1).txn_burdened_cost := PA_TASK_ASSIGNMENTS_PVT.pfnum(p_burdened_cost);
13752 l_finplan_lines_tab(1).txn_revenue := PA_TASK_ASSIGNMENTS_PVT.pfnum(p_revenue);
13753 l_finplan_lines_tab(1).quantity := PA_TASK_ASSIGNMENTS_PVT.pfnum(p_quantity);
13754 l_finplan_lines_tab(1).change_reason_code := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_change_reason_code);
13755 l_finplan_lines_tab(1).description := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_description);
13756 l_finplan_lines_tab(1).attribute_category := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute_category);
13757 l_finplan_lines_tab(1).attribute1 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute1);
13758 l_finplan_lines_tab(1).attribute2 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute2);
13759 l_finplan_lines_tab(1).attribute3 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute3);
13760 l_finplan_lines_tab(1).attribute4 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute4);
13761 l_finplan_lines_tab(1).attribute5 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute5);
13762 l_finplan_lines_tab(1).attribute6 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute6);
13763 l_finplan_lines_tab(1).attribute7 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute7);
13764 l_finplan_lines_tab(1).attribute8 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute8);
13765 l_finplan_lines_tab(1).attribute9 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute9);
13766 l_finplan_lines_tab(1).attribute10 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute10);
13767 l_finplan_lines_tab(1).attribute11 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute11);
13768 l_finplan_lines_tab(1).attribute12 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute12);
13769 l_finplan_lines_tab(1).attribute13 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute13);
13770 l_finplan_lines_tab(1).attribute14 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute14);
13771 l_finplan_lines_tab(1).attribute15 := PA_TASK_ASSIGNMENTS_PVT.pfchar(p_attribute15);
13772
13773 IF (p_projfunc_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13774 AND p_projfunc_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13775 AND p_projfunc_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13776 AND p_projfunc_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13777 AND p_projfunc_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13778 AND p_projfunc_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13779 AND p_projfunc_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13780 AND p_projfunc_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13781 AND p_project_cost_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13782 AND p_project_cost_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13783 AND p_project_cost_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13784 AND p_project_cost_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13785 AND p_project_rev_rate_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13786 AND p_project_rev_rate_date_typ = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13787 AND p_project_rev_rate_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13788 AND p_project_rev_exchange_rate = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
13789 THEN
13790 l_finplan_lines_tab(1).projfunc_cost_rate_type := to_char(NULL);
13791 l_finplan_lines_tab(1).projfunc_cost_rate_date_type := to_char(NULL);
13792 l_finplan_lines_tab(1).projfunc_cost_rate_date := to_date(NULL);
13793 l_finplan_lines_tab(1).projfunc_cost_exchange_rate := to_number(NULL);
13794 l_finplan_lines_tab(1).projfunc_rev_rate_type := to_char(NULL);
13795 l_finplan_lines_tab(1).projfunc_rev_rate_date_type := to_char(NULL);
13796 l_finplan_lines_tab(1).projfunc_rev_rate_date := to_date(NULL);
13797 l_finplan_lines_tab(1).projfunc_rev_exchange_rate := to_number(NULL);
13798 l_finplan_lines_tab(1).project_cost_rate_type := to_char(NULL);
13799 l_finplan_lines_tab(1).project_cost_rate_date_type := to_char(NULL);
13800 l_finplan_lines_tab(1).project_cost_rate_date := to_date(NULL);
13801 l_finplan_lines_tab(1).project_cost_exchange_rate := to_number(NULL);
13802 l_finplan_lines_tab(1).project_rev_rate_type := to_char(NULL);
13803 l_finplan_lines_tab(1).project_rev_rate_date_type := to_char(NULL);
13804 l_finplan_lines_tab(1).project_rev_rate_date := to_date(NULL);
13805 l_finplan_lines_tab(1).project_rev_exchange_rate := to_number(NULL);
13806 ELSE
13807 l_finplan_lines_tab(1).projfunc_cost_rate_type := nvl(l_budget_lines_in(1).projfunc_cost_rate_type,FND_API.G_MISS_CHAR);
13808 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);
13809 l_finplan_lines_tab(1).projfunc_cost_rate_date := nvl(l_budget_lines_in(1).projfunc_cost_rate_date,FND_API.G_MISS_DATE);
13810 l_finplan_lines_tab(1).projfunc_cost_exchange_rate := nvl(l_budget_lines_in(1).projfunc_cost_exchange_rate,FND_API.G_MISS_NUM);
13811 l_finplan_lines_tab(1).projfunc_rev_rate_type := nvl(l_budget_lines_in(1).projfunc_rev_rate_type,FND_API.G_MISS_CHAR);
13812 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);
13813 l_finplan_lines_tab(1).projfunc_rev_rate_date := nvl(l_budget_lines_in(1).projfunc_rev_rate_date,FND_API.G_MISS_DATE);
13814 l_finplan_lines_tab(1).projfunc_rev_exchange_rate := nvl(l_budget_lines_in(1).projfunc_rev_exchange_rate,FND_API.G_MISS_NUM);
13815 l_finplan_lines_tab(1).project_cost_rate_type := nvl(l_budget_lines_in(1).project_cost_rate_type,FND_API.G_MISS_CHAR);
13816 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);
13817 l_finplan_lines_tab(1).project_cost_rate_date := nvl(l_budget_lines_in(1).project_cost_rate_date,FND_API.G_MISS_DATE);
13818 l_finplan_lines_tab(1).project_cost_exchange_rate := nvl(l_budget_lines_in(1).project_cost_exchange_rate,FND_API.G_MISS_NUM);
13819 l_finplan_lines_tab(1).project_rev_rate_type := nvl(l_budget_lines_in(1).project_rev_rate_type,FND_API.G_MISS_CHAR);
13820 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);
13821 l_finplan_lines_tab(1).project_rev_rate_date := nvl(l_budget_lines_in(1).project_rev_rate_date,FND_API.G_MISS_DATE);
13822 l_finplan_lines_tab(1).project_rev_exchange_rate := nvl(l_budget_lines_in(1).project_rev_exchange_rate,FND_API.G_MISS_NUM);
13823 END IF;
13824
13825 l_finplan_lines_tab(1).pm_product_code := l_budget_lines_in(1).pm_product_code;
13826 l_finplan_lines_tab(1).quantity_source := 'I';
13827 l_finplan_lines_tab(1).raw_cost_source := 'I';
13828 l_finplan_lines_tab(1).burdened_cost_source := 'I';
13829 l_finplan_lines_tab(1).revenue_source := 'I';
13830 l_finplan_lines_tab(1).resource_assignment_id := l_resource_assignment_id;
13831 l_finplan_lines_tab(1).budget_line_id := l_budget_line_id;
13832 l_finplan_lines_tab(1).budget_version_id := l_budget_version_id;
13833
13834 --Lock the budget version before updating a budget line
13835 l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
13836 (p_budget_version_id => l_budget_version_id);
13837
13838 PA_FIN_PLAN_PVT.lock_unlock_version
13839 ( p_budget_version_id => l_budget_version_id
13840 ,p_record_version_number => l_record_version_number
13841 ,p_action => 'L'
13842 ,p_user_id => FND_GLOBAL.User_id
13843 ,p_person_id => null
13844 ,x_return_status => p_return_status
13845 ,x_msg_count => p_msg_count
13846 ,x_msg_data => p_msg_data);
13847
13848 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13849 -- Error message is not added here as the api lock_unlock_version
13850 -- adds the message to stack
13851 IF(l_debug_mode='Y') THEN
13852 pa_debug.g_err_stage := 'Failed in locking the version ' || l_budget_version_id;
13853 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
13854 END IF;
13855 RAISE FND_API.G_EXC_ERROR;
13856 END IF;
13857
13858 --Call PA_FIN_PLAN_PVT.add_fin_plan_lines. This api takes care of updating
13859 --budget lines data in all relevant tables.
13860 PA_FIN_PLAN_PVT.add_fin_plan_lines
13861 ( p_calling_context => PA_FP_CONSTANTS_PKG.G_AMG_API
13862 ,p_fin_plan_version_id => l_budget_version_id
13863 ,p_finplan_lines_tab => l_finplan_lines_tab
13864 ,x_return_status => p_return_status
13865 ,x_msg_count => p_msg_count
13866 ,x_msg_data => p_msg_data );
13867
13868 IF p_return_status <> FND_API.G_RET_STS_SUCCESS
13869 THEN
13870 IF(l_debug_mode='Y') THEN
13871 pa_debug.g_err_stage := 'PA_FIN_PLAN_PVT.add_fin_plan_lines API falied';
13872 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
13873 END IF;
13874 RAISE FND_API.G_EXC_ERROR;
13875 END IF;
13876
13877
13878 --unlock the budget version after updating the budget line
13879 l_record_version_number := PA_FIN_PLAN_UTILS.retrieve_record_version_number
13880 (p_budget_version_id => l_budget_version_id);
13881
13882 PA_FIN_PLAN_PVT.lock_unlock_version
13883 ( p_budget_version_id => l_budget_version_id
13884 ,p_record_version_number => l_record_version_number
13885 ,p_action => 'U'
13886 ,p_user_id => FND_GLOBAL.User_id
13887 ,p_person_id => null
13888 ,x_return_status => p_return_status
13889 ,x_msg_count => p_msg_count
13890 ,x_msg_data => p_msg_data);
13891
13892 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13893 -- Error message is not added here as the api lock_unlock_version
13894 -- adds the message to stack
13895 IF(l_debug_mode='Y') THEN
13896 pa_debug.g_err_stage := 'Failed in unlocking the version ' || l_budget_version_id;
13897 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
13898 END IF;
13899 RAISE FND_API.G_EXC_ERROR;
13900 END IF;
13901
13902
13903 END IF;--end of code to update budget line
13904
13905
13906 IF FND_API.TO_BOOLEAN( p_commit )
13907 THEN
13908 COMMIT;
13909 END IF;
13910
13911 IF(l_debug_mode='Y') THEN
13912 pa_debug.g_err_stage := 'Exiting ' || l_api_name;
13913 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
13914 END IF;
13915
13916 IF ( l_debug_mode = 'Y' ) THEN
13917 pa_debug.reset_curr_function;
13918 END IF;
13919
13920
13921 EXCEPTION
13922
13923 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc
13924 THEN
13925
13926 ROLLBACK TO update_budget_line_pub;
13927
13928 p_return_status := FND_API.G_RET_STS_ERROR;
13929 l_msg_count := FND_MSG_PUB.count_msg;
13930
13931 IF l_msg_count = 1 and p_msg_data IS NULL THEN
13932 PA_INTERFACE_UTILS_PUB.get_messages
13933 (p_encoded => FND_API.G_TRUE
13934 ,p_msg_index => 1
13935 ,p_msg_count => l_msg_count
13936 ,p_msg_data => l_msg_data
13937 ,p_data => l_data
13938 ,p_msg_index_out => l_msg_index_out);
13939 p_msg_data := l_data;
13940 p_msg_count := l_msg_count;
13941 ELSE
13942 p_msg_count := l_msg_count;
13943 END IF;
13944
13945 IF ( l_debug_mode = 'Y' ) THEN
13946 pa_debug.reset_curr_function;
13947 END IF;
13948
13949 RETURN;
13950
13951
13952 WHEN FND_API.G_EXC_ERROR
13953 THEN
13954
13955 ROLLBACK TO update_budget_line_pub;
13956
13957 p_return_status := FND_API.G_RET_STS_ERROR;
13958
13959 FND_MSG_PUB.count_and_get
13960 ( p_count => p_msg_count ,
13961 p_data => p_msg_data );
13962
13963 IF ( l_debug_mode = 'Y' ) THEN
13964 pa_debug.reset_curr_function;
13965 END IF;
13966
13967
13968 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
13969 THEN
13970
13971 ROLLBACK TO update_budget_line_pub;
13972
13973 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13974
13975 FND_MSG_PUB.count_and_get
13976 ( p_count => p_msg_count ,
13977 p_data => p_msg_data );
13978
13979 IF ( l_debug_mode = 'Y' ) THEN
13980 pa_debug.reset_curr_function;
13981 END IF;
13982
13983
13984 WHEN ROW_ALREADY_LOCKED
13985 THEN
13986
13987 ROLLBACK TO update_budget_line_pub;
13988
13989 p_return_status := FND_API.G_RET_STS_ERROR;
13990
13991 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13992 THEN
13993 FND_MESSAGE.set_name('PA','PA_ROW_ALREADY_LOCKED_B_AMG');
13994 FND_MESSAGE.set_token('PROJECT', l_amg_project_number);
13995 FND_MESSAGE.set_token('TASK', l_amg_task_number);
13996 FND_MESSAGE.set_token('BUDGET_TYPE', l_budget_type_code);
13997 FND_MESSAGE.set_token('SOURCE_NAME', '');
13998 FND_MESSAGE.set_token('START_DATE', '');
13999 FND_MESSAGE.set_token('ENTITY', 'G_BUDGET_LINE_CODE');
14000 FND_MSG_PUB.add;
14001 END IF;
14002
14003 FND_MSG_PUB.count_and_get
14004 ( p_count => p_msg_count ,
14005 p_data => p_msg_data );
14006
14007 IF ( l_debug_mode = 'Y' ) THEN
14008 pa_debug.reset_curr_function;
14009 END IF;
14010
14011
14012 WHEN OTHERS
14013 THEN
14014
14015 ROLLBACK TO update_budget_line_pub;
14016
14017 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14018
14019 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
14020 THEN
14021 FND_MSG_PUB.add_exc_msg
14022 ( p_pkg_name => G_PKG_NAME
14023 , p_procedure_name => l_api_name );
14024 END IF;
14025
14026 FND_MSG_PUB.count_and_get
14027 ( p_count => p_msg_count ,
14028 p_data => p_msg_data );
14029
14030 IF ( l_debug_mode = 'Y' ) THEN
14031 pa_debug.reset_curr_function;
14032 END IF;
14033
14034 END update_budget_line;
14035
14036
14037 ----------------------------------------------------------------------------------------
14038 --Name: calculate_amounts
14039 --Type: Procedure
14040 --Description: This procedure can is used to recalculate raw cost,
14041 -- burdened cost and revenue by budget line within
14042 -- a given project.
14043 --
14044 --
14045 --Called subprograms: Pa_Client_Extn_Budget.Calc_Raw_Cost
14046 -- , Pa_Client_Extn_Budget.Calc_Burdened_Cost
14047 -- , Pa_Client_Extn_Budget.Calc_Revenue
14048 --
14049 --
14050 --
14051 --History:
14052 -- AUTUMN-1996 R. Krishnamurthy Created
14053 -- 07-DEC-1996 L. de Werker Changed error handling
14054 -- 25-MAR-2003 Rajagopal Modified the code to make it compatible with
14055 -- new Budgets and forecasts model
14056 --
14057 -- 27-SEP-05 jwhite Bug 4588279
14058 -- For budget_type_code Budgetary Control budgets,
14059 -- add validation to prevent update to
14060 -- periods later than the latest encumbrance year
14061 -- for the set-of-books.
14062 --
14063 PROCEDURE Calculate_Amounts
14064 ( p_api_version_number IN NUMBER
14065 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
14066 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
14067 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
14068 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14069 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14070 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14071 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14072 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14073 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14074 ,p_calc_raw_cost_yn IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14075 ,p_calc_burdened_cost_yn IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14076 ,p_calc_revenue_yn IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14077 ,p_update_db_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14078 ,p_calc_budget_lines_out OUT NOCOPY calc_budget_line_out_tbl_type
14079 -- Bug 2863564 Parameters added for new Fin Plan Model
14080 ,p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE
14081 ,p_fin_plan_type_id IN pa_fin_plan_types_b.fin_plan_type_id%TYPE
14082 ,p_fin_plan_type_name IN pa_fin_plan_types_tl.name%TYPE
14083 ,p_version_type IN pa_budget_versions.version_type%TYPE
14084 ,p_budget_version_number IN pa_budget_versions.version_number%TYPE
14085 ) IS
14086
14087 CURSOR l_budget_type_csr
14088 (p_budget_type_code VARCHAR2 )
14089 IS
14090 SELECT 'X'
14091 FROM pa_budget_types
14092 WHERE budget_type_code = p_budget_type_code;
14093
14094 CURSOR l_task_csr (p_task_id IN NUMBER ) IS
14095 SELECT pm_task_reference,
14096 task_name -- Bug 2863564
14097 FROM pa_tasks
14098 WHERE task_id = p_task_id;
14099
14100 -- Bug 2863564 new variables defined for Financial Planning chnages
14101
14102 l_task_name pa_tasks.task_name%TYPE;
14103 l_context VARCHAR2(30);
14104 l_context_finplan CONSTANT VARCHAR2(30) := PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN;
14105 l_context_budget CONSTANT VARCHAR2(30) := PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET;
14106
14107 -- Bug 2863564 The cursor has been modified for financial planning changes.
14108 -- The changes include fetching of new columns which aren't included in the
14109 -- view definition. Changing the pa_budget_lines_v view could have a large impact.
14110 -- So, cursor has been modified to be based on the direct tables.
14111
14112 --<Patchset M: B and F impact changes : AMG:>-- Bug # 3507156
14113 -- Modified the select statement to selecy alias name directly from pa_resource_list_members table
14114 -- instead of PA_RESOURCES_PKG.GET_RESOURCE_NAME(rlm.resource_id,rlm.resource_type_id)
14115
14116
14117
14118 CURSOR l_resource_assignment_csr
14119 ( c_budget_version_id NUMBER,
14120 c_context VARCHAR2)
14121 IS
14122 SELECT bl.rowid row_id
14123 ,bl.budget_line_id budget_line_id
14124 ,DECODE(c_context,l_context_finplan,bl.txn_currency_code,bl.projfunc_currency_code) txn_currency_code
14125 ,ra.resource_assignment_id resource_assignment_id
14126 ,ra.task_id task_id
14127 ,ra.rate_based_flag rate_based_flag
14128 ,rlm.resource_list_id resource_list_id
14129 ,rlm.resource_list_member_id resource_list_member_id
14130 ,rlm.resource_id resource_id
14131 ,rlm.alias
14132 ,bl.start_date start_date
14133 ,bl.end_date end_date
14134 ,bl.period_name period_name
14135 ,bl.quantity quantity
14136 ,bl.display_quantity display_quantity --IPM Arch Enhancement Bug 4865563
14137 ,DECODE(c_context,l_context_finplan,bl.txn_raw_cost,bl.raw_cost) txn_raw_cost
14138 ,DECODE(c_context,l_context_finplan,bl.txn_burdened_cost,bl.burdened_cost) txn_burdened_cost
14139 ,DECODE(c_context,l_context_finplan,bl.txn_revenue,bl.revenue) txn_revenue
14140 ,bl.project_raw_cost project_raw_cost
14141 ,bl.project_burdened_cost project_burdened_cost
14142 ,bl.project_revenue project_revenue
14143 ,bl.raw_cost projfunc_raw_cost
14144 ,bl.burdened_cost projfunc_burdened_cost
14145 ,bl.revenue projfunc_revenue
14146 FROM pa_budget_lines bl,
14147 pa_resource_assignments ra,
14148 pa_resource_list_members rlm
14149 WHERE bl.budget_version_id = c_budget_version_id
14150 AND bl.resource_assignment_id = ra.resource_assignment_id
14151 AND ra.resource_list_member_id = rlm.resource_list_member_id;
14152
14153 l_resource_assignment_rec l_resource_assignment_csr%ROWTYPE;
14154
14155 -- PL/SQL tables that would be used for bulk processing
14156
14157 l_rowid_tbl row_id_tbl_type;
14158 l_budget_line_id_tbl budget_line_id_tbl_type;
14159 l_txn_currency_code_tbl txn_currency_code_tbl_type;
14160 l_res_assignment_id_tbl res_assignment_id_tbl_type;
14161 l_task_id_tbl task_id_tbl_type;
14162 l_resource_list_id_tbl resource_list_id_tbl_type;
14163 l_resource_list_member_id_tbl res_list_member_id_tbl_type;
14164 l_resource_id_tbl resource_id_tbl_type;
14165 l_resource_name_tbl resource_name_tbl_type;
14166 l_start_date_tbl date_tbl_type;
14167 l_end_date_tbl date_tbl_type;
14168 l_period_name_tbl period_name_tbl_type;
14169 l_quantity_tbl quantity_tbl_type;
14170 l_display_quantity_tbl display_quantity_tbl_type; --IPM Arch Enhancement Bug 4865563
14171 l_txn_raw_cost_tbl raw_cost_tbl_type;
14172 l_txn_burdened_cost_tbl burdened_cost_tbl_type;
14173 l_txn_revenue_tbl revenue_tbl_type;
14174 l_project_raw_cost_tbl raw_cost_tbl_type;
14175 l_project_burdened_cost_tbl burdened_cost_tbl_type;
14176 l_project_revenue_tbl revenue_tbl_type;
14177 l_projfunc_raw_cost_tbl raw_cost_tbl_type;
14178 l_projfunc_burdened_cost_tbl burdened_cost_tbl_type;
14179 l_projfunc_revenue_tbl revenue_tbl_type;
14180 l_rate_based_flag_tbl rate_based_flag_tbl_type;
14181
14182 /* added for 2207723 */
14183 CURSOR l_get_entry_level_csr (c_budget_version_id IN NUMBER)
14184 IS
14185 SELECT m.entry_level_code
14186 FROM pa_budget_versions v
14187 ,pa_budget_entry_methods m
14188 WHERE v.budget_version_id = c_budget_version_id
14189 AND v.budget_entry_method_code = m.budget_entry_method_code
14190 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
14191
14192
14193 l_api_name CONSTANT VARCHAR2(30) := 'Calculate_Amounts';
14194
14195 -- Bug 2863564 l_return_status VARCHAR2(1);
14196 l_project_id NUMBER;
14197 l_dummy VARCHAR2(30);
14198 l_calculated_raw_cost NUMBER := 0;
14199 l_calculated_burdened_cost NUMBER := 0;
14200 l_calculated_revenue NUMBER := 0;
14201 l_err_code NUMBER := 0;
14202 l_err_message VARCHAR2(100);
14203 l_err_stage VARCHAR2(100);
14204 l_err_stack VARCHAR2(100);
14205 l_budget_version_id NUMBER;
14206 l_line_ctr NUMBER := 0;
14207 l_labor_flag VARCHAR2(1);
14208 l_allow_override_flag VARCHAR2(1);
14209 l_pm_task_reference VARCHAR2(30);
14210 l_msg_count NUMBER := 0;
14211 l_msg_data VARCHAR2(2000);
14212 l_function_allowed VARCHAR2(1);
14213 l_resp_id NUMBER := 0;
14214 l_user_id NUMBER := 0;
14215 l_module_name VARCHAR2(80);
14216 l_entry_level pa_budget_entry_methods.entry_level_code%type; /* 2207723 */
14217
14218 p_multiple_task_msg VARCHAR2(1) := 'T';
14219
14220 l_budget_line_id pa_budget_lines.budget_line_id%TYPE; /* FPB2 */
14221
14222 --Included the following variables as part of changes to AMG due to finplan model.
14223 l_txn_currency_code pa_budget_lines.txn_currency_code%TYPE;
14224 l_multi_currency_billing_flag pa_projects_all.multi_currency_billing_flag%TYPE;
14225 l_project_currency_code pa_projects_all.project_currency_code%TYPE;
14226 l_projfunc_currency_code pa_projects_all.projfunc_currency_code%TYPE;
14227 l_project_cost_rate_type pa_projects_all.project_rate_type%TYPE;
14228 l_projfunc_cost_rate_type pa_projects_all.projfunc_cost_rate_type%TYPE;
14229 l_project_bil_rate_type pa_projects_all.project_bil_rate_type%TYPE;
14230 l_projfunc_bil_rate_type pa_projects_all.projfunc_bil_rate_type%TYPE;
14231
14232 l_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE;
14233 l_fin_plan_type_code pa_fin_plan_types_b.fin_plan_type_code%TYPE;
14234 l_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE;
14235
14236 l_version_type pa_budget_versions.version_type%TYPE;
14237 l_record_version_number pa_budget_versions.record_version_number%TYPE;
14238 l_budget_type_code pa_budget_versions.budget_type_code%TYPE;
14239 l_ci_id pa_budget_versions.ci_id%TYPE;
14240
14241 l_debug_mode VARCHAR2(30):= NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
14242 l_debug_level3 CONSTANT NUMBER := 3;
14243 l_debug_level5 CONSTANT NUMBER := 5;
14244
14245 l_plsql_max_array_size NUMBER := 200;
14246 l_security_ret_code VARCHAR2(30);
14247 l_result VARCHAR2(30);
14248
14249
14250 ll_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE;
14251 ll_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE;
14252 ll_version_type pa_budget_versions.version_type%TYPE;
14253 ll_version_number pa_budget_versions.version_number%TYPE;
14254 --needed to get the field values associated to a AMG message
14255
14256 --Added baseline_funding flag and querying from pa_projects_all and not from pa_projects
14257 CURSOR l_amg_project_csr
14258 (p_pa_project_id pa_projects.project_id%type)
14259 IS
14260 SELECT segment1
14261 ,baseline_funding_flag
14262 FROM pa_projects_all p
14263 WHERE p.project_id = p_pa_project_id;
14264
14265 l_amg_project_rec l_amg_project_csr%ROWTYPE;
14266 --l_amg_segment1 VARCHAR2(25); no more used. Replaced by l_amg_project_rec.segment1
14267
14268 -- Bug 2863564 added for new financial planning changes
14269
14270 CURSOR proj_fp_options_cur
14271 (c_project_id IN NUMBER, c_fin_plan_type_id IN NUMBER) IS
14272 SELECT 'x'
14273 FROM pa_proj_fp_options pfo
14274 WHERE pfo.project_id = c_project_id
14275 AND pfo.fin_plan_type_id = c_fin_plan_type_id
14276 AND pfo.fin_plan_option_level_code = PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE;
14277
14278 proj_fp_options_rec proj_fp_options_cur%ROWTYPE;
14279
14280 CURSOR budget_version_info_cur (c_budget_version_id IN NUMBER) IS
14281 SELECT bv.project_id project_id
14282 ,bv.budget_type_code budget_type_code
14283 ,bv.fin_plan_type_id fin_plan_type_id
14284 ,bv.version_type version_type
14285 ,bv.budget_status_code budget_status_code
14286 ,bv.ci_id ci_id -- raja
14287 ,pt.fin_plan_type_code fin_plan_type_code
14288 ,pt.name fin_plan_type_name
14289 ,pa_fin_plan_utils.get_fin_plan_level_code(bv.budget_version_id) plan_level_code
14290 ,bv.locked_by_person_id
14291 ,bv.request_id
14292 ,pt.plan_class_code
14293 ,bv.etc_start_date
14294 ,nvl(bv.wp_version_flag,'N') wp_version_flag
14295 ,bv.plan_processing_code
14296 FROM pa_budget_versions bv,
14297 pa_fin_plan_types_vl pt
14298 WHERE bv.budget_version_id = c_budget_version_id
14299 AND pt.fin_plan_type_id(+) = bv.fin_plan_type_id
14300 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
14301
14302
14303 budget_version_info_rec budget_version_info_cur%ROWTYPE;
14304
14305 CURSOR draft_version_cur(
14306 c_project_id pa_budget_versions.project_id%TYPE
14307 ,c_budget_type_code pa_budget_versions.budget_type_code%TYPE)
14308 IS
14309 SELECT budget_version_id
14310 FROM pa_budget_versions
14311 WHERE project_id = c_project_id
14312 AND budget_type_code = c_budget_type_code
14313 AND budget_status_code = 'W'
14314 AND ci_id IS NULL; -- <Patchset M:B and F impact changes : AMG:> -- Added an extra clause ci_id IS NULL--Bug # 3507156
14315
14316
14317 draft_version_rec draft_version_cur%ROWTYPE;
14318
14319 --Added for bug#3636409
14320 l_workplan_flag VARCHAR2(1) := NULL;
14321 l_editable_flag VARCHAR2(1);
14322 l_autobaseline_flag VARCHAR2(1) := NULL;
14323
14324 l_person_id fnd_user.employee_id%type;
14325 l_resource_id pa_resource_txn_attributes.resource_id%type;
14326 l_resource_name per_all_people_f.full_name%type;
14327 l_locked_by_name per_people_x.full_name%type;
14328
14329 l_rw_cost_rate_override pa_budget_lines.txn_cost_rate_override%TYPE;
14330 l_burden_cost_rate_override pa_budget_lines.burden_cost_rate_override%TYPE;
14331 l_bill_rate_override pa_budget_lines.txn_bill_rate_override%TYPE;
14332
14333 TYPE l_rw_cost_rate_override_tbl_t IS TABLE OF pa_budget_lines.txn_cost_rate_override%TYPE
14334 INDEX BY BINARY_INTEGER;
14335 TYPE l_burdn_cst_rte_override_tbl_t IS TABLE OF pa_budget_lines.burden_cost_rate_override%TYPE
14336 INDEX BY BINARY_INTEGER;
14337 TYPE l_bill_rate_override_tbl_t IS TABLE OF pa_budget_lines.txn_bill_rate_override%TYPE
14338 INDEX BY BINARY_INTEGER;
14339
14340 l_rw_cost_rate_override_tbl l_rw_cost_rate_override_tbl_t;
14341 l_burden_cst_rate_override_tbl l_burdn_cst_rte_override_tbl_t;
14342 l_bill_rate_override_tbl l_bill_rate_override_tbl_t;
14343
14344
14345 l_budget_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
14346 l_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE;
14347 l_bdgt_lines_skip_flag varchar2(1);
14348 l_targ_request_id pa_budget_versions.request_id%TYPE;
14349
14350 --This variable will be used to call pa_resource_asgn_curr maintenance api - IPM Arch Enhancement
14351 l_fp_cols_rec PA_FP_GEN_AMOUNT_UTILS.FP_COLS;
14352
14353 -- Bug 4588279, 27-SEP-05, jwhite ------------------
14354
14355 -- Funds Check API Call
14356 l_fck_req_flag VARCHAR2(1) := NULL;
14357 l_bdgt_intg_flag VARCHAR2(1) := NULL;
14358 l_bdgt_ver_id NUMBER := NULL;
14359 l_encum_type_id NUMBER := NULL;
14360 l_balance_type VARCHAR2(1) := NULL;
14361
14362 --Business Rule Validation
14363 l_period_year gl_period_statuses.period_year%TYPE;
14364
14365 CURSOR l_budget_periods_csr
14366 (p_period_name VARCHAR2
14367 ,p_period_type_code VARCHAR2 )
14368 IS
14369 SELECT PERIOD_YEAR
14370 FROM pa_budget_periods_v
14371 WHERE period_name = p_period_name
14372 AND period_type_code = p_period_type_code;
14373
14374 -- End Bug 4588279, 27-SEP-05, jwhite ------------------
14375
14376
14377
14378 BEGIN
14379 -- Standard begin of API savepoint
14380
14381 SAVEPOINT calculate_amounts_pub;
14382
14383 -- Standard call to check for call compatibility.
14384
14385 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
14386 p_api_version_number ,
14387 l_api_name ,
14388 G_PKG_NAME )
14389 THEN
14390
14391 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14392
14393 END IF;
14394 --product_code is mandatory
14395
14396 IF p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14397 OR p_pm_product_code IS NULL
14398 THEN
14399 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14400 THEN
14401 pa_interface_utils_pub.map_new_amg_msg
14402 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
14403 ,p_msg_attribute => 'CHANGE'
14404 ,p_resize_flag => 'N'
14405 ,p_msg_context => 'GENERAL'
14406 ,p_attribute1 => ''
14407 ,p_attribute2 => ''
14408 ,p_attribute3 => ''
14409 ,p_attribute4 => ''
14410 ,p_attribute5 => '');
14411 END IF;
14412
14413 RAISE FND_API.G_EXC_ERROR;
14414
14415 END IF;
14416
14417 l_pm_product_code :='Z';
14418 /*added for bug no :2413400*/
14419 OPEN p_product_code_csr (p_pm_product_code);
14420 FETCH p_product_code_csr INTO l_pm_product_code;
14421 CLOSE p_product_code_csr;
14422
14423 IF l_pm_product_code <> 'X'
14424 THEN
14425 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14426 THEN
14427 pa_interface_utils_pub.map_new_amg_msg
14428 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
14429 ,p_msg_attribute => 'CHANGE'
14430 ,p_resize_flag => 'N'
14431 ,p_msg_context => 'GENERAL'
14432 ,p_attribute1 => ''
14433 ,p_attribute2 => ''
14434 ,p_attribute3 => ''
14435 ,p_attribute4 => ''
14436 ,p_attribute5 => '');
14437 END IF;
14438 p_return_status := FND_API.G_RET_STS_ERROR;
14439 RAISE FND_API.G_EXC_ERROR;
14440 END IF;
14441
14442 l_resp_id := FND_GLOBAL.Resp_id;
14443 l_user_id := FND_GLOBAL.User_id;
14444 -- l_module_name := 'PA_FP_MAINTAIN_GENERATED_PLAN'; -- 'PA_PM_UPDATE_BUDGET_LINE';
14445
14446 -- Bug 2863564
14447 -- The code below commented out as all the security checks are shifted to a common API
14448 /*
14449 IF p_update_db_flag = 'Y' THEN
14450 l_resp_id := FND_GLOBAL.Resp_id;
14451 l_user_id := FND_GLOBAL.User_id;
14452 --l_module_name := p_pm_product_code||'.'||'PA_PM_UPDATE_BUDGET_LINE';
14453 l_module_name := 'PA_PM_UPDATE_BUDGET_LINE';
14454
14455 -- As part of enforcing project security, which would determine
14456 -- whether the user has the necessary privileges to update the project
14457 -- need to call the pa_security package
14458 -- If a user does not have privileges to update the project, then
14459 -- cannot update the budget lines
14460
14461 pa_security.initialize (X_user_id => l_user_id,
14462 X_calling_module => l_module_name);
14463
14464 -- Actions performed using the APIs would be subject to
14465 -- function security. If the responsibility does not allow
14466 -- such functions to be executed, the API should not proceed further
14467 -- since the user does not have access to such functions
14468
14469 PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := p_pa_project_id;
14470
14471
14472 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
14473 (p_api_version_number => p_api_version_number,
14474 p_responsibility_id => l_resp_id,
14475 p_function_name => 'PA_PM_UPDATE_BUDGET_LINE',
14476 p_msg_count => l_msg_count,
14477 p_msg_data => l_msg_data,
14478 p_return_status => l_return_status,
14479 p_function_allowed => l_function_allowed );
14480
14481 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
14482 THEN
14483 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14484
14485 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
14486 THEN
14487 RAISE FND_API.G_EXC_ERROR;
14488 END IF;
14489 IF l_function_allowed = 'N' THEN
14490 pa_interface_utils_pub.map_new_amg_msg
14491 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
14492 ,p_msg_attribute => 'CHANGE'
14493 ,p_resize_flag => 'Y'
14494 ,p_msg_context => 'GENERAL'
14495 ,p_attribute1 => ''
14496 ,p_attribute2 => ''
14497 ,p_attribute3 => ''
14498 ,p_attribute4 => ''
14499 ,p_attribute5 => '');
14500 p_return_status := FND_API.G_RET_STS_ERROR;
14501 RAISE FND_API.G_EXC_ERROR;
14502 END IF;
14503 END IF;
14504 */
14505 -- Initialize the message table if requested.
14506
14507 IF FND_API.TO_BOOLEAN( p_init_msg_list )
14508 THEN
14509
14510 FND_MSG_PUB.initialize;
14511
14512 END IF;
14513
14514 -- Set API return status to success
14515
14516 p_return_status := FND_API.G_RET_STS_SUCCESS;
14517
14518
14519 --CHECK FOR MANDATORY FIELDS and CONVERT VALUES to ID's
14520
14521 --product_code is mandatory
14522
14523 -- convert pm_project_reference to id
14524
14525 Pa_project_pvt.Convert_pm_projref_to_id (
14526 p_pm_project_reference => p_pm_project_reference,
14527 p_pa_project_id => p_pa_project_id,
14528 p_out_project_id => l_project_id,
14529 p_return_status => p_return_status );
14530
14531 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
14532 THEN
14533 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14534
14535 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
14536 THEN
14537 RAISE FND_API.G_EXC_ERROR;
14538 END IF;
14539
14540 -- Commenting out the code below as all the security checks are shifted to a common API
14541 /*
14542 IF p_update_db_flag = 'Y' THEN
14543
14544 -- Now verify whether project security allows the user to update
14545 -- project
14546 -- If a user does not have privileges to update the project, then
14547 -- cannot update the budget line
14548
14549 IF pa_security.allow_query (x_project_id => l_project_id ) = 'N' THEN
14550
14551 -- The user does not have query privileges on this project
14552 -- Hence, cannot update the project.Raise error
14553 pa_interface_utils_pub.map_new_amg_msg
14554 ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
14555 ,p_msg_attribute => 'CHANGE'
14556 ,p_resize_flag => 'Y'
14557 ,p_msg_context => 'GENERAL'
14558 ,p_attribute1 => ''
14559 ,p_attribute2 => ''
14560 ,p_attribute3 => ''
14561 ,p_attribute4 => ''
14562 ,p_attribute5 => '');
14563 p_return_status := FND_API.G_RET_STS_ERROR;
14564 RAISE FND_API.G_EXC_ERROR;
14565 ELSE
14566 -- If the user has query privileges, then check whether
14567 -- update privileges are also available
14568 IF pa_security.allow_update (x_project_id => l_project_id ) = 'N' THEN
14569
14570 -- The user does not have update privileges on this project
14571 -- Hence , raise error
14572 pa_interface_utils_pub.map_new_amg_msg
14573 ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
14574 ,p_msg_attribute => 'CHANGE'
14575 ,p_resize_flag => 'Y'
14576 ,p_msg_context => 'GENERAL'
14577 ,p_attribute1 => ''
14578 ,p_attribute2 => ''
14579 ,p_attribute3 => ''
14580 ,p_attribute4 => ''
14581 ,p_attribute5 => '');
14582 p_return_status := FND_API.G_RET_STS_ERROR;
14583 RAISE FND_API.G_EXC_ERROR;
14584 END IF;
14585 END IF;
14586 END IF;
14587 */
14588 -- Get segment1 for AMG messages
14589
14590 OPEN l_amg_project_csr( l_project_id );
14591 FETCH l_amg_project_csr INTO l_amg_project_rec;
14592 CLOSE l_amg_project_csr;
14593
14594 -- Bug 2863564 This is redundant code and thus commented out
14595 /*
14596 -- Get the project and project functional currencies so that they can be used later
14597 pa_fin_plan_utils.Get_Project_Curr_Attributes
14598 ( p_project_id => l_project_id
14599 ,x_multi_currency_billing_flag => l_multi_currency_billing_flag
14600 ,x_project_currency_code => l_project_currency_code
14601 ,x_projfunc_currency_code => l_projfunc_currency_code
14602 ,x_project_cost_rate_type => l_project_cost_rate_type
14603 ,x_projfunc_cost_rate_type => l_projfunc_cost_rate_type
14604 ,x_project_bil_rate_type => l_project_bil_rate_type
14605 ,x_projfunc_bil_rate_type => l_projfunc_bil_rate_type
14606 ,x_return_status => l_return_status
14607 ,x_msg_count => l_msg_count
14608 ,x_msg_data => l_msg_data);
14609
14610 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14611 RAISE FND_API.G_EXC_ERROR;
14612 END IF;
14613
14614 -- In budget model intialise txn currency code to PFC
14615 IF p_budget_type_code IS NOT NULL AND
14616 p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
14617 l_txn_currency_code := l_projfunc_currency_code;
14618 END IF;
14619 */
14620
14621 -- Added Logic by Xin Liu to handle MISS vars based on Manoj's code review.
14622 -- 28-APR-03
14623
14624
14625 IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14626 ll_fin_plan_type_id := NULL;
14627 ELSE
14628 ll_fin_plan_type_id := p_fin_plan_type_id;
14629 END IF;
14630
14631 IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
14632 ll_fin_plan_type_name := NULL;
14633 ELSE
14634 ll_fin_plan_type_name := p_fin_plan_type_name;
14635 END IF;
14636
14637 IF p_budget_version_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14638 ll_version_number := NULL;
14639 ELSE
14640 ll_version_number := p_budget_version_number;
14641 END IF;
14642
14643 -- Changes done.
14644
14645
14646 -- Bug 2863564 New validations included as part of the changes
14647
14648 -- Budget Version Id, Budget Type Info and Fin Plan Type info all shouldn't be missing
14649
14650 IF ((p_budget_version_id IS NULL OR p_budget_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) AND
14651 (p_budget_type_code IS NULL OR p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
14652 (p_fin_plan_type_id IS NULL OR p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) AND
14653 (p_fin_plan_type_name IS NULL OR p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) )
14654 THEN
14655 PA_UTILS.ADD_MESSAGE
14656 (p_app_short_name => 'PA',
14657 p_msg_name => 'PA_BUDGET_FP_BOTH_MISSING');
14658
14659 IF l_debug_mode = 'Y' THEN
14660 pa_debug.g_err_stage:= 'Fin Plan type info and budget type info are missing';
14661 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14662 END IF;
14663 RAISE FND_API.G_EXC_ERROR;
14664 END IF;
14665
14666 -- Both Budget Type Info and Fin Plan Type info shouldn't be provided
14667
14668 IF (p_budget_type_code IS NOT NULL AND p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
14669 ((p_fin_plan_type_name IS NOT NULL AND p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
14670 (p_fin_plan_type_id IS NOT NULL AND p_fin_plan_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ))
14671 THEN
14672 PA_UTILS.ADD_MESSAGE
14673 (p_app_short_name => 'PA',
14674 p_msg_name => 'PA_BUDGET_FP_BOTH_NOT_NULL');
14675
14676 IF l_debug_mode = 'Y' THEN
14677 pa_debug.g_err_stage:= 'Fin Plan type info and budget type info both are provided';
14678 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14679 END IF;
14680 RAISE FND_API.G_EXC_ERROR;
14681 END IF;
14682
14683 -- get the person_id: used for locking checks
14684 PA_COMP_PROFILE_PUB.GET_USER_INFO
14685 (p_user_id => l_user_id,
14686 x_person_id => l_person_id,
14687 x_resource_id => l_resource_id,
14688 x_resource_name => l_resource_name);
14689
14690 IF (p_budget_version_id IS NOT NULL AND p_budget_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14691 THEN
14692 -- Fetch budget version info
14693 OPEN budget_version_info_cur(p_budget_version_id);
14694 FETCH budget_version_info_cur INTO budget_version_info_rec;
14695
14696 IF budget_version_info_cur%NOTFOUND
14697 THEN
14698
14699 -- Add the error message that i/p plan version id is invlid
14700
14701 PA_UTILS.ADD_MESSAGE(
14702 p_app_short_name => 'PA'
14703 ,p_msg_name => 'PA_FP_INVALID_VERSION_ID'
14704 ,p_token1 => 'BUDGET_VERSION_ID'
14705 ,p_value1 => p_budget_version_id);
14706
14707 IF l_debug_mode = 'Y' THEN
14708 pa_debug.g_err_stage := 'No budget version exists with i/p version id' ;
14709 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14710 END IF;
14711 CLOSE budget_version_info_cur;
14712 RAISE FND_API.G_EXC_ERROR;
14713
14714 ELSE
14715 -- Check if the budget belongs to the same project
14716
14717 IF (budget_version_info_rec.project_id <> l_project_id)
14718 THEN
14719 PA_UTILS.ADD_MESSAGE(
14720 p_app_short_name => 'PA'
14721 ,p_msg_name => 'PA_FP_PROJ_VERSION_MISMATCH');
14722
14723 IF l_debug_mode = 'Y' THEN
14724 pa_debug.g_err_stage := 'i/p version doesnot belong to i/p project' ;
14725 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14726 END IF;
14727 CLOSE budget_version_info_cur;
14728 RAISE FND_API.G_EXC_ERROR;
14729 END IF;
14730
14731 -- The i/p budget version should be a working verion.
14732
14733 IF (budget_version_info_rec.budget_status_code <> 'W')
14734 THEN
14735 PA_UTILS.ADD_MESSAGE(
14736 p_app_short_name => 'PA'
14737 ,p_msg_name => 'PA_FP_INVALID_VERSION_STATUS');
14738
14739 IF l_debug_mode = 'Y' THEN
14740 pa_debug.g_err_stage := 'i/p version is not a working version' ;
14741 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14742 END IF;
14743 CLOSE budget_version_info_cur;
14744 RAISE FND_API.G_EXC_ERROR;
14745 END IF;
14746
14747 -- If the budget version is a control item version throw error
14748
14749 IF budget_version_info_rec.ci_id IS NOT NULL THEN
14750 PA_UTILS.ADD_MESSAGE(
14751 p_app_short_name => 'PA'
14752 ,p_msg_name => 'PA_FP_CI_VERSION_NON_EDITABLE'
14753 ,p_token1 => 'BUDGET_VERSION_ID'
14754 ,p_value1 => p_budget_version_id);
14755 IF l_debug_mode = 'Y' THEN
14756 pa_debug.g_err_stage := 'i/p version is ci version' ;
14757 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14758 END IF;
14759 CLOSE budget_version_info_cur;
14760 RAISE FND_API.G_EXC_ERROR;
14761 END IF;
14762 END IF;
14763
14764
14765 -- Derive the new / old budgets model context value using the budget version info.
14766
14767 IF budget_version_info_rec.fin_plan_type_id IS NOT NULL
14768 THEN
14769 l_context := l_context_finplan;
14770 l_fin_plan_type_id := budget_version_info_rec.fin_plan_type_id;
14771 l_version_type := budget_version_info_rec.version_type;
14772 l_fin_plan_type_code := budget_version_info_rec.fin_plan_type_code;
14773 l_fin_plan_type_name := budget_version_info_rec.fin_plan_type_name;
14774 l_workplan_flag := budget_version_info_rec.wp_version_flag;
14775 l_budget_version_id := p_budget_version_id;
14776
14777
14778 IF l_fin_plan_type_code = 'ORG_FORECAST' THEN
14779
14780 -- Add appropriate exception message
14781
14782 PA_UTILS.ADD_MESSAGE
14783 (p_app_short_name => 'PA',
14784 p_msg_name => 'PA_FP_ORG_FCST_PLAN_TYPE'
14785 );
14786
14787 IF l_debug_mode = 'Y' THEN
14788 pa_debug.g_err_stage := 'Org_Forecast plan type has been passed' ;
14789 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14790 END IF;
14791 RAISE FND_API.G_EXC_ERROR;
14792 END IF;
14793 --bug #3636409. Validation for WorkPlan Versions which cannot be edited using this AMG interface.
14794
14795 IF l_workplan_flag = 'Y' THEN
14796
14797 IF l_debug_mode = 'Y' THEN
14798 pa_debug.g_err_stage := 'WorkPlan Versions cannot be edited using this AMG interface' ;
14799 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14800 END IF;
14801
14802 PA_UTILS.ADD_MESSAGE
14803 (p_app_short_name => 'PA',
14804 p_msg_name => 'PA_FP_WP_BV_NOT_ALLOWED');
14805 RAISE FND_API.G_EXC_ERROR;
14806 END IF;
14807
14808 -- version locked by process
14809 IF ( ( nvl( budget_version_info_rec.locked_by_person_id,0) = -98)
14810 AND ( budget_version_info_rec.request_id is NOT NULL )) THEN
14811 PA_UTILS.ADD_MESSAGE
14812 ( p_app_short_name => 'PA',
14813 p_msg_name => 'PA_FP_LOCKED_BY_PRC');
14814 CLOSE budget_version_info_cur;
14815 RAISE FND_API.G_EXC_ERROR;
14816 END IF;
14817
14818 -- version locked by another user
14819 IF (budget_version_info_rec.locked_by_person_id is not null) then
14820 IF (l_person_id <> budget_version_info_rec.locked_by_person_id) then
14821
14822 l_locked_by_name :=
14823 pa_fin_plan_utils.get_person_name(budget_version_info_rec.locked_by_person_id);
14824 PA_UTILS.ADD_MESSAGE
14825 ( p_app_short_name => 'PA',
14826 p_msg_name => 'PA_FP_LCK_BY_USER',
14827 p_token1 => 'PERSON_NAME',
14828 p_value1 => l_locked_by_name);
14829 CLOSE budget_version_info_cur;
14830 RAISE FND_API.G_EXC_ERROR;
14831 END IF;
14832 END IF;
14833 -- Get the status of the current working version. If the status is submitted then
14834 -- it can not be updated/deleted
14835 IF nvl(budget_version_info_rec.budget_status_code,'X') = 'S' THEN
14836 IF l_debug_mode = 'Y' THEN
14837 pa_debug.g_err_stage := 'Version exists in submitted status';
14838 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
14839 END IF;
14840 PA_UTILS.ADD_MESSAGE
14841 ( p_app_short_name => 'PA',
14842 p_msg_name => 'PA_FP_VER_SUB_STS');
14843 CLOSE budget_version_info_cur;
14844 RAISE FND_API.G_EXC_ERROR;
14845 END IF;
14846
14847 l_entry_level := pa_fin_plan_utils.get_fin_plan_level_code(l_budget_version_id);
14848
14849 l_autobaseline_flag := l_amg_project_rec.baseline_funding_flag;
14850
14851 IF l_autobaseline_flag = 'N' THEN
14852
14853 pa_fin_plan_utils.Check_if_plan_type_editable (
14854 P_project_id => l_project_id
14855 ,P_fin_plan_type_id => l_fin_plan_type_id
14856 ,P_version_type => l_version_type
14857 ,X_editable_flag => l_editable_flag
14858 ,X_return_status => p_return_status
14859 ,X_msg_count => p_msg_count
14860 ,X_msg_data => p_msg_data);
14861
14862 -- Throw the error if the above API is not successfully executed
14863
14864 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14865
14866 IF l_debug_mode = 'Y' THEN
14867 pa_debug.g_err_stage := 'Can not check if plan type is editable' ;
14868 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
14869 END IF;
14870
14871 RAISE FND_API.G_EXC_ERROR;
14872 END IF;
14873
14874 --Check for l_editable_flag. If it returns N, then raise PA_FP_PLAN_TYPE_NON_EDITABLE.
14875
14876 IF l_editable_flag = 'N' THEN
14877
14878 IF l_debug_mode = 'Y' THEN
14879 pa_debug.g_err_stage := 'Plan type is not editable' ;
14880 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
14881 END IF;
14882
14883 PA_UTILS.ADD_MESSAGE
14884 (p_app_short_name => 'PA',
14885 p_msg_name => 'PA_FP_PLAN_TYPE_NON_EDITABLE',
14886 p_token1 => 'PROJECT',
14887 p_value1 => l_amg_project_rec.segment1,
14888 p_token2 => 'PLAN_TYPE',
14889 p_value2 => l_fin_plan_type_name);
14890
14891 RAISE FND_API.G_EXC_ERROR;
14892 END IF;
14893 END IF;
14894
14895 ELSE
14896 l_context := l_context_budget;
14897 l_budget_type_code := budget_version_info_rec.budget_type_code;
14898 l_budget_version_id := p_budget_version_id;
14899 /* added for 2207723 to get the entry level of the budget */
14900 OPEN l_get_entry_level_csr(l_budget_version_id);
14901 FETCH l_get_entry_level_csr into l_entry_level;
14902 CLOSE l_get_entry_level_csr;
14903
14904 END IF;
14905 CLOSE budget_version_info_cur;
14906
14907 ELSIF (p_fin_plan_type_id IS NOT NULL AND p_fin_plan_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
14908 (p_fin_plan_type_name IS NOT NULL AND p_fin_plan_type_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14909 THEN
14910
14911 -- Bug 2863564
14912 -- We are in the contex of new budgets model
14913
14914 l_context := l_context_finplan;
14915
14916 -- Call convert_plan_type_name_to_id api.
14917 -- If Plan Type Id is passed then the existence of a plan type with that id is checked
14918 -- Else using plan type name provided Plan Type Id is fetched.
14919 -- Proper error messages are stacked by the api if any validations fail.
14920
14921 -- Change the p_fin_plan_type_id, p_fin_plan_type_name to
14922 -- ll_fin_plan_type_id,ll_fin_plan_type_name
14923 -- Xin Liu. 28-APR-03
14924
14925 PA_FIN_PLAN_PVT.convert_plan_type_name_to_id
14926 ( p_fin_plan_type_id => ll_fin_plan_type_id
14927 ,p_fin_plan_type_name => ll_fin_plan_type_name
14928 ,x_fin_plan_type_id => l_fin_plan_type_id
14929 ,x_return_status => p_return_status
14930 ,x_msg_count => p_msg_count
14931 ,x_msg_data => p_msg_data);
14932
14933 -- Throw the error if the above API is not successfully executed
14934
14935 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14936
14937 IF l_debug_mode = 'Y' THEN
14938 pa_debug.g_err_stage := 'Plan Type validation have failed' ;
14939 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14940 END IF;
14941 RAISE FND_API.G_EXC_ERROR;
14942 END IF;
14943
14944 -- Now, we have a valid fin plan type id
14945 -- Check if the fin plan type code is 'ORG_FORECAST' if so throw an error
14946
14947 BEGIN
14948 SELECT fin_plan_type_code
14949 ,name
14950 , use_for_workplan_flag
14951 INTO l_fin_plan_type_code
14952 ,l_fin_plan_type_name
14953 ,l_workplan_flag
14954 FROM pa_fin_plan_types_vl
14955 WHERE fin_plan_type_id = l_fin_plan_type_id;
14956
14957 IF l_fin_plan_type_code = 'ORG_FORECAST' THEN
14958
14959 -- Add appropriate exception message
14960
14961 PA_UTILS.ADD_MESSAGE
14962 (p_app_short_name => 'PA',
14963 p_msg_name => 'PA_FP_ORG_FCST_PLAN_TYPE'
14964 );
14965
14966 IF l_debug_mode = 'Y' THEN
14967 pa_debug.g_err_stage := 'Org_Forecast plan type has been passed' ;
14968 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14969 END IF;
14970 RAISE FND_API.G_EXC_ERROR;
14971 END IF;
14972 EXCEPTION
14973 WHEN OTHERS THEN
14974 IF l_debug_mode = 'Y' THEN
14975 pa_debug.g_err_stage := 'Unexpected error while fetching the plan type code'||SQLERRM ;
14976 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14977 END IF;
14978 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14979 END;
14980
14981 --bug #3636409. Validation for WorkPlan Versions which cannot be edited using this AMG interface.
14982
14983 IF l_workplan_flag = 'Y' THEN
14984
14985 IF l_debug_mode = 'Y' THEN
14986 pa_debug.g_err_stage := 'WorkPlan Versions cannot be edited using this AMG interface' ;
14987 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
14988 END IF;
14989
14990 PA_UTILS.ADD_MESSAGE
14991 (p_app_short_name => 'PA',
14992 p_msg_name => 'PA_FP_WP_BV_NOT_ALLOWED');
14993 RAISE FND_API.G_EXC_ERROR;
14994 END IF;
14995 --bug #3636409. Validation for workplan versions ends here.
14996
14997 -- Bug 2863564 Check if the plan type has been attached to the project or not.
14998
14999 OPEN proj_fp_options_cur(l_project_id,l_fin_plan_type_id);
15000 FETCH proj_fp_options_cur INTO proj_fp_options_rec;
15001
15002 IF proj_fp_options_cur%NOTFOUND THEN
15003
15004 -- Throw appropriate error message
15005 PA_UTILS.ADD_MESSAGE
15006 (p_app_short_name => 'PA',
15007 p_msg_name => 'PA_FP_NO_PLAN_TYPE_OPTION',
15008 p_token1 => 'PROJECT',
15009 p_value1 => l_amg_project_rec.segment1,
15010 p_token2 => 'PLAN_TYPE',
15011 p_value2 => l_fin_plan_type_name);
15012
15013 IF l_debug_mode = 'Y' THEN
15014 pa_debug.g_err_stage := 'plan type not attached to project' ;
15015 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15016 END IF;
15017 CLOSE proj_fp_options_cur;
15018 RAISE FND_API.G_EXC_ERROR;
15019 END IF;
15020
15021 CLOSE proj_fp_options_cur;
15022
15023 -- Changes done by Xin Liu for post_fpk. Check if p_version_type is G_PA_MISS_CHAR. 24-APR-03
15024 IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15025 l_version_type := NULL;
15026 ELSE
15027 l_version_type := p_version_type;
15028 END IF;
15029 --Changes Done.
15030
15031 -- Bug 2863564
15032 -- Call get_version_type api to do the necessary validations regarding the version type
15033 -- If the version type is passed as null,
15034 -- it returns version_type if it can be fethced uniquely.
15035 -- else if passed as not null
15036 -- it validates the passed value against the fin plan preference code
15037
15038 pa_fin_plan_utils.get_version_type
15039 ( p_project_id => l_project_id
15040 ,p_fin_plan_type_id => l_fin_plan_type_id
15041 ,px_version_type => l_version_type
15042 ,x_return_status => p_return_status
15043 ,x_msg_count => p_msg_count
15044 ,x_msg_data => p_msg_data);
15045
15046 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15047 IF l_debug_mode = 'Y' THEN
15048 pa_debug.g_err_stage := 'getversiontype Failed ' ;
15049 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15050 END IF;
15051 RAISE FND_API.G_EXC_ERROR;
15052 END IF;
15053
15054 --bug #3636409. Validation for allow_edit_after_baseline_flag starts here.
15055 l_autobaseline_flag := l_amg_project_rec.baseline_funding_flag;
15056
15057 IF l_autobaseline_flag = 'N' THEN
15058
15059 pa_fin_plan_utils.Check_if_plan_type_editable (
15060 P_project_id => l_project_id
15061 ,P_fin_plan_type_id => l_fin_plan_type_id
15062 ,P_version_type => l_version_type
15063 ,X_editable_flag => l_editable_flag
15064 ,X_return_status => p_return_status
15065 ,X_msg_count => p_msg_count
15066 ,X_msg_data => p_msg_data);
15067
15068 -- Throw the error if the above API is not successfully executed
15069
15070 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15071
15072 IF l_debug_mode = 'Y' THEN
15073 pa_debug.g_err_stage := 'Can not check if plan type is editable' ;
15074 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15075 END IF;
15076
15077 RAISE FND_API.G_EXC_ERROR;
15078 END IF;
15079
15080 --Check for l_editable_flag. If it returns N, then raise PA_FP_PLAN_TYPE_NON_EDITABLE.
15081
15082 IF l_editable_flag = 'N' THEN
15083
15084 IF l_debug_mode = 'Y' THEN
15085 pa_debug.g_err_stage := 'Plan type is not editable' ;
15086 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15087 END IF;
15088
15089 PA_UTILS.ADD_MESSAGE
15090 (p_app_short_name => 'PA',
15091 p_msg_name => 'PA_FP_PLAN_TYPE_NON_EDITABLE',
15092 p_token1 => 'PROJECT',
15093 p_value1 => l_amg_project_rec.segment1,
15094 p_token2 => 'PLAN_TYPE',
15095 p_value2 => l_fin_plan_type_name);
15096
15097 RAISE FND_API.G_EXC_ERROR;
15098 END IF;
15099 END IF;
15100 --bug #3636409. Validation for allow_edit_after_baseline_flag ends here.
15101
15102
15103 IF p_budget_version_number IS NOT NULL
15104 AND p_budget_Version_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15105 THEN
15106 -- Bug 2863564
15107 -- Fetch the working budget version with the unique combination of
15108 -- l_project_id, l_finplan_type_id,l_version_type, version_number provided
15109
15110 pa_fin_plan_utils.get_version_id
15111 ( p_project_id => l_project_id
15112 ,p_fin_plan_type_id => l_fin_plan_type_id
15113 ,p_version_type => l_version_type
15114 ,p_version_number => p_budget_version_number
15115 ,x_budget_version_id => l_budget_version_id
15116 ,x_ci_id => l_ci_id
15117 ,x_return_status => p_return_status
15118 ,x_msg_count => p_msg_count
15119 ,x_msg_data => p_msg_data );
15120
15121 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15122 IF l_debug_mode = 'Y' THEN
15123 pa_debug.g_err_stage := 'getVersionId api Failed ' ;
15124 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15125 END IF;
15126 RAISE FND_API.G_EXC_ERROR;
15127 END IF;
15128
15129 -- If the budget version is a control item version throw error
15130
15131 IF l_ci_id IS NOT NULL THEN
15132 PA_UTILS.ADD_MESSAGE(
15133 p_app_short_name => 'PA'
15134 ,p_msg_name => 'PA_FP_CI_VERSION_NON_EDITABLE'
15135 ,p_token1 => 'BUDGET_VERSION_ID'
15136 ,p_value1 => p_budget_version_id);
15137
15138 IF l_debug_mode = 'Y' THEN
15139 pa_debug.g_err_stage := 'i/p version is ci version' ;
15140 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15141 END IF;
15142 RAISE FND_API.G_EXC_ERROR;
15143 END IF;
15144 ELSE
15145 -- Fetch the current working version for the project, finplan type and verion type
15146
15147 PA_FIN_PLAN_UTILS.Get_Curr_Working_Version_Info(
15148 p_project_id => l_project_id
15149 ,p_fin_plan_type_id => l_fin_plan_type_id
15150 ,p_version_type => l_version_type
15151 ,x_fp_options_id => l_dummy
15152 ,x_fin_plan_version_id => l_budget_version_id
15153 ,x_return_status => p_return_status
15154 ,x_msg_count => p_msg_count
15155 ,x_msg_data => p_msg_data );
15156
15157 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15158 IF l_debug_mode = 'Y' THEN
15159 pa_debug.g_err_stage := 'Get_Curr_Working_Version_Info api Failed ' ;
15160 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15161 END IF;
15162 RAISE FND_API.G_EXC_ERROR;
15163 END IF;
15164
15165 END IF;
15166
15167 -- Bug 2863564
15168 -- If budget version id can't be found for i/p parameteres throw appropriate error message
15169
15170 -- Changes done by Xin Liu for post_fpk. Added check for G_PA_MISS_NUM. 24-APR-03
15171 IF l_budget_version_id IS NULL OR l_budget_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
15172
15173 -- Throw appropriate error message
15174 PA_UTILS.ADD_MESSAGE
15175 (p_app_short_name => 'PA',
15176 p_msg_name => 'PA_FP_NO_WORKING_VERSION',
15177 p_token1 => 'PROJECT',
15178 p_value1 => l_amg_project_rec.segment1,
15179 p_token2 => 'PLAN_TYPE',
15180 p_value2 => l_fin_plan_type_name,
15181 p_token3 => 'VERSION_NUMBER',
15182 p_value3 => p_budget_Version_number );
15183
15184 IF l_debug_mode = 'Y' THEN
15185 pa_debug.g_err_stage := 'Budget Version does not exist' ;
15186 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15187 END IF;
15188 RAISE FND_API.G_EXC_ERROR;
15189 Else
15190 -- Fetch budget version info
15191 OPEN budget_version_info_cur(l_budget_version_id);
15192 FETCH budget_version_info_cur INTO budget_version_info_rec;
15193 -- version locked by process
15194 IF ( ( nvl( budget_version_info_rec.locked_by_person_id,0) = -98 )
15195 AND ( budget_version_info_rec.request_id is NOT NULL ) ) THEN
15196
15197 PA_UTILS.ADD_MESSAGE
15198 ( p_app_short_name => 'PA',
15199 p_msg_name => 'PA_FP_LOCKED_BY_PRC');
15200
15201 CLOSE budget_version_info_cur;
15202 RAISE FND_API.G_EXC_ERROR;
15203 END IF;
15204
15205 -- version locked by another user
15206 IF (budget_version_info_rec.locked_by_person_id is not null) then
15207 IF (l_person_id <> budget_version_info_rec.locked_by_person_id) then
15208
15209 l_locked_by_name := pa_fin_plan_utils.get_person_name(budget_version_info_rec.locked_by_person_id);
15210 PA_UTILS.ADD_MESSAGE
15211 ( p_app_short_name => 'PA',
15212 p_msg_name => 'PA_FP_LCK_BY_USER',
15213 p_token1 => 'PERSON_NAME',
15214 p_value1 => l_locked_by_name);
15215 CLOSE budget_version_info_cur;
15216 RAISE FND_API.G_EXC_ERROR;
15217 END IF;
15218 END IF;
15219
15220 -- Get the status of the current working version. If the status is submitted then
15221 -- it can not be updated/deleted
15222 IF nvl(budget_version_info_rec.budget_status_code,'X') = 'S' THEN
15223 IF l_debug_mode = 'Y' THEN
15224 pa_debug.g_err_stage := 'Version exists in submitted status';
15225 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15226 END IF;
15227 PA_UTILS.ADD_MESSAGE
15228 ( p_app_short_name => 'PA',
15229 p_msg_name => 'PA_FP_VER_SUB_STS');
15230 CLOSE budget_version_info_cur;
15231 RAISE FND_API.G_EXC_ERROR;
15232 END IF;
15233
15234 IF budget_version_info_rec.plan_processing_code IN ('XLUE','XLUP') THEN
15235
15236 pa_fin_plan_utils.return_and_vldt_plan_prc_code
15237 (p_budget_version_id => l_budget_version_id
15238 ,p_plan_processing_code => budget_version_info_rec.plan_processing_code
15239 ,x_final_plan_prc_code => budget_version_info_rec.plan_processing_code
15240 ,x_targ_request_id => l_targ_request_id
15241 ,x_return_status => p_return_status
15242 ,x_msg_count => p_msg_count
15243 ,x_msg_data => p_msg_data);
15244
15245 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15246 IF l_debug_mode = 'Y' THEN
15247 pa_debug.g_err_stage := 'Validate plan processing code api Failed ' ;
15248 pa_debug.write('Processing Code'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15249 END IF;
15250 RAISE FND_API.G_EXC_ERROR;
15251 END IF;
15252
15253 END IF;
15254
15255 CLOSE budget_version_info_cur;
15256 End if;
15257
15258 -- Bug 2863564
15259 -- Fetch the planning level of the budget version
15260
15261 l_entry_level := pa_fin_plan_utils.get_fin_plan_level_code(l_budget_version_id);
15262
15263 ELSIF p_budget_type_code IS NOT NULL OR p_budget_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15264 THEN
15265
15266 -- Bug 2863564
15267 -- The following validation has been commented as its not relevant any more
15268
15269 /*
15270 -- budget type code is mandatory
15271 IF p_budget_type_code IS NULL
15272 OR p_budget_type_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
15273
15274 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15275 pa_interface_utils_pub.map_new_amg_msg
15276 ( p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
15277 ,p_msg_attribute => 'CHANGE'
15278 ,p_resize_flag => 'N'
15279 ,p_msg_context => 'BUDG'
15280 ,p_attribute1 => l_amg_segment1
15281 ,p_attribute2 => ''
15282 ,p_attribute3 => p_budget_type_code
15283 ,p_attribute4 => ''
15284 ,p_attribute5 => '');
15285 END IF;
15286 RAISE FND_API.G_EXC_ERROR;
15287 ELSE
15288 */
15289
15290 -- If the budget_type info is passed, we are in the context of old bugets model
15291
15292 l_context := l_context_budget;
15293 l_budget_type_code := p_budget_type_code;
15294
15295 -- Validate the budget type code
15296
15297 OPEN l_budget_type_csr( p_budget_type_code );
15298
15299 FETCH l_budget_type_csr INTO l_dummy;
15300
15301 IF l_budget_type_csr%NOTFOUND THEN
15302 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15303 pa_interface_utils_pub.map_new_amg_msg
15304 ( p_old_message_code => 'PA_BUDGET_TYPE_IS_INVALID'
15305 ,p_msg_attribute => 'CHANGE'
15306 ,p_resize_flag => 'N'
15307 ,p_msg_context => 'BUDG'
15308 ,p_attribute1 => l_amg_project_rec.segment1
15309 ,p_attribute2 => ''
15310 ,p_attribute3 => p_budget_type_code
15311 ,p_attribute4 => ''
15312 ,p_attribute5 => '');
15313 END IF;
15314 CLOSE l_budget_type_csr;
15315 RAISE FND_API.G_EXC_ERROR;
15316 END IF;
15317 CLOSE l_budget_type_csr;
15318
15319 -- fetch the draft version id
15320
15321 OPEN draft_version_cur( l_project_id
15322 ,p_budget_type_code );
15323 FETCH draft_version_cur INTO draft_version_rec;
15324 IF draft_version_cur%NOTFOUND
15325 THEN
15326 -- Throw appropriate error message
15327 PA_UTILS.ADD_MESSAGE
15328 (p_app_short_name => 'PA',
15329 p_msg_name => 'PA_NO_BUDGET_VERSION');
15330
15331 IF l_debug_mode = 'Y' THEN
15332 pa_debug.g_err_stage := 'Draft Budget Version does not exist' ;
15333 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15334 END IF;
15335 CLOSE draft_version_cur;
15336 RAISE FND_API.G_EXC_ERROR;
15337 ELSE
15338 l_budget_version_id := draft_version_rec.budget_version_id;
15339 END IF;
15340 CLOSE draft_version_cur;
15341
15342 -- Get budget entry method details
15343
15344 /* added for 2207723 to get the entry level of the budget */
15345 OPEN l_get_entry_level_csr(l_budget_version_id);
15346 FETCH l_get_entry_level_csr into l_entry_level;
15347 CLOSE l_get_entry_level_csr;
15348
15349
15350 END IF; -- I/p Budget Version Id not null
15351
15352 -- Bug 2863564
15353 -- Call the api that performs the autobaseline checks
15354
15355 PA_FIN_PLAN_UTILS.PERFORM_AUTOBASLINE_CHECKS (
15356 p_budget_version_id => l_budget_version_id
15357 ,x_result => l_result
15358 ,x_return_status => p_return_status
15359 ,x_msg_count => p_msg_count
15360 ,x_msg_data => p_msg_data );
15361
15362 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15363 IF(l_debug_mode='Y') THEN
15364 pa_debug.g_err_stage := 'Auto baseline API falied';
15365 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15366 END IF;
15367 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15368 END IF;
15369
15370 IF l_result = 'F' THEN
15371 IF(l_debug_mode='Y') THEN
15372 pa_debug.g_err_stage := 'Auto baselining enabled for the project';
15373 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15374 END IF;
15375 PA_UTILS.ADD_MESSAGE(
15376 p_app_short_name => 'PA'
15377 ,p_msg_name => 'PA_FP_AB_AR_VER_NON_EDITABLE'
15378 ,p_token1 => 'PROJECT'
15379 ,p_value1 => l_amg_project_rec.segment1);
15380 RAISE FND_API.G_EXC_ERROR;
15381 END IF;
15382
15383 IF l_context = l_context_budget
15384 THEN
15385 -- Derive the version type using the budget amount code to restrict
15386 -- the users editing the 'COST' amounts if the version is 'REVENUE_ONLY'
15387
15388 PA_FIN_PLAN_UTILS.get_version_type_for_bdgt_type
15389 ( p_budget_type_code => l_budget_type_code
15390 ,x_version_type => l_version_type
15391 ,x_return_status => p_return_status
15392 ,x_msg_count => p_msg_count
15393 ,x_msg_data => p_msg_data );
15394
15395 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15396 IF(l_debug_mode='Y') THEN
15397 pa_debug.g_err_stage := 'get_version_type_for_bdgt_type API falied';
15398 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15399 END IF;
15400 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15401 END IF;
15402 END IF;
15403
15404 IF p_update_db_flag = 'Y'
15405 THEN
15406 l_module_name := 'PA_PM_UPDATE_BUDGET_LINE'; --4615645.
15407
15408 -- Bug 2863564 Check for the function security
15409
15410 PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY (
15411 p_api_version_number => p_api_version_number
15412 ,p_project_id => l_project_id
15413 ,p_fin_plan_type_id => l_fin_plan_type_id /* Bug 3139924 */
15414 ,p_calling_context => l_context
15415 ,p_function_name => l_module_name
15416 ,p_version_type => l_version_type
15417 ,x_return_status => p_return_status
15418 ,x_ret_code => l_security_ret_code );
15419
15420 -- The above API adds the error message to stack. Hence the message is not added here.
15421 -- Also, as security check is important further validations are not done in case this
15422 -- validation fails.
15423
15424 IF (p_return_status <> FND_API.G_RET_STS_SUCCESS OR l_security_ret_code <> 'Y') THEN
15425
15426 IF l_debug_mode = 'Y' THEN
15427 pa_debug.g_err_stage:= 'Security API Failed';
15428 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level3);
15429 END IF;
15430
15431 RAISE FND_API.G_EXC_ERROR;
15432 END IF;
15433 END IF;
15434
15435 -- Bug 2863564
15436 -- For Financial Planning model, we need to lock the plan version explicitly
15437 -- before Updating the version.
15438
15439 IF p_update_db_flag = 'Y' AND l_context = l_context_finplan THEN
15440
15441 -- Fetch the record version number of the plan version
15442 l_record_version_number :=
15443 PA_FIN_PLAN_UTILS.RETRIEVE_RECORD_VERSION_NUMBER(l_budget_version_id);
15444
15445 PA_FIN_PLAN_PVT.LOCK_UNLOCK_VERSION
15446 ( p_budget_version_id => l_budget_version_id
15447 ,p_record_version_number => l_record_version_number
15448 ,p_action => 'L'
15449 ,p_user_id => FND_GLOBAL.User_id
15450 ,p_person_id => NULL
15451 ,x_return_status => p_return_status
15452 ,x_msg_count => p_msg_count
15453 ,x_msg_data => p_msg_data);
15454
15455 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15456
15457 -- Error message is not added here as the api lock_unlock_version
15458 -- adds the message to stack
15459 IF(l_debug_mode='Y') THEN
15460 pa_debug.g_err_stage := 'Failed in locking the version';
15461 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15462 END IF;
15463
15464 RAISE FND_API.G_EXC_ERROR;
15465 END IF;
15466
15467 END IF;
15468
15469
15470
15471 -- Bug 4588279, 27-SEP-05, jwhite ---------------------------------------------------
15472
15473 -- For budget_type_code Budgetary Control budgets,
15474 --
15475 -- 1) Add validation rule to prevent update to
15476 -- periods later than the latest encumbrance year for the set-of-books.
15477 --
15478 -- 2) For information purposes, this validation will be performed even if the update mode
15479 -- is disabled ( p_update_db_flag = 'N' )
15480 --
15481 --
15482
15483 -- Since this initilization is performed here, this global can be used in lieu of a test
15484 -- for the following later in this procedure:
15485 -- 1) Update Mode
15486 -- 2) Budget_type_code model
15487 -- 3) Budgetary Control
15488 --
15489
15490 PA_BUDGET_PUB.G_Latest_Encumbrance_Year := -99;
15491
15492
15493 IF ( p_update_db_flag = 'Y' )
15494 THEN
15495 -- UPDATE MODE
15496
15497 IF ( p_budget_type_code IS NOT NULL ) -- budget_type_code model
15498 THEN
15499
15500 -- Test for Budgetary Control
15501
15502 --Check if budgetary control is enabled for the given project and
15503 --budget type code.
15504 PA_BUDGET_FUND_PKG.get_budget_ctrl_options
15505 ( p_project_Id => l_project_id
15506 , p_budget_type_code => p_budget_type_code
15507 , p_calling_mode => 'BUDGET'
15508 , x_fck_req_flag => l_fck_req_flag
15509 , x_bdgt_intg_flag => l_bdgt_intg_flag
15510 , x_bdgt_ver_id => l_bdgt_ver_id
15511 , x_encum_type_id => l_encum_type_id
15512 , x_balance_type => l_balance_type
15513 , x_return_status => p_return_status
15514 , x_msg_data => p_msg_data
15515 , x_msg_count => p_msg_count
15516 );
15517
15518 -- calling api above adds the error message to stack hence not adding the error message here.
15519 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15520 THEN
15521 IF l_debug_mode = 'Y' THEN
15522 pa_debug.g_err_stage:= 'Calculate_Amounts returned unexp error';
15523 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
15524 END IF;
15525 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15526 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
15527 THEN
15528 IF l_debug_mode = 'Y' THEN
15529 pa_debug.g_err_stage:= 'Calculate_Amounts returned error';
15530 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
15531 END IF;
15532 RAISE FND_API.G_EXC_ERROR;
15533 END IF;
15534
15535
15536 --If funds check is required then this budget cannot be updated thru AMG interface
15537 --FOR PERIOD_YEARS THAT FALL AFTER THE LATEST ENCUMBRANCE YEAR.
15538
15539
15540 IF (nvl(l_fck_req_flag,'N') = 'Y')
15541 THEN
15542
15543 --RE-Populate global for subsequent conditional budget LINE validation
15544 -- Storing a value other than -99 is essential to conditional LINE validation
15545
15546 PA_BUDGET_PVT.Get_Latest_BC_Year
15547 ( p_pa_project_id => l_project_id
15548 ,x_latest_encumbrance_year => PA_BUDGET_PUB.G_Latest_Encumbrance_Year
15549 ,x_return_status => p_return_status
15550 ,x_msg_count => p_msg_count
15551 ,x_msg_data => p_msg_data
15552 );
15553
15554
15555 -- calling api above adds the error message to stack hence not adding the error message here.
15556 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15557 THEN
15558 IF l_debug_mode = 'Y' THEN
15559 pa_debug.g_err_stage:= 'Get_Latest_BC_Year returned unexp error';
15560 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
15561 END IF;
15562 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15563 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
15564 THEN
15565 IF l_debug_mode = 'Y' THEN
15566 pa_debug.g_err_stage:= 'Get_Latest_BC_Year returned error';
15567 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
15568 END IF;
15569 RAISE FND_API.G_EXC_ERROR;
15570 END IF;
15571
15572 END IF; --(nvl(l_fck_req_flag,'N') = 'Y')
15573
15574 END IF; -- p_budget_type_code IS NOT NULL
15575
15576
15577 END IF; -- p_update_db_flag = 'Y'
15578
15579 -- End Bug 4588279, 27-SEP-05, jwhite -------------------------------------------------
15580
15581
15582
15583
15584 -- Read all budget lines - Begin Budget lines loop
15585
15586 l_line_ctr := 0;
15587
15588 IF l_context = l_context_finplan THEN
15589 l_time_phased_code := PA_FIN_PLAN_UTILS.Get_Time_Phased_code(l_budget_version_id);
15590 END IF;
15591
15592 OPEN budget_version_info_cur(l_budget_version_id);
15593 FETCH budget_version_info_cur INTO budget_version_info_rec;
15594 close budget_version_info_cur;
15595
15596 --Set this variable to 'N' initially. This would be set to Yes if for some budget lines client extensions are not called.
15597 l_bdgt_lines_skip_flag := 'N';
15598
15599 OPEN l_resource_assignment_csr (l_budget_version_id,l_context);
15600 LOOP
15601
15602 FETCH l_resource_assignment_csr BULK COLLECT INTO
15603 l_rowid_tbl
15604 ,l_budget_line_id_tbl
15605 ,l_txn_currency_code_tbl
15606 ,l_res_assignment_id_tbl
15607 ,l_task_id_tbl
15608 ,l_rate_based_flag_tbl
15609 ,l_resource_list_id_tbl
15610 ,l_resource_list_member_id_tbl
15611 ,l_resource_id_tbl
15612 ,l_resource_name_tbl
15613 ,l_start_date_tbl
15614 ,l_end_date_tbl
15615 ,l_period_name_tbl
15616 ,l_quantity_tbl
15617 ,l_display_quantity_tbl --IPM Arch Enhancement Bug 4865563
15618 ,l_txn_raw_cost_tbl
15619 ,l_txn_burdened_cost_tbl
15620 ,l_txn_revenue_tbl
15621 ,l_project_raw_cost_tbl
15622 ,l_project_burdened_cost_tbl
15623 ,l_project_revenue_tbl
15624 ,l_projfunc_raw_cost_tbl
15625 ,l_projfunc_burdened_cost_tbl
15626 ,l_projfunc_revenue_tbl
15627 LIMIT l_plsql_max_array_size;
15628
15629 IF(l_debug_mode='Y') THEN
15630 pa_debug.g_err_stage := 'fetched ' || sql%rowcount || ' records';
15631 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
15632 END IF;
15633
15634 -- For each of the budget line fetched call client extension apis
15635
15636 IF NVL(l_rowid_tbl.last,0) >= 1 THEN /* Only if something is fetched */
15637 FOR i IN l_rowid_tbl.first .. l_rowid_tbl.last
15638 LOOP
15639 l_line_ctr := l_line_ctr + 1;
15640 l_task_name := NULL;
15641 -- Get the pm_task_reference for the task_id
15642 IF l_entry_level <> 'P' THEN /* 2207733 do this check only if budget is not at project level other valid
15643 values are 'L', 'M', and 'P' */
15644 --OPEN l_task_csr (l_resource_assignment_rec.task_id);
15645 OPEN l_task_csr (l_task_id_tbl(i));
15646 FETCH l_task_csr INTO l_pm_task_reference
15647 ,l_task_name; -- Bug 2863564
15648 IF l_task_csr%NOTFOUND THEN
15649 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15650 pa_interface_utils_pub.map_new_amg_msg
15651 ( p_old_message_code => 'PA_TASK_ID_INVALID'
15652 ,p_msg_attribute => 'CHANGE'
15653 ,p_resize_flag => 'N'
15654 ,p_msg_context => 'PROJ'
15655 ,p_attribute1 => l_amg_project_rec.segment1
15656 ,p_attribute2 => ''
15657 ,p_attribute3 => ''
15658 ,p_attribute4 => ''
15659 ,p_attribute5 => '');
15660 END IF;
15661 CLOSE l_task_csr;
15662 p_multiple_task_msg := 'F';
15663 -- RAISE FND_API.G_EXC_ERROR;
15664 END IF;
15665 CLOSE l_task_csr;
15666 END IF; /* 2207733 */
15667
15668
15669 p_calc_budget_lines_out(l_line_ctr).pa_task_id := l_task_id_tbl(i);
15670 p_calc_budget_lines_out(l_line_ctr).pm_task_reference := l_pm_task_reference;
15671 p_calc_budget_lines_out(l_line_ctr).resource_alias := l_resource_name_tbl(i);
15672 p_calc_budget_lines_out(l_line_ctr).resource_list_member_id := l_resource_list_member_id_tbl(i);
15673 p_calc_budget_lines_out(l_line_ctr).budget_start_date := l_start_date_tbl(i);
15674 p_calc_budget_lines_out(l_line_ctr).budget_end_date := l_end_date_tbl(i);
15675 p_calc_budget_lines_out(l_line_ctr).period_name := l_period_name_tbl(i);
15676 p_calc_budget_lines_out(l_line_ctr).quantity := l_quantity_tbl(i);
15677 p_calc_budget_lines_out(l_line_ctr).display_quantity := l_display_quantity_tbl(i); --IPM Arch Enhancement Bug 4865563
15678 p_calc_budget_lines_out(l_line_ctr).txn_currency_code := l_txn_currency_code_tbl(i);
15679
15680 -- Fix: 03-FEB-97, jwhite
15681 -- Added line to populate line return status. ---------------------------
15682 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_SUCCESS;
15683 -- ------------------------------------------------------------------------------
15684
15685 l_calculated_raw_cost := l_txn_raw_cost_tbl(i);
15686 l_calculated_burdened_cost := l_txn_burdened_cost_tbl(i);
15687 l_calculated_revenue := l_txn_revenue_tbl(i);
15688
15689 --Initialize the three override values to null. These would be appropriately set to new derived values depending on
15690 -- the context.
15691 l_rw_cost_rate_override_tbl(i) := null;
15692 l_burden_cst_rate_override_tbl(i) := null;
15693 l_bill_rate_override_tbl(i) := null;
15694
15695
15696 -- Bug 4588279, 27-SEP-05, jwhite ---------------------
15697 -- For Update-Mode, Budget-Type-Code and Budgetary Control, issue error for any period record that
15698 -- falls after the latest encumbrance year.
15699 --
15700 -- Implicit Assumptions in following code:
15701 -- 1) If ( PA_BUDGET_PUB.G_Latest_Encumbrance_Year > -99), then
15702 -- this is Update-Mode, Budget-Type-Code and Budgetary Control data.
15703 -- 2) Budgetary control is ONLY for GL periods.
15704 --
15705
15706 -- Initialize Period Year Variable
15707 l_period_year := NULL;
15708
15709
15710 IF ( PA_BUDGET_PUB.G_Latest_Encumbrance_Year > -99)
15711 THEN
15712 -- Budgetary Control Enabled Budget-Type-Code and Update_Mode
15713
15714 -- Fetch Period Year for budget LINE Period Name
15715 OPEN l_budget_periods_csr( l_period_name_tbl(i),'G');
15716
15717 FETCH l_budget_periods_csr INTO l_period_year;
15718
15719 CLOSE l_budget_periods_csr;
15720
15721 -- Test Business Rule
15722 IF ( l_period_year > PA_BUDGET_PUB.G_Latest_Encumbrance_Year )
15723 THEN
15724 pa_utils.add_message
15725 ( p_app_short_name => 'PA'
15726 , p_msg_name => 'PA_BC_ENC_YR_NO_CHG_FUTURE');
15727 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_ERROR;
15728 p_multiple_task_msg := 'F';
15729 END IF;
15730
15731 END IF;
15732
15733 -- End Bug 4588279, 27-SEP-05, jwhite ------------------
15734
15735
15736 --if plan type is FORECAST and for such a forecast version if the ETC start date is greater than start date for
15737 --any of the budget lines then dont call the extension for these lines. For these lines report the amounts
15738 -- as such without calling client extesion on these. For other lines for this version we can
15739 --call the client extensions.
15740 --Also for a forecast version with ETC start date greater than budget line start date, if time phasing for the
15741 --forecast version is none then call client extension for such lines.
15742
15743 if ( not(budget_version_info_rec.plan_class_code = 'FORECAST' and
15744 budget_version_info_rec.etc_start_date is not null and --Added this null check for Bug 3636409
15745 budget_version_info_rec.etc_start_date > l_start_date_tbl(i) and
15746 l_time_phased_code is not null and
15747 l_time_phased_code <> 'N')
15748 or
15749 l_context = l_context_budget )
15750 then
15751 IF (p_calc_raw_cost_yn = 'Y' AND
15752 l_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE)
15753 THEN -- calculate raw cost
15754
15755 Pa_client_Extn_Budget.Calc_Raw_Cost
15756 (x_budget_version_id => l_budget_version_id,
15757 x_project_id => l_project_id,
15758 x_task_id => l_task_id_tbl(i),
15759 x_resource_list_member_id => l_resource_list_member_id_tbl(i),
15760 x_resource_list_id => l_resource_list_id_tbl(i),
15761 x_resource_id => l_resource_id_tbl(i),
15762 x_start_date => l_start_date_tbl(i),
15763 x_end_date => l_end_date_tbl(i),
15764 x_period_name => l_period_name_tbl(i),
15765 x_quantity => l_quantity_tbl(i),
15766 x_raw_cost => l_calculated_raw_cost,
15767 x_pm_product_code => p_pm_product_code,
15768 x_error_code => l_err_code,
15769 x_error_message => l_err_message,
15770 --Added the parameter as part of changes to AMG due to finplan model
15771 x_txn_currency_code => l_txn_currency_code_tbl(i));
15772
15773 IF l_err_code > 0
15774 THEN
15775
15776 IF l_context = l_context_budget
15777 THEN
15778 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15779 THEN
15780
15781 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
15782 THEN
15783 pa_interface_utils_pub.map_new_amg_msg
15784 ( p_old_message_code => 'PA_CALC_RAW_COST_FAILED'
15785 ,p_msg_attribute => 'CHANGE'
15786 ,p_resize_flag => 'N'
15787 ,p_msg_context => 'BUDG'
15788 ,p_attribute1 => l_amg_project_rec.segment1
15789 ,p_attribute2 => ''
15790 ,p_attribute3 => p_budget_type_code
15791 ,p_attribute4 => ''
15792 ,p_attribute5 => '');
15793 ELSE
15794 pa_interface_utils_pub.map_new_amg_msg
15795 ( p_old_message_code => l_err_stage
15796 ,p_msg_attribute => 'CHANGE'
15797 ,p_resize_flag => 'N'
15798 ,p_msg_context => 'BUDG'
15799 ,p_attribute1 => l_amg_project_rec.segment1
15800 ,p_attribute2 => ''
15801 ,p_attribute3 => p_budget_type_code
15802 ,p_attribute4 => ''
15803 ,p_attribute5 => '');
15804 END IF;
15805
15806 END IF;
15807 ELSE
15808 PA_UTILS.ADD_MESSAGE(
15809 p_app_short_name => 'PA'
15810 ,p_msg_name => 'PA_FP_CALC_RAW_COST_FAILED'
15811 ,p_token1 => 'PROJECT'
15812 ,p_value1 => l_amg_project_rec.segment1
15813 ,p_token2 => 'TASK'
15814 ,p_value2 => l_task_name
15815 ,p_token3 => 'PLAN_TYPE'
15816 ,p_value3 => l_fin_plan_type_name
15817 ,p_token4 => 'SOURCE_NAME'
15818 ,p_value4 => l_resource_name_tbl(i)
15819 ,p_token5 => 'START_DATE'
15820 ,p_value5 => l_start_date_tbl(i)
15821 );
15822 END IF;
15823
15824 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_ERROR;
15825 p_multiple_task_msg := 'F';
15826 -- RAISE FND_API.G_EXC_ERROR;
15827
15828 ELSIF l_err_code < 0
15829 THEN
15830
15831 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
15832 THEN
15833
15834 FND_MSG_PUB.add_exc_msg
15835 ( p_pkg_name => 'PA_CLIENT_EXTN_BUDGET'
15836 , p_procedure_name => 'CALC_RAW_COST'
15837 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
15838
15839 END IF;
15840
15841 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15842 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15843
15844 END IF;
15845
15846 /* if the Client extn amounts override the rate api derived amounts
15847 * then re-derive the override rates. This should be done only for finplan model
15848 */
15849 if l_fin_plan_type_id is not null then
15850 IF l_version_type in ('ALL','COST') Then
15851 If l_rate_based_flag_tbl(i) = 'N' Then
15852 If NVL(l_calculated_raw_cost,0) <> NVL(l_txn_raw_cost_tbl(i),0) Then
15853 l_calculated_raw_cost := pa_currency.round_trans_currency_amt1(l_calculated_raw_cost,l_txn_currency_code_tbl(i));
15854 l_quantity_tbl(i) := l_calculated_raw_cost;
15855 l_display_quantity_tbl(i) := null; --IPM Arch Enhancements Bug 4865563
15856 l_rw_cost_rate_override_tbl(i) := 1;
15857 /* change in raw cost changes the burden cost rate */
15858 If (nvl(l_quantity_tbl(i),0) <> 0 AND nvl(l_quantity_tbl(i),0) <>
15859 nvl(p_calc_budget_lines_out(l_line_ctr).quantity,0)) Then
15860 l_burden_cst_rate_override_tbl(i) := l_txn_burdened_cost_tbl(i)/l_quantity_tbl(i);
15861 End if;
15862 /* change in the quantity changes the bill rate */
15863 If l_version_type = 'ALL' Then
15864 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
15865 l_bill_rate_override_tbl(i) := l_txn_revenue_tbl(i)/l_quantity_tbl(i);
15866 End If;
15867 End If;
15868 End If;
15869 Else
15870 If NVL(l_calculated_raw_cost,0) <> NVL(l_txn_raw_cost_tbl(i),0) Then
15871 l_calculated_raw_cost := pa_currency.round_trans_currency_amt1(l_calculated_raw_cost,l_txn_currency_code_tbl(i));
15872 If nvl(l_quantity_tbl(i),0) <> 0 Then
15873 --Bug 5006031 Issue 8
15874 If l_calculated_raw_cost = 0 OR l_calculated_raw_cost IS NULL then
15875 l_rw_cost_rate_override_tbl(i) := 0;
15876 Else
15877 l_rw_cost_rate_override_tbl(i) := l_calculated_raw_cost/l_quantity_tbl(i);
15878 End If;
15879 End If;
15880 End If;
15881 End If;
15882 End If;
15883 end if; --l_fin_plan_type_id is not null
15884 END IF;
15885
15886 IF (p_calc_burdened_cost_yn = 'Y' AND
15887 l_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_REVENUE)
15888 THEN
15889
15890 -- calculate burdened cost. Note that calculated_raw_cost is being
15891 -- used as the parameter,in case both p_calc_raw_cost_yn and
15892 -- p_calc_burdened_cost_yn are both set to 'Y'.Calculated_raw_cost
15893 -- would either hold the newly calculated value or the value from
15894 -- the database,depending on the value of p_calc_raw_cost_yn flag.
15895
15896 Pa_client_Extn_Budget.Calc_burdened_Cost
15897 ( x_budget_version_id => l_budget_version_id
15898 ,x_project_id => l_project_id
15899 ,x_task_id => l_task_id_tbl(i)
15900 ,x_resource_list_member_id => l_resource_list_member_id_tbl(i)
15901 ,x_resource_list_id => l_resource_list_id_tbl(i)
15902 ,x_resource_id => l_resource_id_tbl(i)
15903 ,x_start_date => l_start_date_tbl(i)
15904 ,x_end_date => l_end_date_tbl(i)
15905 ,x_period_name => l_period_name_tbl(i)
15906 ,x_quantity => l_quantity_tbl(i)
15907 ,x_raw_cost => l_calculated_raw_cost
15908 ,x_burdened_cost => l_calculated_burdened_cost
15909 ,x_pm_product_code => p_pm_product_code
15910 ,x_error_code => l_err_code
15911 ,x_error_message => l_err_message
15912 --Added the parameter as part of changes to AMG due to finplan model
15913 ,x_txn_currency_code => l_txn_currency_code_tbl(i));
15914
15915 IF l_err_code > 0
15916 THEN
15917
15918 IF l_context = l_context_budget
15919 THEN
15920 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15921 THEN
15922
15923 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
15924 THEN
15925 pa_interface_utils_pub.map_new_amg_msg
15926 ( p_old_message_code => 'PA_CALC_BURDENED_COST_FAILED'
15927 ,p_msg_attribute => 'CHANGE'
15928 ,p_resize_flag => 'Y'
15929 ,p_msg_context => 'BUDG'
15930 ,p_attribute1 => l_amg_project_rec.segment1
15931 ,p_attribute2 => ''
15932 ,p_attribute3 => p_budget_type_code
15933 ,p_attribute4 => ''
15934 ,p_attribute5 => '');
15935 ELSE
15936 pa_interface_utils_pub.map_new_amg_msg
15937 ( p_old_message_code => l_err_stage
15938 ,p_msg_attribute => 'CHANGE'
15939 ,p_resize_flag => 'Y'
15940 ,p_msg_context => 'BUDG'
15941 ,p_attribute1 => l_amg_project_rec.segment1
15942 ,p_attribute2 => ''
15943 ,p_attribute3 => p_budget_type_code
15944 ,p_attribute4 => ''
15945 ,p_attribute5 => '');
15946 END IF;
15947
15948 END IF;
15949 ELSE
15950 PA_UTILS.ADD_MESSAGE(
15951 p_app_short_name => 'PA'
15952 ,p_msg_name => 'PA_FP_CALC_BURD_COST_FAILED'
15953 ,p_token1 => 'PROJECT'
15954 ,p_value1 => l_amg_project_rec.segment1
15955 ,p_token2 => 'TASK'
15956 ,p_value2 => l_task_name
15957 ,p_token3 => 'PLAN_TYPE'
15958 ,p_value3 => l_fin_plan_type_name
15959 ,p_token4 => 'SOURCE_NAME'
15960 ,p_value4 => l_resource_name_tbl(i)
15961 ,p_token5 => 'START_DATE'
15962 ,p_value5 => l_start_date_tbl(i)
15963 );
15964 END IF;
15965
15966 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_ERROR;
15967 p_multiple_task_msg := 'F';
15968 -- RAISE FND_API.G_EXC_ERROR;
15969
15970 ELSIF l_err_code < 0
15971 THEN
15972
15973 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
15974 THEN
15975
15976 FND_MSG_PUB.add_exc_msg
15977 ( p_pkg_name => 'PA_CLIENT_EXTN_BUDGET'
15978 , p_procedure_name => 'CALC_BURDENED_COST'
15979 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
15980
15981 END IF;
15982
15983 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15984 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15985
15986 END IF;
15987
15988 /* re derive the burden cost rate override after calling the client extn Do it only for finplan model*/
15989 if l_fin_plan_type_id is not null then
15990 IF l_version_type in ('ALL','COST') Then
15991 If NVl(l_calculated_burdened_cost,0) <> NVl(l_txn_burdened_cost_tbl(i),0) Then
15992 l_calculated_burdened_cost := pa_currency.round_trans_currency_amt1(l_calculated_burdened_cost,l_txn_currency_code_tbl(i));
15993 If nvl(l_quantity_tbl(i),0) <> 0 Then
15994 --Bug 5006031 Issue 8
15995 If l_rate_based_flag_tbl(i) = 'Y' Then
15996 If l_calculated_burdened_cost = 0 OR l_calculated_burdened_cost IS NULL then
15997 l_burden_cst_rate_override_tbl(i) := 0;
15998 Else
15999 l_burden_cst_rate_override_tbl(i) := l_calculated_burdened_cost/l_quantity_tbl(i);
16000 End If;
16001 End If;
16002 --l_display_quantity_tbl(i) := l_quantity_tbl(i); --IPM Arch Enhancement Bug 4865563
16003 End if;
16004 End if;
16005 END IF;
16006 end if; --if l_fin_plan_type_id is not null
16007 END IF;
16008
16009 IF (p_calc_revenue_yn = 'Y' AND
16010 l_version_type <> PA_FP_CONSTANTS_PKG.G_VERSION_TYPE_COST)
16011 THEN
16012
16013 Pa_client_Extn_Budget.Calc_revenue
16014 ( x_budget_version_id => l_budget_version_id
16015 ,x_project_id => l_project_id
16016 ,x_task_id => l_task_id_tbl(i)
16017 ,x_resource_list_member_id => l_resource_list_member_id_tbl(i)
16018 ,x_resource_list_id => l_resource_list_id_tbl(i)
16019 ,x_resource_id => l_resource_id_tbl(i)
16020 ,x_start_date => l_start_date_tbl(i)
16021 ,x_end_date => l_end_date_tbl(i)
16022 ,x_period_name => l_period_name_tbl(i)
16023 ,x_quantity => l_quantity_tbl(i)
16024 ,x_revenue => l_calculated_revenue
16025 ,x_pm_product_code => p_pm_product_code
16026 ,x_error_code => l_err_code
16027 ,x_error_message => l_err_message
16028 --Added the parameter as part of changes to AMG due to finplan model
16029 ,x_txn_currency_code => l_txn_currency_code_tbl(i));
16030
16031
16032 IF l_err_code > 0
16033 THEN
16034
16035 IF l_context = l_context_budget
16036 THEN
16037 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16038 THEN
16039
16040 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
16041 THEN
16042 pa_interface_utils_pub.map_new_amg_msg
16043 ( p_old_message_code => 'PA_CALC_REVENUE_FAILED'
16044 ,p_msg_attribute => 'CHANGE'
16045 ,p_resize_flag => 'N'
16046 ,p_msg_context => 'BUDG'
16047 ,p_attribute1 => l_amg_project_rec.segment1
16048 ,p_attribute2 => ''
16049 ,p_attribute3 => p_budget_type_code
16050 ,p_attribute4 => ''
16051 ,p_attribute5 => '');
16052 ELSE
16053 pa_interface_utils_pub.map_new_amg_msg
16054 ( p_old_message_code => l_err_stage
16055 ,p_msg_attribute => 'CHANGE'
16056 ,p_resize_flag => 'N'
16057 ,p_msg_context => 'BUDG'
16058 ,p_attribute1 => l_amg_project_rec.segment1
16059 ,p_attribute2 => ''
16060 ,p_attribute3 => p_budget_type_code
16061 ,p_attribute4 => ''
16062 ,p_attribute5 => '');
16063 END IF;
16064
16065 END IF;
16066 ELSE
16067 PA_UTILS.ADD_MESSAGE(
16068 p_app_short_name => 'PA'
16069 ,p_msg_name => 'PA_FP_CALC_REVENUE_FAILED'
16070 ,p_token1 => 'PROJECT'
16071 ,p_value1 => l_amg_project_rec.segment1
16072 ,p_token2 => 'TASK'
16073 ,p_value2 => l_task_name
16074 ,p_token3 => 'PLAN_TYPE'
16075 ,p_value3 => l_fin_plan_type_name
16076 ,p_token4 => 'SOURCE_NAME'
16077 ,p_value4 => l_resource_name_tbl(i)
16078 ,p_token5 => 'START_DATE'
16079 ,p_value5 => l_start_date_tbl(i)
16080 );
16081 END IF;
16082
16083 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_ERROR;
16084 p_multiple_task_msg := 'F';
16085 -- RAISE FND_API.G_EXC_ERROR;
16086
16087 ELSIF l_err_code < 0
16088 THEN
16089
16090 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16091 THEN
16092
16093 FND_MSG_PUB.add_exc_msg
16094 ( p_pkg_name => 'PA_CLIENT_EXTN_BUDGET'
16095 , p_procedure_name => 'CALC_REVENUE'
16096 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
16097
16098 END IF;
16099
16100 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16101 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16102
16103 END IF;
16104
16105 /* rederive the override rates */
16106 if l_fin_plan_type_id is not null then
16107 If l_version_type in ('ALL','REVENUE') Then
16108 If l_rate_based_flag_tbl(i) = 'N' Then
16109 If NVL(l_calculated_revenue,0) <> NVL(l_txn_revenue_tbl(i),0) Then
16110 l_calculated_revenue := pa_currency.round_trans_currency_amt1(l_calculated_revenue, l_txn_currency_code_tbl(i));
16111 If l_version_type = 'REVENUE' Then
16112 l_quantity_tbl(i) := l_calculated_revenue;
16113 l_display_quantity_tbl(i) := null; --IPM Arch Enhancements Bug 4865563
16114 l_bill_rate_override_tbl(i) := 1;
16115 Else
16116 If nvl(l_quantity_tbl(i),0) <> 0 Then
16117 l_bill_rate_override_tbl(i) := l_calculated_revenue/l_quantity_tbl(i);
16118 End If;
16119 End If;
16120 End If;
16121 Else
16122 If NVL(l_calculated_revenue,0) <> NVL(l_txn_revenue_tbl(i),0) Then
16123 l_calculated_revenue := pa_currency.round_trans_currency_amt1(l_calculated_revenue,l_txn_currency_code_tbl(i));
16124 If nvl(l_quantity_tbl(i),0) <> 0 Then
16125 --Bug 5006031 Issue 8
16126 If l_calculated_revenue = 0 OR l_calculated_revenue IS NULL then
16127 l_bill_rate_override_tbl(i) := 0;
16128 Else
16129 l_bill_rate_override_tbl(i) := l_calculated_revenue/l_quantity_tbl(i);
16130 End If;
16131 End If;
16132 End If;
16133 End If;
16134 End If;
16135 end if; -- if l_fin_plan_type_id is not null
16136 END IF;
16137 /* Bug 5006031 Issue 8 Start - In IPM, RC drives BC and Rev for amount based transactions
16138 So, RC cannot be null. BC is copied into RC if RC is null and BC not null.*/
16139 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 )
16140 AND (l_calculated_burdened_cost IS NOT NULL OR l_calculated_burdened_cost <> 0)) --IPM Arch Enhancments Bug 4865563
16141 THEN
16142 IF (l_txn_raw_cost_tbl(i) is null) then
16143 l_calculated_raw_cost := l_calculated_burdened_cost;
16144 IF(l_debug_mode='Y') THEN
16145 pa_debug.g_err_stage := 'Assigning BC to RC. When BC is entered by the user, BC is copied to RC ';
16146 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16147 END IF;
16148 Elsif l_txn_raw_cost_tbl(i) is not null THEN
16149 l_calculated_burdened_cost := null;
16150 l_calculated_revenue := null;
16151 IF(l_debug_mode='Y') THEN
16152 pa_debug.g_err_stage := 'When existing RC is nulled out, BC and Rev are also nulled out';
16153 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16154 END IF;
16155 End IF;
16156 END IF;
16157 /* Bug 5006031 Issue 8 End */
16158 else ----if plan_class_code = 'FORECAST' and budget_version_info_rec.etc_start_date > l_start_date_tbl(i))
16159 l_bdgt_lines_skip_flag := 'Y';
16160 end if; --if plan_class_code = 'FORECAST' and budget_version_info_rec.etc_start_date > l_start_date_tbl(i))
16161
16162
16163 -- Populate the budget lines out table with the calculated amounts.
16164
16165 p_calc_budget_lines_out(l_line_ctr).quantity := l_quantity_tbl(i);
16166 p_calc_budget_lines_out(l_line_ctr).display_quantity := l_display_quantity_tbl(i); --IPM Arch Enhancement Bug 4865563
16167 p_calc_budget_lines_out(l_line_ctr).calculated_raw_cost := l_calculated_raw_cost;
16168 p_calc_budget_lines_out(l_line_ctr).calculated_burdened_cost := l_calculated_burdened_cost;
16169 p_calc_budget_lines_out(l_line_ctr).calculated_revenue := l_calculated_revenue;
16170
16171 -- PC and PFC amounts would be populated only if update_flag = 'Y'
16172 p_calc_budget_lines_out(l_line_ctr).project_raw_cost := NULL;
16173 p_calc_budget_lines_out(l_line_ctr).project_burdened_cost := NULL;
16174 p_calc_budget_lines_out(l_line_ctr).project_revenue := NULL;
16175 p_calc_budget_lines_out(l_line_ctr).projfunc_raw_cost := NULL;
16176 p_calc_budget_lines_out(l_line_ctr).projfunc_burdened_cost := NULL;
16177 p_calc_budget_lines_out(l_line_ctr).projfunc_revenue := NULL;
16178
16179 -- Raw_cost, Burdened_cost, Revnue Pl/sql tables should be updated with the calculated amounts
16180 -- to enable mass update out of the pl/sql loop
16181
16182 l_txn_raw_cost_tbl(i) := l_calculated_raw_cost;
16183 l_txn_burdened_cost_tbl(i) := l_calculated_burdened_cost;
16184 l_txn_revenue_tbl(i) := l_calculated_revenue;
16185
16186 END LOOP; -- PL/SQL Table loop
16187
16188 -- Bulk update the budget lines if update flag is set.
16189
16190 IF p_update_db_flag = 'Y' THEN
16191 IF p_multiple_task_msg <> 'F' THEN
16192 IF l_context = l_context_budget
16193 THEN
16194 FORALL i IN l_rowid_tbl.first .. l_rowid_tbl.last
16195 UPDATE pa_budget_lines
16196 SET raw_cost = l_txn_raw_cost_tbl(i),
16197 burdened_cost = l_txn_burdened_cost_tbl(i),
16198 revenue = l_txn_revenue_tbl(i),
16199 last_update_date = SYSDATE,
16200 last_updated_by = G_USER_ID,
16201 last_update_login = G_LOGIN_ID
16202 WHERE rowid = l_rowid_tbl(i);
16203 ELSE
16204 FORALL i IN l_rowid_tbl.first .. l_rowid_tbl.last
16205 UPDATE pa_budget_lines
16206 SET quantity = l_quantity_tbl(i),
16207 display_quantity = l_display_quantity_tbl(i), --IPM Arch Enhancements Bug 4865563
16208 txn_raw_cost = l_txn_raw_cost_tbl(i),
16209 txn_burdened_cost = l_txn_burdened_cost_tbl(i),
16210 txn_revenue = l_txn_revenue_tbl(i),
16211 txn_cost_rate_override = decode(l_rw_cost_rate_override_tbl(i), null, txn_cost_rate_override,
16212 l_rw_cost_rate_override_tbl(i)),
16213 burden_cost_rate_override = decode(l_burden_cst_rate_override_tbl(i), null, burden_cost_rate_override,
16214 l_burden_cst_rate_override_tbl(i)),
16215 txn_bill_rate_override = decode (l_bill_rate_override_tbl(i), null, txn_bill_rate_override,
16216 l_bill_rate_override_tbl(i)),
16217 last_update_date = SYSDATE,
16218 last_updated_by = G_USER_ID,
16219 last_update_login = G_LOGIN_ID
16220 WHERE rowid = l_rowid_tbl(i);
16221 END IF;
16222 END IF;
16223 END IF;
16224 END IF; -- if any records are fetched
16225
16226 EXIT WHEN nvl(l_rowid_tbl.last,0) < l_plsql_max_array_size;
16227 END LOOP;
16228 CLOSE l_resource_assignment_csr;
16229
16230 IF p_multiple_task_msg = 'F'
16231 THEN
16232 RAISE FND_API.G_EXC_ERROR;
16233 END IF;
16234
16235 IF p_update_db_flag = 'Y' THEN
16236
16237 IF l_context = l_context_budget THEN --Bug 2863564
16238
16239 -- Bug 2863564
16240 -- Call to MRC apis should be done only in case of old 'BUDGETS' model
16241 -- for NEW Financial Planning Model, this would be taken care by
16242 -- the api pa_fp_edit_line_pkg. PROCESS_BDGTLINES_FOR_VERSION
16243
16244 -- Bug Fix: 4569365. Removed MRC code.
16245 /*
16246 IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS IS NULL
16247 THEN
16248 PA_MRC_FINPLAN.CHECK_MRC_INSTALL
16249 (x_return_status => p_return_status,
16250 x_msg_count => p_msg_count,
16251 x_msg_data => p_msg_data);
16252 END IF;
16253
16254 IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS AND
16255 PA_MRC_FINPLAN.G_FINPLAN_MRC_OPTION_CODE = 'A'
16256 THEN
16257 PA_MRC_FINPLAN.MAINTAIN_ALL_MC_BUDGET_LINES
16258 ( p_fin_plan_version_id => l_budget_version_id
16259 ,p_entire_version => 'Y'
16260 ,x_return_status => p_return_status
16261 ,x_msg_count => p_msg_count
16262 ,x_msg_data => p_msg_data);
16263 END IF;
16264
16265 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16266 IF(l_debug_mode='Y') THEN
16267 pa_debug.g_err_stage := 'MRC failed';
16268 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16269 END IF;
16270 RAISE FND_API.G_EXC_ERROR;
16271 END IF;
16272 */
16273 --Summarizing the totals in the table pa_budget_versions
16274
16275 PA_BUDGET_UTILS.summerize_project_totals
16276 (x_budget_version_id => l_budget_version_id,
16277 x_err_code => l_err_code,
16278 x_err_stage => l_err_stage,
16279 x_err_stack => l_err_stack);
16280
16281 IF l_err_code > 0
16282 THEN
16283
16284 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16285 THEN
16286
16287 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
16288 THEN
16289 pa_interface_utils_pub.map_new_amg_msg
16290 ( p_old_message_code => 'PA_SUMMERIZE_TOTALS_FAILED'
16291 ,p_msg_attribute => 'CHANGE'
16292 ,p_resize_flag => 'N'
16293 ,p_msg_context => 'BUDG'
16294 ,p_attribute1 => l_amg_project_rec.segment1
16295 ,p_attribute2 => ''
16296 ,p_attribute3 => p_budget_type_code
16297 ,p_attribute4 => ''
16298 ,p_attribute5 => '');
16299 ELSE
16300 pa_interface_utils_pub.map_new_amg_msg
16301 ( p_old_message_code => l_err_stage
16302 ,p_msg_attribute => 'CHANGE'
16303 ,p_resize_flag => 'N'
16304 ,p_msg_context => 'BUDG'
16305 ,p_attribute1 => l_amg_project_rec.segment1
16306 ,p_attribute2 => ''
16307 ,p_attribute3 => p_budget_type_code
16308 ,p_attribute4 => ''
16309 ,p_attribute5 => '');
16310 END IF;
16311
16312 END IF;
16313
16314 IF(l_debug_mode='Y') THEN
16315 pa_debug.g_err_stage := 'summerize_project_totals api failed';
16316 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16317 END IF;
16318
16319 RAISE FND_API.G_EXC_ERROR;
16320
16321 ELSIF l_err_code < 0
16322 THEN
16323
16324 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16325 THEN
16326
16327 FND_MSG_PUB.add_exc_msg
16328 ( p_pkg_name => 'PA_BUDGET_UTILS'
16329 , p_procedure_name => 'SUMMERIZE_PROJECT_TOTALS'
16330 , p_error_text => 'ORA-'||LPAD(substr(l_err_code,2),5,'0') );
16331
16332 END IF;
16333
16334 IF(l_debug_mode='Y') THEN
16335 pa_debug.g_err_stage := 'summerize_project_totals api failed with unexpected error ';
16336 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16337 END IF;
16338 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16339
16340 END IF;
16341
16342 ELSIF l_context = l_context_finplan THEN
16343
16344 -- Bug 2863564
16345 -- Call 'PROCESS_BDGTLINES_FOR_VERSION' api
16346 -- This api does the final processing of budget lines data for a budget version.
16347 -- It includes computing the MC amounts, creating MRC lines if required and
16348 -- rolling up budget lines data, resource_assignments data and period denorm data.
16349
16350 /* PA_FP_EDIT_LINE_PKG.PROCESS_BDGTLINES_FOR_VERSION
16351 ( p_budget_version_id => l_budget_version_id
16352 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN
16353 ,x_return_status => p_return_status
16354 ,x_msg_count => p_msg_count
16355 ,x_msg_data => p_msg_data );
16356
16357 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16358 -- Error message is not added here as the api lock_unlock_version
16359 -- adds the message to stack
16360 IF(l_debug_mode='Y') THEN
16361 pa_debug.g_err_stage := 'Failed in locking the version';
16362 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16363 END IF;
16364 RAISE FND_API.G_EXC_ERROR;
16365 END IF;*/
16366
16367 /* Call PA_FP_MULTI_CURRENCY_PKG.CONVERT_TXN_CURRENCY for the MC conversions. */
16368
16369
16370 PA_FP_MULTI_CURRENCY_PKG.CONVERT_TXN_CURRENCY
16371 ( p_budget_version_id => l_budget_version_id
16372 ,p_entire_version => 'Y'
16373 ,x_return_status => p_return_status
16374 ,x_msg_count => p_msg_count
16375 ,x_msg_data => p_msg_data);
16376
16377 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16378 IF l_debug_mode = 'Y' THEN
16379 pa_debug.g_err_stage := 'Call to PA_FP_MULTI_CURRENCY_PKG.CONVERT_TXN_CURRENCY errored... ';
16380 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16381 END IF;
16382 RAISE FND_API.G_EXC_ERROR;
16383 END IF;
16384
16385 --IPM Architecture Enhancement - Start
16386
16387 PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DTLS
16388 (P_BUDGET_VERSION_ID => l_budget_version_id,
16389 X_FP_COLS_REC => l_fp_cols_rec,
16390 X_RETURN_STATUS => p_return_status,
16391 X_MSG_COUNT => p_msg_count,
16392 X_MSG_DATA => p_msg_data);
16393
16394 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16395 IF l_debug_mode = 'Y' THEN
16396 pa_debug.g_err_stage:= 'Error in PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DETAILS';
16397 pa_debug.write(g_module_name,pa_debug.g_err_stage,l_debug_level5);
16398 END IF;
16399 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
16400 END IF;
16401
16402 pa_res_asg_currency_pub.maintain_data
16403 (p_fp_cols_rec => l_fp_cols_rec,
16404 p_calling_module => 'AMG_API',
16405 p_rollup_flag => 'Y',
16406 p_version_level_flag => 'Y',
16407 x_return_status => p_return_status,
16408 x_msg_data => p_msg_data,
16409 x_msg_count => p_msg_count );
16410
16411 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16412 IF l_debug_mode = 'Y' THEN
16413 pa_debug.g_err_stage:= 'Error in PA_RES_ASG_CURRENCY_PUB.MAINTAIN_DATA';
16414 pa_debug.write(g_module_name,pa_debug.g_err_stage,l_debug_level5);
16415 END IF;
16416 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
16417 END IF;
16418
16419 --IPM Architecture Enhancement - End
16420
16421 /* Call the rollup API to rollup the amounts. */
16422 PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION(
16423 p_budget_version_id => l_budget_version_id
16424 ,p_entire_version => 'Y'
16425 ,x_return_status => p_return_status
16426 ,x_msg_count => p_msg_count
16427 ,x_msg_data => p_msg_data ) ;
16428
16429
16430 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16431 IF l_debug_mode = 'Y' THEN
16432 pa_debug.g_err_stage := 'Call to PA_FP_ROLLUP_PKG errored... ';
16433 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16434 END IF;
16435 RAISE FND_API.G_EXC_ERROR;
16436 END IF;
16437 -- Bug Fix: 4569365. Removed MRC code.
16438 /* Check if MRC is enabled and Call MRC API */
16439 /*
16440 IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS IS NULL THEN
16441 PA_MRC_FINPLAN.CHECK_MRC_INSTALL
16442 (x_return_status => p_return_status,
16443 x_msg_count => p_msg_count,
16444 x_msg_data => p_msg_data);
16445 END IF;
16446
16447 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16448 IF l_debug_mode = 'Y' THEN
16449 pa_debug.g_err_stage := 'Unexpected exception in checking MRC Install '||sqlerrm;
16450 pa_debug.write('Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16451 END IF;
16452 RAISE FND_API.G_EXC_ERROR;
16453 END IF;
16454
16455 IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS AND
16456 PA_MRC_FINPLAN.G_FINPLAN_MRC_OPTION_CODE = 'A' THEN
16457
16458 PA_MRC_FINPLAN.MAINTAIN_ALL_MC_BUDGET_LINES
16459 (p_fin_plan_version_id => l_budget_version_id,
16460 p_entire_version => 'Y',
16461 x_return_status => p_return_status,
16462 x_msg_count => p_msg_count,
16463 x_msg_data => p_msg_data);
16464 END IF;
16465
16466 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16467 IF l_debug_mode = 'Y' THEN
16468 pa_debug.g_err_stage := 'Unexpected exception in MRC API '||sqlerrm;
16469 pa_debug.write('Calculate_Amounts: ' || l_module_name,pa_debug.g_err_stage,l_debug_level5);
16470 END IF;
16471 RAISE FND_API.G_EXC_ERROR;
16472 END IF;
16473 */
16474
16475 -- populating the l_budget_version_id_tbl with p_budget_version_id
16476 l_budget_version_id_tbl := SYSTEM.pa_num_tbl_type(l_budget_version_id);
16477
16478 -- Call PJI delete api first to delete existing summarization data
16479 PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE (
16480 p_fp_version_ids => l_budget_version_id_tbl,
16481 x_return_status => p_return_status,
16482 x_msg_code => p_msg_data);
16483
16484 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16485 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16486 p_msg_name => p_msg_data);
16487 RAISE FND_API.G_EXC_ERROR;
16488 END IF;
16489
16490 -- Call PLAN_CREATE to create summarization data as per the new RBS
16491 PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE (
16492 p_fp_version_ids => l_budget_version_id_tbl,
16493 x_return_status => p_return_status,
16494 x_msg_code => p_msg_data);
16495
16496 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16497 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16498 p_msg_name => p_msg_data);
16499 RAISE FND_API.G_EXC_ERROR;
16500 END IF;
16501
16502
16503 -- Bug 2863564 We need to unlock the version
16504
16505 -- Fetch the record version number of the plan version
16506 l_record_version_number :=
16507 PA_FIN_PLAN_UTILS.RETRIEVE_RECORD_VERSION_NUMBER(l_budget_version_id);
16508
16509 PA_FIN_PLAN_PVT.LOCK_UNLOCK_VERSION
16510 ( p_budget_version_id => l_budget_version_id
16511 ,p_record_version_number => l_record_version_number
16512 ,p_action => 'U'
16513 ,p_user_id => FND_GLOBAL.User_id
16514 ,p_person_id => NULL
16515 ,x_return_status => p_return_status
16516 ,x_msg_count => p_msg_count
16517 ,x_msg_data => p_msg_data);
16518
16519 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
16520 -- Error message is not added here as the api lock_unlock_version
16521 -- adds the message to stack
16522 IF(l_debug_mode='Y') THEN
16523 pa_debug.g_err_stage := 'Failed in Unlocking the version';
16524 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16525 END IF;
16526 RAISE FND_API.G_EXC_ERROR;
16527 END IF;
16528
16529 -- We need to populate the PC, PFC amounts also in the OUT table
16530 -- in the context of new budgets model. So, open the
16531 -- resource_assignments_cur and repopulate the complete data.
16532 -- NOTE: If there had been any error in the calculation of amounts
16533 -- by the client extension apis, error would have been raised by now
16534 -- Since the program execution has come till here, we can populate
16535 -- return status success for each budget line fetched.
16536
16537 -- Delete the existing data
16538 p_calc_budget_lines_out.delete;
16539
16540 -- Intialise l_line_ctr to zero once again
16541 l_line_ctr := 0;
16542
16543 OPEN l_resource_assignment_csr (l_budget_version_id,l_context);
16544 LOOP
16545
16546 FETCH l_resource_assignment_csr BULK COLLECT INTO
16547 l_rowid_tbl
16548 ,l_budget_line_id_tbl
16549 ,l_txn_currency_code_tbl
16550 ,l_res_assignment_id_tbl
16551 ,l_task_id_tbl
16552 ,l_rate_based_flag_tbl
16553 ,l_resource_list_id_tbl
16554 ,l_resource_list_member_id_tbl
16555 ,l_resource_id_tbl
16556 ,l_resource_name_tbl
16557 ,l_start_date_tbl
16558 ,l_end_date_tbl
16559 ,l_period_name_tbl
16560 ,l_quantity_tbl
16561 ,l_display_quantity_tbl --IPM Arch Enhancement Bug 4865563
16562 ,l_txn_raw_cost_tbl
16563 ,l_txn_burdened_cost_tbl
16564 ,l_txn_revenue_tbl
16565 ,l_project_raw_cost_tbl
16566 ,l_project_burdened_cost_tbl
16567 ,l_project_revenue_tbl
16568 ,l_projfunc_raw_cost_tbl
16569 ,l_projfunc_burdened_cost_tbl
16570 ,l_projfunc_revenue_tbl
16571 LIMIT l_plsql_max_array_size;
16572
16573 IF(l_debug_mode='Y') THEN
16574 pa_debug.g_err_stage := 'fetched ' || sql%rowcount || ' records';
16575 pa_debug.write( 'Calculate_Amounts'||g_module_name,pa_debug.g_err_stage,l_debug_level5);
16576 END IF;
16577
16578 IF NVL(l_rowid_tbl.last,0) >= 1 THEN
16579 FOR i IN l_rowid_tbl.first .. l_rowid_tbl.last
16580 LOOP
16581
16582 l_line_ctr := l_line_ctr + 1;
16583
16584 p_calc_budget_lines_out(l_line_ctr).pa_task_id := l_task_id_tbl(i);
16585 p_calc_budget_lines_out(l_line_ctr).pm_task_reference := l_pm_task_reference;
16586 p_calc_budget_lines_out(l_line_ctr).resource_alias := l_resource_name_tbl(i);
16587 p_calc_budget_lines_out(l_line_ctr).resource_list_member_id := l_resource_list_member_id_tbl(i);
16588 p_calc_budget_lines_out(l_line_ctr).budget_start_date := l_start_date_tbl(i);
16589 p_calc_budget_lines_out(l_line_ctr).budget_end_date := l_end_date_tbl(i);
16590 p_calc_budget_lines_out(l_line_ctr).period_name := l_period_name_tbl(i);
16591 p_calc_budget_lines_out(l_line_ctr).quantity := l_quantity_tbl(i);
16592 p_calc_budget_lines_out(l_line_ctr).display_quantity := l_display_quantity_tbl(i); --IPM Arch Enhancement Bug 4865563
16593 p_calc_budget_lines_out(l_line_ctr).txn_currency_code := l_txn_currency_code_tbl(i);
16594 p_calc_budget_lines_out(l_line_ctr).return_status := FND_API.G_RET_STS_SUCCESS;
16595 p_calc_budget_lines_out(l_line_ctr).calculated_raw_cost := l_txn_raw_cost_tbl(i);
16596 p_calc_budget_lines_out(l_line_ctr).calculated_burdened_cost := l_txn_burdened_cost_tbl(i);
16597 p_calc_budget_lines_out(l_line_ctr).calculated_revenue := l_txn_revenue_tbl(i);
16598 p_calc_budget_lines_out(l_line_ctr).project_raw_cost := l_project_raw_cost_tbl(i);
16599 p_calc_budget_lines_out(l_line_ctr).project_burdened_cost := l_project_burdened_cost_tbl(i);
16600 p_calc_budget_lines_out(l_line_ctr).project_revenue := l_project_revenue_tbl(i);
16601 p_calc_budget_lines_out(l_line_ctr).projfunc_raw_cost := l_projfunc_raw_cost_tbl(i);
16602 p_calc_budget_lines_out(l_line_ctr).projfunc_burdened_cost := l_projfunc_burdened_cost_tbl(i);
16603 p_calc_budget_lines_out(l_line_ctr).projfunc_revenue := l_projfunc_revenue_tbl(i);
16604
16605 END LOOP;
16606 END IF;
16607
16608 EXIT WHEN NVL(l_rowid_tbl.last,0) < l_plsql_max_array_size;
16609 END LOOP;
16610 CLOSE l_resource_assignment_csr;
16611 END IF;
16612
16613 END IF;
16614
16615 if( l_bdgt_lines_skip_flag = 'Y')
16616 then
16617 PA_UTILS.ADD_MESSAGE
16618 ( p_app_short_name => 'PA'
16619 ,p_msg_name => 'PA_FP_ETC_BL_DATE'
16620 );
16621 end if;
16622
16623
16624 IF FND_API.TO_BOOLEAN( p_commit )
16625 THEN
16626 COMMIT;
16627 END IF;
16628
16629 EXCEPTION
16630
16631 WHEN FND_API.G_EXC_ERROR
16632 THEN
16633 ROLLBACK TO calculate_amounts_pub;
16634
16635 p_return_status := FND_API.G_RET_STS_ERROR;
16636
16637 FND_MSG_PUB.Count_And_Get
16638 (p_count => p_msg_count ,
16639 p_data => p_msg_data );
16640
16641 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
16642 THEN
16643
16644 ROLLBACK TO calculate_amounts_pub;
16645
16646 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16647
16648 FND_MSG_PUB.Count_And_Get
16649 (p_count => p_msg_count ,
16650 p_data => p_msg_data );
16651 WHEN OTHERS
16652 THEN
16653 ROLLBACK TO calculate_amounts_pub;
16654
16655 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16656
16657 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16658 THEN
16659 FND_MSG_PUB.add_exc_msg
16660 ( p_pkg_name => G_PKG_NAME
16661 ,p_procedure_name => l_api_name );
16662 END IF;
16663
16664 FND_MSG_PUB.Count_And_Get
16665 (p_count => p_msg_count ,
16666 p_data => p_msg_data );
16667
16668 END Calculate_Amounts;
16669
16670
16671 ----------------------------------------------------------------------------------------
16672 --Name: Init_Calculate_Amounts
16673 --Type: Procedure
16674 --Description: This procedure can be used to as part of load/exec/fetch concept
16675 --
16676 --
16677 --Called subprograms:
16678 --
16679 --
16680 --
16681 --
16682 --History:
16683 -- AUTUMN-1996 R. Krishnamurthy Created
16684 --
16685 --
16686 PROCEDURE Init_Calculate_Amounts IS
16687 BEGIN
16688 FND_MSG_PUB.Initialize;
16689 -- Initialize global table and record types
16690 G_calc_budget_lines_tbl_count := 0;
16691 G_calc_budget_lines_out_tbl.delete;
16692 END Init_Calculate_Amounts;
16693
16694
16695 ----------------------------------------------------------------------------------------
16696 --Name: Execute_Calculate_Amounts
16697 --Type: Procedure
16698 --Description: This procedure can be used to as part of load/exec/fetch concept
16699 --
16700 --
16701 --Called subprograms:
16702 --
16703 --
16704 --
16705 --
16706 --History:
16707 -- AUTUMN-1996 R. Krishnamurthy Created
16708 -- 25-MAR-2003 Rajagopal Modified for New Fin Plan Model
16709 --
16710 PROCEDURE Execute_Calculate_Amounts
16711 ( p_api_version_number IN NUMBER
16712 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
16713 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
16714 ,p_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
16715 ,p_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16716 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16717 ,p_tot_budget_lines_calculated OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
16718 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16719 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16720 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16721 ,p_budget_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16722 ,p_calc_raw_cost_yn IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16723 ,p_calc_burdened_cost_yn IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16724 ,p_calc_revenue_yn IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16725 ,p_update_db_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16726 -- Bug 2863564 Parameters required for new Fin Plan Model
16727 ,p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE
16728 ,p_fin_plan_type_id IN pa_fin_plan_types_b.fin_plan_type_id%TYPE
16729 ,p_fin_plan_type_name IN pa_fin_plan_types_tl.name%TYPE
16730 ,p_version_type IN pa_budget_versions.version_type%TYPE
16731 ,p_budget_version_number IN pa_budget_versions.version_number%TYPE
16732 ) IS
16733
16734 l_api_name CONSTANT VARCHAR2(30) := 'Execute_Calculate_Amounts';
16735 --Bug 2863564 l_return_status VARCHAR2(1);
16736
16737 BEGIN
16738 -- Standard begin of API savepoint
16739 SAVEPOINT execute_calculate_amounts;
16740
16741 -- Standard call to check for call compatibility.
16742
16743 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
16744 p_api_version_number ,
16745 l_api_name ,
16746 G_PKG_NAME )
16747 THEN
16748 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16749 END IF;
16750 -- Initialize the message table if requested.
16751
16752 IF FND_API.TO_BOOLEAN( p_init_msg_list )
16753 THEN
16754 FND_MSG_PUB.initialize;
16755 END IF;
16756 -- Set API return status to success
16757 p_return_status := FND_API.G_RET_STS_SUCCESS;
16758 p_tot_budget_lines_calculated := 0;
16759
16760 Calculate_Amounts
16761 ( p_api_version_number => p_api_version_number
16762 ,p_commit => p_commit
16763 ,p_init_msg_list => p_init_msg_list
16764 ,p_msg_count => p_msg_count
16765 ,p_msg_data => p_msg_data
16766 ,p_return_status => p_return_status
16767 ,p_pm_product_code => p_pm_product_code
16768 ,p_pa_project_id => p_pa_project_id
16769 ,p_pm_project_reference => p_pm_project_reference
16770 ,p_budget_type_code => p_budget_type_code
16771 ,p_calc_raw_cost_yn => p_calc_raw_cost_yn
16772 ,p_calc_burdened_cost_yn => p_calc_burdened_cost_yn
16773 ,p_calc_revenue_yn => p_calc_revenue_yn
16774 ,p_update_db_flag => p_update_db_flag
16775 ,p_calc_budget_lines_out => G_calc_budget_lines_out_tbl
16776 -- Bug 2863564 new parameters added
16777 ,p_fin_plan_type_name => p_fin_plan_type_name
16778 ,p_fin_plan_type_id => p_fin_plan_type_id
16779 ,p_budget_version_number => p_budget_version_number
16780 ,p_version_type => p_version_type
16781 ,p_budget_version_id => p_budget_version_id
16782 );
16783
16784
16785 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16786 THEN
16787
16788 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16789
16790 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
16791 THEN
16792 RAISE FND_API.G_EXC_ERROR;
16793 END IF;
16794
16795 IF G_calc_budget_lines_out_tbl.EXISTS(1) THEN
16796 p_tot_budget_lines_calculated := G_calc_budget_lines_out_tbl.COUNT;
16797 END IF;
16798
16799 IF fnd_api.to_boolean(p_commit) THEN
16800 COMMIT;
16801 END IF;
16802 EXCEPTION
16803 WHEN FND_API.G_EXC_ERROR THEN
16804 ROLLBACK TO execute_calculate_amounts;
16805 p_return_status := FND_API.G_RET_STS_ERROR;
16806 FND_MSG_PUB.Count_And_Get
16807 ( p_count => p_msg_count ,
16808 p_data => p_msg_data );
16809 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
16810 ROLLBACK TO execute_calculate_amounts;
16811 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16812 FND_MSG_PUB.Count_And_Get
16813 ( p_count => p_msg_count ,
16814 p_data => p_msg_data );
16815 WHEN OTHERS THEN
16816 ROLLBACK TO execute_calculate_amounts;
16817 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16818 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16819 THEN
16820 FND_MSG_PUB.add_exc_msg
16821 ( p_pkg_name => G_PKG_NAME
16822 , p_procedure_name => l_api_name );
16823 END IF;
16824
16825 FND_MSG_PUB.Count_And_Get
16826 ( p_count => p_msg_count ,
16827 p_data => p_msg_data );
16828 END Execute_Calculate_Amounts;
16829
16830
16831 ----------------------------------------------------------------------------------------
16832 --Name: fetch_calculate_amounts
16833 --Type: Procedure
16834 --Description: This procedure can be used to as part of load/exec/fetch concept
16835 --
16836 --
16837 --Called subprograms:
16838 --
16839 --
16840 --
16841 --
16842 --History:
16843 -- AUTUMN-1996 R. Krishnamurthy Created
16844 --
16845 --
16846 PROCEDURE fetch_calculate_amounts
16847 ( p_api_version_number IN NUMBER
16848 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
16849 ,p_line_index IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16850 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16851 ,p_pa_task_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
16852 ,p_pm_task_reference OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16853 ,p_budget_start_date OUT NOCOPY DATE --File.Sql.39 bug 4440895
16854 ,p_budget_end_date OUT NOCOPY DATE --File.Sql.39 bug 4440895
16855 ,p_period_name OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16856 ,p_resource_list_member_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
16857 ,p_quantity OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
16858 ,p_resource_alias OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16859 ,p_calculated_raw_cost OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
16860 ,p_calculated_burdened_cost OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
16861 ,p_calculated_revenue OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
16862 ,p_line_return_status OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
16863
16864 l_api_name CONSTANT VARCHAR2(30) := 'fetch_calculate_amounts';
16865
16866 l_index NUMBER;
16867 i NUMBER;
16868
16869 BEGIN
16870
16871 -- Standard call to check for call compatibility.
16872
16873 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
16874 p_api_version_number ,
16875 l_api_name ,
16876 G_PKG_NAME )
16877 THEN
16878
16879 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16880
16881 END IF;
16882
16883 -- Initialize the message table if requested.
16884
16885 IF FND_API.TO_BOOLEAN( p_init_msg_list )
16886 THEN
16887
16888 FND_MSG_PUB.initialize;
16889
16890 END IF;
16891
16892 -- Set API return status to success
16893
16894 p_return_status := FND_API.G_RET_STS_SUCCESS;
16895
16896 -- Check index value,
16897 -- when they don't provide an index we will error out
16898
16899 IF p_line_index = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16900 OR p_line_index IS NULL
16901 THEN
16902 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16903 THEN
16904 pa_interface_utils_pub.map_new_amg_msg
16905 ( p_old_message_code => 'PA_BUGDET_LINE_INDEX_MISSING'
16906 ,p_msg_attribute => 'CHANGE'
16907 ,p_resize_flag => 'Y'
16908 ,p_msg_context => 'GENERAL'
16909 ,p_attribute1 => ''
16910 ,p_attribute2 => ''
16911 ,p_attribute3 => ''
16912 ,p_attribute4 => ''
16913 ,p_attribute5 => '');
16914 END IF;
16915
16916 p_return_status := FND_API.G_RET_STS_ERROR;
16917 RAISE FND_API.G_EXC_ERROR;
16918 ELSE
16919 l_index := p_line_index;
16920 END IF;
16921
16922 -- Fix: 03-FEB-97, jwhite
16923 -- Changed references to correct global table -------------------------------
16924
16925 --assign global table fields to the outgoing parameter
16926 IF G_calc_budget_lines_out_tbl.EXISTS(l_index) THEN
16927 p_pa_task_id := G_calc_budget_lines_out_tbl(l_index).pa_task_id;
16928 p_pm_task_reference :=
16929 G_calc_budget_lines_out_tbl(l_index).pm_task_reference;
16930 p_budget_start_date :=
16931 G_calc_budget_lines_out_tbl(l_index).budget_start_date;
16932 p_budget_end_date := G_calc_budget_lines_out_tbl(l_index).budget_end_date;
16933 p_period_name := G_calc_budget_lines_out_tbl(l_index).period_name;
16934 p_resource_list_member_id := G_calc_budget_lines_out_tbl(l_index).resource_list_member_id;
16935 p_quantity := G_calc_budget_lines_out_tbl(l_index).quantity;
16936 p_resource_alias := G_calc_budget_lines_out_tbl(l_index).resource_alias;
16937 p_calculated_raw_cost :=
16938 G_calc_budget_lines_out_tbl(l_index).calculated_raw_cost;
16939 p_calculated_burdened_cost :=
16940 G_calc_budget_lines_out_tbl(l_index).calculated_burdened_cost;
16941 p_calculated_revenue :=
16942 G_calc_budget_lines_out_tbl(l_index).calculated_revenue;
16943 p_line_return_status := G_calc_budget_lines_out_tbl(l_index).return_status;
16944
16945 END IF;
16946 -- ----------------------------------------------------------------------------------------
16947
16948 EXCEPTION
16949
16950 WHEN FND_API.G_EXC_ERROR
16951 THEN
16952 p_return_status := FND_API.G_RET_STS_ERROR;
16953
16954 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
16955 THEN
16956
16957 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16958
16959 WHEN OTHERS THEN
16960
16961 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16962
16963 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
16964 THEN
16965 FND_MSG_PUB.add_exc_msg
16966 ( p_pkg_name => G_PKG_NAME
16967 , p_procedure_name => l_api_name );
16968
16969 END IF;
16970
16971 END fetch_calculate_amounts;
16972
16973
16974 ----------------------------------------------------------------------------------------
16975 --Name: Clear_Calculate_Amounts
16976 --Type: Procedure
16977 --Description: This procedure can be used to as part of load/exec/fetch concept
16978 --
16979 --
16980 --Called subprograms:
16981 --
16982 --
16983 --
16984 --
16985 --History:
16986 -- AUTUMN-1996 R. Krishnamurthy Created
16987 --
16988 --
16989 PROCEDURE Clear_Calculate_Amounts IS
16990 BEGIN
16991 Init_Calculate_Amounts;
16992 END Clear_Calculate_Amounts;
16993
16994 ----------------------------------------------------------------------------------------
16995 --Name: fetch_calculate_amounts
16996 --Type: Procedure
16997 --Description: This procedure can be used to as part of load/exec/fetch concept
16998 --
16999 --
17000 --Called subprograms:
17001 -- fetch_calculate_amounts
17002 --
17003 --History:
17004 -- 24-MAR-2003 Rajagopal Created
17005 --
17006 PROCEDURE fetch_calculate_amounts
17007 ( p_api_version_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17008 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
17009 ,p_line_index IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17010 ,p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17011 ,p_pa_task_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17012 ,p_pm_task_reference OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17013 ,p_budget_start_date OUT NOCOPY DATE --File.Sql.39 bug 4440895
17014 ,p_budget_end_date OUT NOCOPY DATE --File.Sql.39 bug 4440895
17015 ,p_period_name OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17016 ,p_resource_list_member_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17017 ,p_quantity OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17018 ,p_resource_alias OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17019 ,p_calculated_raw_cost OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17020 ,p_calculated_burdened_cost OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17021 ,p_calculated_revenue OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17022 ,p_line_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17023 ,p_txn_currency_code OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17024 ,p_project_raw_cost OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17025 ,p_project_burdened_cost OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17026 ,p_project_revenue OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17027 ,p_projfunc_raw_cost OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17028 ,p_projfunc_burdened_cost OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17029 ,p_projfunc_revenue OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17030 ,p_display_quantity OUT NOCOPY NUMBER --IPM Arch Enhancement Bug 4865563
17031 ) IS
17032
17033 l_api_name CONSTANT VARCHAR2(30) := 'fetch_calculate_amounts';
17034
17035 BEGIN
17036 p_return_status := FND_API.G_RET_STS_SUCCESS;
17037
17038 -- Call the existing fetch_calculate_amounts api
17039
17040 PA_BUDGET_PUB.fetch_calculate_amounts
17041 ( p_api_version_number => p_api_version_number
17042 ,p_init_msg_list => p_init_msg_list
17043 ,p_line_index => p_line_index
17044 ,p_return_status => p_return_status
17045 ,p_pa_task_id => p_pa_task_id
17046 ,p_pm_task_reference => p_pm_task_reference
17047 ,p_budget_start_date => p_budget_start_date
17048 ,p_budget_end_date => p_budget_end_date
17049 ,p_period_name => p_period_name
17050 ,p_resource_list_member_id => p_resource_list_member_id
17051 ,p_quantity => p_quantity
17052 ,p_resource_alias => p_resource_alias
17053 ,p_calculated_raw_cost => p_calculated_raw_cost
17054 ,p_calculated_burdened_cost => p_calculated_burdened_cost
17055 ,p_calculated_revenue => p_calculated_revenue
17056 ,p_line_return_status => p_line_return_status );
17057
17058 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17059
17060 RAISE FND_API.G_EXC_ERROR;
17061
17062 END IF;
17063
17064 -- Fetch the txn currency code of the budget line
17065
17066 IF G_calc_budget_lines_out_tbl.EXISTS(p_line_index) THEN
17067
17068 p_txn_currency_code := G_calc_budget_lines_out_tbl(p_line_index).txn_currency_code;
17069 p_project_raw_cost := G_calc_budget_lines_out_tbl(p_line_index).project_raw_cost;
17070 p_project_burdened_cost := G_calc_budget_lines_out_tbl(p_line_index).project_burdened_cost ;
17071 p_project_revenue := G_calc_budget_lines_out_tbl(p_line_index).project_revenue;
17072 p_projfunc_raw_cost := G_calc_budget_lines_out_tbl(p_line_index).projfunc_raw_cost;
17073 p_projfunc_burdened_cost := G_calc_budget_lines_out_tbl(p_line_index).projfunc_burdened_cost;
17074 p_projfunc_revenue := G_calc_budget_lines_out_tbl(p_line_index).projfunc_revenue;
17075 p_display_quantity := G_calc_budget_lines_out_tbl(p_line_index).display_quantity; --IPM Arch Enhancement Bug 4865563
17076
17077 END IF;
17078
17079 EXCEPTION
17080
17081 WHEN FND_API.G_EXC_ERROR
17082 THEN
17083 p_return_status := FND_API.G_RET_STS_ERROR;
17084
17085 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
17086 THEN
17087
17088 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17089
17090 WHEN OTHERS THEN
17091
17092 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17093
17094 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
17095 THEN
17096 FND_MSG_PUB.add_exc_msg
17097 ( p_pkg_name => G_PKG_NAME
17098 ,p_procedure_name => l_api_name );
17099
17100 END IF;
17101 END fetch_calculate_amounts;
17102
17103 PROCEDURE CREATE_DRAFT_FINPLAN
17104 ( p_api_version_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17105 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
17106 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
17107 ,p_pm_product_code IN pa_budget_versions.pm_product_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17108 ,p_pm_finplan_reference IN pa_budget_versions.pm_budget_reference%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17109 ,p_pm_project_reference IN pa_projects_all. PM_PROJECT_REFERENCE%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17110 ,p_pa_project_id IN pa_budget_versions.project_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17111 ,p_fin_plan_type_id IN pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17112 ,p_fin_plan_type_name IN pa_fin_plan_types_vl.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17113 ,p_version_type IN pa_budget_versions.version_type%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17114 ,p_time_phased_code IN pa_proj_fp_options.cost_time_phased_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17115 ,p_resource_list_name IN pa_resource_lists.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17116 ,p_resource_list_id IN pa_budget_versions.resource_list_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17117 ,p_fin_plan_level_code IN pa_proj_fp_options.cost_fin_plan_level_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17118 ,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
17119 ,p_budget_version_name IN pa_budget_versions.version_name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17120 ,p_description IN pa_budget_versions.description%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17121 ,p_change_reason_code IN pa_budget_versions.change_reason_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17122 ,p_raw_cost_flag IN pa_fin_plan_amount_sets.raw_cost_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17123 ,p_burdened_cost_flag IN pa_fin_plan_amount_sets.burdened_cost_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17124 ,p_revenue_flag IN pa_fin_plan_amount_sets.revenue_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17125 ,p_cost_qty_flag IN pa_fin_plan_amount_sets.cost_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17126 ,p_revenue_qty_flag IN pa_fin_plan_amount_sets.revenue_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17127 ,p_all_qty_flag IN pa_fin_plan_amount_sets.all_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17128 ,p_create_new_curr_working_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17129 ,p_replace_current_working_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17130 ,p_using_resource_lists_flag IN VARCHAR2 DEFAULT 'N'
17131 ,p_finplan_trans_tab IN pa_budget_pub.FinPlan_Trans_Tab
17132 ,p_attribute_category IN pa_budget_versions.attribute_category%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17133 ,p_attribute1 IN pa_budget_versions.attribute1%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17134 ,p_attribute2 IN pa_budget_versions.attribute2%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17135 ,p_attribute3 IN pa_budget_versions.attribute3%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17136 ,p_attribute4 IN pa_budget_versions.attribute4%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17137 ,p_attribute5 IN pa_budget_versions.attribute5%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17138 ,p_attribute6 IN pa_budget_versions.attribute6%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17139 ,p_attribute7 IN pa_budget_versions.attribute7%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17140 ,p_attribute8 IN pa_budget_versions.attribute8%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17141 ,p_attribute9 IN pa_budget_versions.attribute9%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17142 ,p_attribute10 IN pa_budget_versions.attribute10%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17143 ,p_attribute11 IN pa_budget_versions.attribute11%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17144 ,p_attribute12 IN pa_budget_versions.attribute12%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17145 ,p_attribute13 IN pa_budget_versions.attribute13%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17146 ,p_attribute14 IN pa_budget_versions.attribute14%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17147 ,p_attribute15 IN pa_budget_versions.attribute15%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17148 ,x_finplan_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17149 ,x_return_status OUT NOCOPY VARCHAR2
17150 ,x_msg_count OUT NOCOPY NUMBER
17151 ,x_msg_data OUT NOCOPY VARCHAR2
17152 )
17153 IS
17154
17155
17156 /* SCALAR VARIABLES */
17157 l_task_number pa_tasks.task_number%TYPE;
17158 l_fp_options_id pa_proj_fp_options.proj_fp_options_id%TYPE;
17159 l_baselined_version_id pa_budget_versions.budget_version_id%TYPE;
17160 l_curr_work_version_id pa_budget_versions.budget_version_id%TYPE;
17161 l_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
17162 l_struct_elem_version_id pa_proj_elem_ver_structure.element_version_id%TYPE;
17163 l_cost_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
17164 l_rev_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
17165 l_all_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
17166 l_created_version_id pa_budget_versions.budget_version_id%TYPE;
17167 l_plan_pref_code pa_proj_fp_options.fin_plan_preference_code%TYPE;
17168 l_uncat_rlmid pa_resource_assignments.resource_list_member_id%TYPE;
17169 l_track_as_labor_flag pa_resource_list_members.track_as_labor_flag%TYPE;
17170 l_unit_of_measure pa_resource_assignments.unit_of_measure%TYPE;
17171 -- Bug Fix: 4569365. Removed MRC code.
17172 -- l_calling_context pa_mrc_finplan.g_calling_module%TYPE := PA_FP_CONSTANTS_PKG.G_CREATE_DRAFT;
17173 l_calling_context VARCHAR2(30) := PA_FP_CONSTANTS_PKG.G_CREATE_DRAFT;
17174
17175 l_plan_tran_context VARCHAR2(30);
17176 l_record_version_number pa_budget_versions.record_version_number%TYPE;
17177 l_mixed_resource_planned_flag VARCHAR2(1);
17178 l_proj_fp_options_id pa_proj_fp_options.proj_fp_options_id%TYPE;
17179 l_CW_version_id pa_budget_versions.budget_version_id%TYPE;
17180 l_CW_record_version_number pa_budget_versions.record_version_number%TYPE;
17181 l_created_ver_rec_ver_num pa_budget_versions.record_version_number%TYPE;
17182
17183 l_project_id PA_PROJECTS_ALL.PROJECT_ID%TYPE;
17184 l_resource_list_name PA_RESOURCE_LISTS.NAME%TYPE;
17185 l_resource_list_id PA_RESOURCE_LISTS.resource_list_id%TYPE;
17186
17187 l_description PA_BUDGET_VERSIONS.description%Type;
17188 l_attribute_category PA_BUDGET_VERSIONS.attribute_category%Type;
17189 l_attribute1 PA_BUDGET_VERSIONS.attribute1%Type;
17190 l_attribute2 PA_BUDGET_VERSIONS.attribute2%Type;
17191 l_attribute3 PA_BUDGET_VERSIONS.attribute2%Type;
17192 l_attribute4 PA_BUDGET_VERSIONS.attribute2%Type;
17193 l_attribute5 PA_BUDGET_VERSIONS.attribute2%Type;
17194 l_attribute6 PA_BUDGET_VERSIONS.attribute2%Type;
17195 l_attribute7 PA_BUDGET_VERSIONS.attribute2%Type;
17196 l_attribute8 PA_BUDGET_VERSIONS.attribute2%Type;
17197 l_attribute9 PA_BUDGET_VERSIONS.attribute2%Type;
17198 l_attribute10 PA_BUDGET_VERSIONS.attribute2%Type;
17199 l_attribute11 PA_BUDGET_VERSIONS.attribute2%Type;
17200 l_attribute12 PA_BUDGET_VERSIONS.attribute2%Type;
17201 l_attribute13 PA_BUDGET_VERSIONS.attribute2%Type;
17202 l_attribute14 PA_BUDGET_VERSIONS.attribute2%Type;
17203 l_attribute15 PA_BUDGET_VERSIONS.attribute2%Type;
17204 l_pm_finplan_reference pa_budget_versions.pm_budget_reference%type;
17205 l_change_reason_code pa_budget_versions.change_reason_code%type;
17206 l_budget_version_name pa_budget_versions.version_name%type;
17207 l_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE ;
17208 l_fin_plan_type_name pa_fin_plan_types_vl.name%TYPE ;
17209 l_version_type pa_budget_versions.version_type%TYPE ;
17210 l_fin_plan_level_code pa_proj_fp_options.cost_fin_plan_level_code%TYPE ;
17211 l_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE ;
17212
17213 L_RAW_COST_FLAG VARCHAR2(1);
17214 L_BURDENED_COST_FLAG VARCHAR2(1);
17215 L_REVENUE_FLAG VARCHAR2(1);
17216 L_COST_QTY_FLAG VARCHAR2(1);
17217 L_REVENUE_QTY_FLAG VARCHAR2(1);
17218
17219 L_ALL_QTY_FLAG VARCHAR2(1);
17220 L_CREATE_NEW_WORKING_FLAG VARCHAR2(1);
17221 L_REPLACE_CURRENT_WORKING_FLAG VARCHAR2(1);
17222 L_USING_RESOURCE_LISTS_FLAG VARCHAR2(1);
17223
17224 l_plan_in_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
17225 l_projfunc_cost_rate_type pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
17226 l_projfunc_cost_rate_date_typ pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE ;
17227 l_projfunc_cost_rate_date pa_proj_fp_options.projfunc_cost_rate_date%TYPE ;
17228 l_projfunc_rev_rate_type pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
17229 l_projfunc_rev_rate_date_typ pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE;
17230 l_projfunc_rev_rate_date pa_proj_fp_options.projfunc_rev_rate_date%TYPE ;
17231 l_project_cost_rate_type pa_proj_fp_options.project_cost_rate_type%TYPE ;
17232 l_project_cost_rate_date_typ pa_proj_fp_options.project_cost_rate_date_type%TYPE ;
17233 l_project_cost_rate_date pa_proj_fp_options.project_cost_rate_date%TYPE ;
17234 l_project_rev_rate_type pa_proj_fp_options.project_rev_rate_type%TYPE ;
17235 l_project_rev_rate_date_typ pa_proj_fp_options.project_rev_rate_date_type%TYPE ;
17236 l_project_rev_rate_date pa_proj_fp_options.project_rev_rate_date%TYPE ;
17237
17238 /**PLSQL TABLES**/
17239 l_pm_task_reference_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
17240 l_task_elem_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17241 l_task_number_tbl SYSTEM.PA_VARCHAR2_100_TBL_TYPE := SYSTEM.PA_VARCHAR2_100_TBL_TYPE();
17242 l_project_assignment_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17243 l_resource_alias_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
17244 l_pm_res_asgmt_ref_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
17245 l_resource_list_member_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17246 l_pm_product_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
17247 l_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
17248 l_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
17249 l_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
17250
17251 l_quantity_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17252 l_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17253 l_burdened_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17254 l_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17255 l_fp_version_ids_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17256
17257 l_attribute_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
17258 l_attribute1_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17259 l_attribute2_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17260 l_attribute3_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17261 l_attribute4_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17262 l_attribute5_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17263 l_attribute6_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17264 l_attribute7_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17265 l_attribute8_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17266 l_attribute9_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17267 l_attribute10_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17268 l_attribute11_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17269 l_attribute12_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17270 l_attribute13_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17271 l_attribute14_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17272 l_attribute15_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17273 l_attribute16_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17274 l_attribute17_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17275 l_attribute18_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17276 l_attribute19_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17277 l_attribute20_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17278 l_attribute21_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17279 l_attribute22_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17280 l_attribute23_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17281 l_attribute24_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17282 l_attribute25_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17283 l_attribute26_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17284 l_attribute27_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17285 l_attribute28_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17286 l_attribute29_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17287 l_attribute30_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
17288
17289 /*=======================================================+
17290 | Used to call pa_budget_pvt.get_fin_plan_lines_status. |
17291 +=======================================================*/
17292 l_budget_lines_in pa_budget_pub.budget_line_in_tbl_type;
17293 l_budget_lines_out pa_budget_pub.budget_line_out_tbl_type;
17294
17295 /*===================================================+
17296 | Used to call pa_budget_pvt.validate_budget_lines. |
17297 +===================================================*/
17298 l_res_asg_in_tbl pa_budget_pub.budget_line_in_tbl_type;
17299 l_res_asg_out_tbl pa_budget_pub.budget_line_out_tbl_type;
17300
17301 l_allow_qty_flag VARCHAR2(1); -- Bug 3825873 Used to call validate_budget_lines
17302
17303 --fix later
17304 l_pkg_name VARCHAR2(30) := 'PA_BUDGET_PUB';
17305 g_module_name VARCHAR2(100) := 'CREATE_DRAFT_FINPLAN';
17306 l_api_name VARCHAR2(30) := 'CREATE_DRAFT_FINPLAN';
17307 l_module_name VARCHAR2(100) := 'CREATE_DRAFT_FINPLAN';
17308 l_procedure_name VARCHAR2(30) := 'CREATE_DRAFT_FINPLAN';
17309
17310 l_debug_mode VARCHAR2(1);
17311 l_msg_count NUMBER := 0;
17312 l_msg_data VARCHAR2(150);
17313 l_msg_code VARCHAR2(2000);
17314 l_msg_index_out NUMBER;
17315 l_return_status VARCHAR2(1);
17316
17317 l_user_id NUMBER :=0;
17318 t_person_id NUMBER;
17319 t_resource_id NUMBER;
17320 t_resource_name VARCHAR2(39);
17321 cnt number:=0;
17322
17323 -- added for bug Bug 3986129: FP.M Web ADI Dev changes
17324 l_mfc_cost_type_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17325 l_etc_method_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
17326 l_spread_curve_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
17327
17328 --Added for bug 4224464
17329 l_budget_amount_code pa_budget_types.budget_amount_code%type;
17330
17331 l_version_info_rec pa_fp_gen_amount_utils.fp_cols;
17332
17333 --Bug 5475184. In the below set, pt stands for "plan type".
17334 l_pt_amount_set_id pa_proj_fp_options.cost_amount_set_id%TYPE;
17335 l_pt_raw_cost_flag VARCHAR2(1);
17336 l_pt_burdened_flag VARCHAR2(1);
17337 l_pt_revenue_flag VARCHAR2(1);
17338 l_pt_cost_quantity_flag VARCHAR2(1);
17339 l_pt_rev_quantity_flag VARCHAR2(1);
17340 l_pt_all_quantity_flag VARCHAR2(1);
17341 l_pt_bill_rate_flag VARCHAR2(1);
17342 l_pt_cost_rate_flag VARCHAR2(1);
17343 l_pt_burden_rate_flag VARCHAR2(1);
17344
17345
17346 BEGIN
17347
17348 --Standard begin of API savepoint
17349 SAVEPOINT create_draft_finplan_pub;
17350
17351 x_msg_count := 0;
17352 x_return_status := FND_API.G_RET_STS_SUCCESS;
17353 pa_debug.set_err_stack('PA_BUDGET_PUB.CREATE_DRAFT_FINPLAN');
17354 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
17355 l_debug_mode := NVL(l_debug_mode, 'Y');
17356
17357 IF ( l_debug_mode = 'Y' )
17358 THEN
17359 pa_debug.set_process(l_procedure_name || 'PLSQL','LOG',l_debug_mode);
17360 pa_debug.g_err_stage:='Entering CREATE_DRAFT_FINPLAN';
17361 pa_debug.write('CREATE_DRAFT_FINPLAN: ' || g_module_name,pa_debug.g_err_stage,2);
17362 END IF;
17363
17364 l_msg_count := 0;
17365 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
17366 l_module_name := 'create_draft_finplan' || g_module_name;
17367
17368 IF ( l_debug_mode = 'Y' )
17369 THEN
17370 pa_debug.set_curr_function( p_function => 'create_draft_finplan'
17371 ,p_debug_mode => l_debug_mode );
17372 END IF;
17373
17374 l_resource_list_name := p_resource_list_name ;
17375
17376 IF p_resource_list_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
17377 l_resource_list_id := NULL;
17378 ELSE
17379 l_resource_list_id := p_resource_list_id;
17380 END IF;
17381
17382
17383 IF p_fin_plan_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
17384 l_fin_plan_type_id := NULL;
17385 ELSE
17386 l_fin_plan_type_id := p_fin_plan_type_id ;
17387 END IF;
17388
17389 IF p_fin_plan_type_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17390 l_fin_plan_type_name := NULL;
17391 ELSE
17392 l_fin_plan_type_name := p_fin_plan_type_name ;
17393 END IF;
17394
17395 IF p_version_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17396 l_version_type := NULL;
17397 ELSE
17398 l_version_type := p_version_type ;
17399 END IF;
17400
17401 IF p_fin_plan_level_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17402 l_fin_plan_level_code := NULL;
17403 ELSE
17404 l_fin_plan_level_code := p_fin_plan_level_code ;
17405 END IF;
17406
17407 IF p_time_phased_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17408 l_time_phased_code := NULL;
17409 ELSE
17410 l_time_phased_code := p_time_phased_code ;
17411
17412 END IF;
17413
17414 IF p_plan_in_multi_curr_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17415 l_plan_in_multi_curr_flag := NULL; --Bug 4586948.
17416 ELSE
17417 l_plan_in_multi_curr_flag := p_plan_in_multi_curr_flag ;
17418 END IF;
17419
17420 IF p_raw_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17421 l_raw_cost_flag := 'N';
17422 ELSE
17423 l_raw_cost_flag := p_raw_cost_flag ;
17424 END IF;
17425
17426 IF p_burdened_cost_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17427 l_burdened_cost_flag := 'N';
17428 ELSE
17429 l_burdened_cost_flag := p_burdened_cost_flag ;
17430 END IF;
17431
17432 IF p_revenue_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17433 l_revenue_flag := 'N';
17434 ELSE
17435 l_revenue_flag := p_revenue_flag ;
17436 END IF;
17437
17438 IF p_cost_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17439 l_cost_qty_flag := 'N';
17440 ELSE
17441 l_cost_qty_flag := p_cost_qty_flag ;
17442 END IF;
17443
17444 IF p_revenue_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17445 l_revenue_qty_flag := 'N';
17446 ELSE
17447 l_revenue_qty_flag := p_revenue_qty_flag ;
17448 END IF;
17449
17450 IF p_all_qty_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17451 l_all_qty_flag := 'N';
17452 ELSE
17453 l_all_qty_flag := p_all_qty_flag ;
17454 END IF;
17455
17456 IF p_create_new_curr_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17457 l_create_new_working_flag := 'N';
17458 ELSE
17459 l_create_new_working_flag := p_create_new_curr_working_flag ;
17460 END IF;
17461
17462 IF p_replace_current_working_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17463 l_replace_current_working_flag := 'N';
17464 ELSE
17465 l_replace_current_working_flag := p_replace_current_working_flag ;
17466 END IF;
17467
17468 IF p_using_resource_lists_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17469 l_using_resource_lists_flag := 'Y';
17470 ELSE
17471 l_using_resource_lists_flag := p_using_resource_lists_flag ;
17472 END IF;
17473
17474 IF p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17475 THEN
17476 l_attribute_category := NULL;
17477 ELSE
17478 l_attribute_category := p_attribute_category;
17479 END IF;
17480
17481 IF p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17482 THEN
17483 l_attribute1 := NULL;
17484 ELSE
17485 l_attribute1 := p_attribute1;
17486 END IF;
17487 IF p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17488 THEN
17489 l_attribute2 := NULL;
17490 ELSE
17491 l_attribute2 := p_attribute2;
17492 END IF;
17493 IF p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17494 THEN
17495 l_attribute3 := NULL;
17496 ELSE
17497 l_attribute3 := p_attribute3;
17498 END IF;
17499 IF p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17500 THEN
17501 l_attribute4 := NULL;
17502 ELSE
17503 l_attribute4 := p_attribute4;
17504 END IF;
17505
17506 IF p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17507 THEN
17508 l_attribute5 := NULL;
17509 ELSE
17510 l_attribute5 := p_attribute5;
17511 END IF;
17512
17513 IF p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17514 THEN
17515 l_attribute6 := NULL;
17516 ELSE
17517 l_attribute6 := p_attribute6;
17518 END IF;
17519
17520 IF p_attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17521 THEN
17522 l_attribute7 := NULL;
17523 ELSE
17524 l_attribute7 := p_attribute7;
17525 END IF;
17526
17527 IF p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17528 THEN
17529 l_attribute8 := NULL;
17530 ELSE
17531 l_attribute8 := p_attribute8;
17532 END IF;
17533
17534 IF p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17535 THEN
17536 l_attribute9 := NULL;
17537 ELSE
17538 l_attribute9 := p_attribute9;
17539 END IF;
17540
17541 IF p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17542 THEN
17543 l_attribute10 := NULL;
17544 ELSE
17545 l_attribute10 := p_attribute10;
17546 END IF;
17547
17548 IF p_attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17549 THEN
17550 l_attribute11 := NULL;
17551 ELSE
17552 l_attribute11 := p_attribute11;
17553 END IF;
17554
17555 IF p_attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17556 THEN
17557 l_attribute12 := NULL;
17558 ELSE
17559 l_attribute12 := p_attribute12;
17560 END IF;
17561
17562 IF p_attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17563 THEN
17564 l_attribute13 := NULL;
17565 ELSE
17566 l_attribute13 := p_attribute13;
17567 END IF;
17568
17569 IF p_attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17570 THEN
17571 l_attribute14:= NULL;
17572 ELSE
17573 l_attribute14:= p_attribute14;
17574 END IF;
17575
17576 IF p_attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17577 THEN
17578 l_attribute15 := NULL;
17579 ELSE
17580 l_attribute15 := p_attribute15;
17581 END IF;
17582
17583 IF p_pm_finplan_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17584 THEN
17585 l_pm_finplan_reference := NULL;
17586 ELSE
17587 l_pm_finplan_reference := p_pm_finplan_reference;
17588 END IF;
17589
17590 IF p_pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
17591 l_project_id := NULL;
17592 ELSE
17593 l_project_id := p_pa_project_id;
17594 END IF;
17595
17596 IF p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17597 THEN
17598 l_change_reason_code := NULL;
17599 ELSE
17600 l_change_reason_code := p_change_reason_code;
17601 END IF;
17602 -- bug 5031071
17603 IF p_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17604 THEN
17605 l_description := NULL;
17606 ELSE
17607 l_description := p_description;
17608 END IF;
17609
17610
17611
17612 l_user_id := FND_GLOBAL.User_id;
17613
17614 pa_budget_pvt.Validate_Header_Info
17615 ( p_api_version_number => p_api_version_number
17616 ,p_budget_version_name => p_budget_version_name
17617 ,p_init_msg_list => p_init_msg_list
17618 ,px_pa_project_id => l_project_id
17619 ,p_pm_project_reference => p_pm_project_reference
17620 ,p_pm_product_code => p_pm_product_code
17621 ,p_budget_type_code => NULL
17622 ,p_entry_method_code => NULL
17623 ,px_resource_list_name => l_resource_list_name
17624 ,px_resource_list_id => l_resource_list_id
17625 ,px_fin_plan_type_id => l_fin_plan_type_id
17626 ,px_fin_plan_type_name => l_fin_plan_type_name
17627 ,px_version_type => l_version_type
17628 ,px_fin_plan_level_code => l_fin_plan_level_code
17629 ,px_time_phased_code => l_time_phased_code
17630 ,px_plan_in_multi_curr_flag => l_plan_in_multi_curr_flag
17631 ,px_projfunc_cost_rate_type => l_projfunc_cost_rate_type
17632 ,px_projfunc_cost_rate_date_typ => l_projfunc_cost_rate_date_typ
17633 ,px_projfunc_cost_rate_date => l_projfunc_cost_rate_date
17634 ,px_projfunc_rev_rate_type => l_projfunc_rev_rate_type
17635 ,px_projfunc_rev_rate_date_typ => l_projfunc_rev_rate_date_typ
17636 ,px_projfunc_rev_rate_date => l_projfunc_rev_rate_date
17637 ,px_project_cost_rate_type => l_project_cost_rate_type
17638 ,px_project_cost_rate_date_typ => l_project_cost_rate_date_typ
17639 ,px_project_cost_rate_date => l_project_cost_rate_date
17640 ,px_project_rev_rate_type => l_project_rev_rate_type
17641 ,px_project_rev_rate_date_typ => l_project_rev_rate_date_typ
17642 ,px_project_rev_rate_date => l_project_rev_rate_date
17643 ,px_raw_cost_flag => l_raw_cost_flag
17644 ,px_burdened_cost_flag => l_burdened_cost_flag
17645 ,px_revenue_flag => l_revenue_flag
17646 ,px_cost_qty_flag => l_cost_qty_flag
17647 ,px_revenue_qty_flag => l_revenue_qty_flag
17648 ,px_all_qty_flag => l_all_qty_flag
17649 ,p_create_new_curr_working_flag => l_create_new_working_flag
17650 ,p_replace_current_working_flag => l_replace_current_working_flag
17651 ,p_change_reason_code => p_change_reason_code
17652 ,p_calling_module => 'PA_PM_CREATE_DRAFT_BUDGET'
17653 ,p_using_resource_lists_flag => p_using_resource_lists_flag
17654 ,x_budget_amount_code => l_budget_amount_code -- Added for bug 4224464
17655 ,x_msg_count => x_msg_count
17656 ,x_msg_data => x_msg_data
17657 ,x_return_status => x_return_status
17658 );
17659
17660 IF ( x_return_status <> FND_API.G_RET_STS_SUCCESS )
17661 THEN
17662 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17663 END IF;
17664
17665 pa_fin_plan_utils.Get_Curr_Working_Version_Info(
17666 p_project_id => l_project_id
17667 ,p_fin_plan_type_id => l_fin_plan_type_id
17668 ,p_version_type => l_version_type
17669 ,x_fp_options_id => l_fp_options_id
17670 ,x_fin_plan_version_id => l_curr_work_version_id
17671 ,x_return_status => x_return_status
17672 ,x_msg_count => x_msg_count
17673 ,x_msg_data => x_msg_data );
17674
17675 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
17676 Raise PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17677 END IF;
17678
17679 IF l_debug_mode = 'Y' THEN
17680 pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,3);
17681 END IF;
17682
17683 IF (l_curr_work_version_id IS NOT NULL) THEN
17684
17685 IF nvl(p_replace_current_working_flag,'N')= 'Y' THEN
17686
17687 l_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number
17688 (p_budget_version_id => l_curr_work_version_id);
17689 l_user_id := FND_GLOBAL.User_id;
17690 pa_fin_plan_pvt.lock_unlock_version
17691 (p_budget_version_id => l_curr_work_version_id,
17692 p_record_version_number => l_record_version_number,
17693 p_action => 'L',
17694 p_user_id => l_user_id,
17695 p_person_id => NULL,
17696 x_return_status => x_return_status,
17697 x_msg_count => x_msg_count,
17698 x_msg_data => x_msg_data
17699 );
17700
17701 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
17702 IF l_debug_mode = 'Y' THEN
17703 pa_debug.g_err_stage := 'Error in lock unlock version - cannot delete working version';
17704 pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,5);
17705 END IF;
17706 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17707 END IF;
17708
17709 pa_fin_plan_pub.delete_version
17710 ( p_project_id => l_project_id
17711 ,p_budget_version_id => l_curr_work_version_id
17712 ,p_record_version_number => l_record_version_number
17713 ,x_return_status => x_return_status
17714 ,x_msg_count => x_msg_count
17715 ,x_msg_data => x_msg_data
17716 );
17717 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)
17718 THEN
17719 pa_debug.g_err_stage:= 'Could not delete the current working version';
17720 IF l_debug_mode = 'Y' THEN
17721 pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,
17722 PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
17723 END IF;
17724 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17725 ELSE
17726 pa_debug.g_err_stage:= 'Deleted the current working version';
17727 IF l_debug_mode = 'Y' THEN
17728 pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,
17729 PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17730 END IF;
17731 END IF;
17732 END IF; --p_replace_current_working_flag = 'Y'
17733 END IF; -- l_curr_work_version_id IS NOT NULL
17734
17735 IF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST) THEN
17736 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_COST_ONLY;
17737 ELSIF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE) THEN
17738 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_REVENUE_ONLY;
17739 ELSIF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL) THEN
17740 l_plan_pref_code := PA_FP_CONSTANTS_PKG.G_PREF_COST_AND_REV_SAME;
17741 END IF;
17742
17743 IF l_debug_mode = 'Y' THEN
17744 pa_debug.g_err_stage:= 'Preference code is [' || l_plan_pref_code || ']';
17745 pa_debug.write(l_procedure_name ||
17746 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17747 END IF;
17748
17749 --Bug 5475184. The below block will be used to get the cost/bill rate flags from the plan type option.
17750 --These flags will be set for the new plan version that will be created instead of always setting
17751 --the value 'Y' for these flags in the plan version. Please note that except for these rate flags, other
17752 --amount flags can be passed as input parameters to this API
17753
17754 --Get the amount set id from the plan type option.
17755 SELECT DECODE(l_version_type,
17756 PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST, cost_amount_set_id,
17757 PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE, revenue_amount_set_id,
17758 PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL, all_amount_set_id)
17759 INTO l_pt_amount_set_id
17760 FROM pa_proj_fp_options
17761 WHERE project_id=l_project_id
17762 AND fin_plan_type_id=l_fin_plan_type_id
17763 AND fin_plan_version_id IS NULL;
17764
17765 IF l_debug_mode = 'Y' THEN
17766 pa_debug.g_err_stage:= 'Plan Type amount set id is [' || l_pt_amount_set_id || ']';
17767 pa_debug.write(l_procedure_name ||
17768 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17769 END IF;
17770
17771 --Get the plan type flag values
17772 pa_fin_plan_utils.get_plan_amount_flags (
17773 p_amount_set_id => l_pt_amount_set_id,
17774 x_raw_cost_flag => l_pt_raw_cost_flag,
17775 x_burdened_flag => l_pt_burdened_flag,
17776 x_revenue_flag => l_pt_revenue_flag,
17777 x_cost_quantity_flag => l_pt_cost_quantity_flag,
17778 x_rev_quantity_flag => l_pt_rev_quantity_flag,
17779 x_all_quantity_flag => l_pt_all_quantity_flag,
17780 x_bill_rate_flag => l_pt_bill_rate_flag,
17781 x_cost_rate_flag => l_pt_cost_rate_flag,
17782 x_burden_rate_flag => l_pt_burden_rate_flag,
17783 x_message_count => x_msg_count,
17784 x_return_status => x_return_status,
17785 x_message_data => x_msg_data);
17786
17787 IF l_debug_mode = 'Y' THEN
17788 pa_debug.g_err_stage:= 'Return status from pa_fin_plan_utils.get_plan_amount_flags is [' || x_return_status || ']';
17789 pa_debug.write(l_procedure_name ||
17790 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17791
17792 pa_debug.g_err_stage:= 'l_pt_bill_rate_flag is [' || l_pt_bill_rate_flag || ']';
17793 pa_debug.write(l_procedure_name ||
17794 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17795
17796 pa_debug.g_err_stage:= 'l_pt_cost_rate_flag is [' || l_pt_cost_rate_flag || ']';
17797 pa_debug.write(l_procedure_name ||
17798 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17799
17800 pa_debug.g_err_stage:= 'l_pt_burden_rate_flag is [' || l_pt_burden_rate_flag || ']';
17801 pa_debug.write(l_procedure_name ||
17802 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17803
17804 END IF;
17805
17806 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
17807
17808 pa_debug.g_err_stage:= 'pa_fin_plan_utils.get_plan_amount_flags returned error';
17809 IF l_debug_mode = 'Y' THEN
17810 pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,
17811 PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
17812 END IF;
17813 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17814
17815 END IF;
17816
17817 --Bug 5475184. End of derivation logic for bill/cost rate flags from plan type option.
17818
17819 /* Bug 5478041: Modified the following 6 variables from parameterized variables to
17820 local variables : l_raw_cost_flag,l_burdened_cost_flag,l_revenue_flag,l_cost_qty_flag
17821 l_revenue_qty_flag and l_all_qty_flag*/
17822
17823 pa_fin_plan_utils.GET_OR_CREATE_AMOUNT_SET_ID
17824 (
17825 p_raw_cost_flag => l_raw_cost_flag
17826 ,p_burdened_cost_flag => l_burdened_cost_flag
17827 ,p_revenue_flag => l_revenue_flag
17828 ,p_cost_qty_flag => l_cost_qty_flag
17829 ,p_revenue_qty_flag => l_revenue_qty_flag
17830 ,p_all_qty_flag => l_all_qty_flag
17831 ,p_plan_pref_code => l_plan_pref_code
17832 ,p_bill_rate_flag => /*'Y'*/ l_pt_bill_rate_flag --Bug 5475184
17833 ,p_cost_rate_flag => /*'Y'*/ l_pt_cost_rate_flag --Bug 5475184
17834 ,p_burden_rate_flag => /*'Y'*/ l_pt_burden_rate_flag --Bug 5475184
17835 ,x_cost_amount_set_id => l_cost_amount_set_id
17836 ,x_revenue_amount_set_id => l_rev_amount_set_id
17837 ,x_all_amount_set_id => l_all_amount_set_id
17838 ,x_message_count => x_msg_count
17839 ,x_return_status => x_return_status
17840 ,x_message_data => x_msg_data
17841 );
17842 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
17843 IF l_debug_mode = 'Y' THEN
17844 pa_debug.g_err_stage := 'Error in pa_fin_plan_utils.GET_OR_CREATE_AMOUNT_SET_ID';
17845 pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,5);
17846 END IF;
17847 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17848 END IF;
17849
17850 -- bug 3825873 populating l_allow_qty_flag to call validate_budget_lines
17851
17852 IF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST)
17853 THEN
17854 l_amount_set_id := l_cost_amount_set_id;
17855 l_allow_qty_flag := l_cost_qty_flag; -- p_cost_qty_flag; Bug 5478041
17856 ELSIF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE)
17857 THEN
17858 l_amount_set_id := l_rev_amount_set_id;
17859 l_allow_qty_flag := l_revenue_qty_flag; -- p_revenue_qty_flag;Bug 5478041
17860 ELSIF(l_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL)
17861 THEN
17862 l_amount_set_id := l_all_amount_set_id;
17863 l_allow_qty_flag := l_all_qty_flag; -- p_all_qty_flag; Bug 5478041
17864 END IF;
17865
17866 IF l_debug_mode = 'Y' THEN
17867 pa_debug.g_err_stage:= 'Amount set id is [' || l_amount_set_id || ']';
17868 pa_debug.write(l_procedure_name ||
17869 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17870 END IF;
17871
17872 l_struct_elem_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
17873
17874 IF l_debug_mode = 'Y' THEN
17875 pa_debug.g_err_stage:= 'l_struct_elem_version_id is [' || l_struct_elem_version_id || ']';
17876 pa_debug.write(l_procedure_name ||
17877 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17878 END IF;
17879
17880 l_created_version_id := NULL;
17881
17882
17883 IF l_debug_mode = 'Y' THEN
17884 pa_debug.g_err_stage:= 'Calling Create_Version';
17885 pa_debug.write(l_procedure_name ||
17886 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
17887 END IF;
17888
17889 --dbms_output.put_line('calling pa_fin_plan_pub.Create_Version');
17890 pa_fin_plan_pub.Create_Version (
17891 p_project_id => l_project_id
17892 ,p_fin_plan_type_id => l_fin_plan_type_id
17893 ,p_element_type => l_version_type
17894 ,p_version_name => p_budget_version_name
17895 ,p_description => l_description -- bug 5031071
17896 ,p_ci_id => NULL
17897 ,p_est_proj_raw_cost => NULL
17898 ,p_est_proj_bd_cost => NULL
17899 ,p_est_proj_revenue => NULL
17900 ,p_est_qty => NULL
17901 ,p_est_equip_qty => NULL
17902 ,p_impacted_task_id => NULL
17903 ,p_agreement_id => NULL
17904 ,p_calling_context => l_calling_context
17905 ,p_resource_list_id => l_resource_list_id
17906 ,p_time_phased_code => l_time_phased_code
17907 ,p_fin_plan_level_code => l_fin_plan_level_code /* Bug 6085160 p_fin_plan_level_code */
17908 ,p_plan_in_multi_curr_flag => l_plan_in_multi_curr_flag /*Bug 4290310. p_plan_in_multi_curr_flag. Passing the
17909 l_plan_in_multi_curr_flag as create_version doesnt handle the conversion of G_MISS_XXX values for this variable. Also
17910 l_plan_in_multi_curr_flag is a validated o/p variable from validate_header_info*/
17911 ,p_amount_set_id => l_amount_set_id
17912 ,p_attribute_category => l_attribute_category
17913 ,p_attribute1 => l_attribute1
17914 ,p_attribute2 => l_attribute2
17915 ,p_attribute3 => l_attribute3
17916 ,p_attribute4 => l_attribute4
17917 ,p_attribute5 => l_attribute5
17918 ,p_attribute6 => l_attribute6
17919 ,p_attribute7 => l_attribute7
17920 ,p_attribute8 => l_attribute8
17921 ,p_attribute9 => l_attribute9
17922 ,p_attribute10 => l_attribute10
17923 ,p_attribute11 => l_attribute11
17924 ,p_attribute12 => l_attribute12
17925 ,p_attribute13 => l_attribute13
17926 ,p_attribute14 => l_attribute14
17927 ,p_attribute15 => l_attribute15
17928 ,px_budget_version_id => l_created_version_id
17929 ,p_struct_elem_version_id => NULL --l_struct_elem_version_id commented for bug 5451269
17930 ,p_pm_product_code => p_pm_product_code
17931 ,p_finplan_reference => l_pm_finplan_reference
17932 ,p_change_reason_code => l_change_reason_code
17933 ,x_proj_fp_option_id => l_fp_options_id
17934 ,x_return_status => x_return_status
17935 ,x_msg_count => x_msg_count
17936 ,x_msg_data => x_msg_data );
17937
17938 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
17939 pa_debug.g_err_stage:= 'Error Create_Version';
17940 IF l_debug_mode = 'Y' THEN
17941 pa_debug.write( l_procedure_name ||
17942 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
17943 END IF;
17944 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
17945 END IF;
17946 --dbms_output.put_line('after calling pa_fin_plan_pub.Create_Version l_created_version_id is [' || to_char(l_created_version_id) ||']');
17947 /*========================================================+
17948 | Prepare to call pa_budget_pvt.validate_budget_lines() |
17949 *========================================================*/
17950 IF ( p_finplan_trans_tab.COUNT > 0 )
17951 THEN
17952 FOR i IN p_finplan_trans_tab.FIRST .. p_finplan_trans_tab.LAST
17953 LOOP
17954 l_res_asg_in_tbl(i).pm_product_code := p_finplan_trans_tab(i).pm_product_code;
17955 l_res_asg_in_tbl(i).pa_task_id := p_finplan_trans_tab(i).task_id;
17956 l_res_asg_in_tbl(i).pm_task_reference := p_finplan_trans_tab(i).pm_task_reference;
17957 l_res_asg_in_tbl(i).resource_alias := p_finplan_trans_tab(i).resource_alias;
17958 l_res_asg_in_tbl(i).resource_list_member_id := p_finplan_trans_tab(i).resource_list_member_id;
17959 l_res_asg_in_tbl(i).budget_start_date := p_finplan_trans_tab(i).start_date;
17960 l_res_asg_in_tbl(i).budget_end_date := p_finplan_trans_tab(i).end_date;
17961 l_res_asg_in_tbl(i).raw_cost := p_finplan_trans_tab(i).raw_cost;
17962 l_res_asg_in_tbl(i).burdened_cost := p_finplan_trans_tab(i).burdened_Cost;
17963 l_res_asg_in_tbl(i).revenue := p_finplan_trans_tab(i).revenue;
17964 l_res_asg_in_tbl(i).quantity := p_finplan_trans_tab(i).quantity;
17965 l_res_asg_in_tbl(i).attribute_category := p_finplan_trans_tab(i).attribute_category;
17966 l_res_asg_in_tbl(i).txn_currency_code := p_finplan_trans_tab(i).currency_code;
17967 l_res_asg_in_tbl(i).period_name := NULL;
17968 l_res_asg_in_tbl(i).description := NULL;
17969 l_res_asg_in_tbl(i).pm_budget_line_reference := NULL;
17970 l_res_asg_in_tbl(i).attribute1 := NULL;
17971 l_res_asg_in_tbl(i).attribute2 := NULL;
17972 l_res_asg_in_tbl(i).attribute3 := NULL;
17973 l_res_asg_in_tbl(i).attribute4 := NULL;
17974 l_res_asg_in_tbl(i).attribute5 := NULL;
17975 l_res_asg_in_tbl(i).attribute6 := NULL;
17976 l_res_asg_in_tbl(i).attribute7 := NULL;
17977 l_res_asg_in_tbl(i).attribute8 := NULL;
17978 l_res_asg_in_tbl(i).attribute9 := NULL;
17979 l_res_asg_in_tbl(i).attribute10 := NULL;
17980 l_res_asg_in_tbl(i).attribute11 := NULL;
17981 l_res_asg_in_tbl(i).attribute12 := NULL;
17982 l_res_asg_in_tbl(i).attribute13 := NULL;
17983 l_res_asg_in_tbl(i).attribute14 := NULL;
17984 l_res_asg_in_tbl(i).attribute15 := NULL;
17985 l_res_asg_in_tbl(i).projfunc_cost_rate_type := NULL;
17986 l_res_asg_in_tbl(i).projfunc_cost_rate_date_type := NULL;
17987 l_res_asg_in_tbl(i).projfunc_cost_rate_date := NULL;
17988 l_res_asg_in_tbl(i).projfunc_cost_exchange_rate := NULL;
17989 l_res_asg_in_tbl(i).projfunc_rev_rate_type := NULL;
17990 l_res_asg_in_tbl(i).projfunc_rev_rate_date_type := NULL;
17991 l_res_asg_in_tbl(i).projfunc_rev_rate_date := NULL;
17992 l_res_asg_in_tbl(i).projfunc_rev_exchange_rate := NULL;
17993 l_res_asg_in_tbl(i).project_cost_rate_type := NULL;
17994 l_res_asg_in_tbl(i).project_cost_rate_date_type := NULL;
17995 l_res_asg_in_tbl(i).project_cost_rate_date := NULL;
17996 l_res_asg_in_tbl(i).project_cost_exchange_rate := NULL;
17997 l_res_asg_in_tbl(i).project_rev_rate_type := NULL;
17998 l_res_asg_in_tbl(i).project_rev_rate_date_type := NULL;
17999 l_res_asg_in_tbl(i).project_rev_rate_date := NULL;
18000 l_res_asg_in_tbl(i).project_rev_exchange_rate := NULL;
18001 l_res_asg_in_tbl(i).change_reason_code := NULL;
18002 END LOOP;
18003
18004 l_version_info_rec.x_budget_version_id := l_created_version_id; -- Added for bug 4290310
18005 /* Bug 5478041: Modified the following 3 variables from parameterized variables to
18006 local variables : l_raw_cost_flag,l_burdened_cost_flag,l_revenue_flag */
18007 --dbms_output.put_line('calling pa_budget_pvt.Validate_Budget_Lines');
18008
18009 pa_budget_pvt.Validate_Budget_Lines
18010 (p_calling_context => 'RES_ASSGNMT_LEVEL_VALIDATION'
18011 ,p_pa_project_id => l_project_id
18012 ,p_budget_type_code => NULL
18013 ,p_fin_plan_type_id => l_fin_plan_type_id
18014 ,p_version_type => l_version_type
18015 ,p_resource_list_id => l_resource_list_id
18016 ,p_time_phased_code => l_time_phased_code
18017 ,p_budget_entry_method_code => NULL
18018 ,p_entry_level_code => l_fin_plan_level_code --Bug#5510196
18019 ,p_allow_qty_flag => l_allow_qty_flag-- bug 3825873 p_cost_qty_flag
18020 ,p_allow_raw_cost_flag => l_raw_cost_flag
18021 ,p_allow_burdened_cost_flag => l_burdened_cost_flag
18022 ,p_allow_revenue_flag => l_revenue_flag
18023 ,p_multi_currency_flag => l_plan_in_multi_curr_flag /*Bug 4290310.p_plan_in_multi_curr_flag. Passing
18024 the l_plan_in_multi_curr_flag as validate_budget_lines doesnt handle the conversion of G_MISS_XXX values for this variable.
18025 Also l_plan_in_multi_curr_flag is a validated o/p variable from validate_header_info*/
18026 ,p_project_cost_rate_type => NULL
18027 ,p_project_cost_rate_date_typ => NULL
18028 ,p_project_cost_rate_date => NULL
18029 ,p_project_cost_exchange_rate => NULL
18030 ,p_projfunc_cost_rate_type => NULL
18031 ,p_projfunc_cost_rate_date_typ => NULL
18032 ,p_projfunc_cost_rate_date => NULL
18033 ,p_projfunc_cost_exchange_rate => NULL
18034 ,p_project_rev_rate_type => NULL
18035 ,p_project_rev_rate_date_typ => NULL
18036 ,p_project_rev_rate_date => NULL
18037 ,p_project_rev_exchange_rate => NULL
18038 ,p_projfunc_rev_rate_type => NULL
18039 ,p_projfunc_rev_rate_date_typ => NULL
18040 ,p_projfunc_rev_rate_date => NULL
18041 ,p_projfunc_rev_exchange_rate => NULL
18042 ,p_version_info_rec => l_version_info_rec --Added for bug 4290310.
18043 ,px_budget_lines_in => l_res_asg_in_tbl
18044 ,x_budget_lines_out => l_res_asg_out_tbl
18045 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
18046 ,x_etc_method_code_tbl => l_etc_method_code_tbl
18047 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
18048 ,x_msg_count => l_msg_count
18049 ,x_msg_data => l_msg_data
18050 ,x_return_status => l_return_status);
18051
18052 IF(l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
18053 --dbms_output.put_line('error occurred while calling pa_budget_pvt.Validate_Budget_Lines');
18054 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18055 END IF;
18056
18057 END IF; -- p_finplan_trans_tab.COUNT > 0
18058 --dbms_output.put_line('after calling pa_budget_pvt.Validate_Budget_Lines');
18059
18060 /* Calling Add Planning Transaction */
18061
18062 cnt := P_finplan_trans_tab.COUNT;
18063
18064 l_task_number_tbl.EXTEND(cnt);
18065 l_task_elem_version_id_tbl.EXTEND(cnt);
18066 l_pm_task_reference_tbl.EXTEND(cnt);
18067 l_resource_list_member_id_tbl.EXTEND(cnt);
18068 l_pm_res_asgmt_ref_tbl.EXTEND(cnt);
18069 l_currency_code_tbl.EXTEND(cnt);
18070 l_pm_product_code_tbl.EXTEND(cnt);
18071
18072 l_start_date_tbl.EXTEND(cnt);
18073 l_end_date_tbl.EXTEND(cnt);
18074
18075 l_quantity_tbl.EXTEND(cnt);
18076 l_raw_cost_tbl.EXTEND(cnt);
18077 l_burdened_cost_tbl.EXTEND(cnt);
18078 l_revenue_tbl.EXTEND(cnt);
18079
18080 l_attribute_category_tbl.EXTEND(cnt);
18081 l_attribute1_tbl.EXTEND(cnt);
18082 l_attribute2_tbl.EXTEND(cnt);
18083 l_attribute3_tbl.EXTEND(cnt);
18084 l_attribute4_tbl.EXTEND(cnt);
18085 l_attribute5_tbl.EXTEND(cnt);
18086 l_attribute6_tbl.EXTEND(cnt);
18087 l_attribute7_tbl.EXTEND(cnt);
18088 l_attribute8_tbl.EXTEND(cnt);
18089 l_attribute9_tbl.EXTEND(cnt);
18090 l_attribute10_tbl.EXTEND(cnt);
18091 l_attribute11_tbl.EXTEND(cnt);
18092 l_attribute12_tbl.EXTEND(cnt);
18093 l_attribute13_tbl.EXTEND(cnt);
18094 l_attribute14_tbl.EXTEND(cnt);
18095 l_attribute15_tbl.EXTEND(cnt);
18096 l_attribute16_tbl.EXTEND(cnt);
18097 l_attribute17_tbl.EXTEND(cnt);
18098 l_attribute18_tbl.EXTEND(cnt);
18099 l_attribute19_tbl.EXTEND(cnt);
18100 l_attribute20_tbl.EXTEND(cnt);
18101 l_attribute21_tbl.EXTEND(cnt);
18102 l_attribute22_tbl.EXTEND(cnt);
18103 l_attribute23_tbl.EXTEND(cnt);
18104 l_attribute24_tbl.EXTEND(cnt);
18105 l_attribute25_tbl.EXTEND(cnt);
18106 l_attribute26_tbl.EXTEND(cnt);
18107 l_attribute27_tbl.EXTEND(cnt);
18108 l_attribute28_tbl.EXTEND(cnt);
18109 l_attribute29_tbl.EXTEND(cnt);
18110 l_attribute30_tbl.EXTEND(cnt);
18111
18112 IF P_finplan_trans_tab.COUNT > 0 THEN -- Added for Bug 3793370
18113 FOR i in 1 .. P_finplan_trans_tab.LAST
18114 LOOP
18115 IF P_finplan_trans_tab(i).task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18116 l_task_number_tbl(i) := NULL;
18117 ELSE
18118 BEGIN
18119 SELECT t.task_number
18120 INTO l_task_number
18121 FROM pa_tasks t
18122 WHERE t.task_id = P_finplan_trans_tab(i).task_id;
18123 l_task_number_tbl(i) := l_task_number;
18124
18125 EXCEPTION
18126 WHEN OTHERS THEN
18127 RAISE;
18128 END; -- anonymous
18129 END IF;
18130
18131 IF P_finplan_trans_tab(i).pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18132 l_pm_task_reference_tbl(i) := NULL;
18133 ELSE
18134 l_pm_task_reference_tbl(i) := P_finplan_trans_tab(i).pm_task_reference;
18135 END IF;
18136 IF P_finplan_trans_tab(i).CURRENCY_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18137 l_currency_code_tbl(i) := NULL;
18138 ELSE
18139 l_currency_code_tbl(i) := P_finplan_trans_tab(i).CURRENCY_CODE;
18140 END IF;
18141
18142 IF P_finplan_trans_tab(i).pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18143 l_pm_product_code_tbl(i) := NULL;
18144 ELSE
18145 l_pm_product_code_tbl(i) := P_finplan_trans_tab(i).pm_product_code;
18146 END IF;
18147
18148 IF ( P_finplan_trans_tab(i).task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR l_struct_elem_version_id IS NULL ) THEN
18149 l_task_elem_version_id_tbl(i) := NULL;
18150 ELSE
18151 BEGIN
18152 SELECT element_version_id
18153 INTO l_task_elem_version_id_tbl(i)
18154 FROM pa_struct_task_wbs_v
18155 WHERE parent_structure_version_id = l_struct_elem_version_id
18156 AND project_id = l_project_id
18157 AND task_id = P_finplan_trans_tab(i).task_id;
18158 EXCEPTION
18159 WHEN OTHERS THEN RAISE;
18160 END; -- anonymous
18161 END IF;
18162
18163 /* Commented out the code for Bug 5079329.
18164 IF P_finplan_trans_tab(i).resource_list_member_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18165 l_resource_list_member_id_tbl(i) := NULL;
18166 ELSE
18167 l_resource_list_member_id_tbl(i) := P_finplan_trans_tab(i).resource_list_member_id;
18168 END IF;
18169 */
18170
18171 /* Added for Bug 5079329*/
18172 l_resource_list_member_id_tbl(i) := l_res_asg_in_tbl(i).resource_list_member_id;
18173
18174 IF P_finplan_trans_tab(i).PM_RES_ASGMT_REFERENCE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18175 l_pm_res_asgmt_ref_tbl(i) := NULL;
18176 ELSE
18177 l_pm_res_asgmt_ref_tbl(i) := P_finplan_trans_tab(i).PM_RES_ASGMT_REFERENCE;
18178 END IF;
18179
18180
18181 IF P_finplan_trans_tab(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18182 l_start_date_tbl(i) := NULL;
18183 ELSE
18184 l_start_date_tbl(i) := P_finplan_trans_tab(i).start_date;
18185 END IF;
18186
18187 IF P_finplan_trans_tab(i).end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18188 l_end_date_tbl(i) := NULL;
18189 ELSE
18190 l_end_date_tbl(i) := P_finplan_trans_tab(i).end_date;
18191 END IF;
18192
18193 IF P_finplan_trans_tab(i).quantity = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18194 l_quantity_tbl(i) := NULL;
18195 ELSE
18196 l_quantity_tbl(i) := P_finplan_trans_tab(i).quantity;
18197 END IF;
18198
18199 IF P_finplan_trans_tab(i).raw_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18200 l_raw_cost_tbl(i) := NULL;
18201 ELSE
18202 l_raw_cost_tbl(i) := P_finplan_trans_tab(i).raw_cost;
18203 END IF;
18204
18205 IF P_finplan_trans_tab(i).burdened_cost = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18206 l_burdened_cost_tbl(i) := NULL;
18207 ELSE
18208 l_burdened_cost_tbl(i) := P_finplan_trans_tab(i).burdened_cost;
18209 END IF;
18210
18211 IF P_finplan_trans_tab(i).revenue = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
18212 L_revenue_tbl(i) := NULL;
18213 ELSE
18214 l_revenue_tbl(i) := P_finplan_trans_tab(i).revenue;
18215 END IF;
18216
18217 --When descriptive flex fields are not passed set them to NULL
18218
18219 IF P_finplan_trans_tab(i).attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18220 l_attribute_category_tbl(i) := NULL;
18221 ELSE
18222 l_attribute_category_tbl(i) := P_finplan_trans_tab(i).attribute_category;
18223 END IF;
18224
18225 IF P_finplan_trans_tab(i).attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18226 l_attribute1_tbl(i) := NULL;
18227 ELSE
18228 l_attribute1_tbl(i) := P_finplan_trans_tab(i).attribute1;
18229 END IF;
18230
18231 IF P_finplan_trans_tab(i).attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18232 l_attribute2_tbl(i) := NULL;
18233 ELSE
18234 l_attribute2_tbl(i) := P_finplan_trans_tab(i).attribute2;
18235 END IF;
18236
18237 IF P_finplan_trans_tab(i).attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18238 l_attribute3_tbl(i) := NULL;
18239 ELSE
18240 l_attribute3_tbl(i) := P_finplan_trans_tab(i).attribute3;
18241 END IF;
18242
18243 IF P_finplan_trans_tab(i).attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18244 l_attribute4_tbl(i) := NULL;
18245 ELSE
18246 l_attribute4_tbl(i) := P_finplan_trans_tab(i).attribute4;
18247 END IF;
18248
18249 IF P_finplan_trans_tab(i).attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18250 l_attribute5_tbl(i) := NULL;
18251 ELSE
18252 l_attribute5_tbl(i) := P_finplan_trans_tab(i).attribute5;
18253 END IF;
18254
18255 IF P_finplan_trans_tab(i).attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18256 l_attribute6_tbl(i) := NULL;
18257 ELSE
18258 l_attribute6_tbl(i) := P_finplan_trans_tab(i).attribute6;
18259 END IF;
18260
18261 IF P_finplan_trans_tab(i).attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18262 l_attribute7_tbl(i) := NULL;
18263 ELSE
18264 l_attribute7_tbl(i) := P_finplan_trans_tab(i).attribute7;
18265 END IF;
18266
18267 IF P_finplan_trans_tab(i).attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18268 l_attribute8_tbl(i) := NULL;
18269 ELSE
18270 l_attribute8_tbl(i) := P_finplan_trans_tab(i).attribute8;
18271 END IF;
18272
18273 IF P_finplan_trans_tab(i).attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18274 l_attribute9_tbl(i) := NULL;
18275 ELSE
18276 l_attribute9_tbl(i) := P_finplan_trans_tab(i).attribute9;
18277 END IF;
18278
18279 IF P_finplan_trans_tab(i).attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18280 l_attribute10_tbl(i) := NULL;
18281 ELSE
18282 l_attribute10_tbl(i) := P_finplan_trans_tab(i).attribute10;
18283 END IF;
18284
18285 IF P_finplan_trans_tab(i).attribute11 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18286 l_attribute11_tbl(i) := NULL;
18287 ELSE
18288 l_attribute11_tbl(i) := P_finplan_trans_tab(i).attribute11;
18289 END IF;
18290
18291 IF P_finplan_trans_tab(i).attribute12 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18292 l_attribute12_tbl(i) := NULL;
18293 ELSE
18294 l_attribute12_tbl(i) := P_finplan_trans_tab(i).attribute12;
18295 END IF;
18296
18297 IF P_finplan_trans_tab(i).attribute13 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18298 l_attribute13_tbl(i) := NULL;
18299 ELSE
18300 l_attribute13_tbl(i) := P_finplan_trans_tab(i).attribute13;
18301 END IF;
18302
18303 IF P_finplan_trans_tab(i).attribute14 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18304 l_attribute14_tbl(i) := NULL;
18305 ELSE
18306 l_attribute14_tbl(i) := P_finplan_trans_tab(i).attribute14;
18307 END IF;
18308
18309 IF P_finplan_trans_tab(i).attribute15 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18310 l_attribute15_tbl(i) := NULL;
18311 ELSE
18312 l_attribute15_tbl(i) := P_finplan_trans_tab(i).attribute15;
18313 END IF;
18314
18315 IF P_finplan_trans_tab(i).attribute16 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18316 l_attribute16_tbl(i) := NULL;
18317 ELSE
18318 l_attribute16_tbl(i) := P_finplan_trans_tab(i).attribute16;
18319 END IF;
18320
18321 IF P_finplan_trans_tab(i).attribute17 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18322 l_attribute17_tbl(i) := NULL;
18323 ELSE
18324 l_attribute17_tbl(i) := P_finplan_trans_tab(i).attribute17;
18325 END IF;
18326
18327 IF P_finplan_trans_tab(i).attribute18 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18328 l_attribute18_tbl(i) := NULL;
18329 ELSE
18330 l_attribute18_tbl(i) := P_finplan_trans_tab(i).attribute18;
18331 END IF;
18332
18333 IF P_finplan_trans_tab(i).attribute19 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18334 l_attribute19_tbl(i) := NULL;
18335 ELSE
18336 l_attribute19_tbl(i) := P_finplan_trans_tab(i).attribute19;
18337 END IF;
18338
18339 IF P_finplan_trans_tab(i).attribute20 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18340 l_attribute20_tbl(i) := NULL;
18341 ELSE
18342 l_attribute20_tbl(i) := P_finplan_trans_tab(i).attribute20;
18343 END IF;
18344
18345 IF P_finplan_trans_tab(i).attribute21 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18346 l_attribute21_tbl(i) := NULL;
18347 ELSE
18348 l_attribute21_tbl(i) := P_finplan_trans_tab(i).attribute21;
18349 END IF;
18350
18351 IF P_finplan_trans_tab(i).attribute22 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18352 l_attribute22_tbl(i) := NULL;
18353 ELSE
18354 l_attribute22_tbl(i) := P_finplan_trans_tab(i).attribute22;
18355 END IF;
18356
18357 IF P_finplan_trans_tab(i).attribute23 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18358 l_attribute23_tbl(i) := NULL;
18359 ELSE
18360 l_attribute23_tbl(i) := P_finplan_trans_tab(i).attribute23;
18361 END IF;
18362
18363 IF P_finplan_trans_tab(i).attribute24 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18364 l_attribute24_tbl(i) := NULL;
18365 ELSE
18366 l_attribute24_tbl(i) := P_finplan_trans_tab(i).attribute24;
18367 END IF;
18368
18369 IF P_finplan_trans_tab(i).attribute25 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18370 l_attribute25_tbl(i) := NULL;
18371 ELSE
18372 l_attribute25_tbl(i) := P_finplan_trans_tab(i).attribute25;
18373 END IF;
18374
18375 IF P_finplan_trans_tab(i).attribute26 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18376 l_attribute26_tbl(i) := NULL;
18377 ELSE
18378 l_attribute26_tbl(i) := P_finplan_trans_tab(i).attribute26;
18379 END IF;
18380
18381 IF P_finplan_trans_tab(i).attribute27 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18382 l_attribute27_tbl(i) := NULL;
18383 ELSE
18384 l_attribute27_tbl(i) := P_finplan_trans_tab(i).attribute27;
18385 END IF;
18386
18387 IF P_finplan_trans_tab(i).attribute28 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18388 l_attribute28_tbl(i) := NULL;
18389 ELSE
18390 l_attribute28_tbl(i) := P_finplan_trans_tab(i).attribute28;
18391 END IF;
18392
18393 IF P_finplan_trans_tab(i).attribute29 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18394 l_attribute29_tbl(i) := NULL;
18395 ELSE
18396 l_attribute29_tbl(i) := P_finplan_trans_tab(i).attribute29;
18397 END IF;
18398
18399 IF P_finplan_trans_tab(i).attribute30 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18400 l_attribute30_tbl(i) := NULL;
18401 ELSE
18402 l_attribute30_tbl(i) := P_finplan_trans_tab(i).attribute30;
18403 END IF;
18404
18405
18406 END LOOP;
18407
18408 Select decode(plan_class_code,
18409 'BUDGET',PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,
18410 'FORECAST',PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)
18411 Into l_plan_tran_context
18412 From pa_fin_plan_types_b
18413 Where fin_plan_type_id = l_fin_plan_type_id;
18414
18415 /* Calling Add Planning Transaction API */
18416
18417
18418 --dbms_output.put_line('calling pa_fp_planning_transaction_pub.add_planning_transactions bvid [' || to_char(l_created_version_id) || ']');
18419 /*
18420 | Bug 3709462. Passed p_one_to_one_mapping_flag ('Y') to avoid creation of
18421 | Resource Assignments for combinations of Task and Resource.
18422 */
18423 pa_fp_planning_transaction_pub.add_planning_transactions
18424 ( p_context => l_plan_tran_context
18425 , p_one_to_one_mapping_flag => 'Y'
18426 , p_calling_module => 'CREATE_DRAFT_FINPLAN'
18427 , p_project_id => l_project_id
18428 , p_budget_version_id => l_created_version_id
18429 , p_task_elem_version_id_tbl => l_task_elem_version_id_tbl
18430 , p_task_name_tbl => l_pm_task_reference_tbl
18431 , p_task_number_tbl => l_task_number_tbl
18432 , p_planning_start_date_tbl => l_start_date_tbl -- Bug 5026210
18433 , p_planning_end_date_tbl => l_end_date_tbl -- Bug 5026210
18434 , p_resource_list_member_id_tbl => l_resource_list_member_id_tbl
18435 , p_quantity_tbl => l_quantity_tbl
18436 , p_currency_code_tbl => l_currency_code_tbl
18437 , p_raw_cost_tbl => l_raw_cost_tbl
18438 , p_burdened_cost_tbl => l_burdened_cost_tbl
18439 , p_revenue_tbl => l_revenue_tbl
18440 , p_skip_duplicates_flag => 'N'
18441 , p_pm_product_code => l_pm_product_code_tbl
18442 , p_pm_res_asgmt_ref => l_pm_res_asgmt_ref_tbl
18443 , p_attribute_category_tbl => l_attribute_category_tbl
18444 , p_attribute1 => l_attribute1_tbl
18445 , p_attribute2 => l_attribute2_tbl
18446 , p_attribute3 => l_attribute3_tbl
18447 , p_attribute4 => l_attribute4_tbl
18448 , p_attribute5 => l_attribute5_tbl
18449 , p_attribute6 => l_attribute6_tbl
18450 , p_attribute7 => l_attribute7_tbl
18451 , p_attribute8 => l_attribute8_tbl
18452 , p_attribute9 => l_attribute9_tbl
18453 , p_attribute10 => l_attribute10_tbl
18454 , p_attribute11 => l_attribute11_tbl
18455 , p_attribute12 => l_attribute12_tbl
18456 , p_attribute13 => l_attribute13_tbl
18457 , p_attribute14 => l_attribute14_tbl
18458 , p_attribute15 => l_attribute15_tbl
18459 , p_attribute16 => l_attribute16_tbl
18460 , p_attribute17 => l_attribute17_tbl
18461 , p_attribute18 => l_attribute18_tbl
18462 , p_attribute19 => l_attribute19_tbl
18463 , p_attribute20 => l_attribute20_tbl
18464 , p_attribute21 => l_attribute21_tbl
18465 , p_attribute22 => l_attribute22_tbl
18466 , p_attribute23 => l_attribute23_tbl
18467 , p_attribute24 => l_attribute24_tbl
18468 , p_attribute25 => l_attribute25_tbl
18469 , p_attribute26 => l_attribute26_tbl
18470 , p_attribute27 => l_attribute27_tbl
18471 , p_attribute28 => l_attribute28_tbl
18472 , p_attribute29 => l_attribute29_tbl
18473 , p_attribute30 => l_attribute30_tbl
18474 , x_return_status => l_return_status
18475 , x_msg_count => l_msg_count
18476 , x_msg_data => l_msg_data
18477 );
18478 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
18479 THEN
18480 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18481 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR)
18482 THEN
18483 RAISE FND_API.G_EXC_ERROR;
18484 END IF;
18485 END IF; -- 3793370 -- P_finplan_trans_tab.COUNT > 0
18486 /************************************
18487 l_fp_version_ids_tbl.extend;
18488 l_fp_version_ids_tbl(1) := l_created_version_id;
18489 PJI_FM_XBS_ACCUM_MAINT.plan_create( p_fp_version_ids => l_fp_version_ids_tbl
18490 ,x_return_status => l_return_status
18491 ,x_msg_code => l_msg_code
18492 );
18493 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
18494 THEN
18495 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18496 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR)
18497 THEN
18498 RAISE FND_API.G_EXC_ERROR;
18499 END IF;
18500 ********************/
18501
18502 x_finplan_version_id := l_created_version_id;
18503
18504 IF ( p_create_new_curr_working_flag = 'Y' OR
18505 p_replace_current_working_flag = 'Y')
18506 THEN
18507 --dbms_output.put_line('pa_fin_plan_utils.Get_Curr_Working_Version_Info');
18508 pa_fin_plan_utils.Get_Curr_Working_Version_Info(
18509 p_project_id => l_project_id
18510 ,p_fin_plan_type_id => l_fin_plan_type_id
18511 ,p_version_type => l_version_type
18512 ,x_fp_options_id => l_proj_fp_options_id
18513 ,x_fin_plan_version_id => l_CW_version_id
18514 ,x_return_status => x_return_status
18515 ,x_msg_count => x_msg_count
18516 ,x_msg_data => x_msg_data );
18517 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
18518 THEN
18519 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18520 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR)
18521 THEN
18522 RAISE FND_API.G_EXC_ERROR;
18523 END IF;
18524 IF ( l_created_version_id <> l_CW_version_id )
18525 THEN
18526 pa_debug.g_err_stage:= 'l_created_version_id [' || TO_CHAR(l_created_version_id) ||
18527 '] is not same as l_CW_version_id [' || TO_CHAR(l_CW_version_id) || ']';
18528 IF l_debug_mode = 'Y' THEN
18529 pa_debug.write( l_procedure_name ||
18530 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
18531 END IF;
18532
18533 l_CW_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
18534
18535 l_created_ver_rec_ver_num := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_created_version_id);
18536 l_user_id := FND_GLOBAL.User_id;
18537 PA_COMP_PROFILE_PUB.GET_USER_INFO
18538 (p_user_id => l_user_id,
18539 x_person_id => t_person_id,
18540 x_resource_id => t_resource_id,
18541 x_resource_name => t_resource_name);
18542 --dbms_output.put_line('pa_fin_plan_pvt.lock_unlock_version');
18543 pa_fin_plan_pvt.lock_unlock_version
18544 (p_budget_version_id => l_CW_version_id,
18545 p_record_version_number => l_CW_record_version_number,
18546 p_action => 'L',
18547 p_user_id => l_user_id,
18548 p_person_id => NULL,
18549 x_return_status => x_return_status,
18550 x_msg_count => x_msg_count,
18551 x_msg_data => x_msg_data) ;
18552
18553 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
18554 IF l_debug_mode = 'Y' THEN
18555 pa_debug.g_err_stage := 'Error executing lock unlock version';
18556 pa_debug.write('CREATE_DRAFT: ' || g_module_name,pa_debug.g_err_stage,3);
18557 END IF;
18558 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18559 END IF;
18560 IF l_debug_mode = 'Y' THEN
18561 pa_debug.g_err_stage := 'About to call set current working version';
18562 pa_debug.write(l_procedure_name || g_module_name,pa_debug.g_err_stage,3);
18563 END IF;
18564
18565
18566 l_CW_record_version_number := pa_fin_plan_utils.Retrieve_Record_Version_Number(l_CW_version_id);
18567 --dbms_output.put_line('pa_fin_plan_pub.Set_Current_Working');
18568 pa_fin_plan_pub.Set_Current_Working
18569 (p_project_id => l_project_id,
18570 p_budget_version_id => l_created_version_id,
18571 p_record_version_number => l_created_ver_rec_ver_num,
18572 p_orig_budget_version_id => l_CW_version_id,
18573 p_orig_record_version_number => l_CW_record_version_number,
18574 x_return_status => x_return_status,
18575 x_msg_count => x_msg_count,
18576 x_msg_data => x_msg_data);
18577
18578 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
18579 IF l_debug_mode = 'Y' THEN
18580 pa_debug.g_err_stage:= 'Error executing Set_Current_Working ';
18581 pa_debug.write('CREATE_DRAFT: ' ||
18582 g_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
18583 END IF;
18584 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
18585 END IF;
18586 END IF; --l_created_version_id <> l_CW_version_id
18587
18588 END IF; --p_create_new_curr_working_flag = 'Y' OR p_replace_current_working_flag = 'Y'
18589 --dbms_output.put_line('PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS');
18590 PA_BUDGET_PVT.GET_FIN_PLAN_LINES_STATUS
18591 (p_fin_plan_version_id => l_created_version_id
18592 ,p_budget_lines_in => l_budget_lines_in
18593 ,p_calling_context => 'CREATE_DRAFT_FINPLAN'
18594 ,x_fp_lines_retn_status_tab => l_budget_lines_out
18595 ,x_return_status => x_return_status
18596 ,x_msg_count => x_msg_count
18597 ,x_msg_data => x_msg_data
18598 );
18599
18600 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
18601 THEN
18602 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18603 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR)
18604 THEN
18605 RAISE FND_API.G_EXC_ERROR;
18606 END IF;
18607 /*====================================================================+
18608 | If any of the budget lines had any rejections, set x_return_status |
18609 | appropriately - So, whoever calls this API would know - there was |
18610 | issue creating atleast one of the budget lines. |
18611 +====================================================================*/
18612 IF ( x_return_status = 'R')
18613 THEN
18614 -- bug 3825873 donot raise error it will rollback the entire changes
18615 -- bug 3825873 RAISE FND_API.G_EXC_ERROR;
18616 x_return_status := 'S';
18617 END IF;
18618
18619 --Changes for bug 3823485
18620 IF FND_API.TO_BOOLEAN( p_commit )
18621 THEN
18622
18623 IF l_debug_mode = 'Y' THEN
18624 pa_debug.g_err_stage := 'About to do a COMMIT';
18625 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18626 END IF;
18627
18628 COMMIT;
18629 END IF;
18630
18631 IF l_debug_mode = 'Y' THEN
18632 pa_debug.g_err_stage := 'Leaving create draft finplan';
18633 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18634
18635 pa_debug.reset_curr_function;
18636 END IF;
18637
18638 EXCEPTION
18639 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
18640
18641 ROLLBACK TO create_draft_finplan_pub;
18642
18643 IF l_debug_mode = 'Y' THEN
18644 pa_debug.g_err_stage:='In invalid args exception';
18645 pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18646 END IF;
18647
18648 l_msg_count := FND_MSG_PUB.count_msg;
18649 IF l_msg_count = 1 THEN
18650
18651 IF l_debug_mode = 'Y' THEN
18652 pa_debug.g_err_stage:='In invalid args exception 1';
18653 pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18654 END IF;
18655
18656 PA_INTERFACE_UTILS_PUB.get_messages
18657 ( p_encoded => FND_API.G_TRUE
18658 ,p_msg_index => 1
18659 ,p_msg_count => l_msg_count
18660 ,p_msg_data => l_msg_data
18661 ,p_data => l_msg_data
18662 ,p_msg_index_out => l_msg_index_out);
18663
18664 x_msg_data := l_msg_data;
18665 x_msg_count := l_msg_count;
18666 ELSE
18667 IF l_debug_mode = 'Y' THEN
18668 pa_debug.g_err_stage:='In invalid args exception 2';
18669 pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18670 END IF;
18671 x_msg_count := l_msg_count;
18672 END IF;
18673
18674
18675 x_return_status := FND_API.G_RET_STS_ERROR;
18676
18677 IF l_debug_mode = 'Y' THEN
18678 pa_debug.g_err_stage:='In invalid args exception 3';
18679 pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18680 pa_debug.reset_curr_function;
18681 END IF;
18682
18683 WHEN OTHERS THEN
18684
18685 ROLLBACK TO create_draft_finplan_pub;
18686
18687 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
18688 x_msg_count := 1;
18689 x_msg_data := SQLERRM;
18690
18691 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
18692 ,p_procedure_name => 'Update_Planning_Transactions');
18693
18694 IF l_debug_mode = 'Y' THEN
18695 pa_debug.g_err_stage:='Unexpected Error' || SQLERRM;
18696 pa_debug.write(l_module_name,pa_debug.g_err_stage, 3);
18697 pa_debug.reset_curr_function;
18698 END IF;
18699
18700 RAISE;
18701
18702 END CREATE_DRAFT_FINPLAN;
18703
18704 PROCEDURE load_resource_info(
18705 P_PM_PRODUCT_CODE PA_BUDGET_VERSIONS.PM_PRODUCT_CODE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18706 ,P_TASK_ID PA_TASKS.TASK_ID%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18707 ,P_PM_TASK_REFERENCE PA_TASKS.PM_TASK_REFERENCE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18708 ,P_PM_RES_ASGMT_REFERENCE VARCHAR2 DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18709 ,P_RESOURCE_ALIAS VARCHAR2 DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18710 ,P_CURRENCY_CODE PA_BUDGET_LINES.TXN_CURRENCY_CODE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18711 ,P_UNIT_OF_MEASURE_CODE PA_RESOURCE_ASSIGNMENTS.UNIT_OF_MEASURE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18712 ,P_START_DATE PA_RESOURCE_ASSIGNMENTS.PLANNING_START_DATE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
18713 ,P_END_DATE PA_RESOURCE_ASSIGNMENTS.PLANNING_END_DATE%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
18714 ,P_QUANTITY NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18715 ,P_RAW_COST NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18716 ,P_BURDENED_COST NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18717 ,P_REVENUE NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18718 ,P_RESOURCE_LIST_MEMBER_ID NUMBER DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18719 ,P_ATTRIBUTE_CATEGORY PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE_CATEGORY%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18720 ,P_ATTRIBUTE1 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE1%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18721 ,P_ATTRIBUTE2 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE2%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18722 ,P_ATTRIBUTE3 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE3%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18723 ,P_ATTRIBUTE4 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE4%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18724 ,P_ATTRIBUTE5 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE5%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18725 ,P_ATTRIBUTE6 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE6%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18726 ,P_ATTRIBUTE7 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE7%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18727 ,P_ATTRIBUTE8 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE8%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18728 ,P_ATTRIBUTE9 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE9%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18729 ,P_ATTRIBUTE10 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE10%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18730 ,P_ATTRIBUTE11 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE11%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18731 ,P_ATTRIBUTE12 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE12%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18732 ,P_ATTRIBUTE13 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE13%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18733 ,P_ATTRIBUTE14 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE14%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18734 ,P_ATTRIBUTE15 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE15%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18735 ,P_ATTRIBUTE16 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE16%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18736 ,P_ATTRIBUTE17 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE17%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18737 ,P_ATTRIBUTE18 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE18%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18738 ,P_ATTRIBUTE19 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE19%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18739 ,P_ATTRIBUTE20 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE20%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18740 ,P_ATTRIBUTE21 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE21%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18741 ,P_ATTRIBUTE22 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE22%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18742 ,P_ATTRIBUTE23 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE23%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18743 ,P_ATTRIBUTE24 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE24%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18744 ,P_ATTRIBUTE25 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE25%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18745 ,P_ATTRIBUTE26 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE26%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18746 ,P_ATTRIBUTE27 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE27%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18747 ,P_ATTRIBUTE28 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE28%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18748 ,P_ATTRIBUTE29 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE29%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18749 ,P_ATTRIBUTE30 PA_RESOURCE_ASSIGNMENTS.ATTRIBUTE30%TYPE DEFAULT PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18750 ) IS
18751 cnt number:=0;
18752 BEGIN
18753 G_PM_PRODUCT_CODE_TBL.extend(1);
18754 G_TASK_ID_TBL.extend(1);
18755 G_PM_TASK_REFERENCE_TBL.extend(1);
18756 G_PM_RES_ASGMT_REFERENCE_TBL.extend(1);
18757 G_RESOURCE_ALIAS_TBL.extend(1);
18758 G_CURRENCY_CODE_TBL.extend(1);
18759 G_UNIT_OF_MEASURE_CODE_TBL.extend(1);
18760 G_START_DATE_TBL.extend(1);
18761 G_END_DATE_TBL.extend(1);
18762 G_QUANTITY_TBL.extend(1);
18763 G_RAW_COST_TBL.extend(1);
18764 G_BURDENED_COST_TBL.extend(1);
18765 G_REVENUE_TBL.extend(1);
18766 G_RESOURCE_LIST_MEMBER_ID_TBL.extend(1);
18767 G_ATTRIBUTE_CATEGORY_TBL.extend(1);
18768 G_ATTRIBUTE1_TBL.extend(1);
18769 G_ATTRIBUTE2_TBL.extend(1);
18770 G_ATTRIBUTE3_TBL.extend(1);
18771 G_ATTRIBUTE4_TBL.extend(1);
18772 G_ATTRIBUTE5_TBL.extend(1);
18773 G_ATTRIBUTE6_TBL.extend(1);
18774 G_ATTRIBUTE7_TBL.extend(1);
18775 G_ATTRIBUTE8_TBL.extend(1);
18776 G_ATTRIBUTE9_TBL.extend(1);
18777 G_ATTRIBUTE10_TBL.extend(1);
18778 G_ATTRIBUTE11_TBL.extend(1);
18779 G_ATTRIBUTE12_TBL .extend(1);
18780 G_ATTRIBUTE13_TBL.extend(1);
18781 G_ATTRIBUTE14_TBL.extend(1);
18782 G_ATTRIBUTE15_TBL.extend(1);
18783 G_ATTRIBUTE16_TBL.extend(1);
18784 G_ATTRIBUTE17_TBL.extend(1);
18785 G_ATTRIBUTE18_TBL.extend(1);
18786 G_ATTRIBUTE19_TBL.extend(1);
18787 G_ATTRIBUTE20_TBL.extend(1);
18788 G_ATTRIBUTE21_TBL.extend(1);
18789 G_ATTRIBUTE22_TBL.extend(1);
18790 G_ATTRIBUTE23_TBL.extend(1);
18791 G_ATTRIBUTE24_TBL.extend(1);
18792 G_ATTRIBUTE25_TBL.extend(1);
18793 G_ATTRIBUTE26_TBL.extend(1);
18794 G_ATTRIBUTE27_TBL.extend(1);
18795 G_ATTRIBUTE28_TBL.extend(1);
18796 G_ATTRIBUTE29_TBL.extend(1);
18797 G_ATTRIBUTE30_TBL.extend(1);
18798 --dbms_output.put_line('extending over');
18799
18800 --find the count on the table.
18801 cnt := G_START_DATE_TBL.COUNT;
18802 --dbms_output.put_line('G has [' || to_char(cnt) || '] records');
18803
18804 G_PM_PRODUCT_CODE_TBL(cnt) := P_PM_PRODUCT_CODE;
18805 G_TASK_ID_TBL(cnt) := P_TASK_ID;
18806 G_PM_TASK_REFERENCE_TBL(cnt) := P_PM_TASK_REFERENCE;
18807 G_PM_RES_ASGMT_REFERENCE_TBL(cnt) := P_PM_RES_ASGMT_REFERENCE;
18808 G_RESOURCE_ALIAS_TBL(cnt) := P_RESOURCE_ALIAS;
18809 G_CURRENCY_CODE_TBL(cnt) := P_CURRENCY_CODE;
18810 G_UNIT_OF_MEASURE_CODE_TBL(cnt) := P_UNIT_OF_MEASURE_CODE;
18811 G_START_DATE_TBL(cnt) := P_START_DATE;
18812 G_END_DATE_TBL(cnt) := P_END_DATE;
18813 G_QUANTITY_TBL(cnt) := P_QUANTITY;
18814 G_RAW_COST_TBL(cnt) := P_RAW_COST;
18815 G_BURDENED_COST_TBL(cnt) := P_BURDENED_COST;
18816 G_REVENUE_TBL(cnt) := P_REVENUE;
18817 G_RESOURCE_LIST_MEMBER_ID_TBL(cnt) := P_RESOURCE_LIST_MEMBER_ID;
18818 G_ATTRIBUTE_CATEGORY_TBL(cnt) := P_ATTRIBUTE_CATEGORY;
18819 G_ATTRIBUTE1_TBL(cnt) := P_ATTRIBUTE1;
18820 G_ATTRIBUTE2_TBL(cnt) := P_ATTRIBUTE2;
18821 G_ATTRIBUTE3_TBL(cnt) := P_ATTRIBUTE3;
18822 G_ATTRIBUTE4_TBL(cnt) := P_ATTRIBUTE4;
18823 G_ATTRIBUTE5_TBL(cnt) := P_ATTRIBUTE5;
18824 G_ATTRIBUTE6_TBL(cnt) := P_ATTRIBUTE6;
18825 G_ATTRIBUTE7_TBL(cnt) := P_ATTRIBUTE7;
18826 G_ATTRIBUTE8_TBL(cnt) := P_ATTRIBUTE8;
18827 G_ATTRIBUTE9_TBL(cnt) := P_ATTRIBUTE9;
18828 G_ATTRIBUTE10_TBL(cnt) := P_ATTRIBUTE10;
18829 G_ATTRIBUTE11_TBL(cnt) := P_ATTRIBUTE11;
18830 G_ATTRIBUTE12_TBL (cnt) := P_ATTRIBUTE12;
18831 G_ATTRIBUTE13_TBL(cnt) := P_ATTRIBUTE13;
18832 G_ATTRIBUTE14_TBL(cnt) := P_ATTRIBUTE14;
18833 G_ATTRIBUTE15_TBL(cnt) := P_ATTRIBUTE15;
18834 G_ATTRIBUTE16_TBL(cnt) := P_ATTRIBUTE16;
18835 G_ATTRIBUTE17_TBL(cnt) := P_ATTRIBUTE17;
18836 G_ATTRIBUTE18_TBL(cnt) := P_ATTRIBUTE18;
18837 G_ATTRIBUTE19_TBL(cnt) := P_ATTRIBUTE19;
18838 G_ATTRIBUTE20_TBL(cnt) := P_ATTRIBUTE20;
18839 G_ATTRIBUTE21_TBL(cnt) := P_ATTRIBUTE21;
18840 G_ATTRIBUTE22_TBL(cnt) := P_ATTRIBUTE22;
18841 G_ATTRIBUTE23_TBL(cnt) := P_ATTRIBUTE23;
18842 G_ATTRIBUTE24_TBL(cnt) := P_ATTRIBUTE24;
18843 G_ATTRIBUTE25_TBL(cnt) := P_ATTRIBUTE25;
18844 G_ATTRIBUTE26_TBL(cnt) := P_ATTRIBUTE26;
18845 G_ATTRIBUTE27_TBL(cnt) := P_ATTRIBUTE27;
18846 G_ATTRIBUTE28_TBL(cnt) := P_ATTRIBUTE28;
18847 G_ATTRIBUTE29_TBL(cnt) := P_ATTRIBUTE29;
18848 G_ATTRIBUTE30_TBL(cnt) := P_ATTRIBUTE30;
18849 --dbms_output.put_line('done with assigning to global tables');
18850 END load_resource_info;
18851
18852 PROCEDURE EXECUTE_CREATE_DRAFT_FINPLAN
18853 ( p_api_version_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18854 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
18855 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
18856 ,p_pm_product_code IN pa_budget_versions.pm_product_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18857 ,p_pm_finplan_reference IN pa_budget_versions.pm_budget_reference%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18858 ,p_pm_project_reference IN pa_projects_all.PM_PROJECT_REFERENCE%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18859 ,p_pa_project_id IN pa_budget_versions.project_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18860 ,p_fin_plan_type_id IN pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18861 ,p_fin_plan_type_name IN pa_fin_plan_types_vl.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18862 ,p_version_type IN pa_budget_versions.version_type%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18863 ,p_time_phased_code IN pa_proj_fp_options.cost_time_phased_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18864 ,p_resource_list_name IN pa_resource_lists.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18865 ,p_resource_list_id IN pa_budget_versions.resource_list_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18866 ,p_fin_plan_level_code IN pa_proj_fp_options.cost_fin_plan_level_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18867 ,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
18868 ,p_budget_version_name IN pa_budget_versions.version_name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18869 ,p_description IN pa_budget_versions.description%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18870 ,p_change_reason_code IN pa_budget_versions.change_reason_code%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18871 ,p_raw_cost_flag IN pa_fin_plan_amount_sets.raw_cost_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18872 ,p_burdened_cost_flag IN pa_fin_plan_amount_sets.burdened_cost_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18873 ,p_revenue_flag IN pa_fin_plan_amount_sets.revenue_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18874 ,p_cost_qty_flag IN pa_fin_plan_amount_sets.cost_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18875 ,p_revenue_qty_flag IN pa_fin_plan_amount_sets.revenue_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18876 ,p_all_qty_flag IN pa_fin_plan_amount_sets.all_qty_flag%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18877 ,p_attribute_category IN pa_budget_versions.attribute_category%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18878 ,p_attribute1 IN pa_budget_versions.attribute1%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18879 ,p_attribute2 IN pa_budget_versions.attribute2%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18880 ,p_attribute3 IN pa_budget_versions.attribute3%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18881 ,p_attribute4 IN pa_budget_versions.attribute4%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18882 ,p_attribute5 IN pa_budget_versions.attribute5%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18883 ,p_attribute6 IN pa_budget_versions.attribute6%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18884 ,p_attribute7 IN pa_budget_versions.attribute7%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18885 ,p_attribute8 IN pa_budget_versions.attribute8%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18886 ,p_attribute9 IN pa_budget_versions.attribute9%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18887 ,p_attribute10 IN pa_budget_versions.attribute10%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18888 ,p_attribute11 IN pa_budget_versions.attribute11%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18889 ,p_attribute12 IN pa_budget_versions.attribute12%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18890 ,p_attribute13 IN pa_budget_versions.attribute13%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18891 ,p_attribute14 IN pa_budget_versions.attribute14%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18892 ,p_attribute15 IN pa_budget_versions.attribute15%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18893 ,p_create_new_curr_working_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18894 ,p_replace_current_working_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18895 ,p_using_resource_lists_flag IN VARCHAR2 DEFAULT 'N'
18896 ,x_finplan_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
18897 ,x_return_status OUT NOCOPY VARCHAR2
18898 ,x_msg_count OUT NOCOPY NUMBER
18899 ,x_msg_data OUT NOCOPY VARCHAR2
18900 )
18901 IS
18902 l_finplan_trans_tab pa_budget_pub.FinPlan_Trans_Tab;
18903 BEGIN
18904 --dbms_output.put_line('populating table of records');
18905 FOR i IN G_START_DATE_TBL.FIRST .. G_START_DATE_TBL.LAST
18906 LOOP
18907 l_finplan_trans_tab(i).pm_product_code := G_PM_PRODUCT_CODE_TBL(i);
18908 l_finplan_trans_tab(i).TASK_ID := G_TASK_ID_TBL(i);
18909 l_finplan_trans_tab(i).PM_TASK_REFERENCE := G_PM_TASK_REFERENCE_TBL(i);
18910 l_finplan_trans_tab(i).PM_RES_ASGMT_REFERENCE := G_PM_RES_ASGMT_REFERENCE_TBL(i);
18911 l_finplan_trans_tab(i).RESOURCE_ALIAS := G_RESOURCE_ALIAS_TBL(i);
18912 l_finplan_trans_tab(i).CURRENCY_CODE := G_CURRENCY_CODE_TBL(i);
18913 l_finplan_trans_tab(i).UNIT_OF_MEASURE_CODE := G_UNIT_OF_MEASURE_CODE_TBL(i);
18914 l_finplan_trans_tab(i).START_DATE := G_START_DATE_TBL(i);
18915 l_finplan_trans_tab(i).END_DATE := G_END_DATE_TBL(i);
18916 l_finplan_trans_tab(i).QUANTITY := G_QUANTITY_TBL(i);
18917 l_finplan_trans_tab(i).RAW_COST := G_RAW_COST_TBL(i);
18918 l_finplan_trans_tab(i).BURDENED_COST := G_BURDENED_COST_TBL(i);
18919 l_finplan_trans_tab(i).REVENUE := G_REVENUE_TBL(I);
18920 l_finplan_trans_tab(i).RESOURCE_LIST_MEMBER_ID := G_RESOURCE_LIST_MEMBER_ID_TBL(i);
18921 l_finplan_trans_tab(i).ATTRIBUTE_CATEGORY := G_ATTRIBUTE_CATEGORY_TBL(i);
18922 l_finplan_trans_tab(i).ATTRIBUTE1 := G_ATTRIBUTE1_TBL(i);
18923 l_finplan_trans_tab(i).ATTRIBUTE2 := G_ATTRIBUTE2_TBL(i);
18924 l_finplan_trans_tab(i).ATTRIBUTE3 := G_ATTRIBUTE3_TBL(i);
18925 l_finplan_trans_tab(i).ATTRIBUTE4 := G_ATTRIBUTE4_TBL(i);
18926 l_finplan_trans_tab(i).ATTRIBUTE5 := G_ATTRIBUTE5_TBL(i);
18927 l_finplan_trans_tab(i).ATTRIBUTE6 := G_ATTRIBUTE6_TBL(i);
18928 l_finplan_trans_tab(i).ATTRIBUTE7 := G_ATTRIBUTE7_TBL(i);
18929 l_finplan_trans_tab(i).ATTRIBUTE8 := G_ATTRIBUTE8_TBL(i);
18930 l_finplan_trans_tab(i).ATTRIBUTE9 := G_ATTRIBUTE9_TBL(i);
18931 l_finplan_trans_tab(i).ATTRIBUTE10 := G_ATTRIBUTE10_TBL(i);
18932 l_finplan_trans_tab(i).ATTRIBUTE11 := G_ATTRIBUTE11_TBL(i);
18933 l_finplan_trans_tab(i).ATTRIBUTE12 := G_ATTRIBUTE12_TBL(i);
18934 l_finplan_trans_tab(i).ATTRIBUTE13 := G_ATTRIBUTE13_TBL(i);
18935 l_finplan_trans_tab(i).ATTRIBUTE14 := G_ATTRIBUTE14_TBL(i);
18936 l_finplan_trans_tab(i).ATTRIBUTE15 := G_ATTRIBUTE15_TBL(i);
18937 l_finplan_trans_tab(i).ATTRIBUTE16 := G_ATTRIBUTE16_TBL(i);
18938 l_finplan_trans_tab(i).ATTRIBUTE17 := G_ATTRIBUTE17_TBL(i);
18939 l_finplan_trans_tab(i).ATTRIBUTE18 := G_ATTRIBUTE18_TBL(i);
18940 l_finplan_trans_tab(i).ATTRIBUTE19 := G_ATTRIBUTE19_TBL(i);
18941 l_finplan_trans_tab(i).ATTRIBUTE20 := G_ATTRIBUTE20_TBL(i);
18942 l_finplan_trans_tab(i).ATTRIBUTE21 := G_ATTRIBUTE21_TBL(i);
18943 l_finplan_trans_tab(i).ATTRIBUTE22 := G_ATTRIBUTE22_TBL(i);
18944 l_finplan_trans_tab(i).ATTRIBUTE23 := G_ATTRIBUTE23_TBL(i);
18945 l_finplan_trans_tab(i).ATTRIBUTE24 := G_ATTRIBUTE24_TBL(i);
18946 l_finplan_trans_tab(i).ATTRIBUTE25 := G_ATTRIBUTE25_TBL(i);
18947 l_finplan_trans_tab(i).ATTRIBUTE26 := G_ATTRIBUTE26_TBL(i);
18948 l_finplan_trans_tab(i).ATTRIBUTE27 := G_ATTRIBUTE27_TBL(i);
18949 l_finplan_trans_tab(i).ATTRIBUTE28 := G_ATTRIBUTE28_TBL(i);
18950 l_finplan_trans_tab(i).ATTRIBUTE29 := G_ATTRIBUTE29_TBL(i);
18951 l_finplan_trans_tab(i).ATTRIBUTE30 := G_ATTRIBUTE30_TBL(i);
18952 END LOOP;
18953
18954 --dbms_output.put_line('Before calling PA_FIN_PLAN_PUB.CREATE_DRAFT_FINPLAN');
18955 PA_BUDGET_PUB.CREATE_DRAFT_FINPLAN
18956 ( p_api_version_number => p_api_version_number
18957 ,p_commit => p_commit
18958 ,p_init_msg_list => p_init_msg_list
18959 ,p_pm_product_code => p_pm_product_code
18960 ,p_pm_finplan_reference => p_pm_finplan_reference
18961 ,p_pm_project_reference => p_pm_project_reference
18962 ,p_pa_project_id => p_pa_project_id
18963 ,p_fin_plan_type_id => p_fin_plan_type_id
18964 ,p_fin_plan_type_name => p_fin_plan_type_name
18965 ,p_version_type => p_version_type
18966 ,p_time_phased_code => p_time_phased_code
18967 ,p_resource_list_name => p_resource_list_name
18968 ,p_resource_list_id => p_resource_list_id
18969 ,p_fin_plan_level_code => p_fin_plan_level_code
18970 ,p_plan_in_multi_curr_flag => P_plan_in_multi_curr_flag
18971 ,p_budget_version_name => p_budget_version_name
18972 ,p_description => p_description
18973 ,p_change_reason_code => p_change_reason_code
18974 ,p_raw_cost_flag => p_raw_cost_flag
18975 ,p_burdened_cost_flag => p_burdened_cost_flag
18976 ,p_revenue_flag => p_revenue_flag
18977 ,p_cost_qty_flag => p_cost_qty_flag
18978 ,p_revenue_qty_flag => p_revenue_qty_flag
18979 ,p_all_qty_flag => p_all_qty_flag
18980 ,p_attribute_category => p_attribute_category
18981 ,p_attribute1 => p_attribute1
18982 ,p_attribute2 => p_attribute2
18983 ,p_attribute3 => p_attribute3
18984 ,p_attribute4 => p_attribute4
18985 ,p_attribute5 => p_attribute5
18986 ,p_attribute6 => p_attribute6
18987 ,p_attribute7 => p_attribute7
18988 ,p_attribute8 => p_attribute8
18989 ,p_attribute9 => p_attribute9
18990 ,p_attribute10 => p_attribute10
18991 ,p_attribute11 => p_attribute11
18992 ,p_attribute12 => p_attribute12
18993 ,p_attribute13 => p_attribute13
18994 ,p_attribute14 => p_attribute14
18995 ,p_attribute15 => p_attribute15
18996 ,p_create_new_curr_working_flag => p_create_new_curr_working_flag
18997 ,p_replace_current_working_flag => p_replace_current_working_flag
18998 ,p_using_resource_lists_flag => p_using_resource_lists_flag
18999 ,p_finplan_trans_tab => l_finplan_trans_tab
19000 ,x_finplan_version_id => x_finplan_version_id
19001 ,x_return_status => x_return_status
19002 ,x_msg_count => x_msg_count
19003 ,x_msg_data => x_msg_data
19004 );
19005 --dbms_output.put_line('after call to PA_FIN_PLAN_PUB.CREATE_DRAFT_FINPLAN');
19006
19007 /*
19008 * Empty the tables after each call to CREATE_DRAFT_FINPLAN
19009 */
19010 G_PM_PRODUCT_CODE_TBL.DELETE;
19011 G_TASK_ID_TBL.DELETE;
19012 G_PM_TASK_REFERENCE_TBL.DELETE;
19013 G_PM_RES_ASGMT_REFERENCE_TBL.DELETE;
19014 G_RESOURCE_ALIAS_TBL.DELETE;
19015 G_CURRENCY_CODE_TBL.DELETE;
19016 G_UNIT_OF_MEASURE_CODE_TBL.DELETE;
19017 G_START_DATE_TBL.DELETE;
19018 G_END_DATE_TBL.DELETE;
19019 G_QUANTITY_TBL.DELETE;
19020 G_RAW_COST_TBL.DELETE;
19021 G_BURDENED_COST_TBL.DELETE;
19022 G_REVENUE_TBL.DELETE;
19023 G_RESOURCE_LIST_MEMBER_ID_TBL.DELETE;
19024 G_ATTRIBUTE_CATEGORY_TBL.DELETE;
19025 G_ATTRIBUTE1_TBL.DELETE;
19026 G_ATTRIBUTE2_TBL.DELETE;
19027 G_ATTRIBUTE3_TBL.DELETE;
19028 G_ATTRIBUTE4_TBL.DELETE;
19029 G_ATTRIBUTE5_TBL.DELETE;
19030 G_ATTRIBUTE6_TBL.DELETE;
19031 G_ATTRIBUTE7_TBL.DELETE;
19032 G_ATTRIBUTE8_TBL.DELETE;
19033 G_ATTRIBUTE9_TBL.DELETE;
19034 G_ATTRIBUTE10_TBL.DELETE;
19035 G_ATTRIBUTE11_TBL.DELETE;
19036 G_ATTRIBUTE12_TBL.DELETE;
19037 G_ATTRIBUTE13_TBL.DELETE;
19038 G_ATTRIBUTE14_TBL.DELETE;
19039 G_ATTRIBUTE15_TBL.DELETE;
19040 G_ATTRIBUTE16_TBL.DELETE;
19041 G_ATTRIBUTE17_TBL.DELETE;
19042 G_ATTRIBUTE18_TBL.DELETE;
19043 G_ATTRIBUTE19_TBL.DELETE;
19044 G_ATTRIBUTE20_TBL.DELETE;
19045 G_ATTRIBUTE21_TBL.DELETE;
19046 G_ATTRIBUTE22_TBL.DELETE;
19047 G_ATTRIBUTE23_TBL.DELETE;
19048 G_ATTRIBUTE24_TBL.DELETE;
19049 G_ATTRIBUTE25_TBL.DELETE;
19050 G_ATTRIBUTE26_TBL.DELETE;
19051 G_ATTRIBUTE27_TBL.DELETE;
19052 G_ATTRIBUTE28_TBL.DELETE;
19053 G_ATTRIBUTE29_TBL.DELETE;
19054 G_ATTRIBUTE30_TBL.DELETE;
19055 --dbms_output.put_line('leaving EXECUTE_CREATE_DRAFT_FINPLAN');
19056
19057 END EXECUTE_CREATE_DRAFT_FINPLAN;
19058
19059
19060 ----------------------------------------------------------------------------------------
19061 --Name: update_plannning_element_attr
19062 --Type: Procedure
19063 --Description: This procedure can be used to update attributes of existing
19064 -- Planning Elements
19065 --
19066 --
19067 --Called subprograms: pa_budget_pvt.validate_header_info,pa_budget_pvt.validate_budget_lines
19068 -- pa_fp_planning_transaction_pub.update_planning_transactions
19069 --
19070 --
19071 --
19072
19073 PROCEDURE update_plannning_element_attr
19074 (p_api_version_number IN NUMBER
19075 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
19076 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
19077 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19078 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19079 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19080 ,p_fin_plan_type_id IN pa_budget_versions.fin_plan_type_id%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19081 ,p_fin_plan_type_name IN pa_fin_plan_types_tl.name%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19082 ,p_budget_version_number IN pa_budget_versions.version_number%TYPE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19083 ,p_version_type IN pa_budget_versions.version_type%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19084 ,p_planning_element_rec_tbl IN planning_element_rec_tbl_type
19085 ,x_msg_count OUT NOCOPY NUMBER
19086 ,x_msg_data OUT NOCOPY VARCHAR2
19087 ,x_return_status OUT NOCOPY VARCHAR2)
19088 IS
19089
19090 CURSOR c_get_plan_class_code(c_fin_plan_type_id pa_budget_versions.fin_plan_type_id%TYPE) is
19091 SELECT plan_class_code
19092 FROM pa_fin_plan_types_b
19093 WHERE fin_plan_type_id=c_fin_plan_type_id;
19094
19095 l_msg_count NUMBER := 0;
19096 l_data VARCHAR2(2000);
19097 l_msg_data VARCHAR2(2000);
19098 l_msg_index_out NUMBER;
19099 l_return_status VARCHAR2(2000);
19100 l_debug_mode VARCHAR2(30);
19101 i NUMBER;
19102
19103 l_module_name VARCHAR2(100) :='update_plannning_element_attr';
19104 l_api_name CONSTANT VARCHAR2(100) := 'update_plannning_element_attr';
19105
19106 l_project_id NUMBER;
19107 l_budget_type_code pa_budget_types.budget_type_code%TYPE;
19108 l_fin_plan_type_id NUMBER;
19109 l_fin_plan_type_name pa_fin_plan_types_tl.name%TYPE;
19110 l_fin_plan_class_code varchar2(30);
19111 l_version_type pa_budget_versions.version_type%TYPE;
19112 l_budget_version_id NUMBER;
19113 l_budget_entry_method_code pa_budget_entry_methods.budget_entry_method_code%TYPE;
19114 l_resource_list_id pa_resource_lists_all_bg.resource_list_id%TYPE;
19115 l_budget_amount_code pa_budget_types.budget_amount_code%type;
19116 l_entry_level_code pa_proj_fp_options.cost_fin_plan_level_code%TYPE;
19117 l_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE;
19118 l_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
19119 l_categorization_code pa_budget_entry_methods.categorization_code%TYPE;
19120 l_project_number pa_projects_all.segment1%type;
19121
19122 l_mfc_cost_type_id_tbl SYSTEM.pa_num_tbl_type;
19123 l_etc_method_code_tbl SYSTEM.pa_varchar2_30_tbl_type;
19124 l_spread_curve_id_tbl SYSTEM.pa_num_tbl_type;
19125
19126 l_version_info_rec pa_fp_gen_amount_utils.fp_cols;
19127
19128 l_budget_lines_in_tbl PA_BUDGET_PUB.G_BUDGET_LINES_IN_TBL%TYPE;
19129 l_budget_lines_out_tbl PA_BUDGET_PUB.G_BUDGET_LINES_OUT_TBL%TYPE;
19130 l_planning_start_date_tbl SYSTEM.pa_date_tbl_type;
19131 l_planning_end_date_tbl SYSTEM.pa_date_tbl_type;
19132 l_spread_curve_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE;
19133 l_sp_fixed_date_tbl SYSTEM.PA_DATE_TBL_TYPE;
19134 l_etc_method_name_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE;
19135
19136 l_uom_tbl SYSTEM.pa_varchar2_80_tbl_type;
19137 l_mfc_cost_type_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE;
19138
19139 l_resource_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE;
19140
19141 l_currency_code varchar2(25);
19142 l_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE;
19143
19144 l_assignment_description_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE ;
19145 l_attribute_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE ;
19146 l_attribute1_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19147 l_attribute2_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19148 l_attribute3_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19149 l_attribute4_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19150 l_attribute5_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19151 l_attribute6_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19152 l_attribute7_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19153 l_attribute8_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19154 l_attribute9_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19155 l_attribute10_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19156 l_attribute11_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19157 l_attribute12_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19158 l_attribute13_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19159 l_attribute14_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19160 l_attribute15_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19161 l_attribute16_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19162 l_attribute17_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19163 l_attribute18_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19164 l_attribute19_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19165 l_attribute20_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19166 l_attribute21_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19167 l_attribute22_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19168 l_attribute23_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19169 l_attribute24_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19170 l_attribute25_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19171 l_attribute26_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19172 l_attribute27_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19173 l_attribute28_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19174 l_attribute29_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19175 l_attribute30_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE ;
19176 --Added for bug 6408139 to pass G_PA_MISS_CHAR
19177 l_pa_miss_char varchar2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
19178
19179
19180 BEGIN
19181 -- Set the error stack.
19182 pa_debug.set_err_stack('PA_BUDGET_PUB.update_plannning_element_attr');
19183
19184 -- Get the Debug mode into local variable and set it to 'Y'if its NULL
19185 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
19186 l_debug_mode := NVL(l_debug_mode, 'Y');
19187
19188 -- Initialize the return status to success
19189 x_return_status := FND_API.G_RET_STS_SUCCESS;
19190
19191 IF FND_API.TO_BOOLEAN( p_init_msg_list )
19192 THEN
19193 FND_MSG_PUB.initialize;
19194 END IF;
19195
19196 --initialize
19197
19198 l_project_id := p_pa_project_id;
19199 l_fin_plan_type_id := p_fin_plan_type_id;
19200 l_fin_plan_type_name := p_fin_plan_type_name;
19201 l_version_type := p_version_type;
19202
19203
19204 l_mfc_cost_type_id_tbl := SYSTEM.pa_num_tbl_type();
19205 l_etc_method_code_tbl := SYSTEM.pa_varchar2_30_tbl_type();
19206 l_spread_curve_id_tbl := SYSTEM.pa_num_tbl_type();
19207
19208
19209 l_planning_start_date_tbl := SYSTEM.pa_date_tbl_type();
19210 l_planning_end_date_tbl := SYSTEM.pa_date_tbl_type();
19211 l_spread_curve_name_tbl := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
19212 l_sp_fixed_date_tbl := SYSTEM.PA_DATE_TBL_TYPE();
19213 l_etc_method_name_tbl := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
19214
19215 l_uom_tbl := SYSTEM.pa_varchar2_80_tbl_type();
19216 l_mfc_cost_type_tbl := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
19217
19218 l_resource_assignment_id_tbl := SYSTEM.pa_num_tbl_type();
19219
19220
19221 l_currency_code_tbl := SYSTEM.pa_varchar2_15_tbl_type();
19222
19223 l_assignment_description_tbl := SYSTEM.pa_varchar2_240_tbl_type();
19224 l_attribute_category_tbl := SYSTEM.pa_varchar2_30_tbl_type();
19225 l_attribute1_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19226 l_attribute2_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19227 l_attribute3_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19228 l_attribute4_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19229 l_attribute5_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19230 l_attribute6_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19231 l_attribute7_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19232 l_attribute8_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19233 l_attribute9_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19234 l_attribute10_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19235 l_attribute11_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19236 l_attribute12_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19237 l_attribute13_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19238 l_attribute14_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19239 l_attribute15_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19240 l_attribute16_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19241 l_attribute17_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19242 l_attribute18_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19243 l_attribute19_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19244 l_attribute20_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19245 l_attribute21_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19246 l_attribute22_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19247 l_attribute23_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19248 l_attribute24_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19249 l_attribute25_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19250 l_attribute26_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19251 l_attribute27_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19252 l_attribute28_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19253 l_attribute29_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19254 l_attribute30_tbl := SYSTEM.pa_varchar2_150_tbl_type();
19255
19256 pa_budget_pvt.G_res_assign_tbl.delete;
19257 --end initialize
19258
19259 if p_planning_element_rec_tbl.count = 0 then
19260 IF l_debug_mode = 'Y' THEN
19261 pa_debug.write_file('No Planning Elements Passed',5);
19262 END IF;
19263 pa_debug.reset_err_stack;
19264 return;
19265 end if;
19266
19267
19268 -- DBMS_OUTPUT.PUT_LINE('p_api_version_number '||p_api_version_number);
19269 -- DBMS_OUTPUT.PUT_LINE(' l_api_name '|| l_api_name);
19270 -- DBMS_OUTPUT.PUT_LINE('p_init_msg_list'||p_init_msg_list);
19271 -- DBMS_OUTPUT.PUT_LINE('l_project_id'||l_project_id);
19272 -- DBMS_OUTPUT.PUT_LINE('p_pm_project_reference'||p_pm_project_reference);
19273 -- DBMS_OUTPUT.PUT_LINE('p_pm_product_code'||p_pm_product_code);
19274 -- DBMS_OUTPUT.PUT_LINE('l_fin_plan_type_id'||l_fin_plan_type_id);
19275 -- DBMS_OUTPUT.PUT_LINE('l_fin_plan_type_name'||l_fin_plan_type_name);
19276 -- DBMS_OUTPUT.PUT_LINE('p_budget_version_number'||p_budget_version_number);
19277 -- DBMS_OUTPUT.PUT_LINE('l_version_type'||l_version_type);
19278
19279
19280 PA_BUDGET_PVT.validate_header_info(
19281 p_api_version_number => p_api_version_number
19282 ,p_api_name => l_api_name
19283 ,p_init_msg_list => p_init_msg_list
19284 ,px_pa_project_id => l_project_id
19285 ,p_pm_project_reference => p_pm_project_reference
19286 ,p_pm_product_code => p_pm_product_code
19287 ,px_budget_type_code => l_budget_type_code
19288 ,px_fin_plan_type_id => l_fin_plan_type_id
19289 ,px_fin_plan_type_name => l_fin_plan_type_name
19290 ,px_version_type => l_version_type
19291 ,p_budget_version_number => p_budget_version_number
19292 ,p_change_reason_code => NULL
19293 ,p_function_name => 'PA_PM_UPDATE_BUDGET'
19294 ,x_budget_entry_method_code => l_budget_entry_method_code
19295 ,x_resource_list_id => l_resource_list_id
19296 ,x_budget_version_id => l_budget_version_id
19297 ,x_fin_plan_level_code => l_entry_level_code
19298 ,x_time_phased_code => l_time_phased_code
19299 ,x_plan_in_multi_curr_flag => l_multi_curr_flag
19300 ,x_budget_amount_code => l_budget_amount_code
19301 ,x_categorization_code => l_categorization_code
19302 ,x_project_number => l_project_number
19303 /* Plan Amount Entry flags introduced by bug 6408139 */
19304 /*Passing all as G_PA_MISS_CHAR since validations not required*/
19305 ,px_raw_cost_flag => l_pa_miss_char
19306 ,px_burdened_cost_flag => l_pa_miss_char
19307 ,px_revenue_flag => l_pa_miss_char
19308 ,px_cost_qty_flag => l_pa_miss_char
19309 ,px_revenue_qty_flag => l_pa_miss_char
19310 ,px_all_qty_flag => l_pa_miss_char
19311 ,px_bill_rate_flag => l_pa_miss_char
19312 ,px_cost_rate_flag => l_pa_miss_char
19313 ,px_burden_rate_flag => l_pa_miss_char
19314 /* Plan Amount Entry flags introduced by bug 6408139 */
19315 ,x_msg_count => l_msg_count
19316 ,x_msg_data => l_msg_data
19317 ,x_return_status => l_return_status );
19318 /*
19319 DBMS_OUTPUT.PUT_LINE('return status is '||l_return_status);
19320 */
19321 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
19322 THEN
19323 IF l_debug_mode = 'Y' THEN
19324 pa_debug.write_file('Failed due to error in pa_budget_pvt.validate_header_info',5);
19325 END IF;
19326 raise PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
19327 END IF;
19328
19329 --DBMS_OUTPUT.PUT_LINE('PA_BUDGET_PVT.validate_header_info successful project number is '||l_project_number||' bversion id '||l_budget_version_id);
19330
19331 l_version_info_rec.x_budget_version_id := l_budget_version_id;
19332
19333 FOR i IN p_planning_element_rec_tbl.first..p_planning_element_rec_tbl.last LOOP
19334 -- how we will handle project id
19335 --make these null when pa.g_miss num and fnd g miss num when null
19336 l_budget_lines_in_tbl(i).pa_task_id := p_planning_element_rec_tbl(i).pa_task_id;
19337 l_budget_lines_in_tbl(i).pm_task_reference := p_planning_element_rec_tbl(i).pm_task_reference;
19338 l_budget_lines_in_tbl(i).resource_alias := p_planning_element_rec_tbl(i).resource_alias;
19339 l_budget_lines_in_tbl(i).resource_list_member_id := p_planning_element_rec_tbl(i).resource_list_member_id;
19340
19341 l_planning_start_date_tbl.extend(1);
19342 l_planning_start_date_tbl(i) := p_planning_element_rec_tbl(i).planning_start_date;
19343 if l_planning_start_date_tbl(i) is null then
19344 l_planning_start_date_tbl(i) :=FND_API.G_MISS_DATE;
19345 elsif l_planning_start_date_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
19346 l_planning_start_date_tbl(i) := null;
19347 end if;
19348
19349 l_planning_end_date_tbl.extend(1);
19350 l_planning_end_date_tbl(i) := p_planning_element_rec_tbl(i).planning_end_date;
19351 if l_planning_end_date_tbl(i) is null then
19352 l_planning_end_date_tbl(i) :=FND_API.G_MISS_DATE;
19353 elsif l_planning_end_date_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
19354 l_planning_end_date_tbl(i) := null;
19355 end if;
19356
19357 l_spread_curve_name_tbl.extend(1);
19358 l_spread_curve_name_tbl(i) := p_planning_element_rec_tbl(i).spread_curve;
19359 if l_spread_curve_name_tbl(i)is null then
19360 l_spread_curve_name_tbl(i) :=FND_API.G_MISS_CHAR;
19361 elsif l_spread_curve_name_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
19362 l_spread_curve_name_tbl(i) := null;
19363 end if;
19364
19365 l_sp_fixed_date_tbl.extend(1);
19366 l_sp_fixed_date_tbl(i) := p_planning_element_rec_tbl(i).fixed_date;
19367 if l_sp_fixed_date_tbl(i) is null then
19368 l_sp_fixed_date_tbl(i) :=FND_API.G_MISS_DATE;
19369 elsif l_sp_fixed_date_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
19370 l_sp_fixed_date_tbl(i) := null;
19371 end if;
19372
19373 l_etc_method_name_tbl.extend(1);
19374 l_etc_method_name_tbl(i) := p_planning_element_rec_tbl(i).etc_method_name;
19375 if l_etc_method_name_tbl(i) is null then
19376 l_etc_method_name_tbl(i) :=FND_API.G_MISS_CHAR;
19377 elsif l_etc_method_name_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
19378 l_etc_method_name_tbl(i) := null;
19379 end if;
19380
19381 l_uom_tbl.extend(1);
19382 l_uom_tbl(i):=null;
19383 l_mfc_cost_type_tbl.extend(1);
19384 l_mfc_cost_type_tbl(i):=null;
19385
19386 end loop;
19387
19388 pa_budget_pvt.Validate_Budget_Lines
19389 (p_calling_context => 'UPDATE_PLANNING_ELEMENT_ATTR'
19390 ,p_pa_project_id => l_project_id
19391 ,p_budget_type_code => NULL
19392 ,p_fin_plan_type_id => l_fin_plan_type_id
19393 ,p_version_type => l_version_type
19394 ,p_resource_list_id => l_resource_list_id
19395 ,p_time_phased_code => l_time_phased_code
19396 ,p_budget_entry_method_code => NULL
19397 ,p_entry_level_code => l_entry_level_code
19398 ,p_allow_qty_flag => null
19399 ,p_allow_raw_cost_flag => null
19400 ,p_allow_burdened_cost_flag => null
19401 ,p_allow_revenue_flag => null
19402 ,p_multi_currency_flag => l_multi_curr_flag
19403 ,p_project_cost_rate_type => null
19404 ,p_project_cost_rate_date_typ => null
19405 ,p_project_cost_rate_date => null
19406 ,p_project_cost_exchange_rate => null
19407 ,p_projfunc_cost_rate_type => null
19408 ,p_projfunc_cost_rate_date_typ => null
19409 ,p_projfunc_cost_rate_date => null
19410 ,p_projfunc_cost_exchange_rate => null
19411 ,p_project_rev_rate_type => null
19412 ,p_project_rev_rate_date_typ => null
19413 ,p_project_rev_rate_date => null
19414 ,p_project_rev_exchange_rate => null
19415 ,p_projfunc_rev_rate_type => null
19416 ,p_projfunc_rev_rate_date_typ => null
19417 ,p_projfunc_rev_rate_date => null
19418 ,p_projfunc_rev_exchange_rate => null
19419 ,p_planning_start_date_tbl => l_planning_start_date_tbl
19420 ,p_planning_end_date_tbl => l_planning_end_date_tbl
19421 ,p_spread_curve_name_tbl => l_spread_curve_name_tbl
19422 ,p_sp_fixed_date_tbl => l_sp_fixed_date_tbl
19423 ,p_etc_method_name_tbl => l_etc_method_name_tbl
19424 ,p_uom_tbl => l_uom_tbl
19425 ,p_mfc_cost_type_tbl => l_mfc_cost_type_tbl
19426 ,p_version_info_rec => l_version_info_rec
19427 ,px_budget_lines_in => l_budget_lines_in_tbl
19428 ,x_budget_lines_out => l_budget_lines_out_tbl
19429 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
19430 ,x_etc_method_code_tbl => l_etc_method_code_tbl
19431 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
19432 ,x_msg_count => l_msg_count
19433 ,x_msg_data => l_msg_data
19434 ,x_return_status => l_return_status);
19435
19436 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
19437
19438 IF l_debug_mode = 'Y' THEN
19439 pa_debug.write_file('Failed due to error in pa_budget_pvt.validate_budget_lines',5);
19440 END IF;
19441 raise PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
19442 END IF;
19443
19444 --DBMS_OUTPUT.PUT_LINE('PA_BUDGET_PVT.validate_budget_lines successful');
19445 /*
19446 for i in l_etc_method_code_tbl.first..l_etc_method_code_tbl.count loop
19447 DBMS_OUTPUT.PUT_LINE('resource alias '||i||' '||l_budget_lines_in_tbl(i).pm_task_reference);
19448 end loop;
19449 */
19450 l_resource_assignment_id_tbl.extend(l_budget_lines_in_tbl.count);
19451 l_currency_code_tbl.extend(l_budget_lines_in_tbl.count);
19452
19453 l_assignment_description_tbl.extend(l_budget_lines_in_tbl.count);
19454 l_attribute_category_tbl.extend(l_budget_lines_in_tbl.count);
19455 l_attribute1_tbl.extend(l_budget_lines_in_tbl.count);
19456 l_attribute2_tbl.extend(l_budget_lines_in_tbl.count);
19457 l_attribute3_tbl.extend(l_budget_lines_in_tbl.count);
19458 l_attribute4_tbl.extend(l_budget_lines_in_tbl.count);
19459 l_attribute5_tbl.extend(l_budget_lines_in_tbl.count);
19460 l_attribute6_tbl.extend(l_budget_lines_in_tbl.count);
19461 l_attribute7_tbl.extend(l_budget_lines_in_tbl.count);
19462 l_attribute8_tbl.extend(l_budget_lines_in_tbl.count);
19463 l_attribute9_tbl.extend(l_budget_lines_in_tbl.count);
19464 l_attribute10_tbl.extend(l_budget_lines_in_tbl.count);
19465 l_attribute11_tbl.extend(l_budget_lines_in_tbl.count);
19466 l_attribute12_tbl.extend(l_budget_lines_in_tbl.count);
19467 l_attribute13_tbl.extend(l_budget_lines_in_tbl.count);
19468 l_attribute14_tbl.extend(l_budget_lines_in_tbl.count);
19469 l_attribute15_tbl.extend(l_budget_lines_in_tbl.count);
19470 l_attribute16_tbl.extend(l_budget_lines_in_tbl.count);
19471 l_attribute17_tbl.extend(l_budget_lines_in_tbl.count);
19472 l_attribute18_tbl.extend(l_budget_lines_in_tbl.count);
19473 l_attribute19_tbl.extend(l_budget_lines_in_tbl.count);
19474 l_attribute20_tbl.extend(l_budget_lines_in_tbl.count);
19475 l_attribute21_tbl.extend(l_budget_lines_in_tbl.count);
19476 l_attribute22_tbl.extend(l_budget_lines_in_tbl.count);
19477 l_attribute23_tbl.extend(l_budget_lines_in_tbl.count);
19478 l_attribute24_tbl.extend(l_budget_lines_in_tbl.count);
19479 l_attribute25_tbl.extend(l_budget_lines_in_tbl.count);
19480 l_attribute26_tbl.extend(l_budget_lines_in_tbl.count);
19481 l_attribute27_tbl.extend(l_budget_lines_in_tbl.count);
19482 l_attribute28_tbl.extend(l_budget_lines_in_tbl.count);
19483 l_attribute29_tbl.extend(l_budget_lines_in_tbl.count);
19484 l_attribute30_tbl.extend(l_budget_lines_in_tbl.count);
19485
19486
19487 open c_get_plan_class_code(l_fin_plan_type_id);
19488 fetch c_get_plan_class_code into l_fin_plan_class_code;
19489 close c_get_plan_class_code;
19490
19491 SELECT decode(pf.approved_rev_plan_type_flag,'Y'
19492 ,pa.PROJFUNC_CURRENCY_CODE
19493 ,pa.PROJECT_CURRENCY_CODE)
19494 INTO l_currency_code
19495 FROM pa_projects_all pa,
19496 pa_proj_fp_options pf
19497 WHERE pa.project_id=l_project_id
19498 AND pa.project_id=pf.project_id
19499 AND pf.fin_plan_version_id=l_budget_version_id;
19500
19501 FOR i IN 1..l_budget_lines_in_tbl.COUNT loop
19502 /*
19503 begin
19504 select resource_assignment_id
19505 into l_resource_assignment_id_tbl(i)
19506 from pa_resource_assignments
19507 where budget_version_id=l_budget_version_id
19508 and task_id=l_budget_lines_in_tbl(i).pa_task_id
19509 and resource_list_member_id=l_budget_lines_in_tbl(i).resource_list_member_id
19510 and project_id=l_project_id
19511 and PROJECT_ASSIGNMENT_ID =-1;
19512 exception when no_data_found then
19513 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
19514 p_msg_name => 'RES_ASSGN_DOESNT_EXIST_AMG',
19515 p_token1 => 'PROJECT_OR_TASK_NUMBER',
19516 p_value1 => l_budget_lines_in_tbl(i).pm_task_reference,
19517 p_token2 => 'RESOURCE',
19518 p_value2 => l_budget_lines_in_tbl(i).resource_alias);
19519 end;*/
19520 l_resource_assignment_id_tbl(i) := pa_budget_pvt.G_res_assign_tbl(i).resource_assignment_id;
19521 begin
19522 select txn_currency_code into l_currency_code_tbl(i)
19523 from pa_budget_lines
19524 where resource_assignment_id=l_resource_assignment_id_tbl(i)
19525 and rownum=1;
19526 exception when no_data_found then
19527 l_currency_code_tbl(i):=l_currency_code;
19528 end;
19529
19530
19531 l_assignment_description_tbl(i) := p_planning_element_rec_tbl(i).assignment_description;
19532 if l_assignment_description_tbl(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
19533 l_assignment_description_tbl(i):=null;
19534 elsif l_assignment_description_tbl(i) = null then
19535 l_assignment_description_tbl(i):=FND_API.G_MISS_CHAR;
19536 end if;
19537
19538 l_attribute_category_tbl(i) := p_planning_element_rec_tbl(i).attribute_category;
19539 l_attribute1_tbl(i) := p_planning_element_rec_tbl(i).attribute1;
19540 l_attribute2_tbl(i) := p_planning_element_rec_tbl(i).attribute2;
19541 l_attribute3_tbl(i) := p_planning_element_rec_tbl(i).attribute3;
19542 l_attribute4_tbl(i) := p_planning_element_rec_tbl(i).attribute4;
19543 l_attribute5_tbl(i) := p_planning_element_rec_tbl(i).attribute5;
19544 l_attribute6_tbl(i) := p_planning_element_rec_tbl(i).attribute6;
19545 l_attribute7_tbl(i) := p_planning_element_rec_tbl(i).attribute7;
19546 l_attribute8_tbl(i) := p_planning_element_rec_tbl(i).attribute8;
19547 l_attribute9_tbl(i) := p_planning_element_rec_tbl(i).attribute9;
19548 l_attribute10_tbl(i) := p_planning_element_rec_tbl(i).attribute10;
19549 l_attribute11_tbl(i) := p_planning_element_rec_tbl(i).attribute11;
19550 l_attribute12_tbl(i) := p_planning_element_rec_tbl(i).attribute12;
19551 l_attribute13_tbl(i) := p_planning_element_rec_tbl(i).attribute13;
19552 l_attribute14_tbl(i) := p_planning_element_rec_tbl(i).attribute14;
19553 l_attribute15_tbl(i) := p_planning_element_rec_tbl(i).attribute15;
19554 l_attribute16_tbl(i) := p_planning_element_rec_tbl(i).attribute16;
19555 l_attribute17_tbl(i) := p_planning_element_rec_tbl(i).attribute17;
19556 l_attribute18_tbl(i) := p_planning_element_rec_tbl(i).attribute18;
19557 l_attribute19_tbl(i) := p_planning_element_rec_tbl(i).attribute19;
19558 l_attribute20_tbl(i) := p_planning_element_rec_tbl(i).attribute20;
19559 l_attribute21_tbl(i) := p_planning_element_rec_tbl(i).attribute21;
19560 l_attribute22_tbl(i) := p_planning_element_rec_tbl(i).attribute22;
19561 l_attribute23_tbl(i) := p_planning_element_rec_tbl(i).attribute23;
19562 l_attribute24_tbl(i) := p_planning_element_rec_tbl(i).attribute24;
19563 l_attribute25_tbl(i) := p_planning_element_rec_tbl(i).attribute25;
19564 l_attribute26_tbl(i) := p_planning_element_rec_tbl(i).attribute26;
19565 l_attribute27_tbl(i) := p_planning_element_rec_tbl(i).attribute27;
19566 l_attribute28_tbl(i) := p_planning_element_rec_tbl(i).attribute28;
19567 l_attribute29_tbl(i) := p_planning_element_rec_tbl(i).attribute29;
19568 l_attribute30_tbl(i) := p_planning_element_rec_tbl(i).attribute30;
19569
19570 end loop;
19571
19572 pa_fp_planning_transaction_pub.update_planning_transactions(
19573 p_context => l_fin_plan_class_code
19574 ,p_budget_version_id => l_budget_version_id
19575 ,p_resource_assignment_id_tbl => l_resource_assignment_id_tbl
19576 ,p_planning_start_date_tbl => l_planning_start_date_tbl
19577 ,p_planning_end_date_tbl => l_planning_end_date_tbl
19578 ,p_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
19579 ,p_etc_method_code_tbl => l_etc_method_code_tbl
19580 ,p_spread_curve_id_tbl => l_spread_curve_id_tbl
19581 ,p_sp_fixed_date_tbl => l_sp_fixed_date_tbl
19582 ,p_currency_code_tbl => l_currency_code_tbl
19583 ,p_assignment_description_tbl => l_assignment_description_tbl
19584 ,p_attribute_category_tbl => l_attribute_category_tbl
19585 ,p_attribute1_tbl => l_attribute1_tbl
19586 ,p_attribute2_tbl => l_attribute2_tbl
19587 ,p_attribute3_tbl => l_attribute3_tbl
19588 ,p_attribute4_tbl => l_attribute4_tbl
19589 ,p_attribute5_tbl => l_attribute5_tbl
19590 ,p_attribute6_tbl => l_attribute6_tbl
19591 ,p_attribute7_tbl => l_attribute7_tbl
19592 ,p_attribute8_tbl => l_attribute8_tbl
19593 ,p_attribute9_tbl => l_attribute9_tbl
19594 ,p_attribute10_tbl => l_attribute10_tbl
19595 ,p_attribute11_tbl => l_attribute11_tbl
19596 ,p_attribute12_tbl => l_attribute12_tbl
19597 ,p_attribute13_tbl => l_attribute13_tbl
19598 ,p_attribute14_tbl => l_attribute14_tbl
19599 ,p_attribute15_tbl => l_attribute15_tbl
19600 ,p_attribute16_tbl => l_attribute16_tbl
19601 ,p_attribute17_tbl => l_attribute17_tbl
19602 ,p_attribute18_tbl => l_attribute18_tbl
19603 ,p_attribute19_tbl => l_attribute19_tbl
19604 ,p_attribute20_tbl => l_attribute20_tbl
19605 ,p_attribute21_tbl => l_attribute21_tbl
19606 ,p_attribute22_tbl => l_attribute22_tbl
19607 ,p_attribute23_tbl => l_attribute23_tbl
19608 ,p_attribute24_tbl => l_attribute24_tbl
19609 ,p_attribute25_tbl => l_attribute25_tbl
19610 ,p_attribute26_tbl => l_attribute26_tbl
19611 ,p_attribute27_tbl => l_attribute27_tbl
19612 ,p_attribute28_tbl => l_attribute28_tbl
19613 ,p_attribute29_tbl => l_attribute29_tbl
19614 ,p_attribute30_tbl => l_attribute30_tbl
19615 ,p_pji_rollup_required => 'Y'
19616 ,x_msg_count => l_msg_count
19617 ,x_msg_data => l_msg_data
19618 ,x_return_status => l_return_status
19619 );
19620
19621 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
19622 THEN
19623 IF l_debug_mode = 'Y' THEN
19624 pa_debug.write_file('Failed due to error in update_planning_transactions',5);
19625 END IF;
19626 raise PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
19627 END IF;
19628
19629
19630
19631 pa_debug.reset_err_stack;
19632
19633 EXCEPTION
19634 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
19635
19636 l_msg_count := FND_MSG_PUB.count_msg;
19637
19638 IF l_msg_count = 1 THEN
19639 PA_INTERFACE_UTILS_PUB.get_messages
19640 ( p_encoded => FND_API.G_TRUE
19641 ,p_msg_index => 1
19642 ,p_msg_count => l_msg_count
19643 ,p_msg_data => l_msg_data
19644 ,p_data => l_data
19645 ,p_msg_index_out => l_msg_index_out);
19646 x_msg_data := l_data;
19647 x_msg_count := l_msg_count;
19648 ELSE
19649 x_msg_count := l_msg_count;
19650 x_msg_data := l_msg_data;
19651 END IF;
19652 IF l_debug_mode = 'Y' THEN
19653 pa_debug.g_err_stage:='Invalid Arguments Passed';
19654 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
19655 pa_debug.write_file('update_plannning_element_attr ' || x_msg_data,5);
19656 END IF;
19657
19658 x_return_status:= FND_API.G_RET_STS_ERROR;
19659
19660
19661 pa_debug.reset_err_stack;
19662
19663
19664 WHEN Others THEN
19665
19666
19667 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19668 x_msg_count := 1;
19669 x_msg_data := SQLERRM;
19670 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_BUDGET_PUB'
19671 ,p_procedure_name => 'update_plannning_element_attr');
19672 IF l_debug_mode = 'Y' THEN
19673 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
19674 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
19675 pa_debug.write_file('update_plannning_element_attr ' || pa_debug.G_Err_Stack,5);
19676 END IF;
19677
19678 pa_debug.reset_err_stack;
19679
19680 END update_plannning_element_attr;
19681
19682
19683 end PA_BUDGET_PUB;