1 package body PA_BUDGET_CHECK_PVT as
2 /*$Header: PAPMBCVB.pls 120.9 2005/10/03 18:31:53 jwhite 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;
349 THEN
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
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
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 !
432 ,p_attribute3 => ''
429 ,p_msg_context => 'PROJ'
430 ,p_attribute1 => l_amg_segment1
431 ,p_attribute2 => ''
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 IF (l_project_start_date IS NULL) THEN
479
480 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
481 pa_interface_utils_pub.map_new_amg_msg
482 ( p_old_message_code => 'PA_PROJ_START_DATE_MISS1'
483 ,p_msg_attribute => 'CHANGE'
484 ,p_resize_flag => 'N'
485 ,p_msg_context => 'PROJ'
486 ,p_attribute1 => l_amg_segment1
487 ,p_attribute2 => ''
488 ,p_attribute3 => ''
489 ,p_attribute4 => ''
490 ,p_attribute5 => '');
491 END IF;
492 RAISE FND_API.G_EXC_ERROR;
493
494 END IF;
495
496 IF (l_project_end_date IS NULL) THEN
497
498 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
499 pa_interface_utils_pub.map_new_amg_msg
500 ( p_old_message_code => 'PA_PROJ_END_DATE_MISS1'
501 ,p_msg_attribute => 'CHANGE'
502 ,p_resize_flag => 'N'
503 ,p_msg_context => 'PROJ'
504 ,p_attribute1 => l_amg_segment1
505 ,p_attribute2 => ''
506 ,p_attribute3 => ''
507 ,p_attribute4 => ''
508 ,p_attribute5 => '');
509 END IF;
510 RAISE FND_API.G_EXC_ERROR;
511 END IF; -- project end date is not null
512
513 p_budget_start_date_out := l_project_start_date;
514 p_budget_end_date_out := l_project_end_date;
515 p_period_name_out := p_period_name_in;
516
517 l_budget_start_date_in := l_project_start_date;
518 l_budget_end_date_in := l_project_end_date;
519
520 ELSE /* PROJECT LEVEL PLANNING AND FINPLAN MODEL */
521
522 l_parent_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_project_id => p_project_id );
523
524 l_elem_ver_id_tbl.EXTEND(1);
525 l_elem_ver_id_tbl(l_elem_ver_id_tbl.COUNT) := 0;
526
527 PA_PLANNING_TRANSACTION_UTILS.get_default_planning_dates
531 ,x_planning_start_date_tbl => l_start_date_tbl
528 ( p_project_id => p_project_id
529 ,p_element_version_id_tbl => l_elem_ver_id_tbl
530 ,p_project_structure_version_id => l_parent_structure_version_id
532 ,x_planning_end_date_tbl => l_compl_date_tbl
533 ,x_msg_data => l_msg_data
534 ,x_msg_count => l_msg_count
535 ,x_return_status => p_return_status);
536
537 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
538 -- raising execption to show the error messages
539 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
540 END IF;
541
542 IF l_start_date_tbl.COUNT > 0 AND
543 l_compl_date_tbl.COUNT > 0 THEN
544 p_budget_start_date_out := trunc(l_start_date_tbl(l_start_date_tbl.FIRST));
545 p_budget_end_date_out := trunc(l_compl_date_tbl(l_compl_date_tbl.FIRST));
546 l_budget_start_date_in := p_budget_start_date_out;
547 l_budget_end_date_in := p_budget_end_date_out;
548 p_period_name_out := p_period_name_in;
549 ELSE
550 -- raising execption to show the error messages
551 pa_utils.add_message
552 ( p_app_short_name => 'PA',
553 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
554 p_token1 => 'PROCEDURENAME',
555 p_value1 => 'get_valid_periods_date_pvt');
556 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
557 END IF;
558
559 END IF;
560
561 ELSIF p_entry_level_code IN ('T','M','L') THEN
562
563 IF NVL(p_calling_model_context ,'-99') = 'BUDGETSMODEL' THEN
564
565 OPEN l_task_dates_csr(p_task_id);
566 FETCH l_task_dates_csr INTO l_task_start_date, l_task_end_date;
567 CLOSE l_task_dates_csr;
568
569 IF l_task_start_date IS NULL OR l_task_end_date IS NULL THEN
570 OPEN l_project_dates_csr(p_project_id);
571 FETCH l_project_dates_csr INTO l_project_start_date, l_project_end_date;
572 CLOSE l_project_dates_csr;
573
574 /* Added check for the bug #2734425. If the Project/Task Start Date
575 and End Date are null or they do not match with the input
576 parameters, then an error has to be raised. */
577
578 IF l_task_start_date IS NULL --implies that task_end_date is null too!!
579 THEN
580 IF (l_project_start_date IS NULL) THEN
581 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
582 pa_interface_utils_pub.map_new_amg_msg
583 ( p_old_message_code => 'PA_PROJ_START_DATE_MISS2'
584 ,p_msg_attribute => 'CHANGE'
585 ,p_resize_flag => 'N'
586 ,p_msg_context => 'PROJ'
587 ,p_attribute1 => l_amg_segment1
588 ,p_attribute2 => ''
589 ,p_attribute3 => ''
590 ,p_attribute4 => ''
591 ,p_attribute5 => '');
592 END IF;
593
594 RAISE FND_API.G_EXC_ERROR;
595 END IF;
596
597 IF (l_project_end_date IS NULL) THEN
598 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
599 pa_interface_utils_pub.map_new_amg_msg
600 ( p_old_message_code => 'PA_PROJ_END_DATE_MISS2'
601 ,p_msg_attribute => 'CHANGE'
602 ,p_resize_flag => 'N'
603 ,p_msg_context => 'PROJ'
604 ,p_attribute1 => l_amg_segment1
605 ,p_attribute2 => ''
606 ,p_attribute3 => ''
607 ,p_attribute4 => ''
608 ,p_attribute5 => '');
609 END IF;
610
611 RAISE FND_API.G_EXC_ERROR;
612 END IF;
613 END IF;
614
615 p_budget_start_date_out := l_project_start_date;
616 p_budget_end_date_out := l_project_end_date;
617 p_period_name_out := p_period_name_in;
618
619 l_budget_start_date_in := l_project_start_date;
623
620 l_budget_end_date_in := l_project_end_date;
621
622 ELSIF l_task_start_date IS NOT NULL AND l_task_end_date IS NULL THEN
624 OPEN l_project_dates_csr(p_project_id);
625 FETCH l_project_dates_csr INTO l_project_start_date, l_project_end_date;
626 CLOSE l_project_dates_csr;
627
628 IF (l_project_end_date IS NULL) THEN -- changed elsif to if for bug 3682546
629 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
630 pa_interface_utils_pub.map_new_amg_msg
631 ( p_old_message_code => 'PA_PROJ_END_DATE_MISS3'
632 ,p_msg_attribute => 'CHANGE'
633 ,p_resize_flag => 'N'
634 ,p_msg_context => 'PROJ'
635 ,p_attribute1 => l_amg_segment1
636 ,p_attribute2 => ''
637 ,p_attribute3 => ''
638 ,p_attribute4 => ''
639 ,p_attribute5 => '');
640 END IF;
641 RAISE FND_API.G_EXC_ERROR;
642 END IF;
643 p_budget_start_date_out := l_task_start_date;
644 p_budget_end_date_out := l_project_end_date;
645 p_period_name_out := p_period_name_in;
646 ELSE
647 p_budget_start_date_out := l_task_start_date;
648 p_budget_end_date_out := l_task_end_date;
649 p_period_name_out := p_period_name_in;
650
651 END IF;
652
653 ELSIF NVL(p_calling_model_context , '-99') = 'FINPLANMODEL' THEN
654
655
656 IF l_budget_start_date_in IS NOT NULL AND
657 l_budget_end_date_in IS NOT NULL THEN
658 -- validate if the end date passed is greater then the start date
659 IF l_budget_end_date_in < l_budget_start_date_in THEN
660 IF Nvl(p_context, '-99') <> 'WEBADI' THEN
661 pa_interface_utils_pub.map_new_amg_msg
662 ( p_old_message_code => 'PA_INVALID_START_DATE'
663 ,p_msg_attribute => 'CHANGE'
664 ,p_resize_flag => 'N'
665 ,p_msg_context => 'PROJ'
666 ,p_attribute1 => l_amg_segment1
667 ,p_attribute2 => ''
668 ,p_attribute3 => ''
669 ,p_attribute4 => ''
670 ,p_attribute5 => '');
671
672 RAISE FND_API.G_EXC_ERROR;
673 ELSIF p_context = 'WEBADI' THEN
674 x_error_code := 'FP_WEBADI_PLAN_DATE_ERR';
675 p_return_status := FND_API.G_RET_STS_ERROR;
676 RETURN;
677 END IF;
678 END IF; -- start date > end date
679 p_budget_start_date_out := l_budget_start_date_in;
680 p_budget_end_date_out := l_budget_end_date_in;
681
682 ELSIF l_budget_start_date_in IS NOT NULL AND
683 l_budget_end_date_in IS NULL THEN
684 -- raise error according to context
685 IF Nvl(p_context, '-99') <> 'WEBADI' THEN
686 pa_interface_utils_pub.map_new_amg_msg
687 ( p_old_message_code => 'PA_END_DATE_IS_MISSING'
688 ,p_msg_attribute => 'CHANGE'
689 ,p_resize_flag => 'N'
690 ,p_msg_context => 'PROJ'
691 ,p_attribute1 => l_amg_segment1
692 ,p_attribute2 => ''
693 ,p_attribute3 => ''
694 ,p_attribute4 => ''
695 ,p_attribute5 => '');
696
697 RAISE FND_API.G_EXC_ERROR;
698 ELSIF p_context = 'WEBADI' THEN
699 x_error_code := 'PA_FP_WA_PLAN_DATE_MIS';
700 p_return_status := FND_API.G_RET_STS_ERROR;
701 RETURN;
702 END IF;
703 ELSIF l_budget_start_date_in IS NULL AND
704 l_budget_end_date_in IS NOT NULL THEN
705 -- raise error according to context
706 IF Nvl(p_context, '-99') <> 'WEBADI' THEN
707 pa_interface_utils_pub.map_new_amg_msg
708 ( p_old_message_code => 'PA_START_DATE_IS_MISSING'
709 ,p_msg_attribute => 'CHANGE'
710 ,p_resize_flag => 'N'
711 ,p_msg_context => 'PROJ'
715 ,p_attribute4 => ''
712 ,p_attribute1 => l_amg_segment1
713 ,p_attribute2 => ''
714 ,p_attribute3 => ''
716 ,p_attribute5 => '');
717
718 RAISE FND_API.G_EXC_ERROR;
719 ELSIF p_context = 'WEBADI' THEN
720 x_error_code := 'PA_FP_WA_PLAN_DATE_MIS';
721 p_return_status := FND_API.G_RET_STS_ERROR;
722 RETURN;
723 END IF;
724 ELSIF l_budget_start_date_in IS NULL AND
725 l_budget_end_date_in IS NULL THEN
726
727 l_parent_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_project_id => p_project_id );
728 -- getting the element_version_id
729
730 IF p_task_id <> 0 THEN
731 BEGIN
732 SELECT pev.element_version_id
733 INTO l_elem_ver_id
734 FROM pa_proj_element_versions pev
735 WHERE pev.proj_element_id = p_task_id
736 AND pev.parent_structure_version_id = l_parent_structure_version_id;
737 EXCEPTION
738 WHEN NO_DATA_FOUND THEN
739 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
740 END;
741
742 -- preparing the input tables
743 l_elem_ver_id_tbl.EXTEND(1);
744 l_elem_ver_id_tbl(l_elem_ver_id_tbl.COUNT) := l_elem_ver_id;
745
746 ELSE /* Project level planning */
747
748 l_elem_ver_id_tbl.EXTEND(1);
749 l_elem_ver_id_tbl(l_elem_ver_id_tbl.COUNT) := 0;
750
751 END IF;
752
753 PA_PLANNING_TRANSACTION_UTILS.get_default_planning_dates
754 ( p_project_id => p_project_id
755 ,p_element_version_id_tbl => l_elem_ver_id_tbl
756 ,p_project_structure_version_id => l_parent_structure_version_id
757 ,x_planning_start_date_tbl => l_start_date_tbl
758 ,x_planning_end_date_tbl => l_compl_date_tbl
759 ,x_msg_data => l_msg_data
760 ,x_msg_count => l_msg_count
761 ,x_return_status => p_return_status);
762
763 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
764 -- raising execption to show the error messages
765 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
766 END IF;
767
768 IF l_start_date_tbl.COUNT > 0 AND
769 l_compl_date_tbl.COUNT > 0 THEN
770 p_budget_start_date_out := trunc(l_start_date_tbl(l_start_date_tbl.FIRST));
771 p_budget_end_date_out := trunc(l_compl_date_tbl(l_compl_date_tbl.FIRST));
772 ELSE
773 -- raising execption to show the error messages
774 pa_utils.add_message
775 ( p_app_short_name => 'PA',
776 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
777 p_token1 => 'PROCEDURENAME',
778 p_value1 => 'get_valid_periods_date_pvt');
779 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
780 END IF;
781 END IF; -- budget dates
782
783 IF p_period_name_in IS NOT NULL THEN
784 p_period_name_out := p_period_name_in;
785 END IF;
786
787 END IF ; --Budget Type code is not null
788 END IF; -- t/m/l
789
790
791 END IF; --time phased type code N
792
793
794 IF p_context = 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
795 IF p_period_name_in IS NULL THEN
796 IF l_budget_start_date_in IS NOT NULL AND
797 l_budget_end_date_in IS NOT NULL THEN
798
799 -- multiple periods may be present
800 IF p_time_phased_type_code = 'G' THEN
801 BEGIN
802 SELECT 'Y'
803 INTO valid_gl_start_date
804 FROM dual
805 WHERE EXISTS (SELECT 'X'
806 FROM pa_budget_periods_v
807 WHERE period_type_code = 'G'
808 AND period_start_date = l_budget_start_date_in);
812 END;
809 EXCEPTION
810 WHEN NO_DATA_FOUND THEN
811 valid_gl_start_date := 'N';
813
814 BEGIN
815 SELECT 'Y'
816 INTO valid_gl_end_date
817 FROM dual
818 WHERE EXISTS (SELECT 'X'
819 FROM pa_budget_periods_v
820 WHERE period_type_code = 'G'
821 AND period_end_date = l_budget_end_date_in);
822
823 EXCEPTION
824 WHEN NO_DATA_FOUND THEN
825 valid_gl_end_date := 'N';
826 END;
827
828 IF valid_gl_start_date <> 'Y' THEN
829 x_error_code := 'PA_FP_WA_PLAN_ST_DATE_NOT_VLD';
830 p_return_status := FND_API.G_RET_STS_ERROR;
831 RETURN;
832 END IF;
833
834 IF valid_gl_end_date <> 'Y' THEN
835 x_error_code := 'PA_FP_WA_PLAN_EN_DATE_NOT_VLD';
836 RETURN;
837 END IF;
838
839 -- Bug 4588279, 27-SEP-05, jwhite --------------------------------
840 -- Whenever Financial Planning is enabled for Budgetary Control, then
841 -- there could be a need for latest encumbrance year validation.
842 -- End Bug 4588279, 27-SEP-05, jwhite ----------------------------
843
844
845 ELSIF p_time_phased_type_code = 'P' THEN
846 BEGIN
847 SELECT 'Y'
848 INTO valid_pa_start_date
849 FROM dual
850 WHERE EXISTS (SELECT 'X'
851 FROM pa_budget_periods_v
852 WHERE period_type_code = 'P'
853 AND period_start_date = l_budget_start_date_in);
854 EXCEPTION
855 WHEN NO_DATA_FOUND THEN
856 valid_pa_start_date := 'N';
857 END;
858
859 BEGIN
860 SELECT 'Y'
861 INTO valid_pa_end_date
862 FROM dual
863 WHERE EXISTS (SELECT 'X'
864 FROM pa_budget_periods_v
865 WHERE period_type_code = 'P'
866 AND period_end_date = l_budget_end_date_in);
867
868 EXCEPTION
869 WHEN NO_DATA_FOUND THEN
870 valid_pa_end_date := 'N';
871 END;
872
873 IF valid_gl_start_date <> 'Y' THEN
874 x_error_code := 'PA_FP_WA_PLAN_ST_DATE_NOT_VLD';
875 p_return_status := FND_API.G_RET_STS_ERROR;
876 RETURN;
877 END IF;
878
879 IF valid_gl_end_date <> 'Y' THEN
880 x_error_code := 'PA_FP_WA_PLAN_EN_DATE_NOT_VLD';
881 p_return_status := FND_API.G_RET_STS_ERROR;
882 RETURN;
883 END IF;
884 END IF;
885
886 IF l_budget_start_date > l_budget_end_date THEN
887 x_error_code := 'PA_FP_WA_PLAN_DATE_ERR';
888 p_return_status := FND_API.G_RET_STS_ERROR;
889 RETURN;
890 END IF;
891 p_budget_start_date_out := l_budget_start_date_in;
892 p_budget_end_date_out := l_budget_end_date_in;
893
894 ELSIF l_budget_start_date_in IS NOT NULL AND
895 l_budget_end_date_in IS NULL THEN
896 -- throw error if one of the date is missing
897 x_error_code := 'PA_FP_WA_PLAN_DATE_MIS';
898 p_return_status := FND_API.G_RET_STS_ERROR;
899 RETURN;
900
901 ELSIF l_budget_start_date_in IS NULL AND
902 l_budget_end_date_in IS NOT NULL THEN
903 x_error_code := 'PA_FP_WA_PLAN_DATE_MIS';
907 l_budget_end_date_in IS NULL THEN
904 p_return_status := FND_API.G_RET_STS_ERROR;
905 RETURN;
906 /*ELSIF l_budget_start_date_in IS NULL AND
908 -- call an api to derive the default planning dates
909
910 -- preparing the input tables
911 l_elem_ver_id_tbl.EXTEND(1);
912 l_elem_ver_id_tbl(l_elem_ver_id_tbl.COUNT) := p_task_id;
913
914 PA_PLANNING_TRANSACTION_UTILS.get_default_planning_dates
915 ( p_project_id => p_project_id
916 ,p_element_version_id_tbl => l_elem_ver_id_tbl
917 ,p_project_structure_version_id => PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_project_id => p_project_id )
918 ,x_planning_start_date_tbl => l_start_date_tbl
919 ,x_planning_end_date_tbl => l_compl_date_tbl
920 ,x_msg_data => l_msg_data
921 ,x_msg_count => l_msg_count
922 ,x_return_status => p_return_status);
923
924 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
925 -- raising execption to show the error messages
926 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
927 END IF;
928
929 IF l_start_date_tbl.COUNT > 0 AND
930 l_compl_date_tbl.COUNT > 0 THEN
931 p_budget_start_date_out := trunc(l_start_date_tbl(l_start_date_tbl.FIRST));
932 p_budget_end_date_out := trunc(l_compl_date_tbl(l_compl_date_tbl.FIRST));
933 ELSE
934 -- raising execption to show the error messages
935 pa_utils.add_message
936 ( p_app_short_name => 'PA',
937 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
938 p_token1 => 'PROCEDURENAME',
939 p_value1 => 'get_valid_periods_date_pvt');
940 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
941 END IF;*/
942 END IF; -- planning dates not null
943 END IF; -- period name is null
944 END IF; -- p_context = WEBADI
945
946 EXCEPTION
947 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
948 l_msg_count := FND_MSG_PUB.count_msg;
949 IF l_msg_count = 1 THEN
950 PA_INTERFACE_UTILS_PUB.get_messages
951 (p_encoded => FND_API.G_TRUE
952 ,p_msg_index => 1
953 ,p_msg_count => l_msg_count
954 ,p_msg_data => l_msg_data
955 ,p_data => l_data
956 ,p_msg_index_out => l_msg_index_out);
957 END IF;
958 p_return_status := FND_API.G_RET_STS_ERROR;
959
960 WHEN FND_API.G_EXC_ERROR
961 THEN
962
963 ROLLBACK TO get_valid_period_dates_pvt;
964
965 p_return_status := FND_API.G_RET_STS_ERROR;
966
967 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
968 THEN
969
970 ROLLBACK TO get_valid_period_dates_pvt;
971
972 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
973
974 WHEN OTHERS THEN
975
976 ROLLBACK TO get_valid_period_dates_pvt;
977
978 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
979
980 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
981 THEN
982 FND_MSG_PUB.add_exc_msg
983 ( p_pkg_name => G_PKG_NAME
984 , p_procedure_name => l_api_name );
985
986 END IF;
987
988 END get_valid_period_dates_Pvt;
989
990
991 ----------------------------------------------------------------------------------------
992 --Name: check_entry_method_flags_Pvt
993 --Type: Procedure
994 --Description: This procedure can be used to check whether it is allowed to pass
995 -- cost quantity, raw_cost, burdened_cost, revenue and revenue quantity.
996 --
997 --
998 --Called subprograms:
999 --
1000 --
1001 --
1002 --History:
1003 -- 15-OCT-1996 L. de Werker Created
1004 --
1005 -- 09-FEB-2002 Srikanth Modified as part of changes for finplan model.
1006 -- budget amount code should be null when called from
1007 -- fin plan model. It should have a valid value when
1008 -- called from budget model.Similarly p_version_type
1009 -- should be null in budget model and should have
1010 -- valid value (COST,REVENUE,ALL) in finplan model
1014 -- value is 'WEBADI'. The out variable x_webadi_error_code
1011 -- 04-Nov-03 dbora Bug 3986129: FP.M Web ADI Dev changes made
1012 -- to be used for webadi context as well. New parameter
1013 -- added p_context is defaulted to null and other valid
1015 -- would be populated only if the context is 'WEBADI'.
1016
1017 PROCEDURE check_entry_method_flags_Pvt
1018 ( p_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1019 ,p_budget_amount_code IN VARCHAR2
1020 ,p_budget_entry_method_code IN VARCHAR2
1021 ,p_quantity IN NUMBER
1022 ,p_raw_cost IN NUMBER
1023 ,p_burdened_cost IN NUMBER
1024 ,p_revenue IN NUMBER
1025
1026 --Included for fin plan model
1027 ,p_version_type IN VARCHAR2
1028 ,p_allow_qty_flag IN VARCHAR2
1029 ,p_allow_raw_cost_flag IN VARCHAR2
1030 ,p_allow_burdened_cost_flag IN VARCHAR2
1031 ,p_allow_revenue_flag IN VARCHAR2
1032
1033 -- Bug 3986129: FP.M Web ADI Dev changes, new parameters
1034 ,p_context IN VARCHAR2
1035 ,p_raw_cost_rate IN NUMBER
1036 ,p_burdened_cost_rate IN NUMBER
1037 ,p_bill_rate IN NUMBER
1038 ,p_allow_raw_cost_rate_flag IN VARCHAR2
1039 ,p_allow_burd_cost_rate_flag IN VARCHAR2
1040 ,p_allow_bill_rate_flag IN VARCHAR2
1041 ,x_webadi_error_code OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1042 )
1043 IS
1044
1045 -- needed to get the flags associated to a budget entry method
1046
1047 CURSOR l_budget_entry_method_csr
1048 (p_budget_entry_method_code pa_budget_entry_methods.budget_entry_method_code%type )
1049 IS
1053 , rev_quantity_flag
1050 SELECT cost_quantity_flag
1051 , raw_cost_flag
1052 , burdened_cost_flag
1054 , revenue_flag
1055 FROM pa_budget_entry_methods
1056 WHERE budget_entry_method_code = p_budget_entry_method_code
1057 AND trunc(sysdate) BETWEEN trunc(start_date_active) and trunc(nvl(end_date_active,sysdate));
1058
1059 l_api_name CONSTANT VARCHAR2(30) := 'check_entry_method_flags';
1060
1061 l_cost_quantity_flag VARCHAR2(1);
1062 l_raw_cost_flag VARCHAR2(1);
1063 l_burdened_cost_flag VARCHAR2(1);
1064 l_rev_quantity_flag VARCHAR2(1);
1065 l_revenue_flag VARCHAR2(1);
1066
1067 --Included these parameters as part of changes in finplan model
1068 l_msg_count NUMBER := 0;
1069 l_data VARCHAR2(2000);
1070 l_msg_data VARCHAR2(2000);
1071 l_msg_index_out NUMBER;
1072 l_debug_mode VARCHAR2(1);
1073 l_module_name VARCHAR2(80);
1074 l_debug_level2 CONSTANT NUMBER := 2;
1075 l_debug_level3 CONSTANT NUMBER := 3;
1076 l_debug_level4 CONSTANT NUMBER := 4;
1077 l_debug_level5 CONSTANT NUMBER := 5;
1078
1079 -- Bug 3986129: FP.M Web ADI Dev changes
1080 l_raw_cost_rate_flag VARCHAR2(1);
1081 l_burd_cost_rate_flag VARCHAR2(1);
1082 l_bill_rate_flag VARCHAR2(1);
1083
1084 BEGIN
1085
1086 --Standard begin of API savepoint
1087
1088 SAVEPOINT check_entry_method_flags_pvt;
1089
1090 --Set API return status to success
1091
1092 p_return_status := FND_API.G_RET_STS_SUCCESS;
1093 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
1094 l_module_name := 'check_entry_method_flags_Pvt: ' || g_module_name;
1095
1096 IF l_debug_mode = 'Y' THEN
1097 pa_debug.set_curr_function( p_function => 'check_entry_method_flags_Pvt',
1098 p_debug_mode => l_debug_mode );
1099 END IF;
1100
1101 --Check for the context in which the API is called and initialise
1102 --the amount flags
1103
1104 --Budget model. Get the flags from budet entry method code
1105 IF (p_budget_amount_code IS NOT NULL) AND (p_version_type IS NULL) THEN
1106
1107 OPEN l_budget_entry_method_csr(p_budget_entry_method_code);
1108 FETCH l_budget_entry_method_csr INTO l_cost_quantity_flag
1109 ,l_raw_cost_flag
1110 ,l_burdened_cost_flag
1111 ,l_rev_quantity_flag
1112 ,l_revenue_flag;
1113 CLOSE l_budget_entry_method_csr;
1114
1115 --FinPlan Model. Get the flags from the parameters convertion them to N if Null
1116 ELSIF (p_budget_amount_code IS NULL) AND (p_version_type IS NOT NULL) THEN
1117
1118 l_cost_quantity_flag := nvl(p_allow_qty_flag,'N');
1119 l_raw_cost_flag := nvl(p_allow_raw_cost_flag,'N');
1120 l_burdened_cost_flag := nvl(p_allow_burdened_cost_flag,'N');
1121 l_rev_quantity_flag := nvl(p_allow_qty_flag,'N');
1122 l_revenue_flag := nvl(p_allow_revenue_flag,'N');
1123
1124 -- Bug 3986129: FP.M Web ADI Dev changes
1125 l_raw_cost_rate_flag := Nvl(p_allow_raw_cost_rate_flag, 'N');
1126 l_burd_cost_rate_flag := Nvl(p_allow_burd_cost_rate_flag, 'N');
1127 l_bill_rate_flag := Nvl(p_allow_bill_rate_flag, 'N');
1128
1129 ELSE
1130
1131 IF l_debug_mode='Y' THEN
1132 pa_debug.g_err_stage:= 'p_budget_amount_code passed is ' || p_budget_amount_code ;
1133 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1134
1135 pa_debug.g_err_stage:= 'p_version_type passed is ' || p_version_type ;
1136 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1137
1138 END IF;
1139
1140 PA_UTILS.ADD_MESSAGE
1141 (p_app_short_name => 'PA',
1142 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1143
1144 p_return_status := FND_API.G_RET_STS_ERROR;
1145 RETURN;
1146
1147 END IF;--IF (p_budget_amount_code IS NOT NULL) AND (p_version_type IS NULL)
1148
1149 --checking on mandatory flags
1150
1151 --COST BUDGET or COST FINPLAN VERSION
1152 IF ( p_budget_amount_code = 'C'
1153 OR p_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST)
1154 THEN
1155 IF l_cost_quantity_flag = 'N'
1156 AND ( p_quantity <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1157 AND p_quantity IS NOT NULL )
1158 THEN
1159 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1160 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1161 /* Bug 3132035, Token is removed
1162 */
1163 PA_UTILS.ADD_MESSAGE
1164 (p_app_short_name => 'PA',
1165 p_msg_name => 'PA_COST_QTY_NOT_ALLOWED');
1166 p_return_status := FND_API.G_RET_STS_ERROR;
1167 END IF;
1168
1169 --RAISE FND_API.G_EXC_ERROR;
1170 p_return_status := FND_API.G_RET_STS_ERROR;
1171 IF l_debug_mode='Y' THEN
1172 pa_debug.g_err_stage:= 'Cost Qty not allowed' ;
1176 ELSIF p_context = 'WEBADI' THEN
1173 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1174 END IF;
1175
1177 IF l_debug_mode='Y' THEN
1178 pa_debug.g_err_stage:= 'WEBADI: Cost Qty not allowed';
1179 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1180 pa_debug.g_err_stage:= 'Populating Error Code';
1181 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1182 END IF;
1183
1184 x_webadi_error_code := 'PA_FP_WA_COST_QTY_NOT_ALWD';
1185 p_return_status := FND_API.G_RET_STS_ERROR;
1186 RETURN;
1187 END IF;
1188
1189 END IF;
1190
1191 IF l_raw_cost_flag = 'N'
1192 AND ( p_raw_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1193 AND p_raw_cost IS NOT NULL )
1194 THEN
1195 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1196 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1197 /* Bug 3132035, Token is removed
1198 */
1199 PA_UTILS.ADD_MESSAGE
1200 (p_app_short_name => 'PA',
1201 p_msg_name => 'PA_RAW_COST_NOT_ALLOWED');
1202 p_return_status := FND_API.G_RET_STS_ERROR;
1203 END IF;
1204
1205 --RAISE FND_API.G_EXC_ERROR;
1206 p_return_status := FND_API.G_RET_STS_ERROR;
1207 IF l_debug_mode='Y' THEN
1208 pa_debug.g_err_stage:= 'Raw Cost not allowed' ;
1209 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1210 END IF;
1211
1212 ELSIF p_context = 'WEBADI' THEN
1213 IF l_debug_mode='Y' THEN
1214 pa_debug.g_err_stage:= 'WEBADI: Raw Cost not allowed';
1215 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1216 pa_debug.g_err_stage:= 'Populating Error Code';
1217 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1218 END IF;
1219
1220 x_webadi_error_code := 'PA_FP_WA_RAW_COST_NOT_ALWD';
1221 p_return_status := FND_API.G_RET_STS_ERROR;
1222 RETURN;
1223 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1224
1225 END IF;
1226
1227 IF l_burdened_cost_flag = 'N'
1228 AND ( p_burdened_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1229 AND p_burdened_cost IS NOT NULL )
1230 THEN
1231 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1232 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1233 /* Bug 3132035, Token is removed
1234 */
1235 PA_UTILS.ADD_MESSAGE
1236 (p_app_short_name => 'PA',
1237 p_msg_name => 'PA_BURD_COST_NOT_ALLOWED');
1238
1239 --RAISE FND_API.G_EXC_ERROR;
1240 p_return_status := FND_API.G_RET_STS_ERROR;
1241 END IF;
1242 IF l_debug_mode='Y' THEN
1243 pa_debug.g_err_stage:= 'Burd Cost not allowed' ;
1244 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1245 END IF;
1246 ELSIF p_context = 'WEBADI' THEN
1247 IF l_debug_mode='Y' THEN
1248 pa_debug.g_err_stage:= 'WEBADI: Burd Cost not allowed';
1249 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1250 pa_debug.g_err_stage:= 'Populating Error Code';
1251 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1252 END IF;
1253
1254 x_webadi_error_code := 'PA_FP_WA_BURD_COST_NOT_ALWD';
1255 p_return_status := FND_API.G_RET_STS_ERROR;
1256 RETURN;
1257 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1258
1259 END IF;
1260
1261 -- Revenue should be null for a COST version. AMG UT2
1262 IF p_revenue <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1263 p_revenue IS NOT NULL
1264 THEN
1265 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1266 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1267 /* Bug 3132035, Token is removed
1268 */
1269 PA_UTILS.ADD_MESSAGE
1270 (p_app_short_name => 'PA',
1271 p_msg_name => 'PA_REVENUE_NOT_ALLOWED');
1272 p_return_status := FND_API.G_RET_STS_ERROR;
1273 END IF;
1274
1275 IF l_debug_mode='Y' THEN
1276 pa_debug.g_err_stage:= 'Rev Amt not allowed' ;
1277 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1278 END IF;
1279
1280 --RAISE FND_API.G_EXC_ERROR;
1284 pa_debug.g_err_stage:= 'WEBADI: Revenue not allowed';
1281 p_return_status := FND_API.G_RET_STS_ERROR;
1282 ELSIF p_context = 'WEBADI' THEN
1283 IF l_debug_mode='Y' THEN
1285 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1286 pa_debug.g_err_stage:= 'Populating Error Code';
1287 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1288 END IF;
1289
1290 x_webadi_error_code := 'PA_FP_WA_REVENUE_NOT_ALWD';
1291 p_return_status := FND_API.G_RET_STS_ERROR;
1292 RETURN;
1293 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1294 END IF;
1295
1296 --REVENUE BUDGET OR REVENUE FINPLAN VERSION
1297 ELSIF( p_budget_amount_code = 'R'
1298 OR p_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE)
1299 THEN
1300 IF l_rev_quantity_flag = 'N'
1301 AND ( p_quantity <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1302 AND p_quantity IS NOT NULL )
1303 THEN
1304 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1305 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1306 /* Bug 3132035, Token is removed
1307 */
1308 PA_UTILS.ADD_MESSAGE
1309 (p_app_short_name => 'PA',
1310 p_msg_name => 'PA_REV_QTY_NOT_ALLOWED');
1311 p_return_status := FND_API.G_RET_STS_ERROR;
1312 END IF;
1313
1314 --RAISE FND_API.G_EXC_ERROR;
1315 p_return_status := FND_API.G_RET_STS_ERROR;
1316 IF l_debug_mode='Y' THEN
1317 pa_debug.g_err_stage:= 'Rev Qty not allowed' ;
1318 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1319 END IF;
1320
1321 ELSIF p_context = 'WEBADI' THEN
1322 IF l_debug_mode='Y' THEN
1323 pa_debug.g_err_stage:= 'WEBADI: Revenue Qty not allowed';
1324 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1325 pa_debug.g_err_stage:= 'Populating Error Code';
1326 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1327 END IF;
1328
1329 x_webadi_error_code := 'PA_FP_WA_REV_QTY_NOT_ALWD';
1330 p_return_status := FND_API.G_RET_STS_ERROR;
1331 RETURN;
1332 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1333 END IF;
1334
1335 IF l_revenue_flag = 'N'
1336 AND ( p_revenue <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1337 AND p_revenue IS NOT NULL )
1338 THEN
1339 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1340 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1341 /* Bug 3132035, Token is removed
1342 */
1343 PA_UTILS.ADD_MESSAGE
1344 (p_app_short_name => 'PA',
1345 p_msg_name => 'PA_REVENUE_NOT_ALLOWED');
1346 p_return_status := FND_API.G_RET_STS_ERROR;
1347 END IF;
1348 IF l_debug_mode='Y' THEN
1349 pa_debug.g_err_stage:= 'Rev Amt not allowed' ;
1350 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1351 END IF;
1352
1353 --RAISE FND_API.G_EXC_ERROR;
1354 p_return_status := FND_API.G_RET_STS_ERROR;
1355 ELSIF p_context = 'WEBADI' THEN
1356 IF l_debug_mode='Y' THEN
1357 pa_debug.g_err_stage:= 'WEBADI: Revenue not allowed';
1358 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1359 pa_debug.g_err_stage:= 'Populating Error Code';
1360 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1361 END IF;
1362
1363 x_webadi_error_code := 'PA_FP_WA_REVENUE_NOT_ALWD';
1364 p_return_status := FND_API.G_RET_STS_ERROR;
1365 RETURN;
1366 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1367 END IF;
1368
1369 -- Raw cost and Burdened Cost amounts should be null for a revenue
1370 -- Version. AMG UT2.
1371 IF p_raw_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1372 p_raw_cost IS NOT NULL
1373 THEN
1374 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1375 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1376 THEN
1377 /* Bug 3132035, Token is removed
1378 */
1379 PA_UTILS.ADD_MESSAGE
1380 (p_app_short_name => 'PA',
1381 p_msg_name => 'PA_RAW_COST_NOT_ALLOWED');
1382 p_return_status := FND_API.G_RET_STS_ERROR;
1383 END IF;
1384
1385 --RAISE FND_API.G_EXC_ERROR;
1386 p_return_status := FND_API.G_RET_STS_ERROR;
1390
1387 IF l_debug_mode='Y' THEN
1388 pa_debug.g_err_stage:= 'Raw Cost not allowed' ;
1389 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1391 END IF;
1392 ELSIF p_context = 'WEBADI' THEN
1393 IF l_debug_mode='Y' THEN
1394 pa_debug.g_err_stage:= 'WEBADI: Raw Cost not allowed';
1398 END IF;
1395 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1396 pa_debug.g_err_stage:= 'Populating Error Code';
1397 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1399
1400 x_webadi_error_code := 'PA_FP_WA_RAW_COST_NOT_ALWD';
1401 p_return_status := FND_API.G_RET_STS_ERROR;
1402 RETURN;
1403 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1404
1405 END IF;
1406
1407 IF p_burdened_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1408 p_burdened_cost IS NOT NULL
1409 THEN
1410 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1411 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1412 /* Bug 3132035, Token is removed
1413 */
1414 PA_UTILS.ADD_MESSAGE
1415 (p_app_short_name => 'PA',
1416 p_msg_name => 'PA_BURD_COST_NOT_ALLOWED');
1417
1418 --RAISE FND_API.G_EXC_ERROR;
1419 p_return_status := FND_API.G_RET_STS_ERROR;
1420 END IF;
1421 IF l_debug_mode='Y' THEN
1422 pa_debug.g_err_stage:= 'Burd Cost not allowed' ;
1423 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1424 END IF;
1425 ELSIF p_context = 'WEBADI' THEN
1426 IF l_debug_mode='Y' THEN
1427 pa_debug.g_err_stage:= 'WEBADI: Burd Cost not allowed';
1428 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1429 pa_debug.g_err_stage:= 'Populating Error Code';
1430 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1431 END IF;
1432
1433 x_webadi_error_code := 'PA_FP_WA_BURD_COST_NOT_ALWD';
1434 p_return_status := FND_API.G_RET_STS_ERROR;
1435 RETURN;
1436 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1437 END IF;
1438
1439 --FinPlan Model . Cost and Revenue Together Version
1440 ELSIF(p_version_type=PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL)THEN
1441
1442 IF p_allow_qty_flag = 'N'
1443 AND ( p_quantity <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1444 AND p_quantity IS NOT NULL )
1445 THEN
1446 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1447 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1448 /* Bug 3132035, Token is removed
1449 */
1450 PA_UTILS.ADD_MESSAGE
1451 (p_app_short_name => 'PA',
1452 p_msg_name => 'PA_REV_QTY_NOT_ALLOWED');
1453 p_return_status := FND_API.G_RET_STS_ERROR;
1454 END IF;
1455
1456 --RAISE FND_API.G_EXC_ERROR;
1457 p_return_status := FND_API.G_RET_STS_ERROR;
1458 IF l_debug_mode='Y' THEN
1459 pa_debug.g_err_stage:= 'All Qty not allowed' ;
1460 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1461 END IF;
1462 ELSIF p_context = 'WEBADI' THEN
1463 IF l_debug_mode='Y' THEN
1464 pa_debug.g_err_stage:= 'WEBADI: All quantity not allowed';
1465 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1466 pa_debug.g_err_stage:= 'Populating Error Code';
1467 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1468 END IF;
1469
1470 x_webadi_error_code := 'PA_FP_WA_REV_QTY_NOT_ALWD';
1471 p_return_status := FND_API.G_RET_STS_ERROR;
1472 RETURN;
1473 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1474 END IF;
1475
1476 IF l_raw_cost_flag = 'N'
1477 AND ( p_raw_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1478 AND p_raw_cost IS NOT NULL )
1479 THEN
1480 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1481 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1482 /* Bug 3132035, Token is removed
1483 */
1484 PA_UTILS.ADD_MESSAGE
1485 (p_app_short_name => 'PA',
1486 p_msg_name => 'PA_RAW_COST_NOT_ALLOWED');
1487 p_return_status := FND_API.G_RET_STS_ERROR;
1488 END IF;
1489
1490 --RAISE FND_API.G_EXC_ERROR;
1491 p_return_status := FND_API.G_RET_STS_ERROR;
1492 IF l_debug_mode='Y' THEN
1493 pa_debug.g_err_stage:= 'All Raw Cost not allowed' ;
1494 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1495 END IF;
1496 ELSIF p_context = 'WEBADI' THEN
1497 IF l_debug_mode='Y' THEN
1498 pa_debug.g_err_stage:= 'WEBADI: Raw Cost not allowed';
1502 END IF;
1499 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1500 pa_debug.g_err_stage:= 'Populating Error Code';
1501 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1503
1504 x_webadi_error_code := 'PA_FP_WA_RAW_COST_NOT_ALWD';
1505 p_return_status := FND_API.G_RET_STS_ERROR;
1506 RETURN;
1507 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1508 END IF;
1509
1510 IF l_burdened_cost_flag = 'N'
1511 AND ( p_burdened_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1512 AND p_burdened_cost IS NOT NULL )
1513 THEN
1514 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1515 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1516 /* Bug 3132035, Token is removed
1517 */
1518 PA_UTILS.ADD_MESSAGE
1519 (p_app_short_name => 'PA',
1520 p_msg_name => 'PA_BURD_COST_NOT_ALLOWED');
1521
1522 --RAISE FND_API.G_EXC_ERROR;
1523 p_return_status := FND_API.G_RET_STS_ERROR;
1524 END IF;
1525 IF l_debug_mode='Y' THEN
1526 pa_debug.g_err_stage:= 'All Burd Cost not allowed' ;
1527 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1528 END IF;
1529 ELSIF p_context = 'WEBADI' THEN
1530 IF l_debug_mode='Y' THEN
1531 pa_debug.g_err_stage:= 'WEBADI: Burd Cost not allowed';
1532 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1533 pa_debug.g_err_stage:= 'Populating Error Code';
1534 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1535 END IF;
1536
1537 x_webadi_error_code := 'PA_FP_WA_BURD_COST_NOT_ALWD';
1538 p_return_status := FND_API.G_RET_STS_ERROR;
1539 RETURN;
1540 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1541
1542 END IF;
1543
1544 IF l_revenue_flag = 'N'
1545 AND ( p_revenue <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1546 AND p_revenue IS NOT NULL )
1547 THEN
1548 IF Nvl(p_context, '-99') <> 'WEBADI' THEN -- Bug 3986129: FP.M Web ADI Dev changes
1549 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1550 THEN
1551 /* Bug 3132035, Token is removed
1552 */
1553 PA_UTILS.ADD_MESSAGE
1554 (p_app_short_name => 'PA',
1555 p_msg_name => 'PA_REVENUE_NOT_ALLOWED');
1556
1557 --RAISE FND_API.G_EXC_ERROR;
1558 p_return_status := FND_API.G_RET_STS_ERROR;
1559
1560 END IF;
1561 IF l_debug_mode='Y' THEN
1562 pa_debug.g_err_stage:= 'All Revenue not allowed' ;
1563 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1564
1565 END IF;
1566
1567 --RAISE FND_API.G_EXC_ERROR;
1568 p_return_status := FND_API.G_RET_STS_ERROR;
1569 ELSIF p_context = 'WEBADI' THEN
1570 IF l_debug_mode='Y' THEN
1571 pa_debug.g_err_stage:= 'WEBADI: Revenue not allowed';
1572 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1573 pa_debug.g_err_stage:= 'Populating Error Code';
1574 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1575 END IF;
1576
1577 x_webadi_error_code := 'PA_FP_WA_REVENUE_NOT_ALWD';
1578 p_return_status := FND_API.G_RET_STS_ERROR;
1579 RETURN;
1580 END IF; -- Bug 3986129: FP.M Web ADI Dev changes
1581 END IF;
1582
1583 ELSE
1584
1585 IF l_debug_mode='Y' THEN
1586 pa_debug.g_err_stage:= 'p_budget_amount_code passed is ' || p_budget_amount_code ;
1587 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level5);
1588
1589 pa_debug.g_err_stage:= 'p_version_type passed is ' || p_version_type ;
1590 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level5);
1591
1592 END IF;
1593
1594 PA_UTILS.ADD_MESSAGE
1595 (p_app_short_name => 'PA',
1596 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1597 p_return_status := FND_API.G_RET_STS_ERROR;
1598 RETURN;
1599
1600
1601 END IF;--IF ( p_budget_amount_code = 'C'
1602
1603 -- Bug 3986129: FP.M Web ADI Dev changes
1604 IF p_context = 'WEBADI' THEN
1605 IF p_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST THEN
1606 IF l_raw_cost_rate_flag = 'N' THEN
1607 IF p_raw_cost_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1608 p_raw_cost_rate IS NOT NULL THEN
1609 IF l_debug_mode='Y' THEN
1610 pa_debug.g_err_stage:= 'WEBADI: Raw Cost Rate allowed';
1611 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1615
1612 pa_debug.g_err_stage:= 'Populating Error Code';
1613 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1614 END IF;
1616 x_webadi_error_code := 'PA_FP_WA_RCR_CNG_NOT_ALWD';
1617 p_return_status := FND_API.G_RET_STS_ERROR;
1618 RETURN;
1619 END IF;
1620 END IF;
1621 IF l_burd_cost_rate_flag = 'N' THEN
1622 IF p_burdened_cost_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1623 p_burdened_cost_rate IS NOT NULL THEN
1624 IF l_debug_mode='Y' THEN
1625 pa_debug.g_err_stage:= 'WEBADI: Burd Cost Rate not allowed';
1626 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1627 pa_debug.g_err_stage:= 'Populating Error Code';
1628 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1629 END IF;
1630
1631 x_webadi_error_code := 'PA_FP_WA_BCR_CNG_NOT_ALWD';
1632 p_return_status := FND_API.G_RET_STS_ERROR;
1633 RETURN;
1634 END IF;
1635 END IF;
1636 -- bill rate should not be allowed to be edited
1637 IF p_bill_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1638 p_bill_rate IS NOT NULL THEN
1639 IF l_debug_mode='Y' THEN
1640 pa_debug.g_err_stage:= 'WEBADI: Bill Rate not allowed';
1641 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1642 pa_debug.g_err_stage:= 'Populating Error Code';
1643 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1644 END IF;
1645
1646 x_webadi_error_code := 'PA_FP_WA_BR_CNG_NOT_ALWD';
1647 p_return_status := FND_API.G_RET_STS_ERROR;
1648 RETURN;
1649 END IF;
1650
1651
1652 ELSIF p_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE THEN
1653 IF l_bill_rate_flag = 'N' THEN
1654 IF p_bill_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1655 p_bill_rate IS NOT NULL THEN
1656 IF l_debug_mode='Y' THEN
1657 pa_debug.g_err_stage:= 'WEBADI: Bill Rate not allowed';
1658 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1659 pa_debug.g_err_stage:= 'Populating Error Code';
1660 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1661 END IF;
1662
1663 x_webadi_error_code := 'PA_FP_WA_BR_CNG_NOT_ALWD';
1664 p_return_status := FND_API.G_RET_STS_ERROR;
1665 RETURN;
1666 END IF;
1667 END IF;
1668 -- cost rate should not be allowed to be edited
1669 IF p_raw_cost_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1670 p_raw_cost_rate IS NOT NULL THEN
1671 IF l_debug_mode='Y' THEN
1672 pa_debug.g_err_stage:= 'WEBADI: Raw Cost Rate allowed';
1673 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1674 pa_debug.g_err_stage:= 'Populating Error Code';
1675 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1676 END IF;
1677
1678 x_webadi_error_code := 'PA_FP_WA_RCR_CNG_NOT_ALWD';
1679 p_return_status := FND_API.G_RET_STS_ERROR;
1680 RETURN;
1681 END IF;
1682 IF p_burdened_cost_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1683 p_burdened_cost_rate IS NOT NULL THEN
1684 IF l_debug_mode='Y' THEN
1685 pa_debug.g_err_stage:= 'WEBADI: Burd Cost Rate not allowed';
1686 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1687 pa_debug.g_err_stage:= 'Populating Error Code';
1688 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1689 END IF;
1690
1691 x_webadi_error_code := 'PA_FP_WA_BCR_CNG_NOT_ALWD';
1692 p_return_status := FND_API.G_RET_STS_ERROR;
1693 RETURN;
1694 END IF;
1695 ELSIF p_version_type = PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL THEN
1696 IF l_raw_cost_rate_flag = 'N' THEN
1697 IF p_raw_cost_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1698 p_raw_cost_rate IS NOT NULL THEN
1699 IF l_debug_mode='Y' THEN
1700 pa_debug.g_err_stage:= 'WEBADI: Raw Cost Rate allowed';
1701 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1702 pa_debug.g_err_stage:= 'Populating Error Code';
1703 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1707 p_return_status := FND_API.G_RET_STS_ERROR;
1704 END IF;
1705
1706 x_webadi_error_code := 'PA_FP_WA_RCR_CNG_NOT_ALWD';
1708 RETURN;
1709 END IF;
1710 END IF;
1711 IF l_burd_cost_rate_flag = 'N' THEN
1712 IF p_burdened_cost_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1713 p_burdened_cost_rate IS NOT NULL THEN
1714 IF l_debug_mode='Y' THEN
1715 pa_debug.g_err_stage:= 'WEBADI: Burd Cost Rate not allowed';
1716 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1717 pa_debug.g_err_stage:= 'Populating Error Code';
1718 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1719 END IF;
1720
1721 x_webadi_error_code := 'PA_FP_WA_BCR_CNG_NOT_ALWD';
1722 p_return_status := FND_API.G_RET_STS_ERROR;
1723 RETURN;
1724 END IF;
1725 END IF;
1726 IF l_bill_rate_flag = 'N' THEN
1727 IF p_bill_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
1728 p_bill_rate IS NOT NULL THEN
1729 IF l_debug_mode='Y' THEN
1730 pa_debug.g_err_stage:= 'WEBADI: Bill Rate not allowed';
1731 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1732 pa_debug.g_err_stage:= 'Populating Error Code';
1733 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
1734 END IF;
1735
1736 x_webadi_error_code := 'PA_FP_WA_BR_CNG_NOT_ALWD';
1737 p_return_status := FND_API.G_RET_STS_ERROR;
1738 RETURN;
1739 END IF;
1740 END IF;
1741 END IF;
1742 END IF;
1743
1744 IF l_debug_mode = 'Y' THEN
1745 pa_debug.reset_curr_function;
1746 END IF;
1747 EXCEPTION
1748
1749
1750 WHEN FND_API.G_EXC_ERROR
1751 THEN
1752
1753 ROLLBACK TO check_entry_method_flags_pvt;
1754
1755 p_return_status := FND_API.G_RET_STS_ERROR;
1756 IF l_debug_mode = 'Y' THEN
1757 pa_debug.reset_curr_function;
1758 END IF;
1759 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
1760 THEN
1761
1762 ROLLBACK TO check_entry_method_flags_pvt;
1763
1764 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1765 IF l_debug_mode = 'Y' THEN
1766 pa_debug.reset_curr_function;
1767 END IF;
1768 WHEN OTHERS THEN
1769
1770 ROLLBACK TO check_entry_method_flags_pvt;
1771
1772 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1773
1774 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1775 THEN
1776 FND_MSG_PUB.add_exc_msg
1777 ( p_pkg_name => G_PKG_NAME
1778 , p_procedure_name => l_api_name );
1779
1780 END IF;
1781 IF l_debug_mode = 'Y' THEN
1782 pa_debug.reset_curr_function;
1783 END IF;
1784 END check_entry_method_flags_Pvt;
1785
1786 -- Bug 3986129: FP.M Web ADI Dev changes, new api
1787
1788 /* This api would be called to validate the UOM passed for the resource alias for
1789 * WEBADI context to check, if the passed value corresponds to the UOM defined
1790 * for the resource list member and is called from pa_budget_pvt.validate_budget_lines.
1791 * if the validation succeeds, x_error_code would be returned as null
1792 */
1793 PROCEDURE validate_uom_passed
1794 ( p_context IN VARCHAR2,
1795 p_res_list_mem_id IN pa_resource_list_members.resource_list_member_id%TYPE,
1796 p_uom_passed IN pa_resource_list_members.unit_of_measure%TYPE,
1797 x_error_code OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1798 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1799 x_msg_data OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1800 x_msg_count OUT NOCOPY NUMBER) --File.Sql.39 bug 4440895
1801
1802 IS
1803 l_return_status VARCHAR2(1);
1804 l_msg_data VARCHAR2(2000);
1805 l_msg_count NUMBER;
1806
1807 l_debug_mode VARCHAR2(1);
1808 l_module_name VARCHAR2(100) := 'PA_BUDGET_CHECK_PVT.validate_uom_passed';
1809 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1810 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1811 l_msg_index_out NUMBER;
1812 l_data VARCHAR2(2000);
1813
1814 l_unit_of_measure pa_resource_list_members.unit_of_measure%TYPE;
1815
1816 BEGIN
1817 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1818 x_msg_count := 0;
1819 x_return_status := FND_API.G_RET_STS_SUCCESS;
1820
1821 IF l_debug_mode = 'Y' THEN
1822 PA_DEBUG.Set_Curr_Function( p_function => l_module_name,
1823 p_debug_mode => l_debug_mode );
1824 END IF;
1825 IF l_debug_mode = 'Y' THEN
1826 pa_debug.g_err_stage := 'Entering into PA_BUDGET_CHECK_PVT.validate_uom_passed';
1830 END IF;
1827 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1828 pa_debug.g_err_stage := 'validating input parameters';
1829 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1831
1832 -- validating input parameters
1833 IF p_res_list_mem_id IS NULL THEN
1834 IF l_debug_mode = 'Y' THEN
1835 pa_debug.g_err_stage := 'Required input param is null';
1836 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1837 END IF;
1838 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1839 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1840 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1841 END IF;
1842
1843 IF l_debug_mode = 'Y' THEN
1844 pa_debug.g_err_stage := 'Checking the UOM passed';
1845 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1846 END IF;
1847 -- using the singular select here as no api exists only for this
1848 BEGIN
1849 SELECT unit_of_measure
1850 INTO l_unit_of_measure
1851 FROM pa_resource_list_members
1852 WHERE resource_list_member_id = p_res_list_mem_id;
1853 EXCEPTION
1854 WHEN NO_DATA_FOUND THEN
1855 IF l_debug_mode = 'Y' THEN
1856 pa_debug.g_err_stage := 'No values obtained from the select';
1857 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1858 END IF;
1859 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1860 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1861 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1862 END;
1863
1864 IF l_debug_mode = 'Y' THEN
1865 pa_debug.g_err_stage := 'UOM fetched from DB: ' || l_unit_of_measure;
1866 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1867 END IF;
1868 IF Nvl(p_uom_passed, l_unit_of_measure) <> l_unit_of_measure THEN
1869 x_error_code := 'FP_WEBADI_INVALID_UOM_PASSED';
1870
1871 IF l_debug_mode = 'Y' THEN
1872 pa_debug.reset_curr_function;
1873 END IF;
1874 RETURN;
1875 END IF;
1876
1877 IF l_debug_mode = 'Y' THEN
1878 pa_debug.g_err_stage := 'Leaving PA_BUDGET_CHECK_PVT.validate_uom_passed';
1879 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1880 END IF;
1881 IF l_debug_mode = 'Y' THEN
1882 pa_debug.reset_curr_function;
1883 END IF;
1884
1885 EXCEPTION
1886 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1887 l_msg_count := FND_MSG_PUB.count_msg;
1888
1889 IF l_msg_count = 1 and x_msg_data IS NULL THEN
1890 PA_INTERFACE_UTILS_PUB.get_messages
1891 (p_encoded => FND_API.G_TRUE
1892 ,p_msg_index => 1
1893 ,p_msg_count => l_msg_count
1894 ,p_msg_data => l_msg_data
1895 ,p_data => l_data
1896 ,p_msg_index_out => l_msg_index_out);
1897 x_msg_data := l_data;
1898 x_msg_count := l_msg_count;
1899 ELSE
1900 x_msg_count := l_msg_count;
1901 END IF;
1902 x_return_status := FND_API.G_RET_STS_ERROR;
1903
1904 IF l_debug_mode = 'Y' THEN
1905 pa_debug.reset_curr_function;
1906 END IF;
1907 RETURN;
1908
1909 WHEN OTHERS THEN
1910 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1911 x_msg_count := 1;
1912 x_msg_data := SQLERRM;
1913
1914 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_BUDGET_CHECK_PVT'
1915 ,p_procedure_name => 'validate_uom_passed');
1916 IF l_debug_mode = 'Y' THEN
1917 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1918 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1919 END IF;
1920
1921 IF l_debug_mode = 'Y' THEN
1922 pa_debug.reset_curr_function;
1923 END IF;
1924 RAISE;
1925 END validate_uom_passed;
1926 --------------------------------------------------------------------------------
1927 end PA_BUDGET_CHECK_PVT;