[Home] [Help]
PACKAGE BODY: APPS.PA_TIMELINE_UTIL
Source
1 PACKAGE BODY PA_TIMELINE_UTIL as
2 /* $Header: PARLUTSB.pls 120.4 2006/03/28 00:11:42 vkadimes noship $ */
3
4 -- Procedure Create_Time_Scale
5 -- Pursose To create time scale records in a
6 -- temp table while displaying timeline
7 --
8 -- Parameters
9 --
10 -- p_start_date Date
11 -- p_scale_type VARCHAR2 MONTH or THREE_MONTH
12 --
13
14 -- Global variables Added for bug No 5079785.
15
16 g_debug_mode CONSTANT varchar2(1) := fnd_profile.value('PA_DEBUG_MODE');
17 --fnd_profile.get('PA_DEBUG_MODE', g_debug_mode);
18 PROCEDURE Create_Time_Scale (p_start_date IN DATE,
19 p_end_date IN DATE := null,
20 p_scale_type IN VARCHAR2,
21 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
22 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
23 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
24 )
25 IS
26
27 l_start_date DATE;
28 l_end_date DATE;
29 t_date DATE;
30 l_date DATE;
31 l_month_date DATE;
32 l_msg_index_out NUMBER;
33 -- added for Bug: 4537865
34 l_new_msg_data VARCHAR2(2000);
35 -- added for Bug: 4537865
36
37 TmpTimeScaleTabTyp PA_TIMELINE_GLOB.TimeScaleTabTyp;
38
39 I INTEGER := 0;
40 l_invalid_scale_type EXCEPTION;
41
42 BEGIN
43
44 PA_TIMELINE_TIME_SCALE_PKG.delete_row( x_return_status,
45 x_msg_count,
46 x_msg_data);
47
48 l_date := p_start_date;
49 l_start_date := p_start_date ; --Get the Week start date */
50 l_month_date := l_start_date;
51 t_date := l_start_date;
52 l_end_date := p_end_date;
53
54 IF (p_end_date IS NULL) THEN
55 IF (p_scale_type = 'MONTH') THEN
56 l_end_date := p_start_date + 34;
57 ELSIF (p_scale_type = 'THREE_MONTH') THEN
58 l_end_date := p_start_date + 97;
59 ELSE
60 raise l_invalid_scale_type;
61 END IF;
62 END IF;
63
64 IF p_scale_type = 'MONTH' THEN
65
66 l_date := p_start_date +6;
67
68 I := I + 1;
69
70 LOOP
71
72 TmpTimeScaleTabTyp(i).start_date := t_date ;
73 TmpTimeScaleTabTyp(i).end_date := t_date ;
74 TmpTimeScaleTabTyp(i).scale_row_type := 'DAY_NUM' ;
75 TmpTimeScaleTabTyp(i).scale_type := p_scale_type; --Input value
76 TmpTimeScaleTabTyp(i).scale_marker_code := ' ';
77 TmpTimeScaleTabTyp(i).scale_text := TO_CHAR(t_date,'DD');
78
79
80 IF (l_date = t_date) THEN
81
82 TmpTimeScaleTabTyp(i).scale_marker_code := 'W';
83 l_date := l_date + 7; --Get the next week end date */
84
85 END IF;
86
87
88 IF to_char(t_date,'MON') <> to_char(t_date + 1, 'MON') THEN
89
90
91 I := I + 1;
92
93 TmpTimeScaleTabTyp(i).scale_row_type := 'MONTH' ;
94 TmpTimeScaleTabTyp(i).scale_type := p_scale_type; --Input value
95 TmpTimeScaleTabTyp(i).scale_text := TO_CHAR(t_date,'Mon, YYYY');
96 TmpTimeScaleTabTyp(i).scale_marker_code := 'M';
97 TmpTimeScaleTabTyp(i).start_date := l_month_date ;
98 TmpTimeScaleTabTyp(i).end_date := t_date ;
99
100 l_month_date := t_date + 1; -- Storing the Start date of the next month
101
102 END IF;
103
104 t_date := t_date + 1;
105
106 I := I + 1;
107
108 EXIT WHEN t_date > l_end_date;
109
110 END LOOP;
111
112 TmpTimeScaleTabTyp(i).scale_row_type := 'MONTH' ;
113 TmpTimeScaleTabTyp(i).scale_type := p_scale_type;
114 TmpTimeScaleTabTyp(i).scale_text := TO_CHAR(t_date,'Mon, YYYY');
115 TmpTimeScaleTabTyp(i).scale_marker_code := 'M';
116 TmpTimeScaleTabTyp(i).start_date := l_month_date ;
117 TmpTimeScaleTabTyp(i).end_date := l_end_date ;
118
119
120 ELSIF (p_scale_type = 'THREE_MONTH') THEN
121
122
123 l_date := p_start_date +6 ; --Get the Week start date
124
125 i := i + 1;
126
127 LOOP
128
129 TmpTimeScaleTabTyp(i).start_date := t_date ;
130 TmpTimeScaleTabTyp(i).end_date := l_date ;
131 TmpTimeScaleTabTyp(i).scale_row_type := 'WEEK_DAY_NUM' ;
132 TmpTimeScaleTabTyp(i).scale_type := p_scale_type; --Input value
133 TmpTimeScaleTabTyp(i).scale_marker_code := 'W';
134 TmpTimeScaleTabTyp(i).scale_text := TO_CHAR(l_date,'DD');
135
136 --dbms_output.put_line(' Running Tdate ' || to_char(t_date) || ' '
137 -- || 'ldate ' || to_char(l_date) || ' '
138 -- || 'lmonth ' || to_char(l_month_date));
139
140
141 IF to_char(l_date,'MON') <> to_char(l_month_date, 'MON') THEN
142
143 -- dbms_output.put_line(' Before Month Change ' || to_char(t_date) || ' '
144 -- || 'ldate ' || to_char(l_date) || ' '
145 -- || 'lmonth ' || to_char(l_month_date));
146
147 i := i + 1;
148
149 TmpTimeScaleTabTyp(i).scale_row_type := 'MONTH' ;
150 TmpTimeScaleTabTyp(i).scale_type := p_scale_type; -- Input value
151 TmpTimeScaleTabTyp(i).scale_text := TO_CHAR(l_month_date,'Mon, YYYY');
152 TmpTimeScaleTabTyp(i).scale_marker_code := 'M';
153 TmpTimeScaleTabTyp(i).start_date := l_month_date ;
154
155 --dbms_output.put_line('Last Day ' || to_char(LAST_DAY(l_month_date)));
156
157 TmpTimeScaleTabTyp(i).end_date := LAST_DAY(l_month_date);
158
159 l_month_date := LAST_DAY(TmpTimeScaleTabTyp(i).end_date) + 1; -- Storing the Start date of the next month */
160
161 --dbms_output.put_line(' After Month Change ' || to_char(t_date) || ' ' || 'ldate ' || to_char(l_date) || ' ' || 'lmonth ' || to_char(l_month_date));
162 END IF;
163
164 t_date := l_date + 1;
165 l_date := l_date + 7;
166
167 I := I + 1;
168
169 EXIT WHEN l_date > l_end_date;
170
171
172 END LOOP;
173
174 TmpTimeScaleTabTyp(i).scale_row_type := 'MONTH' ;
175 TmpTimeScaleTabTyp(i).scale_type := p_scale_type;
176 TmpTimeScaleTabTyp(i).scale_text := TO_CHAR(t_date,'Mon, YYYY');
177 TmpTimeScaleTabTyp(i).scale_marker_code := 'M';
178 TmpTimeScaleTabTyp(i).start_date := l_month_date ;
179 TmpTimeScaleTabTyp(i).end_date := l_end_date ;
180
181
182 END IF;
183
184
185 -- Insert Record into pa_timeline_time_scale table
186
187 PA_TIMELINE_TIME_SCALE_PKG.insert_row(TmpTimeScaleTabTyp,
188 x_return_status,
189 x_msg_count,
190 x_msg_data
191 );
192
193 x_return_status := FND_API.G_RET_STS_SUCCESS;
194
195 EXCEPTION
196 WHEN l_invalid_scale_type THEN
197 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
198 x_msg_count := 1;
199 x_msg_data := 'Error in PA_TIMELINE_UTIL.CREATE_TIME_SCALE: Invalid Scale Type';
200 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_TIMELINE_UTIL',
201 p_procedure_name => 'create_time_scale');
202 If x_msg_count = 1 THEN
203 pa_interface_utils_pub.get_messages
204 (p_encoded => FND_API.G_TRUE,
205 p_msg_index => 1,
206 p_msg_count => x_msg_count,
207 p_msg_data => x_msg_data,
208 --p_data => x_msg_data, * commented for Bug: 4537865
209 p_data => l_new_msg_data, -- added for Bug: 4537865
210 p_msg_index_out => l_msg_index_out );
211 -- added for Bug: 4537865
212 x_msg_data := l_new_msg_data;
213 -- added for Bug: 4537865
214 End If;
215 RAISE; -- This is optional depending on the needs
216 WHEN OTHERS THEN
217 x_msg_count := 1;
218 x_msg_data := sqlerrm;
219 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
220 FND_MSG_PUB.add_exc_msg(p_pkg_name => 'PA_TIMELINE_PVT',
221 p_procedure_name => 'Create_Time_Scale');
222 If x_msg_count = 1 THEN
223 pa_interface_utils_pub.get_messages
224 (p_encoded => FND_API.G_TRUE ,
225 p_msg_index => 1,
226 p_msg_count => x_msg_count ,
227 p_msg_data => x_msg_data ,
228 --p_data => x_msg_data, * commented for bug: 4537865
229 p_data => l_new_msg_data, -- added for Bug: 4537865
230 p_msg_index_out => l_msg_index_out );
231
232 -- added for Bug: 4537865
233 x_msg_data := l_new_msg_data;
234 -- added for Bug: 4537865
235 End If;
236 RAISE ; -- 4537865 : Included RAISE for WHEN OTHERS block of create_time_scale
237 END create_time_scale;
238
239 /*----------------------------------------------------------------------
240 | Function Get_Week_End_Date
241 | Purpose To get weekend date for given date and org
242 |
243 | Parameters
244 |
245 | p_org_id IN Organization ID a
246 | p_given_date IN Given date
247 +-----------------------------------------------------------------------*/
248
249 FUNCTION Get_Week_End_Date(p_org_id IN NUMBER,
250 p_given_date IN DATE) RETURN DATE IS
251
252 x_week_ending DATE;
253 x_week_ending_day VARCHAR2(80);
254 -- Retrieve week_ending_index from the FND profile value.
255 x_week_ending_day_index NUMBER := TO_NUMBER(FND_PROFILE.VALUE('PA_GLOBAL_WEEK_START_DAY')) + 6;
256
257
258 BEGIN
259
260 /* ( SELECT DECODE(exp_cycle_start_day_code,1,8,exp_cycle_start_day_code) -1
261 INTO x_week_ending_day_index
262 FROM pa_implementations_all
263 WHERE NVL(org_id,-99) = NVL(p_org_id,-99);
264
265 SELECT TO_CHAR(TO_DATE('01-01-1950','DD-MM-YYYY') + NVL(x_week_ending_day_index,0)-1,'Day')
266 INTO x_week_ending_day
267 FROM sys.dual;
268
269 SELECT NEXT_DAY(p_given_date-1,x_week_ending_day)
270 INTO x_week_ending
271 FROM sys.dual;
272
273
274 RETURN(x_week_ending); ) */
275
276 -- Bug fix #1393829
277 -- BEGIN
278 /* Bug - 1799636 This part of code is commented to resolve the performance bug
279
280 SELECT TO_CHAR(TO_DATE('01-01-1950','DD-MM-YYYY') + NVL(x_week_ending_day_index,0)-1,'Day')
281 INTO x_week_ending_day
282 FROM sys.dual;
283
284 -- 1604283 (jmarques): Removed unnecessary TO_DATE call around
285 -- DATE parameter.
286 SELECT NEXT_DAY(p_given_date -1,x_week_ending_day)
287 INTO x_week_ending
288 FROM sys.dual;
289 END;
290 */
291 x_week_ending_day:= TO_CHAR(TO_DATE('01-01-1950','DD-MM-YYYY') + NVL(x_week_ending_day_index,0)-1,'Day');
292 x_week_ending := NEXT_DAY(p_given_date -1,x_week_ending_day);
293
294 RETURN(x_week_ending);
295
296
297 END Get_Week_End_Date;
298
299 /*------------------------------------------------------------------------
300 | Procedure : get_timeline_period
301 | Purpose : This procedure is used to get the next
302 | timeline display period for a given date.
303 | GUI how it is used :
304 | All Timelines have Month and 3-Month time scales.
305 | Initial default is Month.
306 | Navigation to Previous Month and Next Month via
307 | links on each side of the timeline.
308 | Each click of this link shifts the time scale by 5 weeks.
309 | A maximum of 25 timeline data rows will be shown at a time.
310 | If there are more than 25 rows, show following links:
311 | Previous and Next to shift up or down next set of 25 rows
312 |
313 | Parameters
314 | p_current_date IN Given Date
315 | p_Scale_type IN MONTH or THREE_MONTH
316 | p_navigate_type IN PREV_MONTH,NEXT_MONTH,
317 | NEXT_THREE_MONTH,
318 | PREV_THREE_MONTH
319 | p_org_id IN Organization ID
320 | x_period_start_date OUT Next display start date
321 | x_period_end_date OUT Next display end date
322 +-----------------------------------------------------------------------------------*/
323
324 PROCEDURE get_timeline_period ( p_current_date IN DATE,
325 p_num_days IN NUMBER := NULL,
326 p_scale_type IN VARCHAR2,
327 p_navigate_type IN VARCHAR2,
328 p_org_id IN NUMBER,
329 x_period_start_date OUT NOCOPY DATE, --File.Sql.39 bug 4440895
330 x_period_end_date OUT NOCOPY DATE, --File.Sql.39 bug 4440895
331 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
332 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
333 x_msg_data OUT NOCOPY VARCHAR2 ) IS --File.Sql.39 bug 4440895
334
335 td_date DATE;
336 l_msg_index_out NUMBER;
337 l_num_days NUMBER;
338 -- added for bug: 4537865
339 l_new_msg_data VARCHAR2(2000);
340 -- added for bug: 4537865
341 l_invalid_scale_type EXCEPTION;
342 BEGIN
343 l_num_days := p_num_days;
344
345 IF (p_num_days IS NULL) THEN
346 IF (p_scale_type = 'MONTH') THEN
347 l_num_days := 35;
348 ELSIF (p_scale_type = 'THREE_MONTH') THEN
349 l_num_days := 98;
350 ELSE
351 raise l_invalid_scale_type;
352 END IF;
353 END IF;
354
355 td_date := get_week_end_date(p_org_id, p_current_date);
356
357 IF p_navigate_type='NEXT_MONTH' THEN
358 x_period_start_date :=td_date +29; -- Add 4 weeks + 1 day
359 ELSIF p_navigate_type='PREV_MONTH' THEN
360 x_period_start_date :=td_date -41; -- Subtract 6 weeks - 1 day
361 ELSIF p_navigate_type='NEXT_WEEK' THEN
362 x_period_start_date :=td_date + 1; -- add 0 weeks + 1 day
363 ELSIF p_navigate_type='PREV_WEEK' THEN
364 x_period_start_date :=td_date - 13; -- Subtract 2 weeks - 1 day
365 ELSIF p_navigate_type='NEXT_THREE_MONTH' THEN
366 x_period_start_date :=td_date + 92 ; -- Add 13 weeks + 1 day
367 ELSIF p_navigate_type='PREV_THREE_MONTH' THEN
368 x_period_start_date :=td_date - 104; -- Subtract 15 weeks - 1 day
369 ELSIF p_navigate_type='CURRENT' THEN
370 x_period_start_date := td_date -6;
371 END IF;
372
373 x_period_end_date := x_period_start_date + l_num_days - 1;
374
375 x_return_status := FND_API.G_RET_STS_SUCCESS;
376
377 EXCEPTION
378 WHEN l_invalid_scale_type THEN
379
380 -- 4537865
381 x_period_end_date := NULL ;
382 x_period_start_date := NULL ;
383
384 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
385 x_msg_count := 1;
386 x_msg_data := 'Error in PA_TIMELINE_UTIL.GET_TIMELINE_PERIOD: Invalid Scale Type';
387 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_TIMELINE_UTIL',
388 p_procedure_name => 'get_timeline_period');
389 If x_msg_count = 1 THEN
390 pa_interface_utils_pub.get_messages
391 (p_encoded => FND_API.G_TRUE,
392 p_msg_index => 1,
393 p_msg_count => x_msg_count,
394 p_msg_data => x_msg_data,
395 --p_data => x_msg_data, * Commented for Bug: 4537865
396 p_data => l_new_msg_data, -- added for bug: 4537865
397 p_msg_index_out => l_msg_index_out );
398 -- added for bug: 4537865
399 x_msg_data := l_new_msg_data;
400 -- added for bug: 4537865
401 End If;
402 RAISE; -- This is optional depending on the needs
403 WHEN OTHERS THEN
404 -- 4537865
405 x_period_end_date := NULL ;
406 x_period_start_date := NULL ;
407
408 x_msg_count := 1;
409 x_msg_data := sqlerrm;
410 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
411 FND_MSG_PUB.add_exc_msg(p_pkg_name => 'PA_TIMELINE_PVT',
412 p_procedure_name => 'get_timeline_period ');
413 If x_msg_count = 1 THEN
414 pa_interface_utils_pub.get_messages
415 (p_encoded => FND_API.G_TRUE ,
416 p_msg_index => 1,
417 p_msg_count => x_msg_count ,
418 p_msg_data => x_msg_data ,
419 --p_data => x_msg_data, * Commented for Bug fix: 4537865
420 p_data => l_new_msg_data, -- added for Bug Fix: 4537865
421 p_msg_index_out => l_msg_index_out );
422 -- added for Bug Fix: 4537865
423 x_msg_data := l_new_msg_data;
424 -- added for Bug Fix: 4537865
425 End If;
426 RAISE; -- 4537865
427 END get_timeline_period;
428
429 /*------------------------------------------------------------------------
430 | Procedure Get_Week_Dates_Range
431 | Purpose This procedure is used to get the next
432 | timeline display period for a given date.
433 |
434 +-------------------------------------------------------------------------*/
435
436 PROCEDURE Get_Week_Dates_Range( p_org_id IN NUMBER,
437 p_start_date IN DATE,
438 p_end_date IN DATE,
439 x_WeekDatesRangeTab OUT NOCOPY PA_TIMELINE_GLOB.WeekDatesRangeTabTyp, --File.Sql.39 bug 4440895
440 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
441 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
442 x_msg_data OUT NOCOPY VARCHAR2) IS --File.Sql.39 bug 4440895
443
444 ld_temp_date DATE;
445 ld_start_date DATE;
446 ld_end_date DATE;
447 li_cnt INTEGER:=1;
448 BEGIN
449
450 BEGIN
451 ld_temp_date := p_start_date;
452
453 LOOP
454
455 ld_end_date := Get_Week_End_Date(p_org_id, ld_temp_date);
456 ld_start_date := ld_end_date -6;
457 x_WeekDatesRangeTab(li_cnt).week_start_date := ld_start_date;
458 x_WeekDatesRangeTab(li_cnt).week_end_date := ld_end_date;
459 ld_temp_date := ld_end_date +1;
460 EXIT WHEN (trunc(ld_temp_date) > trunc(p_end_date));
461 li_cnt := li_cnt +1;
462
463
464 END LOOP;
465
466 x_return_status := FND_API.G_RET_STS_SUCCESS;
467
468 EXCEPTION
469 WHEN OTHERS THEN
470 -- 4537865
471 x_WeekDatesRangeTab.delete; -- Delete the table contents so that the Unexp. state wrong data cant be used further
472
473 x_msg_count := 1;
474 x_msg_data := sqlerrm;
475 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
476 FND_MSG_PUB.add_exc_msg(p_pkg_name => 'PA_TIMELINE_PVT',
477 p_procedure_name => 'Get_Week_Dates_Range');
478
479
480 END;
481
482 END Get_Week_Dates_Range;
483 /*------------------------------------------------------------------------
484 | Function Get_Timeline_Profile_Setup
485 | Purpose function is to get profile options
486 +-------------------------------------------------------------------------*/
487 FUNCTION Get_Timeline_Profile_Setup RETURN PA_TIMELINE_GLOB.TimelineProfileSetup IS
488
489 TmpTimelineProfileSetup PA_TIMELINE_GLOB.TimelineProfileSetup;
490
491 BEGIN
492 BEGIN
493
494 TmpTimelineProfileSetup.res_capacity_percentage :=
495 FND_NUMBER.CANONICAL_TO_NUMBER(FND_PROFILE.VALUE('PA_RES_CAPACITY_PERCENTAGE'));
496
497
498 TmpTimelineProfileSetup.availability_cal_period :=
499 FND_PROFILE.VALUE('PA_AVAILABILITY_CAL_PERIOD');
500
501
502 TmpTimelineProfileSetup.availability_duration :=
503 FND_NUMBER.CANONICAL_TO_NUMBER(FND_PROFILE.VALUE('PA_AVAILABILITY_DURATION'));
504
505 EXCEPTION
506 WHEN OTHERS THEN
507 raise;
508 END;
509
510
511 RETURN (TmpTimelineProfileSetup);
512
513 END Get_Timeline_Profile_Setup;
514 /*------------------------------------------------------------------------
515 | Function Get_Color_Pattern_Code
516 | Purpose function is to get color pattern code for
517 | a specific system status
518 +-------------------------------------------------------------------------*/
519
520 FUNCTION Get_Color_Pattern_Code(p_lookup_code IN VARCHAR2) RETURN VARCHAR2 IS
521 lv_color_pattern VARCHAR2(2);
522 l_lookup_type VARCHAR2(30) ;
523 BEGIN
524 BEGIN
525 l_lookup_type := 'TIMELINE_STATUS';
526 SELECT color_pattern_code
527 INTO lv_color_pattern
528 FROM pa_timeline_colors
529 WHERE lookup_code = p_lookup_code
530 AND lookup_type = l_lookup_type;
531
532 EXCEPTION
533 WHEN OTHERS THEN
534 raise;
535 END;
536 RETURN(lv_color_pattern);
537 END GET_COLOR_PATTERN_CODE;
538
539 PROCEDURE debug(p_text IN VARCHAR2) IS
540 -- commented for Bug 5079785
541 --l_debug_mode VARCHAR2(20) := 'N'; -- Added for Bug 4344821
542 BEGIN
543 -- dbms_output.put_line('log : ' || 'pa.plsql.pa_timeline_pvt' ||
544 -- ' : ' || p_text);
545 -- commented for Bug 5079785 chenged from l_debug_mode to g_debug_mode
546 -- fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
547 -- IF l_debug_mode = 'Y' THEN
548 IF g_debug_mode = 'Y' THEN
549 PA_DEBUG.WRITE_LOG(
550 x_module => 'pa.plsql.pa_timeline_pvt',
551 x_msg => p_text,
552 x_log_level => 6);
553 pa_debug.write_file('print_message: ' || 'Log :'||p_text);
554 END IF;
555 END debug;
556
557 PROCEDURE debug(p_module IN VARCHAR2,
558 p_msg IN VARCHAR2,
559 p_log_level IN NUMBER DEFAULT 6) IS
560 -- commented for Bug 5079785
561 -- l_debug_mode VARCHAR2(20) := 'N'; -- Added for Bug 4344821
562 BEGIN
563 -- dbms_output.put_line('log : ' || p_module || ' : ' || p_msg);
564 -- commented for Bug 5079785 chenged from l_debug_mode to g_debug_mode
565 -- fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
566 -- IF l_debug_mode = 'Y' THEN
567 IF g_debug_mode ='Y' THEN
568 PA_DEBUG.WRITE_LOG(
569 x_module => p_module,
570 x_msg => p_msg,
571 x_log_level => p_log_level);
572 pa_debug.write_file('print_message: ' || 'Log :'||p_msg);
573 END IF;
574 END debug;
575
576
577 END PA_TIMELINE_UTIL;