DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGF_AP_PROFILE_GEN_PKG

Source


1 PACKAGE BODY igf_ap_profile_gen_pkg AS
2 /* $Header: IGFAP48B.pls 120.4 2006/02/14 23:05:30 ridas noship $ */
3 ------------------------------------------------------------------
4 --Created by  : ugummall, Oracle India
5 --Date created: 04-AUG-2004
6 --
7 --Purpose:  Generic routines used in self-service pages and PROFILE Import Process.
8 --
9 --
10 --Known limitations/enhancements and/or remarks:
11 --
12 --Change History:
13 --Who         When            What
14 -------------------------------------------------------------------
15 
16 FUNCTION convert_int(col_value VARCHAR2)
17 RETURN VARCHAR2 IS
18  /*
19   ||  Created By : ugummall
20   ||  Created On : 11-Aug-2004
21   ||  Purpose : This function will return the  numberic value  of the given column value  , i.e taken through the parameter
22   ||  Known limitations, enhancements or remarks :
23   ||  Change History :
24   ||  Who             When            What
25   ||  (reverse chronological order - newest change first)
26   */
27 
28 BEGIN
29   RETURN TO_NUMBER(col_value);
30 EXCEPTION WHEN others THEN
31   RETURN col_value;
32 END convert_int ;
33 
34 PROCEDURE create_base_record  (
35                                 p_css_id        IN          NUMBER,
36                                 p_person_id     IN          NUMBER,
37                                 p_batch_year    IN          NUMBER,
38                                 x_msg_data      OUT NOCOPY  VARCHAR2,
39                                 x_return_status OUT NOCOPY  VARCHAR2
40                               )
41 IS
42   /*
43   ||  Created By : ugummall
44   ||  Created On : 05-Aug-2004
45   ||  Purpose : This Procedure does the following tasks.
46   ||          1. Insert a New FA BASE Record if it doesn't exist.
47   ||          2. Create a record in PROFILE matched table.
48   ||          3. Create a record in FNAR table.
49   ||          4. Update PROFILE interface record status to "MATCHED".
50   ||          5. Deletes corresponding records in match details and person match table.
51   ||  Known limitations, enhancements or remarks :
52   ||  Change History :
53   ||  Who           When            What
54   ||  ridas         14-Feb-2006     Bug #5021084. Removed trunc function from cursor C_SSN.
55   */
56 
57   -- Cursor to get cal_type and sequence_number from batch_year
58   CURSOR cur_get_cal_sequence (cp_batch_year igf_ap_batch_aw_map.batch_year%TYPE) IS
59     SELECT ibm.ci_cal_type, ibm.ci_sequence_number
60       FROM IGF_AP_BATCH_AW_MAP ibm
61      WHERE ibm.batch_year = cp_batch_year;
62 
63   rec_get_cal_sequence  cur_get_cal_sequence%ROWTYPE;
64 
65   lv_cal_type         igf_ap_batch_aw_map.ci_cal_type%TYPE;
66   lv_sequence_number  igf_ap_batch_aw_map.ci_sequence_number%TYPE;
67   lv_base_id          igf_ap_fa_base_rec_all.base_id%TYPE;
68   lv_cssp_id          igf_ap_css_profile.cssp_id%TYPE;
69 
70   lv_profile_value   VARCHAR2(10);
71   CURSOR c_ssn(
72                cp_person_id NUMBER
73               ) IS
74     SELECT api_person_id,
75            api_person_id_uf,
76            end_dt
77       FROM igs_pe_alt_pers_id
78      WHERE pe_person_id = cp_person_id
79        AND person_id_type LIKE 'SSN'
80        AND SYSDATE BETWEEN start_dt AND NVL(end_dt,SYSDATE);
81   l_ssn c_ssn%ROWTYPE;
82 
83 BEGIN
84 
85   fnd_msg_pub.initialize;
86   x_return_status := fnd_api.g_ret_sts_success;
87   SAVEPOINT SP_PROFILE;
88   x_msg_data := '';
89 
90   fnd_profile.get('IGF_AP_SSN_REQ_FOR_BASE_REC',lv_profile_value);
91   IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
92     fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_ap_matching_process_pkg.wrpr_auto_fa_rec.debug','lv_profile_value:'||NVL(lv_profile_value,'N'));
93   END IF;
94   IF NVL(lv_profile_value,'N') = 'Y' THEN
95     OPEN c_ssn(p_person_id);
96     FETCH c_ssn INTO l_ssn;
97     IF c_ssn%NOTFOUND THEN
98       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
99         fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_ap_matching_process_pkg.wrpr_auto_fa_rec.debug','c_ssn%NOTFOUND. raising error');
100       END IF;
101       CLOSE c_ssn;
102       x_return_status := fnd_api.g_ret_sts_error;
103       fnd_message.set_name('IGF','IGF_AP_SSN_FOR_BASEREC');
104       x_msg_data := x_msg_data || ' ' || fnd_message.get;
105       RETURN;
106     ELSE
107       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
108         fnd_log.string(fnd_log.level_statement,'igf.plsql.igf_ap_matching_process_pkg.wrpr_auto_fa_rec.debug','c_ssn%FOUND.');
109       END IF;
110       CLOSE c_ssn;
111     END IF;
112   END IF;
113 
114   IGF_AP_PROFILE_MATCHING_PKG.ss_wrap_create_base_record(p_css_id,p_person_id,p_batch_year);
115   -- Fa Base Record got created successfully. Store success message.
116   fnd_message.set_name('IGF', 'IGF_AP_SUCCESS_FA_BASE');
117   x_msg_data := x_msg_data || ' ' || fnd_message.get;
118   x_return_status := 'S';
119 
120 EXCEPTION WHEN OTHERS THEN
121     IF fnd_log.level_exception >= fnd_log.g_current_runtime_level THEN
122       fnd_log.string(fnd_log.level_exception,'igf.plsql.igf_ap_profile_gen_pkg.create_base_record.exception','The exception is : ' || SQLERRM );
123     END IF;
124     ROLLBACK TO SP_PROFILE;
125     fnd_message.set_name('IGS','IGS_GE_UNHANDLED_EXP');
126     fnd_message.set_token('NAME','igf_ap_profile_gen_pkg.create_base_record');
127     fnd_file.put_line(fnd_file.log,fnd_message.get || ' - '|| SQLERRM);
128     igs_ge_msg_stack.add;
129     x_return_status := FND_API.G_RET_STS_ERROR;
130 
131    fnd_message.set_name('IGF','IGF_AP_FAIL_FA_BASE');
132    x_msg_data := fnd_message.get;
133    x_return_status := FND_API.G_RET_STS_ERROR;
134 
135 END create_base_record;
136 
137 PROCEDURE create_person_record  (
138                                   p_css_id        IN          NUMBER,
139                                   p_person_id     OUT NOCOPY  NUMBER,
140                                   p_batch_year    IN          NUMBER,
141                                   x_msg_data      OUT NOCOPY  VARCHAR2,
142                                   x_return_status OUT NOCOPY  VARCHAR2
143                               )
144 IS
145   /*
146   ||  Created By : ugummall
147   ||  Created On : 05-Aug-2004
148   ||  Purpose : This Procedure does the following tasks.
149   ||          1. Creates a person record.
150   ||          2. Creates a person address record.
151   ||          3. Creates a FA Base Record.
152   ||          4. Creates a record in PROFILE matched table.
153   ||          5. Creates a record in FNAR table.
154   ||          6. Updates PROFILE interface record status to "MATCHED".
155   ||          7. Deletes corresponding records in match details and person match table.
156   ||  Known limitations, enhancements or remarks :
157   ||  Change History :
158   ||  Who             When            What
159   */
160 
161   lv_message2   VARCHAR2(4000);
162 
163 BEGIN
164 
165   fnd_msg_pub.initialize;
166   x_return_status := fnd_api.g_ret_sts_success;
167   x_msg_data := '';
168 
169   SAVEPOINT SP_CREATE_PERSON;
170 
171     IGF_AP_PROFILE_MATCHING_PKG.ss_wrap_create_person_record (p_css_id);
172     fnd_message.set_name('IGF', 'IGF_AP_SUCCESS_CREATE_PERSON');
173     x_msg_data := x_msg_data || ' ' ||fnd_message.get;
174     x_return_status := 'S';
175 
176 
177 EXCEPTION
178   WHEN OTHERS THEN
179     IF fnd_log.level_exception >= fnd_log.g_current_runtime_level THEN
180       fnd_log.string(fnd_log.level_exception,'igf.plsql.igf_ap_profile_gen_pkg.create_person_record.exception','The exception is : ' || SQLERRM );
181     END IF;
182     ROLLBACK TO SP_CREATE_PERSON;
183     fnd_message.set_name('IGS','IGS_GE_UNHANDLED_EXP');
184     fnd_message.set_token('NAME','igf_ap_profile_gen_pkg.create_person_record');
185     fnd_file.put_line(fnd_file.log,fnd_message.get || ' - '|| SQLERRM);
186     igs_ge_msg_stack.add;
187     x_return_status := FND_API.G_RET_STS_ERROR;
188 
189 END create_person_record;
190 
191 PROCEDURE delete_person_match ( p_css_id   IN    NUMBER)
192 IS
193   /*
194   ||  Created By : ugummall
195   ||  Created On : 05-Aug-2004
196   ||  Purpose : This Procedure does the following tasks.
197   ||          1. Deletes records in match details table (child records)
198   ||          2. Deletes the person match record (parent record)
199   ||  Known limitations, enhancements or remarks :
200   ||  Change History :
201   ||  Who             When            What
202   */
203 
204   -- Cursor to fetch apm_id from person match table of an profile interface record.
205   CURSOR cur_get_person_match ( cp_css_id  igf_ap_person_match_all.css_id%TYPE) IS
206     SELECT ROWID row_id, apm_id
207       FROM IGF_AP_PERSON_MATCH_ALL permatch
208      WHERE permatch.css_id = cp_css_id;
209 
210   -- Cursor to fetch rowids of child records (match detail records) of person match record.
211   CURSOR cur_get_match_detail ( cp_apm_id  igf_ap_person_match_all.apm_id%TYPE) IS
212     SELECT ROWID row_id
213       FROM IGF_AP_MATCH_DETAILS matchdtls
214      WHERE matchdtls.apm_id = cp_apm_id;
215 
216   rec_get_person_match  cur_get_person_match%ROWTYPE;
217   rec_get_match_detail cur_get_match_detail%ROWTYPE;
218 
219 BEGIN
220 
221   -- Get APM_ID from CSS_ID
222   rec_get_person_match := null;
223   OPEN cur_get_person_match(p_css_id);
224   FETCH cur_get_person_match INTO rec_get_person_match;
225   IF cur_get_person_match%FOUND THEN
226     CLOSE cur_get_person_match;
227 
228      -- Delete match detail records (child records)
229      FOR rec_get_match_detail IN cur_get_match_detail(rec_get_person_match.apm_id) LOOP
230        igf_ap_match_details_pkg.delete_row(rec_get_match_detail.row_id);
231      END LOOP;
232     -- Delete person match record (parent record)
233     igf_ap_person_match_pkg.delete_row(rec_get_person_match.row_id);
234    ELSE
235       CLOSE cur_get_person_match;
236    END IF;
237 
238 
239 EXCEPTION
240   WHEN OTHERS THEN
241     IF fnd_log.level_exception >= fnd_log.g_current_runtime_level THEN
242       fnd_log.string(fnd_log.level_exception,'igf.plsql.igf_ap_profile_gen_pkg.delete_person_match.exception','The exception is : ' || SQLERRM );
243     END IF;
244     fnd_message.set_name('IGS','IGS_GE_UNHANDLED_EXP');
245     fnd_message.set_token('NAME','igf_ap_profile_gen_pkg.delete_person_match');
246     fnd_file.put_line(fnd_file.log,fnd_message.get);
247     igs_ge_msg_stack.add;
248 END delete_person_match;
249 
250 PROCEDURE delete_interface_record ( p_css_id       IN          NUMBER,
251                                     x_return_status     OUT NOCOPY  VARCHAR2
252                                   )
253 IS
254   /*
255   ||  Created By : ugummall
256   ||  Created On : 05-Aug-2004
257   ||  Purpose : This Procedure does the following tasks.
258   ||          1. Deletes the record in PROFILE interface table.
259   ||          2. Deletes the corresponding match detail records.
260   ||          3. Deletes the corresponding record in person match table.
261   ||  Known limitations, enhancements or remarks :
262   ||  Change History :
263   ||  Who             When            What
264   */
265 
266   -- Cursor to get rowid of the PROFILE interface record.
267   CURSOR cur_get_rowid_interface ( cp_css_id igf_ap_css_interface_all.css_id%TYPE) IS
268     SELECT ROWID row_id
269       FROM IGF_AP_CSS_INTERFACE_ALL intface
270      WHERE intface.css_id = cp_css_id;
271 
272   rec_get_rowid_interface cur_get_rowid_interface%ROWTYPE;
273 
274 BEGIN
275 
276   -- get row id of the PROFILE interface record to be deleted.
277   OPEN cur_get_rowid_interface(p_css_id);
278   FETCH cur_get_rowid_interface INTO rec_get_rowid_interface;
279   IF (cur_get_rowid_interface%NOTFOUND) THEN
280     CLOSE cur_get_rowid_interface;
281     x_return_status := 'E';
282     RETURN;
283   END IF;
284   CLOSE cur_get_rowid_interface;
285 
286   -- delete the interface record.
287   igf_ap_css_interface_pkg.delete_row(rec_get_rowid_interface.row_id);
288 
289   -- delete person match record and match details records
290   delete_person_match(p_css_id => p_css_id);
291 
292   x_return_status := 'S';
293 
294 EXCEPTION
295   WHEN OTHERS THEN
296     IF fnd_log.level_exception >= fnd_log.g_current_runtime_level THEN
297       fnd_log.string(fnd_log.level_exception,'igf.plsql.igf_ap_profile_gen_pkg.delete_interface_record.exception','The exception is : ' || SQLERRM );
298     END IF;
299     fnd_message.set_name('IGS','IGS_GE_UNHANDLED_EXP');
300     fnd_message.set_token('NAME','igf_ap_profile_gen_pkg.delete_interface_record');
301     fnd_file.put_line(fnd_file.log,fnd_message.get);
302     igs_ge_msg_stack.add;
303     x_return_status := 'E';
304 END delete_interface_record;
305 
306 PROCEDURE delete_int_records  ( p_css_ids IN  VARCHAR2 )
307 IS
308   /*
309   ||  Created By : ugummall
310   ||  Created On : 05-Aug-2004
311   ||  Purpose : This Procedure does the following tasks.
312   ||          1. Deletes the record in PROFILE interface table.
313   ||          2. Deletes the corresponding match detail records.
314   ||          3. Deletes the corresponding record in person match table.
315   ||  Known limitations, enhancements or remarks :
316   ||  Change History :
317   ||  Who             When            What
318   */
319 
320   l_del_css_id  VARCHAR2(10);
321   l_css_id      VARCHAR2(10);
322   l_css_ids     VARCHAR2(1000);
323   x_return_status     VARCHAR2(2);
324 
325 BEGIN
326 
327   l_css_ids := p_css_ids;
328   LOOP
329     l_css_ids := TRIM(SUBSTR(l_css_ids, INSTR(l_css_ids, '*') + 1, LENGTH(l_css_ids)));
330     l_css_id  := TRIM(SUBSTR(l_css_ids, 1, INSTR(l_css_ids, '*') - 1));
331     l_css_ids := TRIM(SUBSTR(l_css_ids, INSTR(l_css_ids, ',') + 1, LENGTH(l_css_ids)));
332 
333     IF (l_css_id IS NULL) THEN
334       l_del_css_id := l_css_ids;
335     ELSE
336       l_del_css_id := l_css_id;
337     END IF;
338 
339     delete_interface_record( p_css_id => l_del_css_id, x_return_status => x_return_status);
340 
341     IF (l_css_id IS NULL) THEN
342       EXIT; -- exit from loop.
343     END IF;
344   END LOOP;
345 
346 EXCEPTION
347   WHEN OTHERS THEN
348     IF fnd_log.level_exception >= fnd_log.g_current_runtime_level THEN
349       fnd_log.string(fnd_log.level_exception,'igf.plsql.igf_ap_profile_gen_pkg.delete_int_records.exception','The exception is : ' || SQLERRM );
350     END IF;
351     fnd_message.set_name('IGS','IGS_GE_UNHANDLED_EXP');
352     fnd_message.set_token('NAME','igf_ap_profile_gen_pkg.delete_int_records');
353     fnd_file.put_line(fnd_file.log,fnd_message.get);
354     igs_ge_msg_stack.add;
355 END delete_int_records;
356 
357 PROCEDURE ss_upload_profile ( p_css_id        IN          NUMBER,
358                               x_msg_data      OUT NOCOPY  VARCHAR2,
359                               x_return_status OUT NOCOPY  VARCHAR2
360                             )
361 IS
362   /*
363   ||  Created By : ugummall
364   ||  Created On : 05-Aug-2004
365   ||  Purpose : This Procedure does the following tasks.
366   ||          1. Upload the PROFILE record from interface table to profile table.
367   ||          2. Update PROFILE interface record status to "MATCHED".
368   ||          3. Deletes corresponding records in match details and person match table.
369   ||  Known limitations, enhancements or remarks :
370   ||  Change History :
371   ||  Who             When            What
372   */
373 
374 
375 BEGIN
376 
377   fnd_msg_pub.initialize;
378   x_return_status := fnd_api.g_ret_sts_success;
379   x_msg_data := '';
380 
381   igf_ap_profile_matching_pkg.ss_wrap_upload_Profile ( p_css_id        => p_css_id,
382                                                        x_msg_data      => x_msg_data,
383                                                        x_return_status => x_return_status
384                                                       );
385 EXCEPTION WHEN OTHERS THEN
386   IF fnd_log.level_exception >= fnd_log.g_current_runtime_level THEN
387     fnd_log.string(fnd_log.level_exception,'igf.plsql.igf_ap_profile_gen_pkg.ss_upload_profile.exception','The exception is : ' || SQLERRM );
388   END IF;
389   fnd_message.set_name('IGS','IGS_GE_UNHANDLED_EXP');
390   fnd_message.set_token('NAME','igf_ap_profile_gen_pkg.ss_upload_profile');
391   fnd_file.put_line(fnd_file.log,fnd_message.get);
392   igs_ge_msg_stack.add;
393   x_return_status := 'E';
394 END ss_upload_profile;
395 
396 END igf_ap_profile_gen_pkg;