DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_AD_IMP_024

Source


1 PACKAGE BODY igs_ad_imp_024 AS
2 /* $Header: IGSADB2B.pls 120.4 2006/04/13 05:53:45 stammine ship $ */
3 /***************************Status,Discrepancy Rule, Match Indicators, Error Codes********************/
4 	cst_rule_val_I  CONSTANT VARCHAR2(1) := 'I';
5 	cst_rule_val_E CONSTANT VARCHAR2(1) := 'E';
6 	cst_rule_val_R CONSTANT VARCHAR2(1) := 'R';
7 
8 
9 	cst_mi_val_11 CONSTANT  VARCHAR2(2) := '11';
10 	cst_mi_val_12  CONSTANT VARCHAR2(2) := '12';
11 	cst_mi_val_13  CONSTANT VARCHAR2(2) := '13';
12 	cst_mi_val_14  CONSTANT VARCHAR2(2) := '14';
13 	cst_mi_val_15  CONSTANT VARCHAR2(2) := '15';
14 	cst_mi_val_16  CONSTANT VARCHAR2(2) := '16';
15 	cst_mi_val_17  CONSTANT VARCHAR2(2) := '17';
16         cst_mi_val_18  CONSTANT VARCHAR2(2) := '18';
17 	cst_mi_val_19  CONSTANT VARCHAR2(2) := '19';
18 	cst_mi_val_20  CONSTANT VARCHAR2(2) := '20';
19         cst_mi_val_21  CONSTANT VARCHAR2(2) := '21';
20 	cst_mi_val_22  CONSTANT VARCHAR2(2) := '22';
21 	cst_mi_val_23  CONSTANT VARCHAR2(2) := '23';
22 	cst_mi_val_24  CONSTANT VARCHAR2(2) := '24';
23 	cst_mi_val_25  CONSTANT VARCHAR2(2) := '25';
24         cst_mi_val_27  CONSTANT VARCHAR2(2) := '27';
25 
26 	cst_s_val_1  CONSTANT   VARCHAR2(1) := '1';
27         cst_s_val_2  CONSTANT VARCHAR2(1) := '2';
28 	cst_s_val_3  CONSTANT VARCHAR2(1) := '3';
29 	cst_s_val_4  CONSTANT VARCHAR2(1) := '4';
30 
31        cst_ec_val_E322 CONSTANT VARCHAR2(4) := 'E322';
32        cst_ec_val_E014 CONSTANT VARCHAR2(4) := 'E014';
33        cst_ec_val_NULL CONSTANT VARCHAR2(4)  := NULL;
34 
35        cst_insert  CONSTANT VARCHAR2(6) :=  'INSERT';
36        cst_update CONSTANT VARCHAR2(6) :=  'UPDATE';
37        cst_unique_record  CONSTANT  NUMBER :=  1;
38        l_request_id   NUMBER :=  fnd_global.conc_request_id;
39 /***************************Status,Discrepancy Rule, Match Indicators, Error Codes*******************/
40 
41  PROCEDURE process_term_details(
42 p_interface_run_id  igs_ad_interface_all.interface_run_id%TYPE,
43 p_rule     VARCHAR2,
44 p_enable_log   VARCHAR2)  ;
45 
46 PROCEDURE process_term_unit_details(
47 p_interface_run_id  igs_ad_interface_all.interface_run_id%TYPE,
48 p_rule     VARCHAR2,
49 p_enable_log   VARCHAR2) ;
50 
51  PROCEDURE prc_trscrpt(
52 p_interface_run_id  igs_ad_interface_all.interface_run_id%TYPE,
53 p_rule     VARCHAR2,
54 p_enable_log   VARCHAR2)  AS
55 
56    l_status           VARCHAR2(5);
57    l_industry         VARCHAR2(5);
58    l_schema           VARCHAR2(30);
59     l_return           BOOLEAN;
60 
61    l_msg_at_index   NUMBER := 0;
62    l_return_status   VARCHAR2(1);
63    l_msg_count      NUMBER ;
64    l_msg_data       VARCHAR2(2000);
65    l_hash_msg_name_text_type_tab   igs_ad_gen_016.g_msg_name_text_type_table;
66 
67 
68 CURSOR trans_cur(cp_start_int_id  igs_ad_txcpt_int.interface_transcript_id%TYPE,	--ARVSRINI--
69 		 cp_end_int_id	  igs_ad_txcpt_int.interface_transcript_id%TYPE) IS	--ARVSRINI--
70      SELECT  cst_insert dmlmode, trans.rowid,  trans.*
71      FROM igs_ad_txcpt_int  trans
72      WHERE interface_run_id = p_interface_run_id
73      AND  trans.status = '2'
74      AND (          NOT EXISTS (SELECT 1
75                                             FROM IGS_AD_TRANSCRIPT  trans_oss
76                                            WHERE  education_id = trans.education_id
77                                             AND TRUNC(date_of_issue) = TRUNC(trans.date_of_issue) )
78                   OR ( p_rule = 'R'  AND trans.match_ind IN ('16', '25') )
79             )
80       AND UPDATE_TRANSCRIPT_ID IS NULL
81       AND interface_transcript_id BETWEEN cp_start_int_id AND cp_end_int_id		--ARVSRINI--
82      UNION ALL
83      SELECT  cst_update dmlmode, trans.rowid, trans.*
84      FROM igs_ad_txcpt_int  trans
85      WHERE interface_run_id = p_interface_run_id
86      AND  status = '2'
87      AND (       p_rule = 'I'  OR (p_rule = 'R' AND trans.match_ind = '21'))
88      AND interface_transcript_id BETWEEN cp_start_int_id AND cp_end_int_id		--ARVSRINI--
89      AND ( EXISTS (SELECT 1 FROM IGS_AD_TRANSCRIPT  trans_oss
90                                            WHERE education_id = trans.education_id
91                                             AND TRUNC(date_of_issue) = TRUNC(trans.date_of_issue)
92                         )
93                OR UPDATE_TRANSCRIPT_ID IS NOT NULL
94             );
95 
96     CURSOR  c_dup_cur(trans_cur_rec  trans_cur%ROWTYPE) IS
97     SELECT
98        trans_oss.rowid, trans_oss.*
99     FROM
100 	IGS_AD_TRANSCRIPT trans_oss
101     WHERE  ( transcript_id = trans_cur_rec.update_transcript_id
102                   AND trans_cur_rec.update_transcript_id IS NOT NULL)
103      OR ( trans_cur_rec.update_transcript_id IS  NULL
104           AND education_id = trans_cur_rec.education_id
105           AND TRUNC(date_of_issue) = TRUNC(trans_cur_rec.date_of_issue)
106          ) ;
107 
108     l_maxint	NUMBER(15);
109     l_minint	NUMBER(15);
110 
111 
112     dup_cur_rec   c_dup_cur%ROWTYPE;
113     l_prog_label  VARCHAR2(100) := 'igs.plsql.igs_ad_imp_024.prc_trscrpt';
114     l_label  VARCHAR2(1000) ;
115     l_debug_str VARCHAR2(1000) ;
116     l_processed_records NUMBER(5) ;
117     l_count_interface_txpt_id NUMBER;
118     l_total_records_prcessed NUMBER;
119 
120 
121  PROCEDURE create_new_transcript_details(p_trans_record IN OUT NOCOPY trans_cur%ROWTYPE)
122    AS
123  --------------------------------------------------------------------------
124  --  Created By : pbondugu
125  --  Date Created On : 2003/11/22
126  --  Purpose:
127  --  Know limitations, enhancements or remarks
128  --  Change History
129  --  Who             When            What
130  --  (reverse chronological order - newest change first)
131   --------------------------------------------------------------------------
132     l_rowid VARCHAR2(25);
133    l_var VARCHAR2(25);
134    l_validation_status  NUMBER;
135    l_err_code VARCHAR2(25);
136    l_transcript_id igs_ad_txcpt_int.transcript_id%TYPE;
137    l_error_code VARCHAR2(4) := NULL;
138    l_error_text VARCHAR2(2000):= NULL;
139 
140     BEGIN
141      l_transcript_id := NULL;
142       BEGIN
143          IF  NVL(p_trans_record.override_ind, 'N')  = 'N'  THEN
144             IF p_trans_record.class_size > 0  AND p_trans_record.rank_in_class > 0 THEN
145                 p_trans_record.percentile_rank := ROUND( ((p_trans_record.class_size - p_trans_record.rank_in_class)/p_trans_record.class_size)*100) ;
146                 p_trans_record.decile_rank :=  11 - CEIL(p_trans_record.percentile_rank/10)  ;
147                 p_trans_record.quartile_rank  :=  5 - CEIL(p_trans_record.percentile_rank/25) ;
148                 p_trans_record.quintile_rank  :=  6 - CEIL(p_trans_record.percentile_rank/20)  ;
149             ELSE
150                 p_trans_record.percentile_rank := NULL;
151                 p_trans_record.decile_rank :=  NULL;
152                 p_trans_record.quartile_rank  :=  NULL;
153                 p_trans_record.quintile_rank  :=  NULL;
154             END IF;
155          END IF;
156         l_msg_at_index := igs_ge_msg_stack.count_msg;
157         SAVEPOINT before_create_transcript;
158         igs_ad_transcript_pkg.insert_row(
159                                      x_rowid			=> l_rowid,
160 				     x_quintile_rank		=> p_trans_record.quintile_rank,
161 				     x_percentile_rank		=> p_trans_record.percentile_rank,
162 				     x_transcript_id		=> l_transcript_id,
163 				     x_education_id		=> p_trans_record.education_id,
164 				     x_transcript_status	=> p_trans_record.transcript_status,
165 				     x_transcript_source	=> p_trans_record.transcript_source,
166 				     x_date_of_receipt		=> TRUNC(p_trans_record.date_of_receipt),
167 				     x_entered_gpa		=> p_trans_record.entered_gpa,
168 				     x_entered_gs_id		=> p_trans_record.entered_gs_id,
169 				     x_conv_gpa			=> p_trans_record.conv_gpa,
170 				     x_conv_gs_id		=> p_trans_record.conv_gs_id,
171 				     x_term_type		=> p_trans_record.term_type,
172 				     x_rank_in_class		=> p_trans_record.rank_in_class,
173 				     x_class_size		=> p_trans_record.class_size,
174 				     x_approximate_rank		=> p_trans_record.approximate_rank,
175 				     x_weighted_rank		=> p_trans_record.weighted_rank,
176 				     x_decile_rank		=> p_trans_record.decile_rank,
177 				     x_quartile_rank		=> p_trans_record.quartile_rank,
178 				     x_transcript_type		=> p_trans_record.transcript_type,
179 				     x_mode			=> 'R',
180 				     x_date_of_issue		=> TRUNC(p_trans_record.date_of_issue),
181                                      X_OVERRIDE                =>   NVL(p_trans_record.override_ind, 'N'),
182                                      X_OVERRIDE_ID           =>    FND_GLOBAL.USER_ID,
183                                      X_OVERRIDE_DATE      =>   TRUNC(SYSDATE)
184                       	         );
185         UPDATE igs_ad_txcpt_int
186           SET status = cst_s_val_1,
187               error_code = cst_ec_val_NULL,
188               transcript_id = l_transcript_id,
189               match_ind = DECODE (
190                                        p_trans_record.match_ind,
191                                               NULL, cst_mi_val_11,
192                                        match_ind)
193           WHERE interface_transcript_id = p_trans_record.interface_transcript_id;
194          igs_ad_wf_001.transcript_entrd_event(p_trans_record.person_id, p_trans_record.education_id, l_transcript_id);
195 
196       EXCEPTION
197       WHEN OTHERS THEN
198              ROLLBACK TO before_create_transcript;
199                igs_ad_gen_016.extract_msg_from_stack (
200                           p_msg_at_index                => l_msg_at_index,
201                           p_return_status               => l_return_status,
202                           p_msg_count                   => l_msg_count,
203                           p_msg_data                    => l_msg_data,
204                           p_hash_msg_name_text_type_tab => l_hash_msg_name_text_type_tab);
205                IF l_hash_msg_name_text_type_tab(l_msg_count-1).name <>  'ORA'  THEN
206                    l_error_text := l_msg_data;
207                    l_error_code := 'E322';
208 
209                    IF p_enable_log = 'Y' THEN
210                        igs_ad_imp_001.logerrormessage(p_trans_record.interface_transcript_id,l_msg_data,'IGS_AD_TXCPT_INT');
211                    END IF;
212                ELSE
213                     l_error_text :=  igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E518', 8405) ;
214                     l_error_code := 'E518';
215                     IF fnd_log.test(fnd_log.level_exception,l_prog_label) THEN
216 
217 		          l_label :='igs.plsql.igs_ad_imp_024.create_new_transcript_details.exception '||l_msg_data;
218 
219 			  fnd_message.set_name('IGS','IGS_PE_IMP_ERROR');
220 			  fnd_message.set_token('INTERFACE_ID',p_trans_record.interface_transcript_id);
221 			  fnd_message.set_token('ERROR_CD','E322');
222 
223 		          l_debug_str :=  fnd_message.get;
224 
225                           fnd_log.string_with_context( fnd_log.level_exception,
226 								  l_label,
227 								  l_debug_str, NULL,
228 								  NULL,NULL,NULL,NULL,TO_CHAR(l_request_id));
229                       END IF;
230 
231                END IF;
232            UPDATE igs_ad_txcpt_int
233             SET status = cst_s_val_3,
234             error_code = l_error_code,
235             error_text = l_error_text ,
236             match_ind = DECODE (
237                                        p_trans_record.match_ind,
238                                               NULL, cst_mi_val_11,
239                                        match_ind)
240             WHERE interface_transcript_id = p_trans_record.interface_transcript_id;
241       END;
242   END create_new_transcript_details;
243 
244    PROCEDURE update_transcript_details(p_trans_record  IN OUT NOCOPY trans_cur%ROWTYPE, dup_cur_rec c_dup_cur%ROWTYPE  )
245      AS
246    --------------------------------------------------------------------------
247    --  Created By : pbondugu
248    --  Date Created On : 2003/11/22
249    --  Purpose:
250    --  Know limitations, enhancements or remarks
251    --  Change History
252    --  Who             When            What
253    --  (reverse chronological order - newest change first)
254     --------------------------------------------------------------------------
255       l_rowid VARCHAR2(25);
256      l_var VARCHAR2(25);
257      l_validation_status  NUMBER;
258      l_err_code VARCHAR2(25);
259      l_transcript_id igs_ad_txcpt_int.transcript_id%TYPE;
260      l_msg_at_index   NUMBER := 0;
261      l_return_status   VARCHAR2(1);
262      l_msg_count      NUMBER ;
263      l_msg_data       VARCHAR2(2000);
264      l_hash_msg_name_text_type_tab   igs_ad_gen_016.g_msg_name_text_type_table;
265    l_error_code VARCHAR2(4) := NULL;
266    l_error_text VARCHAR2(2000) := NULL;
267 
268 
269       BEGIN
270        l_transcript_id := NULL;
271         BEGIN
272          IF  NVL(p_trans_record.override_ind, 'N')  = 'N'  THEN
273             IF p_trans_record.class_size > 0  AND p_trans_record.rank_in_class > 0 THEN
274                 p_trans_record.percentile_rank := ROUND( ((p_trans_record.class_size - p_trans_record.rank_in_class)/p_trans_record.class_size)*100) ;
275                 p_trans_record.decile_rank :=  11 - CEIL(p_trans_record.percentile_rank/10)  ;
276                 p_trans_record.quartile_rank  :=  5 - CEIL(p_trans_record.percentile_rank/25) ;
277                 p_trans_record.quintile_rank  :=  6 - CEIL(p_trans_record.percentile_rank/20)  ;
278            ELSE
279                 p_trans_record.percentile_rank := NULL;
280                 p_trans_record.decile_rank :=  NULL;
281                 p_trans_record.quartile_rank  :=  NULL;
282                 p_trans_record.quintile_rank  :=  NULL;
283             END IF;
284          END IF;
285         l_msg_at_index := igs_ge_msg_stack.count_msg;
286          SAVEPOINT before_update_transcript;
287           igs_ad_transcript_pkg.update_row(
288                 X_ROWID            => dup_cur_rec.rowid,
289                 X_QUINTILE_RANK    =>NVL(p_trans_record.QUINTILE_RANK, dup_cur_rec.QUINTILE_RANK),
290                 X_PERCENTILE_RANK  => NVL(p_trans_record.PERCENTILE_RANK, dup_cur_rec.PERCENTILE_RANK),
291                 X_TRANSCRIPT_ID    =>dup_cur_rec.transcript_id ,
292                 X_EDUCATION_ID     => p_trans_record.EDUCATION_ID         ,
293                 X_TRANSCRIPT_STATUS=> p_trans_record.TRANSCRIPT_STATUS    ,
294                 X_TRANSCRIPT_SOURCE=> p_trans_record.TRANSCRIPT_SOURCE    ,
295                 X_DATE_OF_RECEIPT  => TRUNC(NVL(p_trans_record.DATE_OF_RECEIPT, dup_cur_rec.DATE_OF_RECEIPT)),
296                 X_ENTERED_GPA      => NVL(p_trans_record.ENTERED_GPA, dup_cur_rec.ENTERED_GPA),
297                 X_ENTERED_GS_ID    => p_trans_record.ENTERED_GS_ID        ,
298                   X_CONV_GPA         => NVL(p_trans_record.CONV_GPA, dup_cur_rec.CONV_GPA),
299                 X_CONV_GS_ID       => p_trans_record.CONV_GS_ID           ,
300                 X_TERM_TYPE        => p_trans_record.TERM_TYPE            ,
301                 X_RANK_IN_CLASS    => NVL(p_trans_record.RANK_IN_CLASS, dup_cur_rec.RANK_IN_CLASS),
302                 X_CLASS_SIZE       => NVL(p_trans_record.CLASS_SIZE, dup_cur_rec.CLASS_SIZE),
303                 X_APPROXIMATE_RANK => NVL(p_trans_record.APPROXIMATE_RANK, dup_cur_rec.APPROXIMATE_RANK),
304                 X_WEIGHTED_RANK    => NVL(p_trans_record.WEIGHTED_RANK, dup_cur_rec.WEIGHTED_RANK),
305                 X_DECILE_RANK      => NVL(p_trans_record.DECILE_RANK, dup_cur_rec.DECILE_RANK),
306                 X_QUARTILE_RANK    => NVL(p_trans_record.QUARTILE_RANK, dup_cur_rec.QUARTILE_RANK),
307                 X_TRANSCRIPT_TYPE  => NVL(p_trans_record.TRANSCRIPT_TYPE, dup_cur_rec.TRANSCRIPT_TYPE),
308               X_DATE_OF_ISSUE	 => TRUNC(NVL(p_trans_record.DATE_OF_ISSUE, dup_cur_rec.DATE_OF_ISSUE)),
309                X_OVERRIDE                =>   NVL(p_trans_record.override_ind, 'N'),
310                X_OVERRIDE_ID           =>    FND_GLOBAL.USER_ID,
311                X_OVERRIDE_DATE      =>   TRUNC(SYSDATE)
312 
313                   );
314 
315           UPDATE igs_ad_txcpt_int
316             SET status = cst_s_val_1,
317                 error_code = cst_ec_val_NULL,
318                 transcript_id = dup_cur_rec.transcript_id,
319                 match_ind = DECODE (
320                                        p_trans_record.match_ind,
321                                               NULL, cst_mi_val_18,
322                                        match_ind)
323             WHERE interface_transcript_id = p_trans_record.interface_transcript_id;
324 
325 
326 
327         EXCEPTION
328         WHEN OTHERS THEN
329         ROLLBACK TO before_update_transcript;
330                   igs_ad_gen_016.extract_msg_from_stack (
331                             p_msg_at_index                => l_msg_at_index,
332                             p_return_status               => l_return_status,
333                             p_msg_count                   => l_msg_count,
334                             p_msg_data                    => l_msg_data,
335                             p_hash_msg_name_text_type_tab => l_hash_msg_name_text_type_tab);
336                  IF l_hash_msg_name_text_type_tab(l_msg_count-1).name <>  'ORA'  THEN
337                      l_error_text := l_msg_data;
338                      l_error_code := 'E014';
339 
340                      IF p_enable_log = 'Y' THEN
341                          igs_ad_imp_001.logerrormessage(p_trans_record.interface_transcript_id,l_msg_data,'IGS_AD_TXCPT_INT');
342                      END IF;
343                  ELSE
344                       l_error_text :=  igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E518', 8405);
345                       l_error_code := 'E518';
346                       IF fnd_log.test(fnd_log.level_exception,l_prog_label) THEN
347 
348    	          l_label := 'igs.plsql.igs_ad_imp_024.create_new_transcript_details.exception '||l_msg_data;
349 
350    		  fnd_message.set_name('IGS','IGS_PE_IMP_ERROR');
351    		  fnd_message.set_token('INTERFACE_ID',p_trans_record.interface_transcript_id);
352    		  fnd_message.set_token('ERROR_CD','E014');
353 
354    	          l_debug_str :=  fnd_message.get;
355 
356                             fnd_log.string_with_context( fnd_log.level_exception,
357    							  l_label,
358    							  l_debug_str, NULL,
359    							  NULL,NULL,NULL,NULL,TO_CHAR(l_request_id));
360                         END IF;
361 
362                  END IF;
363              UPDATE igs_ad_txcpt_int
364               SET status = cst_s_val_3,
365               error_code = l_error_code,
366               error_text = l_error_text ,
367               match_ind = DECODE (
368                                        p_trans_record.match_ind,
369                                               NULL, cst_mi_val_18,
370                                        match_ind)
371               WHERE interface_transcript_id = p_trans_record.interface_transcript_id;
372         END;
373     END update_transcript_details;
374 
375 
376 
377 BEGIN
378    --If given invalid update transcript ID then error out.
379      UPDATE IGS_AD_TXCPT_INT trans
380      SET
381        status = '3',  error_code =  'E707',
382        error_text =  igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E707', 8405)
383      WHERE  interface_run_id = p_interface_run_id
384           AND status = '2'
385        AND trans.update_transcript_id IS NOT NULL
386           AND NOT EXISTS ( SELECT 1 FROM IGS_AD_TRANSCRIPT
387                                      WHERE transcript_id = NVL(trans.update_transcript_id,transcript_id)
388                                    ) ;
389      COMMIT;
390 
391      -- jchin - bug 4629226 Put an error in the interface table if the transcript source is external.
392 
393      UPDATE IGS_AD_TXCPT_INT trans
394      SET
395        status = '3',  error_code =  'E334',
396        error_text =  igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E334', 8405)
397        WHERE interface_run_id = p_interface_run_id
398        AND status = '2'
399        AND trans.transcript_source IS NOT NULL
400        AND EXISTS ( SELECT 1 FROM igs_ad_code_classes_v code
401                     WHERE code.system_status = 'THIRD_PARTY_TRANSFER_EVAL'
402                     AND code.class_type_code = 'ADM_CODE_CLASSES'
403                     AND code.class = 'TRANSCRIPT_SOURCE'
404                     AND code.code_id = trans.transcript_source);
405      COMMIT;
406 
407        --	1. Set STATUS to 3 for interface records with RULE = E or I and MATCH IND is not null and not '15'
408      IF p_rule IN ('E', 'I')  THEN
409         UPDATE igs_ad_txcpt_int
410           SET
411           status = '3'
412           , error_code = 'E700'
413           , error_text =  igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E700', 8405)
414           WHERE interface_run_id = p_interface_run_id
415           AND status = '2'
416          AND NVL (match_ind, '15') <> '15';
417      END IF;
418      COMMIT;
419 
420      --	2. Set STATUS to 1 for interface records with RULE = R and MATCH IND = 17,18,19,22,23,24,27
421      IF p_rule = 'R'  THEN
422         UPDATE igs_ad_txcpt_int
423         SET
424         status = '1',  error_code = NULL
425         WHERE interface_run_id = p_interface_run_id
426         AND status = '2'
427         AND match_ind IN ('17', '18', '19', '22', '23', '24', '27');
428      END IF;
429      COMMIT;
430 
431 --  3.	Set STATUS to 3 for interface records with multiple matching duplicate system records for RULE = I
432    IF  p_rule = 'I' THEN
433      UPDATE igs_ad_txcpt_int trans
434      SET
435      status = '3'
436      , match_ind = '13'
437      WHERE interface_run_id = p_interface_run_id
438      AND status = '2'
439      AND UPDATE_TRANSCRIPT_ID  IS NULL
440      AND 1  <  ( SELECT COUNT(*)
441                         FROM IGS_AD_TRANSCRIPT  trans_oss
442                          WHERE  education_id = trans.education_id
443                          AND TRUNC(date_of_issue) = TRUNC(trans.date_of_issue)
444                    );
445 
446      END IF;
447     COMMIT;
448 --  4.	Set STATUS to 3 for interface records with multiple matching duplicate system record for RULE = R
449 --   and either MATCH IND IN (15, 21) OR IS NULL
450  IF  p_rule = 'R' THEN
451     UPDATE igs_ad_txcpt_int  trans
452     SET
453     status = '3'
454     , match_ind = '13'
455     WHERE interface_run_id = p_interface_run_id
456     AND status = '2'
457     AND UPDATE_TRANSCRIPT_ID  IS NULL
458     AND NVL(match_ind, '15')  IN ('15', '21')
459     AND 1  <  ( SELECT COUNT(*)
460                         FROM IGS_AD_TRANSCRIPT  trans_oss
461                          WHERE  education_id = trans.education_id
462                          AND TRUNC(date_of_issue) = TRUNC(trans.date_of_issue)
463                    );
464 
465  END IF;
466  COMMIT;
467     -- 5. Set STATUS to 1 and MATCH IND to 19 for interface records with RULE = E matching OSS record(s)
468   IF  p_rule = 'E' THEN
469  --If multiple exact matches are found and child records are present then error out
470      UPDATE igs_ad_txcpt_int  trans
471       SET
472           status = '1'
473          , match_ind = '19'
474          , transcript_id = update_transcript_id
475      WHERE interface_run_id = p_interface_run_id
476      AND status = '2'
477      AND  update_transcript_id IS NOT NULL;
478 
479       UPDATE igs_ad_txcpt_int  trans
480       SET
481          status = '3'
482         , match_ind = '19'
483         ,error_code = 'E708'
484        , error_text =  igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E708', 8405)
485      WHERE interface_run_id = p_interface_run_id
486      AND status = '2'
487      AND EXISTS( SELECT 1 FROM IGS_AD_TRMDT_INT term
488                          WHERE term.interface_transcript_id = trans.interface_transcript_id
489                          AND status = '2')
490      AND 1 < (  SELECT count(*)  FROM igs_ad_transcript  trans_oss
491                          WHERE  education_id = trans.education_id
492                          AND TRUNC(date_of_issue) = TRUNC(trans.date_of_issue)
493                          );
494      COMMIT;
495       UPDATE igs_ad_txcpt_int  trans
496       SET
497          status = '1'
498         , match_ind = '19'
499         , transcript_id = ( SELECT transcript_id FROM IGS_AD_TRANSCRIPT  trans_oss
500                          WHERE  education_id = trans.education_id
501                          AND TRUNC(date_of_issue) = TRUNC(trans.date_of_issue)
502                          AND rownum <= 1)
503       WHERE interface_run_id = p_interface_run_id
504      AND status = '2'
505      AND EXISTS (  SELECT 1 FROM IGS_AD_TRANSCRIPT  trans_oss
506                          WHERE  education_id = trans.education_id
507                          AND TRUNC(date_of_issue) = TRUNC(trans.date_of_issue)
508                          );
509   END IF;
510 COMMIT;
511 
512 /**********************************************************************************
513 Create / Update the OSS record after validating successfully the interface record
514 Create
515     If RULE I (match indicator will be 15 or NULL by now no need to check) and matching system record not found OR
516     RULE = R and MATCH IND = 16, 25
517 Update
518     If RULE = I (match indicator will be 15 or NULL by now no need to check) OR
519     RULE = R and MATCH IND = 21
520 
521 Selecting together the interface records for INSERT / UPDATE with DMLMODE identifying the DML operation.
522 This is done to have one code section for record validation, exception handling and interface table update.
523 This avoids call to separate PLSQL blocks, tuning performance on stack maintenance during the process.
524 
525 **********************************************************************************/
526 
527 l_total_records_prcessed := 0;
528 
529   SELECT COUNT(interface_transcript_id) INTO l_count_interface_txpt_id
530   FROM igs_ad_txcpt_int
531   WHERE interface_run_id = p_interface_run_id
532   AND status =2 ;
533 	LOOP
534   EXIT WHEN l_total_records_prcessed >= l_count_interface_txpt_id;
535   SELECT
536        MIN(interface_transcript_id) , MAX(interface_transcript_id)
537    INTO l_minint , l_maxint
538    FROM igs_ad_txcpt_int
539    WHERE interface_run_id = p_interface_run_id
540    AND status =2
541    AND rownum < =100;
542 
543 	FOR trans_cur_rec IN trans_cur(l_minint,l_maxint)					--arvsrini
544 	LOOP
545 
546 	       IF trans_cur_rec.dmlmode =  cst_insert  THEN
547 	           create_new_transcript_details(trans_cur_rec);
548 	       ELSIF  trans_cur_rec.dmlmode = cst_update THEN
549 	          OPEN c_dup_cur(trans_cur_rec);
550 	          FETCH c_dup_cur INTO dup_cur_rec;
551 	          CLOSE c_dup_cur;
552 	           update_transcript_details(trans_cur_rec, dup_cur_rec);
553 	       END IF;
554               l_total_records_prcessed := l_total_records_prcessed + 1;
555 
556 	 END LOOP;
557 	         COMMIT;
558 
559 
560 
561 END LOOP;
562 
563 
564  /*Set STATUS to 1 and MATCH IND to 23 for interface records with RULE = R matching OSS record(s) in
565    ALL updateable column values, if column nullification is not allowed then the 2 DECODE should be replaced by a single NVL*/
566      IF p_rule = 'R'  THEN
567        UPDATE igs_ad_txcpt_int  trans
568        SET
569          status = '1'
570          , match_ind = '23'
571        WHERE interface_run_id = p_interface_run_id
572        AND status = '2'
573        AND NVL (match_ind, '15') = '15'
574        AND EXISTS (  SELECT 1 FROM IGS_AD_TRANSCRIPT  trans_oss
575                          WHERE education_id = trans.education_id
576                          AND TRUNC(date_of_issue) = TRUNC(trans.date_of_issue)
577                          AND transcript_type = trans.transcript_type
578                          AND TRANSCRIPT_STATUS  =  trans.TRANSCRIPT_STATUS
579                          AND  TRANSCRIPT_SOURCE   = trans.TRANSCRIPT_SOURCE
580                          AND  TRUNC(NVL(DATE_OF_RECEIPT,IGS_GE_DATE.IGSDATE('1000/01/01')))
581                                     = TRUNC( NVL( NVL(trans.DATE_OF_RECEIPT, DATE_OF_RECEIPT ) , IGS_GE_DATE.IGSDATE('1000/01/01')))
582                          AND  NVL(ENTERED_GPA,'1')       = NVL(NVL(trans.ENTERED_GPA, ENTERED_GPA),'X')
583                          AND  NVL(ENTERED_GS_ID,-1)      = NVL(NVL(trans.ENTERED_GS_ID,ENTERED_GS_ID),-1)
584                          AND  NVL(CONV_GPA,'X')          = NVL(NVL(trans.CONV_GPA,CONV_GPA), 'X')
585                          AND  NVL(CONV_GS_ID,-1)         = NVL(NVL(trans.CONV_GS_ID,CONV_GS_ID), -1)
586                          AND  NVL(TERM_TYPE,'X')         = NVL(NVL(trans.TERM_TYPE,TERM_TYPE) , 'X')
587                          AND  NVL(RANK_IN_CLASS,-1)      = NVL(NVL(trans.RANK_IN_CLASS,RANK_IN_CLASS), -1)
588                          AND  NVL(CLASS_SIZE,-1)         = NVL(NVL(trans.CLASS_SIZE, CLASS_SIZE), -1)
589                          AND  NVL(APPROXIMATE_RANK,'X')  = NVL(NVL(trans.APPROXIMATE_RANK, APPROXIMATE_RANK), 'X')
590                          AND  NVL(WEIGHTED_RANK,'X')     = NVL(NVL(trans.DECILE_RANK, WEIGHTED_RANK), -1)
591                          AND  NVL(QUARTILE_RANK,-1)      = NVL(NVL(trans.QUARTILE_RANK, QUARTILE_RANK), -1)
592                          AND  NVL(QUINTILE_RANK,-1)      = NVL(NVL(trans.QUINTILE_RANK, QUINTILE_RANK), -1)
593                          AND  NVL(PERCENTILE_RANK,-1)    = NVL(NVL(trans.PERCENTILE_RANK, PERCENTILE_RANK ), -1)
594                          AND  NVL(TRANSCRIPT_TYPE,'X')   = NVL(NVL(trans.TRANSCRIPT_TYPE,TRANSCRIPT_TYPE), 'X')
595                          AND  NVL(DECILE_RANK, -1)    =        NVL(NVL(trans.DECILE_RANK,DECILE_RANK),  -1)
596                          AND  NVL( OVERRIDE_IND, 'X' ) =   NVL(NVL(trans.OVERRIDE_IND, OVERRIDE_IND), 'X' )
597                 );
598      END IF;
599 
600  --Set STATUS to 3 and MATCH IND = 20 for interface records with RULE = R and
601  --MATCH IND <> 21, 25, ones failed above discrepancy check
602      IF p_rule = 'R'  THEN
603         UPDATE igs_ad_txcpt_int  trans
604         SET
605         status = '3'
606         , match_ind = '20'
607         , dup_transcript_id = trans.update_transcript_id
608         WHERE trans.interface_run_id = p_interface_run_id
609         AND status = '2'
610         AND update_transcript_id IS NOT NULL;
611      COMMIT;
612         UPDATE igs_ad_txcpt_int  trans
613         SET
614         status = '3'
615         , match_ind = '20'
616         , dup_transcript_id= ( SELECT transcript_id  FROM IGS_AD_TRANSCRIPT  trans_oss
617                          WHERE  education_id = trans.education_id
618                          AND TRUNC(date_of_issue) = TRUNC(trans.date_of_issue))
619         WHERE interface_run_id = p_interface_run_id
620         AND status = '2'
621         AND NVL (match_ind, '15') = '15'
622         AND EXISTS (SELECT 1 FROM IGS_AD_TRANSCRIPT  trans_oss
623                          WHERE  education_id = trans.education_id
624                          AND TRUNC(date_of_issue) = TRUNC(trans.date_of_issue));
625 
626      END IF;
627      COMMIT;
628 
629 
630   --Set STATUS to 3 for interface records with RULE = R and invalid MATCH IND
631      IF p_rule = 'R'  THEN
632         UPDATE igs_ad_txcpt_int  trans
633         SET
634         status = '3'
635         , error_code = 'E700'
636         , error_text =  igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E700', 8405)
637         WHERE interface_run_id = p_interface_run_id
638         AND status = '2'
639         AND match_ind IS NOT NULL;
640      END IF;
641      COMMIT;
642 
643      --Term and units are not defined as independent categoies
644   UPDATE igs_ad_trmdt_int a
645       SET    interface_run_id = p_interface_run_id,
646              (person_id,education_id, transcript_id)
647              = (SELECT person_id,education_id, NVL(update_transcript_id, transcript_id)
648                 FROM   igs_ad_txcpt_int
649                 WHERE  interface_transcript_id = a.interface_transcript_id)
650       WHERE  status IN ('1','2','4')
651       AND    interface_transcript_id IN (SELECT interface_transcript_id
652                                          FROM   igs_ad_txcpt_int
653                                          WHERE  interface_run_id = p_interface_run_id
654                                          AND    status IN ('1','4'));
655 
656  -- If record failed only due to child record failure
657  -- then set status back to 1 and nullify error code/text
658       UPDATE igs_ad_trmdt_int
659       SET    error_code = NULL,
660              error_text = NULL,
661              status = '1'
662       WHERE  interface_run_id = p_interface_run_id
663       AND    error_code = 'E347'
664       AND    status = '4';
665 
666     -- To fetch table schema name for gather statistics
667     l_return := fnd_installation.get_app_info('IGS', l_status, l_industry, l_schema);
668 
669 -- Gather statistics of the table
670    FND_STATS.GATHER_TABLE_STATS(ownname => l_schema,
671                                tabname => 'IGS_AD_TRMDT_INT',
672                                 cascade => TRUE);
673 
674 process_term_details (p_interface_run_id, p_rule,p_enable_log);
675 
676 --Term and units are not defined as independent categoies
677 UPDATE igs_ad_tundt_int a
678     SET    interface_run_id = p_interface_run_id,
679            (person_id,education_id , transcript_id, term_details_id )
680              = (SELECT person_id,education_id ,
681                      transcript_id, term_details_id
682                 FROM   igs_ad_trmdt_int
683                 WHERE  interface_term_dtls_id = a.interface_term_dtls_id)
684       WHERE  status IN ('1','2','4')
685       AND    interface_term_dtls_id IN (SELECT interface_term_dtls_id
686                                         FROM   igs_ad_trmdt_int
687                                         WHERE  interface_run_id = p_interface_run_id
688                                         AND    status IN ('1','4'));
689 
690 -- Gather statistics of the table
691    FND_STATS.GATHER_TABLE_STATS(ownname => l_schema,
692                                    tabname => 'IGS_AD_TUNDT_INT',
693                                    cascade => TRUE);
694 
695 process_term_unit_details (p_interface_run_id, p_rule,p_enable_log);
696 END  prc_trscrpt;
697 
698 
699 
700 
701 
702 PROCEDURE process_term_details(
703 p_interface_run_id  igs_ad_interface_all.interface_run_id%TYPE,
704 p_rule     VARCHAR2,
705 p_enable_log   VARCHAR2)  AS
706 
707 CURSOR term_cur (cp_start_int_id  igs_ad_trmdt_int.INTERFACE_TERM_DTLS_ID%TYPE,	--ARVSRINI--
708 		 cp_end_int_id	  igs_ad_trmdt_int.INTERFACE_TERM_DTLS_ID%TYPE) IS	--ARVSRINI--IS
709      SELECT  cst_insert dmlmode, term.rowid,  term.*
710      FROM igs_ad_trmdt_int  term
711      WHERE interface_run_id = p_interface_run_id
712      AND  term.status = '2'
713      AND INTERFACE_TERM_DTLS_ID BETWEEN cp_start_int_id AND cp_end_int_id
714      AND  (NOT EXISTS (SELECT 1 FROM IGS_AD_TERM_DETAILS term_oss
715                                           WHERE transcript_id  = term.transcript_id
716                                            AND  term = term.term
717                                            AND  TRUNC(start_Date) = TRUNC(term.start_Date)
718                                            AND  TRUNC(end_Date) = TRUNC(term.end_Date) )
719                   OR ( p_rule = 'R'  AND term.match_ind IN ('16', '25') )
720               )
721      UNION ALL
722      SELECT  cst_update dmlmode, term.rowid,  term.*
723      FROM igs_ad_trmdt_int  term
724      WHERE interface_run_id = p_interface_run_id
725      AND  status = '2'
726      AND INTERFACE_TERM_DTLS_ID BETWEEN cp_start_int_id AND cp_end_int_id
727      AND (       p_rule = 'I'  OR (p_rule = 'R' AND term.match_ind = cst_mi_val_21))
728      AND EXISTS (SELECT 1 FROM IGS_AD_TERM_DETAILS term_oss
729                                           WHERE transcript_id  = term.transcript_id
730                                            AND  term = term.term
731                                            AND  TRUNC(start_Date) = TRUNC(term.start_Date)
732                                            AND  TRUNC(end_Date) = TRUNC(term.end_Date)
733                           );
734 
735    CURSOR  c_dup_cur(term_cur_rec  term_cur%ROWTYPE) IS
736     SELECT
737        term_oss.rowid, term_oss.*
738     FROM
739 	IGS_AD_TERM_DETAILS term_oss
740     WHERE transcript_id  = term_cur_rec.transcript_id
741     AND  term = term_cur_rec.term
742     AND  TRUNC(start_Date) = TRUNC(term_cur_rec.start_Date)
743     AND  TRUNC(end_Date) = TRUNC(term_cur_rec.end_Date) ;
744 
745    l_maxint	NUMBER(15);
746    l_minint	NUMBER(15);
747 
748 
749     dup_cur_rec   c_dup_cur%ROWTYPE;
750     l_prog_label  VARCHAR2(100) := 'igs.plsql.igs_ad_imp_024.process_term_details';
751     l_label  VARCHAR2(1000) ;
752     l_debug_str VARCHAR2(1000) ;
753     l_processed_records NUMBER(5) ;
754 
755     l_count_interface_trmdtls_id NUMBER;
756     l_total_records_prcessed NUMBER;
757 
758  PROCEDURE create_term_details(p_term_dtls_record term_cur%ROWTYPE)
759    AS
760  --------------------------------------------------------------------------
761  --  Created By : rboddu
762  --  Date Created On : 2001/07/27
763  --  Purpose:
764  --  Know limitations, enhancements or remarks
765  --  Change History
766  --  Who             When            What
767  --  (reverse chronological order - newest change first)
768   --------------------------------------------------------------------------
769     l_rowid VARCHAR2(25);
770    l_var VARCHAR2(25);
771    l_term_details_id igs_ad_trmdt_int.term_details_id%TYPE;
772    l_msg_at_index   NUMBER := 0;
773    l_return_status   VARCHAR2(1);
774    l_msg_count      NUMBER ;
775    l_msg_data       VARCHAR2(2000);
776    l_hash_msg_name_text_type_tab   igs_ad_gen_016.g_msg_name_text_type_table;
777    l_error_code VARCHAR2(4) := NULL;
778    l_error_text VARCHAR2(2000):= NULL;
779     BEGIN
780         l_msg_at_index := igs_ge_msg_stack.count_msg;
781         SAVEPOINT before_create_term;
782           igs_ad_term_details_pkg.insert_row(
783                                               l_rowid,
784                                               l_term_details_id      ,
785                                               p_term_dtls_record.TRANSCRIPT_ID        ,
786                                               p_term_dtls_record.TERM                 ,
787                                               TRUNC(p_term_dtls_record.START_DATE)           ,
788                                               TRUNC(p_term_dtls_record.END_DATE)             ,
789                                               NULL,
790                                               NULL,
791                                               NULL,
792                                               p_term_dtls_record.TOTAL_GPA_UNITS      ,
793                                               p_term_dtls_record.GPA
794                                             );
795     UPDATE igs_ad_trmdt_int
796           SET status =cst_s_val_1,
797               error_code = cst_ec_val_NULL,
798               term_details_id = l_term_details_id
799           WHERE interface_term_dtls_id  = p_term_dtls_record.interface_term_dtls_id;
800 
801 
802 -- Update Transcript Status
803 
804       EXCEPTION
805       WHEN OTHERS THEN
806                ROLLBACK TO before_create_term;
807                 igs_ad_gen_016.extract_msg_from_stack (
808                           p_msg_at_index                => l_msg_at_index,
809                           p_return_status               => l_return_status,
810                           p_msg_count                   => l_msg_count,
811                           p_msg_data                    => l_msg_data,
812                           p_hash_msg_name_text_type_tab => l_hash_msg_name_text_type_tab);
813                IF l_hash_msg_name_text_type_tab(l_msg_count-1).name <>  'ORA'  THEN
814                    l_error_text := l_msg_data;
815                    l_error_code := 'E322';
816 
817                    IF p_enable_log = 'Y' THEN
818                        igs_ad_imp_001.logerrormessage(p_term_dtls_record.interface_term_dtls_id,l_msg_data,'IGS_AD_TRMDT_INT');
819                    END IF;
820                ELSE
821                     l_error_text :=  igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E518', 8405);
822                     l_error_code := 'E518';
823                     IF fnd_log.test(fnd_log.level_exception,l_prog_label) THEN
824 
825 		          l_label :='igs.plsql.igs_ad_imp_024.create_term_details.exception '||l_msg_data;
826 
827 			  fnd_message.set_name('IGS','IGS_PE_IMP_ERROR');
828 			  fnd_message.set_token('INTERFACE_ID',p_term_dtls_record.interface_term_dtls_id);
829 			  fnd_message.set_token('ERROR_CD','E322');
830 
831 		          l_debug_str :=  fnd_message.get;
832 
833                           fnd_log.string_with_context( fnd_log.level_exception,
834 								  l_label,
835 								  l_debug_str, NULL,
836 								  NULL,NULL,NULL,NULL,TO_CHAR(l_request_id));
837                       END IF;
838 
839                END IF;
840            UPDATE igs_ad_trmdt_int
841             SET status = cst_s_val_3,
842             error_code = l_error_code,
843             error_text = l_error_text,
844             match_ind = DECODE (
845                                        p_term_dtls_record.match_ind,
846                                               NULL, cst_mi_val_11,
847                                        match_ind)
848           WHERE interface_term_dtls_id  = p_term_dtls_record.interface_term_dtls_id;
849   END create_term_details;
850 
851    PROCEDURE update_term_details(p_term_dtls_record term_cur%ROWTYPE, dup_cur_rec c_dup_cur%ROWTYPE  )
852      AS
853    --------------------------------------------------------------------------
854    --  Created By : rboddu
855    --  Date Created On : 2001/07/27
856    --  Purpose:
857    --  Know limitations, enhancements or remarks
858    --  Change History
859    --  Who             When            What
860    --  (reverse chronological order - newest change first)
861     --------------------------------------------------------------------------
862       l_rowid VARCHAR2(25);
863      l_var VARCHAR2(25);
864      l_term_details_id igs_ad_trmdt_int.term_details_id%TYPE;
865      l_msg_at_index   NUMBER := 0;
866      l_return_status   VARCHAR2(1);
867      l_msg_count      NUMBER ;
868      l_msg_data       VARCHAR2(2000);
869      l_hash_msg_name_text_type_tab   igs_ad_gen_016.g_msg_name_text_type_table;
870      l_error_code VARCHAR2(4) := NULL;
871      l_error_text VARCHAR2(2000):= NULL;
872       BEGIN
873               l_msg_at_index := igs_ge_msg_stack.count_msg;
874          SAVEPOINT before_update_term;
875           igs_ad_term_details_pkg.update_row(
876                           X_ROWID           =>  dup_cur_rec.rowid   ,
877                           X_TERM_DETAILS_ID =>  dup_cur_rec.term_details_id      ,
878                           X_TRANSCRIPT_ID   =>  p_term_dtls_record.transcript_id        ,
879                           X_TERM            =>  p_term_dtls_record.term                 ,
880                           X_START_DATE      =>  TRUNC(p_term_dtls_record.start_date)           ,
881                           X_END_DATE        =>  TRUNC(p_term_dtls_record.end_date)             ,
882                           X_TOTAL_CP_ATTEMPTED => dup_cur_rec.total_cp_attempted,
883                           X_TOTAL_CP_EARNED =>  dup_cur_rec.total_cp_earned,
884                           X_TOTAL_UNIT_GP   =>  dup_cur_rec.total_unit_gp,
885                           X_TOTAL_GPA_UNITS =>  NVL(p_term_dtls_record.total_gpa_units, dup_cur_rec.total_gpa_units),
886                           X_GPA             =>  NVL(p_term_dtls_record.gpa, dup_cur_rec.gpa)
887                             );
888         UPDATE igs_ad_trmdt_int
889           SET status =cst_s_val_1,
890               error_code = cst_ec_val_NULL,
891               term_details_id = dup_cur_rec.term_details_id
892           WHERE interface_term_dtls_id  = p_term_dtls_record.interface_term_dtls_id;
893 
894         EXCEPTION
895         WHEN OTHERS THEN
896                   ROLLBACK TO  before_update_term;
897                   igs_ad_gen_016.extract_msg_from_stack (
898                             p_msg_at_index                => l_msg_at_index,
899                             p_return_status               => l_return_status,
900                             p_msg_count                   => l_msg_count,
901                             p_msg_data                    => l_msg_data,
902                             p_hash_msg_name_text_type_tab => l_hash_msg_name_text_type_tab);
903                  IF l_hash_msg_name_text_type_tab(l_msg_count-1).name <>  'ORA'  THEN
904                      l_error_text := l_msg_data;
905                      l_error_code := 'E014';
906 
907                      IF p_enable_log = 'Y' THEN
908                          igs_ad_imp_001.logerrormessage( p_term_dtls_record.interface_term_dtls_id,l_msg_data,'IGS_AD_TRMDT_INT');
909                      END IF;
910                  ELSE
911                       l_error_text :=  igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E518', 8405);
912                       l_error_code := 'E518';
913                       IF fnd_log.test(fnd_log.level_exception,l_prog_label) THEN
914 
915    	          l_label := 'igs.plsql.igs_ad_imp_024.update_term_details.exception '||l_msg_data;
916 
917    		  fnd_message.set_name('IGS','IGS_PE_IMP_ERROR');
918    		  fnd_message.set_token('INTERFACE_ID',p_term_dtls_record.interface_term_dtls_id);
919    		  fnd_message.set_token('ERROR_CD','E014');
920 
921    	          l_debug_str :=  fnd_message.get;
922 
923                             fnd_log.string_with_context( fnd_log.level_exception,
924    							  l_label,
925    							  l_debug_str, NULL,
926    							  NULL,NULL,NULL,NULL,TO_CHAR(l_request_id));
927                         END IF;
928 
929                  END IF;
930           UPDATE igs_ad_trmdt_int
931             SET status = cst_s_val_3,
932             error_code = l_error_code,
933             error_text = l_error_text,
934             match_ind = DECODE (
935                                        p_term_dtls_record.match_ind,
936                                               NULL, cst_mi_val_12,
937                                        match_ind)
938           WHERE interface_term_dtls_id  = p_term_dtls_record.interface_term_dtls_id;
939     END update_term_details;
940 
941 
942 
943 BEGIN
944      -- jchin Bug 4629226 Put an error in the int table if record is associated with an external transcript
945 
946      UPDATE igs_ad_trmdt_int term
947        SET
948        status = '3'
949        ,error_code = 'E334'
950        ,error_Text =  igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E334', 8405)
951        WHERE interface_run_id = p_interface_run_id
952        AND status = '2'
953        AND EXISTS (SELECT 1 FROM igs_ad_txcpt_int trans, igs_ad_code_classes_v code
954                    WHERE trans.interface_transcript_id = term.interface_transcript_id
955                    AND trans.transcript_source = code.code_id
956                    AND code.class = 'TRANSCRIPT_SOURCE'
957                    AND code.system_status = 'THIRD_PARTY_TRANSFER_EVAL'
958                    AND code.class_type_code = 'ADM_CODE_CLASSES');
959 
960      COMMIT;
961 
962       --1. Set STATUS to 3 for interface records with RULE = E or I and MATCH IND is not null and not '15'
963      IF p_rule IN ('E', 'I')  THEN
964         UPDATE igs_ad_trmdt_int
965           SET
966           status = '3'
967           , error_code = 'E700'
968           ,error_Text =  igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E700', 8405)
969           WHERE interface_run_id = p_interface_run_id
970           AND status = '2'
971          AND NVL (match_ind, '15') <> '15';
972      END IF;
973      COMMIT;
974 
975      --	2. Set STATUS to 1 for interface records with RULE = R and MATCH IND = 17,18,19,22,23,24,27
976      IF p_rule = 'R'  THEN
977         UPDATE igs_ad_trmdt_int
978         SET
979         status = '1',  error_code = NULL
980         WHERE interface_run_id = p_interface_run_id
981         AND status = '2'
982         AND match_ind IN ('17', '18', '19', '22', '23', '24', '27');
983      END IF;
984      COMMIT;
985    -- 5. Set STATUS to 1 and MATCH IND to 19 for interface records with RULE = E matching OSS record(s)
986   IF  p_rule = 'E' THEN
987       UPDATE igs_ad_trmdt_int  term
988       SET
989          status = '3'
990         , error_code = 'E708'
991           ,error_Text =  igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E708', 8405)
992       WHERE interface_run_id = p_interface_run_id
993       AND status = '2'
994       AND  EXISTS ( SELECT 1 FROM igs_ad_tundt_int
995                             WHERE  interface_term_dtls_id = term.interface_term_dtls_id
996                             AND status ='2')
997       AND  1 < (  SELECT COUNT(*)  FROM IGS_AD_TERM_DETAILS term_oss
998                                           WHERE transcript_id  = term.transcript_id
999                                            AND  term = term.term
1000                                            AND  TRUNC(start_Date) = TRUNC(term.start_Date)
1001                                            AND  TRUNC(end_Date) = TRUNC(term.end_Date)
1002                          );
1003 
1004       UPDATE igs_ad_trmdt_int  term
1005       SET
1006          status = '1'
1007         , match_ind = '19'
1008         , term_Details_id = (  SELECT term_Details_id  FROM IGS_AD_TERM_DETAILS term_oss
1009                                           WHERE transcript_id  = term.transcript_id
1010                                            AND  term = term.term
1011                                            AND  TRUNC(start_Date) = TRUNC(term.start_Date)
1012                                            AND  TRUNC(end_Date) = TRUNC(term.end_Date)
1013                                            AND  rownum <=1
1014                                       )
1015       WHERE interface_run_id = p_interface_run_id
1016      AND status = '2'
1017      AND  EXISTS (  SELECT 1 FROM IGS_AD_TERM_DETAILS term_oss
1018                                           WHERE transcript_id  = term.transcript_id
1019                                            AND  term = term.term
1020                                            AND  TRUNC(start_Date) = TRUNC(term.start_Date)
1021                                            AND  TRUNC(end_Date) = TRUNC(term.end_Date)
1022                          );
1023   END IF;
1024 COMMIT;
1025 
1026 /**********************************************************************************
1027 Create / Update the OSS record after validating successfully the interface record
1028 Create
1029     If RULE I (match indicator will be 15 or NULL by now no need to check) and matching system record not found OR
1030     RULE = R and MATCH IND = 16, 25
1031 Update
1032     If RULE = I (match indicator will be 15 or NULL by now no need to check) OR
1033     RULE = R and MATCH IND = 21
1034 
1035 Selecting together the interface records for INSERT / UPDATE with DMLMODE identifying the DML operation.
1036 This is done to have one code section for record validation, exception handling and interface table update.
1037 This avoids call to separate PLSQL blocks, tuning performance on stack maintenance during the process.
1038 
1039 **********************************************************************************/
1040 
1041 l_total_records_prcessed := 0;
1042   SELECT COUNT( interface_term_dtls_id) INTO l_count_interface_trmdtls_id
1043   FROM   igs_ad_trmdt_int
1044   WHERE interface_run_id = p_interface_run_id
1045   AND status =2 ;
1046 
1047 LOOP
1048 EXIT WHEN l_total_records_prcessed >= l_count_interface_trmdtls_id;
1049 
1050 SELECT
1051  MIN(interface_term_dtls_id) , MAX(interface_term_dtls_id)
1052  INTO l_minint , l_maxint
1053 FROM  igs_ad_trmdt_int
1054 WHERE interface_run_id = p_interface_run_id
1055  AND status =2
1056  AND rownum < =100;
1057 
1058 FOR term_cur_rec IN term_cur(l_minint,l_minint+99)
1059 LOOP
1060        IF term_cur_rec.dmlmode =  cst_insert  THEN
1061            create_term_details(term_cur_rec);
1062        ELSIF  term_cur_rec.dmlmode = cst_update THEN
1063           OPEN c_dup_cur(term_cur_rec);
1064           FETCH c_dup_cur INTO dup_cur_rec;
1065           CLOSE c_dup_cur;
1066            update_term_details(term_cur_rec, dup_cur_rec);
1067        END IF;
1068        l_total_records_prcessed := l_total_records_prcessed + 1;
1069 
1070  END LOOP;
1071          COMMIT;
1072 
1073 
1074 
1075 
1076 
1077 END LOOP;
1078 
1079 
1080  /*Set STATUS to 1 and MATCH IND to 23 for interface records with RULE = R matching OSS record(s) in
1081    ALL updateable column values, if column nullification is not allowed then the 2 DECODE should be replaced by a single NVL*/
1082      IF p_rule = 'R'  THEN
1083        UPDATE igs_ad_trmdt_int  term
1084        SET
1085          status = '1'
1086          , match_ind = '23'
1087        WHERE interface_run_id = p_interface_run_id
1088        AND status = '2'
1089        AND NVL (match_ind, '15') = '15'
1090        AND EXISTS (  SELECT 1  FROM igs_ad_term_details
1091                                  WHERE
1092                                     TRANSCRIPT_ID= term.transcript_id AND
1093                                     TERM           = term.TERM          AND
1094                                     TRUNC(START_DATE) =  TRUNC(term.START_DATE) AND
1095                                     TRUNC(END_DATE) = TRUNC(term.END_DATE) AND
1096                                     NVL(TOTAL_GPA_UNITS,-1)= NVL(term.TOTAL_GPA_UNITS,-1) AND
1097                                     NVL(GPA,'X')= NVL(term.GPA,'X')
1098                 );
1099      END IF;
1100      COMMIT;
1101 
1102  --Set STATUS to 3 and MATCH IND = 20 for interface records with RULE = R and
1103  --MATCH IND <> 21, 25, ones failed above discrepancy check
1104      IF p_rule = 'R'  THEN
1105         UPDATE igs_ad_trmdt_int  term
1106         SET
1107         status = '3'
1108         , match_ind = '20'
1109         , dup_term_dtls_id = ( SELECT term_details_id FROM IGS_AD_TERM_DETAILS term_oss
1110                                           WHERE transcript_id  = term.transcript_id
1111                                            AND  term = term.term
1112                                            AND  TRUNC(start_Date) = TRUNC(term.start_Date)
1113                                            AND  TRUNC(end_Date) = TRUNC(term.end_Date) )
1114         WHERE interface_run_id = p_interface_run_id
1115         AND status = '2'
1116         AND NVL (match_ind, '15') = '15'
1117         AND EXISTS (SELECT 1 FROM IGS_AD_TERM_DETAILS term_oss
1118                                           WHERE transcript_id  = term.transcript_id
1119                                            AND  term = term.term
1120                                            AND  TRUNC(start_Date) = TRUNC(term.start_Date)
1121                                            AND  TRUNC(end_Date) = TRUNC(term.end_Date) );
1122 
1123      END IF;
1124      COMMIT;
1125 
1126 
1127   --Set STATUS to 3 for interface records with RULE = R and invalid MATCH IND
1128      IF p_rule = 'R'  THEN
1129         UPDATE igs_ad_trmdt_int  term
1130         SET
1131         status = '3'
1132         , error_code = 'E700'
1133         ,error_Text =  igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E700', 8405)
1134         WHERE interface_run_id = p_interface_run_id
1135         AND status = '2'
1136         AND match_ind IS NOT NULL;
1137      END IF;
1138      COMMIT;
1139 
1140 END  process_term_details;
1141 
1142 
1143 
1144 
1145 PROCEDURE process_term_unit_details(
1146 p_interface_run_id  igs_ad_interface_all.interface_run_id%TYPE,
1147 p_rule     VARCHAR2,
1148 p_enable_log   VARCHAR2)  AS
1149 
1150 CURSOR term_unit_cur(cp_start_int_id  IGS_AD_TUNDT_INT.INTERFACE_TERM_UNITDTLS_ID%TYPE,	--ARVSRINI--
1151 		 cp_end_int_id	  IGS_AD_TUNDT_INT.INTERFACE_TERM_UNITDTLS_ID%TYPE) IS	--ARVSRINI-- IS
1152      SELECT  cst_insert dmlmode, unit.rowid,  unit.*
1153      FROM igs_ad_tundt_int  unit
1154      WHERE interface_run_id = p_interface_run_id
1155      AND  unit.status = '2'
1156      AND INTERFACE_TERM_UNITDTLS_ID BETWEEN cp_start_int_id AND cp_end_int_id		--ARVSRINI--
1157      AND  (NOT EXISTS (SELECT 1 FROM igs_ad_term_unitdtls unit_oss
1158                                           WHERE term_details_id =  unit.term_details_id
1159                                           AND unit = unit.unit )
1160                   OR ( p_rule = 'R'  AND unit.match_ind IN ('16', '25') )
1161               )
1162      UNION ALL
1163      SELECT  cst_update  dmlmode, unit.rowid,  unit.*
1164      FROM igs_ad_tundt_int  unit
1165      WHERE interface_run_id = p_interface_run_id
1166      AND  status = '2'
1167      AND INTERFACE_TERM_UNITDTLS_ID BETWEEN cp_start_int_id AND cp_end_int_id		--ARVSRINI--
1168      AND (       p_rule = 'I'  OR (p_rule = 'R' AND unit.match_ind = cst_mi_val_21))
1169      AND EXISTS (SELECT 1 FROM igs_ad_term_unitdtls unit_oss
1170                                           WHERE term_details_id =  unit.term_details_id
1171                                           AND unit = unit.unit
1172                         );
1173 
1174    CURSOR  c_dup_cur(term_unit_rec  term_unit_cur%ROWTYPE) IS
1175     SELECT
1176        unit_oss.rowid, unit_oss.*
1177     FROM
1178 	igs_ad_term_unitdtls unit_oss
1179     WHERE term_details_id =  term_unit_rec.term_details_id
1180      AND unit = term_unit_rec.unit ;
1181 
1182 
1183 
1184    l_maxint	NUMBER(15);
1185    l_minint	NUMBER(15);
1186 
1187     dup_cur_rec   c_dup_cur%ROWTYPE;
1188     l_prog_label  VARCHAR2(100) := 'igs.plsql.igs_ad_imp_024.process_term_unit_details';
1189     l_label  VARCHAR2(1000) ;
1190     l_debug_str VARCHAR2(1000) ;
1191     l_total_records_prcessed NUMBER;
1192     l_count_interface_unitdtls_id NUMBER;
1193 
1194  PROCEDURE create_term_unit_details(p_term_unitdtls_record term_unit_cur%ROWTYPE)
1195    AS
1196  --------------------------------------------------------------------------
1197  --  Created By : rboddu
1198  --  Date Created On : 2001/07/27
1199  --  Purpose:
1200  --  Know limitations, enhancements or remarks
1201  --  Change History
1202  --  Who             When            What
1203  --  (reverse chronological order - newest change first)
1204   --------------------------------------------------------------------------
1205     l_rowid VARCHAR2(25);
1206    l_var VARCHAR2(25);
1207    l_unit_details_id   igs_ad_tundt_int.unit_details_id%TYPE;
1208    l_msg_at_index   NUMBER := 0;
1209    l_return_status   VARCHAR2(1);
1210    l_msg_count      NUMBER ;
1211    l_msg_data       VARCHAR2(2000);
1212    l_hash_msg_name_text_type_tab   igs_ad_gen_016.g_msg_name_text_type_table;
1213    l_error_code VARCHAR2(4) := NULL;
1214    l_error_text VARCHAR2(2000):= NULL;
1215     BEGIN
1216         l_msg_at_index := igs_ge_msg_stack.count_msg;
1217         SAVEPOINT before_create_unit;
1218           igs_ad_term_unitdtls_pkg.insert_row(
1219           l_rowid ,
1220           l_unit_details_id    ,
1221           p_term_unitdtls_record.term_details_id ,
1222           p_term_unitdtls_record.UNIT,
1223           p_term_unitdtls_record.UNIT_DIFFICULTY ,
1224           p_term_unitdtls_record.UNIT_NAME,
1225           p_term_unitdtls_record.CP_ATTEMPTED,
1226           p_term_unitdtls_record.CP_EARNED ,
1227           p_term_unitdtls_record.GRADE,
1228           p_term_unitdtls_record.UNIT_GRADE_POINTS
1229           );
1230 
1231 
1232            UPDATE igs_ad_tundt_int
1233              SET status = cst_s_val_1,
1234                  error_code = NULL,
1235                  unit_details_id = l_unit_details_id
1236              WHERE interface_term_unitdtls_id = p_term_unitdtls_record.interface_term_unitdtls_id;
1237 
1238 
1239 
1240 
1241       EXCEPTION
1242       WHEN OTHERS THEN
1243                ROLLBACK TO before_create_unit;
1244                 igs_ad_gen_016.extract_msg_from_stack (
1245                           p_msg_at_index                => l_msg_at_index,
1246                           p_return_status               => l_return_status,
1247                           p_msg_count                   => l_msg_count,
1248                           p_msg_data                    => l_msg_data,
1249                           p_hash_msg_name_text_type_tab => l_hash_msg_name_text_type_tab);
1250                IF l_hash_msg_name_text_type_tab(l_msg_count-1).name <>  'ORA'  THEN
1251                    l_error_text := l_msg_data;
1252                    l_error_code := 'E322';
1253 
1254                    IF p_enable_log = 'Y' THEN
1255                        igs_ad_imp_001.logerrormessage(p_term_unitdtls_record.interface_term_dtls_id,l_msg_data,'IGS_AD_TUNDT_INT');
1256                    END IF;
1257                ELSE
1258                     l_error_text := igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E518', 8405);
1259                     l_error_code := 'E518';
1260                     IF fnd_log.test(fnd_log.level_exception,l_prog_label) THEN
1261 
1262 		          l_label :='igs.plsql.igs_ad_imp_024.create_term_unit_details.exception '||l_msg_data;
1263 
1264 			  fnd_message.set_name('IGS','IGS_PE_IMP_ERROR');
1265 			  fnd_message.set_token('INTERFACE_ID', p_term_unitdtls_record.interface_term_dtls_id);
1266 			  fnd_message.set_token('ERROR_CD','E322');
1267 
1268 		          l_debug_str :=  fnd_message.get;
1269 
1270                           fnd_log.string_with_context( fnd_log.level_exception,
1271 								  l_label,
1272 								  l_debug_str, NULL,
1273 								  NULL,NULL,NULL,NULL,TO_CHAR(l_request_id));
1274                       END IF;
1275 
1276                END IF;
1277            UPDATE igs_ad_tundt_int
1278             SET status = cst_s_val_3,
1279             error_code = l_error_code,
1280             error_text = l_error_text,
1281             match_ind = DECODE (
1282                                        p_term_unitdtls_record.match_ind,
1283                                               NULL, cst_mi_val_11,
1284                                        match_ind)
1285              WHERE interface_term_unitdtls_id = p_term_unitdtls_record.interface_term_unitdtls_id;
1286   END create_term_unit_details;
1287 
1288    PROCEDURE update_term_unit_details(p_term_unitdtls_record term_unit_cur%ROWTYPE, dup_cur_rec c_dup_cur%ROWTYPE  )
1289      AS
1290    --------------------------------------------------------------------------
1291    --  Created By : rboddu
1292    --  Date Created On : 2001/07/27
1293    --  Purpose:
1294    --  Know limitations, enhancements or remarks
1295    --  Change History
1296    --  Who             When            What
1297    --  (reverse chronological order - newest change first)
1298     --------------------------------------------------------------------------
1299       l_rowid VARCHAR2(25);
1300      l_var VARCHAR2(25);
1301      l_msg_at_index   NUMBER := 0;
1302      l_return_status   VARCHAR2(1);
1303      l_msg_count      NUMBER ;
1304      l_msg_data       VARCHAR2(2000);
1305      l_hash_msg_name_text_type_tab   igs_ad_gen_016.g_msg_name_text_type_table;
1306      l_error_code VARCHAR2(4) := NULL;
1307      l_error_text VARCHAR2(2000):= NULL;
1308       BEGIN
1309            l_msg_at_index := igs_ge_msg_stack.count_msg;
1310             SAVEPOINT before_update_unit;
1311              igs_ad_term_unitdtls_pkg.update_row(
1312                  X_ROWID             => dup_cur_rec.rowid                        ,
1313                  X_UNIT_DETAILS_ID   => dup_cur_rec.UNIT_DETAILS_ID      ,
1314                  X_TERM_DETAILS_ID   => p_term_unitdtls_record.TERM_DETAILS_ID      ,
1315                  X_UNIT              => p_term_unitdtls_record.UNIT                 ,
1316                  X_UNIT_DIFFICULTY   => p_term_unitdtls_record.UNIT_DIFFICULTY      ,
1317                  X_UNIT_NAME         => p_term_unitdtls_record.UNIT_NAME            ,
1318                  X_CP_ATTEMPTED      => NVL(p_term_unitdtls_record.CP_ATTEMPTED, dup_cur_rec.cp_attempted),
1319                  X_CP_EARNED         => NVL(p_term_unitdtls_record.CP_EARNED, dup_cur_rec.CP_EARNED),
1320                  X_GRADE             => NVL(p_term_unitdtls_record.GRADE,dup_cur_rec.GRADE),
1321                  X_UNIT_GRADE_POINTS => NVL(p_term_unitdtls_record.UNIT_GRADE_POINTS, dup_cur_rec.UNIT_GRADE_POINTS)
1322                     );
1323 
1324          UPDATE igs_ad_tundt_int
1325           SET status =cst_s_val_1,
1326               error_code = cst_ec_val_NULL,
1327               term_details_id = dup_cur_rec.UNIT_DETAILS_ID
1328              WHERE interface_term_unitdtls_id = p_term_unitdtls_record.interface_term_unitdtls_id;
1329         EXCEPTION
1330         WHEN OTHERS THEN
1331                   ROLLBACK TO before_update_unit;
1332                   igs_ad_gen_016.extract_msg_from_stack (
1333                             p_msg_at_index                => l_msg_at_index,
1334                             p_return_status               => l_return_status,
1335                             p_msg_count                   => l_msg_count,
1336                             p_msg_data                    => l_msg_data,
1337                             p_hash_msg_name_text_type_tab => l_hash_msg_name_text_type_tab);
1338                  IF l_hash_msg_name_text_type_tab(l_msg_count-1).name <>  'ORA'  THEN
1339                      l_error_text := l_msg_data;
1340                      l_error_code := 'E014';
1341 
1342                      IF p_enable_log = 'Y' THEN
1343                          igs_ad_imp_001.logerrormessage( p_term_unitdtls_record.interface_term_unitdtls_id,l_msg_data,'IGS_AD_TUNDT_INT');
1344                      END IF;
1345                  ELSE
1346                       l_error_text :=  igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E518', 8405);
1347                       l_error_code := 'E518';
1348                       IF fnd_log.test(fnd_log.level_exception,l_prog_label) THEN
1349 
1350    	          l_label := 'igs.plsql.igs_ad_imp_024.update_term_details.exception '||l_msg_data;
1351 
1352    		  fnd_message.set_name('IGS','IGS_PE_IMP_ERROR');
1353    		  fnd_message.set_token('INTERFACE_ID',p_term_unitdtls_record.interface_term_unitdtls_id);
1354    		  fnd_message.set_token('ERROR_CD','E014');
1355 
1356    	          l_debug_str :=  fnd_message.get;
1357 
1358                             fnd_log.string_with_context( fnd_log.level_exception,
1359    							  l_label,
1360    							  l_debug_str, NULL,
1361    							  NULL,NULL,NULL,NULL,TO_CHAR(l_request_id));
1362                         END IF;
1363 
1364                  END IF;
1365           UPDATE igs_ad_tundt_int
1366             SET status = cst_s_val_3,
1367             error_code = l_error_code,
1368             error_text = l_error_text,
1369             match_ind = DECODE (
1370                                        p_term_unitdtls_record.match_ind,
1371                                               NULL, cst_mi_val_12,
1372                                        match_ind)
1373              WHERE interface_term_unitdtls_id = p_term_unitdtls_record.interface_term_unitdtls_id;
1374     END update_term_unit_details;
1375 
1376 
1377 
1378 BEGIN
1379 
1380     -- jchin Bug 4629226 Put an error in the int table if record is associated with an external transcript
1381 
1382     UPDATE igs_ad_tundt_int unit
1383       SET
1384       status = '3'
1385       , error_code = 'E334'
1386       ,error_Text =  igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E334', 8405)
1387       WHERE interface_run_id = p_interface_run_id
1388       AND status = '2'
1389       AND EXISTS (SELECT 1 FROM igs_ad_txcpt_int trans, igs_ad_code_classes_v code,
1390                   igs_ad_trmdt_int term
1391                   WHERE trans.interface_transcript_id = term.interface_transcript_id
1392                   AND term.interface_term_dtls_id = unit.interface_term_dtls_id
1393                   AND trans.transcript_source = code.code_id
1394                   AND code.class = 'TRANSCRIPT_SOURCE'
1395                   AND code.system_status = 'THIRD_PARTY_TRANSFER_EVAL'
1396                   AND code.class_type_code = 'ADM_CODE_CLASSES');
1397 
1398      COMMIT;
1399 
1400       --1. Set STATUS to 3 for interface records with RULE = E or I and MATCH IND is not null and not '15'
1401      IF p_rule IN ('E', 'I')  THEN
1402         UPDATE igs_ad_tundt_int
1403           SET
1404           status = '3'
1405           , error_code = 'E700'
1406           , error_text =  igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E700', 8405)
1407           WHERE interface_run_id = p_interface_run_id
1408           AND status = '2'
1409          AND NVL (match_ind, '15') <> '15';
1410      END IF;
1411      COMMIT;
1412 
1413      --	2. Set STATUS to 1 for interface records with RULE = R and MATCH IND = 17,18,19,22,23,24,27
1414      IF p_rule = 'R'  THEN
1415         UPDATE igs_ad_tundt_int
1416         SET
1417         status = '1',  error_code = NULL
1418         WHERE interface_run_id = p_interface_run_id
1419         AND status = '2'
1420         AND match_ind IN ('17', '18', '19', '22', '23', '24', '27');
1421      END IF;
1422      COMMIT;
1423 
1424    -- 5. Set STATUS to 1 and MATCH IND to 19 for interface records with RULE = E matching OSS record(s)
1425   IF  p_rule = 'E' THEN
1426       UPDATE igs_ad_tundt_int  unit
1427       SET
1428          status = '1'
1429         , match_ind = '19'
1430       WHERE interface_run_id = p_interface_run_id
1431      AND status = '2'
1432      AND  EXISTS ( SELECT 1 FROM igs_ad_term_unitdtls unit_oss
1433                                           WHERE term_details_id =  unit.term_details_id
1434                                           AND unit = unit.unit
1435                          );
1436   END IF;
1437 COMMIT;
1438 
1439 /**********************************************************************************
1440 Create / Update the OSS record after validating successfully the interface record
1441 Create
1442     If RULE I (match indicator will be 15 or NULL by now no need to check) and matching system record not found OR
1443     RULE = R and MATCH IND = 16, 25
1444 Update
1445     If RULE = I (match indicator will be 15 or NULL by now no need to check) OR
1446     RULE = R and MATCH IND = 21
1447 
1448 Selecting together the interface records for INSERT / UPDATE with DMLMODE identifying the DML operation.
1449 This is done to have one code section for record validation, exception handling and interface table update.
1450 This avoids call to separate PLSQL blocks, tuning performance on stack maintenance during the process.
1451 
1452 **********************************************************************************/
1453 
1454 l_total_records_prcessed := 0;
1455   SELECT COUNT(interface_term_unitdtls_id) INTO l_count_interface_unitdtls_id
1456   FROM  igs_ad_tundt_int
1457   WHERE interface_run_id = p_interface_run_id
1458   AND status =2 ;
1459 
1460 LOOP
1461 EXIT WHEN l_total_records_prcessed >= l_count_interface_unitdtls_id;
1462 
1463 SELECT
1464  MIN(interface_term_unitdtls_id) , MAX(interface_term_unitdtls_id)
1465  INTO l_minint , l_maxint
1466 FROM igs_ad_tundt_int
1467 WHERE interface_run_id = p_interface_run_id
1468  AND status =2
1469  AND rownum < =100;
1470 
1471 FOR term_unit_cur_rec IN term_unit_cur(l_minint,l_minint+99)					--arvsrini
1472 LOOP
1473        IF term_unit_cur_rec.dmlmode =  cst_insert  THEN
1474            create_term_unit_details(term_unit_cur_rec);
1475        ELSIF  term_unit_cur_rec.dmlmode = cst_update THEN
1476           OPEN c_dup_cur(term_unit_cur_rec);
1477           FETCH c_dup_cur INTO dup_cur_rec;
1478           CLOSE c_dup_cur;
1479            update_term_unit_details(term_unit_cur_rec, dup_cur_rec);
1480        END IF;
1481        l_total_records_prcessed := l_total_records_prcessed + 1;
1482 
1483  END LOOP;
1484          COMMIT;
1485 
1486 
1487 
1488 END LOOP;
1489 
1490  /*Set STATUS to 1 and MATCH IND to 23 for interface records with RULE = R matching OSS record(s) in
1491    ALL updateable column values, if column nullification is not allowed then the 2 DECODE should be replaced by a single NVL*/
1492      IF p_rule = 'R'  THEN
1493        UPDATE igs_ad_tundt_int  unit
1494        SET
1495          status = '1'
1496          , match_ind = '23'
1497        WHERE interface_run_id = p_interface_run_id
1498        AND status = '2'
1499        AND NVL (match_ind, '15') = '15'
1500        AND EXISTS (  SELECT 1  FROM igs_ad_term_unitdtls
1501                              WHERE   NVL(UNIT,'X')          = NVL(unit.UNIT,'X')          AND
1502                                           NVL(UNIT_DIFFICULTY,-1) = NVL(unit.UNIT_DIFFICULTY,-1) AND
1503                                           NVL(UNIT_NAME,'X')     = NVL(unit.UNIT_NAME,'X')     AND
1504                                           NVL(CP_ATTEMPTED,-1)    = NVL(unit.CP_ATTEMPTED,-1)    AND
1505                                           NVL(CP_EARNED,-1)       = NVL(unit.CP_EARNED,-1)       AND
1506                                           NVL(GRADE,'X')         = NVL(unit.GRADE,'X')         AND
1507                                           NVL(UNIT_GRADE_POINTS,-1) = NVL(unit.UNIT_GRADE_POINTS,-1)
1508                 );
1509      END IF;
1510      COMMIT;
1511 
1512  --Set STATUS to 3 and MATCH IND = 20 for interface records with RULE = R and
1513  --MATCH IND <> 21, 25, ones failed above discrepancy check
1514      IF p_rule = 'R'  THEN
1515        UPDATE igs_ad_tundt_int  unit
1516         SET
1517         status = '3'
1518         , match_ind = '20'
1519         , dup_term_unitdtls_id = ( SELECT  unit_details_id
1520                                           FROM igs_ad_term_unitdtls unit_oss
1521                                           WHERE term_details_id =  unit.term_details_id
1522                                           AND unit = unit.unit )
1523         WHERE interface_run_id = p_interface_run_id
1524         AND status = '2'
1525         AND NVL (match_ind, '15') = '15'
1526         AND EXISTS (SELECT  1
1527                                           FROM igs_ad_term_unitdtls unit_oss
1528                                           WHERE term_details_id =  unit.term_details_id
1529                                           AND unit = unit.unit );
1530 
1531      END IF;
1532      COMMIT;
1533 
1534 
1535   --Set STATUS to 3 for interface records with RULE = R and invalid MATCH IND
1536      IF p_rule = 'R'  THEN
1537        UPDATE igs_ad_tundt_int  unit
1538         SET
1539         status = '3'
1540         , error_code = 'E700'
1541         , error_text  = igs_ad_gen_016.get_lkup_meaning ('IMPORT_ERROR_CODE', 'E700', 8405)
1542         WHERE interface_run_id = p_interface_run_id
1543         AND status = '2'
1544         AND match_ind IS NOT NULL;
1545      END IF;
1546      COMMIT;
1547 
1548 END  process_term_unit_details;
1549 
1550 
1551 END igs_ad_imp_024;