DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_GE_GEN_001

Source


1 PACKAGE BODY IGS_GE_GEN_001 AS
2 /* $Header: IGSGE01B.pls 120.3 2006/01/25 09:11:03 skpandey noship $ */
3 	/* change history
4      WHO       WHEN         WHAT
5      pkpatel   17-APR-2003  Bug 2261717
6 	                        Modified the FUNCTION genp_get_per_addr
7      vrathi    03-JUN-2003  Bug 2940810
8              				Modified procedure genp_get_audit. Added SQL bind variables.
9      asbala    29-DEC-2003  Bug 3330996. 10GCERT
10      gmaheswa	5-Jan-2004	Bug 4869737 Added a call to SET_ORG_ID in GENP_DEL_LOG to disable OSS for R12.
11 	*/
12 
13 FUNCTION GENP_CHK_COL_UPPER(
14   p_column_name  VARCHAR2 ,
15   p_table_name  VARCHAR2 )
16 RETURN BOOLEAN AS
17     gv_other_detail VARCHAR2(255);
18 BEGIN
19 DECLARE
20     cst_table       CONSTANT    user_objects.object_type%TYPE := 'TABLE';
21     cst_view        CONSTANT    user_objects.object_type%TYPE := 'VIEW';
22     v_object_type       user_objects.object_type%TYPE;
23     v_col_comment       user_col_comments.comments%TYPE;
24     v_table_name        user_col_comments.table_name%TYPE;
25     v_column_name       user_col_comments.column_name%TYPE;
26     v_search_condition  VARCHAR2(10000);
27     v_full_stop_pos     INTEGER;
28     CURSOR c_uo (
29         cp_object_name  user_objects.object_name%TYPE) IS
30         SELECT  uo.object_type
31         FROM    user_objects uo
32         WHERE   uo.object_name = cp_object_name AND
33             uo.object_type IN (cst_table, cst_view);
34     CURSOR c_ucc (
35         cp_view_name    user_col_comments.table_name%TYPE,
36         cp_column_name  user_col_comments.column_name%TYPE) IS
37         SELECT  ucc.comments
38         FROM    user_col_comments ucc
39         WHERE   ucc.table_name = cp_view_name AND
40             ucc.column_name = cp_column_name;
41     CURSOR c_uc (
42         cp_table_name   user_constraints.table_name%TYPE) IS
43         SELECT  uc.search_condition
44         FROM    user_constraints uc
45         WHERE   uc.constraint_type = 'C' AND
46             uc.table_name = cp_table_name AND
47             uc.status = 'ENABLED' AND
48             uc.constraint_name like '%UCASE_CK%';
49 BEGIN
50     -- This routine checks if a table column is forced
51     -- to be upper case via a table constraint.
52     -- Check if table is a view. If the table is a view
53     -- need to determine the real table and column
54     OPEN c_uo (p_table_name);
55     FETCH c_uo INTO v_object_type;
56     IF (c_uo%NOTFOUND) THEN
57         CLOSE c_uo;
58         RETURN FALSE;
59     END IF;
60     CLOSE c_uo;
61     IF v_object_type = cst_table THEN
62         v_table_name := p_table_name;
63         v_column_name := p_column_name;
64     ELSE
65         -- Columns comments are being used to store the
66         -- real table.column for the view column.
67         OPEN c_ucc (
68             p_table_name,
69             p_column_name);
70         FETCH c_ucc INTO v_col_comment;
71         IF (c_ucc%NOTFOUND) THEN
72             CLOSE c_ucc;
73             RETURN FALSE;
74         END IF;
75         CLOSE c_ucc;
76         v_table_name := p_table_name;
77         v_column_name := p_column_name;
78         v_full_stop_pos := INSTR(v_col_comment, '.', 1, 1);
79         IF v_full_stop_pos = 0 THEN
80             RETURN FALSE;
81         END IF;
82         v_table_name := SUBSTR(v_col_comment, 1, v_full_stop_pos - 1);
83         v_column_name := SUBSTR(v_col_comment, v_full_stop_pos + 1);
84     END IF;
85     OPEN c_uc (v_table_name);
86     LOOP
87         FETCH c_uc INTO v_search_condition;
88         IF c_uc%NOTFOUND THEN
89             CLOSE c_uc;
90             EXIT;
91         END IF;
92         -- Check if the column is constained to uppercase.
93         -- Search for: column_name=UPPER(column_name)
94         -- Eg. SURNAME=UPPER(SURNAME)
95         -- Spaces and tabs are removed from the search string.
96         IF INSTR(UPPER(REPLACE(REPLACE(v_search_condition, fnd_global.local_chr(32)), fnd_global.local_chr(09))),
97                 v_column_name || '=UPPER(' || v_column_name || ')') > 0 THEN
98             CLOSE c_uc;
99             RETURN TRUE;
100         END IF;
101     END LOOP;
102     -- All rows have been processed and no matches were found.
103     -- Column is not constrained to upper case.
104     RETURN FALSE;
105 EXCEPTION
106     WHEN OTHERS THEN
107         IF c_uo%ISOPEN THEN
108             CLOSE c_uo;
109         END IF;
110         IF c_ucc%ISOPEN THEN
111             CLOSE c_ucc;
112         END IF;
113         IF c_uc%ISOPEN THEN
114             CLOSE c_uc;
115         END IF;
116         RAISE;
117 END;
118 EXCEPTION
119     WHEN OTHERS THEN
120         Fnd_Message.Set_Name('IGS' , 'IGS_GE_UNHANDLED_EXCEPTION');
121 END genp_chk_col_upper;
122 
123 
124 FUNCTION genp_clc_dt_diff(
125   p_start_dt IN DATE ,
126   p_end_dt IN DATE ,
127   p_message_name OUT NOCOPY VARCHAR2 )
128 RETURN NUMBER AS
129 v_other_detail  VARCHAR2(255);
130 v_days      NUMBER;
131 BEGIN
132     p_message_name := null;
133     IF (p_end_dt < p_start_dt) THEN
134         p_message_name := 'IGS_CA_ENDDT_LT_STARTDT';
135         RETURN 0;
136     END IF;
137     v_days := p_end_dt - p_start_dt;
138     RETURN v_days;
139     EXCEPTION
140     WHEN OTHERS THEN
141         Fnd_Message.Set_Name('IGS' , 'IGS_GE_UNHANDLED_EXCEPTION');
142 --      App_Exception.Raise_Exception;
143 END genp_clc_dt_diff;
144 
145 
146  FUNCTION GENP_CLC_WEEK_END_DT(
147   p_date IN DATE ,
148   p_day_week_end IN VARCHAR2 DEFAULT 'FRIDAY')
149 RETURN DATE AS
150     gv_other_detail     VARCHAR2(255);
151 BEGIN   -- genp_clc_week_end_dt
152     -- This module will accept a date and return the week ending date.
153     -- The default for the end day of the week is FRIDAY.
154 DECLARE
155 BEGIN
156     -- If the date passed in is already the last day of the week, return it.
157     IF RTRIM(TO_CHAR(p_date, 'DAY')) = p_day_week_end THEN
158         RETURN p_date;
159     ELSE
160         -- otherwise calculate the date of the last day of the week.
161         RETURN NEXT_DAY(p_date, p_day_week_end);
162     END IF;
163 END;
164 EXCEPTION
165     WHEN OTHERS THEN
166         Fnd_Message.Set_Name('IGS' , 'IGS_GE_UNHANDLED_EXCEPTION');
167 END genp_clc_week_end_dt;
168 
169 
170 PROCEDURE GENP_DEL_LOG(
171   errbuf out NOCOPY varchar2,
172   retcode out NOCOPY number ,
173   p_s_log_type IN VARCHAR2 ,
174   p_days_old IN NUMBER )
175 AS
176     gv_other_detail     VARCHAR2(255);
177     e_resource_busy_exception       EXCEPTION;
178     PRAGMA EXCEPTION_INIT(e_resource_busy_exception, -54);
179 BEGIN   -- genp_del_log
180       igs_ge_gen_003.set_org_id;
181     --Find and delete log records requiring cleanup.
182     -- Remove s_log and s_log_entry records older than a specified number of days.
183     retcode:=0;
184 DECLARE
185     CURSOR c_sl (
186             cp_s_log_type       IGS_GE_S_LOG.s_log_type%TYPE,
187             cp_days_old_dt      IGS_GE_S_LOG.creation_dt%TYPE) IS
188         SELECT  creation_dt , rowid
189         FROM    IGS_GE_S_LOG
190         WHERE   s_log_type = cp_s_log_type AND
191             creation_dt < cp_days_old_dt
192         FOR UPDATE of s_log_type NOWAIT;
193     CURSOR c_sle (
194             cp_s_log_type       IGS_GE_S_LOG_ENTRY.s_log_type%TYPE,
195             cp_creation_dt      IGS_GE_S_LOG.creation_dt%TYPE) IS
196         SELECT  creation_dt , rowid
197         FROM    IGS_GE_S_LOG_ENTRY
198         WHERE   s_log_type = cp_s_log_type  AND
199             creation_dt = cp_creation_dt
200         FOR UPDATE of s_log_type NOWAIT;
201     v_record_found      BOOLEAN := FALSE;
202 BEGIN
203     BEGIN   -- inner block
204         SAVEPOINT sp_before_delete;
205         FOR v_sl_rec IN c_sl(
206                     p_s_log_type,
207                     SYSDATE - p_days_old)
208         LOOP
209             v_record_found := TRUE;
210             -- Clean up any log entries, they shouldn't exist
211             FOR v_sle_rec IN c_sle(
212                     p_s_log_type,
213                     v_sl_rec.creation_dt)
214             LOOP
215                 IGS_GE_S_LOG_ENTRY_PKG.DELETE_ROW(x_rowid => v_sle_rec.rowid)   ;
216             END LOOP;
217             -- Remove the current log record
218             IGS_GE_S_LOG_PKG.DELETE_ROW(x_rowid => v_sl_rec.rowid);
219         END LOOP;
220     EXCEPTION
221         WHEN e_resource_busy_exception THEN
222             RETCODE := 2 ;
223             ERRBUF := FND_MESSAGE.GET_STRING('IGS' , 'IGS_GE_RECORD_LOCKED');
224     END; -- inner block
225     IF v_record_found = FALSE THEN
226         ERRBUF := FND_MESSAGE.GET_STRING('IGS' , 'IGS_GE_NO_LOG_ENTRIES');
227     END IF;
228     RETURN;
229 END;
230 EXCEPTION
231     WHEN OTHERS THEN
232         /*RETCODE := 2 ;
233         ERRBUF := FND_MESSAGE.GET_STRING('IGS' , 'IGS_GE_UNHANDLED_EXCEPTION');
234          commented for the exception handler related chnages*/
235          RETCODE := 2;
236          ERRBUF := FND_MESSAGE.GET_STRING('IGS','IGS_GE_UNHANDLED_EXCEPTION');
237                  IGS_GE_MSG_STACK.CONC_EXCEPTION_HNDL;
238 END genp_del_log;
239 
240 
241 FUNCTION GENP_DEL_NOTE(
242   p_reference_number IN NUMBER ,
243   p_message_name OUT NOCOPY VARCHAR2 )
244 RETURN BOOLEAN AS
245     gv_other_detail     VARCHAR2(255);
246 BEGIN   -- genp_del_note
247     -- Delete a note record.
248 DECLARE
249     e_resource_busy     EXCEPTION;
250     PRAGMA EXCEPTION_INIT(e_resource_busy, -54);
251     CURSOR  c_del_note IS
252         SELECT  IGS_GE_NOTE.* , ROWID
253         FROM    IGS_GE_NOTE
254         WHERE   reference_number = p_reference_number
255         FOR UPDATE OF reference_number NOWAIT;
256 BEGIN
257     SAVEPOINT   sp_before_delete;
258     p_message_name:= null ;
259     BEGIN
260         FOR v_note_rec IN c_del_note LOOP
261             IGS_GE_NOTE_PKG.DELETE_ROW(X_ROWID => V_NOTE_REC.ROWID );
262         END LOOP;
263     EXCEPTION
264         WHEN e_resource_busy THEN
265             ROLLBACK TO sp_before_delete;
266             p_message_name := 'IGS_GE_NOTE_RECORD_LOCKED';
267             RETURN FALSE;
268     END;
269     RETURN TRUE;
270 END;
271 EXCEPTION
272     WHEN OTHERS THEN
273         Fnd_Message.Set_Name('IGS' , 'IGS_GE_UNHANDLED_EXCEPTION');
274         App_Exception.Raise_Exception ;
275 END genp_del_note;
276 
277 
278 FUNCTION genp_get_addr(
279   p_person_id  NUMBER ,
280   p_org_unit_cd  VARCHAR2 ,
281   p_institution_cd  VARCHAR2 ,
282   p_location_cd  VARCHAR2 ,
283   p_addr_type  VARCHAR2 ,
284   p_case_type  VARCHAR2 DEFAULT 'UPPER',
285   p_phone_no  VARCHAR2 DEFAULT 'Y',
286   p_name_style  VARCHAR2 DEFAULT 'CONTEXT',
287   p_inc_addr  VARCHAR2 DEFAULT 'Y')
288 RETURN VARCHAR2 AS
289 
290     v_line_1    VARCHAR2(256)  := NULL; -- first line of address
291     v_line_2    VARCHAR2(256)  := NULL; -- second line of address
292     v_line_3    VARCHAR2(256)  := NULL; -- third line of address
293     v_line_4    VARCHAR2(256)  := NULL; -- 4th line of address
294     v_line_5    VARCHAR2(256)  := NULL; -- 5th line of address
295     v_addr      VARCHAR2(2000) := NULL; -- final address variable
296     v_phone     VARCHAR2(100)  := NULL; -- placeholder for phone handling
297     v_name      VARCHAR2(256)  := NULL; -- person name placeholder
298     gv_other_detail VARCHAR2(1000) := NULL; -- global for error trapping
299     -- Local Exceptions
300     e_addr      EXCEPTION; -- overall exception for trapping and handling errors
301     e_case_error    EXCEPTION; -- case type error
302     --
303     -- Local Functions
304     -------------------------------------------------------------------------------
305     -- Module:  genp_get_per_addr
306     -- Purpose: Function for returning formatted person names and addresses
307     --      based on variations of the parameters passed
308     -- Notes:
309     -- p_surname_first is a boolean to place the surname before the given name
310     --  TRUE formats in surname + , + title + given name
311     --  FALSE formats in title + given name + surname
312     --
313     -- p_phone_no is used to toggle the display of the phone number
314     --  Y populates the p_phone_line parameter with the phone number
315     --  N populates the p_phone_line parameter with a null value
316     -- Exception Handlers
317     -- e_name_error: returns false and populates the p_name variable with
318     -- 'Person name not found'
319     -- e_addr_error: returns false and populates p_line_1 with
320     -- 'No address record found'
321     --
322     -- Module History
323     -------------------------------------------------------------------------------
324     -- 03/03/1998 MSONTER Intial creation of Module
325     -- 05/03/1998 MSONTER Modified cursor c_pa to search
326     -- IGS_CO_ADDR_TYPE.correspondence_type = 'Y'
327     -- 18/03/1998 YSWONG Modified code according to PLSQL-CODING standards
328     -- 19/03/1998 MSONTER Modified p_surname to p_name_style to use predefined
329     -- naming standards
330     -------------------------------------------------------------------------------
331     FUNCTION genp_get_per_addr(
332         p_per_id        NUMBER,
333         p_adr_type      VARCHAR2,
334         p_phone_num     VARCHAR2,
335         p_name_style        VARCHAR2,
336         p_name      OUT NOCOPY  VARCHAR2,
337         p_line_1    OUT NOCOPY  VARCHAR2,
338         p_line_2    OUT NOCOPY  VARCHAR2,
339         p_line_3    OUT NOCOPY  VARCHAR2,
340         p_line_4    OUT NOCOPY  VARCHAR2,
341         p_line_5    OUT NOCOPY  VARCHAR2,
342         p_phone_line    OUT NOCOPY  VARCHAR2)
343     RETURN BOOLEAN
344     AS
345     /* change history
346      WHO       WHEN         WHAT
347      pkpatel   17-APR-2003  Bug 2261717
348                             Removed selection of initial_last_name, initial_name from igs_pe_person_v.
349 		    				Instead the direct logic to retrieve it from hz_parties was introduced.
350      skpandey  13-JAN-2006  Bug#4937960
351                             Changed c_per_name cursor definition to optimize query
352     */
353     BEGIN
354     DECLARE
355         -- Local Cursors
356         -- cursor for selection of the person name in seperate parts to allow
357         -- construction based on the user preferences
358         CURSOR c_per_name (cp_person_id hz_parties.party_id%TYPE)IS
359 		SELECT p.PERSON_TITLE    per_title,
360 		       p.PERSON_LAST_NAME per_surname,
361 		       NVL(P.KNOWN_AS,p.PERSON_FIRST_NAME) per_first_name,
362 		       NVL(P.KNOWN_AS, SUBSTR (P.PERSON_FIRST_NAME, 1, DECODE(INSTR(P.PERSON_FIRST_NAME, ' '), 0, LENGTH(P.PERSON_FIRST_NAME), (INSTR(P.PERSON_FIRST_NAME, ' ')-1)))) || ' ' || P.PERSON_LAST_NAME  per_preferred_name ,
363 		       P.PERSON_TITLE || ' ' || p.PERSON_FIRST_NAME || ' ' || P.PERSON_LAST_NAME       per_title_name ,
364 		       p.PERSON_LAST_NAME || ',  ' || p.PERSON_TITLE || '  ' || NVL(p.KNOWN_AS,p.PERSON_FIRST_NAME)  per_context_block_name
365 		FROM   hz_parties p
366 		WHERE  p.party_id   =  cp_person_id;
367 
368 
369         -- cursor for selection of the person address when
370         -- only the person_id is supplied
371         CURSOR c_pa(cp_person_id NUMBER)IS
372             SELECT padv.person_id      padv_person_id,
373                 padv.addr_type      padv_addr_type,
374                 padv.addr_line_1    padv_addr_line_1,
375                 padv.addr_line_2    padv_addr_line_2,
376                 padv.addr_line_3    padv_addr_line_3,
377                 padv.addr_line_4    padv_addr_line_4,
378                 padv.city       padv_city
379             FROM    IGS_PE_PERSON_ADDR_V    padv
380             WHERE   padv.person_id  =   cp_person_id AND
381                 padv.correspondence_ind = 'Y';
382 
383         -- cursor for selection of the person address when
384         -- only the person_id and addr_type is supplied
385         CURSOR c_pat(
386             cp_person_id NUMBER,
387             cp_addr_type VARCHAR2)IS
388             SELECT  padv.person_id      padv_person_id,
389                 padv.addr_type      padv_addr_type,
390                 padv.addr_line_1    padv_addr_line_1,
391                 padv.addr_line_2    padv_addr_line_2,
392                 padv.addr_line_3    padv_addr_line_3,
393                 padv.addr_line_4    padv_addr_line_4,
394                 padv.city       padv_city
395             FROM    IGS_PE_PERSON_ADDR_V    padv
396             WHERE   padv.person_id      = cp_person_id AND
397                 padv.addr_type      = cp_addr_type;
398 
399         CURSOR initial_name_cur(cp_person_id hz_parties.party_id%TYPE) IS
400 		SELECT SUBSTR(igs_ge_gen_002.genp_get_initials(person_first_name), 1, 10) || ' ' || person_last_name
401         FROM   hz_parties
402 		WHERE  party_id = cp_person_id;
403 
404 
405         CURSOR initial_last_name_cur(cp_person_id hz_parties.party_id%TYPE) IS
406 		SELECT RTRIM(DECODE(person_last_name,null,'',DECODE(person_first_name,null,person_last_name,person_last_name
407                              || ', ' ) ) || NVL(person_first_name,'')|| ' '||person_middle_name,' ')
408         FROM   hz_parties
409 		WHERE  party_id = cp_person_id;
410 
411 
412         -- Local Variables
413         v_name  VARCHAR2(256)   := NULL;
414         v_line_1    VARCHAR2(256)   := NULL;
415 
416         e_name_error    EXCEPTION; -- person name exception handler
417         e_addr_error    EXCEPTION; -- person address exception handler
418     BEGIN
419         -- test for open cursor, then loop and select the persons name
420         IF (c_per_name%ISOPEN) THEN
421             CLOSE c_per_name;
422         END IF;
423 
424         FOR c_per_rec IN c_per_name(p_per_id)LOOP
425             -- Determine if surname should be displayed first
426             IF p_name_style = 'PREFER' THEN
427 
428                 v_name := c_per_rec.per_title || ' ' || c_per_rec.per_preferred_name;
429 
430             ELSIF p_name_style = 'TITLE' THEN
431                 v_name := c_per_rec.per_title_name;
432             ELSIF p_name_style = 'INIT_F' THEN
433 
434                   OPEN initial_name_cur(p_per_id);
435                   FETCH initial_name_cur INTO v_name;
436                   CLOSE initial_name_cur;
437 
438             ELSIF p_name_style = 'INIT_L' THEN
439 
440                   OPEN initial_last_name_cur(p_per_id);
441                   FETCH initial_last_name_cur INTO v_name;
442                   CLOSE initial_last_name_cur;
443 
444             ELSIF p_name_style = 'CONTEXT' THEN
445                    v_name := c_per_rec.per_context_block_name;
446             ELSIF p_name_style = 'SALUTAT' THEN
447 
448                     v_name := c_per_rec.per_title || ' ' || c_per_rec.per_surname;
449             ELSE
450                 v_name := c_per_rec.per_context_block_name;
451             END IF; -- IF p_name_style
452 
453                 -- Determin if p_addr_type is passed and open correct cursor
454             IF p_adr_type IS NULL THEN
455                 FOR c_pa_rec IN c_pa(p_per_id) LOOP
456                         v_line_1 := c_pa_rec.padv_addr_line_1;
457                         p_line_2 := c_pa_rec.padv_addr_line_2;
458                             p_line_3 := c_pa_rec.padv_addr_line_3;
459                         p_line_4 := c_pa_rec.padv_addr_line_4;
460                         p_line_5 := c_pa_rec.padv_city;
461                     END LOOP;
462             ELSE
463                 FOR c_pat_rec IN c_pat(p_per_id, p_adr_type) LOOP
464                         v_line_1 := c_pat_rec.padv_addr_line_1;
465                         p_line_2 := c_pat_rec.padv_addr_line_2;
466                             p_line_3 := c_pat_rec.padv_addr_line_3;
467                         p_line_4 := c_pat_rec.padv_addr_line_4;
468                         p_line_5 := c_pat_rec.padv_city;
469                     END LOOP;
470             END IF;
471         END LOOP;
472         -- test if name has been selected
473         IF v_name IS NULL THEN
474             RAISE e_name_error;
475         ELSE
476             p_name := v_name;
477         END IF;
478         -- test if name has been selected
479         IF v_line_1 IS NULL THEN
480             RAISE e_addr_error;
481         ELSE
482             p_line_1 := v_line_1;
483         END IF;
484         RETURN TRUE;
485     EXCEPTION
486         WHEN e_name_error THEN
487             p_name := 'Person name not found';
488             RETURN FALSE;
489         WHEN e_addr_error THEN
490             p_line_1 := 'No Address Record Found';
491             RETURN TRUE;
492         WHEN OTHERS THEN
493             RAISE;
494     END;
495     EXCEPTION
496         WHEN OTHERS THEN
497             Fnd_Message.Set_Name('IGS' , 'IGS_GE_UNHANDLED_EXCEPTION');
498             RETURN FALSE;
499     END genp_get_per_addr;
500 
501     -------------------------------------------------------------------------------
502     -- Module:  genp_get_org_addr
503     -- Purpose: Function for returning formatted org_unit names and addresses
504     --      based on variations of the parameters passed
505     -- Notes:
506     -- p_phone_no is used to toggle the display of the phone number
507     --  Y populates the p_phone_line parameter with the phone number
508     --  N populates the p_phone_line parameter with a null value
509     -- Exception Handlers
510     -- e_name_error: returns false and populates the p_name variable with
511     -- 'Org Unit not found'
512     -- e_addr_error: returns false and populates p_line_1 with
513     -- 'No address record found'
514     --
515     -- Module History
516     -------------------------------------------------------------------------------
517     -- 03/03/1998 MSONTER Intial creation of Module
518     -- 05/03/1998 MSONTER Modified cursor c_org_name to search
519     -- IGS_CO_ADDR_TYPE.correspondence_type = 'Y'
520     -- 18/03/1998 YSWONG Modified code according to PLSQL-CODING standards
521     -------------------------------------------------------------------------------
522     FUNCTION genp_get_org_addr(
523         p_org_unit_cd       VARCHAR2,
524         p_addr_type     VARCHAR2,
525         p_phone_no      VARCHAR2,
526         p_name      OUT NOCOPY  VARCHAR2,
527         p_line_1    OUT NOCOPY  VARCHAR2,
528         p_line_2    OUT NOCOPY  VARCHAR2,
529         p_line_3    OUT NOCOPY  VARCHAR2,
530         p_line_4    OUT NOCOPY  VARCHAR2,
531         p_line_5    OUT NOCOPY  VARCHAR2,
532         p_phone_line    OUT NOCOPY  VARCHAR2)
533     RETURN BOOLEAN
534     AS
535         -- cursor for selection of the org_unit name
536         CURSOR c_org_name (
537             cp_org_unit_cd VARCHAR2)IS
538             SELECT ou.description   ou_description
539             FROM    IGS_OR_UNIT ou
540             WHERE   ou.org_unit_cd  =   cp_org_unit_cd;
541         -- cursor for selection of the org_unit address when
542         -- only the org_unit_cd is supplied
543         CURSOR c_ou(
544             cp_org_unit_cd VARCHAR2)IS
545             SELECT  oadv.org_unit_cd    oadv_org_unit_cd,
546                 oadv.addr_type      oadv_addr_type,
547                 oadv.addr_line_1    oadv_addr_line_1,
548                 oadv.addr_line_2    oadv_addr_line_2,
549                 oadv.addr_line_3    oadv_addr_line_3,
550                 oadv.addr_line_4    oadv_addr_line_4,
551                 oadv.city       oadv_city
552             FROM    IGS_OR_ADDR oadv
553             WHERE   oadv.org_unit_cd    =   cp_org_unit_cd AND
554                 oadv.correspondence_ind =   'Y';
555 
556         -- cursor for selection of the org_unit address when
557         -- only the org_unit_cd and addr_type is supplied
558         CURSOR c_out(
559             cp_org_unit_cd VARCHAR2,
560             cp_addr_type VARCHAR2) IS
561             SELECT  oadv.org_unit_cd    oadv_org_unit_cd,
562                 oadv.addr_type      oadv_addr_type,
563                 oadv.addr_line_1    oadv_addr_line_1,
564                 oadv.addr_line_2    oadv_addr_line_2,
565                 oadv.addr_line_3    oadv_addr_line_3,
566                 oadv.addr_line_4    oadv_addr_line_4,
567                 oadv.city       oadv_city
568             FROM    IGS_OR_ADDR oadv
569             WHERE   oadv.org_unit_cd    =   cp_org_unit_cd AND
570                 oadv.addr_type      =   cp_addr_type;
571 
572         -- Local Variables
573         v_name      VARCHAR2(256)   := NULL;
574         v_line_1    VARCHAR2(256)   := NULL;
575         -- Local Exceptions
576         e_name_error    EXCEPTION; -- org_unit name exception handler
577         e_addr_error    EXCEPTION; -- org_unit address exception handler
578     BEGIN
579         -- test for open cursor, then loop and select the persons name
580         IF c_org_name%ISOPEN THEN
581             CLOSE c_org_name;
582         END IF;
583         FOR c_org_rec IN c_org_name(
584                     p_org_unit_cd) LOOP
585             v_name := c_org_rec.ou_description;
586             -- Determin if p_addr_type is passed and open correct cursor
587                 IF p_addr_type IS NULL THEN
588                 FOR c_ou_rec IN c_ou(
589                         p_org_unit_cd) LOOP
590                         v_line_1 := c_ou_rec.oadv_addr_line_1;
591                         p_line_2 := c_ou_rec.oadv_addr_line_2;
592                             p_line_3 := c_ou_rec.oadv_addr_line_3;
593                         p_line_4 := c_ou_rec.oadv_addr_line_4;
594                         p_line_5 := c_ou_rec.oadv_city;
595 
596                 END LOOP; -- FOR c_ou_rec IN c_ou(p_org_unit_cd)
597                 ELSE
598                 FOR c_out_rec IN c_out(
599                             p_org_unit_cd,
600                             p_addr_type) LOOP
601                         v_line_1 := c_out_rec.oadv_addr_line_1;
602                         p_line_2 := c_out_rec.oadv_addr_line_2;
603                             p_line_3 := c_out_rec.oadv_addr_line_3;
604                         p_line_4 := c_out_rec.oadv_addr_line_4;
605                         p_line_5 := c_out_rec.oadv_city;
606                 END LOOP; --
607                 END IF;
608         END LOOP;
609         -- test if name has been selected
610         IF v_name IS NULL THEN
611             RAISE e_name_error;
612         ELSE
613             p_name := v_name;
614         END IF;
615         -- test if name has been selected
616         IF v_line_1 IS NULL THEN
617             RAISE e_addr_error;
618         ELSE
619             p_line_1 := v_line_1;
620         END IF;
621         RETURN TRUE;
622     EXCEPTION
623         WHEN e_name_error THEN
624             p_name := 'Org Unit not found';
625             RETURN FALSE;
626         WHEN e_addr_error THEN
627             p_line_1 := 'No Address Record Found';
628             RETURN TRUE;
629         WHEN OTHERS THEN
630             Fnd_Message.Set_Name('IGS' , 'IGS_GE_UNHANDLED_EXCEPTION');
631     END genp_get_org_addr;
632     -------------------------------------------------------------------------------
633     -- Module:  genp_get_loc_addr
634     -- Purpose: Function for returning formatted location names and addresses
635     --      based on variations of the parameters passed
636     -- Notes:
637     -- p_phone_no is used to toggle the display of the phone number
638     --  Y populates the p_phone_line parameter with the phone number
639     --  N populates the p_phone_line parameter with a null value
640     -- Exception Handlers
641     -- e_name_error: returns false and populates the p_name variable with
642     -- 'Location not found'
643     -- e_addr_error: returns false and populates p_line_1 with
644     -- 'No address record found'
645     -- Module History
646     -------------------------------------------------------------------------------
647     -- 04/03/1998 MSONTER Intial creation of Module
648     -- 05/03/1998 MSONTER Modified cursor c_loc_name to search
649     -- IGS_CO_ADDR_TYPE.correspondence_type = 'Y'
650     -- 18/03/1998 YSWONG Modified code according to PLSQL-CODING standards
651     -------------------------------------------------------------------------------
652     FUNCTION genp_get_loc_addr(
653         p_location_cd       VARCHAR2,
654         p_addr_type     VARCHAR2,
655         p_phone_no      VARCHAR2,
656         p_name      OUT NOCOPY  VARCHAR2,
657         p_line_1    OUT NOCOPY  VARCHAR2,
658         p_line_2    OUT NOCOPY  VARCHAR2,
659         p_line_3    OUT NOCOPY  VARCHAR2,
660         p_line_4    OUT NOCOPY  VARCHAR2,
661         p_line_5    OUT NOCOPY  VARCHAR2,
662         p_phone_line    OUT NOCOPY  VARCHAR2)
663     RETURN BOOLEAN
664     AS
665         -- cursor for selection of the location name
666         CURSOR c_loc_name (
667             cp_location_cd VARCHAR2)IS
668             SELECT loc.description  loc_description
669             FROM    IGS_AD_LOCATION loc
670             WHERE   loc.location_cd =   cp_location_cd;
671         -- cursor for selection of the location address when
672         -- only the loc_unit_cd is supplied
673         --skpandey Bug#3687099, Changed definition of cursor c_loc to optimize query
674         CURSOR c_loc(
675             cp_location_cd VARCHAR2)IS
676 	    SELECT
677 		 LA.LOCATION_VENUE_CD  ladv_location_cd,
678 		 HL.ADDRESS1 ladv_addr_line_1,
679 		 HL.ADDRESS2 ladv_addr_line_2,
680 		 HL.ADDRESS3 ladv_addr_line_3,
681 		 HL.ADDRESS4 ladv_addr_line_4,
682 		 HL.CITY ladv_city
683 		 FROM
684 		 HZ_LOCATIONS HL,
685 		 IGS_AD_LOCVENUE_ADDR LA
686 		 WHERE
687 		 HL.LOCATION_ID = LA.LOCATION_ID
688 		 AND LA.SOURCE_TYPE = 'L'
689 		 AND LA.LOCATION_VENUE_CD = cp_location_cd
690 		 AND LA.IDENTIFYING_ADDRESS_FLAG =  'Y' ;
691 
692         -- cursor for selection of the location address when
693         -- only the location_cd and addr_type is supplied
694         --skpandey Bug#3687099, Changed definition of cursor c_loct to optimize query
695 	CURSOR c_loct(
696             cp_location_cd VARCHAR2,
697             cp_addr_type VARCHAR2)IS
698 		SELECT
699 		LA.LOCATION_VENUE_CD  ladv_location_cd,
700 		HL.ADDRESS1 ladv_addr_line_1,
701 		HL.ADDRESS2 ladv_addr_line_2,
702 		HL.ADDRESS3 ladv_addr_line_3,
703 		HL.ADDRESS4 ladv_addr_line_4,
704 		HL.CITY ladv_city
705 		FROM
706 		HZ_LOCATIONS HL,
707 		IGS_AD_LOCVENUE_ADDR LA ,
708 		IGS_PE_LOCVENUE_USE PLU
709 		WHERE
710 		HL.LOCATION_ID = LA.LOCATION_ID
711 		AND LA.LOCATION_VENUE_ADDR_ID = PLU.LOC_VENUE_ADDR_ID
712 		AND LA.SOURCE_TYPE = 'L'
713 		AND LA.LOCATION_VENUE_CD = cp_location_cd
714 		AND PLU.SITE_USE_CODE    =   cp_addr_type;
715 
716 
717 	-- Local Variables
718         v_name      VARCHAR2(256)   := NULL;
719         v_line_1    VARCHAR2(256)   := NULL;
720         -- Local Exceptions
721         e_name_error    EXCEPTION; -- locationt name exception handler
722         e_addr_error    EXCEPTION; -- location address exception handler
723     BEGIN
724         -- test for open cursor, then loop and select the persons name
725         IF c_loc_name%ISOPEN THEN
726             CLOSE c_loc_name;
727         END IF;
728         FOR c_loc_rec IN c_loc_name(
729                     p_location_cd) LOOP
730             v_name := c_loc_rec.loc_description;
731                 -- Determin if p_addr_type is passed and open correct cursor
732             IF p_addr_type IS NULL THEN
733                 FOR c_loc_rec IN c_loc(
734                         p_location_cd)LOOP
735                         v_line_1 := c_loc_rec.ladv_addr_line_1;
736                         p_line_2 := c_loc_rec.ladv_addr_line_2;
737                             p_line_3 := c_loc_rec.ladv_addr_line_3;
738                         p_line_4 := c_loc_rec.ladv_addr_line_4;
739                         p_line_5 := c_loc_rec.ladv_city;
740                 END LOOP;
741                 ELSE
742                 FOR c_loct_rec IN c_loct(
743                             p_location_cd,
744                             p_addr_type)LOOP
745                         v_line_1 := c_loct_rec.ladv_addr_line_1;
746                         p_line_2 := c_loct_rec.ladv_addr_line_2;
747                             p_line_3 := c_loct_rec.ladv_addr_line_3;
748                         p_line_4 := c_loct_rec.ladv_addr_line_4;
749                         p_line_5 := c_loct_rec.ladv_city;
750                 END LOOP;
751                 END IF;
752         END LOOP;
753         -- test if name has been selected
754         IF v_name IS NULL THEN
755             RAISE e_name_error;
756         ELSE
757             p_name := v_name;
758         END IF;
759         -- test if name has been selected
760         IF v_line_1 IS NULL THEN
761             RAISE e_addr_error;
762         ELSE
763             p_line_1 := v_line_1;
764         END IF;
765         RETURN TRUE;
766     EXCEPTION
767         WHEN e_name_error THEN
768             p_name := 'Location Code not found';
769             RETURN FALSE;
770         WHEN e_addr_error THEN
771             p_line_1 := 'No Address Record Found';
772             RETURN TRUE;
773         WHEN OTHERS THEN
774             Fnd_Message.Set_Name('IGS' , 'IGS_GE_UNHANDLED_EXCEPTION');
775     END genp_get_loc_addr;
776     -------------------------------------------------------------------------------
777     -- Module:  genp_get_inst_addr
778     -- Purpose: Function for returning formatted institution names and addresses
779     --      based on variations of the parameters passed
780     -- Notes:
781     -- p_phone_no is used to toggle the display of the phone number
782     --  Y populates the p_phone_line parameter with the phone number
783     --  N populates the p_phone_line parameter with a null value
784     -- Exception Handlers
785     -- e_name_error: returns false and populates the p_name variable with
786     -- 'Institution not found'
787     -- e_addr_error: returns false and populates p_line_1 with
788     -- 'No address record found'
789     --
790     -- Module History
791     ----------------------------------------------------------------------
792     -- 04/03/1998 MSONTER Intial creation of Module
793     -- 05/03/1998 MSONTER Modified cursor c_inst_name to search
794     -- IGS_CO_ADDR_TYPE.correspondence_type = 'Y'
795     -- 18/03/1998 YSWONG Modified code according to PLSQL-CODING standards
796     -- 19/03/1998 MSONTER Moved to local function of genp_get_addr
797     -------------------------------------------------------------------------------
798     FUNCTION genp_get_inst_addr(
799         p_institution_cd    VARCHAR2,
800         p_addr_type     VARCHAR2,
801         p_phone_no      VARCHAR2,
802         p_name      OUT NOCOPY  VARCHAR2,
803         p_line_1    OUT NOCOPY  VARCHAR2,
804         p_line_2    OUT NOCOPY  VARCHAR2,
805         p_line_3    OUT NOCOPY  VARCHAR2,
806         p_line_4    OUT NOCOPY  VARCHAR2,
807         p_line_5    OUT NOCOPY  VARCHAR2,
808         p_phone_line    OUT NOCOPY  VARCHAR2)
809     RETURN BOOLEAN
810     AS
811         -- cursor for selection of the institution name
812         CURSOR c_inst_name (
813             cp_institution_cd VARCHAR2)IS
814             SELECT  inst.name   inst_name
815             FROM    IGS_OR_INSTITUTION  inst
816             WHERE   inst.institution_cd =   cp_institution_cd;
817         -- cursor for selection of the IGS_OR_INSTITUTION address when
818         -- only the loc_unit_cd is supplied
819         CURSOR c_ins(
820             cp_institution_cd VARCHAR2)IS
821             SELECT  iadv.institution_cd iadv_institution_cd,
822                 iadv.addr_type  iadv_addr_type,
823                 iadv.addr_line_1    iadv_addr_line_1,
824                 iadv.addr_line_2    iadv_addr_line_2,
825                 iadv.addr_line_3    iadv_addr_line_3,
826                 iadv.addr_line_4    iadv_addr_line_4,
827                 iadv.city       iadv_city
828             FROM    IGS_OR_INST_ADDR    iadv
829             WHERE   iadv.institution_cd =   cp_institution_cd AND
830                 iadv.correspondence_ind =   'Y';
831         -- cursor for selection of the IGS_OR_INSTITUTION address when
832         -- only the institution_cd and IGS_CO_ADDR_TYPE is supplied
833         CURSOR c_inst(
834             cp_institution_cd VARCHAR2,
835             cp_addr_type VARCHAR2)IS
836             SELECT  iadv.institution_cd iadv_institution_cd,
837                 iadv.addr_type  iadv_addr_type,
838                 iadv.addr_line_1    iadv_addr_line_1,
839                 iadv.addr_line_2    iadv_addr_line_2,
840                 iadv.addr_line_3    iadv_addr_line_3,
841                 iadv.addr_line_4    iadv_addr_line_4,
842                 iadv.city       iadv_city
843             FROM    IGS_OR_INST_ADDR    iadv
844             WHERE   iadv.institution_cd =   cp_institution_cd AND
845                 iadv.addr_type      =   cp_addr_type;
846         -- Local Variables
847         v_name      VARCHAR2(256)   := NULL;
848         v_line_1    VARCHAR2(256)   := NULL;
849         -- Local Exceptions
850         e_name_error    EXCEPTION; -- institutiont name exception handler
851         e_addr_error    EXCEPTION; -- IGS_OR_INSTITUTION address exception handler
852     BEGIN
853         -- test for open cursor, then loop and select the persons name
854         IF c_inst_name%ISOPEN THEN
855                 CLOSE c_inst_name;
856         END IF;
857         FOR c_instit_rec IN c_inst_name(
858                     p_institution_cd) LOOP
859             v_name := c_instit_rec.inst_name;
860             -- Determin if p_addr_type is passed and open correct cursor
861             IF p_addr_type IS NULL THEN
862                 FOR c_ins_rec IN c_ins(
863                             p_institution_cd) LOOP
864                         v_line_1 := c_ins_rec.iadv_addr_line_1;
865                         p_line_2 := c_ins_rec.iadv_addr_line_2;
866                             p_line_3 := c_ins_rec.iadv_addr_line_3;
867                         p_line_4 := c_ins_rec.iadv_addr_line_4;
868                         p_line_5 := c_ins_rec.iadv_city;
869                 END LOOP;
870                 ELSE
871                 FOR c_inst_rec IN c_inst(
872                             p_institution_cd,
873                             p_addr_type)LOOP
874                         v_line_1 := c_inst_rec.iadv_addr_line_1;
875                         p_line_2 := c_inst_rec.iadv_addr_line_2;
876                             p_line_3 := c_inst_rec.iadv_addr_line_3;
877                         p_line_4 := c_inst_rec.iadv_addr_line_4;
878                         p_line_5 := c_inst_rec.iadv_city;
879                 END LOOP;
880                 END IF;
881         END LOOP;
882         -- test if name has been selected
883         IF v_name IS NULL THEN
884             RAISE e_name_error;
885         ELSE
886             p_name := v_name;
887         END IF;
888         -- test if name has been selected
889         IF v_line_1 IS NULL THEN
890             RAISE e_addr_error;
891         ELSE
892             p_line_1 := v_line_1;
893         END IF;
894         RETURN TRUE;
895     EXCEPTION
896         WHEN e_name_error THEN
897             p_name := 'Institution Code not found';
898             RETURN FALSE;
899         WHEN e_addr_error THEN
900             p_line_1 := 'No Address Record Found';
901             RETURN TRUE;
902         WHEN OTHERS THEN
903             Fnd_Message.Set_Name('IGS' , 'IGS_GE_UNHANDLED_EXCEPTION');
904     END genp_get_inst_addr;
905 BEGIN
906     IF (p_person_id      IS NOT NULL AND
907         p_org_unit_cd    IS NULL AND
908         p_institution_cd IS NULL AND
909         p_location_cd    IS NULL) THEN
910         IF NOT genp_get_per_addr(
911                 p_person_id,
912                 p_addr_type,
913                 p_phone_no,
914                 p_name_style,
915                 v_name,
916                 v_line_1,
917                 v_line_2,
918                 v_line_3,
919                 v_line_4,
920                 v_line_5,
921                 v_phone) THEN
922             RAISE e_addr;
923             END IF;
924     ELSIF  (p_person_id      IS NULL     AND
925         p_org_unit_cd    IS NOT NULL AND
926         p_institution_cd IS NULL     AND
927         p_location_cd    IS NULL) THEN
928         IF NOT genp_get_org_addr(
929                 p_org_unit_cd,
930                 p_addr_type,
931                 p_phone_no,
932                 v_name,
933                 v_line_1,
934                 v_line_2,
935                 v_line_3,
936                 v_line_4,
937                 v_line_5,
938                 v_phone) THEN
939             RAISE e_addr;
940         END IF;
941     ELSIF ( p_person_id      IS NULL     AND
942         p_org_unit_cd    IS NULL     AND
943         p_institution_cd IS NOT NULL AND
944         p_location_cd    IS NULL) THEN
945         IF NOT genp_get_inst_addr(
946                 p_institution_cd,
947                 p_addr_type,
948                 p_phone_no,
949                 v_name,
950                 v_line_1,
951                 v_line_2,
952                 v_line_3,
953                 v_line_4,
954                 v_line_5,
955                 v_phone) THEN
956             RAISE e_addr;
957         END IF;
958     ELSIF ( p_person_id      IS NULL     AND
959         p_org_unit_cd    IS NULL     AND
960         p_institution_cd IS NULL     AND
961         p_location_cd    IS NOT NULL) THEN
962         IF NOT genp_get_loc_addr(
963                 p_location_cd,
964                 p_addr_type,
965                 p_phone_no,
966                 v_name,
967                 v_line_1,
968                 v_line_2,
969                 v_line_3,
970                 v_line_4,
971                 v_line_5,
972                 v_phone) THEN
973              RAISE e_addr;
974         END IF;
975     ELSE
976         RAISE e_addr;
977     END IF;
978     -- Assemble the address based on the variables passed
979     v_addr := v_name;
980     -- use p_phone_no to append phone number
981     IF p_phone_no = 'Y' THEN
982         IF v_phone IS NOT NULL THEN
983             v_addr := v_addr || ' ('||v_phone||')';
984         END IF;
985     END IF;
986     -- Use p_inc_addr to append address lnies that are not null
987     IF p_inc_addr = 'Y' THEN
988         IF v_line_1 IS NOT NULL THEN
989             v_addr := v_addr || fnd_global.local_chr(10) || v_line_1;
990         END IF;
991         IF v_line_2 IS NOT NULL THEN
992             v_addr := v_addr || fnd_global.local_chr(10) || v_line_2;
993         END IF;
994         IF v_line_3 IS NOT NULL THEN
995             v_addr := v_addr || ' ' || v_line_3;
996         END IF;
997         IF v_line_4 IS NOT NULL THEN
998             v_addr := v_addr || ' ' || v_line_4;
999         END IF;
1000         IF v_line_5 IS NOT NULL THEN
1001             v_addr := v_addr || ' ' || v_line_5;
1002         END IF;
1003     END IF;
1004     -- Test if v_addr is null, if so then raise exception
1005     IF v_addr IS NULL THEN
1006         RAISE e_addr;
1007     END IF;
1008     -- format string based on p_case_type
1009     IF UPPER(p_case_type) = 'UPPER' THEN
1010         v_addr := UPPER(v_addr);
1011     ELSIF UPPER(p_case_type) = 'LOWER' THEN
1012         v_addr := LOWER(v_addr);
1013     ELSIF UPPER(p_case_type) = 'NORMAL' THEN
1014         v_addr := INITCAP(v_addr);
1015     ELSIF UPPER(p_case_type) = 'DEFAULT' THEN
1016         NULL;
1017     ELSE
1018         RAISE e_addr;
1019     END IF; -- IF UPPER(p_case_type)
1020     RETURN v_addr;
1021 EXCEPTION
1022     WHEN e_addr THEN
1023         IF v_addr IS NULL THEN
1024             RETURN 'No Address record found';
1025         END IF;
1026     WHEN OTHERS THEN
1027         Fnd_Message.Set_Name('IGS' , 'IGS_GE_UNHANDLED_EXCEPTION');
1028         RETURN NULL;
1029 END genp_get_addr;
1030 
1031 --skpandey, Bug#4937960: Stubbed genp_get_appl_owner, nowhere used
1032 FUNCTION genp_get_appl_owner
1033 RETURN VARCHAR2 AS
1034 BEGIN
1035     RETURN NULL;
1036 END;
1037 
1038 
1039  PROCEDURE genp_get_audit(
1040   p_table_name IN VARCHAR2 ,
1041   p_rowid IN VARCHAR2 ,
1042   p_update_who OUT NOCOPY VARCHAR2 ,
1043   p_update_on OUT NOCOPY DATE )
1044 AS
1045 	/* change history
1046      WHO       WHEN          WHAT
1047      vrathi    10-JUN-2003   BUG:2940810 Added SQL bind variable
1048 	*/
1049     v_cursor        integer;
1050     v_no_rows   integer;
1051     v_update_who    varchar2(100);
1052     v_update_on date;
1053     v_select_string varchar2(255);
1054 BEGIN
1055     v_cursor := dbms_sql.open_cursor;
1056     v_select_string := 'SELECT LAST_UPDATED_BY, LAST_UPDATE_DATE FROM '||p_table_name||' WHERE rowid=:row_id';
1057 
1058     dbms_sql.parse(v_cursor, v_select_string, dbms_sql.native);
1059 
1060     dbms_sql.bind_variable(v_cursor,'row_id',p_rowid);
1061 
1062     dbms_sql.define_column(v_cursor,1,v_update_who,30);
1063     dbms_sql.define_column(v_cursor,2,v_update_on);
1064     v_no_rows := dbms_sql.execute_and_fetch(v_cursor, false);
1065     dbms_sql.column_value(v_cursor,1,v_update_who);
1066     dbms_sql.column_value(v_cursor,2,v_update_on);
1067     p_update_who := v_update_who;
1068     p_update_on := v_update_on;
1069     dbms_sql.close_cursor(v_cursor);
1070 END genp_get_audit;
1071 
1072 
1073  FUNCTION genp_get_cmp_cutoff(
1074   p_acad_cal_type IN VARCHAR2 ,
1075   p_acad_ci_sequence_number IN NUMBER )
1076 RETURN DATE AS
1077     gv_other_detail     VARCHAR2(255);
1078 BEGIN   -- genp_get_cmp_cutoff
1079     -- This module gets the IGS_PS_COURSE completion cutoff date.
1080 DECLARE
1081     v_alias_val     IGS_CA_DA_INST_V.alias_val%TYPE;
1082     CURSOR c_daiv_sgcc (
1083         cp_acad_cal_type        IGS_CA_INST.cal_type%TYPE,
1084         cp_acad_ci_sequence_number  IGS_CA_INST.sequence_number%TYPE) IS
1085         SELECT  daiv.alias_val
1086         FROM    IGS_CA_DA_INST_V    daiv,
1087             IGS_GE_S_GEN_CAL_CON        sgcc
1088         WHERE   daiv.cal_type       = cp_acad_cal_type AND
1089             daiv.ci_sequence_number = cp_acad_ci_sequence_number AND
1090             daiv.dt_alias       = sgcc.crs_completion_cutoff_dt_alias
1091         ORDER BY    daiv.alias_val ASC;
1092 BEGIN
1093     OPEN c_daiv_sgcc(
1094             p_acad_cal_type,
1095             p_acad_ci_sequence_number);
1096     FETCH c_daiv_sgcc INTO v_alias_val;
1097     IF c_daiv_sgcc%FOUND THEN
1098         CLOSE c_daiv_sgcc;
1099         RETURN v_alias_val;
1100     END IF;
1101     CLOSE c_daiv_sgcc;
1102     RETURN NULL;
1103 EXCEPTION
1104     WHEN OTHERS THEN
1105         IF (c_daiv_sgcc%ISOPEN) THEN
1106             CLOSE c_daiv_sgcc;
1107         END IF;
1108         RAISE;
1109 END;
1110 EXCEPTION
1111     WHEN OTHERS THEN
1112         Fnd_Message.Set_Name('IGS' , 'IGS_GE_UNHANDLED_EXCEPTION');
1113 END genp_get_cmp_cutoff;
1114 
1115 FUNCTION adm_get_name(
1116     x_person_id in NUMBER)
1117 RETURN VARCHAR2 AS
1118 
1119 l_name VARCHAR2(450);
1120 CURSOR name IS
1121 -- change the reference from igs_pe_person_v to igs_pe_person_base_v --rghosh
1122 SELECT full_name FROM igs_pe_person_base_v
1123 WHERE  person_id = x_person_id;
1124 BEGIN
1125 IF x_person_id IS NULL THEN
1126   return NULL;
1127 ELSE
1128   OPEN name;
1129   FETCH name INTO l_name;
1130   CLOSE name;
1131   RETURN l_name;
1132 END IF;
1133 
1134 END adm_get_name;
1135 
1136 FUNCTION adm_get_unit_title(
1137     x_person_id             NUMBER,
1138     x_admission_appl_number NUMBER,
1139         x_nominated_course_cd  VARCHAR2)
1140 RETURN VARCHAR2 AS
1141 l_title VARCHAR2(90);
1142 CURSOR title IS
1143 SELECT title FROM igs_ad_unit_sets_v
1144 WHERE  person_id         = x_person_id AND
1145        admission_appl_number = x_admission_appl_number AND
1146        nominated_course_cd   = x_nominated_course_cd;
1147 BEGIN
1148   OPEN title;
1149   FETCH title INTO l_title;
1150   CLOSE title;
1151   RETURN l_title;
1152 
1153 END adm_get_unit_title;
1154 
1155 END IGS_GE_GEN_001 ;