1 package body PA_BUDGET_CHECK_PVT as
2 /*$Header: PAPMBCVB.pls 120.14.12020000.2 2013/03/06 09:40:24 admarath 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 g_module_name VARCHAR2(100) := 'pa.plsql.PA_BUDGET_CHECK_PVT';
8
9 ----------------------------------------------------------------------------------------
10 --Name: get_valid_period_dates_Pvt
11 --Type: Procedure
12 --Description: This procedure can be used to get the valid begin and end date
13 -- for a budget line
14 --
15 --
16 --Called subprograms:
17 --
18 --
19 --
20 --History:
21 -- 10-OCT-1996 L. de Werker Created
22 -- 17-OCT-1996 L. de Werker Parameter p_period_name_out added, to enable the translation
23 -- of begin and end date to a period name.
24 -- 08-JAN-2003 bvarnasi Added additional validations for Date Range case.
25 -- 05-Nov-2204 dbora Added additional parameters in - p_context with default value of null
26 --- out - x_error_code to be passed back the validation error code if
27 -- the context is 'WEBADI'.
28 -- FP.M changes: For budgets having amount in multiple periods, p_period_name_in
29 -- can be null. Validations removed for non-time phasing and date range budgets
30 --
31 -- 27-SEP-2005 jwhite - Bug 4588279
32 -- For the get_valid_period_dates_Pvt procedure, added budgetary control
33 -- validation for latest encumbrance year.
34 --
35 --
36
37 PROCEDURE get_valid_period_dates_Pvt
38 ( p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
39 ,p_project_id IN NUMBER
40 ,p_task_id IN NUMBER
41 ,p_time_phased_type_code IN VARCHAR2
42 ,p_entry_level_code IN VARCHAR2
43 ,p_period_name_in IN VARCHAR2
44 ,p_budget_start_date_in IN DATE
45 ,p_budget_end_date_in IN DATE
46 ,p_period_name_out OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
47 ,p_budget_start_date_out OUT NOCOPY DATE --File.Sql.39 bug 4440895
48 ,p_budget_end_date_out OUT NOCOPY DATE --File.Sql.39 bug 4440895
49
50 -- Bug 3986129: FP.M Web ADI Dev changes, new parameters
51 ,p_context IN VARCHAR2
52 ,p_calling_model_context IN VARCHAR2
53 ,x_error_code OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
54 )
55 IS
56
57 CURSOR l_budget_periods_csr
58 (p_period_name VARCHAR2
59 ,p_period_type_code VARCHAR2 )
60 IS
61 SELECT period_start_date
62 , period_end_date
63 , PERIOD_YEAR /* bug 4588279: added PERIOD_YEAR */
64 FROM pa_budget_periods_v
65 WHERE period_name = p_period_name
66 AND period_type_code = p_period_type_code;
67
68 CURSOR l_period_name_csr
69 (p_start_date DATE
70 ,p_end_date DATE
71 ,p_period_type_code VARCHAR2 )
72 IS
73 SELECT period_name
74 , PERIOD_YEAR /* bug 4588279: added PERIOD_YEAR */
75 FROM pa_budget_periods_v
76 WHERE period_type_code = p_period_type_code
77 AND period_start_date = p_start_date
78 AND period_end_date = p_end_date;
79
80
81 CURSOR l_project_dates_csr
82 ( p_project_id NUMBER )
83 IS
84 SELECT trunc(start_date) --Added trunc for Bug 3899746
85 , trunc(completion_date) --Added trunc for Bug 3899746
86 FROM pa_projects
87 WHERE project_id = p_project_id;
88
89 CURSOR l_task_dates_csr
90 ( p_task_id NUMBER )
91 IS
92 SELECT trunc(start_date) --Added trunc for Bug 3899746
93 , trunc(completion_date) --Added trunc for Bug 3899746
94 FROM pa_tasks
95 WHERE task_id = p_task_id;
96
97
98 l_api_name CONSTANT VARCHAR2(30) := 'get_valid_period_dates';
99 l_task_start_date DATE;
100 l_task_end_date DATE;
101 l_project_start_date DATE;
102 l_project_end_date DATE;
103 l_budget_start_date DATE;
104 l_budget_end_date DATE;
105 l_period_name VARCHAR2(20);
106
107 l_amg_segment1 VARCHAR2(25);
108 l_amg_task_number VARCHAR2(50);
109
110 --needed to get the field values associated to a AMG message
111
112 CURSOR l_amg_project_csr
113 (p_pa_project_id pa_projects.project_id%type)
114 IS
115 SELECT segment1
116 FROM pa_projects p
117 WHERE p.project_id = p_pa_project_id;
118
119 CURSOR l_amg_task_csr
120 (p_pa_task_id pa_tasks.task_id%type)
121 IS
122 SELECT task_number
123 FROM pa_tasks p
124 WHERE p.task_id = p_pa_task_id;
125
126 --Declared these constants for bug 2833255. These variables will contain
127 --the truncated values for p_budget_start_date_in and p_budget_end_date_in
128 l_budget_start_date_in pa_budget_lines.start_date%TYPE :=trunc(p_budget_start_date_in);
129 l_budget_end_date_in pa_budget_lines.end_date%TYPE :=trunc(p_budget_end_date_in);
130
131 -- Bug 3986129: FP.M Web ADI Dev changes, new variables
132 valid_gl_start_date VARCHAR2(1) := 'N';
133 valid_gl_end_date VARCHAR2(1) := 'N';
134 valid_pa_start_date VARCHAR2(1) := 'N';
135 valid_pa_end_date VARCHAR2(1) := 'N';
136
137 l_elem_ver_id pa_proj_element_versions.element_version_id%TYPE;
138 l_parent_structure_version_id pa_proj_element_versions.parent_structure_version_id%TYPE;
139 l_elem_ver_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
140 l_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
141 l_compl_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
142 l_msg_count NUMBER;
143 l_msg_data VARCHAR2(2000);
144 l_data VARCHAR2(2000);
145 l_msg_index_out NUMBER;
146
147 l_period_year gl_period_statuses.period_year%TYPE; /* bug 4588279: added PERIOD_YEAR */
148
149
150
151 BEGIN
152
153 -- Standard begin of API savepoint
154
155 SAVEPOINT get_valid_period_dates_pvt;
156
157 -- Get segment1 for AMG messages
158
159 OPEN l_amg_project_csr( p_project_id );
160 FETCH l_amg_project_csr INTO l_amg_segment1;
161 CLOSE l_amg_project_csr;
162 /*
163 OPEN l_amg_task_csr( p_task_id );
164 FETCH l_amg_task_csr INTO l_amg_task_number;
165 CLOSE l_amg_task_csr;
166 */
167 IF p_task_id <> 0 THEN
168
169 l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
170 (p_task_number=> ''
171 ,p_task_reference => ''
172 ,p_task_id => p_task_id);
173 ELSE
174 l_amg_task_number := l_amg_segment1;
175 END IF;
176
177 -- Set API return status to success
178
179 p_return_status := FND_API.G_RET_STS_SUCCESS;
180
181 -- check business rules related to timephasing
182 -- P = PA period, G = GL period, R = Date Range
183
184
185 IF p_time_phased_type_code = 'P'
186 OR p_time_phased_type_code = 'G'
187 THEN
188 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
189 --dbms_output.put_line('Time phased code: '||p_time_phased_type_code);
190 --dbms_output.put_line('Period name : '||p_period_name_in);
191
192 IF p_period_name_in IS NULL
193 OR p_period_name_in = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
194 THEN
195
196 IF l_budget_start_date_in IS NULL
197 OR l_budget_start_date_in = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
198 OR l_budget_end_date_in IS NULL
199 OR l_budget_end_date_in = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
200 THEN
201 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
202 pa_interface_utils_pub.map_new_amg_msg
203 ( p_old_message_code => 'PA_BUDGET_DATES_MISSING'
204 ,p_msg_attribute => 'CHANGE'
205 ,p_resize_flag => 'N'
206 ,p_msg_context => 'BUDG'
207 ,p_attribute1 => l_amg_segment1
208 ,p_attribute2 => l_amg_task_number
209 ,p_attribute3 => ''
210 ,p_attribute4 => ''
211 ,p_attribute5 => '');
212 END IF;
213 RAISE FND_API.G_EXC_ERROR;
214 ELSE
215 --try to get the period name related to those dates
216
217 OPEN l_period_name_csr( l_budget_start_date_in
218 ,l_budget_end_date_in
219 ,p_time_phased_type_code );
220
221 FETCH l_period_name_csr INTO l_period_name, l_period_year; /* bug 4588279: added PERIOD_YEAR */
222
223 IF l_period_name_csr%NOTFOUND
224 THEN
225 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
226 pa_interface_utils_pub.map_new_amg_msg
227 ( p_old_message_code => 'PA_PERIOD_DATES_INVALID'
228 ,p_msg_attribute => 'CHANGE'
229 ,p_resize_flag => 'N'
230 ,p_msg_context => 'BUDG'
231 ,p_attribute1 => l_amg_segment1
232 ,p_attribute2 => l_amg_task_number
233 ,p_attribute3 => ''
234 ,p_attribute4 => ''
235 ,p_attribute5 => '');
236 END IF;
237
238 CLOSE l_period_name_csr;
239 RAISE FND_API.G_EXC_ERROR;
240 END IF;
241
242 CLOSE l_period_name_csr;
243
244 p_budget_start_date_out := l_budget_start_date_in;
245 p_budget_end_date_out := l_budget_end_date_in;
246 p_period_name_out := l_period_name;
247 END IF;
248
249 ELSE
250
251 --get the related start and end dates
252 OPEN l_budget_periods_csr
253 ( p_period_name_in
254 , p_time_phased_type_code );
255
256
257 FETCH l_budget_periods_csr
258 INTO l_budget_start_date, l_budget_end_date, l_period_year; /* bug 4588279: added PERIOD_YEAR */
259
260 IF l_budget_periods_csr%NOTFOUND
261 THEN
262 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
263 pa_interface_utils_pub.map_new_amg_msg
264 ( p_old_message_code => 'PA_BUDGET_PERIOD_IS_INVALID'
265 ,p_msg_attribute => 'CHANGE'
266 ,p_resize_flag => 'Y'
267 ,p_msg_context => 'BUDG'
268 ,p_attribute1 => l_amg_segment1
269 ,p_attribute2 => l_amg_task_number
270 ,p_attribute3 => ''
271 ,p_attribute4 => ''
272 ,p_attribute5 => '');
273 END IF;
274
275 CLOSE l_budget_periods_csr;
276 RAISE FND_API.G_EXC_ERROR;
277 END IF;
278
279 CLOSE l_budget_periods_csr;
280
281 p_budget_start_date_out := l_budget_start_date;
282 p_budget_end_date_out := l_budget_end_date;
283 p_period_name_out := p_period_name_in;
284
285 END IF; --is period_name_in missing
286
287 /* Bug 3986129: FP.M Web ADI Dev changes -Commenting out the following codes
288 * as date ranage budgets are no longer valid in FP.M */
289
290
291
292
293 -- Bug 4588279, 27-SEP-05, jwhite --------------------------------------------
294 -- For Budgetary Control Enabled GL budgets, issue error if the period_year is
295 -- later than the latest encumbrance year for the project.
296
297 -- The G_Latest_Encumbrance_Year global is populated by the calling procedure.
298
299 IF ( p_time_phased_type_code = 'G' )
300 THEN
301
302 IF ( PA_BUDGET_PUB.G_Latest_Encumbrance_Year > -99)
303 THEN
304 -- Budgetary Control Enabled
305 IF ( l_period_year > PA_BUDGET_PUB.G_Latest_Encumbrance_Year )
306 THEN
307 pa_utils.add_message
308 ( p_app_short_name => 'PA',
309 p_msg_name => 'PA_BC_ENC_YR_NO_CHG_FUTURE');
310 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
311 END IF;
312 END IF;
313
314 END IF; -- p_time_phased_type_code = 'G'
315
316 -- End Bug 4588279, 27-SEP-05, jwhite -----------------------------------------
317
318
319 -- Bug 4437277 Adding the check for forms based Model.
320 END IF;
321
322 ELSIF p_time_phased_type_code = 'R'
323 THEN
324 --validation of incoming dates
325 IF NVL(p_calling_model_context ,'-99') = 'BUDGETSMODEL' THEN
326
327 IF l_budget_start_date_in = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
328 OR l_budget_start_date_in IS NULL
329 THEN
330 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
331 THEN
332 pa_interface_utils_pub.map_new_amg_msg
333 ( p_old_message_code => 'PA_START_DATE_IS_MISSING'
334 ,p_msg_attribute => 'CHANGE'
335 ,p_resize_flag => 'N'
336 ,p_msg_context => 'PROJ'
337 ,p_attribute1 => l_amg_segment1
338 ,p_attribute2 => ''
339 ,p_attribute3 => ''
340 ,p_attribute4 => ''
341 ,p_attribute5 => '');
342 END IF;
343
344 RAISE FND_API.G_EXC_ERROR;
345 END IF;
346
347 IF l_budget_end_date_in = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
348 OR l_budget_end_date_in IS NULL
349 THEN
350 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
351 THEN
352 pa_interface_utils_pub.map_new_amg_msg
353 ( p_old_message_code => 'PA_END_DATE_IS_MISSING'
354 ,p_msg_attribute => 'CHANGE'
355 ,p_resize_flag => 'N'
356 ,p_msg_context => 'PROJ'
357 ,p_attribute1 => l_amg_segment1
358 ,p_attribute2 => ''
359 ,p_attribute3 => ''
360 ,p_attribute4 => ''
361 ,p_attribute5 => '');
362 END IF;
363
364 RAISE FND_API.G_EXC_ERROR;
365 END IF;
366 /*
367 The following code is added while doing webADI changes. The following
368 validations are added (which were not being done earlier):
369 1. If the start date > end date
370 2. If start date < project / task start date based on the planning level of Proejct / Task respectively
371 3. If end date > project / task end date based on the planning level of Proejct / Task respectively
372 IMPORTANT NOTE:
373 Please do not change the message codes or do not change the way the
374 map_new_amg_msg API is called for the new validations. These validations
375 are common to AMG and webADI contexts. In case of webADI only lookup codes
376 can be used to display the error to the user. So, care has been taken
377 to keep the error code same as the lookup code.
378 */
379 IF l_budget_start_date_in > l_budget_end_date_in THEN
380 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
381 THEN
382 pa_interface_utils_pub.map_new_amg_msg
383 ( p_old_message_code => 'PA_SU_INVALID_DATES'
384 ,p_msg_attribute => 'CHANGE'
385 ,p_resize_flag => 'Y' -- Set to Y so that get_new_message_code API is called and same message gets returned !
386 ,p_msg_context => 'PROJ'
387 ,p_attribute1 => l_amg_segment1
388 ,p_attribute2 => ''
389 ,p_attribute3 => ''
390 ,p_attribute4 => ''
391 ,p_attribute5 => '');
392 END IF;
393
394 RAISE FND_API.G_EXC_ERROR;
395 END IF;
396 /* Bug 12565323 Commenting the conditions as system doesnt not do the same validation in forms flow.
397 IF p_entry_level_code = 'P' THEN
398 OPEN l_project_dates_csr(p_project_id);
399 FETCH l_project_dates_csr INTO l_project_start_date, l_project_end_date;
400 CLOSE l_project_dates_csr;
401
402 IF l_budget_start_date_in < l_project_start_date OR
403 l_budget_end_date_in > l_project_end_date THEN
404 pa_interface_utils_pub.map_new_amg_msg
405 ( p_old_message_code => 'PA_FP_NO_PROJ_TASK_DATE_RANGE'
406 ,p_msg_attribute => 'CHANGE'
407 ,p_resize_flag => 'Y' -- Set to Y so that get_new_message_code API is called and same message gets returned !
408 ,p_msg_context => 'PROJ'
409 ,p_attribute1 => l_amg_segment1
410 ,p_attribute2 => ''
411 ,p_attribute3 => ''
412 ,p_attribute4 => ''
413 ,p_attribute5 => '');
414
415 RAISE FND_API.G_EXC_ERROR;
416 END IF;
417
418 ELSE -- planning level is 'Task'
419 OPEN l_task_dates_csr(p_task_id);
420 FETCH l_task_dates_csr INTO l_task_start_date, l_task_end_date;
421 CLOSE l_task_dates_csr;
422
423 IF l_budget_start_date_in < l_task_start_date OR
424 l_budget_end_date_in > l_task_end_date THEN
425 pa_interface_utils_pub.map_new_amg_msg
426 ( p_old_message_code => 'PA_FP_NO_TASK_DATE_RANGE'
427 ,p_msg_attribute => 'CHANGE'
428 ,p_resize_flag => 'Y' -- Set to Y so that get_new_message_code API is called and same message gets returned !
429 ,p_msg_context => 'PROJ'
430 ,p_attribute1 => l_amg_segment1
431 ,p_attribute2 => ''
432 ,p_attribute3 => ''
433 ,p_attribute4 => ''
434 ,p_attribute5 => '');
435
436 RAISE FND_API.G_EXC_ERROR;
437 END IF;
438
439 END IF; -- End If for entry level 'Project'
440 -- End of additional validations done as part of webADI changes
441 */
442 -- Fix: 22-JAN-97, jwhite -------------------------------------------------------------------------------
443 -- For entry methods specified as 'date range', start and end dates were not being returned.
444 --
445 p_budget_start_date_out := l_budget_start_date_in;
446 p_budget_end_date_out := l_budget_end_date_in;
447 p_period_name_out := p_period_name_in;
448 -- -------------------------------------------------------------------------------------------------------------*/
449 END IF; -- If budget Type code not null
450 -- END IF; -- p_context <> WEBADI
451
452
453
454 ELSE --time_phased_type_code = 'N'
455
456 /* Bug 3986129: FP.M Web ADI Dev changes:
457 * Changed the logic in the code to derive the budget line start date and end date
458 * by calling PA_PLANNING_TRANSACTION_UTILS.get_defautl_planning_dates api when
459 * both these dates are not passed. If both the dates are passed to this api,
460 * then they are honoured and the validation done here to check if end date > start date
461 * If any one of the date is not passed, an error is raised.
462 * Now, instead of populating the error messages to the stack, the respective error
463 * code is returned back to the calling api to process it further, if this api is
464 * called with p_context = 'WEBADI'
465 */
466
467
468 --For Bug 4437277
469
470 IF p_entry_level_code = 'P' THEN
471 IF NVL(p_calling_model_context ,'-99') = 'BUDGETSMODEL' THEN
472
473
474 OPEN l_project_dates_csr(p_project_id);
475 FETCH l_project_dates_csr INTO l_project_start_date, l_project_end_date;
476 CLOSE l_project_dates_csr;
477
478 l_project_end_date:=nvl(l_project_end_date,PA_BUDGET_CHECK_PVT.Get_project_end_date); -- Added for the bug 13344742
479
480 IF (l_project_start_date IS NULL) THEN
481
482 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
483 pa_interface_utils_pub.map_new_amg_msg
484 ( p_old_message_code => 'PA_PROJ_START_DATE_MISS1'
485 ,p_msg_attribute => 'CHANGE'
486 ,p_resize_flag => 'N'
487 ,p_msg_context => 'PROJ'
488 ,p_attribute1 => l_amg_segment1
489 ,p_attribute2 => ''
490 ,p_attribute3 => ''
491 ,p_attribute4 => ''
492 ,p_attribute5 => '');
493 END IF;
494 RAISE FND_API.G_EXC_ERROR;
495
496 END IF;
497
498 IF (l_project_end_date IS NULL) THEN
499
500 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
501 pa_interface_utils_pub.map_new_amg_msg
502 ( p_old_message_code => 'PA_PROJ_END_DATE_MISS1'
503 ,p_msg_attribute => 'CHANGE'
504 ,p_resize_flag => 'N'
505 ,p_msg_context => 'PROJ'
506 ,p_attribute1 => l_amg_segment1
507 ,p_attribute2 => ''
508 ,p_attribute3 => ''
509 ,p_attribute4 => ''
510 ,p_attribute5 => '');
511 END IF;
512 RAISE FND_API.G_EXC_ERROR;
513 END IF; -- project end date is not null
514
515 p_budget_start_date_out := l_project_start_date;
516 p_budget_end_date_out := l_project_end_date;
517 p_period_name_out := p_period_name_in;
518
519 l_budget_start_date_in := l_project_start_date;
520 l_budget_end_date_in := l_project_end_date;
521
522 ELSE /* PROJECT LEVEL PLANNING AND FINPLAN MODEL */
523
524 l_parent_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_project_id => p_project_id );
525
526 l_elem_ver_id_tbl.EXTEND(1);
527 l_elem_ver_id_tbl(l_elem_ver_id_tbl.COUNT) := 0;
528
529 -- Bug 8854015
530 IF (l_budget_start_date_in IS NOT NULL AND
531 l_budget_start_date_in <> FND_API.G_MISS_DATE) AND
532 (l_budget_end_date_in IS NOT NULL AND
533 l_budget_end_date_in <> FND_API.G_MISS_DATE) THEN
534
535 IF (l_budget_start_date_in > l_budget_end_date_in)
536 THEN
537 p_return_status := FND_API.G_RET_STS_ERROR;
538 PA_UTILS.add_message
539 (p_app_short_name => 'PA',
540 p_msg_name => 'PA_INVALID_END_DATE');
541 END IF;
542
543 p_budget_start_date_out := l_budget_start_date_in;
544 p_budget_end_date_out := l_budget_end_date_in;
545 p_period_name_out := p_period_name_in;
546
547 ELSE
548
549 PA_PLANNING_TRANSACTION_UTILS.get_default_planning_dates
550 ( p_project_id => p_project_id
551 ,p_element_version_id_tbl => l_elem_ver_id_tbl
552 ,p_project_structure_version_id => l_parent_structure_version_id
553 ,x_planning_start_date_tbl => l_start_date_tbl
554 ,x_planning_end_date_tbl => l_compl_date_tbl
555 ,x_msg_data => l_msg_data
556 ,x_msg_count => l_msg_count
557 ,x_return_status => p_return_status);
558
559 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
560 -- raising execption to show the error messages
561 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
562 END IF;
563
564 IF l_start_date_tbl.COUNT > 0 AND
565 l_compl_date_tbl.COUNT > 0 THEN
566 p_budget_start_date_out := trunc(l_start_date_tbl(l_start_date_tbl.FIRST));
567 p_budget_end_date_out := trunc(l_compl_date_tbl(l_compl_date_tbl.FIRST));
568 l_budget_start_date_in := p_budget_start_date_out;
569 l_budget_end_date_in := p_budget_end_date_out;
570 p_period_name_out := p_period_name_in;
571 ELSE
572 -- raising execption to show the error messages
573 pa_utils.add_message
574 ( p_app_short_name => 'PA',
575 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
576 p_token1 => 'PROCEDURENAME',
577 p_value1 => 'get_valid_periods_date_pvt');
578 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
579 END IF;
580 END IF; -- Bug 8854015
581 END IF;
582
583 ELSIF p_entry_level_code IN ('T','M','L') THEN
584
585 IF NVL(p_calling_model_context ,'-99') = 'BUDGETSMODEL' THEN
586
587 OPEN l_task_dates_csr(p_task_id);
588 FETCH l_task_dates_csr INTO l_task_start_date, l_task_end_date;
589 CLOSE l_task_dates_csr;
590
591 IF l_task_start_date IS NULL OR l_task_end_date IS NULL THEN
592 OPEN l_project_dates_csr(p_project_id);
593 FETCH l_project_dates_csr INTO l_project_start_date, l_project_end_date;
594 CLOSE l_project_dates_csr;
595
596 /* Added check for the bug #2734425. If the Project/Task Start Date
597 and End Date are null or they do not match with the input
598 parameters, then an error has to be raised. */
599
600 IF l_task_start_date IS NULL --implies that task_end_date is null too!!
601 THEN
602 IF (l_project_start_date IS NULL) THEN
603 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
604 pa_interface_utils_pub.map_new_amg_msg
605 ( p_old_message_code => 'PA_PROJ_START_DATE_MISS2'
606 ,p_msg_attribute => 'CHANGE'
607 ,p_resize_flag => 'N'
608 ,p_msg_context => 'PROJ'
609 ,p_attribute1 => l_amg_segment1
610 ,p_attribute2 => ''
611 ,p_attribute3 => ''
612 ,p_attribute4 => ''
613 ,p_attribute5 => '');
614 END IF;
615
616 RAISE FND_API.G_EXC_ERROR;
617 END IF;
618
619 IF (l_project_end_date IS NULL) THEN
620 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
621 pa_interface_utils_pub.map_new_amg_msg
622 ( p_old_message_code => 'PA_PROJ_END_DATE_MISS2'
623 ,p_msg_attribute => 'CHANGE'
624 ,p_resize_flag => 'N'
625 ,p_msg_context => 'PROJ'
626 ,p_attribute1 => l_amg_segment1
627 ,p_attribute2 => ''
628 ,p_attribute3 => ''
629 ,p_attribute4 => ''
630 ,p_attribute5 => '');
631 END IF;
632
633 RAISE FND_API.G_EXC_ERROR;
634 END IF;
635 END IF;
636
637 p_budget_start_date_out := l_project_start_date;
638 p_budget_end_date_out := l_project_end_date;
639 p_period_name_out := p_period_name_in;
640
641 l_budget_start_date_in := l_project_start_date;
642 l_budget_end_date_in := l_project_end_date;
643
644 ELSIF l_task_start_date IS NOT NULL AND l_task_end_date IS NULL THEN
645
646 OPEN l_project_dates_csr(p_project_id);
647 FETCH l_project_dates_csr INTO l_project_start_date, l_project_end_date;
648 CLOSE l_project_dates_csr;
649
650 IF (l_project_end_date IS NULL) THEN -- changed elsif to if for bug 3682546
651 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
652 pa_interface_utils_pub.map_new_amg_msg
653 ( p_old_message_code => 'PA_PROJ_END_DATE_MISS3'
654 ,p_msg_attribute => 'CHANGE'
655 ,p_resize_flag => 'N'
656 ,p_msg_context => 'PROJ'
657 ,p_attribute1 => l_amg_segment1
658 ,p_attribute2 => ''
659 ,p_attribute3 => ''
660 ,p_attribute4 => ''
661 ,p_attribute5 => '');
662 END IF;
663 RAISE FND_API.G_EXC_ERROR;
664 END IF;
665 p_budget_start_date_out := l_task_start_date;
666 p_budget_end_date_out := l_project_end_date;
667 p_period_name_out := p_period_name_in;
668 ELSE
669 p_budget_start_date_out := l_task_start_date;
670 p_budget_end_date_out := l_task_end_date;
671 p_period_name_out := p_period_name_in;
672
673 END IF;
674
675 ELSIF NVL(p_calling_model_context , '-99') = 'FINPLANMODEL' THEN
676
677
678 IF l_budget_start_date_in IS NOT NULL AND
679 l_budget_end_date_in IS NOT NULL THEN
680 -- validate if the end date passed is greater then the start date
681 IF l_budget_end_date_in < l_budget_start_date_in THEN
682 IF Nvl(p_context, '-99') <> 'WEBADI' THEN
683 pa_interface_utils_pub.map_new_amg_msg
684 ( p_old_message_code => 'PA_INVALID_START_DATE'
685 ,p_msg_attribute => 'CHANGE'
686 ,p_resize_flag => 'N'
687 ,p_msg_context => 'PROJ'
688 ,p_attribute1 => l_amg_segment1
689 ,p_attribute2 => ''
690 ,p_attribute3 => ''
691 ,p_attribute4 => ''
692 ,p_attribute5 => '');
693
694 RAISE FND_API.G_EXC_ERROR;
695 ELSIF p_context = 'WEBADI' THEN
696 x_error_code := 'FP_WEBADI_PLAN_DATE_ERR';
697 p_return_status := FND_API.G_RET_STS_ERROR;
698 RETURN;
699 END IF;
700 END IF; -- start date > end date
701 p_budget_start_date_out := l_budget_start_date_in;
702 p_budget_end_date_out := l_budget_end_date_in;
703
704 ELSIF l_budget_start_date_in IS NOT NULL AND
705 l_budget_end_date_in IS NULL THEN
706 -- raise error according to context
707 IF Nvl(p_context, '-99') <> 'WEBADI' THEN
708 pa_interface_utils_pub.map_new_amg_msg
709 ( p_old_message_code => 'PA_END_DATE_IS_MISSING'
710 ,p_msg_attribute => 'CHANGE'
711 ,p_resize_flag => 'N'
712 ,p_msg_context => 'PROJ'
713 ,p_attribute1 => l_amg_segment1
714 ,p_attribute2 => ''
715 ,p_attribute3 => ''
716 ,p_attribute4 => ''
717 ,p_attribute5 => '');
718
719 RAISE FND_API.G_EXC_ERROR;
720 ELSIF p_context = 'WEBADI' THEN
721 x_error_code := 'PA_FP_WA_PLAN_DATE_MIS';
722 p_return_status := FND_API.G_RET_STS_ERROR;
723 RETURN;
724 END IF;
725 ELSIF l_budget_start_date_in IS NULL AND
726 l_budget_end_date_in IS NOT NULL THEN
727 -- raise error according to context
728 IF Nvl(p_context, '-99') <> 'WEBADI' THEN
729 pa_interface_utils_pub.map_new_amg_msg
730 ( p_old_message_code => 'PA_START_DATE_IS_MISSING'
731 ,p_msg_attribute => 'CHANGE'
732 ,p_resize_flag => 'N'
733 ,p_msg_context => 'PROJ'
734 ,p_attribute1 => l_amg_segment1
735 ,p_attribute2 => ''
736 ,p_attribute3 => ''
737 ,p_attribute4 => ''
738 ,p_attribute5 => '');
739
740 RAISE FND_API.G_EXC_ERROR;
741 ELSIF p_context = 'WEBADI' THEN
742 x_error_code := 'PA_FP_WA_PLAN_DATE_MIS';
743 p_return_status := FND_API.G_RET_STS_ERROR;
744 RETURN;
745 END IF;
746 ELSIF l_budget_start_date_in IS NULL AND
747 l_budget_end_date_in IS NULL THEN
748
749 l_parent_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_project_id => p_project_id );
750 -- getting the element_version_id
751
752 IF p_task_id <> 0 THEN
753 BEGIN
754 SELECT pev.element_version_id
755 INTO l_elem_ver_id
756 FROM pa_proj_element_versions pev
757 WHERE pev.proj_element_id = p_task_id
758 AND pev.parent_structure_version_id = l_parent_structure_version_id;
759 EXCEPTION
760 WHEN NO_DATA_FOUND THEN
761 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
762 END;
763
764 -- preparing the input tables
765 l_elem_ver_id_tbl.EXTEND(1);
766 l_elem_ver_id_tbl(l_elem_ver_id_tbl.COUNT) := l_elem_ver_id;
767
768 ELSE /* Project level planning */
769
770 l_elem_ver_id_tbl.EXTEND(1);
771 l_elem_ver_id_tbl(l_elem_ver_id_tbl.COUNT) := 0;
772
773 END IF;
774
775 PA_PLANNING_TRANSACTION_UTILS.get_default_planning_dates
776 ( p_project_id => p_project_id
777 ,p_element_version_id_tbl => l_elem_ver_id_tbl
778 ,p_project_structure_version_id => l_parent_structure_version_id
779 ,x_planning_start_date_tbl => l_start_date_tbl
780 ,x_planning_end_date_tbl => l_compl_date_tbl
781 ,x_msg_data => l_msg_data
782 ,x_msg_count => l_msg_count
783 ,x_return_status => p_return_status);
784
785 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
786 -- raising execption to show the error messages
787 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
788 END IF;
789
790 IF l_start_date_tbl.COUNT > 0 AND
791 l_compl_date_tbl.COUNT > 0 THEN
792 p_budget_start_date_out := trunc(l_start_date_tbl(l_start_date_tbl.FIRST));
793 p_budget_end_date_out := trunc(l_compl_date_tbl(l_compl_date_tbl.FIRST));
794 ELSE
795 -- raising execption to show the error messages
796 pa_utils.add_message
797 ( p_app_short_name => 'PA',
798 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
799 p_token1 => 'PROCEDURENAME',
800 p_value1 => 'get_valid_periods_date_pvt');
801 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
802 END IF;
803 END IF; -- budget dates
804
805 IF p_period_name_in IS NOT NULL THEN
806 p_period_name_out := p_period_name_in;
807 END IF;
808
809 END IF ; --Budget Type code is not null
810 END IF; -- t/m/l
811
812
813 END IF; --time phased type code N
814
815
816 IF p_context = 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
817 IF p_period_name_in IS NULL THEN
818 IF l_budget_start_date_in IS NOT NULL AND
819 l_budget_end_date_in IS NOT NULL THEN
820
821 -- multiple periods may be present
822 IF p_time_phased_type_code = 'G' THEN
823 BEGIN
824 SELECT 'Y'
825 INTO valid_gl_start_date
826 FROM dual
827 WHERE EXISTS (SELECT 'X'
828 FROM pa_budget_periods_v
829 WHERE period_type_code = 'G'
830 AND period_start_date = l_budget_start_date_in);
831 EXCEPTION
832 WHEN NO_DATA_FOUND THEN
833 valid_gl_start_date := 'N';
834 END;
835
836 BEGIN
837 SELECT 'Y'
838 INTO valid_gl_end_date
839 FROM dual
840 WHERE EXISTS (SELECT 'X'
841 FROM pa_budget_periods_v
842 WHERE period_type_code = 'G'
843 AND period_end_date = l_budget_end_date_in);
844
845 EXCEPTION
846 WHEN NO_DATA_FOUND THEN
847 valid_gl_end_date := 'N';
848 END;
849
850 IF valid_gl_start_date <> 'Y' THEN
851 x_error_code := 'PA_FP_WA_PLAN_ST_DATE_NOT_VLD';
852 p_return_status := FND_API.G_RET_STS_ERROR;
853 RETURN;
854 END IF;
855
856 IF valid_gl_end_date <> 'Y' THEN
857 x_error_code := 'PA_FP_WA_PLAN_EN_DATE_NOT_VLD';
858 RETURN;
859 END IF;
860
861 -- Bug 4588279, 27-SEP-05, jwhite --------------------------------
862 -- Whenever Financial Planning is enabled for Budgetary Control, then
863 -- there could be a need for latest encumbrance year validation.
864 -- End Bug 4588279, 27-SEP-05, jwhite ----------------------------
865
866
867 ELSIF p_time_phased_type_code = 'P' THEN
868 BEGIN
869 SELECT 'Y'
870 INTO valid_pa_start_date
871 FROM dual
872 WHERE EXISTS (SELECT 'X'
873 FROM pa_budget_periods_v
874 WHERE period_type_code = 'P'
875 AND period_start_date = l_budget_start_date_in);
876 EXCEPTION
877 WHEN NO_DATA_FOUND THEN
878 valid_pa_start_date := 'N';
879 END;
880
881 BEGIN
882 SELECT 'Y'
883 INTO valid_pa_end_date
884 FROM dual
885 WHERE EXISTS (SELECT 'X'
886 FROM pa_budget_periods_v
887 WHERE period_type_code = 'P'
888 AND period_end_date = l_budget_end_date_in);
889
890 EXCEPTION
891 WHEN NO_DATA_FOUND THEN
892 valid_pa_end_date := 'N';
893 END;
894
895 IF valid_gl_start_date <> 'Y' THEN
896 x_error_code := 'PA_FP_WA_PLAN_ST_DATE_NOT_VLD';
897 p_return_status := FND_API.G_RET_STS_ERROR;
898 RETURN;
899 END IF;
900
901 IF valid_gl_end_date <> 'Y' THEN
902 x_error_code := 'PA_FP_WA_PLAN_EN_DATE_NOT_VLD';
903 p_return_status := FND_API.G_RET_STS_ERROR;
904 RETURN;
905 END IF;
906 END IF;
907
908 IF l_budget_start_date > l_budget_end_date THEN
909 x_error_code := 'PA_FP_WA_PLAN_DATE_ERR';
910 p_return_status := FND_API.G_RET_STS_ERROR;
911 RETURN;
912 END IF;
913 p_budget_start_date_out := l_budget_start_date_in;
914 p_budget_end_date_out := l_budget_end_date_in;
915
916 ELSIF l_budget_start_date_in IS NOT NULL AND
917 l_budget_end_date_in IS NULL THEN
918 -- throw error if one of the date is missing
919 x_error_code := 'PA_FP_WA_PLAN_DATE_MIS';
920 p_return_status := FND_API.G_RET_STS_ERROR;
921 RETURN;
922
923 ELSIF l_budget_start_date_in IS NULL AND
924 l_budget_end_date_in IS NOT NULL THEN
925 x_error_code := 'PA_FP_WA_PLAN_DATE_MIS';
926 p_return_status := FND_API.G_RET_STS_ERROR;
927 RETURN;
928 /*ELSIF l_budget_start_date_in IS NULL AND
929 l_budget_end_date_in IS NULL THEN
930 -- call an api to derive the default planning dates
931
932 -- preparing the input tables
933 l_elem_ver_id_tbl.EXTEND(1);
934 l_elem_ver_id_tbl(l_elem_ver_id_tbl.COUNT) := p_task_id;
935
936 PA_PLANNING_TRANSACTION_UTILS.get_default_planning_dates
937 ( p_project_id => p_project_id
938 ,p_element_version_id_tbl => l_elem_ver_id_tbl
939 ,p_project_structure_version_id => PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_project_id => p_project_id )
940 ,x_planning_start_date_tbl => l_start_date_tbl
941 ,x_planning_end_date_tbl => l_compl_date_tbl
942 ,x_msg_data => l_msg_data
943 ,x_msg_count => l_msg_count
944 ,x_return_status => p_return_status);
945
946 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
947 -- raising execption to show the error messages
948 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
949 END IF;
950
951 IF l_start_date_tbl.COUNT > 0 AND
952 l_compl_date_tbl.COUNT > 0 THEN
953 p_budget_start_date_out := trunc(l_start_date_tbl(l_start_date_tbl.FIRST));
954 p_budget_end_date_out := trunc(l_compl_date_tbl(l_compl_date_tbl.FIRST));
955 ELSE
956 -- raising execption to show the error messages
957 pa_utils.add_message
958 ( p_app_short_name => 'PA',
959 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
960 p_token1 => 'PROCEDURENAME',
961 p_value1 => 'get_valid_periods_date_pvt');
962 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
963 END IF;*/
964 END IF; -- planning dates not null
965 END IF; -- period name is null
966 END IF; -- p_context = WEBADI
967
968 EXCEPTION
969 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
970 l_msg_count := FND_MSG_PUB.count_msg;
971 IF l_msg_count = 1 THEN
972 PA_INTERFACE_UTILS_PUB.get_messages
973 (p_encoded => FND_API.G_TRUE
974 ,p_msg_index => 1
975 ,p_msg_count => l_msg_count
976 ,p_msg_data => l_msg_data
977 ,p_data => l_data
978 ,p_msg_index_out => l_msg_index_out);
979 END IF;
980 p_return_status := FND_API.G_RET_STS_ERROR;
981
982 WHEN FND_API.G_EXC_ERROR
983 THEN
984
985 ROLLBACK TO get_valid_period_dates_pvt;
986
987 p_return_status := FND_API.G_RET_STS_ERROR;
988
989 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
990 THEN
991
992 ROLLBACK TO get_valid_period_dates_pvt;
993
994 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
995
996 WHEN OTHERS THEN
997
998 ROLLBACK TO get_valid_period_dates_pvt;
999
1000 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1001
1002 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1003 THEN
1004 FND_MSG_PUB.add_exc_msg
1005 ( p_pkg_name => G_PKG_NAME
1006 , p_procedure_name => l_api_name );
1007
1008 END IF;
1009
1010 END get_valid_period_dates_Pvt;
1011
1012
1013 ----------------------------------------------------------------------------------------
1014 --Name: check_entry_method_flags_Pvt
1015 --Type: Procedure
1016 --Description: This procedure can be used to check whether it is allowed to pass
1017 -- cost quantity, raw_cost, burdened_cost, revenue and revenue quantity.
1018 --
1019 --
1020 --Called subprograms:
1021 --
1022 --
1023 --
1024 --History:
1025 -- 15-OCT-1996 L. de Werker Created
1026 --
1027 -- 09-FEB-2002 Srikanth Modified as part of changes for finplan model.
1028 -- budget amount code should be null when called from
1029 -- fin plan model. It should have a valid value when
1030 -- called from budget model.Similarly p_version_type
1031 -- should be null in budget model and should have
1032 -- valid value (COST,REVENUE,ALL) in finplan model
1033 -- 04-Nov-03 dbora Bug 3986129: FP.M Web ADI Dev changes made
1034 -- to be used for webadi context as well. New parameter
1035 -- added p_context is defaulted to null and other valid
1036 -- value is 'WEBADI'. The out variable x_webadi_error_code
1037 -- would be populated only if the context is 'WEBADI'.
1038
1039 PROCEDURE check_entry_method_flags_Pvt
1040 ( p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1041 ,p_budget_amount_code IN VARCHAR2
1042 ,p_budget_entry_method_code IN VARCHAR2
1043 ,p_quantity IN NUMBER
1044 ,p_raw_cost IN NUMBER
1045 ,p_burdened_cost IN NUMBER
1046 ,p_revenue IN NUMBER
1047
1048 --Included for fin plan model
1049 ,p_version_type IN VARCHAR2
1050 ,p_allow_qty_flag IN VARCHAR2
1051 ,p_allow_raw_cost_flag IN VARCHAR2
1052 ,p_allow_burdened_cost_flag IN VARCHAR2
1053 ,p_allow_revenue_flag IN VARCHAR2
1054
1055 -- Bug 3986129: FP.M Web ADI Dev changes, new parameters
1056 ,p_context IN VARCHAR2
1057 ,p_raw_cost_rate IN NUMBER
1058 ,p_burdened_cost_rate IN NUMBER
1059 ,p_bill_rate IN NUMBER
1060 ,p_allow_raw_cost_rate_flag IN VARCHAR2
1061 ,p_allow_burd_cost_rate_flag IN VARCHAR2
1062 ,p_allow_bill_rate_flag IN VARCHAR2
1063 ,x_webadi_error_code OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1064 )
1065 IS
1066
1067 -- needed to get the flags associated to a budget entry method
1068
1069 CURSOR l_budget_entry_method_csr
1070 (p_budget_entry_method_code pa_budget_entry_methods.budget_entry_method_code%type )
1071 IS
1072 SELECT cost_quantity_flag
1073 , raw_cost_flag
1074 , burdened_cost_flag
1075 , rev_quantity_flag
1076 , revenue_flag
1077 FROM pa_budget_entry_methods
1078 WHERE budget_entry_method_code = p_budget_entry_method_code
1079 AND trunc(sysdate) BETWEEN trunc(start_date_active) and trunc(nvl(end_date_active,sysdate));
1080
1081 l_api_name CONSTANT VARCHAR2(30) := 'check_entry_method_flags';
1082
1083 l_cost_quantity_flag VARCHAR2(1);
1084 l_raw_cost_flag VARCHAR2(1);
1085 l_burdened_cost_flag VARCHAR2(1);
1086 l_rev_quantity_flag VARCHAR2(1);
1087 l_revenue_flag VARCHAR2(1);
1088
1089 --Included these parameters as part of changes in finplan model
1090 l_msg_count NUMBER := 0;
1091 l_data VARCHAR2(2000);
1092 l_msg_data VARCHAR2(2000);
1093 l_msg_index_out NUMBER;
1094 l_debug_mode VARCHAR2(1);
1095 l_module_name VARCHAR2(80);
1096 l_debug_level2 CONSTANT NUMBER := 2;
1097 l_debug_level3 CONSTANT NUMBER := 3;
1098 l_debug_level4 CONSTANT NUMBER := 4;
1099 l_debug_level5 CONSTANT NUMBER := 5;
1100
1101 -- Bug 3986129: FP.M Web ADI Dev changes
1102 l_raw_cost_rate_flag VARCHAR2(1);
1103 l_burd_cost_rate_flag VARCHAR2(1);
1104 l_bill_rate_flag VARCHAR2(1);
1105
1106 BEGIN
1107
1108 --Standard begin of API savepoint
1109
1110 SAVEPOINT check_entry_method_flags_pvt;
1111
1112 --Set API return status to success
1113
1114 p_return_status := FND_API.G_RET_STS_SUCCESS;
1115 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
1116 l_module_name := 'check_entry_method_flags_Pvt: ' || g_module_name;
1117
1118 IF l_debug_mode = 'Y' THEN
1119 pa_debug.set_curr_function( p_function => 'check_entry_method_flags_Pvt',
1120 p_debug_mode => l_debug_mode );
1121 END IF;
1122
1123 --Check for the context in which the API is called and initialise
1124 --the amount flags
1125
1126 --Budget model. Get the flags from budet entry method code
1127 IF (p_budget_amount_code IS NOT NULL) AND (p_version_type IS NULL) THEN
1128
1129 OPEN l_budget_entry_method_csr(p_budget_entry_method_code);
1130 FETCH l_budget_entry_method_csr INTO l_cost_quantity_flag
1131 ,l_raw_cost_flag
1132 ,l_burdened_cost_flag
1133 ,l_rev_quantity_flag
1134 ,l_revenue_flag;
1135 CLOSE l_budget_entry_method_csr;
1136
1137 --FinPlan Model. Get the flags from the parameters convertion them to N if Null
1138 ELSIF (p_budget_amount_code IS NULL) AND (p_version_type IS NOT NULL) THEN
1139
1140 l_cost_quantity_flag := nvl(p_allow_qty_flag,'N');
1141 l_raw_cost_flag := nvl(p_allow_raw_cost_flag,'N');
1142 l_burdened_cost_flag := nvl(p_allow_burdened_cost_flag,'N');
1143 l_rev_quantity_flag := nvl(p_allow_qty_flag,'N');
1144 l_revenue_flag := nvl(p_allow_revenue_flag,'N');
1145
1146 -- Bug 3986129: FP.M Web ADI Dev changes
1147 l_raw_cost_rate_flag := Nvl(p_allow_raw_cost_rate_flag, 'N');
1148 l_burd_cost_rate_flag := Nvl(p_allow_burd_cost_rate_flag, 'N');
1149 l_bill_rate_flag := Nvl(p_allow_bill_rate_flag, 'N');
1150
1151 ELSE
1152
1153 IF l_debug_mode='Y' THEN
1154 pa_debug.g_err_stage:= 'p_budget_amount_code passed is ' || p_budget_amount_code ;
1155 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1156
1157 pa_debug.g_err_stage:= 'p_version_type passed is ' || p_version_type ;
1158 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1159
1160 END IF;
1161
1162 PA_UTILS.ADD_MESSAGE
1163 (p_app_short_name => 'PA',
1164 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1165
1166 p_return_status := FND_API.G_RET_STS_ERROR;
1167 RETURN;
1168
1169 END IF;--IF (p_budget_amount_code IS NOT NULL) AND (p_version_type IS NULL)
1170
1171 --checking on mandatory flags
1172
1173 --COST BUDGET or COST FINPLAN VERSION
1174 IF ( p_budget_amount_code = 'C'
1175 OR p_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST)
1176 THEN
1177 IF l_cost_quantity_flag = 'N'
1178 AND ( p_quantity <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1179 AND p_quantity IS NOT NULL )
1180 THEN
1181 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1182 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1183 /* Bug 3132035, Token is removed
1184 */
1185 PA_UTILS.ADD_MESSAGE
1186 (p_app_short_name => 'PA',
1187 p_msg_name => 'PA_COST_QTY_NOT_ALLOWED');
1188 p_return_status := FND_API.G_RET_STS_ERROR;
1189 END IF;
1190
1191 --RAISE FND_API.G_EXC_ERROR;
1192 p_return_status := FND_API.G_RET_STS_ERROR;
1193 IF l_debug_mode='Y' THEN
1194 pa_debug.g_err_stage:= 'Cost Qty not allowed' ;
1195 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1196 END IF;
1197
1198 ELSIF p_context = 'WEBADI' THEN
1199 IF l_debug_mode='Y' THEN
1200 pa_debug.g_err_stage:= 'WEBADI: Cost Qty not allowed';
1201 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1202 pa_debug.g_err_stage:= 'Populating Error Code';
1203 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1204 END IF;
1205
1206 x_webadi_error_code := 'PA_FP_WA_COST_QTY_NOT_ALWD';
1207 p_return_status := FND_API.G_RET_STS_ERROR;
1208 RETURN;
1209 END IF;
1210
1211 END IF;
1212
1213 IF l_raw_cost_flag = 'N'
1214 AND ( p_raw_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1215 AND p_raw_cost IS NOT NULL )
1216 THEN
1217 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1218 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1219 /* Bug 3132035, Token is removed
1220 */
1221 PA_UTILS.ADD_MESSAGE
1222 (p_app_short_name => 'PA',
1223 p_msg_name => 'PA_RAW_COST_NOT_ALLOWED');
1224 p_return_status := FND_API.G_RET_STS_ERROR;
1225 END IF;
1226
1227 --RAISE FND_API.G_EXC_ERROR;
1228 p_return_status := FND_API.G_RET_STS_ERROR;
1229 IF l_debug_mode='Y' THEN
1230 pa_debug.g_err_stage:= 'Raw Cost not allowed' ;
1231 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1232 END IF;
1233
1234 ELSIF p_context = 'WEBADI' THEN
1235 IF l_debug_mode='Y' THEN
1236 pa_debug.g_err_stage:= 'WEBADI: Raw Cost not allowed';
1237 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1238 pa_debug.g_err_stage:= 'Populating Error Code';
1239 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1240 END IF;
1241
1242 x_webadi_error_code := 'PA_FP_WA_RAW_COST_NOT_ALWD';
1243 p_return_status := FND_API.G_RET_STS_ERROR;
1244 RETURN;
1245 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1246
1247 END IF;
1248
1249 IF l_burdened_cost_flag = 'N'
1250 AND ( p_burdened_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1251 AND p_burdened_cost IS NOT NULL )
1252 THEN
1253 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1254 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1255 /* Bug 3132035, Token is removed
1256 */
1257 PA_UTILS.ADD_MESSAGE
1258 (p_app_short_name => 'PA',
1259 p_msg_name => 'PA_BURD_COST_NOT_ALLOWED');
1260
1261 --RAISE FND_API.G_EXC_ERROR;
1262 p_return_status := FND_API.G_RET_STS_ERROR;
1263 END IF;
1264 IF l_debug_mode='Y' THEN
1265 pa_debug.g_err_stage:= 'Burd Cost not allowed' ;
1266 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1267 END IF;
1268 ELSIF p_context = 'WEBADI' THEN
1269 IF l_debug_mode='Y' THEN
1270 pa_debug.g_err_stage:= 'WEBADI: Burd Cost not allowed';
1271 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1272 pa_debug.g_err_stage:= 'Populating Error Code';
1273 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1274 END IF;
1275
1276 x_webadi_error_code := 'PA_FP_WA_BURD_COST_NOT_ALWD';
1277 p_return_status := FND_API.G_RET_STS_ERROR;
1278 RETURN;
1279 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1280
1281 END IF;
1282
1283 -- Revenue should be null for a COST version. AMG UT2
1284 IF p_revenue <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1285 p_revenue IS NOT NULL
1286 THEN
1287 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1288 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1289 /* Bug 3132035, Token is removed
1290 */
1291 PA_UTILS.ADD_MESSAGE
1292 (p_app_short_name => 'PA',
1293 p_msg_name => 'PA_REVENUE_NOT_ALLOWED');
1294 p_return_status := FND_API.G_RET_STS_ERROR;
1295 END IF;
1296
1297 IF l_debug_mode='Y' THEN
1298 pa_debug.g_err_stage:= 'Rev Amt not allowed' ;
1299 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1300 END IF;
1301
1302 --RAISE FND_API.G_EXC_ERROR;
1303 p_return_status := FND_API.G_RET_STS_ERROR;
1304 ELSIF p_context = 'WEBADI' THEN
1305 IF l_debug_mode='Y' THEN
1306 pa_debug.g_err_stage:= 'WEBADI: Revenue not allowed';
1307 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1308 pa_debug.g_err_stage:= 'Populating Error Code';
1309 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1310 END IF;
1311
1312 x_webadi_error_code := 'PA_FP_WA_REVENUE_NOT_ALWD';
1313 p_return_status := FND_API.G_RET_STS_ERROR;
1314 RETURN;
1315 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1316 END IF;
1317
1318 --REVENUE BUDGET OR REVENUE FINPLAN VERSION
1319 ELSIF( p_budget_amount_code = 'R'
1320 OR p_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE)
1321 THEN
1322 IF l_rev_quantity_flag = 'N'
1323 AND ( p_quantity <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1324 AND p_quantity IS NOT NULL )
1325 THEN
1326 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1327 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1328 /* Bug 3132035, Token is removed
1329 */
1330 PA_UTILS.ADD_MESSAGE
1331 (p_app_short_name => 'PA',
1332 p_msg_name => 'PA_REV_QTY_NOT_ALLOWED');
1333 p_return_status := FND_API.G_RET_STS_ERROR;
1334 END IF;
1335
1336 --RAISE FND_API.G_EXC_ERROR;
1337 p_return_status := FND_API.G_RET_STS_ERROR;
1338 IF l_debug_mode='Y' THEN
1339 pa_debug.g_err_stage:= 'Rev Qty not allowed' ;
1340 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1341 END IF;
1342
1343 ELSIF p_context = 'WEBADI' THEN
1344 IF l_debug_mode='Y' THEN
1345 pa_debug.g_err_stage:= 'WEBADI: Revenue Qty not allowed';
1346 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1347 pa_debug.g_err_stage:= 'Populating Error Code';
1348 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1349 END IF;
1350
1351 x_webadi_error_code := 'PA_FP_WA_REV_QTY_NOT_ALWD';
1352 p_return_status := FND_API.G_RET_STS_ERROR;
1353 RETURN;
1354 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1355 END IF;
1356
1357 IF l_revenue_flag = 'N'
1358 AND ( p_revenue <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1359 AND p_revenue IS NOT NULL )
1360 THEN
1361 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1362 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1363 /* Bug 3132035, Token is removed
1364 */
1365 PA_UTILS.ADD_MESSAGE
1366 (p_app_short_name => 'PA',
1367 p_msg_name => 'PA_REVENUE_NOT_ALLOWED');
1368 p_return_status := FND_API.G_RET_STS_ERROR;
1369 END IF;
1370 IF l_debug_mode='Y' THEN
1371 pa_debug.g_err_stage:= 'Rev Amt not allowed' ;
1372 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1373 END IF;
1374
1375 --RAISE FND_API.G_EXC_ERROR;
1376 p_return_status := FND_API.G_RET_STS_ERROR;
1377 ELSIF p_context = 'WEBADI' THEN
1378 IF l_debug_mode='Y' THEN
1379 pa_debug.g_err_stage:= 'WEBADI: Revenue not allowed';
1380 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1381 pa_debug.g_err_stage:= 'Populating Error Code';
1382 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1383 END IF;
1384
1385 x_webadi_error_code := 'PA_FP_WA_REVENUE_NOT_ALWD';
1386 p_return_status := FND_API.G_RET_STS_ERROR;
1387 RETURN;
1388 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1389 END IF;
1390
1391 -- Raw cost and Burdened Cost amounts should be null for a revenue
1392 -- Version. AMG UT2.
1393 IF p_raw_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1394 p_raw_cost IS NOT NULL
1395 THEN
1396 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1397 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1398 THEN
1399 /* Bug 3132035, Token is removed
1400 */
1401 PA_UTILS.ADD_MESSAGE
1402 (p_app_short_name => 'PA',
1403 p_msg_name => 'PA_RAW_COST_NOT_ALLOWED');
1404 p_return_status := FND_API.G_RET_STS_ERROR;
1405 END IF;
1406
1407 --RAISE FND_API.G_EXC_ERROR;
1408 p_return_status := FND_API.G_RET_STS_ERROR;
1409 IF l_debug_mode='Y' THEN
1410 pa_debug.g_err_stage:= 'Raw Cost not allowed' ;
1411 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1412
1413 END IF;
1414 ELSIF p_context = 'WEBADI' THEN
1415 IF l_debug_mode='Y' THEN
1416 pa_debug.g_err_stage:= 'WEBADI: Raw Cost not allowed';
1417 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1418 pa_debug.g_err_stage:= 'Populating Error Code';
1419 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1420 END IF;
1421
1422 x_webadi_error_code := 'PA_FP_WA_RAW_COST_NOT_ALWD';
1423 p_return_status := FND_API.G_RET_STS_ERROR;
1424 RETURN;
1425 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1426
1427 END IF;
1428
1429 IF p_burdened_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1430 p_burdened_cost IS NOT NULL
1431 THEN
1432 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1433 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1434 /* Bug 3132035, Token is removed
1435 */
1436 PA_UTILS.ADD_MESSAGE
1437 (p_app_short_name => 'PA',
1438 p_msg_name => 'PA_BURD_COST_NOT_ALLOWED');
1439
1440 --RAISE FND_API.G_EXC_ERROR;
1441 p_return_status := FND_API.G_RET_STS_ERROR;
1442 END IF;
1443 IF l_debug_mode='Y' THEN
1444 pa_debug.g_err_stage:= 'Burd Cost not allowed' ;
1445 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1446 END IF;
1447 ELSIF p_context = 'WEBADI' THEN
1448 IF l_debug_mode='Y' THEN
1449 pa_debug.g_err_stage:= 'WEBADI: Burd Cost not allowed';
1450 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1451 pa_debug.g_err_stage:= 'Populating Error Code';
1452 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1453 END IF;
1454
1455 x_webadi_error_code := 'PA_FP_WA_BURD_COST_NOT_ALWD';
1456 p_return_status := FND_API.G_RET_STS_ERROR;
1457 RETURN;
1458 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1459 END IF;
1460
1461 --FinPlan Model . Cost and Revenue Together Version
1462 ELSIF(p_version_type=PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL)THEN
1463
1464 IF p_allow_qty_flag = 'N'
1465 AND ( p_quantity <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1466 AND p_quantity IS NOT NULL )
1467 THEN
1468 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1469 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1470 /* Bug 3132035, Token is removed
1471 */
1472 PA_UTILS.ADD_MESSAGE
1473 (p_app_short_name => 'PA',
1474 p_msg_name => 'PA_REV_QTY_NOT_ALLOWED');
1475 p_return_status := FND_API.G_RET_STS_ERROR;
1476 END IF;
1477
1478 --RAISE FND_API.G_EXC_ERROR;
1479 p_return_status := FND_API.G_RET_STS_ERROR;
1480 IF l_debug_mode='Y' THEN
1481 pa_debug.g_err_stage:= 'All Qty not allowed' ;
1482 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1483 END IF;
1484 ELSIF p_context = 'WEBADI' THEN
1485 IF l_debug_mode='Y' THEN
1486 pa_debug.g_err_stage:= 'WEBADI: All quantity not allowed';
1487 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1488 pa_debug.g_err_stage:= 'Populating Error Code';
1489 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1490 END IF;
1491
1492 x_webadi_error_code := 'PA_FP_WA_REV_QTY_NOT_ALWD';
1493 p_return_status := FND_API.G_RET_STS_ERROR;
1494 RETURN;
1495 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1496 END IF;
1497
1498 IF l_raw_cost_flag = 'N'
1499 AND ( p_raw_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1500 AND p_raw_cost IS NOT NULL )
1501 THEN
1502 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1503 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1504 /* Bug 3132035, Token is removed
1505 */
1506 PA_UTILS.ADD_MESSAGE
1507 (p_app_short_name => 'PA',
1508 p_msg_name => 'PA_RAW_COST_NOT_ALLOWED');
1509 p_return_status := FND_API.G_RET_STS_ERROR;
1510 END IF;
1511
1512 --RAISE FND_API.G_EXC_ERROR;
1513 p_return_status := FND_API.G_RET_STS_ERROR;
1514 IF l_debug_mode='Y' THEN
1515 pa_debug.g_err_stage:= 'All Raw Cost not allowed' ;
1516 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1517 END IF;
1518 ELSIF p_context = 'WEBADI' THEN
1519 IF l_debug_mode='Y' THEN
1520 pa_debug.g_err_stage:= 'WEBADI: Raw Cost not allowed';
1521 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1522 pa_debug.g_err_stage:= 'Populating Error Code';
1523 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1524 END IF;
1525
1526 x_webadi_error_code := 'PA_FP_WA_RAW_COST_NOT_ALWD';
1527 p_return_status := FND_API.G_RET_STS_ERROR;
1528 RETURN;
1529 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1530 END IF;
1531
1532 IF l_burdened_cost_flag = 'N'
1533 AND ( p_burdened_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1534 AND p_burdened_cost IS NOT NULL )
1535 THEN
1536 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1537 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1538 /* Bug 3132035, Token is removed
1539 */
1540 PA_UTILS.ADD_MESSAGE
1541 (p_app_short_name => 'PA',
1542 p_msg_name => 'PA_BURD_COST_NOT_ALLOWED');
1543
1544 --RAISE FND_API.G_EXC_ERROR;
1545 p_return_status := FND_API.G_RET_STS_ERROR;
1546 END IF;
1547 IF l_debug_mode='Y' THEN
1548 pa_debug.g_err_stage:= 'All Burd Cost not allowed' ;
1549 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1550 END IF;
1551 ELSIF p_context = 'WEBADI' THEN
1552 IF l_debug_mode='Y' THEN
1553 pa_debug.g_err_stage:= 'WEBADI: Burd Cost not allowed';
1554 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1555 pa_debug.g_err_stage:= 'Populating Error Code';
1556 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1557 END IF;
1558
1559 x_webadi_error_code := 'PA_FP_WA_BURD_COST_NOT_ALWD';
1560 p_return_status := FND_API.G_RET_STS_ERROR;
1561 RETURN;
1562 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1563
1564 END IF;
1565
1566 IF l_revenue_flag = 'N'
1567 AND ( p_revenue <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1568 AND p_revenue IS NOT NULL )
1569 THEN
1570 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1571 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1572 THEN
1573 /* Bug 3132035, Token is removed
1574 */
1575 PA_UTILS.ADD_MESSAGE
1576 (p_app_short_name => 'PA',
1577 p_msg_name => 'PA_REVENUE_NOT_ALLOWED');
1578
1579 --RAISE FND_API.G_EXC_ERROR;
1580 p_return_status := FND_API.G_RET_STS_ERROR;
1581
1582 END IF;
1583 IF l_debug_mode='Y' THEN
1584 pa_debug.g_err_stage:= 'All Revenue not allowed' ;
1585 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1586
1587 END IF;
1588
1589 --RAISE FND_API.G_EXC_ERROR;
1590 p_return_status := FND_API.G_RET_STS_ERROR;
1591 ELSIF p_context = 'WEBADI' THEN
1592 IF l_debug_mode='Y' THEN
1593 pa_debug.g_err_stage:= 'WEBADI: Revenue not allowed';
1594 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1595 pa_debug.g_err_stage:= 'Populating Error Code';
1596 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1597 END IF;
1598
1599 x_webadi_error_code := 'PA_FP_WA_REVENUE_NOT_ALWD';
1600 p_return_status := FND_API.G_RET_STS_ERROR;
1601 RETURN;
1602 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1603 END IF;
1604
1605 ELSE
1606
1607 IF l_debug_mode='Y' THEN
1608 pa_debug.g_err_stage:= 'p_budget_amount_code passed is ' || p_budget_amount_code ;
1609 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level5);
1610
1611 pa_debug.g_err_stage:= 'p_version_type passed is ' || p_version_type ;
1612 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level5);
1613
1614 END IF;
1615
1616 PA_UTILS.ADD_MESSAGE
1617 (p_app_short_name => 'PA',
1618 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1619 p_return_status := FND_API.G_RET_STS_ERROR;
1620 RETURN;
1621
1622
1623 END IF;--IF ( p_budget_amount_code = 'C'
1624
1625 -- Bug 3986129: FP.M Web ADI Dev changes
1626 IF p_context = 'WEBADI' THEN
1627 IF p_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
1628 IF l_raw_cost_rate_flag = 'N' THEN
1629 IF p_raw_cost_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1630 p_raw_cost_rate IS NOT NULL THEN
1631 IF l_debug_mode='Y' THEN
1632 pa_debug.g_err_stage:= 'WEBADI: Raw Cost Rate allowed';
1633 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1634 pa_debug.g_err_stage:= 'Populating Error Code';
1635 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1636 END IF;
1637
1638 x_webadi_error_code := 'PA_FP_WA_RCR_CNG_NOT_ALWD';
1639 p_return_status := FND_API.G_RET_STS_ERROR;
1640 RETURN;
1641 END IF;
1642 END IF;
1643 IF l_burd_cost_rate_flag = 'N' THEN
1644 IF p_burdened_cost_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1645 p_burdened_cost_rate IS NOT NULL THEN
1646 IF l_debug_mode='Y' THEN
1647 pa_debug.g_err_stage:= 'WEBADI: Burd Cost Rate not allowed';
1648 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1649 pa_debug.g_err_stage:= 'Populating Error Code';
1650 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1651 END IF;
1652
1653 x_webadi_error_code := 'PA_FP_WA_BCR_CNG_NOT_ALWD';
1654 p_return_status := FND_API.G_RET_STS_ERROR;
1655 RETURN;
1656 END IF;
1657 END IF;
1658 -- bill rate should not be allowed to be edited
1659 IF p_bill_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1660 p_bill_rate IS NOT NULL THEN
1661 IF l_debug_mode='Y' THEN
1662 pa_debug.g_err_stage:= 'WEBADI: Bill Rate not allowed';
1663 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1664 pa_debug.g_err_stage:= 'Populating Error Code';
1665 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1666 END IF;
1667
1668 x_webadi_error_code := 'PA_FP_WA_BR_CNG_NOT_ALWD';
1669 p_return_status := FND_API.G_RET_STS_ERROR;
1670 RETURN;
1671 END IF;
1672
1673
1674 ELSIF p_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
1675 IF l_bill_rate_flag = 'N' THEN
1676 IF p_bill_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1677 p_bill_rate IS NOT NULL THEN
1678 IF l_debug_mode='Y' THEN
1679 pa_debug.g_err_stage:= 'WEBADI: Bill Rate not allowed';
1680 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1681 pa_debug.g_err_stage:= 'Populating Error Code';
1682 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1683 END IF;
1684
1685 x_webadi_error_code := 'PA_FP_WA_BR_CNG_NOT_ALWD';
1686 p_return_status := FND_API.G_RET_STS_ERROR;
1687 RETURN;
1688 END IF;
1689 END IF;
1690 -- cost rate should not be allowed to be edited
1691 IF p_raw_cost_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1692 p_raw_cost_rate IS NOT NULL THEN
1693 IF l_debug_mode='Y' THEN
1694 pa_debug.g_err_stage:= 'WEBADI: Raw Cost Rate allowed';
1695 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1696 pa_debug.g_err_stage:= 'Populating Error Code';
1697 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1698 END IF;
1699
1700 x_webadi_error_code := 'PA_FP_WA_RCR_CNG_NOT_ALWD';
1701 p_return_status := FND_API.G_RET_STS_ERROR;
1702 RETURN;
1703 END IF;
1704 IF p_burdened_cost_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1705 p_burdened_cost_rate IS NOT NULL THEN
1706 IF l_debug_mode='Y' THEN
1707 pa_debug.g_err_stage:= 'WEBADI: Burd Cost Rate not allowed';
1708 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1709 pa_debug.g_err_stage:= 'Populating Error Code';
1710 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1711 END IF;
1712
1713 x_webadi_error_code := 'PA_FP_WA_BCR_CNG_NOT_ALWD';
1714 p_return_status := FND_API.G_RET_STS_ERROR;
1715 RETURN;
1716 END IF;
1717 ELSIF p_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL THEN
1718 IF l_raw_cost_rate_flag = 'N' THEN
1719 IF p_raw_cost_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1720 p_raw_cost_rate IS NOT NULL THEN
1721 IF l_debug_mode='Y' THEN
1722 pa_debug.g_err_stage:= 'WEBADI: Raw Cost Rate allowed';
1723 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1724 pa_debug.g_err_stage:= 'Populating Error Code';
1725 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1726 END IF;
1727
1728 x_webadi_error_code := 'PA_FP_WA_RCR_CNG_NOT_ALWD';
1729 p_return_status := FND_API.G_RET_STS_ERROR;
1730 RETURN;
1731 END IF;
1732 END IF;
1733 IF l_burd_cost_rate_flag = 'N' THEN
1734 IF p_burdened_cost_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1735 p_burdened_cost_rate IS NOT NULL THEN
1736 IF l_debug_mode='Y' THEN
1737 pa_debug.g_err_stage:= 'WEBADI: Burd Cost Rate not allowed';
1738 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1739 pa_debug.g_err_stage:= 'Populating Error Code';
1740 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1741 END IF;
1742
1743 x_webadi_error_code := 'PA_FP_WA_BCR_CNG_NOT_ALWD';
1744 p_return_status := FND_API.G_RET_STS_ERROR;
1745 RETURN;
1746 END IF;
1747 END IF;
1748 IF l_bill_rate_flag = 'N' THEN
1749 IF p_bill_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1750 p_bill_rate IS NOT NULL THEN
1751 IF l_debug_mode='Y' THEN
1752 pa_debug.g_err_stage:= 'WEBADI: Bill Rate not allowed';
1753 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1754 pa_debug.g_err_stage:= 'Populating Error Code';
1755 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1756 END IF;
1757
1758 x_webadi_error_code := 'PA_FP_WA_BR_CNG_NOT_ALWD';
1759 p_return_status := FND_API.G_RET_STS_ERROR;
1760 RETURN;
1761 END IF;
1762 END IF;
1763 END IF;
1764 END IF;
1765
1766 IF l_debug_mode = 'Y' THEN
1767 pa_debug.reset_curr_function;
1768 END IF;
1769 EXCEPTION
1770
1771
1772 WHEN FND_API.G_EXC_ERROR
1773 THEN
1774
1775 ROLLBACK TO check_entry_method_flags_pvt;
1776
1777 p_return_status := FND_API.G_RET_STS_ERROR;
1778 IF l_debug_mode = 'Y' THEN
1779 pa_debug.reset_curr_function;
1780 END IF;
1781 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
1782 THEN
1783
1784 ROLLBACK TO check_entry_method_flags_pvt;
1785
1786 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1787 IF l_debug_mode = 'Y' THEN
1788 pa_debug.reset_curr_function;
1789 END IF;
1790 WHEN OTHERS THEN
1791
1792 ROLLBACK TO check_entry_method_flags_pvt;
1793
1794 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1795
1796 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1797 THEN
1798 FND_MSG_PUB.add_exc_msg
1799 ( p_pkg_name => G_PKG_NAME
1800 , p_procedure_name => l_api_name );
1801
1802 END IF;
1803 IF l_debug_mode = 'Y' THEN
1804 pa_debug.reset_curr_function;
1805 END IF;
1806 END check_entry_method_flags_Pvt;
1807
1808 -- Bug 3986129: FP.M Web ADI Dev changes, new api
1809
1810 /* This api would be called to validate the UOM passed for the resource alias for
1811 * WEBADI context to check, if the passed value corresponds to the UOM defined
1812 * for the resource list member and is called from pa_budget_pvt.validate_budget_lines.
1813 * if the validation succeeds, x_error_code would be returned as null
1814 */
1815 PROCEDURE validate_uom_passed
1816 ( p_context IN VARCHAR2,
1817 p_res_list_mem_id IN pa_resource_list_members.resource_list_member_id%TYPE,
1818 p_uom_passed IN pa_resource_list_members.unit_of_measure%TYPE,
1819 x_error_code OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1820 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1821 x_msg_data OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1822 x_msg_count OUT NOCOPY NUMBER) --File.Sql.39 bug 4440895
1823
1824 IS
1825 l_return_status VARCHAR2(1);
1826 l_msg_data VARCHAR2(2000);
1827 l_msg_count NUMBER;
1828
1829 l_debug_mode VARCHAR2(1);
1830 l_module_name VARCHAR2(100) := 'PA_BUDGET_CHECK_PVT.validate_uom_passed';
1831 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1832 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1833 l_msg_index_out NUMBER;
1834 l_data VARCHAR2(2000);
1835
1836 l_unit_of_measure pa_resource_list_members.unit_of_measure%TYPE;
1837
1838 BEGIN
1839 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1840 x_msg_count := 0;
1841 x_return_status := FND_API.G_RET_STS_SUCCESS;
1842
1843 IF l_debug_mode = 'Y' THEN
1844 PA_DEBUG.Set_Curr_Function( p_function => l_module_name,
1845 p_debug_mode => l_debug_mode );
1846 END IF;
1847 IF l_debug_mode = 'Y' THEN
1848 pa_debug.g_err_stage := 'Entering into PA_BUDGET_CHECK_PVT.validate_uom_passed';
1849 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1850 pa_debug.g_err_stage := 'validating input parameters';
1851 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1852 END IF;
1853
1854 -- validating input parameters
1855 IF p_res_list_mem_id IS NULL THEN
1856 IF l_debug_mode = 'Y' THEN
1857 pa_debug.g_err_stage := 'Required input param is null';
1858 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1859 END IF;
1860 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1861 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1862 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1863 END IF;
1864
1865 IF l_debug_mode = 'Y' THEN
1866 pa_debug.g_err_stage := 'Checking the UOM passed';
1867 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1868 END IF;
1869 -- using the singular select here as no api exists only for this
1870 BEGIN
1871 SELECT unit_of_measure
1872 INTO l_unit_of_measure
1873 FROM pa_resource_list_members
1874 WHERE resource_list_member_id = p_res_list_mem_id;
1875 EXCEPTION
1876 WHEN NO_DATA_FOUND THEN
1877 IF l_debug_mode = 'Y' THEN
1878 pa_debug.g_err_stage := 'No values obtained from the select';
1879 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1880 END IF;
1881 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1882 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1883 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1884 END;
1885
1886 IF l_debug_mode = 'Y' THEN
1887 pa_debug.g_err_stage := 'UOM fetched from DB: ' || l_unit_of_measure;
1888 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1889 END IF;
1890 IF Nvl(p_uom_passed, l_unit_of_measure) <> l_unit_of_measure THEN
1891 x_error_code := 'FP_WEBADI_INVALID_UOM_PASSED';
1892
1893 IF l_debug_mode = 'Y' THEN
1894 pa_debug.reset_curr_function;
1895 END IF;
1896 RETURN;
1897 END IF;
1898
1899 IF l_debug_mode = 'Y' THEN
1900 pa_debug.g_err_stage := 'Leaving PA_BUDGET_CHECK_PVT.validate_uom_passed';
1901 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1902 END IF;
1903 IF l_debug_mode = 'Y' THEN
1904 pa_debug.reset_curr_function;
1905 END IF;
1906
1907 EXCEPTION
1908 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1909 l_msg_count := FND_MSG_PUB.count_msg;
1910
1911 IF l_msg_count = 1 and x_msg_data IS NULL THEN
1912 PA_INTERFACE_UTILS_PUB.get_messages
1913 (p_encoded => FND_API.G_TRUE
1914 ,p_msg_index => 1
1915 ,p_msg_count => l_msg_count
1916 ,p_msg_data => l_msg_data
1917 ,p_data => l_data
1918 ,p_msg_index_out => l_msg_index_out);
1919 x_msg_data := l_data;
1920 x_msg_count := l_msg_count;
1921 ELSE
1922 x_msg_count := l_msg_count;
1923 END IF;
1924 x_return_status := FND_API.G_RET_STS_ERROR;
1925
1926 IF l_debug_mode = 'Y' THEN
1927 pa_debug.reset_curr_function;
1928 END IF;
1929 RETURN;
1930
1931 WHEN OTHERS THEN
1932 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1933 x_msg_count := 1;
1934 x_msg_data := SQLERRM;
1935
1936 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_BUDGET_CHECK_PVT'
1937 ,p_procedure_name => 'validate_uom_passed');
1938 IF l_debug_mode = 'Y' THEN
1939 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1940 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1941 END IF;
1942
1943 IF l_debug_mode = 'Y' THEN
1944 pa_debug.reset_curr_function;
1945 END IF;
1946 RAISE;
1947 END validate_uom_passed;
1948
1949 --added function for the bug 13344742 (start)
1950
1951 FUNCTION Get_project_end_date RETURN DATE IS
1952 l_gms_enabled VARCHAR2(1);
1953 BEGIN
1954 l_gms_enabled := gms_pa_costing_pkg.grants_implemented;
1955 IF l_gms_enabled = 'Y' then
1956 return PA_BUDGET_CHECK_PVT.G_PA_END_DATE;
1957 ELSE
1958 return NULL;
1959 END IF;
1960 END;
1961
1962 --added function for the bug 13344742 (end)
1963
1964 --------------------------------------------------------------------------------
1965 end PA_BUDGET_CHECK_PVT;