DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_BUDGET_CHECK_PVT

Source


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;