DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_GE_PRC_TRANSFER

Source


1 PACKAGE BODY IGS_GE_PRC_TRANSFER AS
2 /* $Header: IGSGE07B.pls 115.5 2002/11/29 00:32:33 nsidana ship $ */
3 /* Bug 1956374
4    Who msrinivi
5    What duplicate removal Rremoved genp_prc_clear_rowid,genp_set_row_id
6 */
7 	l_rowid  varchar2(25);
8   --
9   -- To get the alternate  person ids for the data transfer mechanism.
10   FUNCTION GENP_GET_ALT_PE_ID(
11   p_person_id IN NUMBER ,
12   p_person_id_type IN VARCHAR2 )
13   RETURN VARCHAR2 AS
14   	v_alt_person_id		VARCHAR2(20);
15   	CURSOR c_get_alt_pe_id IS
16   		SELECT	api_person_id
17   		FROM	IGS_PE_ALT_PERS_ID
18   		WHERE	person_id_type = p_person_id_type AND
19   			pe_person_id = p_person_id;
20   BEGIN
21   	OPEN c_get_alt_pe_id;
22   	FETCH c_get_alt_pe_id INTO v_alt_person_id;
23   	IF c_get_alt_pe_id%NOTFOUND THEN
24   		CLOSE c_get_alt_pe_id;
25   		RETURN NULL;
26   	ELSE
27   		CLOSE c_get_alt_pe_id;
28   		RETURN v_alt_person_id;
29   	END IF;
30   END genp_get_alt_pe_id;
31   --
32   -- To get the person statistics location description for the data transf.
33   FUNCTION GENP_GET_PS_LOCATION(
34   p_person_id IN NUMBER ,
35   p_start_dt IN DATE ,
36   p_location_type IN VARCHAR2 )
37   RETURN VARCHAR2 AS
38   	v_location_country		IGS_PE_STATISTICS.term_location_country%TYPE;
39   	v_location_postcode		IGS_PE_STATISTICS.term_location_postcode%TYPE;
40   	CURSOR c_get_term_location_data IS
41   		SELECT	term_location_country, term_location_postcode
42   		FROM	IGS_PE_STATISTICS
43   		WHERE	person_id = p_person_id AND
44   			start_dt = p_start_dt;
45   	CURSOR c_get_home_location_data IS
46   		SELECT	home_location_country, home_location_postcode
47   		FROM	IGS_PE_STATISTICS
48   		WHERE	person_id = p_person_id AND
49   			start_dt = p_start_dt;
50   BEGIN
51   	IF p_location_type = cst_term_location_type THEN
52   		OPEN c_get_term_location_data;
53   		FETCH c_get_term_location_data  INTO v_location_country, v_location_postcode;
54   		CLOSE c_get_term_location_data;
55   		IF v_location_country IS NOT NULL THEN
56   			RETURN v_location_country;
57   		ELSE
58   			IF v_location_postcode IS NOT NULL THEN
59   				RETURN v_location_postcode;
60   			END IF;
61   		END IF;
62   		RETURN NULL;
63   	END IF;
64   	IF p_location_type = cst_home_location_type THEN
65   		OPEN c_get_home_location_data;
66   		FETCH c_get_home_location_data  INTO v_location_country, v_location_postcode;
67   		CLOSE c_get_home_location_data;
68   		IF v_location_country IS NOT NULL THEN
69   			RETURN v_location_country;
70   		ELSE
71   			IF v_location_postcode IS NOT NULL THEN
72   				RETURN v_location_postcode;
73   			END IF;
74   		END IF;
75   		RETURN NULL;
76   	END IF;
77   END genp_get_ps_location;
78   --
79   -- To insert data transfer IGS_PE_STD_TODO entries
80   PROCEDURE GENP_INS_TRNSFR_TODO(
81   p_person_id IN NUMBER ,
82   p_s_student_todo_type IN VARCHAR2 ,
83   p_todo_dt IN DATE )
84   AS
85   	e_resource_busy		EXCEPTION;
86   	PRAGMA	EXCEPTION_INIT(e_resource_busy, -54);
87   	gv_other_details		VARCHAR2(255);
88 	l_val number;
89   BEGIN
90   DECLARE
91   	v_st_sequence_number		IGS_PE_STD_TODO.sequence_number%TYPE;
92   	v_insert_not_req_flag		BOOLEAN DEFAULT FALSE;
93   	CURSOR c_chk_todo_dt_exists  (
94   		cp_person_id		IGS_PE_STD_TODO.person_id%TYPE,
95   		cp_s_student_todo_type  IGS_PE_STD_TODO.s_student_todo_type%TYPE ) IS
96   		SELECT	sequence_number
97   		FROM	IGS_PE_STD_TODO
98   		WHERE	person_id = cp_person_id			AND
99   			s_student_todo_type = cp_s_student_todo_type	AND
100   			logical_delete_dt IS NULL;
101   	CURSOR c_get_todo_rec_for_update (
102   		cp_person_id		IGS_PE_STD_TODO.person_id%TYPE,
103   		cp_s_student_todo_type  IGS_PE_STD_TODO.s_student_todo_type%TYPE,
104   		cp_sequence_number	NUMBER ) IS
105   		SELECT	IGS_PE_STD_TODO.* , ROWID
106   		FROM	IGS_PE_STD_TODO
107   		WHERE	person_id = cp_person_id			AND
108   			s_student_todo_type = cp_s_student_todo_type	AND
109   			sequence_number = cp_sequence_number
110   		FOR UPDATE OF todo_dt
111   		NOWAIT;
112   	v_existing_st_record		C_GET_TODO_REC_FOR_UPDATE%ROWTYPE;
113   BEGIN
114   	--- Check for previous insertion during transaction as multiple records
115   	--- for a given person/todo_type aren't necessary.  If one is found and it
116   	--- isn't logically deleted, then update the todo_dt to postpone processing
117   	--- (10 minutes is added).
118   	OPEN c_chk_todo_dt_exists(p_person_id, p_s_student_todo_type);
119   	FETCH c_chk_todo_dt_exists INTO v_st_sequence_number;
120   	LOOP
121   		EXIT WHEN c_chk_todo_dt_exists%NOTFOUND;
122   		-- The following block selects the record for updating.  If a lock is present,
123   		-- then the record isn't updated and processing continues.
124   		BEGIN
125   			OPEN c_get_todo_rec_for_update( p_person_id,
126   							p_s_student_todo_type,
127   							v_st_sequence_number );
128   			FETCH c_get_todo_rec_for_update INTO v_existing_st_record;
129   			LOOP
130   				EXIT WHEN c_get_todo_rec_for_update%NOTFOUND;
131   				v_insert_not_req_flag := TRUE;
132 				SELECT IGS_PE_STD_TODO_SEQ_NUM_S.NEXTVAL INTO L_VAL
133 				FROM DUAL ;
134 				IGS_PE_STD_TODO_PKG.UPDATE_ROW(
135 						x_rowid => v_existing_st_record.ROWID ,
136 						X_PERSON_ID  =>  v_existing_st_record.PERSON_ID,
137 						X_S_STUDENT_TODO_TYPE =>  v_existing_st_record.S_STUDENT_TODO_TYPE,
138 						X_SEQUENCE_NUMBER => L_VAL,
139 						X_TODO_DT =>  SYSDATE + 1/144 ,
140 						X_LOGICAL_DELETE_DT => v_existing_st_record.LOGICAL_DELETE_DT,
141 						X_MODE=> 'R'
142 						);
143   				FETCH c_get_todo_rec_for_update INTO v_existing_st_record;
144   			END LOOP;
145   			CLOSE c_get_todo_rec_for_update;
146   		EXCEPTION
147   			WHEN e_resource_busy THEN
148   				NULL;
149   			WHEN OTHERS THEN
150   				RAISE;
151   		END;
152   		FETCH c_chk_todo_dt_exists INTO v_st_sequence_number;
153   	END LOOP;
154   	CLOSE c_chk_todo_dt_exists;
155   	--- If an update was performed or a previous record exists then exit
156   	--  the procedure.
157   	IF v_insert_not_req_flag THEN
158   		RETURN;
159   	END IF;
160   	--- Insert a record into the IGS_PE_STD_TODO table using the parameters.
161 	SELECT IGS_PE_STD_TODO_SEQ_NUM_S.nextval INTO L_VAL
162 	FROM DUAL ;
163 	IGS_PE_STD_TODO_PKG.INSERT_ROW (
164 		X_ROWID => L_ROWID,
165   		x_person_id  =>p_person_id,
166   		x_s_student_todo_type  =>p_s_student_todo_type,
167   		x_sequence_number => L_VAL ,
168   		x_todo_dt  => p_todo_dt,
169 		x_logical_delete_dt => NULL,
170 		x_mode => 'R'
171  );
172 
173   END;
174   EXCEPTION
175   WHEN OTHERS THEN
176 	Fnd_Message.Set_Name('IGS' , 'IGS_GE_UNHANDLED_EXCEPTION');
177 	IGS_GE_MSG_STACK.ADD;
178 	App_Exception.Raise_Exception ;
179   END genp_ins_trnsfr_todo;
180   --
181 
182   -- Process PE rowids in a PL/SQL TABLE for the current commit.
183   FUNCTION genp_prc_pe_rowids (
184   p_inserting IN BOOLEAN ,
185   p_updating IN BOOLEAN ,
186   p_deleting IN BOOLEAN ,
187   p_message_name IN OUT NOCOPY VARCHAR2 )
188   RETURN BOOLEAN AS
189   	v_index		BINARY_INTEGER;
190   	v_other_detail	VARCHAR2(255);
191   	r_pe		IGS_PE_PERSON%ROWTYPE;
192   	v_todo_dt	DATE;
193 
194   CURSOR  per_cur (lcrowid VARCHAR2) IS
195 	SELECT	* FROM IGS_PE_PERSON
196         WHERE rowid = lcrowid;
197 
198   BEGIN
199   	-- Process saved rows.
200   	FOR  v_index IN 1..gv_table_index - 1
201   	LOOP
202 
203      begin
204       OPEN per_cur (gt_rowid_table(v_index));
205       FETCH per_cur INTO r_pe;
206       IF per_cur%NOTFOUND THEN
207 	  RAISE no_data_found ;
208       ELSE
209   		-- Allow for a 10 minute interval
210   		v_todo_dt := SYSDATE + 1/144;
211   		-- Insert person into IGS_PE_STD_TODO table
212   		IGS_GE_PRC_TRANSFER.genp_ins_trnsfr_todo(r_pe.person_id,
213   						'PERS_TRANS',
214   						v_todo_dt);
215 
216 
217       END IF;
218       CLOSE Per_Cur;
219       EXCEPTION
220 	    WHEN no_data_found THEN
221  		CLOSE per_cur;
222 	    WHEN others THEN
223               IF per_cur%ISOPEN THEN
224             	  CLOSE per_cur;
225               END IF;
226               Fnd_Message.Set_Name('IGS' , 'IGS_GE_UNHANDLED_EXCEPTION');
227               IGS_GE_MSG_STACK.ADD;
228 	      App_Exception.Raise_Exception ;
229 
230 	END;
231 
232   	END LOOP;
233   	RETURN TRUE;
234   END genp_prc_pe_rowids;
235 END IGS_GE_PRC_TRANSFER;