[Home] [Help]
PACKAGE BODY: APPS.PJI_TIME_C
Source
1 PACKAGE BODY PJI_TIME_C AS
2 /*$Header: PJICMT1B.pls 120.5 2011/10/18 09:55:02 rtalakon ship $*/
3
4
5 -- ------------------------
6 -- Global Variables
7 -- ------------------------
8 g_timer_start DATE := NULL;
9 g_duration NUMBER := NULL;
10
11 g_period_set_name VARCHAR2(15) := NULL;
12 g_period_type VARCHAR2(15) := NULL;
13 g_week_start_day VARCHAR2(30) := NULL;
14 g_week_offset NUMBER;
15 g_user_id NUMBER;
16 g_login_id NUMBER;
17 g_debug_flag VARCHAR2(1) := NVL(Fnd_Profile.VALUE('PA_DEBUG_MODE'), 'N');
18 g_earliest_start_date DATE;
19 g_latest_end_date DATE;
20 g_min_date DATE;
21 g_cal_info_exists VARCHAR2(1):='Y';
22
23 G_LOGIN_INFO_NOT_FOUND EXCEPTION;
24 G_BIS_PARAMETER_NOT_SETUP EXCEPTION;
25 G_ENT_CALENDAR_NOT_FOUND EXCEPTION;
26
27 ---------------------------------------------------
28 -- Forward declarations of provide procedures
29 ---------------------------------------------------
30
31
32 ---------------------------------------------------
33 -- PRIVATE PROCEDURE start_timer
34 -- This procedure resets the elapsed time duration
35 -- and starts the clock.
36 ---------------------------------------------------
37 PROCEDURE start_timer IS
38 BEGIN
39 g_duration := 0;
40 g_timer_start := SYSDATE;
41 END start_timer;
42
43
44 ---------------------------------------------------
45 -- PRIVATE PROCEDURE stop_timer
46 -- This procedure computes the elapsed time since
47 -- call to to start_timer.
48 ---------------------------------------------------
49 PROCEDURE stop_timer IS
50 BEGIN
51 IF g_timer_start IS NULL THEN
52 g_duration := 0;
53 ELSE
54 g_duration := SYSDATE - g_timer_start;
55 END IF;
56 g_timer_start := NULL;
57 END stop_timer;
58
59 ---------------------------------------------------
60 -- PRIVATE PROCEDURE print_timer
61 -- This procedure prints the elapsed time stored
62 -- in the g_duration global variable.
63 ---------------------------------------------------
64 PROCEDURE print_timer(p_text VARCHAR2)
65 IS
66 BEGIN
67 IF (g_duration IS NOT NULL) THEN
68 pji_utils.write2log(p_text||' - '||
69 TO_CHAR(FLOOR(g_duration)) ||' Days '||
70 TO_CHAR(MOD(FLOOR(g_duration*24), 24))||':'||
71 TO_CHAR(MOD(FLOOR(g_duration*24*60), 60))||':'||
72 TO_CHAR(MOD(FLOOR(g_duration*24*60*60), 60)));
73 END IF;
74 END print_timer;
75
76 ---------------------------------------------------
77 -- PRIVATE FUNCTION get_week_offset
78 -- This function returns the week offset.
79 ---------------------------------------------------
80 FUNCTION GET_WEEK_OFFSET(p_week_start_day VARCHAR2) RETURN NUMBER IS
81 l_week_offset NUMBER;
82 BEGIN
83 IF p_week_start_day = '2' THEN
84 l_week_offset := 0;
85 ELSIF p_week_start_day = '3' THEN
86 l_week_offset := 1;
87 ELSIF p_week_start_day = '4' THEN
88 l_week_offset := 2;
89 ELSIF p_week_start_day = '5' THEN
90 l_week_offset := 3;
91 ELSIF p_week_start_day = '6' THEN
92 l_week_offset := -3;
93 ELSIF p_week_start_day = '7' THEN
94 l_week_offset := -2;
95 ELSIF p_week_start_day = '1' THEN
96 l_week_offset := -1;
97 END IF;
98 RETURN l_week_offset;
99 END GET_WEEK_OFFSET;
100
101 ---------------------------------------------------
102 -- PRIVATE FUNCTION get_period_num
103 -- This function returns 445 calendar's period
104 -- number for a given week number.
105 ---------------------------------------------------
106 FUNCTION GET_PERIOD_NUM(p_week_num NUMBER) RETURN NUMBER IS
107 l_period_num NUMBER;
108 BEGIN
109 IF p_week_num IN (1,2,3,4) THEN
110 l_period_num := 1;
111 ELSIF p_week_num IN (5,6,7,8) THEN
112 l_period_num := 2;
113 ELSIF p_week_num IN (9,10,11,12,13) THEN
114 l_period_num := 3;
115 ELSIF p_week_num IN (14,15,16,17) THEN
116 l_period_num := 4;
117 ELSIF p_week_num IN (18,19,20,21) THEN
118 l_period_num := 5;
119 ELSIF p_week_num IN (22,23,24,25,26) THEN
120 l_period_num := 6;
121 ELSIF p_week_num IN (27,28,29,30) THEN
122 l_period_num := 7;
123 ELSIF p_week_num IN (31,32,33,34) THEN
124 l_period_num := 8;
125 ELSIF p_week_num IN (35,36,37,38,39) THEN
126 l_period_num := 9;
127 ELSIF p_week_num IN (40,41,42,43) THEN
128 l_period_num := 10;
129 ELSIF p_week_num IN (44,45,46,47) THEN
130 l_period_num := 11;
131 ELSE
132 l_period_num := 12;
133 END IF;
134 RETURN l_period_num;
135 END GET_PERIOD_NUM;
136
137 ---------------------------------------------------
138 -- PRIVATE PROCEDURE init
139 -- This procedure initializes all global variables
140 -- used in the package.
141 ---------------------------------------------------
142 PROCEDURE INIT IS
143 BEGIN
144 -- -------------------------------
145 -- Initialize the global variables
146 -- -------------------------------
147 g_user_id := Fnd_Global.User_Id;
148 g_login_id := Fnd_Global.Login_Id;
149
150 IF (g_user_id IS NULL OR g_login_id IS NULL) THEN
151 g_user_id:=-1;
152 g_login_id:=-1;
153 RAISE G_LOGIN_INFO_NOT_FOUND;
154 END IF;
155
156 /*
157 ** replace Bis_Common_Parameters with pji stuff
158 */
159 g_period_set_name := pji_utils.get_period_set_name;
160 g_period_type := pji_utils.get_period_type;
161 g_week_start_day := pji_utils.get_start_day_of_week_id;
162 --g_global_start_date := pji_utils.get_GLOBAL_START_DATE;
163 g_week_offset := get_week_offset(g_week_start_day);
164
165 BEGIN
166 SELECT NVL(earliest_start_date,TRUNC(SYSDATE))
167 , NVL(latest_end_date,TRUNC(SYSDATE))
168 INTO
169 g_earliest_start_date
170 , g_latest_end_date
171 FROM pji_time_cal_extr_info
172 WHERE calendar_id = -1;
173 EXCEPTION
174 WHEN NO_DATA_FOUND THEN
175 g_cal_info_exists:='N';
176 g_earliest_start_date:=TRUNC(SYSDATE);
177 g_latest_end_date:=TRUNC(SYSDATE);
178 END;
179
180 IF g_debug_flag = 'Y' THEN
181 pji_utils.write2log('Enterprise Calendar = '||g_period_set_name||' ('||g_period_type||')');
182 pji_utils.write2log('Week Start Day = '||g_week_start_day);
183 pji_utils.write2log('Week offset = '||g_week_offset);
184 pji_utils.write2log('Earliest Start Date: '||Fnd_Date.date_to_displaydate(g_earliest_start_date));
185 pji_utils.write2log('Latest End Date: '||Fnd_Date.date_to_displaydate(g_latest_end_date));
186 END IF;
187
188 IF (g_period_set_name IS NULL OR g_period_type IS NULL) THEN
189 RAISE G_BIS_PARAMETER_NOT_SETUP;
190 END IF;
191 END INIT;
192
193 ---------------------------------------------------
194 -- PRIVATE PROCEDURE load_week
195 -- This procedure maintains week records for given
196 -- from and to dates.
197 ---------------------------------------------------
198 PROCEDURE LOAD_WEEK(p_from_date IN DATE, p_to_date IN DATE) IS
199 l_from_date DATE;
200 l_to_date DATE;
201 l_week DATE;
202 l_week_end DATE;
203 l_week_num NUMBER;
204 l_period_num NUMBER;
205 l_year_num NUMBER;
206 l_week_row NUMBER;
207 BEGIN
208
209 l_to_date := TRUNC(p_to_date-g_week_offset,'iw')+g_week_offset+6;
210 l_week := TRUNC(l_from_date-g_week_offset,'iw')+g_week_offset;
211 l_week_end := l_week+6;
212 l_week_num := TO_CHAR(l_week-g_week_offset,'iw');
213 l_period_num := get_period_num(l_week_num);
214 l_year_num := TO_CHAR(l_week-g_week_offset,'iyyy');
215 l_week_row := 0;
216
217 -- DELETE FROM PJI_TIME_WEEK WHERE start_date <= l_to_date AND end_date >= l_from_date;
218
219 WHILE l_week <= l_to_date LOOP
220
221 INSERT INTO pji_time_week
222 (week_id,
223 period445_id,
224 SEQUENCE,
225 NAME,
226 start_date,
227 end_date,
228 creation_date,
229 last_update_date,
230 last_updated_by,
231 created_by,
232 last_update_login)
233 VALUES
234 (
235 l_year_num||LPAD(l_period_num,2,'0')||LPAD(l_week_num,2,'0'),
236 l_year_num||LPAD(l_period_num,2,'0'),
237 TO_CHAR(l_week-g_week_offset,'iw'),
238 TO_CHAR(l_week_end,'dd-Mon-rr'),
239 l_week,
240 l_week_end,
241 SYSDATE,
242 SYSDATE,
243 g_user_id,
244 g_user_id,
245 g_login_id
246 );
247
248 l_week := l_week_end+1;
249 l_week_end := l_week+6;
250 l_period_num := get_period_num(TO_CHAR(l_week-g_week_offset,'iw'));
251 l_year_num := TO_CHAR(l_week-g_week_offset,'iyyy');
252 l_week_row := l_week_row+1;
253 END LOOP;
254 IF g_debug_flag = 'Y' THEN
255 pji_utils.write2log(TO_CHAR(l_week_row)||' records has been populated to Week Level');
256 END IF;
257 END LOAD_WEEK;
258
259 ---------------------------------------------------
260 -- PRIVATE PROCEDURE load_ent_period
261 -- This procedure maintains week records for given
262 -- from and to dates.
263 ---------------------------------------------------
264 FUNCTION LOAD_ENT_PERIOD RETURN BOOLEAN IS
265 l_no_rows_inserted NUMBER := 0;
266 l_min_date DATE;
267 l_max_date DATE;
268 BEGIN
269
270 DELETE pji_time_extr_tmp;
271
272 INSERT INTO pji_time_extr_tmp(period_year
273 , quarter_num
274 , period_num
275 , period_name
276 , start_date
277 , end_date)
278 SELECT period_year
279 , quarter_num
280 , period_num
281 , period_name
282 , start_date
283 , end_date
284 FROM gl_periods
285 WHERE 1=1
286 AND period_set_name = g_period_set_name
287 AND period_type = g_period_type
288 AND adjustment_period_flag='N'
289 AND (start_date < g_earliest_start_date
290 OR end_date > g_latest_end_date);
291
292 INSERT INTO pji_time_ent_period(
293 ent_period_id
294 , ent_qtr_id
295 , ent_year_id
296 , sequence
297 , name
298 , start_date
299 , end_date
300 , creation_date
301 , last_update_date
302 , last_updated_by
303 , created_by
304 , last_update_login)
305 SELECT TO_NUMBER(period_year||quarter_num||DECODE(LENGTH(period_num),1,'0'||period_num, period_num))
306 , TO_NUMBER(period_year||quarter_num)
307 , TO_NUMBER(period_year)
308 , period_num
309 , period_name
310 , start_date
311 , end_date
312 , SYSDATE
313 , SYSDATE
314 , g_user_id
315 , g_user_id
316 , g_login_id
317 FROM pji_time_extr_tmp;
318
319 l_no_rows_inserted := SQL%rowcount;
320
321 IF g_debug_flag = 'Y' THEN
322 pji_utils.write2log(TO_CHAR(l_no_rows_inserted)||' records have been inserted into PJI_TIME_ENT_PERIOD table.');
323 END IF;
324
325 IF l_no_rows_inserted > 0 THEN
326 SELECT MIN(start_date), MAX(end_date)
327 INTO l_min_date, l_max_date
328 FROM pji_time_ent_period
329 WHERE (start_date < g_earliest_start_date
330 OR end_date > g_latest_end_date);
331
332 g_min_date:=l_min_date;
333
334 IF g_cal_info_exists = 'N' THEN
335 BEGIN
336 IF g_debug_flag = 'Y' THEN
337 pji_utils.write2log('Trying to insert record into PJI_TIME_EXTR_INFO table.');
338 END IF;
339 INSERT INTO pji_time_cal_extr_info
340 (calendar_id, earliest_start_date,
341 latest_end_date, creation_date,
342 last_update_date, last_updated_by,
343 created_by, last_update_login)
344 VALUES (-1, l_min_date, l_max_date,
345 sysdate, sysdate, -1, -1, -1);
346 EXCEPTION
347 WHEN DUP_VAL_ON_INDEX THEN
348 IF g_debug_flag = 'Y' THEN
349 pji_utils.write2log('Duplicate records. Now trying to update the record...');
350 END IF;
351 UPDATE pji_time_cal_extr_info
352 SET earliest_start_date = LEAST(l_min_date, earliest_start_date)
353 , latest_end_date = GREATEST(l_max_date, latest_end_date)
354 WHERE calendar_id = -1;
355 g_cal_info_exists:='Y';
356 END;
357 ELSE
358 UPDATE pji_time_cal_extr_info
359 SET earliest_start_date = LEAST(l_min_date, earliest_start_date)
360 , latest_end_date = GREATEST(l_max_date, latest_end_date)
361 WHERE calendar_id = -1;
362 END IF;
363
364 --g_earliest_start_date:=LEAST(l_min_date, g_earliest_start_date);
365 --g_latest_end_date:=GREATEST(l_max_date, g_latest_end_date);
366
367 IF g_debug_flag = 'Y' THEN
368 pji_utils.write2log('Calendar ID: -1');
369 pji_utils.write2log('New Earliest Start Date: '||Fnd_Date.date_to_displaydate(l_min_date));
370 pji_utils.write2log('New Latest End Date: '||Fnd_Date.date_to_displaydate(l_max_date));
371 END IF;
372
373 END IF;
374
375 IF l_no_rows_inserted >0 THEN
376 RETURN TRUE;
377 ELSE
378 RETURN FALSE;
379 END IF;
380 EXCEPTION
381 WHEN DUP_VAL_ON_INDEX THEN
382 IF g_debug_flag = 'Y' THEN
383 pji_utils.write2log('Duplicate records. No records have been inserted into PJI_TIME_ENT_PERIOD table.');
384 END IF;
385 RETURN FALSE;
386 END LOAD_ENT_PERIOD;
387
388 ---------------------------------------------------
389 -- PRIVATE PROCEDURE load_ent_qtr
390 -- This procedure incrementally maintains quarter
391 -- entries in PJI_TIME_ENT_QTR.
392 ---------------------------------------------------
393 PROCEDURE LOAD_ENT_QTR IS
394 l_no_rows_deleted NUMBER := 0;
395 l_no_rows_inserted NUMBER := 0;
396 l_start_qtr_id NUMBER;
397 l_end_qtr_id NUMBER;
398 l_earliest_qtr_end_date DATE;
399 l_latest_qtr_start_date DATE;
400 BEGIN
401 IF g_cal_info_exists = 'Y' THEN
402 SELECT
403 MIN(ent_qtr_id) start_qtr_id
404 , MAX(ent_qtr_id) end_qtr_id
405 , MIN(end_date) earliest_qtr_end_date
406 , MAX(start_date) latest_qtr_start_date
407 INTO
408 l_start_qtr_id
409 , l_end_qtr_id
410 , l_earliest_qtr_end_date
411 , l_latest_qtr_start_date
412 FROM pji_time_ent_qtr
413 WHERE 1=1
414 AND (g_earliest_start_date BETWEEN start_date AND end_date)
415 OR (g_latest_end_date BETWEEN start_date AND end_date);
416 IF g_debug_flag = 'Y' THEN
417 pji_utils.write2log('l_start_qtr_id: '||l_start_qtr_id);
418 pji_utils.write2log('l_end_qtr_id: '||l_end_qtr_id);
419 pji_utils.write2log('l_earliest_qtr_end_date: '||l_earliest_qtr_end_date);
420 pji_utils.write2log('l_latest_qtr_start_date: '||l_latest_qtr_start_date);
421 END IF;
422 END IF;
423
424 DELETE FROM pji_time_ent_qtr
425 WHERE ent_qtr_id in (SELECT DISTINCT period_year||quarter_num FROM pji_time_extr_tmp);
426
427 l_no_rows_deleted := SQL%rowcount;
428
429 IF g_debug_flag = 'Y' THEN
430 pji_utils.write2log('Some records have to be refreshed in PJI_TIME_ENT_QTR table.');
431 pji_utils.write2log(TO_CHAR(l_no_rows_deleted)||' records have been deleted from PJI_TIME_ENT_QTR table.');
432 END IF;
433
434 INSERT INTO pji_time_ent_qtr
435 (ent_qtr_id
436 , ent_year_id
437 , SEQUENCE
438 , NAME
439 , start_date
440 , end_date
441 , creation_date
442 , last_update_date
443 , last_updated_by
444 , created_by
445 , last_update_login)
446 SELECT period_year||quarter_num
447 , period_year
448 , quarter_num
449 , REPLACE(Fnd_Message.get_string('PJI','PJI_QUARTER_LABEL'),'&QUARTER_NUMBER',quarter_num)
450 ||'-'||
451 TO_CHAR(TO_DATE(period_year,'yyyy'),'RR')
452 , DECODE(period_year||quarter_num,l_end_qtr_id,l_latest_qtr_start_date,MIN(start_date))
453 , DECODE(period_year||quarter_num,l_start_qtr_id,l_earliest_qtr_end_date,MAX(end_date))
454 , SYSDATE
455 , SYSDATE
456 , g_user_id
457 , g_user_id
458 , g_login_id
459 FROM pji_time_extr_tmp
460 GROUP BY
461 period_year||quarter_num
462 , period_year
463 , quarter_num
464 HAVING MAX(end_date)<g_earliest_start_date
465 OR MIN(start_date)>g_latest_end_date
466 OR g_cal_info_exists = 'N';
467
468 l_no_rows_inserted := SQL%rowcount;
469
470 IF g_debug_flag = 'Y' THEN
471 pji_utils.write2log(TO_CHAR(l_no_rows_inserted)||' records have been inserted into PJI_TIME_ENT_QTR table.');
472 END IF;
473
474 EXCEPTION
475 WHEN DUP_VAL_ON_INDEX THEN
476 IF g_debug_flag = 'Y' THEN
477 pji_utils.write2log('Duplicate records. No records have been inserted into PJI_TIME_ENT_QTR table.');
478 END IF;
479 END LOAD_ENT_QTR;
480
481 ---------------------------------------------------
482 -- PRIVATE PROCEDURE load_ent_year
483 -- This procedure incrementally maintains year
484 -- entries in PJI_TIME_ENT_YEAR.
485 ---------------------------------------------------
486 PROCEDURE LOAD_ENT_YEAR IS
487 l_no_rows_deleted NUMBER := 0;
488 l_no_rows_inserted NUMBER := 0;
489 l_start_yr_id NUMBER;
490 l_end_yr_id NUMBER;
491 l_earliest_yr_end_date DATE;
492 l_latest_yr_start_date DATE;
493 BEGIN
494 IF g_cal_info_exists = 'Y' THEN
495 SELECT
496 MIN(ent_year_id) start_yr_id
497 , MAX(ent_year_id) end_yr_id
498 , MIN(end_date) earliest_yr_end_date
499 , MAX(start_date) latest_yr_start_date
500 INTO
501 l_start_yr_id
502 , l_end_yr_id
503 , l_earliest_yr_end_date
504 , l_latest_yr_start_date
505 FROM pji_time_ent_year
506 WHERE 1=1
507 AND (g_earliest_start_date BETWEEN start_date AND end_date)
508 OR (g_latest_end_date BETWEEN start_date AND end_date);
509 IF g_debug_flag = 'Y' THEN
510 pji_utils.write2log('l_start_yr_id: '||l_start_yr_id);
511 pji_utils.write2log('l_end_yr_id: '||l_end_yr_id);
512 pji_utils.write2log('l_earliest_yr_end_date: '||l_earliest_yr_end_date);
513 pji_utils.write2log('l_latest_yr_start_date: '||l_latest_yr_start_date);
514 END IF;
515 END IF;
516
517 DELETE FROM pji_time_ent_year
518 WHERE ent_year_id in (SELECT DISTINCT period_year from pji_time_extr_tmp);
519
520 l_no_rows_deleted := SQL%rowcount;
521
522 IF g_debug_flag = 'Y' THEN
523 pji_utils.write2log('Some records have to be refreshed in PJI_TIME_ENT_YEAR table.');
524 pji_utils.write2log(TO_CHAR(l_no_rows_deleted)||' records have been deleted from PJI_TIME_ENT_YEAR table.');
525 END IF;
526
527 INSERT INTO pji_time_ent_year
528 (ent_year_id
529 , period_set_name
530 , period_type
531 , SEQUENCE
532 , NAME
533 , start_date
534 , end_date
535 , creation_date
536 , last_update_date
537 , last_updated_by
538 , created_by
539 , last_update_login)
540 SELECT period_year
541 , g_period_set_name
542 , g_period_type
543 , period_year
544 , period_year
545 , DECODE(period_year,l_end_yr_id,l_latest_yr_start_date,MIN(start_date))
546 , DECODE(period_year,l_start_yr_id,l_earliest_yr_end_date,MAX(end_date))
547 , SYSDATE
548 , SYSDATE
549 , g_user_id
550 , g_user_id
551 , g_login_id
552 FROM pji_time_extr_tmp
553 GROUP BY period_year
554 HAVING MAX(end_date)<g_earliest_start_date
555 OR MIN(start_date)>g_latest_end_date
556 OR g_cal_info_exists = 'N';
557
558 l_no_rows_inserted := SQL%rowcount;
559
560 IF g_debug_flag = 'Y' THEN
561 pji_utils.write2log(TO_CHAR(l_no_rows_inserted)||' records have been inserted into PJI_TIME_ENT_YEAR table.');
562 END IF;
563
564 EXCEPTION
565 WHEN DUP_VAL_ON_INDEX THEN
566 IF g_debug_flag = 'Y' THEN
567 pji_utils.write2log('Duplicate records. No records have been inserted into PJI_TIME_ENT_YEAR table.');
568 END IF;
569 END LOAD_ENT_YEAR;
570
571 FUNCTION LOAD_CAL_PERIOD( p_calendar_id NUMBER
572 , p_period_set_name VARCHAR2
573 , p_period_type VARCHAR2
574 , p_earliest_start_date DATE
575 , p_latest_end_date DATE
576 , p_cal_info_exists VARCHAR2
577 , p_min_date IN OUT NOCOPY DATE ) RETURN BOOLEAN IS
578 l_no_rows_inserted NUMBER := 0;
579 l_min_date DATE;
580 l_max_date DATE;
581 BEGIN
582 DELETE pji_time_extr_tmp;
583
584 INSERT INTO pji_time_extr_tmp(period_year
585 , quarter_num
586 , period_num
587 , period_name
588 , start_date
589 , end_date)
590 SELECT period_year
591 , quarter_num
592 , period_num
593 , period_name
594 , start_date
595 , end_date
596 FROM gl_periods
597 WHERE 1=1
598 AND period_set_name = p_period_set_name
599 AND period_type = p_period_type
600 AND adjustment_period_flag='N'
601 AND (start_date < p_earliest_start_date
602 OR end_date > p_latest_end_date);
603
604 INSERT INTO pji_time_cal_period(cal_period_id
605 , cal_qtr_id
606 , calendar_id
607 , SEQUENCE
608 , NAME
609 , start_date
610 , end_date
611 , creation_date
612 , last_update_date
613 , last_updated_by
614 , created_by
615 , last_update_login)
616 SELECT LPAD(p_calendar_id,3,'0')||period_year||quarter_num
617 ||DECODE(LENGTH(period_num),1,'0'||period_num, period_num)
618 , LPAD(p_calendar_id,3,'0')||period_year||quarter_num
619 , LPAD(p_calendar_id,3,'0')
620 , period_num
621 , period_name
622 , start_date
623 , end_date
624 , SYSDATE
625 , SYSDATE
626 , g_user_id
627 , g_user_id
628 , g_login_id
629 FROM pji_time_extr_tmp;
630
631 l_no_rows_inserted := SQL%rowcount;
632
633 IF g_debug_flag = 'Y' THEN
634 pji_utils.write2log(TO_CHAR(l_no_rows_inserted)||' records have been inserted into PJI_TIME_CAL_PERIOD table.');
635 END IF;
636
637 IF l_no_rows_inserted > 0 THEN
638 SELECT MIN(start_date), MAX(end_date)
639 INTO l_min_date, l_max_date
640 FROM pji_time_cal_period
641 WHERE (start_date < p_earliest_start_date
642 OR end_date > p_latest_end_date)
643 AND calendar_id = p_calendar_id;
644
645 p_min_date:=l_min_date;
646
647 IF p_cal_info_exists = 'N' THEN
648 BEGIN
649 IF g_debug_flag = 'Y' THEN
650 pji_utils.write2log('Trying to insert record into PJI_TIME_EXTR_INFO table.');
651 END IF;
652 INSERT INTO pji_time_cal_extr_info
653 (calendar_id, earliest_start_date,
654 latest_end_date, creation_date,
655 last_update_date, last_updated_by,
656 created_by, last_update_login)
657 VALUES (p_calendar_id, l_min_date, l_max_date,
658 sysdate, sysdate, -1, -1, -1);
659 EXCEPTION
660 WHEN DUP_VAL_ON_INDEX THEN
661 IF g_debug_flag = 'Y' THEN
662 pji_utils.write2log('Duplicate records. Now trying to update the record...');
663 END IF;
664 UPDATE pji_time_cal_extr_info
665 SET earliest_start_date = LEAST(l_min_date, earliest_start_date)
666 , latest_end_date = GREATEST(l_max_date, latest_end_date)
667 WHERE calendar_id = p_calendar_id;
668 END;
669 ELSE
670 UPDATE pji_time_cal_extr_info
671 SET earliest_start_date = LEAST(l_min_date, earliest_start_date)
672 , latest_end_date = GREATEST(l_max_date, latest_end_date)
673 WHERE calendar_id = p_calendar_id;
674 END IF;
675
676 IF g_debug_flag = 'Y' THEN
677 pji_utils.write2log('Calendar ID: '||p_calendar_id);
678 pji_utils.write2log('Earliest Start Date: '||Fnd_Date.date_to_displaydate(l_min_date));
679 pji_utils.write2log('Latest End Date: '||Fnd_Date.date_to_displaydate(l_max_date));
680 END IF;
681
682 END IF;
683 IF l_no_rows_inserted >0 THEN
684 RETURN TRUE;
685 ELSE
686 RETURN FALSE;
687 END IF;
688 EXCEPTION
689 WHEN DUP_VAL_ON_INDEX THEN
690 IF g_debug_flag = 'Y' THEN
691 pji_utils.write2log('Duplicate records. No records have been inserted into PJI_TIME_CAL_PERIOD table.');
692 END IF;
693 RETURN FALSE;
694 END LOAD_CAL_PERIOD;
695
696 ---------------------------------------------------
697 -- PRIVATE PROCEDURE load_cal_qtr
698 -- This procedure incrementally maintains quarter
699 -- entries in PJI_TIME_CAL_YEAR.
700 ---------------------------------------------------
701 PROCEDURE LOAD_CAL_QUARTER(p_calendar_id NUMBER
702 , p_earliest_start_date DATE
703 , p_latest_end_date DATE
704 , p_cal_info_exists VARCHAR2)
705 IS
706 l_no_rows_deleted NUMBER := 0;
707 l_no_rows_inserted NUMBER := 0;
708 l_start_qtr_id NUMBER;
709 l_end_qtr_id NUMBER;
710 l_earliest_qtr_end_date DATE;
711 l_latest_qtr_start_date DATE;
712 BEGIN
713 IF p_cal_info_exists = 'Y' THEN
714 SELECT
715 MIN(cal_qtr_id) start_qtr_id
716 , MAX(cal_qtr_id) end_qtr_id
717 , MIN(end_date) earliest_qtr_end_date
718 , MAX(start_date) latest_qtr_start_date
719 INTO
720 l_start_qtr_id
721 , l_end_qtr_id
722 , l_earliest_qtr_end_date
723 , l_latest_qtr_start_date
724 FROM pji_time_cal_qtr
725 WHERE 1=1
726 AND calendar_id = p_calendar_id
727 AND (p_earliest_start_date BETWEEN start_date AND end_date)
728 OR (p_latest_end_date BETWEEN start_date AND end_date);
729 IF g_debug_flag = 'Y' THEN
730 pji_utils.write2log('l_start_qtr_id: '||l_start_qtr_id);
731 pji_utils.write2log('l_end_qtr_id: '||l_end_qtr_id);
732 pji_utils.write2log('l_earliest_qtr_end_date: '||l_earliest_qtr_end_date);
733 pji_utils.write2log('l_latest_qtr_start_date: '||l_latest_qtr_start_date);
734 END IF;
735 END IF;
736
737 DELETE FROM pji_time_cal_qtr
738 WHERE cal_qtr_id in (SELECT DISTINCT LPAD(p_calendar_id,3,'0')||period_year||quarter_num FROM pji_time_extr_tmp);
739
740 l_no_rows_deleted := SQL%rowcount;
741
742 IF g_debug_flag = 'Y' THEN
743 pji_utils.write2log('Some records have to be refreshed in PJI_TIME_CAL_QTR table.');
744 pji_utils.write2log(TO_CHAR(l_no_rows_deleted)||' records have been deleted from PJI_TIME_CAL_QTR table.');
745 END IF;
746
747 INSERT INTO pji_time_cal_qtr
748 (cal_qtr_id
749 , cal_year_id
750 , calendar_id
751 , SEQUENCE
752 , NAME
753 , start_date
754 , end_date
755 , creation_date
756 , last_update_date
757 , last_updated_by
758 , created_by
759 , last_update_login)
760 SELECT LPAD(p_calendar_id,3,'0')||period_year||quarter_num
761 , LPAD(p_calendar_id,3,'0')||period_year
762 , LPAD(p_calendar_id,3,'0')
763 , quarter_num
764 , TO_CHAR(quarter_num)||', '||TO_CHAR(period_year)
765 , DECODE(LPAD(p_calendar_id,3,'0')||period_year||quarter_num,l_end_qtr_id,l_latest_qtr_start_date,MIN(start_date))
766 , DECODE(LPAD(p_calendar_id,3,'0')||period_year||quarter_num,l_start_qtr_id,l_earliest_qtr_end_date,MAX(end_date))
767 , SYSDATE
768 , SYSDATE
769 , g_user_id
770 , g_user_id
771 , g_login_id
772 FROM pji_time_extr_tmp
773 GROUP BY period_year||quarter_num
774 , period_year
775 , quarter_num
776 HAVING MAX(end_date)<p_earliest_start_date
777 OR MIN(start_date)>p_latest_end_date
778 OR p_cal_info_exists = 'N';
779
780
781 l_no_rows_inserted := SQL%rowcount;
782
783 IF g_debug_flag = 'Y' THEN
784 pji_utils.write2log(TO_CHAR(l_no_rows_inserted)||' records have been inserted into PJI_TIME_CAL_QTR table.');
785 END IF;
786
787 EXCEPTION
788 WHEN DUP_VAL_ON_INDEX THEN
789 IF g_debug_flag = 'Y' THEN
790 pji_utils.write2log('Duplicate records. No records have been inserted into PJI_TIME_CAL_QTR table.');
791 END IF;
792 END LOAD_CAL_QUARTER;
793
794 ---------------------------------------------------
795 -- PRIVATE PROCEDURE load_cal_year
796 -- This procedure incrementally maintains year
797 -- entries in PJI_TIME_CAL_YEAR.
798 ---------------------------------------------------
799 PROCEDURE LOAD_CAL_YEAR(p_calendar_id NUMBER
800 , p_earliest_start_date DATE
801 , p_latest_end_date DATE
802 , p_cal_info_exists VARCHAR2) IS
803 l_no_rows_deleted NUMBER := 0;
804 l_no_rows_inserted NUMBER := 0;
805 l_start_yr_id NUMBER;
806 l_end_yr_id NUMBER;
807 l_earliest_yr_end_date DATE;
808 l_latest_yr_start_date DATE;
809 BEGIN
810 IF g_cal_info_exists = 'Y' THEN
811 SELECT
812 MIN(cal_year_id) start_yr_id
813 , MAX(cal_year_id) end_yr_id
814 , MIN(end_date) earliest_yr_end_date
815 , MAX(start_date) latest_yr_start_date
816 INTO
817 l_start_yr_id
818 , l_end_yr_id
819 , l_earliest_yr_end_date
820 , l_latest_yr_start_date
821 FROM pji_time_cal_year
822 WHERE 1=1
823 AND calendar_id = p_calendar_id
824 AND (g_earliest_start_date BETWEEN start_date AND end_date)
825 OR (g_latest_end_date BETWEEN start_date AND end_date);
826
827 IF g_debug_flag = 'Y' THEN
828 pji_utils.write2log('l_start_yr_id: '||l_start_yr_id);
829 pji_utils.write2log('l_end_yr_id: '||l_end_yr_id);
830 pji_utils.write2log('l_earliest_yr_end_date: '||l_earliest_yr_end_date);
831 pji_utils.write2log('l_latest_yr_start_date: '||l_latest_yr_start_date);
832 END IF;
833 END IF;
834
835 DELETE FROM pji_time_cal_year
836 WHERE cal_year_id in (SELECT DISTINCT LPAD(p_calendar_id,3,'0')||period_year from pji_time_extr_tmp);
837
838 l_no_rows_deleted := SQL%rowcount;
839
840 IF g_debug_flag = 'Y' THEN
841 pji_utils.write2log('Some records have to be refreshed in PJI_TIME_CAL_YEAR table.');
842 pji_utils.write2log(TO_CHAR(l_no_rows_deleted)||' records have been deleted from PJI_TIME_CAL_YEAR table.');
843 END IF;
844
845 INSERT INTO PJI_TIME_CAL_YEAR
846 (cal_year_id
847 , calendar_id
848 , SEQUENCE
849 , NAME
850 , start_date
851 , end_date
852 , creation_date
853 , last_update_date
854 , last_updated_by
855 , created_by
856 , last_update_login)
857 SELECT LPAD(p_calendar_id,3,'0')||period_year
858 , LPAD(p_calendar_id,3,'0')
859 , period_year
860 , period_year
861 , DECODE(LPAD(p_calendar_id,3,'0')||period_year,l_end_yr_id,l_latest_yr_start_date,MIN(start_date))
862 , DECODE(LPAD(p_calendar_id,3,'0')||period_year,l_start_yr_id,l_earliest_yr_end_date,MAX(end_date))
863 , SYSDATE
864 , SYSDATE
865 , g_user_id
866 , g_user_id
867 , g_login_id
868 FROM pji_time_extr_tmp
869 GROUP BY period_year
870 HAVING MAX(end_date)<p_earliest_start_date
871 OR MIN(start_date)>p_latest_end_date
872 OR p_cal_info_exists = 'N';
873
874 l_no_rows_inserted := SQL%rowcount;
875
876 IF g_debug_flag = 'Y' THEN
877 pji_utils.write2log(TO_CHAR(l_no_rows_inserted)||' records have been inserted into PJI_TIME_CAL_YEAR table.');
878 END IF;
879
880 EXCEPTION
881 WHEN DUP_VAL_ON_INDEX THEN
882 IF g_debug_flag = 'Y' THEN
883 pji_utils.write2log('Duplicate records. No records have been inserted into PJI_TIME_CAL_YEAR table.');
884 END IF;
885 END LOAD_CAL_YEAR;
886
887 ---------------------------------------------------
888 -- PRIVATE PROCEDURE load_time_rpt_struct
889 -- This procedure incrementally maintains
890 -- entries in PJI_TIME_RPT_STRUCT table.
891 ---------------------------------------------------
892 PROCEDURE LOAD_TIME_RPT_STRUCT IS
893 l_no_rows_inserted NUMBER;
894 l_year_start_date DATE;
895 l_qtr_start_date DATE;
896 l_period_start_date DATE;
897 l_year_end_date DATE;
898 l_qtr_end_date DATE;
899 l_period_end_date DATE;
900 BEGIN
901 IF g_min_date < g_earliest_start_date THEN
902 IF g_debug_flag = 'Y' THEN
903 pji_utils.write2log('The enterprise calendar has been extended before the earliest start date.');
904 END IF;
905 BEGIN
906 SELECT period.start_date period_start_date
907 , qtr.start_date qtr_start_date
908 , yr.start_date year_start_date
909 , period.end_date period_end_date
910 , qtr.end_date qtr_end_date
911 , yr.end_date year_end_date
912 INTO
913 l_period_start_date
914 , l_qtr_start_date
915 , l_year_start_date
916 , l_qtr_end_date
917 , l_period_end_date
918 , l_year_end_date
919 FROM pji_time_ent_period period
920 , pji_time_ent_qtr qtr
921 , pji_time_ent_year yr
922 WHERE 1=1
923 AND period.ent_qtr_id = qtr.ent_qtr_id
924 AND qtr.ent_year_id = yr.ent_year_id
925 AND period.start_date = g_earliest_start_date;
926
927 IF g_debug_flag = 'Y' THEN
928 pji_utils.write2log('Creating prior year records for time periods after the current year.');
929 END IF;
930
931 INSERT INTO PJI_TIME_RPT_STRUCT
932 (calendar_id
933 , calendar_type
934 , report_date
935 , time_id
936 , period_type_id
937 , record_type_id
938 , creation_date
939 , last_update_date
940 , last_updated_by
941 , created_by
942 , last_update_login)
943 SELECT
944 -1
945 , 'E'
946 , period.start_date
947 , year.ent_year_id
948 , 128
949 , 1024
950 , SYSDATE
951 , SYSDATE
952 , g_user_id
953 , g_user_id
954 , g_login_id
955 FROM PJI_TIME_ENT_YEAR year
956 , PJI_TIME_ENT_PERIOD period
957 WHERE year.end_date < l_year_start_date
958 AND period.start_date >= g_earliest_start_date;
959
960 l_no_rows_inserted := l_no_rows_inserted + SQL%rowcount;
961
962 IF g_debug_flag = 'Y' THEN
963 pji_utils.write2log('Creating prior quarter records for time periods records after current quarter.');
964 END IF;
965
966 INSERT INTO PJI_TIME_RPT_STRUCT
967 (calendar_id
968 , calendar_type
969 , report_date
970 , time_id
971 , period_type_id
972 , record_type_id
973 , creation_date
974 , last_update_date
975 , last_updated_by
976 , created_by
977 , last_update_login)
978 SELECT
979 -1
980 , 'E'
981 , period.start_date
982 , qtr.ent_qtr_id
983 , 64
984 , 64
985 , SYSDATE
986 , SYSDATE
987 , g_user_id
988 , g_user_id
989 , g_login_id
990 FROM PJI_TIME_ENT_QTR qtr
991 , PJI_TIME_ENT_PERIOD period
992 WHERE 1=1
993 AND qtr.end_date < l_qtr_start_date
994 AND qtr.start_date >= l_year_start_date
995 AND period.start_date >= g_earliest_start_date
996 AND period.end_date <= l_year_end_date;
997
998 l_no_rows_inserted := l_no_rows_inserted + SQL%rowcount;
999
1000 IF g_debug_flag = 'Y' THEN
1001 pji_utils.write2log('Creating prior period records for time periods records after current periods.');
1002 END IF;
1003
1004 INSERT INTO PJI_TIME_RPT_STRUCT
1005 (calendar_id
1006 , calendar_type
1007 , report_date
1008 , time_id
1009 , period_type_id
1010 , record_type_id
1011 , creation_date
1012 , last_update_date
1013 , last_updated_by
1014 , created_by
1015 , last_update_login)
1016 SELECT
1017 -1
1018 , 'E'
1019 , oldprd.start_date
1020 , newprd.ent_period_id
1021 , 32
1022 , 32
1023 , SYSDATE
1024 , SYSDATE
1025 , g_user_id
1026 , g_user_id
1027 , g_login_id
1028 FROM PJI_TIME_ENT_PERIOD newprd
1029 , PJI_TIME_ENT_PERIOD oldprd
1030 WHERE 1=1
1031 AND newprd.end_date < l_period_start_date
1032 AND newprd.start_date >= l_qtr_start_date
1033 AND oldprd.start_date >= g_earliest_start_date
1034 AND oldprd.end_date <= l_qtr_end_date;
1035
1036 l_no_rows_inserted := l_no_rows_inserted + SQL%rowcount;
1037 EXCEPTION
1038 WHEN NO_DATA_FOUND THEN
1039 IF g_debug_flag = 'Y' THEN
1040 pji_utils.write2log('Unable to derive records for earliest start date.');
1041 END IF;
1042 END;
1043 END IF;
1044
1045 IF g_debug_flag = 'Y' THEN
1046 pji_utils.write2log('Creating entries in the enterprise reporting structure table for extracted records only.');
1047 END IF;
1048
1049 FOR extr_rec IN (SELECT extr.start_date report_date
1050 , period.start_date period_start_date
1051 , qtr.start_date qtr_start_date
1052 , YEAR.start_date year_start_date
1053 , period.end_date period_end_date
1054 , qtr.end_date qtr_end_date
1055 , YEAR.end_date year_end_date
1056 FROM pji_time_extr_tmp extr
1057 , pji_time_ent_period period
1058 , pji_time_ent_qtr qtr
1059 , pji_time_ent_year YEAR
1060 WHERE 1=1
1061 AND TO_NUMBER(extr.period_year||extr.quarter_num||DECODE(LENGTH(extr.period_num),1,'0'||extr.period_num, extr.period_num)) = period.ent_period_id
1062 AND period.ent_qtr_id = qtr.ent_qtr_id
1063 AND qtr.ent_year_id = YEAR.ent_year_id)
1064 LOOP
1065 INSERT INTO PJI_TIME_RPT_STRUCT
1066 (calendar_id
1067 , calendar_type
1068 , report_date
1069 , time_id
1070 , period_type_id
1071 , record_type_id
1072 , creation_date
1073 , last_update_date
1074 , last_updated_by
1075 , created_by
1076 , last_update_login)
1077 SELECT
1078 -1
1079 , 'E'
1080 , extr_rec.report_date
1081 , ent_period_id
1082 , 32
1083 , 32
1084 , SYSDATE
1085 , SYSDATE
1086 , g_user_id
1087 , g_user_id
1088 , g_login_id
1089 FROM PJI_TIME_ENT_PERIOD
1090 WHERE start_date >= extr_rec.qtr_start_date
1091 AND start_date <= extr_rec.period_start_date
1092 AND end_date < extr_rec.report_date
1093 UNION ALL
1094 SELECT
1095 -1
1096 , 'E'
1097 , extr_rec.report_date
1098 , ent_period_id
1099 , 32
1100 , 256
1101 , SYSDATE
1102 , SYSDATE
1103 , g_user_id
1104 , g_user_id
1105 , g_login_id
1106 FROM PJI_TIME_ENT_PERIOD
1107 WHERE start_date >= extr_rec.qtr_start_date
1108 AND start_date <= extr_rec.period_start_date
1109 AND end_date >= extr_rec.report_date;
1110
1111 l_no_rows_inserted := l_no_rows_inserted + SQL%rowcount;
1112
1113 INSERT INTO PJI_TIME_RPT_STRUCT
1114 (calendar_id
1115 , calendar_type
1116 , report_date
1117 , time_id
1118 , period_type_id
1119 , record_type_id
1120 , creation_date
1121 , last_update_date
1122 , last_updated_by
1123 , created_by
1124 , last_update_login)
1125 SELECT
1126 -1
1127 , 'E'
1128 , extr_rec.report_date
1129 , ent_qtr_id
1130 , 64
1131 , 64
1132 , SYSDATE
1133 , SYSDATE
1134 , g_user_id
1135 , g_user_id
1136 , g_login_id
1137 FROM PJI_TIME_ENT_QTR
1138 WHERE start_date >= extr_rec.year_start_date
1139 AND start_date <= extr_rec.qtr_start_date
1140 AND end_date < extr_rec.report_date
1141 UNION ALL
1142 SELECT
1143 -1
1144 , 'E'
1145 , extr_rec.report_date
1146 , ent_qtr_id
1147 , 64
1148 , 512
1149 , SYSDATE
1150 , SYSDATE
1151 , g_user_id
1152 , g_user_id
1153 , g_login_id
1154 FROM PJI_TIME_ENT_QTR
1155 WHERE start_date >= extr_rec.year_start_date
1156 AND start_date <= extr_rec.qtr_start_date
1157 AND end_date >= extr_rec.report_date;
1158
1159 l_no_rows_inserted := l_no_rows_inserted + SQL%rowcount;
1160
1161 INSERT INTO PJI_TIME_RPT_STRUCT
1162 (calendar_id
1163 , calendar_type
1164 , report_date
1165 , time_id
1166 , period_type_id
1167 , record_type_id
1168 , creation_date
1169 , last_update_date
1170 , last_updated_by
1171 , created_by
1172 , last_update_login)
1173 SELECT
1174 -1
1175 , 'E'
1176 , extr_rec.report_date
1177 , ent_year_id
1178 , 128
1179 , 128
1180 , SYSDATE
1181 , SYSDATE
1182 , g_user_id
1183 , g_user_id
1184 , g_login_id
1185 FROM PJI_TIME_ENT_YEAR
1186 WHERE extr_rec.report_date BETWEEN start_date AND end_date
1187 UNION ALL
1188 SELECT
1189 -1
1190 , 'E'
1191 , extr_rec.report_date
1192 , ent_year_id
1193 , 128
1194 , 1024
1195 , SYSDATE
1196 , SYSDATE
1197 , g_user_id
1198 , g_user_id
1199 , g_login_id
1200 FROM PJI_TIME_ENT_YEAR
1201 WHERE end_date < extr_rec.report_date;
1202
1203 l_no_rows_inserted := l_no_rows_inserted + SQL%rowcount;
1204
1205 IF g_debug_flag = 'Y' THEN
1206 pji_utils.write2log(TO_CHAR(l_no_rows_inserted)||' records have been inserted into PJI_TIME_RPT_STRUCT table for date : '||Fnd_Date.date_to_displaydate(extr_rec.report_date));
1207 END IF;
1208
1209 END LOOP;
1210 END LOAD_TIME_RPT_STRUCT;
1211
1212 ---------------------------------------------------
1213 -- PRIVATE PROCEDURE load_time_cal_rpt_struct
1214 -- This procedure incrementally maintains
1215 -- entries in PJI_TIME_CAL_RPT_STRUCT table.
1216 ---------------------------------------------------
1217 PROCEDURE LOAD_TIME_CAL_RPT_STRUCT ( p_calendar_id NUMBER
1218 , p_earliest_start_date DATE
1219 , p_min_date DATE
1220 , p_cal_info_exists VARCHAR2
1221 ) IS
1222 l_no_rows_inserted NUMBER;
1223 l_year_start_date DATE;
1224 l_qtr_start_date DATE;
1225 l_period_start_date DATE;
1226 l_year_end_date DATE;
1227 l_qtr_end_date DATE;
1228 l_period_end_date DATE;
1229 BEGIN
1230 IF p_min_date < p_earliest_start_date and p_cal_info_exists <> 'N' THEN
1231 IF g_debug_flag = 'Y' THEN
1232 pji_utils.write2log('The fiscal calendar has been extended before the earliest start date.');
1233 END IF;
1234 BEGIN
1235 SELECT period.start_date period_start_date
1236 , qtr.start_date qtr_start_date
1237 , yr.start_date year_start_date
1238 , period.end_date period_end_date
1239 , qtr.end_date qtr_end_date
1240 , yr.end_date year_end_date
1241 INTO
1242 l_period_start_date
1243 , l_qtr_start_date
1244 , l_year_start_date
1245 , l_qtr_end_date
1246 , l_period_end_date
1247 , l_year_end_date
1248 FROM pji_time_cal_period period
1249 , pji_time_cal_qtr qtr
1250 , pji_time_cal_year yr
1251 WHERE 1=1
1252 AND period.calendar_id = p_calendar_id
1253 AND period.cal_qtr_id = qtr.cal_qtr_id
1254 AND qtr.cal_year_id = yr.cal_year_id
1255 AND period.start_date = p_earliest_start_date;
1256
1257 IF g_debug_flag = 'Y' THEN
1258 pji_utils.write2log('Creating prior year records for time periods after the current year.');
1259 END IF;
1260
1261 INSERT INTO PJI_TIME_CAL_RPT_STRUCT
1262 (calendar_id
1263 , calendar_type
1264 , report_date
1265 , time_id
1266 , period_type_id
1267 , record_type_id
1268 , creation_date
1269 , last_update_date
1270 , last_updated_by
1271 , created_by
1272 , last_update_login)
1273 SELECT
1274 p_calendar_id
1275 , 'G'
1276 , period.start_date
1277 , year.cal_year_id
1278 , 128
1279 , 1024
1280 , SYSDATE
1281 , SYSDATE
1282 , g_user_id
1283 , g_user_id
1284 , g_login_id
1285 FROM PJI_TIME_CAL_YEAR year
1286 , PJI_TIME_CAL_PERIOD period
1287 WHERE year.end_date < l_year_start_date
1288 AND year.calendar_id = p_calendar_id
1289 AND period.calendar_id = p_calendar_id
1290 AND period.start_date > p_earliest_start_date;
1291
1292 l_no_rows_inserted := l_no_rows_inserted + SQL%rowcount;
1293
1294 IF g_debug_flag = 'Y' THEN
1295 pji_utils.write2log('Creating prior quarter records for time periods records after current quarter.');
1296 END IF;
1297
1298 INSERT INTO PJI_TIME_CAL_RPT_STRUCT
1299 (calendar_id
1300 , calendar_type
1301 , report_date
1302 , time_id
1303 , period_type_id
1304 , record_type_id
1305 , creation_date
1306 , last_update_date
1307 , last_updated_by
1308 , created_by
1309 , last_update_login)
1310 SELECT
1311 p_calendar_id
1312 , 'G'
1313 , period.start_date
1314 , qtr.cal_qtr_id
1315 , 64
1316 , 64
1317 , SYSDATE
1318 , SYSDATE
1319 , g_user_id
1320 , g_user_id
1321 , g_login_id
1322 FROM PJI_TIME_CAL_QTR qtr
1323 , PJI_TIME_CAL_PERIOD period
1324 WHERE 1=1
1325 AND qtr.end_date < l_qtr_start_date
1326 AND qtr.start_date >= l_year_start_date
1327 AND qtr.calendar_id = p_calendar_id
1328 AND period.calendar_id = p_calendar_id
1329 AND period.start_date > p_earliest_start_date
1330 AND period.end_date <= l_year_end_date;
1331
1332 l_no_rows_inserted := l_no_rows_inserted + SQL%rowcount;
1333
1334 IF g_debug_flag = 'Y' THEN
1335 pji_utils.write2log('Creating prior period records for time periods records after current periods.');
1336 END IF;
1337
1338 INSERT INTO PJI_TIME_CAL_RPT_STRUCT
1339 (calendar_id
1340 , calendar_type
1341 , report_date
1342 , time_id
1343 , period_type_id
1344 , record_type_id
1345 , creation_date
1346 , last_update_date
1347 , last_updated_by
1348 , created_by
1349 , last_update_login)
1350 SELECT
1351 p_calendar_id
1352 , 'G'
1353 , oldprd.start_date
1354 , newprd.cal_period_id
1355 , 32
1356 , 32
1357 , SYSDATE
1358 , SYSDATE
1359 , g_user_id
1360 , g_user_id
1361 , g_login_id
1362 FROM PJI_TIME_CAL_PERIOD newprd
1363 , PJI_TIME_CAL_PERIOD oldprd
1364 WHERE 1=1
1365 AND newprd.end_date < l_period_start_date
1366 AND newprd.start_date >= l_qtr_start_date
1367 AND newprd.calendar_id = p_calendar_id
1368 AND oldprd.calendar_id = p_calendar_id
1369 AND oldprd.start_date > p_earliest_start_date
1370 AND oldprd.end_date <= l_qtr_end_date;
1371
1372 l_no_rows_inserted := l_no_rows_inserted + SQL%rowcount;
1373 EXCEPTION
1374 WHEN NO_DATA_FOUND THEN
1375 IF g_debug_flag = 'Y' THEN
1376 pji_utils.write2log('Unable to derive records for earliest start date.');
1377 END IF;
1378 END;
1379 END IF;
1380
1381 IF g_debug_flag = 'Y' THEN
1382 pji_utils.write2log('Creating entries in the fiscal reporting structure table for extracted records only.');
1383 END IF;
1384
1385 FOR extr_rec IN (SELECT extr.start_date report_date
1386 , period.start_date period_start_date
1387 , qtr.start_date qtr_start_date
1388 , YEAR.start_date year_start_date
1389 , period.end_date period_end_date
1390 , qtr.end_date qtr_end_date
1391 , YEAR.end_date year_end_date
1392 FROM pji_time_extr_tmp extr
1393 , pji_time_cal_period period
1394 , pji_time_cal_qtr qtr
1395 , pji_time_cal_year YEAR
1396 WHERE 1=1
1397 AND period.calendar_id = p_calendar_id
1398 AND TO_NUMBER(LPAD(p_calendar_id,3,'0')||period_year||quarter_num||DECODE(LENGTH(period_num),1,'0'||period_num, period_num)) = period.cal_period_id
1399 AND period.cal_qtr_id = qtr.cal_qtr_id
1400 AND qtr.cal_year_id = YEAR.cal_year_id)
1401 LOOP
1402 INSERT INTO PJI_TIME_CAL_RPT_STRUCT
1403 (calendar_id
1404 , calendar_type
1405 , report_date
1406 , time_id
1407 , period_type_id
1408 , record_type_id
1409 , creation_date
1410 , last_update_date
1411 , last_updated_by
1412 , created_by
1413 , last_update_login)
1414 SELECT
1415 p_calendar_id
1416 , 'G'
1417 , extr_rec.report_date
1418 , cal_period_id
1419 , 32
1420 , 32
1421 , SYSDATE
1422 , SYSDATE
1423 , g_user_id
1424 , g_user_id
1425 , g_login_id
1426 FROM PJI_TIME_CAL_PERIOD
1427 WHERE start_date >= extr_rec.qtr_start_date
1428 AND start_date <= extr_rec.period_start_date
1429 AND end_date < extr_rec.report_date
1430 AND calendar_id = p_calendar_id
1431 UNION ALL
1432 SELECT
1433 p_calendar_id
1434 , 'G'
1435 , extr_rec.report_date
1436 , cal_period_id
1437 , 32
1438 , 256
1439 , SYSDATE
1440 , SYSDATE
1441 , g_user_id
1442 , g_user_id
1443 , g_login_id
1444 FROM PJI_TIME_CAL_PERIOD
1445 WHERE start_date >= extr_rec.qtr_start_date
1446 AND start_date <= extr_rec.period_start_date
1447 AND end_date >= extr_rec.report_date
1448 AND calendar_id = p_calendar_id;
1449
1450 l_no_rows_inserted := l_no_rows_inserted + SQL%rowcount;
1451
1452 INSERT INTO PJI_TIME_CAL_RPT_STRUCT
1453 (calendar_id
1454 , calendar_type
1455 , report_date
1456 , time_id
1457 , period_type_id
1458 , record_type_id
1459 , creation_date
1460 , last_update_date
1461 , last_updated_by
1462 , created_by
1463 , last_update_login)
1464 SELECT
1465 p_calendar_id
1466 , 'G'
1467 , extr_rec.report_date
1468 , cal_qtr_id
1469 , 64
1470 , 64
1471 , SYSDATE
1472 , SYSDATE
1473 , g_user_id
1474 , g_user_id
1475 , g_login_id
1476 FROM PJI_TIME_CAL_QTR
1477 WHERE start_date >= extr_rec.year_start_date
1478 AND start_date <= extr_rec.qtr_start_date
1479 AND end_date < extr_rec.report_date
1480 AND calendar_id = p_calendar_id
1481 UNION ALL
1482 SELECT
1483 p_calendar_id
1484 , 'G'
1485 , extr_rec.report_date
1486 , cal_qtr_id
1487 , 64
1488 , 512
1489 , SYSDATE
1490 , SYSDATE
1491 , g_user_id
1492 , g_user_id
1493 , g_login_id
1494 FROM PJI_TIME_CAL_QTR
1495 WHERE start_date >= extr_rec.year_start_date
1496 AND start_date <= extr_rec.qtr_start_date
1497 AND end_date >= extr_rec.report_date
1498 AND calendar_id = p_calendar_id;
1499
1500 l_no_rows_inserted := l_no_rows_inserted + SQL%rowcount;
1501
1502 INSERT INTO PJI_TIME_CAL_RPT_STRUCT
1503 (calendar_id
1504 , calendar_type
1505 , report_date
1506 , time_id
1507 , period_type_id
1508 , record_type_id
1509 , creation_date
1510 , last_update_date
1511 , last_updated_by
1512 , created_by
1513 , last_update_login)
1514 SELECT
1515 p_calendar_id
1516 , 'G'
1517 , extr_rec.report_date
1518 , cal_year_id
1519 , 128
1520 , 128
1521 , SYSDATE
1522 , SYSDATE
1523 , g_user_id
1524 , g_user_id
1525 , g_login_id
1526 FROM PJI_TIME_CAL_YEAR
1527 WHERE extr_rec.report_date BETWEEN start_date AND end_date
1528 AND calendar_id = p_calendar_id
1529 UNION ALL
1530 SELECT
1531 p_calendar_id
1532 , 'G'
1533 , extr_rec.report_date
1534 , cal_year_id
1535 , 128
1536 , 1024
1537 , SYSDATE
1538 , SYSDATE
1539 , g_user_id
1540 , g_user_id
1541 , g_login_id
1542 FROM PJI_TIME_CAL_YEAR
1543 WHERE end_date < extr_rec.report_date
1544 AND calendar_id = p_calendar_id;
1545
1546 l_no_rows_inserted := l_no_rows_inserted + SQL%rowcount;
1547
1548 IF g_debug_flag = 'Y' THEN
1549 pji_utils.write2log(TO_CHAR(l_no_rows_inserted)||' records have been inserted into PJI_TIME_CAL_RPT_STRUCT table for date : '||Fnd_Date.date_to_displaydate(extr_rec.report_date));
1550 END IF;
1551
1552 END LOOP;
1553 END LOAD_TIME_CAL_RPT_STRUCT;
1554
1555 ---------------------------------------------------
1556 -- PUBLIC PROCEDURE load
1557 -- This is a public procedure that extracts
1558 -- GL period definitions into time summary tables.
1559 -- parameters :
1560 -- p_period_set_name - GL periodset name to extract
1561 -- p_period_type - GL periodset name to extract
1562 -- x_return_status - Standard return status:
1563 -- Success = Fnd_Api.G_RET_STS_SUCCESS
1564 -- Error = Fnd_Api.G_RET_STS_ERROR
1565 -- Unexp Error = G_RET_Fnd_Api.STS_UNEXP_ERROR
1566 -- x_msg_count - Standard message param used in FWK
1567 -- x_msg_data - Standard message param used in FWK
1568 ---------------------------------------------------
1569 PROCEDURE LOAD( p_period_set_name VARCHAR2 DEFAULT NULL
1570 , p_period_type VARCHAR2 DEFAULT NULL
1571 , x_return_status OUT NOCOPY VARCHAR2
1572 , x_msg_count OUT NOCOPY NUMBER
1573 , x_msg_data OUT NOCOPY VARCHAR2) IS
1574 PRAGMA AUTONOMOUS_TRANSACTION;
1575 l_calendar_id NUMBER;
1576 l_calendar_ids_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1577 l_period_set_name_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1578 l_period_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1579 l_earliest_start_dates_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1580 l_latest_end_dates_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1581 l_cal_info_exists_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1582 l_earliest_start_date DATE;
1583 l_latest_end_date DATE;
1584 l_min_date DATE;
1585 l_process_ent_flag VARCHAR2(1);
1586 BEGIN
1587
1588 IF p_period_set_name IS NULL AND p_period_set_name IS NULL THEN
1589 --Call fii calendar load program.
1590 LOAD_CAL_NAME; /* Modified for bug 12979524 */
1591 ELSIF p_period_set_name IS NOT NULL AND p_period_set_name IS NOT NULL THEN
1592 BEGIN
1593 SELECT calendar_id
1594 INTO l_calendar_id
1595 FROM pa_time_cal_name /* Modified for bug 12979524 */
1596 WHERE period_set_name = p_period_set_name
1597 AND period_type = p_period_type;
1598 EXCEPTION
1599 WHEN NO_DATA_FOUND THEN
1600 -- Call fii calendar incremental load program.
1601 LOAD_CAL_NAME; /* Modified for bug 12979524 */
1602 END;
1603 END IF;
1604
1605 SELECT cal.calendar_id
1606 , period_set_name
1607 , period_type
1608 , NVL(info.earliest_start_date,TRUNC(SYSDATE))
1609 , NVL(info.latest_end_date,TRUNC(SYSDATE))
1610 , DECODE(NVL(info.earliest_start_date,TRUNC(SYSDATE)),info.earliest_start_date,'Y','N')
1611 BULK COLLECT INTO
1612 l_calendar_ids_tbl
1613 , l_period_set_name_tbl
1614 , l_period_type_tbl
1615 , l_earliest_start_dates_tbl
1616 , l_latest_end_dates_tbl
1617 , l_cal_info_exists_tbl
1618 FROM pa_time_cal_name cal /* Modified for bug 12979524 */
1619 , PJI_TIME_CAL_EXTR_INFO info
1620 WHERE 1=1
1621 AND cal.calendar_id = info.calendar_id (+)
1622 AND cal.calendar_id = NVL(l_calendar_id,cal.calendar_id)
1623 AND cal.period_set_name = NVL(p_period_set_name,cal.period_set_name)
1624 AND cal.period_type = NVL(p_period_type,cal.period_type);
1625
1626 --load week
1627 /*
1628 ** Defer the coding of week logic.
1629 */
1630 /*
1631 IF g_cal_info_exists = 'N' THEN
1632 LOAD_WEEK(g_earliest_start_date, g_latest_end_date);
1633 ELSE
1634 LOAD_WEEK(g_earliest_start_date, g_latest_end_date);
1635 LOAD_WEEK(g_earliest_start_date, g_latest_end_date);
1636 END IF;
1637 */
1638
1639 BEGIN
1640 l_process_ent_flag:='Y';
1641 INIT;
1642 EXCEPTION
1643 WHEN G_LOGIN_INFO_NOT_FOUND OR G_BIS_PARAMETER_NOT_SETUP THEN
1644 l_process_ent_flag:='N';
1645 NULL;
1646 END;
1647
1648 IF g_debug_flag = 'Y' THEN
1649 pji_utils.write2log(' ');
1650 pji_utils.write2log('Processing Enterprise calendar.');
1651 START_TIMER;
1652 END IF;
1653
1654 IF l_process_ent_flag='Y' AND LOAD_ENT_PERIOD THEN
1655 IF g_debug_flag = 'Y' THEN
1656 STOP_TIMER;
1657 PRINT_TIMER('Process Time for Enterprise Period API');
1658 START_TIMER;
1659 END IF;
1660
1661 LOAD_ENT_QTR;
1662 IF g_debug_flag = 'Y' THEN
1663 STOP_TIMER;
1664 PRINT_TIMER('Process Time for Enterprise Quarter API');
1665 START_TIMER;
1666 END IF;
1667
1668 LOAD_ENT_YEAR;
1669 IF g_debug_flag = 'Y' THEN
1670 STOP_TIMER;
1671 PRINT_TIMER('Process Time for Enterprise Year API');
1672 START_TIMER;
1673 END IF;
1674
1675 LOAD_TIME_RPT_STRUCT;
1676 IF g_debug_flag = 'Y' THEN
1677 STOP_TIMER;
1678 PRINT_TIMER('Process Time for Enterprise Reporting Structures API');
1679 pji_utils.write2log(' ');
1680 END IF;
1681 ELSE
1682 IF g_debug_flag = 'Y' THEN
1683 STOP_TIMER;
1684 PRINT_TIMER('Process Time for Enterprise Period API');
1685 pji_utils.write2log('No further changes to extract for enterprise calendar.'||
1686 'Skipping Quarter, Year and Reporting Struct APIs.');
1687 pji_utils.write2log(' ');
1688 END IF;
1689 END IF;
1690
1691 IF l_calendar_ids_tbl.COUNT > 0 THEN
1692 FOR i IN l_calendar_ids_tbl.FIRST..l_calendar_ids_tbl.LAST
1693 LOOP
1694 IF g_debug_flag = 'Y' THEN
1695 pji_utils.write2log('Processing Fiscal calendar '||l_period_set_name_tbl(i)||
1696 '('||l_period_type_tbl(i)||').');
1697 START_TIMER;
1698 END IF;
1699 IF LOAD_CAL_PERIOD( l_calendar_ids_tbl(i)
1700 , l_period_set_name_tbl(i)
1701 , l_period_type_tbl(i)
1702 , l_earliest_start_dates_tbl(i)
1703 , l_latest_end_dates_tbl(i)
1704 , l_cal_info_exists_tbl(i)
1705 , l_min_date) THEN
1706 IF g_debug_flag = 'Y' THEN
1707 STOP_TIMER;
1708 PRINT_TIMER('Process Time for Fiscal Period API');
1709 START_TIMER;
1710 END IF;
1711
1712 LOAD_CAL_QUARTER(l_calendar_ids_tbl(i)
1713 , l_earliest_start_dates_tbl(i)
1714 , l_latest_end_dates_tbl(i)
1715 , l_cal_info_exists_tbl(i));
1716 IF g_debug_flag = 'Y' THEN
1717 STOP_TIMER;
1718 PRINT_TIMER('Process Time for Fiscal Quarter API');
1719 START_TIMER;
1720 END IF;
1721
1722 LOAD_CAL_YEAR(l_calendar_ids_tbl(i)
1723 , l_earliest_start_dates_tbl(i)
1724 , l_latest_end_dates_tbl(i)
1725 , l_cal_info_exists_tbl(i));
1726 IF g_debug_flag = 'Y' THEN
1727 STOP_TIMER;
1728 PRINT_TIMER('Process Time for Fiscal Year API');
1729 START_TIMER;
1730 END IF;
1731
1732 LOAD_TIME_CAL_RPT_STRUCT(l_calendar_ids_tbl(i)
1733 , l_earliest_start_dates_tbl(i)
1734 , l_min_date
1735 , l_cal_info_exists_tbl(i));
1736 IF g_debug_flag = 'Y' THEN
1737 STOP_TIMER;
1738 PRINT_TIMER('Process Time for Fiscal Reporting Structures API');
1739 pji_utils.write2log(' ');
1740 END IF;
1741 ELSE
1742 IF g_debug_flag = 'Y' THEN
1743 STOP_TIMER;
1744 PRINT_TIMER('Process Time for Fiscal Period API');
1745 pji_utils.write2log('No further changes to extract for this calendar. '||
1746 'Skipping Quarter, Year and Reporting Struct APIs...');
1747 pji_utils.write2log(' ');
1748 END IF;
1749 END IF;
1750 NULL;
1751 END LOOP;
1752 END IF;
1753 x_return_status:=Fnd_Api.G_RET_STS_SUCCESS;
1754 COMMIT;
1755 EXCEPTION
1756 WHEN OTHERS THEN
1757 pji_utils.write2log(' ');
1758 pji_utils.write2log(' ');
1759 x_return_status:=Fnd_Api.G_RET_STS_SUCCESS;
1760 ROLLBACK;
1761 END LOAD;
1762
1763 /* Added for bug 12979524 */
1764 PROCEDURE LOAD_CAL_NAME IS
1765
1766 -- ---------------------------------------------------------
1767 -- Define local variables
1768 -- ---------------------------------------------------------
1769 l_status VARCHAR2(30);
1770 l_industry VARCHAR2(30);
1771 l_name_row number;
1772 l_max_cal_name number;
1773
1774 cursor new_cal is
1775 select distinct gl.period_set_name, gl.period_type from gl_periods gl
1776 minus
1777 select distinct cal.period_set_name, cal.period_type from pa_time_cal_name cal;
1778
1779 begin
1780
1781 -- ---------------------------------------------------------
1782 -- Variable initialization
1783 -- ---------------------------------------------------------
1784 l_name_row := 0;
1785
1786 select nvl(max(calendar_id),0)
1787 into l_max_cal_name
1788 from pa_time_cal_name;
1789
1790 -- ----------------------
1791 -- Populate Calendar Name Level
1792 -- ----------------------
1793 FOR new_cal_rec IN new_cal LOOP
1794
1795 insert into pa_time_cal_name
1796 (calendar_id,
1797 period_set_name,
1798 period_type,
1799 name,
1800 creation_date,
1801 last_update_date,
1802 last_updated_by,
1803 created_by,
1804 last_update_login)
1805 values(
1806 l_max_cal_name+1,
1807 new_cal_rec.period_set_name,
1808 new_cal_rec.period_type,
1809 new_cal_rec.period_set_name||' ('||new_cal_rec.period_type||')',
1810 sysdate,
1811 sysdate,
1812 g_user_id,
1813 g_user_id,
1814 g_login_id);
1815
1816 l_max_cal_name := l_max_cal_name+1;
1817 l_name_row := l_name_row+1;
1818
1819 end loop;
1820
1821 commit;
1822
1823 if l_name_row > 0 then
1824
1825 fnd_stats.gather_table_stats( ownname => 'PA'
1826 , tabname => 'PA_TIME_CAL_NAME'
1827 );
1828
1829 end if;
1830
1831 end LOAD_CAL_NAME;
1832 /* Added for bug 12979524 */
1833
1834 BEGIN
1835 --NULL;
1836 INIT;
1837 END PJI_TIME_C;