DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_EN_SPAA_LGCY_PUB

Source


1 PACKAGE BODY igs_en_spaa_lgcy_pub AS
2 /* $Header: IGSENA5B.pls 115.5 2003/10/10 09:17:35 nalkumar noship $ */
3 
4 g_pkg_name CONSTANT VARCHAR2(30):='IGS_EN_SPAA_LGCY_PUB';
5 
6 FUNCTION validate_parameters ( p_awd_aim_rec IN  awd_aim_rec_type )
7 RETURN VARCHAR2 AS
8   /*
9   ||  Created By : nbehera
10   ||  Created On : 20NOV2002
11   ||  Purpose    : This procedure validates all the fields in the parameter p_the_dtls_rec
12   ||               which require one or more validation
13   ||  Known limitations, enhancements or remarks :
14   ||  Change History :
15   ||  Who        When        What
16   ||  anilk      07-Oct-2003 changes in awd_aim_rec_type for Program Completion Validation, Bug# 3129913
17   ||  (reverse chronological order - newest change first)
18   */
19 l_val_param VARCHAR2(10) := 'VALID';
20 
21 BEGIN
22     -- Check if person_number value is null then log error message
23     IF p_awd_aim_rec.person_number IS NULL THEN
24          FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_PER_NUM_NULL');
25          FND_MSG_PUB.ADD;
26          l_val_param := 'INVALID';
27     END IF;
28 
29     -- Check if program_cd value is null then log error message
30     IF p_awd_aim_rec.program_cd IS NULL THEN
31          FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_PRGM_CD_NULL');
32          FND_MSG_PUB.ADD;
33          l_val_param := 'INVALID';
34     -- Check if program_cd is not an upper case value then log error message
35     ELSIF p_awd_aim_rec.program_cd <> UPPER(p_awd_aim_rec.program_cd) THEN
36          FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_PRGM_CD_UCASE');
37          FND_MSG_PUB.ADD;
38          l_val_param := 'INVALID';
39     END IF;
40 
41     -- Check if award_cd value is null then log error message
42     IF p_awd_aim_rec.award_cd IS NULL THEN
43          FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_AWD_CD_NULL');
44          FND_MSG_PUB.ADD;
45          l_val_param := 'INVALID';
46     -- Check if award_cd is not an upper case value then log error message
47     ELSIF p_awd_aim_rec.award_cd <> UPPER(p_awd_aim_rec.award_cd) THEN
48          FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_AWD_CD_UCASE');
49          FND_MSG_PUB.ADD;
50          l_val_param := 'INVALID';
51     END IF;
52 
53     -- Check if start_dt value is null then log error message
54     IF p_awd_aim_rec.start_dt IS NULL THEN
55          FND_MESSAGE.SET_NAME ('IGS', 'IGS_PS_STARDT_NOT_NULL');
56          FND_MSG_PUB.ADD;
57          l_val_param := 'INVALID';
58     END IF;
59 
60     -- Check if complete_ind is available and is not 'Y' or 'N' then log error message
61     IF p_awd_aim_rec.complete_ind IS NOT NULL THEN
62          IF p_awd_aim_rec.complete_ind NOT IN('Y','N') THEN
63               FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_COMPLT_IND_INVALID');
64               FND_MSG_PUB.ADD;
65               l_val_param := 'INVALID';
66          END IF;
67     END IF;
68 
69     -- Check if award_mark is available and is in 0-100 range
70     IF p_awd_aim_rec.award_mark IS NOT NULL THEN
71          IF NOT (p_awd_aim_rec.award_mark >= 0 AND p_awd_aim_rec.award_mark <= 100 ) THEN
72               FND_MESSAGE.SET_NAME ('IGS', 'IGS_GR_MARK_INV_0_100');
73               FND_MSG_PUB.ADD;
74               l_val_param := 'INVALID';
75          END IF;
76     END IF;
77 
78     RETURN l_val_param;
79 
80 END validate_parameters;
81 
82 FUNCTION validate_db_cons ( p_person_id   IN  NUMBER,
83                             p_awd_aim_rec IN  awd_aim_rec_type )
84 RETURN VARCHAR2 AS
85   /*
86   ||  Created By : nbehera
87   ||  Created On : 20NOV2002
88   ||  Purpose    : This Procedure Checks for all the database constraints required to
89   ||               check before insertion of a Award Aims record.
90   ||  Known limitations, enhancements or remarks :
91   ||  Change History :
92   ||  Who             When            What
93   ||  (reverse chronological order - newest change first)
94   */
95   CURSOR cur_awd_grd_sch(
96                cp_award_cd igs_ps_awd.award_cd%TYPE,
97                cp_grading_schema_cd igs_ps_awd.grading_schema_cd%TYPE,
98                cp_gs_version_number igs_ps_awd.gs_version_number%TYPE ) IS
99         SELECT 'X'
100           FROM igs_ps_awd
101          WHERE award_cd = cp_award_cd
102 	   AND grading_schema_cd = cp_grading_schema_cd
103 	   AND gs_version_number = cp_gs_version_number;
104 
105   l_ret_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
106   l_dummy      VARCHAR2(1);
107 
108 BEGIN
109 
110     --Check for duplicate record in the Award Aims Table
111     --If record exists then return the return status as 'W' without checking
112     --for further FK checks
113     IF igs_en_spa_awd_aim_pkg.get_pk_for_validation (
114                   x_award_cd     => p_awd_aim_rec.award_cd,
115                   x_course_cd    => p_awd_aim_rec.program_cd,
116                   x_person_id    => p_person_id ) THEN
117          FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_AWD_AIM_EXISTS');
118          FND_MSG_PUB.ADD;
119          l_ret_status := 'W';
120          RETURN l_ret_status;
121     END IF;
122 
123     -- FK check in the Student Program Attempt table
124     IF NOT igs_en_stdnt_ps_att_pkg.get_pk_for_validation (
125                   x_person_id => p_person_id,
126                   x_course_cd => p_awd_aim_rec.program_cd ) THEN
127          FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_PRGM_ATT_NOT_EXIST');
128          FND_MSG_PUB.ADD;
129          l_ret_status := FND_API.G_RET_STS_ERROR;
130     END IF;
131 
132     -- FK check in the Award Code table
133     IF NOT igs_ps_awd_pkg.get_pk_for_validation (
134                   x_award_cd => p_awd_aim_rec.award_cd ) THEN
135          FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_AWD_NOT_EXIST');
136          FND_MSG_PUB.ADD;
137          l_ret_status := FND_API.G_RET_STS_ERROR;
138     END IF;
139 
140     -- Check if grading schema matches one stored at the award
141     IF p_awd_aim_rec.grading_schema_cd  IS NOT NULL AND
142        p_awd_aim_rec.gs_version_number  IS NOT NULL THEN
143            OPEN cur_awd_grd_sch(
144                    p_awd_aim_rec.award_cd,
145                    p_awd_aim_rec.grading_schema_cd,
146                    p_awd_aim_rec.gs_version_number);
147            FETCH cur_awd_grd_sch INTO l_dummy;
148            IF (cur_awd_grd_sch%NOTFOUND) THEN
149                FND_MESSAGE.SET_NAME ('IGS', 'IGS_GR_AWD_GRD_SCH_NO_MTCH');
150                FND_MSG_PUB.ADD;
151                l_ret_status := FND_API.G_RET_STS_ERROR;
152            END IF;
153     END IF;
154 
155     -- Check if award_grade belongs to grading schema
156     IF p_awd_aim_rec.award_grade IS NOT NULL THEN
157        IF p_awd_aim_rec.grading_schema_cd  IS NOT NULL AND
158           p_awd_aim_rec.gs_version_number  IS NOT NULL THEN
159               IF NOT igs_as_grd_sch_grade_pkg.get_pk_for_validation (
160                    x_grading_schema_cd => p_awd_aim_rec.grading_schema_cd,
161                    x_version_number    => p_awd_aim_rec.gs_version_number,
162                    x_grade             => p_awd_aim_rec.award_grade  )
163               THEN
164                   FND_MESSAGE.SET_NAME ('IGS', 'IGS_GE_GRD_NOT_IN_SCHEMA');
165                   FND_MSG_PUB.ADD;
166                   l_ret_status := FND_API.G_RET_STS_ERROR;
167               END IF;
168        ELSE
169            FND_MESSAGE.SET_NAME ('IGS', 'IGS_GE_GRD_NOT_IN_SCHEMA');
170            FND_MSG_PUB.ADD;
171            l_ret_status := FND_API.G_RET_STS_ERROR;
172        END IF;
173     END IF;
174 
175     RETURN l_ret_status;
176 
177 END validate_db_cons;
178 
179 FUNCTION validate_stu_awd_aim ( p_person_id   IN  NUMBER,
180                                 p_awd_aim_rec IN  awd_aim_rec_type )
181 RETURN VARCHAR2 AS
182   /*
183   ||  Created By : nbehera
184   ||  Created On : 20NOV2002
185   ||  Purpose    : This procedure checks all the business validations before
186   ||               inserting a Award Aims record.
187   ||  Known limitations, enhancements or remarks :
188   ||  Change History :
189   ||  Who             When            What
190   ||  (reverse chronological order - newest change first)
191   */
192 l_val_awd_aim  VARCHAR2(10) := 'VALID';
193 l_message      fnd_new_messages.message_name%TYPE;
194 
195 BEGIN
196     --If Start Date and End Date is having value then call the below function to
197     --Check if Start Date is less than or equal to End Date. If not then log error message.
198     IF p_awd_aim_rec.start_dt IS NOT NULL AND p_awd_aim_rec.end_dt IS NOT NULL THEN
199          IF NOT igs_ad_val_edtl.genp_val_strt_end_dt (
200                          p_start_dt      => p_awd_aim_rec.start_dt,
201                          p_end_dt        => p_awd_aim_rec.end_dt,
202                          p_message_name  => l_message) THEN
203               FND_MESSAGE.SET_NAME ('IGS', l_message);
204               FND_MSG_PUB.ADD;
205               l_val_awd_aim := 'INVALID';
206          END IF;
207     END IF;
208 
209     --Call the below function to check whether the Award code is offered within the enrolled
210     --program version. If not then log error message.
211     IF NOT igs_en_gen_legacy.validate_awd_offer_pgm (
212                         p_person_id    => p_person_id,
213                         p_program_cd   => p_awd_aim_rec.program_cd,
214                         p_award_cd     => p_awd_aim_rec.award_cd) THEN
215          FND_MESSAGE.SET_NAME ('IGS', 'IGS_EN_AWD_AVAIL_STU_PGM');
216          FND_MSG_PUB.ADD;
217          l_val_awd_aim := 'INVALID';
218     END IF;
219 
220     RETURN l_val_awd_aim;
221 
222 END validate_stu_awd_aim;
223 
224 PROCEDURE create_student_awd_aim
225 (       p_api_version       IN   NUMBER,
226         p_init_msg_list     IN   VARCHAR2,
227         p_commit            IN   VARCHAR2,
228         p_validation_level  IN   NUMBER ,
229         p_awd_aim_rec       IN   awd_aim_rec_type,
230         x_return_status     OUT  NOCOPY VARCHAR2,
231         x_msg_count         OUT  NOCOPY NUMBER,
232         x_msg_data          OUT  NOCOPY VARCHAR2 ) IS
233   /*
234   ||  Created By : nbehera
235   ||  Created On : 20NOV2002
236   ||  Purpose    : This procedure inserts records into the Award Aims table after
237   ||               checking all the validations sequencially as below:
238   ||               1. Validation of the parameters.
239   ||               2. Deriving values for other parameters
240   ||               3. Checking DB Constraints
241   ||               4. Checking for other validations
242   ||               5. Inserting the record into the table
243   ||  Known limitations, enhancements or remarks :
244   ||  Change History :
245   ||  Who             When            What
246   ||  (reverse chronological order - newest change first)
247   */
248 
249 l_api_name      CONSTANT VARCHAR2(30) := 'create_student_awd_aim';
250 l_api_version   CONSTANT NUMBER := 1.0;
251 l_stdnt_awd_aim_status   VARCHAR2(10) := 'VALID';
252 l_person_id              igs_re_thesis.person_id%TYPE := NULL;
253 l_last_update_date       igs_en_spa_awd_aim.creation_date%TYPE;
254 l_last_updated_by        igs_en_spa_awd_aim.last_updated_by%TYPE;
255 l_last_update_login      igs_en_spa_awd_aim.last_update_login%TYPE;
256 
257 BEGIN
258     -- Standard Start of API savepoint
259     SAVEPOINT   awd_aim_pub;
260     -- Standard call to check for call compatibility.
261     IF NOT FND_API.COMPATIBLE_API_CALL (l_api_version,
262                                         p_api_version,
263                                         l_api_name,
264                                         g_pkg_name ) THEN
265          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
266     END IF;
267 
268     -- Initialize message list if p_init_msg_list is set to TRUE.
269     IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
270          FND_MSG_PUB.INITIALIZE;
271     END IF;
272 
273     --  Initialize API return status to success
274     x_return_status := FND_API.G_RET_STS_SUCCESS;
275 
276     /****** Validating all the parameters available ******/
277     l_stdnt_awd_aim_status := validate_parameters ( p_awd_aim_rec => p_awd_aim_rec );
278 
279     /****** Deriving values for the parameters ******/
280     IF l_stdnt_awd_aim_status <> 'INVALID' THEN
281         -- Calling the function to get the person_id
282         l_person_id := igs_ge_gen_003.get_person_id( p_person_number => p_awd_aim_rec.person_number);
283         -- If person id value returned is NULL then log error message.
284         IF l_person_id IS NULL THEN
285              FND_MESSAGE.SET_NAME ('IGS', 'IGS_GE_INVALID_PERSON_NUMBER');
286              FND_MSG_PUB.ADD;
287              l_stdnt_awd_aim_status := 'INVALID';
288         END IF;
289     END IF;
290 
291     /****** Check for the Database Constraints for the Award Aims record ******/
292     IF l_stdnt_awd_aim_status <> 'INVALID' THEN
293          x_return_status := validate_db_cons (
294                                 p_person_id   => l_person_id ,
295                                 p_awd_aim_rec => p_awd_aim_rec );
296          IF x_return_status <> 'S' THEN
297 	      l_stdnt_awd_aim_status := 'INVALID';
298 	 END IF;
299     END IF;
300 
301     /****** Check the Validation for the Award Aims record ******/
302     IF l_stdnt_awd_aim_status <> 'INVALID' THEN
303          l_stdnt_awd_aim_status := validate_stu_awd_aim (
304                                        p_person_id   => l_person_id,
305                                        p_awd_aim_rec => p_awd_aim_rec);
306     END IF;
307 
308     /****** Insert data into Award Aims table ******/
309     IF l_stdnt_awd_aim_status <> 'INVALID' THEN
310          --Deriving values for the WHO Columns
311          l_last_update_date := SYSDATE;
312 
313          l_last_updated_by := FND_GLOBAL.USER_ID;
314          IF l_last_updated_by IS NULL THEN
315               l_last_updated_by := -1;
316          END IF;
317 
318          l_last_update_login := FND_GLOBAL.LOGIN_ID;
319          IF l_last_update_login IS NULL THEN
320               l_last_update_login := -1;
321          END IF;
322 
323          --insert data into Thesis Details table
324          INSERT INTO igs_en_spa_awd_aim (
325               person_id,
326               course_cd,
327               award_cd,
328               start_dt,
329               end_dt,
330               complete_ind,
331               created_by,
332               creation_date,
333               last_updated_by,
334               last_update_date,
335               last_update_login,
336 	      conferral_date,
337               award_mark       ,
338               award_grade      ,
339               grading_schema_cd,
340               gs_version_number )
341          VALUES (
342               l_person_id,
343               p_awd_aim_rec.program_cd,
344               p_awd_aim_rec.award_cd,
345               TRUNC(p_awd_aim_rec.start_dt),
346               p_awd_aim_rec.end_dt,
347               NVL( p_awd_aim_rec.complete_ind, 'N' ),
348               l_last_updated_by,
349               l_last_update_date,
350               l_last_updated_by,
351               l_last_update_date,
352               l_last_update_login,
353               p_awd_aim_rec.conferral_dt,
354               p_awd_aim_rec.award_mark,
355               p_awd_aim_rec.award_grade,
356               p_awd_aim_rec.grading_schema_cd,
357               p_awd_aim_rec.gs_version_number );
358     END IF;
359 
360     --If l_stdnt_awd_aim_status is INVALID and x_return_status is not 'W' then
361     --make it to 'E' and rollback if any transaction has happened and not commited.
362     --If l_stdnt_awd_aim_status is VALID then x_return_status is 'S'.
363     IF l_stdnt_awd_aim_status = 'INVALID' THEN
364          IF x_return_status <> 'W' THEN
365               x_return_status := FND_API.G_RET_STS_ERROR ;
366          END IF;
367          ROLLBACK TO awd_aim_pub;
368     ELSIF l_stdnt_awd_aim_status = 'VALID' THEN
369          x_return_status := FND_API.G_RET_STS_SUCCESS ;
370          -- Standard check of p_commit.
371          IF FND_API.TO_BOOLEAN( p_commit ) THEN
372              COMMIT WORK;
373          END IF;
374     END IF;
375 
376     -- Standard call to get message count and if count is 1, get message info.
377     FND_MSG_PUB.COUNT_AND_GET ( p_count => x_msg_count,
378                                 p_data  => x_msg_data  );
379 EXCEPTION
380     WHEN FND_API.G_EXC_ERROR THEN
381            ROLLBACK TO awd_aim_pub;
382            x_return_status := FND_API.G_RET_STS_ERROR ;
383            FND_MSG_PUB.COUNT_AND_GET ( p_count => x_msg_count,
384                                        p_data  => x_msg_data );
385     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
386            ROLLBACK TO awd_aim_pub;
387            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
388            FND_MSG_PUB.COUNT_AND_GET ( p_count => x_msg_count,
389                                        p_data  => x_msg_data );
390     WHEN OTHERS THEN
391            ROLLBACK TO awd_aim_pub;
392            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
393            IF FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
394                 FND_MSG_PUB.Add_Exc_Msg ( g_pkg_name,
395                                           l_api_name );
396            END IF;
397            FND_MSG_PUB.COUNT_AND_GET ( p_count => x_msg_count ,
398                                        p_data  => x_msg_data );
399 END create_student_awd_aim;
400 
401 END igs_en_spaa_lgcy_pub;