DBA Data[Home] [Help]

PACKAGE BODY: APPS.PJI_PMV_ENGINE

Source


1 PACKAGE BODY PJI_PMV_ENGINE AS
2 /* $Header: PJIRX01B.pls 120.7.12010000.2 2008/08/08 10:41:56 arbandyo ship $ */
3 
4 	g_SQL_Error_Msg	VARCHAR2(3200);
5 	p_PA_DEBUG_MODE	VARCHAR2(1)	:= NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
6 
7 
8 	/*
9 	** Internal functions...
10 	*/
11 
12 	/*
13 	** ----------------------------------------------------------
14 	** Function: Write2FWKLog
15 	** The function writes debug statements to a output table.
16 	** This procedure would be replaced with the actual one later.
17 	** ----------------------------------------------------------
18 	*/
19 	G_Module_Name	VARCHAR2(100) := 'Module Name not set.';
20 	G_No_Rolling_Weeks	NUMBER;
21 	Procedure Write2FWKLog(   p_Message	VARCHAR2
22 					, p_Module	VARCHAR2    DEFAULT NULL
23 					, p_Level	NUMBER	DEFAULT 1)
24 	IS
25 	BEGIN
26 		IF p_Module IS NOT NULL THEN
27 			G_Module_Name:=p_Module;
28 		END IF;
29 		PJI_UTILS.Write2SSWALOG(p_Message, p_Level, G_Module_Name);
30 		COMMIT;
31 	END Write2FWKLog;
32 
33 	/*
34 	** ----------------------------------------------------------
35 	** Function: Convert_AS_OF_DATE
36 	** The function returns hierarchy version id defined in
37 	** in PJI_SYSTEM_SETTINGS
38 	** ----------------------------------------------------------
39 	*/
40 
41 	Function Convert_AS_OF_DATE(p_As_Of_Date		NUMBER
42 						, p_Period_Type	VARCHAR2
43 						, p_Comparator	VARCHAR2)	RETURN NUMBER
44 	IS
45 	l_Calendar_Id	NUMBER;
46 	BEGIN
47 		IF p_PA_DEBUG_MODE = 'Y' THEN
48 			Write2FWKLog('Entering Convert_AS_OF_DATE...','Convert_AS_OF_DATE');
49 			Write2FWKLog('p_Comparator is '||p_Comparator||', p_Period_Type is '||p_Period_Type||' and value for AS_OF_DATE is '||p_As_Of_Date);
50 		END IF;
51 
52 		IF p_Period_Type LIKE '%PA%' THEN
53 			l_Calendar_Id:=G_PA_Calendar_ID;
54 			IF p_PA_DEBUG_MODE = 'Y' THEN
55 				Write2FWKLog('PA calender is selected.');
56 			END IF;
57 		ELSIF p_Period_Type LIKE '%CAL%' THEN
58 			l_Calendar_Id:=G_GL_Calendar_ID;
59 			IF p_PA_DEBUG_MODE = 'Y' THEN
60 				Write2FWKLog('GL calender is selected.');
61 			END IF;
62 		END IF;
63 
64 		IF l_Calendar_Id IS NULL THEN
65 			CASE p_Comparator
66 			WHEN 'SEQUENTIAL' THEN
67 				IF p_Period_Type LIKE '%YEAR%' THEN
68 					RETURN to_char(FII_TIME_API.ent_sd_lyr_end(to_date(p_As_Of_Date,'j')),'j');
69 				ELSIF p_Period_Type LIKE '%QTR%' THEN
70 					RETURN to_char(FII_TIME_API.ent_sd_pqtr_end(to_date(p_As_Of_Date,'j')),'j');
71 				ELSIF p_Period_Type LIKE '%PERIOD%' THEN
72 					RETURN to_char(FII_TIME_API.ent_sd_pper_end(to_date(p_As_Of_Date,'j')),'j');
73 				ELSIF p_Period_Type LIKE '%WEEK%' THEN
74 					RETURN to_char(FII_TIME_API.sd_pwk(to_date(p_As_Of_Date,'j')),'j');
75 				END IF;
76 			WHEN 'YEARLY' THEN
77 				IF p_Period_Type LIKE '%YEAR%' THEN
78 					RETURN to_char(FII_TIME_API.ent_sd_lyr_end(to_date(p_As_Of_Date,'j')),'j');
79 				ELSIF p_Period_Type LIKE '%QTR%' THEN
80 					RETURN to_char(FII_TIME_API.ent_sd_lysqtr_end(to_date(p_As_Of_Date,'j')),'j');
81 				ELSIF p_Period_Type LIKE '%PERIOD%' THEN
82 					RETURN to_char(FII_TIME_API.ent_sd_lysper_end(to_date(p_As_Of_Date,'j')),'j');
83 				ELSIF p_Period_Type LIKE '%WEEK%' THEN
84 					RETURN to_char(FII_TIME_API.sd_lyswk(to_date(p_As_Of_Date,'j')),'j');
85 				END IF;
86 			END CASE;
87 		ELSE
88 			CASE p_Comparator
89 			WHEN 'SEQUENTIAL' THEN
90 				IF p_Period_Type LIKE '%YEAR%' THEN
91 					RETURN to_char(FII_TIME_API.cal_sd_lyr_end(to_date(p_As_Of_Date,'j'), l_Calendar_ID),'j');
92 				ELSIF p_Period_Type LIKE '%QTR%' THEN
93 					RETURN to_char(FII_TIME_API.cal_sd_pqtr_end(to_date(p_As_Of_Date,'j'), l_Calendar_ID),'j');
94 				ELSIF p_Period_Type LIKE '%PERIOD%' THEN
95 					RETURN to_char(FII_TIME_API.cal_sd_pper_end(to_date(p_As_Of_Date,'j'), l_Calendar_ID),'j');
96 				END IF;
97 			WHEN 'YEARLY' THEN
98 				IF p_Period_Type LIKE '%YEAR%' THEN
99 					RETURN to_char(FII_TIME_API.cal_sd_lyr_end(to_date(p_As_Of_Date,'j'), l_Calendar_ID),'j');
100 				ELSIF p_Period_Type LIKE '%QTR%' THEN
101 					RETURN to_char(FII_TIME_API.cal_sd_lysqtr_end(to_date(p_As_Of_Date,'j'), l_Calendar_ID),'j');
102 				ELSIF p_Period_Type LIKE '%PERIOD%' THEN
103 					RETURN to_char(FII_TIME_API.cal_sd_lysper_end(to_date(p_As_Of_Date,'j'), l_Calendar_ID),'j');
104 				END IF;
105 			END CASE;
106 		END IF;
107 		IF p_PA_DEBUG_MODE = 'Y' THEN
108 			Write2FWKLog('Exiting Convert_AS_OF_DATE...');
109 		END IF;
110 	EXCEPTION
111 	WHEN NO_DATA_FOUND THEN
112 		RETURN NULL;
113 	WHEN OTHERS THEN
114 		g_SQL_Error_Msg:=SQLERRM();
115 		IF p_PA_DEBUG_MODE = 'Y' THEN
116 			Write2FWKLog(g_SQL_Error_Msg, 3);
117 		END IF;
118 		RAISE;
119 	END Convert_AS_OF_DATE;
120 
121 	/*
122 	** ----------------------------------------------------------
123 	** Function: Get_Hierarchy_Version_ID
124 	** The function returns hierarchy version id defined in
125 	** in PJI_SYSTEM_SETTINGS
126 	** ----------------------------------------------------------
127 	*/
128 	Function Get_Hierarchy_Version_ID
129 	RETURN NUMBER IS
130 	l_Org_Structure_Version_ID	PJI_SYSTEM_SETTINGS.Org_Structure_Version_ID%TYPE;
131 	BEGIN
132 		IF p_PA_DEBUG_MODE = 'Y' THEN
133 			Write2FWKLog('Entering Get_Hierarchy_Version_ID...','Get_Hierarchy_Version_ID');
134 		END IF;
135 		IF l_Org_Structure_Version_ID IS NULL THEN
136 			BEGIN
137 				SELECT NVL(org_structure_version_id, -1)
138 				INTO l_Org_Structure_Version_ID
139 				FROM PJI_SYSTEM_SETTINGS;
140 			EXCEPTION
141 			WHEN NO_DATA_FOUND THEN
142 				RETURN -1;
143 			WHEN OTHERS THEN
144 				g_SQL_Error_Msg:=SQLERRM();
145 				IF p_PA_DEBUG_MODE = 'Y' THEN
146 					Write2FWKLog(g_SQL_Error_Msg, 3);
147 				END IF;
148 				RAISE;
149 			END;
150 		END IF;
151 		IF p_PA_DEBUG_MODE = 'Y' THEN
152 			Write2FWKLog('Exiting Get_Hierarchy_Version_ID...');
153 		END IF;
154 		RETURN l_Org_Structure_Version_ID;
155 	END Get_Hierarchy_Version_ID;
156 
157 	/*
158 	** ----------------------------------------------------------
159 	** Function: Decode_IDS
160 	** The function returns de-constructs the parameters passed
161 	** by pmv report.
162 	** ----------------------------------------------------------
163 	*/
164 	Function Decode_IDS(p_Buffer VARCHAR2) RETURN SYSTEM.pa_num_tbl_type
165 	AS
166 	l_Buffer VARCHAR2(150);
167 	i NUMBER:=1;
168 	j NUMBER:=0;
169 	k NUMBER:=1;
170 	l_Dim_List_Tab		SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
171 	BEGIN
172 		IF p_PA_DEBUG_MODE = 'Y' THEN
173 			Write2FWKLog('Entering Decode_IDS...','Decode_IDS');
174 		END IF;
175 		j:=INSTR(p_Buffer,',',i);
176 		WHILE (j<>0)
177 		LOOP
178 			l_Buffer:=SUBSTR(p_Buffer,i,j-i);
179 			l_Dim_List_Tab.EXTEND;
180 			l_Dim_List_Tab(k):=TO_NUMBER(l_Buffer);
181 			i:=j+1;
182 			j:=INSTR(p_Buffer,',',i);
183 			k:=k+1;
184 		END LOOP;
185 		l_Buffer:=SUBSTR(p_Buffer,i,length(p_Buffer)+1-i);
186 		IF l_Buffer IS NOT NULL THEN
187 			l_Dim_List_Tab.EXTEND;
188 			l_Dim_List_Tab(k):=TO_NUMBER(l_Buffer);
189 		END IF;
190 		IF p_PA_DEBUG_MODE = 'Y' THEN
191 			Write2FWKLog('Exiting Decode_IDS...');
192 		END IF;
193 		RETURN l_Dim_List_Tab;
194 	EXCEPTION
195 		WHEN OTHERS THEN
196 			g_SQL_Error_Msg:=SQLERRM();
197 			IF p_PA_DEBUG_MODE = 'Y' THEN
198 				Write2FWKLog(g_SQL_Error_Msg, 3);
199 			END IF;
200 			RAISE;
201 	END Decode_IDS;
202 
203         /*
204         ** ----------------------------------------------------------
205         ** Function: Decode_VARS
206         ** The function returns de-constructs the parameters passed
207         ** by pmv report.Diff between Decode_IDS and Decode_VARS is
208         ** in type num and varchar.
209         ** ----------------------------------------------------------
210         */
211 
212         Function Decode_VARS(p_Buffer VARCHAR2) RETURN SYSTEM.pa_varchar2_240_tbl_type
213         AS
214         l_Buffer VARCHAR2(150);
215         i NUMBER:=1;
216         j NUMBER:=0;
217         k NUMBER:=1;
218         l_Dim_List_Tab          SYSTEM.pa_varchar2_240_tbl_type := SYSTEM.pa_varchar2_240_tbl_type();
219         BEGIN
220                 IF p_PA_DEBUG_MODE = 'Y' THEN
221                         Write2FWKLog('Entering Decode_VARS...','Decode_VARS');
222                 END IF;
223                 j:=INSTR(p_Buffer,',',i);
224                 WHILE (j<>0)
225                 LOOP
226                         l_Buffer:=SUBSTR(p_Buffer,i,j-i);
227                         l_Dim_List_Tab.EXTEND;
228                         l_Dim_List_Tab(k):= l_Buffer ;
229                         i:=j+1;
230                         j:=INSTR(p_Buffer,',',i);
231                         k:=k+1;
232                 END LOOP;
233                 l_Buffer:=SUBSTR(p_Buffer,i,length(p_Buffer)+1-i);
234                 IF l_Buffer IS NOT NULL THEN
235                         l_Dim_List_Tab.EXTEND;
236                         l_Dim_List_Tab(k):= l_Buffer;
237                 END IF;
238                 IF p_PA_DEBUG_MODE = 'Y' THEN
239                         Write2FWKLog('Exiting Decode_VARS...');
240                 END IF;
241                 RETURN l_Dim_List_Tab;
242         EXCEPTION
243                 WHEN OTHERS THEN
244                         g_SQL_Error_Msg:=SQLERRM();
245                         IF p_PA_DEBUG_MODE = 'Y' THEN
246                                 Write2FWKLog(g_SQL_Error_Msg, 3);
247                         END IF;
248                         RAISE;
249         END Decode_VARS;
250 
251 	/*
252 	** Conversion API's Section.
253 	** =========================
254 	** To facilitate the CBO to use the star query transformation
255 	** and to develop simple and scalable code, it was decided
256 	** that we would create set of temporary tables which would
257 	** hold the subset of lookup values based on parameters
258 	** selected in PMV.
259 	** These Convert_* API's would be called from the table
260 	** functions.
261 	*/
262 
263 	/*
264 	** ----------------------------------------------------------
265 	** Function: Convert_ViewBY
266 	** The function translates the value of view by passed by pmv
267 	** to short variations understood by all the other convert
268 	** API's.
269 	** Bug# 2589267: This fix is provided for addressing the
270 	** scalability issues with literal strings in the sql
271 	** statements.
272 	** ----------------------------------------------------------
273 	*/
274 	Function Convert_ViewBY(p_View_BY VARCHAR2) RETURN VARCHAR2
275 	AS
276 	BEGIN
277 		IF p_PA_DEBUG_MODE = 'Y' THEN
278 			Write2FWKLog('Entering Convert_ViewBY...','Convert_ViewBY');
279 		END IF;
280 
281 		IF p_View_BY LIKE 'TIME%' THEN
282 			RETURN 'TM';
283 		END IF;
284 
285 		CASE p_View_BY
286 			WHEN 'ORGANIZATION+PJI_ORGANIZATIONS' THEN RETURN 'OG';
287 			WHEN 'ORGANIZATION+FII_OPERATING_UNITS' THEN RETURN 'OU';
288 			WHEN 'PROJECT WORK TYPE+PJI_UTIL_CATEGORIES' THEN RETURN 'UC';
289 			WHEN 'PROJECT WORK TYPE+PJI_WORK_TYPES' THEN RETURN 'WT';
290 			WHEN 'JOB+JOB' THEN RETURN 'JB';
291 			WHEN 'PROJECT JOB LEVEL+PJI_JOB_LEVELS' THEN RETURN 'JL';
292 			WHEN 'PROJECT CLASSIFICATION+CLASS_CODE' THEN RETURN 'CC';
293 
294                         WHEN 'PROJECT EXPENDITURE TYPE+PJI_EXP_CATEGORIES' THEN RETURN 'EC';
295                         WHEN 'PROJECT EXPENDITURE TYPE+PJI_EXP_TYPES' THEN RETURN 'ET' ;
296                         WHEN 'PROJECT REVENUE CATEGORY+PJI_REVENUE_CATEGORIES' THEN RETURN 'RC' ;
297                         WHEN 'PROJECT REVENUE CATEGORY+PJI_EXP_EVT_TYPES' THEN RETURN 'RT' ;
298 			ELSE RETURN 'XX';
299 		END CASE;
300 		IF p_PA_DEBUG_MODE = 'Y' THEN
301 			Write2FWKLog('Exiting Convert_ViewBY...');
302 		END IF;
303 	END Convert_ViewBY;
304 
305 	/*
306 	** ----------------------------------------------------------
307 	** Function: Convert_Currency_Code
308 	** The function translates the value of currency code passed
309 	** to currency type stored in the PJI fact tables.
310 	** Bug# 2589267: This fix is provided for addressing the
311 	** scalability issues with literal strings in the sql
312 	** statements.
313 	** ----------------------------------------------------------
314 	*/
315 
316 		Function Convert_Currency_Code(p_Currency_Code VARCHAR2) RETURN VARCHAR2
317 	AS
318 	BEGIN
319 		IF p_PA_DEBUG_MODE = 'Y' THEN
320 			Write2FWKLog('Entering Convert_Currency_Code...','Convert_Currency_Code');
321 		END IF;
322 		IF p_Currency_Code = 'FII_GLOBAL1' THEN
323 			IF p_PA_DEBUG_MODE = 'Y' THEN
324 				Write2FWKLog('Global Currency Code is selected.');
325 			END IF;
326 			RETURN 'G';
327 
328 		ELSIF p_Currency_Code = 'FII_GLOBAL2' THEN
329 			IF p_PA_DEBUG_MODE = 'Y' THEN
330 				Write2FWKLog('Second Global Currency Code is selected.');
331 			END IF;
332 			RETURN 'G2';
333 		ELSE
334 			IF p_PA_DEBUG_MODE = 'Y' THEN
335 				Write2FWKLog('Functional Currency Code is selected.');
336 			END IF;
337 			RETURN 'F';
338 		END IF;
339 		IF p_PA_DEBUG_MODE = 'Y' THEN
340 			Write2FWKLog('Exiting Convert_Currency_Code...');
341 		END IF;
342 	END Convert_Currency_Code;
343 
344 	/*
345 	** ----------------------------------------------------------
346 	** Function: Convert_Currency_Record_Type
347 	** The function translates the value of currency type
348     	** to currency record type.
349 	** ----------------------------------------------------------
350 	*/
351 	Function Convert_Currency_Record_Type(p_Currency_Type VARCHAR2) RETURN NUMBER
352 	AS
353 	BEGIN
354 		IF p_PA_DEBUG_MODE = 'Y' THEN
355 			Write2FWKLog('Entering Convert_Currency_Record_Type...','Convert_Currency_Record_Type');
356 		END IF;
357 		IF p_Currency_Type = 'G' THEN
358 			IF p_PA_DEBUG_MODE = 'Y' THEN
359 				Write2FWKLog('Global Currency Code is selected.');
360 			END IF;
361 			RETURN 1;
362 
363 		ELSIF p_Currency_Type = 'G2' THEN
364 			IF p_PA_DEBUG_MODE = 'Y' THEN
365 				Write2FWKLog('Second Global Currency Code is selected.');
366 			END IF;
367 			RETURN 2;
368 
369 		ELSIF p_Currency_Type = 'F' THEN
370 			IF p_PA_DEBUG_MODE = 'Y' THEN
371 				Write2FWKLog('Functional Currency Code is selected.');
372 			END IF;
373 			RETURN 4;
374 
375 		ELSIF p_Currency_Type = 'P' THEN
376 			IF p_PA_DEBUG_MODE = 'Y' THEN
377 				Write2FWKLog('Project Currency Code is selected.');
378 			END IF;
379 			RETURN 8;
380 
381 		ELSE
382 			IF p_PA_DEBUG_MODE = 'Y' THEN
383 				Write2FWKLog('Global Currency Code will be used by default.');
384 			END IF;
385 			RETURN 1;
386 		END IF;
387 		IF p_PA_DEBUG_MODE = 'Y' THEN
388 			Write2FWKLog('Exiting Convert_Currency_Record_Type...');
389 		END IF;
390 	END Convert_Currency_Record_Type;
391 
392 
393 	/*
394 	** ----------------------------------------------------------
395 	** Function: Convert_Classification
396 	** The function inserts all the valid class codes specified in
397 	** the pmv report into a session specific temporary table.
398 	** The function return 'Y' if the lower level fact (Class)
399 	** needs to be joined to.
400 	** Bug# 2491237: For ensuring that project types are always
401 	** secured by Operating Unit. It is mandatory that all programs
402 	** calling the convert api should first place a call to the
403 	** Convert_Operating_Unit API before calling this API.
404 	** ----------------------------------------------------------
405 	*/
406 
407 	Function Convert_Classification(p_Classification_ID VARCHAR2 DEFAULT NULL
408 						, p_Class_Code_IDS VARCHAR2 DEFAULT NULL
409 						, p_View_BY VARCHAR2) RETURN VARCHAR2
410 	AS
411 	l_Dimension_List_Tab 	SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
412 	l_Parse_Status		VARCHAR2(1);
413 	BEGIN
414 		IF p_PA_DEBUG_MODE = 'Y' THEN
415 			Write2FWKLog('Entering Convert_Classification...','Convert_Classification');
416 		END IF;
417 
418 		DELETE PJI_PMV_CLS_DIM_TMP;
419 		IF p_Classification_ID IS NOT NULL THEN
420 			IF p_PA_DEBUG_MODE = 'Y' THEN
421 				Write2FWKLog('Classification IS NOT NULL...');
422 			END IF;
423 			l_Parse_Status:='Y';
424 			IF p_Class_Code_IDS IS NOT NULL THEN
425 				l_Dimension_List_Tab:=Decode_IDS(p_Class_Code_IDS);
426 			ELSIF p_Classification_ID IS NOT NULL THEN
427 				l_Dimension_List_Tab := NULL;
428 			END IF;
429 			IF l_Dimension_List_Tab IS NULL THEN
430 				IF p_Classification_ID = '$PROJECT_TYPE$ALL' THEN
431 					IF p_PA_DEBUG_MODE = 'Y' THEN
432 						Write2FWKLog('All Project Types are selected.');
433 					END IF;
434 					INSERT INTO PJI_PMV_CLS_DIM_TMP (ID, NAME)
435 					SELECT DISTINCT CLS.CLASS_ID, DECODE(p_View_BY,'CC',CLS.CLASS_CODE,'-1')
436 					FROM PJI_CLASS_CODES CLS
437 					, PA_PROJECT_TYPES_ALL PJT
438 					, PJI_PMV_ORG_DIM_TMP ORG
439 					WHERE PJT.ORG_ID = ORG.ID
440 					AND CLS.CLASS_CODE = PJT.PROJECT_TYPE
441 					AND CLS.RECORD_TYPE = 'T';
442 				ELSIF p_Classification_ID LIKE '$PROJECT_TYPE$%' THEN
443 					IF p_PA_DEBUG_MODE = 'Y' THEN
444 						Write2FWKLog('All '||p_Classification_ID||' Project Type is selected.');
445 					END IF;
446 					INSERT INTO PJI_PMV_CLS_DIM_TMP (ID, NAME)
447 					SELECT DISTINCT CLS.CLASS_ID, DECODE(p_View_BY,'CC',CLS.CLASS_CODE,'-1')
448 					FROM PJI_CLASS_CODES CLS
449 					, PA_PROJECT_TYPES_ALL PJT
450 					, PJI_PMV_ORG_DIM_TMP ORG
451 					WHERE PJT.ORG_ID = ORG.ID
452 					AND CLS.CLASS_CODE = PJT.PROJECT_TYPE
453 					AND CLS.CLASS_CATEGORY = p_Classification_ID;
454 				ELSE
455 					IF p_PA_DEBUG_MODE = 'Y' THEN
456 						Write2FWKLog('All class codes for '||p_Classification_ID||' Project type or Classification are selected.');
457 					END IF;
458 					INSERT INTO PJI_PMV_CLS_DIM_TMP (ID, NAME)
459 					SELECT CLS.CLASS_ID, DECODE(p_View_BY,'CC',CLS.CLASS_CODE,'-1')
460 					FROM PJI_CLASS_CODES CLS
461 					WHERE CLS.CLASS_CATEGORY = p_Classification_ID;
462 				END IF;
463 			ELSIF l_Dimension_List_Tab IS NOT NULL THEN
464 				IF p_PA_DEBUG_MODE = 'Y' THEN
465 					Write2FWKLog('Selected list of Project type or Classification '||p_Classification_ID||' are selected.');
466 				END IF;
467 				IF p_Classification_ID = '$PROJECT_TYPE$ALL' THEN
468 					/*
469 					** Following portion of the code is commented
470 					** because of a bug in db (2596577).
471 					*/
472 					/*
473 					FORALL i IN 1..l_Dimension_List_Tab.Last
474 						INSERT INTO PJI_PMV_CLS_DIM_TMP (ID, NAME)
475 						SELECT DISTINCT CLS.CLASS_ID, DECODE(p_View_BY,'CC',CLS.CLASS_CODE,'-1')
476 						FROM PJI_CLASS_CODES CLS
477 						, PA_PROJECT_TYPES_ALL PJT
478 						, PJI_PMV_ORG_DIM_TMP ORG
479 						WHERE PJT.ORG_ID = ORG.ID
480 						AND CLS.CLASS_CODE = PJT.PROJECT_TYPE
481 						AND CLS.RECORD_TYPE = 'T'
482 						AND CLS.CLASS_ID = l_Dimension_List_Tab(i);
483 					*/
484 					FOR i IN 1..l_Dimension_List_Tab.Last LOOP
485 						INSERT INTO PJI_PMV_CLS_DIM_TMP (ID, NAME)
486 						SELECT DISTINCT CLS.CLASS_ID, DECODE(p_View_BY,'CC',CLS.CLASS_CODE,'-1')
487 						FROM PJI_CLASS_CODES CLS
488 						, PA_PROJECT_TYPES_ALL PJT
489 						, PJI_PMV_ORG_DIM_TMP ORG
490 						WHERE PJT.ORG_ID = ORG.ID
491 						AND CLS.CLASS_CODE = PJT.PROJECT_TYPE
492 						AND CLS.RECORD_TYPE = 'T'
493 						AND CLS.CLASS_ID = l_Dimension_List_Tab(i);
494 					END LOOP;
495 				ELSIF p_Classification_ID LIKE '$PROJECT_TYPE$%' THEN
496 					/*
497 					** Following portion of the code is commented
498 					** because of a bug in db (2596577).
499 					*/
500 					/*
501 					FORALL i IN 1..l_Dimension_List_Tab.Last
502 						INSERT INTO PJI_PMV_CLS_DIM_TMP (ID, NAME)
503 						SELECT DISTINCT CLS.CLASS_ID, DECODE(p_View_BY,'CC',CLS.CLASS_CODE,'-1')
504 						FROM PJI_CLASS_CODES CLS
505 						, PA_PROJECT_TYPES_ALL PJT
506 						, PJI_PMV_ORG_DIM_TMP ORG
507 						WHERE PJT.ORG_ID = ORG.ID
508 						AND CLS.CLASS_CODE = PJT.PROJECT_TYPE
509 						AND CLS.CLASS_ID = l_Dimension_List_Tab(i);
510 					*/
511 					FOR i IN 1..l_Dimension_List_Tab.Last LOOP
512 						INSERT INTO PJI_PMV_CLS_DIM_TMP (ID, NAME)
513 						SELECT DISTINCT CLS.CLASS_ID, DECODE(p_View_BY,'CC',CLS.CLASS_CODE,'-1')
514 						FROM PJI_CLASS_CODES CLS
515 						, PA_PROJECT_TYPES_ALL PJT
516 						, PJI_PMV_ORG_DIM_TMP ORG
517 						WHERE PJT.ORG_ID = ORG.ID
518 						AND CLS.CLASS_CODE = PJT.PROJECT_TYPE
519 						AND CLS.CLASS_ID = l_Dimension_List_Tab(i);
520 					END LOOP;
521 				ELSE
522 					/*
523 					** Following portion of the code is commented
524 					** because of a bug in db (2596577).
525 					*/
526 					/*
527 					FORALL i IN 1..l_Dimension_List_Tab.Last
528 						INSERT INTO PJI_PMV_CLS_DIM_TMP (ID, NAME)
529 						SELECT CLS.CLASS_ID, DECODE(p_View_BY,'CC',CLS.CLASS_CODE,'-1')
530 						FROM PJI_CLASS_CODES CLS
531 						WHERE CLS.CLASS_CATEGORY = p_Classification_ID
532 						AND CLS.CLASS_ID = l_Dimension_List_Tab(i);
533 					*/
534 					FOR i IN 1..l_Dimension_List_Tab.Last LOOP
535 						INSERT INTO PJI_PMV_CLS_DIM_TMP (ID, NAME)
536 						SELECT CLS.CLASS_ID, DECODE(p_View_BY,'CC',CLS.CLASS_CODE,'-1')
537 						FROM PJI_CLASS_CODES CLS
538 						WHERE CLS.CLASS_CATEGORY = p_Classification_ID
539 						AND CLS.CLASS_ID = l_Dimension_List_Tab(i);
540 					END LOOP;
541 				END IF;
542 			END IF;
543 		ELSIF p_View_BY = 'CC' AND p_Classification_ID IS NULL THEN
544 			IF p_PA_DEBUG_MODE = 'Y' THEN
545 				Write2FWKLog('A class code was selected without corresponding category.');
546 			END IF;
547 			l_Parse_Status:='Y';
548 			INSERT INTO PJI_PMV_CLS_DIM_TMP (ID, NAME)
549 			SELECT -1, '-1'
550 			FROM SYS.DUAL;		-- REMOVE THIS COMMENT WHEN THE ISSUE WITH DUAL IS RESOLVED.
551 		ELSE
552 			IF p_PA_DEBUG_MODE = 'Y' THEN
553 				Write2FWKLog('No need to go the class fact.');
554 			END IF;
555 			l_Parse_Status:='N';
556 		END IF;
557 		IF p_PA_DEBUG_MODE = 'Y' THEN
558 			Write2FWKLog('Exiting Convert_Classification...');
559 		END IF;
560 		RETURN l_Parse_Status;
561 	EXCEPTION
562 		WHEN OTHERS THEN
563 			g_SQL_Error_Msg:=SQLERRM();
564 			IF p_PA_DEBUG_MODE = 'Y' THEN
565 				Write2FWKLog(g_SQL_Error_Msg, 3);
566 			END IF;
567 			RAISE;
568 	END Convert_Classification;
569 
570 
571 	/*
572 	** ----------------------------------------------------------
573 	** Function: Convert_Event_Revenue_Type
574 	** The function inserts all the valid expenditure/event types specified in
575 	** the pmv report into a session specific temporary table.
576 	** The function return 'Y' if the lower level fact (expenditure/event types)
577 	** needs to be joined to.
578 	** ----------------------------------------------------------
579 	*/
580 	Function Convert_Event_Revenue_Type(p_Revenue_Category VARCHAR2 DEFAULT NULL
581                                                 , p_Revenue_Type_IDS VARCHAR2 DEFAULT NULL
582                                                 , p_View_BY VARCHAR2) RETURN VARCHAR2
583 	AS
584 	l_RCate_Dimension_List_Tab 	SYSTEM.pa_varchar2_240_tbl_type := SYSTEM.pa_varchar2_240_tbl_type();
585 	l_RType_Dimension_List_Tab 	SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
586 	l_RC_Parsed_Flag		VARCHAR2(1);
587 	l_RT_Parsed_Flag		VARCHAR2(1):='N';
588 	BEGIN
589 		IF p_PA_DEBUG_MODE = 'Y' THEN
590 			Write2FWKLog('Entering Convert_Event_Revenue_Type...','Convert_Event_Revenue_Type');
591 		END IF;
592 
593 		DELETE PJI_PMV_EC_RC_DIM_TMP where record_type = 'RC';
594 		DELETE PJI_PMV_ET_RT_DIM_TMP where record_type = 'RT';
595 
596 		IF p_Revenue_Category IS NOT NULL THEN
597 			l_RCate_Dimension_List_Tab:=Decode_VARS(p_Revenue_Category);
598                 ELSE
599 			l_RCate_Dimension_List_Tab := NULL;
600 		END IF;
601 
602 
603 		IF p_Revenue_Type_IDS IS NOT NULL THEN
604 			l_RType_Dimension_List_Tab:=Decode_IDS(p_Revenue_Type_IDS);
605               ELSE
606 			l_RType_Dimension_List_Tab := NULL;
607 		END IF;
608 
609 		IF l_RCate_Dimension_List_Tab IS NULL AND p_View_BY = 'RC' THEN
610 			IF p_PA_DEBUG_MODE = 'Y' THEN
611 				Write2FWKLog('View BY RC and RC is not specified.');
612 				Write2FWKLog('step6','step6');
613 			END IF;
614 			INSERT INTO PJI_PMV_EC_RC_DIM_TMP (ID, NAME,RECORD_TYPE)
615 			SELECT ID, VALUE,'RC'
616 			FROM pji_revenue_categories_v ;
617 			l_RC_Parsed_Flag:='Y';
618 		ELSIF l_RCate_Dimension_List_Tab IS NOT NULL THEN
619 			IF p_PA_DEBUG_MODE = 'Y' THEN
620 				Write2FWKLog('RC is specified.');
621 			END IF;
622 			FOR i IN 1..l_RCate_Dimension_List_Tab.Last LOOP
623 				INSERT INTO PJI_PMV_EC_RC_DIM_TMP (ID, NAME,RECORD_TYPE)
624 				SELECT ID, DECODE(p_View_By, 'RC', VALUE, '-1'),'RC'
625 				FROM pji_revenue_categories_v
626 				WHERE ID = l_RCate_Dimension_List_Tab(i);
627 			END LOOP;
628 			l_RC_Parsed_Flag:='Y';
629 		END IF;
630 
631 
632 		IF l_RType_Dimension_List_Tab IS NULL THEN
633 			IF p_PA_DEBUG_MODE = 'Y' THEN
634 				Write2FWKLog('RT is not specified.');
635 			END IF;
636 			IF l_RC_Parsed_Flag IS NULL AND p_View_BY = 'RT' THEN
637 				IF p_PA_DEBUG_MODE = 'Y' THEN
638 					Write2FWKLog('Creating RT rows, View BY RT and RC is not specified.');
639 				END IF;
640 
641 				INSERT INTO PJI_PMV_ET_RT_DIM_TMP (ID, NAME,RECORD_TYPE)
642 				SELECT ID, VALUE,'RT'
643 				FROM pji_exp_evt_types_v ;
644 				l_RT_Parsed_Flag:='Y';
645 			ELSIF l_RC_Parsed_Flag IS NOT NULL THEN
646 				IF p_PA_DEBUG_MODE = 'Y' THEN
647 					Write2FWKLog('Creating RT rows, RC is specified.');
648 				END IF;
649 				INSERT INTO PJI_PMV_ET_RT_DIM_TMP (ID, NAME,RECORD_TYPE)
650 				SELECT rtyp.id, DECODE(p_View_BY,'RC',usrx.name,'RT',rtyp.value,'-1'),'RT'
651 				FROM pji_exp_evt_types_v rtyp
652 				, PJI_PMV_EC_RC_DIM_TMP usrx
653 				WHERE rtyp.revenue_category_code = usrx.id
654                                  and  usrx.record_type = 'RC';
655 				l_RT_Parsed_Flag:='Y';
656 			END IF;
657 		ELSIF l_RType_Dimension_List_Tab IS NOT NULL THEN
658 			IF p_PA_DEBUG_MODE = 'Y' THEN
659 				Write2FWKLog('RT is specified.');
660 			END IF;
661 			IF l_RC_Parsed_Flag IS NULL THEN
662 				IF p_PA_DEBUG_MODE = 'Y' THEN
663 					Write2FWKLog('Creating RT rows, RC is not specified.');
664 				END IF;
665 				FOR i IN 1..l_RType_Dimension_List_Tab.Last LOOP
666 					INSERT INTO PJI_PMV_ET_RT_DIM_TMP (ID, NAME,RECORD_TYPE)
667 					SELECT id, DECODE(p_View_BY,'RT',value,'-1'),'RT'
668 					FROM pji_exp_evt_types_v
669 					WHERE
670 					id = l_RType_Dimension_List_Tab(i);
671 				END LOOP;
672 				l_RT_Parsed_Flag:='Y';
673 			ELSIF l_RC_Parsed_Flag IS NOT NULL THEN
674 				IF p_PA_DEBUG_MODE = 'Y' THEN
675 					Write2FWKLog('Creating RT rows, RC is specified.');
676 				END IF;
677 				FOR i IN 1..l_RType_Dimension_List_Tab.Last LOOP
678 					INSERT INTO PJI_PMV_ET_RT_DIM_TMP (ID, NAME,RECORD_TYPE)
679 					SELECT rtyp.id, DECODE(p_View_BY,'RC',usrx.name,'RT',rtyp.value,'-1'),'RT'
680 					FROM pji_exp_evt_types_v rtyp
681 					, PJI_PMV_EC_RC_DIM_TMP usrx
682 					WHERE rtyp.id = l_RType_Dimension_List_Tab(i)
683 					AND rtyp.revenue_category_code = usrx.id
684                                         AND usrx.record_type = 'RC';
685 				END LOOP;
686 				l_RT_Parsed_Flag:='Y';
687 			END IF;
688 		END IF;
689 		IF p_PA_DEBUG_MODE = 'Y' THEN
690 			Write2FWKLog('Exiting Convert_Event_Revenue_Type...');
691 		END IF;
692 		RETURN l_RT_Parsed_Flag;
693 	EXCEPTION
694 		WHEN OTHERS THEN
695 			g_SQL_Error_Msg:=SQLERRM();
696 			IF p_PA_DEBUG_MODE = 'Y' THEN
697 				Write2FWKLog(g_SQL_Error_Msg, 3);
698 			END IF;
699 			RAISE;
700 	END Convert_Event_Revenue_Type;
701 
702 	Function Convert_Work_Type(p_Work_Type_IDS VARCHAR2 DEFAULT NULL
703 						, p_View_BY VARCHAR2) RETURN VARCHAR2
704 	AS
705 	l_Dimension_List_Tab 	SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
706 	l_Parse_Status		VARCHAR2(1);
707 	BEGIN
708 		IF p_PA_DEBUG_MODE = 'Y' THEN
709 			Write2FWKLog('Entering Convert_Work_Type...','Convert_Work_Type');
710 		END IF;
711 
712 		DELETE PJI_PMV_WT_DIM_TMP;
713 
714  	  IF p_View_BY NOT IN ('WT') AND p_Work_Type_IDS IS NULL THEN
715            l_Parse_Status := 'N';
716           ELSE
717            l_Parse_Status:='Y';
718 
719 		IF p_Work_Type_IDS IS NOT NULL THEN
720 				l_Dimension_List_Tab:=Decode_IDS(p_Work_Type_IDS);
721 				FOR i IN 1..l_Dimension_List_Tab.Last LOOP
722 					INSERT INTO PJI_PMV_WT_DIM_TMP (ID, NAME)
723 					SELECT WT.ID, DECODE(p_View_BY,'WT',WT.VALUE,'-1')
724 					FROM PJI_WORK_TYPES_V WT
725                                         WHERE  WT.ID = l_Dimension_List_Tab(i);
726 				END LOOP;
727                 ELSE
728 					INSERT INTO PJI_PMV_WT_DIM_TMP (ID, NAME)
729 					SELECT WT.ID, WT.VALUE
730 					FROM PJI_WORK_TYPES_V WT ;
731                 END IF;
732 
733 	   END IF;
734 	   RETURN l_Parse_Status;
735         EXCEPTION
736                 WHEN OTHERS THEN
737                         g_SQL_Error_Msg:=SQLERRM();
738                         IF p_PA_DEBUG_MODE = 'Y' THEN
739                                 Write2FWKLog(g_SQL_Error_Msg, 3);
740                         END IF;
741                         RAISE;
742 
743 	END Convert_Work_Type;
744 
745 	/*
746         ** Function: Convert_Expenditure_Type
747 	** The function inserts all the valid expenditure types specified in
748 	** the pmv report into a session specific temporary table.
749 	** The function return 'Y' if the lower level fact (expenditure type)
750 	** needs to be joined to.
751 	** ----------------------------------------------------------
752 	*/
753 	Function Convert_Expenditure_Type(p_Expenditure_Category VARCHAR2 DEFAULT NULL
754 						, p_Expenditure_Type_IDS VARCHAR2 DEFAULT NULL
755 						, p_View_BY VARCHAR2) RETURN VARCHAR2
756 	AS
757 	l_ECate_Dimension_List_Tab 	SYSTEM.pa_varchar2_240_tbl_type := SYSTEM.pa_varchar2_240_tbl_type();
758 	l_EType_Dimension_List_Tab 	SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
759 	l_EC_Parsed_Flag		VARCHAR2(1);
760 	l_ET_Parsed_Flag		VARCHAR2(1):='N';
761 	BEGIN
762 		IF p_PA_DEBUG_MODE = 'Y' THEN
763 			Write2FWKLog('Entering Convert_Expenditure_Category...','Convert_Expenditure_Category');
764 		END IF;
765 
766 		DELETE PJI_PMV_ET_RT_DIM_TMP where record_type = 'ET';
767 		DELETE PJI_PMV_EC_RC_DIM_TMP where record_type = 'EC';
768 
769 		IF p_Expenditure_Category IS NOT NULL THEN
770 			l_ECate_Dimension_List_Tab:=Decode_VARS(p_Expenditure_Category);
771               ELSE
772 			l_ECate_Dimension_List_Tab := NULL;
773 		END IF;
774 
775 
776 		IF p_Expenditure_Type_IDS IS NOT NULL THEN
777 			l_EType_Dimension_List_Tab:=Decode_IDS(p_Expenditure_Type_IDS);
778               ELSE
779 			l_EType_Dimension_List_Tab := NULL;
780 		END IF;
781 
782 		IF l_ECate_Dimension_List_Tab IS NULL AND p_View_BY = 'EC' THEN
783 			IF p_PA_DEBUG_MODE = 'Y' THEN
784 				Write2FWKLog('View BY EC and EC is not specified.');
785 			END IF;
786 			INSERT INTO PJI_PMV_EC_RC_DIM_TMP (ID, NAME,RECORD_TYPE)
787 			SELECT EXPENDITURE_CATEGORY, EXPENDITURE_CATEGORY,'EC'
788 			FROM PA_EXPENDITURE_CATEGORIES ;
789 			l_EC_Parsed_Flag:='Y';
790 		ELSIF l_ECate_Dimension_List_Tab IS NOT NULL THEN
791 			IF p_PA_DEBUG_MODE = 'Y' THEN
792 				Write2FWKLog('EC is specified.');
793 			END IF;
794 			FOR i IN 1..l_ECate_Dimension_List_Tab.Last LOOP
795 				INSERT INTO PJI_PMV_EC_RC_DIM_TMP (ID, NAME,RECORD_TYPE)
796 				SELECT EXPENDITURE_CATEGORY, DECODE(p_View_By, 'EC', EXPENDITURE_CATEGORY, '-1'),'EC'
797 				FROM PA_EXPENDITURE_CATEGORIES
798 				WHERE EXPENDITURE_CATEGORY_ID = to_number(l_ECate_Dimension_List_Tab(i));
799 				/* Changed the where clause to expenditure_category_id as l_ECate_Dimension_List_Tab
800 				stores expenditure_category_id in varchar form. Added for bug 6836176 */
801 			END LOOP;
802 			l_EC_Parsed_Flag:='Y';
803 		END IF;
804 
805 
806 		IF l_EType_Dimension_List_Tab IS NULL THEN
807 			IF p_PA_DEBUG_MODE = 'Y' THEN
808 				Write2FWKLog('ET is not specified.');
809 			END IF;
810 			IF l_EC_Parsed_Flag IS NULL AND p_View_BY = 'ET' THEN
811 				IF p_PA_DEBUG_MODE = 'Y' THEN
812 					Write2FWKLog('Creating ET rows, View BY ET and EC is not specified.');
813 				END IF;
814 
815 				INSERT INTO PJI_PMV_ET_RT_DIM_TMP (ID, NAME,RECORD_TYPE)
816 				SELECT EXPENDITURE_TYPE_ID, EXPENDITURE_TYPE,'ET'
817 				FROM PA_EXPENDITURE_TYPES ;
818 				l_ET_Parsed_Flag:='Y';
819 			ELSIF l_EC_Parsed_Flag IS NOT NULL THEN
820 				IF p_PA_DEBUG_MODE = 'Y' THEN
821 					Write2FWKLog('Creating ET rows, EC is specified.');
822 				END IF;
823 				INSERT INTO PJI_PMV_ET_RT_DIM_TMP (ID, NAME,RECORD_TYPE)
824 				SELECT etyp.expenditure_type_id,
825 
826 DECODE(p_View_BY,'EC',usrx.name,'ET',etyp.expenditure_type,'-1'),'ET'
827 				FROM pa_expenditure_types etyp
828 				, PJI_PMV_EC_RC_DIM_TMP usrx
829 				WHERE etyp.expenditure_category = usrx.id
830                                   and usrx.record_type = 'EC';
831 				l_ET_Parsed_Flag:='Y';
832 			END IF;
833 		ELSIF l_EType_Dimension_List_Tab IS NOT NULL THEN
834 			IF p_PA_DEBUG_MODE = 'Y' THEN
835 				Write2FWKLog('ET is specified.');
836 			END IF;
837 			IF l_EC_Parsed_Flag IS NULL THEN
838 				IF p_PA_DEBUG_MODE = 'Y' THEN
839 					Write2FWKLog('Creating ET rows, EC is not specified.');
840 				END IF;
841 				FOR i IN 1..l_EType_Dimension_List_Tab.Last LOOP
842 					INSERT INTO PJI_PMV_ET_RT_DIM_TMP (ID, NAME,RECORD_TYPE)
843 					SELECT expenditure_type_id, DECODE(p_View_BY,'ET',expenditure_type,'-1'),'ET'
844 					FROM pa_expenditure_types
845 					WHERE
846 					expenditure_type_id = l_EType_Dimension_List_Tab(i);
847 				END LOOP;
848 				l_ET_Parsed_Flag:='Y';
849 			ELSIF l_EC_Parsed_Flag IS NOT NULL THEN
850 				IF p_PA_DEBUG_MODE = 'Y' THEN
851 					Write2FWKLog('Creating ET rows, EC is specified.');
852 				END IF;
853 				FOR i IN 1..l_EType_Dimension_List_Tab.Last LOOP
854 					INSERT INTO PJI_PMV_ET_RT_DIM_TMP (ID, NAME,RECORD_TYPE)
855 					SELECT etyp.expenditure_type_id,
856 
857 					DECODE(p_View_BY,'EC',usrx.name,'ET',etyp.expenditure_type,'-1'),'ET'
858 					FROM pa_expenditure_types etyp
859 					, PJI_PMV_EC_RC_DIM_TMP usrx
860 					WHERE etyp.expenditure_type_id = l_EType_Dimension_List_Tab(i)
861 					AND etyp.expenditure_category = usrx.id
862                                         AND usrx.record_type = 'EC';
863 				END LOOP;
864 				l_ET_Parsed_Flag:='Y';
865 			END IF;
866 		END IF;
867 		IF p_PA_DEBUG_MODE = 'Y' THEN
868 			Write2FWKLog('Exiting Convert_Expenditure_Type...');
869 		END IF;
870 		RETURN l_ET_Parsed_Flag;
871 	EXCEPTION
872 		WHEN OTHERS THEN
873 			g_SQL_Error_Msg:=SQLERRM();
874 			IF p_PA_DEBUG_MODE = 'Y' THEN
875 				Write2FWKLog(g_SQL_Error_Msg, 3);
876 			END IF;
877 			RAISE;
878 	END Convert_Expenditure_Type;
879 
880 	/*
881 	** ----------------------------------------------------------
882 	** Function: Convert_Util_Category
883 	** The function inserts all the valid work types specified in
884 	** the pmv report into a session specific temporary table.
885 	** The function return 'Y' if the lower level fact (work type)
886 	** needs to be joined to.
887 	** ----------------------------------------------------------
888 	*/
889 	Function Convert_Util_Category(p_Work_Type_IDS VARCHAR2 DEFAULT NULL
890 						, p_Util_Category_IDS VARCHAR2 DEFAULT NULL
891 						, p_View_BY VARCHAR2) RETURN VARCHAR2
892 	AS
893 	l_Util_Dimension_List_Tab 	SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
894 	l_WType_Dimension_List_Tab 	SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
895 	l_UC_Parsed_Flag		VARCHAR2(1);
896 	l_WT_Parsed_Flag		VARCHAR2(1):='N';
897 	BEGIN
898 		IF p_PA_DEBUG_MODE = 'Y' THEN
899 			Write2FWKLog('Entering Convert_Util_Category...','Convert_Util_Category');
900 		END IF;
901 
902 		DELETE PJI_PMV_WT_DIM_TMP;
903 		DELETE PJI_PMV_UC_DIM_TMP;
904 
905 		IF p_Util_Category_IDS IS NOT NULL THEN
906 			l_Util_Dimension_List_Tab:=Decode_IDS(p_Util_Category_IDS);
907               ELSE
908 			l_Util_Dimension_List_Tab := NULL;
909 		END IF;
910 
911 
912 		IF p_Work_Type_IDS IS NOT NULL THEN
913 			l_WType_Dimension_List_Tab:=Decode_IDS(p_Work_Type_IDS);
914               ELSE
915 			l_WType_Dimension_List_Tab := NULL;
916 		END IF;
917 
918 		IF l_Util_Dimension_List_Tab IS NULL AND p_View_BY = 'UC' THEN
919 			IF p_PA_DEBUG_MODE = 'Y' THEN
920 				Write2FWKLog('View BY UC and UC is not specified.');
921 			END IF;
922 			INSERT INTO PJI_PMV_UC_DIM_TMP (ID, NAME)
923 			SELECT util_category_id, name
924 			FROM pa_util_categories_tl
925 			WHERE
926 			LANGUAGE = USERENV('LANG');
927 			l_UC_Parsed_Flag:='Y';
928 		ELSIF l_Util_Dimension_List_Tab IS NOT NULL THEN
929 			IF p_PA_DEBUG_MODE = 'Y' THEN
930 				Write2FWKLog('UC is specified.');
931 			END IF;
932 			/*
933 			** Following portion of the code is commented
934 			** because of a bug in db (2596577).
935 			*/
936 			/*
937 			FORALL i IN 1..l_Util_Dimension_List_Tab.Last
938 				INSERT INTO PJI_PMV_UC_DIM_TMP (ID, NAME)
939 				SELECT util_category_id, DECODE(p_View_By, 'UC', name , '-1')
940 				FROM pa_util_categories_tl
941 				WHERE
942 				LANGUAGE = USERENV('LANG')
943 				AND util_category_id = l_Util_Dimension_List_Tab(i);
944 			*/
945 			FOR i IN 1..l_Util_Dimension_List_Tab.Last LOOP
946 				INSERT INTO PJI_PMV_UC_DIM_TMP (ID, NAME)
947 				SELECT util_category_id, DECODE(p_View_By, 'UC', name , '-1')
948 				FROM pa_util_categories_tl
949 				WHERE
950 				LANGUAGE = USERENV('LANG')
951 				AND util_category_id = l_Util_Dimension_List_Tab(i);
952 			END LOOP;
953 			l_UC_Parsed_Flag:='Y';
954 		END IF;
955 
956 
957 		IF l_WType_Dimension_List_Tab IS NULL THEN
958 			IF p_PA_DEBUG_MODE = 'Y' THEN
959 				Write2FWKLog('WT is not specified.');
960 			END IF;
961 			IF l_UC_Parsed_Flag IS NULL AND p_View_BY = 'WT' THEN
962 				IF p_PA_DEBUG_MODE = 'Y' THEN
963 					Write2FWKLog('Creating WT rows, View BY WT and UC is not specified.');
964 				END IF;
965 				INSERT INTO PJI_PMV_WT_DIM_TMP (ID, NAME)
966 				SELECT work_type_id, name
967 				FROM pa_work_types_tl
968 				WHERE
969 				LANGUAGE = USERENV('LANG');
970 				l_WT_Parsed_Flag:='Y';
971 			ELSIF l_UC_Parsed_Flag IS NOT NULL THEN
972 				IF p_PA_DEBUG_MODE = 'Y' THEN
973 					Write2FWKLog('Creating WT rows, UC is specified.');
974 				END IF;
975 				INSERT INTO PJI_PMV_WT_DIM_TMP (ID, NAME)
976 				SELECT orig.work_type_id, DECODE(p_View_BY,'UC',usrx.name,'WT',orig_tl.name,'-1')
977 				FROM pa_work_types_tl orig_tl
978 				, pa_work_types_b orig
979 				, pji_pmv_uc_dim_tmp usrx
980 				WHERE
981 				LANGUAGE = USERENV('LANG')
982 				AND orig.work_type_id = orig_tl.work_type_id
983 				AND orig.org_util_category_id = usrx.id;
984 				l_WT_Parsed_Flag:='Y';
985 			END IF;
986 		ELSIF l_WType_Dimension_List_Tab IS NOT NULL THEN
987 			IF p_PA_DEBUG_MODE = 'Y' THEN
988 				Write2FWKLog('WT is specified.');
989 			END IF;
990 			IF l_UC_Parsed_Flag IS NULL THEN
991 				IF p_PA_DEBUG_MODE = 'Y' THEN
992 					Write2FWKLog('Creating WT rows, UC is not specified.');
993 				END IF;
994 				/*
995 				** Following portion of the code is commented
996 				** because of a bug in db (2596577).
997 				*/
998 				/*
999 				FORALL i IN 1..l_WType_Dimension_List_Tab.Last
1000 					INSERT INTO PJI_PMV_WT_DIM_TMP (ID, NAME)
1001 					SELECT work_type_id, DECODE(p_View_BY,'WT',name,'-1')
1002 					FROM pa_work_types_tl
1003 					WHERE
1004 					LANGUAGE = USERENV('LANG')
1005 					AND work_type_id = l_WType_Dimension_List_Tab(i);
1006 				*/
1007 				FOR i IN 1..l_WType_Dimension_List_Tab.Last LOOP
1008 					INSERT INTO PJI_PMV_WT_DIM_TMP (ID, NAME)
1009 					SELECT work_type_id, DECODE(p_View_BY,'WT',name,'-1')
1010 					FROM pa_work_types_tl
1011 					WHERE
1012 					LANGUAGE = USERENV('LANG')
1013 					AND work_type_id = l_WType_Dimension_List_Tab(i);
1014 				END LOOP;
1015 				l_WT_Parsed_Flag:='Y';
1016 			ELSIF l_UC_Parsed_Flag IS NOT NULL THEN
1017 				IF p_PA_DEBUG_MODE = 'Y' THEN
1018 					Write2FWKLog('Creating WT rows, UC is specified.');
1019 				END IF;
1020 				/*
1021 				** Following portion of the code is commented
1022 				** because of a bug in db (2596577).
1023 				*/
1024 				/*
1025 				FORALL i IN 1..l_WType_Dimension_List_Tab.Last
1026 					INSERT INTO PJI_PMV_WT_DIM_TMP (ID, NAME)
1027 					SELECT orig.work_type_id, DECODE(p_View_BY,'UC',usrx.name,'WT',orig_tl.name,'-1')
1028 					FROM pa_work_types_tl orig_tl
1029 					, pa_work_types_b orig
1030 					, pji_pmv_uc_dim_tmp usrx
1031 					WHERE
1032 					LANGUAGE = USERENV('LANG')
1033 					AND orig.work_type_id = l_WType_Dimension_List_Tab(i)
1034 					AND orig.work_type_id = orig_tl.work_type_id
1035 					AND orig.org_util_category_id = usrx.id;
1036 				*/
1037 				FOR i IN 1..l_WType_Dimension_List_Tab.Last LOOP
1038 					INSERT INTO PJI_PMV_WT_DIM_TMP (ID, NAME)
1039 					SELECT orig.work_type_id, DECODE(p_View_BY,'UC',usrx.name,'WT',orig_tl.name,'-1')
1040 					FROM pa_work_types_tl orig_tl
1041 					, pa_work_types_b orig
1042 					, pji_pmv_uc_dim_tmp usrx
1043 					WHERE
1044 					LANGUAGE = USERENV('LANG')
1045 					AND orig.work_type_id = l_WType_Dimension_List_Tab(i)
1046 					AND orig.work_type_id = orig_tl.work_type_id
1047 					AND orig.org_util_category_id = usrx.id;
1048 				END LOOP;
1049 				l_WT_Parsed_Flag:='Y';
1050 			END IF;
1051 		END IF;
1052 		IF p_PA_DEBUG_MODE = 'Y' THEN
1053 			Write2FWKLog('Exiting Convert_Util_Category...');
1054 		END IF;
1055 		RETURN l_WT_Parsed_Flag;
1056 	EXCEPTION
1057 		WHEN OTHERS THEN
1058 			g_SQL_Error_Msg:=SQLERRM();
1059 			IF p_PA_DEBUG_MODE = 'Y' THEN
1060 				Write2FWKLog(g_SQL_Error_Msg, 3);
1061 			END IF;
1062 			RAISE;
1063 	END Convert_Util_Category;
1064 
1065 	/*
1066 	** ----------------------------------------------------------
1067 	** Function: Convert_Job_Level
1068 	** The function inserts all the valid Job Levels specified in
1069 	** the pmv report into a session specific temporary table.
1070 	** The function return 'Y' if the lower level fact (job)
1071 	** needs to be joined to.
1072 	** ----------------------------------------------------------
1073 	*/
1074 
1075 	Function Convert_Job_Level(p_Job_IDS VARCHAR2 DEFAULT NULL
1076 						, p_Job_Level_IDS VARCHAR2 DEFAULT NULL
1077 						, p_View_BY VARCHAR2) RETURN VARCHAR2
1078 	AS
1079 	l_Job_Dimension_List_Tab 	SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1080 	l_JLevel_Dimension_List_Tab 	SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1081 	l_JL_Parsed_Flag		VARCHAR2(1);
1082 	l_JB_Parsed_Flag		VARCHAR2(1):='N';
1083 	BEGIN
1084 		IF p_PA_DEBUG_MODE = 'Y' THEN
1085 			Write2FWKLog('Entering Convert_Job_Level...','Convert_Job_Level');
1086 		END IF;
1087 
1088 		DELETE PJI_PMV_JB_DIM_TMP;
1089 		DELETE PJI_PMV_JL_DIM_TMP;
1090 
1091 		IF p_Job_Level_IDS IS NOT NULL THEN
1092 			l_JLevel_Dimension_List_Tab:=Decode_IDS(p_Job_Level_IDS);
1093 		ELSE
1094 			l_JLevel_Dimension_List_Tab := NULL;
1095 		END IF;
1096 
1097 		IF p_Job_IDS IS NOT NULL THEN
1098 			l_Job_Dimension_List_Tab:=Decode_IDS(p_Job_IDS);
1099               ELSE
1100 			l_Job_Dimension_List_Tab := NULL;
1101 		END IF;
1102 
1103 		IF l_JLevel_Dimension_List_Tab IS NULL AND p_View_BY = 'JL' THEN
1104 			IF p_PA_DEBUG_MODE = 'Y' THEN
1105 				Write2FWKLog('View BY JL and JL is not specified.');
1106 			END IF;
1107 			INSERT INTO PJI_PMV_JL_DIM_TMP (ID, NAME)
1108 			SELECT ID, VALUE
1109 			FROM PJI_JOB_LEVELS_V;
1110 			l_JL_Parsed_Flag:='Y';
1111 		ELSIF l_JLevel_Dimension_List_Tab IS NOT NULL THEN
1112 			IF p_PA_DEBUG_MODE = 'Y' THEN
1113 				Write2FWKLog('JL is specified.');
1114 			END IF;
1115 			/*
1116 			** Following portion of the code is commented
1117 			** because of a bug in db (2596577).
1118 			*/
1119 			/*
1120 			FORALL i IN 1..l_JLevel_Dimension_List_Tab.Last
1121 				INSERT INTO PJI_PMV_JL_DIM_TMP (ID, NAME)
1122 				SELECT ID,DECODE(p_View_By, 'JL', VALUE , '-1')
1123 				FROM PJI_JOB_LEVELS_V
1124 				WHERE ID = l_JLevel_Dimension_List_Tab(i);
1125 			*/
1126 			FOR i IN 1..l_JLevel_Dimension_List_Tab.Last LOOP
1127 				INSERT INTO PJI_PMV_JL_DIM_TMP (ID, NAME)
1128 				SELECT ID,DECODE(p_View_By, 'JL', VALUE , '-1')
1129 				FROM PJI_JOB_LEVELS_V
1130 				WHERE ID = l_JLevel_Dimension_List_Tab(i);
1131 			END LOOP;
1132 			l_JL_Parsed_Flag:='Y';
1133 		END IF;
1134 
1135 
1136 		IF l_Job_Dimension_List_Tab IS NULL THEN
1137 			IF p_PA_DEBUG_MODE = 'Y' THEN
1138 				Write2FWKLog('View BY JB is not specified.');
1139 			END IF;
1140 			IF l_JL_Parsed_Flag IS NULL AND p_View_BY = 'JB' THEN
1141 				IF p_PA_DEBUG_MODE = 'Y' THEN
1142 					Write2FWKLog('Creating JB rows, View BY JB and JL is not specified.');
1143 				END IF;
1144 				INSERT INTO PJI_PMV_JB_DIM_TMP (ID, NAME)
1145 				SELECT ID, VALUE
1146 				FROM PJI_JOBS_V;
1147 				l_JB_Parsed_Flag:='Y';
1148 			ELSIF l_JL_Parsed_Flag IS NOT NULL THEN
1149 				IF p_PA_DEBUG_MODE = 'Y' THEN
1150 					Write2FWKLog('Creating JB rows, JL is specified.');
1151 				END IF;
1152 				INSERT INTO PJI_PMV_JB_DIM_TMP (ID, NAME)
1153 				SELECT ORIG.ID, DECODE(p_View_BY,'JL',USRX.NAME,'JB',ORIG.VALUE,'-1')
1154 				FROM PJI_JOBS_V ORIG
1155 				, PJI_PMV_JL_DIM_TMP USRX
1156 				WHERE ORIG.JOB_LEVEL=USRX.ID;
1157 				l_JB_Parsed_Flag:='Y';
1158 			END IF;
1159 		ELSIF l_Job_Dimension_List_Tab IS NOT NULL THEN
1160 			IF p_PA_DEBUG_MODE = 'Y' THEN
1161 				Write2FWKLog('View BY JB is specified.');
1162 			END IF;
1163 			IF l_JL_Parsed_Flag IS NULL THEN
1164 				Write2FWKLog('Creating JB rows, JL is not specified.');
1165 				/*
1166 				** Following portion of the code is commented
1167 				** because of a bug in db (2596577).
1168 				*/
1169 				/*
1170 				FORALL i IN 1..l_Job_Dimension_List_Tab.Last
1171 					INSERT INTO PJI_PMV_JL_DIM_TMP (ID, NAME)
1172 					SELECT ID, DECODE(p_View_BY,'JL',VALUE,'-1')
1173 					FROM PJI_JOBS_V
1174 					WHERE ID = l_Job_Dimension_List_Tab(i);
1175 				*/
1176 				FOR i IN 1..l_Job_Dimension_List_Tab.Last LOOP
1177 					INSERT INTO PJI_PMV_JL_DIM_TMP (ID, NAME)
1178 					SELECT ID, DECODE(p_View_BY,'JL',VALUE,'-1')
1179 					FROM PJI_JOBS_V
1180 					WHERE ID = l_Job_Dimension_List_Tab(i);
1181 				END LOOP;
1182 				l_JB_Parsed_Flag:='Y';
1183 			ELSIF l_JL_Parsed_Flag IS NOT NULL THEN
1184 				IF p_PA_DEBUG_MODE = 'Y' THEN
1185 					Write2FWKLog('Creating JB rows, JL is specified.');
1186 				END IF;
1187 				/*
1188 				** Following portion of the code is commented
1189 				** because of a bug in db (2596577).
1190 				*/
1191 				/*
1192 				FORALL i IN 1..l_Job_Dimension_List_Tab.Last
1193 					INSERT INTO PJI_PMV_JL_DIM_TMP (ID, NAME)
1194 					SELECT ORIG.ID, DECODE(p_View_BY,'JL',USRX.NAME,'JB',ORIG.VALUE,'-1')
1195 					FROM PJI_JOBS_V ORIG
1196 					, PJI_PMV_JL_DIM_TMP USRX
1197 					WHERE ORIG.ID=l_Job_Dimension_List_Tab(i)
1198 					AND ORIG.JOB_LEVEL=USRX.ID;
1199 				*/
1200 				FOR i IN 1..l_Job_Dimension_List_Tab.Last LOOP
1201 					INSERT INTO PJI_PMV_JL_DIM_TMP (ID, NAME)
1202 					SELECT ORIG.ID, DECODE(p_View_BY,'JL',USRX.NAME,'JB',ORIG.VALUE,'-1')
1203 					FROM PJI_JOBS_V ORIG
1204 					, PJI_PMV_JL_DIM_TMP USRX
1205 					WHERE ORIG.ID=l_Job_Dimension_List_Tab(i)
1206 					AND ORIG.JOB_LEVEL=USRX.ID;
1207 				END LOOP;
1208 				l_JB_Parsed_Flag:='Y';
1209 			END IF;
1210 		END IF;
1211 		IF p_PA_DEBUG_MODE = 'Y' THEN
1212 			Write2FWKLog('Exiting Convert_Job_Level...');
1213 		END IF;
1214 
1215 		RETURN l_JB_Parsed_Flag;
1216 	EXCEPTION
1217 		WHEN OTHERS THEN
1218 			g_SQL_Error_Msg:=SQLERRM();
1219 			IF p_PA_DEBUG_MODE = 'Y' THEN
1220 				Write2FWKLog(g_SQL_Error_Msg, 3);
1221 			END IF;
1222 			RAISE;
1223 	END Convert_Job_Level;
1224 
1225     --Bug 4599990. This procedure will insert into PJI_PMV_ORGZ_DIM_TMP all the organizations in the PJI
1226     --reporting organization hierarchy that fall under the organization selected in the user assignment
1227     --of the person logged in. This is a private procedure and will be called by all the
1228     --convert_organization procedures in this package.
1229     PROCEDURE insert_user_assignment_orgz
1230     IS
1231     l_user_id            NUMBER;
1232     l_temp               NUMBER;
1233     BEGIN
1234 
1235         IF p_PA_DEBUG_MODE = 'Y' THEN
1236             Write2FWKLog('Entering insert_user_assignment_orgz...');
1237         END IF;
1238         l_user_id := fnd_global.user_id;
1239         INSERT INTO PJI_PMV_ORGZ_DIM_TMP (ID, NAME)
1240         SELECT sub_organization_id,
1241                org.name
1242         FROM   pji_org_denorm orgd,
1243                hr_all_organization_units_tl org,
1244                fnd_user fnd,
1245                per_all_assignments_f per
1246         WHERE org.language = USERENV('LANG')
1247         AND   fnd.user_id=l_user_id
1248         AND   fnd.employee_id=per.person_id
1249         AND   per.primary_flag='Y'
1250         AND   (SYSDATE BETWEEN per.effective_start_Date AND NVL(per.effective_end_date, SYSDATE + 1))
1251         AND   orgd.sub_organization_id = org.organization_id
1252         AND   orgd.organization_id = per.organization_id
1253         AND   orgd.sub_organization_level-orgd.organization_level=1;
1254 
1255         l_temp :=SQL%ROWCOUNT;
1256 
1257         IF p_PA_DEBUG_MODE = 'Y' THEN
1258             Write2FWKLog('Leaving insert_user_assignment_orgz . Inserted rows'||l_temp);
1259         END IF;
1260 
1261     END insert_user_assignment_orgz;
1262 
1263 	/*
1264 	** ----------------------------------------------------------
1265 	** Procedure: Convert_Organization
1266 	** The function inserts immediate sub organizations (the user
1267 	** has access to below the selected organization) into a
1268 	** session specific temporary table.
1269 	** ----------------------------------------------------------
1270 	*/
1271 
1272 	Procedure Convert_Organization(p_Top_Organization_ID 	NUMBER
1273 							, p_View_BY 		VARCHAR2
1274 							, p_Top_Organization_Name OUT NOCOPY VARCHAR2)
1275 	AS
1276 	l_Organization_Name		  VARCHAR2(240);
1277 	l_Security_Profile_ID	  NUMBER:=fnd_profile.value('PJI_SECURITY_PROFILE_LEVEL');
1278 	l_View_All_Org_Flag		  VARCHAR2(30);
1279 
1280     --Bug 4599990.
1281     l_top_organization_id     per_security_profiles.organization_id%TYPE;
1282 	BEGIN
1283 		IF p_PA_DEBUG_MODE = 'Y' THEN
1284 			Write2FWKLog('Entering Convert_Organization...','Convert_Organization (for Viewby reports)');
1285 		END IF;
1286 
1287 		DELETE PJI_PMV_ORGZ_DIM_TMP;
1288 
1289 
1290 		IF p_View_BY = 'OG' THEN
1291 			IF l_Security_Profile_ID IS NOT NULL THEN
1292 				IF p_PA_DEBUG_MODE = 'Y' THEN
1293 					Write2FWKLog('Before checking if view_all_organizations_flag is set...');
1294 				END IF;
1295 				BEGIN
1296                     --Bug 4599990. Selected other relavant data from the per_security_profiles.
1297 					SELECT view_all_organizations_flag,
1298                            organization_id
1299 					INTO   l_View_All_Org_Flag,
1300                            l_top_organization_id
1301 					FROM per_security_profiles
1302 					WHERE security_profile_id = l_Security_Profile_ID;
1303 					IF p_PA_DEBUG_MODE = 'Y' THEN
1304 						Write2FWKLog('view_all_organizations_flag is set...');
1305 					END IF;
1306 				EXCEPTION
1307 					WHEN NO_DATA_FOUND THEN
1308 					NULL;
1309 				END;
1310 				IF p_PA_DEBUG_MODE = 'Y' THEN
1311 					Write2FWKLog('After checking if view_all_organizations_flag is set...');
1312 				END IF;
1313 			END IF;
1314 			IF l_View_All_Org_Flag = 'Y' THEN
1315 				IF p_PA_DEBUG_MODE = 'Y' THEN
1316 					Write2FWKLog('Before insert of immediate sub-org organizations (w/o security)...');
1317 				END IF;
1318 				INSERT INTO PJI_PMV_ORGZ_DIM_TMP (ID, NAME)
1319 				SELECT sub_organization_id
1320 				, org.name
1321 				FROM pji_org_denorm orgd
1322 				, hr_all_organization_units_tl org
1323 				WHERE 1=1
1324 				AND org.language = USERENV('LANG')
1325 				AND orgd.sub_organization_id = org.organization_id
1326 				AND orgd.sub_organization_level-orgd.organization_level=1
1327 				AND orgd.organization_id = p_Top_Organization_ID;
1328 				IF p_PA_DEBUG_MODE = 'Y' THEN
1329 					Write2FWKLog('After insert of immediate sub-org organizations (w/o security)...');
1330 				END IF;
1331 			ELSIF l_View_All_Org_Flag = 'N' THEN
1332 				IF p_PA_DEBUG_MODE = 'Y' THEN
1333 					Write2FWKLog('Before insert of immediate sub-org organizations...');
1334 				END IF;
1335                 --Bug 4599990. Insert  if the top org is entered for the security profile.
1336                 IF l_top_organization_id IS NOT NULL THEN
1337 
1338                     INSERT INTO PJI_PMV_ORGZ_DIM_TMP (ID, NAME)
1339                     SELECT sub_organization_id
1340                     , org.name
1341                     FROM pji_org_denorm orgd
1342                     , per_organization_list sec
1343                     , hr_all_organization_units_tl org
1344                     WHERE 1=1
1345                     AND org.language = USERENV('LANG')
1346                     AND sec.security_profile_id = l_Security_Profile_ID
1347                     AND orgd.sub_organization_id = org.organization_id
1348                     AND orgd.sub_organization_id = sec.organization_id
1349                     AND orgd.organization_id = p_Top_Organization_ID
1350                     AND orgd.sub_organization_level-orgd.organization_level=1;
1351 
1352                 --Bug 4599990. Insert the organizations in the hierarchy with the org selected in the
1353                 --user assignment as top org.
1354                 ELSE
1355 
1356                     insert_user_assignment_orgz;
1357 
1358                 END IF;
1359 
1360 				IF p_PA_DEBUG_MODE = 'Y' THEN
1361 					Write2FWKLog('After insert of immediate sub-org organizations...');
1362 				END IF;
1363 			END IF;
1364 		END IF;
1365 
1366 		IF p_PA_DEBUG_MODE = 'Y' THEN
1367 			Write2FWKLog('Before selecting the organization name...');
1368 		END IF;
1369 
1370 		SELECT name
1371 		INTO l_Organization_Name
1372 		FROM hr_all_organization_units_tl
1373 		WHERE organization_id = p_Top_Organization_ID
1374 		AND language = USERENV('LANG');
1375 
1376 		IF p_PA_DEBUG_MODE = 'Y' THEN
1377 			Write2FWKLog('After selecting the organization name...');
1378 		END IF;
1379 
1380 		p_Top_Organization_Name:=l_Organization_Name;
1381 
1382 		IF p_PA_DEBUG_MODE = 'Y' THEN
1383 			Write2FWKLog('Before insert of current organization...');
1384 		END IF;
1385 
1386 
1387         IF p_View_BY = 'OG' THEN
1388             INSERT INTO PJI_PMV_ORGZ_DIM_TMP (ID, NAME)
1389             VALUES (p_Top_Organization_ID, l_Organization_Name);
1390         ELSE
1391             INSERT INTO PJI_PMV_ORGZ_DIM_TMP (ID, NAME)
1392             VALUES (p_Top_Organization_ID, -1);
1393         END IF;
1394 
1395 
1396 		IF p_PA_DEBUG_MODE = 'Y' THEN
1397 			Write2FWKLog('After insert of current organization...');
1398 			Write2FWKLog('Exiting Convert_Organization...');
1399 		END IF;
1400 
1401 	EXCEPTION
1402 		WHEN OTHERS THEN
1403 			g_SQL_Error_Msg:=SQLERRM();
1404 			IF p_PA_DEBUG_MODE = 'Y' THEN
1405 				Write2FWKLog(g_SQL_Error_Msg, 3);
1406 			END IF;
1407 			RAISE;
1408 	END Convert_Organization;
1409 
1410 	/*
1411 	** ----------------------------------------------------------
1412 	** Procedure: Convert_Organization
1413 	** The function inserts all the organizations (the user has
1414 	** access to below the selected organization) into a session
1415 	** specific temporary table.
1416 	** ----------------------------------------------------------
1417 	*/
1418 
1419 	Procedure Convert_Organization(p_Top_Organization_ID 	NUMBER
1420 						, p_View_BY 		VARCHAR2)
1421 	AS
1422 	l_Security_Profile_ID	  NUMBER:=fnd_profile.value('PJI_SECURITY_PROFILE_LEVEL');
1423 	l_View_All_Org_Flag		  VARCHAR2(30);
1424     --Bug 4599990.
1425     l_top_organization_id     per_security_profiles.organization_id%TYPE;
1426 	BEGIN
1427 		IF p_PA_DEBUG_MODE = 'Y' THEN
1428 			Write2FWKLog('Entering Convert_Organization...','Convert_Organization (for detail reports)');
1429 		END IF;
1430 
1431 		DELETE PJI_PMV_ORGZ_DIM_TMP;
1432 
1433 		IF p_PA_DEBUG_MODE = 'Y' THEN
1434 			Write2FWKLog('Before insert of rollup organization...');
1435 		END IF;
1436 
1437 		IF (p_View_BY = 'OG') THEN
1438 			IF l_Security_Profile_ID IS NOT NULL THEN
1439 				IF p_PA_DEBUG_MODE = 'Y' THEN
1440 					Write2FWKLog('Before checking if view_all_organizations_flag is set...');
1441 				END IF;
1442 				BEGIN
1443                     --Bug 4599990. Selected other relavant data from the per_security_profiles.
1444 					SELECT view_all_organizations_flag,
1445                            organization_id
1446 					INTO   l_View_All_Org_Flag,
1447                            l_top_organization_id
1448 					FROM per_security_profiles
1449 					WHERE security_profile_id = l_Security_Profile_ID;
1450 					IF p_PA_DEBUG_MODE = 'Y' THEN
1451 						Write2FWKLog('view_all_organizations_flag is set...');
1452 					END IF;
1453 				EXCEPTION
1454 					WHEN NO_DATA_FOUND THEN
1455 					NULL;
1456 				END;
1457 				IF p_PA_DEBUG_MODE = 'Y' THEN
1458 					Write2FWKLog('After checking if view_all_organizations_flag is set...');
1459 				END IF;
1460 			END IF;
1461 
1462 			IF l_View_All_Org_Flag = 'Y' THEN
1463 				IF p_PA_DEBUG_MODE = 'Y' THEN
1464 					Write2FWKLog('Before insert of all sub-org organizations (w/o security)...');
1465 				END IF;
1466                 INSERT INTO PJI_PMV_ORGZ_DIM_TMP (ID, NAME)
1467                 SELECT subro_organization_id
1468                 , name
1469                 FROM hri_cs_orghro_v orgd
1470                 , hr_all_organization_units_tl org
1471                 , pji_system_settings pjist
1472                 WHERE 1=1
1473                 AND pjist.setting_id = 1
1474                 AND orgd.org_hierarchy_version_id = pjist.org_structure_version_id
1475                 AND orgd.sub_organization_id = org.organization_id
1476                 AND org.language = USERENV('LANG')
1477                 AND orgd.sup_organization_id = p_Top_Organization_ID
1478                 AND orgd.sub_org_absolute_level-orgd.sup_org_absolute_level=1;
1479 				IF p_PA_DEBUG_MODE = 'Y' THEN
1480 					Write2FWKLog('After insert of all sub-org organizations (w/o security)...');
1481 				END IF;
1482 			ELSIF l_View_All_Org_Flag = 'N' THEN
1483 				IF p_PA_DEBUG_MODE = 'Y' THEN
1484 					Write2FWKLog('Before insert of all sub-org organizations...');
1485 				END IF;
1486 
1487                 --Bug 4599990. Insert  if the top org is entered for the security profile.
1488                 IF l_top_organization_id IS NOT NULL THEN
1489 
1490                     INSERT INTO PJI_PMV_ORGZ_DIM_TMP (ID, NAME)
1491                     SELECT subro_organization_id
1492                     , name
1493                     FROM hri_cs_orghro_v orgd
1494                     , hr_all_organization_units_tl org
1495                     , per_organization_list sec
1496                     , pji_system_settings pjist
1497                     WHERE 1=1
1498                     AND pjist.setting_id = 1
1499                     AND sec.security_profile_id = l_Security_Profile_ID
1500                     AND orgd.subro_organization_id = sec.organization_id
1501                     AND orgd.org_hierarchy_version_id = pjist.org_structure_version_id
1502                     AND orgd.sub_organization_id = org.organization_id
1503                     AND org.language = USERENV('LANG')
1504                     AND orgd.sup_organization_id = p_Top_Organization_ID
1505                     AND orgd.sub_org_absolute_level-orgd.sup_org_absolute_level=1;
1506 
1507                 --Bug 4599990. Insert the organizations in the hierarchy with the org selected in the
1508                 --user assignment as top org.
1509                 ELSE
1510 
1511                     insert_user_assignment_orgz;
1512 
1513                 END IF;
1514 				IF p_PA_DEBUG_MODE = 'Y' THEN
1515 					Write2FWKLog('After insert of all sub-org organizations...');
1516 				END IF;
1517 			END IF;
1518 			IF p_PA_DEBUG_MODE = 'Y' THEN
1519 				Write2FWKLog('After insert of rollup organization...');
1520 				Write2FWKLog('Before insert of current organization...');
1521 			END IF;
1522 
1523 
1524             INSERT INTO PJI_PMV_ORGZ_DIM_TMP (ID, NAME)
1525             SELECT organization_id, name
1526             FROM hr_all_organization_units_tl
1527             WHERE organization_id = p_Top_Organization_ID
1528             AND language = USERENV('LANG');
1529 
1530 			IF p_PA_DEBUG_MODE = 'Y' THEN
1531 				Write2FWKLog('After insert of current organization...');
1532 			END IF;
1533 		ELSE
1534 			INSERT INTO PJI_PMV_ORGZ_DIM_TMP (ID, NAME)
1535 			VALUES (p_Top_Organization_ID,'-1');
1536 			IF p_PA_DEBUG_MODE = 'Y' THEN
1537 				Write2FWKLog('After insert of rollup organization...');
1538 			END IF;
1539 		END IF;
1540 		IF p_PA_DEBUG_MODE = 'Y' THEN
1541 			Write2FWKLog('Exiting Convert_Organization...');
1542 		END IF;
1543 	EXCEPTION
1544 		WHEN OTHERS THEN
1545 			g_SQL_Error_Msg:=SQLERRM();
1546 			IF p_PA_DEBUG_MODE = 'Y' THEN
1547 				Write2FWKLog(g_SQL_Error_Msg, 3);
1548 			END IF;
1549 			RAISE;
1550 	END Convert_Organization;
1551 
1552 	/*
1553 	** ----------------------------------------------------------
1554 	** Procedure: Convert_Organization
1555 	** The function inserts all the organizations (the user has
1556 	** access to) below the selected organization into a session
1557 	** specific temporary table. Provided for facilitating
1558       ** discoverer reporting.
1559 	** ----------------------------------------------------------
1560 	*/
1561 
1562 	Procedure Convert_Organization(p_Top_Organization_ID	NUMBER DEFAULT NULL)
1563 	AS
1564 	l_Security_Profile_ID	  NUMBER:=fnd_profile.value('PJI_SECURITY_PROFILE_LEVEL');
1565 	l_View_All_Org_Flag		  VARCHAR2(30);
1566 	l_Top_Organization_ID	  NUMBER:=p_Top_Organization_ID;
1567 
1568     --Bug 4599990.
1569     l_sec_top_org_id          per_security_profiles.organization_id%TYPE;
1570 
1571 	BEGIN
1572 		IF p_PA_DEBUG_MODE = 'Y' THEN
1573 			Write2FWKLog('Entering Convert_Organization...','Convert_Organization (for discover reports)');
1574 		END IF;
1575 
1576 		DELETE PJI_PMV_ORGZ_DIM_TMP;
1577 
1578 		IF p_PA_DEBUG_MODE = 'Y' THEN
1579 			Write2FWKLog('Before insert of all sub organizations...');
1580 		END IF;
1581 
1582 		IF l_Top_Organization_ID IS NULL THEN
1583 			BEGIN
1584 				--Bug 5086074 , passing extra parameter to check code conditionally for discoverer implementation
1585 				--PJI_PMV_DFLT_PARAMS_PVT.InitEnvironment;
1586 				--l_Top_Organization_ID:=PJI_PMV_DFLT_PARAMS_PVT.Derive_Organization_ID;
1587 				PJI_PMV_DFLT_PARAMS_PVT.InitEnvironment('ConvertOrg');
1588 				l_Top_Organization_ID:=PJI_PMV_DFLT_PARAMS_PVT.Derive_Organization_ID('ConvertOrg');
1589 			END;
1590 		END IF;
1591 		IF l_Security_Profile_ID IS NOT NULL THEN
1592 			IF p_PA_DEBUG_MODE = 'Y' THEN
1593 				Write2FWKLog('Before checking if view_all_organizations_flag is set...');
1594 			END IF;
1595 			BEGIN
1596                 --Bug 4599990.Selected other relavant data from the per_security_profiles.
1597                 SELECT view_all_organizations_flag,
1598                        organization_id
1599                 INTO   l_View_All_Org_Flag,
1600                        l_sec_top_org_id
1601                 FROM per_security_profiles
1602                 WHERE security_profile_id = l_Security_Profile_ID;
1603 				IF p_PA_DEBUG_MODE = 'Y' THEN
1604 					Write2FWKLog('view_all_organizations_flag is set...');
1605 				END IF;
1606 			EXCEPTION
1607 				WHEN NO_DATA_FOUND THEN
1608 				NULL;
1609 			END;
1610 			IF p_PA_DEBUG_MODE = 'Y' THEN
1611 				Write2FWKLog('After checking if view_all_organizations_flag is set...');
1612 			END IF;
1613 		END IF;
1614 
1615 		IF l_View_All_Org_Flag = 'Y' THEN
1616 			IF p_PA_DEBUG_MODE = 'Y' THEN
1617 				Write2FWKLog('Before insert of all sub-org organizations (w/o security)...');
1618 			END IF;
1619 			INSERT INTO PJI_PMV_ORGZ_DIM_TMP (ID, NAME)
1620 			SELECT  org.organization_id, org.name
1621 			FROM pji_org_denorm denorm
1622 			, hr_all_organization_units_tl org
1623 			WHERE
1624 			denorm.organization_id = l_Top_Organization_ID
1625 			AND org.organization_id = denorm.sub_organization_id
1626 			AND org.language = USERENV('LANG');
1627 
1628 			IF p_PA_DEBUG_MODE = 'Y' THEN
1629 				Write2FWKLog('After insert of all sub-org organizations (w/o security)...');
1630 			END IF;
1631 		ELSIF l_View_All_Org_Flag = 'N' THEN
1632 			IF p_PA_DEBUG_MODE = 'Y' THEN
1633 				Write2FWKLog('Before insert of all sub-org organizations...');
1634 			END IF;
1635 
1636             --Bug 4599990. Insert  if the top org is entered for the security profile.
1637             IF l_sec_top_org_id IS NOT NULL  THEN
1638 
1639                 INSERT INTO PJI_PMV_ORGZ_DIM_TMP (ID, NAME)
1640                 SELECT  org.organization_id, org.name
1641                 FROM pji_org_denorm denorm
1642                 , hr_all_organization_units_tl org
1643                 , per_organization_list seclist
1644                 WHERE
1645                 denorm.organization_id = l_Top_Organization_ID
1646                 AND org.organization_id = denorm.sub_organization_id
1647                 AND seclist.security_profile_id = l_Security_Profile_ID
1648                 AND seclist.organization_id = denorm.sub_organization_id
1649                 AND org.language = USERENV('LANG');
1650 
1651             --Bug 4599990. Insert the organizations in the hierarchy with the org selected in the
1652             --user assignment as top org.
1653             ELSE
1654 
1655                 insert_user_assignment_orgz;
1656 
1657             END IF;
1658 			IF p_PA_DEBUG_MODE = 'Y' THEN
1659 				Write2FWKLog('After insert of all sub-org organizations...');
1660 			END IF;
1661 		END IF;
1662 
1663 		IF p_PA_DEBUG_MODE = 'Y' THEN
1664 			Write2FWKLog('After insert of sub organizations...');
1665 			Write2FWKLog('Exiting Convert_Organization...');
1666 		END IF;
1667 
1668 	EXCEPTION
1669 		WHEN OTHERS THEN
1670 			g_SQL_Error_Msg:=SQLERRM();
1671 			IF p_PA_DEBUG_MODE = 'Y' THEN
1672 				Write2FWKLog(g_SQL_Error_Msg, 3);
1673 			END IF;
1674 			RAISE;
1675 	END Convert_Organization;
1676 
1677 	/*
1678 	** ----------------------------------------------------------
1679 	** Procedure: Convert_Operating_Unit
1680 	** The function inserts all the operating units (the user has
1681 	** access to) into a session specific temporary table.
1682 	** Additionally this procedure also caches the calender_id's
1683 	** for the selected operating unit. These caches values are
1684 	** used the convert time apis further.
1685 	** This makes it imperative that this api call should always
1686 	** precede the call to the Convert_Time API's.
1687 	** ----------------------------------------------------------
1688 	*/
1689 
1690 	Procedure Convert_Operating_Unit(p_Operating_Unit_IDS VARCHAR2 DEFAULT NULL
1691 						, p_View_BY VARCHAR2)
1692 	AS
1693 	l_Security_Profile_ID	NUMBER:=fnd_profile.value('XLA_MO_SECURITY_PROFILE_LEVEL');
1694 	l_View_All_Org_Flag		VARCHAR2(30);
1695 	l_Dimension_List_Tab 	SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1696 	BEGIN
1697 		IF p_PA_DEBUG_MODE = 'Y' THEN
1698 			Write2FWKLog('Entering Convert_Operating_Unit...','Convert_Operating_Unit');
1699 		END IF;
1700 
1701 		/*
1702 		** Unconditionally reset the values of the global
1703 		** variables because the Convert_Time API's use
1704 		** these cached values to populate the table.
1705 		*/
1706 		G_GL_Calendar_ID:=NULL;
1707 		G_PA_Calendar_ID:=NULL;
1708 
1709 		DELETE PJI_PMV_ORG_DIM_TMP;
1710 
1711 		IF p_Operating_Unit_IDS IS NOT NULL THEN
1712 			IF p_PA_DEBUG_MODE = 'Y' THEN
1713 				Write2FWKLog('OU is Specified.');
1714 			END IF;
1715 			l_Dimension_List_Tab:=Decode_IDS(p_Operating_Unit_IDS);
1716 			IF l_Dimension_List_Tab.COUNT > 0 THEN
1717 				IF p_PA_DEBUG_MODE = 'Y' THEN
1718 					Write2FWKLog('Caching calendar information.');
1719 				END IF;
1720 				SELECT gl_calendar_id
1721 				, pa_calendar_id
1722 				INTO
1723 				G_GL_Calendar_ID
1724 				, G_PA_Calendar_ID
1725 				FROM PJI_ORG_EXTR_INFO
1726 				WHERE org_id = l_Dimension_List_Tab(1);
1727 			END IF;
1728 		ELSE
1729 			l_Dimension_List_Tab := NULL;
1730 		END IF;
1731 
1732 
1733 		IF l_Security_Profile_ID IS NOT NULL THEN
1734 			IF p_PA_DEBUG_MODE = 'Y' THEN
1735 				Write2FWKLog('Before checking if view_all_organizations_flag is set...');
1736 			END IF;
1737 			BEGIN
1738 				SELECT view_all_organizations_flag
1739 				INTO l_View_All_Org_Flag
1740 				FROM per_security_profiles
1741 				WHERE security_profile_id = l_Security_Profile_ID;
1742 				IF p_PA_DEBUG_MODE = 'Y' THEN
1743 					Write2FWKLog('view_all_organizations_flag is set...');
1744 				END IF;
1745 			EXCEPTION
1746 				WHEN NO_DATA_FOUND THEN
1747 				NULL;
1748 			END;
1749 			IF p_PA_DEBUG_MODE = 'Y' THEN
1750 				Write2FWKLog('After checking if view_all_organizations_flag is set...');
1751 			END IF;
1752 		END IF;
1753 
1754 		IF l_Dimension_List_Tab IS NULL THEN
1755 			IF p_PA_DEBUG_MODE = 'Y' THEN
1756 				Write2FWKLog('OU Array is empty.');
1757 			END IF;
1758 			IF l_View_All_Org_Flag = 'Y' THEN
1759 				IF p_PA_DEBUG_MODE = 'Y' THEN
1760 					Write2FWKLog('Before insert of operating units (w/o security)...');
1761 				END IF;
1762 				INSERT INTO PJI_PMV_ORG_DIM_TMP (ID, NAME)
1763 				SELECT paimp.org_id
1764 				, decode(p_View_By,'OU',org.name,'-1')
1765 				FROM pa_implementations_all paimp
1766 				, hr_all_organization_units_tl org
1767 				WHERE 1=1
1768 				AND org.language = USERENV('LANG')
1769 				AND paimp.org_id = org.organization_id;
1770 				IF p_PA_DEBUG_MODE = 'Y' THEN
1771 					Write2FWKLog('After insert of operating units (w/o security)...');
1772 				END IF;
1773 			ELSIF l_View_All_Org_Flag = 'N' THEN
1774 				IF p_PA_DEBUG_MODE = 'Y' THEN
1775 					Write2FWKLog('Before insert of operating units...');
1776 				END IF;
1777 				INSERT INTO PJI_PMV_ORG_DIM_TMP (ID, NAME)
1778 				SELECT paimp.org_id
1779 				, decode(p_View_By,'OU',org.name,'-1')
1780 				FROM pa_implementations_all paimp
1781 				, hr_all_organization_units_tl org
1782 				, per_organization_list sec
1783 				WHERE 1=1
1784 				AND org.language = USERENV('LANG')
1785 		            AND sec.organization_id= paimp.org_id
1786 		            AND sec.security_profile_id = l_Security_Profile_ID
1787 				AND paimp.org_id = org.organization_id;
1788 				IF p_PA_DEBUG_MODE = 'Y' THEN
1789 					Write2FWKLog('After insert of operating units...');
1790 				END IF;
1791 			END IF;
1792 		ELSIF l_Dimension_List_Tab IS NOT NULL THEN
1793 			IF p_PA_DEBUG_MODE = 'Y' THEN
1794 				Write2FWKLog('OU Array is not empty.');
1795 			END IF;
1796 			/*
1797 			** Following portion of the code is commented
1798 			** because of a bug in db (2596577).
1799 			*/
1800 			/*
1801 			FORALL i IN 1..l_Dimension_List_Tab.Last
1802 				INSERT INTO PJI_PMV_ORG_DIM_TMP (ID, NAME)
1803 				SELECT organization_id, DECODE(p_View_BY,'OU',name,'-1')
1804 				FROM hr_all_organization_units_tl
1805 				WHERE
1806 				organization_id=l_Dimension_List_Tab(i)
1807 				AND language = USERENV('LANG');
1808 			*/
1809 			FOR i IN 1..l_Dimension_List_Tab.Last LOOP
1810 				INSERT INTO PJI_PMV_ORG_DIM_TMP (ID, NAME)
1811 				SELECT organization_id, DECODE(p_View_BY,'OU',name,'-1')
1812 				FROM hr_all_organization_units_tl
1813 				WHERE
1814 				organization_id=l_Dimension_List_Tab(i)
1815 				AND language = USERENV('LANG');
1816 			END LOOP;
1817 		END IF;
1818 		IF p_PA_DEBUG_MODE = 'Y' THEN
1819 			Write2FWKLog('Exiting Convert_Operating_Unit...');
1820 		END IF;
1821 
1822 	EXCEPTION
1823 		WHEN OTHERS THEN
1824 			g_SQL_Error_Msg:=SQLERRM();
1825 			IF p_PA_DEBUG_MODE = 'Y' THEN
1826 				Write2FWKLog(g_SQL_Error_Msg, 3);
1827 			END IF;
1828 			RAISE;
1829 	END Convert_Operating_Unit;
1830 
1831 	/*
1832 	** ----------------------------------------------------------
1833 	** Procedure: Convert_Project
1834 	** The function inserts all the projects the user has selected
1835 	** as parameters in the pmv report to a session specific
1836 	** temporary table.
1837 	** ----------------------------------------------------------
1838 	*/
1839 
1840 	Procedure Convert_Project(p_Project_IDS VARCHAR2 DEFAULT NULL
1841 						, p_View_BY VARCHAR2)
1842 	AS
1843 	l_Dimension_List_Tab 	SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1844 	BEGIN
1845 		IF p_PA_DEBUG_MODE = 'Y' THEN
1846 			Write2FWKLog('Entering Convert_Project...','Convert_Project');
1847 		END IF;
1848 
1849 		DELETE PJI_PMV_PRJ_DIM_TMP;
1850 
1851 		IF p_Project_IDS IS NOT NULL THEN
1852 			l_Dimension_List_Tab:=Decode_IDS(p_Project_IDS);
1853 		ELSE
1854 			l_Dimension_List_Tab := NULL;
1855 		END IF;
1856 
1857 		/*
1858 		** Commented the below portion of code till
1859 		** decision has been made to support the
1860 		** projects in the context of class category
1861 		** and class codes.
1862 		*/
1863 		/*
1864 		IF l_Dimension_List_Tab IS NULL THEN
1865 			IF p_PA_DEBUG_MODE = 'Y' THEN
1866 				Write2FWKLog('Creating ALL PJs, PJ array is empty');
1867 			END IF;
1868 			INSERT INTO PJI_PMV_PRJ_DIM_TMP (ID, NAME)
1869 			SELECT ID, DECODE(p_View_BY,'PJ',VALUE,'-1')
1870 			FROM PJI_PROJECTS_V;
1871 		*/
1872 		IF l_Dimension_List_Tab IS NOT NULL THEN
1873 			IF p_PA_DEBUG_MODE = 'Y' THEN
1874 				Write2FWKLog('Creating Selected PJs, PJ array is not empty');
1875 			END IF;
1876 			/*
1877 			** Following portion of the code is commented
1878 			** because of a bug in db (2596577).
1879 			*/
1880 			/*
1881 			FORALL i IN 1..l_Dimension_List_Tab.Last
1882 				INSERT INTO PJI_PMV_PRJ_DIM_TMP (ID, NAME)
1883 				SELECT ID, DECODE(p_View_BY,'OU',VALUE,'-1')
1884 				FROM PJI_PROJECTS_V
1885 				WHERE
1886 				ID=l_Dimension_List_Tab(i);
1887 			*/
1888 			FOR i IN 1..l_Dimension_List_Tab.Last LOOP
1889 				INSERT INTO PJI_PMV_PRJ_DIM_TMP (ID, NAME)
1890 				SELECT ID, DECODE(p_View_BY,'OU',VALUE,'-1')
1891 				FROM PJI_PROJECTS_V
1892 				WHERE
1893 				ID=l_Dimension_List_Tab(i);
1894 			END LOOP;
1895 		END IF;
1896 		IF p_PA_DEBUG_MODE = 'Y' THEN
1897 			Write2FWKLog('Exiting Convert_Project...');
1898 		END IF;
1899 	EXCEPTION
1900 		WHEN OTHERS THEN
1901 			g_SQL_Error_Msg:=SQLERRM();
1902 			IF p_PA_DEBUG_MODE = 'Y' THEN
1903 				Write2FWKLog(g_SQL_Error_Msg, 3);
1904 			END IF;
1905 			RAISE;
1906 	END Convert_Project;
1907 
1908 	/*
1909 	** Conversion TIME API's Section.
1910 	** =========================
1911 	** The time API's .. to write the comments here
1912 	*/
1913 
1914 	/*
1915 	** Convert_Time API's for Non View BY TIME
1916 	*/
1917 
1918 	/*
1919 	** ----------------------------------------------------------
1920 	** Procedure: Convert_NViewBY_AS_OF_DATE
1921 	** The procedure creates time records based on an as of date
1922 	** when the view by dimension is not time. The API caters
1923 	** to additional logic based on following parameters:
1924 	** Full Period Flag: If the flag is passed as 'Y', the API
1925 	** creates additional time records for accomodating full
1926 	** period amounts for reporting budget data.
1927 	** Parse Prior: If the flag is passed as 'Y', the API stamps
1928 	** prior_id in the time tables.
1929 	** Calendar ID: Specifies the calendar id for fiscal time
1930 	** periods.
1931 	** Default Period Name: User defined constants to be inserted
1932 	** into name column of the time temporary table.
1933 	** Default Period ID: User defined constants to be inserted
1934 	** into order_by_id column of the time temporary table.
1935 	** ----------------------------------------------------------
1936 	*/
1937 
1938 	Procedure Convert_NViewBY_AS_OF_DATE(p_As_Of_Date	NUMBER
1939 							, p_Period_Type	VARCHAR2
1940 							, p_Parse_Prior	VARCHAR2 DEFAULT NULL
1941 							, p_Full_Period_Flag	VARCHAR2 DEFAULT NULL
1942 							, p_Calendar_ID         NUMBER   DEFAULT NULL
1943 							, p_Default_Period_Name VARCHAR2 DEFAULT NULL
1944 							, p_Default_Period_ID   NUMBER   DEFAULT NULL)
1945 	IS
1946 	l_Period_Id			NUMBER;
1947 	l_Week_ID			NUMBER;
1948 	l_Qtr_Id			NUMBER;
1949 	l_Year_Id			NUMBER;
1950 	l_Prior_Period_Id		NUMBER;
1951 
1952 	l_Default_Period_Name   VARCHAR2(30);
1953 	l_Default_Period_ID     NUMBER;
1954 
1955 	l_As_Of_Date		DATE:=TO_DATE(p_As_Of_Date,'j');
1956 	l_Prior_As_Of_Date	DATE;
1957 
1958 	l_Period_Type		VARCHAR2(150):=p_Period_Type;
1959 	l_Level			NUMBER;
1960 	l_IS_GL_Flag		VARCHAR2(1);
1961 
1962 	l_Calendar_Id		NUMBER;
1963 	l_Calendar_Type_Sum	VARCHAR2(1);
1964 	l_Week_Start_Date		DATE;
1965 	BEGIN
1966 		IF p_PA_DEBUG_MODE = 'Y' THEN
1967 			Write2FWKLog('Entering Convert_NViewBY_AS_OF_DATE...','Convert_NViewBY_AS_OF_DATE');
1968 		END IF;
1969 
1970 		IF p_Parse_Prior IS NOT NULL THEN
1971 		BEGIN
1972 			IF p_PA_DEBUG_MODE = 'Y' THEN
1973 				Write2FWKLog('Determining Prior Year...');
1974 			END IF;
1975 			-- Note: Please confirm this change with dima.
1976 			l_Prior_As_Of_Date:=TO_DATE(Convert_AS_OF_DATE(p_As_Of_Date, p_Period_Type, 'YEARLY'),'j');
1977 		EXCEPTION
1978 			WHEN NO_DATA_FOUND THEN
1979 			IF p_PA_DEBUG_MODE = 'Y' THEN
1980 				Write2FWKLog('Unable to determine Prior Year, hence defaulting it...');
1981 			END IF;
1982 		END;
1983 		END IF;
1984 
1985 		IF p_PA_DEBUG_MODE = 'Y' THEN
1986 			Write2FWKLog('Done with computing Prior Year...');
1987 		END IF;
1988 
1989 		IF p_Default_Period_Name IS NOT NULL THEN
1990 			l_Default_Period_Name:=p_Default_Period_Name;
1991 		ELSE
1992 			l_Default_Period_Name:='-1';
1993 		END IF;
1994 
1995 		IF p_Default_Period_ID IS NOT NULL THEN
1996 			l_Default_Period_ID:=p_Default_Period_ID;
1997 		ELSE
1998 			l_Default_Period_ID:=-1;
1999 		END IF;
2000 
2001 		IF l_Period_Type LIKE '%PA%' THEN
2002 			IF p_Calendar_Id IS NULL THEN
2003 				l_Calendar_Id:=G_PA_Calendar_ID;
2004 			ELSE
2005 				l_Calendar_Id:=p_Calendar_ID;
2006 			END IF;
2007 			l_IS_GL_Flag:='Y';
2008 			l_Calendar_Type_Sum:='P';
2009 			IF p_PA_DEBUG_MODE = 'Y' THEN
2010 				Write2FWKLog('PA calender is selected.');
2011 			END IF;
2012 		ELSIF p_Period_Type LIKE '%CAL%' THEN
2013 			IF p_Calendar_Id IS NULL THEN
2014 				l_Calendar_Id:=G_GL_Calendar_ID;
2015 			ELSE
2016 				l_Calendar_Id:=p_Calendar_ID;
2017 			END IF;
2018 			l_IS_GL_Flag:='Y';
2019 			l_Calendar_Type_Sum:='G';
2020 			IF p_PA_DEBUG_MODE = 'Y' THEN
2021 				Write2FWKLog('GL calender is selected.');
2022 			END IF;
2023 		ELSE
2024 			l_Calendar_Id:=-1;
2025 			l_Calendar_Type_Sum:='E';
2026 			IF p_PA_DEBUG_MODE = 'Y' THEN
2027 				Write2FWKLog('Ent calender is selected.');
2028 			END IF;
2029 		END IF;
2030 
2031 		IF p_Full_Period_Flag IS NOT NULL OR l_Period_Type = 'PJI_TIME_PA_PERIOD' THEN
2032 			IF l_IS_GL_Flag IS NULL THEN
2033 				IF p_PA_DEBUG_MODE = 'Y' THEN
2034 					Write2FWKLog('Selecting from FII_TIME_DAY.');
2035 				END IF;
2036 				SELECT
2037 				ent_period_id, week_id, week_start_date, ent_qtr_id, ent_year_id
2038 				INTO
2039 				l_Period_Id, l_Week_Id, l_Week_Start_Date, l_Qtr_Id, l_Year_Id
2040 				FROM fii_time_day
2041 				WHERE
2042 				report_date = l_As_Of_Date;
2043 			ELSE
2044 				IF p_PA_DEBUG_MODE = 'Y' THEN
2045 					Write2FWKLog('Selecting from FII_TIME_CAL_DAY_MV.');
2046 				END IF;
2047 				SELECT
2048 				cal_period_id, cal_qtr_id, cal_year_id
2049 				INTO
2050 				l_Period_Id, l_Qtr_Id, l_Year_Id
2051 				FROM fii_time_cal_day_mv
2052 				WHERE
2053 				report_date = l_As_Of_Date
2054 				AND calendar_id = l_Calendar_Id;
2055 			END IF;
2056 		END IF;
2057 
2058 		IF p_Period_Type = 'PJI_TIME_PA_PERIOD' AND p_Parse_Prior = 'Y' AND l_Prior_As_Of_Date IS NOT NULL THEN
2059 			IF p_PA_DEBUG_MODE = 'Y' THEN
2060 				Write2FWKLog('Selecting Prior Period ID from FII_TIME_CAL_DAY_MV for PA Period Type.');
2061 			END IF;
2062 
2063 			SELECT cal_period_id
2064 			INTO l_Prior_Period_Id
2065 			FROM fii_time_cal_day_mv
2066 			WHERE 1 = 1
2067 			AND report_date = l_Prior_As_Of_Date
2068 			AND calendar_id = l_Calendar_Id;
2069 
2070 			IF p_PA_DEBUG_MODE = 'Y' THEN
2071 				Write2FWKLog('Done selecting Prior Period ID from FII_TIME_CAL_DAY_MV for PA Period Type.');
2072 			END IF;
2073 		END IF;
2074 
2075 		CASE p_Period_Type
2076 			WHEN	'ITD' THEN l_Level:=1143;
2077 			WHEN	'FII_TIME_ENT_YEAR' THEN l_Level:=119;
2078 			WHEN	'FII_TIME_CAL_YEAR' THEN l_Level:=119;
2079 			WHEN	'FII_TIME_ENT_QTR' THEN l_Level:=55;
2080 			WHEN	'FII_TIME_CAL_QTR' THEN l_Level:=55;
2081 			WHEN	'FII_TIME_ENT_PERIOD' THEN l_Level:=23;
2082 			WHEN	'FII_TIME_CAL_PERIOD' THEN l_Level:=23;
2083 			WHEN	'PJI_TIME_PA_PERIOD' THEN l_Level:=23;
2084 			WHEN	'FII_TIME_WEEK' THEN l_Level:=11;
2085 			WHEN	'FII_ROLLING_WEEK' THEN l_Level:=0;
2086 			ELSE	NULL;
2087 		END CASE;
2088 
2089 		IF p_Period_Type <> 'PJI_TIME_PA_PERIOD' THEN
2090 			IF p_PA_DEBUG_MODE = 'Y' THEN
2091 				Write2FWKLog('Generating records for period types other than PA Period.');
2092 			END IF;
2093 
2094 			IF l_IS_GL_Flag IS NOT NULL THEN
2095 				INSERT INTO PJI_PMV_TIME_DIM_TMP
2096 				(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2097 				SELECT time_id, l_Default_Period_Name, l_Default_Period_ID, period_type_id, 1 , calendar_type
2098 				FROM fii_time_cal_rpt_struct
2099 				WHERE report_date = l_As_Of_Date
2100 				AND bitand(record_type_id,l_Level) = record_type_id
2101 				AND calendar_id = l_Calendar_Id;
2102 			ELSE
2103 				INSERT INTO PJI_PMV_TIME_DIM_TMP
2104 				(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2105 				SELECT time_id, l_Default_Period_Name, l_Default_Period_ID, period_type_id, 1 , calendar_type
2106 				FROM fii_time_rpt_struct
2107 				WHERE report_date = l_As_Of_Date
2108 				AND bitand(record_type_id,l_Level) = record_type_id
2109 				AND calendar_id = l_Calendar_Id;
2110 			END IF;
2111 
2112 			IF p_Parse_Prior IS NOT NULL  AND l_Prior_As_Of_Date IS NOT NULL THEN
2113 				IF p_PA_DEBUG_MODE = 'Y' THEN
2114 					Write2FWKLog('Generating prior id records for period types other than PA Period.');
2115 				END IF;
2116 				IF l_IS_GL_Flag IS NOT NULL THEN
2117 					INSERT INTO PJI_PMV_TIME_DIM_TMP
2118 					(PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2119 					SELECT time_id, l_Default_Period_Name, l_Default_Period_ID, period_type_id, 1, calendar_type
2120 					FROM fii_time_cal_rpt_struct
2121 					WHERE report_date = l_Prior_As_Of_Date
2122 					AND bitand(record_type_id,l_Level) = record_type_id
2123 					AND calendar_id = l_Calendar_Id;
2124 				ELSE
2125 					INSERT INTO PJI_PMV_TIME_DIM_TMP
2126 					(PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2127 					SELECT time_id, l_Default_Period_Name, l_Default_Period_ID, period_type_id, 1, calendar_type
2128 					FROM fii_time_rpt_struct
2129 					WHERE report_date = l_Prior_As_Of_Date
2130 					AND bitand(record_type_id,l_Level) = record_type_id
2131 					AND calendar_id = l_Calendar_Id;
2132 				END IF;
2133 			END IF;
2134 			IF p_PA_DEBUG_MODE = 'Y' THEN
2135 				Write2FWKLog('Done generating records for period types other than PA Period.');
2136 			END IF;
2137 		ELSE
2138 			IF p_PA_DEBUG_MODE = 'Y' THEN
2139 				Write2FWKLog('Generating records for PA Period period type.');
2140 			END IF;
2141 
2142 			INSERT INTO PJI_PMV_TIME_DIM_TMP
2143 			(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2144 			SELECT report_date_julian
2145 			, l_Default_Period_Name, l_Default_Period_ID, 1, 1, 'P' FROM fii_time_cal_day_mv
2146 			WHERE cal_period_id = l_Period_Id
2147 			AND calendar_id = l_Calendar_Id
2148 			AND report_date<=l_As_Of_Date;
2149 
2150 			IF p_Parse_Prior IS NOT NULL  AND l_Prior_As_Of_Date IS NOT NULL THEN
2151 
2152 				IF p_PA_DEBUG_MODE = 'Y' THEN
2153 					Write2FWKLog('Generating prior id records for PA Period period type.');
2154 				END IF;
2155 
2156 				INSERT INTO PJI_PMV_TIME_DIM_TMP
2157 				(PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2158 				SELECT report_date_julian
2159 				,l_Default_Period_Name, l_Default_Period_ID, 1, 1, 'P' FROM fii_time_cal_day_mv
2160 				WHERE cal_period_id = l_Prior_Period_Id
2161 				AND calendar_id = l_Calendar_Id
2162 				AND report_date<=l_Prior_As_Of_Date;
2163 
2164 			END IF;
2165 
2166 			IF p_PA_DEBUG_MODE = 'Y' THEN
2167 				Write2FWKLog('Done generating records for PA Period period type.');
2168 			END IF;
2169 		END IF;
2170 		IF p_Full_Period_Flag IS NOT NULL THEN
2171 			IF p_PA_DEBUG_MODE = 'Y' THEN
2172 				Write2FWKLog('Full Period Flag is set.');
2173 			END IF;
2174 			IF l_Level <> 0 THEN
2175 				CASE l_Level
2176 				WHEN 119 THEN
2177 					INSERT INTO PJI_PMV_TIME_DIM_TMP
2178 					(ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2179 					VALUES (l_Year_ID, l_Default_Period_Name, l_Default_Period_ID, 2, 128, l_Calendar_Type_Sum);
2180 				WHEN 55 THEN
2181 					INSERT INTO PJI_PMV_TIME_DIM_TMP
2182 					(ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2183 					VALUES (l_Qtr_ID, l_Default_Period_Name, l_Default_Period_ID, 2, 64, l_Calendar_Type_Sum);
2184 				WHEN 23 THEN
2185 					INSERT INTO PJI_PMV_TIME_DIM_TMP
2186 					(ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2187 					VALUES (l_Period_ID, l_Default_Period_Name, l_Default_Period_ID, 2, 32, l_Calendar_Type_Sum);
2188 				WHEN 11 THEN
2189 					INSERT INTO PJI_PMV_TIME_DIM_TMP
2190 					(ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2191 					VALUES (l_Week_ID,l_Default_Period_Name, l_Default_Period_ID, 2, 16, 'E');
2192 				END CASE;
2193 
2194 				IF p_Parse_Prior IS NOT NULL  AND l_Prior_As_Of_Date IS NOT NULL THEN
2195 					CASE l_Level
2196 					WHEN 119 THEN
2197 						INSERT INTO PJI_PMV_TIME_DIM_TMP
2198 						(PRIOR_ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2199 						VALUES (
2200 						SUBSTR(LPAD(l_Year_ID,7,'0'),1,3)
2201 						||TO_CHAR(SUBSTR(LPAD(l_Year_ID,7,'0'),4,4)-1)
2202 						, l_Default_Period_Name, l_Default_Period_ID, 2, 128, l_Calendar_Type_Sum);
2203 					WHEN 55 THEN
2204 						INSERT INTO PJI_PMV_TIME_DIM_TMP
2205 						(PRIOR_ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2206 						VALUES (
2207 						SUBSTR(LPAD(l_Qtr_ID,8,'0'),1,3)
2208 						||TO_CHAR(SUBSTR(LPAD(l_Qtr_ID,8,'0'),4,4)-1)
2209 						||SUBSTR(LPAD(l_Qtr_ID,8,'0'),8)
2210 						, l_Default_Period_Name, l_Default_Period_ID, 2, 64, l_Calendar_Type_Sum);
2211 					WHEN 23 THEN
2212 						INSERT INTO PJI_PMV_TIME_DIM_TMP
2213 						(PRIOR_ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2214 						VALUES (
2215 						SUBSTR(LPAD(l_Period_ID,10,'0'),1,3)
2216 						||TO_CHAR(SUBSTR(LPAD(l_Period_ID,10,'0'),4,4)-1)
2217 						||SUBSTR(LPAD(l_Period_ID,10,'0'),8)
2218 						, l_Default_Period_Name, l_Default_Period_ID, 2, 32, l_Calendar_Type_Sum);
2219 					WHEN 11 THEN
2220 						INSERT INTO PJI_PMV_TIME_DIM_TMP
2221 						(PRIOR_ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2222 						VALUES (
2223 						SUBSTR(LPAD(l_Week_ID,11,'0'),1,3)
2224 						||TO_CHAR(SUBSTR(LPAD(l_Week_ID,11,'0'),4,4)-1)
2225 						||SUBSTR(LPAD(l_Week_ID,11,'0'),8)
2226 						, l_Default_Period_Name, l_Default_Period_ID, 2, 16, 'E');
2227 					END CASE;
2228 				END IF;
2229 			END IF;
2230 			IF p_PA_DEBUG_MODE = 'Y' THEN
2231 				Write2FWKLog('Full Period entries created.');
2232 			ENd IF;
2233 			IF p_Period_Type = 'FII_ROLLING_WEEK' AND l_Level= 0 THEN
2234 				IF G_No_Rolling_Weeks IS NULL THEN
2235 					BEGIN
2236 						SELECT rolling_weeks
2237 						INTO G_No_Rolling_Weeks
2238 						FROM pji_system_settings;
2239 					EXCEPTION
2240 						WHEN NO_DATA_FOUND THEN
2241 							G_No_Rolling_Weeks:=5;
2242 					END;
2243 				END IF;
2244 				l_Level:=11;
2245 				INSERT INTO PJI_PMV_TIME_DIM_TMP
2246 				(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2247 				SELECT time_id, l_Default_Period_Name, l_Default_Period_ID, period_type_id, 1 , calendar_type
2248 				FROM fii_time_rpt_struct
2249 				WHERE report_date = l_As_Of_Date
2250 				AND bitand(record_type_id,l_Level) = record_type_id
2251 				AND calendar_id = l_Calendar_Id;
2252 
2253 				IF p_Full_Period_Flag IS NOT NULL THEN
2254 					INSERT INTO PJI_PMV_TIME_DIM_TMP
2255 					(ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2256 					SELECT week_id, l_Default_Period_Name, l_Default_Period_ID, 2, 16, 'E' FROM fii_time_week WHERE
2257 					week_id >= l_Week_ID
2258 					AND end_date <= (l_Week_Start_Date)+(G_No_Rolling_Weeks*7);
2259 				END IF;
2260 			END IF;
2261 		END IF;
2262 
2263 		IF p_PA_DEBUG_MODE = 'Y' THEN
2264 			Write2FWKLog('Exiting Convert_NViewBY_AS_OF_DATE...');
2265 		END IF;
2266 	EXCEPTION
2267 		WHEN NO_DATA_FOUND THEN
2268 			NULL;
2269 		WHEN OTHERS THEN
2270 			g_SQL_Error_Msg:=SQLERRM();
2271 			Write2FWKLog(g_SQL_Error_Msg, 3);
2272 			RAISE;
2273 	END Convert_NViewBY_AS_OF_DATE;
2274 
2275 	/*
2276 	** ----------------------------------------------------------
2277 	** Procedure: Convert_NFViewBY_AS_OF_DATE
2278 	** The procedure creates time records based on an as of date
2279 	** when the view by dimension is not time. The API caters
2280 	** to additional logic based on following parameters:
2281 	** Full Period Flag: If the flag is passed as 'Y', the API
2282 	** creates additional time records for accomodating full
2283 	** period amounts for reporting budget data.
2284 	** Parse Prior: If the flag is passed as 'Y', the API stamps
2285 	** prior_id in the time tables.
2286 	** Calendar ID: Specifies the calendar id for fiscal time
2287 	** periods.
2288 	** Default Period Name: User defined constants to be inserted
2289 	** into name column of the time temporary table.
2290 	** Default Period ID: User defined constants to be inserted
2291 	** into order_by_id column of the time temporary table.
2292 	** ----------------------------------------------------------
2293 	*/
2294 
2295 	Procedure Convert_NFViewBY_AS_OF_DATE(p_As_Of_Date	NUMBER
2296 							, p_Period_Type	VARCHAR2
2297 							, p_Parse_Prior	VARCHAR2 DEFAULT NULL
2298 							, p_Full_Period_Flag	VARCHAR2 DEFAULT NULL
2299 							, p_Calendar_ID         NUMBER   DEFAULT NULL
2300 							, p_Default_Period_Name	VARCHAR2 DEFAULT NULL
2301 							, p_Default_Period_ID	NUMBER   DEFAULT NULL)
2302 	IS
2303 	l_Period_Id			NUMBER;
2304 	l_Week_ID			NUMBER;
2305 	l_Qtr_Id			NUMBER;
2306 	l_Year_Id			NUMBER;
2307 	l_Prior_Period_Id		NUMBER;
2308 
2309 	l_Period_Start_Date	DATE;
2310 	l_Qtr_Start_Date		DATE;
2311 	l_Year_Start_Date		DATE;
2312 
2313 	l_Period_End_Date		DATE;
2314 	l_Qtr_End_Date		DATE;
2315 	l_Year_End_Date		DATE;
2316 
2317 	l_Prior_Period_Start_Date	DATE;
2318 	l_Prior_Qtr_Start_Date		DATE;
2319 	l_Prior_Year_Start_Date		DATE;
2320 
2321 	l_Prior_Period_End_Date		DATE;
2322 	l_Prior_Qtr_End_Date		DATE;
2323 	l_Prior_Year_End_Date		DATE;
2324 
2325 	l_Default_Period_Name	VARCHAR2(30);
2326 	l_Default_Period_ID	NUMBER;
2327 
2328 
2329 	l_As_Of_Date		DATE:=TO_DATE(p_As_Of_Date,'j');
2330 	l_Prior_As_Of_Date	DATE;
2331 
2332 	l_Period_Type		VARCHAR2(150):=p_Period_Type;
2333 	l_Level			NUMBER;
2334 	l_IS_GL_Flag		VARCHAR2(1);
2335 
2336 	l_Calendar_Id		NUMBER;
2337 	l_Calendar_Type_Sum	VARCHAR2(1);
2338 	l_Calendar_Type_Day	VARCHAR2(1);
2339 	l_Week_Start_Date		DATE;
2340 	BEGIN
2341 		IF p_PA_DEBUG_MODE = 'Y' THEN
2342 			Write2FWKLog('Entering Convert_NViewBY_AS_OF_DATE...','Convert_NViewBY_AS_OF_DATE');
2343 		END IF;
2344 
2345 		IF p_Parse_Prior IS NOT NULL THEN
2346 		BEGIN
2347 			IF p_PA_DEBUG_MODE = 'Y' THEN
2348 				Write2FWKLog('Determining Prior Year...');
2349 			END IF;
2350 			-- Note: Please confirm this change with dima.
2351 			l_Prior_As_Of_Date:=TO_DATE(Convert_AS_OF_DATE(p_As_Of_Date, p_Period_Type, 'YEARLY'),'j');
2352 		EXCEPTION
2353 			WHEN NO_DATA_FOUND THEN
2354 			IF p_PA_DEBUG_MODE = 'Y' THEN
2355 				Write2FWKLog('Unable to determine Prior Year, hence defaulting it...');
2356 			END IF;
2357 		END;
2358 		END IF;
2359 
2360 		IF p_PA_DEBUG_MODE = 'Y' THEN
2361 			Write2FWKLog('Done with computing Prior Year...');
2362 		END IF;
2363 
2364 		IF p_Default_Period_Name IS NOT NULL THEN
2365 			l_Default_Period_Name:=p_Default_Period_Name;
2366 		ELSE
2367 			l_Default_Period_Name:='-1';
2368 		END IF;
2369 
2370 		IF p_Default_Period_ID IS NOT NULL THEN
2371 			l_Default_Period_ID:=p_Default_Period_ID;
2372 		ELSE
2373 			l_Default_Period_ID:=-1;
2374 		END IF;
2375 
2376 		IF l_Period_Type LIKE '%PA%' THEN
2377 			IF p_Calendar_Id IS NULL THEN
2378 				l_Calendar_Id:=G_PA_Calendar_ID;
2379 			ELSE
2380 				l_Calendar_Id:=p_Calendar_ID;
2381 			END IF;
2382 			l_IS_GL_Flag:='Y';
2383 			l_Calendar_Type_Sum:='P';
2384 			l_Calendar_Type_Day:='P';
2385 			IF p_PA_DEBUG_MODE = 'Y' THEN
2386 				Write2FWKLog('PA calender is selected.');
2387 			END IF;
2388 		ELSIF p_Period_Type LIKE '%CAL%' THEN
2389 			IF p_Calendar_Id IS NULL THEN
2390 				l_Calendar_Id:=G_GL_Calendar_ID;
2391 			ELSE
2392 				l_Calendar_Id:=p_Calendar_ID;
2393 			END IF;
2394 			l_IS_GL_Flag:='Y';
2395 			l_Calendar_Type_Sum:='G';
2396 			l_Calendar_Type_Day:='C';
2397 			IF p_PA_DEBUG_MODE = 'Y' THEN
2398 				Write2FWKLog('GL calender is selected.');
2399 			END IF;
2400 		ELSE
2401 			l_Calendar_Id:=-1;
2402 			l_Calendar_Type_Sum:='E';
2403 			l_Calendar_Type_Day:='C';
2404 			IF p_PA_DEBUG_MODE = 'Y' THEN
2405 				Write2FWKLog('Ent calender is selected.');
2406 			END IF;
2407 		END IF;
2408 
2409 		IF l_IS_GL_Flag IS NULL THEN
2410 			IF p_PA_DEBUG_MODE = 'Y' THEN
2411 				Write2FWKLog('Selecting from FII_TIME_DAY.');
2412 			END IF;
2413 
2414 			SELECT period.start_date period_start_date
2415 			,qtr.start_date qtr_start_date
2416 			,year.start_date year_start_date
2417 			,period.end_date period_end_date
2418 			,qtr.end_date qtr_end_date
2419 			,year.end_date year_end_date
2420 			,day.ent_period_id period_id
2421 			,day.week_id week_id
2422 			,day.ent_qtr_id qtr_id
2423 			,day.ent_year_id year_id
2424 			INTO
2425 			 l_Period_Start_Date
2426 			,l_Qtr_Start_Date
2427 			,l_Year_Start_Date
2428 			,l_Period_End_Date
2429 			,l_Qtr_End_Date
2430 			,l_Year_End_Date
2431 			,l_Period_Id
2432 			,l_Week_ID
2433 			,l_Qtr_Id
2434 			,l_Year_Id
2435 			FROM fii_time_day day
2436 			, fii_time_ent_period period
2437 			, fii_time_ent_qtr qtr
2438 			, fii_time_ent_year year
2439 			WHERE 1=1
2440 			AND day.report_date = l_As_Of_Date
2441 			AND period.ent_period_id = day.ent_period_id
2442 			AND qtr.ent_qtr_id = day.ent_qtr_id
2443 			AND year.ent_year_id = day.ent_year_id;
2444 		ELSE
2445 			IF p_PA_DEBUG_MODE = 'Y' THEN
2446 				Write2FWKLog('Selecting from FII_TIME_CAL_DAY_MV.');
2447 			END IF;
2448 			SELECT period.start_date period_start_date
2449 			,qtr.start_date qtr_start_date
2450 			,year.start_date year_start_date
2451 			,period.end_date period_end_date
2452 			,qtr.end_date qtr_end_date
2453 			,year.end_date year_end_date
2454 			,day.cal_period_id period_id
2455 			,day.cal_qtr_id qtr_id
2456 			,day.cal_year_id year_id
2457 			INTO
2458 			 l_Period_Start_Date
2459 			,l_Qtr_Start_Date
2460 			,l_Year_Start_Date
2461 			,l_Period_End_Date
2462 			,l_Qtr_End_Date
2463 			,l_Year_End_Date
2464 			,l_Period_Id
2465 			,l_Qtr_Id
2466 			,l_Year_Id
2467 			FROM fii_time_cal_day_mv day
2468 			, fii_time_cal_period period
2469 			, fii_time_cal_qtr qtr
2470 			, fii_time_cal_year year
2471 			WHERE 1=1
2472 			AND day.report_date = l_As_Of_Date
2473 			AND period.cal_period_id = day.cal_period_id
2474 			AND qtr.cal_qtr_id = day.cal_qtr_id
2475 			AND year.cal_year_id = day.cal_year_id
2476 			AND day.calendar_id = l_Calendar_Id;
2477 		END IF;
2478 
2479 		IF p_Parse_Prior = 'Y' THEN
2480 			IF l_IS_GL_Flag IS NULL THEN
2481 				IF p_PA_DEBUG_MODE = 'Y' THEN
2482 					Write2FWKLog('Selecting from FII_TIME_DAY.');
2483 				END IF;
2484 
2485 				SELECT period.start_date period_start_date
2486 				,qtr.start_date qtr_start_date
2487 				,year.start_date year_start_date
2488 				,period.end_date period_end_date
2489 				,qtr.end_date qtr_end_date
2490 				,year.end_date year_end_date
2491 				INTO
2492 				 l_Prior_Period_Start_Date
2493 				,l_Prior_Qtr_Start_Date
2494 				,l_Prior_Year_Start_Date
2495 				,l_Prior_Period_End_Date
2496 				,l_Prior_Qtr_End_Date
2497 				,l_Prior_Year_End_Date
2498 				FROM fii_time_day day
2499 				, fii_time_ent_period period
2500 				, fii_time_ent_qtr qtr
2501 				, fii_time_ent_year year
2502 				WHERE 1=1
2503 				AND day.report_date = l_Prior_As_Of_Date
2504 				AND period.ent_period_id = day.ent_period_id
2505 				AND qtr.ent_qtr_id = day.ent_qtr_id
2506 				AND year.ent_year_id = day.ent_year_id;
2507 			ELSE
2508 				IF p_PA_DEBUG_MODE = 'Y' THEN
2509 					Write2FWKLog('Selecting from FII_TIME_CAL_DAY_MV.');
2510 				END IF;
2511 				SELECT period.start_date period_start_date
2512 				,qtr.start_date qtr_start_date
2513 				,year.start_date year_start_date
2514 				,period.end_date period_end_date
2515 				,qtr.end_date qtr_end_date
2516 				,year.end_date year_end_date
2517 				INTO
2518 				 l_Prior_Period_Start_Date
2519 				,l_Prior_Qtr_Start_Date
2520 				,l_Prior_Year_Start_Date
2521 				,l_Prior_Period_End_Date
2522 				,l_Prior_Qtr_End_Date
2523 				,l_Prior_Year_End_Date
2524 				FROM fii_time_cal_day_mv day
2525 				, fii_time_cal_period period
2526 				, fii_time_cal_qtr qtr
2527 				, fii_time_cal_year year
2528 				WHERE 1=1
2529 				AND day.report_date = l_Prior_As_Of_Date
2530 				AND period.cal_period_id = day.cal_period_id
2531 				AND qtr.cal_qtr_id = day.cal_qtr_id
2532 				AND year.cal_year_id = day.cal_year_id
2533 				AND day.calendar_id = l_Calendar_Id;
2534 			END IF;
2535 		END IF;
2536 
2537 		CASE p_Period_Type
2538 			WHEN	'ITD' THEN l_Level:=1143;
2539 			WHEN	'FII_TIME_ENT_YEAR' THEN l_Level:=119;
2540 			WHEN	'FII_TIME_CAL_YEAR' THEN l_Level:=119;
2541 			WHEN	'FII_TIME_ENT_QTR' THEN l_Level:=55;
2542 			WHEN	'FII_TIME_CAL_QTR' THEN l_Level:=55;
2543 			WHEN	'FII_TIME_ENT_PERIOD' THEN l_Level:=23;
2544 			WHEN	'FII_TIME_CAL_PERIOD' THEN l_Level:=23;
2545 			WHEN	'PJI_TIME_PA_PERIOD' THEN l_Level:=23;
2546 			WHEN	'FII_TIME_WEEK' THEN l_Level:=11;
2547 			ELSE	NULL;
2548 		END CASE;
2549 
2550 		IF p_PA_DEBUG_MODE = 'Y' THEN
2551 			Write2FWKLog('Generating records for period types other than PA Period.');
2552 		END IF;
2553 
2554 		IF l_IS_GL_Flag IS NOT NULL THEN
2555 			IF (l_period_start_date <> l_as_of_date OR p_Period_Type LIKE '%PERIOD%') AND l_Level >= 11 THEN
2556 				INSERT INTO PJI_PMV_TIME_DIM_TMP
2557 				(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2558 				SELECT report_date_julian, l_Default_Period_Name, l_Default_Period_ID, 1, 0, l_Calendar_Type_Day
2559 				FROM fii_time_cal_day_mv
2560 				WHERE
2561 				report_date>=l_As_Of_Date
2562 				AND calendar_id = l_calendar_id
2563 				AND report_date<=l_period_end_date;
2564 			END IF;
2565 
2566 			IF (l_qtr_start_date <> l_as_of_date OR p_Period_Type LIKE '%QTR%') AND l_Level >= 55 THEN
2567 				INSERT INTO PJI_PMV_TIME_DIM_TMP
2568 				(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2569 				SELECT cal_period_id, l_Default_Period_Name, l_Default_Period_ID, 32, 0, l_Calendar_Type_Sum
2570 				FROM fii_time_cal_period
2571 				WHERE
2572 				start_date>=l_As_Of_Date
2573 				AND calendar_id = l_calendar_id
2574 				AND end_date<=l_qtr_end_date;
2575 			END IF;
2576 
2577 			IF (l_year_start_date <> l_as_of_date OR p_Period_Type LIKE '%YEAR%') AND l_Level >= 119 THEN
2578 				INSERT INTO PJI_PMV_TIME_DIM_TMP
2579 				(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2580 				SELECT cal_qtr_id, l_Default_Period_Name, l_Default_Period_ID, 64, 0, l_Calendar_Type_Sum
2581 				FROM fii_time_cal_qtr
2582 				WHERE
2583 				start_date>=l_As_Of_Date
2584 				AND calendar_id = l_calendar_id
2585 				AND end_date<=l_year_end_date;
2586 			END IF;
2587 			IF p_Parse_Prior IS NOT NULL  AND l_Prior_As_Of_Date IS NOT NULL THEN
2588 				IF p_PA_DEBUG_MODE = 'Y' THEN
2589 					Write2FWKLog('Generating prior id records for fiscal period types.');
2590 				END IF;
2591 				IF (l_prior_period_start_date <> l_prior_as_of_date OR p_Period_Type LIKE '%PERIOD%') AND l_Level >= 11 THEN
2592 					INSERT INTO PJI_PMV_TIME_DIM_TMP
2593 					(PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2594 					SELECT report_date_julian, l_Default_Period_Name, l_Default_Period_ID, 1, 0, l_Calendar_Type_Day
2595 					FROM fii_time_cal_day_mv
2596 					WHERE
2597 					report_date>=l_prior_As_Of_Date
2598 					AND calendar_id = l_calendar_id
2599 					AND report_date<=l_prior_period_end_date;
2600 				END IF;
2601 					IF (l_prior_qtr_start_date <> l_prior_as_of_date OR p_Period_Type LIKE '%QTR%') AND l_Level >= 55 THEN
2602 					INSERT INTO PJI_PMV_TIME_DIM_TMP
2603 					(PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2604 					SELECT cal_period_id, l_Default_Period_Name, l_Default_Period_ID, 32, 0, l_Calendar_Type_Sum
2605 					FROM fii_time_cal_period
2606 					WHERE
2607 					start_date>=l_prior_As_Of_Date
2608 					AND calendar_id = l_calendar_id
2609 					AND end_date<=l_prior_qtr_end_date;
2610 				END IF;
2611 
2612 				IF (l_prior_year_start_date <> l_prior_as_of_date OR p_Period_Type LIKE '%YEAR%') AND l_Level >= 119 THEN
2613 					INSERT INTO PJI_PMV_TIME_DIM_TMP
2614 					(PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2615 					SELECT cal_qtr_id, l_Default_Period_Name, l_Default_Period_ID, 64, 0, l_Calendar_Type_Sum
2616 					FROM fii_time_cal_qtr
2617 					WHERE
2618 					start_date>=l_prior_As_Of_Date
2619 					AND calendar_id = l_calendar_id
2620 					AND end_date<=l_prior_year_end_date;
2621 				END IF;
2622 			END IF;
2623 		ELSE
2624 			IF (l_period_start_date <> l_as_of_date OR p_Period_Type LIKE '%PERIOD%') AND l_Level >= 11 THEN
2625 				INSERT INTO PJI_PMV_TIME_DIM_TMP
2626 				(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2627 				SELECT report_date_julian, l_Default_Period_Name, l_Default_Period_ID, 1, 0, l_Calendar_Type_Day
2628 				FROM fii_time_day
2629 				WHERE
2630 				report_date>=l_As_Of_Date
2631 				AND report_date<=l_period_end_date;
2632 			END IF;
2633 
2634 			IF (l_qtr_start_date <> l_as_of_date OR p_Period_Type LIKE '%QTR%') AND l_Level >= 55 THEN
2635 				INSERT INTO PJI_PMV_TIME_DIM_TMP
2636 				(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2637 				SELECT ent_period_id, l_Default_Period_Name, l_Default_Period_ID, 32, 0, l_Calendar_Type_Sum
2638 				FROM fii_time_ent_period
2639 				WHERE
2640 				start_date>=l_As_Of_Date
2641 				AND end_date<=l_qtr_end_date;
2642 			END IF;
2643 
2644 			IF (l_year_start_date <> l_as_of_date OR p_Period_Type LIKE '%YEAR%') AND l_Level >= 119 THEN
2645 				INSERT INTO PJI_PMV_TIME_DIM_TMP
2646 				(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2647 				SELECT ent_qtr_id, l_Default_Period_Name, l_Default_Period_ID, 64, 0, l_Calendar_Type_Sum
2648 				FROM fii_time_ent_qtr
2649 				WHERE
2650 				start_date>=l_As_Of_Date
2651 				AND end_date<=l_year_end_date;
2652 			END IF;
2653 			IF p_Parse_Prior IS NOT NULL  AND l_Prior_As_Of_Date IS NOT NULL THEN
2654 				IF p_PA_DEBUG_MODE = 'Y' THEN
2655 					Write2FWKLog('Generating prior id records for enterprise period types.');
2656 				END IF;
2657 				IF (l_prior_period_start_date <> l_prior_as_of_date OR p_Period_Type LIKE '%PERIOD%') AND l_Level >= 11 THEN
2658 					INSERT INTO PJI_PMV_TIME_DIM_TMP
2659 					(PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2660 					SELECT report_date_julian, l_Default_Period_Name, l_Default_Period_ID, 1, 0, l_Calendar_Type_Day
2661 					FROM fii_time_day
2662 					WHERE
2663 					report_date>=l_prior_As_Of_Date
2664 					AND report_date<=l_Prior_period_end_date;
2665 				END IF;
2666 
2667 				IF (l_prior_qtr_start_date <> l_prior_as_of_date OR p_Period_Type LIKE '%QTR%') AND l_Level >= 55 THEN
2668 					INSERT INTO PJI_PMV_TIME_DIM_TMP
2669 					(PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2670 					SELECT ent_period_id, l_Default_Period_Name, l_Default_Period_ID, 32, 0, l_Calendar_Type_Sum
2671 					FROM fii_time_ent_period
2672 					WHERE
2673 					start_date>=l_prior_As_Of_Date
2674 					AND end_date<=l_prior_qtr_end_date;
2675 				END IF;
2676 
2677 				IF (l_Prior_year_start_date <> l_Prior_as_of_date OR p_Period_Type LIKE '%YEAR%') AND l_Level >= 119 THEN
2678 					INSERT INTO PJI_PMV_TIME_DIM_TMP
2679 					(PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2680 					SELECT ent_qtr_id, l_Default_Period_Name, l_Default_Period_ID, 64, 0, l_Calendar_Type_Sum
2681 					FROM fii_time_ent_qtr
2682 					WHERE
2683 					start_date>=l_prior_As_Of_Date
2684 					AND end_date<=l_prior_year_end_date;
2685 				END IF;
2686 				IF p_PA_DEBUG_MODE = 'Y' THEN
2687 					Write2FWKLog('Done generating records for for enterprise period types.');
2688 				END IF;
2689 			END IF;
2690 		END IF;
2691 		IF p_Full_Period_Flag IS NOT NULL THEN
2692 			IF p_PA_DEBUG_MODE = 'Y' THEN
2693 				Write2FWKLog('Full Period Flag is set.');
2694 			END IF;
2695 			IF l_Level <> -1 THEN
2696 				CASE l_Level
2697 				WHEN 119 THEN
2698 					INSERT INTO PJI_PMV_TIME_DIM_TMP
2699 					(ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2700 					VALUES (l_Year_ID, l_Default_Period_Name, l_Default_Period_ID, 2, 128, l_Calendar_Type_Sum);
2701 				WHEN 55 THEN
2702 					INSERT INTO PJI_PMV_TIME_DIM_TMP
2703 					(ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2704 					VALUES (l_Qtr_ID, l_Default_Period_Name, l_Default_Period_ID, 2, 64, l_Calendar_Type_Sum);
2705 				WHEN 23 THEN
2706 					INSERT INTO PJI_PMV_TIME_DIM_TMP
2707 					(ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2708 					VALUES (l_Period_ID, l_Default_Period_Name, l_Default_Period_ID, 2, 32, l_Calendar_Type_Sum);
2709 				WHEN 11 THEN
2710 					INSERT INTO PJI_PMV_TIME_DIM_TMP
2711 					(ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2712 					VALUES (l_Week_ID, l_Default_Period_Name, l_Default_Period_ID, 2, 16, 'E');
2713 				END CASE;
2714 
2715 				IF p_Parse_Prior IS NOT NULL  AND l_Prior_As_Of_Date IS NOT NULL THEN
2716 					CASE l_Level
2717 					WHEN 119 THEN
2718 						INSERT INTO PJI_PMV_TIME_DIM_TMP
2719 						(PRIOR_ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2720 						VALUES (
2721 						SUBSTR(LPAD(l_Year_ID,7,'0'),1,3)
2722 						||TO_CHAR(SUBSTR(LPAD(l_Year_ID,7,'0'),4,4)-1)
2723 						, l_Default_Period_Name, l_Default_Period_ID, 2, 128, l_Calendar_Type_Sum);
2724 					WHEN 55 THEN
2725 						INSERT INTO PJI_PMV_TIME_DIM_TMP
2726 						(PRIOR_ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2727 						VALUES (
2728 						SUBSTR(LPAD(l_Qtr_ID,8,'0'),1,3)
2729 						||TO_CHAR(SUBSTR(LPAD(l_Qtr_ID,8,'0'),4,4)-1)
2730 						||SUBSTR(LPAD(l_Qtr_ID,8,'0'),8)
2731 						, l_Default_Period_Name, l_Default_Period_ID, 2, 64, l_Calendar_Type_Sum);
2732 					WHEN 23 THEN
2733 						INSERT INTO PJI_PMV_TIME_DIM_TMP
2734 						(PRIOR_ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2735 						VALUES (
2736 						SUBSTR(LPAD(l_Period_ID,10,'0'),1,3)
2737 						||TO_CHAR(SUBSTR(LPAD(l_Period_ID,10,'0'),4,4)-1)
2738 						||SUBSTR(LPAD(l_Period_ID,10,'0'),8)
2739 						, l_Default_Period_Name, l_Default_Period_ID, 2, 32, l_Calendar_Type_Sum);
2740 					WHEN 11 THEN
2741 						INSERT INTO PJI_PMV_TIME_DIM_TMP
2742 						(PRIOR_ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2743 						VALUES (
2744 						SUBSTR(LPAD(l_Week_ID,11,'0'),1,3)
2745 						||TO_CHAR(SUBSTR(LPAD(l_Week_ID,11,'0'),4,4)-1)
2746 						||SUBSTR(LPAD(l_Week_ID,11,'0'),8)
2747 						, l_Default_Period_Name, l_Default_Period_ID, 2, 16, 'E');
2748 					END CASE;
2749 				END IF;
2750 			END IF;
2751 			IF p_PA_DEBUG_MODE = 'Y' THEN
2752 				Write2FWKLog('Full Period entries created.');
2753 			END IF;
2754 		END IF;
2755 
2756 		IF p_PA_DEBUG_MODE = 'Y' THEN
2757 			Write2FWKLog('Exiting Convert_NFViewBY_AS_OF_DATE...');
2758 		END IF;
2759 	EXCEPTION
2760 		WHEN NO_DATA_FOUND THEN
2761 			NULL;
2762 		WHEN OTHERS THEN
2763 			g_SQL_Error_Msg:=SQLERRM();
2764 			Write2FWKLog(g_SQL_Error_Msg, 3);
2765 			RAISE;
2766 	END Convert_NFViewBY_AS_OF_DATE;
2767 
2768 	/*
2769 	** ----------------------------------------------------------
2770 	** Procedure: Convert_DBI_NViewBY_AS_OF_DATE
2771 	** The procedure creates time records for dbi reports based
2772 	** on an as of date when the view by dimension is not time.
2773 	** The API caters to additional logic based on following
2774 	** parameters:
2775 	** Full Period Flag: If the flag is passed as 'Y', the API
2776 	** creates additional time records for accomodating full
2777 	** period amounts for reporting budget data.
2778 	** ----------------------------------------------------------
2779 	*/
2780 	Procedure Convert_DBI_NViewBY_AS_OF_DATE(p_As_Of_Date	NUMBER
2781 							, p_Period_Type	VARCHAR2
2782 							, p_Comparator	VARCHAR2
2783 							, p_Full_Period_Flag	VARCHAR2 DEFAULT NULL)
2784 	IS
2785 	l_Period_Id			NUMBER;
2786 	l_Week_ID			NUMBER;
2787 	l_Qtr_Id			NUMBER;
2788 	l_Year_Id			NUMBER;
2789 
2790 	l_As_Of_Date		DATE:=TO_DATE(p_As_Of_Date,'j');
2791 
2792 	l_Period_Type		VARCHAR2(150):=p_Period_Type;
2793 	l_Level			NUMBER;
2794 	l_IS_GL_Flag		VARCHAR2(1);
2795 
2796 
2797 	l_Calendar_Id		NUMBER;
2798 	l_Calendar_Type_Sum	VARCHAR2(1);
2799 	BEGIN
2800 		IF p_PA_DEBUG_MODE = 'Y' THEN
2801 			Write2FWKLog('Entering Convert_DBI_NViewBY_AS_OF_DATE...','Convert_DBI_NViewBY_AS_OF_DATE');
2802 		END IF;
2803 
2804 		IF l_Period_Type LIKE '%PA%' THEN
2805 			l_Calendar_Id:=G_PA_Calendar_ID;
2806 			l_IS_GL_Flag:='Y';
2807 			l_Calendar_Type_Sum:='P';
2808 			IF p_PA_DEBUG_MODE = 'Y' THEN
2809 				Write2FWKLog('PA calender is selected.');
2810 			END IF;
2811 		ELSIF p_Period_Type LIKE '%CAL%' THEN
2812 			l_Calendar_Id:=G_GL_Calendar_ID;
2813 			l_IS_GL_Flag:='Y';
2814 			l_Calendar_Type_Sum:='G';
2815 			IF p_PA_DEBUG_MODE = 'Y' THEN
2816 				Write2FWKLog('GL calender is selected.');
2817 			END IF;
2818 		ELSE
2819 			l_Calendar_Id:=-1;
2820 			l_Calendar_Type_Sum:='E';
2821 			IF p_PA_DEBUG_MODE = 'Y' THEN
2822 				Write2FWKLog('Ent calender is selected.');
2823 			END IF;
2824 		END IF;
2825 
2826 		IF p_Full_Period_Flag IS NOT NULL OR l_Period_Type = 'PJI_TIME_PA_PERIOD' THEN
2827 			IF l_IS_GL_Flag IS NULL THEN
2828 				IF p_PA_DEBUG_MODE = 'Y' THEN
2829 					Write2FWKLog('Selecting from FII_TIME_DAY.');
2830 				END IF;
2831 				SELECT
2832 				ent_period_id, week_id, ent_qtr_id, ent_year_id
2833 				INTO
2834 				l_Period_Id, l_Week_Id, l_Qtr_Id, l_Year_Id
2835 				FROM fii_time_day
2836 				WHERE
2837 				report_date = l_As_Of_Date;
2838 			ELSE
2839 				IF p_PA_DEBUG_MODE = 'Y' THEN
2840 					Write2FWKLog('Selecting from FII_TIME_CAL_DAY_MV.');
2841 				END IF;
2842 				SELECT
2843 				cal_period_id, cal_qtr_id, cal_year_id
2844 				INTO
2845 				l_Period_Id, l_Qtr_Id, l_Year_Id
2846 				FROM fii_time_cal_day_mv
2847 				WHERE
2848 				report_date = l_As_Of_Date
2849 				AND calendar_id = l_Calendar_Id;
2850 			END IF;
2851 		END IF;
2852 
2853 		CASE p_Period_Type
2854 			WHEN	'FII_TIME_ENT_YEAR' THEN l_Level:=119;
2855 			WHEN	'FII_TIME_CAL_YEAR' THEN l_Level:=119;
2856 			WHEN	'FII_TIME_ENT_QTR' THEN l_Level:=55;
2857 			WHEN	'FII_TIME_CAL_QTR' THEN l_Level:=55;
2858 			WHEN	'FII_TIME_ENT_PERIOD' THEN l_Level:=23;
2859 			WHEN	'FII_TIME_CAL_PERIOD' THEN l_Level:=23;
2860 			WHEN	'PJI_TIME_PA_PERIOD' THEN l_Level:=23;
2861 			WHEN	'FII_TIME_WEEK' THEN l_Level:=11;
2862 			ELSE	NULL;
2863 		END CASE;
2864 
2865 		IF p_Period_Type <> 'PJI_TIME_PA_PERIOD' THEN
2866 			IF p_PA_DEBUG_MODE = 'Y' THEN
2867 				Write2FWKLog('Generating records for period types other than PA Period.');
2868 			END IF;
2869 
2870 			IF l_IS_GL_Flag IS NOT NULL THEN
2871 				INSERT INTO PJI_PMV_TCMP_DIM_TMP
2872 				(ID, NAME, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2873 				SELECT time_id, '-1', period_type_id, 1 , calendar_type
2874 				FROM fii_time_cal_rpt_struct
2875 				WHERE report_date = l_As_Of_Date
2876 				AND bitand(record_type_id,l_Level) = record_type_id
2877 				AND calendar_id = l_Calendar_Id;
2878 			ELSE
2879 				INSERT INTO PJI_PMV_TCMP_DIM_TMP
2880 				(ID, NAME, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2881 				SELECT time_id, '-1', period_type_id, 1 , calendar_type
2882 				FROM fii_time_rpt_struct
2883 				WHERE report_date = l_As_Of_Date
2884 				AND bitand(record_type_id,l_Level) = record_type_id
2885 				AND calendar_id = l_Calendar_Id;
2886 			END IF;
2887 
2888 			IF p_PA_DEBUG_MODE = 'Y' THEN
2889 				Write2FWKLog('Done generating records for period types other than PA Period.');
2890 			END IF;
2891 		ELSE
2892 			IF p_PA_DEBUG_MODE = 'Y' THEN
2893 				Write2FWKLog('Generating records for PA Period period type.');
2894 			END IF;
2895 
2896 			INSERT INTO PJI_PMV_TCMP_DIM_TMP
2897 			(ID, NAME, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
2898 			SELECT report_date_julian
2899 			, '-1', 1, 1, 'P' FROM fii_time_cal_day_mv
2900 			WHERE cal_period_id = l_Period_Id
2901 			AND calendar_id = l_Calendar_Id
2902 			AND report_date<=l_As_Of_Date;
2903 
2904 			IF p_PA_DEBUG_MODE = 'Y' THEN
2905 				Write2FWKLog('Done generating records for PA Period period type.');
2906 			END IF;
2907 		END IF;
2908 
2909 		IF p_Full_Period_Flag IS NOT NULL THEN
2910 			IF p_PA_DEBUG_MODE = 'Y' THEN
2911 				Write2FWKLog('Full Period Flag is set.');
2912 			END IF;
2913 			CASE l_Level
2914 			WHEN 119 THEN
2915 				INSERT INTO PJI_PMV_TCMP_DIM_TMP
2916 				(ID, NAME, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2917 				VALUES (l_Year_ID, '-1', 2, 128, l_Calendar_Type_Sum);
2918 			WHEN 55 THEN
2919 				INSERT INTO PJI_PMV_TCMP_DIM_TMP
2920 				(ID, NAME, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2921 				VALUES (l_Qtr_ID, '-1', 2, 64, l_Calendar_Type_Sum);
2922 			WHEN 23 THEN
2923 				INSERT INTO PJI_PMV_TCMP_DIM_TMP
2924 				(ID, NAME, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2925 				VALUES (l_Period_ID, '-1', 2, 32, l_Calendar_Type_Sum);
2926 			WHEN 11 THEN
2927 				INSERT INTO PJI_PMV_TCMP_DIM_TMP
2928 				(ID, NAME, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
2929 				VALUES (l_Week_ID, '-1', 2, 16, 'E');
2930 			END CASE;
2931 
2932 			IF p_PA_DEBUG_MODE = 'Y' THEN
2933 				Write2FWKLog('Full Period entries created.');
2934 			ENd IF;
2935 		END IF;
2936 
2937 		IF p_PA_DEBUG_MODE = 'Y' THEN
2938 			Write2FWKLog('Exiting Convert_DBI_NViewBY_AS_OF_DATE...');
2939 		END IF;
2940 	EXCEPTION
2941 		WHEN NO_DATA_FOUND THEN
2942 			NULL;
2943 		WHEN OTHERS THEN
2944 			g_SQL_Error_Msg:=SQLERRM();
2945 			IF p_PA_DEBUG_MODE = 'Y' THEN
2946 				Write2FWKLog(g_SQL_Error_Msg, 3);
2947 			END IF;
2948 			RAISE;
2949 	END Convert_DBI_NViewBY_AS_OF_DATE;
2950 
2951 	/*
2952 	** ----------------------------------------------------------
2953 	** Procedure: Convert_ITD_NViewBY_AS_OF_DATE
2954 	** The procedure creates time records for ITD reports based
2955 	** on an as of date when the view by dimension is not time.
2956 	** The API caters to additional logic based on following
2957 	** parameters:
2958 	** Parse Prior: If the flag is passed as 'Y', the API stamps
2959 	** prior_id in the time tables.
2960 	** Comparator: For DBI reports this api is called again with
2961 	** Comparator set as 'D' and a different as_of_date
2962 	** (based on comparator choosen in the PMV report).
2963 	** ----------------------------------------------------------
2964 	*/
2965 	Procedure Convert_ITD_NViewBY_AS_OF_DATE(p_As_Of_Date	NUMBER
2966 							, p_Period_Type	VARCHAR2
2967 							, p_Parse_Prior	VARCHAR2 DEFAULT NULL
2968 							, p_Comparator	VARCHAR2 DEFAULT 'I'
2969 							, p_Calendar_ID	NUMBER DEFAULT NULL)
2970 	IS
2971 	l_Period_Id			NUMBER;
2972 	l_Week_ID			NUMBER;
2973 	l_Qtr_Id			NUMBER;
2974 	l_Year_Id			NUMBER;
2975 	l_Prior_Period_Id		NUMBER;
2976 
2977 	l_As_Of_Date		DATE:=TO_DATE(p_As_Of_Date,'j');
2978 	l_Prior_As_Of_Date	DATE;
2979 
2980 	l_Period_Type		VARCHAR2(150):=p_Period_Type;
2981 	l_Level			NUMBER;
2982 	l_IS_GL_Flag		VARCHAR2(1);
2983 
2984 	l_Calendar_Id		NUMBER;
2985 	BEGIN
2986 		IF p_PA_DEBUG_MODE = 'Y' THEN
2987 			Write2FWKLog('Entering Convert_ITD_NViewBY_AS_OF_DATE...','Convert_ITD_NViewBY_AS_OF_DATE');
2988 		END IF;
2989 
2990 		IF p_Parse_Prior IS NOT NULL THEN
2991 		BEGIN
2992 			IF p_PA_DEBUG_MODE = 'Y' THEN
2993 				Write2FWKLog('Determining Prior Year...');
2994 			END IF;
2995 			-- Note: Please confirm this change with dima.
2996 			l_Prior_As_Of_Date:=TO_DATE(Convert_AS_OF_DATE(p_As_Of_Date, p_Period_Type, 'YEARLY'),'j');
2997 		EXCEPTION
2998 			WHEN NO_DATA_FOUND THEN
2999 			IF p_PA_DEBUG_MODE = 'Y' THEN
3000 				Write2FWKLog('Unable to determine Prior Year, hence defaulting it...');
3001 			END IF;
3002 		END;
3003 		END IF;
3004 
3005 		IF p_PA_DEBUG_MODE = 'Y' THEN
3006 			Write2FWKLog('Done with computing Prior Year...');
3007 		END IF;
3008 
3009 		IF l_Period_Type LIKE '%PA%' THEN
3010 			l_Calendar_Id:=G_PA_Calendar_ID;
3011 			l_IS_GL_Flag:='Y';
3012 			IF p_PA_DEBUG_MODE = 'Y' THEN
3013 				Write2FWKLog('PA calender is selected.');
3014 			END IF;
3015 		ELSIF p_Period_Type LIKE '%CAL%' THEN
3016 			l_Calendar_Id:=G_GL_Calendar_ID;
3017 			l_IS_GL_Flag:='Y';
3018 			IF p_PA_DEBUG_MODE = 'Y' THEN
3019 				Write2FWKLog('GL calender is selected.');
3020 			END IF;
3021 		ELSE
3022 			l_Calendar_Id:=-1;
3023 			IF p_PA_DEBUG_MODE = 'Y' THEN
3024 				Write2FWKLog('Ent calender is selected.');
3025 			END IF;
3026 		END IF;
3027 
3028 		IF l_Period_Type = 'PJI_TIME_PA_PERIOD' THEN
3029 			IF p_PA_DEBUG_MODE = 'Y' THEN
3030 				Write2FWKLog('Selecting from FII_TIME_CAL_DAY_MV.');
3031 			END IF;
3032 			SELECT	cal_period_id
3033 			INTO	l_Period_Id
3034 			FROM fii_time_cal_day_mv
3035 			WHERE
3036 			report_date = l_As_Of_Date
3037 			AND calendar_id = l_Calendar_Id;
3038 		END IF;
3039 
3040 		IF p_Period_Type = 'PJI_TIME_PA_PERIOD' AND p_Parse_Prior = 'Y' AND l_Prior_As_Of_Date IS NOT NULL THEN
3041 			IF p_PA_DEBUG_MODE = 'Y' THEN
3042 				Write2FWKLog('Selecting Prior Period ID from FII_TIME_CAL_DAY_MV for PA Period Type.');
3043 			END IF;
3044 
3045 			SELECT cal_period_id
3046 			INTO l_Prior_Period_Id
3047 			FROM fii_time_cal_day_mv
3048 			WHERE 1 = 1
3049 			AND report_date = l_Prior_As_Of_Date
3050 			AND calendar_id = l_Calendar_Id;
3051 
3052 			IF p_PA_DEBUG_MODE = 'Y' THEN
3053 				Write2FWKLog('Done selecting Prior Period ID from FII_TIME_CAL_DAY_MV for PA Period Type.');
3054 			END IF;
3055 		END IF;
3056 
3057 		IF p_Period_Type <> 'PJI_TIME_PA_PERIOD' THEN
3058 			IF p_PA_DEBUG_MODE = 'Y' THEN
3059 				Write2FWKLog('Generating records for period types other than PA Period.');
3060 			END IF;
3061 
3062 			IF l_IS_GL_Flag IS NOT NULL THEN
3063 				INSERT INTO PJI_PMV_ITD_DIM_TMP
3064 				(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, COMPARATOR_TYPE, CALENDAR_TYPE)
3065 				SELECT time_id, '-1' , '-1' , period_type_id, p_Comparator, calendar_type
3066 				FROM fii_time_cal_rpt_struct
3067 				WHERE report_date = l_As_Of_Date
3068 				AND bitand(record_type_id,1143) = record_type_id
3069 				AND calendar_id = l_Calendar_Id;
3070 			ELSE
3071 				INSERT INTO PJI_PMV_ITD_DIM_TMP
3072 				(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, COMPARATOR_TYPE, CALENDAR_TYPE)
3073 				SELECT time_id, '-1' , '-1' , period_type_id, p_Comparator, calendar_type
3074 				FROM fii_time_rpt_struct
3075 				WHERE report_date = l_As_Of_Date
3076 				AND bitand(record_type_id,1143) = record_type_id
3077 				AND calendar_id = l_Calendar_Id;
3078 			END IF;
3079 
3080 			IF p_Parse_Prior IS NOT NULL  AND l_Prior_As_Of_Date IS NOT NULL THEN
3081 				IF p_PA_DEBUG_MODE = 'Y' THEN
3082 					Write2FWKLog('Generating prior id records for period types other than PA Period.');
3083 				END IF;
3084 				IF l_IS_GL_Flag IS NOT NULL THEN
3085 					INSERT INTO PJI_PMV_ITD_DIM_TMP
3086 					(PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, COMPARATOR_TYPE, CALENDAR_TYPE)
3087 					SELECT time_id, '-1', '-1', period_type_id, p_Comparator, calendar_type
3088 					FROM fii_time_cal_rpt_struct
3089 					WHERE report_date = l_Prior_As_Of_Date
3090 					AND bitand(record_type_id,1143) = record_type_id
3091 					AND calendar_id = l_Calendar_Id;
3092 				ELSE
3093 					INSERT INTO PJI_PMV_ITD_DIM_TMP
3094 					(PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, COMPARATOR_TYPE, CALENDAR_TYPE)
3095 					SELECT time_id, '-1', '-1', period_type_id, p_Comparator, calendar_type
3096 					FROM fii_time_rpt_struct
3097 					WHERE report_date = l_Prior_As_Of_Date
3098 					AND bitand(record_type_id,1143) = record_type_id
3099 					AND calendar_id = l_Calendar_Id;
3100 				END IF;
3101 			END IF;
3102 			IF p_PA_DEBUG_MODE = 'Y' THEN
3103 				Write2FWKLog('Done generating records for period types other than PA Period.');
3104 			END IF;
3105 		ELSE
3106 			IF p_PA_DEBUG_MODE = 'Y' THEN
3107 				Write2FWKLog('Generating records for PA Period period type.');
3108 			END IF;
3109 
3110 			INSERT INTO PJI_PMV_ITD_DIM_TMP
3111 			(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, COMPARATOR_TYPE, CALENDAR_TYPE)
3112 			SELECT report_date_julian
3113 			, '-1', '-1', 1, p_Comparator, 'P' FROM fii_time_cal_day_mv
3114 			WHERE cal_period_id = l_Period_Id
3115 			AND calendar_id = l_Calendar_Id
3116 			AND report_date<=l_As_Of_Date;
3117 
3118 			INSERT INTO PJI_PMV_ITD_DIM_TMP
3119 			(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, COMPARATOR_TYPE, CALENDAR_TYPE)
3120 			SELECT time_id, '-1', '-1', period_type_id, p_Comparator, 'P'
3121 			FROM fii_time_cal_rpt_struct
3122 			WHERE report_date = l_As_Of_Date
3123 			AND bitand(record_type_id,1143) = record_type_id
3124 			AND calendar_id = l_Calendar_Id
3125 			AND period_type_id > 16;
3126 
3127 			IF p_Parse_Prior IS NOT NULL  AND l_Prior_As_Of_Date IS NOT NULL THEN
3128 
3129 				IF p_PA_DEBUG_MODE = 'Y' THEN
3130 					Write2FWKLog('Generating prior id records for PA Period period type.');
3131 				END IF;
3132 
3133 				INSERT INTO PJI_PMV_ITD_DIM_TMP
3134 				(PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, COMPARATOR_TYPE, CALENDAR_TYPE)
3135 				SELECT report_date_julian
3136 				, '-1', '-1', 1, p_Comparator, 'P' FROM fii_time_cal_day_mv
3137 				WHERE cal_period_id = l_Prior_Period_Id
3138 				AND calendar_id = l_Calendar_Id
3139 				AND report_date<=l_Prior_As_Of_Date;
3140 
3141 				INSERT INTO PJI_PMV_ITD_DIM_TMP
3142 				(PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, COMPARATOR_TYPE, CALENDAR_TYPE)
3143 				SELECT time_id, '-1', '-1', period_type_id, p_Comparator, 'P'
3144 				FROM fii_time_cal_rpt_struct
3145 				WHERE report_date = l_As_Of_Date
3146 				AND bitand(record_type_id,1143) = record_type_id
3147 				AND calendar_id = l_Calendar_Id
3148 				AND period_type_id > 16;
3149 
3150 			END IF;
3151 
3152 			IF p_PA_DEBUG_MODE = 'Y' THEN
3153 				Write2FWKLog('Done generating records for PA Period period type.');
3154 			END IF;
3155 		END IF;
3156 		IF p_PA_DEBUG_MODE = 'Y' THEN
3157 			Write2FWKLog('Exiting Convert_ITD_NViewBY_AS_OF_DATE...');
3158 		END IF;
3159 	EXCEPTION
3160 		WHEN NO_DATA_FOUND THEN
3161 			NULL;
3162 		WHEN OTHERS THEN
3163 			g_SQL_Error_Msg:=SQLERRM();
3164 			Write2FWKLog(g_SQL_Error_Msg, 3);
3165 			RAISE;
3166 	END Convert_ITD_NViewBY_AS_OF_DATE;
3167 
3168 	/*
3169 	** Convert_Time API's for View BY TIME
3170 	*/
3171 
3172 	/*
3173 	** ----------------------------------------------------------
3174 	** Procedure: Convert_ViewBY_AS_OF_DATE
3175 	** The procedure creates time records for pmv reports when
3176 	** time is selected as the viewby dimension.
3177 	** The API caters to additional logic based on following
3178 	** parameters:
3179 	** Parse Prior: If the flag is passed as 'Y', the API stamps
3180 	** prior_id in the time tables.
3181 	** Report Type: If a value is passed then the time records are
3182 	** bound by year(fiscal/enterprize).
3183 	** ----------------------------------------------------------
3184 	*/
3185 	Procedure Convert_ViewBY_AS_OF_DATE(p_As_Of_Date	NUMBER
3186 							, p_Period_Type	VARCHAR2
3187 							, p_Report_Type	VARCHAR2
3188 							, p_Parse_Prior	VARCHAR2 DEFAULT NULL
3189 							, p_Full_Period_Flag VARCHAR2 DEFAULT NULL)
3190 	AS
3191 	l_Start_Time		DATE;
3192 	l_End_Time			DATE;
3193 
3194 	l_Week_ID			NUMBER;
3195 	l_Week_Name		VARCHAR2(150);
3196 	l_Week_Start_Date		DATE;
3197 	l_Period_ID			NUMBER;
3198 	l_Period_Name		VARCHAR2(150);
3199 	l_Period_Start_Date 	DATE;
3200 	l_Qtr_ID			NUMBER;
3201 	l_Qtr_Name		VARCHAR2(150);
3202 	l_Qtr_Start_Date 		DATE;
3203 	l_Year_ID			NUMBER;
3204 	l_Year_Name		VARCHAR2(150);
3205 	l_Year_Start_Date 	DATE;
3206 
3207 	l_Level			NUMBER;
3208 	l_Def_View_BY		VARCHAR2(150);
3209 	l_Def_View_BY_ID		NUMBER;
3210 	l_Calendar_ID		NUMBER;
3211 	l_Calendar_Type_Sum	VARCHAR2(1);
3212 
3213 
3214 	l_IS_GL_Flag		VARCHAR2(1);
3215 
3216 	l_Period_Type		VARCHAR2(150):=p_Period_Type;
3217 	l_As_Of_Date		DATE := TO_DATE(p_As_Of_Date,'j');
3218 	l_Prior_As_Of_Date	DATE;
3219 	l_Prior_Period_Id		NUMBER;
3220 	BEGIN
3221 		IF p_PA_DEBUG_MODE = 'Y' THEN
3222 			Write2FWKLog('Entering Convert_ViewBY_AS_OF_DATE...','Convert_ViewBY_AS_OF_DATE');
3223 		END IF;
3224 
3225 		IF p_Parse_Prior IS NOT NULL THEN
3226 		BEGIN
3227 			IF p_PA_DEBUG_MODE = 'Y' THEN
3228 				Write2FWKLog('Determining Prior Year...');
3229 			END IF;
3230 			-- Note: Please confirm this change with dima.
3231 			l_Prior_As_Of_Date:=TO_DATE(Convert_AS_OF_DATE(p_As_Of_Date, l_Period_Type, 'YEARLY'),'j');
3232 		EXCEPTION
3233 			WHEN NO_DATA_FOUND THEN
3234 			IF p_PA_DEBUG_MODE = 'Y' THEN
3235 				Write2FWKLog('Unable to determine Prior Year, hence defaulting it...');
3236 			END IF;
3237 		END;
3238 		END IF;
3239 
3240 		IF p_PA_DEBUG_MODE = 'Y' THEN
3241 			Write2FWKLog('Done with computing as of date for Prior Year...');
3242 		END IF;
3243 
3244 		IF l_Period_Type LIKE '%PA%' THEN
3245 			l_Calendar_Id:=G_PA_Calendar_ID;
3246 			l_IS_GL_Flag:='Y';
3247 			l_Calendar_Type_Sum:='P';
3248 			IF p_PA_DEBUG_MODE = 'Y' THEN
3249 				Write2FWKLog('PA calender is selected.');
3250 			END IF;
3251 		ELSIF l_Period_Type LIKE '%CAL%' THEN
3252 			l_Calendar_Id:=G_GL_Calendar_ID;
3253 			l_IS_GL_Flag:='Y';
3254 			l_Calendar_Type_Sum:='G';
3255 			IF p_PA_DEBUG_MODE = 'Y' THEN
3256 				Write2FWKLog('GL calender is selected.');
3257 			END IF;
3258 		ELSE
3259 			l_Calendar_Type_Sum:='E';
3260 			l_Calendar_Id:=-1;
3261 			IF p_PA_DEBUG_MODE = 'Y' THEN
3262 				Write2FWKLog('Ent calender is selected.');
3263 			END IF;
3264 		END IF;
3265 
3266 		IF l_IS_GL_Flag IS NULL THEN
3267 			IF p_PA_DEBUG_MODE = 'Y' THEN
3268 				Write2FWKLog('Selecting from FII_TIME_DAY.');
3269 			END IF;
3270 			SELECT
3271 				day.ent_period_id
3272 				, prd.name
3273 				, day.ent_period_start_date
3274 				, day.week_id
3275 				, wek.name
3276 				, day.week_start_date
3277 				, day.ent_qtr_id
3278 				, qtr.name
3279 				, day.ent_qtr_start_date
3280 				, day.ent_year_id
3281 				, yer.name
3282 				, day.ent_year_start_date
3283 			INTO
3284 				l_Period_Id
3285 				, l_Period_Name
3286 				, l_Period_Start_Date
3287 				, l_Week_Id
3288 				, l_Week_Name
3289 				, l_Week_Start_Date
3290 				, l_Qtr_Id
3291 				, l_Qtr_Name
3292 				, l_Qtr_Start_Date
3293 				, l_Year_Id
3294 				, l_Year_Name
3295 				, l_Year_Start_Date
3296 			FROM fii_time_day day
3297 				, fii_time_week wek
3298 				, fii_time_ent_period prd
3299 				, fii_time_ent_qtr qtr
3300 				, fii_time_ent_year yer
3301 			WHERE
3302 				report_date = l_As_Of_Date
3303 				AND wek.week_id = day.week_id
3304 				AND prd.ent_period_id = day.ent_period_id
3305 				AND qtr.ent_qtr_id = day.ent_qtr_id
3306 				AND yer.ent_year_id = day.ent_year_id;
3307 		ELSE
3308 			IF p_PA_DEBUG_MODE = 'Y' THEN
3309 				Write2FWKLog('Selecting from FII_TIME_CAL_DAY_MV.');
3310 			END IF;
3311 			SELECT
3312 				day.cal_period_id
3313 				, prd.name
3314 				, day.cal_period_start_date
3315 				, day.cal_qtr_id
3316 				, qtr.name
3317 				, day.cal_qtr_start_date
3318 				, day.cal_year_id
3319 				, yer.name
3320 				, day.cal_year_start_date
3321 			INTO
3322 				l_Period_Id
3323 				, l_Period_Name
3324 				, l_Period_Start_Date
3325 				, l_Qtr_Id
3326 				, l_Qtr_Name
3327 				, l_Qtr_Start_Date
3328 				, l_Year_Id
3329 				, l_Year_Name
3330 				, l_Year_Start_Date
3331 			FROM fii_time_cal_day_mv day
3332 				, fii_time_cal_period prd
3333 				, fii_time_cal_qtr qtr
3334 				, fii_time_cal_year yer
3335 			WHERE
3336 				report_date = l_As_Of_Date
3337 				AND day.calendar_id = l_Calendar_Id
3338 				AND prd.cal_period_id = day.cal_period_id
3339 				AND qtr.cal_qtr_id = day.cal_qtr_id
3340 				AND yer.cal_year_id = day.cal_year_id;
3341 		END IF;
3342 
3343 		IF p_PA_DEBUG_MODE = 'Y' THEN
3344 			Write2FWKLog('Done selecting from FII_TIME_???.');
3345 		END IF;
3346 
3347 		IF p_Report_Type IS NOT NULL THEN
3348 			l_End_Time:=l_Year_Start_Date-1;
3349 		ELSIF l_Period_Type = 'FII_TIME_ENT_YEAR' OR l_Period_Type = 'FII_TIME_CAL_YEAR' THEN
3350 			l_End_Time:=TO_DATE(Convert_AS_OF_DATE(Convert_AS_OF_DATE(p_As_Of_Date, l_Period_Type, 'YEARLY'), l_Period_Type, 'YEARLY'),'j');
3351 			IF l_End_Time IS NULL THEN
3352 				l_End_Time:=PJI_UTILS.GET_EXTRACTION_START_DATE;
3353 			END IF;
3354 		ELSIF l_Prior_As_Of_Date IS NOT NULL THEN
3355 			l_End_Time:=l_Prior_As_Of_Date;
3356 		ELSE
3357 			l_End_Time:=TO_DATE(Convert_AS_OF_DATE(p_As_Of_Date, l_Period_Type, 'YEARLY'),'j');
3358 			IF l_End_Time IS NULL THEN
3359 				l_End_Time:=PJI_UTILS.GET_EXTRACTION_START_DATE;
3360 			END IF;
3361 		END IF;
3362 
3363 		IF ( l_Period_Type = 'FII_TIME_WEEK' OR l_Period_Type = 'PJI_TIME_PA_PERIOD') AND l_End_Time < (l_As_Of_Date)-91 THEN
3364 			l_End_Time:=(l_As_Of_Date)-91;
3365 		END IF;
3366 
3367 		IF p_PA_DEBUG_MODE = 'Y' THEN
3368 			Write2FWKLog('Determining the l_Level, l_Start_Time, l_Def_View_BY, l_Def_View_BY_ID.');
3369 		END IF;
3370 
3371 		CASE l_Period_Type
3372 		WHEN	'FII_TIME_ENT_YEAR' THEN
3373 			l_Level:=119;
3374 			l_Start_Time:=l_Year_Start_Date;
3375 			l_Def_View_BY:=l_Year_Name;
3376 			l_Def_View_BY_ID:=l_Year_ID;
3377 		WHEN	'FII_TIME_CAL_YEAR' THEN
3378 			l_Level:=119;
3379 			l_Start_Time:=l_Year_Start_Date;
3380 			l_Def_View_BY:=l_Year_Name;
3381 			l_Def_View_BY_ID:=l_Year_ID;
3382 		WHEN	'FII_TIME_ENT_QTR' THEN
3383 			l_Level:=55;
3384 			l_Start_Time:=l_Qtr_Start_Date;
3385 			l_Def_View_BY:=l_Qtr_Name;
3386 			l_Def_View_BY_ID:=l_Qtr_ID;
3387 		WHEN	'FII_TIME_CAL_QTR' THEN
3388 			l_Level:=55;
3389 			l_Start_Time:=l_Qtr_Start_Date;
3390 			l_Def_View_BY:=l_Qtr_Name;
3391 			l_Def_View_BY_ID:=l_Qtr_ID;
3392 		WHEN	'FII_TIME_ENT_PERIOD' THEN
3393 			l_Level:=23;
3394 			l_Start_Time:=l_Period_Start_Date;
3395 			l_Def_View_BY:=l_Period_Name;
3396 			l_Def_View_BY_ID:=l_Period_ID;
3397 		WHEN	'FII_TIME_CAL_PERIOD' THEN
3398 			l_Level:=23;
3399 			l_Start_Time:=l_Period_Start_Date;
3400 			l_Def_View_BY:=l_Period_Name;
3401 			l_Def_View_BY_ID:=l_Period_ID;
3402 		WHEN	'PJI_TIME_PA_PERIOD' THEN
3403 			l_Level:=23;
3404 			l_Start_Time:=l_Period_Start_Date;
3405 			l_Def_View_BY:=l_Period_Name;
3406 			l_Def_View_BY_ID:=l_Period_ID;
3407 		WHEN	'FII_TIME_WEEK' THEN l_Level:=11;
3408 			l_Start_Time:=l_Week_Start_Date;
3409 			l_Def_View_BY:=l_Week_Name;
3410 			l_Def_View_BY_ID:=l_Week_ID;
3411 		ELSE	NULL;
3412 		END CASE;
3413 
3414 		IF p_PA_DEBUG_MODE = 'Y' THEN
3415 			Write2FWKLog('l_Level : '||l_Level);
3416 			Write2FWKLog('l_Start_Time : '||l_Start_Time);
3417 			Write2FWKLog('l_End_Time : '||l_End_Time);
3418 			Write2FWKLog('l_Def_View_BY : '||l_Def_View_BY);
3419 			Write2FWKLog('l_Def_View_BY_ID : '||l_Def_View_BY_ID);
3420 		END IF;
3421 
3422 		IF l_Period_Type <> 'PJI_TIME_PA_PERIOD' THEN
3423 			IF p_PA_DEBUG_MODE = 'Y' THEN
3424 				Write2FWKLog('Generating records for period types other than PA Period.');
3425 			END IF;
3426 
3427 			IF l_IS_GL_Flag IS NOT NULL THEN
3428 				INSERT INTO PJI_PMV_TIME_DIM_TMP
3429 				(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
3430 				SELECT time_id, l_Def_View_BY, l_Def_View_BY_ID, period_type_id, 1 , calendar_type
3431 				FROM fii_time_cal_rpt_struct
3432 				WHERE report_date = l_As_Of_Date
3433 				AND bitand(record_type_id,l_Level) = record_type_id
3434 				AND calendar_id = l_Calendar_Id;
3435 			ELSE
3436 				INSERT INTO PJI_PMV_TIME_DIM_TMP
3437 				(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
3438 				SELECT time_id, l_Def_View_BY, l_Def_View_BY_ID, period_type_id, 1 , calendar_type
3439 				FROM fii_time_rpt_struct
3440 				WHERE report_date = l_As_Of_Date
3441 				AND bitand(record_type_id,l_Level) = record_type_id
3442 				AND calendar_id = l_Calendar_Id;
3443 			END IF;
3444 
3445 			IF p_Parse_Prior IS NOT NULL  AND l_Prior_As_Of_Date IS NOT NULL THEN
3446 				IF p_PA_DEBUG_MODE = 'Y' THEN
3447 					Write2FWKLog('Generating prior id records for period types other than PA Period.');
3448 				END IF;
3449 				IF l_IS_GL_Flag IS NOT NULL THEN
3450 					INSERT INTO PJI_PMV_TIME_DIM_TMP
3451 					(PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
3452 					SELECT time_id, l_Def_View_BY, l_Def_View_BY_ID, period_type_id, 1, calendar_type
3453 					FROM fii_time_cal_rpt_struct
3454 					WHERE report_date = l_Prior_As_Of_Date
3455 					AND bitand(record_type_id,l_Level) = record_type_id
3456 					AND calendar_id = l_Calendar_Id;
3457 				ELSE
3458 					INSERT INTO PJI_PMV_TIME_DIM_TMP
3459 					(PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
3460 					SELECT time_id, l_Def_View_BY, l_Def_View_BY_ID, period_type_id, 1, calendar_type
3461 					FROM fii_time_rpt_struct
3462 					WHERE report_date = l_Prior_As_Of_Date
3463 					AND bitand(record_type_id,l_Level) = record_type_id
3464 					AND calendar_id = l_Calendar_Id;
3465 				END IF;
3466 			END IF;
3467 			IF p_PA_DEBUG_MODE = 'Y' THEN
3468 				Write2FWKLog('Done generating records for period types other than PA Period.');
3469 			END IF;
3470 		ELSE
3471 			IF p_PA_DEBUG_MODE = 'Y' THEN
3472 				Write2FWKLog('Generating records for PA Period period type.');
3473 			END IF;
3474 
3475 			INSERT INTO PJI_PMV_TIME_DIM_TMP
3476 			(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
3477 			SELECT report_date_julian
3478 			, l_Def_View_BY, l_Def_View_BY_ID, 1, 1, 'P' FROM fii_time_cal_day_mv
3479 			WHERE cal_period_id = l_Period_Id
3480 			AND calendar_id = l_Calendar_Id
3481 			AND report_date<=l_As_Of_Date;
3482 
3483 			IF p_Parse_Prior IS NOT NULL  AND l_Prior_As_Of_Date IS NOT NULL THEN
3484 
3485 				IF p_PA_DEBUG_MODE = 'Y' THEN
3486 					Write2FWKLog('Generating prior id records for PA Period period type.');
3487 				END IF;
3488 
3489 				INSERT INTO PJI_PMV_TIME_DIM_TMP
3490 				(PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
3491 				SELECT report_date_julian
3492 				, l_Def_View_BY, l_Def_View_BY_ID, 1, 1, 'P' FROM fii_time_cal_day_mv
3493 				WHERE cal_period_id = l_Prior_Period_Id
3494 				AND calendar_id = l_Calendar_Id
3495 				AND report_date<=l_Prior_As_Of_Date;
3496 
3497 			END IF;
3498 
3499 			IF p_PA_DEBUG_MODE = 'Y' THEN
3500 				Write2FWKLog('Done generating records for PA Period period type.');
3501 			END IF;
3502 		END IF;
3503 
3504 		IF p_Full_Period_Flag IS NOT NULL THEN
3505 			IF p_PA_DEBUG_MODE = 'Y' THEN
3506 				Write2FWKLog('Full Period Flag is set.');
3507 			END IF;
3508 			CASE l_Level
3509 			WHEN 119 THEN
3510 				INSERT INTO PJI_PMV_TIME_DIM_TMP
3511 				(ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
3512 				VALUES (l_Def_View_BY_ID, l_Def_View_BY, l_Def_View_BY_ID, 2, 128, l_Calendar_Type_Sum);
3513 			WHEN 55 THEN
3514 				INSERT INTO PJI_PMV_TIME_DIM_TMP
3515 				(ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
3516 				VALUES (l_Def_View_BY_ID, l_Def_View_BY, l_Def_View_BY_ID, 2, 64, l_Calendar_Type_Sum);
3517 			WHEN 23 THEN
3518 				INSERT INTO PJI_PMV_TIME_DIM_TMP
3519 				(ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
3520 				VALUES (l_Def_View_BY_ID, l_Def_View_BY, l_Def_View_BY_ID, 2, 32, l_Calendar_Type_Sum);
3521 			WHEN 11 THEN
3522 				INSERT INTO PJI_PMV_TIME_DIM_TMP
3523 				(ID, NAME, ORDER_BY_ID, AMOUNT_TYPE, PERIOD_TYPE, CALENDAR_TYPE)
3524 				VALUES (l_Def_View_BY_ID, l_Def_View_BY, l_Def_View_BY_ID, 2, 16, 'E');
3525 			END CASE;
3526 
3527 			IF p_PA_DEBUG_MODE = 'Y' THEN
3528 				Write2FWKLog('Full Period entries created.');
3529 			ENd IF;
3530 		END IF;
3531 
3532 		CASE l_Period_Type
3533 		WHEN	'FII_TIME_ENT_YEAR' THEN
3534 			IF p_PA_DEBUG_MODE = 'Y' THEN
3535 				Write2FWKLog('Creating time records for enterprize year.');
3536 			END IF;
3537 			INSERT INTO PJI_PMV_TIME_DIM_TMP
3538 			(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, CALENDAR_TYPE)
3539 			SELECT ent_year_id, name, ent_year_id, 128, 'E'
3540 			FROM fii_time_ent_year
3541 			WHERE start_date > l_End_Time
3542 			AND start_date < l_Start_Time;
3543 		WHEN	'FII_TIME_ENT_QTR' THEN
3544 			IF p_PA_DEBUG_MODE = 'Y' THEN
3545 				Write2FWKLog('Creating time records for enterprize quarter.');
3546 			END IF;
3547 			INSERT INTO PJI_PMV_TIME_DIM_TMP
3548 			(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, CALENDAR_TYPE)
3549 			SELECT ent_qtr_id, name, ent_qtr_id, 64, 'E'
3550 			FROM fii_time_ent_qtr
3551 			WHERE start_date > l_End_Time
3552 			AND start_date < l_Start_Time;
3553 		WHEN	'FII_TIME_ENT_PERIOD' THEN
3554 			IF p_PA_DEBUG_MODE = 'Y' THEN
3555 				Write2FWKLog('Creating time records for enterprize period.');
3556 			END IF;
3557 			INSERT INTO PJI_PMV_TIME_DIM_TMP
3558 			(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, CALENDAR_TYPE)
3559 			SELECT ent_period_id, name, ent_period_id, 32, 'E'
3560 			FROM fii_time_ent_period
3561 			WHERE start_date > l_End_Time
3562 			AND start_date < l_Start_Time;
3563 		WHEN	'FII_TIME_CAL_YEAR' THEN
3564 			IF p_PA_DEBUG_MODE = 'Y' THEN
3565 				Write2FWKLog('Creating time records for fiscal year.');
3566 			END IF;
3567 			INSERT INTO PJI_PMV_TIME_DIM_TMP
3568 			(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, CALENDAR_TYPE)
3569 			SELECT cal_year_id, name, cal_year_id, 128, 'G'
3570 			FROM fii_time_cal_year
3571 			WHERE start_date > l_End_Time
3572 			AND start_date < l_Start_Time
3573 			AND calendar_id = l_Calendar_Id;
3574 		WHEN	'FII_TIME_CAL_QTR' THEN
3575 			IF p_PA_DEBUG_MODE = 'Y' THEN
3576 				Write2FWKLog('Creating time records for fiscal quarter.');
3577 			END IF;
3578 			INSERT INTO PJI_PMV_TIME_DIM_TMP
3579 			(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, CALENDAR_TYPE)
3580 			SELECT cal_qtr_id, name, cal_qtr_id, 64, 'G'
3581 			FROM fii_time_cal_qtr
3582 			WHERE start_date > l_End_Time
3583 			AND start_date < l_Start_Time
3584 			AND calendar_id = l_Calendar_Id;
3585 		WHEN	'FII_TIME_CAL_PERIOD' THEN
3586 			IF p_PA_DEBUG_MODE = 'Y' THEN
3587 				Write2FWKLog('Creating time records for fiscal period.');
3588 			END IF;
3589 			INSERT INTO PJI_PMV_TIME_DIM_TMP
3590 			(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, CALENDAR_TYPE)
3591 			SELECT cal_period_id, name, cal_period_id, 32, 'G'
3592 			FROM fii_time_cal_period
3593 			WHERE start_date > l_End_Time
3594 			AND start_date < l_Start_Time
3595 			AND calendar_id = l_Calendar_Id;
3596 		WHEN	'PJI_TIME_PA_PERIOD' THEN
3597 			IF p_PA_DEBUG_MODE = 'Y' THEN
3598 				Write2FWKLog('Creating time records for pa period.');
3599 			END IF;
3600 			INSERT INTO PJI_PMV_TIME_DIM_TMP
3601 			(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, CALENDAR_TYPE)
3602 			SELECT cal_period_id, name, cal_period_id, 32, 'P'
3603 			FROM fii_time_cal_period
3604 			WHERE start_date > l_End_Time
3605 			AND start_date < l_Start_Time
3606 			AND calendar_id = l_Calendar_Id;
3607 		WHEN	'FII_TIME_WEEK' THEN
3608 			IF p_PA_DEBUG_MODE = 'Y' THEN
3609 				Write2FWKLog('Creating time records for enterprize week.');
3610 			END IF;
3611 			INSERT INTO PJI_PMV_TIME_DIM_TMP
3612 			(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, CALENDAR_TYPE)
3613 			SELECT week_id, name, week_id, 16, 'E'
3614 			FROM fii_time_week
3615 			WHERE start_date > l_End_Time
3616 			AND start_date < l_Start_Time;
3617 		END CASE;
3618 
3619 		IF p_Parse_Prior IS NOT NULL THEN
3620 			IF p_PA_DEBUG_MODE = 'Y' THEN
3621 				Write2FWKLog('Parse Prior is set.');
3622 			END IF;
3623 			UPDATE PJI_PMV_TIME_DIM_TMP
3624 			SET PRIOR_ID = (CASE period_type
3625 						WHEN 128	THEN SUBSTR(LPAD(ID,7,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(ID,7,'0'),4,4)-1)
3626 						WHEN 64	THEN SUBSTR(LPAD(ID,8,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(ID,8,'0'),4,4)-1)||SUBSTR(LPAD(ID,8,'0'),8)
3627 						WHEN 32	THEN SUBSTR(LPAD(ID,10,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(ID,10,'0'),4,4)-1)||SUBSTR(LPAD(ID,10,'0'),8)
3628 						WHEN 16	THEN SUBSTR(LPAD(ID,11,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(ID,11,'0'),4,4)-1)||SUBSTR(LPAD(ID,11,'0'),8)
3629 						END)
3630 			WHERE AMOUNT_TYPE = 2
3631 			OR AMOUNT_TYPE IS NULL;
3632 			IF p_PA_DEBUG_MODE = 'Y' THEN
3633 				Write2FWKLog('Prior ID is updated.');
3634 			END IF;
3635 		END IF;
3636 		IF p_PA_DEBUG_MODE = 'Y' THEN
3637 			Write2FWKLog('Exiting Convert_ViewBY_AS_OF_DATE...');
3638 		END IF;
3639 	EXCEPTION
3640 		WHEN OTHERS THEN
3641 			g_SQL_Error_Msg:=SQLERRM();
3642 			IF p_PA_DEBUG_MODE = 'Y' THEN
3643 				Write2FWKLog(g_SQL_Error_Msg, 3);
3644 			END IF;
3645 			RAISE;
3646 	END Convert_ViewBY_AS_OF_DATE;
3647 
3648 	Procedure Convert_ITD_ViewBY_AS_OF_DATE(p_As_Of_Date	NUMBER
3649 							, p_Period_Type	VARCHAR2
3650 							, p_Parse_Prior	VARCHAR2 DEFAULT NULL)
3651 	AS
3652 	l_As_Of_Date		DATE;
3653 	l_Level			NUMBER;
3654 	BEGIN
3655 		IF p_PA_DEBUG_MODE = 'Y' THEN
3656 			Write2FWKLog('Entering Convert_ITD_ViewBY_AS_OF_DATE...','Convert_ITD_ViewBY_AS_OF_DATE');
3657 			Write2FWKLog('Determining the period beyond which ITD has to be generated.');
3658 		END IF;
3659 
3660 		CASE p_Period_Type
3661 		WHEN	'FII_TIME_ENT_YEAR' THEN
3662 			l_Level:=128;
3663 			SELECT MIN(TIME.start_date)-1
3664  			INTO l_As_Of_Date
3665 			FROM
3666 			pji_pmv_time_dim_tmp TTMP,
3667 			fii_time_ent_year TIME
3668 			WHERE TTMP.period_type = l_Level
3669 			AND TTMP.id = TIME.ent_year_id;
3670 		WHEN	'FII_TIME_CAL_YEAR' THEN
3671 			l_Level:=128;
3672 			SELECT MIN(TIME.start_date)-1
3673  			INTO l_As_Of_Date
3674 			FROM
3675 			pji_pmv_time_dim_tmp TTMP,
3676 			fii_time_cal_year TIME
3677 			WHERE TTMP.period_type = l_Level
3678 			AND TTMP.id = TIME.cal_year_id;
3679 		WHEN	'FII_TIME_ENT_QTR' THEN
3680 			l_Level:=64;
3681 			SELECT MIN(TIME.start_date)-1
3682  			INTO l_As_Of_Date
3683 			FROM
3684 			pji_pmv_time_dim_tmp TTMP,
3685 			fii_time_ent_qtr TIME
3686 			WHERE TTMP.period_type = l_Level
3687 			AND TTMP.id = TIME.ent_qtr_id;
3688 		WHEN	'FII_TIME_CAL_QTR' THEN
3689 			l_Level:=64;
3690 			SELECT MIN(TIME.start_date)-1
3691  			INTO l_As_Of_Date
3692 			FROM
3693 			pji_pmv_time_dim_tmp TTMP,
3694 			fii_time_cal_qtr TIME
3695 			WHERE TTMP.period_type = l_Level
3696 			AND TTMP.id = TIME.cal_qtr_id;
3697 		WHEN	'FII_TIME_ENT_PERIOD' THEN
3698 			l_Level:=32;
3699 			SELECT MIN(TIME.start_date)-1
3700  			INTO l_As_Of_Date
3701 			FROM
3702 			pji_pmv_time_dim_tmp TTMP,
3703 			fii_time_ent_period TIME
3704 			WHERE TTMP.period_type = l_Level
3705 			AND TTMP.id = TIME.ent_period_id;
3706 		WHEN	'FII_TIME_CAL_PERIOD' THEN
3707 			l_Level:=32;
3708 			SELECT MIN(TIME.start_date)-1
3709  			INTO l_As_Of_Date
3710 			FROM
3711 			pji_pmv_time_dim_tmp TTMP,
3712 			fii_time_cal_period TIME
3713 			WHERE TTMP.period_type = l_Level
3714 			AND TTMP.id = TIME.cal_period_id;
3715 		WHEN	'PJI_TIME_PA_PERIOD' THEN
3716 			l_Level:=32;
3717 			SELECT MIN(TIME.start_date)-1
3718  			INTO l_As_Of_Date
3719 			FROM
3720 			pji_pmv_time_dim_tmp TTMP,
3721 			fii_time_cal_period TIME
3722 			WHERE TTMP.period_type = l_Level
3723 			AND TTMP.id = TIME.cal_period_id;
3724 		WHEN	'FII_TIME_WEEK' THEN
3725 			l_Level:=16;
3726 	            SELECT MIN(TIME.start_date)-1
3727  			INTO l_As_Of_Date
3728 	            FROM
3729 	            pji_pmv_time_dim_tmp TTMP,
3730 	            fii_time_week TIME
3731 	            WHERE TTMP.period_type = l_Level
3732 	            AND TTMP.id = TIME.week_id;
3733 		ELSE	NULL;
3734 		END CASE;
3735 
3736 		IF p_PA_DEBUG_MODE = 'Y' THEN
3737 			Write2FWKLog('Done determining the period beyond which ITD has to be generated.');
3738 			Write2FWKLog('l_Level :'||l_Level);
3739 			Write2FWKLog('l_As_Of_Date :'||l_As_Of_Date);
3740 			Write2FWKLog('Before Calling Convert_ITD_NViewBY_AS_OF_DATE...');
3741 		END IF;
3742 
3743 		Convert_ITD_NViewBY_AS_OF_DATE(p_As_Of_Date=>TO_CHAR(l_As_Of_Date,'j')
3744 						, p_Period_Type=>p_Period_Type
3745 						, p_Parse_Prior=>p_Parse_Prior
3746 						, p_Comparator=>NULL
3747 						, p_Calendar_ID=>NULL);
3748 		IF p_PA_DEBUG_MODE = 'Y' THEN
3749 			Write2FWKLog('After Calling Convert_ITD_NViewBY_AS_OF_DATE...');
3750 			Write2FWKLog('Exiting Convert_ITD_ViewBY_AS_OF_DATE...');
3751 		END IF;
3752 	EXCEPTION
3753 		WHEN OTHERS THEN
3754 			g_SQL_Error_Msg:=SQLERRM();
3755 			IF p_PA_DEBUG_MODE = 'Y' THEN
3756 				Write2FWKLog(g_SQL_Error_Msg, 3);
3757 			END IF;
3758 			RAISE;
3759 	END Convert_ITD_ViewBY_AS_OF_DATE;
3760 
3761 	/*
3762 	** ----------------------------------------------------------
3763 	** Procedure: Convert_Time
3764 	** The procedure creates time records for non as_of_date
3765 	** based reports. Currently, this api supports only
3766 	** availability reports.
3767 	** ----------------------------------------------------------
3768 	*/
3769 	Procedure Convert_Time(p_From_Time_ID 	NUMBER
3770 				, p_To_Time_ID 		NUMBER
3771 				, p_Period_Type 		VARCHAR2
3772 				, p_View_BY 		VARCHAR2
3773 				, p_Parse_Prior		VARCHAR2 DEFAULT NULL)
3774 	AS
3775 	l_Hierarchy_Version_ID	NUMBER:=Get_Hierarchy_Version_ID;
3776 	l_Calendar_Id		NUMBER;
3777 	l_Start_Date		DATE:=TO_DATE(p_From_Time_ID,'j');
3778 	l_End_Date			DATE:=TO_DATE(p_To_Time_ID,'j');
3779 	l_Period_Type 		VARCHAR2(150):=p_Period_Type;
3780 	BEGIN
3781 		Write2FWKLog('Entering Convert_Time...','Convert_Time');
3782 
3783 		DELETE PJI_PMV_TIME_DIM_TMP;
3784 
3785 		IF p_Period_Type LIKE '%PA%' THEN
3786 			l_Calendar_Id:=G_PA_Calendar_ID;
3787 			Write2FWKLog('PA calender is selected.');
3788 		ELSIF p_Period_Type LIKE '%CAL%' THEN
3789 			l_Calendar_Id:=G_GL_Calendar_ID;
3790 			Write2FWKLog('GL calender is selected.');
3791 		END IF;
3792 
3793 		CASE p_Period_Type
3794 		WHEN 'FII_TIME_ENT_YEAR' THEN
3795 			Write2FWKLog('Creating time records for enterprize year.');
3796 			INSERT INTO PJI_PMV_TIME_DIM_TMP (ID, PRIOR_ID, NAME, PERIOD_TYPE, ORDER_BY_ID, AMOUNT_TYPE, CALENDAR_TYPE)
3797 				SELECT ENT_YEAR_ID, NULL, DECODE(p_View_BY,'TM',NAME,'-1'), 128, ENT_YEAR_ID, NULL, 'E'
3798 				FROM FII_TIME_ENT_YEAR
3799 				WHERE l_Start_Date <= end_date
3800 				AND l_End_Date >=start_date;
3801 		WHEN 'FII_TIME_ENT_QTR' THEN
3802 			Write2FWKLog('Creating time records for enterprize quarter.');
3803 			INSERT INTO PJI_PMV_TIME_DIM_TMP (ID, PRIOR_ID, NAME, PERIOD_TYPE, ORDER_BY_ID, AMOUNT_TYPE, CALENDAR_TYPE)
3804 				SELECT ENT_QTR_ID, NULL, DECODE(p_View_BY,'TM',NAME,'-1'), 64, ENT_QTR_ID, NULL, 'E'
3805 				FROM FII_TIME_ENT_QTR
3806 				WHERE l_Start_Date <= end_date
3807 				AND l_End_Date >=start_date;
3808 		WHEN 'FII_TIME_ENT_PERIOD' THEN
3809 			Write2FWKLog('Creating time records for enterprize period.');
3810 			INSERT INTO PJI_PMV_TIME_DIM_TMP (ID, PRIOR_ID, NAME, PERIOD_TYPE, ORDER_BY_ID, AMOUNT_TYPE, CALENDAR_TYPE)
3811 				SELECT ENT_PERIOD_ID, NULL, DECODE(p_View_BY,'TM',NAME,'-1'), 32, ENT_PERIOD_ID, NULL, 'E'
3812 				FROM FII_TIME_ENT_PERIOD
3813 				WHERE l_Start_Date <= end_date
3814 				AND l_End_Date >=start_date;
3815 		WHEN 'FII_TIME_CAL_YEAR' THEN
3816 			Write2FWKLog('Creating time records for fiscal year.');
3817 			INSERT INTO PJI_PMV_TIME_DIM_TMP (ID, PRIOR_ID, NAME, PERIOD_TYPE, ORDER_BY_ID, AMOUNT_TYPE, CALENDAR_TYPE)
3818 				SELECT CAL_YEAR_ID, NULL, DECODE(p_View_BY,'TM',NAME,'-1'), 128, CAL_YEAR_ID, NULL, 'G'
3819 				FROM FII_TIME_CAL_YEAR
3820 				WHERE l_Start_Date <= end_date
3821 				AND l_End_Date >=start_date
3822 				AND calendar_id = l_Calendar_ID;
3823 		WHEN 'FII_TIME_CAL_QTR' THEN
3824 			Write2FWKLog('Creating time records for fiscal quarter.');
3825 			INSERT INTO PJI_PMV_TIME_DIM_TMP (ID, PRIOR_ID, NAME, PERIOD_TYPE, ORDER_BY_ID, AMOUNT_TYPE, CALENDAR_TYPE)
3826 				SELECT CAL_QTR_ID, NULL, DECODE(p_View_BY,'TM',NAME,'-1'), 64, CAL_QTR_ID, NULL, 'G'
3827 				FROM FII_TIME_CAL_QTR
3828 				WHERE l_Start_Date <= end_date
3829 				AND l_End_Date >=start_date
3830 				AND calendar_id = l_Calendar_ID;
3831 		WHEN 'FII_TIME_CAL_PERIOD' THEN
3832 			Write2FWKLog('Creating time records for fiscal period.');
3833 			INSERT INTO PJI_PMV_TIME_DIM_TMP (ID, PRIOR_ID, NAME, PERIOD_TYPE, ORDER_BY_ID, AMOUNT_TYPE, CALENDAR_TYPE)
3834 				SELECT CAL_PERIOD_ID, NULL, DECODE(p_View_BY,'TM',NAME,'-1'), 32, CAL_PERIOD_ID, NULL, 'G'
3835 				FROM FII_TIME_CAL_PERIOD
3836 				WHERE l_Start_Date <= end_date
3837 				AND l_End_Date >=start_date
3838 				AND calendar_id = l_Calendar_ID;
3839 		WHEN 'PJI_TIME_PA_PERIOD' THEN
3840 			Write2FWKLog('Creating time records for pa period.');
3841 			INSERT INTO PJI_PMV_TIME_DIM_TMP (ID, PRIOR_ID, NAME, PERIOD_TYPE, ORDER_BY_ID, AMOUNT_TYPE, CALENDAR_TYPE)
3842 				SELECT CAL_PERIOD_ID, NULL, DECODE(p_View_BY,'TM',NAME,'-1'), 32, CAL_PERIOD_ID, NULL, 'G'
3843 				FROM FII_TIME_CAL_PERIOD
3844 				WHERE l_Start_Date <= end_date
3845 				AND l_End_Date >=start_date
3846 				AND calendar_id = l_Calendar_ID;
3847 		WHEN 'FII_TIME_WEEK' THEN
3848 			Write2FWKLog('Creating time records for week.');
3849 			INSERT INTO PJI_PMV_TIME_DIM_TMP (ID, PRIOR_ID, NAME, PERIOD_TYPE, ORDER_BY_ID, AMOUNT_TYPE, CALENDAR_TYPE)
3850 				SELECT WEEK_ID, NULL, DECODE(p_View_BY,'TM',NAME,'-1'), 16, WEEK_ID, NULL, 'E'
3851 				FROM FII_TIME_WEEK
3852 				WHERE l_Start_Date <= end_date
3853 				AND l_End_Date >=start_date;
3854 		ELSE
3855 			NULL;
3856 		END CASE;
3857 
3858 		Write2FWKLog('Done creating time records.');
3859 
3860 		IF p_Parse_Prior IS NOT NULL THEN
3861 			Write2FWKLog('Parse Prior is set.');
3862 			UPDATE PJI_PMV_TIME_DIM_TMP
3863 			SET PRIOR_ID = (CASE period_type
3864 						WHEN 128	THEN SUBSTR(LPAD(ID,7,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(ID,7,'0'),4,4)-1)
3865 						WHEN 64	THEN SUBSTR(LPAD(ID,8,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(ID,8,'0'),4,4)-1)||SUBSTR(LPAD(ID,8,'0'),8)
3866 						WHEN 32	THEN SUBSTR(LPAD(ID,10,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(ID,10,'0'),4,4)-1)||SUBSTR(LPAD(ID,10,'0'),8)
3867 						WHEN 16	THEN SUBSTR(LPAD(ID,11,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(ID,11,'0'),4,4)-1)||SUBSTR(LPAD(ID,11,'0'),8)
3868 						END)
3869 			WHERE period_type<>1;
3870 			Write2FWKLog('Prior ID is updated.');
3871 		END IF;
3872 		Write2FWKLog('Exiting Convert_Time...');
3873 	EXCEPTION
3874 		WHEN OTHERS THEN
3875 			g_SQL_Error_Msg:=SQLERRM();
3876 			Write2FWKLog(g_SQL_Error_Msg, 3);
3877 			RAISE;
3878 	END Convert_Time;
3879 
3880 	/*
3881 	** ----------------------------------------------------------
3882 	** Procedure: Convert_Time
3883 	** This API is a public api exposed to the pmv report
3884 	** developers. The API determines the various time records
3885 	** to be created and calls the appropriate time api's.
3886 	** ----------------------------------------------------------
3887 	*/
3888 	Procedure Convert_Time(p_As_Of_Date	NUMBER
3889 							, p_Period_Type	VARCHAR2
3890 							, p_View_BY		VARCHAR2
3891 							, p_Parse_Prior	VARCHAR2 DEFAULT NULL
3892 							, p_Report_Type	VARCHAR2 DEFAULT NULL
3893 							, p_Comparator	VARCHAR2 DEFAULT NULL
3894 							, p_Parse_ITD	VARCHAR2 DEFAULT NULL
3895 							, p_Full_Period_Flag	VARCHAR2 DEFAULT NULL)
3896 	AS
3897 	l_As_Of_Date	NUMBER;
3898 	BEGIN
3899 
3900 		IF p_PA_DEBUG_MODE = 'Y' THEN
3901 			Write2FWKLog('Entering Convert_Time...','Convert_Time');
3902 
3903 			Write2FWKLog('Parameters passed by table function :');
3904 			Write2FWKLog(' p_As_Of_Date: '||p_As_Of_Date);
3905 			Write2FWKLog(' p_Period_Type: '||p_Period_Type);
3906 			Write2FWKLog(' p_View_BY: '||p_View_BY);
3907 			Write2FWKLog(' p_Parse_Prior: '||p_Parse_Prior);
3908 			Write2FWKLog(' p_Report_Type: '||p_Report_Type);
3909 			Write2FWKLog(' p_Comparator: '||p_Comparator);
3910 			Write2FWKLog(' p_Parse_ITD: '||p_Parse_ITD);
3911 			Write2FWKLog(' p_Full_Period_Flag: '||p_Full_Period_Flag);
3912 			Write2FWKLog('Clearing time temporary tables...');
3913 		END IF;
3914 
3915 		DELETE PJI_PMV_TIME_DIM_TMP;
3916 
3917 		IF p_Parse_ITD IS NOT NULL THEN
3918 			DELETE PJI_PMV_ITD_DIM_TMP;
3919 		END IF;
3920 		IF p_Report_Type = 'DBI' THEN
3921 			DELETE PJI_PMV_TCMP_DIM_TMP;
3922 		END IF;
3923 
3924 		IF p_PA_DEBUG_MODE = 'Y' THEN
3925 			Write2FWKLog('Done clearing time temporary tables...');
3926 		END IF;
3927 
3928 		IF p_As_Of_Date IS NOT NULL AND p_Report_Type = 'DBI' THEN
3929 			IF p_PA_DEBUG_MODE = 'Y' THEN
3930 				Write2FWKLog('Derive the as_of_date for DBI reports.');
3931 			END IF;
3932 			l_As_Of_Date:=Convert_AS_OF_DATE(p_As_Of_Date, p_Period_Type, p_Comparator);
3933 			IF p_PA_DEBUG_MODE = 'Y' THEN
3934 				Write2FWKLog('Derived the as_of_date: '||l_As_Of_Date||' for DBI reports.');
3935 			END IF;
3936 		END IF;
3937 
3938 		IF p_View_BY = 'TM' THEN
3939 			IF p_PA_DEBUG_MODE = 'Y' THEN
3940 				Write2FWKLog('Calling Convert_ViewBY_AS_OF_DATE as Viewby dimension is time.');
3941 			END IF;
3942 			IF p_Report_Type = 'FISCAL' THEN
3943 				IF p_PA_DEBUG_MODE = 'Y' THEN
3944 					Write2FWKLog('The time dimension values should be restricted by fiscal/enterprize year.');
3945 				END IF;
3946 				Convert_ViewBY_AS_OF_DATE(p_As_Of_Date, p_Period_Type, p_Report_Type, p_Parse_Prior, p_Full_Period_Flag);
3947 			ELSE
3948 				IF p_PA_DEBUG_MODE = 'Y' THEN
3949 					Write2FWKLog('The time dimension values should not be restricted by fiscal/enterprize year.');
3950 				END IF;
3951 				Convert_ViewBY_AS_OF_DATE(p_As_Of_Date, p_Period_Type, NULL, p_Parse_Prior, p_Full_Period_Flag);
3952 			END IF;
3953 		ELSE
3954 			IF p_PA_DEBUG_MODE = 'Y' THEN
3955 				Write2FWKLog('Calling Convert_NViewBY_AS_OF_DATE as time is not the current Viewby dimension.');
3956 			END IF;
3957 			Convert_NViewBY_AS_OF_DATE(p_As_Of_Date, p_Period_Type, p_Parse_Prior, p_Full_Period_Flag);
3958 		END IF;
3959 
3960 		IF p_PA_DEBUG_MODE = 'Y' THEN
3961 			Write2FWKLog('Done calling Convert_?ViewBY_AS_OF_DATE.');
3962 		END IF;
3963 
3964 		IF p_Parse_ITD = 'Y' AND p_View_BY = 'TM' THEN
3965 			IF p_PA_DEBUG_MODE = 'Y' THEN
3966 				Write2FWKLog('Calling Convert_ITD_ViewBY_AS_OF_DATE.');
3967 			END IF;
3968 			Convert_ITD_ViewBY_AS_OF_DATE(p_As_Of_Date, p_Period_Type, p_Parse_Prior);
3969 			IF p_PA_DEBUG_MODE = 'Y' THEN
3970 				Write2FWKLog('Done calling Convert_ITD_ViewBY_AS_OF_DATE.');
3971 			END IF;
3972 		ELSIF p_Parse_ITD = 'Y' THEN
3973 			IF p_PA_DEBUG_MODE = 'Y' THEN
3974 				Write2FWKLog('Calling Convert_ITD_NViewBY_AS_OF_DATE.');
3975 			END IF;
3976 			Convert_ITD_NViewBY_AS_OF_DATE(p_As_Of_Date, p_Period_Type, p_Parse_Prior,'I');
3977 			IF p_Report_Type = 'DBI' THEN
3978 				IF p_PA_DEBUG_MODE = 'Y' THEN
3979 					Write2FWKLog('Calling Convert_ITD_NViewBY_AS_OF_DATE with DBI as of date.');
3980 				END IF;
3981 				Convert_ITD_NViewBY_AS_OF_DATE(l_As_Of_Date, p_Period_Type, p_Parse_Prior,'D');
3982 			END IF;
3983 			IF p_PA_DEBUG_MODE = 'Y' THEN
3984 				Write2FWKLog('Done calling Convert_ITD_NViewBY_AS_OF_DATE.');
3985 			END IF;
3986 		END IF;
3987 
3988 
3989 		IF p_Report_Type = 'DBI' THEN
3990 			IF p_PA_DEBUG_MODE = 'Y' THEN
3991 				Write2FWKLog('Calling Convert_DBI_NViewBY_AS_OF_DATE.');
3992 			END IF;
3993 			Convert_DBI_NViewBY_AS_OF_DATE(l_As_Of_Date, p_Period_Type, p_Comparator, p_Full_Period_Flag);
3994 			IF p_PA_DEBUG_MODE = 'Y' THEN
3995 				Write2FWKLog('Done calling Convert_DBI_NViewBY_AS_OF_DATE.');
3996 			END IF;
3997 		END IF;
3998 
3999 		IF p_PA_DEBUG_MODE = 'Y' THEN
4000 			Write2FWKLog('Exiting Convert_Time...');
4001 		END IF;
4002 
4003 	EXCEPTION
4004 		WHEN OTHERS THEN
4005 			g_SQL_Error_Msg:=SQLERRM();
4006 			IF p_PA_DEBUG_MODE = 'Y' THEN
4007 				Write2FWKLog(g_SQL_Error_Msg, 3);
4008 			END IF;
4009 			RAISE;
4010 	END Convert_Time;
4011 
4012 	/*
4013 	** Time API's specifically catering to resource team.
4014 	*/
4015 
4016 
4017 /* -----------------------------------------------------------
4018 ** Procedure: Convert_Expected_Time
4019 ** The procedure creates time records based on an as of date
4020 ** when the view by dimension is not time based on the period
4021 ** type (whether WTD, PTD, QTD, YTD, or ITD). This API
4022 ** distinguish the time records which contain the Actual
4023 ** or Scheduled Amount Type based on the last summarized date.
4024 ** It also caters to additional logic based on following:
4025 ** Parse Prior: If the flag is passed as 'Y', the API stamps
4026 ** prior_id in the time tables.
4027 **
4028 ** History:
4029 **    20-JUN-02  Adzilah Abd.   Created
4030 ** -----------------------------------------------------------*/
4031 
4032 PROCEDURE Convert_Expected_Time(p_as_of_date    NUMBER
4033                                ,p_period_type   VARCHAR2
4034                                ,p_parse_prior   VARCHAR2 DEFAULT NULL)
4035   IS
4036      l_period_id               NUMBER;
4037      l_period_start_date       DATE;
4038      l_qtr_id                  NUMBER;
4039      l_qtr_start_date          DATE;
4040      l_year_id                 NUMBER;
4041      l_year_start_date         DATE;
4042      l_week_id                 NUMBER;
4043      l_week_start_date         DATE;
4044 
4045      l_period_id_tmp           NUMBER;
4046      l_period_start_date_tmp   DATE;
4047      l_qtr_id_tmp              NUMBER;
4048      l_qtr_start_date_tmp      DATE;
4049      l_year_id_tmp             NUMBER;
4050      l_year_start_date_tmp     DATE;
4051      l_week_id_tmp             NUMBER;
4052      l_week_start_date_tmp     DATE;
4053 
4054      l_period_id_s             NUMBER;
4055      l_period_start_date_s     DATE;
4056      l_qtr_id_s                NUMBER;
4057      l_qtr_start_date_s        DATE;
4058      l_year_id_s               NUMBER;
4059      l_year_start_date_s       DATE;
4060      l_week_id_s               NUMBER;
4061      l_week_start_date_s       DATE;
4062 
4063      l_level                   NUMBER;
4064      l_is_GL                   VARCHAR2(1);
4065      l_period_type             VARCHAR2(150)   := p_period_type;
4066      l_summ_date               DATE;
4067      l_prior_summ_date         DATE;
4068      l_as_of_date              DATE            := TO_DATE(p_as_of_date, 'J');
4069      l_prior_as_of_date        DATE;
4070      l_process                 VARCHAR2(1)     := 'N';
4071      l_amount_type             NUMBER;
4072      l_date                    DATE;
4073      l_prior_date              DATE;
4074      l_calendar_id             NUMBER;
4075 
4076      l_calendar_type_day       VARCHAR2(1);
4077      l_calendar_type_sum       VARCHAR2(1);
4078 
4079 BEGIN
4080 
4081      Write2FWKLog('Entering Convert_Expected_Time...','Convert_Expected_Time');
4082 	BEGIN
4083 		Write2FWKLog('Determining Prior Year...');
4084 		l_Prior_As_Of_Date:=FII_TIME_API.ent_sd_lyr_beg(l_As_Of_Date);
4085 	EXCEPTION
4086 		WHEN NO_DATA_FOUND THEN
4087 		Write2FWKLog('Unable to determine Prior Year, hence defaulting it...');
4088 		l_Prior_As_Of_Date:=PJI_UTILS.GET_EXTRACTION_START_DATE;
4089 	END;
4090 	Write2FWKLog('Done with Prior Year...');
4091 
4092      Write2FWKLog('Retrieving the last summarized date value');
4093 
4094      l_summ_date := trunc(to_date(PJI_UTILS.GET_PARAMETER('LAST_FM_EXTR_DATE'),'YYYY/MM/DD'));
4095      Write2FWKLog('The last summarized date is ' || to_char(l_summ_date, 'YYYY/MM/DD'));
4096 
4097      DELETE PJI_PMV_TIME_DIM_TMP;
4098 
4099      if(l_summ_date is null) then
4100          return;
4101      end if;
4102 
4103 	BEGIN
4104 		Write2FWKLog('Determining Prior Year...');
4105 		l_prior_summ_date:=FII_TIME_API.ent_sd_lyr_beg(l_summ_date);
4106 	EXCEPTION
4107 		WHEN NO_DATA_FOUND THEN
4108 		Write2FWKLog('Unable to determine Prior Year, hence defaulting it...');
4109 		l_prior_summ_date:=PJI_UTILS.GET_EXTRACTION_START_DATE;
4110 	END;
4111 
4112 	Write2FWKLog('Done with Prior Year...');
4113 
4114      Write2FWKLog('The last PRIOR summarized date is ' || to_char(l_prior_summ_date, 'YYYY/MM/DD'));
4115 
4116      -- get the appropriate calendar id
4117      IF l_period_type LIKE '%PA%' THEN
4118         l_calendar_id        := G_PA_Calendar_ID;
4119         l_is_GL              := 'Y';
4120         l_calendar_type_day  := 'P';
4121         l_calendar_type_sum  := 'P';
4122         Write2FWKLog('PA calendar is selected.');
4123 
4124      ELSIF l_period_type LIKE '%CAL%' THEN
4125         l_calendar_id        := G_GL_Calendar_ID;
4126         l_is_GL              := 'Y';
4127         l_calendar_type_day  := 'C';
4128         l_calendar_type_sum  := 'G';
4129         Write2FWKLog('GL calendar is selected.');
4130 
4131      ELSE
4132         l_calendar_type_day  := 'C';
4133         l_calendar_type_sum  := 'E';
4134         Write2FWKLog('ENT calendar is selected.');
4135      END IF;
4136 
4137      Write2FWKLog('The calendar Id value = ' || l_calendar_id);
4138 
4139      -- get all the id, and start_date of the period, week,
4140      -- quarter, year for the as_of_date and the last
4141      -- summarized date
4142 
4143      IF l_is_GL IS NULL THEN
4144          Write2FWKLog('Selecting from FII_TIME_DAY for as_of_date and last_summ_date');
4145 
4146          SELECT ent_period_id, ent_period_start_date,
4147                 ent_qtr_id, ent_qtr_start_date,
4148                 ent_year_id, ent_year_start_date,
4149                 week_id, week_start_date
4150          INTO l_period_id, l_period_start_date,
4151               l_qtr_id, l_qtr_start_date,
4152               l_year_id, l_year_start_date,
4153               l_week_id, l_week_start_date
4154          FROM fii_time_day
4155          WHERE report_date = l_as_of_date;
4156 
4157          SELECT ent_period_id, ent_period_start_date,
4158                 ent_qtr_id, ent_qtr_start_date,
4159                 ent_year_id, ent_year_start_date,
4160                 week_id, week_start_date
4161          INTO l_period_id_s, l_period_start_date_s,
4162               l_qtr_id_s, l_qtr_start_date_s,
4163               l_year_id_s, l_year_start_date_s,
4164               l_week_id_s, l_week_start_date_s
4165          FROM fii_time_day
4166          WHERE report_date = l_summ_date;
4167 
4168      ELSE
4169          Write2FWKLog('Selecting from FII_TIME_CAL_DAY_MV for as_of_date and last_summ_date');
4170 
4171          SELECT cal_period_id, cal_period_start_date,
4172                 cal_qtr_id, cal_qtr_start_date,
4173                 cal_year_id, cal_year_start_date
4174          INTO l_period_id, l_period_start_date,
4175               l_qtr_id, l_qtr_start_date,
4176               l_year_id, l_year_start_date
4177          FROM fii_time_cal_day_mv
4178          WHERE report_date = l_as_of_date
4179            AND calendar_id = l_calendar_id;
4180 
4181          SELECT cal_period_id, cal_period_start_date,
4182                 cal_qtr_id, cal_qtr_start_date,
4183                 cal_year_id, cal_year_start_date
4184          INTO l_period_id_s, l_period_start_date_s,
4185               l_qtr_id_s, l_qtr_start_date_s,
4186               l_year_id_s, l_year_start_date_s
4187          FROM fii_time_cal_day_mv
4188          WHERE report_date = l_summ_date
4189            AND calendar_id = l_calendar_id;
4190 
4191      END IF;
4192 
4193 
4194      -- set the level depending on the period_type
4195      CASE p_period_type
4196         WHEN    'ITD'                  THEN  l_level:=128;
4197         WHEN    'FII_TIME_ENT_YEAR'    THEN  l_level:=64;
4198         WHEN    'FII_TIME_CAL_YEAR'    THEN  l_level:=64;
4199         WHEN    'FII_TIME_ENT_QTR'     THEN  l_level:=32;
4200         WHEN    'FII_TIME_CAL_QTR'     THEN  l_level:=32;
4201         WHEN    'FII_TIME_ENT_PERIOD'  THEN  l_level:=1;
4202         WHEN    'FII_TIME_CAL_PERIOD'  THEN  l_level:=1;
4203         WHEN    'PJI_TIME_PA_PERIOD'   THEN  l_level:=1;
4204         WHEN    'FII_TIME_WEEK'        THEN  l_level:=0;
4205         ELSE    NULL;
4206      END CASE;
4207      Write2FWKLog('The Period_Type level value = ' || l_level);
4208 
4209 
4210      ---------------------------------------------------------------
4211      -- This if statement determines whether the last summarized
4212      -- date is out of the time window of the as of date and
4213      -- the period type chosen.
4214      ---------------------------------------------------------------
4215 
4216      IF ((l_level=128) or
4217          (l_level=64 and l_year_id   = l_year_id_s) or
4218          (l_level=32 and l_qtr_id    = l_qtr_id_s)  or
4219          (l_level=1  and l_period_id = l_period_id_s) or
4220          (l_level=0  and l_week_id   = l_week_id_s)) and
4221               (l_summ_date < l_as_of_date) THEN
4222 
4223          -- The last summarized date is within the time window.
4224          -- Need further processing.
4225          -- Set the tmp variables to the values found of the
4226          -- last summarized date.
4227          Write2FWKLog('Last summarized date within time window, amount type is Actuals');
4228 
4229          l_process := 'Y';
4230          l_period_id_tmp          := l_period_id_s;
4231          l_period_start_date_tmp  := l_period_start_date_s;
4232          l_qtr_id_tmp             := l_qtr_id_s;
4233          l_qtr_start_date_tmp     := l_qtr_start_date_s;
4234          l_year_id_tmp            := l_year_id_s;
4235          l_year_start_date_tmp    := l_year_start_date_s;
4236          l_week_id_tmp            := l_week_id_s;
4237          l_week_start_date_tmp    := l_week_start_date_s;
4238          l_amount_type            := 0;
4239          l_date                   := l_summ_date;
4240          l_prior_date             := l_prior_summ_date;
4241 
4242      ELSE
4243 
4244          -- The last summarized date is out of the time window
4245          -- Set the tmp variables to the values found of the
4246          -- as_of_date.
4247 
4248          l_period_id_tmp          := l_period_id;
4249          l_period_start_date_tmp  := l_period_start_date;
4250          l_qtr_id_tmp             := l_qtr_id;
4251          l_qtr_start_date_tmp     := l_qtr_start_date;
4252          l_year_id_tmp            := l_year_id;
4253          l_year_start_date_tmp    := l_year_start_date;
4254          l_week_id_tmp            := l_week_id;
4255          l_week_start_date_tmp    := l_week_start_date;
4256          l_date                   := l_as_of_date;
4257          l_prior_date             := l_prior_as_of_date;
4258 
4259          IF (l_summ_date > l_as_of_date) THEN
4260              Write2FWKLog('Last summarized date out of time window, amount type is Actuals');
4261              l_amount_type := 0;      /* actuals */
4262          ELSE
4263              Write2FWKLog('Last summarized date out of time window, amount type is Scheduled');
4264              l_amount_type := 1;      /* scheduled */
4265          END IF;
4266      END IF;
4267 
4268      Write2FWKLog('The value of l_process variable = ' || l_process);
4269 
4270 
4271      /* Week Level (WTD) */
4272      -- if it is week to date, just get the days to the beginning
4273      -- of the week from the date
4274      -- Week is only applicable to Enterprise Week
4275      IF l_level = 0 THEN
4276           Write2FWKLog('Creating day slice for the given week.');
4277           INSERT INTO PJI_PMV_TIME_DIM_TMP
4278           (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4279           SELECT report_date_julian, '-1', '-1', 1 , l_amount_type, l_calendar_type_day
4280           FROM fii_time_day, dual
4281           WHERE week_id       = l_week_id_tmp
4282             AND report_date  <= l_date;
4283 
4284           IF p_parse_prior IS NOT NULL THEN
4285                Write2FWKLog('Creating day slice for the prior year week.');
4286                INSERT INTO PJI_PMV_TIME_DIM_TMP
4287                (PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4288                SELECT report_date_julian, '-1', '-1', 1, l_amount_type, l_calendar_type_day
4289                FROM fii_time_day
4290                WHERE week_id = SUBSTR(LPAD(l_week_id_tmp,11,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(l_week_id_tmp,11,'0'),4,4)-1)||SUBSTR(LPAD(l_week_id_tmp,11,'0'),8)
4291 	       AND report_date <= l_prior_date;
4292 	  END IF;
4293 
4294      END IF;
4295 
4296 
4297      /* Period or Month Level (PTD) */
4298      -- get all the days that are less than the l_date (either
4299      -- the last summarized date or the as_of_date), with the
4300      -- same period_id
4301      IF l_level >= 1 THEN
4302           IF l_is_GL IS NULL THEN
4303                 Write2FWKLog('Creating day slice for the given period - Enterprise Cal.');
4304 
4305                 INSERT INTO PJI_PMV_TIME_DIM_TMP
4306                 (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4307                 SELECT report_date_julian, '-1', '-1', 1 , l_amount_type, l_calendar_type_day
4308                 FROM fii_time_day, dual
4309                 WHERE ent_period_id = l_period_id_tmp
4310                   AND report_date  <= l_date;
4311 
4312                 IF p_parse_prior IS NOT NULL THEN
4313                     Write2FWKLog('Creating day slice for the prior year period - Enterprise Cal.');
4314                     INSERT INTO PJI_PMV_TIME_DIM_TMP
4315                     (PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4316                     SELECT report_date_julian, '-1', '-1', 1, l_amount_type, l_calendar_type_day
4317                     FROM fii_time_day
4318                     WHERE ent_period_id = SUBSTR(LPAD(l_period_id_tmp,10,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(l_period_id_tmp,10,'0'),4,4)-1)||SUBSTR(LPAD(l_period_id_tmp,10,'0'),8)
4319                       AND report_date  <= l_prior_date;
4320                 END IF;
4321 
4322           ELSIF l_is_GL IS NOT NULL THEN
4323                 Write2FWKLog('Creating day slice for the given period - Fiscal Cal.');
4324 
4325                 INSERT INTO PJI_PMV_TIME_DIM_TMP
4326                 (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4327                 SELECT report_date_julian, '-1', '-1', 1, l_amount_type, l_calendar_type_day
4328                 FROM fii_time_cal_day_mv, dual
4329                 WHERE cal_period_id = l_period_id_tmp
4330                   AND calendar_id   = l_calendar_id
4331                   AND report_date  <= l_date;
4332 
4333                 IF p_parse_prior IS NOT NULL THEN
4334                     Write2FWKLog('Creating day slice for the prior year period - Fiscal Cal.');
4335                     INSERT INTO PJI_PMV_TIME_DIM_TMP
4336                     (PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4337                     SELECT report_date_julian, '-1', '-1', 1, l_amount_type, l_calendar_type_day
4338                     FROM fii_time_cal_day_mv
4339                     WHERE cal_period_id = SUBSTR(LPAD(l_period_id_tmp,10,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(l_period_id_tmp,10,'0'),4,4)-1)||SUBSTR(LPAD(l_period_id_tmp,10,'0'),8)
4340                       AND calendar_id   = l_calendar_id
4341                       AND report_date  <= l_prior_date;
4342                 END IF;
4343 
4344 	  END IF;
4345      END IF;
4346 
4347 
4348      /* Quarter Level (QTD) */
4349      -- get all the months that are less than the period start date
4350      -- with the same quarter id
4351      IF l_level >= 32 THEN
4352           IF l_is_GL IS NULL THEN
4353                 Write2FWKLog('Creating period slice for the given quarter - Enterprise Cal.');
4354 
4355                 INSERT INTO PJI_PMV_TIME_DIM_TMP
4356                 (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4357                 SELECT ent_period_id, '-1', '-1', 32 , l_amount_type, l_calendar_type_sum
4358                 FROM fii_time_ent_period, dual
4359                 WHERE ent_qtr_id    = l_qtr_id_tmp
4360                   AND start_date    < l_period_start_date_tmp;
4361 
4362           ELSIF l_is_GL IS NOT NULL THEN
4363                 Write2FWKLog('Creating period slice for the given quarter - Fiscal Cal.');
4364 
4365                 INSERT INTO PJI_PMV_TIME_DIM_TMP
4366                 (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4367                 SELECT cal_period_id, '-1', '-1', 32 , l_amount_type, l_calendar_type_sum
4368                 FROM fii_time_cal_period, dual
4369                 WHERE cal_qtr_id    = l_qtr_id_tmp
4370                   AND calendar_id   = l_calendar_id
4371                   AND start_date    < l_period_start_date_tmp;
4372 	  END IF;
4373      END IF;
4374 
4375 
4376      /* Year Level (YTD) */
4377      -- get all the quarters that are less than the quarter start date
4378      -- with the same year id
4379      IF l_level >= 64 THEN
4380           IF l_is_GL IS NULL THEN
4381                 Write2FWKLog('Creating quarter slice for the given year - Enterprise Cal.');
4382 
4383                 INSERT INTO PJI_PMV_TIME_DIM_TMP
4384                 (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4385                 SELECT ent_qtr_id, '-1', '-1', 64 , l_amount_type, l_calendar_type_sum
4386                 FROM fii_time_ent_qtr, dual
4387                 WHERE ent_year_id   = l_year_id_tmp
4388                   AND start_date    < l_qtr_start_date_tmp;
4389 
4390           ELSIF l_is_GL IS NOT NULL THEN
4391                 Write2FWKLog('Creating quarter slice for the given year - Fiscal Cal.');
4392 
4393                 INSERT INTO PJI_PMV_TIME_DIM_TMP
4394                 (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4395                 SELECT cal_qtr_id, '-1', '-1', 64 , l_amount_type, l_calendar_type_sum
4396                 FROM fii_time_cal_qtr, dual
4397                 WHERE cal_year_id   = l_year_id_tmp
4398                   AND calendar_id   = l_calendar_id
4399                   AND start_date    < l_qtr_start_date_tmp;
4400 	  END IF;
4401      END IF;
4402 
4403 
4404      /* ITD Level */
4405      -- get all the years that are less than year start date
4406      -- of the last summarized date or the as_of_date (already set
4407      -- in the tmp variable from the earlier logic)
4408      IF l_level >= 128 THEN
4409           IF l_is_GL IS NULL THEN
4410                 Write2FWKLog('Creating year slice for all previous years - Enterprise Cal.');
4411 
4412                 INSERT INTO PJI_PMV_TIME_DIM_TMP
4413                 (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4414                 SELECT ent_year_id, '-1', '-1', 128 , l_amount_type, l_calendar_type_sum
4415                 FROM fii_time_ent_year, dual
4416                 WHERE start_date < l_year_start_date_tmp;
4417 
4418           ELSIF l_is_GL IS NOT NULL THEN
4419                 Write2FWKLog('Creating year slice for all previous years - Fiscal Cal.');
4420 
4421                 INSERT INTO PJI_PMV_TIME_DIM_TMP
4422                 (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4423                 SELECT cal_year_id, '-1', '-1', 128 , l_amount_type, l_calendar_type_sum
4424                 FROM fii_time_cal_year, dual
4425                 WHERE calendar_id  = l_calendar_id
4426                   AND start_date   < l_year_start_date_tmp;
4427 	  END IF;
4428      END IF;
4429 
4430 
4431      --------------------------------------------------------------
4432      -- Will continue processing only for the following case:
4433      -- That the last summarized date is within the time window of
4434      -- the as_of_date and the period_type chosen
4435      --------------------------------------------------------------
4436 
4437      IF l_process = 'Y' THEN
4438 
4439          -- When l_process is Y, then the amount type will always be 1 (scheduled).
4440          -- This is when the summarized date is less than the as of date value.
4441          -- The following code will process the difference between summarized date
4442          -- and the as of date values.
4443          l_amount_type := 1;
4444          Write2FWKLog('Continue processing for the Scheduled Amount Type');
4445          Write2FWKLog('Process remaining time period differences between Last_Summ_Date and As_Of_Date');
4446 
4447          /* Week Level (WTD) */
4448          -- if it is week to date, just get the days from the summarized date
4449          -- to the as_of_date values
4450          -- Week is only applicable to Enterprise Week
4451          IF l_level = 0 THEN
4452               Write2FWKLog('Creating day slice for the given week between the two dates - scheduled');
4453               INSERT INTO PJI_PMV_TIME_DIM_TMP
4454               (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4455               SELECT report_date_julian, '-1', '-1', 1 , l_amount_type, l_calendar_type_day
4456               FROM fii_time_day, dual
4457               WHERE week_id       = l_week_id
4458                 AND report_date  >  l_summ_date
4459                 AND report_date  <= l_as_of_date;
4460 
4461               IF p_parse_prior IS NOT NULL THEN
4462                   Write2FWKLog('Creating day slice for the prior year week between the two dates - scheduled');
4463                   INSERT INTO PJI_PMV_TIME_DIM_TMP
4464                   (PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4465                   SELECT report_date_julian, '-1', '-1', 1, l_amount_type, l_calendar_type_day
4466                   FROM fii_time_day
4467                   WHERE week_id    = SUBSTR(LPAD(l_week_id,11,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(l_week_id,11,'0'),4,4)-1)||SUBSTR(LPAD(l_week_id,11,'0'),8)
4468 	          AND report_date >  l_prior_summ_date
4469                   AND report_date <= l_prior_as_of_date;
4470 	      END IF;
4471 
4472          END IF;
4473 
4474 
4475          IF l_level >=1 THEN
4476 
4477              -- When the dates are in the same period/month, this code gets the
4478              -- time_id between those two dates.
4479              IF l_period_id = l_period_id_s THEN
4480 
4481                   IF l_is_GL IS NULL THEN
4482                        Write2FWKLog('Creating day slice for between the two dates - Enterprise Cal - scheduled');
4483 
4484                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4485                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4486                        SELECT report_date_julian, '-1', '-1', 1 , l_amount_type, l_calendar_type_day
4487                        FROM fii_time_day, dual
4488                        WHERE ent_period_id = l_period_id
4489                          AND report_date   > l_summ_date
4490                          AND report_date  <= l_as_of_date;
4491 
4492                        IF p_parse_prior IS NOT NULL THEN
4493                           Write2FWKLog('Creating day slice for the prior year period between two_dates - Enterprise Cal - scheduled');
4494                           INSERT INTO PJI_PMV_TIME_DIM_TMP
4495                          (PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4496                           SELECT report_date_julian, '-1', '-1', 1, l_amount_type, l_calendar_type_day
4497                           FROM fii_time_day
4498                           WHERE ent_period_id = SUBSTR(LPAD(l_period_id,10,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(l_period_id,10,'0'),4,4)-1)||SUBSTR(LPAD(l_period_id,10,'0'),8)
4499                             AND report_date   >  l_prior_summ_date
4500                             AND report_date   <= l_prior_as_of_date;
4501 
4502                        END IF;
4503 
4504                   ELSIF l_is_GL IS NOT NULL THEN
4505                        Write2FWKLog('Creating day slice for between the two dates - Fiscal Cal - scheduled');
4506 
4507                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4508                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4509                        SELECT report_date_julian, '-1', '-1', 1, l_amount_type, l_calendar_type_day
4510                        FROM fii_time_cal_day_mv, dual
4511                        WHERE cal_period_id = l_period_id
4512                          AND calendar_id   = l_calendar_id
4513                          AND report_date   > l_summ_date
4514                          AND report_date  <= l_as_of_date;
4515 
4516                        IF p_parse_prior IS NOT NULL THEN
4517                           Write2FWKLog('Creating day slice for the prior year period between the two dates - Fiscal Cal - scheduled.');
4518                           INSERT INTO PJI_PMV_TIME_DIM_TMP
4519                          (PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4520                           SELECT report_date_julian, '-1', '-1', 1, l_amount_type, l_calendar_type_day
4521                           FROM fii_time_cal_day_mv
4522                           WHERE cal_period_id = SUBSTR(LPAD(l_period_id,10,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(l_period_id,10,'0'),4,4)-1)||SUBSTR(LPAD(l_period_id,10,'0'),8)
4523                             AND calendar_id   = l_calendar_id
4524                             AND report_date  >  l_prior_summ_date
4525                             AND report_date  <= l_prior_as_of_date;
4526                        END IF;
4527 
4528 	          END IF;
4529 
4530              ELSE
4531              -- When the dates are not in the same period/month, this code gets the
4532              -- time_id which is greater than the summarized date within its period_id
4533              -- AND the time_id which is less than the as_of_date within its period_id
4534              -- (will only get executed when the period_type > 1)
4535 
4536                   IF l_is_GL IS NULL THEN
4537                        Write2FWKLog('Creating day slice for the last_summ_date period - Enterprise Cal - scheduled');
4538 
4539                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4540                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4541                        SELECT report_date_julian, '-1', '-1', 1 , l_amount_type, l_calendar_type_day
4542                        FROM fii_time_day, dual
4543                        WHERE ent_period_id = l_period_id_s
4544                          AND report_date   > l_summ_date;
4545 
4546                        IF p_parse_prior IS NOT NULL THEN
4547                           Write2FWKLog('Creating day slice for the prior year period of last_summ_date - Enterprise Cal - scheduled');
4548                           INSERT INTO PJI_PMV_TIME_DIM_TMP
4549                           (PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4550                           SELECT report_date_julian, '-1', '-1', 1, l_amount_type, l_calendar_type_day
4551                           FROM fii_time_day
4552                           WHERE ent_period_id = SUBSTR(LPAD(l_period_id_s,10,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(l_period_id_s,10,'0'),4,4)-1)||SUBSTR(LPAD(l_period_id_s,10,'0'),8)
4553                             AND report_date   > l_prior_summ_date;
4554                        END IF;
4555 
4556 
4557                        Write2FWKLog('Creating day slice for the as_of_date period - Enterprise Cal - scheduled');
4558 
4559                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4560                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4561                        SELECT report_date_julian, '-1', '-1', 1 , l_amount_type, l_calendar_type_day
4562                        FROM fii_time_day, dual
4563                        WHERE ent_period_id = l_period_id
4564                          AND report_date  <= l_as_of_date;
4565 
4566                        IF p_parse_prior IS NOT NULL THEN
4567                           Write2FWKLog('Creating day slice for the prior year period of as_of_date - Enterprise Cal - scheduled');
4568                           INSERT INTO PJI_PMV_TIME_DIM_TMP
4569                           (PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4570                           SELECT report_date_julian, '-1', '-1', 1, l_amount_type, l_calendar_type_day
4571                           FROM fii_time_day
4572                           WHERE ent_period_id = SUBSTR(LPAD(l_period_id,10,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(l_period_id,10,'0'),4,4)-1)||SUBSTR(LPAD(l_period_id,10,'0'),8)
4573                             AND report_date  <= l_prior_as_of_date;
4574                        END IF;
4575 
4576                   ELSIF l_is_GL IS NOT NULL THEN
4577                        Write2FWKLog('Creating day slice for the last_summ_date period - Fiscal Cal - scheduled');
4578 
4579                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4580                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4581                        SELECT report_date_julian, '-1', '-1', 1, l_amount_type, l_calendar_type_day
4582                        FROM fii_time_cal_day_mv, dual
4583                        WHERE cal_period_id = l_period_id_s
4584                          AND calendar_id   = l_calendar_id
4585                          AND report_date   > l_summ_date;
4586 
4587                        IF p_parse_prior IS NOT NULL THEN
4588                           Write2FWKLog('Creating day slice for the prior year period of last_summ_date - Fiscal Cal - scheduled');
4589                           INSERT INTO PJI_PMV_TIME_DIM_TMP
4590                           (PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4591                           SELECT report_date_julian, '-1', '-1', 1, l_amount_type, l_calendar_type_day
4592                           FROM fii_time_cal_day_mv
4593                           WHERE cal_period_id = SUBSTR(LPAD(l_period_id_s,10,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(l_period_id_s,10,'0'),4,4)-1)||SUBSTR(LPAD(l_period_id_s,10,'0'),8)
4594                             AND calendar_id   = l_calendar_id
4595                             AND report_date   > l_prior_summ_date;
4596                        END IF;
4597 
4598                        Write2FWKLog('Creating day slice for the as_of_date period - Fiscal Cal - scheduled');
4599 
4600                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4601                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4602                        SELECT report_date_julian, '-1', '-1', 1, l_amount_type, l_calendar_type_day
4603                        FROM fii_time_cal_day_mv, dual
4604                        WHERE cal_period_id = l_period_id
4605                          AND calendar_id   = l_calendar_id
4606                          AND report_date  <= l_as_of_date;
4607 
4608                        IF p_parse_prior IS NOT NULL THEN
4609                           Write2FWKLog('Creating day slice for the prior year period of as_of_date - Fiscal Cal - scheduled');
4610                           INSERT INTO PJI_PMV_TIME_DIM_TMP
4611                           (PRIOR_ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4612                           SELECT report_date_julian, '-1', '-1', 1, l_amount_type, l_calendar_type_day
4613                           FROM fii_time_cal_day_mv
4614                           WHERE cal_period_id = SUBSTR(LPAD(l_period_id,10,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(l_period_id,10,'0'),4,4)-1)||SUBSTR(LPAD(l_period_id,10,'0'),8)
4615                             AND calendar_id   = l_calendar_id
4616                             AND report_date  <= l_prior_as_of_date;
4617                        END IF;
4618 
4619 	          END IF;
4620 
4621              END IF;
4622 
4623          END IF;  /* level = 1 */
4624 
4625 
4626 
4627          IF l_level >= 32 THEN
4628 
4629              -- When the dates are in the same quarter, this code gets the
4630              -- time_id of the periods/months between those two dates's
4631              -- period start dates.
4632              IF l_qtr_id = l_qtr_id_s THEN
4633 
4634                   IF l_is_GL IS NULL THEN
4635                        Write2FWKLog('Creating period slice for between the two dates periods - Enterprise Cal - scheduled');
4636 
4637                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4638                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4639                        SELECT ent_period_id, '-1', '-1', 32 , l_amount_type, l_calendar_type_sum
4640                        FROM fii_time_ent_period, dual
4641                        WHERE ent_qtr_id    = l_qtr_id
4642                          AND start_date    < l_period_start_date
4643                          AND start_date    > l_period_start_date_s;
4644 
4645                   ELSIF l_is_GL IS NOT NULL THEN
4646                        Write2FWKLog('Creating period slice for between the two dates periods - Fiscal Cal - scheduled');
4647 
4648                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4649                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4650                        SELECT cal_period_id, '-1', '-1', 32 , l_amount_type,  l_calendar_type_sum
4651                        FROM fii_time_cal_period, dual
4652                        WHERE cal_qtr_id    = l_qtr_id_s
4653                          AND calendar_id   = l_calendar_id
4654                          AND start_date    < l_period_start_date
4655                          AND start_date    > l_period_start_date_s;
4656 
4657 	          END IF;
4658 
4659              ELSE
4660              -- When the dates are not in the same quarter, this code gets the time_id of
4661              -- the periods which is greater than the summarized date's period_start_date
4662              -- within its quarter_id AND the time_id which is less than the as_of_date's
4663              -- period_start_date within its quarter_id
4664              -- (will only get executed when the period_type > 32)
4665 
4666                   IF l_is_GL IS NULL THEN
4667                        Write2FWKLog('Creating period slice for the last_summ_date quarter - Enterprise Cal - scheduled');
4668 
4669                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4670                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4671                        SELECT ent_period_id, '-1', '-1', 32 , l_amount_type, l_calendar_type_sum
4672                        FROM fii_time_ent_period, dual
4673                        WHERE ent_qtr_id    = l_qtr_id_s
4674                          AND start_date    > l_period_start_date_s;
4675 
4676                        Write2FWKLog('Creating period slice for the as_of_date quarter - Enterprise Cal - scheduled');
4677 
4678                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4679                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4680                        SELECT ent_period_id, '-1', '-1', 32 , l_amount_type, l_calendar_type_sum
4681                        FROM fii_time_ent_period, dual
4682                        WHERE ent_qtr_id    = l_qtr_id
4683                          AND start_date    < l_period_start_date;
4684 
4685                   ELSIF l_is_GL IS NOT NULL THEN
4686                        Write2FWKLog('Creating period slice for the last_summ_date quarter - Fiscal Cal - scheduled');
4687 
4688                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4689                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4690                        SELECT cal_period_id, '-1', '-1', 32 , l_amount_type, l_calendar_type_sum
4691                        FROM fii_time_cal_period, dual
4692                        WHERE cal_qtr_id    = l_qtr_id_s
4693                          AND calendar_id   = l_calendar_id
4694                          AND start_date    > l_period_start_date_s;
4695 
4696                        Write2FWKLog('Creating period slice for the as_of_date quarter - Fiscal Cal - scheduled');
4697 
4698                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4699                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4700                        SELECT cal_period_id, '-1', '-1', 32 , l_amount_type, l_calendar_type_sum
4701                        FROM fii_time_cal_period, dual
4702                        WHERE cal_qtr_id    = l_qtr_id
4703                          AND calendar_id   = l_calendar_id
4704                          AND start_date    < l_period_start_date;
4705 
4706 	          END IF;
4707 
4708              END IF;
4709 
4710          END IF; /* level = 32 */
4711 
4712 
4713          IF l_level >= 64 THEN
4714 
4715              -- When the dates are in the same year, this code gets the
4716              -- time_id of the quarters between those two dates's quarter
4717              -- start_dates.
4718              IF l_year_id = l_year_id_s THEN
4719 
4720                   IF l_is_GL IS NULL THEN
4721                        Write2FWKLog('Creating quarter slice for between the two dates quarters - Enterprise Cal - scheduled');
4722 
4723                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4724                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4725                        SELECT ent_qtr_id, '-1', '-1', 64 , l_amount_type, l_calendar_type_sum
4726                        FROM fii_time_ent_qtr, dual
4727                        WHERE ent_year_id   = l_year_id
4728                          AND start_date    < l_qtr_start_date
4729                          AND start_date    > l_qtr_start_date_s;
4730 
4731                   ELSIF l_is_GL IS NOT NULL THEN
4732                        Write2FWKLog('Creating quarter slice for between the two dates quarters - Fiscal Cal - scheduled');
4733 
4734                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4735                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4736                        SELECT cal_qtr_id, '-1', '-1', 64 , l_amount_type, l_calendar_type_sum
4737                        FROM fii_time_cal_qtr, dual
4738                        WHERE cal_year_id   = l_year_id
4739                          AND calendar_id   = l_calendar_id
4740                          AND start_date    < l_qtr_start_date
4741                          AND start_date    > l_qtr_start_date_s;
4742 
4743                   END IF;
4744 
4745              ELSE
4746              -- When the dates are not in the same year, this code gets the time_id of
4747              -- the quarters which is greater than the summarized date's quarter_start_date
4748              -- within its year_id AND the time_id which is less than the as_of_date's
4749              -- quarter_start_date within its year_id
4750              -- (will only get executed when the period_type > 64)
4751 
4752                   IF l_is_GL IS NULL THEN
4753                        Write2FWKLog('Creating quarter slice for the last_summ_date year - Enterprise Cal - scheduled');
4754 
4755                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4756                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4757                        SELECT ent_qtr_id, '-1', '-1', 64 , l_amount_type, l_calendar_type_sum
4758                        FROM fii_time_ent_qtr, dual
4759                        WHERE ent_year_id   = l_year_id_s
4760                          AND start_date    > l_qtr_start_date_s;
4761 
4762                        Write2FWKLog('Creating quarter slice for the as_of_date year - Enterprise Cal - scheduled');
4763 
4764                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4765                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4766                        SELECT ent_qtr_id, '-1', '-1', 64 , l_amount_type, l_calendar_type_sum
4767                        FROM fii_time_ent_qtr, dual
4768                        WHERE ent_year_id   = l_year_id
4769                          AND start_date    < l_qtr_start_date;
4770 
4771 
4772                   ELSIF l_is_GL IS NOT NULL THEN
4773                        Write2FWKLog('Creating quarter slice for the last_summ_date year - Fiscal Cal - scheduled');
4774 
4775                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4776                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4777                        SELECT cal_qtr_id, '-1', '-1', 64 , l_amount_type, l_calendar_type_sum
4778                        FROM fii_time_cal_qtr, dual
4779                        WHERE cal_year_id   = l_year_id_s
4780                          AND calendar_id   = l_calendar_id
4781                          AND start_date    > l_qtr_start_date_s;
4782 
4783                        Write2FWKLog('Creating quarter slice for the as_of_date year - Fiscal Cal - scheduled');
4784 
4785                        INSERT INTO PJI_PMV_TIME_DIM_TMP
4786                        (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4787                        SELECT cal_qtr_id, '-1', '-1', 64 , l_amount_type, l_calendar_type_sum
4788                        FROM fii_time_cal_qtr, dual
4789                        WHERE cal_year_id   = l_year_id
4790                          AND calendar_id   = l_calendar_id
4791                          AND start_date    < l_qtr_start_date;
4792 
4793                   END IF;
4794 
4795              END IF;
4796 
4797          END IF; /* level = 64 */
4798 
4799 
4800          IF l_level >= 128 THEN
4801 
4802              -- When the level is 128, this code gets the time_ids
4803              -- of the years between those two dates's year start_dates.
4804 
4805              IF l_is_GL IS NULL THEN
4806                    Write2FWKLog('Creating year slice for between the two dates years - Enterprise Cal - scheduled');
4807 
4808                    INSERT INTO PJI_PMV_TIME_DIM_TMP
4809                    (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4810                    SELECT ent_year_id, '-1', '-1', 128 , l_amount_type, l_calendar_type_sum
4811                    FROM fii_time_ent_year, dual
4812                    WHERE start_date < l_year_start_date
4813                      AND start_date > l_year_start_date_s;
4814 
4815              ELSIF l_is_GL IS NOT NULL THEN
4816                    Write2FWKLog('Creating year slice for between the two dates years - Fiscal Cal - scheduled');
4817 
4818                    INSERT INTO PJI_PMV_TIME_DIM_TMP
4819                    (ID, NAME, ORDER_BY_ID, PERIOD_TYPE, AMOUNT_TYPE, CALENDAR_TYPE)
4820                    SELECT cal_year_id, '-1', '-1', 128 , l_amount_type, l_calendar_type_sum
4821                    FROM fii_time_cal_year, dual
4822                    WHERE calendar_id  = l_calendar_id
4823                      AND start_date   < l_year_start_date
4824                      AND start_date   > l_year_start_date_s;
4825 	     END IF;
4826 
4827          END IF; /* level = 128 */
4828 
4829      END IF; /* l_process */
4830 
4831 
4832      IF p_parse_prior IS NOT NULL THEN
4833 
4834           Write2FWKLog('Parse Prior is set.');
4835           UPDATE PJI_PMV_TIME_DIM_TMP
4836           SET PRIOR_ID =
4837              (CASE period_type
4838                 WHEN 128 THEN SUBSTR(LPAD(ID,7,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(ID,7,'0'),4,4)-1)
4839                 WHEN 64  THEN SUBSTR(LPAD(ID,8,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(ID,8,'0'),4,4)-1)||SUBSTR(LPAD(ID,8,'0'),8)
4840                 WHEN 32  THEN SUBSTR(LPAD(ID,10,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(ID,10,'0'),4,4)-1)||SUBSTR(LPAD(ID,10,'0'),8)
4841                 WHEN 16  THEN SUBSTR(LPAD(ID,11,'0'),1,3)||TO_CHAR(SUBSTR(LPAD(ID,11,'0'),4,4)-1)||SUBSTR(LPAD(ID,11,'0'),8)
4842                 END)
4843 	  WHERE period_type<>1;
4844 
4845           Write2FWKLog('Prior ID is updated.');
4846      END IF;
4847 
4848      Write2FWKLog('Exiting Convert_Expected_Time...');
4849 
4850 EXCEPTION
4851      WHEN OTHERS THEN
4852           g_SQL_Error_Msg:=SQLERRM();
4853           Write2FWKLog(g_SQL_Error_Msg, 3);
4854           RAISE;
4855 
4856 END Convert_Expected_Time;
4857 
4858 
4859 	/*
4860 	** The following API is coded by jeff.
4861 	*/
4862 	Procedure Convert_Time_AVL_Trend(p_AS_OF_DATE NUMBER)
4863 	AS
4864 	l_week_id           NUMBER;
4865 	l_Week_Name    VARCHAR(100);
4866 	l_End_Date         DATE;
4867 	BEGIN
4868 		DELETE PJI_PMV_TIME_DIM_TMP;
4869 		SELECT
4870 			day.week_id
4871 			, wek.name
4872 			, wek.end_date
4873 		INTO  l_Week_Id,
4874 			l_Week_Name,
4875 			l_End_Date
4876 		FROM  fii_time_day day
4877 			, fii_time_week wek
4878 		WHERE
4879 			report_date = to_date(p_as_of_date,'j') -- As Of Date
4880 			AND wek.week_id = day.week_id;
4881 
4882 
4883 		INSERT INTO PJI_PMV_TIME_DIM_TMP
4884 		(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, CALENDAR_TYPE)
4885 		SELECT report_date_julian
4886 		, l_Week_Name, l_Week_Id, 1, 'C' FROM fii_time_day
4887 		WHERE week_id = l_Week_Id
4888 		AND report_date>=to_date(p_as_of_date,'j');
4889 
4890 		INSERT INTO PJI_PMV_TIME_DIM_TMP
4891 		(ID, NAME, ORDER_BY_ID, PERIOD_TYPE, CALENDAR_TYPE)
4892 		SELECT id, name, id, 16, 'C'
4893 		FROM (
4894 		SELECT week_id id,name name FROM fii_time_week
4895 		WHERE end_date>l_End_Date
4896 		ORDER BY 1 ASC)
4897 		WHERE ROWNUM < 13;
4898 	END Convert_Time_AVL_Trend;
4899 
4900 	/*
4901 	** ----------------------------------------------------------
4902 	** Procedure: Init
4903 	** This procedure caches the dimension and measure defination
4904 	** for the given region. This procedure has to be called
4905 	** before any other program units are called.
4906 	** ----------------------------------------------------------
4907 	*/
4908 	Procedure Init (p_Region_Code IN VARCHAR2)
4909 	IS
4910 	BEGIN
4911 		IF p_PA_DEBUG_MODE = 'Y' THEN
4912 			Write2FWKLog('Entering Init...','Init');
4913 		END IF;
4914 
4915 		IF p_Region_code IS NOT NULL THEN
4916 			IF p_PA_DEBUG_MODE = 'Y' THEN
4917 				Write2FWKLog('Before bulk collecting dimensions meta data for the specified report...');
4918 			END IF;
4919 
4920 			SELECT attribute_code attribute_code
4921 			, attribute2 dimension_level
4922 			, attribute3      base_column
4923 			, attribute15     view_by_table
4924 			BULK COLLECT INTO
4925 			  G_dimension_codes_tab
4926 			, G_dimension_level_tab
4927 			, G_dim_base_column_tab
4928 			, G_view_by_table_tab
4929 			FROM
4930 			AK_REGION_ITEMS
4931 			WHERE region_code = p_Region_Code
4932 			AND region_application_id = 1292
4933 			AND attribute1 IS NOT NULL;
4934 
4935 			IF p_PA_DEBUG_MODE = 'Y' THEN
4936 				Write2FWKLog('After bulk collecting dimensions meta data for the specified report...');
4937 				Write2FWKLog('Before bulk collecting measure meta data for the specified report...');
4938 			END IF;
4939 
4940 			SELECT attribute_code attribute_code
4941 			, attribute3      base_column
4942 			, attribute4      attribute4
4943 			, attribute9      aggregation
4944 			BULK COLLECT INTO
4945 			  G_attribute_code_tab
4946 			, G_msr_base_column_tab
4947 			, G_attribute4_tab
4948 			, G_aggregation_tab
4949 			FROM
4950 			AK_REGION_ITEMS
4951 			WHERE region_code = p_Region_Code
4952 			AND region_application_id = 1292
4953 			AND attribute9 IS NOT NULL
4954 			ORDER BY display_sequence;
4955 
4956 			IF p_PA_DEBUG_MODE = 'Y' THEN
4957 				Write2FWKLog('After bulk collecting measure meta data for the specified report...');
4958 			END IF;
4959 
4960 		END IF;
4961 		IF p_PA_DEBUG_MODE = 'Y' THEN
4962 			Write2FWKLog('Exiting Init...');
4963 		END IF;
4964 	EXCEPTION
4965 		WHEN OTHERS THEN
4966 			g_SQL_Error_Msg:=SQLERRM();
4967 			IF p_PA_DEBUG_MODE = 'Y' THEN
4968 				Write2FWKLog(g_SQL_Error_Msg, 3);
4969 			END IF;
4970 			RAISE;
4971 	END Init;
4972 
4973 	/*
4974 	** ----------------------------------------------------------
4975 	** Function: Get_ViewBY_Base_Column
4976 	** This Function traverses thru the cached copy of dimensions
4977 	** and returns the view by columns name. The function also
4978 	** caches the view by information into global variables.
4979 	** Therefore, care has to be taken to not to reference these
4980 	** global variables without calling this api.
4981 	** ----------------------------------------------------------
4982 	*/
4983 /*
4984 	Function Get_ViewBY_Base_Column(p_view_by IN VARCHAR2) RETURN VARCHAR2
4985 	IS
4986 	BEGIN
4987 		Write2FWKLog('Entering Get_ViewBY_Base_Column...','Get_ViewBY_Base_Column');
4988 		FOR i IN G_dimension_level_tab.first..G_dimension_level_tab.last LOOP
4989 			IF (G_dimension_level_tab(i) = p_view_by) THEN
4990 				G_ViewBY:=G_dimension_level_tab(i);
4991 				G_ViewBY_Column_Name:=G_dim_base_column_tab(i);
4992 				G_ViewBY_Table_Name:=G_view_by_table_tab(i);
4993 				Write2FWKLog('G_ViewBY :'||G_ViewBY);
4994 				Write2FWKLog('G_ViewBY_Column_Name :'||G_ViewBY_Column_Name);
4995 				Write2FWKLog('G_ViewBY_Table_Name :'||G_ViewBY_Table_Name);
4996 			END IF;
4997 		END LOOP;
4998 		RETURN G_ViewBY_Column_Name;
4999 		Write2FWKLog('Exiting Get_ViewBY_Base_Column...');
5000 	EXCEPTION
5001 		WHEN OTHERS THEN
5002 			g_SQL_Error_Msg:=SQLERRM();
5003 			Write2FWKLog(g_SQL_Error_Msg, 3);
5004 			RAISE;
5005 	END Get_ViewBY_Base_Column;
5006 */
5007 
5008 	/* New Revision
5009 	** ----------------------------------------------------------
5010 	** Function: Get_ViewBY_Base_Column
5011 	** This Function traverses thru the cached copy of dimensions
5012 	** and returns the view by columns name. The function also
5013 	** caches the view by information into global variables.
5014 	** Therefore, care has to be taken to not to reference these
5015 	** global variables without calling this api.
5016 	** ----------------------------------------------------------
5017 	*/
5018 
5019 	Function Get_ViewBY_Base_Column(p_view_by IN VARCHAR2) RETURN VARCHAR2
5020 	IS
5021 	BEGIN
5022 		IF p_PA_DEBUG_MODE = 'Y' THEN
5023 			Write2FWKLog('Entering Get_ViewBY_Base_Column...'||p_view_by,'Get_ViewBY_Base_Column'||p_view_by);
5024 		END IF;
5025 
5026 		G_ViewBY := p_view_by;
5027 		CASE p_view_by
5028 		WHEN 'ORGANIZATION+PJI_ORGANIZATIONS' THEN
5029 			G_ViewBY_Column_Name  := 'ORGANIZATION_ID';
5030 			G_ViewBY_Table_Name  := 'PJI_ORGANIZATIONS_V';
5031 		WHEN 'PROJECT CLASSIFICATION+CLASS_CODE' THEN
5032 			G_ViewBY_Column_Name  := 'PROJECT_CLASS_ID';
5033 			G_ViewBY_Table_Name := 'PJI_CLASS_CODES_V';
5034 		WHEN 'PROJECT EXPENDITURE TYPE+PJI_EXP_CATEGORIES' THEN
5035 			G_ViewBY_Column_Name  := 'EXPENDITURE_CATEGORY';
5036 			G_ViewBY_Table_Name := 'PJI_EXP_CATEGORIES_V';
5037 		WHEN 'PROJECT EXPENDITURE TYPE+PJI_EXP_TYPES' THEN
5038 			G_ViewBY_Column_Name  := 'EXPENDITURE_TYPE_ID';
5039 			G_ViewBY_Table_Name := 'PJI_EXP_TYPES_V';
5040 		WHEN 'PROJECT REVENUE CATEGORY+PJI_REVENUE_CATEGORIES' THEN
5041 			G_ViewBY_Column_Name  := 'REVENUE_CATEGORY';
5042 			G_ViewBY_Table_Name := 'PJI_REVENUE_CATEGORIES_V';
5043 		WHEN 'PROJECT REVENUE CATEGORY+PJI_EXP_EVT_TYPES' THEN
5044 			G_ViewBY_Column_Name  := 'REVENUE_TYPE_ID';
5045 			G_ViewBY_Table_Name := 'PJI_EXP_EVT_TYPES_V';
5046 		WHEN 'PROJECT JOB LEVEL+PJI_JOB_LEVELS' THEN
5047 			G_ViewBY_Column_Name := 'JOB_LEVEL_ID';
5048 			G_ViewBY_Table_Name := 'PJI_JOB_LEVELS_V';
5049 		WHEN 'PROJECT WORK TYPE+PJI_UTIL_CATEGORIES' THEN
5050 			G_ViewBY_Column_Name := 'UTIL_CATEGORY_ID';
5051 			G_ViewBY_Table_Name := 'PJI_UTIL_CATEGORIES_V';
5052 		WHEN 'PROJECT WORK TYPE+PJI_WORK_TYPES' THEN
5053 			G_ViewBY_Column_Name := 'WORK_TYPE_ID';
5054 			G_ViewBY_Table_Name := 'PJI_WORK_TYPES_V';
5055 		WHEN 'PROJECT+PJI_PROJECTS' THEN
5056 			G_ViewBY_Column_Name := 'PROJECT_NAME';
5057 			G_ViewBY_Table_Name := 'PJI_PROJECTS_V';
5058 		WHEN 'TIME+FII_TIME_CAL_PERIOD' THEN
5059 			G_ViewBY_Column_Name := 'TIME_ID';
5060 			G_ViewBY_Table_Name := 'FII_TIME_CAL_PERIOD_V';
5061 		WHEN 'TIME+FII_TIME_CAL_QTR' THEN
5062 			G_ViewBY_Column_Name := 'TIME_ID';
5063 			G_ViewBY_Table_Name := 'FII_TIME_CAL_QTR_V';
5064 		WHEN 'TIME+FII_TIME_CAL_YEAR' THEN
5065 			G_ViewBY_Column_Name := 'TIME_ID';
5066 			G_ViewBY_Table_Name := 'FII_TIME_CAL_YEAR_V';
5067 		WHEN 'TIME+FII_TIME_ENT_PERIOD' THEN
5068 			G_ViewBY_Column_Name := 'TIME_ID';
5069 			G_ViewBY_Table_Name := 'FII_TIME_ENT_PERIOD_V';
5070 		WHEN 'TIME+FII_TIME_ENT_QTR' THEN
5071 			G_ViewBY_Column_Name := 'TIME_ID';
5072 			G_ViewBY_Table_Name := 'FII_TIME_ENT_QTR_V';
5073 		WHEN 'TIME+FII_TIME_ENT_YEAR' THEN
5074 			G_ViewBY_Column_Name := 'TIME_ID';
5075 			G_ViewBY_Table_Name := 'FII_TIME_ENT_YEAR_V';
5076 		WHEN 'TIME+FII_TIME_WEEK' THEN
5077 			G_ViewBY_Column_Name := 'TIME_ID';
5078 			G_ViewBY_Table_Name := 'FII_TIME_WEEK_V';
5079 		WHEN 'TIME+PJI_TIME_PA_PERIOD' THEN
5080 			G_ViewBY_Column_Name := 'TIME_ID';
5081 			G_ViewBY_Table_Name := 'PJI_TIME_PA_PERIOD_V';
5082 		END CASE;
5083 
5084 		IF p_PA_DEBUG_MODE = 'Y' THEN
5085 			Write2FWKLog('G_ViewBY :'||G_ViewBY);
5086 			Write2FWKLog('G_ViewBY_Column_Name :'||G_ViewBY_Column_Name);
5087 			Write2FWKLog('G_ViewBY_Table_Name :'||G_ViewBY_Table_Name);
5088 			Write2FWKLog('Exiting Get_ViewBY_Base_Column...');
5089 		END IF;
5090 
5091 		RETURN G_ViewBY_Column_Name;
5092 	EXCEPTION
5093 		WHEN OTHERS THEN
5094 			g_SQL_Error_Msg:=SQLERRM();
5095 			IF p_PA_DEBUG_MODE = 'Y' THEN
5096 				Write2FWKLog(g_SQL_Error_Msg, 3);
5097 			END IF;
5098 			RAISE;
5099 	END Get_ViewBY_Base_Column;
5100 
5101 
5102 	/*
5103 	** ----------------------------------------------------------
5104 	** Function: Construct_SELECT_Clause
5105 	** This Function constructs the select statement to be
5106 	** returned to PMV. All unknown variables (at this point of
5107 	** time) are replaced with patterns. These patterns are
5108 	** later replaced with actual values in the Generate_SQL API.
5109 	** ----------------------------------------------------------
5110 	*/
5111 	Function Construct_SELECT_Clause(p_View_BY IN VARCHAR2)
5112 	RETURN VARCHAR2 IS
5113 	l_Buffer	VARCHAR2(200);
5114 	l_ViewBY_Indentifier	VARCHAR2(1);
5115 	l_Select_List	VARCHAR2(3200):=' SELECT ';
5116 	BEGIN
5117 		IF p_PA_DEBUG_MODE = 'Y' THEN
5118 			Write2FWKLog('Entering Construct_Select_Clause...','Construct_Select_Clause');
5119 		END IF;
5120 
5121 		IF p_View_BY IS NOT NULL THEN
5122 			IF p_PA_DEBUG_MODE = 'Y' THEN
5123 				Write2FWKLog('Determining Viewby base column...');
5124 			END IF;
5125 			l_Buffer:=Get_ViewBY_Base_Column(p_View_BY);
5126 			IF p_PA_DEBUG_MODE = 'Y' THEN
5127 				Write2FWKLog('Done determining Viewby base column. Value : '||l_Buffer);
5128 			END IF;
5129 		END IF;
5130 
5131 		IF l_Buffer IS NOT NULL THEN
5132 			l_ViewBY_Indentifier:='Y';
5133 			l_Select_List:=l_Select_List||'FACT.'||l_Buffer||' "VIEWBY" ';
5134 		ELSE
5135 			l_Select_List:=l_Select_List||'1 "CONSTANT" ';
5136 		END IF;
5137 
5138 		FOR i IN G_attribute_code_tab.first..G_attribute_code_tab.last LOOP
5139 			IF (G_attribute_code_tab(i) = 'VIEWBY' AND l_ViewBY_Indentifier IS NOT NULL ) THEN
5140 				NULL;
5141 			ELSE
5142 				IF G_attribute_code_tab(i) LIKE 'PJI_REP_URL%' THEN
5143 					l_Buffer:=', FACT.'||G_attribute_code_tab(i)||' ';
5144 				ELSIF G_attribute_code_tab(i) LIKE 'PJI_REP_TOTAL%' THEN
5145 					l_Buffer:=', FACT.'||G_attribute4_tab(i)||' "'||G_attribute_code_tab(i)||'"';
5146 				ELSE
5147 					l_Buffer:=', FACT.'||G_msr_base_column_tab(i)||' ';
5148 				END IF;
5149 				IF G_attribute_code_tab(i) NOT LIKE 'PJI_REP_TOTAL%' THEN
5150 					l_Select_List:=l_Select_List||l_Buffer||' "'||G_attribute_code_tab(i)||'"';
5151 				ELSE
5152 					l_Select_List:=l_Select_List||l_Buffer;
5153 				END IF;
5154 			END IF;
5155 		END LOOP;
5156 		l_Select_List:=l_Select_List||' FROM TABLE(<<DEV_PL/SQL_EXTENSION>>(<<PL/SQL PARAMS>>)) FACT ';
5157 
5158 		IF (p_View_BY NOT LIKE '%TIME%' OR l_ViewBY_Indentifier IS NULL) THEN
5159 			IF p_PA_DEBUG_MODE = 'Y' THEN
5160 				Write2FWKLog('Generating the order by clause.');
5161 			END IF;
5162 			l_Select_List:=l_Select_List||' &ORDER_BY_CLAUSE ';
5163 		END IF;
5164 
5165 		IF p_PA_DEBUG_MODE = 'Y' THEN
5166 			Write2FWKLog('l_Select_List :'||l_Select_List);
5167 			Write2FWKLog('Exiting Construct_Select_Clause...');
5168 		END IF;
5169 
5170 		RETURN l_Select_List;
5171 	EXCEPTION
5172 		WHEN OTHERS THEN
5173 			g_SQL_Error_Msg:=SQLERRM();
5174 			IF p_PA_DEBUG_MODE = 'Y' THEN
5175 				Write2FWKLog(g_SQL_Error_Msg, 3);
5176 			END IF;
5177 			RAISE;
5178 	END Construct_Select_Clause;
5179 
5180 	/* New Revision
5181 	** ----------------------------------------------------------
5182 	** Function: Construct_SELECT_Clause
5183 	** This Function constructs the select statement to be
5184 	** returned to PMV. All unknown variables (at this point of
5185 	** time) are replaced with patterns. These patterns are
5186 	** later replaced with actual values in the Generate_SQL API.
5187 	** ----------------------------------------------------------
5188 	*/
5189 	Function Construct_SELECT_Clause(p_View_BY IN VARCHAR2, p_Select_List IN VARCHAR2)
5190 	RETURN VARCHAR2 IS
5191 	l_Buffer	VARCHAR2(200);
5192 	l_ViewBY_Indentifier	VARCHAR2(1);
5193 	l_Select_List	VARCHAR2(3200):=' SELECT ';
5194 	BEGIN
5195 		IF p_PA_DEBUG_MODE = 'Y' THEN
5196 			Write2FWKLog('Entering Construct_Select_Clause...','Construct_Select_Clause');
5197 		END IF;
5198 
5199 		IF p_View_BY IS NOT NULL THEN
5200 			IF p_PA_DEBUG_MODE = 'Y' THEN
5201 				Write2FWKLog('Determining Viewby base column...');
5202 			END IF;
5203 			l_Buffer:=Get_ViewBY_Base_Column(p_View_BY);
5204 			IF p_PA_DEBUG_MODE = 'Y' THEN
5205 				Write2FWKLog('Done determining Viewby base column. Value : '||l_Buffer);
5206 			END IF;
5207 		END IF;
5208 
5209 		IF l_Buffer IS NOT NULL THEN
5210 			l_ViewBY_Indentifier:='Y';
5211 			l_Select_List:=l_Select_List||'FACT.'||l_Buffer||' "VIEWBY" ';
5212 		ELSE
5213 			l_Select_List:=l_Select_List||'1 "CONSTANT" ';
5214 		END IF;
5215 
5216 		l_Select_List:=l_Select_List||', '||p_Select_List;
5217 
5218 		l_Select_List:=l_Select_List||' FROM TABLE(<<DEV_PL/SQL_EXTENSION>>(<<PL/SQL PARAMS>>)) FACT ';
5219 
5220 		IF (p_View_BY NOT LIKE '%TIME%' OR l_ViewBY_Indentifier IS NULL) THEN
5221 			IF p_PA_DEBUG_MODE = 'Y' THEN
5222 				Write2FWKLog('Generating the order by clause.');
5223 			END IF;
5224 			l_Select_List:=l_Select_List||' &ORDER_BY_CLAUSE ';
5225 		END IF;
5226 
5227 		IF p_PA_DEBUG_MODE = 'Y' THEN
5228 			Write2FWKLog('l_Select_List :'||l_Select_List);
5229 			Write2FWKLog('Exiting Construct_Select_Clause...');
5230 		END IF;
5231 
5232 		RETURN l_Select_List;
5233 
5234 	EXCEPTION
5235 		WHEN OTHERS THEN
5236 			g_SQL_Error_Msg:=SQLERRM();
5237 			IF p_PA_DEBUG_MODE = 'Y' THEN
5238 				Write2FWKLog(g_SQL_Error_Msg, 3);
5239 			END IF;
5240 			RAISE;
5241 	END Construct_Select_Clause;
5242 
5243 	/*
5244 	** ----------------------------------------------------------
5245 	** Function: Generate_SQL
5246 	** This Function generates the select statement based on the
5247 	** parameters selected by the user.
5248 	** ----------------------------------------------------------
5249 	*/
5250 	Procedure Generate_SQL(p_page_parameter_tbl	IN 	BIS_PMV_PAGE_PARAMETER_TBL
5251 					, p_SQL_Statement		IN OUT NOCOPY VARCHAR2
5252 					, p_PMV_Output		IN OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL
5253 					, p_Region_Code		IN 	VARCHAR2
5254 					, p_PLSQL_Driver 		IN	VARCHAR2
5255 					, p_PLSQL_Driver_Params 	IN	VARCHAR2
5256 					)
5257 	IS
5258 	l_Sql_Statement		VARCHAR2(3200);
5259 	l_PMV_Output		BIS_QUERY_ATTRIBUTES_TBL:=BIS_QUERY_ATTRIBUTES_TBL();
5260 	l_PMV_Rec			BIS_QUERY_ATTRIBUTES;
5261 	l_PMV_Rec_Ctr		NUMBER:=1;
5262 	l_Exists_Flag		VARCHAR2(1):='N';
5263 	l_Period_Type_Found	VARCHAR2(1);
5264 	l_View_BY_Found		VARCHAR2(1);
5265 
5266 	l_View_BY			VARCHAR2(150);
5267 	l_Report_Name		VARCHAR2(150):=p_Region_Code;
5268 	l_PLSQL_Driver		VARCHAR2(150):=p_PLSQL_Driver;
5269 	l_PLSQL_Driver_Params	VARCHAR2(1000):=p_PLSQL_Driver_Params;
5270 
5271 	l_Report_Parameters	VARCHAR2(3000);
5272 	l_Substitute_Var		VARCHAR2(150);
5273 	l_View_BY_Pattern		VARCHAR2(3);
5274 	l_Parameter_Pattern	VARCHAR2(150);
5275 
5276 	BEGIN
5277 		IF p_PA_DEBUG_MODE = 'Y' THEN
5278 			PJI_UTILS.RESET_SSWA_SESSION_CACHE;
5279 			Write2FWKLog('Entering Generate_SQL...','Generate_SQL');
5280 		END IF;
5281 
5282 		l_PMV_Rec:=BIS_PMV_PARAMETERS_PUB.INITIALIZE_QUERY_TYPE;
5283 
5284 		IF p_PA_DEBUG_MODE = 'Y' THEN
5285 			Write2FWKLog('Before Calling Init...','Generate_SQL');
5286 		END IF;
5287 		Init(l_Report_Name);
5288 		IF p_PA_DEBUG_MODE = 'Y' THEN
5289 			Write2FWKLog('After Calling Init...','Generate_SQL');
5290 		END IF;
5291 
5292 		FOR i IN p_page_parameter_tbl.first..p_page_parameter_tbl.last LOOP
5293 			IF p_page_parameter_tbl(i).parameter_name = 'VIEW_BY' THEN
5294 				IF p_PA_DEBUG_MODE = 'Y' THEN
5295 					Write2FWKLog('User specified the view by for the report. ViewBY :'||p_page_parameter_tbl(i).parameter_value,'Generate_SQL');
5296 				END IF;
5297 				l_View_By := p_page_parameter_tbl(i).parameter_value;
5298 				IF p_PA_DEBUG_MODE = 'Y' THEN
5299 					Write2FWKLog('l_ViewBY :'||l_View_By,'Generate_SQL');
5300 				END IF;
5301 			END IF;
5302 		END LOOP;
5303 
5304 		IF p_PA_DEBUG_MODE = 'Y' THEN
5305 			Write2FWKLog('Before calling Construct_SELECT_Clause.','Generate_SQL');
5306 		END IF;
5307 		l_Sql_Statement:=Construct_SELECT_Clause(l_View_BY);
5308 		IF p_PA_DEBUG_MODE = 'Y' THEN
5309 			Write2FWKLog('After calling Construct_SELECT_Clause.','Generate_SQL');
5310 		END IF;
5311 
5312 		IF l_View_BY IS NOT NULL THEN
5313 			l_PMV_Rec.attribute_name:=BIS_PMV_PARAMETERS_PUB.VIEW_BY_VALUE;
5314 			l_PMV_Rec.attribute_value:=l_View_BY;
5315 			l_PMV_Rec.attribute_type:=BIS_PMV_PARAMETERS_PUB.VIEW_BY_TYPE;
5316 
5317 			l_PMV_Output.EXTEND();
5318 			l_PMV_Output(l_PMV_Rec_Ctr):=l_PMV_Rec;
5319 
5320 			l_PMV_Rec_Ctr:=l_PMV_Rec_Ctr+1;
5321 		END IF;
5322 
5323 		l_Sql_Statement:=REPLACE(l_Sql_Statement,'<<DEV_PL/SQL_EXTENSION>>',l_PLSQL_Driver);
5324 
5325 		IF p_PA_DEBUG_MODE = 'Y' THEN
5326 			Write2FWKLog('Before parsing all the parameters.','Generate_SQL');
5327 		END IF;
5328 		FOR i IN p_page_parameter_tbl.first..p_page_parameter_tbl.last LOOP
5329 
5330 			l_Report_Parameters:=NULL;
5331 			l_Substitute_Var:=NULL;
5332 			l_Parameter_Pattern:=p_page_parameter_tbl(i).parameter_name;
5333 
5334 			IF p_page_parameter_tbl(i).parameter_name LIKE 'TIME+%FROM' AND p_page_parameter_tbl(i).parameter_name NOT LIKE 'TIME+%PFROM' THEN
5335 				l_Parameter_Pattern:='START_TIME';
5336 				l_Substitute_Var:='PJI_START_TIME';
5337 				l_Report_Parameters:=TO_CHAR(p_page_parameter_tbl(i).period_date,'j');
5338 			ELSIF p_page_parameter_tbl(i).parameter_name LIKE 'TIME+%TO' AND p_page_parameter_tbl(i).parameter_name NOT LIKE 'TIME+%PTO' THEN
5339 				l_Parameter_Pattern:='END_TIME';
5340 				l_Substitute_Var:='PJI_END_TIME';
5341 				l_Report_Parameters:=TO_CHAR(p_page_parameter_tbl(i).period_date,'j');
5342 			ELSIF p_page_parameter_tbl(i).parameter_name = 'PERIOD_TYPE' THEN
5343 				l_Substitute_Var:='PJI_PERIOD_TYPE';
5344 				l_Period_Type_Found:='Y';
5345 			ELSIF p_page_parameter_tbl(i).parameter_name = 'TIME_COMPARISON_TYPE' THEN
5346 				l_Substitute_Var:='PJI_TIME_COMPARISON_TYPE';
5347 			ELSIF p_page_parameter_tbl(i).parameter_name = 'VIEW_BY' THEN
5348 				l_Substitute_Var:='PJI_VIEW_BY';
5349 				l_Report_Parameters:=Convert_ViewBY(p_page_parameter_tbl(i).parameter_value);
5350 				l_View_BY_Found:='Y';
5351 			ELSIF p_page_parameter_tbl(i).parameter_name = 'AS_OF_DATE' THEN
5352 				l_Substitute_Var:='PJI_AS_OF_DATE';
5353 				l_Report_Parameters:=TO_CHAR(TO_DATE(p_page_parameter_tbl(i).parameter_value,'DD/MM/YYYY'),'j');
5354 			ELSIF p_page_parameter_tbl(i).parameter_name = 'AVAILABILITY_DAYS+AVAILABILITY_DAYS' THEN
5355 				l_Substitute_Var:='PJI_REP_DIM_32';
5356 			ELSIF p_page_parameter_tbl(i).parameter_name = 'AVAILABILITY_THRESHOLD+AVAILABILITY_THRESHOLD' THEN
5357 				l_Substitute_Var:='PJI_REP_DIM_28';
5358 			ELSIF p_page_parameter_tbl(i).parameter_name = 'AVAILABILITY_TYPE+AVAILABILITY_TYPE' THEN
5359 				l_Substitute_Var:='PJI_REP_DIM_29';
5360 			ELSIF p_page_parameter_tbl(i).parameter_name = 'CURRENCY+FII_CURRENCIES' THEN
5361 				l_Substitute_Var:='PJI_REP_DIM_27';
5362 				l_Report_Parameters:=Convert_Currency_Code(REPLACE(p_page_parameter_tbl(i).parameter_id,''''));
5363 			ELSIF p_page_parameter_tbl(i).parameter_name = 'ORGANIZATION+FII_OPERATING_UNITS' THEN
5364 				l_Substitute_Var:='PJI_REP_DIM_01';
5365 			ELSIF p_page_parameter_tbl(i).parameter_name = 'ORGANIZATION+PJI_ORGANIZATIONS' THEN
5366 				l_Substitute_Var:='PJI_REP_DIM_02';
5367 			ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT CLASSIFICATION+CLASS_CATEGORY' THEN
5368 				l_Substitute_Var:='PJI_REP_DIM_25';
5369 			ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT CLASSIFICATION+CLASS_CODE' THEN
5370 				l_Substitute_Var:='PJI_REP_DIM_26';
5371 			ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT JOB LEVEL+PJI_JOB_LEVELS' THEN
5372 				l_Substitute_Var:='PJI_REP_DIM_24';
5373 			ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT WORK TYPE+PJI_UTIL_CATEGORIES' THEN
5374 				l_Substitute_Var:='PJI_REP_DIM_21';
5375 			ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT WORK TYPE+PJI_WORK_TYPES' THEN
5376 				l_Substitute_Var:='PJI_REP_DIM_22';
5377 			ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT+PJI_PROJECTS' THEN
5378 				l_Substitute_Var:='PJI_REP_DIM_31';
5379 			ELSIF p_page_parameter_tbl(i).parameter_name = 'REV_AT_RISK_FLAG+REV_AT_RISK_FLAG' THEN
5380 				l_Substitute_Var:='PJI_REP_DIM_33';
5381 
5382                         ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT EXPENDITURE TYPE+PJI_EXP_CATEGORIES' THEN
5383                                 l_Substitute_Var:='PJI_REP_DIM_34';
5384                         ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT EXPENDITURE TYPE+PJI_EXP_TYPES' THEN
5385                                 l_Substitute_Var:='PJI_REP_DIM_35';
5386                         ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT REVENUE CATEGORY+PJI_REVENUE_CATEGORIES' THEN
5387                                 l_Substitute_Var:='PJI_REP_DIM_36';
5388                         ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT REVENUE CATEGORY+PJI_EXP_EVT_TYPES' THEN
5389                                 l_Substitute_Var:='PJI_REP_DIM_37';
5390 			END IF;
5391 
5392 			IF l_Report_Parameters IS NULL THEN
5393 				IF p_PA_DEBUG_MODE = 'Y' THEN
5394 					Write2FWKLog('l_Report_Parameters is not set.','Generate_SQL');
5395 				END IF;
5396 				l_Report_Parameters:=REPLACE(p_page_parameter_tbl(i).parameter_id,'''');
5397 				IF p_PA_DEBUG_MODE = 'Y' THEN
5398 					Write2FWKLog('l_Report_Parameters :'||l_Report_Parameters,'Generate_SQL');
5399 				END IF;
5400 			END IF;
5401 
5402 			IF l_Report_Parameters IS NULL OR UPPER(p_page_parameter_tbl(i).parameter_value) = 'ALL' THEN
5403 				IF p_PA_DEBUG_MODE = 'Y' THEN
5404 					Write2FWKLog('l_Report_Parameters is not set in the report or defaulted to all.','Generate_SQL');
5405 				END IF;
5406 				/*
5407 				** Added the extra check to default currency when it is specified as 'All'
5408 				*/
5409 				IF p_page_parameter_tbl(i).parameter_name = 'CURRENCY+FII_CURRENCIES' THEN
5410 					l_Report_Parameters:='G';
5411 				ELSE
5412 					l_Report_Parameters:=NULL;
5413 				END IF;
5414 				IF p_PA_DEBUG_MODE = 'Y' THEN
5415 					Write2FWKLog('l_Report_Parameters :'||l_Report_Parameters,'Generate_SQL');
5416 				END IF;
5417 			END IF;
5418 
5419 			IF p_PA_DEBUG_MODE = 'Y' THEN
5420 				Write2FWKLog('l_Parameter_Name :'||p_page_parameter_tbl(i).parameter_name,'Generate_SQL');
5421 				Write2FWKLog('l_Parameter_Pattern :'||l_Parameter_Pattern,'Generate_SQL');
5422 				Write2FWKLog('l_Report_Parameters :'||l_Report_Parameters,'Generate_SQL');
5423 				Write2FWKLog('l_Substitute_Var :'||l_Substitute_Var,'Generate_SQL');
5424 				Write2FWKLog('Before replacing the driver params.','Generate_SQL');
5425 				Write2FWKLog('l_PLSQL_Driver_Params :'||l_PLSQL_Driver_Params,'Generate_SQL');
5426 			END IF;
5427 
5428 
5429 			IF l_Substitute_Var LIKE 'PJI%' AND l_Substitute_Var IS NOT NULL THEN
5430 				l_Exists_Flag:='N';
5431 
5432 				FOR j in 1..l_PMV_Output.COUNT LOOP
5433 					IF l_PMV_Output(j).attribute_name = ':'||l_Substitute_Var THEN
5434 						l_Exists_Flag:='Y';
5435 					END IF;
5436 				END LOOP;
5437 
5438 				IF l_Exists_Flag = 'N' THEN
5439 					l_PMV_Rec.attribute_name:=':'||l_Substitute_Var;
5440 					l_PMV_Rec.attribute_value:=l_Report_Parameters;
5441 					l_PMV_Rec.attribute_type:=BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
5442 
5443 					IF l_Substitute_Var = 'PJI_AS_OF_DATE' THEN
5444 						l_PMV_Rec.attribute_data_type:=BIS_PMV_PARAMETERS_PUB.INTEGER_BIND;
5445 					ELSE
5446 						l_PMV_Rec.attribute_data_type:=BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
5447 					END IF;
5448 
5449 					l_PMV_Output.EXTEND();
5450 					l_PMV_Output(l_PMV_Rec_Ctr):=l_PMV_Rec;
5451 					l_PMV_Rec_Ctr:=l_PMV_Rec_Ctr+1;
5452 				END IF;
5453 
5454 				l_PLSQL_Driver_Params:=REPLACE(l_PLSQL_Driver_Params,'<<'||l_Parameter_Pattern||'>>',':'||l_Substitute_Var);
5455 				IF p_PA_DEBUG_MODE = 'Y' THEN
5456 					Write2FWKLog('After replacing the driver params.','Generate_SQL');
5457 					Write2FWKLog('l_PLSQL_Driver_Params :'||l_PLSQL_Driver_Params,'Generate_SQL');
5458 				END IF;
5459 			END IF;
5460 		END LOOP;
5461 
5462 		IF l_View_By IS NULL AND l_View_BY_Found IS NULL THEN
5463 			IF p_PA_DEBUG_MODE = 'Y' THEN
5464 				Write2FWKLog('No View BY is specified. Hence substituting the view by with a dummy value.','Generate_SQL');
5465 			END IF;
5466 			l_PMV_Rec.attribute_name:=':PJI_VIEW_BY';
5467 			l_PMV_Rec.attribute_value:='XX';
5468 			l_PMV_Rec.attribute_type:=BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
5469 			l_PMV_Rec.attribute_data_type:=BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
5470 			l_PMV_Output.EXTEND();
5471 			l_PMV_Output(l_PMV_Rec_Ctr):=l_PMV_Rec;
5472 			l_PMV_Rec_Ctr:=l_PMV_Rec_Ctr+1;
5473 			l_PLSQL_Driver_Params:=REPLACE(l_PLSQL_Driver_Params,'<<VIEW_BY>>',':PJI_VIEW_BY');
5474 			IF p_PA_DEBUG_MODE = 'Y' THEN
5475 				Write2FWKLog('Done with substituting the view by with a dummy value.','Generate_SQL');
5476 			END IF;
5477 		ELSIF l_View_By LIKE 'TIME+%TIME%' AND l_Period_Type_Found IS NULL THEN
5478 			IF p_PA_DEBUG_MODE = 'Y' THEN
5479 				Write2FWKLog('No Period Type is specified (Availability Trend Option).','Generate_SQL');
5480 				Write2FWKLog('Defaulting the period type to view by time dimension.','Generate_SQL');
5481 			END IF;
5482 			l_PMV_Rec.attribute_name:=':PJI_PERIOD_TYPE';
5483 			l_PMV_Rec.attribute_value:=SUBSTR(l_View_By,INSTR(l_View_By,'+')+1);
5484 			l_PMV_Rec.attribute_type:=BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
5485 			l_PMV_Rec.attribute_data_type:=BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
5486 			l_PMV_Output.EXTEND();
5487 			l_PMV_Output(l_PMV_Rec_Ctr):=l_PMV_Rec;
5488 			l_PMV_Rec_Ctr:=l_PMV_Rec_Ctr+1;
5489 			l_PLSQL_Driver_Params:=REPLACE(l_PLSQL_Driver_Params,'<<PERIOD_TYPE>>',':PJI_PERIOD_TYPE');
5490 		END IF;
5491 
5492 		/*
5493 		** The following portion of the code is commented.
5494 		** Please uncomment it for debugging purposes only.
5495 		*/
5496 
5497 		IF p_PA_DEBUG_MODE = 'Y' THEN
5498 			FOR i in 1..l_PMV_Output.LAST loop
5499 				Write2FWKLog(l_PMV_Output(i).attribute_name||' - '||l_PMV_Output(i).attribute_value||' - '||l_PMV_Output(i).attribute_type||' - '||l_PMV_Output(i).attribute_data_type, 'Check');
5500 			END LOOP;
5501 		END IF;
5502 
5503 		IF p_PA_DEBUG_MODE = 'Y' THEN
5504 			Write2FWKLog('After parsing all the parameters.','Generate_SQL');
5505 			Write2FWKLog('Before replacing the dimension patterns with NULL values.','Generate_SQL');
5506 		END IF;
5507 
5508 		FOR i IN G_dimension_level_tab.first..G_dimension_level_tab.last LOOP
5509 			l_PLSQL_Driver_Params:=REPLACE(l_PLSQL_Driver_Params,'<<'||G_dimension_level_tab(i)||'>>','NULL');
5510 		END LOOP;
5511 
5512 		IF p_PA_DEBUG_MODE = 'Y' THEN
5513 			Write2FWKLog('After replacing the dimension patterns with NULL values.','Generate_SQL');
5514 			Write2FWKLog('Before replacing the <<PL/SQL PARAMS>> pattern with actual values.','Generate_SQL');
5515 		END IF;
5516 		l_Sql_Statement:=REPLACE(l_Sql_Statement,'<<PL/SQL PARAMS>>',l_PLSQL_Driver_Params);
5517 
5518 		IF p_PA_DEBUG_MODE = 'Y' THEN
5519 			Write2FWKLog('After replacing the <<PL/SQL PARAMS>> pattern with actual values.','Generate_SQL');
5520 			Write2FWKLog('Finally, the SQL Statement :'||l_Sql_Statement,'Generate_SQL');
5521 			Write2FWKLog('Exiting Generate_SQL...','Generate_SQL');
5522 		END IF;
5523 
5524 		p_Sql_Statement:=l_Sql_Statement;
5525 		p_PMV_Output:=l_PMV_Output;
5526 	EXCEPTION
5527 		WHEN OTHERS THEN
5528 			g_SQL_Error_Msg:=SQLERRM();
5529 			IF p_PA_DEBUG_MODE = 'Y' THEN
5530 				Write2FWKLog(g_SQL_Error_Msg, 3);
5531 			END IF;
5532 			RAISE;
5533 	END Generate_SQL;
5534 
5535 	/* New Version of Generate_SQL
5536 	** ----------------------------------------------------------
5537 	** Function: Generate_SQL
5538 	** This Function generates the select statement based on the
5539 	** parameters selected by the user.
5540 	** ----------------------------------------------------------
5541 	*/
5542 	Procedure Generate_SQL(p_page_parameter_tbl	IN 	BIS_PMV_PAGE_PARAMETER_TBL
5543 					, p_Select_List		IN	VARCHAR2
5544 					, p_SQL_Statement		IN OUT NOCOPY VARCHAR2
5545 					, p_PMV_Output		IN OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL
5546 					, p_Region_Code		IN 	VARCHAR2
5547 					, p_PLSQL_Driver 		IN	VARCHAR2
5548 					, p_PLSQL_Driver_Params 	IN	VARCHAR2
5549 					)
5550 	IS
5551 	l_Sql_Statement		VARCHAR2(3200);
5552 	l_PMV_Output		BIS_QUERY_ATTRIBUTES_TBL:=BIS_QUERY_ATTRIBUTES_TBL();
5553 	l_PMV_Rec			BIS_QUERY_ATTRIBUTES;
5554 	l_PMV_Rec_Ctr		NUMBER:=1;
5555 	l_Exists_Flag		VARCHAR2(1):='N';
5556 	l_Period_Type_Found	VARCHAR2(1);
5557 	l_View_BY_Found		VARCHAR2(1);
5558 
5559 	l_View_BY			VARCHAR2(150);
5560 	l_Report_Name		VARCHAR2(150):=p_Region_Code;
5561 	l_PLSQL_Driver		VARCHAR2(150):=p_PLSQL_Driver;
5562 	l_PLSQL_Driver_Params	VARCHAR2(1000):=p_PLSQL_Driver_Params;
5563 
5564 	l_Report_Parameters	VARCHAR2(3000);
5565 	l_Substitute_Var		VARCHAR2(150);
5566 	l_View_BY_Pattern		VARCHAR2(3);
5567 	l_Parameter_Pattern	VARCHAR2(150);
5568 
5569 	l_Start_Char_Pos		NUMBER:=0;
5570 
5571 	BEGIN
5572 		IF p_PA_DEBUG_MODE = 'Y' THEN
5573 			PJI_UTILS.RESET_SSWA_SESSION_CACHE;
5574 			Write2FWKLog('Entering Generate_SQL...','Generate_SQL');
5575 		END IF;
5576 
5577 		l_PMV_Rec:=BIS_PMV_PARAMETERS_PUB.INITIALIZE_QUERY_TYPE;
5578 
5579 		FOR i IN p_page_parameter_tbl.first..p_page_parameter_tbl.last LOOP
5580 			IF p_page_parameter_tbl(i).parameter_name = 'VIEW_BY' THEN
5581 				IF p_PA_DEBUG_MODE = 'Y' THEN
5582 					Write2FWKLog('User specified the view by for the report. ViewBY :'||p_page_parameter_tbl(i).parameter_value,'Generate_SQL');
5583 				END IF;
5584 				l_View_By := p_page_parameter_tbl(i).parameter_value;
5585 				IF p_PA_DEBUG_MODE = 'Y' THEN
5586 					Write2FWKLog('l_ViewBY :'||l_View_By,'Generate_SQL');
5587 				END IF;
5588 			END IF;
5589 		END LOOP;
5590 
5591 		IF p_PA_DEBUG_MODE = 'Y' THEN
5592 			Write2FWKLog('Before calling Construct_SELECT_Clause.','Generate_SQL');
5593 		END IF;
5594 		l_Sql_Statement:=Construct_SELECT_Clause(l_View_BY, p_Select_List);
5595 
5596 		IF p_PA_DEBUG_MODE = 'Y' THEN
5597 			Write2FWKLog('After calling Construct_SELECT_Clause.','Generate_SQL');
5598 		END IF;
5599 
5600 		IF l_View_BY IS NOT NULL THEN
5601 			l_PMV_Rec.attribute_name:=BIS_PMV_PARAMETERS_PUB.VIEW_BY_VALUE;
5602 			l_PMV_Rec.attribute_value:=l_View_BY;
5603 			l_PMV_Rec.attribute_type:=BIS_PMV_PARAMETERS_PUB.VIEW_BY_TYPE;
5604 
5605 			l_PMV_Output.EXTEND();
5606 			l_PMV_Output(l_PMV_Rec_Ctr):=l_PMV_Rec;
5607 
5608 			l_PMV_Rec_Ctr:=l_PMV_Rec_Ctr+1;
5609 		END IF;
5610 
5611 		l_Sql_Statement:=REPLACE(l_Sql_Statement,'<<DEV_PL/SQL_EXTENSION>>',l_PLSQL_Driver);
5612 
5613 		IF p_PA_DEBUG_MODE = 'Y' THEN
5614 			Write2FWKLog('Before parsing all the parameters.','Generate_SQL');
5615 		END IF;
5616 		FOR i IN p_page_parameter_tbl.first..p_page_parameter_tbl.last LOOP
5617 
5618 			l_Report_Parameters:=NULL;
5619 			l_Substitute_Var:=NULL;
5620 			l_Parameter_Pattern:=p_page_parameter_tbl(i).parameter_name;
5621 
5622 			IF p_page_parameter_tbl(i).parameter_name LIKE 'TIME+%FROM' AND p_page_parameter_tbl(i).parameter_name NOT LIKE 'TIME+%PFROM' THEN
5623 				l_Parameter_Pattern:='START_TIME';
5624 				l_Substitute_Var:='PJI_START_TIME';
5625 				l_Report_Parameters:=TO_CHAR(p_page_parameter_tbl(i).period_date,'j');
5626 			ELSIF p_page_parameter_tbl(i).parameter_name LIKE 'TIME+%TO' AND p_page_parameter_tbl(i).parameter_name NOT LIKE 'TIME+%PTO' THEN
5627 				l_Parameter_Pattern:='END_TIME';
5628 				l_Substitute_Var:='PJI_END_TIME';
5629 				l_Report_Parameters:=TO_CHAR(p_page_parameter_tbl(i).period_date,'j');
5630 			ELSIF p_page_parameter_tbl(i).parameter_name = 'PERIOD_TYPE' THEN
5631 				IF l_View_BY LIKE 'TIME+%TIME%' THEN
5632 					/*
5633 					** Reset the value of view by to period type
5634 					** for trend reports (viewby time).
5635 					*/
5636 					l_PMV_Output(1).attribute_value := 'TIME+'||p_page_parameter_tbl(i).parameter_value;
5637 				END IF;
5638 				l_Substitute_Var:='PJI_PERIOD_TYPE';
5639 				l_Period_Type_Found:='Y';
5640 			ELSIF p_page_parameter_tbl(i).parameter_name = 'TIME_COMPARISON_TYPE' THEN
5641 				l_Substitute_Var:='PJI_TIME_COMPARISON_TYPE';
5642 			ELSIF p_page_parameter_tbl(i).parameter_name = 'VIEW_BY' THEN
5643 				l_Substitute_Var:='PJI_VIEW_BY';
5644 				l_Report_Parameters:=Convert_ViewBY(p_page_parameter_tbl(i).parameter_value);
5645 				l_View_BY_Found:='Y';
5646 			ELSIF p_page_parameter_tbl(i).parameter_name = 'AS_OF_DATE' THEN
5647 				l_Substitute_Var:='PJI_AS_OF_DATE';
5648 				l_Report_Parameters:=TO_CHAR(TO_DATE(p_page_parameter_tbl(i).parameter_value,'DD/MM/YYYY'),'j');
5649 			ELSIF p_page_parameter_tbl(i).parameter_name = 'AVAILABILITY_DAYS+AVAILABILITY_DAYS' THEN
5650 				l_Substitute_Var:='PJI_REP_DIM_32';
5651 			ELSIF p_page_parameter_tbl(i).parameter_name = 'AVAILABILITY_THRESHOLD+AVAILABILITY_THRESHOLD' THEN
5652 				l_Substitute_Var:='PJI_REP_DIM_28';
5653 			ELSIF p_page_parameter_tbl(i).parameter_name = 'AVAILABILITY_TYPE+AVAILABILITY_TYPE' THEN
5654 				l_Substitute_Var:='PJI_REP_DIM_29';
5655 			ELSIF p_page_parameter_tbl(i).parameter_name = 'CURRENCY+FII_CURRENCIES' THEN
5656 				l_Substitute_Var:='PJI_REP_DIM_27';
5657 				l_Report_Parameters:=Convert_Currency_Code(REPLACE(p_page_parameter_tbl(i).parameter_id,''''));
5658 			ELSIF p_page_parameter_tbl(i).parameter_name = 'ORGANIZATION+FII_OPERATING_UNITS' THEN
5659 				l_Substitute_Var:='PJI_REP_DIM_01';
5660 			ELSIF p_page_parameter_tbl(i).parameter_name = 'ORGANIZATION+PJI_ORGANIZATIONS' THEN
5661 				l_Substitute_Var:='PJI_REP_DIM_02';
5662 			ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT CLASSIFICATION+CLASS_CATEGORY' THEN
5663 				l_Substitute_Var:='PJI_REP_DIM_25';
5664 			ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT CLASSIFICATION+CLASS_CODE' THEN
5665 				l_Substitute_Var:='PJI_REP_DIM_26';
5666 			ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT JOB LEVEL+PJI_JOB_LEVELS' THEN
5667 				l_Substitute_Var:='PJI_REP_DIM_24';
5668 			ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT WORK TYPE+PJI_UTIL_CATEGORIES' THEN
5669 				l_Substitute_Var:='PJI_REP_DIM_21';
5670 			ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT WORK TYPE+PJI_WORK_TYPES' THEN
5671 				l_Substitute_Var:='PJI_REP_DIM_22';
5672 			ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT+PJI_PROJECTS' THEN
5673 				l_Substitute_Var:='PJI_REP_DIM_31';
5674 			ELSIF p_page_parameter_tbl(i).parameter_name = 'REV_AT_RISK_FLAG+REV_AT_RISK_FLAG' THEN
5675 				l_Substitute_Var:='PJI_REP_DIM_33';
5676 
5677 
5678                         ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT EXPENDITURE TYPE+PJI_EXP_CATEGORIES' THEN
5679                                 l_Substitute_Var:='PJI_REP_DIM_34';
5680                         ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT EXPENDITURE TYPE+PJI_EXP_TYPES' THEN
5681                                 l_Substitute_Var:='PJI_REP_DIM_35';
5682                         ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT REVENUE CATEGORY+PJI_REVENUE_CATEGORIES' THEN
5683                                 l_Substitute_Var:='PJI_REP_DIM_36';
5684                         ELSIF p_page_parameter_tbl(i).parameter_name = 'PROJECT REVENUE CATEGORY+PJI_EXP_EVT_TYPES' THEN
5685                                 l_Substitute_Var:='PJI_REP_DIM_37';
5686 			END IF;
5687 
5688 			IF l_Report_Parameters IS NULL THEN
5689 				IF p_PA_DEBUG_MODE = 'Y' THEN
5690 					Write2FWKLog('l_Report_Parameters is not set.','Generate_SQL');
5691 				END IF;
5692 				l_Report_Parameters:=REPLACE(p_page_parameter_tbl(i).parameter_id,'''');
5693 				IF p_PA_DEBUG_MODE = 'Y' THEN
5694 					Write2FWKLog('l_Report_Parameters :'||l_Report_Parameters,'Generate_SQL');
5695 				END IF;
5696 			END IF;
5697 
5698 			IF l_Report_Parameters IS NULL OR UPPER(p_page_parameter_tbl(i).parameter_value) = 'ALL' THEN
5699 				IF p_PA_DEBUG_MODE = 'Y' THEN
5700 					Write2FWKLog('l_Report_Parameters is not set in the report or defaulted to all.','Generate_SQL');
5701 				END IF;
5702 				/*
5703 				** Added the extra check to default currency when it is specified as 'All'
5704 				*/
5705 				IF p_page_parameter_tbl(i).parameter_name = 'CURRENCY+FII_CURRENCIES' THEN
5706 					l_Report_Parameters:='G';
5707 				ELSE
5708 					l_Report_Parameters:=NULL;
5709 				END IF;
5710 				IF p_PA_DEBUG_MODE = 'Y' THEN
5711 					Write2FWKLog('l_Report_Parameters :'||l_Report_Parameters,'Generate_SQL');
5712 				END IF;
5713 			END IF;
5714 
5715 			IF p_PA_DEBUG_MODE = 'Y' THEN
5716 				Write2FWKLog('l_Parameter_Name :'||p_page_parameter_tbl(i).parameter_name,'Generate_SQL');
5717 				Write2FWKLog('l_Parameter_Pattern :'||l_Parameter_Pattern,'Generate_SQL');
5718 				Write2FWKLog('l_Report_Parameters :'||l_Report_Parameters,'Generate_SQL');
5719 				Write2FWKLog('l_Substitute_Var :'||l_Substitute_Var,'Generate_SQL');
5720 				Write2FWKLog('Before replacing the driver params.','Generate_SQL');
5721 				Write2FWKLog('l_PLSQL_Driver_Params :'||l_PLSQL_Driver_Params,'Generate_SQL');
5722 			END IF;
5723 
5724 			IF l_Substitute_Var LIKE 'PJI%' AND l_Substitute_Var IS NOT NULL THEN
5725 				l_Exists_Flag:='N';
5726 
5727 				FOR j in 1..l_PMV_Output.COUNT LOOP
5728 					IF l_PMV_Output(j).attribute_name = ':'||l_Substitute_Var THEN
5729 						l_Exists_Flag:='Y';
5730 					END IF;
5731 				END LOOP;
5732 
5733 				IF l_Exists_Flag = 'N' THEN
5734 					l_PMV_Rec.attribute_name:=':'||l_Substitute_Var;
5735 					l_PMV_Rec.attribute_value:=l_Report_Parameters;
5736 					l_PMV_Rec.attribute_type:=BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
5737 
5738 					IF l_Substitute_Var = 'PJI_AS_OF_DATE' THEN
5739 						l_PMV_Rec.attribute_data_type:=BIS_PMV_PARAMETERS_PUB.INTEGER_BIND;
5740 					ELSE
5741 						l_PMV_Rec.attribute_data_type:=BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
5742 					END IF;
5743 
5744 					l_PMV_Output.EXTEND();
5745 					l_PMV_Output(l_PMV_Rec_Ctr):=l_PMV_Rec;
5746 					l_PMV_Rec_Ctr:=l_PMV_Rec_Ctr+1;
5747 				END IF;
5748 
5749 				l_PLSQL_Driver_Params:=REPLACE(l_PLSQL_Driver_Params,'<<'||l_Parameter_Pattern||'>>',':'||l_Substitute_Var);
5750 				IF p_PA_DEBUG_MODE = 'Y' THEN
5751 					Write2FWKLog('After replacing the driver params.','Generate_SQL');
5752 					Write2FWKLog('l_PLSQL_Driver_Params :'||l_PLSQL_Driver_Params,'Generate_SQL');
5753 				END IF;
5754 			END IF;
5755 		END LOOP;
5756 
5757 		IF l_View_By IS NULL AND l_View_BY_Found IS NULL THEN
5758 			IF p_PA_DEBUG_MODE = 'Y' THEN
5759 				Write2FWKLog('No View BY is specified. Hence substituting the view by with a dummy value.','Generate_SQL');
5760 			END IF;
5761 			l_PMV_Rec.attribute_name:=':PJI_VIEW_BY';
5762 			l_PMV_Rec.attribute_value:='XX';
5763 			l_PMV_Rec.attribute_type:=BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
5764 			l_PMV_Rec.attribute_data_type:=BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
5765 			l_PMV_Output.EXTEND();
5766 			l_PMV_Output(l_PMV_Rec_Ctr):=l_PMV_Rec;
5767 			l_PMV_Rec_Ctr:=l_PMV_Rec_Ctr+1;
5768 			l_PLSQL_Driver_Params:=REPLACE(l_PLSQL_Driver_Params,'<<VIEW_BY>>',':PJI_VIEW_BY');
5769 			IF p_PA_DEBUG_MODE = 'Y' THEN
5770 				Write2FWKLog('Done with substituting the view by with a dummy value.','Generate_SQL');
5771 			END IF;
5772 		ELSIF l_View_By LIKE 'TIME+%TIME%' AND l_Period_Type_Found IS NULL THEN
5773 			IF p_PA_DEBUG_MODE = 'Y' THEN
5774 				Write2FWKLog('No Period Type is specified (Availability Trend Option).','Generate_SQL');
5775 				Write2FWKLog('Defaulting the period type to view by time dimension.','Generate_SQL');
5776 			END IF;
5777 			l_PMV_Rec.attribute_name:=':PJI_PERIOD_TYPE';
5778 			l_PMV_Rec.attribute_value:=SUBSTR(l_View_By,INSTR(l_View_By,'+')+1);
5779 			l_PMV_Rec.attribute_type:=BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
5780 			l_PMV_Rec.attribute_data_type:=BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
5781 			l_PMV_Output.EXTEND();
5782 			l_PMV_Output(l_PMV_Rec_Ctr):=l_PMV_Rec;
5783 			l_PMV_Rec_Ctr:=l_PMV_Rec_Ctr+1;
5784 			l_PLSQL_Driver_Params:=REPLACE(l_PLSQL_Driver_Params,'<<PERIOD_TYPE>>',':PJI_PERIOD_TYPE');
5785 		END IF;
5786 
5787 		/*
5788 		** The following portion of the code is commented.
5789 		** Please uncomment it for debugging purposes only.
5790 		*/
5791 
5792 		IF p_PA_DEBUG_MODE = 'Y' THEN
5793 			FOR i in 1..l_PMV_Output.LAST loop
5794 				Write2FWKLog(l_PMV_Output(i).attribute_name||' - '||l_PMV_Output(i).attribute_value||' - '||l_PMV_Output(i).attribute_type||' - '||l_PMV_Output(i).attribute_data_type, 'Check');
5795 			END LOOP;
5796 		END IF;
5797 
5798 		IF p_PA_DEBUG_MODE = 'Y' THEN
5799 			Write2FWKLog('After parsing all the parameters.','Generate_SQL');
5800 			Write2FWKLog('Before replacing the dimension patterns with NULL values.','Generate_SQL');
5801 		END IF;
5802 
5803 		l_Start_Char_Pos := INSTR(l_PLSQL_Driver_Params,'<<');
5804 
5805 		IF l_Start_Char_Pos>0 THEN
5806 			WHILE l_Start_Char_Pos>0 LOOP
5807 				l_PLSQL_Driver_Params:=REPLACE(l_PLSQL_Driver_Params,SUBSTR(l_PLSQL_Driver_Params,l_Start_Char_Pos,INSTR(l_PLSQL_Driver_Params,'>>')-l_Start_Char_Pos+2),'NULL');
5808 				l_Start_Char_Pos := INSTR(l_PLSQL_Driver_Params,'<<');
5809 			END LOOP;
5810 		END IF;
5811 
5812 		IF p_PA_DEBUG_MODE = 'Y' THEN
5813 			Write2FWKLog('After replacing the dimension patterns with NULL values.','Generate_SQL');
5814 			Write2FWKLog('Before replacing the <<PL/SQL PARAMS>> pattern with actual values.','Generate_SQL');
5815 		END IF;
5816 
5817 		l_Sql_Statement:=REPLACE(l_Sql_Statement,'<<PL/SQL PARAMS>>',l_PLSQL_Driver_Params);
5818 
5819 		IF p_PA_DEBUG_MODE = 'Y' THEN
5820 			Write2FWKLog('After replacing the <<PL/SQL PARAMS>> pattern with actual values.','Generate_SQL');
5821 			Write2FWKLog('Finally, the SQL Statement :'||l_Sql_Statement,'Generate_SQL');
5822 			Write2FWKLog('Exiting Generate_SQL...','Generate_SQL');
5823 		END IF;
5824 
5825 		p_Sql_Statement:=l_Sql_Statement;
5826 		p_PMV_Output:=l_PMV_Output;
5827 	EXCEPTION
5828 		WHEN OTHERS THEN
5829 			g_SQL_Error_Msg:=SQLERRM();
5830 			IF p_PA_DEBUG_MODE = 'Y' THEN
5831 				Write2FWKLog(g_SQL_Error_Msg, 3);
5832 			END IF;
5833 			RAISE;
5834 	END Generate_SQL;
5835 
5836 END PJI_PMV_ENGINE;