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