DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_EN_VAL_API

Source


1 PACKAGE BODY IGS_EN_VAL_API AS
2 /* $Header: IGSEN23B.pls 120.1 2005/08/29 08:01:12 appldev ship $ */
3 
4   -------------------------------------------------------------------------------------------
5   --Change History:
6   --Who         When            What
7   --npalanis    06-JAN-2002     BUG NO. 2170429 .The  cursor c_sfs removed
8   --smadathi    29-AUG-2001     Bug No. 1956374 .The function GENP_VAL_STRT_END_DT removed
9   --smadathi    24-AUG-2001     Bug No. 1956374 .The function GENP_VAL_SDTT_SESS removed
10   --msrinivi    24-AUG-2001     Bug No. 1956374 .The function GENP_SET_ROWID removed
11   --vrathi      18-may-2003     Bug No. 2928745 : end date check cursor modified to include person_id_type
12   -- ssaleem    17-Sept-2004    Bug No. 3787210 : Added Closed Ind in table IGS_PE_PERSON_ID_TYP
13   -------------------------------------------------------------------------------------------
14 
15 
16   --
17   -- Validate that an entry exist in s_disable_table_trigger.
18   --
19   -- Routine to clear rowids saved in a PL/SQL TABLE from a prior commit.
20   PROCEDURE genp_prc_clear_rowid
21   AS
22   BEGIN
23   	-- initialise
24   	gt_rowid_table := gt_empty_table;
25   	gv_table_index := 1;
26   END genp_prc_clear_rowid;
27   --
28   -- Routine to process api rowids in a PL/SQL TABLE for the current commit
29   FUNCTION enrp_prc_api_rowids(
30   p_inserting IN BOOLEAN ,
31   p_updating IN BOOLEAN ,
32   p_deleting IN BOOLEAN ,
33   p_message_name OUT NOCOPY VARCHAR2)
34   RETURN BOOLEAN AS
35   	v_index			BINARY_INTEGER;
36 
37   	r_alternate_person_id 	IGS_PE_ALT_PERS_ID%ROWTYPE;
38   	cst_pay_adv_no		CONSTANT	VARCHAR2(10) := 'PAY_ADV_NO';
39   	v_dummy			VARCHAR2(1);
40   	CURSOR	c_pit (cp_person_id_type	IGS_PE_PERSON_ID_TYP.person_id_type%TYPE) IS
41   		SELECT 	'x'
42   		FROM	IGS_PE_PERSON_ID_TYP		pit
43   		WHERE	pit.person_id_type 	= cp_person_id_type AND
44   			pit.s_person_id_type 	= cst_pay_adv_no AND
45 			pit.closed_ind = 'N' ;
46   BEGIN
47   	-- Process saved rows.
48   	FOR  v_index IN 1..gv_table_index - 1
49   	LOOP
50   		BEGIN
51   			SELECT	*
52   			INTO	r_alternate_person_id
53   			FROM	IGS_PE_ALT_PERS_ID
54   			WHERE	rowid = gt_rowid_table(v_index);
55   			EXCEPTION
56   				WHEN OTHERS THEN
57  		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
58 		FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_VAL_API.enrp_prc_api_rowids');
59 		IGS_GE_MSG_STACK.ADD;
60 		App_Exception.Raise_Exception;
61 
62   		END;
63   		-- Validate the alternate person id when a 'PAY_ADV_NO' is unique.
64   		OPEN c_pit (r_alternate_person_id.person_id_type);
65   		FETCH c_pit INTO v_dummy;
66   		IF (c_pit%FOUND) THEN
67   			CLOSE c_pit;
68   			IF IGS_EN_VAL_API.enrp_val_api_pan (
69   					r_alternate_person_id.pe_person_id,
70   					r_alternate_person_id.api_person_id,
71   					p_message_name) = FALSE THEN
72   				RETURN FALSE;
73   			END IF;
74   		ELSE
75   			CLOSE c_pit;
76   		END IF;
77   	END LOOP;
78   	RETURN TRUE;
79   END enrp_prc_api_rowids;
80   --
81   -- Validate the payment advice number is unique.
82   FUNCTION enrp_val_api_pan(
83   p_person_id  IGS_PE_ALT_PERS_ID.pe_person_id%TYPE ,
84   p_pay_advice_number  IGS_PE_ALT_PERS_ID.api_person_id%TYPE ,
85   p_message_name OUT NOCOPY varchar2)
86   RETURN BOOLEAN AS
87 
88   BEGIN	-- enrp_val_api_pan
89   	-- Validate that IGS_PE_ALT_PERS_ID where s_person_id_type = 'PAY_ADV_NO' is
90   	-- unique to the person and that it does not clash with any payment_advice
91   	-- number in IGS_FI_STDNT_FEE_SPN
92   DECLARE
93   	cst_pay_adv_no		CONSTANT	VARCHAR2(10) := 'PAY_ADV_NO';
94   	v_dummy					VARCHAR2(1);
95   	CURSOR	c_api_pit IS
96   		SELECT 	'x'
97   		FROM	IGS_PE_ALT_PERS_ID	api,
98   			IGS_PE_PERSON_ID_TYP		pit
99   		WHERE	api.api_person_id 	= p_pay_advice_number 	AND
100   			api.pe_person_id 	 <>  p_person_id		AND
101   			api.person_id_type 	= pit.person_id_type 	AND
102   			pit.s_person_id_type 	= cst_pay_adv_no;
103 
104   BEGIN
105   	-- validate IGS_PE_ALT_PERS_ID where
106   	-- s_person_id_type = 'PAY_ADV_NO' is unique to this IGS_PE_PERSON
107   	OPEN c_api_pit;
108   	FETCH c_api_pit INTO v_dummy;
109   	IF c_api_pit%FOUND THEN
110   		CLOSE c_api_pit;
111   		p_message_name := 'IGS_FI_PYMT_ADVICE_NUM_ALLOCA';
112   		RETURN FALSE;
113   	END IF;
114   	CLOSE c_api_pit;
115 
116   	-- pay advise number is valid
117   	p_message_name := null;
118   	RETURN TRUE;
119   EXCEPTION
120   	WHEN OTHERS THEN
121   		IF (c_api_pit%ISOPEN) THEN
122   			CLOSE c_api_pit;
123   		END IF;
124 
125   		RAISE;
126   END;
127   EXCEPTION
128   	WHEN OTHERS THEN
129 		Fnd_Message.Set_Name('IGS','IGS_GE_UNHANDLED_EXP');
130 		FND_MESSAGE.SET_TOKEN('NAME','IGS_EN_VAL_API.enrp_val_api_pan');
131 		IGS_GE_MSG_STACK.ADD;
132 		App_Exception.Raise_Exception;
133 
134   END enrp_val_api_pan;
135 
136   FUNCTION val_overlap_api(
137   p_person_id   IGS_PE_ALT_PERS_ID_V.PE_PERSON_ID%TYPE)
138   RETURN BOOLEAN AS
139  ------------------------------------------------------------------------------------------
140   --Created by  : pkpatel
141   --Date created: 8-JUN-2002
142   -- bug no: Bug No: 2402077
143   --Purpose:To check Overlapping period for Person Id Types, if more than exists it returns FALSE
144   --         else TRUE.
145   --Known limitations/enhancements and/or remarks:
146   --
147   --Change History:
148   --Who         When            What
149   --kpadiyar	27-JAN-2003	Changed >= B.START_DT to > B.sTART_DT for bug 2726415
150   --ssawhney                      end date overlapp modified to include <=
151   -- vrathi     18-may-2003     Bug 2928745 : end date check cursor modified to include person_id_type
152   --vrathi      20-may-2003     Changed NVL(A.END_DT,TO_DATE('4712/12/31','YYYY/MM/DD')) <=
153   --                            NVL(B.END_DT,TO_DATE('4712/12/31','YYYY/MM/DD')) comparison to <= from <
154   --askapoor    31-jan-05       Added NVL(A.END_DT,TO_DATE('4712/12/31','YYYY/MM/DD')) <>  A.START_DT
155   --                            in val_overlap_api
156   ----------------------------------------------------------------------------------------------
157 
158     CURSOR c_validate_overlap_dates ( cp_person_id   IGS_PE_ALT_PERS_ID_V.PE_PERSON_ID%TYPE)
159     IS
160     SELECT COUNT(1)
161     FROM   IGS_PE_ALT_PERS_ID A,
162            IGS_PE_ALT_PERS_ID B
163     WHERE  A.pe_person_id   =  cp_person_id
164     AND    A.pe_person_id   =  B.pe_person_id
165     AND    A.person_id_type =  B.person_id_type
166     AND    A.ROWID  <> B.ROWID
167     AND    A.START_DT < NVL(B.END_DT,TO_DATE('4712/12/31','YYYY/MM/DD'))
168     AND    NVL(A.END_DT,TO_DATE('4712/12/31','YYYY/MM/DD')) <>  A.START_DT
169     AND    NVL(A.END_DT,TO_DATE('4712/12/31','YYYY/MM/DD')) >  B.START_DT
170     AND    (
171     NVL(A.END_DT,TO_DATE('4712/12/31','YYYY/MM/DD')) <= NVL(B.END_DT,TO_DATE('4712/12/31','YYYY/MM/DD'))
172     OR
173     A.END_DT <= B.END_DT
174     );
175 
176 
177 
178    ln_count NUMBER(10);
179 
180    CURSOR c_end_chk (cp_person_id   IGS_PE_ALT_PERS_ID_V.PE_PERSON_ID%TYPE)
181    IS
182    SELECT  count('x')
183    FROM    igs_pe_alt_pers_id
184    WHERE   pe_person_id = cp_person_id
185    AND     end_dt IS NULL
186    GROUP BY pe_person_id,PERSON_ID_TYPE
187    HAVING count('x') >1;
188 
189   BEGIN
190       OPEN  c_end_chk ( p_person_id );
191       FETCH c_end_chk INTO ln_count;
192       CLOSE c_end_chk;
193 
194       IF ln_count > 1 THEN
195        ln_count := 0;
196        RETURN FALSE;
197       END IF;
198 
199 
200       OPEN c_validate_overlap_dates ( p_person_id );
201       FETCH c_validate_overlap_dates INTO ln_count;
202       CLOSE c_validate_overlap_dates;
203 
204 	-- If ln_count is greater than then it indicates that records with overlapping dates exist in the database
205     -- In such a situation display an error  message
206     IF (ln_count > 0) THEN
207 	  RETURN FALSE;
208     END IF;
209 
210 	RETURN TRUE;
211 
212   END val_overlap_api;
213 
214   FUNCTION val_ssn_overlap_api(
215   p_person_id   IGS_PE_ALT_PERS_ID_V.PE_PERSON_ID%TYPE)
216   RETURN BOOLEAN AS
217  ------------------------------------------------------------------------------------------
218   --Created by  : pkpatel
219   --Date created: 8-JUN-2002
220   -- bug no: Bug No: 2402077
221   --Purpose:To check Overlapping period for Person Id Types associated with System Person ID type SSN, if more than exists it returns FALSE
222   --         else FALSE.
223   --Known limitations/enhancements and/or remarks:
224   --
225   --Change History:
226   --Who         When            What
227   --kpadiyar	27-JAN-2003	Changed >= B.START_DT to > B.START_DT for bug 2726415
228   -- ssawhney                   end date voerlap modified to have <=
229   -- vrathi     18-may-2003     Bug 2928745 : end date check cursor modified to include person_id_type
230   --askapoor    31-jan-05       Added NVL(A.END_DT,TO_DATE('4712/12/31','YYYY/MM/DD')) <>  A.START_DT
231   --                            in val_ssn_overlap_api
232   ----------------------------------------------------------------------------------------------
233     CURSOR val_overlap_dt_ssn_cur ( cp_person_id   IGS_PE_ALT_PERS_ID_V.PE_PERSON_ID%TYPE)
234     IS
235     SELECT COUNT(1)
236     FROM   IGS_PE_ALT_PERS_ID A,
237            IGS_PE_ALT_PERS_ID B
238     WHERE  A.pe_person_id   =  cp_person_id
239     AND    A.pe_person_id   =  B.pe_person_id
240     AND    A.person_id_type IN (SELECT person_id_type FROM IGS_PE_PERSON_ID_TYP WHERE s_person_id_type = 'SSN')
241     AND    B.person_id_type IN (SELECT person_id_type FROM IGS_PE_PERSON_ID_TYP WHERE s_person_id_type = 'SSN')
242     AND    A.ROWID  <> B.ROWID
243     AND    A.START_DT < NVL(B.END_DT,TO_DATE('4712/12/31','YYYY/MM/DD'))
244     AND    NVL(A.END_DT,TO_DATE('4712/12/31','YYYY/MM/DD')) <>  A.START_DT
245     AND    NVL(A.END_DT,TO_DATE('4712/12/31','YYYY/MM/DD')) >  B.START_DT
246     AND    (
247     NVL(A.END_DT,TO_DATE('4712/12/31','YYYY/MM/DD')) <= NVL(B.END_DT,TO_DATE('4712/12/31','YYYY/MM/DD'))
248     OR
249     A.END_DT <= B.END_DT
250     );
251 
252     l_count NUMBER := 0;
253 
254    CURSOR c_end_chk (cp_person_id   IGS_PE_ALT_PERS_ID_V.PE_PERSON_ID%TYPE)
255    IS
256    SELECT  count('x')
257    FROM    igs_pe_alt_pers_id
258    WHERE   pe_person_id = cp_person_id
259    AND    PERSON_ID_TYPE IN ( select person_id_type from igs_pe_person_id_typ
260                              where S_PERSON_ID_TYPE='SSN' )
261    AND     end_dt IS NULL
262    GROUP BY pe_person_id,PERSON_ID_TYPE;
263 
264   BEGIN
265 
266       OPEN  c_end_chk ( p_person_id );
267       FETCH c_end_chk INTO l_count;
268       CLOSE c_end_chk;
269 
270       IF l_count > 1 THEN
271        l_count := 0;
272        RETURN FALSE;
273       END IF;
274 
275   	  OPEN   val_overlap_dt_ssn_cur ( p_person_id);
276 	  FETCH  val_overlap_dt_ssn_cur INTO l_count;
277 	  CLOSE  val_overlap_dt_ssn_cur;
278 
279     -- If l_count is greater than 0 then it indicates that records with overlapping dates exist in the database
280     -- In such a situation display an error  message
281     IF (l_count > 0) THEN
282 	  RETURN FALSE;
283     END IF;
284 
285 	RETURN TRUE;
286 
287   END val_ssn_overlap_api;
288 
289   FUNCTION fm_equal(
290    p_format_mask IN igs_pe_person_id_typ.format_mask%TYPE,
291    p_frmt_msk_copy IN igs_pe_person_id_typ.format_mask%TYPE)
292   RETURN BOOLEAN AS
293   ------------------------------------------------------------------------------------------
294   --Created by  : sarakshi
295   --Date created: 21-SEP-2001
296   -- bug no:2000408
297   --Purpose:To check that the format mask field is 9 or X or any of the special char
298   --         ('-','_','+','=',')','(','*','&','^','%','$','#','@','!','`','~','/','\',' '),if it is
299   --         then this function returns true else false.
300   --Known limitations/enhancements and/or remarks:
301   --
302   --Change History:
303   --Who         When            What
304   ----------------------------------------------------------------------------------------------
305   l_str_len   NUMBER  := LENGTH(p_format_mask);
306   l_trans_s   IGS_PE_PERSON_ID_TYP.FORMAT_MASK%TYPE := NULL;
307   l_chr       VARCHAR2(1);
308   BEGIN
309     FOR i IN 1..l_str_len LOOP
310       l_chr := SUBSTR(p_format_mask,i,1);
311       IF l_chr IN ('0','1','2','3','4','5','6','7','8','9') THEN
312         l_trans_s :=l_trans_s||'9';
313       ELSIF l_chr IN ('-','_','+','=',')','(','*','&','^','%','$','#','@','!','`','~','/','\',' ') THEN
314         l_trans_s :=l_trans_s||l_chr;
315       ELSE
316         l_trans_s:=l_trans_s||'X';
317       END IF;
318     END LOOP;
319 
320     IF p_frmt_msk_copy = l_trans_s THEN
321       RETURN TRUE;
322     ELSE
323       RETURN FALSE;
324     END IF;
325   END fm_equal;
326 
327   FUNCTION unformat_api(
328   p_api_pers_id IN igs_pe_alt_pers_id.api_person_id%TYPE)
329   RETURN VARCHAR2 AS
330 ------------------------------------------------------------------------------------------
331   --Created by  : pkpatel
332   --Date created: 06-JUN-2002
333   --
334   --Purpose: Bug No: 2402077. To unformat the formatted Alternate Person ID field from the special char
335   --         ('-','_','+','=',')','(','*','&','^','%','$','#','@','!','`','~','/','\',' '). It returns the Unformatted
336   --         person ID Type.
337   --Known limitations/enhancements and/or remarks:
338   --
339   --Change History:
340   --Who         When            What
341   ----------------------------------------------------------------------------------------------
342 
343   l_str_len   NUMBER  := LENGTH(p_api_pers_id);
344   l_api_pers_id_gen   igs_pe_alt_pers_id.api_person_id%TYPE := NULL;
345   l_chr       VARCHAR2(1);
346 
347   BEGIN
348     FOR i IN 1..l_str_len LOOP
349       l_chr := SUBSTR(p_api_pers_id,i,1);
350       IF l_chr IN ('0','1','2','3','4','5','6','7','8','9') THEN
351         l_api_pers_id_gen := l_api_pers_id_gen||l_chr;
352       ELSIF l_chr IN ('-','_','+','=',')','(','*','&','^','%','$','#','@','!','`','~','/','\',' ') THEN
353         NULL;
354       ELSE
355         l_api_pers_id_gen := l_api_pers_id_gen||l_chr;
356       END IF;
357     END LOOP;
358 
359     RETURN l_api_pers_id_gen;
360 
361   END unformat_api;
362 
363   FUNCTION fm_equal_wrap(
364    p_format_mask IN igs_pe_person_id_typ.format_mask%TYPE,
365    p_frmt_msk_copy IN igs_pe_person_id_typ.format_mask%TYPE)
366   RETURN NUMBER AS
367  ------------------------------------------------------------------------------------------
368   --Created by  : pkpatel
369   --Date created: 29-Aug-2005
370   --Purpose: Wrapper method to be called from Self -Service
371   --Known limitations/enhancements and/or remarks:
372   --
373   --Change History:
374   --Who         When            What
375   ----------------------------------------------------------------------------------------------
376     l_result boolean;
377   BEGIN
378     l_result := fm_equal(p_format_mask,p_frmt_msk_copy);
379     if l_result then
380        return 1;
381     else
382        return 0;
383     end if;
384   END fm_equal_wrap;
385 
386 END igs_en_val_api;