DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_GR_VAL_AWC

Source


1 PACKAGE BODY igs_gr_val_awc AS
2 /* $Header: IGSGR05B.pls 115.5 2004/02/04 04:53:11 kdande ship $ */
3   --
4   -- Validate the award has the correct system award type
5   --
6   FUNCTION grdp_val_award_type(
7   p_award_cd IN VARCHAR2 ,
8   p_s_award_type IN VARCHAR2 ,
9   p_message_name OUT NOCOPY VARCHAR2 )
10   RETURN BOOLEAN AS
11   BEGIN -- grdp_val_award_type
12     -- Description: Validate the award specified by the award_cd has a
13     -- s_award_type the same as that supplied.
14   DECLARE
15     v_award_rec IGS_PS_AWD.s_award_type%TYPE;
16     v_ret_val BOOLEAN DEFAULT TRUE;
17     cst_course  CONSTANT VARCHAR2(6) := 'COURSE';
18     cst_honorary  CONSTANT VARCHAR2(8) := 'HONORARY';
19     cst_special CONSTANT VARCHAR2(7) := 'SPECIAL';
20     CURSOR  c_award IS
21       SELECT  s_award_type
22       FROM  IGS_PS_AWD
23       WHERE award_cd = p_award_cd;
24   BEGIN
25     p_message_name := NULL;
26     IF p_award_cd IS NULL OR
27         p_s_award_type IS NULL THEN
28       RETURN TRUE;
29     END IF;
30     OPEN c_award;
31     FETCH c_award INTO v_award_rec;
32     IF (c_award%FOUND) THEN
33       IF p_s_award_type = cst_course AND
34             p_s_award_type <> v_award_rec THEN
35         CLOSE c_award;
36         p_message_name := 'IGS_GR_TYPE_MUST_BE_COURSE';
37         RETURN FALSE;
38       END IF;
39       IF  p_s_award_type = cst_honorary AND
40             p_s_award_type <> v_award_rec THEN
41         CLOSE c_award;
42         p_message_name := 'IGS_GR_TYPE_MUST_BE_HNRY';
43         RETURN FALSE;
44       END IF;
45       IF  p_s_award_type = cst_special AND
46             (v_award_rec = cst_course OR
47             v_award_rec = cst_honorary) THEN
48         CLOSE c_award;
49         p_message_name := 'IGS_GR_NOT_A_VALID_AWD_TYPE';
50         RETURN FALSE;
51       END IF;
52     END IF;
53     CLOSE c_award;
54     RETURN TRUE;
55   EXCEPTION
56     WHEN OTHERS THEN
57       IF (c_award%ISOPEN) THEN
58         CLOSE c_award;
59       END IF;
60     RAISE;
61   END;
62   EXCEPTION
63     WHEN OTHERS THEN
64           Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
65           App_Exception.Raise_Exception;
66       RAISE;
67   END grdp_val_award_type;
68   --
69   -- Validate the award ceremony has related student course attempts
70   --
71   FUNCTION grdp_val_awc_sca(
72   p_course_cd IN VARCHAR2 ,
73   p_version_number IN NUMBER ,
74   p_message_name OUT NOCOPY VARCHAR2 )
75   RETURN BOOLEAN AS
76   BEGIN -- grdp_val_awc_sca
77     -- Description: Warn the user if no student_course_attempt records
78     -- exist for the specified course_cd and version_number.  WARNING ONLY
79   DECLARE
80     v_dummy   VARCHAR2(1);
81     CURSOR  c_sca IS
82       SELECT  'X'
83       FROM  IGS_EN_STDNT_PS_ATT sca
84       WHERE sca.course_cd   = p_course_cd AND
85         sca.version_number  = p_version_number;
86   BEGIN
87     p_message_name := NULL;
88     IF p_course_cd IS NULL OR
89         p_version_number IS NULL THEN
90       RETURN TRUE;
91     END IF;
92     OPEN c_sca;
93     FETCH c_sca INTO v_dummy;
94     IF (c_sca%NOTFOUND) THEN
95       CLOSE c_sca;
96       p_message_name := 'IGS_GR_NO_STUD_COURSE_EXISTS';
97       RETURN TRUE;
98     END IF;
99     CLOSE c_sca;
100     RETURN TRUE;
101   END;
102   EXCEPTION
103     WHEN OTHERS THEN
104           Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
105           IGS_GE_MSG_STACK.ADD;
106           App_Exception.Raise_Exception;
107   END grdp_val_awc_sca;
108   --
109   -- Validate the award is not closed.
110   --
111   FUNCTION crsp_val_aw_closed(
112   p_award_cd IN VARCHAR2 ,
113   p_message_name OUT NOCOPY VARCHAR2 )
114   RETURN BOOLEAN AS
115     v_other_detail    VARCHAR(255);
116     v_closed_ind    IGS_PS_AWD.closed_ind%TYPE;
117     CURSOR  c_aw IS
118       SELECT closed_ind
119       FROM   IGS_PS_AWD aw
120       WHERE  aw.award_cd = p_award_cd;
121   BEGIN
122     -- check if the award is closed
123     OPEN c_aw;
124     FETCH c_aw INTO v_closed_ind;
125     IF c_aw%NOTFOUND THEN
126       p_message_name := NULL;
127       CLOSE c_aw;
128       RETURN TRUE;
129     ELSIF (v_closed_ind = 'N') THEN
130       p_message_name := NULL;
131       CLOSE c_aw;
132       RETURN TRUE;
133     ELSE
134       p_message_name := 'IGS_PS_AWARD_CD_CLOSED';
135       CLOSE c_aw;
136       RETURN FALSE;
137     END IF;
138   EXCEPTION
139     WHEN OTHERS THEN
140           Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
141           IGS_GE_MSG_STACK.ADD;
142           App_Exception.Raise_Exception;
143   END crsp_val_aw_closed;
144   --
145   -- Validate the award ceremony order in ceremony
146   --
147   FUNCTION grdp_val_awc_order(
148   p_grd_cal_type IN VARCHAR2 ,
149   p_grd_ci_sequence_number IN NUMBER ,
150   p_ceremony_number IN NUMBER ,
151   p_award_course_cd IN VARCHAR2 ,
152   p_award_crs_version_number IN NUMBER ,
153   p_award_cd IN VARCHAR2 ,
154   p_order_in_ceremony IN NUMBER ,
155   p_message_name OUT NOCOPY VARCHAR2 )
156   RETURN BOOLEAN AS
157   BEGIN -- grdp_val_awc_order
158   DECLARE
159     v_awc_exists    VARCHAR2(1);
160     v_acusg_grd_cal_type      IGS_GR_AWD_CRM_US_GP.grd_cal_type%TYPE;
161     v_acusg_grd_ci_sequence_number
162               IGS_GR_AWD_CRM_US_GP.grd_ci_sequence_number%TYPE;
163     v_acusg_ceremony_number     IGS_GR_AWD_CRM_US_GP.ceremony_number%TYPE;
164     v_acusg_award_course_cd     IGS_GR_AWD_CRM_US_GP.award_course_cd%TYPE;
165     v_acusg_award_crs_version_num
166               IGS_GR_AWD_CRM_US_GP.award_crs_version_number%TYPE;
167     v_acusg_award_cd      IGS_GR_AWD_CRM_US_GP.award_cd%TYPE;
168     v_acusg_us_group_number     IGS_GR_AWD_CRM_US_GP.us_group_number%TYPE;
169     v_message_name        VARCHAR2(30);
170     CURSOR c_awc IS
171       SELECT  'X'
172       FROM  IGS_GR_AWD_CEREMONY awc
173       WHERE awc.grd_cal_type    = p_grd_cal_type AND
174         awc.grd_ci_sequence_number  = p_grd_ci_sequence_number AND
175         awc.ceremony_number   = p_ceremony_number AND
176         awc.order_in_ceremony   = p_order_in_ceremony AND
177         awc.award_cd      <> p_award_cd;
178     CURSOR  c_acusg IS
179       SELECT  acusg.grd_cal_type,
180         acusg.grd_ci_sequence_number,
181         acusg.ceremony_number,
182         acusg.award_course_cd,
183         acusg.award_crs_version_number,
184         acusg.award_cd,
185         acusg.us_group_number
186       FROM  IGS_GR_AWD_CRM_US_GP  acusg
187       WHERE acusg.grd_cal_type    = p_grd_cal_type AND
188         acusg.grd_ci_sequence_number  = p_grd_ci_sequence_number AND
189         acusg.ceremony_number   = p_ceremony_number AND
190         acusg.award_course_cd   = p_award_course_cd AND
191         acusg.award_crs_version_number  = p_award_crs_version_number AND
192         acusg.award_cd      = p_award_cd;
193   BEGIN
194     -- Set the default message number
195     p_message_name := NULL;
196     --1. Check parameters :
197     IF p_grd_cal_type IS NULL OR
198           p_grd_ci_sequence_number  IS NULL OR
199           p_ceremony_number   IS NULL OR
200         p_award_cd      IS NULL OR
201           p_order_in_ceremony   IS NULL THEN
202       RETURN TRUE;
203     END IF;
204     --Check for any award_ceremony records with for the same graduation_ceremony
205     -- with the same order_in_ceremony but a different award_cd.
206     --4.  If any records are found raise an error.
207     OPEN c_awc;
208     FETCH c_awc INTO  v_awc_exists;
209     IF c_awc%FOUND THEN
210       CLOSE c_awc;
211       p_message_name := 'IGS_GR_MUST_BE_SAME_AWRD_CD';
212       RETURN FALSE;
213     END IF;
214     -- If course code and version number are NULL it mus be
215     -- an honorary award which cannot have unit set groups.
216     IF p_award_course_cd    IS NULL OR
217           p_award_crs_version_number  IS NULL THEN
218       RETURN TRUE;
219     END IF;
220     --5. Loop through all of the award_ceremony_us_group records for this
221     -- award_ceremony and call GRDP_VAL_ACUSG_ORDER to check for any
222     -- order_in_award conflicts.
223     FOR v_acusg_rec IN c_acusg LOOP
224       IF NOT IGS_GR_VAL_AWC.grdp_val_acusg_order(
225             v_acusg_rec.grd_cal_type,
226             v_acusg_rec.grd_ci_sequence_number,
227             v_acusg_rec.ceremony_number,
228             v_acusg_rec.award_course_cd,
229             v_acusg_rec.award_crs_version_number,
230             v_acusg_rec.award_cd,
231             v_acusg_rec.us_group_number,
232             v_message_name) THEN
233         p_message_name := v_message_name;
234         RETURN FALSE;
235       END IF;
236     END LOOP;
237     -- Return the default value
238     RETURN TRUE;
239   EXCEPTION
240     WHEN OTHERS THEN
241       IF c_awc%ISOPEN THEN
242         CLOSE c_awc;
243       END IF;
244       IF c_acusg%ISOPEN THEN
245         CLOSE c_acusg;
246       END IF;
247       RAISE;
248   END;
249   EXCEPTION
250     WHEN OTHERS THEN
251           Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
252           IGS_GE_MSG_STACK.ADD;
253           App_Exception.Raise_Exception;
254   END grdp_val_awc_order;
255   --
256   -- Validate if the award ceremony us group order in award.
257   --
258   FUNCTION grdp_val_acusg_order(
259   p_grd_cal_type IN VARCHAR2 ,
260   p_grd_ci_sequence_number IN NUMBER ,
261   p_ceremony_number IN NUMBER ,
262   p_award_course_cd IN VARCHAR2 ,
263   p_award_crs_version_number IN NUMBER ,
264   p_award_cd IN VARCHAR2 ,
265   p_us_group_number IN NUMBER ,
266   p_message_name OUT NOCOPY VARCHAR2 )
267   RETURN BOOLEAN AS
268   BEGIN -- grdp_val_acusg_order
269     -- This validates that award_ceremony_us_group records with the same
270     -- order_in_award which have parent award_ceremony records in the same
271     -- graduation_ceremony with the same order_in_ceremony have matching
272     -- award_ceremony_unit_set records.
273   DECLARE
274     v_awc_acusg_exists  VARCHAR2(1);
275     CURSOR c_awc_acusg IS
276       SELECT  'x'
277       FROM  IGS_GR_AWD_CEREMONY awc1,
278         IGS_GR_AWD_CEREMONY awc2,
279         IGS_GR_AWD_CRM_US_GP  acusg1,
280         IGS_GR_AWD_CRM_US_GP  acusg2
281       WHERE acusg1.grd_cal_type   = p_grd_cal_type AND
282         acusg1.grd_ci_sequence_number = p_grd_ci_sequence_number AND
283         acusg1.ceremony_number    = p_ceremony_number AND
284         acusg1.award_course_cd    = p_award_course_cd AND
285         acusg1.award_crs_version_number = p_award_crs_version_number AND
286         acusg1.award_cd     = p_award_cd AND
287         acusg1.us_group_number    = p_us_group_number AND
288         acusg1.closed_ind       = 'N' AND
289         acusg2.grd_cal_type   = acusg1.grd_cal_type AND
290         acusg2.grd_ci_sequence_number = acusg1.grd_ci_sequence_number AND
291         acusg2.ceremony_number    = acusg1.ceremony_number AND
292         (acusg2.award_course_cd   <> acusg1.award_course_cd OR
293         acusg2.award_crs_version_number <> acusg1.award_crs_version_number) AND
294         acusg2.award_cd     = acusg1.award_cd AND
295         acusg2.closed_ind       = 'N' AND
296         acusg1.order_in_award   = acusg2.order_in_award AND
297         awc1.grd_cal_type     = acusg1.grd_cal_type AND
298         awc1.grd_ci_sequence_number = acusg1.grd_ci_sequence_number AND
299         awc1.ceremony_number    = acusg1.ceremony_number AND
300         awc1.award_course_cd    = acusg1.award_course_cd AND
301         awc1.award_crs_version_number = acusg1.award_crs_version_number AND
302         awc1.award_cd     = acusg1.award_cd AND
303         awc1.closed_ind     = 'N' AND
304         awc2.grd_cal_type     = acusg2.grd_cal_type AND
305         awc2.grd_ci_sequence_number = acusg2.grd_ci_sequence_number AND
306         awc2.ceremony_number    = acusg2.ceremony_number AND
307         awc2.award_course_cd    = acusg2.award_course_cd AND
308         awc2.award_crs_version_number = acusg2.award_crs_version_number AND
309         awc2.award_cd     = acusg2.award_cd AND
310         awc2.closed_ind     = 'N' AND
311         awc1.order_in_ceremony    = awc2.order_in_ceremony
312       AND
313       (EXISTS
314         (SELECT acus.unit_set_cd,
315           acus.us_version_number
316         FROM  IGS_GR_AWD_CRM_UT_ST  acus
317         WHERE acus.grd_cal_type     = acusg1.grd_cal_type AND
318           acus.grd_ci_sequence_number = acusg1.grd_ci_sequence_number AND
319           acus.ceremony_number    = acusg1.ceremony_number AND
320           acus.award_course_cd    = acusg1.award_course_cd AND
321           acus.award_crs_version_number = acusg1.award_crs_version_number AND
322           acus.award_cd     = acusg1.award_cd AND
323           acus.us_group_number    = acusg1.us_group_number
324         MINUS
325           SELECT  acus.unit_set_cd,
326             acus.us_version_number
327           FROM  IGS_GR_AWD_CRM_UT_ST  acus
328           WHERE acus.grd_cal_type     = acusg2.grd_cal_type AND
329             acus.grd_ci_sequence_number = acusg2.grd_ci_sequence_number AND
330             acus.ceremony_number    = acusg2.ceremony_number AND
331             acus.award_course_cd    = acusg2.award_course_cd AND
332             acus.award_crs_version_number = acusg2.award_crs_version_number AND
333             acus.award_cd     = acusg2.award_cd AND
334             acus.us_group_number    = acusg2.us_group_number)
335       OR
336       EXISTS
337         (SELECT acus.unit_set_cd,
338           acus.us_version_number
339         FROM  IGS_GR_AWD_CRM_UT_ST  acus
340         WHERE acus.grd_cal_type     = acusg2.grd_cal_type AND
341           acus.grd_ci_sequence_number = acusg2.grd_ci_sequence_number AND
342           acus.ceremony_number    = acusg2.ceremony_number AND
343           acus.award_course_cd    = acusg2.award_course_cd AND
344           acus.award_crs_version_number = acusg2.award_crs_version_number AND
345           acus.award_cd     = acusg2.award_cd AND
346           acus.us_group_number    = acusg2.us_group_number
347         MINUS
348           SELECT  acus.unit_set_cd,
349             acus.us_version_number
350           FROM  IGS_GR_AWD_CRM_UT_ST  acus
351           WHERE acus.grd_cal_type     = acusg1.grd_cal_type AND
352             acus.grd_ci_sequence_number = acusg1.grd_ci_sequence_number AND
353             acus.ceremony_number    = acusg1.ceremony_number AND
354             acus.award_course_cd    = acusg1.award_course_cd AND
355             acus.award_crs_version_number = acusg1.award_crs_version_number AND
356             acus.award_cd     = acusg1.award_cd AND
357             acus.us_group_number    = acusg1.us_group_number)
358       );
359   BEGIN
360     -- Set the default message number
361     p_message_name := NULL;
362     -- Check Parameters
363     IF p_grd_cal_type IS NULL OR
364         p_grd_ci_sequence_number IS NULL OR
365         p_ceremony_number IS NULL OR
366         p_award_course_cd IS NULL OR
367         p_award_crs_version_number IS NULL OR
368         p_award_cd IS NULL OR
369         p_us_group_number IS NULL THEN
370       RETURN TRUE;
371     END IF;
372     -- Check if there is any award_ceremony_us_group records with parent
373     -- award_ceremony records with the same order_in_ceremony (are for the
374     -- same award_cd but different course codes/versions) which have
375     -- award_ceremony_us_group records with the same order_in_award but are made
376     -- up of different award_ceremony_unit_set records.
377     OPEN c_awc_acusg;
378     FETCH c_awc_acusg INTO v_awc_acusg_exists;
379     IF c_awc_acusg%FOUND THEN
380       CLOSE c_awc_acusg;
381       p_message_name := 'IGS_GR_AWD_SET_GRP_EXISTS';
382       RETURN FALSE;
383     END IF;
384     CLOSE c_awc_acusg;
385     -- Return the default value
386     RETURN TRUE;
387   EXCEPTION
388     WHEN OTHERS THEN
389       IF c_awc_acusg%ISOPEN THEN
390         CLOSE c_awc_acusg;
391       END IF;
392       RAISE;
393   END;
394   EXCEPTION
395     WHEN OTHERS THEN
396           Fnd_Message.Set_Name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
397           IGS_GE_MSG_STACK.ADD;
398           App_Exception.Raise_Exception;
399   END grdp_val_acusg_order;
400 END igs_gr_val_awc;