[Home] [Help]
PACKAGE BODY: APPS.MSD_TRANSLATE_TIME_DATA
Source
1 PACKAGE BODY MSD_TRANSLATE_TIME_DATA AS
2 /* $Header: msdttimb.pls 115.22 2004/08/05 10:46:26 sudekuma ship $ */
3
4 /* Private Global Variables **/
5 g_seq_num NUMBER := 0 ;
6
7
8 -- Public Procedures
9
10 procedure translate_time_data(
11 errbuf OUT NOCOPY VARCHAR2,
12 retcode OUT NOCOPY VARCHAR2,
13 p_source_table IN VARCHAR2,
14 p_dest_table IN VARCHAR2,
15 p_instance_id IN NUMBER,
16 p_calendar_type_id IN NUMBER,
17 p_calendar_code IN VARCHAR2,
18 p_from_date IN DATE,
19 p_to_date IN DATE) IS
20 v_instance_id varchar2(40);
21 v_retcode number;
22 v_sql_stmt varchar2(4000);
23 x_dblink varchar2(128);
24 TYPE Fiscal_Month_Cursor IS REF CURSOR;
25 TYPE Update_Cursor IS REF CURSOR;
26 Fiscal_Month_Cur Fiscal_Month_Cursor ;
27 Update_Cur Update_Cursor ;
28 x_calendar_code varchar2(15);
29 x_SEQ_NUM NUMBER;
30 x_YEAR VARCHAR2(15);
31 x_YEAR_DESCRIPTION VARCHAR2(15);
32 x_YEAR_START_DATE DATE;
33 x_YEAR_END_DATE DATE;
34 x_QUARTER VARCHAR2(15);
35 x_QUARTER_DESCRIPTION VARCHAR2(15);
36 x_QUARTER_START_DATE DATE;
37 x_QUARTER_END_DATE DATE;
38 x_MONTH VARCHAR2(15);
39 x_MONTH_DESCRIPTION VARCHAR2(15);
40 x_MONTH_START_DATE DATE;
41 x_MONTH_END_DATE DATE;
42 x_max_days DATE ;
43
44 l_calendar_code VARCHAR2(20);
45 v_day_range_stmt VARCHAR2(4000);
46 v_month_range_stmt VARCHAR2(4000);
47
48 Begin
49
50
51 /**************************************************
52 - 1. Get the instance id from MSC_APP_INSTANCE
53 - 2. Get the Profile Value for MSD_DIRECT_LOAD
54 - to identify whether we need to insert the
55 - data into the staging tables or the
56 - fact tables.
57 - 3. Check for the Data Duplication, we should
58 - use the forecast_designator for this fact.
59 - 4. Insert the Data accordingly into the
60 - Staging or the Fact table based on the
61 - MSD_SR_MFG_FCST_V
62 - 5. Commit
63 ****************************************************/
64
65
66 retcode :=0;
67 Savepoint Before_Delete ;
68
69
70 IF (p_calendar_type_id <> MSD_COMMON_UTILITIES.GREGORIAN_CALENDAR ) THEN
71 msd_common_utilities.get_db_link(p_instance_id, x_dblink, retcode);
72 if (retcode = -1) then
73 retcode :=-1;
74 return;
75 end if;
76 END IF;
77
78
79 /* TEST DWK */
80 IF (p_calendar_type_id = MSD_COMMON_UTILITIES.GREGORIAN_CALENDAR ) THEN
81 l_calendar_code := 'GREGORIAN';
82 ELSE
83 l_calendar_code := p_calendar_code;
84 END IF;
85
86 /* DWK Delete existing data from MSD_TIME before collection */
87
88 if (l_calendar_code is null) then
89 delete from msd_time
90 where calendar_type = p_calendar_type_id;
91 else
92 delete from msd_time
93 where calendar_code = l_calendar_code
94 and calendar_type = p_calendar_type_id;
95 end if;
96
97 v_day_range_stmt := ' and day between :p_from_date AND :p_to_date ';
98 v_month_range_stmt := ' and month_end_date between :p_from_date AND :p_to_date ';
99
100
101 /* You need to generate all the Gregorian Hierarchy for this
102 Date range mentioned below */
103 /* DWK outer IF 1 */
104 IF (p_calendar_type_id = MSD_COMMON_UTILITIES.GREGORIAN_CALENDAR ) then
105
106 Generate_Gregorian( errbuf,
107 retcode,
108 l_calendar_code,
109 p_from_date,
110 p_to_date ) ;
111
112 /* In this section the Hierarchy is already exploded to the Day Level */
113 /* ELSIF for outer IF 1 */
114 ELSIF (p_calendar_type_id = MSD_COMMON_UTILITIES.MANUFACTURING_CALENDAR) or
115 ( ( (p_calendar_type_id = MSD_COMMON_UTILITIES.FISCAL_CALENDAR)
116 or
117 (p_calendar_type_id = MSD_COMMON_UTILITIES.COMPOSITE_CALENDAR)
118
119 )
120 and
121 (p_source_table = MSD_COMMON_UTILITIES.TIME_STAGING_TABLE) ) then
122
123 v_sql_stmt := 'insert into ' || p_dest_table || ' ( ' ||
124 'instance, ' ||
125 'calendar_type, ' ||
126 'calendar_code, ' ||
127 'seq_num, ' ||
128 'YEAR, ' ||
129 'YEAR_DESCRIPTION, ' ||
130 'YEAR_START_DATE, ' ||
131 'YEAR_END_DATE, ' ||
132 'QUARTER, ' ||
133 'QUARTER_DESCRIPTION, ' ||
134 'QUARTER_START_DATE, ' ||
135 'QUARTER_END_DATE, ' ||
136 'MONTH, ' ||
137 'MONTH_DESCRIPTION, ' ||
138 'MONTH_START_DATE, ' ||
139 'MONTH_END_DATE, ' ||
140 'WEEK, ' ||
141 'WEEK_DESCRIPTION, ' ||
142 'WEEK_START_DATE, ' ||
143 'WEEK_END_DATE, ' ||
144 'DAY, ' ||
145 'DAY_DESCRIPTION, ' ||
146 'LAST_UPDATE_DATE, ' ||
147 'last_updated_by, ' ||
148 'creation_date, ' ||
149 'created_by, ' ||
150 'LAST_UPDATE_LOGIN ) ' ||
151 'select ''' ||
152 p_instance_id ||''', ' ||
153 p_calendar_type_id ||
154 ', calendar_code, ' ||
155 'seq_num, ' ||
156 'YEAR, ' ||
157 'YEAR_DESCRIPTION, ' ||
158 'YEAR_START_DATE, ' ||
159 'YEAR_END_DATE, ' ||
160 'QUARTER, ' ||
161 'QUARTER_DESCRIPTION, ' ||
162 'QUARTER_START_DATE, ' ||
163 'QUARTER_END_DATE, ' ||
164 'MONTH, ' ||
165 'MONTH_DESCRIPTION, ' ||
166 'MONTH_START_DATE, ' ||
167 'MONTH_END_DATE, ' ||
168 'WEEK, ' ||
169 'WEEK_DESCRIPTION, ' ||
170 'WEEK_START_DATE, ' ||
171 'WEEK_END_DATE, ' ||
172 'DAY, ' ||
173 'DAY_DESCRIPTION, ' ||
174 'sysdate, ' ||
175 FND_GLOBAL.USER_ID || ', ' ||
176 'sysdate, ' ||
177 FND_GLOBAL.USER_ID || ', ' ||
178 FND_GLOBAL.USER_ID || ' ' ||
179 'from ' ||
180 p_source_table ||
181 ' where calendar_code = NVL(:l_calendar_code, calendar_code)' ;
182
183 -- If it is from the staging area then we need to add the
184 -- filter for unique instance id
185 if (p_source_table = MSD_COMMON_UTILITIES.TIME_STAGING_TABLE) then
186 v_sql_stmt := v_sql_stmt || ' and instance = :p_instance_id ';
187 end if ;
188
189 if ((p_calendar_type_id = MSD_COMMON_UTILITIES.MANUFACTURING_CALENDAR)
190 and
191 (p_source_table <> MSD_COMMON_UTILITIES.TIME_STAGING_TABLE)
192 and (l_calendar_code is null)) then
193 v_sql_stmt := v_sql_stmt || ' and calendar_code in (SELECT distinct mod.calendar_code FROM msd_organization_definitions';
194 v_sql_stmt := v_sql_stmt || x_dblink || ' mod' || ', msd_app_instance_orgs' || x_dblink || ' maio' || ' WHERE mod.organization_id = maio.organization_id) ';
195 end if;
196
197
198 /* DWK Populate dates which falls within day range */
199 v_sql_stmt := v_sql_stmt || v_day_range_stmt;
200
201
202 if (p_source_table = MSD_COMMON_UTILITIES.TIME_STAGING_TABLE) then
203 EXECUTE IMMEDIATE v_sql_stmt
204 using l_calendar_code,
205 p_instance_id,
206 nvl(p_from_date, to_date('01-01-0001', 'DD-MM-RRRR')),
207 nvl(p_to_date, to_date('01-01-9999', 'DD-MM-RRRR'));
208 else
209
210 EXECUTE IMMEDIATE v_sql_stmt
211 using l_calendar_code,
212 nvl(p_from_date, to_date('01-01-0001', 'DD-MM-RRRR')),
213 nvl(p_to_date, to_date('01-01-9999', 'DD-MM-RRRR'));
214 end if;
215
216 /* In this range we need to get the information for the Days */
217 /* for the Fiscal Calendar from the source views */
218 /* DWK ELSE for outer IF 1 */
219 ELSE
220 v_sql_stmt := 'select ' ||
221 ' calendar_code, ' ||
222 ' YEAR, ' ||
223 ' YEAR_DESCRIPTION, ' ||
224 ' YEAR_START_DATE, ' ||
225 ' YEAR_END_DATE, ' ||
226 ' QUARTER, ' ||
227 ' QUARTER_DESCRIPTION, ' ||
228 ' QUARTER_START_DATE, ' ||
229 ' QUARTER_END_DATE, ' ||
230 ' MONTH, ' ||
231 ' MONTH_DESCRIPTION, ' ||
232 ' MONTH_START_DATE, ' ||
233 ' MONTH_END_DATE ' ||
234 ' from ' ||
235 p_source_table ||
236 ' where calendar_code = NVL( :p_calendar_code ' ||
237 ', calendar_code) ' || v_month_range_stmt;
238
239
240 OPEN Fiscal_Month_Cur FOR v_sql_stmt
241 using p_calendar_code,
242 nvl(p_from_date, to_date('01-01-0001', 'DD-MM-RRRR')),
243 nvl(p_to_date, to_date('01-01-9999', 'DD-MM-RRRR'));
244
245 LOOP
246 FETCH Fiscal_Month_Cur
247 INTO x_calendar_code,
248 x_YEAR,
249 x_YEAR_DESCRIPTION,
250 x_YEAR_START_DATE,
251 x_YEAR_END_DATE,
252 x_QUARTER,
253 x_QUARTER_DESCRIPTION,
254 x_QUARTER_START_DATE,
255 x_QUARTER_END_DATE,
256 x_MONTH,
257 x_MONTH_DESCRIPTION,
258 x_MONTH_START_DATE,
259 x_MONTH_END_DATE;
260
261 EXIT WHEN Fiscal_Month_Cur%NOTFOUND;
262
263 Explode_Fiscal_Dates(
264 errbuf => errbuf,
265 retcode => retcode,
266 p_dest_table => p_dest_table,
267 p_instance_id => p_instance_id,
268 p_calendar_type_id => p_calendar_type_id,
269 p_calendar_code => x_calendar_code,
270 p_seq_num => null,
271 p_year => x_year,
272 p_year_description => x_year_description,
273 p_year_start_date => x_year_start_date,
274 p_year_end_date => x_year_end_date,
275 p_quarter => x_quarter,
276 p_quarter_description => x_quarter_description,
277 p_quarter_start_date => x_quarter_start_date,
278 p_quarter_end_date => x_quarter_end_date,
279 p_month => x_month,
280 p_month_description => x_month_description,
281 p_month_start_date => x_month_start_date,
282 p_month_end_date => x_month_end_date,
283 p_from_date => p_from_date,
284 p_to_date => p_to_date );
285
286 END LOOP;
287 CLOSE Fiscal_Month_Cur;
288
289 END IF; /* End of outer IF 1 */
290
291 -- fill in missing dates for manufacturing calendar on the fact
292 if (p_calendar_type_id = MSD_COMMON_UTILITIES.MANUFACTURING_CALENDAR) and
293 (p_dest_table = MSD_COMMON_UTILITIES.TIME_FACT_TABLE) then
294 fix_manufacturing(errbuf, retcode, p_calendar_code);
295 end if;
296
297 COMMIT;
298
299
300 EXCEPTION
301
302 when others then
303
304 errbuf := substr(SQLERRM,1,150);
305 fnd_file.put_line(fnd_file.log, substr(SQLERRM,1,1000));
306 retcode := -1 ;
307 rollback to Savepoint Before_Delete ;
308
309
310 END translate_time_data ;
311
312
313 /* Even though the Start and End dates are passed we do not use
314 them as we do not use them for fiscal calendar
315 */
316 procedure Explode_Fiscal_Dates(
317 errbuf OUT NOCOPY VARCHAR2,
318 retcode OUT NOCOPY VARCHAR2,
319 p_dest_table IN VARCHAR2,
320 p_instance_id IN NUMBER,
321 p_calendar_type_id IN NUMBER,
322 p_calendar_code IN VARCHAR2,
323 p_seq_num IN NUMBER,
324 p_year IN VARCHAR2,
325 p_year_description IN VARCHAR2,
326 p_year_start_date IN DATE,
327 p_year_end_date IN DATE,
328 p_quarter IN VARCHAR2,
329 p_quarter_description IN VARCHAR2,
330 p_quarter_start_date IN DATE,
331 p_quarter_end_date IN DATE,
332 p_month IN VARCHAR2,
333 p_month_description IN VARCHAR2,
334 p_month_start_date IN DATE,
335 p_month_end_date IN DATE,
336 p_from_date IN DATE,
337 p_to_date IN DATE) IS
338
339 v_num_of_days NUMBER;
340 v_current_date DATE ;
341 x_count NUMBER;
342 Begin
343
344 x_count := p_month_end_date - p_month_start_date ;
345
346 if (p_dest_table = MSD_COMMON_UTILITIES.TIME_FACT_TABLE) then
347
348 For v_num_of_days in 0..(p_month_end_date - p_month_start_date) LOOP
349
350 g_seq_num := g_seq_num + 1 ;
351
352 insert into msd_time (
353 instance,
354 calendar_type,
355 calendar_code,
356 seq_num,
357 YEAR,
358 YEAR_DESCRIPTION,
359 YEAR_START_DATE,
360 YEAR_END_DATE,
361 QUARTER,
362 QUARTER_DESCRIPTION,
363 QUARTER_START_DATE,
364 QUARTER_END_DATE,
365 MONTH,
366 MONTH_DESCRIPTION,
367 MONTH_START_DATE,
368 MONTH_END_DATE,
372 last_updated_by,
369 DAY,
370 DAY_DESCRIPTION,
371 LAST_UPDATE_DATE,
373 creation_date,
374 created_by,
375 LAST_UPDATE_LOGIN )
376 values(
377 p_instance_id,
378 p_calendar_type_id,
379 p_calendar_code,
380 g_seq_num,
381 p_year,
382 p_year_description,
383 p_year_start_date,
384 p_year_end_date,
385 p_quarter,
386 p_quarter_description,
387 p_quarter_start_date,
388 p_quarter_end_date,
389 p_month,
390 p_month_description,
391 p_month_start_date,
392 p_month_end_date,
393 p_month_start_date+v_num_of_days,
394 p_month_start_date+v_num_of_days,
395 sysdate,
396 FND_GLOBAL.USER_ID ,
397 sysdate,
398 FND_GLOBAL.USER_ID ,
399 FND_GLOBAL.USER_ID
400 ) ;
401
402
403 End Loop ;
404
405 elsif (p_dest_table = MSD_COMMON_UTILITIES.TIME_STAGING_TABLE) then
406
407 For v_num_of_days in 0..(p_month_end_date - p_month_start_date) LOOP
408
409 g_seq_num := g_seq_num + 1 ;
410
411 insert into msd_st_time (
412 instance,
413 calendar_type,
414 calendar_code,
415 seq_num,
416 YEAR,
417 YEAR_DESCRIPTION,
418 YEAR_START_DATE,
419 YEAR_END_DATE,
420 QUARTER,
421 QUARTER_DESCRIPTION,
422 QUARTER_START_DATE,
423 QUARTER_END_DATE,
424 MONTH,
425 MONTH_DESCRIPTION,
426 MONTH_START_DATE,
427 MONTH_END_DATE,
428 DAY,
429 DAY_DESCRIPTION,
430 LAST_UPDATE_DATE,
431 last_updated_by,
432 creation_date,
433 created_by,
434 LAST_UPDATE_LOGIN )
435 values(
436 p_instance_id,
437 p_calendar_type_id,
438 p_calendar_code,
439 g_seq_num,
440 p_year,
441 p_year_description,
442 p_year_start_date,
443 p_year_end_date,
444 p_quarter,
445 p_quarter_description,
446 p_quarter_start_date,
447 p_quarter_end_date,
448 p_month,
449 p_month_description,
450 p_month_start_date,
451 p_month_end_date,
452 p_month_start_date+v_num_of_days,
453 p_month_start_date+v_num_of_days,
454 sysdate,
455 FND_GLOBAL.USER_ID ,
456 sysdate,
457 FND_GLOBAL.USER_ID ,
458 FND_GLOBAL.USER_ID
459 ) ;
460
461 End Loop ;
462
463 End if ;
464
465
466 exception
467
468 when others then
469 fnd_file.put_line(fnd_file.log, substr(SQLERRM,1,1000));
470 errbuf := substr(SQLERRM,1,150);
471 retcode := -1 ;
472
473
474 End Explode_Fiscal_Dates ;
475
476
477 procedure Generate_Gregorian(
478 errbuf OUT NOCOPY VARCHAR2,
479 retcode OUT NOCOPY VARCHAR2,
480 p_calendar_code IN VARCHAR2,
481 p_from_date IN DATE,
482 p_to_date IN DATE ) IS
483 v_instance_id varchar2(40);
484 v_retcode number;
485 v_sql_stmt varchar2(4000);
486 v_num_of_days number ;
487 v_seq number ;
488 x_count number ;
489 Begin
490
491 x_count := p_to_date - p_from_date ;
492
493 For v_num_of_days in 0..x_count LOOP
494
495 v_seq := v_num_of_days + 1 ;
496
497 insert into msd_time (
498 instance,
499 calendar_type,
500 calendar_code,
501 seq_num,
502 YEAR,
503 YEAR_DESCRIPTION,
504 YEAR_START_DATE,
505 YEAR_END_DATE,
506 QUARTER,
507 QUARTER_DESCRIPTION,
508 QUARTER_START_DATE,
509 QUARTER_END_DATE,
510 MONTH,
511 MONTH_DESCRIPTION,
512 MONTH_START_DATE,
513 MONTH_END_DATE,
514 DAY,
515 DAY_DESCRIPTION,
516 LAST_UPDATE_DATE,
517 last_updated_by,
521 values (
518 creation_date,
519 created_by,
520 LAST_UPDATE_LOGIN )
522 -1,
523 1,
524 p_calendar_code,
525 v_seq,
526 to_char(p_from_date+v_num_of_days,'YYYY','nls_date_language = AMERICAN'),
527 to_char(p_from_date+v_num_of_days,'YYYY','nls_date_language = AMERICAN'),
528 fnd_date.string_to_date('01-JAN-'||to_char(p_from_date+v_num_of_days,'YYYY'),
529 'DD-MON-YYYY'),
530 fnd_date.string_to_date('31-DEC-'||to_char(p_from_date+v_num_of_days,'YYYY'),
531 'DD-MON-YYYY'),
532 decode(to_char(p_from_date+v_num_of_days,'MM','nls_date_language = AMERICAN'),
533 '01', 'Qtr 1',
534 '02', 'Qtr 1',
535 '03', 'Qtr 1',
536 '04', 'Qtr 2',
537 '05', 'Qtr 2',
538 '06', 'Qtr 2',
539 '07', 'Qtr 3',
540 '08', 'Qtr 3',
541 '09', 'Qtr 3',
542 '10', 'Qtr 4',
543 '11', 'Qtr 4',
544 '12', 'Qtr 4') || ' ' || to_char(p_from_date+v_num_of_days,'YYYY','nls_date_language = AMERICAN'),
545 decode(to_char(p_from_date+v_num_of_days,'MM','nls_date_language = AMERICAN'),
546 '01', 'Qtr 1',
547 '02', 'Qtr 1',
548 '03', 'Qtr 1',
549 '04', 'Qtr 2',
550 '05', 'Qtr 2',
551 '06', 'Qtr 2',
552 '07', 'Qtr 3',
553 '08', 'Qtr 3',
554 '09', 'Qtr 3',
555 '10', 'Qtr 4',
556 '11', 'Qtr 4',
557 '12', 'Qtr 4') || ' ' || to_char(p_from_date+v_num_of_days,'YYYY','nls_date_language = AMERICAN'),
558 fnd_date.string_to_date(decode(to_char(p_from_date+v_num_of_days,'MM','nls_date_language = AMERICAN'),
559 '01', '01-JAN-',
560 '02', '01-JAN-',
561 '03', '01-JAN-',
562 '04', '01-APR-',
563 '05', '01-APR-',
564 '06', '01-APR-',
565 '07', '01-JUL-',
566 '08', '01-JUL-',
567 '09', '01-JUL-',
568 '10', '01-OCT-',
569 '11', '01-OCT-',
570 '12', '01-OCT-')||to_char(p_from_date+v_num_of_days,'YYYY','nls_date_language = AMERICAN'),
571 'DD-MON-YYYY'),
572 fnd_date.string_to_date(decode(to_char(p_from_date+v_num_of_days,'MM','nls_date_language = AMERICAN'),
573 '01', '31-MAR-',
574 '02', '31-MAR-',
575 '03', '31-MAR-',
576 '04', '30-JUN-',
577 '05', '30-JUN-',
578 '06', '30-JUN-',
579 '07', '30-SEP-',
580 '08', '30-SEP-',
581 '09', '30-SEP-',
582 '10', '31-DEC-',
583 '11', '31-DEC-',
584 '12', '31-DEC-')||to_char(p_from_date+v_num_of_days,'YYYY','nls_date_language = AMERICAN'),
585 'DD-MON-YYYY'),
586 to_char(p_from_date+v_num_of_days,'MON','nls_date_language = AMERICAN')||' '||
587 to_char(p_from_date+v_num_of_days,'YYYY','nls_date_language = AMERICAN'),
588 to_char(p_from_date+v_num_of_days,'MON','nls_date_language = AMERICAN')||' '||
589 to_char(p_from_date+v_num_of_days,'YYYY','nls_date_language = AMERICAN'),
590 fnd_date.string_to_date(decode(to_char(p_from_date+v_num_of_days,'MM','nls_date_language = AMERICAN'),
591 '01', '01-JAN-',
592 '02', '01-FEB-',
593 '03', '01-MAR-',
594 '04', '01-APR-',
595 '05', '01-MAY-',
596 '06', '01-JUN-',
597 '07', '01-JUL-',
598 '08', '01-AUG-',
599 '09', '01-SEP-',
600 '10', '01-OCT-',
601 '11', '01-NOV-',
602 '12', '01-DEC-')||to_char(p_from_date+v_num_of_days,'YYYY','nls_date_language = AMERICAN'),
603 'DD-MON-YYYY'),
604 fnd_date.string_to_date(decode(to_char(p_from_date+v_num_of_days,'MM','nls_date_language = AMERICAN'),
605 '01', '31-JAN-',
606 '02', decode(mod(to_number(
607 to_char(p_from_date+v_num_of_days,'YYYY','nls_date_language = AMERICAN')),4),
608 0, '29-FEB-',
609 '28-FEB-'),
610 '03', '31-MAR-',
611 '04', '30-APR-',
612 '05', '31-MAY-',
613 '06', '30-JUN-',
614 '07', '31-JUL-',
615 '08', '31-AUG-',
616 '09', '30-SEP-',
617 '10', '31-OCT-',
618 '11', '30-NOV-',
622 to_char((p_from_date)+(v_num_of_days), 'DD-MON-YYYY','nls_date_language = AMERICAN'),
619 '12', '31-DEC-')||to_char(p_from_date+v_num_of_days,'YYYY','nls_date_language = AMERICAN'),
620 'DD-MON-YYYY'),
621 ((p_from_date)+(v_num_of_days)),
623 sysdate,
624 FND_GLOBAL.USER_ID ,
625 sysdate,
626 FND_GLOBAL.USER_ID ,
627 FND_GLOBAL.USER_ID
628 ) ;
629
630 End Loop ;
631
632 return ;
633
634 exception
635
636 when others then
637 fnd_file.put_line(fnd_file.log, substr(SQLERRM,1,1000));
638 errbuf := substr(SQLERRM,1,150);
639 retcode := -1 ;
640
641 End Generate_Gregorian ;
642
643
644 procedure fix_manufacturing(errbuf out nocopy varchar2,
645 retcode out nocopy varchar2,
646 p_cal_code in varchar2) is
647
648 -- distinct weeks by calendar
649 cursor weeks is
650 select distinct
651 week_start_date sd,
652 week_end_date ed,
653 week,
654 week_description,
655 month,
656 month_description,
657 calendar_code,
658 month_start_date,
659 month_end_date,
660 instance
661 from msd_time
662 where calendar_type = 2
663 and calendar_code = nvl(p_cal_code, calendar_code);
664
665 begin
666
667 retcode := 0;
668
669 for week in weeks loop
670
671 -- insert missing days in this week
672 insert into msd_time(INSTANCE, CALENDAR_TYPE, CALENDAR_CODE, SEQ_NUM,
673 LAST_UPDATE_DATE, LAST_UPDATED_BY, CREATION_DATE,
674 CREATED_BY, LAST_UPDATE_LOGIN,
675 MONTH, MONTH_DESCRIPTION,
676 MONTH_START_DATE, MONTH_END_DATE,
677 WEEK, WEEK_DESCRIPTION,
678 WEEK_START_DATE, WEEK_END_DATE,
679 DAY, DAY_DESCRIPTION,
680 WORKING_DAY)
681 select week.instance, 2, week.calendar_code, -1,
682 sysdate, fnd_global.user_id, sysdate, fnd_global.user_id, fnd_global.user_id,
683 week.month, week.month_description,
684 week.month_start_date, week.month_end_date,
685 week.week, week.week_description,
686 week.sd, week.ed,
687 day, to_char(day),
688 'NO'
689 from
690 (
691 select week.sd+rownum-1 day
692 from msd_time
693 where rownum < week.ed-week.sd+2
694 MINUS
695 select day
696 from msd_time
697 where calendar_type = 2
698 and calendar_code = week.calendar_code
699 and week_start_date = week.sd
700 and week_end_date = week.ed
701 );
702 end loop;
703
704 exception
705 when others then
706 fnd_file.put_line(fnd_file.log, substr(SQLERRM,1,1000));
707 errbuf := substr(SQLERRM,1,150);
708 retcode := -1;
709
710 end fix_manufacturing;
711
712
713
714 END MSD_TRANSLATE_TIME_DATA ;