DBA Data[Home] [Help]

PACKAGE BODY: APPS.BIS_PMV_PARAMETERS_PVT

Source


1 PACKAGE BODY BIS_PMV_PARAMETERS_PVT as
2 /* $Header: BISVPARB.pls 120.5 2006/03/27 12:54:18 nbarik noship $ */
3 -- dbdrv: sql ~PROD ~PATH ~FILE none none none package &phase=plb \
4 -- dbdrv: checkfile(115.155=120.5):~PROD:~PATH:~FILE
5 
6 /*
7 REM +=======================================================================+
8 REM |    Copyright (c) 1998 Oracle Corporation, Redwood Shores, CA, USA     |
9 REM |                         All rights reserved.                          |
10 REM +=======================================================================+
11 REM | FILENAME                                                              |
12 REM |     BISVPARB.pls                                                      |
13 REM |                                                                       |
14 REM | DESCRIPTION                                                           |
15 REM |     This is the Query Pkg. for PMV.									                  |
16 REM |                                                                       |
17 REM | HISTORY                                                               |
18 REM | serao, 08/23/2002, bug 2514044 - get name value pairs from pUsrStrng  |
19 REM |                                  of the form : 						            |
20 REM |                                    pRegionCode=POA_DBI_POP_CA_STATUS& |
21 REM |                                    VIEW_BY=SUPPLIER+POA_SUPPLIERS		  |
22 REM |                                                      									|
23 REM | ansingh, 02/09/2002, bug 2537114 - In getLOVSQL() while constructing  |
24 REM |     						             where clause take care of the condition  |
25 REM |						                   org='All'. In getTimeLovSql() fixed upper|
26 REM |							                 comparision issue and query issue.  	    |
27 REM | ansingh, 7/11/2002 Bug 2577374 - PMV To handle the Unassigned values  |
28 REM | nbarik,  23/10/2002 Bug Fix 2616851,null check for mandatory parameter|
29 REM | ansingh, 11/11/2002 BugFix#2641735, LOV Performance Fix.              |
30 REM | nkishore,10/12/2002 Added copy_ses_to_def_parameters                  |
31 REM | ansingh, 01/23/2003 BugFix#2763217                                    |
32 REM | nbarik   03/17/2003 Bug Fix 2844149 - Added date format for to_date   |
33 REM | ansingh  04/22/2003 BugFix#2887200                                    |
34 REM | nbarik   05/05/2003 Bug Fix 2691199 - use p_where_clause              |
35 REM | nbarik   05/13/2003 Bug Fix 2955560 - add an enclosing parentheses    |
36 REM | kiprabha 05/22/2003 Enh 2885430  - DIMENSION VALUE    |
37 REM | rcmuthuk 06/16/2003 Bug Fix 2998426  - Prepend % for Time LOV Search  |
38 REM | nbarik   07/10/2003 Bug Fix 2999602 - Change Call to GET_COMPUTED_DATE|
39 REM | nkishore 07/30/2003 Bug Fix 3074842 - ins/del duplicate dim levels    |
40 REM | nkishore 08/11/2003 Bug Fix 3087383 - copy time from/to,sysdate in copy_form_func |
41 REM | nkishore, 19/08/2003, BugFix 3099789 add copy_time_params	    	    |
42 REM | nbarik    10/21/03  Bug Fix 3201277                                   |
43 REM | nkishore  12/19/03  Bug Fix 3314027                                   |
44 REM | ksadagop  01/20/04  Bug Fix 3351910 Added LOV Where clause-drillAcross|
45 REM | nkishore  12/19/03  Bug Fix 3411456                                   |
46 REM | nbarik    02/19/04  Bug Fix 3441967                                   |
47 REM | nkishore  02/25/04  Bug Fix 3464708                                   |
48 REM | ashgarg   10/21/04  Bug Fix 3878112                                   |
49 REM +=======================================================================+
50 */
51 
52 MAX_BIND_VARIABLE_COUNT NUMBER := 20;
53 
54 /** Flattens the attrNameList for dimension and paramNumber into the xParameterTbl structure */
55 -- nbarik - 04/20/04 - Enhancement 3378782 - Parameter Validation - Added pLovWhereList
56 PROCEDURE addToList(
57   pDImension IN VARCHAR2,
58   pAttrNameList IN BISVIEWER.t_char,
59   pLovWhereList IN BISVIEWER.t_char,
60 
61   pParamNumber In NUMBER,
62   xParameterTbl IN OUT NOCOPY parameter_group_tbl_type
63 ) IS
64  lCount NUMBER;
65  lParamGrpRec parameter_group_rec_type;
66 BEGIN
67 
68  IF (xParameterTbl IS NOT NULL) THEN
69   lCOunt := xParameterTbl.COUNT;
70 
71   IF (pAttrNameList IS NOT NULL AND pAttrNameList.COUNT > 0) THEN
72 
73     FOR i IN pAttrNameList.FIRST..pAttrNameList.LAST LOOP
74       lParamGrpRec.dimension := pDimension;
75       lParamGrpRec.attribute_name := pAttrNameList(i);
76       --jprabhud - Bug 	3625068
77       IF (pLovWhereList IS NOT NULL AND pLovWhereList.COUNT > 0) THEN
78         lParamGrpRec.lov_where := pLovWhereList(i);
79       ELSE
80         lParamGrpRec.lov_where := null;
81       END IF;
82 
83       lParamGrpRec.parameter_number := pParamNumber;
84       xParameterTbl(lCOunt+i) := lParamGrpRec; --i starts with 1, therefore count+i should suffice
85     END LOOP;
86 
87   ELSE
88       lParamGrpRec.dimension := NULL;
89       lParamGrpRec.attribute_name := pDimension;
90       lParamGrpRec.parameter_number := pParamNumber;
91       xParameterTbl(lCOunt+1) := lParamGrpRec;
92       lParamGrpRec.lov_where := NULL;
93   END IF;
94 
95  END IF;
96 END addToList;
97 
98 /* Proc to will group all the parameters into the parameter_group_tbl_type datastructure */
99 -- nbarik - 04/20/04 - Enhancement 3378782 - Parameter Validation - Added pLovWhereTbl
100 PROCEDURE getParameterGroupForLists(
101   pAttribute2Tbl BISVIEWER.t_char
102   ,pAttribCodeTbl BISVIEWER.t_char
103   ,pDisplaySeqTbl BISVIEWER.t_num
104   ,pLovWhereTbl BISVIEWER.t_char
105   ,xParameterGroup IN OUT NOCOPY parameter_group_tbl_type
106   ,xAsOfDateExists OUT NOCOPY BOOLEAN
107   ,xTimeCompTypeExists OUT NOCOPY BOOLEAN
108 )IS
109     lParamGrpRec parameter_group_rec_type;
110     lAttrNameList BISVIEWER.t_char;
111     lLovWhereList BISVIEWER.t_char;
112     l_index BINARY_INTEGER := 1;
113     l_grp_index BINARY_INTEGER := 1;
114     lPrevDimension VARCHAR2(80);
115     lDimension VARCHAR2(80);
116     lPrevDisplaySequence NUMBER ;
117 BEGIN
118 
119    xTimeCompTypeExists := FALSE;
120    xAsOfDateExists := FALSE;
121 
122    lPrevDimension := null;
123    lDimension := null;
124    -- get the latest count
125    l_grp_index := xParameterGroup.COUNT+1;
126 
127    IF pAttribute2Tbl IS NOT NULL AND pAttribute2Tbl.COUNT >0 THEN
128       FOR i IN pAttribute2Tbl.FIRST..pAttribute2Tbl.LAST LOOP
129 
130         lDimension := pAttribute2Tbl(i);
131         lDimension := substr( lDimension ,1,instr(lDimension ,'+')-1 );
132 
133         IF (lDimension = 'TIME_COMPARISON_TYPE') THEN
134           xTimeCompTypeExists := TRUE;
135         END IF;
136 
137         IF (lDimension IS NULL) THEN
138 
139           --put the prev dimension stuff in
140           IF (lPrevDimension IS NOT NULL) THEN
141 
142             addToList(
143                 pDImension => lPrevDimension,
144                 pAttrNameList => lAttrNameList,
145                 pLovWhereList => lLovWhereList,
146                 pParamNumber => l_grp_index,
147                 xParameterTbl => xParameterGroup
148             );
149             l_grp_index := l_grp_index+1;
150           END IF;
151 
152             --reinitailise record for the next dimension
153             lParamGrpRec.dimension := NULL;
154             l_index := 1;
155             lAttrNameList.DELETE;
156             lLovWHereList.DELETE;
157 
158             --add this non-attr record
159             lAttrNameList(l_index) := pAttribCodeTbl(i);
160             lLovWhereList(l_index) := pLovWhereTbl(i);
161 
162             addToList(
163                 pDImension => pAttribCodeTbl(i),
164                 pAttrNameList => lAttrNameList,
165                 pLovWhereList => lLovWhereList,
166                 pParamNumber => l_grp_index,
167                 xParameterTbl => xParameterGroup
168             );
169             l_grp_index := l_grp_index+1;
170 
171             IF (pAttribCodeTbl(i) = 'AS_OF_DATE') THEN
172               xAsOfDateExists := TRUE;
173             END IF;
174 
175             --reinitailise record for the next dimension
176             lParamGrpRec.dimension := NULL;
177             l_index := 1;
178             lAttrNameList.DELETE;
179             lLovWhereList.DELETE;
180 
181             lPrevDimension := lDimension;
182             lPrevDisplaySequence  := pDisplaySeqTbl(i);
183 
184         ELSIF (pDisplaySeqTbl (i) < 10000) THEN          --diff rules for less than 10000
185           --store the display sequence
186           lPrevDisplaySequence  := pDisplaySeqTbl(i);
187 
188           --if this is not a dimension or the current dimenion is not the prev dimension, then
189           -- they do not belong to the same group
190           -- if the prev dimension was a non-dimension, then it will go inside loop
191           IF  NOT (lDimension = lPrevDimension) THEN
192 
193             IF (lPrevDimension IS NOT NULL) THEN
194               -- new group
195 
196               addToList(
197                 pDImension => lPrevDimension,
198                 pAttrNameList => lAttrNameList,
199                 pLovWhereList => lLovWhereList,
200                 pParamNumber => l_grp_index,
201                 xParameterTbl => xParameterGroup
202               );
203               l_grp_index := l_grp_index+1;
204             END IF;
205 
206             --reinitailise record for the next dimension
207             lParamGrpRec.dimension := NULL;
208             l_index := 1;
209             lAttrNameList.DELETE;
210             lLovWhereList.DELETE;
211 
212             --settings for the new record
213             lAttrNameList(l_index) := pAttribute2Tbl(i);
214             lLovWhereList(l_index) := pLovWhereTbl(i);
215             l_index := l_index+1;
216             lPrevDimension := lDimension;
217 
218           ELSE-- if dimension is not null and equal to prev dim
219               --add the attribute name to the table for this dimension
220               lAttrNameList(l_index) := pAttribute2Tbl(i);
221               lLovWhereList(l_index) := pLovWhereTbl(i);
222               l_index := l_index+1;
223               lPrevDimension := lDimension;
224           END IF;
225 
226         ELSE -- if disp seq >= 10000
227 
228           IF ( (lPrevDisplaySequence < 10000) OR                   --if prev Dimension < 10000
229                (pDisplaySeqTbl(i) - lPrevDisplaySequence > 1) OR -- display seq is not conscutive after 10000
230                NOT(lPrevDimension =lDimension) OR                     -- the dimensions are different even if they are consecutive
231                (lPrevDisplaySequence IS NULL) --first variable has disp seq >10000
232             )THEN
233 
234             -- then this is a new parameter, so save the previous dimension
235 
236             addToList(
237                 pDImension => lPrevDimension,
238                 pAttrNameList => lAttrNameList,
239                 pLovWhereList => lLovWhereList,
240                 pParamNumber => l_grp_index,
241                 xParameterTbl => xParameterGroup
242               );
243             l_grp_index := l_grp_index+1;
244 
245             --reinitailise record for the next dimension
246             lParamGrpRec.dimension := NULL;
247             l_index := 1;
248             lAttrNameList.DELETE;
249             lLovWhereList.DELETE;
250 
251             --settings for the new record
252             lAttrNameList(l_index) := pAttribute2Tbl(i);
253             lLovWhereList(l_index) := pLovWhereTbl(i);
254             l_index := l_index+1;
255             lPrevDimension := lDimension;
256             lPrevDisplaySequence  := pDisplaySeqTbl(i);
257 
258           ELSIF (pDisplaySeqTbl(i) - lPrevDisplaySequence = 1 AND lPrevDimension=lDimension ) THEN
259             -- add to the list of attributes
260             lAttrNameList(l_index) := pAttribute2Tbl(i);
261             lLovWhereList(l_index) := pLovWhereTbl(i);
262             l_index := l_index+1;
263             lPrevDimension := lDimension;
264             lPrevDisplaySequence  := pDisplaySeqTbl(i);
265           END IF;
266 
267         END IF; -- if disp seq
268 
269           -- the last element of this loop
270           IF (i = pAttribute2Tbl.LAST ) THEN
271 
272             addToList(
273                 pDImension => lPrevDimension,
274                 pAttrNameList => lAttrNameList,
275                 pLovWhereList => lLovWhereList,
276                 pParamNumber => l_grp_index,
277                 xParameterTbl => xParameterGroup
278               );
279           END IF;
280 
281       END LOOP; -- nested attr code
282    END IF; -- if nested attr code
283 
284 END;
285 
286 /* Proc to generate the xParameterGroup structure for the gievn region code*/
287 PROCEDURE getParameterGroupsForRegion(
288   pRegionCode IN VARCHAR2,
289   xParameterGroup OUT NOCOPY parameter_group_tbl_type,
290   xTCTExists OUT NOCOPY BOOLEAN,
291   xNestedRegion OUT NOCOPY VARCHAR2,
292   xAsofDateExists OUT NOCOPY BOOLEAN
293   ) IS
294  /* Assumption: When there is a nested region, then for the shared dimensions, the parameters
295     for grouping come from the nested region. Else they come from the default region
296  */
297     lNestedRegionCode VARCHAR2(80);
298     lDimensionTable BISVIEWER.t_char;
299     ldef_attr2_table BISVIEWER.t_char;
300     ldef_attr_code_table BISVIEWER.t_char;
301     ldef_disp_seq BISVIEWER.t_num;
302     lLov_where_table BISVIEWER.t_char;
303 
304     lParamGrpRec parameter_group_rec_type;
305     lAttrNameList BISVIEWER.t_char;
306     lLovWhereList BISVIEWER.t_char;
307     l_index BINARY_INTEGER := 1;
308     l_grp_index BINARY_INTEGER := 1;
309     lAsOfDateExists BOOLEAN;
310     lTCTExists BOOLEAN;
311     l_next_param_number NUMBER;
312     --ashgarg Bug 3878112:  get Data Source
313     lDataSource VARCHAR2(150);
314     l_region_code VARCHAR2(30);
315 
316     cursor getNestedRegionCode (cpRegionCode varchar2) is
317      SELECT nested_region_code
318      FROM ak_region_items
319      WHERE region_code = cpRegionCode
320     AND nested_region_code IS NOT NULL;
321    --ashgarg Bug 3878112:  get Data Source
322     cursor getDataSource (cpRegionCode varchar2) is
323     SELECT attribute10 FROM
324     ak_regions where region_code = cpRegionCode;
325 
326     --first get the parameters that do not share dimensions/attribute code with the nested region
327 BEGIN
328 
329   --get the nested region
330    if getNestedRegionCode%ISOPEN then
331       close getNestedRegionCode;
332    end if;
333    open getNestedRegionCode(pRegionCode);
334    fetch getNestedRegionCode INTO lNestedRegionCode;
335    close getNestedRegionCode;
336  --ashgarg Bug 3878112:  get Data Source
337    if getDataSource%ISOPEN then
338       close getDataSource;
339    end if;
340    open getDataSource(pRegionCode);
341    fetch getDataSource INTO lDataSource;
342    close getDataSource;
343 
344       xNestedRegion := lNestedRegionCode;
345 
346 
347 
348    /* As per discussion with Amod, all the parameters in the nested region need
349       to be defined in the report region as well.  This is except for the AS_OF_DATE
350       and the TIME_COMPARISON_TYPE parameters.  Amod suggested that the check for these 2 be dealt with
351       seperately rather than adding them to the thr grouping here */
352     -- nbarik - 04/20/04 - Enhancement 3378782 - Parameter Validation
353     --ashgarg Bug 3878112:  For bsc data source
354      IF (lDataSource = 'BSC_DATA_SOURCE' ) THEN
355         if (lNestedRegionCode <> null) then
356               l_region_code := lNestedRegionCode;
357         else
358               l_region_code := pRegionCode;
359         end if;
360       END IF;
361 
362       if (l_region_code is null) then
363          l_region_code := pRegionCode;
364       end if;
365 
366       SELECT attribute2, attribute_code, display_sequence, attribute4
367       BULK COLLECT INTO ldef_attr2_table, ldef_attr_code_table, lDef_disp_seq, lLov_where_table
368       FROM ak_region_items
369       WHERE region_code = l_region_code -- pRegionCode
370       AND NODE_QUERY_FLAG = 'Y'
371       ORDER BY DISPLAY_SEQUENCE;
372 
373   /* Debug */
374   /*
375    IF ldef_attr2_table IS NOT NULL AND ldef_attr2_table.COUNT >0 THEN
376     FOR i In ldef_attr2_table.FIRST..ldef_attr2_table.LAST LOOP
377         dbms_output.put_line(' default dim '||ldef_attr2_table(i) || ' disp seq '|| lDef_disp_seq(i));
378     END LOOP;
379    END IF;
380    */
381    /* Debug */
382 
383    --consolidate all the lists into the data struture
384 
385     IF (ldef_attr_code_table IS NOT NULL AND ldef_attr_code_table.COUNT > 0) THEN
386       getParameterGroupForLists(
387           pAttribute2Tbl => ldef_attr2_table
388           ,pAttribCodeTbl => ldef_attr_code_table
389           ,pDisplaySeqTbl => lDef_disp_seq
390           , pLovWhereTbl => lLov_where_table
391           ,xParameterGroup => xParameterGroup
392           ,xAsOfDateExists => lAsOfDateExists
393           ,xTimeCompTypeExists => lTCTExists
394       );
395     END IF;
396     xTCTExists := lTCTExists;
397 
398     l_grp_index := xParameterGroup.COUNT+1;
399     l_next_param_number := xParameterGroup(xParameterGroup.COUNT).parameter_number+1;
400 
401     --adding TCT and as-of-date explicitly to avoid an extra select for the nested region
402     --add the as-of-date if it does not exist in the report region
403     IF ( lNestedRegionCode IS NOT NULL AND NOT(lAsOfDateExists) ) THEN
404 
405       lAttrNameList.DELETE;
406       lAttrNameList(1) := 'AS_OF_DATE';
407       lLovWhereList.DELETE;
408       --jprabhud - Bug 	3625068 - When drilling from KPI/RELATED/DRILL - if As of date is not present
409       --in default FF defn or in Report metadata it comes here and fails as lLovWhereList is being deleted
410       lLovWhereList(1) := null;
411 
412       addToList(
413                 pDImension => 'AS_OF_DATE',
414                 pAttrNameList => lAttrNameList,
415                 pLovWhereList => lLovWhereList,
416                 pParamNumber => l_next_param_number,
417                 xParameterTbl => xParameterGroup
418       );
419       lAsofDateExists := true;
420       l_grp_index := l_grp_index+1;
421       l_next_param_number := l_next_param_number+1;
422     END IF;
423     xAsofDateExists := lAsofDateExists;
424 
425 /* aleung, 7/16/03, if TCT is not defined in report region, TCT is hardcoded to 'TIME_COMPARISON_TYPE+SEQUENTIAL' for bug 2965660
426     --add the TCT if it does not exist in the report region
427     IF (lNestedRegionCode IS NOT NULL AND NOT(lTCTExists)) THEN
428 
429       lAttrNameList.DELETE;
430       lAttrNameList(1) := 'TIME_COMPARISON_TYPE+YEARLY';
431       lAttrNameList(2) := 'TIME_COMPARISON_TYPE+SEQUENTIAL';
432       lAttrNameList(3) := 'TIME_COMPARISON_TYPE+BUDGET';
433       addToList(
434                 pDImension => 'TIME_COMPARISON_TYPE',
435                 pAttrNameList => lAttrNameList,
436                 pParamNumber => l_next_param_number,
437                 xParameterTbl => xParameterGroup
438       );
439       l_grp_index := l_grp_index+1;
440 
441     END IF;
442 */
443 
444  /* Fix for bug 2739892 */
445  /* Added Exception block */
446  EXCEPTION
447 	WHEN OTHERS THEN
448 		null ;
449 
450 
451 END getParameterGroupsForRegion;
452 
453 /* Returns those attribute_names which share the pParamNum by looking into the pParameterGroup
454     in the reverse order.  When a diff param num is encouneterd, we have gone past this group
455    */
456 PROCEDURE getPrevParamsWithParamNumber(
457   pParamNumber IN NUMBER,
458   pDimension IN VARCHAR2,
459   pIndex In NUMBER,
460   pParameterGroup IN parameter_group_tbl_type,
461   xAttributeNameList OUT NOCOPY BISVIEWER.t_char
462 ) IS
463  lCount NUMBER := 1;
464 BEGIN
465 
466   -- no check being done on the dimension since this the parameter numbers should be unique.
467   IF pParameterGroup IS NOT NULL AND pParameterGroup.COUNT >0 THEN
468     lCount := xAttributeNameList.COUNT+1;
469 
470     FOR i IN REVERSE pParameterGroup.FIRST..pIndex LOOP
471       IF (pParameterGroup(i).parameter_number = pParamNumber) THEN
472         xAttributeNameList(lCount) := pParameterGroup(i).attribute_name;
473         lCount := lCount+1;
474       ELSE
475         RETURN;
476       END IF;
477     END LOOP;
478 
479   END IF;
480 END getPrevParamsWithParamNumber;
481 
482 /* Returns those attribute_names which share the pParamNum by looking into the pParameterGroup
483   in the order.  When a diff param num is encouneterd, we have gone past this group
484    */
485 PROCEDURE getLaterParamsWithParamNumber(
486   pParamNumber IN NUMBER,
487   pDimension IN VARCHAR2,
488   pIndex In NUMBER,
489   pParameterGroup IN parameter_group_tbl_type,
490   xAttributeNameList IN OUT NOCOPY BISVIEWER.t_char
491 ) IS
492  lCount NUMBER := 1;
493 BEGIN
494 
495   -- no check being done on the dimension since this the parameter numbers should be unique.
496   IF pParameterGroup IS NOT NULL AND pParameterGroup.COUNT >0 THEN
497     lCount := xAttributeNameList.COUNT+1;
498 
499     FOR i IN pIndex..pParameterGroup.LAST LOOP
500       IF (pParameterGroup(i).parameter_number = pParamNumber) THEN
501         xAttributeNameList(lCount) := pParameterGroup(i).attribute_name;
502         lCount := lCount+1;
503       ELSE
504         RETURN;
505       END IF;
506     END LOOP;
507 
508   END IF;
509 END getLaterParamsWithParamNumber;
510 
511 /* Returns those attribute_names which share the pParamNum by looking into the pParameterGroup
512   in the order.
513    */
514 PROCEDURE getParametersWithParamNumber(
515   pParamNumber IN NUMBER,
516   pDimension IN VARCHAR2,
517   pParameterGroup IN parameter_group_tbl_type,
518   xAttributeNameList IN OUT NOCOPY BISVIEWER.t_char
519 ) IS
520  --lAttrNameList BISVIEWER.t_char;
521  lCount NUMBER := 1;
522 BEGIN
523 
524   -- no check being done on the dimension since this the parameter numbers should be unique.
525   IF pParameterGroup IS NOT NULL AND pParameterGroup.COUNT >0 THEN
526     FOR i IN pParameterGroup.FIRST..pParameterGroup.LAST LOOP
527       IF (pParameterGroup(i).parameter_number = pParamNumber) THEN
528         xAttributeNameList(lCount) := pParameterGroup(i).attribute_name;
529         lCount := lCount+1;
530       END IF;
531     END LOOP;
532   END IF;
533 END getParametersWithParamNumber;
534 
535 /* Given a attribute_name and dimension, return all posible attribute names this group could have */
536 PROCEDURE getAttrNamesInSameGroup (
537  pAttributeName IN VARCHAR2,
538  pDimension IN VARCHAR2,
539  pParameterGroup IN parameter_group_tbl_type,
540  xAttNameList OUT NOCOPY BISVIEWER.t_char
541 ) IS
542   lAttrNameList BISVIEWER.t_char;
543   lAttributeName VARCHAR2(80) := pAttributeName;
544 BEGIN
545 
546   IF pParameterGroup IS NOT NULL AND pParameterGroup.COUNT > 0 THEN
547     FOR i IN pParameterGroup.FIRST..pParameterGroup.LAST LOOP
548       IF (pDimension IS NOT NULL) THEN
549 
550         IF (pDimension = 'TIME' OR pDimension='EDW_TIME_M') THEN
551 
552               --there will be a _To and _from which needs to vb eremoved
553               IF(instr(lAttributeName,'_FROM',1,1) > 0 AND instr(lAttributeName,'+',1,1) > 0) then
554                 lAttributeName := substr(lAttributeName,1,instr(lAttributeName,'_FROM')-1);
555               END IF;
556 
557               IF(instr(lAttributeName,'_TO',1,1) > 0 AND instr(lAttributeName,'+',1,1) > 0) then
558                 lAttributeName := substr(lAttributeName,1,instr(lAttributeName,'_TO')-1);
559               END IF;
560 
561           END IF;
562                 --BugFix 3074842--Include Duplicate Dimension Levels--Attribute2+Attribute Code
563         IF (pDimension =pParameterGroup(i).dimension AND
564             (pParameterGroup(i).attribute_name = lAttributeName  OR
565              pParameterGroup(i).attribute_name = substr(lAttributeName, 1, instr(lAttributeName, '+',-1)-1) )) THEN
566 
567           --return all the attribute names with that parameter number
568           /*
569           getParametersWithParamNumber(
570             pParamNumber => pParameterGroup(i).parameter_number ,
571             pDimension => pParameterGroup(i).dimension,
572             pParameterGroup => pParameterGroup,
573             xAttributeNameList => xAttNameList
574           );*/
575             getPrevParamsWithParamNumber(
576               pParamNumber => pParameterGroup(i).parameter_number ,
577               pDimension => pParameterGroup(i).dimension,
578               pIndex => i,
579               pParameterGroup => pParameterGroup,
580               xAttributeNameList => xAttNameList
581             ) ;
582             getLaterParamsWithParamNumber(
583               pParamNumber => pParameterGroup(i).parameter_number ,
584               pDimension => pParameterGroup(i).dimension,
585               pIndex => i+1,
586               pParameterGroup => pParameterGroup,
587               xAttributeNameList => xAttNameList
588             ) ;
589           RETURN;
590 
591         END IF; --pDimension=
592       ELSE
593         IF (lAttributeName = pParameterGroup(i).attribute_name) THEN
594 
595           lAttrNameList(1) := pParameterGroup(i).attribute_name;
596           xAttNameList := lAttrNameList;
597           RETURN;
598         END IF;
599 
600       END IF; --pDimension is not null
601     END LOOP;
602   END IF;
603 END getAttrNamesInSameGroup ;
604 
605 /* Retuns if this dimension is present in the pParameterGroup*/
606 FUNCTION IsdimensionInParamGrp(
607  pDimension IN VARCHAR2,
608  pParameterGroup IN parameter_group_tbl_type
609 ) RETURN BOOLEAN
610 IS
611 BEGIN
612   IF pParameterGroup IS NOT NULL AND pParameterGroup.COUNT > 0 THEN
613     FOR i IN pParameterGroup.FIRST..pParameterGroup.LAST LOOP
614       IF (pDimension =pParameterGroup(i).dimension) THEN
615         RETURN TRUE;
616       END IF;
617     END LOOP;
618   END IF;
619 
620   RETURN FALSE;
621 
622 END IsdimensionInParamGrp ;
623 
624 PROCEDURE bulkDeleteFromSession(
625  pSessionId          in varchar2,
626  pUserId             in varchar2,
627  pFunctionName       in varchar2,
628   pAttributeNameTbl IN BISVIEWER.t_char
629 ) IS
630 BEGIN
631 	-- FIX FOR P1 2797318 : kiprabha
632 	-- DELETE ONLY IF SCHEDULE_ID IS NULL
633   IF pAttributeNameTbl IS NOT NULL AND pAttributeNameTbl.COUNT >0 THEN
634     FORALL i IN pAttributeNameTbl.FIRST..pAttributeNameTbl.LAST
635       DELETE FROM bis_user_attributes
636       WHERE function_name=pFunctionName
637       AND session_id = pSessionId
638       AND user_id = pUserId
639       AND attribute_name = pAttributeNameTbl(i)
640       AND schedule_id is null ;
641 
642   END IF;
643 END bulkDeleteFromSession;
644 
645 PROCEDURE bulkInsertIntoSession(
646  pSessionId          in varchar2,
647  pUserId             in varchar2,
648  pFunctionName       in varchar2,
649   pAttributeNameTbl IN BISVIEWER.t_char,
650   pDimensionTbl IN BISVIEWER.t_char,
651   pSessionValueTbl IN BISVIEWER.t_char,
652   pSessionDescTbl IN BISVIEWER.t_char,
653   pPeriodDateTbl IN BISVIEWER.t_date
654 ) IS
655 BEGIN
656   IF pAttributeNameTbl IS NOT NULL AND pAttributeNameTbl.COUNT >0 THEN
657      FORALL i IN pAttributeNameTbl.FIRST..pAttributeNameTbl.LAST
658             insert into bis_user_attributes (USER_ID,
659                                       FUNCTION_NAME,
660                                       SESSION_ID,
661                                       SESSION_VALUE,
662                                       SESSION_DESCRIPTION,
663                                       ATTRIBUTE_NAME,
664                                       DIMENSION,
665                                       PERIOD_DATE
666                                       )VALUES (
667                                         pUserId,
668                                         pFunctionName,
669                                         pSessionId,
670                                         pSessionValueTbl(i),
671                                         pSessionDescTbl(i),
672                                         pAttributeNameTbl(i),
673                                         pDimensionTbl(i),
674                                         pPeriodDateTbl(i)
675                                       );
676    END IF;
677 END bulkInsertIntoSession;
678 
679 PROCEDURE bulkDeleteFromPage(
680  pPAgeId         in VARCHAR2,
681  pUserId             in VARCHAR2,
682  pFunctionName IN VARCHAR2,
683   pAttributeNameTbl IN BISVIEWER.t_char
684 ) IS
685 BEGIN
686   IF pAttributeNameTbl IS NOT NULL AND pAttributeNameTbl.COUNT >0 THEN
687 
688     FORALL i IN pAttributeNameTbl.FIRST..pAttributeNameTbl.LAST
689       DELETE FROM bis_user_attributes
690       WHERE page_id = pPageId
691       AND user_id = pUserId
692       AND function_name = pFunctionName
693       AND attribute_name = pAttributeNameTbl(i);
694 
695   END IF;
696 END bulkDeleteFromPage;
697 
698 PROCEDURE getDeleteAtttrList(
699  pAttrNameList IN BISVIEWER.t_char,
700  pDimension IN VARCHAR2,
701  xAttrNameList OUT NOCOPY BISVIEWER.t_char
702 ) IS
703 l_index NUMBER := 1;
704 BEGIN
705     IF (pAttrNameList IS NOT NULL AND pAttrNameList.COUNT > 0) THEN
706       FOR i IN pAttrNameList.FIRST..pAttrNameList.LAST LOOP
707 
708           IF (pDimension IS NOT NULL) THEN
709 
710             xAttrNameList(l_index) := pAttrNameList(i);
711             l_index := l_index+1;
712             xAttrNameList(l_index) := pDimension||'_HIERARCHY';
713             l_index := l_index+1;
714 
715             IF (pDimension = 'TIME' OR pDimension='EDW_TIME_M') THEN
716               xAttrNameList(l_index) := pAttrNameList(i)||'_TO';
717               l_index := l_index+1;
718               xAttrNameList(l_index) := pAttrNameList(i)||'_FROM';
719               l_index := l_index+1;
720             END IF;
721 
722          ELSE
723             xAttrNameList(l_index) := pAttrNameList(i);
724             l_index := l_index+1;
725          END IF;
726 
727        END LOOP;
728     END IF;
729 END getDeleteAtttrList;
730 
731 /* Procedure to delete those parameters from session that belong to the same grp and hence have the
732   same attribute name as the  attribute name present in the attrNameList table.*/
733 PROCEDURE deletePageForGroup(
734  pUserId             in varchar2,
735  pFunctionName       in varchar2,
736  pPageId             in varchar2,
737  pAttrNameList IN BISVIEWER.t_char,
738  pDimension IN VARCHAR2
739 ) IS
740 lAttrNameList BISVIEWER.t_char;
741 
742 BEGIN
743 
744   getDeleteAtttrList(
745    pAttrNameList => pAttrNameList,
746     pDimension =>  pDimension ,
747    xAttrNameList => lAttrNameList
748   );
749 
750     IF (lAttrNameList IS NOT NULL AND lAttrNameList.COUNT >0) THEN
751           bulkDeleteFromPage(
752               pPageId  => pPageId,
753               pUserId     => pUserId,
754               pFunctionName   => pFunctionName,
755               pAttributeNameTbl => lAttrNameList
756           ) ;
757   END IF;
758 
759 END deletePageForGroup;
760 
761 /* Procedure to delete those parameters from session that belong to the same grp and hence have the
762   same attribute name as the  attribute name present in the attrNameList table.*/
763 PROCEDURE deleteSessionForGroup(
764  pSessionId          in varchar2,
765  pUserId             in varchar2,
766  pFunctionName       in varchar2,
767  pAttrNameList IN BISVIEWER.t_char,
768  pDimension IN VARCHAR2
769 ) IS
770 lAttrNameList BISVIEWER.t_char;
771 
772 BEGIN
773 
774   getDeleteAtttrList(
775    pAttrNameList => pAttrNameList,
776     pDimension =>  pDimension ,
777    xAttrNameList => lAttrNameList
778   );
779 
780     IF (lAttrNameList IS NOT NULL AND lAttrNameList.COUNT >0) THEN
781             bulkDeleteFromSession(
782                pSessionId  => pSessionId,
783                pUserId     => pUserId,
784                pFunctionName   => pFunctionName,
785                pAttributeNameTbl => lAttrNameList
786               ) ;
787   END IF;
788 
789 
790 END deleteSessionForGroup;
791 
792 /* This will sent the  parameters to be deleted and corresponding parameters to be inserted for the same group as
793 pAttributeNameTbl  being sent in. - these can then be deleted or inserted into session/page etc.*/
794 PROCEDURE getDeleteAndInsertTables(
795   pUserId             in varchar2,
796   pAttributeNameTbl IN BISVIEWER.t_char,
797   pDimensionTbl IN BISVIEWER.t_char,
798   pSessionValueTbl IN BISVIEWER.t_char,
799   pSessionDescTbl IN BISVIEWER.t_char,
800   pPeriodDateTbl IN BISVIEWER.t_date,
801   pParameterGroup IN parameter_group_tbl_type,
802   pIncludeViewBy IN BOOLEAN DEFAULT FALSE,
803   pIncludeBusinessPlan IN BOOLEAN DEFAULT FALSE,
804   pIncludePrevAsOfDate IN BOOLEAN DEFAULT FALSE,
805   xAttrNameForInsert OUT NOCOPY BISVIEWER.t_char,
806   xDimensionForInsert OUT NOCOPY BISVIEWER.t_char,
807   xSessValueForInsert OUT NOCOPY BISVIEWER.t_char,
808   xSessDescForInsert OUT NOCOPY BISVIEWER.t_char,
809   xPeriodDateForInsert OUT NOCOPY BISVIEWER.t_date,
810   xAttrNameForDelete OUT NOCOPY BISVIEWER.t_char
811 ) IS
812   lAttrNameList BISVIEWER.t_char;
813   insert_index NUMBER :=1;
814 
815   delete_index NUMBER :=1;
816 BEGIN
817 
818   -- for each attribute in the list sent
819   IF pAttributeNameTbl IS NOT NULL AND pAttributeNameTbl.COUNT >0 THEN
820     FOR i IN pAttributeNameTbl.FIRST..pAttributeNameTbl.LAST LOOP
821 
822           --get the group of attribute_names for this group
823          getAttrNamesInSameGroup (
824              pAttributeName => pAttributeNameTbl(i),
825              pDimension => pDimensionTbl(i),
826              pParameterGroup => pParameterGroup,
827              xAttNameList => lAttrNameList
828          );
829 
830          --lAttrNameList is the list of the attribute names that fall in the same grp as pAttributeNameTbl(i)
831          -- so if there is a group for this parameter, then delete this parameter
832         -- if the attrName is _hierarchy, then this list will not be returned since there is no group for it
833         IF (lAttrNameList IS NOT NULL AND lAttrNameList.COUNT >0) THEN
834 
835           	FOR j IN lAttrNameList.FIRST..lAttrNameList.LAST LOOP
836 
837     	  	      xAttrNameForDelete(delete_index) := lAttrNameList(j);
838           		  delete_index:= delete_index+1;
839     	  	      xAttrNameForDelete(delete_index) := lAttrNameList(j)||'_TO';
840           	  	delete_index:= delete_index+1;
841 		            xAttrNameForDelete(delete_index) := lAttrNameList(j)||'_FROM';
842       	      	delete_index:= delete_index+1;
843         	  END LOOP;
844 
845               --this attribute does belong to the report, so add to the list of attributes that
846               --needs to be added
847             xAttrNameForInsert(insert_index) := pAttributeNameTbl(i) ;
848             xDimensionForInsert(insert_index) := pDimensionTbl(i) ;
849             xSessValueForInsert(insert_index) := pSessionValueTbl(i);
850             xSessDescForInsert(insert_index) := pSessionDescTbl(i);
851             xPeriodDateForInsert(insert_index) := pPeriodDateTbl(i);
852             insert_index := insert_index+1;
853       --nbarik - 07/17/03 - Bug Fix 2999602 - Added BIS_PREVIOUS_EFFECTIVE_START_DATE and BIS_PREVIOUS_EFFECTIVE_END_DATE
854       ELSIF ((pAttributeNameTbl(i) = 'VIEW_BY' AND pIncludeViewBy) OR
855               (pAttributeNameTbl(i) = 'BUSINESS_PLAN' AND pIncludeBusinessPlan) OR
856               (pAttributeNameTbl(i) = 'BIS_P_ASOF_DATE' AND pIncludePrevAsOfDate) OR
857               (pAttributeNameTbl(i) = 'BIS_CUR_REPORT_START_DATE' AND pIncludePrevAsOfDate) OR
858               (pAttributeNameTbl(i) = 'BIS_PREV_REPORT_START_DATE' AND pIncludePrevAsOfDate) OR
859               (pAttributeNameTbl(i) = 'BIS_PREVIOUS_EFFECTIVE_START_DATE' AND pIncludePrevAsOfDate) OR
860               (pAttributeNameTbl(i) = 'BIS_PREVIOUS_EFFECTIVE_END_DATE' AND pIncludePrevAsOfDate)
861             ) THEN
862 
863                 xAttrNameForDelete(delete_index) := pAttributeNameTbl(i) ;
864                 delete_index := delete_index+1;
865 
866                 xAttrNameForInsert(insert_index) := pAttributeNameTbl(i) ;
867                 xDimensionForInsert(insert_index) := pDimensionTbl(i) ;
868                 xSessValueForInsert(insert_index) := pSessionValueTbl(i);
869                 xSessDescForInsert(insert_index) := pSessionDescTbl(i);
870                 xPeriodDateForInsert(insert_index) := pPeriodDateTbl(i);
871                 insert_index := insert_index+1;
872 
873         ELSIF (substr(pAttributeNameTbl(i), length(pAttributeNameTbl(i))-length('_HIERARCHY')+1)  ='_HIERARCHY') THEN
874         -- if it ends with _hierarchy, then check if the dimension belongs to this new report and add it to the list
875 
876           -- check if the dimension for this belongs to this report, then delete and add
877             IF (IsdimensionInParamGrp (
878                   pDimension => pDimensionTbl(i),
879                   pParameterGroup => pParameterGroup )
880             ) THEN
881                 xAttrNameForDelete(delete_index) := pAttributeNameTbl(i) ;
882                 delete_index := delete_index+1;
883 
884                 xAttrNameForInsert(insert_index) := pAttributeNameTbl(i) ;
885                 xDimensionForInsert(insert_index) := pDimensionTbl(i) ;
886                 xSessValueForInsert(insert_index) := pSessionValueTbl(i);
887                 xSessDescForInsert(insert_index) := pSessionDescTbl(i);
888                 xPeriodDateForInsert(insert_index) := pPeriodDateTbl(i);
889                 insert_index := insert_index+1;
890 
891             END IF;
892         END IF; -- if lattrNameList is NOt NULL
893 
894     END LOOP;
895 
896   END IF; --lattname is null
897 END getDeleteAndInsertTables;
898 
899 /* This will delete any parameters alreadyPresent for the same group as
900 pAttributeNameTbl  being sent in. - should use the getDeleteAndInsertTables later
901 and donly do the bulk delet and insert into session*/
902 PROCEDURE deleteAndInsertIntoSession(
903   pSessionId          in varchar2,
904   pUserId             in varchar2,
905   pFunctionName       in varchar2,
906   pAttributeNameTbl IN BISVIEWER.t_char,
907   pDimensionTbl IN BISVIEWER.t_char,
908   pSessionValueTbl IN BISVIEWER.t_char,
909   pSessionDescTbl IN BISVIEWER.t_char,
910   pPeriodDateTbl IN BISVIEWER.t_date,
911   pParameterGroup IN parameter_group_tbl_type,
912   pIncludeViewBy IN BOOLEAN DEFAULT FALSE,
913   pIncludeBusinessPlan IN BOOLEAN DEFAULT FALSE,
914   pIncludePrevAsOfDate IN BOOLEAN DEFAULT FALSE
915 ) IS
916   lAttrNameList BISVIEWER.t_char;
917   insert_index NUMBER :=1;
918 
919   lAttrNameForInsert BISVIEWER.t_char;
920   lDimensionForInsert BISVIEWER.t_char;
921   lSessValueForInsert BISVIEWER.t_char;
922   lSessDescForInsert BISVIEWER.t_char;
923   lPeriodDateForInsert BISVIEWER.t_date;
924 
925   delete_index NUMBER :=1;
926   lAttrNameForDelete BISVIEWER.t_char;
927 BEGIN
928 
929   -- for each attribute in the list sent
930   IF pAttributeNameTbl IS NOT NULL AND pAttributeNameTbl.COUNT >0 THEN
931     FOR i IN pAttributeNameTbl.FIRST..pAttributeNameTbl.LAST LOOP
932 
933           --get the group of attribute_names for this group
934          getAttrNamesInSameGroup (
935              pAttributeName => pAttributeNameTbl(i),
936              pDimension => pDimensionTbl(i),
937              pParameterGroup => pParameterGroup,
938              xAttNameList => lAttrNameList
939          );
940 
941          --lAttrNameList is the list of the attribute names that fall in the same grp as pAttributeNameTbl(i)
942          -- so if there is a group for this parameter, then delete this parameter
943         -- if the attrName is _hierarchy, then this list will not be returned since there is no group for it
944         IF (lAttrNameList IS NOT NULL AND lAttrNameList.COUNT >0) THEN
945 
946           	FOR j IN lAttrNameList.FIRST..lAttrNameList.LAST LOOP
947                       --BugFix 3074842
948                       if(lAttrNameList(j) = substr(pAttributeNameTbl(i), 1, instr(pAttributeNameTbl(i), '+',-1)-1)) then
949       	  	        lAttrNameForDelete(delete_index) := pAttributeNameTbl(i);
950           		delete_index:= delete_index+1;
951                       else
952     	  	        lAttrNameForDelete(delete_index) := lAttrNameList(j);
953           		  delete_index:= delete_index+1;
954     	  	        lAttrNameForDelete(delete_index) := lAttrNameList(j)||'_TO';
955           	  	  delete_index:= delete_index+1;
956 		        lAttrNameForDelete(delete_index) := lAttrNameList(j)||'_FROM';
957       	      	          delete_index:= delete_index+1;
958                      end if;
959         	  END LOOP;
960 
961               --this attribute does belong to the report, so add to the list of attributes that
962               --needs to be added
963             lAttrNameForInsert(insert_index) := pAttributeNameTbl(i) ;
964             lDimensionForInsert(insert_index) := pDimensionTbl(i) ;
965             lSessValueForInsert(insert_index) := pSessionValueTbl(i);
966             lSessDescForInsert(insert_index) := pSessionDescTbl(i);
967             lPeriodDateForInsert(insert_index) := pPeriodDateTbl(i);
968             insert_index := insert_index+1;
969       -- nbarik - 07/17/03 - Bug Fix 2999602 - Added BIS_PREVIOUS_EFFECTIVE_START_DATE and BIS_PREVIOUS_EFFECTIVE_END_DATE
970       ELSIF ((pAttributeNameTbl(i) = 'VIEW_BY' AND pIncludeViewBy) OR
971               (pAttributeNameTbl(i) = 'BUSINESS_PLAN' AND pIncludeBusinessPlan) OR
972               (pAttributeNameTbl(i) = 'BIS_P_ASOF_DATE' AND pIncludePrevAsOfDate) OR
973               (pAttributeNameTbl(i) = 'BIS_CUR_REPORT_START_DATE' AND pIncludePrevAsOfDate) OR
974               (pAttributeNameTbl(i) = 'BIS_PREV_REPORT_START_DATE' AND pIncludePrevAsOfDate) OR
975               (pAttributeNameTbl(i) = 'BIS_PREVIOUS_EFFECTIVE_START_DATE' AND pIncludePrevAsOfDate) OR
976               (pAttributeNameTbl(i) = 'BIS_PREVIOUS_EFFECTIVE_END_DATE' AND pIncludePrevAsOfDate)
977             ) THEN
978 
979                 lAttrNameForDelete(delete_index) := pAttributeNameTbl(i) ;
980                 delete_index := delete_index+1;
981 
982                 lAttrNameForInsert(insert_index) := pAttributeNameTbl(i) ;
983                 lDimensionForInsert(insert_index) := pDimensionTbl(i) ;
984                 lSessValueForInsert(insert_index) := pSessionValueTbl(i);
985                 lSessDescForInsert(insert_index) := pSessionDescTbl(i);
986                 lPeriodDateForInsert(insert_index) := pPeriodDateTbl(i);
987                 insert_index := insert_index+1;
988 
989         ELSIF (substr(pAttributeNameTbl(i), length(pAttributeNameTbl(i))-length('_HIERARCHY')+1)  ='_HIERARCHY') THEN
990         -- if it ends with _hierarchy, then check if the dimension belongs to this new report and add it to the list
991 
992           -- check if the dimension for this belongs to this report, then delete and add
993             IF (IsdimensionInParamGrp (
994                   pDimension => pDimensionTbl(i),
995                   pParameterGroup => pParameterGroup )
996             ) THEN
997                 lAttrNameForDelete(delete_index) := pAttributeNameTbl(i) ;
998                 delete_index := delete_index+1;
999 
1000                 lAttrNameForInsert(insert_index) := pAttributeNameTbl(i) ;
1001                 lDimensionForInsert(insert_index) := pDimensionTbl(i) ;
1002                 lSessValueForInsert(insert_index) := pSessionValueTbl(i);
1003                 lSessDescForInsert(insert_index) := pSessionDescTbl(i);
1004                 lPeriodDateForInsert(insert_index) := pPeriodDateTbl(i);
1005                 insert_index := insert_index+1;
1006 
1007             END IF;
1008         END IF; -- if lattrNameList is NOt NULL
1009 
1010     END LOOP;
1011 
1012     IF (lAttrNameForDelete IS NOT NULL AND lAttrNameForDelete.COUNT >0)  THEN
1013         bulkDeleteFromSession(
1014          pSessionId  => pSessionId,
1015          pUserId     => pUserId,
1016          pFunctionName   => pFunctionName,
1017           pAttributeNameTbl => lAttrNameForDelete
1018         ) ;
1019     END IF;
1020 
1021     IF (lAttrNameForInsert IS NOT NULL AND lAttrNameForInsert.COUNT >0)  THEN
1022 
1023      --insert all the records now
1024       bulkInsertIntoSession(
1025          pSessionId     => pSessionId,
1026          pUserId        => pUserId,
1027          pFunctionName  => pFunctionName,
1028          pAttributeNameTbl => lAttrNameForInsert,
1029          pDimensionTbl => lDimensionForInsert,
1030          pSessionValueTbl => lSessValueForInsert,
1031          pSessionDescTbl => lSessDescForInsert,
1032          pPeriodDateTbl => lPeriodDateForInsert
1033       );
1034 
1035     END IF;
1036 
1037   END IF; --lattname is null
1038 END deleteAndInsertIntoSession;
1039 
1040 /** To override the existing session parameters from schedule */
1041 PROCEDURE overRideFromSchedule(pSessionId          in varchar2,
1042                            pUserId             in varchar2,
1043                            pFunctionName       in varchar2,
1044                            pRegionCode         in varchar2,
1045                            pScheduleId         in varchar2 default null,
1046                           pRespId         in  varchar2 default null,
1047                           pParameterGroup IN parameter_group_tbl_type
1048 ) IS
1049 
1050 CURSOR getScheduleParameters IS
1051   SELECT attribute_name, dimension, session_value, session_description, period_date
1052   FROM bis_user_attributes
1053   WHERE schedule_id=pScheduleId;
1054 
1055 vAttributeCodeTable BISVIEWER.t_char;
1056 vDimensionTable     BISVIEWER.t_char;
1057 vSessionValueTable     BISVIEWER.t_char;
1058 vSessionDescTable     BISVIEWER.t_char;
1059 vPeriodDateTable     BISVIEWER.t_date;
1060 
1061 BEGIN
1062      IF getScheduleParameters%ISOPEN THEN
1063         CLOSE getScheduleParameters;
1064      END IF;
1065      OPEN getScheduleParameters;
1066      FETCH getScheduleParameters BULK COLLECT INTO vAttributeCodeTable, vDimensionTable, vSessionValueTable, vSessionDescTable, vPeriodDateTable;
1067      CLOSE getScheduleParameters;
1068 
1069      deleteAndInsertIntoSession(
1070               pSessionId  => pSessionId,
1071               pUserId     => pUserId,
1072               pFunctionName   => pFunctionName,
1073               pAttributeNameTbl => vAttributeCodeTable,
1074               pDimensionTbl => vDimensionTable,
1075               pSessionValueTbl => vSessionValueTable,
1076               pSessionDescTbl => vSessionDescTable,
1077               pPeriodDateTbl => vPeriodDateTable,
1078               pParameterGroup => pParameterGroup,
1079               pIncludePrevAsOfDate => TRUE
1080      );
1081 
1082 END overRideFromSchedule;
1083 
1084 -- nbarik - 02/19/04 - BugFix 3441967 - Added x_IsPreFuncTCTExists and x_IsPreFuncCalcDatesExists
1085 PROCEDURE overRideFromPreFunction(pSessionId          in varchar2,
1086                            pUserId             in varchar2,
1087                            pFunctionName       in varchar2,
1088                            pRegionCode         in varchar2,
1089                            pPreFunctionName         in varchar2 default null,
1090                           pRespId         in  varchar2 default null,
1091                           pParameterGroup IN parameter_group_tbl_type,
1092                           pTCTExists      in boolean default false
1093                          , x_IsPreFuncTCTExists OUT NOCOPY BOOLEAN
1094                          , x_IsPreFuncCalcDatesExists OUT NOCOPY BOOLEAN
1095 ) IS
1096 
1097 CURSOR getPreFunctionParameters IS
1098   SELECT attribute_name, dimension, session_value, session_description, period_date
1099   FROM bis_user_attributes
1100   WHERE function_name =pPreFunctionName
1101   AND session_id = pSessionId
1102   AND user_id = pUserId;
1103 
1104 vAttributeCodeTable BISVIEWER.t_char;
1105 vDimensionTable     BISVIEWER.t_char;
1106 vSessionValueTable     BISVIEWER.t_char;
1107 vSessionDescTable     BISVIEWER.t_char;
1108 vPeriodDateTable     BISVIEWER.t_date;
1109 
1110 l_time_attr_2      varchar2(2000);
1111 l_time_level_id	   VARCHAR2(2000);
1112 l_time_level_value VARCHAR2(2000);
1113 
1114 l_asof_date VARCHAR2(80);
1115 l_prev_asof_date_desc varchar2(80);
1116 l_curr_report_start_date_desc varchar2(80);
1117 l_prev_report_start_date_desc varchar2(80);
1118 
1119 l_prev_asof_Date		DATE;
1120 l_curr_effective_start_date	DATE;
1121 l_curr_effective_end_date	DATE;
1122 l_curr_report_start_date	DATE;
1123 l_prev_report_start_date	DATE;
1124 -- nbarik - 07/17/03 - Bug Fix 2999602
1125 l_prev_effective_start_date	DATE;
1126 l_prev_effective_end_date	DATE;
1127 l_prev_time_level_id	        VARCHAR2(2000);
1128 l_prev_time_level_value         VARCHAR2(2000);
1129 
1130 l_return_status		VARCHAR2(2000);
1131 l_msg_count			NUMBER;
1132 l_msg_data		    VARCHAR2(2000);
1133 
1134 IsTimeDimensionInGroup BOOLEAN := FALSE;
1135 -- nbarik - 02/19/04 - BugFix 3441967
1136 l_IsPreFuncTCTExists          BOOLEAN := FALSE;
1137 l_IsPreFuncCalcDatesExists    BOOLEAN := FALSE;
1138 BEGIN
1139 
1140      IF getPreFunctionParameters%ISOPEN THEN
1141         CLOSE getPreFunctionParameters;
1142      END IF;
1143      OPEN getPreFunctionParameters;
1144      FETCH getPreFunctionParameters BULK COLLECT INTO vAttributeCodeTable, vDimensionTable, vSessionValueTable, vSessionDescTable, vPeriodDateTable;
1145      CLOSE getPreFunctionParameters;
1146 
1147      -- nbarik - 02/19/04 - BugFix 3441967
1148      IF vAttributeCodeTable IS NOT NULL AND vAttributeCodeTable.COUNT > 0 THEN
1149        FOR k IN vAttributeCodeTable.FIRST..vAttributeCodeTable.LAST LOOP
1150          IF vDimensionTable(k) = 'TIME_COMPARISON_TYPE' THEN
1151            l_IsPreFuncTCTExists := TRUE;
1152          END IF;
1153          IF vAttributeCodeTable(k) = 'BIS_P_ASOF_DATE' THEN -- Check for one parameter
1154            l_IsPreFuncCalcDatesExists := TRUE;
1155          END IF;
1156        END LOOP;
1157      END IF;
1158      x_IsPreFuncTCTExists := l_IsPreFuncTCTExists;
1159      x_IsPreFuncCalcDatesExists := l_IsPreFuncCalcDatesExists;
1160 
1161      --BugFix 3411456, pass pIncludeBusinessPlan as true
1162      deleteAndInsertIntoSession(
1163               pSessionId  => pSessionId,
1164               pUserId     => pUserId,
1165               pFunctionName   => pFunctionName,
1166               pAttributeNameTbl => vAttributeCodeTable,
1167               pDimensionTbl => vDimensionTable,
1168               pSessionValueTbl => vSessionValueTable,
1169               pSessionDescTbl => vSessionDescTable,
1170               pPeriodDateTbl => vPeriodDateTable,
1171               pParameterGroup => pParameterGroup,
1172               pIncludePrevAsOfDate => TRUE,
1173               pIncludeBusinessPlan => TRUE
1174      );
1175 
1176 END overRideFromPreFunction;
1177 
1178 PROCEDURE overRideFromPage(pSessionId          in varchar2,
1179                            pUserId             in varchar2,
1180                            pFunctionName       in varchar2,
1181                            pRegionCode         in varchar2,
1182                            pPageId         in varchar2 default null,
1183                           pRespId         in  varchar2 default null,
1184                           pParameterGroup IN parameter_group_tbl_type
1185 ) IS
1186 
1187 CURSOR getPageParameters IS
1188   SELECT attribute_name, dimension, session_value, session_description, period_date
1189   FROM bis_user_attributes
1190   WHERE page_id =pPageId
1191   AND user_id = pUserId;
1192 
1193 vAttributeCodeTable BISVIEWER.t_char;
1194 vDimensionTable     BISVIEWER.t_char;
1195 vSessionValueTable     BISVIEWER.t_char;
1196 vSessionDescTable     BISVIEWER.t_char;
1197 vPeriodDateTable     BISVIEWER.t_date;
1198 
1199 BEGIN
1200      IF getPageParameters%ISOPEN THEN
1201         CLOSE getPageParameters;
1202      END IF;
1203      OPEN getPageParameters;
1204      FETCH getPageParameters BULK COLLECT INTO vAttributeCodeTable, vDimensionTable, vSessionValueTable, vSessionDescTable, vPeriodDateTable;
1205      CLOSE getPageParameters;
1206 
1207      deleteAndInsertIntoSession(
1208               pSessionId  => pSessionId,
1209               pUserId     => pUserId,
1210               pFunctionName   => pFunctionName,
1211               pAttributeNameTbl => vAttributeCodeTable,
1212               pDimensionTbl => vDimensionTable,
1213               pSessionValueTbl => vSessionValueTable,
1214               pSessionDescTbl => vSessionDescTable,
1215               pPeriodDateTbl => vPeriodDateTable,
1216               pParameterGroup => pParameterGroup,
1217               pIncludeViewBy => FALSE              ,
1218               pIncludePrevAsOfDate => TRUE
1219      );
1220 
1221 END overRideFromPage;
1222 
1223 PROCEDURE overRideFromSavedDefault(pSessionId          in varchar2,
1224                            pUserId             in varchar2,
1225                            pFunctionName       in varchar2,
1226                            pRegionCode         in varchar2,
1227                           pRespId         in  varchar2 default null,
1228                           pParameterGroup IN parameter_group_tbl_type
1229 ) IS
1230 
1231 CURSOR getSavedDefaultParameters IS
1232   SELECT attribute_name, dimension, default_value, default_description, period_date
1233   FROM bis_user_attributes
1234   WHERE  function_name = pFunctionName
1235   AND    user_id = pUserId
1236   AND    session_id IS NULL
1237   AND    session_description = 'NULL';
1238 
1239 vAttributeCodeTable BISVIEWER.t_char;
1240 vDimensionTable     BISVIEWER.t_char;
1241 vSessionValueTable     BISVIEWER.t_char;
1242 vSessionDescTable     BISVIEWER.t_char;
1243 vPeriodDateTable     BISVIEWER.t_date;
1244 
1245 BEGIN
1246      IF getSavedDefaultParameters%ISOPEN THEN
1247         CLOSE getSavedDefaultParameters;
1248      END IF;
1249      OPEN getSavedDefaultParameters;
1250      FETCH getSavedDefaultParameters BULK COLLECT INTO vAttributeCodeTable, vDimensionTable, vSessionValueTable, vSessionDescTable, vPeriodDateTable;
1251      CLOSE getSavedDefaultParameters;
1252      deleteAndInsertIntoSession(
1253               pSessionId  => pSessionId,
1254               pUserId     => pUserId,
1255               pFunctionName   => pFunctionName,
1256               pAttributeNameTbl => vAttributeCodeTable,
1257               pDimensionTbl => vDimensionTable,
1258               pSessionValueTbl => vSessionValueTable,
1259               pSessionDescTbl => vSessionDescTable,
1260               pPeriodDateTbl => vPeriodDateTable,
1261               pParameterGroup => pParameterGroup,
1262               pIncludeViewBy => TRUE,
1263               pIncludeBusinessPlan => TRUE
1264      );
1265 
1266 END overRideFromSavedDefault;
1267 
1268 
1269 -- Procedure to get Name Value pairs of the form name=value1&name2=value2
1270 PROCEDURE getNameValuePairs(pUrlString IN VARCHAR2,
1271                             xParameterName OUT NOCOPY BISVIEWER.t_char,
1272                             xParameterValue OUT NOCOPY BISVIEWER.t_char
1273                             )
1274 IS
1275   index1                 number;
1276    index2                 number;
1277    index3                 number;
1278    index4                 number;
1279    index5                 number;
1280    l_length               number;
1281    l_count                number;
1282     l_param_name varchar2(2000);
1283     l_param_value varchar2(2000);
1284 
1285 BEGIN
1286 
1287    IF (pUrlString IS NULL) THEN
1288      RETURN;
1289    END IF;
1290 
1291    l_length := length(pUrlString);
1292    index2 :=0;
1293    l_count :=0;
1294  LOOP
1295        index2 := index2 +1;
1296       -- if there is no more '&' or no '=', then exit
1297       --if (instr(pUrlString,'&',index2,1)=0 OR
1298       IF
1299           (instr(pUrlString,'=',index2,1) =0) THEN
1300           EXIT;
1301       end if;
1302 
1303 
1304       index3 := instr(pUrlString,'=',index2,1);
1305       index5 := instr(pURLString,'=',index3+1,1);
1306       if (index5 > 0) then
1307          index4 := instr(pURLString,'&',-(l_length-index5)-1,1);
1308       else
1309          index4 := l_length+1;
1310       end if;
1311 
1312       l_param_name := substr(pUrlString, index2, index3-index2);
1313       l_param_value := substr(pUrlString,index3+1,index4-index3-1);
1314       xParameterName(l_Count) := l_param_name;
1315       xParameterValue(l_Count) := l_param_value;
1316       l_count := l_count+1;
1317 
1318       if (index4 >= l_length ) THEN
1319          exit;
1320       end if;
1321       index2 := index4;
1322   END LOOP;
1323 
1324 END getNameValuePairs;
1325 
1326 -- procedure to get only the pParameters from the array
1327 PROCEDURE processDefaultParameters(
1328    l_attr_code            In OUT NOCOPY BISVIEWER.t_char
1329   , l_attr_value           IN OUT NOCOPY BISVIEWER.t_char
1330 ) IS
1331 BEGIN
1332   IF (l_attr_code IS NOT NULL AND l_attr_code.COUNT >0) THEN
1333     FOR i IN l_attr_code.FIRST..l_attr_code.LAST LOOP
1334 
1335       -- get only the pParameters
1336       IF NOT (l_attr_code(i) = 'pParameters' ) THEN
1337             l_attr_code.DELETE(i);
1338             l_attr_value.DELETE(i);
1339       END IF;
1340 
1341     END LOOP;
1342   END IF;
1343 
1344 END processDefaultParameters;
1345 
1346 -- Procedure to execute a dynamic function
1347 PROCEDURE processDynamicAttributeValue (
1348   pPlSqlFunctionName IN VARCHAR2,
1349   xOutPut OUT NOCOPY VARCHAR2
1350 ) IS
1351 l_Dynamic_sql_str VARCHAR2(3000);
1352 BEGIN
1353  IF (pPlSqlFunctionName IS NOT NULL) THEN
1354      l_Dynamic_sql_str := 'BEGIN :1 :='||pPlSqlFunctionName||'(); END;';
1355      execute immediate l_dynamic_sql_str using OUT xOutPut;
1356  END IF;
1357 
1358   EXCEPTION
1359    WHEN OTHERS THEN
1360     NULL;
1361 
1362 END processDynamicAttributeValue;
1363 
1364 
1365 -- serao- 08/23/2002- bug 2514044 - will remove the non-report-parameters and process some others
1366 PROCEDURE processFormFunctionParameters(
1367   pRegionCode       IN VARCHAR2
1368   ,pFunctionName      IN	VARCHAR2
1369   ,pUserId           IN	VARCHAR2
1370   ,pSessionId        IN  VARCHAR2
1371   ,pResponsibilityId in varchar2 default NULL
1372   , l_attr_code            In OUT NOCOPY BISVIEWER.t_char
1373   , l_attr_value           IN OUT NOCOPY BISVIEWER.t_char
1374  , x_save_by_id OUT NOCOPY BOOLEAN
1375 
1376 ) IS
1377  l_vieW_by VARCHAR2(80);
1378  l_attribute_name VARCHAR2(80);
1379 BEGIN
1380 
1381   x_save_by_id := FALSE;
1382   IF (l_attr_code IS NOT NULL AND l_attr_code.COUNT >0) THEN
1383 
1384     FOR i IN l_attr_code.FIRST..l_attr_code.LAST LOOP
1385 
1386       -- ignore all the report parameters except pParamIds- beginning with p
1387       IF(substr(l_attr_code(i), 1, 1) = 'p' ) THEN
1388           --serao - 2747174 - get save_by_id from parameters
1389           IF (l_attr_code(i) = 'pParamIds' AND l_attr_value(i) ='Y') THEN
1390             x_save_by_id := TRUE;
1391           END IF;
1392 
1393             l_attr_code.DELETE(i);
1394             l_attr_value.DELETE(i);
1395       ELSIF(substr(l_attr_code(i), 1, 1) = '"' ) THEN
1396 
1397           -- strip the single quotes ard the key
1398          processDynamicAttributeValue( replace (l_attr_code(i), '"', null), l_attr_code(i));
1399 
1400          -- if this did not yieldanything, then delete this parameter
1401          IF (l_attr_code(i) IS NULL) THEN
1402             l_attr_code.DELETE(i);
1403             l_attr_value.DELETE(i);
1404          ELSE
1405            l_attr_code(i) := BIS_PMV_UTIL.getDimensionForAttribute(l_attr_code(i), pRegionCode);
1406          END IF;
1407 
1408       ELSIF (l_attr_code(i)='VIEW_BY') THEN
1409 
1410             BEGIN
1411                 SELECT attribute_name INTO l_view_by
1412                 FROM bis_user_attributes
1413                 WHERE function_name=pFunctionName
1414                 AND session_id=pSessionId
1415                 AND user_id = pUserId
1416                 AND attribute_name ='VIEW_BY';
1417             EXCEPTION
1418              WHEN NO_DATA_FOUND THEN
1419               NULL;
1420             END;
1421 
1422             --delete this rom the array if vieW_by was already added to this session
1423             IF (l_view_by = 'VIEW_BY') THEN
1424                   l_attr_code.DELETE(i);
1425                   l_attr_value.DELETE(i);
1426             END IF;
1427 
1428       --ELSE
1429 
1430         --l_attr_code(i) := BIS_PMV_UTIL.getDimensionForAttribute(l_attr_code(i), pRegionCode);
1431 
1432       END IF;
1433 
1434     END LOOP;
1435   END IF;
1436 END processFormFunctionParameters;
1437 
1438 
1439 -- serao- 08/23/2002- bug 2514044 - copy form function parameters not copied previously
1440 --serao -10/10/2002 - since we will copy the form function prameters first instead of last
1441 -- we now do not need the remaining param cursor and add parameters w/o checking if they
1442 -- are already present.
1443 PROCEDURE COPY_FORM_FUNCTION_PARAMETERS
1444 (pRegionCode       IN VARCHAR2
1445 ,pFunctionName      IN	VARCHAR2
1446 ,pUserId           IN	VARCHAR2
1447 ,pSessionId        IN  VARCHAR2
1448 ,pResponsibilityId in varchar2 default NULL
1449 ,pNestedRegionCode in varchar2 default NULL
1450 ,pAsofdateExists   in boolean default NULL
1451 ,x_return_status   OUT	NOCOPY VARCHAR2
1452 ,x_msg_count	     OUT	NOCOPY NUMBER
1453 ,x_msg_data	       OUT	NOCOPY VARCHAR2
1454 ) IS
1455    l_param_code            BISVIEWER.t_char;
1456    l_param_value    BISVIEWER.t_char;
1457    l_attr_code            BISVIEWER.t_char;
1458    l_attr_value           BISVIEWER.t_char;
1459    lParameters            VARCHAR2(2000);
1460    lDefaultParameters     VARCHAR2(2000);
1461    l_dimension VARCHAR2(2000);
1462    l_savebyid             BOOLEAN := FALSE;
1463    l_view_by_exists BOOLEAN := FALSE;
1464    l_attr_2 VARCHAR2(2000);
1465 
1466    l_user_session_rec	BIS_PMV_SESSION_PVT.session_rec_type;
1467    l_parameter_rec     parameter_rec_type;
1468    l_time_parameter_rec time_parameter_rec_type;
1469 
1470    l_time_attr_2 varchar2(2000);
1471    l_time_from_description varchar2(2000) := BIS_PMV_DRILL_PVT.gvAll;
1472    l_time_to_description varchar2(2000) := BIS_PMV_DRILL_PVT.gvAll;
1473    l_time_exists boolean := false;
1474    l_element_id            varchar2(1000);
1475 
1476    --Bug Fix 3087383 added variables and get_as_of_date,get_nested_region sqls
1477    l_as_of_date            varchar2(1000);
1478    l_time_level_id         varchar2(250);
1479    l_time_level_Value      varchar2(250);
1480    l_start_date            date;
1481    l_end_date              date;
1482    l_time_comparison_type  varchar2(250);
1483    l_canonical_date_format varchar2(30) := 'DD/MM/RRRR';
1484 
1485 
1486  BEGIN
1487 
1488 -- get the parameters for this form fucntion
1489    SELECT parameters INTO lParameters
1490    FROM fnd_form_functions
1491    WHERE function_name=pFunctionName;
1492 
1493 -- get all the name-value pairs in the form function
1494    getNameValuePairs(pUrlString => lParameters,
1495                             xParameterName => l_param_code,
1496                             xParameterValue => l_param_value
1497                             );
1498 
1499  -- get only the pParameters variable
1500     processDefaultParameters(
1501          l_attr_code     => l_param_code
1502         , l_attr_value    => l_param_value
1503     ) ;
1504 
1505 
1506   IF (l_param_code IS NOT NULL AND l_param_code.COUNT >0) THEN
1507     -- get the value of the default parameters
1508     lDefaultParameters := l_param_value(l_param_value.FIRST);
1509   END IF;
1510 
1511 
1512 --for each of the names, find if it a parameter and if it already present in bis_user_attributes
1513   IF (lDefaultParameters IS NOT NULL) THEN
1514 
1515      -- replace the ~, ^ and the @
1516      lDefaultParameters := replace (lDefaultParameters, '~', '&');
1517      lDefaultParameters := replace (lDefaultParameters, '@', '=');
1518      lDefaultParameters := replace (lDefaultParameters, '^', '+');
1519 
1520      --get name value pairs from default params
1521      getNameValuePairs(pUrlString => lDefaultParameters,
1522                             xParameterName => l_attr_code,
1523                             xParameterValue => l_attr_value
1524                             );
1525 
1526     --remove the report parameters etc.
1527     --serao - bug 2647174 - get the savebyid from pParameters values
1528     processFormFunctionParameters(
1529           pRegionCode
1530           ,pFunctionName
1531           ,pUserId
1532           ,pSessionId
1533           ,pResponsibilityId
1534           , l_attr_code
1535           , l_attr_value
1536           ,l_saveById
1537           );
1538 
1539 
1540 
1541     IF (l_attr_code IS NOT NULL AND l_attr_code.COUNT >0) THEN
1542 
1543       l_user_session_rec.user_id := pUserId;
1544       l_user_session_rec.session_id := pSessionId;
1545       l_user_session_rec.responsibility_id := pResponsibilityId;
1546       l_user_session_rec.region_code := pRegionCode;
1547       l_user_session_rec.function_name := pFunctionName;
1548 
1549 
1550       FOR i IN l_attr_code.FIRST..l_attr_code.LAST LOOP
1551 
1552 
1553         --reinitialise this
1554         l_element_id := null;
1555     	  l_attr_2 := null;
1556 
1557         --check if the value is a dynamic value
1558         IF(substr(l_attr_value(i), 1, 1) = '"' ) THEN
1559 
1560             -- strip the single quotes ard the key
1561            processDynamicAttributeValue( replace (l_attr_value(i), '"', null), l_attr_value(i));
1562 
1563         END IF;
1564 
1565 
1566         IF (l_attr_code(i) = 'VIEW_BY' ) THEN
1567                   --save the parameter
1568                   l_parameter_rec.parameter_name := l_attr_code(i);
1569                   l_parameter_rec.parameter_description := nvl(l_attr_value(i), BIS_PMV_DRILL_PVT.gvAll);
1570                   l_parameter_rec.parameter_value := null;
1571                   l_parameter_rec.hierarchy_flag := 'N';
1572                   l_parameter_rec.default_flag := 'N';
1573                   l_parameter_rec.dimension :=  substr(l_attr_code(i),1,instr(l_attr_code(i),'+')-1);
1574 
1575                   if l_savebyid then
1576                     l_parameter_rec.id_flag := 'Y';
1577                   else
1578                   l_parameter_rec.id_flag := 'N';
1579                 end if;
1580 
1581                 VALIDATE_AND_SAVE(p_user_session_rec => l_user_session_rec,
1582                                                        p_parameter_rec => l_parameter_rec,
1583                                                        x_return_status	=> x_return_status,
1584                                                        x_msg_count => x_msg_count,
1585                                                        x_msg_data => x_msg_data);
1586 
1587           ELSIF substr(l_attr_code(i),instr(l_attr_code(i),'_HIERARCHY')) = '_HIERARCHY' THEN
1588 
1589               l_attr_code(i) := BIS_PMV_UTIL.getDimensionForAttribute(l_attr_code(i), pRegionCode);
1590               l_dimension := substr(l_attr_code(i),1,instr(l_attr_code(i),'+')-1);
1591               l_element_id := BIS_PMV_UTIL.getHierarchyElementId(l_attr_value(i), l_dimension);
1592 
1593               -- If there is a hierarchy then only store it
1594       	      IF (l_element_id > 0) THEN
1595                    l_parameter_rec.parameter_name := l_attr_code(i);
1596                    l_parameter_rec.parameter_value := l_element_id;
1597                    l_parameter_rec.hierarchy_flag := 'Y';
1598                    l_parameter_rec.default_flag := 'N';
1599                    --store the hierarchy
1600                    VALIDATE_AND_SAVE(p_user_session_rec => l_user_session_rec,
1601                                                           p_parameter_rec => l_parameter_rec,
1602                                                           x_return_status => x_return_status,
1603                                                           x_msg_count => x_msg_count,
1604                                                           x_msg_data => x_msg_data);
1605 
1606 
1607               END IF; --element id
1608 
1609           ELSIF substr(l_attr_code(i),instr(l_attr_code(i),'_FROM')) = '_FROM' then
1610 
1611             			    l_attr_code(i) := BIS_PMV_UTIL.getDimensionForAttribute(l_attr_code(i), pRegionCode);
1612                       l_time_exists := true;
1613 
1614                       IF(instr(l_attr_code(i),'_FROM',1,1) > 0 AND instr(l_attr_code(i),'+',1,1) > 0) then
1615                           l_time_attr_2 := substr(l_attr_code(i),1,instr(l_attr_code(i),'_FROM')-1);
1616                       ELSE
1617                         l_time_attr_2 := l_attr_code(i);
1618                       END IF;
1619 
1620                       l_time_from_description := nvl(l_attr_value(i),BIS_PMV_DRILL_PVT.gvAll);
1621 
1622           ELSIF substr(l_attr_code(i),instr(l_attr_code(i),'_TO')) = '_TO' THEN
1623 
1624             			    l_attr_code(i) := BIS_PMV_UTIL.getDimensionForAttribute(l_attr_code(i), pRegionCode);
1625 
1626                       l_time_exists := true;
1627 
1628                       IF(instr(l_attr_code(i),'_TO',1,1) > 0 AND instr(l_attr_code(i),'+',1,1) > 0) THEN
1629                         l_time_attr_2 := substr(l_attr_code(i),1,instr(l_attr_code(i),'_TO')-1);
1630                       ELSE
1631                         l_time_attr_2 := l_attr_code(i);
1632                       END IF;
1633 
1634                       l_time_to_description := nvl(l_attr_value(i),BIS_PMV_DRILL_PVT.gvAll);
1635           --Bug Fix 3087383 copy time attr2, time exists as true
1636           ELSIF substr(l_attr_code(i),1, instr(l_attr_code(i),'+')-1) = 'TIME' then
1637 
1638    		      l_attr_code(i) := BIS_PMV_UTIL.getDimensionForAttribute(l_attr_code(i), pRegionCode);
1639                       l_time_exists := true;
1640                       l_time_attr_2 := l_attr_code(i);
1641 
1642           ELSE
1643 
1644                       l_attr_code(i) := BIS_PMV_UTIL.getDimensionForAttribute(l_attr_code(i), pRegionCode);
1645 
1646                       IF (l_attr_code(i) = 'AS_OF_DATE' ) THEN
1647                          l_as_of_date := l_attr_value(i);
1648                       ELSIF substr(l_attr_code(i),1, instr(l_attr_code(i),'+')-1) = 'TIME_COMPARISON_TYPE' then
1649                          l_time_comparison_type := l_attr_code(i);
1650                       END IF;
1651 
1652                      --save the parameter
1653                       l_parameter_rec.parameter_name := l_attr_code(i);
1654                       l_parameter_rec.parameter_description := nvl(l_attr_value(i), BIS_PMV_DRILL_PVT.gvAll);
1655                       l_parameter_rec.parameter_value := null;
1656                       l_parameter_rec.hierarchy_flag := 'N';
1657                       l_parameter_rec.default_flag := 'N';
1658                       l_parameter_rec.dimension :=  substr(l_attr_code(i),1,instr(l_attr_code(i),'+')-1);
1659 
1660                       if l_savebyid then
1661                         l_parameter_rec.id_flag := 'Y';
1662                       else
1663                       l_parameter_rec.id_flag := 'N';
1664                       end if;
1665 
1666                       VALIDATE_AND_SAVE(p_user_session_rec => l_user_session_rec,
1667                                                        p_parameter_rec => l_parameter_rec,
1668                                                        x_return_status	=> x_return_status,
1669                                                        x_msg_count => x_msg_count,
1670                                                        x_msg_data => x_msg_data);
1671 
1672         END IF; --lAttrCode=
1673 
1674       END LOOP;
1675 
1676       --Bug Fix 3087383, check if as of date is saved else save it with sysdate
1677       if pNestedRegionCode is not null then
1678         --Fix for computing save dates if as of date is passed
1679         if l_as_of_date is null then
1680            l_as_of_date := to_char(sysdate, l_canonical_date_format);
1681         end if;
1682            if (pAsofdateExists and (l_time_attr_2 is not null)) then
1683              COMPUTE_AND_SAVE_DATES(pTimeAttribute => l_time_attr_2,
1684                       pTimeComparisonType => l_time_comparison_type,
1685 	              p_user_Session_rec  => l_user_session_rec,
1686                       x_time_level_id  => l_time_level_id,
1687 		      x_time_level_value => l_time_level_value
1688               );
1689            end if;
1690         end if;
1691 
1692       --BugFix 3515051
1693       -- if there was a time attribute in all this, then store that too
1694       IF (l_time_exists and not ( (pNestedRegionCode is not null) and pAsofdateExists and (l_time_attr_2 is not null) )) THEN
1695 
1696            l_time_parameter_rec.parameter_name := l_time_attr_2;
1697            l_time_parameter_rec.dimension := substr(l_time_attr_2,1,instr(l_time_attr_2,'+')-1);
1698 
1699           --Bug Fix 3087383 populate time from, to using level id, value if its value is all and nested region is present
1700            if (l_time_from_description = BIS_PMV_DRILL_PVT.gvAll and (pNestedRegionCode is not null)
1701                and l_as_of_date is not null and l_savebyid ) then
1702              l_time_parameter_rec.from_description := l_time_level_id;
1703            elsif (l_time_from_description = BIS_PMV_DRILL_PVT.gvAll and (pNestedRegionCode is not null) and l_as_of_date is not null) then
1704              l_time_parameter_rec.from_description := l_time_level_value;
1705            else
1706              l_time_parameter_rec.from_description := l_time_from_description;
1707            end if;
1708 
1709            if (l_time_to_description = BIS_PMV_DRILL_PVT.gvAll and (pNestedRegionCode is not null)
1710                and l_as_of_date is not null and l_savebyid ) then
1711              l_time_parameter_rec.to_description := l_time_level_id;
1712            elsif (l_time_to_description = BIS_PMV_DRILL_PVT.gvAll and (pNestedRegionCode is not null)
1713                and l_as_of_date is not null) then
1714              l_time_parameter_rec.to_description := l_time_level_value;
1715            else
1716              l_time_parameter_rec.to_description := l_time_to_description;
1717            end if;
1718 
1719            l_time_parameter_rec.default_flag := 'N';
1720 
1721            if l_savebyid then
1722               l_time_parameter_rec.id_flag := 'Y';
1723            else
1724               l_time_parameter_rec.id_flag := 'N';
1725            end if;
1726 
1727            VALIDATE_AND_SAVE_TIME(p_user_session_rec => l_user_session_rec,
1728                                                          p_time_parameter_rec => l_time_parameter_rec,
1729                                                          x_return_status  => x_return_status,
1730                                                          x_msg_count => x_msg_count,
1731                                                          x_msg_data => x_msg_data);
1732 
1733 
1734       END IF; --time_exists
1735     END IF; --lAttrCode is not null
1736    END IF; --lDefaultParameters is not null
1737 
1738    --serao - commit should be issues by caller
1739 
1740    EXCEPTION
1741    WHEN OTHERS THEN
1742     ROLLBACK;
1743  END COPY_FORM_FUNCTION_PARAMETERS;
1744 
1745 /* for this function for those default parameters that are missing only, will copy default parameters */
1746 PROCEDURE COPY_REMAINING_DEF_PARAMETERS
1747 (pFunctionName      IN	VARCHAR2
1748 ,pUserId            IN	VARCHAR2
1749 ,pSessionId         IN  VARCHAR2
1750 ,x_return_status    OUT	NOCOPY VARCHAR2
1751 ,x_msg_count	    OUT	NOCOPY NUMBER
1752 ,x_msg_data	    OUT	NOCOPY VARCHAR2
1753 ) IS
1754 
1755 BEGIN
1756 
1757      INSERT INTO BIS_USER_ATTRIBUTES (USER_ID,
1758                                       FUNCTION_NAME,
1759                                       SESSION_ID,
1760                                       SESSION_VALUE,
1761                                       SESSION_DESCRIPTION,
1762                                       ATTRIBUTE_NAME,
1763                                       DIMENSION,
1764                                       PERIOD_DATE,
1765                                       OPERATOR)
1766      SELECT pUserId,
1767             pFunctionName,
1768             pSessionId,
1769             DEFAULT_VALUE,
1770             DEFAULT_DESCRIPTION,
1771             ATTRIBUTE_NAME,
1772             DIMENSION,
1773             PERIOD_DATE,
1774             OPERATOR
1775      FROM   BIS_USER_ATTRIBUTES
1776      WHERE  function_name = pFunctionName
1777      AND    user_id = pUserId
1778      AND    session_id IS NULL
1779      AND    session_description = 'NULL'
1780      AND nvl(substr(attribute_name,1,instr(attribute_name,'+')-1), attribute_name) NOT IN (
1781       SELECT nvl(substr(attribute_name,1,instr(attribute_name,'+')-1), attribute_name)
1782       FROM bis_user_attributes
1783       WHERE function_name=pFunctionName
1784       AND user_id=pUserId
1785       AND session_id= pSessionId
1786       AND schedule_id IS NULL
1787      );
1788 END COPY_REMAINING_DEF_PARAMETERS;
1789 
1790 --nkishore CustomizeUI Enhancement Copy Session to default parameters
1791 PROCEDURE COPY_SES_TO_DEF_PARAMETERS
1792 (pFunctionName      IN	VARCHAR2
1793 ,pUserId         	IN	VARCHAR2
1794 ,pSessionId         IN  VARCHAR2
1795 ,x_return_status	OUT NOCOPY VARCHAR2
1796 ,x_msg_count		OUT NOCOPY NUMBER
1797 ,x_msg_data		    OUT	NOCOPY VARCHAR2
1798 )  IS
1799 BEGIN
1800 
1801      DELETE BIS_USER_ATTRIBUTES
1802      WHERE session_id is null and
1803      function_name = pFunctionName
1804      AND user_id= pUserId;
1805      --BugFix 3464708
1806      INSERT INTO BIS_USER_ATTRIBUTES (USER_ID,
1807                                       FUNCTION_NAME,
1808                                       ATTRIBUTE_NAME,
1809                                       SESSION_DESCRIPTION,
1810                                       DEFAULT_VALUE,
1811                                       DEFAULT_DESCRIPTION,
1812                                       PERIOD_DATE,
1813                                       DIMENSION,
1814                                       OPERATOR)
1815      SELECT pUserId,
1816             pFunctionName,
1817             ATTRIBUTE_NAME,
1818             'NULL',
1819             SESSION_VALUE,
1820             SESSION_DESCRIPTION,
1821             PERIOD_DATE,
1822             DIMENSION,
1823             OPERATOR
1824      FROM   BIS_USER_ATTRIBUTES
1825      WHERE  session_id = pSessionId
1826      AND    function_name = pFunctionName
1827      AND    user_id = pUserId
1828      AND    schedule_id IS NULL;
1829 
1830      x_return_status := FND_API.G_RET_STS_SUCCESS;
1831      FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count
1832                                , p_data => x_msg_data);
1833 
1834 EXCEPTION
1835   WHEN FND_API.G_EXC_ERROR THEN
1836        x_return_status := FND_API.G_RET_STS_ERROR;
1837        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
1838   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1839        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1840        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
1841   WHEN OTHERS THEN
1842        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1843        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
1844 END COPY_SES_TO_DEF_PARAMETERS;
1845 
1846 /* This procedure is based on validate_and_save */
1847 -- nbarik - 04/20/04 - Enhancement 3378782 - Parameter Validation
1848 PROCEDURE VALIDATE_PARAMETER
1849 (p_user_session_rec	IN	BIS_PMV_SESSION_PVT.session_rec_type
1850 ,p_parameter_rec	IN	OUT NOCOPY parameter_rec_type
1851 ,x_valid OUT NOCOPY VARCHAR2
1852 ,x_return_status	OUT	NOCOPY VARCHAR2
1853 ,x_msg_count		OUT	NOCOPY NUMBER
1854 ,x_msg_data		    OUT	NOCOPY VARCHAR2
1855 ) IS
1856 BEGIN
1857 
1858   --As a part of the dbc project do not validate this special parameter
1859   if (substr(p_parameter_rec.parameter_name,1,length('TIME_COMPARISON_TYPE')) = 'TIME_COMPARISON_TYPE') then
1860      p_parameter_rec.parameter_name := p_parameter_rec.parameter_description;
1861      p_parameter_rec.parameter_value := p_parameter_Rec.parameter_description;
1862      x_valid := 'Y';
1863   elsif instr(p_parameter_rec.parameter_description, '^~]*') > 0 then
1864      x_valid := 'Y';
1865   --BugFix#2577374 -ansingh
1866   elsif (p_parameter_rec.parameter_value='-1') then
1867         p_parameter_rec.parameter_description := FND_MESSAGE.get_string('BIS','BIS_UNASSIGNED');
1868         x_valid := 'Y';
1869   elsif (upper(p_parameter_rec.parameter_description) = upper(FND_MESSAGE.get_string('BIS','BIS_UNASSIGNED'))) then
1870         p_parameter_rec.parameter_value := '-1';
1871         x_valid := 'Y';
1872   else
1873      VALIDATE_NONTIME_PARAMETER (p_user_session_rec => p_user_session_rec
1874                              ,p_parameter_rec => p_parameter_rec
1875                              ,x_valid => x_valid
1876                              ,x_return_status => x_return_status
1877                              ,x_msg_count => x_msg_count
1878                              ,x_msg_data => x_msg_data);
1879   end if;
1880 
1881 
1882 EXCEPTION
1883   WHEN FND_API.G_EXC_ERROR THEN
1884        x_return_status := FND_API.G_RET_STS_ERROR;
1885        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
1886   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1887        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1888        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
1889   WHEN OTHERS THEN
1890        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1891        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
1892 
1893 END VALIDATE_PARAMETER;
1894 
1895 PROCEDURE VALIDATE_AND_SAVE
1896 (p_user_session_rec	IN	BIS_PMV_SESSION_PVT.session_rec_type
1897 ,p_parameter_rec	IN	OUT NOCOPY BIS_PMV_PARAMETERS_PVT.parameter_rec_type
1898 ,x_return_status	OUT	NOCOPY VARCHAR2
1899 ,x_msg_count		OUT	NOCOPY NUMBER
1900 ,x_msg_data		    OUT	NOCOPY VARCHAR2
1901 ) IS
1902   l_valid VARCHAR2(1);
1903 BEGIN
1904 
1905 -- nbarik - 04/20/04 - Enhancement 3378782 - Parameter Validation
1906 /*
1907   --As a part of the dbc project do not validate this special parameter
1908   if (substr(p_parameter_rec.parameter_name,1,length('TIME_COMPARISON_TYPE')) = 'TIME_COMPARISON_TYPE') then
1909      p_parameter_rec.parameter_name := p_parameter_rec.parameter_description;
1910      p_parameter_rec.parameter_value := p_parameter_Rec.parameter_description;
1911      l_valid := 'Y';
1912   elsif instr(p_parameter_rec.parameter_description, '^~]*') > 0 then
1913      l_valid := 'Y';
1914   --BugFix#2577374 -ansingh
1915   elsif (p_parameter_rec.parameter_value='-1') then
1916         p_parameter_rec.parameter_description := FND_MESSAGE.get_string('BIS','BIS_UNASSIGNED');
1917         l_valid := 'Y';
1918   elsif (upper(p_parameter_rec.parameter_description) = upper(FND_MESSAGE.get_string('BIS','BIS_UNASSIGNED'))) then
1919         p_parameter_rec.parameter_value := '-1';
1920         l_valid := 'Y';
1921   else
1922      VALIDATE_NONTIME_PARAMETER (p_user_session_rec => p_user_session_rec
1923                              ,p_parameter_rec => p_parameter_rec
1924                              ,x_valid => l_valid
1925                              ,x_return_status => x_return_status
1926                              ,x_msg_count => x_msg_count
1927                              ,x_msg_data => x_msg_data);
1928   end if;
1929  */
1930 
1931     VALIDATE_PARAMETER
1932     (p_user_session_rec	=> p_user_session_rec
1933     ,p_parameter_rec=> p_parameter_rec
1934     ,x_valid => l_valid
1935     ,x_return_status	=> x_return_status
1936     ,x_msg_count	=> x_msg_count
1937     ,x_msg_data	=> x_msg_data
1938     );
1939 
1940   IF l_valid = 'Y' THEN
1941      CREATE_PARAMETER (p_user_session_rec => p_user_session_rec
1942                       ,p_parameter_rec => p_parameter_rec
1943                       ,x_return_status => x_return_status
1944                       ,x_msg_count => x_msg_count
1945                       ,x_msg_data => x_msg_data);
1946   END IF;
1947 EXCEPTION
1948   WHEN FND_API.G_EXC_ERROR THEN
1949        x_return_status := FND_API.G_RET_STS_ERROR;
1950        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
1951   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1952        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1953        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
1954   WHEN OTHERS THEN
1955        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1956        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
1957 END VALIDATE_AND_SAVE;
1958 
1959 PROCEDURE VALIDATE_AND_SAVE_TIME
1960 (p_user_session_rec	  IN  BIS_PMV_SESSION_PVT.session_rec_type
1961 ,p_time_parameter_rec IN OUT NOCOPY BIS_PMV_PARAMETERS_PVT.time_parameter_rec_type
1962 ,x_return_status	OUT	NOCOPY VARCHAR2
1963 ,x_msg_count		OUT	NOCOPY NUMBER
1964 ,x_msg_data		    OUT	NOCOPY VARCHAR2
1965 ) IS
1966   l_valid VARCHAR2(1);
1967   l_parameter_rec BIS_PMV_PARAMETERS_PVT.parameter_rec_type;
1968 
1969 -- DIMENSION VALUE : kiprabha
1970 l_from_index INTEGER ;
1971 l_to_index INTEGER ;
1972 
1973 BEGIN
1974 
1975 	-- DIMENSION VALUE : begin
1976 	-- kiprabha : 05/22/03
1977 	-- Check to see if the time description has id and value encoded
1978 
1979 	l_from_index:=instr(p_time_parameter_rec.from_description,'^~]*');
1980 	l_to_index:=instr(p_time_parameter_rec.to_description,'^~]*');
1981 
1982 	if l_from_index > 0 then
1983 		p_time_parameter_rec.from_description :=
1984 		substr(p_time_parameter_rec.from_description,
1985 			l_from_index + 4) ;
1986 	end if ;
1987 
1988 	if l_to_index > 0 then
1989 		p_time_parameter_rec.to_description :=
1990 		substr(p_time_parameter_rec.to_description,
1991 			l_to_index + 4) ;
1992 	end if ;
1993 
1994 	-- DIMENSION VALUE : end
1995 
1996 
1997   VALIDATE_TIME_PARAMETER (p_user_session_rec => p_user_session_rec
1998                           ,p_time_parameter_rec => p_time_parameter_rec
1999                           ,x_valid => l_valid
2000                           ,x_return_status => x_return_status
2001                           ,x_msg_count => x_msg_count
2002                           ,x_msg_data => x_msg_data);
2003 
2004   IF l_valid = 'Y' THEN
2005      l_parameter_rec.dimension := p_time_parameter_rec.dimension;
2006      l_parameter_rec.default_flag := p_time_parameter_rec.default_flag;
2007 
2008      l_parameter_rec.parameter_name := p_time_parameter_rec.parameter_name || '_FROM';
2009      l_parameter_rec.parameter_description := p_time_parameter_rec.from_description;
2010      l_parameter_rec.period_date := p_time_parameter_rec.from_period;
2011      l_parameter_Rec.parameter_Value := p_Time_parameter_rec.from_Value;
2012      --create the "from" record
2013      CREATE_PARAMETER (p_user_session_rec => p_user_session_rec
2014                       ,p_parameter_rec => l_parameter_rec
2015                       ,x_return_status => x_return_status
2016                       ,x_msg_count => x_msg_count
2017                       ,x_msg_data => x_msg_data);
2018 
2019      l_parameter_rec.parameter_name := p_time_parameter_rec.parameter_name || '_TO';
2020      l_parameter_rec.parameter_description := p_time_parameter_rec.to_description;
2021      l_parameter_rec.period_date := p_time_parameter_rec.to_period;
2022      l_parameter_Rec.parameter_Value := p_Time_parameter_rec.to_Value;
2023 
2024      --create the "to" record
2025      CREATE_PARAMETER (p_user_session_rec => p_user_session_rec
2026                       ,p_parameter_rec => l_parameter_rec
2027                       ,x_return_status => x_return_status
2028                       ,x_msg_count => x_msg_count
2029                       ,x_msg_data => x_msg_data);
2030   END IF;
2031 EXCEPTION
2032   WHEN FND_API.G_EXC_ERROR THEN
2033        x_return_status := FND_API.G_RET_STS_ERROR;
2034        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2035   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2036        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2037        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2038   WHEN OTHERS THEN
2039        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2040        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2041 END VALIDATE_AND_SAVE_TIME;
2042 
2043 PROCEDURE VALIDATE_NONTIME_PARAMETER
2044 (p_user_session_rec	IN	BIS_PMV_SESSION_PVT.session_rec_type
2045 ,p_parameter_rec	IN  OUT NOCOPY BIS_PMV_PARAMETERS_PVT.parameter_rec_type
2046 ,x_valid		    OUT	NOCOPY VARCHAR2
2047 ,x_return_status	OUT	NOCOPY VARCHAR2
2048 ,x_msg_count		OUT	NOCOPY NUMBER
2049 ,x_msg_data		    OUT	NOCOPY VARCHAR2
2050 ) IS
2051 
2052 l_validated_result varchar2(1000);
2053 --BugFix 3497180
2054 l_rolling_dim      varchar2(250);
2055 
2056 cursor c_rolling_dim is
2057 select attribute17 from bis_ak_region_item_extension ext
2058     where ext.region_code=p_user_session_rec.region_code
2059     and attribute_code =
2060        ( select attribute_code from ak_region_items akItems
2061          where akItems.region_code= ext.region_code
2062          and nvl(akItems.attribute2, akItems.attribute_code) = p_parameter_rec.parameter_name);
2063 
2064 BEGIN
2065    x_valid := 'Y';
2066 
2067  IF p_parameter_rec.hierarchy_flag = 'Y' THEN
2068 
2069     IF p_parameter_rec.parameter_value IS NULL THEN
2070        x_valid := 'N';
2071        RAISE FND_API.G_EXC_ERROR;
2072     END IF;
2073 
2074  ELSE
2075    --aleung, 7/17/02, validation through id instead of value
2076    IF p_parameter_rec.id_flag = 'Y' THEN
2077       p_parameter_rec.parameter_value := p_parameter_rec.parameter_description;
2078    END IF;
2079 
2080    IF p_parameter_rec.parameter_name <> 'VIEW_BY' AND p_parameter_rec.parameter_name <> 'BUSINESS_PLAN' THEN
2081       --Bug Fix 2616851 , Added trim so that blank can be checked
2082       -- Bug Fix 2728237, Added check for %
2083 	/*
2084       IF nvl(trim(p_parameter_rec.parameter_description), g_all) = g_all AND p_parameter_rec.required_flag = 'Y' THEN
2085 	*/
2086       IF ((nvl(trim(p_parameter_rec.parameter_description), g_all) = g_all) OR
2087       	  (nvl(trim(p_parameter_rec.parameter_description), '%') = '%'))
2088 	AND p_parameter_rec.required_flag = 'Y' THEN
2089          x_valid := 'N';
2090          FND_MESSAGE.SET_NAME('BIS','MANDATORY_PARAM');
2091          --Need to add a message token later
2092          FND_MESSAGE.SET_TOKEN('PARAMETER_LABEL', p_parameter_rec.parameter_label);
2093          FND_MSG_PUB.ADD;
2094          RAISE FND_API.G_EXC_ERROR;
2095       END IF;
2096       --BugFix 3497180, Fix for Rolling Dimension Validation
2097       IF c_rolling_dim%ISOPEN THEN
2098          CLOSE c_rolling_dim;
2099       END IF;
2100       OPEN c_rolling_dim;
2101       FETCH c_rolling_dim INTO l_rolling_dim;
2102       CLOSE c_rolling_dim;
2103       IF l_rolling_dim IS NOT NULL THEN
2104          p_parameter_rec.parameter_description := '~ROLLING_DIMENSION';
2105          if (instr(p_parameter_rec.parameter_value,'''')=1) then
2106             p_parameter_rec.parameter_value := substr(p_parameter_rec.parameter_value,2, length(p_parameter_rec.parameter_value)-2);
2107          end if;
2108       ELSE
2109         IF p_parameter_rec.parameter_description <> g_all THEN
2110          IF p_parameter_rec.dimension IS NOT NULL THEN
2111          --aleung, 7/17/02, validation through id instead of value
2112            IF p_parameter_rec.id_flag = 'Y' THEN
2113               GET_NONTIME_VALIDATED_ID (p_parameter_name => p_parameter_rec.parameter_name
2114                                      ,p_parameter_value => p_parameter_rec.parameter_value
2115                                      ,p_lov_where => p_parameter_rec.lov_where
2116                                      ,p_region_code => p_user_session_rec.region_code
2117                                      ,p_responsibility_id => p_user_session_rec.responsibility_id
2118                                      ,x_parameter_description => p_parameter_rec.parameter_description
2119                                      ,x_return_status => x_return_status
2120                                      ,x_msg_count => x_msg_count
2121                                      ,x_msg_data => x_msg_data);
2122               l_validated_result := p_parameter_rec.parameter_description;
2123              if (substr(p_parameter_rec.parameter_value,1,1) <> '''') then
2124                   p_parameter_rec.parameter_value := ''''|| p_parameter_rec.parameter_value
2125                                                    || '''';
2126               end if;
2127            ELSE
2128              GET_NONTIME_VALIDATED_VALUE (p_parameter_name => p_parameter_rec.parameter_name
2129                                      ,p_parameter_description => p_parameter_rec.parameter_description
2130                                      ,p_lov_where => p_parameter_rec.lov_where
2131                                      ,p_region_code => p_user_session_rec.region_code
2132                                      ,p_responsibility_id => p_user_session_rec.responsibility_id
2133                                      ,x_parameter_value => p_parameter_rec.parameter_value
2134                                      ,x_return_status => x_return_status
2135                                      ,x_msg_count => x_msg_count
2136                                      ,x_msg_data => x_msg_data);
2137              l_validated_result := p_parameter_rec.parameter_value;
2138            END IF; --end of id_flag
2139            --nbarik - 04/20/04 - Enhancement 3378782 - Parameter Validation
2140            IF l_validated_result IS NULL THEN
2141              -- Check for Proxy User
2142              l_validated_result := GET_DELEGATION_VALIDATED_VALUE(
2143                                          pDelegationParam => p_parameter_rec.parameter_name
2144                                        , pRegionCode => p_user_session_rec.region_code
2145                                     );
2146          IF l_validated_result IS NULL THEN
2147             x_valid := 'N';
2148             FND_MESSAGE.SET_NAME('BIS','NOT_VALID');
2149             --Need to add a message token later
2150             FND_MESSAGE.SET_TOKEN('PARAMETER_LABEL', p_parameter_rec.parameter_label);
2151             FND_MSG_PUB.ADD;
2152             RAISE FND_API.G_EXC_ERROR;
2153          END IF;
2154        END IF;
2155         ELSE
2156              p_parameter_rec.parameter_value := p_parameter_rec.parameter_description;
2157        END IF;
2158        ELSE
2159          p_parameter_rec.parameter_value := p_parameter_rec.parameter_description;
2160        END IF;
2161       END IF;
2162    ELSIF p_parameter_rec.parameter_name = 'VIEW_BY' THEN
2163       IF p_parameter_rec.parameter_description IS NULL THEN
2164          x_valid := 'N';
2165          FND_MESSAGE.SET_NAME('BIS','INVALID_VIEWBY');
2166          FND_MSG_PUB.ADD;
2167          RAISE FND_API.G_EXC_ERROR;
2168       ELSE
2169          p_parameter_rec.parameter_value := p_parameter_rec.parameter_description;
2170       END IF;
2171    ELSIF p_parameter_rec.parameter_name = 'BUSINESS_PLAN' then
2172     --aleung, 7/17/02, validation through id instead of value
2173     IF p_parameter_rec.id_flag = 'Y' then
2174       BEGIN
2175 	 SELECT name
2176          INTO   p_parameter_rec.parameter_description
2177          FROM   BISBV_BUSINESS_PLANS
2178          WHERE  plan_id = p_parameter_rec.parameter_value;
2179       EXCEPTION
2180          WHEN OTHERS THEN NULL;
2181       END;
2182     ELSE
2183       BEGIN
2184          SELECT plan_id
2185          INTO   p_parameter_rec.parameter_value
2186          FROM   BISBV_BUSINESS_PLANS
2187          WHERE  name = p_parameter_rec.parameter_description;
2188       EXCEPTION
2189          WHEN OTHERS THEN NULL;
2190       END;
2191     END IF; --end of id_flag
2192    END IF;
2193 
2194  END IF;
2195  --Bug Fix 2816953
2196  IF p_parameter_rec.parameter_description = g_all OR
2197     p_parameter_rec.parameter_value = g_all THEN
2198     p_parameter_rec.parameter_value := null;
2199  END IF;
2200 EXCEPTION
2201   WHEN FND_API.G_EXC_ERROR THEN
2202        x_return_status := FND_API.G_RET_STS_ERROR;
2203        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2204   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2205        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2206        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2207   WHEN OTHERS THEN
2208        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2209        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2210 END VALIDATE_NONTIME_PARAMETER;
2211 
2212 -- nbarik - 04/20/04 - Enhancement 3378782 - Parameter Validation
2213 FUNCTION GET_DELEGATION_VALIDATED_VALUE(
2214   pDelegationParam IN VARCHAR2
2215 , pRegionCode      IN VARCHAR2
2216 ) RETURN VARCHAR2
2217 IS
2218 
2219 CURSOR getDelegationParam IS
2220 SELECT attribute14
2221 FROM ak_regions
2222 WHERE region_code = pRegionCode;
2223 
2224 CURSOR getPrivileges(pAttributeCode VARCHAR2) IS
2225 SELECT attribute24
2226 FROM bis_ak_region_item_extension
2227 WHERE region_code=pRegionCode AND attribute_code=pAttributeCode;
2228 
2229 cursor c_level_values_view_name (cp_parameter_name varchar2, cp_region_code varchar2) is
2230        select vl.attribute15,  -- level view name
2231        substr(vl.attribute2, instr(vl.attribute2,'+')+1), -- dimension level
2232        nvl(r.region_object_type, 'OLTP') -- level type
2233        from   ak_region_items vl, ak_regions r
2234        where  nvl(vl.attribute2,vl.attribute_code) = rtrim(cp_parameter_name)
2235        and    vl.region_code  = rtrim(cp_region_code)
2236        and    vl.region_code = r.region_code;
2237 
2238 l_validated_value VARCHAR2(200) := NULL;
2239 l_delegation_param VARCHAR2(150);
2240 l_privilege VARCHAR2(150);
2241 l_attribute_code VARCHAR2(30);
2242 l_roleIds_tbl BISVIEWER.t_char;
2243 l_delegationIds_tbl BISVIEWER.t_char;
2244 l_delegationValues_tbl BISVIEWER.t_char;
2245 l_view_name  VARCHAR2(150);
2246 l_dimension_level  VARCHAR2(150);
2247 l_level_type  VARCHAR2(150);
2248 l_sql_stmnt   VARCHAR2(2000);
2249 l_id_name     VARCHAR2(200);
2250 l_value_name  VARCHAR2(200);
2251 l_return_status	VARCHAR2(2000);
2252 l_msg_count		NUMBER;
2253 l_msg_data		VARCHAR2(2000);
2254 l_AsOfDate      DATE;
2255 BEGIN
2256   IF getDelegationParam%ISOPEN THEN
2257     CLOSE getDelegationParam;
2258   END IF;
2259   OPEN getDelegationParam;
2260   FETCH getDelegationParam INTO l_delegation_param;
2261   CLOSE getDelegationParam;
2262   IF (pDelegationParam = l_delegation_param) THEN
2263     l_attribute_code := BIS_PMV_UTIL.getAttributeForDimension(l_delegation_param, pRegionCode);
2264     IF (l_attribute_code <> l_delegation_param) THEN
2265 	  IF getPrivileges%ISOPEN THEN
2266 	    CLOSE getPrivileges;
2267 	  END IF;
2268 	  OPEN getPrivileges(l_attribute_code);
2269 	  FETCH getPrivileges INTO l_privilege;
2270 	  CLOSE getPrivileges;
2271 	  IF (l_privilege IS NOT NULL AND l_privilege <> '-1' AND length(trim(l_privilege)) > 0) THEN
2272 	    -- Get Role Id's for Privileges
2273 	    l_roleIds_tbl := BIS_PMV_UTIL.getRoleIds(l_privilege);
2274 	    IF (l_roleIds_tbl IS NOT NULL AND l_roleIds_tbl.COUNT > 0) THEN
2275 		  IF c_level_values_view_name%ISOPEN THEN
2276 		    CLOSE c_level_values_view_name;
2277 		  END IF;
2278           open c_level_values_view_name (l_delegation_param, pRegionCode);
2279           fetch c_level_values_view_name into l_view_name, l_dimension_level, l_level_type;
2280           close c_level_values_view_name;
2281           IF (l_view_name IS NULL) THEN
2282 		    IF UPPER(l_level_type) = 'EDW' THEN
2283 			  l_level_type := 'EDW';
2284 			ELSE
2285 			  l_level_type := 'OLTP';
2286 		    END IF;
2287 		    BIS_PMF_GET_DIMLEVELS_PUB.GET_DIMLEVEL_SELECT_STRING(
2288 		          p_DimLevelShortName => l_dimension_level
2289 		        , p_bis_source => l_level_type
2290 		        , x_Select_String => l_sql_stmnt
2291 		        , x_table_name => l_view_name
2292 		        , x_id_name => l_id_name
2293 		        , x_value_name => l_value_name
2294 		        , x_return_status => l_return_status
2295 		        , x_msg_count => l_msg_count
2296 		        , x_msg_data => l_msg_data
2297 		      );
2298           END IF;
2299 
2300 	      BIS_PMV_UTIL.getDelegations(
2301 			    pRoleIdsTbl => l_roleIds_tbl
2302 			  , pParamName  => l_delegation_param
2303 			  , pParameterView => l_view_name
2304 			  , pAsOfDate      => l_AsOfDate
2305 			  , xDelegatorIdTbl  => l_delegationIds_tbl
2306 			  , xDelegatorValueTbl => l_delegationValues_tbl
2307           );
2308           IF (l_delegationIds_tbl IS NOT NULL AND l_delegationIds_tbl.COUNT > 0) THEN
2309             l_validated_value := l_delegationIds_tbl(1);
2310           END IF;
2311 	    END IF;
2312 	  END IF;
2313     END IF;
2314   END IF;
2315 
2316   RETURN l_validated_value;
2317 EXCEPTION
2318   WHEN OTHERS THEN
2319 	  IF getDelegationParam%ISOPEN THEN
2320 	    CLOSE getDelegationParam;
2321 	  END IF;
2322   	  IF getPrivileges%ISOPEN THEN
2323 	    CLOSE getPrivileges;
2324 	  END IF;
2325 	  IF c_level_values_view_name%ISOPEN THEN
2326 	    CLOSE c_level_values_view_name;
2327 	  END IF;
2328 
2329 END GET_DELEGATION_VALIDATED_VALUE;
2330 
2331 PROCEDURE VALIDATE_TIME_PARAMETER
2332 (p_user_session_rec	    IN  BIS_PMV_SESSION_PVT.session_rec_type
2333 ,p_time_parameter_rec	    IN  OUT NOCOPY BIS_PMV_PARAMETERS_PVT.time_parameter_rec_type
2334 ,x_valid		    OUT NOCOPY VARCHAR2
2335 ,x_return_status	    OUT NOCOPY VARCHAR2
2336 ,x_msg_count		    OUT NOCOPY NUMBER
2337 ,x_msg_data		    OUT NOCOPY VARCHAR2
2338 ) IS
2339   l_dummy_date      DATE;
2340   l_validate_from varchar2(2000);
2341   l_validate_to   varchar2(2000);
2342 BEGIN
2343    x_valid := 'Y';
2344    IF ((nvl(p_time_parameter_rec.from_description, g_all) = g_all
2345         OR nvl(p_time_parameter_rec.to_description, g_all) = g_all)
2346       AND (p_time_parameter_rec.required_flag = 'Y')) THEN
2347          x_valid := 'N';
2348          FND_MESSAGE.SET_NAME('BIS','MANDATORY_PARAM');
2349          --Need to add a message token later
2350          FND_MESSAGE.SET_TOKEN('PARAMETER_LABEL', p_time_parameter_rec.parameter_label);
2351          FND_MSG_PUB.ADD;
2352          RAISE FND_API.G_EXC_ERROR;
2353    END IF;
2354 
2355    IF nvl(p_time_parameter_rec.from_description, g_all) <> g_all THEN
2356        if p_time_parameter_rec.id_flag = 'Y' then
2357           p_time_parameter_rec.from_value := p_time_parameter_rec.from_description;
2358           GET_TIME_VALIDATED_ID (p_parameter_name => p_time_parameter_rec.parameter_name
2359                                ,p_parameter_value => p_time_parameter_rec.from_value
2360                                ,p_region_code => p_user_session_rec.region_code
2361                                ,p_org_name => p_time_parameter_rec.org_name
2362                                ,p_org_value => p_time_parameter_rec.org_value
2363                                ,p_responsibility_id => p_user_session_rec.responsibility_id
2364                                ,x_parameter_description => p_time_parameter_rec.from_description
2365                                ,x_start_date => p_time_parameter_rec.from_period
2366                                ,x_end_date => l_dummy_date
2367                                ,x_return_status => x_return_status
2368                                ,x_msg_count => x_msg_count
2369                                ,x_msg_data => x_msg_data);
2370          l_validate_from := p_time_parameter_rec.from_description;
2371        else
2372          GET_TIME_VALIDATED_VALUE (p_parameter_name => p_time_parameter_rec.parameter_name
2373                                ,p_parameter_description => p_time_parameter_rec.from_description
2374                                ,p_region_code => p_user_session_rec.region_code
2375                                ,p_org_name => p_time_parameter_rec.org_name
2376                                ,p_org_value => p_time_parameter_rec.org_value
2377                                ,p_responsibility_id => p_user_session_rec.responsibility_id
2378                                ,x_parameter_value => p_time_parameter_rec.from_value
2379                                ,x_start_date => p_time_parameter_rec.from_period
2380                                ,x_end_date => l_dummy_date
2381                                ,x_return_status => x_return_status
2382                                ,x_msg_count => x_msg_count
2383                                ,x_msg_data => x_msg_data);
2384          l_validate_from := p_time_parameter_rec.from_value;
2385       end if;
2386 
2387       IF l_validate_from IS NULL THEN
2388          x_valid := 'N';
2389          FND_MESSAGE.SET_NAME('BIS','NOT_VALID');
2390          --Need to add a message token later
2391          FND_MESSAGE.SET_TOKEN('PARAMETER_LABEL', p_time_parameter_rec.parameter_label);
2392          FND_MSG_PUB.ADD;
2393          RAISE FND_API.G_EXC_ERROR;
2394       END IF;
2395    END IF;
2396 
2397    IF nvl(p_time_parameter_rec.to_description, g_all) <> g_all THEN
2398       if p_time_parameter_rec.id_flag = 'Y' then
2399          p_time_parameter_rec.to_value := p_time_parameter_rec.to_description;
2400          GET_TIME_VALIDATED_ID (p_parameter_name => p_time_parameter_rec.parameter_name
2401                                ,p_parameter_value => p_time_parameter_rec.to_value
2402                                ,p_region_code => p_user_session_rec.region_code
2403                                ,p_org_name => p_time_parameter_rec.org_name
2404                                ,p_org_value => p_time_parameter_rec.org_value
2405                                ,p_responsibility_id => p_user_session_rec.responsibility_id
2406                                ,x_parameter_description => p_time_parameter_rec.to_description
2407                                ,x_start_date => l_dummy_date
2408                                ,x_end_date => p_time_parameter_rec.to_period
2409                                ,x_return_status => x_return_status
2410                                ,x_msg_count => x_msg_count
2411                                ,x_msg_data => x_msg_data);
2412          l_validate_to := p_time_parameter_rec.to_description;
2413       else
2414          GET_TIME_VALIDATED_VALUE (p_parameter_name => p_time_parameter_rec.parameter_name
2415                                ,p_parameter_description => p_time_parameter_rec.to_description
2416                                ,p_region_code => p_user_session_rec.region_code
2417                                ,p_org_name => p_time_parameter_rec.org_name
2418                                ,p_org_value => p_time_parameter_rec.org_value
2419                                ,p_responsibility_id => p_user_session_rec.responsibility_id
2420                                ,x_parameter_value => p_time_parameter_rec.to_value
2421                                ,x_start_date => l_dummy_date
2422                                ,x_end_date => p_time_parameter_rec.to_period
2423                                ,x_return_status => x_return_status
2424                                ,x_msg_count => x_msg_count
2425                                ,x_msg_data => x_msg_data);
2426          l_validate_to := p_time_parameter_rec.to_value;
2427       end if;
2428 
2429       IF l_validate_to IS NULL THEN
2430          x_valid := 'N';
2431          FND_MESSAGE.SET_NAME('BIS','NOT_VALID');
2432          --Need to add a message token later
2433          FND_MESSAGE.SET_TOKEN('PARAMETER_LABEL', p_time_parameter_rec.parameter_label);
2434          FND_MSG_PUB.ADD;
2435          RAISE FND_API.G_EXC_ERROR;
2436       END IF;
2437    END IF;
2438 EXCEPTION
2439   WHEN FND_API.G_EXC_ERROR THEN
2440        x_return_status := FND_API.G_RET_STS_ERROR;
2441        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2442   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2443        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2444        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2445   WHEN OTHERS THEN
2446        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2447        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2448 END VALIDATE_TIME_PARAMETER;
2449 
2450 PROCEDURE DECODE_ID_VALUE
2451 (p_code   IN VARCHAR2
2452 ,p_index  IN NUMBER
2453 ,x_id    OUT NOCOPY VARCHAR2
2454 ,x_value OUT NOCOPY VARCHAR2) IS
2455 
2456 BEGIN
2457 
2458   x_id := substr(p_code,1,p_index-1);
2459   x_value := substr(p_code,p_index+4); --length('^~]*')= 4
2460 
2461 END DECODE_ID_VALUE;
2462 
2463 PROCEDURE CREATE_PARAMETER
2464 (p_user_session_rec	IN	BIS_PMV_SESSION_PVT.session_rec_type
2465 ,p_parameter_rec	IN	BIS_PMV_PARAMETERS_PVT.parameter_rec_type
2466 ,x_return_status	OUT NOCOPY VARCHAR2
2467 ,x_msg_count		OUT NOCOPY NUMBER
2468 ,x_msg_Data         OUT NOCOPY VARCHAR2
2469 ) IS
2470   l_parameter_name VARCHAR2(32000) := p_parameter_rec.parameter_name;
2471   l_parameter_value VARCHAR2(32000) := p_parameter_rec.parameter_value;
2472   l_parameter_description VARCHAR2(32000) := p_parameter_rec.parameter_description;
2473   l_index number := 0;
2474   l_dimension VARCHAR2(80) := p_parameter_rec.dimension;
2475 
2476 BEGIN
2477 
2478   l_index := instr(p_parameter_rec.parameter_description,'^~]*');
2479   IF l_index > 0 THEN
2480      DECODE_ID_VALUE
2481      (p_code => p_parameter_rec.parameter_description
2482      ,p_index => l_index
2483      ,x_id => l_parameter_value
2484      ,x_value => l_parameter_description);
2485      if l_parameter_value is not null then
2486         l_parameter_value := ''''||l_parameter_value||'''';
2487      end if;
2488   END IF;
2489 
2490   IF p_parameter_rec.hierarchy_flag = 'Y' THEN
2491      IF substr(l_parameter_name, length(l_parameter_name)-9) <> '_HIERARCHY' THEN
2492         l_parameter_name := substr(l_parameter_name,1,instr(l_parameter_name,'+')-1) || '_HIERARCHY';
2493      ELSE
2494         l_parameter_name := substr(l_parameter_name,1,instr(l_parameter_name,'+')-1);
2495      END IF;
2496   END IF;
2497 
2498   if l_dimension is null then
2499      l_index := instr(l_parameter_name,'+');
2500      IF l_index > 0 THEN
2501         l_dimension := substr(l_parameter_name,1,l_index-1);
2502      END IF;
2503   end if;
2504 
2505   IF p_parameter_rec.default_flag = 'Y' THEN
2506 
2507      INSERT INTO BIS_USER_ATTRIBUTES (user_id, function_name,
2508                                       attribute_name, session_description,
2509                                       default_value, default_description,
2510                                       period_date, dimension, operator,
2511                                       creation_date, created_by,
2512                                       last_update_Date, last_updated_by)
2513                               VALUES (p_user_session_rec.user_id, p_user_session_rec.function_name,
2514                                       l_parameter_name, 'NULL',
2515                                       l_parameter_value, l_parameter_description,
2516                                       p_parameter_rec.period_date, l_dimension,
2517                                       p_parameter_rec.operator,
2518                                       sysdate, -1, sysdate, -1);
2519   ELSE
2520     IF p_user_session_rec.page_id IS NULL OR p_user_session_rec.page_id = '' THEN
2521      INSERT INTO BIS_USER_ATTRIBUTES (user_id, function_name,
2522                                       session_id, attribute_name,
2523                                       session_value, session_description,
2524                                       period_date, dimension, operator,
2525                                       creation_date, created_by,
2526                                       last_update_Date, last_updated_by)
2527                               VALUES (p_user_session_rec.user_id, p_user_session_rec.function_name,
2528                                       p_user_session_rec.session_id, l_parameter_name,
2529                                       l_parameter_value, l_parameter_description,
2530                                       p_parameter_rec.period_date, l_dimension,
2531                                       p_parameter_rec.operator,
2532                                       sysdate, -1, sysdate, -1);
2533     ELSE
2534 
2535      INSERT INTO BIS_USER_ATTRIBUTES (user_id, page_id, attribute_name, function_name, session_id,
2536                                       session_value, session_description,
2537                                       period_date, dimension, operator,
2538                                       creation_date, created_by,
2539                                       last_update_Date, last_updated_by)
2540                               VALUES (p_user_session_rec.user_id, p_user_session_rec.page_id, l_parameter_name,
2541                                       p_user_session_rec.function_name, p_user_session_rec.session_id,
2542                                       l_parameter_value, l_parameter_description,
2543                                       p_parameter_rec.period_date, l_dimension,
2544                                       p_parameter_rec.operator,
2545                                       sysdate, -1, sysdate, -1);
2546 
2547     END IF;
2548   END IF;
2549 EXCEPTION
2550   WHEN FND_API.G_EXC_ERROR THEN
2551        x_return_status := FND_API.G_RET_STS_ERROR;
2552        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2553   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2554        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2555        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2556   WHEN OTHERS THEN
2557        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2558        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2559 END CREATE_PARAMETER;
2560 
2561 PROCEDURE RETRIEVE_PARAMETER
2562 (p_user_session_rec	IN  BIS_PMV_SESSION_PVT.Session_rec_type
2563 ,p_parameter_rec	IN  OUT NOCOPY BIS_PMV_PARAMETERS_PVT.parameter_rec_type
2564 ,x_return_status	OUT NOCOPY VARCHAR2
2565 ,x_msg_count		OUT NOCOPY NUMBER
2566 ,x_msg_data	        OUT NOCOPY VARCHAR2
2567 ) IS
2568 BEGIN
2569   IF p_parameter_rec.default_flag = 'Y' THEN
2570      SELECT default_description,
2571             default_value,
2572             period_date,
2573             dimension,
2574             operator
2575      INTO   p_parameter_rec.parameter_description,
2576             p_parameter_rec.parameter_value,
2577             p_parameter_rec.period_date,
2578             p_parameter_rec.dimension,
2579             p_parameter_rec.operator
2580      FROM   BIS_USER_ATTRIBUTES
2581      WHERE  attribute_name = p_parameter_rec.parameter_name
2582      AND    function_name = p_user_session_rec.function_name
2583      AND    user_id = p_user_session_rec.user_id
2584      AND    session_description = 'NULL'
2585      AND    session_id IS NULL;
2586   ELSE
2587      SELECT session_description,
2588             session_value,
2589             period_date,
2590             dimension,
2591             operator
2592      INTO   p_parameter_rec.parameter_description,
2593             p_parameter_rec.parameter_value,
2594             p_parameter_rec.period_date,
2595             p_parameter_rec.dimension,
2596             p_parameter_rec.operator
2597      FROM   BIS_USER_ATTRIBUTES
2598      WHERE  attribute_name = p_parameter_rec.parameter_name
2599      AND    function_name = p_user_session_rec.function_name
2600      AND    user_id = p_user_session_rec.user_id
2601      AND    session_id = p_user_session_rec.session_id
2602      AND    schedule_id IS NULL;
2603   END IF;
2604 EXCEPTION
2605   WHEN FND_API.G_EXC_ERROR THEN
2606        x_return_status := FND_API.G_RET_STS_ERROR;
2607        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2608   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2609        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2610        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2611   WHEN OTHERS THEN
2612        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2613        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2614 END RETRIEVE_PARAMETER;
2615 
2616 PROCEDURE RETRIEVE_PAGE_PARAMETER
2617 (p_parameter_rec	IN  OUT NOCOPY BIS_PMV_PARAMETERS_PVT.parameter_rec_type
2618 ,p_schedule_id          IN  NUMBER
2619 ,p_user_session_rec	IN  BIS_PMV_SESSION_PVT.Session_rec_type
2620 ,p_page_dims            IN  BISVIEWER.t_char
2621 ,x_return_status	OUT NOCOPY VARCHAR2
2622 ,x_msg_count		OUT NOCOPY NUMBER
2623 ,x_msg_data	        OUT NOCOPY VARCHAR2
2624 ) IS
2625 
2626 l_page_dims BISVIEWER.t_char := p_page_dims;
2627 BEGIN
2628 
2629   -- make sure there are max elements as they will be accessed
2630   IF l_page_dims IS NOT NULL AND l_page_dims.COUNT < MAX_BIND_VARIABLE_COUNT AND l_page_dims.COUNT>0   THEN
2631     FOR i IN l_page_dims.COUNT..MAX_BIND_VARIABLE_COUNT LOOP
2632       l_page_dims(i) := NULL;
2633     END LOOP;
2634   END IF;
2635 
2636  x_return_status := FND_API.G_RET_STS_SUCCESS;
2637  BEGIN
2638   SELECT session_description,
2639          session_value,
2640          period_date,
2641          dimension,
2642          operator
2643   INTO   p_parameter_rec.parameter_description,
2644          p_parameter_rec.parameter_value,
2645          p_parameter_rec.period_date,
2646          p_parameter_rec.dimension,
2647          p_parameter_rec.operator
2648   FROM   BIS_USER_ATTRIBUTES
2649   WHERE  attribute_name = p_parameter_rec.parameter_name
2650   AND    user_id = p_user_session_rec.user_id
2651   AND    page_id = p_user_session_rec.page_id;
2652  EXCEPTION WHEN NO_DATA_FOUND THEN
2653   if (p_schedule_id is not null ) then
2654      if (l_page_dims is not null and l_page_dims.COUNT > 0 ) THEN
2655         SELECT session_description,
2656             session_value,
2657             period_date,
2658             dimension,
2659             operator
2660          INTO   p_parameter_rec.parameter_description,
2661             p_parameter_rec.parameter_value,
2662             p_parameter_rec.period_date,
2663             p_parameter_rec.dimension,
2664             p_parameter_rec.operator
2665          FROM   BIS_USER_ATTRIBUTES
2666          WHERE  attribute_name = p_parameter_rec.parameter_name
2667          AND    schedule_id = p_schedule_id
2668          AND    attribute_name not in (l_page_dims(1), l_page_dims(2), l_page_dims(3), l_page_dims(4),
2669                  l_page_dims(5), l_page_dims(6), l_page_dims(7), l_page_dims(8), l_page_dims(9),
2670                  l_page_dims(10), l_page_dims(11), l_page_dims(12), l_page_dims(13), l_page_dims(14),
2671                  l_page_dims(15), l_page_dims(16), l_page_dims(17), l_page_dims(18), l_page_dims(19),
2672                  l_page_dims(20));
2673     else
2674        SELECT session_description,
2675             session_value,
2676             period_date,
2677             dimension,
2678             operator
2679         INTO   p_parameter_rec.parameter_description,
2680             p_parameter_rec.parameter_value,
2681             p_parameter_rec.period_date,
2682             p_parameter_rec.dimension,
2683             p_parameter_rec.operator
2684          FROM   BIS_USER_ATTRIBUTES
2685          WHERE  attribute_name = p_parameter_rec.parameter_name
2686          AND    schedule_id = p_schedule_id;
2687     end if;
2688   else
2689      if (l_page_dims is not null and l_page_dims.COUNT > 0) then
2690         SELECT session_description,
2691             session_value,
2692             period_date,
2693             dimension,
2694             operator
2695          INTO   p_parameter_rec.parameter_description,
2696             p_parameter_rec.parameter_value,
2697             p_parameter_rec.period_date,
2698             p_parameter_rec.dimension,
2699             p_parameter_rec.operator
2700          FROM   BIS_USER_ATTRIBUTES
2701          WHERE  attribute_name = p_parameter_rec.parameter_name
2702          AND  user_id = p_user_session_Rec.user_id
2703          AND  session_id = p_user_session_Rec.session_id
2704          AND  function_name = p_user_session_rec.function_name
2705          AND    attribute_name not in (l_page_dims(1), l_page_dims(2), l_page_dims(3), l_page_dims(4),
2706                 l_page_dims(5), l_page_dims(6), l_page_dims(7), l_page_dims(8), l_page_dims(9), l_page_dims(10),
2707                 l_page_dims(11), l_page_dims(12), l_page_dims(13), l_page_dims(14), l_page_dims(15),
2708                 l_page_dims(16), l_page_dims(17), l_page_dims(18), l_page_dims(19), l_page_dims(20));
2709     else
2710        SELECT session_description,
2711             session_value,
2712             period_date,
2713             dimension,
2714             operator
2715         INTO   p_parameter_rec.parameter_description,
2716             p_parameter_rec.parameter_value,
2717             p_parameter_rec.period_date,
2718             p_parameter_rec.dimension,
2719             p_parameter_rec.operator
2720          FROM   BIS_USER_ATTRIBUTES
2721          WHERE  attribute_name = p_parameter_rec.parameter_name
2722          AND  user_id = p_user_session_Rec.user_id
2723          AND  session_id = p_user_session_Rec.session_id
2724          AND  function_name = p_user_session_rec.function_name;
2725     end if;
2726   end if;
2727  END;
2728 EXCEPTION
2729   WHEN FND_API.G_EXC_ERROR THEN
2730        x_return_status := FND_API.G_RET_STS_ERROR;
2731        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2732   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2733        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2734        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2735   WHEN OTHERS THEN
2736        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2737        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2738 END RETRIEVE_PAGE_PARAMETER;
2739 
2740 PROCEDURE RETRIEVE_KPI_PARAMETER
2741 (p_parameter_rec	IN  OUT NOCOPY BIS_PMV_PARAMETERS_PVT.parameter_rec_type
2742 ,p_user_session_rec	IN  BIS_PMV_SESSION_PVT.Session_rec_type
2743 ,p_user_dims        IN  BISVIEWER.t_char
2744 ,x_return_status	OUT NOCOPY VARCHAR2
2745 ,x_msg_count		OUT NOCOPY NUMBER
2746 ,x_msg_data	        OUT NOCOPY VARCHAR2
2747 ) IS
2748 
2749   l_user_dims BISVIEWER.t_char := p_user_dims;
2750 
2751 BEGIN
2752 
2753  x_return_status := FND_API.G_RET_STS_SUCCESS;
2754 
2755    -- make sure there are max elements as they will be accessed
2756   IF l_user_dims IS NOT NULL AND l_user_dims.COUNT < MAX_BIND_VARIABLE_COUNT   THEN
2757     FOR i IN l_user_dims.COUNT .. MAX_BIND_VARIABLE_COUNT LOOP
2758       --l_page_dims.EXTEND;
2759       l_user_dims(i) := NULL;
2760     END LOOP;
2761   END IF;
2762 
2763   BEGIN
2764        SELECT session_description,
2765             session_value,
2766             period_date,
2767             dimension,
2768             operator
2769        INTO p_parameter_rec.parameter_description,
2770             p_parameter_rec.parameter_value,
2771             p_parameter_rec.period_date,
2772             p_parameter_rec.dimension,
2773             p_parameter_rec.operator
2774        FROM BIS_USER_ATTRIBUTES
2775        WHERE attribute_name = p_parameter_rec.parameter_name
2776        AND   user_id = p_user_session_Rec.user_id
2777        AND   session_id = p_user_session_Rec.session_id
2778        AND   function_name = p_user_session_rec.function_name;
2779  EXCEPTION WHEN NO_DATA_FOUND THEN
2780   if l_user_dims is not null then
2781      SELECT session_description,
2782             session_value,
2783             period_date,
2784             dimension,
2785             operator
2786      INTO   p_parameter_rec.parameter_description,
2787             p_parameter_rec.parameter_value,
2788             p_parameter_rec.period_date,
2789             p_parameter_rec.dimension,
2790             p_parameter_rec.operator
2791      FROM   BIS_USER_ATTRIBUTES
2792      WHERE  attribute_name = p_parameter_rec.parameter_name
2793      AND    user_id = p_user_session_rec.user_id
2794      AND    page_id = p_user_session_rec.page_id
2795          AND    attribute_name not in (l_user_dims(1), l_user_dims(2), l_user_dims(3), l_user_dims(4),
2796                 l_user_dims(5), l_user_dims(6), l_user_dims(7), l_user_dims(8), l_user_dims(9),
2797                 l_user_dims(10), l_user_dims(11), l_user_dims(12), l_user_dims(13), l_user_dims(14),
2798                 l_user_dims(15), l_user_dims(16), l_user_dims(17), l_user_dims(18), l_user_dims(19), l_user_dims(20));
2799    else
2800      SELECT session_description,
2801             session_value,
2802             period_date,
2803             dimension,
2804             operator
2805      INTO   p_parameter_rec.parameter_description,
2806             p_parameter_rec.parameter_value,
2807             p_parameter_rec.period_date,
2808             p_parameter_rec.dimension,
2809             p_parameter_rec.operator
2810      FROM   BIS_USER_ATTRIBUTES
2811      WHERE  attribute_name = p_parameter_rec.parameter_name
2812      AND    user_id = p_user_session_rec.user_id
2813      AND    page_id = p_user_session_rec.page_id;
2814    end if;
2815   END;
2816 EXCEPTION
2817   WHEN FND_API.G_EXC_ERROR THEN
2818        x_return_status := FND_API.G_RET_STS_ERROR;
2819        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2820   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2821        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2822        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2823   WHEN OTHERS THEN
2824        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2825        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2826 END RETRIEVE_KPI_PARAMETER;
2827 
2828 PROCEDURE RETRIEVE_SCHEDULE_PARAMETER
2829 (p_parameter_rec	IN  OUT NOCOPY BIS_PMV_PARAMETERS_PVT.parameter_rec_type
2830 ,p_schedule_id      IN  NUMBER
2831 ,x_return_status	OUT NOCOPY VARCHAR2
2832 ,x_msg_count		OUT NOCOPY NUMBER
2833 ,x_msg_data	        OUT NOCOPY VARCHAR2
2834 ) IS
2835 BEGIN
2836   SELECT session_description,
2837          session_value,
2838          period_date,
2839          dimension,
2840          operator
2841   INTO   p_parameter_rec.parameter_description,
2842          p_parameter_rec.parameter_value,
2843          p_parameter_rec.period_date,
2844          p_parameter_rec.dimension,
2845          p_parameter_rec.operator
2846   FROM   BIS_USER_ATTRIBUTES
2847   WHERE  attribute_name = p_parameter_rec.parameter_name
2848   AND    schedule_id = p_schedule_id;
2849 EXCEPTION
2850   WHEN FND_API.G_EXC_ERROR THEN
2851        x_return_status := FND_API.G_RET_STS_ERROR;
2852        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2853   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2854        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2855        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2856   WHEN OTHERS THEN
2857        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2858        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2859 END RETRIEVE_SCHEDULE_PARAMETER;
2860 
2861 PROCEDURE DELETE_PARAMETER
2862 (p_user_session_rec	IN	BIS_PMV_SESSION_PVT.session_rec_type
2863 ,p_parameter_name	IN	VARCHAR2
2864 ,p_schedule_option  IN  VARCHAR2
2865 ,x_return_status	OUT	NOCOPY VARCHAR2
2866 ,x_msg_count		OUT	NOCOPY NUMBER
2867 ,x_msg_data		OUT	NOCOPY VARCHAR2
2868 ) IS
2869 BEGIN
2870   IF p_schedule_option = 'NULL' THEN
2871     DELETE FROM BIS_USER_ATTRIBUTES
2872     WHERE  user_id = p_user_session_rec.user_id
2873     AND    session_id = p_user_session_rec.session_id
2874     AND    function_name = p_user_session_rec.function_name
2875     AND    attribute_name = p_parameter_name
2876     AND    schedule_id IS NULL;
2877   ELSIF p_schedule_option = 'NOT_NULL' THEN
2878     DELETE FROM BIS_USER_ATTRIBUTES
2879     WHERE  user_id = p_user_session_rec.user_id
2880     AND    session_id = p_user_session_rec.session_id
2881     AND    function_name = p_user_session_rec.function_name
2882     AND    attribute_name = p_parameter_name
2883     AND    schedule_id IS NOT NULL;
2884   ELSE
2885     DELETE FROM BIS_USER_ATTRIBUTES
2886     WHERE  user_id = p_user_session_rec.user_id
2887     AND    session_id = p_user_session_rec.session_id
2888     AND    function_name = p_user_session_rec.function_name
2889     AND    attribute_name = p_parameter_name;
2890   END IF;
2891  COMMIT;
2892 EXCEPTION
2893   WHEN FND_API.G_EXC_ERROR THEN
2894        ROLLBACK;
2895        x_return_status := FND_API.G_RET_STS_ERROR;
2896        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2897   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2898        ROLLBACK;
2899        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2900        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2901   WHEN OTHERS THEN
2902        ROLLBACK;
2903        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2904        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2905 END DELETE_PARAMETER;
2906 
2907 PROCEDURE DELETE_SCHEDULE_PARAMETER
2908 (p_parameter_name	IN	VARCHAR2
2909 ,p_schedule_id      IN  NUMBER
2910 ,x_return_status	OUT	NOCOPY VARCHAR2
2911 ,x_msg_count		OUT	NOCOPY NUMBER
2912 ,x_msg_data	        OUT NOCOPY VARCHAR2
2913 ) IS
2914 BEGIN
2915   DELETE FROM BIS_USER_ATTRIBUTES
2916   WHERE  attribute_name = p_parameter_name
2917   AND    schedule_id = p_schedule_id;
2918   COMMIT;
2919 EXCEPTION
2920   WHEN FND_API.G_EXC_ERROR THEN
2921        ROLLBACK;
2922        x_return_status := FND_API.G_RET_STS_ERROR;
2923        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2924   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2925        ROLLBACK;
2926        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2927        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2928   WHEN OTHERS THEN
2929        ROLLBACK;
2930        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2931        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
2932 END DELETE_SCHEDULE_PARAMETER;
2933 
2934 PROCEDURE CREATE_SESSION_PARAMETERS
2935 (p_user_param_tbl	IN	BIS_PMV_PARAMETERS_PVT.parameter_tbl_type
2936 ,p_user_session_rec	IN	BIS_PMV_SESSION_PVT.session_rec_type
2937 ,x_return_status	OUT	NOCOPY VARCHAR2
2938 ,x_msg_count		OUT	NOCOPY NUMBER
2939 ,x_msg_data		OUT	NOCOPY VARCHAR2
2940 ) IS
2941 
2942 l_user_param_tbl	BIS_PMV_PARAMETERS_PVT.parameter_tbl_type;
2943 l_lov_where  varchar2(2000);
2944 
2945 /*
2946 cursor lov_where_cursor (cpRegionCode varchar2, cpAttr2 varchar2) is
2947 select attribute4
2948 from ak_region_items
2949 where region_code = cpRegionCode
2950 and attribute2 = cpAttr2;
2951 */
2952 BEGIN
2953 
2954   IF p_user_param_tbl.COUNT > 0 THEN
2955      l_useR_param_Tbl := p_user_param_Tbl;
2956      --FOR i in p_user_param_tbl.FIRST..p_user_param_tbl.LAST LOOP
2957   FOR i in 1..p_user_param_tbl.COUNT LOOP
2958 
2959   	IF (l_user_param_Tbl(i).parameter_name IS NOT NULL ) THEN
2960       IF (l_user_param_Tbl(i).parameter_description <> ROLLING_DIMENSION_DESCRIPTION
2961         --Bug Fix 2616851, Added this so that null check can be done for mandatory parameter
2962         OR (trim(l_user_param_Tbl(i).parameter_description) IS NULL AND l_user_param_Tbl(i).required_flag = 'Y') ) THEN
2963 /*
2964                 IF lov_where_cursor%ISOPEN THEN
2965                    close lov_where_cursor;
2966                 END IF;
2967                 open lov_where_cursor(p_user_session_rec.region_code, l_user_param_Tbl(i).parameter_name);
2968                 fetch lov_where_cursor into l_lov_where;
2969                 close lov_where_cursor;
2970 */
2971                 IF (l_user_param_tbl(i).lov_where is not null and
2972                     instr(l_user_param_tbl(i).parameter_description, '^~]*') <= 0 and
2973                     l_user_param_tbl(i).parameter_description  <> g_all ) then
2974                    l_lov_where :=  GET_LOV_WHERE(p_parameter_tbl => l_user_param_Tbl,
2975                                                  p_where_clause => l_user_param_tbl(i).lov_where,
2976                                                  p_user_session_rec => p_user_session_rec);
2977                    l_user_param_tbl(i).lov_where := l_lov_where;
2978                 END IF;
2979 
2980            	VALIDATE_AND_SAVE (p_user_session_rec => p_user_session_rec
2981            		  ,p_parameter_rec => l_user_param_tbl(i)
2982                           ,x_return_status => x_return_status
2983                           ,x_msg_count => x_msg_count
2984                           ,x_msg_Data => x_msg_data);
2985       ELSE
2986 
2987           -- save into the bis_user_atribute table directly
2988 
2989           CREATE_PARAMETER (p_user_session_rec	=> p_user_session_rec
2990                             ,p_parameter_rec	=> l_user_param_tbl(i)
2991                             ,x_return_status	=> x_return_status
2992                             ,x_msg_count => x_msg_count
2993                             ,x_msg_Data => x_msg_data
2994                           );
2995   	  END IF; -- if rolling dim
2996 
2997       IF (x_return_status is not null OR (x_return_status <> FND_API.G_RET_STS_SUCCESS))THEN
2998   	  	EXIT;
2999       END IF;
3000 
3001      END IF; -- if param name is not null
3002     END LOOP;
3003   END IF;
3004 EXCEPTION
3005   WHEN FND_API.G_EXC_ERROR THEN
3006        ROLLBACK;
3007        x_return_status := FND_API.G_RET_STS_ERROR;
3008        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3009   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3010        ROLLBACK;
3011        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3012        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3013   WHEN OTHERS THEN
3014        ROLLBACK;
3015        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3016        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3017 END CREATE_SESSION_PARAMETERS;
3018 
3019 PROCEDURE RETRIEVE_PAGE_PARAMETERS
3020 (p_schedule_id	    IN	NUMBER
3021 ,p_user_session_rec	IN	BIS_PMV_SESSION_PVT.session_rec_type
3022 ,x_user_param_tbl	OUT	NOCOPY BIS_PMV_PARAMETERS_PVT.parameter_tbl_type
3023 ,x_return_status	OUT	NOCOPY VARCHAR2
3024 ,x_msg_count		OUT	NOCOPY NUMBER
3025 ,x_msg_data		    OUT	NOCOPY VARCHAR2
3026 ) IS
3027 
3028  l_index NUMBER := 1;
3029  l_Dimension varchar2(2000);
3030  l_parameter_rec parameter_rec_type;
3031  l_page_dimensions varchar2(2000);
3032 
3033  CURSOR c_page_params_cursor IS
3034  SELECT attribute_name,
3035         session_description,
3036         session_value,
3037         period_date,
3038         dimension,
3039         operator
3040  FROM   BIS_USER_ATTRIBUTES
3041  WHERE  user_id = p_user_session_rec.user_id
3042  AND    page_id = p_user_session_rec.page_id;
3043 
3044  CURSOR c_sched_portlet_params_cursor IS
3045  SELECT attribute_name,
3046         session_description,
3047         session_value,
3048         period_date,
3049         dimension,
3050         operator
3051  FROM   BIS_USER_ATTRIBUTES
3052  WHERE  schedule_id = p_schedule_id
3053  AND    ((dimension IS NULL AND attribute_name not in (SELECT nvl(attribute_name,'-11')
3054                                                        FROM   BIS_USER_ATTRIBUTES
3055                                                        WHERE  page_id=p_user_session_rec.page_id
3056                                                        AND    user_id=p_user_session_rec.user_id))
3057       OR (dimension IS NOT NULL AND dimension not in (SELECT nvl(dimension,'-11')
3058                                                       FROM   BIS_USER_ATTRIBUTES
3059                                                       WHERE  page_id=p_user_session_rec.page_id
3060                                                       AND    user_id=p_user_session_rec.user_id)));
3061 
3062  CURSOR c_sess_portlet_params_cursor IS
3063  SELECT attribute_name,
3064         session_description,
3065         session_value,
3066         period_date,
3067         dimension,
3068         operator
3069  FROM   BIS_USER_ATTRIBUTES
3070  WHERE  user_id = p_user_session_rec.user_id
3071  AND    session_id = p_user_session_rec.session_id
3072  AND    function_name = p_user_session_rec.function_name
3073  AND    ((dimension IS NULL AND attribute_name not in (SELECT nvl(attribute_name,'-11')
3074                                                        FROM   BIS_USER_ATTRIBUTES
3075                                                        WHERE  page_id=p_user_session_rec.page_id
3076                                                        AND    user_id=p_user_session_rec.user_id))
3077       OR (dimension IS NOT NULL AND dimension not in (SELECT nvl(dimension, '-11')
3078                                                       FROM   BIS_USER_ATTRIBUTES
3079                                                       WHERE  page_id=p_user_session_rec.page_id
3080                                                       AND    user_id=p_user_session_rec.user_id)));
3081 
3082 BEGIN
3083 
3084  FOR c_page_params_rec IN c_page_params_cursor LOOP
3085      l_parameter_rec.parameter_name := c_page_params_rec.attribute_name;
3086      l_parameter_rec.parameter_description := c_page_params_rec.session_description;
3087      l_parameter_rec.parameter_value := c_page_params_rec.session_value;
3088      l_parameter_rec.period_date := c_page_params_rec.period_date;
3089      l_parameter_rec.dimension := c_page_params_rec.dimension;
3090      l_parameter_rec.operator := c_page_params_rec.operator;
3091      x_user_param_tbl(l_index) := l_parameter_rec;
3092      l_index := l_index + 1;
3093  END LOOP;
3094 
3095  IF p_schedule_id IS NOT NULL THEN
3096     FOR c_sched_portlet_params_rec in c_sched_portlet_params_cursor LOOP
3097         l_parameter_rec.parameter_name := c_sched_portlet_params_rec.attribute_name;
3098         l_parameter_rec.parameter_description := c_sched_portlet_params_rec.session_description;
3099         l_parameter_rec.parameter_value := c_sched_portlet_params_rec.session_value;
3100         l_parameter_rec.period_date := c_sched_portlet_params_rec.period_date;
3101         l_parameter_rec.dimension := c_sched_portlet_params_rec.dimension;
3102         l_parameter_rec.operator := c_sched_portlet_params_rec.operator;
3103         x_user_param_tbl(l_index) := l_parameter_rec;
3104         l_index := l_index + 1;
3105     END LOOP;
3106  ELSE
3107     FOR c_sess_portlet_params_rec in c_sess_portlet_params_cursor LOOP
3108         l_parameter_rec.parameter_name := c_sess_portlet_params_rec.attribute_name;
3109         l_parameter_rec.parameter_description := c_sess_portlet_params_rec.session_description;
3110         l_parameter_rec.parameter_value := c_sess_portlet_params_rec.session_value;
3111         l_parameter_rec.period_date := c_sess_portlet_params_rec.period_date;
3112         l_parameter_rec.dimension := c_sess_portlet_params_rec.dimension;
3113         l_parameter_rec.operator := c_sess_portlet_params_rec.operator;
3114         x_user_param_tbl(l_index) := l_parameter_rec;
3115         l_index := l_index + 1;
3116     END LOOP;
3117  END IF;
3118 
3119 EXCEPTION
3120   WHEN FND_API.G_EXC_ERROR THEN
3121        x_return_status := FND_API.G_RET_STS_ERROR;
3122        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3123   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3124        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3125        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3126   WHEN OTHERS THEN
3127        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3128        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3129 END RETRIEVE_PAGE_PARAMETERS;
3130 
3131 PROCEDURE RETRIEVE_KPI_PARAMETERS
3132 (p_user_session_rec	IN	BIS_PMV_SESSION_PVT.session_rec_type
3133 ,x_user_param_tbl	OUT	NOCOPY BIS_PMV_PARAMETERS_PVT.parameter_tbl_type
3134 ,x_return_status	OUT	NOCOPY VARCHAR2
3135 ,x_msg_count		OUT	NOCOPY NUMBER
3136 ,x_msg_data		    OUT	NOCOPY VARCHAR2
3137 ) IS
3138 
3139  l_index NUMBER := 1;
3140  l_Dimension varchar2(2000);
3141  l_parameter_rec parameter_rec_type;
3142  l_user_dimensions varchar2(2000);
3143 
3144  CURSOR c_session_params_cursor IS
3145  SELECT attribute_name,
3146         session_description,
3147         session_value,
3148         period_date,
3149         dimension,
3150         operator
3151  FROM   BIS_USER_ATTRIBUTES
3152  WHERE  user_id = p_user_session_rec.user_id
3153  AND    session_id = p_user_session_rec.session_id
3154  AND    function_name = p_user_session_rec.function_name;
3155 
3156  CURSOR c_page_params_cursor IS
3157  SELECT attribute_name,
3158         session_description,
3159         session_value,
3160         period_date,
3161         dimension,
3162         operator
3163  FROM   BIS_USER_ATTRIBUTES
3164  WHERE  user_id = p_user_session_rec.user_id
3165  AND    page_id = p_user_session_rec.page_id
3166  AND    ((dimension IS NULL AND attribute_name not in (SELECT nvl(attribute_name, '-11')
3167                                                        FROM   BIS_USER_ATTRIBUTES
3168                                                        WHERE  user_id = p_user_session_rec.user_id
3169                                                        AND    session_id = p_user_session_rec.session_id
3170                                                        AND    function_name = p_user_session_rec.function_name))
3171       OR (dimension IS NOT NULL AND dimension not in (SELECT nvl(dimension,'-11')
3172                                                       FROM   BIS_USER_ATTRIBUTES
3173                                                       WHERE  user_id = p_user_session_rec.user_id
3174                                                       AND    session_id = p_user_session_rec.session_id
3175                                                       AND    function_name = p_user_session_rec.function_name)));
3176 
3177 BEGIN
3178 
3179  FOR c_session_params_rec in c_session_params_cursor LOOP
3180      l_parameter_rec.parameter_name := c_session_params_rec.attribute_name;
3181      l_parameter_rec.parameter_description := c_session_params_rec.session_description;
3182      l_parameter_rec.parameter_value := c_session_params_rec.session_value;
3183      l_parameter_rec.period_date := c_session_params_rec.period_date;
3184      l_parameter_rec.dimension := c_session_params_rec.dimension;
3185      l_parameter_rec.operator := c_session_params_rec.operator;
3186      x_user_param_tbl(l_index) := l_parameter_rec;
3187      l_index := l_index + 1;
3188  END LOOP;
3189 
3190  FOR c_page_params_rec IN c_page_params_cursor LOOP
3191      l_parameter_rec.parameter_name := c_page_params_rec.attribute_name;
3192      l_parameter_rec.parameter_description := c_page_params_rec.session_description;
3193      l_parameter_rec.parameter_value := c_page_params_rec.session_value;
3194      l_parameter_rec.period_date := c_page_params_rec.period_date;
3195      l_parameter_rec.dimension := c_page_params_rec.dimension;
3196      l_parameter_rec.operator := c_page_params_rec.operator;
3197      x_user_param_tbl(l_index) := l_parameter_rec;
3198      l_index := l_index + 1;
3199  END LOOP;
3200 
3201 EXCEPTION
3202   WHEN FND_API.G_EXC_ERROR THEN
3203        x_return_status := FND_API.G_RET_STS_ERROR;
3204        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3205   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3206        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3207        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3208   WHEN OTHERS THEN
3209        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3210        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3211 END RETRIEVE_KPI_PARAMETERS;
3212 
3213 PROCEDURE RETRIEVE_PARAMLVL_PARAMETERS
3214 (p_user_session_Rec     IN      BIS_PMV_SESSION_PVT.session_rec_type
3215 ,x_paramportlet_param_tbl       OUT  NOCOPY BIS_PMV_PARAMETERS_PVT.parameter_tbl_Type
3216 ,x_return_status                OUT NOCOPY VARCHAR2
3217 ,x_msg_count                    OUT NOCOPY NUMBER
3218 ,x_msg_data                     OUT NOCOPY VARCHAR2
3219 )
3220 IS
3221  l_parameter_rec parameter_rec_type;
3222  l_index NUMBER := 1;
3223  l_dimension varchar2(25) := 'TIME_COMPARISON_TYPE';
3224  lNullList BISVIEWER.t_char;
3225 BEGIN
3226          l_parameter_rec.parameter_name := 'AS_OF_DATE';
3227          RETRIEVE_PAGE_PARAMETER (p_parameter_rec => l_parameter_rec
3228                              ,p_schedule_id => null
3229                              ,p_user_session_rec => p_user_session_rec
3230                              ,p_page_dims => lNullList
3231                              ,x_return_status => x_return_status
3232                              ,x_msg_count => x_msg_count
3233                              ,x_msg_data => x_msg_data);
3234           IF (x_return_status is null or x_return_status = FND_API.G_RET_STS_SUCCESS) then
3235               x_paramportlet_param_tbl(l_index) := l_parameter_rec;
3236               l_index := l_index + 1;
3237           end if;
3238           l_parameter_rec.parameter_name := 'BIS_P_ASOF_DATE';
3239           RETRIEVE_PAGE_PARAMETER (p_parameter_rec => l_parameter_rec
3240                               ,p_schedule_id => null
3241                               ,p_user_session_rec => p_user_session_rec
3242                               ,p_page_dims =>  lNullList
3243                               ,x_return_status => x_return_status
3244                               ,x_msg_count => x_msg_count
3245                               ,x_msg_data => x_msg_data);
3246            IF (x_return_status is null or x_return_status = FND_API.G_RET_STS_SUCCESS) then
3247                x_paramportlet_param_tbl(l_index) := l_parameter_rec;
3248                l_index := l_index + 1;
3249            end if;
3250           l_parameter_rec.parameter_name := 'BIS_CUR_REPORT_START_DATE';
3251           RETRIEVE_PAGE_PARAMETER (p_parameter_rec => l_parameter_rec
3252                               ,p_schedule_id => null
3253                               ,p_user_session_rec => p_user_session_rec
3254                               ,p_page_dims =>  lNullList
3255                               ,x_return_status => x_return_status
3256                               ,x_msg_count => x_msg_count
3257                               ,x_msg_data => x_msg_data);
3258            IF (x_return_status is null or x_return_status = FND_API.G_RET_STS_SUCCESS) then
3259                x_paramportlet_param_tbl(l_index) := l_parameter_rec;
3260                l_index := l_index + 1;
3261            end if;
3262           l_parameter_rec.parameter_name := 'BIS_PREV_REPORT_START_DATE';
3263           RETRIEVE_PAGE_PARAMETER (p_parameter_rec => l_parameter_rec
3264                               ,p_schedule_id => null
3265                               ,p_user_session_rec => p_user_session_rec
3266                               ,p_page_dims =>  lNullList
3267                               ,x_return_status => x_return_status
3268                               ,x_msg_count => x_msg_count
3269                               ,x_msg_data => x_msg_data);
3270            IF (x_return_status is null or x_return_status = FND_API.G_RET_STS_SUCCESS) then
3271                x_paramportlet_param_tbl(l_index) := l_parameter_rec;
3272                l_index := l_index + 1;
3273            end if;
3274           -- nbarik - 07/17/03 - Bug Fix 2999602 - Added BIS_PREVIOUS_EFFECTIVE_START_DATE and BIS_PREVIOUS_EFFECTIVE_END_DATE
3275           l_parameter_rec.parameter_name := 'BIS_PREVIOUS_EFFECTIVE_START_DATE';
3276           RETRIEVE_PAGE_PARAMETER (p_parameter_rec => l_parameter_rec
3277                               ,p_schedule_id => null
3278                               ,p_user_session_rec => p_user_session_rec
3279                               ,p_page_dims =>  lNullList
3280                               ,x_return_status => x_return_status
3281                               ,x_msg_count => x_msg_count
3282                               ,x_msg_data => x_msg_data);
3283            IF (x_return_status is null or x_return_status = FND_API.G_RET_STS_SUCCESS) then
3284                x_paramportlet_param_tbl(l_index) := l_parameter_rec;
3285                l_index := l_index + 1;
3286            end if;
3287           l_parameter_rec.parameter_name := 'BIS_PREVIOUS_EFFECTIVE_END_DATE';
3288           RETRIEVE_PAGE_PARAMETER (p_parameter_rec => l_parameter_rec
3289                               ,p_schedule_id => null
3290                               ,p_user_session_rec => p_user_session_rec
3291                               ,p_page_dims =>  lNullList
3292                               ,x_return_status => x_return_status
3293                               ,x_msg_count => x_msg_count
3294                               ,x_msg_data => x_msg_data);
3295            IF (x_return_status is null or x_return_status = FND_API.G_RET_STS_SUCCESS) then
3296                x_paramportlet_param_tbl(l_index) := l_parameter_rec;
3297                l_index := l_index + 1;
3298            end if;
3299 
3300          -- Also need to retrieve the TIME comparison type
3301         BEGIN
3302         SELECT attribute_name, session_description,
3303          session_value,
3304          period_date,
3305          dimension,
3306          operator
3307          INTO  l_parameter_rec.parameter_name,
3308                l_parameter_rec.parameter_description,
3309                l_parameter_rec.parameter_value,
3310                l_parameter_rec.period_date,
3311                l_parameter_rec.dimension,
3312                l_parameter_rec.operator
3313          FROM   BIS_USER_ATTRIBUTES
3314          WHERE  dimension = l_dimension
3315          AND    user_id = p_user_session_rec.user_id
3316          AND    page_id = p_user_session_rec.page_id;
3317          END;
3318          x_paramportlet_param_tbl(l_index) := l_parameter_rec;
3319 EXCEPTION
3320   WHEN FND_API.G_EXC_ERROR THEN
3321        x_return_status := FND_API.G_RET_STS_ERROR;
3322        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3323   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3324        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3325        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3326   WHEN OTHERS THEN
3327        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3328        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3329 
3330 END;
3331 
3332 PROCEDURE RETRIEVE_SCHEDULE_PARAMETERS
3333 (p_schedule_id	    IN	NUMBER
3334 ,x_user_param_tbl	OUT	NOCOPY BIS_PMV_PARAMETERS_PVT.parameter_tbl_type
3335 ,x_return_status	OUT	NOCOPY VARCHAR2
3336 ,x_msg_count		OUT	NOCOPY NUMBER
3337 ,x_msg_data		    OUT	NOCOPY VARCHAR2
3338 ) IS
3339 
3340 /*
3341  l_index NUMBER := 1;
3342  l_parameter_rec parameter_rec_type;
3343  CURSOR c_parameter_cursor IS
3344  SELECT attribute_name
3345  FROM   BIS_USER_ATTRIBUTES
3346  WHERE  schedule_id = p_schedule_id;
3347 BEGIN
3348  FOR c_parameter_rec in c_parameter_cursor LOOP
3349      l_parameter_rec.parameter_name := c_parameter_rec.attribute_name;
3350      RETRIEVE_SCHEDULE_PARAMETER (p_parameter_rec => l_parameter_rec
3351                                  ,p_schedule_id	=> p_schedule_id
3352                                  ,x_return_status => x_return_status
3353                                  ,x_msg_count => x_msg_count
3354                                  ,x_msg_data	=> x_msg_data);
3355      x_user_param_tbl(l_index) := l_parameter_rec;
3356      l_index := l_index + 1;
3357  END LOOP;
3358 */
3359 
3360  l_index NUMBER := 1;
3361  l_parameter_rec parameter_rec_type;
3362 
3363  CURSOR c_schedule_params_cursor IS
3364  SELECT attribute_name,
3365         session_description,
3366         session_value,
3367         period_date,
3368         dimension,
3369         operator
3370  FROM   BIS_USER_ATTRIBUTES
3371  WHERE  schedule_id = p_schedule_id;
3372 
3373 BEGIN
3374 
3375  FOR c_schedule_params_rec in c_schedule_params_cursor LOOP
3376      l_parameter_rec.parameter_name := c_schedule_params_rec.attribute_name;
3377      l_parameter_rec.parameter_description := c_schedule_params_rec.session_description;
3378      l_parameter_rec.parameter_value := c_schedule_params_rec.session_value;
3379      l_parameter_rec.period_date := c_schedule_params_rec.period_date;
3380      l_parameter_rec.dimension := c_schedule_params_rec.dimension;
3381      l_parameter_rec.operator := c_schedule_params_rec.operator;
3382      x_user_param_tbl(l_index) := l_parameter_rec;
3383      l_index := l_index + 1;
3384  END LOOP;
3385 
3386 EXCEPTION
3387   WHEN FND_API.G_EXC_ERROR THEN
3388        x_return_status := FND_API.G_RET_STS_ERROR;
3389        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3390   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3391        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3392        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3393   WHEN OTHERS THEN
3394        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3395        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3396 END RETRIEVE_SCHEDULE_PARAMETERS;
3397 
3398 PROCEDURE RETRIEVE_SESSION_PARAMETERS
3399 (p_user_session_rec	IN	BIS_PMV_SESSION_PVT.session_rec_type
3400 ,x_user_param_tbl	OUT	NOCOPY BIS_PMV_PARAMETERS_PVT.parameter_tbl_type
3401 ,x_return_status	OUT	NOCOPY VARCHAR2
3402 ,x_msg_count		OUT	NOCOPY NUMBER
3403 ,x_msg_data		    OUT	NOCOPY VARCHAR2
3404 ) IS
3405 
3406 /*
3407  l_index NUMBER := 1;
3408  l_parameter_rec parameter_rec_type;
3409  CURSOR c_parameter_cursor IS
3410  SELECT attribute_name
3411  FROM   BIS_USER_ATTRIBUTES
3412  WHERE  user_id = p_user_session_rec.user_id
3413  AND    session_id = p_user_session_rec.session_id
3414  AND    function_name = p_user_session_rec.function_name;
3415 BEGIN
3416  FOR c_parameter_rec in c_parameter_cursor LOOP
3417      l_parameter_rec.parameter_name := c_parameter_rec.attribute_name;
3418      l_parameter_rec.default_flag := 'N';
3419      RETRIEVE_PARAMETER (p_parameter_rec => l_parameter_rec
3420                         ,p_user_session_rec	=> p_user_session_rec
3421                         ,x_return_status => x_return_status
3422                         ,x_msg_count => x_msg_count
3423                         ,x_msg_data	=> x_msg_data);
3424      x_user_param_tbl(l_index) := l_parameter_rec;
3425      l_index := l_index + 1;
3426  END LOOP;
3427 */
3428 
3429  l_index NUMBER := 1;
3430  l_parameter_rec parameter_rec_type;
3431 
3432  CURSOR c_session_params_cursor IS
3433  SELECT attribute_name,
3434         session_description,
3435         session_value,
3436         period_date,
3437         dimension,
3438         operator
3439  FROM   BIS_USER_ATTRIBUTES
3440  WHERE  function_name = p_user_session_rec.function_name
3441  AND    user_id = p_user_session_rec.user_id
3442  AND    session_id = p_user_session_rec.session_id
3443  AND    schedule_id IS NULL;
3444 
3445 BEGIN
3446 
3447  FOR c_session_params_rec in c_session_params_cursor LOOP
3448      l_parameter_rec.parameter_name := c_session_params_rec.attribute_name;
3449      l_parameter_rec.parameter_description := c_session_params_rec.session_description;
3450      l_parameter_rec.parameter_value := c_session_params_rec.session_value;
3451      l_parameter_rec.period_date := c_session_params_rec.period_date;
3452      l_parameter_rec.dimension := c_session_params_rec.dimension;
3453      l_parameter_rec.operator := c_session_params_rec.operator;
3454      x_user_param_tbl(l_index) := l_parameter_rec;
3455      l_index := l_index + 1;
3456  END LOOP;
3457 
3458 EXCEPTION
3459   WHEN FND_API.G_EXC_ERROR THEN
3460        x_return_status := FND_API.G_RET_STS_ERROR;
3461        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3462   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3463        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3464        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3465   WHEN OTHERS THEN
3466        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3467        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3468 END RETRIEVE_SESSION_PARAMETERS;
3469 
3470 PROCEDURE RETRIEVE_DEFAULT_PARAMETERS
3471 (p_user_session_rec	IN	BIS_PMV_SESSION_PVT.session_rec_type
3472 ,x_user_param_tbl	OUT	NOCOPY BIS_PMV_PARAMETERS_PVT.parameter_tbl_type
3473 ,x_return_status	OUT	NOCOPY VARCHAR2
3474 ,x_msg_count		OUT	NOCOPY NUMBER
3475 ,x_msg_data		    OUT	NOCOPY VARCHAR2
3476 ) IS
3477 
3478 /*
3479  l_index NUMBER := 1;
3480  l_parameter_rec parameter_rec_type;
3481  CURSOR c_parameter_cursor IS
3482  SELECT attribute_name
3483  FROM   BIS_USER_ATTRIBUTES
3484  WHERE  user_id = p_user_session_rec.user_id
3485  AND    session_id = p_user_session_rec.session_id
3486  AND    function_name = p_user_session_rec.function_name;
3487 BEGIN
3488  FOR c_parameter_rec in c_parameter_cursor LOOP
3489      l_parameter_rec.parameter_name := c_parameter_rec.attribute_name;
3490      l_parameter_rec.default_flag := 'Y';
3491      RETRIEVE_PARAMETER (p_parameter_rec => l_parameter_rec
3492                         ,p_user_session_rec	=> p_user_session_rec
3493                         ,x_return_status => x_return_status
3494                         ,x_msg_count => x_msg_count
3495                         ,x_msg_data	=> x_msg_data);
3496      x_user_param_tbl(l_index) := l_parameter_rec;
3497      l_index := l_index + 1;
3498  END LOOP;
3499 */
3500 
3501  l_index NUMBER := 1;
3502  l_parameter_rec parameter_rec_type;
3503 
3504  CURSOR c_default_params_cursor IS
3505  SELECT attribute_name,
3506         default_description,
3507         default_value,
3508         period_date,
3509         dimension,
3510         operator
3511  FROM   BIS_USER_ATTRIBUTES
3512  WHERE  function_name = p_user_session_rec.function_name
3513  AND    user_id = p_user_session_rec.user_id
3514  AND    session_description = 'NULL'
3515  AND    session_id IS NULL;
3516 
3517 BEGIN
3518 
3519  FOR c_default_params_rec in c_default_params_cursor LOOP
3520      l_parameter_rec.parameter_name := c_default_params_rec.attribute_name;
3521      l_parameter_rec.parameter_description := c_default_params_rec.default_description;
3522      l_parameter_rec.parameter_value := c_default_params_rec.default_value;
3523      l_parameter_rec.period_date := c_default_params_rec.period_date;
3524      l_parameter_rec.dimension := c_default_params_rec.dimension;
3525      l_parameter_rec.operator := c_default_params_rec.operator;
3526      x_user_param_tbl(l_index) := l_parameter_rec;
3527      l_index := l_index + 1;
3528  END LOOP;
3529 
3530 EXCEPTION
3531   WHEN FND_API.G_EXC_ERROR THEN
3532        x_return_status := FND_API.G_RET_STS_ERROR;
3533        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3534   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3535        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3536        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3537   WHEN OTHERS THEN
3538        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3539        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3540 END RETRIEVE_DEFAULT_PARAMETERS;
3541 
3542 PROCEDURE DELETE_SESSION_PARAMETERS
3543 (p_user_session_rec	IN	BIS_PMV_SESSION_PVT.session_rec_type
3544 ,p_schedule_option      IN      VARCHAR2
3545 ,x_return_Status	OUT	NOCOPY VARCHAR2
3546 ,x_msg_count		OUT	NOCOPY NUMBER
3547 ,x_msg_data		OUT	NOCOPY VARCHAR2
3548 ) IS
3549 BEGIN
3550   IF p_schedule_option = 'NULL' THEN
3551     DELETE FROM BIS_USER_ATTRIBUTES
3552     WHERE  user_id = p_user_session_rec.user_id
3553     AND    session_id = p_user_session_rec.session_id
3554     AND    function_name = p_user_session_rec.function_name
3555     AND    schedule_id IS NULL;
3556   ELSIF p_schedule_option = 'NOT_NULL' THEN
3557     DELETE FROM BIS_USER_ATTRIBUTES
3558     WHERE  user_id = p_user_session_rec.user_id
3559     AND    session_id = p_user_session_rec.session_id
3560     AND    function_name = p_user_session_rec.function_name
3561     AND    schedule_id IS NOT NULL;
3562   ELSE
3563     DELETE FROM BIS_USER_ATTRIBUTES
3564     WHERE  user_id = p_user_session_rec.user_id
3565     AND    session_id = p_user_session_rec.session_id
3566     AND    function_name = p_user_session_rec.function_name;
3567   END IF;
3568   COMMIT;
3569 EXCEPTION
3570   WHEN FND_API.G_EXC_ERROR THEN
3571        x_return_status := FND_API.G_RET_STS_ERROR;
3572        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3573   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3574        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3575        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3576   WHEN OTHERS THEN
3577        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3578        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3579 END DELETE_SESSION_PARAMETERS;
3580 
3581 PROCEDURE DELETE_PAGE_PARAMETERS
3582 (p_user_session_rec     IN      BIS_PMV_SESSION_PVT.session_rec_type
3583 ,x_return_status        OUT     NOCOPY VARCHAR2
3584 ,x_msg_count            OUT     NOCOPY NUMBER
3585 ,x_msg_data             OUT     NOCOPY VARCHAR2
3586 )
3587 IS
3588 BEGIN
3589 	DELETE BIS_USER_ATTRIBUTES
3590         WHERE user_id = p_user_session_rec.user_id
3591         AND page_id = p_user_session_rec.page_id;
3592 	COMMIT;
3593 EXCEPTION
3594   WHEN FND_API.G_EXC_ERROR THEN
3595        x_return_status := FND_API.G_RET_STS_ERROR;
3596        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3597   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3598        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3599        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3600   WHEN OTHERS THEN
3601        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3602        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3603 
3604 END DELETE_PAGE_PARAMETERS;
3605 
3606 PROCEDURE DELETE_DEFAULT_PARAMETERS
3607 (p_user_session_rec     IN      BIS_PMV_SESSION_PVT.session_rec_type
3608 ,x_return_status        OUT     NOCOPY VARCHAR2
3609 ,x_msg_count            OUT     NOCOPY NUMBER
3610 ,x_msg_data             OUT     NOCOPY VARCHAR2
3611 )
3612 IS
3613 BEGIN
3614 	DELETE BIS_USER_ATTRIBUTES
3615         WHERE session_id is null and
3616         function_name = p_user_session_rec.function_name
3617         AND user_id=p_user_session_rec.user_id;
3618 	COMMIT;
3619 EXCEPTION
3620   WHEN FND_API.G_EXC_ERROR THEN
3621        x_return_status := FND_API.G_RET_STS_ERROR;
3622        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3623   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3624        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3625        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3626   WHEN OTHERS THEN
3627        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3628        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3629 
3630 END DELETE_DEFAULT_PARAMETERS;
3631 
3632 PROCEDURE DELETE_SCHEDULE_PARAMETERS
3633 (p_schedule_id      IN  NUMBER
3634 ,x_return_status	OUT	NOCOPY VARCHAR2
3635 ,x_msg_count		OUT	NOCOPY NUMBER
3636 ,x_msg_data	        OUT NOCOPY VARCHAR2
3637 ) IS
3638 BEGIN
3639   DELETE FROM BIS_USER_ATTRIBUTES
3640   WHERE  schedule_id = p_schedule_id;
3641   COMMIT;
3642 EXCEPTION
3643   WHEN FND_API.G_EXC_ERROR THEN
3644        ROLLBACK;
3645        x_return_status := FND_API.G_RET_STS_ERROR;
3646        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3647   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3648        ROLLBACK;
3649        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3650        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3651   WHEN OTHERS THEN
3652        ROLLBACK;
3653        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3654        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3655 END DELETE_SCHEDULE_PARAMETERS;
3656 
3657 PROCEDURE GET_NONTIME_VALIDATED_VALUE
3658 (p_parameter_name         in varchar2
3659 ,p_parameter_description       in varchar2
3660 ,p_lov_where              in varchar2 default null
3661 ,p_region_code            in varchar2
3662 ,p_responsibility_id        in varchar2
3663 ,x_parameter_value       out NOCOPY varchar2
3664 ,x_return_status	OUT	NOCOPY VARCHAR2
3665 ,x_msg_count		OUT	NOCOPY NUMBER
3666 ,x_msg_data		    OUT	NOCOPY VARCHAR2
3667 ) IS
3668 
3669    type c1_cur_type is ref cursor;
3670    c1                      c1_cur_type;
3671    v_dimn_level_value_id   varchar2(32000);
3672    v_dimn_level_value      varchar2(32000);
3673    v_sql_stmnt             varchar2(32000);
3674    v_temp_id               varchar2(32000);
3675    v_last_id               varchar2(32000);
3676 
3677    v_bind_sql              varchar2(32000);
3678    v_bind_variables        varchar2(32000);
3679    v_bind_count            number;
3680 
3681    l_and_index            NUMBER;
3682 
3683 BEGIN
3684 
3685    getLovSql(p_parameter_name => p_parameter_name
3686             ,p_parameter_description => p_parameter_description
3687             ,p_sql_type => 'VALIDATE_VALUE'
3688             ,p_region_code => p_region_code
3689             ,p_responsibility_id => p_responsibility_id
3690             ,x_sql_statement => v_sql_stmnt
3691             ,x_bind_sql => v_bind_sql
3692             ,x_bind_variables => v_bind_variables
3693             ,x_bind_count => v_bind_count
3694             ,x_return_status => x_return_status
3695             ,x_msg_count => x_msg_count
3696             ,x_msg_data	=> x_msg_data);
3697 
3698    if p_lov_where is not null then
3699       --nbarik - 05/13/03 - Bug Fix 2955560 - put extra parenthesis for product teams where clause
3700       l_and_index := instr(upper(ltrim(p_lov_where)), 'AND');
3701       --v_sql_stmnt := replace(v_sql_stmnt, 'order by', p_lov_where||' order by');
3702       IF (l_and_index = 1) THEN -- put extra parenthesis after AND
3703         v_sql_stmnt := replace(v_sql_stmnt, 'order by', 'AND ('||substr(trim(p_lov_where), 4)||') order by');
3704       ELSE
3705         v_sql_stmnt := replace(v_sql_stmnt, 'order by', p_lov_where||' order by');
3706       END IF;
3707    end if;
3708 
3709    -- aleung, 08/22/01 - need the loop for multi-lov feature
3710    open c1 for v_sql_stmnt;
3711    loop
3712       fetch c1 into v_temp_id, v_dimn_level_value;
3713       exit when c1%notfound;
3714       if v_temp_id <> v_last_id or v_last_id is null then
3715          v_dimn_level_value_id := v_dimn_level_value_id ||','''||v_temp_id||'''';
3716       end if;
3717       v_last_id := v_temp_id;
3718    end loop;
3719    close c1;
3720 
3721    x_parameter_value := substr(v_dimn_level_value_id, 2);
3722 
3723 EXCEPTION
3724   WHEN FND_API.G_EXC_ERROR THEN
3725        x_return_status := FND_API.G_RET_STS_ERROR;
3726        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3727   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3728        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3729        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3730   WHEN OTHERS THEN
3731        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3732        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3733 END GET_NONTIME_VALIDATED_VALUE;
3734 
3735 PROCEDURE GET_NONTIME_VALIDATED_ID
3736 (p_parameter_name         in varchar2
3737 ,p_parameter_value        in varchar2
3738 ,p_lov_where              in varchar2 default null
3739 ,p_region_code            in varchar2
3740 ,p_responsibility_id      in varchar2
3741 ,x_parameter_description  out NOCOPY varchar2
3742 ,x_return_status	  OUT	NOCOPY VARCHAR2
3743 ,x_msg_count		  OUT	NOCOPY NUMBER
3744 ,x_msg_data		  OUT	NOCOPY VARCHAR2
3745 ) IS
3746 
3747 /*
3748    type c1_cur_type is ref cursor;
3749    c1                      c1_cur_type;
3750 */
3751 
3752    v_id   		   varchar2(2000);
3753    v_sql_stmnt             varchar2(32000);
3754 
3755    v_bind_sql              varchar2(32000);
3756    v_bind_variables        varchar2(32000);
3757    v_bind_count            number;
3758 
3759    v_start_date date;
3760    v_end_date date;
3761 
3762 BEGIN
3763 
3764    getLovSql(p_parameter_name => p_parameter_name
3765             ,p_parameter_description => p_parameter_value
3766             ,p_sql_type => 'VALIDATE_ID'
3767             ,p_region_code => p_region_code
3768             ,p_responsibility_id => p_responsibility_id
3769             ,x_sql_statement => v_sql_stmnt
3770             ,x_bind_sql => v_bind_sql
3771             ,x_bind_variables => v_bind_variables
3772             ,x_bind_count => v_bind_count
3773             ,x_return_status => x_return_status
3774             ,x_msg_count => x_msg_count
3775             ,x_msg_data	=> x_msg_data);
3776 
3777 /*
3778    open c1 for v_sql_stmnt;
3779    loop
3780       fetch c1 into v_id, x_parameter_description;
3781       exit; --when c1%notfound;
3782    end loop;
3783    close c1;
3784 */
3785 
3786 executeLovBindSQL
3787 (p_bind_sql  => v_bind_sql
3788 ,p_bind_variables => v_bind_variables
3789 ,p_time_flag => 'N'
3790 ,x_parameter_id => v_id
3791 ,x_parameter_value => x_parameter_description
3792 ,x_start_date => v_start_date
3793 ,x_end_date => v_end_date
3794 ,x_return_status => x_return_status
3795 ,x_msg_count => x_msg_count
3796 ,x_msg_data => x_msg_data
3797 );
3798 
3799 EXCEPTION
3800   WHEN FND_API.G_EXC_ERROR THEN
3801        x_return_status := FND_API.G_RET_STS_ERROR;
3802        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3803   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3804        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3805        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3806   WHEN OTHERS THEN
3807        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3808        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3809 END GET_NONTIME_VALIDATED_ID;
3810 
3811 PROCEDURE GET_TIME_VALIDATED_VALUE
3812 (p_parameter_name           IN  VARCHAR2
3813 ,p_parameter_description    in  varchar2
3814 ,p_region_code              in  varchar2
3815 ,p_org_name                 in  varchar2
3816 ,p_org_value                in  varchar2
3817 ,p_responsibility_id        in  varchar2
3818 ,x_parameter_value          out NOCOPY varchar2
3819 ,x_start_date               out NOCOPY date
3820 ,x_end_date                 out NOCOPY date
3821 ,x_return_status	    OUT	NOCOPY VARCHAR2
3822 ,x_msg_count		    OUT	NOCOPY NUMBER
3823 ,x_msg_data		    OUT	NOCOPY VARCHAR2
3824 ) IS
3825 
3826 /*
3827    type c1_cur_type is ref cursor;
3828    c1                      c1_cur_type;
3829 */
3830    v_value                 varchar2(2000);
3831    v_sql_stmnt             varchar2(32000);
3832    v_bind_sql              varchar2(32000);
3833    v_bind_variables        varchar2(32000);
3834    v_bind_count            number;
3835 
3836 BEGIN
3837    getTimeLovSql(p_parameter_name => p_parameter_name
3838                 ,p_parameter_description => p_parameter_description
3839                 ,p_sql_type => 'VALIDATE_VALUE'
3840                 ,p_region_code => p_region_code
3841                 ,p_responsibility_id => p_responsibility_id
3842                 ,p_org_name => p_org_name
3843                 ,p_org_value => p_org_value
3844                 ,x_sql_statement => v_sql_stmnt
3845                 ,x_bind_sql => v_bind_sql
3846                 ,x_bind_variables => v_bind_variables
3847                 ,x_bind_count => v_bind_count
3848                 ,x_return_status => x_return_status
3849                 ,x_msg_count => x_msg_count
3850                 ,x_msg_data	=> x_msg_data);
3851 
3852 /*  aleung, 3/6/03, need to use dynamic cursor for binding
3853    open c1 for v_sql_stmnt;
3854    loop
3855       fetch c1 into x_parameter_value, v_value, x_start_date, x_end_date;
3856       exit;  --when c1%notfound;
3857       -- aleung, 3/2/01, obtain the first record instead of the last one
3858    end loop;
3859    close c1;
3860 */
3861 
3862 executeLovBindSQL
3863 (p_bind_sql  => v_bind_sql
3864 ,p_bind_variables => v_bind_variables
3865 ,p_time_flag => 'Y'
3866 ,x_parameter_id => x_parameter_value
3867 ,x_parameter_value => v_value
3868 ,x_start_date => x_start_date
3869 ,x_end_date => x_end_date
3870 ,x_return_status => x_return_status
3871 ,x_msg_count => x_msg_count
3872 ,x_msg_data => x_msg_data
3873 );
3874 
3875 EXCEPTION
3876   WHEN FND_API.G_EXC_ERROR THEN
3877        x_return_status := FND_API.G_RET_STS_ERROR;
3878        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3879   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3880        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3881        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3882   WHEN OTHERS THEN
3883        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3884        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3885 END GET_TIME_VALIDATED_VALUE;
3886 
3887 PROCEDURE GET_TIME_VALIDATED_ID
3888 (p_parameter_name           IN  VARCHAR2
3889 ,p_parameter_value          in  varchar2
3890 ,p_region_code              in  varchar2
3891 ,p_org_name                 in  varchar2
3892 ,p_org_value                in  varchar2
3893 ,p_responsibility_id        in  varchar2
3894 ,x_parameter_description    out NOCOPY varchar2
3895 ,x_start_date               out NOCOPY date
3896 ,x_end_date                 out NOCOPY date
3897 ,x_return_status	    OUT	NOCOPY VARCHAR2
3898 ,x_msg_count		    OUT	NOCOPY NUMBER
3899 ,x_msg_data		    OUT	NOCOPY VARCHAR2
3900 ) IS
3901 
3902 /*
3903    type c1_cur_type is ref cursor;
3904    c1                      c1_cur_type;
3905 */
3906 
3907    v_id                    varchar2(2000);
3908    v_sql_stmnt             varchar2(32000);
3909    v_bind_sql              varchar2(32000);
3910    v_bind_variables        varchar2(32000);
3911    v_bind_count            number;
3912 
3913 BEGIN
3914 
3915    getTimeLovSql(p_parameter_name => p_parameter_name
3916                 ,p_parameter_description => p_parameter_value
3917                 ,p_sql_type => 'VALIDATE_ID'
3918                 ,p_region_code => p_region_code
3919                 ,p_responsibility_id => p_responsibility_id
3920                 ,p_org_name => p_org_name
3921                 ,p_org_value => p_org_value
3922                 ,x_sql_statement => v_sql_stmnt
3923                 ,x_bind_sql => v_bind_sql
3924                 ,x_bind_variables => v_bind_variables
3925                 ,x_bind_count => v_bind_count
3926                 ,x_return_status => x_return_status
3927                 ,x_msg_count => x_msg_count
3928                 ,x_msg_data => x_msg_data);
3929 
3930 /* aleung, 3/6/03, need to use dynamic cursor for binding
3931    open c1 for v_sql_stmnt;
3932    loop
3933       fetch c1 into v_id, x_parameter_description, x_start_date, x_end_date;
3934       exit;  --when c1%notfound;
3935       -- aleung, 3/2/01, obtain the first record instead of the last one
3936    end loop;
3937    close c1;
3938 */
3939 
3940 executeLovBindSQL
3941 (p_bind_sql  => v_bind_sql
3942 ,p_bind_variables => v_bind_variables
3943 ,p_time_flag => 'Y'
3944 ,x_parameter_id => v_id
3945 ,x_parameter_value => x_parameter_description
3946 ,x_start_date => x_start_date
3947 ,x_end_date => x_end_date
3948 ,x_return_status => x_return_status
3949 ,x_msg_count => x_msg_count
3950 ,x_msg_data => x_msg_data
3951 );
3952 
3953 EXCEPTION
3954   WHEN FND_API.G_EXC_ERROR THEN
3955        x_return_status := FND_API.G_RET_STS_ERROR;
3956        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3957   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3958        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3959        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3960   WHEN OTHERS THEN
3961        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3962        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
3963 END GET_TIME_VALIDATED_ID;
3964 
3965 PROCEDURE GET_TIME_INFO
3966 (p_region_code            in  varchar2
3967 ,p_responsibility_id      in  varchar2
3968 ,p_parameter_name         in  varchar2
3969 ,p_mode                   in  varchar2
3970 ,p_date                   in  varchar2
3971 ,x_time_description       out NOCOPY varchar2
3972 ,x_time_id                out NOCOPY varchar2
3973 ,x_start_date             out NOCOPY date
3974 ,x_end_date               out NOCOPY date
3975 ,x_return_status          OUT NOCOPY VARCHAR2
3976 ,x_msg_count              OUT NOCOPY NUMBER
3977 ,x_msg_data               OUT NOCOPY VARCHAR2
3978 ) IS
3979 
3980    type c1_cur_type is ref cursor;
3981    c1                      c1_cur_type;
3982    v_sql_stmnt             varchar2(32000);
3983    v_bind_sql              varchar2(32000);
3984    v_bind_variables        varchar2(32000);
3985    v_bind_count            number;
3986    v_time_id               varchar2(80);
3987    v_start_date            date;
3988    v_end_date              date;
3989    v_date                  varchar2(100);
3990 BEGIN
3991 
3992    getTimeLovSql(p_parameter_name => p_parameter_name
3993                 ,p_parameter_description => null
3994                 ,p_sql_type => p_mode
3995                 ,p_date  => p_date
3996                 ,p_region_code => p_region_code
3997                 ,p_responsibility_id => p_responsibility_id
3998                 ,p_org_name => null
3999                 ,p_org_value => null
4000                 ,x_sql_statement => v_sql_stmnt
4001                 ,x_bind_sql => v_bind_sql
4002                 ,x_bind_variables => v_bind_variables
4003                 ,x_bind_count => v_bind_count
4004                 ,x_return_status => x_return_status
4005                 ,x_msg_count => x_msg_count
4006                 ,x_msg_data     => x_msg_data);
4007 
4008    if p_date is null or length(p_date) = 0 then
4009       v_date := SYSDATE;
4010    else
4011       v_date := p_date;
4012    end if;
4013 
4014    open c1 for v_bind_sql using v_date;
4015    --open c1 for v_sql_stmnt;
4016    loop
4017       fetch c1 into x_time_id, x_time_description, x_start_date, x_end_date;
4018       exit;  --when c1%notfound;
4019       -- aleung, 3/2/01, obtain the first record instead of the last one
4020    end loop;
4021    close c1;
4022 
4023 EXCEPTION
4024   WHEN FND_API.G_EXC_ERROR THEN
4025        x_return_status := FND_API.G_RET_STS_ERROR;
4026        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
4027   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4028        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4029        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
4030   WHEN OTHERS THEN
4031        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4032        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
4033 END GET_TIME_INFO;
4034 
4035 PROCEDURE getLOVSQL
4036 (p_parameter_name  in varchar2
4037 ,p_parameter_description       in varchar2
4038 ,p_sql_type               in varchar2 default null
4039 ,p_region_code            in varchar2
4040 ,p_responsibility_id        in varchar2
4041 ,x_sql_statement         out NOCOPY varchar2
4042 ,x_bind_sql              out NOCOPY varchar2
4043 ,x_bind_variables        out NOCOPY varchar2
4044 ,x_bind_count            out NOCOPY number
4045 ,x_return_status	OUT	NOCOPY VARCHAR2
4046 ,x_msg_count		OUT	NOCOPY NUMBER
4047 ,x_msg_data		    OUT	NOCOPY VARCHAR2
4048 ) is
4049 
4050 /*
4051 cursor c_level_values_view_name (cp_parameter_name varchar2, cp_region_code varchar2) is
4052       select attribute15 level_values_view_name, substr(attribute2, 1, instr(attribute2, '+')-1) dimension ,substr(attribute2,instr(attribute2, '+')+1) dimension_level
4053       from   ak_region_items_vl
4054       where  nvl(attribute2,attribute_code) = rtrim(cp_parameter_name)
4055       and  region_code  = rtrim(cp_region_code);
4056 
4057 	  ----GSANAP for EDW purposes 10/17/00
4058 cursor c_edw_level_values_view_name (cp_parameter_name varchar2, cp_region_code varchar2) is
4059       select vl.attribute15 level_values_view_name, substr(vl.attribute2, instr(vl.attribute2, '+')+1) dimension_level
4060         from ak_region_items_vl vl, ak_regions r
4061        where nvl(vl.attribute2,vl.attribute_code) LIKE rtrim(cp_parameter_name)
4062          and vl.region_code  = rtrim(cp_region_code)
4063          and vl.region_code = r.region_code
4064          and lower(r.region_object_type) = 'edw' ;
4065 */
4066 
4067 --aleung, 9/26/02, combine the 2 above cursors into 1
4068 --ksadagop BugFix 3351910, added lov where clause
4069 cursor c_level_values_view_name (cp_parameter_name varchar2, cp_region_code varchar2) is
4070        select vl.attribute15,  -- level view name
4071               substr(vl.attribute2, 1, instr(vl.attribute2,'+')-1), -- dimension
4072               substr(vl.attribute2, instr(vl.attribute2,'+')+1), -- dimension level
4073               nvl(r.region_object_type, 'OLTP'), -- level type
4074 	          vl.attribute4  -- lov where clause
4075        from   ak_region_items vl, ak_regions r
4076        where  nvl(vl.attribute2,vl.attribute_code) = rtrim(cp_parameter_name)
4077        and    vl.region_code  = rtrim(cp_region_code)
4078        and    vl.region_code = r.region_code;
4079 
4080    v_edw_level_values_view_name  varchar2(2000) := null;
4081    vEdwDimensionLevel            varchar2(2000)  := null;
4082 
4083    v_level_values_view_name  varchar2(32000);
4084    v_sql_stmnt               varchar2(32000);
4085    v_bind_sql                varchar2(32000);
4086    v_bind_variables          varchar2(32000);
4087    v_bind_count              number := 0;
4088    vDimension                varchar2(32000);
4089    vDimensionLevel           varchar2(32000);
4090    vLevelType                varchar2(100);
4091    vLovWhereClause           varchar2(32000);
4092 
4093    v_table_name VARCHAR2(32000);
4094    v_id_name VARCHAR2(32000) := 'ID';
4095    v_value_name VARCHAR2(32000) := 'VALUE';
4096    v_return_status VARCHAR2(32000);
4097    v_msg_count NUMBER;
4098    v_msg_data VARCHAR2(32000);
4099     --bind variables introduced for performance fix 2641735 -ansingh.
4100     v_bindVar_1 varchar2(3);
4101     v_bindVar_2 varchar2(3);
4102     v_bindVar_3 varchar2(3);
4103     v_bindVar_4 varchar2(3);
4104 
4105 	/* Bug Fix : 3044997 */
4106    	v_index1 number := 0 ;
4107    	v_index2 number := 0 ;
4108    	v_parameter_name varchar2(2000) ;
4109 
4110 BEGIN
4111 
4112 /*
4113    -- validate LOV value
4114    open c_level_values_view_name (p_parameter_name,p_region_code);
4115    fetch c_level_values_view_name into v_level_values_view_name, vDimension, vDimensionLevel;
4116    close c_level_values_view_name;
4117 
4118  ----GSANAP for EDW purposes 10/17/00
4119    open c_edw_level_values_view_name (p_parameter_name,p_region_code);
4120    fetch c_edw_level_values_view_name into v_edw_level_values_view_name, vEdwDimensionLevel;
4121    close c_edw_level_values_view_name;
4122 */
4123 
4124 	/* Bug Fix : 3044997 */
4125 --  Parameter Names of repeated dimension items are in the form A+B+C,A+B+D etc
4126 --  Need to pass A+B to c_level_values_view_name
4127 -- open c_level_values_view_name (p_parameter_name,p_region_code);
4128    v_parameter_name := p_parameter_name ;
4129    v_index1 := instr(p_parameter_name,'+') ;
4130    v_index2 := instr(p_parameter_name, '+', v_index1+1) ;
4131    if ((v_index2 > 0) AND (v_index2 > v_index1)) then
4132         v_parameter_name := substr(p_parameter_name,1,v_index2-1);
4133    end if ;
4134 
4135    --ksadagop BugFix 3351910, added lov where clause
4136    open c_level_values_view_name (v_parameter_name,p_region_code);
4137    fetch c_level_values_view_name into v_level_values_view_name, vDimension, vDimensionLevel, vLevelType, vLovWhereClause;
4138    close c_level_values_view_name;
4139    if upper(vLevelType) = 'EDW' then
4140       vLevelType := 'EDW';
4141    else
4142       vLevelType := 'OLTP';
4143    end if;
4144 
4145    if v_level_values_view_name is not null then
4146      v_sql_stmnt := 'select '||v_id_name||', '||v_value_name||' from '||v_level_values_view_name;
4147    else
4148      BIS_PMF_GET_DIMLEVELS_PUB.GET_DIMLEVEL_SELECT_STRING(
4149         p_DimLevelShortName => vDimensionLevel
4150         ,p_bis_source => vLevelType
4151         ,x_Select_String => v_sql_stmnt
4152         ,x_table_name=>     v_table_name
4153         ,x_id_name=>        v_id_name
4154         ,x_value_name=>     v_value_name
4155         ,x_return_status=>  v_return_status
4156         ,x_msg_count=>      v_msg_count
4157         ,x_msg_data=>       v_msg_data
4158       );
4159    end if;
4160 
4161 /*
4162    if vEdwDimensionLevel is not null then
4163 
4164 --aleung, 4/16/2001, check to see if user has defined the LOV Table in AK
4165 if v_edw_level_values_view_name is not null then
4166      v_sql_stmnt := 'select '||v_id_name||', '||v_value_name||' from '||
4167                      v_edw_level_values_view_name;
4168 else
4169      BIS_PMF_GET_DIMLEVELS_PUB.GET_DIMLEVEL_SELECT_STRING(
4170         p_DimLevelShortName => vEdwDimensionLevel
4171         ,p_bis_source => 'EDW'
4172         ,x_Select_String => v_sql_stmnt
4173         ,x_table_name=>     v_table_name
4174         ,x_id_name=>        v_id_name
4175         ,x_value_name=>     v_value_name
4176         ,x_return_status=>  v_return_status
4177         ,x_msg_count=>      v_msg_count
4178         ,x_msg_data=>       v_msg_data
4179       );
4180 end if;
4181 
4182    else -- vEdwDimensionLevel is null
4183 
4184 --aleung, 4/16/2001, check to see if user has defined the LOV Table in AK
4185 if v_level_values_view_name is not null then
4186      v_sql_stmnt := 'select '||v_id_name||', '||v_value_name||' from '||
4187                      v_level_values_view_name;
4188 else
4189        BIS_PMF_GET_DIMLEVELS_PUB.GET_DIMLEVEL_SELECT_STRING(
4190          p_DimLevelShortName => vDimensionLevel
4191          ,p_bis_source => 'OLTP'
4192          ,x_Select_String => v_sql_stmnt
4193          ,x_table_name=>     v_table_name
4194          ,x_id_name=>        v_id_name
4195          ,x_value_name=>     v_value_name
4196          ,x_return_status=>  v_return_status
4197          ,x_msg_count=>      v_msg_count
4198          ,x_msg_data=>       v_msg_data
4199        );
4200 end if;
4201 
4202     end if; -- end of constructing the select string
4203 */
4204 
4205  v_bind_sql := v_sql_stmnt;
4206 
4207  if v_return_status = FND_API.G_RET_STS_ERROR then
4208     for i in 1..v_msg_count loop
4209         htp.print(fnd_msg_pub.get(p_msg_index=>i, p_encoded=>FND_API.G_FALSE));
4210     end loop;
4211  end if;
4212 
4213 if (upper(nvl(p_parameter_description, G_ALL)) <> upper(G_ALL) AND trim(p_parameter_description) <> '%')  then
4214 
4215 if p_sql_type = 'VALIDATE_ID' then
4216   v_sql_stmnt := v_sql_stmnt || ' where ' || v_id_name || '=''' || p_parameter_description || '''';
4217   v_bind_count := v_bind_count + 1;
4218   v_bind_sql := v_bind_sql || ' where ' || v_id_name || '= :'||v_bind_count;
4219   v_bind_variables := v_bind_variables||'~'||p_parameter_description;
4220 else
4221  if p_sql_type = 'LOV' then
4222     if instr(p_parameter_description,',,') > 0 then
4223        v_sql_stmnt := v_sql_stmnt || ' where lower('||v_value_name||') in ';
4224        v_bind_sql := v_bind_sql || ' where lower('||v_value_name||') in ';
4225     else
4226        v_sql_stmnt := v_sql_stmnt || ' where lower('||v_value_name||') like ';
4227        v_bind_sql := v_bind_sql || ' where lower('||v_value_name||') like ';
4228     end if;
4229  elsif instr(p_parameter_description,',,') > 0 then
4230     v_sql_stmnt := v_sql_stmnt || ' where '||v_value_name||' in ';
4231     v_bind_sql := v_bind_sql || ' where '||v_value_name||' in ';
4232 /*
4233 --BugFix#2537114 -Anoop Start
4234  elsif (upper(nvl(p_parameter_description, G_ALL)) = upper(G_ALL) OR trim(p_parameter_description) = '%')  then
4235 	 v_sql_stmnt := v_sql_stmnt ||' where '||v_value_name||' like ';
4236 	 v_bind_sql := v_bind_sql ||' where '||v_value_name||' like ';
4237 --BugFix#2537114 -Anoop End
4238 */
4239  else
4240     v_sql_stmnt := v_sql_stmnt || ' where '||v_value_name||' = ';
4241     v_bind_sql := v_bind_sql || ' where '||v_value_name||' = ';
4242  end if;
4243 /*
4244 --     if p_parameter_description = G_ALL then
4245      if upper(nvl(p_parameter_description, G_ALL)) = upper(G_ALL) then
4246         v_sql_stmnt := v_sql_stmnt||'''%''';
4247         v_bind_count := v_bind_count + 1;
4248         v_bind_sql := v_bind_sql||':'||v_bind_count;
4249         v_bind_variables := v_bind_variables ||'~%';
4250      else
4251 */
4252         if p_sql_type = 'LOV' then
4253            if instr(p_parameter_description, ',,')>0 then
4254               v_sql_stmnt := v_sql_stmnt||'('''||replace(replace(replace(lower(p_parameter_description),'''',''''''),',,',''','''),''' ','''')||''')';
4255               v_bind_sql := v_bind_sql||'('''||replace(replace(replace(lower(p_parameter_description),'''',''''''),',,',''','''),'''','''')||''')';
4256            else
4257               v_sql_stmnt := v_sql_stmnt||''''||'%'||replace(lower(p_parameter_description),'''','''''')||'%''';
4258               v_bind_count := v_bind_count + 1;
4259               v_bind_sql := v_bind_sql||':'||v_bind_count;
4260               v_bind_variables := v_bind_variables||'~%'||lower(p_parameter_description)||'%';	--add % before the input  -ansingh
4261 	  		  --bind variables introduced for performance fix 2641735 -ansingh.
4262               if (length(p_parameter_description) > 2) then
4263 			      v_bindVar_1 := lower(SUBSTR(p_parameter_description, 1, 2));
4264 			      v_bindVar_2 := upper(SUBSTR(p_parameter_description, 1, 2));
4265 			      v_bindVar_3 := upper(SUBSTR(p_parameter_description, 1, 1)) || lower(SUBSTR(p_parameter_description, 2, 1));
4266 			      v_bindVar_4 := lower(SUBSTR(p_parameter_description, 1, 1)) || upper(SUBSTR(p_parameter_description, 2, 1));
4267 	              --bind sql
4268 	  		      v_bind_sql := v_bind_sql || ' AND ( ';
4269 			      for i in 1..4 loop
4270 			          v_bind_count := v_bind_count + 1;
4271 			          v_bind_sql := v_bind_sql || v_value_name || ' like :' || v_bind_count;
4272 			          if (i<>4) then
4273 			              v_bind_sql := v_bind_sql || ' OR ';
4274 			          else
4275 			              v_bind_sql := v_bind_sql || ' ) ';
4276 			          end if;
4277 			      end loop;
4278 	              --bind variables
4279 			      v_bind_variables := v_bind_variables||'~%'|| v_bindVar_1 || '%~%' || v_bindVar_2 || '%~%' || v_bindVar_3 || '%~%' || v_bindVar_4 || '%';   --add % before the input  -ansingh
4280               elsif (length(p_parameter_description) = 2) then
4281 			      v_bindVar_1 := upper(SUBSTR(p_parameter_description, 1, 1)) || lower(SUBSTR(p_parameter_description, 2, 1));
4282 			      v_bindVar_2 := lower(SUBSTR(p_parameter_description, 1, 1)) || upper(SUBSTR(p_parameter_description, 2, 1));
4283 	              --bind sql
4284 	  		      v_bind_sql := v_bind_sql || ' AND ( ';
4285 			      for i in 1..2 loop
4286 			          v_bind_count := v_bind_count + 1;
4287 			          v_bind_sql := v_bind_sql || v_value_name || ' like :' || v_bind_count;
4288 			          if (i<>2) then
4289 			              v_bind_sql := v_bind_sql || ' OR ';
4290 			          else
4291 			              v_bind_sql := v_bind_sql || ' ) ';
4292 			          end if;
4293 			      end loop;
4294 	              --bind variables
4295 			      v_bind_variables := v_bind_variables||'~%'|| v_bindVar_1 || '%~%' || v_bindVar_2 || '%';			--add % before the input  -ansingh
4296               end if;
4297            end if;
4298         elsif instr(p_parameter_description, ',,')>0 then
4299            v_sql_stmnt := v_sql_stmnt||'('''||replace(replace(replace(p_parameter_description,'''',''''''),',,',''','''),''' ','''')||''')';
4300            v_bind_sql := v_bind_sql||'('''||replace(replace(replace(p_parameter_description,'''',''''''),',,',''','''),''' ','''')||''')';
4301         else
4302            v_sql_stmnt := v_sql_stmnt||''''||replace(p_parameter_description,'''','''''')||'''';
4303            v_bind_count := v_bind_count + 1;
4304            v_bind_sql := v_bind_sql||':'||v_bind_count;
4305            v_bind_variables := v_bind_variables||'~'||p_parameter_description;
4306         end if;
4307      --end if;
4308 end if;
4309   --ksadagop BugFix 3351910, added lov where clause
4310   if (length(trim(vLovWhereClause)) > 0 and instr(trim(vLovWhereClause),'{') = 0) then
4311     v_sql_stmnt := v_sql_stmnt || ' ' || vLovWhereClause;
4312     v_bind_sql := v_bind_sql || ' ' || vLovWhereClause;
4313   end if;
4314 else
4315   v_sql_stmnt := v_sql_stmnt || ' where 1=1 ';
4316   v_bind_sql := v_bind_sql || ' where 1=1 ';
4317 end if; -- end of constructing the where clause
4318 
4319      --sess_id , aleung, 1/8/2001, remove dependency on responsibility id
4320      --assuming same organization dimension level value has same value id
4321      --for non-EDW reports
4322      if vLevelType = 'OLTP' and vDimension = 'ORGANIZATION' and p_responsibility_id <> 'NULL'
4323      and vDimensionLevel in ('LEGAL ENTITY','OPERATING UNIT','HR ORGANIZATION','ORGANIZATION','SET OF BOOKS',
4324      'BUSINESS GROUP','HRI_ORG_HRCY_BX','HRI_ORG_HRCYVRSN_BX','HRI_ORG_HR_HX','HRI_ORG_INHV_H','HRI_ORG_SSUP_H',
4325      'HRI_ORG_BGR_HX','HRI_ORG_HR_H','HRI_ORG_SRHL') then
4326           v_sql_stmnt := v_sql_stmnt || ' and responsibility_id = ' || '' || p_responsibility_id || '';
4327           v_bind_count := v_bind_count + 1;
4328           v_bind_sql := v_bind_sql || ' and responsibility_id = :'|| v_bind_count;
4329           v_bind_variables := v_bind_variables||'~'||p_responsibility_id;
4330      end if;
4331 
4332   if p_sql_type <> 'VALIDATE_ID' then
4333      v_sql_stmnt := v_sql_stmnt ||' order by '||v_value_name;
4334      v_bind_sql := v_bind_sql ||' order by '||v_value_name;
4335   end if;
4336 
4337      x_sql_statement := v_sql_stmnt;
4338      x_bind_sql := v_bind_sql;
4339      x_bind_variables := v_bind_variables;
4340      x_bind_count := v_bind_count;
4341 
4342 EXCEPTION
4343   WHEN FND_API.G_EXC_ERROR THEN
4344        x_return_status := FND_API.G_RET_STS_ERROR;
4345        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
4346   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4347        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4348        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
4349   WHEN OTHERS THEN
4350        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4351        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
4352 END getLOVSQL;
4353 
4354 PROCEDURE getTimeLovSql
4355 (p_parameter_name in varchar2
4356 ,p_parameter_description in varchar2
4357 ,p_sql_type              in varchar2 default null
4358 ,p_date                  in varchar2 default null
4359 ,p_region_code           in varchar2
4360 ,p_responsibility_id       in varchar2
4361 ,p_org_name               in varchar2
4362 ,p_org_value               in varchar2
4363 ,x_sql_statement        out NOCOPY varchar2
4364 ,x_bind_sql             out NOCOPY varchar2
4365 ,x_bind_variables       out NOCOPY varchar2
4366 ,x_bind_count           out NOCOPY number
4367 ,x_return_status	OUT	NOCOPY VARCHAR2
4368 ,x_msg_count		OUT	NOCOPY NUMBER
4369 ,x_msg_data		    OUT	NOCOPY VARCHAR2
4370 )is
4371 
4372 /*
4373 cursor c_level_values_view_name (cp_parameter_name varchar2, cp_region_code varchar2) is
4374       select attribute15 level_values_view_name, substr(attribute2,instr(attribute2, '+')+1) dimension_level
4375       from   ak_region_items_vl
4376       where  nvl(attribute2,attribute_code) = rtrim(cp_parameter_name)
4377       and  region_code  = rtrim(cp_region_code);
4378 
4379 	    ----GSANAP for EDW purposes 10/17/00
4380       cursor c_edw_tmlvl_values_view_name (cp_parameter_name varchar2, cp_region_code varchar2) is
4381       select vl.attribute15 edw_level_values_view_name, substr(vl.attribute2, instr(vl.attribute2, '+')+1) dimension_level
4382         from ak_region_items_vl vl, ak_regions r
4383        where nvl(vl.attribute2,vl.attribute_code) LIKE rtrim(cp_parameter_name)
4384          and vl.region_code  = rtrim(cp_region_code)
4385          and vl.region_code = r.region_code
4386          and lower(r.region_object_type) = 'edw';
4387 */
4388       --aleung, 9/26/02, combine the above 2 cursors into 1
4389       cursor c_tmlvl_values_view_name (cp_parameter_name varchar2, cp_region_code varchar2) is
4390       select vl.attribute15, -- view name
4391              substr(vl.attribute2, instr(vl.attribute2, '+')+1), -- dimension level
4392              nvl(r.region_object_type, 'OLTP') -- level type
4393         from ak_region_items vl, ak_regions r
4394        where nvl(vl.attribute2,vl.attribute_code) = rtrim(cp_parameter_name)
4395          and vl.region_code  = rtrim(cp_region_code)
4396          and vl.region_code = r.region_code;
4397 
4398        cursor c_nested_region(cp_region_code varchar2) is
4399        select  nested_region_code
4400          from  ak_region_items
4401          where region_code = cp_region_code
4402          and   nested_region_code is not null;
4403 
4404    v_edw_tmlvl_values_view_name   varchar2(2000) := null;
4405 
4406    v_level_values_view_name   varchar2(2000);
4407    v_sql_stmnt                varchar2(32000);
4408    v_bind_sql                 varchar2(32000);
4409    v_bind_variables           varchar2(32000);
4410    v_bind_count               number := 0;
4411    vAttributeName             varchar2(2000);
4412    vOrgId                     varchar2(2000);
4413 
4414    vLevelType                 varchar2(100);
4415    vEdwDimensionLevel            varchar2(2000);
4416    vDimensionLevel               varchar2(2000);
4417    v_table_name VARCHAR2(2000);
4418    v_id_name VARCHAR2(2000) := 'ID';
4419    v_value_name VARCHAR2(2000) := 'VALUE';
4420    v_return_status VARCHAR2(2000);
4421    v_msg_count NUMBER;
4422    v_msg_data VARCHAR2(2000);
4423 
4424    v_date varchar2(100);
4425    l_nested_region_code varchar2(240);
4426    vDimension varchar2(2000);
4427 
4428 BEGIN
4429 
4430  if p_date is null or length(p_date) = 0 then
4431     v_date := SYSDATE;
4432  else
4433     v_date := p_date;
4434  end if;
4435 
4436 /*
4437    -- validate LOV value
4438    open c_level_values_view_name (p_parameter_name,p_region_code);
4439    fetch c_level_values_view_name into v_level_values_view_name, vDimensionLevel;
4440    close c_level_values_view_name;
4441 
4442 ----GSANAP 10/17/00 for EDW purposes
4443    open c_edw_tmlvl_values_view_name (p_parameter_name,p_region_code);
4444    fetch c_edw_tmlvl_values_view_name into v_edw_tmlvl_values_view_name, vEdwDimensionLevel;
4445    close c_edw_tmlvl_values_view_name;
4446 */
4447  if (p_region_code is null or length(p_region_code) = 0) then
4448     vDimension := substr(p_parameter_name ,1,instr(p_parameter_name ,'+')-1);
4449     if upper(vDimension) = 'EDW_TIME_M' then
4450         vEdwDimensionLevel := substr(p_parameter_name, instr(p_parameter_name, '+')+1);
4451     else
4452         vDimensionLevel := substr(p_parameter_name, instr(p_parameter_name, '+')+1);
4453     end if;
4454  else
4455    BEGIN
4456      open c_tmlvl_values_view_name (p_parameter_name,p_region_code);
4457      fetch c_tmlvl_values_view_name into v_level_values_view_name, vDimensionLevel, vLevelType;
4458      close c_tmlvl_values_view_name;
4459    EXCEPTION WHEN OTHERS THEN
4460      NULL;
4461    END;
4462 
4463    if(vDimensionLevel is null) then
4464      open c_nested_region(p_region_code);
4465      fetch c_nested_region into l_nested_region_code;
4466      close c_nested_region;
4467      if(l_nested_region_code is not null) then
4468        open c_tmlvl_values_view_name (p_parameter_name,l_nested_region_code);
4469        fetch c_tmlvl_values_view_name into v_level_values_view_name, vDimensionLevel, vLevelType;
4470        close c_tmlvl_values_view_name;
4471      end if;
4472    end if;
4473 
4474 
4475    if upper(vLevelType) = 'EDW' then
4476       v_edw_tmlvl_values_view_name := v_level_values_view_name;
4477       vEdwDimensionLevel := vDimensionLevel;
4478    end if;
4479  end if;
4480 
4481    if  vEdwDimensionLevel is not null then
4482 --aleung, 4/16/2001, check to see if user has defined the LOV Table in AK
4483 if v_edw_tmlvl_values_view_name is not null then
4484      v_sql_stmnt := 'select distinct '||v_id_name||', '||v_value_name;
4485      if rtrim(ltrim(vEdwDimensionLevel)) <> 'EDW_TIME_A' then
4486          v_sql_stmnt := v_sql_stmnt || ', start_date, end_date';
4487      end if;
4488 
4489 --BugFix#2537114 this should be ' from ' and not 'from ' -Anoop
4490 --     v_sql_stmnt := v_sql_stmnt || 'from '||v_edw_tmlvl_values_view_name;
4491 
4492      v_sql_stmnt := v_sql_stmnt || ' from '||v_edw_tmlvl_values_view_name;
4493      v_table_name := v_edw_tmlvl_values_view_name;
4494 else
4495 	 BIS_PMF_GET_DIMLEVELS_PUB.GET_DIMLEVEL_SELECT_STRING(
4496          p_DimLevelShortName => vEdwDimensionLevel
4497          ,p_bis_source => 'EDW'
4498          ,x_Select_String => v_sql_stmnt
4499          ,x_table_name=>     v_table_name
4500          ,x_id_name=>        v_id_name
4501          ,x_value_name=>     v_value_name
4502          ,x_return_status=>  v_return_status
4503          ,x_msg_count=>      v_msg_count
4504          ,x_msg_data=>       v_msg_data
4505        );
4506       --end if;
4507       if v_return_status = FND_API.G_RET_STS_ERROR then
4508          for i in 1..v_msg_count loop
4509              htp.print(fnd_msg_pub.get(p_msg_index=>i, p_encoded=>FND_API.G_FALSE));
4510          end loop;
4511       end if;
4512 
4513       if rtrim(ltrim(vEdwDimensionLevel)) = 'EDW_TIME_A' then
4514          v_sql_stmnt := 'select distinct '||v_id_name||', '||v_value_name||' from '||v_table_name;
4515       end if;
4516 end if;
4517 
4518  v_bind_sql := v_sql_stmnt;
4519 
4520  -- Change this to v_date - amkulkar
4521  if p_sql_type = 'GET_CURRENT' then
4522     v_sql_stmnt := v_sql_stmnt || ' where ''' ||v_date||''' between start_date and end_date ';
4523     v_bind_count := v_bind_count + 1;
4524     v_bind_sql := v_bind_sql || ' where :'||v_bind_count||' between start_date and end_date ';
4525     v_bind_variables := v_bind_variables||'~'||v_date;
4526  elsif p_sql_type = 'GET_PREVIOUS' then
4527     v_sql_stmnt := v_sql_stmnt || ' where end_date = (select max(end_date) from '
4528                                || v_table_name || ' where ''' ||v_date|| ''' > end_date) ';
4529     v_bind_count := v_bind_count + 1;
4530     v_bind_sql := v_bind_sql || ' where end_date = (select max(end_date) from '
4531                              || v_table_name || ' where :' ||v_bind_count|| ' > end_date) ';
4532     v_bind_variables := v_bind_variables||'~'||v_date;
4533  elsif p_sql_type = 'GET_NEXT' then
4534     v_sql_stmnt := v_sql_stmnt || ' where start_date = (select min(start_date) from '
4535                                || v_table_name || ' where ''' ||v_date|| ''' < start_date) ';
4536     v_bind_count := v_bind_count + 1;
4537     v_bind_sql := v_bind_sql || ' where start_date = (select min(start_date) from '
4538                              || v_table_name || ' where :' ||v_bind_count|| ' < start_date) ';
4539     v_bind_variables := v_bind_variables||'~'||v_date;
4540  else
4541 
4542   if (upper(nvl(p_parameter_description, G_ALL)) <> upper(G_ALL) AND trim(p_parameter_description) <> '%')  then
4543     if p_sql_type = 'VALIDATE_ID' then
4544       v_sql_stmnt := v_sql_stmnt || ' where ' || v_id_name || '=''' || p_parameter_description || '''';
4545       v_bind_count := v_bind_count + 1;
4546       v_bind_sql := v_bind_sql || ' where ' || v_id_name || '= :' || v_bind_count;
4547       v_bind_variables := v_bind_variables||'~'||p_parameter_description;
4548     else
4549       if p_sql_type = 'LOV' then
4550 	 v_sql_stmnt := v_sql_stmnt ||' where lower('||v_value_name||') like ';
4551 	 v_bind_sql := v_bind_sql ||' where lower('||v_value_name||') like ';
4552 /*
4553       elsif p_parameter_description = G_ALL then
4554 	 v_sql_stmnt := v_sql_stmnt ||' where '||v_value_name||' like ';
4555 	 v_bind_sql := v_bind_sql ||' where '||v_value_name||' like ';
4556 */
4557 
4558       else
4559 	 v_sql_stmnt := v_sql_stmnt ||' where '||v_value_name||' = ';
4560 	 v_bind_sql := v_bind_sql ||' where '||v_value_name||' = ';
4561       end if;
4562 /*
4563       if p_parameter_description = G_ALL then
4564          v_sql_stmnt := v_sql_stmnt||'''%''';
4565          v_bind_count := v_bind_count + 1;
4566          v_bind_sql := v_bind_sql||':'||v_bind_count;
4567          v_bind_variables := v_bind_variables || '~%';
4568       else
4569 */
4570          if p_sql_type = 'LOV' then
4571             v_sql_stmnt := v_sql_stmnt||'''%'||replace(lower(p_parameter_description),'''','''''')||'%''';
4572             v_bind_count := v_bind_count + 1;
4573             v_bind_sql := v_bind_sql||':'||v_bind_count;
4574             v_bind_variables := v_bind_variables||'~%'||lower(p_parameter_description)||'%'; --rcmuthuk: Prepend % before parameter
4575          else
4576             v_sql_stmnt := v_sql_stmnt||''''||replace(p_parameter_description,'''','''''')||'''';
4577             v_bind_count := v_bind_count + 1;
4578             v_bind_sql := v_bind_sql||':'||v_bind_count;
4579             v_bind_variables := v_bind_variables||'~'||p_parameter_description;
4580          end if;
4581       --end if;
4582      end if; -- end of validate_id
4583    end if; --end of if not all
4584 
4585       if rtrim(ltrim(vEdwDimensionLevel)) <> 'EDW_TIME_A' then
4586          v_sql_stmnt := v_sql_stmnt||' order by start_date';
4587          v_bind_sql := v_bind_sql||' order by start_date';
4588       end if;
4589  end if;
4590 
4591       x_sql_statement := v_sql_stmnt;
4592       x_bind_sql := v_bind_sql;
4593       x_bind_variables := v_bind_variables;
4594       x_bind_count := v_bind_count;
4595 
4596    else
4597 
4598 
4599 --aleung, 4/16/2001, check to see if user has defined the LOV Table in AK
4600 if v_level_values_view_name is not null then
4601      v_sql_stmnt := 'select '||v_id_name||', '||v_value_name||', start_date, end_date from '||
4602                      v_level_values_view_name;
4603      v_table_name := v_level_values_view_name;
4604 else
4605        BIS_PMF_GET_DIMLEVELS_PUB.GET_DIMLEVEL_SELECT_STRING(
4606          p_DimLevelShortName => vDimensionLevel
4607          ,p_bis_source => 'OLTP'
4608          ,x_Select_String => v_sql_stmnt
4609          ,x_table_name=>     v_table_name
4610          ,x_id_name=>        v_id_name
4611          ,x_value_name=>     v_value_name
4612          ,x_return_status=>  v_return_status
4613          ,x_msg_count=>      v_msg_count
4614          ,x_msg_data=>       v_msg_data
4615        );
4616 
4617        if v_return_status = FND_API.G_RET_STS_ERROR then
4618           for i in 1..v_msg_count loop
4619               htp.print(fnd_msg_pub.get(p_msg_index=>i, p_encoded=>FND_API.G_FALSE));
4620           end loop;
4621        end if;
4622 end if;
4623 
4624  v_bind_sql := v_sql_stmnt;
4625 
4626  if p_sql_type = 'GET_CURRENT' then
4627     v_sql_stmnt := v_sql_stmnt || ' where ''' ||v_date||''' between start_date and end_date ';
4628     v_bind_count := v_bind_count + 1;
4629     v_bind_sql := v_bind_sql || ' where :'||v_bind_count||' between start_date and end_date ';
4630     v_bind_variables := v_bind_variables||'~'||v_date;
4631  elsif p_sql_type = 'GET_PREVIOUS' then
4632     v_sql_stmnt := v_sql_stmnt || ' where end_date = (select max(end_date) from '
4633                                || v_table_name || ' where ''' ||v_date|| ''' > end_date) ';
4634     v_bind_count := v_bind_count + 1;
4635     v_bind_sql := v_bind_sql || ' where end_date = (select max(end_date) from '
4636                              || v_table_name || ' where :' ||v_bind_count|| ' > end_date) ';
4637     v_bind_variables := v_bind_variables||'~'||v_date;
4638  elsif p_sql_type = 'GET_NEXT' then
4639     v_sql_stmnt := v_sql_stmnt || ' where start_date = (select min(start_date) from '
4640                                || v_table_name || ' where ''' ||v_date|| ''' < start_date) ';
4641     v_bind_count := v_bind_count + 1;
4642     v_bind_sql := v_bind_sql || ' where start_date = (select min(start_date) from '
4643                              || v_table_name || ' where :' ||v_bind_count|| ' < start_date) ';
4644     v_bind_variables := v_bind_variables||'~'||v_date;
4645  else
4646   if (upper(nvl(p_parameter_description, G_ALL)) <> upper(G_ALL) AND trim(p_parameter_description) <> '%')  then
4647     if p_sql_type = 'VALIDATE_ID' then
4648       v_sql_stmnt := v_sql_stmnt || ' where ' || v_id_name || '=''' || p_parameter_description || '''';
4649       v_bind_count := v_bind_count + 1;
4650       v_bind_sql := v_bind_sql || ' where ' || v_id_name || '= :' || v_bind_count;
4651       v_bind_variables := v_bind_variables||'~'||p_parameter_description;
4652     else
4653       if p_sql_type = 'LOV' then
4654 	 v_sql_stmnt := v_sql_stmnt ||' where lower('||v_value_name||') like ';
4655 	 v_bind_sql := v_bind_sql ||' where lower('||v_value_name||') like ';
4656 /*
4657       elsif p_parameter_description = G_ALL then
4658 	 v_sql_stmnt := v_sql_stmnt ||' where '||v_value_name||' like ';
4659 	 v_bind_sql := v_bind_sql ||' where '||v_value_name||' like ';
4660 */
4661       else
4662 	 v_sql_stmnt := v_sql_stmnt ||' where '||v_value_name||' = ';
4663 	 v_bind_sql := v_bind_sql ||' where '||v_value_name||' = ';
4664       end if;
4665 
4666 /*
4667       -- remove upper() to fix LOV error when value does not exist (aleung, 9/19/2000)
4668       -- if upper(p_parameter_description) = G_ALL then
4669       if p_parameter_description = G_ALL then
4670          v_sql_stmnt := v_sql_stmnt||'''%''';
4671          v_bind_count := v_bind_count + 1;
4672          v_bind_sql := v_bind_sql||':'||v_bind_count;
4673          v_bind_variables := v_bind_variables || '~%';
4674       else
4675 */
4676          if p_sql_type = 'LOV' then
4677             v_sql_stmnt := v_sql_stmnt||''''||replace(lower(p_parameter_description),'''','''''')||'%''';
4678             v_bind_count := v_bind_count + 1;
4679             v_bind_sql := v_bind_sql||':'||v_bind_count;
4680             v_bind_variables := v_bind_variables||'~'||lower(p_parameter_description)||'%';
4681          else
4682             v_sql_stmnt := v_sql_stmnt||''''||replace(p_parameter_description,'''','''''')||'''';
4683             v_bind_count := v_bind_count + 1;
4684             v_bind_sql := v_bind_sql||':'||v_bind_count;
4685             v_bind_variables := v_bind_variables||'~'||p_parameter_description;
4686          end if;
4687       --end if;
4688     end if; -- end of validate_id case
4689   else
4690      v_sql_stmnt := v_sql_stmnt || ' where 1=1 ';
4691      v_bind_sql := v_bind_sql || ' where 1=1 ';
4692   end if; -- end of if not all
4693 
4694   -- aleung, 5/11/01, no organization dependency for OLTP dimension level starts with HR
4695   if vDimensionLevel in ('MONTH','QUARTER','YEAR','TOTAL_TIME') then
4696   --and SUBSTR(vDimensionLevel, 1, 2) <> 'HR' and substr(vAttributeName,1,2) <> 'HR' then
4697 
4698       if upper(nvl(p_org_value, G_ALL)) <> upper(G_ALL) then
4699          vAttributeName := substr(p_org_name, instr(p_org_name, '+')+1);
4700          GET_NONTIME_VALIDATED_VALUE (p_parameter_name => p_org_name
4701                                      ,p_parameter_description => p_org_value
4702                                      ,p_region_code => p_Region_Code
4703                                      ,p_responsibility_id => p_responsibility_id
4704                                      ,x_parameter_value => vorgId
4705                                      ,x_return_status => x_return_status
4706                                      ,x_msg_count => x_msg_count
4707                                      ,x_msg_data => x_msg_data);
4708       else
4709          vAttributeName := 'TOTAL_ORGANIZATIONS';
4710          vOrgId := '''-1''';
4711       end if;
4712 
4713          if instr(vOrgId,''',''') > 0 then
4714             v_sql_stmnt := v_sql_stmnt || ' and organization_id in ('||vOrgId||')';
4715             v_bind_sql := v_bind_sql || ' and organization_id in ('||vOrgId||')';
4716          else
4717             v_sql_stmnt := v_sql_stmnt || ' and organization_id = '  || vOrgId;
4718             v_bind_count := v_bind_count + 1;
4719             v_bind_sql := v_bind_sql || ' and organization_id = :'  || v_bind_count;
4720             v_bind_variables := v_bind_variables || '~' || vOrgId;
4721          end if;
4722          v_sql_stmnt := v_sql_stmnt || '  and organization_type = ' || '''' || vAttributeName ||'''';
4723          v_bind_count := v_bind_count + 1;
4724          v_bind_sql := v_bind_sql || '  and organization_type = :' || v_bind_count;
4725          v_bind_variables := v_bind_variables || '~' || vAttributeName;
4726     end if;
4727 
4728     if p_sql_type <> 'VALIDATE_ID' then
4729       v_sql_stmnt := v_sql_stmnt||' order by start_date';
4730       v_bind_sql := v_bind_sql||' order by start_date';
4731     end if;
4732 
4733  end if;
4734 
4735       x_sql_statement := v_sql_stmnt;
4736       x_bind_sql := v_bind_sql;
4737       x_bind_variables := v_bind_variables;
4738       x_bind_count := v_bind_count;
4739 
4740    end if;
4741 
4742 EXCEPTION
4743   WHEN FND_API.G_EXC_ERROR THEN
4744        x_return_status := FND_API.G_RET_STS_ERROR;
4745        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
4746   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4747        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4748        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
4749   WHEN OTHERS THEN
4750        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4751        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
4752 END getTimeLovSql;
4753 
4754 procedure saveParameters
4755 (pRegionCode       in varchar2,
4756  pFunctionName     in varchar2,
4757  pPageId           in Varchar2 default null,
4758  pSessionId        in Varchar2 default null,
4759  pUserId           in Varchar2 default null,
4760  pResponsibilityId in Varchar2 default null,
4761  pApplicationId    in varchar2 default null,
4762  pOrgParam         in number   default 0,
4763  pHierarchy1 in varchar2 default null,
4764  pHierarchy2 in varchar2 default null,
4765  pHierarchy3 in varchar2 default null,
4766  pHierarchy4 in varchar2 default null,
4767  pHierarchy5 in varchar2 default null,
4768  pHierarchy6 in varchar2 default null,
4769  pHierarchy7 in varchar2 default null,
4770  pHierarchy8 in varchar2 default null,
4771  pHierarchy9 in varchar2 default null,
4772  pHierarchy10 in varchar2 default null,
4773  pHierarchy11 in varchar2 default null,
4774  pHierarchy12 in varchar2 default null,
4775  pHierarchy13 in varchar2 default null,
4776  pHierarchy14 in varchar2 default null,
4777  pHierarchy15 in varchar2 default null,
4778  pParameter1       in varchar2 default null,
4779  pParameterValue1  in varchar2 default null,
4780  pParameter2       in varchar2 default null,
4781  pParameterValue2  in varchar2 default null,
4782  pParameter3       in varchar2 default null,
4783  pParameterValue3  in varchar2 default null,
4784  pParameter4       in varchar2 default null,
4785  pParameterValue4  in varchar2 default null,
4786  pParameter5       in varchar2 default null,
4787  pParameterValue5  in varchar2 default null,
4788  pParameter6       in varchar2 default null,
4789  pParameterValue6  in varchar2 default null,
4790  pParameter7       in varchar2 default null,
4791  pParameterValue7  in varchar2 default null,
4792  pParameter8       in varchar2 default null,
4793  pParameterValue8  in varchar2 default null,
4794  pParameter9       in varchar2 default null,
4795  pParameterValue9  in varchar2 default null,
4796  pParameter10      in varchar2 default null,
4797  pParameterValue10 in varchar2 default null,
4798  pParameter11      in varchar2 default null,
4799  pParameterValue11 in varchar2 default null,
4800  pParameter12      in varchar2 default null,
4801  pParameterValue12 in varchar2 default null,
4802  pParameter13      in varchar2 default null,
4803  pParameterValue13 in varchar2 default null,
4804  pParameter14      in varchar2 default null,
4805  pParameterValue14 in varchar2 default null,
4806  pParameter15      in varchar2 default null,
4807  pParameterValue15 in varchar2 default null,
4808  pTimeParameter    in varchar2 default null,
4809  pTimeFromParameter in varchar2 default null,
4810  pTimeToParameter  in varchar2 default null,
4811  pViewByValue      in  varchar2 default null,
4812  pAddToDefault     in varchar2 default null,
4813  pParameter1Name   in varchar2 default null,
4814  pParameter2Name   in varchar2 default null,
4815  pParameter3Name   in varchar2 default null,
4816  pParameter4Name   in varchar2 default null,
4817  pParameter5Name   in varchar2 default null,
4818  pParameter6Name   in varchar2 default null,
4819  pParameter7Name   in varchar2 default null,
4820  pParameter8Name   in varchar2 default null,
4821  pParameter9Name   in varchar2 default null,
4822  pParameter10Name   in varchar2 default null,
4823  pParameter11Name   in varchar2 default null,
4824  pParameter12Name   in varchar2 default null,
4825  pParameter13Name   in varchar2 default null,
4826  pParameter14Name   in varchar2 default null,
4827  pParameter15Name   in varchar2 default null,
4828  pTimeParamName	    in varchar2 default null,
4829  pParameterOperator1   in varchar2 default null,
4830  pParameterOperator2   in varchar2 default null,
4831  pParameterOperator3   in varchar2 default null,
4832  pParameterOperator4   in varchar2 default null,
4833  pParameterOperator5   in varchar2 default null,
4834  pParameterOperator6   in varchar2 default null,
4835  pParameterOperator7   in varchar2 default null,
4836  pParameterOperator8   in varchar2 default null,
4837  pParameterOperator9   in varchar2 default null,
4838  pParameterOperator10  in varchar2 default null,
4839  pParameterOperator11  in varchar2 default null,
4840  pParameterOperator12  in varchar2 default null,
4841  pParameterOperator13  in varchar2 default null,
4842  pParameterOperator14  in varchar2 default null,
4843  pParameterOperator15  in varchar2 default null,
4844  pRequired1 	       in varchar2 default null,
4845  pRequired2 	       in varchar2 default null,
4846  pRequired3 	       in varchar2 default null,
4847  pRequired4 	       in varchar2 default null,
4848  pRequired5 	       in varchar2 default null,
4849  pRequired6 	       in varchar2 default null,
4850  pRequired7 	       in varchar2 default null,
4851  pRequired8 	       in varchar2 default null,
4852  pRequired9 	       in varchar2 default null,
4853  pRequired10	       in varchar2 default null,
4854  pRequired11	       in varchar2 default null,
4855  pRequired12	       in varchar2 default null,
4856  pRequired13	       in varchar2 default null,
4857  pRequired14	       in varchar2 default null,
4858  pRequired15	       in varchar2 default null,
4859  pTimeRequired 	       in varchar2 default null,
4860  pLovWhere1 	       in varchar2 default null,
4861  pLovWhere2 	       in varchar2 default null,
4862  pLovWhere3 	       in varchar2 default null,
4863  pLovWhere4 	       in varchar2 default null,
4864  pLovWhere5 	       in varchar2 default null,
4865  pLovWhere6 	       in varchar2 default null,
4866  pLovWhere7 	       in varchar2 default null,
4867  pLovWhere8 	       in varchar2 default null,
4868  pLovWhere9 	       in varchar2 default null,
4869  pLovWhere10 	       in varchar2 default null,
4870  pLovWhere11 	       in varchar2 default null,
4871  pLovWhere12 	       in varchar2 default null,
4872  pLovWhere13 	       in varchar2 default null,
4873  pLovWhere14 	       in varchar2 default null,
4874  pLovWhere15 	       in varchar2 default null,
4875  pAsOfDateValue        in varchar2 default null,
4876  pAsOfDateMode         in varchar2 default null,
4877  pSaveByIds            in varchar2 default 'N',
4878  x_return_status    out NOCOPY VARCHAR2,
4879  x_msg_count	    out NOCOPY NUMBER,
4880  x_msg_data         OUT NOCOPY VARCHAR2
4881 )
4882 IS
4883 
4884 	l_parameter_rec		BIS_PMV_PARAMETERS_PVT.PARAMETER_REC_TYPE;
4885         l_parameter_Rec_tbl	BIS_PMV_PARAMETERS_PVT.parameter_tbl_type;
4886 	l_user_Session_rec	BIS_PMV_SESSION_PVT.session_rec_type;
4887 	l_time_parameter_rec 	BIS_PMV_PARAMETERS_PVT.TIME_PARAMETER_REC_TYPE;
4888 	l_count			NUMBER;
4889         l_asof_Date             DATE;
4890 	--l_Start_Date            DATE;
4891 	--l_End_date              DATE;
4892         l_time_level_id         VARCHAR2(2000);
4893         l_time_level_value      VARCHAR2(2000);
4894         l_time_comparison_type  VARCHAR2(2000) := null;
4895         l_time_comp_const       VARCHAR2(200) := 'TIME_COMPARISON_TYPE';
4896         --l_current_report_start_date     date;
4897         --l_prev_report_start_Date       date;
4898 
4899         lAsOfDateValue varchar2(2000);
4900         l_date_format varchar2(30) := 'DD-MM-RRRR';
4901         l_canonical_date_format varchar2(30) := 'DD/MM/RRRR';
4902 
4903 	/*-----BugFix#2887200 -ansingh-------*/
4904 		l_prev_asof_Date										DATE;
4905 		l_curr_effective_start_date					DATE;
4906 		l_curr_effective_end_date						DATE;
4907 		l_curr_report_Start_date						DATE;
4908 		l_prev_report_Start_date						DATE;
4909 		l_prev_effective_start_date						DATE;
4910 		l_prev_effective_end_date						DATE;
4911                 l_prev_time_level_id         VARCHAR2(2000);
4912                 l_prev_time_level_value      VARCHAR2(2000);
4913 
4914 BEGIN
4915 	--First delete all the parameters for this session.
4916 	FND_MSG_PUB.INITIALIZE;
4917 	l_user_session_rec.function_name := pFunctionNAme;
4918         l_user_session_rec.region_code := pRegionCode;
4919         l_user_session_rec.page_id := pPageId;
4920 	l_user_session_rec.session_id := pSessionId;
4921 	l_user_Session_rec.user_id := pUserId;
4922 	l_user_session_rec.responsibility_id := pResponsibilityId;
4923 
4924 	IF (pAddToDefault = 'Y') THEN
4925            delete_default_parameters(
4926 	   p_user_session_rec => l_user_session_rec,
4927 	   x_msg_count => x_msg_count,
4928            x_msg_data => x_msg_data,
4929            x_return_status => x_return_status
4930            );
4931         ELSE
4932          IF pPageId IS NULL OR pPageId = '' THEN
4933 	  delete_session_parameters(
4934 	    p_user_session_rec => l_user_session_Rec,
4935 	    p_schedule_option => 'NULL',
4936             x_msg_count => x_msg_count,
4937 	    x_msg_data  => x_msg_data,
4938 	    x_return_status => x_return_status
4939 	    );
4940          ELSE
4941            delete_page_parameters(
4942 	   p_user_session_rec => l_user_session_rec,
4943 	   x_msg_count => x_msg_count,
4944            x_msg_data => x_msg_data,
4945            x_return_status => x_return_status
4946            );
4947          END IF;
4948         END IF;
4949 
4950 	commit;
4951 
4952 
4953   if (pParameter1Name = ROLLING_DIMENSION_DESCRIPTION) THEN
4954     l_parameter_rec.parameter_description := pParameter1Name;
4955     l_parameter_rec.parameter_value := pParameterValue1;
4956   ELSE
4957     l_parameter_rec.parameter_description := pParameterValue1;
4958   END IF;
4959 
4960 	l_parameter_rec.parameter_name := pParameter1;
4961 	l_parameter_rec.default_flag	:=	pAddToDefault;
4962 	l_parameter_rec.dimension := substr(pParameter1,1, instr(pParameter1,'+')-1);
4963         if(l_parameter_Rec.dimension = l_time_comp_const) THEN
4964            l_time_comparison_type := l_parameter_rec.parameter_description;
4965         end if;
4966 	l_parameter_Rec.parameter_label :=  pParameter1Name;
4967         l_parameter_rec.operator := pParameterOperator1;
4968 	l_parameter_rec.required_flag := pRequired1;
4969         l_parameter_rec.lov_where := pLovWhere1;
4970 	l_parameter_rec.id_flag := pSaveByIds;
4971         l_parameter_rec_tbl(1) := l_parameter_rec;
4972 
4973   if (pParameter2Name = ROLLING_DIMENSION_DESCRIPTION) THEN
4974     l_parameter_rec.parameter_description := pParameter2Name;
4975     l_parameter_rec.parameter_value := pParameterValue2;
4976   ELSE
4977     l_parameter_rec.parameter_description := pParameterValue2;
4978   END IF;
4979 
4980 	l_parameter_rec.parameter_name := pParameter2;
4981 	l_parameter_rec.default_flag	:=	pAddToDefault;
4982 	l_parameter_rec.dimension := substr(pParameter2,1, instr(pParameter2,'+')-1);
4983         if(l_parameter_Rec.dimension = l_time_comp_const) THEN
4984            l_time_comparison_type := l_parameter_rec.parameter_description;
4985         end if;
4986 	l_parameter_Rec.parameter_label :=  pParameter2Name;
4987   l_parameter_rec.operator := pParameterOperator2;
4988 	l_parameter_rec.required_flag := pRequired2;
4989         l_parameter_rec.lov_where := pLovWhere2;
4990 	l_parameter_rec.id_flag := pSaveByIds;
4991   l_parameter_rec_tbl(2) := l_parameter_rec;
4992 
4993   if (pParameter3Name = ROLLING_DIMENSION_DESCRIPTION) THEN
4994     l_parameter_rec.parameter_description := pParameter3Name;
4995     l_parameter_rec.parameter_value := pParameterValue3;
4996   ELSE
4997     l_parameter_rec.parameter_description := pParameterValue3;
4998   END IF;
4999 
5000 	l_parameter_rec.parameter_name := pParameter3;
5001 	l_parameter_rec.default_flag	:=	pAddToDefault;
5002 	l_parameter_rec.dimension := substr(pParameter3,1, instr(pParameter3,'+')-1);
5003         if(l_parameter_Rec.dimension = l_time_comp_const) THEN
5004            l_time_comparison_type := l_parameter_rec.parameter_description;
5005         end if;
5006 	l_parameter_Rec.parameter_label :=  pParameter3Name;
5007   l_parameter_rec.operator := pParameterOperator3;
5008 	l_parameter_rec.required_flag := pRequired3;
5009         l_parameter_rec.lov_where := pLovWhere3;
5010 	l_parameter_rec.id_flag := pSaveByIds;
5011   l_parameter_rec_tbl(3) := l_parameter_rec;
5012 
5013   if (pParameter4Name = ROLLING_DIMENSION_DESCRIPTION) THEN
5014     l_parameter_rec.parameter_description := pParameter4Name;
5015     l_parameter_rec.parameter_value := pParameterValue4;
5016   ELSE
5017     l_parameter_rec.parameter_description := pParameterValue4;
5018   END IF;
5019 
5020 	l_parameter_rec.parameter_name := pParameter4;
5021 	l_parameter_rec.default_flag	:=	pAddToDefault;
5022 	l_parameter_rec.dimension := substr(pParameter4,1, instr(pParameter4,'+')-1);
5023         if(l_parameter_Rec.dimension = l_time_comp_const) THEN
5024            l_time_comparison_type := l_parameter_rec.parameter_description;
5025         end if;
5026 	l_parameter_Rec.parameter_label :=  pParameter4Name;
5027   l_parameter_rec.operator := pParameterOperator4;
5028 	l_parameter_rec.required_flag := pRequired4;
5029         l_parameter_rec.lov_where := pLovWhere4;
5030 	l_parameter_rec.id_flag := pSaveByIds;
5031   l_parameter_rec_tbl(4) := l_parameter_rec;
5032 
5033   if (pParameter5Name = ROLLING_DIMENSION_DESCRIPTION) THEN
5034     l_parameter_rec.parameter_description := pParameter5Name;
5035     l_parameter_rec.parameter_value := pParameterValue5;
5036   ELSE
5037     l_parameter_rec.parameter_description := pParameterValue5;
5038   END IF;
5039 
5040 	l_parameter_rec.parameter_name := pParameter5;
5041 	l_parameter_rec.default_flag	:=	pAddToDefault;
5042 	l_parameter_rec.dimension := substr(pParameter5,1, instr(pParameter5,'+')-1);
5043         if(l_parameter_Rec.dimension = l_time_comp_const) THEN
5044            l_time_comparison_type := l_parameter_rec.parameter_description;
5045         end if;
5046 	l_parameter_Rec.parameter_label :=  pParameter5Name;
5047   l_parameter_rec.operator := pParameterOperator5;
5048 	l_parameter_rec.required_flag := pRequired5;
5049         l_parameter_rec.lov_where := pLovWhere5;
5050 	l_parameter_rec.id_flag := pSaveByIds;
5051   l_parameter_rec_tbl(5) := l_parameter_rec;
5052 
5053   if (pParameter6Name = ROLLING_DIMENSION_DESCRIPTION) THEN
5054     l_parameter_rec.parameter_description := pParameter6Name;
5055     l_parameter_rec.parameter_value := pParameterValue6;
5056   ELSE
5057     l_parameter_rec.parameter_description := pParameterValue6;
5058   END IF;
5059 
5060 	l_parameter_rec.parameter_name := pParameter6;
5061 	l_parameter_rec.default_flag	:=	pAddToDefault;
5062 	l_parameter_rec.dimension := substr(pParameter6,1, instr(pParameter6,'+')-1);
5063         if(l_parameter_Rec.dimension = l_time_comp_const) THEN
5064            l_time_comparison_type := l_parameter_rec.parameter_description;
5065         end if;
5066 	l_parameter_Rec.parameter_label :=  pParameter6Name;
5067   l_parameter_rec.operator := pParameterOperator6;
5068 	l_parameter_rec.required_flag := pRequired6;
5069         l_parameter_rec.lov_where := pLovWhere6;
5070 	l_parameter_rec.id_flag := pSaveByIds;
5071   l_parameter_rec_tbl(6) := l_parameter_rec;
5072 
5073   if (pParameter7Name = ROLLING_DIMENSION_DESCRIPTION) THEN
5074     l_parameter_rec.parameter_description := pParameter7Name;
5075     l_parameter_rec.parameter_value := pParameterValue7;
5076   ELSE
5077     l_parameter_rec.parameter_description := pParameterValue7;
5078   END IF;
5079 	l_parameter_rec.parameter_name := pParameter7;
5080 	l_parameter_rec.default_flag	:=	pAddToDefault;
5081 	l_parameter_rec.dimension := substr(pParameter7,1, instr(pParameter7,'+')-1);
5082         if(l_parameter_Rec.dimension = l_time_comp_const) THEN
5083            l_time_comparison_type := l_parameter_rec.parameter_description;
5084         end if;
5085 	l_parameter_Rec.parameter_label :=  pParameter7Name;
5086   l_parameter_rec.operator := pParameterOperator7;
5087 	l_parameter_rec.required_flag := pRequired7;
5088         l_parameter_rec.lov_where := pLovWhere7;
5089 	l_parameter_rec.id_flag := pSaveByIds;
5090   l_parameter_rec_tbl(7) := l_parameter_rec;
5091 
5092   if (pParameter8Name = ROLLING_DIMENSION_DESCRIPTION) THEN
5093     l_parameter_rec.parameter_description := pParameter8Name;
5094     l_parameter_rec.parameter_value := pParameterValue8;
5095   ELSE
5096     l_parameter_rec.parameter_description := pParameterValue8;
5097   END IF;
5098 
5099 	l_parameter_rec.parameter_name := pParameter8;
5100 	l_parameter_rec.default_flag	:=	pAddToDefault;
5101 	l_parameter_Rec.parameter_label :=  pParameter8Name;
5102 	l_parameter_rec.dimension := substr(pParameter8,1, instr(pParameter8,'+')-1);
5103         if(l_parameter_Rec.dimension = l_time_comp_const) THEN
5104            l_time_comparison_type := l_parameter_rec.parameter_description;
5105         end if;
5106   l_parameter_rec.operator := pParameterOperator8;
5107 	l_parameter_rec.required_flag := pRequired8;
5108         l_parameter_rec.lov_where := pLovWhere8;
5109 	l_parameter_rec.id_flag := pSaveByIds;
5110   l_parameter_rec_tbl(8) := l_parameter_rec;
5111 
5112   if (pParameter9Name = ROLLING_DIMENSION_DESCRIPTION) THEN
5113     l_parameter_rec.parameter_description := pParameter9Name;
5114     l_parameter_rec.parameter_value := pParameterValue9;
5115   ELSE
5116     l_parameter_rec.parameter_description := pParameterValue9;
5117   END IF;
5118 	l_parameter_rec.parameter_name := pParameter9;
5119 	l_parameter_rec.default_flag	:=	pAddToDefault;
5120 	l_parameter_rec.dimension := substr(pParameter9,1, instr(pParameter9,'+')-1);
5121         if(l_parameter_Rec.dimension = l_time_comp_const) THEN
5122            l_time_comparison_type := l_parameter_rec.parameter_description;
5123         end if;
5124 	l_parameter_Rec.parameter_label :=  pParameter9Name;
5125   l_parameter_rec.operator := pParameterOperator9;
5126 	l_parameter_rec.required_flag := pRequired9;
5127         l_parameter_rec.lov_where := pLovWhere9;
5128 	l_parameter_rec.id_flag := pSaveByIds;
5129   l_parameter_rec_tbl(9) := l_parameter_rec;
5130 
5131   if (pParameter10Name = ROLLING_DIMENSION_DESCRIPTION) THEN
5132     l_parameter_rec.parameter_description := pParameter10Name;
5133     l_parameter_rec.parameter_value := pParameterValue10;
5134   ELSE
5135     l_parameter_rec.parameter_description := pParameterValue10;
5136   END IF;
5137 	l_parameter_rec.parameter_name := pParameter10;
5138 	l_parameter_rec.default_flag	:=	pAddToDefault;
5139 	l_parameter_rec.dimension := substr(pParameter10,1, instr(pParameter10,'+')-1);
5140         if(l_parameter_Rec.dimension = l_time_comp_const) THEN
5141            l_time_comparison_type := l_parameter_rec.parameter_description;
5142         end if;
5143 	l_parameter_Rec.parameter_label :=  pParameter10Name;
5144   l_parameter_rec.operator := pParameterOperator10;
5145 	l_parameter_rec.required_flag := pRequired10;
5146         l_parameter_rec.lov_where := pLovWhere10;
5147 	l_parameter_rec.id_flag := pSaveByIds;
5148   l_parameter_rec_tbl(10) := l_parameter_rec;
5149 
5150   if (pParameter11Name = ROLLING_DIMENSION_DESCRIPTION) THEN
5151     l_parameter_rec.parameter_description := pParameter11Name;
5152     l_parameter_rec.parameter_value := pParameterValue11;
5153   ELSE
5154     l_parameter_rec.parameter_description := pParameterValue11;
5155   END IF;
5156 	l_parameter_rec.parameter_name := pParameter11;
5157 	l_parameter_rec.default_flag	:=	pAddToDefault;
5158 	l_parameter_Rec.parameter_label :=  pParameter11Name;
5159 	l_parameter_rec.dimension := substr(pParameter11,1, instr(pParameter11,'+')-1);
5160         if(l_parameter_Rec.dimension = l_time_comp_const) THEN
5161            l_time_comparison_type := l_parameter_rec.parameter_description;
5162         end if;
5163   l_parameter_rec.operator := pParameterOperator11;
5164 	l_parameter_rec.required_flag := pRequired11;
5165         l_parameter_rec.lov_where := pLovWhere11;
5166 	l_parameter_rec.id_flag := pSaveByIds;
5167   l_parameter_rec_tbl(11) := l_parameter_rec;
5168 
5169   if (pParameter12Name = ROLLING_DIMENSION_DESCRIPTION) THEN
5170     l_parameter_rec.parameter_description := pParameter12Name;
5171     l_parameter_rec.parameter_value := pParameterValue12;
5172   ELSE
5173     l_parameter_rec.parameter_description := pParameterValue12;
5174   END IF;
5175 	l_parameter_rec.parameter_name := pParameter12;
5176 	l_parameter_rec.default_flag	:=	pAddToDefault;
5177 	l_parameter_rec.dimension := substr(pParameter12,1, instr(pParameter12,'+')-1);
5178         if(l_parameter_Rec.dimension = l_time_comp_const) THEN
5179            l_time_comparison_type := l_parameter_rec.parameter_description;
5180         end if;
5181 	l_parameter_Rec.parameter_label :=  pParameter12Name;
5182   l_parameter_rec.operator := pParameterOperator12;
5183 	l_parameter_rec.required_flag := pRequired12;
5184         l_parameter_rec.lov_where := pLovWhere12;
5185 	l_parameter_rec.id_flag := pSaveByIds;
5186   l_parameter_rec_tbl(12) := l_parameter_rec;
5187 
5188   if (pParameter13Name = ROLLING_DIMENSION_DESCRIPTION) THEN
5189     l_parameter_rec.parameter_description := pParameter13Name;
5190     l_parameter_rec.parameter_value := pParameterValue13;
5191   ELSE
5192     l_parameter_rec.parameter_description := pParameterValue13;
5193   END IF;
5194 	l_parameter_rec.parameter_name := pParameter13;
5195 	l_parameter_rec.default_flag	:=	pAddToDefault;
5196 	l_parameter_rec.dimension := substr(pParameter13,1, instr(pParameter13,'+')-1);
5197         if(l_parameter_Rec.dimension = l_time_comp_const) THEN
5198            l_time_comparison_type := l_parameter_rec.parameter_description;
5199         end if;
5200 	l_parameter_Rec.parameter_label :=  pParameter13Name;
5201   l_parameter_rec.operator := pParameterOperator13;
5202 	l_parameter_rec.required_flag := pRequired13;
5203         l_parameter_rec.lov_where := pLovWhere13;
5204 	l_parameter_rec.id_flag := pSaveByIds;
5205   l_parameter_rec_tbl(13) := l_parameter_rec;
5206 
5207   if (pParameter14Name = ROLLING_DIMENSION_DESCRIPTION) THEN
5208     l_parameter_rec.parameter_description := pParameter14Name;
5209     l_parameter_rec.parameter_value := pParameterValue14;
5210   ELSE
5211     l_parameter_rec.parameter_description := pParameterValue14;
5212   END IF;
5213 	l_parameter_rec.parameter_name := pParameter14;
5214 	l_parameter_rec.dimension := substr(pParameter14,1, instr(pParameter14,'+')-1);
5215         if(l_parameter_Rec.dimension = l_time_comp_const) THEN
5216            l_time_comparison_type := l_parameter_rec.parameter_description;
5217         end if;
5218 	l_parameter_rec.default_flag	:=	pAddToDefault;
5219 	l_parameter_Rec.parameter_label :=  pParameter14Name;
5220   l_parameter_rec.operator := pParameterOperator14;
5221 	l_parameter_rec.required_flag := pRequired14;
5222         l_parameter_rec.lov_where := pLovWhere14;
5223 	l_parameter_rec.id_flag := pSaveByIds;
5224   l_parameter_rec_tbl(14) := l_parameter_rec;
5225 
5226   if (pParameter15Name = ROLLING_DIMENSION_DESCRIPTION) THEN
5227     l_parameter_rec.parameter_description := pParameter15Name;
5228     l_parameter_rec.parameter_value := pParameterValue15;
5229   ELSE
5230     l_parameter_rec.parameter_description := pParameterValue15;
5231   END IF;
5232 	l_parameter_rec.parameter_name := pParameter15;
5233 	l_parameter_rec.dimension := substr(pParameter15,1, instr(pParameter15,'+')-1);
5234         if(l_parameter_Rec.dimension = l_time_comp_const) THEN
5235            l_time_comparison_type := l_parameter_rec.parameter_description;
5236         end if;
5237 	l_parameter_rec.default_flag	:=	pAddToDefault;
5238 	l_parameter_Rec.parameter_label :=  pParameter15Name;
5239   l_parameter_rec.operator := pParameterOperator15;
5240 	l_parameter_rec.required_flag := pRequired15;
5241         l_parameter_rec.lov_where := pLovWhere15;
5242 	l_parameter_rec.id_flag := pSaveByIds;
5243   l_parameter_rec_tbl(15) := l_parameter_rec;
5244 
5245   l_count := 15;
5246 	if (pHierarchy1 is not null) then
5247            l_Parameter_rec.parameter_name := pParameter1;
5248            l_parameter_rec.hierarchy_flag := 'Y';
5249            l_parameter_rec.parameter_value := pHierarchy1;
5250            l_parameter_rec.default_Flag := pAddToDefault;
5251            l_parameter_rec.dimension := substr(pParameter1,1,instr(pParameter1,'+')-1);
5252            l_parameter_rec.parameter_description := pParameterValue1;
5253 	   l_count := l_count+1;
5254            l_parameter_rec_tbl(l_count) := l_parameter_rec;
5255 	end if;
5256 	if (pHierarchy2 is not null) then
5257            l_Parameter_rec.parameter_name := pParameter2;
5258            l_parameter_rec.hierarchy_flag := 'Y';
5259            l_parameter_rec.parameter_value := pHierarchy2;
5260            l_parameter_rec.default_Flag := pAddToDefault;
5261            l_parameter_rec.dimension := substr(pParameter2,1,instr(pParameter2,'+')-1);
5262            l_parameter_rec.parameter_description := pParameterValue2;
5263 	   l_count := l_count+1;
5264            l_parameter_rec_tbl(l_count) := l_parameter_rec;
5265 	end if;
5266 
5267 	if (pHierarchy3 is not null) then
5268            l_Parameter_rec.parameter_name := pParameter3;
5269            l_parameter_rec.hierarchy_flag := 'Y';
5270            l_parameter_rec.parameter_value := pHierarchy3;
5271            l_parameter_rec.default_Flag := pAddToDefault;
5272            l_parameter_rec.dimension := substr(pParameter3,1,instr(pParameter3,'+')-1);
5273            l_parameter_rec.parameter_description := pParameterValue3;
5274 	   l_count := l_count+1;
5275            l_parameter_rec_tbl(l_count) := l_parameter_rec;
5276 	end if;
5277 	if (pHierarchy4 is not null) then
5278            l_Parameter_rec.parameter_name := pParameter4;
5279            l_parameter_rec.hierarchy_flag := 'Y';
5280            l_parameter_rec.parameter_value := pHierarchy4;
5281            l_parameter_rec.default_Flag := pAddToDefault;
5282            l_parameter_rec.dimension := substr(pParameter4,1,instr(pParameter4,'+')-1);
5283            l_parameter_rec.parameter_description := pParameterValue4;
5284 	   l_count := l_count+1;
5285            l_parameter_rec_tbl(l_count) := l_parameter_rec;
5286 	end if;
5287 	if (pHierarchy5 is not null) then
5288            l_Parameter_rec.parameter_name := pParameter5;
5289            l_parameter_rec.hierarchy_flag := 'Y';
5290            l_parameter_rec.parameter_value := pHierarchy5;
5291            l_parameter_rec.default_Flag := pAddToDefault;
5292            l_parameter_rec.dimension := substr(pParameter5,1,instr(pParameter5,'+')-1);
5293            l_parameter_rec.parameter_description := pParameterValue5;
5294 	   l_count := l_count+1;
5295            l_parameter_rec_tbl(l_count) := l_parameter_rec;
5296 	end if;
5297 	if (pHierarchy6 is not null) then
5298            l_Parameter_rec.parameter_name := pParameter6;
5299            l_parameter_rec.hierarchy_flag := 'Y';
5300            l_parameter_rec.parameter_value := pHierarchy6;
5301            l_parameter_rec.default_Flag := pAddToDefault;
5302            l_parameter_rec.dimension := substr(pParameter6,1,instr(pParameter6,'+')-1);
5303            l_parameter_rec.parameter_description := pParameterValue6;
5304 	   l_count := l_count+1;
5305            l_parameter_rec_tbl(l_count) := l_parameter_rec;
5306 	end if;
5307 	if (pHierarchy7 is not null) then
5308            l_Parameter_rec.parameter_name := pParameter7;
5309            l_parameter_rec.hierarchy_flag := 'Y';
5310            l_parameter_rec.parameter_value := pHierarchy7;
5311            l_parameter_rec.default_Flag := pAddToDefault;
5312            l_parameter_rec.dimension := substr(pParameter7,1,instr(pParameter7,'+')-1);
5313            l_parameter_rec.parameter_description := pParameterValue7;
5314 	   l_count := l_count+1;
5315            l_parameter_rec_tbl(l_count) := l_parameter_rec;
5316 	end if;
5317 	if (pHierarchy8 is not null) then
5318            l_Parameter_rec.parameter_name := pParameter8;
5319            l_parameter_rec.hierarchy_flag := 'Y';
5320            l_parameter_rec.default_Flag := pAddToDefault;
5321            l_parameter_rec.parameter_value := pHierarchy8;
5322            l_parameter_rec.dimension := substr(pParameter8,1,instr(pParameter8,'+')-1);
5323            l_parameter_rec.parameter_description := pParameterValue8;
5324 	   l_count := l_count+1;
5325            l_parameter_rec_tbl(l_count) := l_parameter_rec;
5326 	end if;
5327 	if (pHierarchy9 is not null) then
5328            l_Parameter_rec.parameter_name := pParameter9;
5329            l_parameter_rec.hierarchy_flag := 'Y';
5330            l_parameter_rec.default_Flag := pAddToDefault;
5331            l_parameter_rec.parameter_value := pHierarchy9;
5332            l_parameter_rec.dimension := substr(pParameter9,1,instr(pParameter9,'+')-1);
5333            l_parameter_rec.parameter_description := pParameterValue9;
5334 	   l_count := l_count+1;
5335            l_parameter_rec_tbl(l_count) := l_parameter_rec;
5336 	end if;
5337 	if (pHierarchy10 is not null) then
5338            l_Parameter_rec.parameter_name := pParameter10;
5339            l_parameter_rec.hierarchy_flag := 'Y';
5340            l_parameter_rec.parameter_value := pHierarchy10;
5341            l_parameter_rec.default_Flag := pAddToDefault;
5342            l_parameter_rec.dimension := substr(pParameter10,1,instr(pParameter10,'+')-1);
5343            l_parameter_rec.parameter_description := pParameterValue10;
5344 	   l_count := l_count+1;
5345            l_parameter_rec_tbl(l_count) := l_parameter_rec;
5346 	end if;
5347 	if (pHierarchy11 is not null) then
5348            l_Parameter_rec.parameter_name := pParameter11;
5349            l_parameter_rec.hierarchy_flag := 'Y';
5350            l_parameter_rec.parameter_value := pHierarchy11;
5351            l_parameter_rec.default_Flag := pAddToDefault;
5352            l_parameter_rec.dimension := substr(pParameter11,1,instr(pParameter11,'+')-1);
5353            l_parameter_rec.parameter_description := pParameterValue11;
5354 	   l_count := l_count+1;
5355            l_parameter_rec_tbl(l_count) := l_parameter_rec;
5356 	end if;
5357 	if (pHierarchy12 is not null) then
5358            l_Parameter_rec.parameter_name := pParameter12;
5359            l_parameter_rec.hierarchy_flag := 'Y';
5360            l_parameter_rec.parameter_value := pHierarchy12;
5361            l_parameter_rec.default_Flag := pAddToDefault;
5362            l_parameter_rec.dimension := substr(pParameter12,1,instr(pParameter12,'+')-1);
5363            l_parameter_rec.parameter_description := pParameterValue12;
5364 	   l_count := l_count+1;
5365            l_parameter_rec_tbl(l_count) := l_parameter_rec;
5366 	end if;
5367 	if (pHierarchy13 is not null) then
5368            l_Parameter_rec.parameter_name := pParameter13;
5369            l_parameter_rec.hierarchy_flag := 'Y';
5370            l_parameter_rec.parameter_value := pHierarchy13;
5371            l_parameter_rec.default_Flag := pAddToDefault;
5372            l_parameter_rec.dimension := substr(pParameter13,1,instr(pParameter13,'+')-1);
5373            l_parameter_rec.parameter_description := pParameterValue13;
5374 	   l_count := l_count+1;
5375            l_parameter_rec_tbl(l_count) := l_parameter_rec;
5376 	end if;
5377 	if (pHierarchy14 is not null) then
5378            l_Parameter_rec.parameter_name := pParameter14;
5379            l_parameter_rec.hierarchy_flag := 'Y';
5380            l_parameter_rec.default_Flag := pAddToDefault;
5381            l_parameter_rec.parameter_value := pHierarchy14;
5382            l_parameter_rec.dimension := substr(pParameter14,1,instr(pParameter14,'+')-1);
5383            l_parameter_rec.parameter_description := pParameterValue14;
5384 	   l_count := l_count+1;
5385            l_parameter_rec_tbl(l_count) := l_parameter_rec;
5386 	end if;
5387 	if (pHierarchy15 is not null) then
5388            l_Parameter_rec.parameter_name := pParameter15;
5389            l_parameter_rec.hierarchy_flag := 'Y';
5390            l_parameter_rec.default_Flag := pAddToDefault;
5391            l_parameter_rec.parameter_value := pHierarchy15;
5392            l_parameter_rec.dimension := substr(pParameter15,1,instr(pParameter15,'+')-1);
5393            l_parameter_rec.parameter_description := pParameterValue15;
5394 	   l_count := l_count+1;
5395            l_parameter_rec_tbl(l_count) := l_parameter_rec;
5396 	end if;
5397 	if (pViewByValue is not null) then
5398 	   l_parameter_rec.parameter_name := 'VIEW_BY';
5399            l_parameter_rec.parameter_description := pViewByValue;
5400            l_parameter_rec.default_Flag := pAddToDefault;
5401 	   l_parameter_rec.hierarchy_flag := 'N';
5402 	   l_count := l_count+1;
5403            l_parameter_rec_tbl(l_count) := l_parameter_rec;
5404 	end if ;
5405 
5406       	create_Session_parameters(p_user_param_tbl => l_parameter_rec_tbl
5407 				 ,p_user_session_rec => l_user_session_rec
5408 				 ,x_return_Status => x_return_Status
5409 				 ,x_msg_count => x_msg_count
5410 				 ,x_msg_Data  => x_msg_Data);
5411 
5412         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
5413     	  	RETURN;
5414         END IF;
5415 
5416 
5417         IF (pTimeFromParameter = 'DBC_TIME' or pAsOfDateValue is not null) then
5418 
5419            IF (pAsOfDateValue is null) then
5420               lAsOFDateValue := to_char(SYSDATE,'DD-MM-RRRR');
5421            ELSE
5422               lAsOFDateValue := pAsOfDateValue;
5423            END IF;
5424 
5425            l_parameter_rec.parameter_name := 'AS_OF_DATE';
5426            -- nbarik - 03/17/03 - Bug Fix 2844149 - Added date format for to_date.
5427            IF (pAsOfDateMode = 'NEXT') then
5428               --l_asof_date := to_date(lAsOfDateValue, l_date_format)+1;
5429               --l_parameter_rec.parameter_description := to_char(l_asof_date,'DD-MON-YYYY');
5430               --l_parameter_rec.parameter_value := to_char(l_asof_date,'DD-MON-YYYY');
5431               l_asof_date := to_date(lAsOfDateValue, l_canonical_date_format)+1;
5432               l_parameter_rec.parameter_description := to_char(l_asof_date,l_canonical_date_format);
5433               l_parameter_rec.parameter_value := to_char(l_asof_date,l_canonical_date_format);
5434               l_parameter_rec.period_date := l_asof_date;
5435            ELSIF (pAsOFDateMode = 'PREVIOUS') then
5436               --l_asof_date := to_date(lAsOfDateValue, l_date_format)-1;
5437               --l_parameter_rec.parameter_description := to_char(l_asof_Date,'DD-MON-YYYY');
5438               --l_parameter_rec.parameter_value := to_char(l_asof_date,'DD-MON-YYYY');
5439               l_asof_date := to_date(lAsOfDateValue, l_canonical_date_format)-1;
5440               l_parameter_rec.parameter_description := to_char(l_asof_Date,l_canonical_date_format);
5441               l_parameter_rec.parameter_value := to_char(l_asof_date,l_canonical_date_format);
5442               l_parameter_rec.period_date := l_asof_date;
5443            ELSIF (pAsOfDateMode = 'CURRENT'  or pAsOfDateMode is null) then
5444               --l_asof_Date := to_Date(lAsOfDateValue, l_date_format);
5445               --l_parameter_Rec.parameter_description := to_char(l_asof_date,'DD-MON-YYYY');
5446               --l_parameter_rec.parameter_value := to_char(l_asof_date,'DD-MON-YYYY');
5447 
5448 
5449               l_asof_Date := to_Date(lAsOfDateValue, l_canonical_date_format);
5450               l_parameter_rec.parameter_description := to_char(l_asof_Date,l_canonical_date_format);
5451               l_parameter_rec.parameter_value := to_char(l_asof_date,l_canonical_date_format);
5452               l_parameter_rec.period_date := l_asof_date;
5453            END IF;
5454            l_parameter_Rec.default_flag := 'N';
5455            l_parameter_rec.hierarchy_flag := 'N';
5456            CREATE_PARAMETER (p_user_session_rec => l_user_session_rec
5457                       ,p_parameter_rec => l_parameter_rec
5458                       ,x_return_status => x_return_status
5459                       ,x_msg_count => x_msg_count
5460                       ,x_msg_data => x_msg_data);
5461           IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
5462     	    	RETURN;
5463           END IF;
5464         END IF;
5465 
5466 	IF (pTimeParameter IS NOT NULL) THEN
5467            IF (pTimeFromParameter = 'DBC_TIME') THEN
5468 	/*-----BugFix#2887200 -ansingh-------*/
5469           --get all the date information.
5470 	  BIS_PMV_TIME_LEVELS_PVT.GET_COMPUTED_DATES(
5471 	    p_region_code									 => pregioncode,
5472 	    p_resp_id											 => presponsibilityid,
5473 	    p_time_comparison_type         => l_time_comparison_Type,
5474 	    p_asof_date                    => to_char(l_Asof_date, 'DD/MM/YYYY'),
5475 	    p_time_level                   => pTimeParameter,
5476 	    x_prev_asof_Date               => l_prev_asof_Date,
5477 	    x_curr_effective_start_date    => l_curr_effective_start_date,
5478 	    x_curr_effective_end_date      => l_curr_effective_end_date,
5479 	    x_curr_report_Start_date       => l_curr_report_Start_date,
5480 	    x_prev_report_Start_date       => l_prev_report_Start_date,
5481 	    x_time_level_id		   => l_time_level_id,
5482 	    x_time_level_value		   => l_time_level_value,
5483             x_prev_effective_start_date	   => l_prev_effective_start_date,
5484             x_prev_effective_end_date	   => l_prev_effective_end_date,
5485 	    x_prev_time_level_id	   => l_prev_time_level_id,
5486 	    x_prev_time_level_value	   => l_prev_time_level_value,
5487 	    x_return_status                => x_return_status,
5488 	    x_msg_count                    => x_msg_count,
5489 	    x_msg_Data                     => x_msg_Data
5490 	  );
5491           IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
5492   	    RETURN;
5493           END IF;
5494 
5495           l_parameter_rec.dimension                     := substr(pTimeParameter, 1, instr(pTimeParameter,'+')-1);
5496           l_parameter_rec.default_flag                  := 'N';
5497           l_parameter_rec.parameter_name		:= pTimeParameter || '_FROM';
5498           l_parameter_rec.parameter_description         := l_time_level_Value;
5499           l_parameter_rec.period_date			:= l_curr_effective_start_date;
5500           l_parameter_Rec.parameter_Value		:= l_time_level_id;
5501           -- _FROM Record
5502                 CREATE_PARAMETER (p_user_session_rec => l_user_session_rec
5503                                  ,p_parameter_rec => l_parameter_rec
5504                                  ,x_return_status => x_return_status
5505                                  ,x_msg_count => x_msg_count
5506                                  ,x_msg_data => x_msg_data);
5507 
5508                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
5509             	  	RETURN;
5510                 END IF;
5511 
5512 	  l_parameter_rec.default_flag			:= 'N';
5513           l_parameter_rec.parameter_name		:= pTimeParameter || '_TO';
5514           l_parameter_rec.parameter_description         := l_time_level_Value;
5515           l_parameter_rec.period_date			:= l_curr_effective_end_date;
5516           l_parameter_Rec.parameter_Value		:= l_time_level_id;
5517           -- _TO Record
5518           CREATE_PARAMETER (p_user_session_rec => l_user_session_rec
5519                                  ,p_parameter_rec => l_parameter_rec
5520                                  ,x_return_status => x_return_status
5521                                  ,x_msg_count => x_msg_count
5522                                  ,x_msg_data => x_msg_data);
5523 
5524           IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
5525             		RETURN;
5526           END IF;
5527 
5528           --BIS_P_ASOF_DATE Record
5529 	  BIS_PMV_TIME_LEVELS_PVT.GET_TIME_PARAMETER_RECORD (
5530 	    p_TimeParamterName => 'BIS_P_ASOF_DATE',
5531 	    p_DateParameter    => l_prev_asof_Date,
5532 	    x_parameterRecord  => l_parameter_rec,
5533 	    x_Return_status    => x_return_Status,
5534 	    x_msg_count        => x_msg_count,
5535 	    x_msg_data         => x_msg_data
5536 	  );
5537 
5538           CREATE_PARAMETER ( p_user_session_rec => l_user_session_rec,
5539              p_parameter_rec    => l_parameter_rec,
5540              x_return_status    => x_return_status,
5541              x_msg_count        => x_msg_count,
5542              x_msg_data         => x_msg_data
5543 	  );
5544 	  --BIS_CUR_REPORT_START_DATE Record
5545 	  BIS_PMV_TIME_LEVELS_PVT.GET_TIME_PARAMETER_RECORD(
5546 	    p_TimeParamterName => 'BIS_CUR_REPORT_START_DATE',
5547 	    p_DateParameter    => l_curr_report_Start_date,
5548 	    x_parameterRecord  => l_parameter_rec,
5549 	    x_Return_status    => x_return_Status,
5550 	    x_msg_count        => x_msg_count,
5551 	    x_msg_data         => x_msg_data
5552 	  );
5553           CREATE_PARAMETER ( p_user_session_rec => l_user_session_rec,
5554             p_parameter_rec    => l_parameter_rec,
5555             x_return_status    => x_return_status,
5556             x_msg_count        => x_msg_count,
5557             x_msg_data         => x_msg_data
5558 	  );
5559           --BIS_PREV_REPORT_START_DATE Record
5560 	  BIS_PMV_TIME_LEVELS_PVT.GET_TIME_PARAMETER_RECORD(
5561 	    p_TimeParamterName => 'BIS_PREV_REPORT_START_DATE',
5562 	    p_DateParameter		 => l_prev_report_Start_date,
5563 	    x_parameterRecord  => l_parameter_rec,
5564 	    x_Return_status    => x_return_Status,
5565 	    x_msg_count        => x_msg_count,
5566 	    x_msg_data         => x_msg_data
5567 	  );
5568           CREATE_PARAMETER ( p_user_session_rec => l_user_session_rec,
5569             p_parameter_rec    => l_parameter_rec,
5570             x_return_status    => x_return_status,
5571             x_msg_count        => x_msg_count,
5572             x_msg_data         => x_msg_data
5573 	  );
5574           --nbarik 07/10/03 - Bug Fix 2999602 - Add BIS_PREVIOUS_EFFECTIVE_START_DATE and BIS_PREVIOUS_EFFECTIVE_END_DATE
5575           --BIS_PREVIOUS_EFFECTIVE_START_DATE Record
5576 	  l_parameter_rec.dimension   	          := NULL;
5577 	  l_parameter_rec.default_flag		  := 'N';
5578 	  l_parameter_rec.parameter_name	  := 'BIS_PREVIOUS_EFFECTIVE_START_DATE';
5579 	  l_parameter_rec.parameter_value	  := l_prev_time_level_id;
5580 	  l_parameter_rec.parameter_description   := l_prev_time_level_value;
5581           l_parameter_rec.period_date             := l_prev_effective_start_date;
5582 
5583           CREATE_PARAMETER ( p_user_session_rec => l_user_session_rec,
5584             p_parameter_rec    => l_parameter_rec,
5585             x_return_status    => x_return_status,
5586             x_msg_count        => x_msg_count,
5587             x_msg_data         => x_msg_data
5588 	  );
5589           --BIS_PREVIOUS_EFFECTIVE_END_DATE Record
5590 	  l_parameter_rec.dimension   	          := NULL;
5591 	  l_parameter_rec.default_flag		  := 'N';
5592 	  l_parameter_rec.parameter_name	  := 'BIS_PREVIOUS_EFFECTIVE_END_DATE';
5593 	  l_parameter_rec.parameter_value	  := l_prev_time_level_id;
5594 	  l_parameter_rec.parameter_description   := l_prev_time_level_value;
5595           l_parameter_rec.period_date             := l_prev_effective_end_date;
5596 
5597           CREATE_PARAMETER ( p_user_session_rec => l_user_session_rec,
5598             p_parameter_rec    => l_parameter_rec,
5599             x_return_status    => x_return_status,
5600             x_msg_count        => x_msg_count,
5601             x_msg_data         => x_msg_data
5602 	  );
5603 
5604 	/*-----BugFix#2887200 -ansingh-------*/
5605 
5606                 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
5607             	  	RETURN;
5608                 END IF;
5609 
5610            ELSE
5611 		if pOrgParam = 1 then
5612                    l_time_parameter_rec.org_name := pParameter1;
5613                    l_time_parameter_rec.org_value := pParameterValue1;
5614 		elsif pOrgParam = 2 then
5615                    l_time_parameter_rec.org_name := pParameter2;
5616                    l_time_parameter_rec.org_value := pParameterValue2;
5617 		elsif pOrgParam = 3 then
5618                    l_time_parameter_rec.org_name := pParameter3;
5619                    l_time_parameter_rec.org_value := pParameterValue3;
5620 		elsif pOrgParam = 4 then
5621                    l_time_parameter_rec.org_name := pParameter4;
5622                    l_time_parameter_rec.org_value := pParameterValue4;
5623 		elsif pOrgParam = 5 then
5624                    l_time_parameter_rec.org_name := pParameter5;
5625                    l_time_parameter_rec.org_value := pParameterValue5;
5626 		elsif pOrgParam = 6 then
5627                    l_time_parameter_rec.org_name := pParameter6;
5628                    l_time_parameter_rec.org_value := pParameterValue6;
5629 		elsif pOrgParam = 7 then
5630                    l_time_parameter_rec.org_name := pParameter7;
5631                    l_time_parameter_rec.org_value := pParameterValue7;
5632 		elsif pOrgParam = 8 then
5633                    l_time_parameter_rec.org_name := pParameter8;
5634                    l_time_parameter_rec.org_value := pParameterValue8;
5635 		elsif pOrgParam = 9 then
5636                    l_time_parameter_rec.org_name := pParameter9;
5637                    l_time_parameter_rec.org_value := pParameterValue9;
5638 		elsif pOrgParam = 10 then
5639                    l_time_parameter_rec.org_name := pParameter10;
5640                    l_time_parameter_rec.org_value := pParameterValue10;
5641 		elsif pOrgParam = 11 then
5642                    l_time_parameter_rec.org_name := pParameter11;
5643                    l_time_parameter_rec.org_value := pParameterValue11;
5644 		elsif pOrgParam = 12 then
5645                    l_time_parameter_rec.org_name := pParameter12;
5646                    l_time_parameter_rec.org_value := pParameterValue12;
5647 		elsif pOrgParam = 13 then
5648                    l_time_parameter_rec.org_name := pParameter13;
5649                    l_time_parameter_rec.org_value := pParameterValue13;
5650 		elsif pOrgParam = 14 then
5651                    l_time_parameter_rec.org_name := pParameter14;
5652                    l_time_parameter_rec.org_value := pParameterValue14;
5653 		elsif pOrgParam = 15 then
5654                    l_time_parameter_rec.org_name := pParameter15;
5655                    l_time_parameter_rec.org_value := pParameterValue15;
5656                 else
5657                    l_time_parameter_rec.org_value := G_ALL;
5658                 end if;
5659 
5660                 l_time_parameter_Rec.parameter_name := pTimeParameter;
5661                 l_time_parameter_rec.from_description := pTimeFromParameter;
5662 	        l_time_parameter_rec.to_Description := pTimeToParameter;
5663                 l_time_parameter_rec.default_flag := pAddToDefault;
5664 	        l_time_parameter_rec.dimension := substr(pTimeParameter,1, instr(pTimeParameter,'+')-1);
5665 	        l_time_parameter_rec.required_flag := pTimeRequired;
5666                 l_time_parameter_rec.parameter_label := pTimeParamName;
5667                 l_time_parameter_rec.id_flag := pSaveByIds;
5668 	        validate_and_save_Time(p_user_session_Rec => l_user_session_rec
5669                         				 ,p_time_parameter_rec => l_time_parameter_Rec
5670                         				 ,x_return_status => x_return_status
5671                       				 ,x_msg_count => x_msg_count
5672                     				 ,x_msg_data => x_msg_Data
5673                 				 );
5674           IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)THEN
5675       	  	RETURN;
5676           END IF;
5677       END IF;
5678 	END IF;
5679 	COMMIT;
5680 EXCEPTION
5681   WHEN FND_API.G_EXC_ERROR THEN
5682        ROLLBACK;
5683        x_return_status := FND_API.G_RET_STS_ERROR;
5684        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
5685   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5686        ROLLBACK;
5687        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5688        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
5689   WHEN OTHERS THEN
5690        ROLLBACK;
5691        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5692        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
5693 END;
5694 
5695 --jprabhud 09/24/02 - Enh 2470068 Storing of Graphs to FND_LOBS
5696 PROCEDURE RETRIEVE_GRAPH_FILEID(p_user_id in varchar2,
5697                                 p_schedule_id in varchar2,
5698                                 p_attribute_name in varchar2,
5699                                 p_function_name in varchar2,
5700                                 x_graph_file_id out NOCOPY varchar2)
5701 IS
5702 cursor cGraphFileId is
5703 select session_value from bis_user_attributes
5704     where user_id = p_user_id
5705     and schedule_id = p_schedule_id
5706     and attribute_name = p_attribute_name
5707     and function_name = p_function_name;
5708 
5709 BEGIN
5710     if cGraphFileId%ISOPEN then
5711       CLOSE cGraphFileId;
5712     end if;
5713 
5714     OPEN cGraphFileId;
5715     LOOP
5716        FETCH cGraphFileId INTO x_graph_file_id ;
5717        if cGraphFileId%NOTFOUND then
5718             CLOSE cGraphFileId;
5719             RAISE NO_DATA_FOUND;
5720        end if;
5721        EXIT;
5722     END LOOP;
5723     CLOSE cGraphFileId;
5724 EXCEPTION
5725 WHEN NO_DATA_FOUND then
5726      x_graph_file_id := null;
5727 WHEN  others then
5728      x_graph_file_id := null;
5729 END RETRIEVE_GRAPH_FILEID;
5730 
5731 --jprabhud 09/24/02 - Enh 2470068 Storing of Graphs to FND_LOBS
5732 -- save the file id associated with the previous schedule, for the same plug,
5733 -- for the new schedule id as the previous schedule gets deleted.
5734 PROCEDURE SAVE_GRAPH_FILEID(p_user_id in varchar2,
5735                             p_schedule_id in varchar2,
5736                             p_attribute_name in varchar2,
5737                             p_function_name in varchar2,
5738                             p_graph_file_id in varchar2)
5739 IS
5740 BEGIN
5741    insert into bis_user_attributes
5742                   (user_id, function_name, attribute_name, session_value,
5743                    schedule_id,creation_date, created_by,
5744                    last_update_Date, last_updated_by)
5745                   VALUES
5746                   (p_user_id,p_function_name,p_attribute_name,p_graph_file_id,
5747                    p_schedule_id,sysdate,-1,sysdate,-1);
5748    commit;
5749 END  SAVE_GRAPH_FILEID;
5750 
5751 -- jprabhud - 12/20/02 - NLS Bug 2320171 Graph Fonts and Mutli-Byte characters
5752 -- x_context_values has the format PATH:value;URI:value
5753 PROCEDURE RETRIEVE_CONTEXT_VALUES(p_user_id in varchar2,
5754                                   p_schedule_id in varchar2,
5755                                   p_attribute_name in varchar2,
5756                                   p_function_name in varchar2,
5757                                   x_context_values out NOCOPY varchar2)
5758 IS
5759 cursor cContextValues is
5760 select session_value from bis_user_attributes
5761     where user_id = p_user_id
5762     and schedule_id = p_schedule_id
5763     and attribute_name = p_attribute_name
5764     and function_name = p_function_name;
5765 
5766 BEGIN
5767     if cContextValues%ISOPEN then
5768       CLOSE cContextValues;
5769     end if;
5770 
5771     OPEN cContextValues;
5772     LOOP
5773        FETCH cContextValues INTO x_context_values ;
5774        if cContextValues%NOTFOUND then
5775             CLOSE cContextValues;
5776             RAISE NO_DATA_FOUND;
5777        end if;
5778        EXIT;
5779     END LOOP;
5780     CLOSE cContextValues;
5781 EXCEPTION
5782 WHEN NO_DATA_FOUND then
5783      x_context_values := null;
5784 WHEN  others then
5785      x_context_values := null;
5786 END RETRIEVE_CONTEXT_VALUES;
5787 
5788 
5789 -- jprabhud - 12/20/02 - NLS Bug 2320171 Graph Fonts and Mutli-Byte characters
5790 -- p_context_values has the format PATH:value;URI:value
5791 PROCEDURE SAVE_CONTEXT_VALUES(p_user_id in varchar2,
5792                               p_schedule_id in varchar2,
5793                               p_attribute_name in varchar2,
5794                               p_function_name in varchar2,
5795                               p_context_values in varchar2)
5796 IS
5797 BEGIN
5798    insert into bis_user_attributes
5799                   (user_id, function_name, attribute_name, session_value,
5800                    schedule_id,creation_date, created_by,
5801                    last_update_Date, last_updated_by)
5802                   VALUES
5803                   (p_user_id,p_function_name,p_attribute_name,p_context_values,
5804                    p_schedule_id,sysdate,-1,sysdate,-1);
5805    commit;
5806 END  SAVE_CONTEXT_VALUES;
5807 
5808 
5809 
5810 function GET_LOV_WHERE(p_parameter_tbl in BIS_PMV_PARAMETERS_PVT.PARAMETER_TBL_TYPE,
5811                        p_where_clause in VARCHAR2,
5812                        p_user_session_rec IN BIS_PMV_SESSION_PVT.session_rec_type)
5813 return varchar2 is
5814   l_lov_where varchar2(2000) := p_where_clause;
5815   l_index1 number := 1;
5816   l_index2 number := 1;
5817   l_count number := 0;
5818   l_attribute_code varchar2(2000);
5819   l_attribute2 varchar2(2000);
5820   l_parameter_name varchar2(2000);
5821   l_parameter_rec BIS_PMV_PARAMETERS_PVT.PARAMETER_REC_TYPE;
5822   l_parameter_value varchar2(2000);
5823   l_parameter_description varchar2(2000);
5824   l_return_status varchar2(2000);
5825   l_msg_count number;
5826   l_msg_data varchar2(2000);
5827   l_index number;
5828 
5829 begin
5830   loop
5831       /*
5832       --nbarik - 05/05/03 - Bug Fix 2691199 - Use p_where_clause here
5833       as l_lov_where will be changed after value replace and the index
5834       won't be correct
5835 
5836       l_index1 := instr(l_lov_where, '{', l_index1);
5837       l_index2 := instr(l_lov_where, '}', l_index1+1);
5838       */
5839       l_index1 := instr(p_where_clause, '{', l_index1);
5840       l_index2 := instr(p_where_clause, '}', l_index1+1);
5841       if l_index1 = 0 or l_index2 = 0 or l_count > 100 then
5842          exit;
5843       end if;
5844       --nbarik - 05/05/03 - Bug Fix 2691199 - Use p_where_clause
5845       --l_attribute_code := substr(l_lov_where, l_index1+1, l_index2-l_index1-1);
5846       l_attribute_code := substr(p_where_clause, l_index1+1, l_index2-l_index1-1);
5847       l_attribute2 := BIS_PMV_UTIL.getDimensionForAttribute(rtrim(ltrim(l_attribute_code)),p_user_session_rec.region_code);
5848       l_parameter_name := nvl(l_attribute2, l_attribute_code);
5849 
5850       if p_parameter_tbl.COUNT > 0 then
5851          for i in p_parameter_tbl.FIRST..p_parameter_tbl.LAST loop
5852            l_parameter_rec := p_parameter_tbl(i);
5853            if l_parameter_rec.parameter_name = l_parameter_name then
5854 
5855               IF l_parameter_rec.id_flag = 'Y' THEN
5856                  l_parameter_value := l_parameter_rec.parameter_description;
5857               ELSIF (instr(l_parameter_rec.parameter_description, '^~]*') > 0)
5858               then
5859                  l_index := INSTR(l_parameter_rec.parameter_description, '^~]*');
5860                  DECODE_ID_VALUE (
5861                 p_code => l_parameter_rec.parameter_description
5862                ,p_index => l_index
5863                ,x_id => l_parameter_value
5864                ,x_value => l_parameter_description);
5865                 IF INSTR(l_parameter_value, '''', 1)<>1 AND INSTR(l_parameter_value, '''', -1)<>
5866                          LENGTH(l_parameter_value) THEN
5867                  l_parameter_value := '''' || l_parameter_value || '''';
5868                END IF;
5869               ELSIF (l_parameter_rec.parameter_description=g_All) then
5870                 l_parameter_value := l_parameter_rec.parameter_description;
5871               ELSE
5872                  GET_NONTIME_VALIDATED_VALUE (p_parameter_name => l_parameter_rec.parameter_name
5873                                      ,p_parameter_description => l_parameter_rec.parameter_description
5874                                      ,p_region_code => p_user_session_rec.region_code
5875                                      ,p_responsibility_id => p_user_session_rec.responsibility_id
5876                                      ,x_parameter_value => l_parameter_value
5877                                      ,x_return_status => l_return_status
5878                                      ,x_msg_count => l_msg_count
5879                                      ,x_msg_data => l_msg_data);
5880               END IF; --end of id_flag
5881 
5882               l_parameter_description := l_parameter_rec.parameter_description;
5883               exit;
5884            end if;
5885          end loop;
5886       end if;
5887 
5888       if l_attribute2 is not null then
5889           if (l_parameter_value = g_all) then
5890             l_parameter_value := ''''||upper(l_parameter_value) ||'''';
5891          end if;
5892          l_lov_where := replace(l_lov_where, '{'||l_attribute_code||'}',l_parameter_value);
5893       else
5894          l_lov_where := replace(l_lov_where, '{'||l_attribute_code||'}',l_parameter_description);
5895       end if;
5896 
5897       l_index1 := l_index2+1;
5898       l_count := l_count + 1;
5899   end loop;
5900 
5901   return l_lov_where;
5902 
5903 end GET_LOV_WHERE;
5904 
5905 
5906 
5907 /* serao - added pSessionId so that the as_of_date does not get over-ridden to
5908   sysdate */
5909 PROCEDURE bulkInsertIntoPage(
5910  pSessionId IN VARCHAR2,
5911  pPageId          in VARCHAR2,
5912  pUserId             in VARCHAR2,
5913  pFunctionName IN VARCHAR2,
5914   pAttributeNameTbl IN BISVIEWER.t_char,
5915   pDimensionTbl IN BISVIEWER.t_char,
5916   pSessionValueTbl IN BISVIEWER.t_char,
5917   pSessionDescTbl IN BISVIEWER.t_char,
5918   pPeriodDateTbl IN BISVIEWER.t_date
5919 ) IS
5920 BEGIN
5921   IF pAttributeNameTbl IS NOT NULL AND pAttributeNameTbl.COUNT >0 THEN
5922     FORALL i IN pAttributeNameTbl.FIRST..pAttributeNameTbl.LAST
5923            insert into bis_user_attributes (
5924 				      SESSION_ID,
5925                                       USER_ID,
5926                                       FUNCTION_NAME,
5927                                       PAGE_ID,
5928                                       SESSION_VALUE,
5929                                       SESSION_DESCRIPTION,
5930                                       ATTRIBUTE_NAME,
5931                                       DIMENSION,
5932                                       PERIOD_DATE,
5933                                       LAST_UPDATE_DATE
5934                                       )VALUES (
5935 					pSessionId,
5936                                         pUserId,
5937                                         pFunctionName,
5938                                         pPageId,
5939                                         pSessionValueTbl(i),
5940                                         pSessionDescTbl(i),
5941                                         pAttributeNameTbl(i),
5942                                         pDimensionTbl(i),
5943                                         pPeriodDateTbl(i),
5944                                         SYSDATE
5945                                       );
5946   END IF;
5947 END bulkInsertIntoPage;
5948 
5949 --nbarik - 04/20/04 - Enhancement 3378782 - Parameter Validation
5950 PROCEDURE VALIDATE_DRILL_PARAMETER
5951 (p_user_param_tbl	IN	parameter_tbl_type
5952 ,p_user_param_rec   IN  parameter_rec_type
5953 ,p_user_session_rec	IN	BIS_PMV_SESSION_PVT.session_rec_type
5954 ,x_valid OUT NOCOPY VARCHAR2
5955 ,x_return_status	OUT	NOCOPY VARCHAR2
5956 ,x_msg_count		OUT	NOCOPY NUMBER
5957 ,x_msg_data		OUT	NOCOPY VARCHAR2
5958 ) IS
5959 
5960 l_user_param_tbl	parameter_tbl_type;
5961 l_user_param_rec    parameter_rec_type;
5962 l_lov_where  varchar2(2000);
5963 
5964 BEGIN
5965 
5966      l_useR_param_Tbl := p_user_param_Tbl;
5967      l_user_param_rec := p_user_param_rec;
5968      	IF (l_user_param_rec.parameter_name IS NOT NULL ) THEN
5969          IF (l_user_param_rec.parameter_description <> ROLLING_DIMENSION_DESCRIPTION
5970          OR (trim(l_user_param_rec.parameter_description) IS NULL AND l_user_param_rec.required_flag = 'Y') ) THEN
5971                 IF (l_user_param_rec.lov_where is not null and
5972                     instr(l_user_param_rec.parameter_description, '^~]*') <= 0 and
5973                     l_user_param_rec.parameter_description  <> g_all ) then
5974                    l_lov_where :=  GET_LOV_WHERE(p_parameter_tbl => l_user_param_Tbl,
5975                                                  p_where_clause => l_user_param_rec.lov_where,
5976                                                  p_user_session_rec => p_user_session_rec);
5977                    l_user_param_rec.lov_where := l_lov_where;
5978                 END IF;
5979 
5980 
5981            	VALIDATE_PARAMETER(
5982                             p_user_session_rec => p_user_session_rec
5983                      	  , p_parameter_rec => l_user_param_rec
5984                           , x_valid => x_valid
5985                           , x_return_status => x_return_status
5986                           , x_msg_count => x_msg_count
5987                           , x_msg_Data => x_msg_data);
5988   	  END IF; -- if rolling dim
5989 
5990      END IF; -- if param name is not null
5991 
5992 EXCEPTION
5993   WHEN FND_API.G_EXC_ERROR THEN
5994        ROLLBACK;
5995        x_return_status := FND_API.G_RET_STS_ERROR;
5996        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
5997   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5998        ROLLBACK;
5999        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6000        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
6001   WHEN OTHERS THEN
6002        ROLLBACK;
6003        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6004        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
6005 
6006 END VALIDATE_DRILL_PARAMETER;
6007 
6008 FUNCTION GET_PARAM_LOV_WHERE (
6009  pParamName IN VARCHAR2,
6010  pParamRegionGroup IN parameter_group_tbl_type
6011  ) RETURN VARCHAR2
6012  IS
6013  BEGIN
6014 
6015     IF pParamRegionGroup IS NOT NULL AND pParamRegionGroup.COUNT >0 THEN
6016     FOR i In pParamRegionGroup.FIRST..pParamRegionGroup.LAST LOOP
6017         IF (pParamRegionGroup(i).attribute_name = pParamName) THEN
6018           RETURN pParamRegionGroup(i).lov_where;
6019         END IF;
6020     END LOOP;
6021    END IF;
6022 
6023   RETURN NULL;
6024  END GET_PARAM_LOV_WHERE;
6025 
6026 --nbarik - 04/20/04 - Enhancement 3378782 - Parameter Validation
6027 PROCEDURE GET_VALIDATED_DRILL_PARAMS (
6028   lAttributeCodeTable IN BISVIEWER.t_char,
6029   lDimensionTable     IN BISVIEWER.t_char,
6030   lSessionValueTable  IN BISVIEWER.t_char,
6031   lSessionDescTable   IN BISVIEWER.t_char,
6032   lPeriodDateTable    IN BISVIEWER.t_date,
6033   pParamRegionCode IN VARCHAR2,
6034   pParamFunctionName IN VARCHAR2,
6035   pParamRegionGroup IN parameter_group_tbl_type,
6036   pPageId IN  VARCHAR2,
6037   pUserId IN VARCHAR2,
6038   xAttributeCodeTable OUT NOCOPY BISVIEWER.t_char,
6039   xDimensionTable     OUT NOCOPY BISVIEWER.t_char,
6040   xSessionValueTable  OUT NOCOPY BISVIEWER.t_char,
6041   xSessionDescTable   OUT NOCOPY BISVIEWER.t_char,
6042   xPeriodDateTable    OUT NOCOPY BISVIEWER.t_date,
6043   x_DrillDefaultParameters OUT NOCOPY VARCHAR2
6044 )
6045 IS
6046 
6047  CURSOR getFunctionParams IS
6048  SELECT parameters
6049  FROM fnd_form_functions
6050  WHERE function_name = pParamFunctionName;
6051  /*
6052  CURSOR getPageParams IS
6053  SELECt attribute_name, session_value, session_description, dimension, period_date, operator
6054  FROM bis_user_attributes
6055  WHERE page_id = pPageId
6056  AND user_id = pUserId;
6057  */
6058  -- nbarik - 03/29/04 - Parameter Validation while navigating through related links
6059  CURSOR c_validation_parameters IS
6060  SELECT a.attribute2, c.attribute26
6061  FROM ak_region_items a, bis_ak_region_item_extension c
6062  WHERE a.region_code=pParamRegionCode AND a.attribute_code=c.attribute_code(+) AND a.region_code=c.region_code(+);
6063 
6064   lValidationAttrList BISVIEWER.t_char;
6065   lValidationReqList BISVIEWER.t_char;
6066   l_validation_req   VARCHAR2(30);
6067   l_parameter_rec		PARAMETER_REC_TYPE;
6068   l_parameter_Rec_tbl	parameter_tbl_type;
6069   l_user_Session_rec	BIS_PMV_SESSION_PVT.session_rec_type;
6070   lCount NUMBER := 1;
6071   lFunctionParams VARCHAR2(2000);
6072   lSaveById VARCHAR2(1);
6073   l_return_status VARCHAR2(2000);
6074   l_msg_count NUMBER;
6075   l_msg_data  VARCHAR2(2000);
6076   l_valid     VARCHAR2(1);
6077   l_PLSQLFunction VARCHAR2(200);
6078   l_function_result VARCHAR2(3000);
6079   l_attribute_code  VARCHAR2(150);
6080   l_default_value   VARCHAR2(2000);
6081   l_default_desc   VARCHAR2(2000);
6082   l_pParameters    VARCHAR2(2000);
6083 BEGIN
6084 
6085  xAttributeCodeTable := lAttributeCodeTable;
6086  xDimensionTable := lDimensionTable;
6087  xSessionValueTable := lSessionValueTable;
6088  xSessionDescTable := lSessionDescTable;
6089  xPeriodDateTable := lPeriodDateTable;
6090 
6091    -- nbarik - 03/29/04 - Parameter Validation while navigating through related links
6092    IF c_validation_parameters%ISOPEN THEN
6093       CLOSE c_validation_parameters;
6094    END IF;
6095    OPEN c_validation_parameters;
6096    FETCH c_validation_parameters BULK COLLECT INTO lValidationAttrList, lValidationReqList;
6097    CLOSE c_validation_parameters;
6098 
6099    IF getFunctionParams%ISOPEN THEN
6100       CLOSE getFunctionParams ;
6101    END IF;
6102    OPEN getFunctionParams ;
6103    FETCH getFunctionParams  INTO lFunctionParams;
6104    CLOSE getFunctionParams ;
6105 
6106   l_PLSQLFunction := BIS_PMV_UTIL.getParameterValue(lFunctionParams, 'pPLSQLFunction');
6107   processDynamicAttributeValue(
6108       pPlSqlFunctionName => l_PLSQLFunction
6109     , xOutPut => l_function_result
6110   );
6111   --l_function_result := BIS_PMV_UTIL.getFunctionResult(l_PLSQLFunction);
6112   IF l_function_result IS NOT NULL THEN
6113     IF substr(l_function_result, 1, 1) = '&' THEN
6114       lFunctionParams := lFunctionParams || l_function_result;
6115     ELSE
6116       lFunctionParams := lFunctionParams || '&' || l_function_result;
6117     END IF;
6118   END IF;
6119   -- For report default parameters
6120   l_pParameters := BIS_PMV_UTIL.getParameterValue(lFunctionParams, 'pParameters');
6121   IF (l_pParameters IS NOT NULL) THEN
6122     lFunctionParams := replace (lFunctionParams, '~', '&');
6123     lFunctionParams := replace (lFunctionParams, '@', '=');
6124     lFunctionParams := replace (lFunctionParams, '^', '+');
6125   END IF;
6126 
6127   lsaveById  := BIS_PMV_UTIL.getParameterValue (lFunctionParams, 'pParamIds');
6128   IF lSaveById IS NULL THEN
6129     lSaveByid := 'N';
6130   END IF;
6131 
6132   IF lAttributeCodeTable IS NOT NULL AND lAttributeCodeTable.COUNT > 0 THEN
6133     FOR i IN lAttributeCodeTable.FIRST..lAttributeCodeTable.LAST LOOP
6134         l_parameter_rec.parameter_name := lAttributeCodeTable(i);
6135         l_parameter_rec.default_flag	:=	'N';
6136         l_parameter_rec.dimension := lDimensionTable(i);
6137         l_parameter_Rec.parameter_label :=  lAttributeCodeTable(i);
6138         --l_parameter_rec.operator := lOperatorlist(i);
6139         l_parameter_rec.required_flag := 'N'; --mandatory param validation will not happen
6140         l_parameter_rec.lov_where := GET_PARAM_LOV_WHERE (lAttributeCodeTable(i), pParamRegionGroup );
6141         l_parameter_rec.id_flag := lSaveById;
6142         l_parameter_rec.parameter_value := lSessionValueTable(i);
6143         IF (lSaveById = 'Y') THEN
6144           l_parameter_rec.parameter_description := lSessionValueTable(i); -- because in validate_nontime, desc used to validate
6145         ELSE
6146           l_parameter_rec.parameter_description := lSessionDescTable(i);
6147         END IF;
6148 
6149         l_parameter_rec_tbl(lCount) := l_parameter_rec;
6150         lCount := lCount +1;
6151     END LOOP;
6152   END IF;
6153 
6154   l_user_session_rec.function_name := pParamFunctionName;
6155   l_user_session_rec.region_code := pParamRegionCode;
6156   l_user_session_rec.page_id := pPageId;
6157   l_user_session_rec.session_id := icx_sec.getID(icx_sec.PV_SESSION_ID); -- can we call this without validate
6158   l_user_session_rec.responsibility_id := icx_sec.getID(icx_sec.PV_RESPONSIBILITY_ID);
6159   l_user_Session_rec.user_id := pUserId;
6160 
6161   IF lAttributeCodeTable IS NOT NULL AND lAttributeCodeTable.COUNT > 0 THEN
6162     FOR i IN lAttributeCodeTable.FIRST..lAttributeCodeTable.LAST LOOP
6163       l_validation_req := 'N';
6164       IF lValidationAttrList IS NOT NULL AND lValidationAttrList.COUNT > 0 THEN
6165         FOR j IN lValidationAttrList.FIRST..lValidationAttrList.LAST LOOP
6166           IF (lAttributeCodeTable(i) = lValidationAttrList(j)) THEN
6167             l_validation_req := lValidationReqList(j);
6168             EXIT;
6169           END IF;
6170         END LOOP;
6171       END IF;
6172       l_valid := 'Y';
6173       IF (l_validation_req = 'Y') THEN
6174         VALIDATE_DRILL_PARAMETER(
6175             p_user_param_tbl => l_parameter_rec_tbl
6176           , p_user_param_rec => l_parameter_rec_tbl(i)
6177           , p_user_session_rec => l_user_Session_rec
6178           , x_valid => l_valid
6179           , x_return_status => l_return_status
6180           , x_msg_count => l_msg_count
6181           , x_msg_data => l_msg_data
6182         );
6183         IF l_valid <> 'Y' THEN
6184           -- Assign the value from form function
6185           l_attribute_code := BIS_PMV_UTIL.getAttributeForDimension(lAttributeCodeTable(i), pParamRegionCode);
6186           l_default_value := BIS_PMV_UTIL.getParameterValue(lFunctionParams, l_attribute_code);
6187           IF l_default_value IS NOT NULL THEN
6188 		      IF (lSaveById = 'Y') THEN
6189 	            GET_NONTIME_VALIDATED_ID (p_parameter_name => l_parameter_rec_tbl(i).parameter_name
6190 	                                 ,p_parameter_value => l_default_value
6191 	                                 ,p_lov_where => l_parameter_rec_tbl(i).lov_where
6192 	                                 ,p_region_code => l_user_session_rec.region_code
6193 	                                 ,p_responsibility_id => l_user_session_rec.responsibility_id
6194 	                                 ,x_parameter_description => l_default_desc
6195 	                                 ,x_return_status => l_return_status
6196 	                                 ,x_msg_count => l_msg_count
6197 	                                 ,x_msg_data => l_msg_data);
6198 		      ELSE
6199 	            l_default_desc := l_default_value;
6200 	            GET_NONTIME_VALIDATED_VALUE (p_parameter_name => l_parameter_rec_tbl(i).parameter_name
6201 	                                     ,p_parameter_description => l_default_desc
6202 	                                     ,p_lov_where => l_parameter_rec_tbl(i).lov_where
6203 	                                     ,p_region_code => l_user_session_rec.region_code
6204 	                                     ,p_responsibility_id => l_user_session_rec.responsibility_id
6205 	                                     ,x_parameter_value => l_default_value
6206 	                                     ,x_return_status => l_return_status
6207 	                                     ,x_msg_count => l_msg_count
6208 	                                     ,x_msg_data => l_msg_data);
6209 	          END IF;
6210 	          IF (substr(l_default_value,1,1) <> '''') THEN
6211 	            l_default_value := ''''|| l_default_value || '''';
6212 	          END IF;
6213 	          IF (x_DrillDefaultParameters IS NULL) THEN
6214 	            x_DrillDefaultParameters := 'pDrillParamRegion=' || pParamRegionCode;
6215 	          END IF;
6216 			  x_DrillDefaultParameters := x_DrillDefaultParameters || '&pDrillParamName=' || BIS_PMV_UTIL.encode(lAttributeCodeTable(i)) ||
6217 			                              '&pDrillPrevDesc=' || BIS_PMV_UTIL.encode(xSessionDescTable(i)) ||
6218 			                               '&pDrillCurrentDesc=' || BIS_PMV_UTIL.encode(l_default_desc);
6219 			  xSessionValueTable(i) := l_default_value;
6220 			  xSessionDescTable(i) := l_default_desc;
6221           END IF;
6222           -- Assign the first value in the drop down - Not required
6223         END IF;
6224       END IF;
6225     END LOOP;
6226   END IF;
6227 
6228 END GET_VALIDATED_DRILL_PARAMS;
6229 
6230 PROCEDURE getPageParamFuncProps(
6231   pPageId IN VARCHAR2,
6232   pUserId IN VARCHAR2,
6233   xFunctionName OUT NOCOPY VARCHAR2,
6234   xRegionCode OUT NOCOPY VARCHAR2
6235 )
6236 IS
6237 CURSOR getPageToFunctionName IS
6238 SELECT function_name
6239 FROM bis_user_attributes
6240 WHERE page_id=pPageId
6241 AND user_id = pUserId
6242 AND function_name IS NOT NULL
6243 AND rownum < 2;
6244 
6245 BEGIN
6246 
6247  -- for the page 2 , get the function_name and hence the region for the pageTo
6248    IF getPageToFunctionName%ISOPEN then
6249       close getPageToFunctionName;
6250    END IF;
6251    OPEN getPageToFunctionName;
6252    FETCH getPageToFunctionName INTO xFunctionName;
6253    CLOSE getPageToFunctionName;
6254 
6255    IF (xFunctionName IS NOT NULL) THEN
6256       xRegionCode := BIS_PMV_UTIL.getReportRegion(xFunctionName);
6257    END IF;
6258 
6259 END getPageParamFuncProps;
6260 
6261 /* serao - 04/03- added sessionId to be inserted into page level records -
6262   mainly for the as_of_date so that it is not over-ridden by sysdate */
6263 PROCEDURE copyParamtersBetweenPages(
6264   pSessionId IN VARCHAR2,
6265   pFromPageId IN VARCHAR2,
6266   pToPageId IN VARCHAR2,
6267   pUserId IN VARCHAR2,
6268   xParamRegionCode OUT NOCOPY VARCHAR2,
6269   xParamFunctionName OUT NOCOPY VARCHAR2,
6270   xParamGroup  OUT NOCOPY parameter_group_tbl_type,
6271   -- nbarik - 04/20/04 - Enhancement 3378782 - Parameter Validation
6272   x_DrillDefaultParameters OUT NOCOPY VARCHAR2,
6273   x_return_status    OUT	NOCOPY VARCHAR2,
6274   x_msg_count	    OUT	NOCOPY NUMBER,
6275   x_msg_data	    OUT	NOCOPY VARCHAR2
6276 ) IS
6277 
6278 CURSOR getPageFromParams IS
6279 SELECT attribute_name, dimension, session_value, session_description, period_date
6280 FROM bis_user_attributes
6281 WHERE page_id = pFromPageId
6282 AND user_id = pUserId;
6283 
6284 vAttributeCodeTable BISVIEWER.t_char;
6285 vDimensionTable     BISVIEWER.t_char;
6286 vSessionValueTable     BISVIEWER.t_char;
6287 vSessionDescTable     BISVIEWER.t_char;
6288 vPeriodDateTable     BISVIEWER.t_date;
6289 
6290 lAttributeCodeTable BISVIEWER.t_char;
6291 lDimensionTable     BISVIEWER.t_char;
6292 lSessionValueTable     BISVIEWER.t_char;
6293 lSessionDescTable     BISVIEWER.t_char;
6294 lPeriodDateTable     BISVIEWER.t_date;
6295 
6296   lAttrNameForInsert BISVIEWER.t_char;
6297   lDimensionForInsert BISVIEWER.t_char;
6298   lSessValueForInsert BISVIEWER.t_char;
6299   lSessDescForInsert BISVIEWER.t_char;
6300   lPeriodDateForInsert BISVIEWER.t_date;
6301   lAttrNameForDelete BISVIEWER.t_char;
6302 
6303 lTCTExists boolean := false;
6304 lNestedRegionCode VARCHAR2(250);
6305 lAsofDateExists  boolean;
6306 l_valid VARCHAR2(1);
6307 BEGIN
6308 
6309    getPageParamFuncProps( pToPageId, pUserId, xParamFunctionName, xParamRegionCode);
6310 
6311     IF (xParamFunctionName IS NOT NULL AND xParamRegionCode IS NOT NULL ) THEN
6312 
6313         getParameterGroupsForRegion ( pRegionCode => xParamRegionCode,
6314                                       xParameterGroup =>  xParamGroup,
6315                                       xTCTExists => lTCTExists,
6316                                       xNestedRegion => lNestedRegionCode,
6317                                       xAsofDateExists => lAsofDateExists
6318                                      );
6319 
6320         -- get the attributes from the pageFrom
6321          IF getPageFromParams%ISOPEN then
6322             close getPageFromParams;
6323          END IF;
6324        OPEN getPageFromParams;
6325        FETCH getPageFromParams BULK COLLECT INTO vAttributeCodeTable, vDimensionTable, vSessionValueTable, vSessionDescTable, vPeriodDateTable;
6326        CLOSE getPageFromParams;
6327 
6328     --nbarik - 04/20/04 - Enhancement 3378782 - Parameter Validation
6329 	GET_VALIDATED_DRILL_PARAMS (
6330 	  lAttributeCodeTable  => vAttributeCodeTable,
6331 	  lDimensionTable      => vDimensionTable,
6332 	  lSessionValueTable   => vSessionValueTable,
6333 	  lSessionDescTable    => vSessionDescTable,
6334 	  lPeriodDateTable     => vPeriodDateTable,
6335 	  pParamRegionCode     => xParamRegionCode,
6336 	  pParamFunctionName   => xParamFunctionName,
6337 	  pParamRegionGroup    => xParamGroup,
6338 	  pPageId              => pToPageId,
6339 	  pUserId              => pUserId,
6340 	  xAttributeCodeTable  => lAttributeCodeTable,
6341 	  xDimensionTable      => lDimensionTable,
6342 	  xSessionValueTable   => lSessionValueTable,
6343 	  xSessionDescTable    => lSessionDescTable,
6344 	  xPeriodDateTable     => lPeriodDateTable,
6345 	  x_DrillDefaultParameters => x_DrillDefaultParameters
6346 	);
6347         --get all the delete and  insert tables
6348         getDeleteAndInsertTables(
6349           pUserId             => pUserId,
6350           pAttributeNameTbl => lAttributeCodeTable,
6351           pDimensionTbl => lDimensionTable,
6352           pSessionValueTbl => lSessionValueTable,
6353           pSessionDescTbl => lSessionDescTable,
6354           pPeriodDateTbl=> lPeriodDateTable,
6355           pParameterGroup => xParamGroup,
6356           pIncludeViewBy => FALSE,
6357           pIncludeBusinessPlan => FALSE,
6358           pIncludePrevAsOfDate => TRUE,
6359           xAttrNameForInsert => lAttrNameForInsert,
6360           xDimensionForInsert => lDimensionForInsert,
6361           xSessValueForInsert => lSessValueForInsert,
6362           xSessDescForInsert => lSessDescForInsert,
6363           xPeriodDateForInsert => lPeriodDateForInsert,
6364           xAttrNameForDelete => lAttrNameForDelete
6365         ) ;
6366 
6367         --bulk delete and insert for the page
6368         IF (lAttrNameForDelete IS NOT NULL AND lAttrNameForDelete.COUNT > 0) THEN
6369           bulkDeleteFromPage(
6370            pPAgeId  => pToPageId  ,
6371            pUserId  => pUserId   ,
6372            pFunctionName => xParamFunctionName,
6373             pAttributeNameTbl => lAttrNameForDelete
6374            );
6375         END IF;
6376 
6377         IF (lAttrNameForInsert IS NOT NULL AND lAttrNameForInsert.COUNT > 0) THEN
6378           bulkInsertIntoPage(
6379            pSessionId => pSessionId,
6380            pPageId => pToPageId,
6381            pUserId  => pUserId,
6382            pFunctionName => xParamFunctionName,
6383            pAttributeNameTbl => lAttrNameForInsert,
6384            pDimensionTbl => lDimensionForInsert,
6385            pSessionValueTbl => lSessValueForInsert,
6386            pSessionDescTbl => lSessDescForInsert,
6387            pPeriodDateTbl => lPeriodDateForInsert
6388           );
6389         END IF;
6390 
6391       END IF; -- lRegionCode
6392 
6393    COMMIT;
6394 
6395 EXCEPTION
6396   WHEN FND_API.G_EXC_ERROR THEN
6397        x_return_status := FND_API.G_RET_STS_ERROR;
6398        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
6399   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6400        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6401        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
6402   WHEN OTHERS THEN
6403        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6404        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
6405 END copyParamtersBetweenPages;
6406 
6407 procedure executeLovBindSQL
6408 (p_bind_sql  in varchar2
6409 ,p_bind_variables in varchar2
6410 ,p_time_flag      in varchar2
6411 ,x_parameter_id             out NOCOPY varchar2
6412 ,x_parameter_value          out NOCOPY varchar2
6413 ,x_start_date               out NOCOPY date
6414 ,x_end_date                 out NOCOPY date
6415 ,x_return_status	    OUT     NOCOPY VARCHAR2
6416 ,x_msg_count	    OUT	NOCOPY NUMBER
6417 ,x_msg_data		    OUT	NOCOPY VARCHAR2
6418 ) is
6419 
6420 l_bind_values BISVIEWER.t_char;
6421 
6422 begin
6423 
6424    if (length(p_bind_variables) > 0) then
6425       BIS_PMV_UTIL.SETUP_BIND_VARIABLES(
6426       p_bind_variables => p_bind_variables,
6427       x_bind_var_tbl => l_bind_values);
6428    end if;
6429 
6430    if (l_bind_values.COUNT = 1) then
6431 	if p_time_flag = 'Y' then
6432         execute immediate p_bind_sql into x_parameter_id, x_parameter_value, x_start_date, x_end_date using l_bind_values(1);
6433       else
6434         execute immediate p_bind_sql into x_parameter_id, x_parameter_value using l_bind_values(1);
6435       end if;
6436    elsif (l_bind_values.COUNT = 2) then
6437 	if p_time_flag = 'Y' then
6438         execute immediate p_bind_sql into x_parameter_id, x_parameter_value, x_start_date, x_end_date using l_bind_values(1), l_bind_values(2);
6439       else
6440         execute immediate p_bind_sql into x_parameter_id, x_parameter_value using l_bind_values(1), l_bind_values(2);
6441       end if;
6442    elsif (l_bind_values.COUNT = 3) then
6443 	if p_time_flag = 'Y' then
6444         execute immediate p_bind_sql into x_parameter_id, x_parameter_value, x_start_date, x_end_date using l_bind_values(1), l_bind_values(2), l_bind_values(3);
6445       else
6446         execute immediate p_bind_sql into x_parameter_id, x_parameter_value using l_bind_values(1), l_bind_values(2), l_bind_values(3);
6447       end if;
6448    else
6449      	executeLovDynamicSQL
6450  	(p_bind_sql  => p_bind_sql
6451 	,p_bind_values => l_bind_values
6452 	,p_time_flag => p_time_flag
6453 	,x_parameter_id => x_parameter_id
6454 	,x_parameter_value => x_parameter_value
6455 	,x_start_date => x_start_date
6456 	,x_end_date => x_end_date
6457 	,x_return_status => x_return_status
6458 	,x_msg_count => x_msg_count
6459 	,x_msg_data => x_msg_data
6460 	);
6461    end if;
6462 
6463 EXCEPTION
6464 WHEN OTHERS THEN
6465      	executeLovDynamicSQL
6466  	(p_bind_sql  => p_bind_sql
6467 	,p_bind_values => l_bind_values
6468 	,p_time_flag => p_time_flag
6469 	,x_parameter_id => x_parameter_id
6470 	,x_parameter_value => x_parameter_value
6471 	,x_start_date => x_start_date
6472 	,x_end_date => x_end_date
6473 	,x_return_status => x_return_status
6474 	,x_msg_count => x_msg_count
6475 	,x_msg_data => x_msg_data
6476 	);
6477 END executeLovBindSQL;
6478 
6479 procedure executeLovDynamicSQL
6480 (p_bind_sql  in varchar2
6481 ,p_bind_values in BISVIEWER.t_char
6482 ,p_time_flag      in varchar2
6483 ,x_parameter_id             out NOCOPY varchar2
6484 ,x_parameter_value          out NOCOPY varchar2
6485 ,x_start_date               out NOCOPY date
6486 ,x_end_date                 out NOCOPY date
6487 ,x_return_status	    OUT     NOCOPY VARCHAR2
6488 ,x_msg_count	    OUT	NOCOPY NUMBER
6489 ,x_msg_data		    OUT	NOCOPY VARCHAR2
6490 ) is
6491 
6492 l_bind_sql varchar2(2000);
6493 l_bind_col varchar2(2000);
6494 l_cursor integer;
6495 ignore integer;
6496 
6497 begin
6498 
6499    l_bind_sql := replace(p_bind_sql, ':', ':x');
6500 
6501    l_cursor := dbms_sql.open_cursor;
6502    dbms_sql.parse(l_cursor, l_bind_sql, DBMS_SQL.native);
6503 
6504    if (p_bind_values.COUNT > 0) then
6505     for i in p_bind_values.FIRST..p_bind_values.LAST loop
6506        l_bind_col := ':x'|| i;
6507        dbms_sql.bind_variable(l_cursor, l_bind_col, p_bind_values(i));
6508     end loop;
6509    end if;
6510 
6511    dbms_sql.define_column(l_cursor, 1, x_parameter_id, 2000);
6512    dbms_sql.define_column(l_cursor, 2, x_parameter_value, 2000);
6513 
6514    if p_time_flag = 'Y' then
6515       dbms_sql.define_column(l_cursor, 3, x_start_date);
6516       dbms_sql.define_column(l_cursor, 4, x_end_date);
6517    end if;
6518 
6519    ignore := dbms_sql.execute_and_fetch(l_cursor);
6520 
6521    dbms_sql.column_value (l_cursor, 1, x_parameter_id);
6522    dbms_sql.column_value (l_cursor, 2, x_parameter_value);
6523 
6524    if p_time_flag = 'Y' then
6525    	dbms_sql.column_value (l_cursor, 3, x_start_date);
6526    	dbms_sql.column_value (l_cursor, 4, x_end_date);
6527    end if;
6528 
6529    dbms_sql.close_cursor(l_cursor);
6530 
6531 EXCEPTION
6532   WHEN FND_API.G_EXC_ERROR THEN
6533        x_return_status := FND_API.G_RET_STS_ERROR;
6534        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
6535   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6536        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6537        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
6538   WHEN OTHERS THEN
6539        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6540        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
6541 END executeLovDynamicSQL;
6542 
6543 PROCEDURE copyParamsFromReportToPage(
6544   pFunctionName IN VARCHAR2,
6545   pSessionId IN VARCHAR2,
6546   pUserId IN VARCHAR2,
6547   pToPageId IN VARCHAR2,
6548   xParamRegionCode OUT NOCOPY VARCHAR2,
6549   xParamFunctionName OUT NOCOPY VARCHAR2,
6550   xParamGroup OUT NOCOPY parameter_group_tbl_type,
6551   x_DrillDefaultParameters OUT NOCOPY VARCHAR2,
6552   x_return_status    OUT	NOCOPY VARCHAR2,
6553   x_msg_count	    OUT	NOCOPY NUMBER,
6554   x_msg_data	    OUT	NOCOPY VARCHAR2
6555 ) IS
6556 
6557 
6558 CURSOR getParamsFromReport IS
6559 SELECT attribute_name, dimension, session_value, session_description, period_date
6560 FROM bis_user_attributes
6561 WHERE function_name = pFunctionName
6562 AND session_id = pSessionId
6563 AND user_id = pUserId
6564 AND schedule_id IS NULL;
6565 
6566 vAttributeCodeTable BISVIEWER.t_char;
6567 vDimensionTable     BISVIEWER.t_char;
6568 vSessionValueTable     BISVIEWER.t_char;
6569 vSessionDescTable     BISVIEWER.t_char;
6570 vPeriodDateTable     BISVIEWER.t_date;
6571 
6572 lAttributeCodeTable BISVIEWER.t_char;
6573 lDimensionTable     BISVIEWER.t_char;
6574 lSessionValueTable     BISVIEWER.t_char;
6575 lSessionDescTable     BISVIEWER.t_char;
6576 lPeriodDateTable     BISVIEWER.t_date;
6577 
6578   lAttrNameForInsert BISVIEWER.t_char;
6579   lDimensionForInsert BISVIEWER.t_char;
6580   lSessValueForInsert BISVIEWER.t_char;
6581   lSessDescForInsert BISVIEWER.t_char;
6582   lPeriodDateForInsert BISVIEWER.t_date;
6583   lAttrNameForDelete BISVIEWER.t_char;
6584 
6585 lTCTExists boolean := false;
6586 lNestedRegionCode VARCHAR2(250);
6587 lAsofDateExists  boolean;
6588 l_valid VARCHAR2(1);
6589 BEGIN
6590 
6591    getPageParamFuncProps( pToPageId, pUserId, xParamFunctionName, xParamRegionCode);
6592 
6593     IF (xParamFunctionName IS NOT NULL AND xParamRegionCode IS NOT NULL ) THEN
6594         getParameterGroupsForRegion ( pRegionCode => xParamRegionCode,
6595                                       xParameterGroup =>  xParamGroup,
6596                                       xTCTExists => lTCTExists,
6597                                       xNestedRegion => lNestedRegionCode,
6598                                       xAsofDateExists => lAsofDateExists);
6599 
6600        -- get the attributes from the pageFrom
6601        IF getParamsFromReport%ISOPEN then
6602             close getParamsFromReport;
6603        END IF;
6604        OPEN getParamsFromReport;
6605        FETCH getParamsFromReport BULK COLLECT INTO vAttributeCodeTable, vDimensionTable, vSessionValueTable, vSessionDescTable, vPeriodDateTable;
6606        CLOSE getParamsFromReport;
6607 
6608     --nbarik - 04/20/04 - Enhancement 3378782 - Parameter Validation
6609 	GET_VALIDATED_DRILL_PARAMS (
6610 	  lAttributeCodeTable  => vAttributeCodeTable,
6611 	  lDimensionTable      => vDimensionTable,
6612 	  lSessionValueTable   => vSessionValueTable,
6613 	  lSessionDescTable    => vSessionDescTable,
6614 	  lPeriodDateTable     => vPeriodDateTable,
6615 	  pParamRegionCode     => xParamRegionCode,
6616 	  pParamFunctionName   => xParamFunctionName,
6617 	  pParamRegionGroup    => xParamGroup,
6618 	  pPageId              => pToPageId,
6619 	  pUserId              => pUserId,
6620 	  xAttributeCodeTable  => lAttributeCodeTable,
6621 	  xDimensionTable      => lDimensionTable,
6622 	  xSessionValueTable   => lSessionValueTable,
6623 	  xSessionDescTable    => lSessionDescTable,
6624 	  xPeriodDateTable     => lPeriodDateTable,
6625 	  x_DrillDefaultParameters => x_DrillDefaultParameters
6626 	);
6627 
6628         --get all the delete and  insert tables
6629         getDeleteAndInsertTables(
6630           pUserId             => pUserId,
6631           pAttributeNameTbl => lAttributeCodeTable,
6632           pDimensionTbl => lDimensionTable,
6633           pSessionValueTbl => lSessionValueTable,
6634           pSessionDescTbl => lSessionDescTable,
6635           pPeriodDateTbl=> lPeriodDateTable,
6636           pParameterGroup => xParamGroup,
6637           pIncludeViewBy => FALSE,
6638           pIncludeBusinessPlan => FALSE,
6639           pIncludePrevAsOfDate => TRUE,
6640           xAttrNameForInsert => lAttrNameForInsert,
6641           xDimensionForInsert => lDimensionForInsert,
6642           xSessValueForInsert => lSessValueForInsert,
6643           xSessDescForInsert => lSessDescForInsert,
6644           xPeriodDateForInsert => lPeriodDateForInsert,
6645           xAttrNameForDelete => lAttrNameForDelete
6646         ) ;
6647 
6648         --bulk delete and insert for the page
6649         IF (lAttrNameForDelete IS NOT NULL AND lAttrNameForDelete.COUNT > 0) THEN
6650           bulkDeleteFromPage(
6651            pPAgeId  => pToPageId  ,
6652            pUserId  => pUserId   ,
6653            pFunctionName => xParamFunctionName,
6654             pAttributeNameTbl => lAttrNameForDelete
6655            );
6656         END IF;
6657 
6658         IF (lAttrNameForInsert IS NOT NULL AND lAttrNameForInsert.COUNT > 0) THEN
6659           bulkInsertIntoPage(
6660            pSessionId => pSessionId,
6661            pPageId => pToPageId,
6662            pUserId  => pUserId,
6663            pFunctionName => xParamFunctionName,
6664            pAttributeNameTbl => lAttrNameForInsert,
6665            pDimensionTbl => lDimensionForInsert,
6666            pSessionValueTbl => lSessValueForInsert,
6667            pSessionDescTbl => lSessDescForInsert,
6668            pPeriodDateTbl => lPeriodDateForInsert
6669           );
6670         END IF;
6671       END IF; --lRegionCode
6672 
6673    COMMIT;
6674 EXCEPTION
6675   WHEN FND_API.G_EXC_ERROR THEN
6676        x_return_status := FND_API.G_RET_STS_ERROR;
6677        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
6678   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6679        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6680        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
6681   WHEN OTHERS THEN
6682        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6683        FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data => x_msg_data);
6684 
6685 END copyParamsFromReportToPage;
6686 
6687 PROCEDURE saveDateParams(
6688      p_user_Session_rec	BIS_PMV_SESSION_PVT.session_rec_type,
6689      pAsOfDate IN DATE ,
6690 	   p_prev_asof_Date IN DATE ,
6691 	   p_curr_effective_start_date IN DATE ,
6692 	   p_curr_effective_end_date IN DATE ,
6693 	   p_curr_report_Start_date  IN DATE ,
6694 	   p_prev_report_Start_date IN DATE,
6695 	   p_time_level_id	IN VARCHAR2,
6696 	   p_time_level_value	IN VARCHAR2,
6697 	   p_prev_effective_start_date	 IN DATE,
6698 	   p_prev_effective_end_date	 IN DATE,
6699 	   p_prev_time_level_id	   IN VARCHAR2,
6700 	   p_prev_time_level_value IN VARCHAR2
6701 ) IS
6702   l_parameter_rec	BIS_PMV_PARAMETERS_PVT.PARAMETER_REC_TYPE;
6703   l_date_format varchar2(30) := 'DD-MM-RRRR';
6704   l_asof_Date DATE;
6705   x_return_status		VARCHAR2(2000);
6706   x_msg_count			NUMBER;
6707   x_msg_data		    VARCHAR2(2000);
6708   l_canonical_date_format   varchar2(30) := 'DD/MM/RRRR';
6709 
6710 BEGIN
6711 
6712     IF (pAsOfDate IS NOT NULL) THEN
6713 
6714         --serao - bug 3087341
6715         l_asof_Date := pAsOfDate;
6716         l_parameter_Rec.parameter_name := 'AS_OF_DATE';
6717         --l_parameter_Rec.parameter_description := to_char(l_asof_date,'DD-MON-YYYY');
6718         --l_parameter_rec.parameter_value := to_char(l_asof_date,'DD-MON-YYYY');
6719 
6720         l_parameter_Rec.parameter_description := to_char(l_asof_date,l_canonical_date_format);
6721         l_parameter_rec.parameter_value := to_char(l_asof_date,l_canonical_date_format);
6722         l_parameter_Rec.period_date := trunc(l_asof_Date);
6723         l_parameter_Rec.default_flag := 'N';
6724         l_parameter_rec.hierarchy_flag := 'N';
6725 
6726         CREATE_PARAMETER (p_user_session_rec => p_user_session_rec
6727                       ,p_parameter_rec => l_parameter_rec
6728                       ,x_return_status => x_return_status
6729                       ,x_msg_count => x_msg_count
6730                       ,x_msg_data => x_msg_data);
6731 
6732           --BIS_P_ASOF_DATE Record
6733           BIS_PMV_TIME_LEVELS_PVT.GET_TIME_PARAMETER_RECORD (
6734             p_TimeParamterName => 'BIS_P_ASOF_DATE',
6735             p_DateParameter    => p_prev_asof_Date,
6736             x_parameterRecord  => l_parameter_rec,
6737             x_Return_status    => x_return_Status,
6738             x_msg_count        => x_msg_count,
6739             x_msg_data         => x_msg_data
6740           );
6741 
6742           CREATE_PARAMETER ( p_user_session_rec => p_user_session_rec,
6743                p_parameter_rec    => l_parameter_rec,
6744                x_return_status    => x_return_status,
6745                x_msg_count        => x_msg_count,
6746                x_msg_data         => x_msg_data
6747           );
6748 
6749           --BIS_CUR_REPORT_START_DATE Record
6750           BIS_PMV_TIME_LEVELS_PVT.GET_TIME_PARAMETER_RECORD(
6751             p_TimeParamterName => 'BIS_CUR_REPORT_START_DATE',
6752             p_DateParameter    => p_curr_report_Start_date,
6753             x_parameterRecord  => l_parameter_rec,
6754             x_Return_status    => x_return_Status,
6755             x_msg_count        => x_msg_count,
6756             x_msg_data         => x_msg_data
6757           );
6758 
6759           CREATE_PARAMETER ( p_user_session_rec => p_user_session_rec,
6760             p_parameter_rec    => l_parameter_rec,
6761             x_return_status    => x_return_status,
6762             x_msg_count        => x_msg_count,
6763             x_msg_data         => x_msg_data
6764           );
6765 
6766           --BIS_PREV_REPORT_START_DATE Record
6767           BIS_PMV_TIME_LEVELS_PVT.GET_TIME_PARAMETER_RECORD(
6768             p_TimeParamterName => 'BIS_PREV_REPORT_START_DATE',
6769             p_DateParameter		 => p_prev_report_Start_date,
6770             x_parameterRecord  => l_parameter_rec,
6771             x_Return_status    => x_return_Status,
6772             x_msg_count        => x_msg_count,
6773             x_msg_data         => x_msg_data
6774           );
6775 
6776           CREATE_PARAMETER ( p_user_session_rec => p_user_session_rec,
6777             p_parameter_rec    => l_parameter_rec,
6778             x_return_status    => x_return_status,
6779             x_msg_count        => x_msg_count,
6780             x_msg_data         => x_msg_data
6781       	  );
6782 
6783     	  l_parameter_rec.dimension   	    := NULL;
6784         l_parameter_rec.default_flag		  := 'N';
6785     	  l_parameter_rec.parameter_name	  := 'BIS_PREVIOUS_EFFECTIVE_START_DATE';
6786         l_parameter_rec.parameter_value	  := p_prev_time_level_id;
6787     	  l_parameter_rec.parameter_description   := p_prev_time_level_value;
6788         l_parameter_rec.period_date             := p_prev_effective_start_date;
6789 
6790         CREATE_PARAMETER ( p_user_session_rec => p_user_session_rec,
6791             p_parameter_rec    => l_parameter_rec,
6792             x_return_status    => x_return_status,
6793             x_msg_count        => x_msg_count,
6794             x_msg_data         => x_msg_data
6795     	  );
6796 
6797         --BIS_PREVIOUS_EFFECTIVE_END_DATE Record
6798         l_parameter_rec.dimension   	          := NULL;
6799         l_parameter_rec.default_flag		  := 'N';
6800         l_parameter_rec.parameter_name	  := 'BIS_PREVIOUS_EFFECTIVE_END_DATE';
6801         l_parameter_rec.parameter_value	  := p_prev_time_level_id;
6802         l_parameter_rec.parameter_description   := p_prev_time_level_value;
6803         l_parameter_rec.period_date             := p_prev_effective_end_date;
6804 
6805         CREATE_PARAMETER ( p_user_session_rec => p_user_session_rec,
6806             p_parameter_rec    => l_parameter_rec,
6807             x_return_status    => x_return_status,
6808             x_msg_count        => x_msg_count,
6809             x_msg_data         => x_msg_data
6810         );
6811 
6812   END IF ; --pAsOfDate
6813 
6814 END saveDateParams;
6815 
6816 --BugFix 3308824
6817 PROCEDURE SAVE_TIME_PARAMS(pTimeAttribute IN VARCHAR2,
6818     p_user_Session_rec	IN BIS_PMV_SESSION_PVT.session_rec_type,
6819     x_time_level_id IN  VARCHAR2,
6820     x_time_level_value IN VARCHAR2,
6821     x_start_date IN DATE,
6822     x_end_date IN DATE
6823 )IS
6824 
6825 l_return_status	VARCHAR2(2000);
6826 l_msg_count	NUMBER;
6827 l_msg_data	VARCHAR2(2000);
6828 l_parameter_rec parameter_rec_type;
6829 l_time_parameter_rec time_parameter_rec_type;
6830 
6831 BEGIN
6832 
6833            l_time_parameter_rec.parameter_name := pTimeAttribute;
6834            l_time_parameter_rec.dimension := substr(pTimeAttribute,1,instr(pTimeAttribute,'+')-1);
6835            l_time_parameter_rec.from_description := x_time_level_id;
6836            l_time_parameter_rec.to_description := x_time_level_id;
6837            l_time_parameter_rec.default_flag := 'N';
6838            l_time_parameter_rec.id_flag := 'Y';
6839            --BugFix 3515051
6840            VALIDATE_AND_SAVE_TIME(p_user_session_rec => p_user_session_rec,
6841                                   p_time_parameter_rec => l_time_parameter_rec,
6842                                   x_return_status  => l_return_status,
6843                                   x_msg_count => l_msg_count,
6844                                   x_msg_data => l_msg_data);
6845 
6846 /*
6847 	     l_parameter_rec.dimension := l_time_parameter_rec.dimension;
6848 	     l_parameter_rec.default_flag := l_time_parameter_rec.default_flag;
6849 
6850 	     l_parameter_rec.parameter_name := l_time_parameter_rec.parameter_name || '_FROM';
6851 	     l_parameter_rec.parameter_description := l_time_parameter_rec.from_description;
6852 	     l_parameter_Rec.parameter_Value := l_Time_parameter_rec.from_description;
6853 	     l_parameter_Rec.period_date := x_start_date;
6854 	     --create the "from" record
6855 
6856 	     CREATE_PARAMETER (p_user_session_rec => p_user_session_rec
6857         	              ,p_parameter_rec => l_parameter_rec
6858                 	      ,x_return_status => l_return_status
6859 	                      ,x_msg_count => l_msg_count
6860         	              ,x_msg_data => l_msg_data);
6861 
6862 	     l_parameter_rec.parameter_name := l_time_parameter_rec.parameter_name || '_TO';
6863 	     l_parameter_rec.parameter_description := l_time_parameter_rec.to_description;
6864 	     l_parameter_Rec.parameter_Value := l_Time_parameter_rec.to_description;
6865 	     l_parameter_Rec.period_date := x_end_date;
6866 
6867 	     --create the "to" record
6868 	     CREATE_PARAMETER (p_user_session_rec => p_user_session_rec
6869         	              ,p_parameter_rec => l_parameter_rec
6870                 	      ,x_return_status => l_return_status
6871 	                      ,x_msg_count => l_msg_count
6872         	              ,x_msg_data => l_msg_data);
6873 */
6874 END SAVE_TIME_PARAMS;
6875 
6876 PROCEDURE COMPUTE_AND_SAVE_DATES(
6877     pTimeAttribute IN VARCHAR2,
6878     pTimeComparisonType IN VARCHAR2,
6879     p_user_Session_rec	BIS_PMV_SESSION_PVT.session_rec_type,
6880     x_time_level_id OUT NOCOPY VARCHAR2,
6881     x_time_level_value OUT NOCOPY VARCHAR2
6882 ) IS
6883 l_time_attr_2      varchar2(2000);
6884 l_time_level_id	   VARCHAR2(2000);
6885 l_time_level_value VARCHAR2(2000);
6886 
6887 l_asof_date VARCHAR2(80);
6888 l_prev_asof_date_desc varchar2(80);
6889 l_curr_report_start_date_desc varchar2(80);
6890 l_prev_report_start_date_desc varchar2(80);
6891 
6892 l_prev_asof_Date		DATE;
6893 l_curr_effective_start_date	DATE;
6894 l_curr_effective_end_date	DATE;
6895 l_curr_report_start_date	DATE;
6896 l_prev_report_start_date	DATE;
6897 -- nbarik - 07/17/03 - Bug Fix 2999602
6898 l_prev_effective_start_date	DATE;
6899 l_prev_effective_end_date	DATE;
6900 l_prev_time_level_id	        VARCHAR2(2000);
6901 l_prev_time_level_value         VARCHAR2(2000);
6902 
6903 l_return_status		VARCHAR2(2000);
6904 l_msg_count			NUMBER;
6905 l_msg_data		    VARCHAR2(2000);
6906 l_error    varchar2(1000);
6907 
6908 BEGIN
6909 	  BIS_PMV_TIME_LEVELS_PVT.GET_COMPUTED_DATES(
6910 	    p_region_code		   => p_user_session_rec.region_code,
6911 	    p_resp_id			   => p_user_session_rec.responsibility_id,
6912 	    p_time_comparison_type         => pTimeComparisonType,
6913 	    p_asof_date                    => NULL, --serao - bug 3087341
6914 	    p_time_level                   => pTimeAttribute,
6915 	    x_prev_asof_Date               => l_prev_asof_date,
6916 	    x_curr_effective_start_date    => l_curr_effective_start_date,
6917 	    x_curr_effective_end_date      => l_curr_effective_end_date,
6918 	    x_curr_report_Start_date       => l_curr_report_start_date,
6919 	    x_prev_report_Start_date       => l_prev_report_start_date,
6920 	    x_time_level_id		           => l_time_level_id,
6921 	    x_time_level_value		       => l_time_level_value,
6922             x_prev_effective_start_date	   => l_prev_effective_start_date,
6923             x_prev_effective_end_date	   => l_prev_effective_end_date,
6924 	    x_prev_time_level_id	   => l_prev_time_level_id,
6925 	    x_prev_time_level_value	   => l_prev_time_level_value,
6926 	    x_return_status                => l_return_status,
6927 	    x_msg_count                    => l_msg_count,
6928 	    x_msg_Data                     => l_msg_Data
6929 	  );
6930           x_time_level_id := l_time_level_id;
6931 	  x_time_level_value := l_time_level_value;
6932 
6933 	  IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6934 	    RETURN;
6935 	  END IF;
6936 
6937           saveDateParams(
6938 	     p_user_Session_rec	=> p_user_Session_rec,
6939 	     pAsOfDate => SYSDATE,
6940 	     p_prev_asof_Date => l_prev_asof_date,
6941 	     p_curr_effective_start_date =>  l_curr_effective_start_date,
6942 	     p_curr_effective_end_date => l_curr_effective_end_date ,
6943 	     p_curr_report_Start_date  => l_curr_report_start_date,
6944 	     p_prev_report_Start_date => l_prev_report_start_date,
6945 	     p_time_level_id	=> l_time_level_id,
6946 	     p_time_level_value	=> l_time_level_value,
6947              p_prev_effective_start_date	=> l_prev_effective_start_date,
6948              p_prev_effective_end_date	=> l_prev_effective_end_date ,
6949 	     p_prev_time_level_id		=> l_prev_time_level_id,
6950 	     p_prev_time_level_value	=> l_prev_time_level_value
6951 	   );
6952 
6953         --BugFix 3308824
6954 	SAVE_TIME_PARAMS(pTimeAttribute => pTimeAttribute,
6955 	    p_user_Session_rec	=> p_user_Session_rec,
6956 	    x_time_level_id => l_time_level_id,
6957 	    x_time_level_value => l_time_level_value,
6958 	    x_start_date => l_curr_report_start_date,
6959 	    x_end_date => l_curr_effective_end_date
6960 	);
6961 
6962 
6963 END COMPUTE_AND_SAVE_DATES;
6964 
6965 --BugFix 3099789 Moved Time Saving logic from override preFunction to copy_time_params
6966 -- nbarik - 02/19/04 - BugFix 3441967 - Added p_IsPreFuncTCTExists, p_IsPreFuncCalcDatesExists
6967 PROCEDURE COPY_TIME_PARAMS(pSessionId          in varchar2,
6968                            pUserId             in varchar2,
6969                            pFunctionName       in varchar2,
6970                            pRegionCode         in varchar2,
6971                            pRespId         in  varchar2 default null,
6972                            pParameterGroup IN parameter_group_tbl_type,
6973                            pTCTExists      in boolean default false,
6974                            p_IsPreFuncTCTExists IN BOOLEAN DEFAULT TRUE,
6975                            p_IsPreFuncCalcDatesExists IN BOOLEAN DEFAULT TRUE,
6976                            x_time_attribute OUT NOCOPY VARCHAR2
6977 )IS
6978 CURSOR getFunctionParameters IS
6979   SELECT attribute_name, dimension, session_value, session_description, period_date
6980   FROM bis_user_attributes
6981   WHERE function_name =pFunctionName
6982   AND session_id = pSessionId
6983   AND user_id = pUserId
6984   AND (attribute_name ='AS_OF_DATE' OR dimension ='TIME');
6985 
6986 vAttributeCodeTable BISVIEWER.t_char;
6987 vDimensionTable     BISVIEWER.t_char;
6988 vSessionValueTable     BISVIEWER.t_char;
6989 vSessionDescTable     BISVIEWER.t_char;
6990 vPeriodDateTable     BISVIEWER.t_date;
6991 
6992 l_time_attr_2      varchar2(2000);
6993 l_time_level_id	   VARCHAR2(2000);
6994 l_time_level_value VARCHAR2(2000);
6995 
6996 l_asof_date VARCHAR2(80);
6997 l_prev_asof_date_desc varchar2(80);
6998 l_curr_report_start_date_desc varchar2(80);
6999 l_prev_report_start_date_desc varchar2(80);
7000 
7001 l_prev_asof_Date		DATE;
7002 l_curr_effective_start_date	DATE;
7003 l_curr_effective_end_date	DATE;
7004 l_curr_report_start_date	DATE;
7005 l_prev_report_start_date	DATE;
7006 -- nbarik - 07/17/03 - Bug Fix 2999602
7007 l_prev_effective_start_date	DATE;
7008 l_prev_effective_end_date	DATE;
7009 l_prev_time_level_id	        VARCHAR2(2000);
7010 l_prev_time_level_value         VARCHAR2(2000);
7011 
7012 l_return_status		VARCHAR2(2000);
7013 l_msg_count			NUMBER;
7014 l_msg_data		    VARCHAR2(2000);
7015 
7016 IsTimeDimensionInGroup BOOLEAN := FALSE;
7017 l_count    number;
7018 l_canonical_date_format   VARCHAR2(30) :='DD/MM/RRRR';
7019 BEGIN
7020      IF getFunctionParameters%ISOPEN THEN
7021         CLOSE getFunctionParameters;
7022      END IF;
7023      OPEN getFunctionParameters;
7024      FETCH getFunctionParameters BULK COLLECT INTO vAttributeCodeTable, vDimensionTable, vSessionValueTable, vSessionDescTable, vPeriodDateTable;
7025      CLOSE getFunctionParameters;
7026 
7027       --nbarik - 10/21/03 - Bug Fix 3201277
7028       IF vAttributeCodeTable IS NOT NULL AND vAttributeCodeTable.COUNT > 0 THEN
7029        FOR k IN vAttributeCodeTable.FIRST..vAttributeCodeTable.LAST LOOP
7030          IF vDimensionTable(k) = 'TIME' THEN
7031            x_time_attribute := vAttributeCodeTable(k);
7032            EXIT;
7033          END IF;
7034        END LOOP;
7035      END IF;
7036 
7037      --serao - bug3093012- if there is no time, then there is no need to
7038      -- calculate the as_of_date related params
7039      IsTimeDimensionInGroup := IsdimensionInParamGrp( 'TIME', pParameterGroup);
7040 
7041      --aleung, 7/16/03, bug 2965660
7042      IF (pTCTExists <> true AND IsTimeDimensionInGroup) THEN
7043 
7044       IF vAttributeCodeTable IS NOT NULL AND vAttributeCodeTable.COUNT > 0 THEN
7045        FOR i IN vAttributeCodeTable.FIRST..vAttributeCodeTable.LAST LOOP
7046          IF vAttributeCodeTable(i) = 'AS_OF_DATE' THEN
7047             l_asof_date := vSessionValueTable(i);
7048          ELSIF substr(vAttributeCodeTable(i), length(vAttributeCodeTable(i))-length('_FROM')+1) = '_FROM' THEN
7049             l_time_attr_2 := substr(vAttributeCodeTable(i),1, length(vAttributeCodeTable(i))-length('_FROM'));
7050          END IF;
7051        END LOOP;
7052      END IF;
7053 
7054         --serao - added timeattr check for bug 3113428
7055 	IF (l_asof_date IS NOT NULL AND l_time_attr_2 IS NOT NULL) THEN
7056 	  --get all the date information.
7057           -- nbarik - 07/17/03 - Bug Fix 2999602
7058 
7059 	  BIS_PMV_TIME_LEVELS_PVT.GET_COMPUTED_DATES(
7060 	    p_region_code				   => pRegionCode,
7061 	    p_resp_id					   => pRespId,
7062 	    p_time_comparison_type         => 'TIME_COMPARISON_TYPE+SEQUENTIAL',
7063 	    p_asof_date                    => l_asof_date,
7064 	    p_time_level                   => l_time_attr_2,
7065 	    x_prev_asof_Date               => l_prev_asof_date,
7066 	    x_curr_effective_start_date    => l_curr_effective_start_date,
7067 	    x_curr_effective_end_date      => l_curr_effective_end_date,
7068 	    x_curr_report_Start_date       => l_curr_report_start_date,
7069 	    x_prev_report_Start_date       => l_prev_report_start_date,
7070 	    x_time_level_id		           => l_time_level_id,
7071 	    x_time_level_value		       => l_time_level_value,
7072             x_prev_effective_start_date	   => l_prev_effective_start_date,
7073             x_prev_effective_end_date	   => l_prev_effective_end_date,
7074 	    x_prev_time_level_id	   => l_prev_time_level_id,
7075 	    x_prev_time_level_value	   => l_prev_time_level_value,
7076 	    x_return_status                => l_return_status,
7077 	    x_msg_count                    => l_msg_count,
7078 	    x_msg_Data                     => l_msg_Data
7079 	  );
7080 
7081 	  IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7082 	    RETURN;
7083 	  END IF;
7084 
7085     --l_prev_asof_date_desc := to_char(l_prev_asof_date,'DD-MON-YYYY');
7086     --l_curr_report_start_date_desc := to_char(l_curr_report_start_date,'DD-MON-YYYY');
7087     --l_prev_report_start_date_desc := to_char(l_prev_report_start_date,'DD-MON-YYYY');
7088 
7089     l_prev_asof_date_desc := to_char(l_prev_asof_date,l_canonical_date_format);
7090     l_curr_report_start_date_desc := to_char(l_curr_report_start_date,l_canonical_date_format);
7091     l_prev_report_start_date_desc := to_char(l_prev_report_start_date,l_canonical_date_format);
7092 
7093 
7094      IF vAttributeCodeTable IS NOT NULL AND vAttributeCodeTable.COUNT > 0 THEN
7095 
7096             l_count := vAttributeCodeTable.COUNT+1;
7097             vAttributeCodeTable(l_count) := 'BIS_P_ASOF_DATE';
7098             vSessionValueTable(l_count) := l_prev_asof_date_desc;
7099             vSessionDescTable(l_count) := l_prev_asof_date_desc;
7100             vPeriodDateTable(l_count) := l_prev_asof_date;
7101             vDimensionTable(l_count) := null;
7102             l_count := l_count + 1;
7103 
7104             vAttributeCodeTable(l_count) := 'BIS_CUR_REPORT_START_DATE';
7105             vSessionValueTable(l_count) := l_curr_report_start_date_desc;
7106             vSessionDescTable(l_count) := l_curr_report_start_date_desc;
7107             vPeriodDateTable(l_count) := l_curr_report_start_date;
7108             vDimensionTable(l_count) := null;
7109             l_count := l_count + 1;
7110 
7111             vAttributeCodeTable(l_count) := 'BIS_PREV_REPORT_START_DATE';
7112             vSessionValueTable(l_count) := l_prev_report_start_date_desc;
7113             vSessionDescTable(l_count) := l_prev_report_start_date_desc;
7114             vPeriodDateTable(l_count) := l_prev_report_start_date;
7115             vDimensionTable(l_count) := null;
7116             l_count := l_count + 1;
7117 
7118             vAttributeCodeTable(l_count) := 'BIS_PREVIOUS_EFFECTIVE_START_DATE';
7119             vSessionValueTable(l_count) := l_prev_time_level_id;
7120             vSessionDescTable(l_count) := l_prev_time_level_value;
7121             vPeriodDateTable(l_count) := l_prev_effective_start_date;
7122             vDimensionTable(l_count) := null;
7123             l_count := l_count + 1;
7124 
7125             vAttributeCodeTable(l_count) := 'BIS_PREVIOUS_EFFECTIVE_END_DATE';
7126             vSessionValueTable(l_count) := l_prev_time_level_id;
7127             vSessionDescTable(l_count) := l_prev_time_level_value;
7128             vPeriodDateTable(l_count) := l_prev_effective_end_date;
7129             vDimensionTable(l_count) := null;
7130 
7131       END IF;
7132 
7133     END IF; -- copy params only if the get_computed func was called , bug 3543057
7134      -- nbarik - 02/19/04 - Bug Fix 3441967
7135      /*The below condition will be true only when we are navigating from a report which don't
7136         have TCT defined to a report which has TCT defined. So in this case we don't want to
7137         calculate date related parameters again. Instead we will copy the TCT as SEQUENTIAL,
7138         since date parameters saved for previous report is based on SEQUENTIAL.
7139      */
7140      ELSIF (pTCTExists AND ( NOT p_IsPreFuncTCTExists ) AND p_IsPreFuncCalcDatesExists) THEN
7141        IF vAttributeCodeTable IS NOT NULL AND vAttributeCodeTable.COUNT > 0 THEN
7142          l_count := vAttributeCodeTable.COUNT+1;
7143          vAttributeCodeTable(l_count) := 'TIME_COMPARISON_TYPE+SEQUENTIAL';
7144          vSessionValueTable(l_count) := 'TIME_COMPARISON_TYPE+SEQUENTIAL';
7145          vSessionDescTable(l_count) := 'TIME_COMPARISON_TYPE+SEQUENTIAL';
7146          vPeriodDateTable(l_count) := null;
7147          vDimensionTable(l_count) := 'TIME_COMPARISON_TYPE';
7148        END IF;
7149      END IF;--!pTCTExists
7150 
7151      deleteAndInsertIntoSession(
7152               pSessionId  => pSessionId,
7153               pUserId     => pUserId,
7154               pFunctionName   => pFunctionName,
7155               pAttributeNameTbl => vAttributeCodeTable,
7156               pDimensionTbl => vDimensionTable,
7157               pSessionValueTbl => vSessionValueTable,
7158               pSessionDescTbl => vSessionDescTable,
7159               pPeriodDateTbl => vPeriodDateTable,
7160               pParameterGroup => pParameterGroup,
7161               pIncludePrevAsOfDate => TRUE
7162      );
7163 
7164 
7165 END COPY_TIME_PARAMS;
7166 
7167 --Pass as of date as Date 3094234
7168 PROCEDURE UPDATE_COMPUTED_DATES(
7169             p_user_id                             IN NUMBER,
7170             p_page_id                            IN NUMBER,
7171 	p_function_name                  IN VARCHAR2,
7172 	p_time_comparison_type       IN VARCHAR2,
7173 	p_asof_date                         IN DATE,
7174 	p_time_level                         IN VARCHAR2,
7175 	x_prev_asof_Date                 OUT NOCOPY DATE,
7176 	x_curr_report_Start_date       OUT NOCOPY DATE,
7177 	x_prev_report_Start_date       OUT NOCOPY DATE,
7178 	x_curr_effective_start_date    OUT NOCOPY DATE,
7179 	x_curr_effective_end_date      OUT NOCOPY DATE,
7180 	x_time_level_id                     OUT NOCOPY VARCHAR2,
7181 	x_time_level_value                OUT NOCOPY VARCHAR2,
7182             x_prev_effective_start_date    OUT NOCOPY DATE,
7183             x_prev_effective_end_date     OUT NOCOPY DATE,
7184             x_prev_time_level_id             OUT NOCOPY VARCHAR2,
7185             x_prev_time_level_value        OUT NOCOPY VARCHAR2,
7186 	x_prev_asof_Date_char                 OUT NOCOPY VARCHAR2,
7187 	x_curr_report_Start_date_char       OUT NOCOPY VARCHAR2,
7188 	x_prev_report_Start_date_char       OUT NOCOPY VARCHAR2,
7189 	x_curr_eff_start_date_char    OUT NOCOPY VARCHAR2,
7190 	x_curr_eff_end_date_char      OUT NOCOPY VARCHAR2,
7191             x_prev_eff_start_date_char    OUT NOCOPY VARCHAR2,
7192             x_prev_eff_end_date_char     OUT NOCOPY VARCHAR2,
7193 	x_return_status                   OUT NOCOPY VARCHAR2,
7194         p_plug_id                             IN NUMBER DEFAULT 0
7195 	)
7196 	IS
7197 
7198   l_RegionCode           varchar2(80);
7199 
7200   l_AsOfDate_Char                  varchar2(80);
7201   l_PrevAsOfDate_Char            varchar2(80);
7202   l_CurrReportStartDate_Char   varchar2(80);
7203   l_PrevReportStartDate_Char   varchar2(80);
7204 
7205   l_TimeLevelId              varchar2(2000);
7206   l_TimeLevelValue        varchar2(2000);
7207   l_PrevTimeLevelId       varchar2(2000);
7208   l_PrevTimeLevelValue  varchar2(2000);
7209 
7210   l_PrevAsOfDate            date;
7211   l_CurrReportStartDate   date;
7212   l_PrevReportStartDate   date;
7213   l_CurrEffStartDate         date;
7214   l_CurrEffEndDate          date;
7215   l_PrevEffStartDate        date;
7216   l_PrevEffEndDate         date;
7217 
7218   l_msg_count      number;
7219   l_msg_Data       varchar2(200);
7220   l_canonical_format varchar2(100) := 'DD/MM/YYYY';
7221 
7222 
7223 	CURSOR getScheduleId (p_plug_id NUMBER, p_user_id NUMBER) IS
7224 	 SELECT SCHEDULE_ID
7225 	 FROM BIS_SCHEDULE_PREFERENCES
7226 	 WHERE PLUG_ID = p_plug_id
7227 	 AND USER_ID = p_user_id;
7228 
7229 	 l_schedule_id NUMBER;
7230 
7231 BEGIN
7232 
7233      l_RegionCode := BIS_PMV_UTIL.getReportRegion(p_function_name);
7234      l_AsOfDate_Char := to_char(p_asof_date,l_canonical_format);
7235 
7236      BIS_PMV_TIME_LEVELS_PVT.GET_COMPUTED_DATES (
7237 	p_region_code => l_RegionCode,
7238 	p_resp_id => null,
7239 	p_time_comparison_type => p_time_comparison_type,
7240 	p_asof_date => l_AsOfDate_Char,
7241 	p_time_level  => p_time_level,
7242 	x_prev_asof_Date => l_PrevAsOfDate,
7243 	x_curr_effective_start_date => l_CurrEffStartDate,
7244 	x_curr_effective_end_date => l_CurrEffEndDate,
7245 	x_curr_report_Start_date => l_CurrReportStartDate,
7246 	x_prev_report_Start_date => l_PrevReportStartDate,
7247 	x_time_level_id => l_TimeLevelId,
7248 	x_time_level_value => l_TimeLevelValue,
7249             x_prev_effective_start_date => l_PrevEffStartDate,
7250             x_prev_effective_end_date => l_PrevEffEndDate,
7251             x_prev_time_level_id => l_PrevTimeLevelId,
7252             x_prev_time_level_value => l_PrevTimeLevelValue,
7253 	x_return_status => x_return_status,
7254 	x_msg_count => l_msg_count,
7255 	x_msg_Data => l_msg_data
7256 	);
7257 
7258 
7259    l_PrevAsOfDate_Char := to_char(l_PrevAsOfDate, l_canonical_format);
7260    l_CurrReportStartDate_Char := to_char(l_CurrReportStartDate, l_canonical_format);
7261    l_PrevReportStartDate_Char := to_char(l_PrevReportStartDate, l_canonical_format);
7262    x_curr_eff_start_date_char := to_char(l_CurrEffStartDate, l_canonical_format);
7263    x_curr_eff_end_date_char := to_char(l_CurrEffEndDate, l_canonical_format);
7264    x_prev_eff_start_date_char := to_char(l_PrevEffStartDate, l_canonical_format);
7265    x_prev_eff_end_date_char := to_char(l_PrevEffEndDate, l_canonical_format);
7266 
7267 
7268 	IF p_page_id IS NULL THEN
7269           --update bis_user_attributes for schedule_id -ansingh
7270 		IF getScheduleId%ISOPEN THEN
7271 			CLOSE getScheduleId;
7272 		END IF;
7273 		OPEN getScheduleId(p_plug_id, p_user_id);
7274 			FETCH getScheduleId INTO l_schedule_id;
7275 		CLOSE getScheduleId;
7276 
7277 
7278 		UPDATE BIS_USER_ATTRIBUTES SET
7279 		 session_value = DECODE(attribute_name, 'AS_OF_DATE', l_AsOfDate_Char, 'BIS_P_ASOF_DATE', l_PrevAsOfDate_Char,
7280 		 'BIS_CUR_REPORT_START_DATE', l_CurrReportStartDate_Char, 'BIS_PREV_REPORT_START_DATE', l_PrevReportStartDate_Char,
7281 		 'BIS_PREVIOUS_EFFECTIVE_START_DATE', l_PrevTimeLevelId, 'BIS_PREVIOUS_EFFECTIVE_END_DATE', l_PrevTimeLevelId,
7282 		 p_time_level || '_FROM', l_TimeLevelId, p_time_level || '_TO', l_TimeLevelId),
7283 
7284 		 session_description = DECODE(attribute_name, 'AS_OF_DATE', l_AsOfDate_Char, 'BIS_P_ASOF_DATE', l_PrevAsOfDate_Char,
7285 		 'BIS_CUR_REPORT_START_DATE', l_CurrReportStartDate_Char, 'BIS_PREV_REPORT_START_DATE', l_PrevReportStartDate_Char,
7286 		 'BIS_PREVIOUS_EFFECTIVE_START_DATE', l_PrevTimeLevelValue, 'BIS_PREVIOUS_EFFECTIVE_END_DATE', l_PrevTimeLevelValue,
7287 		 p_time_level || '_FROM', l_TimeLevelValue, p_time_level || '_TO', l_TimeLevelValue),
7288 
7289 		 period_date = DECODE(attribute_name, 'AS_OF_DATE', trunc(p_asof_date), 'BIS_P_ASOF_DATE', l_PrevAsOfDate,
7290 		 'BIS_CUR_REPORT_START_DATE', l_CurrReportStartDate, 'BIS_PREV_REPORT_START_DATE', l_PrevReportStartDate,
7291 		 'BIS_PREVIOUS_EFFECTIVE_START_DATE', l_PrevEffStartDate, 'BIS_PREVIOUS_EFFECTIVE_END_DATE', l_PrevEffEndDate,
7292 		 p_time_level || '_FROM', l_CurrEffStartDate, p_time_level || '_TO', l_CurrEffEndDate),
7293 
7294 		 last_update_date = sysdate,
7295 		 last_updated_by = p_user_id
7296 		WHERE schedule_id = l_schedule_id
7297 		AND attribute_name IN ('AS_OF_DATE','BIS_P_ASOF_DATE','BIS_CUR_REPORT_START_DATE','BIS_PREV_REPORT_START_DATE',
7298 		 'BIS_PREVIOUS_EFFECTIVE_START_DATE','BIS_PREVIOUS_EFFECTIVE_END_DATE',p_time_level || '_FROM', p_time_level || '_TO');
7299 		COMMIT;
7300 
7301 	ELSE
7302           --update bis_user_attributes for page_id -ansingh
7303 		UPDATE BIS_USER_ATTRIBUTES SET
7304 		 session_value = DECODE(attribute_name, 'AS_OF_DATE', l_AsOfDate_Char, 'BIS_P_ASOF_DATE', l_PrevAsOfDate_Char,
7305 		 'BIS_CUR_REPORT_START_DATE', l_CurrReportStartDate_Char, 'BIS_PREV_REPORT_START_DATE', l_PrevReportStartDate_Char,
7306 		 'BIS_PREVIOUS_EFFECTIVE_START_DATE', l_PrevTimeLevelId, 'BIS_PREVIOUS_EFFECTIVE_END_DATE', l_PrevTimeLevelId,
7307 		 p_time_level || '_FROM', l_TimeLevelId, p_time_level || '_TO', l_TimeLevelId),
7308 
7309 		 session_description = DECODE(attribute_name, 'AS_OF_DATE', l_AsOfDate_Char, 'BIS_P_ASOF_DATE', l_PrevAsOfDate_Char,
7310 		 'BIS_CUR_REPORT_START_DATE', l_CurrReportStartDate_Char, 'BIS_PREV_REPORT_START_DATE', l_PrevReportStartDate_Char,
7311 		 'BIS_PREVIOUS_EFFECTIVE_START_DATE', l_PrevTimeLevelValue, 'BIS_PREVIOUS_EFFECTIVE_END_DATE', l_PrevTimeLevelValue,
7312 		 p_time_level || '_FROM', l_TimeLevelValue, p_time_level || '_TO', l_TimeLevelValue),
7313 
7314 		 period_date = DECODE(attribute_name, 'AS_OF_DATE', trunc(p_asof_date), 'BIS_P_ASOF_DATE', l_PrevAsOfDate,
7315 		 'BIS_CUR_REPORT_START_DATE', l_CurrReportStartDate, 'BIS_PREV_REPORT_START_DATE', l_PrevReportStartDate,
7316 		 'BIS_PREVIOUS_EFFECTIVE_START_DATE', l_PrevEffStartDate, 'BIS_PREVIOUS_EFFECTIVE_END_DATE', l_PrevEffEndDate,
7317 		 p_time_level || '_FROM', l_CurrEffStartDate, p_time_level || '_TO', l_CurrEffEndDate),
7318 
7319 		 last_update_date = sysdate,
7320 		 last_updated_by = p_user_id
7321 		WHERE user_id = p_user_id
7322 		AND page_id = p_page_id
7323 		AND attribute_name IN ('AS_OF_DATE','BIS_P_ASOF_DATE','BIS_CUR_REPORT_START_DATE','BIS_PREV_REPORT_START_DATE',
7324 		 'BIS_PREVIOUS_EFFECTIVE_START_DATE','BIS_PREVIOUS_EFFECTIVE_END_DATE',p_time_level || '_FROM', p_time_level || '_TO');
7325 		COMMIT;
7326 
7327 	END IF;
7328 
7329 
7330    x_prev_asof_Date :=  l_PrevAsOfDate;
7331    x_curr_report_Start_date := l_CurrReportStartDate;
7332    x_prev_report_Start_date := l_PrevReportStartDate;
7333    x_curr_effective_start_date := l_CurrEffStartDate;
7334    x_curr_effective_end_date := l_CurrEffEndDate;
7335    x_time_level_id := l_TimeLevelId;
7336    x_time_level_value := l_TimeLevelValue;
7337    x_prev_effective_start_date := l_PrevEffStartDate;
7338    x_prev_effective_end_date := l_PrevEffEndDate;
7339    x_prev_time_level_id := l_PrevTimeLevelId;
7340    x_prev_time_level_value := l_PrevTimeLevelValue;
7341    x_prev_asof_Date_char := l_PrevAsOfDate_Char;
7342    x_curr_report_Start_date_char := l_CurrReportStartDate_Char;
7343    x_prev_report_Start_date_char :=  l_PrevReportStartDate_Char;
7344    x_return_status := 'S';
7345 EXCEPTION
7346 WHEN others THEN
7347    rollback;
7348    x_return_status := 'E';
7349 End UPDATE_COMPUTED_DATES;
7350 
7351 END BIS_PMV_PARAMETERS_PVT;