DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_RE_SPRVSR_PKG

Source


1 package body IGS_RE_SPRVSR_PKG as
2 /* $Header: IGSRI13B.pls 120.1 2005/07/04 00:42:01 appldev ship $ */
3   -------------------------------------------------------------------------------------------
4   --Change History:
5   --Who         When            What
6   --smadathi    24-AUG-2001     Bug No. 1956374 .The call to igs_re_val_rsup.genp_val_sdtt_sess
7   --                            is changed to igs_as_val_suaap.genp_val_sdtt_sess
8   -------------------------------------------------------------------------------------------
9   l_rowid VARCHAR2(25);
10   old_references IGS_RE_SPRVSR%RowType;
11   new_references IGS_RE_SPRVSR%RowType;
12 
13   PROCEDURE Set_Column_Values (
14     p_action IN VARCHAR2,
15     x_rowid IN VARCHAR2 ,
16     x_ca_person_id IN NUMBER ,
17     x_ca_sequence_number IN NUMBER ,
18     x_person_id IN NUMBER ,
19     x_sequence_number IN NUMBER ,
20     x_start_dt IN DATE ,
21     x_end_dt IN DATE ,
22     x_research_supervisor_type IN VARCHAR2 ,
23     x_supervisor_profession IN VARCHAR2 ,
24     x_supervision_percentage IN NUMBER ,
25     x_funding_percentage IN NUMBER ,
26     x_org_unit_cd IN VARCHAR2 ,
27     x_ou_start_dt IN DATE ,
28     x_replaced_person_id IN NUMBER ,
29     x_replaced_sequence_number IN NUMBER ,
30     x_comments IN VARCHAR2 ,
31     x_creation_date IN DATE ,
32     x_created_by IN NUMBER ,
33     x_last_update_date IN DATE ,
34     x_last_updated_by IN NUMBER ,
35     x_last_update_login IN NUMBER
36   ) AS
37 
38     CURSOR cur_old_ref_values IS
39       SELECT   *
40       FROM     IGS_RE_SPRVSR
41       WHERE    rowid = x_rowid;
42 
43   BEGIN
44 
45     l_rowid := x_rowid;
46 
47     -- Code for setting the Old and New Reference Values.
48     -- Populate Old Values.
49     Open cur_old_ref_values;
50     Fetch cur_old_ref_values INTO old_references;
51     IF (cur_old_ref_values%NOTFOUND) AND (p_action NOT IN ('INSERT', 'VALIDATE_INSERT')) THEN
52       Close cur_old_ref_values;
53       Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
54       IGS_GE_MSG_STACK.ADD;
55       App_Exception.Raise_Exception;
56       Return;
57     END IF;
58     Close cur_old_ref_values;
59 
60     -- Populate New Values.
61     new_references.ca_person_id := x_ca_person_id;
62     new_references.ca_sequence_number := x_ca_sequence_number;
63     new_references.person_id := x_person_id;
64     new_references.sequence_number := x_sequence_number;
65     new_references.start_dt := x_start_dt;
66     new_references.end_dt := x_end_dt;
67     new_references.research_supervisor_type := x_research_supervisor_type;
68     new_references.supervisor_profession := x_supervisor_profession;
69     new_references.supervision_percentage := x_supervision_percentage;
70     new_references.funding_percentage := x_funding_percentage;
71     new_references.org_unit_cd := x_org_unit_cd;
72     new_references.ou_start_dt := x_ou_start_dt;
73     new_references.replaced_person_id := x_replaced_person_id;
74     new_references.replaced_sequence_number := x_replaced_sequence_number;
75     new_references.comments := x_comments;
76     IF (p_action = 'UPDATE') THEN
77       new_references.creation_date := old_references.creation_date;
78       new_references.created_by := old_references.created_by;
79     ELSE
80       new_references.creation_date := x_creation_date;
81       new_references.created_by := x_created_by;
82     END IF;
83     new_references.last_update_date := x_last_update_date;
84     new_references.last_updated_by := x_last_updated_by;
85     new_references.last_update_login := x_last_update_login;
86 
87   END Set_Column_Values;
88 
89   PROCEDURE BeforeRowInsertUpdateDelete1(
90     p_inserting IN BOOLEAN ,
91     p_updating IN BOOLEAN ,
92     p_deleting IN BOOLEAN
93     ) AS
94 	v_message_name		VARCHAR2(30);
95 	p_legacy VARCHAR2(1);
96   BEGIN
97        	p_legacy := 'N';
98 
99 	-- Turn off trigger validation when performing insert of IGS_RE_CANDIDATURE details
100 	-- as a result of IGS_PS_COURSE transfer
101 	IF igs_as_val_suaap.genp_val_sdtt_sess('ENRP_INS_CA_TRNSFR') THEN
102 		IF p_inserting OR
103 			(p_updating AND
104 			(new_references.start_dt <> old_references.start_dt) OR
105 			(NVL(new_references.end_dt,igs_ge_date.igsdate('9999/01/01')) <>
106 			NVL(old_references.end_dt,igs_ge_date.igsdate('9999/01/01'))) OR
107 			(NVL(new_references.supervision_percentage,-1) <>
108 			NVL(old_references.supervision_percentage,-1)) OR
109 			(new_references.research_supervisor_type <>
110 			old_references.research_supervisor_type) OR
111 			(NVL(new_references.funding_percentage,-1) <>
112 			NVL(old_references.funding_percentage,-1)) OR
113 			(NVL(new_references.org_unit_cd,'NULL') <>
114 			NVL(old_references.org_unit_cd,'NULL')) OR
115 			(NVL(new_references.replaced_person_id,-1) <>
116 			NVL(old_references.replaced_person_id,-1))) THEN
117 			-- Validate changes are allowed to be made
118 /*
119 ||  Bug ID 1956374 - Removal of Duplicate Program Units from OSS.
120 ||  Changed the reference of "IGS_RE_VAL_RSUP.RESP_VAL_CA_CHILDUPD" to program unit "IGS_RE_VAL_CAH.RESP_VAL_CA_CHILDUPD". -- kdande
121 */
122 			IF IGS_RE_VAL_CAH.resp_val_ca_childupd(
123 				new_references.ca_person_id,
124 				new_references.ca_sequence_number,
125 				v_message_name) = FALSE THEN
126 					Fnd_Message.Set_Name ('IGS', v_message_name);
127 					IGS_GE_MSG_STACK.ADD;
128 					App_Exception.Raise_Exception;
129 			END IF;
130 		END IF;
131 		IF p_inserting THEN
132 			-- Validate IGS_PE_PERSON
133 			IF IGS_RE_VAL_RSUP.resp_val_rsup_person(
134 				new_references.ca_person_id,
135 				new_references.person_id,
136 				p_legacy,
137 				v_message_name) = FALSE THEN
138 					Fnd_Message.Set_Name ('IGS', v_message_name);
139 					IGS_GE_MSG_STACK.ADD;
140 					App_Exception.Raise_Exception;
141 			END IF;
142 		END IF;
143 		IF p_inserting OR
144 			p_updating THEN
145 			-- Validate that research supervisor type
146 			IF p_inserting OR
147 				(p_updating AND
148 				new_references.research_supervisor_type <> old_references.research_supervisor_type) THEN
149 				IF IGS_RE_VAL_RSUP.resp_val_rst_closed (
150 					new_references.research_supervisor_type,
151 					v_message_name) = FALSE THEN
152 					Fnd_Message.Set_Name ('IGS', v_message_name);
153 					IGS_GE_MSG_STACK.ADD;
154 					App_Exception.Raise_Exception;
155 				END IF;
156 			END IF;
157 			-- Validate funding percentage
158 			IF p_inserting OR
159 				(p_updating AND
160 				((NVL(new_references.funding_percentage,-1) <> NVL(old_references.funding_percentage,-1)) OR
161 				new_references.org_unit_cd IS NULL)) THEN
162 /*
163 				IF IGS_RE_VAL_RSUP.resp_val_rsup_fund(
164 					new_references.person_id,
165 					new_references.org_unit_cd,
166 					new_references.ou_start_dt,
167 					new_references.funding_percentage,
168 					NULL, -- staff member indicator
169 					v_message_name) = FALSE THEN
170 						Fnd_Message.Set_Name ('IGS', v_message_name);
171 						IGS_GE_MSG_STACK.ADD;
172 						App_Exception.Raise_Exception;
173 
174 				END IF;
175 */
176 			-- This code has been commented because the validation has
177 			-- been taken care at the library at the event ON_COMMIT.
178 			NULL;
179 			END IF;
180 
181 			-- Validate Organisational IGS_PS_UNIT
182 			IF new_references.org_unit_cd IS NOT NULL THEN
183 				IF p_inserting OR
184 					(p_updating AND
185 					NVL(new_references.funding_percentage,-1) = NVL(old_references.funding_percentage,-1) AND
186 					((NVL(new_references.org_unit_cd,'NULL') <> NVL(old_references.org_unit_cd,'NULL')) OR
187 					(NVL(new_references.ou_start_dt,igs_ge_date.igsdate('9999/01/01')) <>
188 					NVL(old_references.ou_start_dt,igs_ge_date.igsdate('9999/01/01'))))) THEN
189 
190 					IF IGS_RE_VAL_RSUP.resp_val_rsup_ou(
191 						new_references.person_id,
192 						new_references.org_unit_cd,
193 						new_references.ou_start_dt,
194 						NULL, -- staff member indicator
195 						p_legacy,
196 						v_message_name) = FALSE THEN
197 							Fnd_Message.Set_Name ('IGS', v_message_name);
198 							IGS_GE_MSG_STACK.ADD;
199 							App_Exception.Raise_Exception;
200 					END IF;
201 				END IF;
202 			END IF;
203 		END IF;
204 	END IF;
205 	IF p_deleting THEN
206 		-- Validate deletes are allowed
207 /*
208 ||  Bug ID 1956374 - Removal of Duplicate Program Units from OSS.
209 ||  Changed the reference of "IGS_RE_VAL_RSUP.RESP_VAL_CA_CHILDUPD" to program unit "IGS_RE_VAL_CAH.RESP_VAL_CA_CHILDUPD". -- kdande
210 */
211 		IF IGS_RE_VAL_CAH.resp_val_ca_childupd(
212 			old_references.ca_person_id,
213 			old_references.ca_sequence_number,
214 			v_message_name) = FALSE THEN
215 				Fnd_Message.Set_Name ('IGS', v_message_name);
216 				IGS_GE_MSG_STACK.ADD;
217 				App_Exception.Raise_Exception;
218 		END IF;
219 	END IF;
220 
221 
222   END BeforeRowInsertUpdateDelete1;
223 
224   PROCEDURE AfterRowInsertUpdate2(
225     p_inserting IN BOOLEAN ,
226     p_updating IN BOOLEAN ,
227     p_deleting IN BOOLEAN
228     ) AS
229 	v_message_name				VARCHAR2(30);
230 	v_supervision_start_dt			DATE;
231         p_legacy VARCHAR2(1);
232   BEGIN
233         p_legacy  := 'N';
234 
235 	-- Turn off trigger validation when performing insert of IGS_RE_CANDIDATURE details
236 	-- as a result of IGS_PS_COURSE transfer
237 	IF igs_as_val_suaap.genp_val_sdtt_sess('ENRP_INS_CA_TRNSFR') THEN
238 		IF p_inserting OR
239 			p_updating THEN
240 			-- Set rowid
241 
242 
243 			--Validate research supervisor end date
244   			IF (NVL( NEW_REFERENCES.end_dt,igs_ge_date.igsdate('9999/01/01')) <>
245   			NVL(OLD_REFERENCES.end_dt,igs_ge_date.igsdate('9999/01/01')))
246   			THEN
247   				IF IGS_RE_VAL_RSUP.resp_val_rsup_end_dt(
248 	  				NEW_REFERENCES.ca_person_id,
249   					NEW_REFERENCES.ca_sequence_number,
250   					NEW_REFERENCES.person_id,
251   					NEW_REFERENCES.sequence_number,
252   					NEW_REFERENCES.start_dt,
253 	  				NEW_REFERENCES.end_dt,
254 					p_legacy,
255   					v_message_name) = FALSE THEN
256 						Fnd_Message.Set_Name ('IGS', v_message_name);
257 						IGS_GE_MSG_STACK.ADD;
258 						App_Exception.Raise_Exception;
259   				END IF;
260   			END IF;
261 
262   			-- Validate research supervisor overlapping periods
263   			IF p_inserting OR
264   				(p_updating AND
265   				(NEW_REFERENCES.start_dt  <> OLD_REFERENCES.start_dt) OR
266   				(NVL(NEW_REFERENCES.end_dt,igs_ge_date.igsdate('9999/01/01')) <>
267   		NVL(OLD_REFERENCES.end_dt,igs_ge_date.igsdate('9999/01/01'))))
268   			THEN
269   				IF IGS_RE_VAL_RSUP.resp_val_rsup_ovrlp(
270   				NEW_REFERENCES.ca_person_id,
271   					NEW_REFERENCES.ca_sequence_number,
272   					NEW_REFERENCES.person_id,
273   					NEW_REFERENCES.sequence_number,
274   					NEW_REFERENCES.start_dt,
275   					NEW_REFERENCES.end_dt,
276 					p_legacy,
277   					v_message_name) = FALSE THEN
278 						Fnd_Message.Set_Name ('IGS', v_message_name);
279 						IGS_GE_MSG_STACK.ADD;
280 						App_Exception.Raise_Exception;
281   				END IF;
282   			END IF;
283 
284   			-- Validate replaced supervisor
285   			IF NEW_REFERENCES.replaced_person_id IS NOT NULL THEN
286   				IF p_inserting OR
287   					(p_updating AND
288   					(NEW_REFERENCES.replaced_person_id <>
289   					NVL(OLD_REFERENCES.replaced_person_id,0)) OR
290   					(NEW_REFERENCES.replaced_sequence_number <>
291   					NVL(OLD_REFERENCES.replaced_sequence_number,0)) OR
292   					(NEW_REFERENCES.start_dt <> OLD_REFERENCES.start_dt)) THEN
293   					IF IGS_RE_VAL_RSUP.resp_val_rsup_repl(
294   						NEW_REFERENCES.ca_person_id,
295   						NEW_REFERENCES.ca_sequence_number,
296   						NEW_REFERENCES.person_id,
297   						NEW_REFERENCES.start_dt,
298   						NEW_REFERENCES.replaced_person_id,
299   						NEW_REFERENCES.replaced_sequence_number,
300 						p_legacy,
301   						v_message_name) = FALSE THEN
302 							Fnd_Message.Set_Name ('IGS', v_message_name);
303 							IGS_GE_MSG_STACK.ADD;
304 							App_Exception.Raise_Exception;
305   					END IF;
306   				END IF;
307   			END IF;
308 
309   			-- Do not validate at database level  if being updated via form RESF3250
310   			IF igs_as_val_suaap.genp_val_sdtt_sess('RESP_VAL_RSUP_PERC') THEN
311   			     -- Validate supervision and funding percentage
312   			     IF p_inserting OR
313   				(p_updating AND
314   				(NEW_REFERENCES.start_dt <> OLD_REFERENCES.start_dt) OR
315   				(NVL(NEW_REFERENCES.end_dt,igs_ge_date.igsdate('9999/01/01')) <>
316   				NVL(OLD_REFERENCES.end_dt,
317   					igs_ge_date.igsdate('9999/01/01'))) OR
318   				(NVL(NEW_REFERENCES.supervision_percentage,-1) <>
319   				NVL(OLD_REFERENCES.supervision_percentage,-1)) OR
320   				(NVL(NEW_REFERENCES.funding_percentage,-1) <>
321   				NVL(OLD_REFERENCES.funding_percentage,-1))) THEN
322 /*
323   				IF IGS_RE_VAL_RSUP.resp_val_rsup_perc(
324   					NEW_REFERENCES.ca_person_id,
325   					NEW_REFERENCES.ca_sequence_number,
326   					NULL, -- sca_course_cd
327   					NULL, -- acai_admission_appl_number
328   					NULL, -- acai_nominated_course_cd
329   					NULL, -- acai_sequence_number,
330   					'Y', -- Validate supervision percentage
331   					'Y', -- Validate funding percentage
332   					'RSUP',
333   					V_supervision_start_dt,
334   					v_message_name) = FALSE THEN
335 						Fnd_Message.Set_Name ('IGS', v_message_name);
336 						IGS_GE_MSG_STACK.ADD;
337 						App_Exception.Raise_Exception;
338   				END IF;
339 */
340 				NULL;
341 		-- This code has been commented out NOCOPY because the validations have
342 		-- been taken care at the library.
343   			    END IF;
344   			END IF;
345 		END IF;
346 	END IF;
347 
348 
349  		IF p_deleting THEN
350   			-- Do not validate at database level  if being updated via form RESF3250
351   			IF igs_as_val_suaap.genp_val_sdtt_sess('RESP_VAL_RSUP_PERC') THEN
352   				-- Validate supervision and funding percentage
353 /*
354   				IF IGS_RE_VAL_RSUP.resp_val_rsup_perc(
355   					OLD_REFERENCES.ca_person_id,
356   					OLD_REFERENCES.ca_sequence_number,
357   					NULL, -- sca_course_cd
358   					NULL, -- acai_admission_appl_number
359   					NULL, -- acai_nominated_course_cd
360   					NULL, -- acai_sequence_number,
361   					'Y', -- Validate supervision percentage
362   					'Y', -- Validate funding percentage
363   					'RSUP',
364   					v_supervision_start_dt,
365   					v_message_name) = FALSE THEN
366 						Fnd_Message.Set_Name ('IGS', v_message_name);
367 						IGS_GE_MSG_STACK.ADD;
368 						App_Exception.Raise_Exception;
369   				END IF;*/
370 			-- This code has been commented out NOCOPY because this
371 			-- validation is done at the library .
372                                 NULL;
373   			END IF;
374   		END IF;
375 
376 -- Bug # 2829275 . UK Correspondence.The TBH needs to be modified to invoke the supervision  event is raised when supervisor attributes of a student changes.
377 
378 
379     IF (p_inserting
380          OR(p_updating AND ((new_references.start_dt  <> old_references.start_dt )OR
381                             ((new_references.end_dt  <> old_references.end_dt ) OR (old_references.end_dt IS NULL AND new_references.end_dt IS NOT NULL) OR (new_references.end_dt IS NULL AND old_references.end_dt IS NOT NULL)) OR
382                             (new_references.research_supervisor_type  <> old_references.research_supervisor_type)   OR
383                             ((new_references.supervision_percentage   <> old_references.supervision_percentage) OR (old_references.supervision_percentage IS NULL AND new_references.supervision_percentage IS NOT NULL)
384 			    OR (old_references.supervision_percentage IS NOT NULL AND new_references.supervision_percentage IS NULL)) OR
385                             ((new_references.org_unit_cd  <> old_references.org_unit_cd) OR (old_references.org_unit_cd IS NULL AND new_references.org_unit_cd IS NOT NULL)
386 			    OR (old_references.org_unit_cd IS NOT NULL AND new_references.org_unit_cd IS NULL) ) OR
387                             ((new_references.replaced_person_id  <> old_references.replaced_person_id )OR (old_references.replaced_person_id IS NULL AND new_references.replaced_person_id IS NOT NULL)
388 			    OR (old_references.replaced_person_id IS NOT NULL AND new_references.replaced_person_id IS NULL))))) THEN
389 
390                    igs_re_workflow.supervision_event (
391 					p_personid	=> new_references.ca_person_id,
392 					p_ca_seq_num	=> new_references.ca_sequence_number,
393 					p_supervisorid	=> new_references.person_id,
394 					p_startdt	=> new_references.start_dt,
395 					p_enddt	        => new_references.end_dt,
396 					p_spr_percent	=> new_references.supervision_percentage,
397 					p_spr_type	=> new_references.research_supervisor_type,
398 					p_fund_percent	=> new_references.funding_percentage,
399 					p_org_unit_cd	=> new_references.org_unit_cd,
400 					p_rep_person_id	=> new_references.replaced_person_id,
401 					p_rep_seq_num	=> new_references.replaced_sequence_number
402 					) ;
403 
404     END IF;
405 
406   END AfterRowInsertUpdate2;
407 
408   -- Trigger description :-
409   -- "OSS_TST".trg_rsup_as_iud
410   -- AFTER INSERT OR DELETE OR UPDATE
411   -- ON IGS_RE_SPRVSR
412 
413   PROCEDURE Check_Constraints (
414     Column_Name in VARCHAR2  ,
415     Column_Value in VARCHAR2
416   ) AS
417  BEGIN
418 
419  IF Column_Name is null then
420    NULL;
421  ELSIF upper(Column_name) = 'CA_SEQUENCE_NUMBER' THEN
422    new_references.CA_SEQUENCE_NUMBER := IGS_GE_NUMBER.to_num(COLUMN_VALUE) ;
423  ELSIF upper(Column_name) = 'SUPERVISION_PERCENTAGE' THEN
424    new_references.SUPERVISION_PERCENTAGE := IGS_GE_NUMBER.to_num(COLUMN_VALUE) ;
425  ELSIF upper(Column_name) = 'REPLACED_SEQUENCE_NUMBER' THEN
426    new_references.REPLACED_SEQUENCE_NUMBER := IGS_GE_NUMBER.to_num(COLUMN_VALUE) ;
427  ELSIF upper(Column_name) = 'FUNDING_PERCENTAGE' THEN
428    new_references.FUNDING_PERCENTAGE := IGS_GE_NUMBER.to_num(COLUMN_VALUE) ;
429  ELSIF upper(Column_name) = 'SEQUENCE_NUMBER' THEN
430    new_references.SEQUENCE_NUMBER := COLUMN_VALUE ;
431  ELSIF upper(Column_name) = 'ORG_UNIT_CD' THEN
432    new_references.ORG_UNIT_CD := COLUMN_VALUE ;
433  ELSIF upper(Column_name) = 'RESEARCH_SUPERVISOR_TYPE' THEN
434    new_references.RESEARCH_SUPERVISOR_TYPE := COLUMN_VALUE ;
435  ELSIF upper(Column_name) = 'SUPERVISOR_PROFESSION' THEN
436    new_references.SUPERVISOR_PROFESSION := COLUMN_VALUE ;
437  END IF;
438 
439   IF upper(column_name) = 'CA_SEQUENCE_NUMBER' OR COLUMN_NAME IS NULL THEN
440     IF new_references.CA_SEQUENCE_NUMBER < 1 OR new_references.CA_SEQUENCE_NUMBER > 999999 then
441 	  Fnd_Message.Set_Name('IGS','IGS_GE_INVALID_VALUE');
442 	  IGS_GE_MSG_STACK.ADD;
443 	  App_Exception.Raise_Exception ;
444 	END IF;
445   END IF;
446   IF upper(column_name) = 'SUPERVISION_PERCENTAGE' OR COLUMN_NAME IS NULL THEN
447     IF new_references.SUPERVISION_PERCENTAGE < 0 OR new_references.SUPERVISION_PERCENTAGE > 100 then
448 	  Fnd_Message.Set_Name('IGS','IGS_GE_INVALID_VALUE');
449 	  IGS_GE_MSG_STACK.ADD;
450 	  App_Exception.Raise_Exception ;
451 	END IF;
452   END IF;
453   IF upper(column_name) = 'REPLACED_SEQUENCE_NUMBER' OR COLUMN_NAME IS NULL THEN
454     IF new_references.REPLACED_SEQUENCE_NUMBER < 1 OR new_references.REPLACED_SEQUENCE_NUMBER > 999999 then
455 	  Fnd_Message.Set_Name('IGS','IGS_GE_INVALID_VALUE');
456 	  IGS_GE_MSG_STACK.ADD;
457 	  App_Exception.Raise_Exception ;
458 	END IF;
459   END IF;
460   IF upper(column_name) = 'FUNDING_PERCENTAGE' OR COLUMN_NAME IS NULL THEN
461     IF new_references.FUNDING_PERCENTAGE < 0 OR new_references.FUNDING_PERCENTAGE > 100 then
462 	  Fnd_Message.Set_Name('IGS','IGS_GE_INVALID_VALUE');
463 	  IGS_GE_MSG_STACK.ADD;
464 	  App_Exception.Raise_Exception ;
465 	END IF;
466   END IF;
467   IF upper(column_name) = 'SEQUENCE_NUMBER' OR COLUMN_NAME IS NULL THEN
468     IF new_references.SEQUENCE_NUMBER < 1 OR new_references.SEQUENCE_NUMBER > 999999 then
469 	  Fnd_Message.Set_Name('IGS','IGS_GE_INVALID_VALUE');
470 	  IGS_GE_MSG_STACK.ADD;
471 	  App_Exception.Raise_Exception ;
472 	END IF;
473   END IF;
474 
475   IF upper(column_name) = 'RESEARCH_SUPERVISOR_TYPE' OR COLUMN_NAME IS NULL THEN
476     IF new_references.RESEARCH_SUPERVISOR_TYPE <> upper(NEW_REFERENCES.RESEARCH_SUPERVISOR_TYPE) then
477 	  Fnd_Message.Set_Name('IGS','IGS_GE_INVALID_VALUE');
478 	  IGS_GE_MSG_STACK.ADD;
479 	  App_Exception.Raise_Exception ;
480 	END IF;
481   END IF;
482   IF upper(column_name) = 'SUPERVISOR_PROFESSION' OR COLUMN_NAME IS NULL THEN
483     IF new_references.SUPERVISOR_PROFESSION <> upper(NEW_REFERENCES.SUPERVISOR_PROFESSION) then
484 	  Fnd_Message.Set_Name('IGS','IGS_GE_INVALID_VALUE');
485 	  IGS_GE_MSG_STACK.ADD;
486 	  App_Exception.Raise_Exception ;
487 	END IF;
488   END IF;
489  END Check_Constraints ;
490 
491   PROCEDURE Check_Uniqueness AS
492   BEGIN
493 	IF Get_UK1_For_Validation (
494 		new_references.ca_person_id,
495 		new_references.ca_sequence_number,
496 		new_references.person_id,
497 		new_references.start_dt
498 	) THEN
499 	        Fnd_Message.Set_Name ('IGS', 'IGS_GE_RECORD_ALREADY_EXISTS');
500 	        IGS_GE_MSG_STACK.ADD;
501         	App_Exception.Raise_Exception;
502 	END IF;
503 
504   END Check_Uniqueness;
505 
506   PROCEDURE Check_Parent_Existance AS
507   BEGIN
508 
509     IF (((old_references.ca_person_id = new_references.ca_person_id) AND
510          (old_references.ca_sequence_number = new_references.ca_sequence_number)) OR
511         ((new_references.ca_person_id IS NULL) OR
512          (new_references.ca_sequence_number IS NULL))) THEN
513       NULL;
514     ELSE
515       IF NOT IGS_RE_CANDIDATURE_PKG.Get_PK_For_Validation (
516         new_references.ca_person_id,
517         new_references.ca_sequence_number
518         ) THEN
519      	     Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
520      	     IGS_GE_MSG_STACK.ADD;
521              App_Exception.Raise_Exception;
522        END IF;
523     END IF;
524 
525     IF (((old_references.org_unit_cd = new_references.org_unit_cd) AND
526          (old_references.ou_start_dt = new_references.ou_start_dt)) OR
527         ((new_references.org_unit_cd IS NULL) OR
528          (new_references.ou_start_dt IS NULL))) THEN
529       NULL;
530     ELSE
531       IF NOT IGS_OR_UNIT_PKG.Get_PK_For_Validation (
532         new_references.org_unit_cd,
533         new_references.ou_start_dt
534         ) THEN
535      	     Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
536      	     IGS_GE_MSG_STACK.ADD;
537              App_Exception.Raise_Exception;
538        END IF;
539     END IF;
540 
541     IF (((old_references.person_id = new_references.person_id)) OR
542         ((new_references.person_id IS NULL))) THEN
543       NULL;
544     ELSE
545       IF NOT IGS_PE_PERSON_PKG.Get_PK_For_Validation (
546         new_references.person_id
547         ) THEN
548      	     Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
549      	     IGS_GE_MSG_STACK.ADD;
550              App_Exception.Raise_Exception;
551        END IF;
552     END IF;
553 
554     IF (((old_references.research_supervisor_type = new_references.research_supervisor_type)) OR
555         ((new_references.research_supervisor_type IS NULL))) THEN
556       NULL;
557     ELSE
558       IF NOT IGS_RE_SPRVSR_TYPE_PKG.Get_PK_For_Validation (
559         new_references.research_supervisor_type
560         ) THEN
561      	     Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
562      	     IGS_GE_MSG_STACK.ADD;
563              App_Exception.Raise_Exception;
564        END IF;
565     END IF;
566 
567     IF (((old_references.ca_person_id = new_references.ca_person_id) AND
568          (old_references.ca_sequence_number = new_references.ca_sequence_number) AND
569          (old_references.replaced_person_id = new_references.replaced_person_id) AND
570          (old_references.replaced_sequence_number = new_references.replaced_sequence_number)) OR
571         ((new_references.ca_person_id IS NULL) OR
572          (new_references.ca_sequence_number IS NULL) OR
573          (new_references.replaced_person_id IS NULL) OR
574          (new_references.replaced_sequence_number IS NULL))) THEN
575       NULL;
576     ELSE
577       IF NOT IGS_RE_SPRVSR_PKG.Get_PK_For_Validation (
578         new_references.ca_person_id,
579         new_references.ca_sequence_number,
580         new_references.replaced_person_id,
581         new_references.replaced_sequence_number
582         ) THEN
583      	     Fnd_Message.Set_Name ('FND', 'FORM_RECORD_DELETED');
584      	     IGS_GE_MSG_STACK.ADD;
585              App_Exception.Raise_Exception;
586        END IF;
587     END IF;
588 
589   END Check_Parent_Existance;
590 
591   PROCEDURE Check_Child_Existance AS
592   BEGIN
593 
594     IGS_RE_SPRVSR_PKG.GET_FK_IGS_RE_SPRVSR (
595       old_references.ca_person_id,
596       old_references.ca_sequence_number,
597       old_references.person_id,
598       old_references.sequence_number
599       );
600 
601   END Check_Child_Existance;
602 
603   FUNCTION Get_PK_For_Validation (
604     x_ca_person_id IN NUMBER,
605     x_ca_sequence_number IN NUMBER,
606     x_person_id IN NUMBER,
607     x_sequence_number IN NUMBER
608     )
609    RETURN BOOLEAN
610    AS
611 
612     CURSOR cur_rowid IS
613       SELECT   rowid
614       FROM     IGS_RE_SPRVSR
615       WHERE    ca_person_id = x_ca_person_id
616       AND      ca_sequence_number = x_ca_sequence_number
617       AND      person_id = x_person_id
618       AND      sequence_number = x_sequence_number
619       FOR UPDATE NOWAIT;
620 
621     lv_rowid cur_rowid%RowType;
622 
623   BEGIN
624 
625     Open cur_rowid;
626     Fetch cur_rowid INTO lv_rowid;
627     IF (cur_rowid%FOUND) THEN
628 	Close cur_rowid;
629  	RETURN(TRUE);
630     ELSE
631         Close cur_rowid;
632         RETURN(FALSE);
633     END IF;
634 
635   END Get_PK_For_Validation;
636 
637   FUNCTION Get_UK1_For_Validation (
638     x_ca_person_id IN NUMBER,
639     x_ca_sequence_number IN NUMBER,
640     x_person_id IN NUMBER,
641     x_start_dt IN DATE
642     )
643    RETURN BOOLEAN
644    AS
645     CURSOR cur_rowid IS
646       SELECT   rowid
647       FROM     IGS_RE_SPRVSR
648       WHERE    ca_person_id = x_ca_person_id
649       AND      ca_sequence_number = x_ca_sequence_number
650       AND      person_id = x_person_id
651       AND      start_dt = x_start_dt
652       AND ((l_rowid is null) or (rowid <> l_rowid))
653       FOR UPDATE NOWAIT;
654 
655     lv_rowid cur_rowid%RowType;
656 
657   BEGIN
658     Open cur_rowid;
659     Fetch cur_rowid INTO lv_rowid;
660     IF (cur_rowid%FOUND) THEN
661 	Close cur_rowid;
662  	RETURN(TRUE);
663     ELSE
664         Close cur_rowid;
665         RETURN(FALSE);
666     END IF;
667 
668   END Get_UK1_For_Validation;
669 
670   PROCEDURE GET_FK_IGS_RE_CANDIDATURE (
671     x_person_id IN NUMBER,
672     x_sequence_number IN NUMBER
673     ) AS
674 
675     CURSOR cur_rowid IS
676       SELECT   rowid
677       FROM     IGS_RE_SPRVSR
678       WHERE    ca_person_id = x_person_id
679       AND      ca_sequence_number = x_sequence_number ;
680 
681     lv_rowid cur_rowid%RowType;
682 
683   BEGIN
684 
685     Open cur_rowid;
686     Fetch cur_rowid INTO lv_rowid;
687     IF (cur_rowid%FOUND) THEN
688       Close cur_rowid;
689       Fnd_Message.Set_Name ('IGS', 'IGS_RE_RSUP_CA_FK');
690       IGS_GE_MSG_STACK.ADD;
691       App_Exception.Raise_Exception;
692       Return;
693     END IF;
694     Close cur_rowid;
695 
696   END GET_FK_IGS_RE_CANDIDATURE;
697 
698   PROCEDURE GET_FK_IGS_OR_UNIT (
699     x_org_unit_cd IN VARCHAR2,
700     x_start_dt IN DATE
701     ) AS
702 
703     CURSOR cur_rowid IS
704       SELECT   rowid
705       FROM     IGS_RE_SPRVSR
706       WHERE    org_unit_cd = x_org_unit_cd
707       AND      ou_start_dt = x_start_dt ;
708 
709     lv_rowid cur_rowid%RowType;
710 
711   BEGIN
712 
713     Open cur_rowid;
714     Fetch cur_rowid INTO lv_rowid;
715     IF (cur_rowid%FOUND) THEN
716       Close cur_rowid;
717       Fnd_Message.Set_Name ('IGS', 'IGS_RE_RSUP_OU_FK');
718       IGS_GE_MSG_STACK.ADD;
719       App_Exception.Raise_Exception;
720       Return;
721     END IF;
722     Close cur_rowid;
723 
724   END GET_FK_IGS_OR_UNIT;
725 
726   PROCEDURE GET_FK_IGS_PE_PERSON (
727     x_person_id IN NUMBER
728     ) AS
729 
730     CURSOR cur_rowid IS
731       SELECT   rowid
732       FROM     IGS_RE_SPRVSR
733       WHERE    person_id = x_person_id ;
734 
735     lv_rowid cur_rowid%RowType;
736 
737   BEGIN
738 
739     Open cur_rowid;
740     Fetch cur_rowid INTO lv_rowid;
741     IF (cur_rowid%FOUND) THEN
742       Close cur_rowid;
743       Fnd_Message.Set_Name ('IGS', 'IGS_RE_RSUP_PE_FK');
744       IGS_GE_MSG_STACK.ADD;
745       App_Exception.Raise_Exception;
746       Return;
747     END IF;
748     Close cur_rowid;
749 
750   END GET_FK_IGS_PE_PERSON;
751 
752   PROCEDURE GET_FK_IGS_RE_SPRVSR_TYPE (
753     x_research_supervisor_type IN VARCHAR2
754     ) AS
755 
756     CURSOR cur_rowid IS
757       SELECT   rowid
758       FROM     IGS_RE_SPRVSR
759       WHERE    research_supervisor_type = x_research_supervisor_type ;
760 
761     lv_rowid cur_rowid%RowType;
762 
763   BEGIN
764 
765     Open cur_rowid;
766     Fetch cur_rowid INTO lv_rowid;
767     IF (cur_rowid%FOUND) THEN
768       Close cur_rowid;
769       Fnd_Message.Set_Name ('IGS', 'IGS_RE_RSUP_RST_FK');
770       IGS_GE_MSG_STACK.ADD;
771       App_Exception.Raise_Exception;
772       Return;
773     END IF;
774     Close cur_rowid;
775 
776   END GET_FK_IGS_RE_SPRVSR_TYPE;
777 
778   PROCEDURE GET_FK_IGS_RE_SPRVSR (
779     x_ca_person_id IN NUMBER,
780     x_ca_sequence_number IN NUMBER,
781     x_person_id IN NUMBER,
782     x_sequence_number IN NUMBER
783     ) AS
784 
785     CURSOR cur_rowid IS
786       SELECT   rowid
787       FROM     IGS_RE_SPRVSR
788       WHERE    ca_person_id = x_ca_person_id
789       AND      ca_sequence_number = x_ca_sequence_number
790       AND      replaced_person_id = x_person_id
791       AND      replaced_sequence_number = x_sequence_number ;
792 
793     lv_rowid cur_rowid%RowType;
794 
795   BEGIN
796 
797     Open cur_rowid;
798     Fetch cur_rowid INTO lv_rowid;
799     IF (cur_rowid%FOUND) THEN
800       Close cur_rowid;
801       Fnd_Message.Set_Name ('IGS', 'IGS_RE_RSUP_RSUP_FK');
802       IGS_GE_MSG_STACK.ADD;
803       App_Exception.Raise_Exception;
804       Return;
805     END IF;
806     Close cur_rowid;
807 
808   END GET_FK_IGS_RE_SPRVSR;
809 
810   PROCEDURE Before_DML (
811     p_action IN VARCHAR2,
812     x_rowid IN VARCHAR2 ,
813     x_ca_person_id IN NUMBER ,
814     x_ca_sequence_number IN NUMBER ,
815     x_person_id IN NUMBER ,
816     x_sequence_number IN NUMBER ,
817     x_start_dt IN DATE ,
818     x_end_dt IN DATE ,
819     x_research_supervisor_type IN VARCHAR2 ,
820     x_supervisor_profession IN VARCHAR2 ,
821     x_supervision_percentage IN NUMBER ,
822     x_funding_percentage IN NUMBER ,
823     x_org_unit_cd IN VARCHAR2 ,
824     x_ou_start_dt IN DATE ,
825     x_replaced_person_id IN NUMBER ,
826     x_replaced_sequence_number IN NUMBER ,
827     x_comments IN VARCHAR2 ,
828     x_creation_date IN DATE  ,
829     x_created_by IN NUMBER ,
830     x_last_update_date IN DATE ,
831     x_last_updated_by IN NUMBER ,
832     x_last_update_login IN NUMBER
833   ) AS
834   BEGIN
835 
836     Set_Column_Values (
837       p_action,
838       x_rowid,
839       x_ca_person_id,
840       x_ca_sequence_number,
841       x_person_id,
842       x_sequence_number,
843       x_start_dt,
844       x_end_dt,
845       x_research_supervisor_type,
846       x_supervisor_profession,
847       x_supervision_percentage,
848       x_funding_percentage,
849       x_org_unit_cd,
850       x_ou_start_dt,
851       x_replaced_person_id,
852       x_replaced_sequence_number,
853       x_comments,
854       x_creation_date,
855       x_created_by,
856       x_last_update_date,
857       x_last_updated_by,
858       x_last_update_login
859     );
860 
861     IF (p_action = 'INSERT') THEN
862       -- Call all the procedures related to Before Insert.
863       BeforeRowInsertUpdateDelete1 ( p_inserting => TRUE,
864                                      p_updating => FALSE,
865                                      p_deleting => FALSE
866                                    );
867       IF Get_PK_For_Validation (
868 	    new_references.ca_person_id,
869     	    new_references.ca_sequence_number,
870     	    new_references.person_id,
871     	    new_references.sequence_number
872       ) THEN
873 	 Fnd_Message.Set_Name ('IGS', 'IGS_GE_RECORD_ALREADY_EXISTS');
874 	 IGS_GE_MSG_STACK.ADD;
875          App_Exception.Raise_Exception;
876      END IF;
877       Check_Uniqueness;
878       Check_Constraints;
879       Check_Parent_Existance;
880     ELSIF (p_action = 'UPDATE') THEN
881       -- Call all the procedures related to Before Update.
882       BeforeRowInsertUpdateDelete1 (  p_inserting => FALSE,
883                                       p_updating => TRUE,
884                                       p_deleting => FALSE
885                                    );
886       Check_Uniqueness;
887       Check_Constraints;
888       Check_Parent_Existance;
889     ELSIF (p_action = 'DELETE') THEN
890       -- Call all the procedures related to Before Delete.
891       BeforeRowInsertUpdateDelete1 (  p_inserting => FALSE,
892 				      p_updating => FALSE,
893 				      p_deleting => TRUE
894 				    );
895       Check_Child_Existance;
896     ELSIF (p_action = 'VALIDATE_INSERT') THEN
897       IF Get_PK_For_Validation (
898 	    new_references.ca_person_id,
899     	    new_references.ca_sequence_number,
900     	    new_references.person_id,
901     	    new_references.sequence_number
902       ) THEN
903 	 Fnd_Message.Set_Name ('IGS', 'IGS_GE_RECORD_ALREADY_EXISTS');
904 	 IGS_GE_MSG_STACK.ADD;
905          App_Exception.Raise_Exception;
906      END IF;
907       Check_Uniqueness;
908       Check_Constraints;
909     ELSIF (p_action = 'VALIDATE_UPDATE') THEN
910       Check_Uniqueness;
911       Check_Constraints;
912     ELSIF (p_action = 'VALIDATE_DELETE') THEN
913       Check_Child_Existance;
914     END IF;
915   END Before_DML;
916 
917   PROCEDURE After_DML (
918     p_action IN VARCHAR2,
919     x_rowid IN VARCHAR2
920   ) AS
921   BEGIN
922 
923     l_rowid := x_rowid;
924 
925     IF (p_action = 'INSERT') THEN
926       -- Call all the procedures related to After Insert.
927       AfterRowInsertUpdate2 ( p_inserting => TRUE,
928 			      p_updating => FALSE,
929 			      p_deleting => FALSE
930 			    );
931     ELSIF (p_action = 'UPDATE') THEN
932       -- Call all the procedures related to After Update.
933       AfterRowInsertUpdate2 ( p_inserting => FALSE,
934 			      p_updating => TRUE,
935 			      p_deleting => FALSE
936 			    );
937     END IF;
938   END After_DML;
939 
940 procedure INSERT_ROW (
941   X_ROWID in out NOCOPY VARCHAR2,
942   X_CA_PERSON_ID in NUMBER,
943   X_CA_SEQUENCE_NUMBER in NUMBER,
944   X_PERSON_ID in NUMBER,
945   X_SEQUENCE_NUMBER in NUMBER,
946   X_START_DT in DATE,
947   X_END_DT in DATE,
948   X_RESEARCH_SUPERVISOR_TYPE in VARCHAR2,
949   X_SUPERVISOR_PROFESSION in VARCHAR2,
950   X_SUPERVISION_PERCENTAGE in NUMBER,
951   X_FUNDING_PERCENTAGE in NUMBER,
952   X_ORG_UNIT_CD in VARCHAR2,
953   X_OU_START_DT in DATE,
954   X_REPLACED_PERSON_ID in NUMBER,
955   X_REPLACED_SEQUENCE_NUMBER in NUMBER,
956   X_COMMENTS in VARCHAR2,
957   X_MODE in VARCHAR2
958   ) as
959     cursor C is select ROWID from IGS_RE_SPRVSR
960       where CA_PERSON_ID = X_CA_PERSON_ID
961       and CA_SEQUENCE_NUMBER = X_CA_SEQUENCE_NUMBER
962       and PERSON_ID = X_PERSON_ID
963       and SEQUENCE_NUMBER = X_SEQUENCE_NUMBER;
964     X_LAST_UPDATE_DATE DATE;
965     X_LAST_UPDATED_BY NUMBER;
966     X_LAST_UPDATE_LOGIN NUMBER;
967 begin
968   X_LAST_UPDATE_DATE := SYSDATE;
969   if(X_MODE = 'I') then
970     X_LAST_UPDATED_BY := 1;
971     X_LAST_UPDATE_LOGIN := 0;
972   elsif (X_MODE IN ('R', 'S')) then
973     X_LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
974     if X_LAST_UPDATED_BY is NULL then
975       X_LAST_UPDATED_BY := -1;
976     end if;
977     X_LAST_UPDATE_LOGIN :=FND_GLOBAL.LOGIN_ID;
978     if X_LAST_UPDATE_LOGIN is NULL then
979       X_LAST_UPDATE_LOGIN := -1;
980     end if;
981   else
982     FND_MESSAGE.SET_NAME( 'FND', 'SYSTEM-INVALID ARGS');
983     IGS_GE_MSG_STACK.ADD;
984     app_exception.raise_exception;
985   end if;
986 
987   Before_DML (
988     p_action => 'INSERT',
989     x_rowid => X_ROWID,
990     x_ca_person_id => X_CA_PERSON_ID,
991     x_ca_sequence_number => X_CA_SEQUENCE_NUMBER,
992     x_person_id => X_PERSON_ID,
993     x_sequence_number => X_SEQUENCE_NUMBER,
994     x_start_dt => X_START_DT,
995     x_end_dt => X_END_DT,
996     x_research_supervisor_type => X_RESEARCH_SUPERVISOR_TYPE,
997     x_supervisor_profession => X_SUPERVISOR_PROFESSION,
998     x_supervision_percentage => X_SUPERVISION_PERCENTAGE,
999     x_funding_percentage => X_FUNDING_PERCENTAGE,
1000     x_org_unit_cd => X_ORG_UNIT_CD,
1001     x_ou_start_dt => X_OU_START_DT,
1002     x_replaced_person_id => X_REPLACED_PERSON_ID,
1003     x_replaced_sequence_number => X_REPLACED_SEQUENCE_NUMBER,
1004     x_comments => X_COMMENTS,
1005     x_created_by => X_LAST_UPDATED_BY ,
1006     x_creation_date => X_LAST_UPDATE_DATE,
1007     x_last_updated_by => X_LAST_UPDATED_BY,
1008     x_last_update_date => X_LAST_UPDATE_DATE,
1009     x_last_update_login => X_LAST_UPDATE_LOGIN
1010  );
1011 
1012   IF (x_mode = 'S') THEN
1013     igs_sc_gen_001.set_ctx('R');
1014   END IF;
1015   insert into IGS_RE_SPRVSR (
1016     CA_PERSON_ID,
1017     CA_SEQUENCE_NUMBER,
1018     PERSON_ID,
1019     SEQUENCE_NUMBER,
1020     START_DT,
1021     END_DT,
1022     RESEARCH_SUPERVISOR_TYPE,
1023     SUPERVISOR_PROFESSION,
1024     SUPERVISION_PERCENTAGE,
1025     FUNDING_PERCENTAGE,
1026     ORG_UNIT_CD,
1027     OU_START_DT,
1028     REPLACED_PERSON_ID,
1029     REPLACED_SEQUENCE_NUMBER,
1030     COMMENTS,
1031     CREATION_DATE,
1032     CREATED_BY,
1033     LAST_UPDATE_DATE,
1034     LAST_UPDATED_BY,
1035     LAST_UPDATE_LOGIN
1036   ) values (
1037     NEW_REFERENCES.CA_PERSON_ID,
1038     NEW_REFERENCES.CA_SEQUENCE_NUMBER,
1039     NEW_REFERENCES.PERSON_ID,
1040     NEW_REFERENCES.SEQUENCE_NUMBER,
1041     NEW_REFERENCES.START_DT,
1042     NEW_REFERENCES.END_DT,
1043     NEW_REFERENCES.RESEARCH_SUPERVISOR_TYPE,
1044     NEW_REFERENCES.SUPERVISOR_PROFESSION,
1045     NEW_REFERENCES.SUPERVISION_PERCENTAGE,
1046     NEW_REFERENCES.FUNDING_PERCENTAGE,
1047     NEW_REFERENCES.ORG_UNIT_CD,
1048     NEW_REFERENCES.OU_START_DT,
1049     NEW_REFERENCES.REPLACED_PERSON_ID,
1050     NEW_REFERENCES.REPLACED_SEQUENCE_NUMBER,
1051     NEW_REFERENCES.COMMENTS,
1052     X_LAST_UPDATE_DATE,
1053     X_LAST_UPDATED_BY,
1054     X_LAST_UPDATE_DATE,
1055     X_LAST_UPDATED_BY,
1056     X_LAST_UPDATE_LOGIN
1057   );
1058  IF (x_mode = 'S') THEN
1059     igs_sc_gen_001.unset_ctx('R');
1060   END IF;
1061 
1062 
1063   open c;
1064   fetch c into X_ROWID;
1065   if (c%notfound) then
1066     close c;
1067     raise no_data_found;
1068   end if;
1069   close c;
1070 
1071  After_DML (
1072     p_action => 'INSERT',
1073     x_rowid => X_ROWID
1074   );
1075 
1076 EXCEPTION
1077   WHEN OTHERS THEN
1078     IF (SQLCODE IN (-28115, -28113, -28111)) THEN
1079       fnd_message.set_name ('IGS', 'IGS_SC_POLICY_EXCEPTION');
1080       fnd_message.set_token ('ERR_CD', SQLCODE);
1081       igs_ge_msg_stack.add;
1082       igs_sc_gen_001.unset_ctx('R');
1083       app_exception.raise_exception;
1084     ELSE
1085       igs_sc_gen_001.unset_ctx('R');
1086       RAISE;
1087     END IF;
1088 
1089 end INSERT_ROW;
1090 
1091 procedure LOCK_ROW (
1092   X_ROWID in VARCHAR2,
1093   X_CA_PERSON_ID in NUMBER,
1094   X_CA_SEQUENCE_NUMBER in NUMBER,
1095   X_PERSON_ID in NUMBER,
1096   X_SEQUENCE_NUMBER in NUMBER,
1097   X_START_DT in DATE,
1098   X_END_DT in DATE,
1099   X_RESEARCH_SUPERVISOR_TYPE in VARCHAR2,
1100   X_SUPERVISOR_PROFESSION in VARCHAR2,
1101   X_SUPERVISION_PERCENTAGE in NUMBER,
1102   X_FUNDING_PERCENTAGE in NUMBER,
1103   X_ORG_UNIT_CD in VARCHAR2,
1104   X_OU_START_DT in DATE,
1105   X_REPLACED_PERSON_ID in NUMBER,
1106   X_REPLACED_SEQUENCE_NUMBER in NUMBER,
1107   X_COMMENTS in VARCHAR2
1108 ) as
1109   cursor c1 is select
1110       START_DT,
1111       END_DT,
1112       RESEARCH_SUPERVISOR_TYPE,
1113       SUPERVISOR_PROFESSION,
1114       SUPERVISION_PERCENTAGE,
1115       FUNDING_PERCENTAGE,
1116       ORG_UNIT_CD,
1117       OU_START_DT,
1118       REPLACED_PERSON_ID,
1119       REPLACED_SEQUENCE_NUMBER,
1120       COMMENTS
1121     from IGS_RE_SPRVSR
1122     where ROWID = X_ROWID
1123     for update nowait;
1124   tlinfo c1%rowtype;
1125 
1126 begin
1127   open c1;
1128   fetch c1 into tlinfo;
1129   if (c1%notfound) then
1130     fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
1131     app_exception.raise_exception;
1132     close c1;
1133     return;
1134   end if;
1135   close c1;
1136 
1137   if ( (tlinfo.START_DT = X_START_DT)
1138       AND ((tlinfo.END_DT = X_END_DT)
1139            OR ((tlinfo.END_DT is null)
1140                AND (X_END_DT is null)))
1141       AND (tlinfo.RESEARCH_SUPERVISOR_TYPE = X_RESEARCH_SUPERVISOR_TYPE)
1142       AND ((tlinfo.SUPERVISOR_PROFESSION = X_SUPERVISOR_PROFESSION)
1143            OR ((tlinfo.SUPERVISOR_PROFESSION is null)
1144                AND (X_SUPERVISOR_PROFESSION is null)))
1145       AND ((tlinfo.SUPERVISION_PERCENTAGE = X_SUPERVISION_PERCENTAGE)
1146            OR ((tlinfo.SUPERVISION_PERCENTAGE is null)
1147                AND (X_SUPERVISION_PERCENTAGE is null)))
1148       AND ((tlinfo.FUNDING_PERCENTAGE = X_FUNDING_PERCENTAGE)
1149            OR ((tlinfo.FUNDING_PERCENTAGE is null)
1150                AND (X_FUNDING_PERCENTAGE is null)))
1151       AND ((tlinfo.ORG_UNIT_CD = X_ORG_UNIT_CD)
1152            OR ((tlinfo.ORG_UNIT_CD is null)
1153                AND (X_ORG_UNIT_CD is null)))
1154       AND ((tlinfo.OU_START_DT = X_OU_START_DT)
1155            OR ((tlinfo.OU_START_DT is null)
1156                AND (X_OU_START_DT is null)))
1157       AND ((tlinfo.REPLACED_PERSON_ID = X_REPLACED_PERSON_ID)
1158            OR ((tlinfo.REPLACED_PERSON_ID is null)
1159                AND (X_REPLACED_PERSON_ID is null)))
1160       AND ((tlinfo.REPLACED_SEQUENCE_NUMBER = X_REPLACED_SEQUENCE_NUMBER)
1161            OR ((tlinfo.REPLACED_SEQUENCE_NUMBER is null)
1162                AND (X_REPLACED_SEQUENCE_NUMBER is null)))
1163       AND ((tlinfo.COMMENTS = X_COMMENTS)
1164            OR ((tlinfo.COMMENTS is null)
1165                AND (X_COMMENTS is null)))
1166   ) then
1167     null;
1168   else
1169     fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
1170     app_exception.raise_exception;
1171   end if;
1172   return;
1173 end LOCK_ROW;
1174 
1175 procedure UPDATE_ROW (
1176   X_ROWID in VARCHAR2,
1177   X_CA_PERSON_ID in NUMBER,
1178   X_CA_SEQUENCE_NUMBER in NUMBER,
1179   X_PERSON_ID in NUMBER,
1180   X_SEQUENCE_NUMBER in NUMBER,
1181   X_START_DT in DATE,
1182   X_END_DT in DATE,
1183   X_RESEARCH_SUPERVISOR_TYPE in VARCHAR2,
1184   X_SUPERVISOR_PROFESSION in VARCHAR2,
1185   X_SUPERVISION_PERCENTAGE in NUMBER,
1186   X_FUNDING_PERCENTAGE in NUMBER,
1187   X_ORG_UNIT_CD in VARCHAR2,
1188   X_OU_START_DT in DATE,
1189   X_REPLACED_PERSON_ID in NUMBER,
1190   X_REPLACED_SEQUENCE_NUMBER in NUMBER,
1191   X_COMMENTS in VARCHAR2,
1192   X_MODE in VARCHAR2
1193   ) as
1194     X_LAST_UPDATE_DATE DATE;
1195     X_LAST_UPDATED_BY NUMBER;
1196     X_LAST_UPDATE_LOGIN NUMBER;
1197 begin
1198   X_LAST_UPDATE_DATE := SYSDATE;
1199   if(X_MODE = 'I') then
1200     X_LAST_UPDATED_BY := 1;
1201     X_LAST_UPDATE_LOGIN := 0;
1202   elsif (X_MODE IN ('R', 'S')) then
1203     X_LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
1204     if X_LAST_UPDATED_BY is NULL then
1205       X_LAST_UPDATED_BY := -1;
1206     end if;
1207     X_LAST_UPDATE_LOGIN :=FND_GLOBAL.LOGIN_ID;
1208     if X_LAST_UPDATE_LOGIN is NULL then
1209       X_LAST_UPDATE_LOGIN := -1;
1210     end if;
1211   else
1212     FND_MESSAGE.SET_NAME('FND', 'SYSTEM-INVALID ARGS');
1213     IGS_GE_MSG_STACK.ADD;
1214     app_exception.raise_exception;
1215   end if;
1216 
1217   Before_DML (
1218     p_action => 'UPDATE',
1219     x_rowid => X_ROWID,
1220     x_ca_person_id => X_CA_PERSON_ID,
1221     x_ca_sequence_number => X_CA_SEQUENCE_NUMBER,
1222     x_person_id => X_PERSON_ID,
1223     x_sequence_number => X_SEQUENCE_NUMBER,
1224     x_start_dt => X_START_DT,
1225     x_end_dt => X_END_DT,
1226     x_research_supervisor_type => X_RESEARCH_SUPERVISOR_TYPE,
1227     x_supervisor_profession => X_SUPERVISOR_PROFESSION,
1228     x_supervision_percentage => X_SUPERVISION_PERCENTAGE,
1229     x_funding_percentage => X_FUNDING_PERCENTAGE,
1230     x_org_unit_cd => X_ORG_UNIT_CD,
1231     x_ou_start_dt => X_OU_START_DT,
1232     x_replaced_person_id => X_REPLACED_PERSON_ID,
1233     x_replaced_sequence_number => X_REPLACED_SEQUENCE_NUMBER,
1234     x_comments => X_COMMENTS,
1235     x_created_by => X_LAST_UPDATED_BY ,
1236     x_creation_date => X_LAST_UPDATE_DATE,
1237     x_last_updated_by => X_LAST_UPDATED_BY,
1238     x_last_update_date => X_LAST_UPDATE_DATE,
1239     x_last_update_login => X_LAST_UPDATE_LOGIN
1240  );
1241 
1242   IF (x_mode = 'S') THEN
1243     igs_sc_gen_001.set_ctx('R');
1244   END IF;
1245   update IGS_RE_SPRVSR set
1246     START_DT = NEW_REFERENCES.START_DT,
1247     END_DT = NEW_REFERENCES.END_DT,
1248     RESEARCH_SUPERVISOR_TYPE = NEW_REFERENCES.RESEARCH_SUPERVISOR_TYPE,
1249     SUPERVISOR_PROFESSION = NEW_REFERENCES.SUPERVISOR_PROFESSION,
1250     SUPERVISION_PERCENTAGE = NEW_REFERENCES.SUPERVISION_PERCENTAGE,
1251     FUNDING_PERCENTAGE = NEW_REFERENCES.FUNDING_PERCENTAGE,
1252     ORG_UNIT_CD = NEW_REFERENCES.ORG_UNIT_CD,
1253     OU_START_DT = NEW_REFERENCES.OU_START_DT,
1254     REPLACED_PERSON_ID = NEW_REFERENCES.REPLACED_PERSON_ID,
1255     REPLACED_SEQUENCE_NUMBER = NEW_REFERENCES.REPLACED_SEQUENCE_NUMBER,
1256     COMMENTS = NEW_REFERENCES.COMMENTS,
1257     LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
1258     LAST_UPDATED_BY = X_LAST_UPDATED_BY,
1259     LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN
1260   where ROWID = X_ROWID
1261   ;
1262   if (sql%notfound) then
1263      fnd_message.set_name ('IGS', 'IGS_SC_POLICY_UPD_DEL_EXCEP');
1264      igs_ge_msg_stack.add;
1265      igs_sc_gen_001.unset_ctx('R');
1266      app_exception.raise_exception;
1267  end if;
1268  IF (x_mode = 'S') THEN
1269     igs_sc_gen_001.unset_ctx('R');
1270   END IF;
1271 
1272 
1273  After_DML (
1274     p_action => 'UPDATE',
1275     x_rowid => X_ROWID
1276   );
1277 
1278 EXCEPTION
1279   WHEN OTHERS THEN
1280     IF (SQLCODE = (-28115)) THEN
1281       fnd_message.set_name ('IGS', 'IGS_SC_UPD_POLICY_EXCP');
1282       fnd_message.set_token ('ERR_CD', SQLCODE);
1283       igs_ge_msg_stack.add;
1284       igs_sc_gen_001.unset_ctx('R');
1285       app_exception.raise_exception;
1286     ELSE
1287       igs_sc_gen_001.unset_ctx('R');
1288       RAISE;
1289     END IF;
1290 
1291 end UPDATE_ROW;
1292 
1293 procedure ADD_ROW (
1294   X_ROWID in out NOCOPY VARCHAR2,
1295   X_CA_PERSON_ID in NUMBER,
1296   X_CA_SEQUENCE_NUMBER in NUMBER,
1297   X_PERSON_ID in NUMBER,
1298   X_SEQUENCE_NUMBER in NUMBER,
1299   X_START_DT in DATE,
1300   X_END_DT in DATE,
1301   X_RESEARCH_SUPERVISOR_TYPE in VARCHAR2,
1302   X_SUPERVISOR_PROFESSION in VARCHAR2,
1303   X_SUPERVISION_PERCENTAGE in NUMBER,
1304   X_FUNDING_PERCENTAGE in NUMBER,
1305   X_ORG_UNIT_CD in VARCHAR2,
1306   X_OU_START_DT in DATE,
1307   X_REPLACED_PERSON_ID in NUMBER,
1308   X_REPLACED_SEQUENCE_NUMBER in NUMBER,
1309   X_COMMENTS in VARCHAR2,
1310   X_MODE in VARCHAR2
1311   ) as
1312   cursor c1 is
1313  select rowid from IGS_RE_SPRVSR
1314      where CA_PERSON_ID = X_CA_PERSON_ID
1315      and CA_SEQUENCE_NUMBER = X_CA_SEQUENCE_NUMBER
1316      and PERSON_ID = X_PERSON_ID
1317      and SEQUENCE_NUMBER = X_SEQUENCE_NUMBER
1318   ;
1319 begin
1320   open c1;
1321   fetch c1 into X_ROWID;
1322   if (c1%notfound) then
1323     close c1;
1324     INSERT_ROW (
1325      X_ROWID,
1326      X_CA_PERSON_ID,
1327      X_CA_SEQUENCE_NUMBER,
1328      X_PERSON_ID,
1329      X_SEQUENCE_NUMBER,
1330      X_START_DT,
1331      X_END_DT,
1332      X_RESEARCH_SUPERVISOR_TYPE,
1333      X_SUPERVISOR_PROFESSION,
1334      X_SUPERVISION_PERCENTAGE,
1335      X_FUNDING_PERCENTAGE,
1336      X_ORG_UNIT_CD,
1337      X_OU_START_DT,
1338      X_REPLACED_PERSON_ID,
1339      X_REPLACED_SEQUENCE_NUMBER,
1340      X_COMMENTS,
1341      X_MODE);
1342     return;
1343   end if;
1344   close c1;
1345   UPDATE_ROW (
1346    X_ROWID,
1347    X_CA_PERSON_ID,
1348    X_CA_SEQUENCE_NUMBER,
1349    X_PERSON_ID,
1350    X_SEQUENCE_NUMBER,
1351    X_START_DT,
1352    X_END_DT,
1353    X_RESEARCH_SUPERVISOR_TYPE,
1354    X_SUPERVISOR_PROFESSION,
1355    X_SUPERVISION_PERCENTAGE,
1356    X_FUNDING_PERCENTAGE,
1357    X_ORG_UNIT_CD,
1358    X_OU_START_DT,
1359    X_REPLACED_PERSON_ID,
1360    X_REPLACED_SEQUENCE_NUMBER,
1361    X_COMMENTS,
1362    X_MODE);
1363 end ADD_ROW;
1364 
1365 procedure DELETE_ROW (
1366   X_ROWID in VARCHAR2,
1367   x_mode IN VARCHAR2
1368   ) as
1369 begin
1370 
1371   Before_DML (
1372     p_action => 'DELETE',
1373     x_rowid => X_ROWID
1374    );
1375 
1376   IF (x_mode = 'S') THEN
1377     igs_sc_gen_001.set_ctx('R');
1378   END IF;
1379   delete from IGS_RE_SPRVSR
1380   where ROWID = X_ROWID;
1381   if (sql%notfound) then
1382      fnd_message.set_name ('IGS', 'IGS_SC_POLICY_UPD_DEL_EXCEP');
1383      igs_ge_msg_stack.add;
1384      igs_sc_gen_001.unset_ctx('R');
1385      app_exception.raise_exception;
1386  end if;
1387  IF (x_mode = 'S') THEN
1388     igs_sc_gen_001.unset_ctx('R');
1389   END IF;
1390 
1391 end DELETE_ROW;
1392 
1393 end IGS_RE_SPRVSR_PKG;