1 PACKAGE BODY igs_fi_prc_lockbox AS
2 /* $Header: IGSFI85B.pls 120.3 2006/05/15 06:24:01 svuppala ship $ */
3
4 /******************************************************************
5 Created By : Amit Gairola
6 Date Created By : 12-Jun-2003
7 Purpose : Package Body for the Lockbox Processes
8
9 Known limitations,enhancements,remarks:
10 Change History
11 Who When What
12 svuppala 12-May-2006 Bug 5217319 Added call to format amounts by rounding off to currency precision
13 in the igs_fi_lb_ovfl_errs_pkg.insert_row and igs_fi_lb_rect_errs_pkg.insert_row calls
14 pmarada 26-JUL-2005 Enh 3392095, modifed as per tution waiver build, passing p_api_version
15 parameter value as 2.1 to the igs_fi_credit_pvt.create_credit call
16 svuppala 9-JUN-2005 Enh 3442712 - Impact of automatic generation of the Receipt Number.
17 changed logic for credit_number in invoke_credits_api_pvt().
18 shtatiko 27-AUG-2003 Enh# 3045007, Modified valtype2_and_import_rects and initialize.
19 Added two new parameters p_n_credit_type_id, p_n_receipt_amt to invoke_credits_api_pvt
20 And added g_v_inst_payment, g_v_label_bal_amnt and g_v_label_dflt_cr_type.
21 pathipat 21-Aug-2003 Enh 3076768 - Auto Release of Holds
22 Modified invoke_credits_api_pvt() and
23 valtype2_and_import_rects()
24 agairola 07-Jul-03 Bug: 3032415 Modified validate_type1 procedure
25 ***************************************************************** */
26
27 g_v_ind_no CONSTANT VARCHAR2(5) := 'N';
28 g_v_line_sep CONSTANT VARCHAR2(100) := '+'||RPAD('-',75,'-')||'+';
29 g_v_label_lb_name igs_lookup_values.meaning%TYPE;
30 g_v_noval CONSTANT VARCHAR2(10) := 'NOVALUE';
31 g_n_retcode NUMBER(1) := 0;
32 g_v_gl_date_source igs_fi_lockboxes.gl_date_source_code%TYPE;
33 g_v_user_supp_dt CONSTANT VARCHAR2(30) := 'USER_SUPPLIED_DATE';
34 g_v_deposit_date CONSTANT VARCHAR2(30) := 'DEPOSIT_DATE';
35 g_v_imp_date CONSTANT VARCHAR2(30) := 'IMPORT_DATE';
36 g_v_currency_cd igs_fi_control.currency_cd%TYPE;
37
38 g_b_rec_exists BOOLEAN;
39
40 g_lb_int_tab lb_int_tab;
41 g_t_rec_tab lb_receipt_tab;
42 g_v_app CONSTANT VARCHAR2(5) := 'APP';
43 g_v_enr_deposit CONSTANT VARCHAR2(15) := 'ENRDEPOSIT';
44 g_v_oth_deposit CONSTANT VARCHAR2(15) := 'OTHDEPOSIT';
45 g_v_inst_payment CONSTANT VARCHAR2(30) := 'INSTALLMENT_PAYMENTS';
46 g_v_fee CONSTANT VARCHAR2(5) := 'FEE';
47 g_v_adm CONSTANT VARCHAR2(5) := 'ADM';
48 g_v_success CONSTANT VARCHAR2(10) := 'SUCCESS';
49 g_v_error CONSTANT VARCHAR2(10) := 'ERROR';
50 g_v_todo CONSTANT VARCHAR2(10) := 'TODO';
51 g_v_receipt CONSTANT VARCHAR2(30) := 'RECEIPT';
52 g_v_receipt_oflow CONSTANT VARCHAR2(30) := 'RECEIPT_OFLOW';
53 g_v_batch_header CONSTANT VARCHAR2(30) := 'BATCH_HEADER';
54 g_v_tran_header CONSTANT VARCHAR2(30) := 'TRAN_HEADER';
55 g_v_lock_header CONSTANT VARCHAR2(30) := 'LOCK_HEADER';
56
57 g_v_test_run_val igs_lookup_values.meaning%TYPE;
58 g_v_label_test_run igs_lookup_values.meaning%TYPE;
59 g_v_label_batch igs_lookup_values.meaning%TYPE;
60 g_v_label_item igs_lookup_values.meaning%TYPE;
61 g_v_label_status igs_lookup_values.meaning%TYPE;
62 g_v_label_success igs_lookup_values.meaning%TYPE;
63 g_v_label_err igs_lookup_values.meaning%TYPE;
64 g_v_label_party igs_lookup_values.meaning%TYPE;
65 g_v_label_rec_amnt igs_lookup_values.meaning%TYPE;
66 g_v_label_bal_amnt igs_lookup_values.meaning%TYPE;
67 g_v_label_cr_type igs_lookup_values.meaning%TYPE;
68 g_v_label_dflt_cr_type igs_lookup_values.meaning%TYPE;
69 g_v_label_fee_prd igs_lookup_values.meaning%TYPE;
70 g_v_label_gl_date igs_lookup_values.meaning%TYPE;
71 g_v_label_adm_appl_num igs_lookup_values.meaning%TYPE;
72 g_v_label_charge_code igs_lookup_values.meaning%TYPE;
73 g_v_label_bank_app_amt igs_lookup_values.meaning%TYPE;
74 g_v_label_act_app_amt igs_lookup_values.meaning%TYPE;
75 g_v_label_num_rec igs_lookup_values.meaning%TYPE;
76 g_v_label_cur_rec igs_lookup_values.meaning%TYPE;
77 g_v_label_type1 igs_lookup_values.meaning%TYPE;
78 g_v_cr_desc igs_lookup_values.meaning%TYPE;
79 g_b_log_head BOOLEAN := FALSE;
80 g_v_label_type2 igs_lookup_values.meaning%TYPE;
81
82 g_v_holds_message fnd_new_messages.message_text%TYPE := NULL;
83
84 PROCEDURE log_line(p_v_label VARCHAR2,
85 p_v_value VARCHAR2) AS
86 /******************************************************************
87 Created By : Amit Gairola
88 Date Created By : 12-Jun-2003
89 Purpose : Procedure for logging a single line
90
91 Known limitations,enhancements,remarks:
92 Change History
93 Who When What
94 ***************************************************************** */
95 BEGIN
96 fnd_file.put_line(fnd_file.log,
97 p_v_label||' : '||p_v_value);
98 END log_line;
99
100 PROCEDURE initialize AS
101 /******************************************************************
102 Created By : Amit Gairola
103 Date Created By : 12-Jun-2003
104 Purpose : Procedure for initializing variables
105
106 Known limitations,enhancements,remarks:
107 Change History
108 Who When What
109 ***************************************************************** */
110 l_lb_int_tab lb_int_tab;
111 l_t_rec_tab lb_receipt_tab;
112 BEGIN
113
114 -- Procedure for initializing the global variables and the
115 -- initializing of the PL/SQL tables
116 g_lb_int_tab := l_lb_int_tab;
117 g_t_rec_tab := l_t_rec_tab;
118 g_b_log_head := FALSE;
119 g_n_retcode := 0;
120 g_v_cr_desc := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
121 'LOCKBOX_PAYMENT');
122 g_v_label_test_run := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
123 'TEST_RUN');
124 g_v_label_lb_name := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
125 'LOCKBOX_NUMBER');
126 g_v_label_batch := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
127 'BATCH_NAME');
128 g_v_label_item := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
129 'ITEM_NUMBER');
130 g_v_label_status := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
131 'STATUS');
132 g_v_label_success := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
133 'SUCCESS');
134 g_v_label_err := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
135 'ERROR');
136 g_v_label_party := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
137 'PARTY');
138 g_v_label_rec_amnt := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
139 'REC_AMOUNT');
140 g_v_label_bal_amnt := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
141 'BALANCE_AMOUNT');
142 g_v_label_cr_type := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
143 'CREDIT_TYPE_NAME');
144 g_v_label_dflt_cr_type := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
145 'DFLT_CREDIT_TYPE_NAME');
146 g_v_label_fee_prd := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
147 'FEE_PERIOD');
148 g_v_label_gl_date := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
149 'GL_DATE');
150 g_v_label_adm_appl_num := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
151 'ADM_APPL_NUM');
152 g_v_label_charge_code := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
153 'CHARGE_NUMBER');
154 g_v_label_bank_app_amt := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
155 'BANK_APPL_AMT');
156 g_v_label_act_app_amt := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
157 'ACT_APPL_AMT');
158 g_v_label_num_rec := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
159 'REC_PROCESS');
160 g_v_label_cur_rec := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
161 'AMT_PROCESS');
162 g_v_label_type1 := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
163 'TYPE1_ERR');
164 g_v_label_type2 := igs_fi_gen_gl.get_lkp_meaning('IGS_FI_LOCKBOX',
165 'TYPE2_ERR');
166 g_b_rec_exists := FALSE;
167 END initialize;
168
169 PROCEDURE log_type2_err(p_v_lockbox_name VARCHAR2,
170 p_v_batch_name VARCHAR2,
171 p_v_item_number VARCHAR2) AS
172 /******************************************************************
173 Created By : Amit Gairola
174 Date Created By : 12-Jun-2003
175 Purpose : Procedure for logging type2 error headers
176
177 Known limitations,enhancements,remarks:
178 Change History
179 Who When What
180 ***************************************************************** */
181 BEGIN
182
183 -- g_b_log_head is a global boolean variable used if the
184 -- Lockbox Name, BatchName, Item Number and status have to be logged
185 -- for type 2 validations
186 IF NOT g_b_log_head THEN
187 fnd_file.new_line(fnd_file.log);
188 log_line(g_v_label_lb_name,
189 p_v_lockbox_name);
190 log_line(g_v_label_batch,
191 p_v_batch_name);
192 log_line(g_v_label_item,
193 p_v_item_number);
194 log_line(g_v_label_status,
195 g_v_label_err);
196 g_b_log_head := TRUE;
197 END IF;
198 END log_type2_err;
199
200 FUNCTION validate_parameters(p_v_lockbox_name VARCHAR2,
201 p_d_gl_date DATE,
202 p_v_test_run VARCHAR2) RETURN BOOLEAN AS
203 /******************************************************************
204 Created By : Amit Gairola
205 Date Created By : 12-Jun-2003
206 Purpose : Procedure for validating parameters
207
208 Known limitations,enhancements,remarks:
209 Change History
210 Who When What
211 ***************************************************************** */
212 CURSOR cur_lockbox(cp_lockbox_name VARCHAR2,
213 cp_ind_yn VARCHAR2) IS
214 SELECT gl_date_source_code
215 FROM igs_fi_lockboxes
216 WHERE lockbox_name = cp_lockbox_name
217 AND closed_flag = cp_ind_yn;
218
219 l_b_val_parm BOOLEAN;
220 l_v_manage_acc igs_fi_control.manage_accounts%TYPE;
221 l_v_message_name fnd_new_messages.message_name%TYPE;
222 l_v_closing_status VARCHAR2(10);
223 l_v_curr_desc fnd_currencies.description%TYPE;
224 l_v_message_text VARCHAR2(2000);
225 BEGIN
226 l_b_val_parm := TRUE;
227 fnd_file.put_line(fnd_file.log,
228 g_v_line_sep);
229 fnd_file.put_line(fnd_file.log,
230 fnd_message.get_string('IGS',
231 'IGS_FI_ANC_LOG_PARM'));
232 fnd_file.new_line(fnd_file.log);
233
234 g_v_test_run_val := igs_fi_gen_gl.get_lkp_meaning('YES_NO',
235 p_v_test_run);
236
237 -- Log the parameters
238 log_line(g_v_label_lb_name,
239 p_v_lockbox_name);
240 log_line(g_v_label_gl_date,
241 p_d_gl_date);
242 log_line(g_v_label_test_run,
243 NVL(g_v_test_run_val,p_v_test_run));
244
245 fnd_file.new_line(fnd_file.log);
246 fnd_file.put_line(fnd_file.log,
247 g_v_line_sep);
248
249 -- Check for Manage Account
250 igs_fi_com_rec_interface.chk_manage_account(p_v_manage_acc => l_v_manage_acc,
251 p_v_message_name => l_v_message_name);
252
253 -- If Manage Accounts is NULL or is OTHER then error has to be raised
254 IF ((l_v_manage_acc IS NULL) OR (l_v_manage_acc = 'OTHER')) THEN
255 l_b_val_parm := FALSE;
256 fnd_message.set_name('IGS',
257 l_v_message_name);
258 fnd_file.put_line(fnd_file.log,
259 fnd_message.get);
260 RETURN l_b_val_parm;
261 END IF;
262
263 l_v_message_name := null;
264 igs_fi_gen_gl.finp_get_cur(p_v_currency_cd => g_v_currency_cd,
265 p_v_curr_desc => l_v_curr_desc,
266 p_v_message_name => l_v_message_text);
267 IF l_v_message_text IS NOT NULL THEN
268 l_b_val_parm := FALSE;
269 fnd_message.set_name('IGS',
270 l_v_message_name);
271 fnd_file.put_line(fnd_file.log,
272 fnd_message.get);
273 END IF;
274
275 -- Validate if the Lockbox Name is valid
276 OPEN cur_lockbox(p_v_lockbox_name,
277 'N');
278 FETCH cur_lockbox INTO g_v_gl_date_source;
279 IF cur_lockbox%NOTFOUND THEN
280 l_b_val_parm := FALSE;
281 fnd_message.set_name('IGS',
282 'IGS_FI_CAPI_INVALID_LOCKBOX');
283 fnd_message.set_token('LOCKBOX_NAME',
284 p_v_lockbox_name);
285 fnd_file.put_line(fnd_file.log,
286 fnd_message.get);
287 END IF;
288 CLOSE cur_lockbox;
289
290 -- If the gl date source is user supplied and gl_date is not passed as input
291 -- then error needs to be raised.
292 IF g_v_gl_date_source = g_v_user_supp_dt THEN
293 IF p_d_gl_date IS NULL THEN
294 l_b_val_parm := FALSE;
295 fnd_message.set_name('IGS',
296 'IGS_FI_GL_DATE_REQD');
297 fnd_file.put_line(fnd_file.log,
298 fnd_message.get);
299 ELSE
300
301 -- If the GL Date is passed then, check if the GL Date is in an open/future period
302 igs_fi_gen_gl.get_period_status_for_date(p_d_date => p_d_gl_date,
303 p_v_closing_status => l_v_closing_status,
304 p_v_message_name => l_v_message_name);
305 IF l_v_message_name IS NOT NULL THEN
306 l_b_val_parm := FALSE;
307 fnd_message.set_name('IGS',
308 l_v_message_name);
309 fnd_file.put_line(fnd_file.log,
310 fnd_message.get);
311 ELSE
312 IF l_v_closing_status NOT IN ('O','F') THEN
313 fnd_message.set_name('IGS',
314 'IGS_FI_INVALID_GL_DATE');
315 fnd_message.set_token('GL_DATE',
316 p_d_gl_date);
317 fnd_file.put_line(fnd_file.log,
318 fnd_message.get);
319 l_b_val_parm := FALSE;
320 END IF;
321 END IF;
322 END IF;
323 ELSE
324
325 -- Log message to the user that the GL Date has been disregarded because the
326 -- gl date source for the lockbox is not user supplied
327 IF p_d_gl_date IS NOT NULL THEN
328 fnd_message.set_name('IGS',
329 'IGS_FI_GL_DATE_DISRGD');
330 fnd_file.put_line(fnd_file.log,
331 fnd_message.get);
332 END IF;
333 END IF;
334
335 -- validate for Test Run
336 IF p_v_test_run NOT IN ('Y','N') THEN
337 l_b_val_parm := FALSE;
338 fnd_message.set_name('IGS',
339 'IGS_GE_INVALID_VALUE');
340 fnd_file.put_line(fnd_file.log,
341 fnd_message.get);
342 END IF;
343
344 fnd_file.put_line(fnd_file.log,
345 g_v_line_sep);
346 RETURN l_b_val_parm;
347 END validate_parameters;
348
349 FUNCTION get_credit_type_name(p_n_credit_type_id igs_fi_cr_types.credit_type_id%TYPE) RETURN VARCHAR2 AS
350 /******************************************************************
351 Created By : Amit Gairola
352 Date Created By : 12-Jun-2003
353 Purpose : Function for getting the credit type name
354
355 Known limitations,enhancements,remarks:
356 Change History
357 Who When What
358 ***************************************************************** */
359 CURSOR cur_crt(cp_credit_type_id igs_fi_cr_types.credit_type_id%TYPE) IS
360 SELECT credit_type_name
361 FROM igs_fi_cr_types
362 WHERE credit_type_id = cp_credit_type_id;
363
364 l_v_cr_type_name igs_fi_cr_types.credit_type_name%TYPE;
365 BEGIN
366 OPEN cur_crt(p_n_credit_type_id);
367 FETCH cur_crt INTO l_v_cr_type_name;
368 CLOSE cur_crt;
369
370 RETURN l_v_cr_type_name;
371 END get_credit_type_name;
372
373 FUNCTION get_fee_period(p_v_cal_type igs_ca_inst.cal_type%TYPE,
374 p_n_cal_seq igs_ca_inst.sequence_number%TYPE) RETURN VARCHAR2 AS
375 /******************************************************************
376 Created By : Amit Gairola
377 Date Created By : 12-Jun-2003
378 Purpose : Function for getting the fee period
379
380 Known limitations,enhancements,remarks:
381 Change History
382 Who When What
383 ***************************************************************** */
384 CURSOR cur_fee_prd(cp_cal_type igs_ca_inst.cal_type%TYPE,
385 cp_cal_seq igs_ca_inst.sequence_number%TYPE) IS
386 SELECT description
387 FROM igs_ca_inst
388 WHERE cal_type = cp_cal_type
389 AND sequence_number = cp_cal_seq;
390
391 l_v_desc igs_ca_inst.description%TYPE;
392 BEGIN
393 IF p_v_cal_type IS NULL OR p_n_cal_seq IS NULL THEN
394 l_v_desc := NULL;
395 ELSE
396 OPEN cur_fee_prd(p_v_cal_type,
397 p_n_cal_seq);
398 FETCH cur_fee_prd INTO l_v_desc;
399 CLOSE cur_fee_prd;
400 END IF;
401
402 RETURN l_v_desc;
403 END get_fee_period;
404
405 FUNCTION get_record_type_meaning(p_v_lockbox_name igs_fi_lockboxes.lockbox_name%TYPE,
406 p_v_record_identifier_cd igs_fi_lockbox_ints.record_identifier_cd%TYPE) RETURN VARCHAR2 AS
407 /******************************************************************
408 Created By : Amit Gairola
409 Date Created By : 12-Jun-2003
410 Purpose : Function for getting the record type meaning
411
412 Known limitations,enhancements,remarks:
413 Change History
414 Who When What
415 ***************************************************************** */
416 CURSOR cur_rc_type(cp_lockbox_name igs_fi_lockboxes.lockbox_name%TYPE,
417 cp_rec_identifier_cd igs_fi_lockbox_ints.record_identifier_cd%TYPE) IS
418 SELECT record_type_code
419 FROM igs_fi_lb_rec_types
420 WHERE lockbox_name = cp_lockbox_name
421 AND record_identifier_cd = cp_rec_identifier_cd;
422
423 l_v_rc_type igs_fi_lb_rec_types.record_type_code%TYPE;
424 BEGIN
425 l_v_rc_type := NULL;
426 OPEN cur_rc_type(p_v_lockbox_name,
427 p_v_record_identifier_cd);
428 FETCH cur_rc_type INTO l_v_rc_type;
429 CLOSE cur_rc_type;
430
431 RETURN NVL(l_v_rc_type, g_v_noval);
432 END get_record_type_meaning;
433
434 FUNCTION populate_lb_interface(p_v_lockbox_name igs_fi_lockboxes.lockbox_name%TYPE) RETURN BOOLEAN AS
435 /******************************************************************
436 Created By : Amit Gairola
437 Date Created By : 12-Jun-2003
438 Purpose : Function for populating the global PL/SQL interface table
439
440 Known limitations,enhancements,remarks:
441 Change History
442 Who When What
443 ***************************************************************** */
444
445 -- Cursor for getting the TODO records for the Lockbox Name passed as input
446 -- from the Interface table
447 CURSOR cur_lb_ints(cp_lockbox_name VARCHAR2,
448 cp_status VARCHAR2) IS
449 SELECT rowid row_id, lb.*
450 FROM igs_fi_lockbox_ints lb
451 WHERE lockbox_name = cp_lockbox_name
452 AND record_status = cp_status
453 FOR UPDATE NOWAIT
454 ORDER BY lockbox_interface_id;
455
456 -- Cursor for getting the TODO records for the Batch Name passed as input
457 -- from the Interface table where lockbox name is null
458 CURSOR cur_lb_batch(cp_batch_name igs_fi_lockbox_ints.batch_name%TYPE,
459 cp_status VARCHAR2) IS
460 SELECT rowid row_id,
461 lb.*
462 FROM igs_fi_lockbox_ints lb
463 WHERE batch_name = cp_batch_name
464 AND record_status = cp_status
465 AND lockbox_name IS NULL
466 FOR UPDATE NOWAIT
467 ORDER BY lockbox_interface_id;
468
469 l_b_upd_err BOOLEAN;
470 l_n_cntr NUMBER(38);
471 l_n_cntr1 NUMBER(38);
472 l_b_batch_head_exists BOOLEAN;
473 l_v_rec_type_meaning igs_fi_lb_rec_types.record_type_code%TYPE;
474 BEGIN
475 l_b_upd_err := FALSE;
476 l_b_batch_head_exists := FALSE;
477
478 l_n_cntr := 0;
479 l_n_cntr1 := 0;
480
481 -- Loop across the TODO records in the Interface table for the lockbox name
482 FOR l_rec_lb_ints IN cur_lb_ints(p_v_lockbox_name,g_v_todo) LOOP
483
484 -- For each record selected, add the record to the PL/SQL table
485 g_b_rec_exists := TRUE;
486
487 l_n_cntr1 := l_n_cntr1+1;
488
489 IF l_n_cntr1 = 1 THEN
490 fnd_file.put_line(fnd_file.log,
491 g_v_line_sep);
492 fnd_file.put_line(fnd_file.log,
493 g_v_label_type1);
494 fnd_file.put_line(fnd_file.log,
495 g_v_line_sep);
496 fnd_file.new_line(fnd_file.log);
497 END IF;
498
499 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).row_id := l_rec_lb_ints.row_id;
500 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).lockbox_interface_id := l_rec_lb_ints.lockbox_interface_id;
501 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).record_identifier_cd := l_rec_lb_ints.record_identifier_cd;
502 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).record_status := l_rec_lb_ints.record_status;
503 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).deposit_date := l_rec_lb_ints.deposit_date;
504 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).transmission_record_count := l_rec_lb_ints.transmission_record_count;
505 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).transmission_amt := l_rec_lb_ints.transmission_amt;
506 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).lockbox_name := l_rec_lb_ints.lockbox_name;
507 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).lockbox_batch_count := l_rec_lb_ints.lockbox_batch_count;
508 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).lockbox_record_count := l_rec_lb_ints.lockbox_record_count;
509 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).lockbox_amt := l_rec_lb_ints.lockbox_amt;
510 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).batch_name := l_rec_lb_ints.batch_name;
511 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).batch_record_count := l_rec_lb_ints.batch_record_count;
512 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).batch_amt := l_rec_lb_ints.batch_amt;
513 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).item_number := l_rec_lb_ints.item_number;
514 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).receipt_amt := l_rec_lb_ints.receipt_amt;
515 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).check_cd := l_rec_lb_ints.check_cd;
516 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).party_number := l_rec_lb_ints.party_number;
517 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).payer_name := l_rec_lb_ints.payer_name;
518 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).charge_cd1 := l_rec_lb_ints.charge_cd1;
519 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).charge_cd2 := l_rec_lb_ints.charge_cd2;
520 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).charge_cd3 := l_rec_lb_ints.charge_cd3;
521 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).charge_cd4 := l_rec_lb_ints.charge_cd4;
522 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).charge_cd5 := l_rec_lb_ints.charge_cd5;
523 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).charge_cd6 := l_rec_lb_ints.charge_cd6;
524 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).charge_cd7 := l_rec_lb_ints.charge_cd7;
525 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).charge_cd8 := l_rec_lb_ints.charge_cd8;
526 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).applied_amt1 := l_rec_lb_ints.applied_amt1;
527 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).applied_amt2 := l_rec_lb_ints.applied_amt2;
528 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).applied_amt3 := l_rec_lb_ints.applied_amt3;
529 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).applied_amt4 := l_rec_lb_ints.applied_amt4;
530 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).applied_amt5 := l_rec_lb_ints.applied_amt5;
531 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).applied_amt6 := l_rec_lb_ints.applied_amt6;
532 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).applied_amt7 := l_rec_lb_ints.applied_amt7;
533 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).applied_amt8 := l_rec_lb_ints.applied_amt8;
534 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).credit_type_cd := l_rec_lb_ints.credit_type_cd;
535 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).fee_cal_instance_cd := l_rec_lb_ints.fee_cal_instance_cd;
536 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).adm_application_id := l_rec_lb_ints.adm_application_id;
537 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute_category := l_rec_lb_ints.attribute_category;
538 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute1 := l_rec_lb_ints.attribute1;
539 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute2 := l_rec_lb_ints.attribute2;
540 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute3 := l_rec_lb_ints.attribute3;
541 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute4 := l_rec_lb_ints.attribute4;
542 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute5 := l_rec_lb_ints.attribute5;
543 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute6 := l_rec_lb_ints.attribute6;
544 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute7 := l_rec_lb_ints.attribute7;
545 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute8 := l_rec_lb_ints.attribute8;
546 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute9 := l_rec_lb_ints.attribute9;
547 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute10 := l_rec_lb_ints.attribute10;
548 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute11 := l_rec_lb_ints.attribute11;
549 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute12 := l_rec_lb_ints.attribute12;
550 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute13 := l_rec_lb_ints.attribute13;
551 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute14 := l_rec_lb_ints.attribute14;
552 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute15 := l_rec_lb_ints.attribute15;
553 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute16 := l_rec_lb_ints.attribute16;
554 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute17 := l_rec_lb_ints.attribute17;
555 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute18 := l_rec_lb_ints.attribute18;
556 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute19 := l_rec_lb_ints.attribute19;
557 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute20 := l_rec_lb_ints.attribute20;
558
559 -- Get the Record Type Meaning for the Lockbox Name and the Record Identifier of the
560 -- Interface table record.
561 l_v_rec_type_meaning := NULL;
562 l_v_rec_type_meaning := get_record_type_meaning(p_v_lockbox_name,
563 l_rec_lb_ints.record_identifier_cd);
564
565 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).system_record_identifier := l_v_rec_type_meaning;
566
567 -- If the record type meaning is NOVALUE, then there is an error and the set of Interface records should be marked as
568 -- Error
569 IF l_v_rec_type_meaning = g_v_noval THEN
570 fnd_message.set_name('IGS','IGS_FI_INVALID_RECORD_ID');
571 fnd_message.set_token('RECORD_IDENTIFIER',
572 l_rec_lb_ints.record_identifier_cd);
573 fnd_message.set_token('LOCKBOX_NAME',
574 p_v_lockbox_name);
575 fnd_file.put_line(fnd_file.log,
576 fnd_message.get);
577 l_b_upd_err := TRUE;
578 END IF;
579
580 -- Check if Batch Headers exist. Will be used in the next step. This has been kept to improve the
581 -- performance in case there are no batch headers
582 IF l_v_rec_type_meaning = g_v_batch_header THEN
583 l_b_batch_head_exists := TRUE;
584 END IF;
585 END LOOP;
586
587 -- If the batch headers exist in the first selection of interface records, then
588 IF l_b_batch_head_exists THEN
589 l_n_cntr := null;
590
591 -- For the batch name in the batch header, loop across the table to select the receipt and receipt overflow
592 -- records that have the same batch name and null lockbox name
593 FOR l_n_cntr IN g_lb_int_tab.FIRST..g_lb_int_tab.LAST LOOP
594 IF g_lb_int_tab.EXISTS(l_n_cntr) THEN
595 IF ((g_lb_int_tab(l_n_cntr).system_record_identifier = g_v_batch_header) AND
596 g_lb_int_tab(l_n_cntr).batch_name IS NOT NULL) THEN
597 FOR l_rec_lb_ints IN cur_lb_batch(g_lb_int_tab(l_n_cntr).batch_name,g_v_todo) LOOP
598 IF NOT g_lb_int_tab.EXISTS(l_rec_lb_ints.lockbox_interface_id) THEN
599 l_v_rec_type_meaning := NULL;
600 l_v_rec_type_meaning := get_record_type_meaning(p_v_lockbox_name,
601 l_rec_lb_ints.record_identifier_cd);
602
603 -- If the record type meaning is NOVALUE, then there is an error and the set of Interface records should be marked as
604 -- Error
605 IF l_v_rec_type_meaning = g_v_noval THEN
606 fnd_message.set_name('IGS','IGS_FI_INVALID_RECORD_ID');
607 fnd_message.set_token('RECORD_IDENTIFIER',
608 l_rec_lb_ints.record_identifier_cd);
609 fnd_message.set_token('LOCKBOX_NAME',
610 p_v_lockbox_name);
611 fnd_file.put_line(fnd_file.log,
612 fnd_message.get);
613 l_b_upd_err := TRUE;
614 END IF;
615
616 -- If the record type meaning is either Receipt/Receipt Overflow/Novalue, then add the record to the
617 -- Interface table
618 IF l_v_rec_type_meaning IN (g_v_receipt,
619 g_v_receipt_oflow,
620 g_v_noval) THEN
621 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).row_id := l_rec_lb_ints.row_id;
622 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).lockbox_interface_id := l_rec_lb_ints.lockbox_interface_id;
623 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).record_identifier_cd := l_rec_lb_ints.record_identifier_cd;
624 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).record_status := l_rec_lb_ints.record_status;
625 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).deposit_date := l_rec_lb_ints.deposit_date;
626 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).transmission_record_count := l_rec_lb_ints.transmission_record_count;
627 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).transmission_amt := l_rec_lb_ints.transmission_amt;
628 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).lockbox_name := p_v_lockbox_name;
629 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).lockbox_batch_count := l_rec_lb_ints.lockbox_batch_count;
630 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).lockbox_record_count := l_rec_lb_ints.lockbox_record_count;
631 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).lockbox_amt := l_rec_lb_ints.lockbox_amt;
632 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).batch_name := l_rec_lb_ints.batch_name;
633 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).batch_amt := l_rec_lb_ints.batch_amt;
634 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).batch_record_count := l_rec_lb_ints.batch_record_count;
635 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).item_number := l_rec_lb_ints.item_number;
636 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).receipt_amt := l_rec_lb_ints.receipt_amt;
637 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).check_cd := l_rec_lb_ints.check_cd;
638 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).party_number := l_rec_lb_ints.party_number;
639 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).payer_name := l_rec_lb_ints.payer_name;
640 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).charge_cd1 := l_rec_lb_ints.charge_cd1;
641 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).charge_cd2 := l_rec_lb_ints.charge_cd2;
642 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).charge_cd3 := l_rec_lb_ints.charge_cd3;
643 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).charge_cd4 := l_rec_lb_ints.charge_cd4;
644 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).charge_cd5 := l_rec_lb_ints.charge_cd5;
645 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).charge_cd6 := l_rec_lb_ints.charge_cd6;
646 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).charge_cd7 := l_rec_lb_ints.charge_cd7;
647 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).charge_cd8 := l_rec_lb_ints.charge_cd8;
648 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).applied_amt1 := l_rec_lb_ints.applied_amt1;
649 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).applied_amt2 := l_rec_lb_ints.applied_amt2;
650 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).applied_amt3 := l_rec_lb_ints.applied_amt3;
651 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).applied_amt4 := l_rec_lb_ints.applied_amt4;
652 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).applied_amt5 := l_rec_lb_ints.applied_amt5;
653 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).applied_amt6 := l_rec_lb_ints.applied_amt6;
654 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).applied_amt7 := l_rec_lb_ints.applied_amt7;
655 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).applied_amt8 := l_rec_lb_ints.applied_amt8;
656 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).credit_type_cd := l_rec_lb_ints.credit_type_cd;
657 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).fee_cal_instance_cd := l_rec_lb_ints.fee_cal_instance_cd;
658 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).adm_application_id := l_rec_lb_ints.adm_application_id;
659 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute_category := l_rec_lb_ints.attribute_category;
660 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute1 := l_rec_lb_ints.attribute1;
661 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute2 := l_rec_lb_ints.attribute2;
662 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute3 := l_rec_lb_ints.attribute3;
663 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute4 := l_rec_lb_ints.attribute4;
664 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute5 := l_rec_lb_ints.attribute5;
665 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute6 := l_rec_lb_ints.attribute6;
666 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute7 := l_rec_lb_ints.attribute7;
667 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute8 := l_rec_lb_ints.attribute8;
668 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute9 := l_rec_lb_ints.attribute9;
669 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute10 := l_rec_lb_ints.attribute10;
670 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute11 := l_rec_lb_ints.attribute11;
671 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute12 := l_rec_lb_ints.attribute12;
672 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute13 := l_rec_lb_ints.attribute13;
673 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute14 := l_rec_lb_ints.attribute14;
674 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute15 := l_rec_lb_ints.attribute15;
675 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute16 := l_rec_lb_ints.attribute16;
676 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute17 := l_rec_lb_ints.attribute17;
677 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute18 := l_rec_lb_ints.attribute18;
678 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute19 := l_rec_lb_ints.attribute19;
679 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).attribute20 := l_rec_lb_ints.attribute20;
680 g_lb_int_tab(l_rec_lb_ints.lockbox_interface_id).system_record_identifier := l_v_rec_type_meaning;
681 END IF;
682 END IF;
683 END LOOP;
684 END IF;
685 END IF;
686 END LOOP;
687 END IF;
688
689 RETURN l_b_upd_err;
690 END populate_lb_interface;
691
692 FUNCTION validate_type1 RETURN VARCHAR2 AS
693 /******************************************************************
694 Created By : Amit Gairola
695 Date Created By : 12-Jun-2003
696 Purpose : Function for type 1 validations
697
698 Known limitations,enhancements,remarks:
699 Change History
700 Who When What
701 agairola 07-Jul-03 Bug: 3032415 Added the check for the negative amount
702 for the receipt and receipt overflow records
703 agairola 01-Jul-03 Bug: 3030453 Added the check for the batch name
704 also when the Amount is being summed up
705 ***************************************************************** */
706 l_t_th_tab lb_int_tab;
707 l_n_th_cntr NUMBER(38) := 0;
708
709 l_t_lh_tab lb_int_tab;
710 l_n_lh_cntr NUMBER(38) := 0;
711
712 l_t_bh_tab lb_int_tab;
713 l_n_bh_cntr NUMBER(38) := 0;
714
715 l_t_rc_tab lb_int_tab;
716 l_n_rc_cntr NUMBER(38) := 0;
717
718 l_t_ro_tab lb_int_tab;
719 l_n_ro_cntr NUMBER(38) := 0;
720
721 l_n_cntr NUMBER(38) := 0;
722 l_n_cntr1 NUMBER(38) := 0;
723 l_v_val_status VARCHAR2(1);
724
725 TYPE t_distinct_batch IS TABLE OF igs_fi_lockbox_ints.batch_name%TYPE
726 INDEX BY BINARY_INTEGER;
727
728 l_t_distinct_batch t_distinct_batch;
729 l_n_receipt_amount igs_fi_credits.amount%TYPE;
730 l_b_distinct_batch_found BOOLEAN := FALSE;
731 l_n_batch_count NUMBER(38);
732 l_n_batch_amount igs_fi_credits.amount%TYPE;
733 l_b_rec_batch BOOLEAN;
734 l_b_batch_unq BOOLEAN;
735 l_b_chg_amt_match BOOLEAN;
736 l_n_amt_appl igs_fi_lockbox_ints.applied_amt1%TYPE;
737 l_b_rc_ro_match BOOLEAN;
738 l_b_ro_chg_appl BOOLEAN;
739 l_n_distinct_batch_count NUMBER(38);
740 l_b_dup_batches BOOLEAN;
741
742 l_b_ro_identified BOOLEAN;
743 BEGIN
744
745 -- Here, in this procedure, the main interface PL/SQL table is broken down into
746 -- different PL/SQL tables in order to segregate the different types of records
747 -- This has been done to improve the performance of the process.
748 l_t_th_tab.DELETE;
749 l_t_bh_tab.DELETE;
750 l_t_lh_tab.DELETE;
751 l_t_rc_tab.DELETE;
752 l_t_ro_tab.DELETE;
753 l_t_distinct_batch.DELETE;
754
755 l_v_val_status := 'S';
756
757 -- If there are any records in the PL/SQL table, then loop across the records
758 -- and for each type of record, add it to the corresponding PL/SQL table
759 IF g_lb_int_tab.COUNT > 0 THEN
760 l_n_cntr := 0;
761 FOR l_n_cntr IN g_lb_int_tab.FIRST..g_lb_int_tab.LAST LOOP
762 IF g_lb_int_tab.EXISTS(l_n_cntr) THEN
763 IF g_lb_int_tab(l_n_cntr).system_record_identifier = g_v_tran_header THEN
764 l_n_th_cntr := l_n_th_cntr + 1;
765 l_t_th_tab(l_n_th_cntr) := g_lb_int_tab(l_n_cntr);
766 ELSIF g_lb_int_tab(l_n_cntr).system_record_identifier = g_v_lock_header THEN
767 l_n_lh_cntr := l_n_lh_cntr + 1;
768 l_t_lh_tab(l_n_lh_cntr) := g_lb_int_tab(l_n_cntr);
769 ELSIF g_lb_int_tab(l_n_cntr).system_record_identifier = g_v_batch_header THEN
770 l_n_bh_cntr := l_n_bh_cntr + 1;
771 l_t_bh_tab(l_n_bh_cntr) := g_lb_int_tab(l_n_cntr);
772 ELSIF g_lb_int_tab(l_n_cntr).system_record_identifier = g_v_receipt THEN
773 l_n_rc_cntr := l_n_rc_cntr + 1;
774 l_t_rc_tab(l_n_rc_cntr) := g_lb_int_tab(l_n_cntr);
775
776 -- Sum up the Receipt Amount
777 l_n_receipt_amount := NVL(l_n_receipt_amount,0) +
778 NVL(g_lb_int_tab(l_n_cntr).receipt_amt,0);
779 ELSIF g_lb_int_tab(l_n_cntr).system_record_identifier = g_v_receipt_oflow THEN
780 l_n_ro_cntr := l_n_ro_cntr + 1;
781 l_t_ro_tab(l_n_ro_cntr) := g_lb_int_tab(l_n_cntr);
782 END IF;
783 END IF;
784 END LOOP;
785 END IF;
786
787 -- If there are records in the Transaction Header PL/SQL table
788 IF l_t_th_tab.COUNT > 0 THEN
789 l_n_cntr := 0;
790
791 -- Loop across the Transaction Header PL/SQL table
792 FOR l_n_cntr IN l_t_th_tab.FIRST..l_t_th_tab.LAST LOOP
793 IF l_t_th_tab.EXISTS(l_n_cntr) THEN
794
795 -- If the transmission record count is not null and the
796 -- transmission record count is not equal to the number of receipts then
797 -- Log the error in the log file. This is a type 1 validation error.
798 IF ((l_t_th_tab(l_n_cntr).transmission_record_count IS NOT NULL) AND
799 (l_t_th_tab(l_n_cntr).transmission_record_count <> l_n_rc_cntr)) THEN
800 l_v_val_status := 'E';
801 fnd_message.set_name('IGS',
802 'IGS_FI_TH_COUNT_MISMATCH');
803 fnd_file.put_line(fnd_file.log,
804 fnd_message.get);
805 END IF;
806
807 -- If the Transmission Amount is not null and the transmission amount is not equal to the
808 -- receipt amount, then this error message is logged in the log file.
809 IF ((l_t_th_tab(l_n_cntr).transmission_amt IS NOT NULL) AND
810 (l_t_th_tab(l_n_cntr).transmission_amt <> l_n_receipt_amount)) THEN
811 l_v_val_status := 'E';
812 fnd_message.set_name('IGS',
813 'IGS_FI_TH_AMOUNT_MISMATCH');
814 fnd_file.put_line(fnd_file.log,
815 fnd_message.get);
816 END IF;
817 END IF;
818 END LOOP;
819 END IF;
820
821 l_n_cntr := 0;
822
823 -- If there are records in the Lockbox Header
824 IF l_t_lh_tab.COUNT > 0 THEN
825 l_n_cntr := 0;
826
827 -- Loop across the Lockbox Header record PL/SQL table
828 FOR l_n_cntr IN l_t_lh_tab.FIRST..l_t_lh_tab.LAST LOOP
829 IF l_t_lh_tab.EXISTS(l_n_cntr) THEN
830
831 -- If the lockbox batch count is not null
832 IF l_t_lh_tab(l_n_cntr).lockbox_batch_count IS NOT NULL THEN
833
834 -- If there are batch headers, then check if the batch header count is
835 -- equal to the lockbox batch count.
836 IF l_n_bh_cntr > 0 THEN
837 IF l_t_lh_tab(l_n_cntr).lockbox_batch_count <> l_n_bh_cntr THEN
838 l_v_val_status := 'E';
839 fnd_message.set_name('IGS',
840 'IGS_FI_LH_COUNT_MISMATCH');
841 fnd_file.put_line(fnd_file.log,
842 fnd_message.get);
843 END IF;
844 ELSE
845
846 -- If there are no batch headers, then if there are any records in the receipts
847 IF l_t_rc_tab.COUNT > 0 THEN
848 l_n_cntr1 := 0;
849
850 -- Loop across all the receipts records and count the distinct batches
851 FOR l_n_cntr1 IN l_t_rc_tab.FIRST..l_t_rc_tab.LAST LOOP
852 IF l_t_rc_tab.EXISTS(l_n_cntr1) THEN
853
854 -- Logic for counting the distinct batches by using a PL/SQL table
855 IF (l_t_rc_tab(l_n_cntr1).batch_name IS NOT NULL) THEN
856 IF l_t_distinct_batch.COUNT = 0 THEN
857 l_t_distinct_batch(1) := l_t_rc_tab(l_n_cntr1).batch_name;
858 ELSE
859 FOR l_n_cntr2 IN l_t_distinct_batch.FIRST..l_t_distinct_batch.LAST LOOP
860 IF l_t_distinct_batch.EXISTS(l_n_cntr2) THEN
861 IF l_t_distinct_batch(l_n_cntr2) = l_t_rc_tab(l_n_cntr1).batch_name THEN
862 l_b_distinct_batch_found := TRUE;
863 ELSE
864 l_b_distinct_batch_found := FALSE;
865 END IF;
866 END IF;
867 END LOOP;
868
869 IF NOT l_b_distinct_batch_found THEN
870 l_n_distinct_batch_count := l_t_distinct_batch.COUNT;
871 l_t_distinct_batch(l_n_distinct_batch_count+1) := l_t_rc_tab(l_n_cntr1).batch_name;
872 END IF;
873 END IF;
874 ELSE
875
876 -- If the receipt record does not have a batch, then log the error message.
877 l_v_val_status := 'E';
878 fnd_message.set_name('IGS',
879 'IGS_FI_LH_BATCH_MISSING');
880 fnd_file.put_line(fnd_file.log,
881 fnd_message.get);
882 END IF;
883 END IF;
884 END LOOP;
885 ELSE
886 l_v_val_status := 'E';
887 fnd_message.set_name('IGS',
888 'IGS_FI_LH_COUNT_MISMATCH');
889 fnd_file.put_line(fnd_file.log,
890 fnd_message.get);
891 END IF;
892
893 -- If the distinct batch count PL/SQL table has some records and the count does not match the Lockbox Batch Count,
894 -- then it is an error condition
895 IF ((l_t_distinct_batch.COUNT <> l_t_lh_tab(l_n_cntr).lockbox_batch_count) AND
896 (l_t_distinct_batch.COUNT > 0)) THEN
897 l_v_val_status := 'E';
898 fnd_message.set_name('IGS',
899 'IGS_FI_LH_COUNT_MISMATCH');
900 fnd_file.put_line(fnd_file.log,
901 fnd_message.get);
902 END IF;
903 l_t_distinct_batch.DELETE;
904 END IF;
905 END IF;
906
907 -- If the Lockbox Amount is not null and is not equal to the receipt amount, then
908 -- log this as error message
909 IF ((l_t_lh_tab(l_n_cntr).lockbox_amt IS NOT NULL) AND
910 (l_t_lh_tab(l_n_cntr).lockbox_amt <> l_n_receipt_amount)) THEN
911 l_v_val_status := 'E';
912 fnd_message.set_name('IGS',
913 'IGS_FI_LH_AMOUNT_MISMATCH');
914 fnd_file.put_line(fnd_file.log,
915 fnd_message.get);
916 END IF;
917
918 -- If the Lockbox Record Count is not equal to the receipt count, then log this as
919 -- error in the log file
920 IF ((l_t_lh_tab(l_n_cntr).lockbox_record_count IS NOT NULL) AND
921 (l_t_lh_tab(l_n_cntr).lockbox_record_count <> l_n_rc_cntr)) THEN
922 l_v_val_status := 'E';
923 fnd_message.set_name('IGS',
924 'IGS_FI_LH_RECCOUNT_MISMATCH');
925 fnd_file.put_line(fnd_file.log,
926 fnd_message.get);
927 END IF;
928 END IF;
929 END LOOP;
930 END IF;
931
932 l_b_dup_batches := FALSE;
933
934 -- If there are any batch header records then
935 IF l_n_bh_cntr > 0 THEN
936
937 -- Loop across the Batch Header table
938 FOR l_n_cntr IN l_t_bh_tab.FIRST..l_t_bh_tab.LAST LOOP
939
940 -- If the batch name is not null, then
941 IF l_t_bh_tab(l_n_cntr).batch_name IS NOT NULL THEN
942
943 -- Loop across the Batch Header table again to identify if there are any duplicate batches
944 -- If the duplicate batches exist then this is an error and log it in the log file.
945 FOR l_n_cntr1 IN l_t_bh_tab.FIRST..l_t_bh_tab.LAST LOOP
946 IF ((l_t_bh_tab(l_n_cntr1).batch_name IS NOT NULL) AND
947 (l_t_bh_tab(l_n_cntr1).batch_name = l_t_bh_tab(l_n_cntr).batch_name) AND
948 (l_t_bh_tab(l_n_cntr1).lockbox_interface_id <> l_t_bh_tab(l_n_cntr).lockbox_interface_id)) THEN
949 l_v_val_status := 'E';
950 fnd_message.set_name('IGS',
951 'IGS_FI_DUP_BATCHES');
952 fnd_file.put_line(fnd_file.log,
953 fnd_message.get);
954 l_b_dup_batches := TRUE;
955 EXIT;
956 END IF;
957 END LOOP;
958
959 IF l_b_dup_batches THEN
960 EXIT;
961 END IF;
962 END IF;
963 END LOOP;
964
965 -- Loop across the Batch Header table records
966 FOR l_n_cntr IN l_t_bh_tab.FIRST..l_t_bh_tab.LAST LOOP
967 l_n_batch_count := 0;
968 l_n_batch_amount := 0;
969
970 -- If the batch name is not null then
971 IF l_t_bh_tab(l_n_cntr).batch_name IS NOT NULL THEN
972
973 -- If either the batch record count is not null or the batch amount is not
974 -- null, then loop across the receipt record for the same batch name and count
975 -- the receipt record count for the batch and sum up the receipt amount for the batch
976 IF ((l_t_bh_tab(l_n_cntr).batch_record_count IS NOT NULL) OR
977 (l_t_bh_tab(l_n_cntr).batch_amt IS NOT NULL)) THEN
978 FOR l_n_cntr1 IN l_t_rc_tab.FIRST..l_t_rc_tab.LAST LOOP
979 IF l_t_rc_tab.EXISTS(l_n_cntr1) THEN
980 IF ((l_t_rc_tab(l_n_cntr1).batch_name IS NOT NULL) AND
981 (l_t_rc_tab(l_n_cntr1).batch_name = l_t_bh_tab(l_n_cntr).batch_name)) THEN
982 l_n_batch_count := NVL(l_n_batch_count,0) + 1;
983 l_n_batch_amount := NVL(l_n_batch_amount,0) +
984 NVL(l_t_rc_tab(l_n_cntr1).receipt_amt,0);
985 END IF;
986 END IF;
987 END LOOP;
988
989 -- If the batch count does not match the receipt count, then this is an error condition
990 IF l_n_batch_count > 0 THEN
991 IF ((l_n_batch_count <> l_t_bh_tab(l_n_cntr).batch_record_count) AND
992 (l_t_bh_tab(l_n_cntr).batch_record_count IS NOT NULL)) THEN
993 l_v_val_status := 'E';
994 fnd_message.set_name('IGS',
995 'IGS_FI_BH_COUNT_MISMATCH');
996 fnd_message.set_token('BATCH_NAME',
997 l_t_bh_tab(l_n_cntr).batch_name);
998 fnd_file.put_line(fnd_file.log,
999 fnd_message.get);
1000 END IF;
1001 ELSE
1002
1003 -- If there are no records in the receipts PL/SQL table for the batch name
1004 -- then this is an error condition and log this in the log file
1005 l_v_val_status := 'E';
1006 fnd_message.set_name('IGS',
1007 'IGS_FI_NO_REC_IN_BATCH');
1008 fnd_message.set_token('BATCH_NAME',
1009 l_t_bh_tab(l_n_cntr).batch_name);
1010 fnd_file.put_line(fnd_file.log,
1011 fnd_message.get);
1012 END IF;
1013
1014 -- If the batch amount is not equal to the batch amount of the batch header record then
1015 -- log this in the log file
1016 IF ((l_n_batch_amount <> l_t_bh_tab(l_n_cntr).batch_amt) AND
1017 (l_t_bh_tab(l_n_cntr).batch_amt IS NOT NULL)) THEN
1018 l_v_val_status := 'E';
1019 fnd_message.set_name('IGS',
1020 'IGS_FI_BH_AMOUNT_MISMATCH');
1021 fnd_message.set_token('BATCH_NAME',
1022 l_t_bh_tab(l_n_cntr).batch_name);
1023 fnd_file.put_line(fnd_file.log,
1024 fnd_message.get);
1025 END IF;
1026
1027 l_n_batch_count := 0;
1028 l_n_batch_amount := 0;
1029 END IF;
1030 END IF;
1031 END LOOP;
1032 END IF;
1033
1034 -- If there are any receipt records, then
1035 IF l_n_rc_cntr > 0 THEN
1036
1037 -- Loop across the receipt PL/SQL table
1038 FOR l_n_cntr IN l_t_rc_tab.FIRST..l_t_rc_tab.LAST LOOP
1039 l_b_rec_batch := FALSE;
1040 IF l_t_rc_tab.EXISTS(l_n_cntr) THEN
1041
1042 -- If there is a batch name mentioned for the receipt record and there are any
1043 -- batch header records
1044 IF l_t_rc_tab(l_n_cntr).batch_name IS NOT NULL AND l_n_bh_cntr > 0 THEN
1045
1046 -- Loop across the batch header records to identify if the batch name mentioned in the
1047 -- receipts record matches the batch name in any batch header record. If it matches, then
1048 -- exit.
1049 FOR l_n_cntr1 IN l_t_bh_tab.FIRST..l_t_bh_tab.LAST LOOP
1050 IF l_t_bh_tab.EXISTS(l_n_cntr1) THEN
1051 IF ((l_t_bh_tab(l_n_cntr1).batch_name IS NOT NULL) AND
1052 (l_t_bh_tab(l_n_cntr1).batch_name = l_t_rc_tab(l_n_cntr).batch_name)) THEN
1053 l_b_rec_batch := TRUE;
1054 EXIT;
1055 END IF;
1056 END IF;
1057 END LOOP;
1058
1059 -- If the batch header record match does not happen then log the message in the log file.
1060 IF NOT l_b_rec_batch THEN
1061 l_v_val_status := 'E';
1062 fnd_message.set_name('IGS',
1063 'IGS_FI_NO_REC_BATCH_LINK');
1064 fnd_file.put_line(fnd_file.log,
1065 fnd_message.get);
1066 END IF;
1067 END IF;
1068
1069 -- If the item number of the receipt record is null, then this has to be logged in the log file
1070 -- as error
1071 IF l_t_rc_tab(l_n_cntr).item_number IS NULL THEN
1072 l_v_val_status := 'E';
1073 fnd_message.set_name('IGS',
1074 'IGS_FI_REC_ITEMS_MISSING');
1075 fnd_file.put_line(fnd_file.log,
1076 fnd_message.get);
1077 END IF;
1078
1079 -- If the receipt amount is less than 0 or the receipt amount is null, then log this in the log file
1080 IF ((l_t_rc_tab(l_n_cntr).receipt_amt <0) OR (l_t_rc_tab(l_n_cntr).receipt_amt IS NULL)) THEN
1081 l_v_val_status := 'E';
1082 fnd_message.set_name('IGS',
1083 'IGS_FI_REC_AMT_NOT_VALID');
1084 fnd_message.set_token('ITEM_NUMBER',
1085 l_t_rc_tab(l_n_cntr).item_number);
1086 fnd_message.set_token('BATCH_NAME',
1087 l_t_rc_tab(l_n_cntr).batch_name);
1088 fnd_message.set_token('LOCKBOX_NAME',
1089 l_t_rc_tab(l_n_cntr).lockbox_name);
1090 fnd_file.put_line(fnd_file.log,
1091 fnd_message.get);
1092 END IF;
1093
1094 -- If the party number in the receipt record is null, then log this as an error in the log file
1095 IF l_t_rc_tab(l_n_cntr).party_number IS NULL THEN
1096 l_v_val_status := 'E';
1097 fnd_message.set_name('IGS',
1098 'IGS_FI_REC_PARTY_MISSING');
1099 fnd_message.set_token('ITEM_NUMBER',
1100 l_t_rc_tab(l_n_cntr).item_number);
1101 fnd_message.set_token('BATCH_NAME',
1102 l_t_rc_tab(l_n_cntr).batch_name);
1103 fnd_message.set_token('LOCKBOX_NAME',
1104 l_t_rc_tab(l_n_cntr).lockbox_name);
1105 fnd_file.put_line(fnd_file.log,
1106 fnd_message.get);
1107 END IF;
1108
1109 -- The following logic determines if the item number as mentioned in the receipt record is unique across
1110 -- the receipts records at the batch level(if batch name is provided) or at the lockbox level.
1111 -- If the records are not unique, then the error is logged in the log file.
1112 l_b_batch_unq := FALSE;
1113 IF l_t_rc_tab.COUNT > 0 THEN
1114 FOR l_n_cntr1 IN l_t_rc_tab.FIRST..l_t_rc_tab.LAST LOOP
1115 IF l_t_rc_tab.EXISTS(l_n_cntr1) THEN
1116 IF l_t_rc_tab(l_n_cntr).batch_name IS NOT NULL THEN
1117 IF ((l_t_rc_tab(l_n_cntr).item_number IS NOT NULL) AND
1118 (l_t_rc_tab(l_n_cntr1).item_number IS NOT NULL)) THEN
1119 IF ((l_t_rc_tab(l_n_cntr1).batch_name IS NOT NULL) AND
1120 (l_t_rc_tab(l_n_cntr1).batch_name = l_t_rc_tab(l_n_cntr).batch_name) AND
1121 (l_t_rc_tab(l_n_cntr1).item_number = l_t_rc_tab(l_n_cntr).item_number) AND
1122 (l_t_rc_tab(l_n_cntr1).lockbox_interface_id <> l_t_rc_tab(l_n_cntr).lockbox_interface_id)) THEN
1123 l_b_batch_unq := TRUE;
1124 EXIT;
1125 END IF;
1126 END IF;
1127 ELSE
1128 IF ((l_t_rc_tab(l_n_cntr).item_number IS NOT NULL) AND
1129 (l_t_rc_tab(l_n_cntr1).item_number IS NOT NULL)) THEN
1130 IF ((l_t_rc_tab(l_n_cntr1).item_number = l_t_rc_tab(l_n_cntr).item_number) AND
1131 (l_t_rc_tab(l_n_cntr1).lockbox_interface_id <> l_t_rc_tab(l_n_cntr).lockbox_interface_id)) THEN
1132 l_b_batch_unq := TRUE;
1133 EXIT;
1134 END IF;
1135 END IF;
1136 END IF;
1137 END IF;
1138 END LOOP;
1139 END IF;
1140
1141 IF l_b_batch_unq THEN
1142 l_v_val_status := 'E';
1143 fnd_message.set_name('IGS',
1144 'IGS_FI_DUP_ITEM_NUMBER');
1145 fnd_file.put_line(fnd_file.log,
1146 fnd_message.get);
1147 END IF;
1148
1149 -- If any of the combination pairs of the Charge Code(1-8) and Applied Amount(1-8)
1150 -- has the charge code provided but the corresponding applied amount not provided
1151 -- or vice-versa, then this is an error condition and is logged in the log file.
1152 l_b_chg_amt_match := TRUE;
1153 IF (((l_t_rc_tab(l_n_cntr).charge_cd1 IS NOT NULL) AND
1154 (l_t_rc_tab(l_n_cntr).applied_amt1 IS NULL)) OR
1155 ((l_t_rc_tab(l_n_cntr).charge_cd1 IS NULL) AND
1156 (l_t_rc_tab(l_n_cntr).applied_amt1 IS NOT NULL))) THEN
1157 l_b_chg_amt_match := FALSE;
1158 END IF;
1159
1160 IF (((l_t_rc_tab(l_n_cntr).charge_cd2 IS NOT NULL) AND
1161 (l_t_rc_tab(l_n_cntr).applied_amt2 IS NULL)) OR
1162 ((l_t_rc_tab(l_n_cntr).charge_cd2 IS NULL) AND
1163 (l_t_rc_tab(l_n_cntr).applied_amt2 IS NOT NULL))) THEN
1164 l_b_chg_amt_match := FALSE;
1165 END IF;
1166
1167 IF (((l_t_rc_tab(l_n_cntr).charge_cd3 IS NOT NULL) AND
1168 (l_t_rc_tab(l_n_cntr).applied_amt3 IS NULL)) OR
1169 ((l_t_rc_tab(l_n_cntr).charge_cd3 IS NULL) AND
1170 (l_t_rc_tab(l_n_cntr).applied_amt3 IS NOT NULL))) THEN
1171 l_b_chg_amt_match := FALSE;
1172 END IF;
1173
1174 IF (((l_t_rc_tab(l_n_cntr).charge_cd4 IS NOT NULL) AND
1175 (l_t_rc_tab(l_n_cntr).applied_amt4 IS NULL)) OR
1176 ((l_t_rc_tab(l_n_cntr).charge_cd4 IS NULL) AND
1177 (l_t_rc_tab(l_n_cntr).applied_amt4 IS NOT NULL))) THEN
1178 l_b_chg_amt_match := FALSE;
1179 END IF;
1180
1181 IF (((l_t_rc_tab(l_n_cntr).charge_cd5 IS NOT NULL) AND
1182 (l_t_rc_tab(l_n_cntr).applied_amt5 IS NULL)) OR
1183 ((l_t_rc_tab(l_n_cntr).charge_cd5 IS NULL) AND
1184 (l_t_rc_tab(l_n_cntr).applied_amt5 IS NOT NULL))) THEN
1185 l_b_chg_amt_match := FALSE;
1186 END IF;
1187
1188 IF (((l_t_rc_tab(l_n_cntr).charge_cd6 IS NOT NULL) AND
1189 (l_t_rc_tab(l_n_cntr).applied_amt6 IS NULL)) OR
1190 ((l_t_rc_tab(l_n_cntr).charge_cd6 IS NULL) AND
1191 (l_t_rc_tab(l_n_cntr).applied_amt6 IS NOT NULL))) THEN
1192 l_b_chg_amt_match := FALSE;
1193 END IF;
1194
1195 IF (((l_t_rc_tab(l_n_cntr).charge_cd7 IS NOT NULL) AND
1196 (l_t_rc_tab(l_n_cntr).applied_amt7 IS NULL)) OR
1197 ((l_t_rc_tab(l_n_cntr).charge_cd7 IS NULL) AND
1198 (l_t_rc_tab(l_n_cntr).applied_amt7 IS NOT NULL))) THEN
1199 l_b_chg_amt_match := FALSE;
1200 END IF;
1201
1202 IF (((l_t_rc_tab(l_n_cntr).charge_cd8 IS NOT NULL) AND
1203 (l_t_rc_tab(l_n_cntr).applied_amt8 IS NULL)) OR
1204 ((l_t_rc_tab(l_n_cntr).charge_cd8 IS NULL) AND
1205 (l_t_rc_tab(l_n_cntr).applied_amt8 IS NOT NULL))) THEN
1206 l_b_chg_amt_match := FALSE;
1207 END IF;
1208
1209 IF NOT l_b_chg_amt_match THEN
1210 l_v_val_status := 'E';
1211 fnd_message.set_name('IGS',
1212 'IGS_FI_REC_CHG_APPL_MISSING');
1213 fnd_message.set_token('ITEM_NUMBER',
1214 l_t_rc_tab(l_n_cntr).item_number);
1215 fnd_message.set_token('BATCH_NAME',
1216 l_t_rc_tab(l_n_cntr).batch_name);
1217 fnd_message.set_token('LOCKBOX_NAME',
1218 l_t_rc_tab(l_n_cntr).lockbox_name);
1219 fnd_file.put_line(fnd_file.log,
1220 fnd_message.get);
1221 END IF;
1222
1223 -- The following logic checks for the negative amount for the Charge Amount
1224 -- for the receipt record
1225 IF NVL(l_t_rc_tab(l_n_cntr).applied_amt1,0) < 0 THEN
1226 l_v_val_status := 'E';
1227 fnd_message.set_name('IGS',
1228 'IGS_FI_CHG_AMT_NEG');
1229 fnd_message.set_token('ITEM_NUMBER',
1230 l_t_rc_tab(l_n_cntr).item_number);
1231 fnd_message.set_token('BATCH_NAME',
1232 l_t_rc_tab(l_n_cntr).batch_name);
1233 fnd_message.set_token('LOCKBOX_NAME',
1234 l_t_rc_tab(l_n_cntr).lockbox_name);
1235 fnd_message.set_token('CHARGE_CODE',
1236 l_t_rc_tab(l_n_cntr).charge_cd1);
1237 fnd_file.put_line(fnd_file.log,
1238 fnd_message.get);
1239 END IF;
1240
1241 IF NVL(l_t_rc_tab(l_n_cntr).applied_amt2,0) < 0 THEN
1242 l_v_val_status := 'E';
1243 fnd_message.set_name('IGS',
1244 'IGS_FI_CHG_AMT_NEG');
1245 fnd_message.set_token('ITEM_NUMBER',
1246 l_t_rc_tab(l_n_cntr).item_number);
1247 fnd_message.set_token('BATCH_NAME',
1248 l_t_rc_tab(l_n_cntr).batch_name);
1249 fnd_message.set_token('LOCKBOX_NAME',
1250 l_t_rc_tab(l_n_cntr).lockbox_name);
1251 fnd_message.set_token('CHARGE_CODE',
1252 l_t_rc_tab(l_n_cntr).charge_cd2);
1253 fnd_file.put_line(fnd_file.log,
1254 fnd_message.get);
1255 END IF;
1256
1257 IF NVL(l_t_rc_tab(l_n_cntr).applied_amt3,0) < 0 THEN
1258 l_v_val_status := 'E';
1259 fnd_message.set_name('IGS',
1260 'IGS_FI_CHG_AMT_NEG');
1261 fnd_message.set_token('ITEM_NUMBER',
1262 l_t_rc_tab(l_n_cntr).item_number);
1263 fnd_message.set_token('BATCH_NAME',
1264 l_t_rc_tab(l_n_cntr).batch_name);
1265 fnd_message.set_token('LOCKBOX_NAME',
1266 l_t_rc_tab(l_n_cntr).lockbox_name);
1267 fnd_message.set_token('CHARGE_CODE',
1268 l_t_rc_tab(l_n_cntr).charge_cd3);
1269 fnd_file.put_line(fnd_file.log,
1270 fnd_message.get);
1271 END IF;
1272
1273 IF NVL(l_t_rc_tab(l_n_cntr).applied_amt4,0) < 0 THEN
1274 l_v_val_status := 'E';
1275 fnd_message.set_name('IGS',
1276 'IGS_FI_CHG_AMT_NEG');
1277 fnd_message.set_token('ITEM_NUMBER',
1278 l_t_rc_tab(l_n_cntr).item_number);
1279 fnd_message.set_token('BATCH_NAME',
1280 l_t_rc_tab(l_n_cntr).batch_name);
1281 fnd_message.set_token('LOCKBOX_NAME',
1282 l_t_rc_tab(l_n_cntr).lockbox_name);
1283 fnd_message.set_token('CHARGE_CODE',
1284 l_t_rc_tab(l_n_cntr).charge_cd4);
1285 fnd_file.put_line(fnd_file.log,
1286 fnd_message.get);
1287 END IF;
1288
1289 IF NVL(l_t_rc_tab(l_n_cntr).applied_amt5,0) < 0 THEN
1290 l_v_val_status := 'E';
1291 fnd_message.set_name('IGS',
1292 'IGS_FI_CHG_AMT_NEG');
1293 fnd_message.set_token('ITEM_NUMBER',
1294 l_t_rc_tab(l_n_cntr).item_number);
1295 fnd_message.set_token('BATCH_NAME',
1296 l_t_rc_tab(l_n_cntr).batch_name);
1297 fnd_message.set_token('LOCKBOX_NAME',
1298 l_t_rc_tab(l_n_cntr).lockbox_name);
1299 fnd_message.set_token('CHARGE_CODE',
1300 l_t_rc_tab(l_n_cntr).charge_cd5);
1301 fnd_file.put_line(fnd_file.log,
1302 fnd_message.get);
1303 END IF;
1304
1305 IF NVL(l_t_rc_tab(l_n_cntr).applied_amt6,0) < 0 THEN
1306 l_v_val_status := 'E';
1307 fnd_message.set_name('IGS',
1308 'IGS_FI_CHG_AMT_NEG');
1309 fnd_message.set_token('ITEM_NUMBER',
1310 l_t_rc_tab(l_n_cntr).item_number);
1311 fnd_message.set_token('BATCH_NAME',
1312 l_t_rc_tab(l_n_cntr).batch_name);
1313 fnd_message.set_token('LOCKBOX_NAME',
1314 l_t_rc_tab(l_n_cntr).lockbox_name);
1315 fnd_message.set_token('CHARGE_CODE',
1316 l_t_rc_tab(l_n_cntr).charge_cd6);
1317 fnd_file.put_line(fnd_file.log,
1318 fnd_message.get);
1319 END IF;
1320
1321 IF NVL(l_t_rc_tab(l_n_cntr).applied_amt7,0) < 0 THEN
1322 l_v_val_status := 'E';
1323 fnd_message.set_name('IGS',
1324 'IGS_FI_CHG_AMT_NEG');
1325 fnd_message.set_token('ITEM_NUMBER',
1326 l_t_rc_tab(l_n_cntr).item_number);
1327 fnd_message.set_token('BATCH_NAME',
1328 l_t_rc_tab(l_n_cntr).batch_name);
1329 fnd_message.set_token('LOCKBOX_NAME',
1330 l_t_rc_tab(l_n_cntr).lockbox_name);
1331 fnd_message.set_token('CHARGE_CODE',
1332 l_t_rc_tab(l_n_cntr).charge_cd7);
1333 fnd_file.put_line(fnd_file.log,
1334 fnd_message.get);
1335 END IF;
1336
1337 IF NVL(l_t_rc_tab(l_n_cntr).applied_amt8,0) < 0 THEN
1338 l_v_val_status := 'E';
1339 fnd_message.set_name('IGS',
1340 'IGS_FI_CHG_AMT_NEG');
1341 fnd_message.set_token('ITEM_NUMBER',
1342 l_t_rc_tab(l_n_cntr).item_number);
1343 fnd_message.set_token('BATCH_NAME',
1344 l_t_rc_tab(l_n_cntr).batch_name);
1345 fnd_message.set_token('LOCKBOX_NAME',
1346 l_t_rc_tab(l_n_cntr).lockbox_name);
1347 fnd_message.set_token('CHARGE_CODE',
1348 l_t_rc_tab(l_n_cntr).charge_cd8);
1349 fnd_file.put_line(fnd_file.log,
1350 fnd_message.get);
1351 END IF;
1352
1353 -- Sum up the Applied Amount (1-8) of the receipt record
1354 l_n_amt_appl := NVL(l_t_rc_tab(l_n_cntr).applied_amt1,0) +
1355 NVL(l_t_rc_tab(l_n_cntr).applied_amt2,0) +
1356 NVL(l_t_rc_tab(l_n_cntr).applied_amt3,0) +
1357 NVL(l_t_rc_tab(l_n_cntr).applied_amt4,0) +
1358 NVL(l_t_rc_tab(l_n_cntr).applied_amt5,0) +
1359 NVL(l_t_rc_tab(l_n_cntr).applied_amt6,0) +
1360 NVL(l_t_rc_tab(l_n_cntr).applied_amt7,0) +
1361 NVL(l_t_rc_tab(l_n_cntr).applied_amt8,0);
1362
1363 -- In addition to the summed up Applied Amounts from the Charge record,
1364 -- Loop across the receipt overflow records for the receipt record
1365 -- and sum up the applied amount (1-8) for the overflow record
1366 IF l_n_ro_cntr > 0 THEN
1367 l_n_cntr1 := 0;
1368 FOR l_n_cntr1 IN l_t_ro_tab.FIRST..l_t_ro_tab.LAST LOOP
1369 IF l_t_ro_tab.EXISTS(l_n_cntr1) THEN
1370 l_b_ro_identified := FALSE;
1371 IF l_t_rc_tab(l_n_cntr).batch_name IS NOT NULL THEN
1372 IF ((l_t_ro_tab(l_n_cntr1).batch_name IS NOT NULL) AND
1373 (l_t_ro_tab(l_n_cntr1).batch_name = l_t_rc_tab(l_n_cntr).batch_name) AND
1374 (l_t_ro_tab(l_n_cntr1).item_number IS NOT NULL) AND
1375 (l_t_ro_tab(l_n_cntr1).item_number = l_t_rc_tab(l_n_cntr).item_number)) THEN
1376 l_b_ro_identified := TRUE;
1377 END IF;
1378 ELSE
1379 IF ((l_t_ro_tab(l_n_cntr1).item_number IS NOT NULL) AND
1380 (l_t_ro_tab(l_n_cntr1).batch_name IS NULL) AND
1381 (l_t_ro_tab(l_n_cntr1).item_number = l_t_rc_tab(l_n_cntr).item_number)) THEN
1382 l_b_ro_identified := TRUE;
1383 END IF;
1384 END IF;
1385
1386 IF l_b_ro_identified THEN
1387 l_n_amt_appl := NVL(l_n_amt_appl,0) +
1388 NVL(l_t_ro_tab(l_n_cntr1).applied_amt1,0) +
1389 NVL(l_t_ro_tab(l_n_cntr1).applied_amt2,0) +
1390 NVL(l_t_ro_tab(l_n_cntr1).applied_amt3,0) +
1391 NVL(l_t_ro_tab(l_n_cntr1).applied_amt4,0) +
1392 NVL(l_t_ro_tab(l_n_cntr1).applied_amt5,0) +
1393 NVL(l_t_ro_tab(l_n_cntr1).applied_amt6,0) +
1394 NVL(l_t_ro_tab(l_n_cntr1).applied_amt7,0) +
1395 NVL(l_t_ro_tab(l_n_cntr1).applied_amt8,0);
1396 END IF;
1397 END IF;
1398 END LOOP;
1399 END IF;
1400
1401 -- If the amount to be applied is greater than the receipt amount then log the error in the log file
1402 IF l_n_amt_appl > NVL(l_t_rc_tab(l_n_cntr).receipt_amt,0) THEN
1403 l_v_val_status := 'E';
1404 fnd_message.set_name('IGS',
1405 'IGS_FI_DESG_AMNT_MISMATCH');
1406 fnd_message.set_token('ITEM_NUMBER',
1407 l_t_rc_tab(l_n_cntr).item_number);
1408 fnd_message.set_token('BATCH_NAME',
1409 l_t_rc_tab(l_n_cntr).batch_name);
1410 fnd_message.set_token('LOCKBOX_NAME',
1411 l_t_rc_tab(l_n_cntr).lockbox_name);
1412 fnd_file.put_line(fnd_file.log,
1413 fnd_message.get);
1414 END IF;
1415 END IF;
1416 END LOOP;
1417 END IF;
1418
1419 -- If there are any receipt overflow records, then
1420 IF l_n_ro_cntr > 0 THEN
1421 -- Loop across the receipt overflow record and
1422 FOR l_n_cntr IN l_t_ro_tab.FIRST..l_t_ro_tab.LAST LOOP
1423 IF l_t_ro_tab.EXISTS(l_n_cntr) THEN
1424
1425 -- If the item number is not null, then log the error message in the log file
1426 IF l_t_ro_tab(l_n_cntr).item_number IS NULL THEN
1427 l_v_val_status := 'E';
1428 fnd_message.set_name('IGS',
1429 'IGS_FI_REC_ITEMS_MISSING');
1430 fnd_file.put_line(fnd_file.log,
1431 fnd_message.get);
1432 END IF;
1433
1434 -- The following logic checks for the negative amount for the Charge Amount
1435 -- for the receipt overflow record
1436 IF NVL(l_t_ro_tab(l_n_cntr).applied_amt1,0) < 0 THEN
1437 l_v_val_status := 'E';
1438 fnd_message.set_name('IGS',
1439 'IGS_FI_CHG_AMT_NEG');
1440 fnd_message.set_token('ITEM_NUMBER',
1441 l_t_ro_tab(l_n_cntr).item_number);
1442 fnd_message.set_token('BATCH_NAME',
1443 l_t_ro_tab(l_n_cntr).batch_name);
1444 fnd_message.set_token('LOCKBOX_NAME',
1445 l_t_ro_tab(l_n_cntr).lockbox_name);
1446 fnd_message.set_token('CHARGE_CODE',
1447 l_t_ro_tab(l_n_cntr).charge_cd1);
1448 fnd_file.put_line(fnd_file.log,
1449 fnd_message.get);
1450 END IF;
1451
1452 IF NVL(l_t_ro_tab(l_n_cntr).applied_amt2,0) < 0 THEN
1453 l_v_val_status := 'E';
1454 fnd_message.set_name('IGS',
1455 'IGS_FI_CHG_AMT_NEG');
1456 fnd_message.set_token('ITEM_NUMBER',
1457 l_t_ro_tab(l_n_cntr).item_number);
1458 fnd_message.set_token('BATCH_NAME',
1459 l_t_ro_tab(l_n_cntr).batch_name);
1460 fnd_message.set_token('LOCKBOX_NAME',
1461 l_t_ro_tab(l_n_cntr).lockbox_name);
1462 fnd_message.set_token('CHARGE_CODE',
1463 l_t_ro_tab(l_n_cntr).charge_cd2);
1464 fnd_file.put_line(fnd_file.log,
1465 fnd_message.get);
1466 END IF;
1467
1468 IF NVL(l_t_ro_tab(l_n_cntr).applied_amt3,0) < 0 THEN
1469 l_v_val_status := 'E';
1470 fnd_message.set_name('IGS',
1471 'IGS_FI_CHG_AMT_NEG');
1472 fnd_message.set_token('ITEM_NUMBER',
1473 l_t_ro_tab(l_n_cntr).item_number);
1474 fnd_message.set_token('BATCH_NAME',
1475 l_t_ro_tab(l_n_cntr).batch_name);
1476 fnd_message.set_token('LOCKBOX_NAME',
1477 l_t_ro_tab(l_n_cntr).lockbox_name);
1478 fnd_message.set_token('CHARGE_CODE',
1479 l_t_ro_tab(l_n_cntr).charge_cd3);
1480 fnd_file.put_line(fnd_file.log,
1481 fnd_message.get);
1482 END IF;
1483
1484 IF NVL(l_t_ro_tab(l_n_cntr).applied_amt4,0) < 0 THEN
1485 l_v_val_status := 'E';
1486 fnd_message.set_name('IGS',
1487 'IGS_FI_CHG_AMT_NEG');
1488 fnd_message.set_token('ITEM_NUMBER',
1489 l_t_ro_tab(l_n_cntr).item_number);
1490 fnd_message.set_token('BATCH_NAME',
1491 l_t_ro_tab(l_n_cntr).batch_name);
1492 fnd_message.set_token('LOCKBOX_NAME',
1493 l_t_ro_tab(l_n_cntr).lockbox_name);
1494 fnd_message.set_token('CHARGE_CODE',
1495 l_t_ro_tab(l_n_cntr).charge_cd4);
1496 fnd_file.put_line(fnd_file.log,
1497 fnd_message.get);
1498 END IF;
1499
1500 IF NVL(l_t_ro_tab(l_n_cntr).applied_amt5,0) < 0 THEN
1501 l_v_val_status := 'E';
1502 fnd_message.set_name('IGS',
1503 'IGS_FI_CHG_AMT_NEG');
1504 fnd_message.set_token('ITEM_NUMBER',
1505 l_t_ro_tab(l_n_cntr).item_number);
1506 fnd_message.set_token('BATCH_NAME',
1507 l_t_ro_tab(l_n_cntr).batch_name);
1508 fnd_message.set_token('LOCKBOX_NAME',
1509 l_t_ro_tab(l_n_cntr).lockbox_name);
1510 fnd_message.set_token('CHARGE_CODE',
1511 l_t_ro_tab(l_n_cntr).charge_cd5);
1512 fnd_file.put_line(fnd_file.log,
1513 fnd_message.get);
1514 END IF;
1515
1516 IF NVL(l_t_ro_tab(l_n_cntr).applied_amt6,0) < 0 THEN
1517 l_v_val_status := 'E';
1518 fnd_message.set_name('IGS',
1519 'IGS_FI_CHG_AMT_NEG');
1520 fnd_message.set_token('ITEM_NUMBER',
1521 l_t_ro_tab(l_n_cntr).item_number);
1522 fnd_message.set_token('BATCH_NAME',
1523 l_t_ro_tab(l_n_cntr).batch_name);
1524 fnd_message.set_token('LOCKBOX_NAME',
1525 l_t_ro_tab(l_n_cntr).lockbox_name);
1526 fnd_message.set_token('CHARGE_CODE',
1527 l_t_ro_tab(l_n_cntr).charge_cd6);
1528 fnd_file.put_line(fnd_file.log,
1529 fnd_message.get);
1530 END IF;
1531
1532 IF NVL(l_t_ro_tab(l_n_cntr).applied_amt7,0) < 0 THEN
1533 l_v_val_status := 'E';
1534 fnd_message.set_name('IGS',
1535 'IGS_FI_CHG_AMT_NEG');
1536 fnd_message.set_token('ITEM_NUMBER',
1537 l_t_ro_tab(l_n_cntr).item_number);
1538 fnd_message.set_token('BATCH_NAME',
1539 l_t_ro_tab(l_n_cntr).batch_name);
1540 fnd_message.set_token('LOCKBOX_NAME',
1541 l_t_ro_tab(l_n_cntr).lockbox_name);
1542 fnd_message.set_token('CHARGE_CODE',
1543 l_t_ro_tab(l_n_cntr).charge_cd7);
1544 fnd_file.put_line(fnd_file.log,
1545 fnd_message.get);
1546 END IF;
1547
1548 IF NVL(l_t_ro_tab(l_n_cntr).applied_amt8,0) < 0 THEN
1549 l_v_val_status := 'E';
1550 fnd_message.set_name('IGS',
1551 'IGS_FI_CHG_AMT_NEG');
1552 fnd_message.set_token('ITEM_NUMBER',
1553 l_t_ro_tab(l_n_cntr).item_number);
1554 fnd_message.set_token('BATCH_NAME',
1555 l_t_ro_tab(l_n_cntr).batch_name);
1556 fnd_message.set_token('LOCKBOX_NAME',
1557 l_t_ro_tab(l_n_cntr).lockbox_name);
1558 fnd_message.set_token('CHARGE_CODE',
1559 l_t_ro_tab(l_n_cntr).charge_cd8);
1560 fnd_file.put_line(fnd_file.log,
1561 fnd_message.get);
1562 END IF;
1563
1564 l_n_cntr1 := 0;
1565 l_b_rc_ro_match := FALSE;
1566
1567 -- If the batch name in the receipt overflow is not null, then check if the receipt overflow record
1568 -- can be associated with a receipt record that has a valid batch name
1569 IF ((l_t_ro_tab(l_n_cntr).batch_name IS NOT NULL) AND
1570 (l_n_rc_cntr > 0)) THEN
1571 FOR l_n_cntr1 IN l_t_rc_tab.FIRST..l_t_rc_tab.LAST LOOP
1572 IF l_t_rc_tab.EXISTS(l_n_cntr1) THEN
1573 IF (l_t_rc_tab(l_n_cntr1).batch_name IS NOT NULL) THEN
1574 IF ((l_t_rc_tab(l_n_cntr1).batch_name = l_t_ro_tab(l_n_cntr).batch_name) AND
1575 (l_t_rc_tab(l_n_cntr1).item_number = l_t_ro_tab(l_n_cntr).item_number)) THEN
1576 l_b_rc_ro_match := TRUE;
1577 EXIT;
1578 END IF;
1579 END IF;
1580 END IF;
1581 END LOOP;
1582
1583 IF l_b_rc_ro_match THEN
1584 IF l_t_bh_tab.COUNT > 0 THEN
1585 l_b_rc_ro_match := FALSE;
1586 FOR l_n_cntr2 IN l_t_bh_tab.FIRST..l_t_bh_tab.LAST LOOP
1587 IF l_t_bh_tab.EXISTS(l_n_cntr2) THEN
1588 IF l_t_bh_tab(l_n_cntr2).batch_name = l_t_ro_tab(l_n_cntr).batch_name THEN
1589 l_b_rc_ro_match := TRUE;
1590 END IF;
1591 END IF;
1592 END LOOP;
1593 END IF;
1594 END IF;
1595
1596 -- Else if the the batch name is null then validate if the receipt overflow record can be associated
1597 -- with a receipt record with null batch name
1598 ELSIF ((l_t_ro_tab(l_n_cntr).batch_name IS NULL) AND
1599 (l_n_rc_cntr > 0)) THEN
1600 l_b_rc_ro_match := FALSE;
1601 FOR l_n_cntr1 IN l_t_rc_tab.FIRST..l_t_rc_tab.LAST LOOP
1602 IF l_t_rc_tab.EXISTS(l_n_cntr1) THEN
1603 IF ((l_t_rc_tab(l_n_cntr1).batch_name IS NULL) AND
1604 (l_t_rc_tab(l_n_cntr1).item_number = l_t_ro_tab(l_n_cntr).item_number)) THEN
1605 l_b_rc_ro_match := TRUE;
1606 END IF;
1607 END IF;
1608 END LOOP;
1609
1610 -- Else if there are no receipt records then this is an error message
1611 ELSIF (l_n_rc_cntr = 0) THEN
1612 l_b_rc_ro_match := FALSE;
1613 END IF;
1614
1615 IF NOT l_b_rc_ro_match THEN
1616 l_v_val_status := 'E';
1617 fnd_message.set_name('IGS',
1618 'IGS_FI_NO_OVFL_REC_LINK');
1619 fnd_message.set_token('ITEM_NUMBER',
1620 l_t_ro_tab(l_n_cntr).item_number);
1621 fnd_message.set_token('BATCH_NAME',
1622 l_t_ro_tab(l_n_cntr).batch_name);
1623 fnd_message.set_token('LOCKBOX_NAME',
1624 l_t_ro_tab(l_n_cntr).lockbox_name);
1625 fnd_file.put_line(fnd_file.log,
1626 fnd_message.get);
1627 END IF;
1628
1629 l_b_ro_chg_appl := TRUE;
1630
1631 -- If any of the combination pairs of the Charge Code(1-8) and Applied Amount(1-8)
1632 -- has the charge code provided but the corresponding applied amount not provided
1633 -- or vice-versa, then this is an error condition and is logged in the log file.
1634
1635 IF (((l_t_ro_tab(l_n_cntr).charge_cd1 IS NOT NULL) AND
1636 (l_t_ro_tab(l_n_cntr).applied_amt1 IS NULL))OR
1637 ((l_t_ro_tab(l_n_cntr).charge_cd1 IS NULL) AND
1638 (l_t_ro_tab(l_n_cntr).applied_amt1 IS NOT NULL))) THEN
1639 l_b_ro_chg_appl := FALSE;
1640 END IF;
1641
1642 IF (((l_t_ro_tab(l_n_cntr).charge_cd2 IS NOT NULL) AND
1643 (l_t_ro_tab(l_n_cntr).applied_amt2 IS NULL))OR
1644 ((l_t_ro_tab(l_n_cntr).charge_cd2 IS NULL) AND
1645 (l_t_ro_tab(l_n_cntr).applied_amt2 IS NOT NULL))) THEN
1646 l_b_ro_chg_appl := FALSE;
1647 END IF;
1648
1649 IF (((l_t_ro_tab(l_n_cntr).charge_cd3 IS NOT NULL) AND
1650 (l_t_ro_tab(l_n_cntr).applied_amt3 IS NULL))OR
1651 ((l_t_ro_tab(l_n_cntr).charge_cd3 IS NULL) AND
1652 (l_t_ro_tab(l_n_cntr).applied_amt3 IS NOT NULL))) THEN
1653 l_b_ro_chg_appl := FALSE;
1654 END IF;
1655
1656 IF (((l_t_ro_tab(l_n_cntr).charge_cd4 IS NOT NULL) AND
1657 (l_t_ro_tab(l_n_cntr).applied_amt4 IS NULL))OR
1658 ((l_t_ro_tab(l_n_cntr).charge_cd4 IS NULL) AND
1659 (l_t_ro_tab(l_n_cntr).applied_amt4 IS NOT NULL))) THEN
1660 l_b_ro_chg_appl := FALSE;
1661 END IF;
1662
1663 IF (((l_t_ro_tab(l_n_cntr).charge_cd5 IS NOT NULL) AND
1664 (l_t_ro_tab(l_n_cntr).applied_amt5 IS NULL))OR
1665 ((l_t_ro_tab(l_n_cntr).charge_cd5 IS NULL) AND
1666 (l_t_ro_tab(l_n_cntr).applied_amt5 IS NOT NULL))) THEN
1667 l_b_ro_chg_appl := FALSE;
1668 END IF;
1669
1670 IF (((l_t_ro_tab(l_n_cntr).charge_cd6 IS NOT NULL) AND
1671 (l_t_ro_tab(l_n_cntr).applied_amt6 IS NULL))OR
1672 ((l_t_ro_tab(l_n_cntr).charge_cd6 IS NULL) AND
1673 (l_t_ro_tab(l_n_cntr).applied_amt6 IS NOT NULL))) THEN
1674 l_b_ro_chg_appl := FALSE;
1675 END IF;
1676
1677 IF (((l_t_ro_tab(l_n_cntr).charge_cd7 IS NOT NULL) AND
1678 (l_t_ro_tab(l_n_cntr).applied_amt7 IS NULL))OR
1679 ((l_t_ro_tab(l_n_cntr).charge_cd7 IS NULL) AND
1680 (l_t_ro_tab(l_n_cntr).applied_amt7 IS NOT NULL))) THEN
1681 l_b_ro_chg_appl := FALSE;
1682 END IF;
1683
1684 IF (((l_t_ro_tab(l_n_cntr).charge_cd8 IS NOT NULL) AND
1685 (l_t_ro_tab(l_n_cntr).applied_amt8 IS NULL))OR
1686 ((l_t_ro_tab(l_n_cntr).charge_cd8 IS NULL) AND
1687 (l_t_ro_tab(l_n_cntr).applied_amt8 IS NOT NULL))) THEN
1688 l_b_ro_chg_appl := FALSE;
1689 END IF;
1690
1691 IF NOT l_b_ro_chg_appl THEN
1692 l_v_val_status := 'E';
1693 fnd_message.set_name('IGS',
1694 'IGS_FI_OVFL_REC_NO_CHG_APPL');
1695 fnd_message.set_token('ITEM_NUMBER',
1696 l_t_ro_tab(l_n_cntr).item_number);
1697 fnd_message.set_token('BATCH_NAME',
1698 l_t_ro_tab(l_n_cntr).batch_name);
1699 fnd_message.set_token('LOCKBOX_NAME',
1700 l_t_ro_tab(l_n_cntr).lockbox_name);
1701 fnd_file.put_line(fnd_file.log,
1702 fnd_message.get);
1703 END IF;
1704
1705 -- If none of the charge code(1-8) and applied amount(1-8) is provided
1706 -- then this is an error .
1707 IF ((l_t_ro_tab(l_n_cntr).charge_cd1 IS NULL) AND
1708 (l_t_ro_tab(l_n_cntr).applied_amt1 IS NULL)) AND
1709 ((l_t_ro_tab(l_n_cntr).charge_cd2 IS NULL) AND
1710 (l_t_ro_tab(l_n_cntr).applied_amt2 IS NULL)) AND
1711 ((l_t_ro_tab(l_n_cntr).charge_cd3 IS NULL) AND
1712 (l_t_ro_tab(l_n_cntr).applied_amt3 IS NULL)) AND
1713 ((l_t_ro_tab(l_n_cntr).charge_cd4 IS NULL) AND
1714 (l_t_ro_tab(l_n_cntr).applied_amt4 IS NULL)) AND
1715 ((l_t_ro_tab(l_n_cntr).charge_cd5 IS NULL) AND
1716 (l_t_ro_tab(l_n_cntr).applied_amt5 IS NULL)) AND
1717 ((l_t_ro_tab(l_n_cntr).charge_cd6 IS NULL) AND
1718 (l_t_ro_tab(l_n_cntr).applied_amt6 IS NULL)) AND
1719 ((l_t_ro_tab(l_n_cntr).charge_cd7 IS NULL) AND
1720 (l_t_ro_tab(l_n_cntr).applied_amt7 IS NULL)) AND
1721 ((l_t_ro_tab(l_n_cntr).charge_cd8 IS NULL) AND
1722 (l_t_ro_tab(l_n_cntr).applied_amt8 IS NULL)) THEN
1723 l_v_val_status := 'E';
1724 fnd_message.set_name('IGS',
1725 'IGS_FI_OVFL_REC_NO_CHG_APPL');
1726 fnd_message.set_token('ITEM_NUMBER',
1727 l_t_ro_tab(l_n_cntr).item_number);
1728 fnd_message.set_token('BATCH_NAME',
1729 l_t_ro_tab(l_n_cntr).batch_name);
1730 fnd_message.set_token('LOCKBOX_NAME',
1731 l_t_ro_tab(l_n_cntr).lockbox_name);
1732 fnd_file.put_line(fnd_file.log,
1733 fnd_message.get);
1734 END IF;
1735 END IF;
1736 END LOOP;
1737 END IF;
1738 fnd_file.new_line(fnd_file.log);
1739
1740 fnd_file.put_line(fnd_file.log,
1741 g_v_line_sep);
1742 return l_v_val_status;
1743 END validate_type1;
1744
1745 PROCEDURE update_lbint_status(p_v_status igs_fi_lockbox_ints.record_status%TYPE) AS
1746 /******************************************************************
1747 Created By : Amit Gairola
1748 Date Created By : 12-Jun-2003
1749 Purpose : Procedure for updating the interface table record status.
1750
1751 Known limitations,enhancements,remarks:
1752 Change History
1753 Who When What
1754 ***************************************************************** */
1755 l_n_rec_cntr NUMBER(38);
1756 BEGIN
1757 IF g_lb_int_tab.COUNT > 0 THEN
1758 FOR l_n_rec_cntr IN g_lb_int_tab.FIRST..g_lb_int_tab.LAST LOOP
1759 IF g_lb_int_tab.EXISTS(l_n_rec_cntr) THEN
1760 igs_fi_lockbox_ints_pkg.update_row(x_rowid => g_lb_int_tab(l_n_rec_cntr).row_id,
1761 x_lockbox_interface_id => g_lb_int_tab(l_n_rec_cntr).lockbox_interface_id,
1762 x_record_identifier_cd => g_lb_int_tab(l_n_rec_cntr).record_identifier_cd,
1763 x_record_status => p_v_status,
1764 x_deposit_date => g_lb_int_tab(l_n_rec_cntr).deposit_date,
1765 x_transmission_record_count => g_lb_int_tab(l_n_rec_cntr).transmission_record_count,
1766 x_transmission_amt => g_lb_int_tab(l_n_rec_cntr).transmission_amt,
1767 x_lockbox_name => g_lb_int_tab(l_n_rec_cntr).lockbox_name,
1768 x_lockbox_batch_count => g_lb_int_tab(l_n_rec_cntr).lockbox_batch_count,
1769 x_lockbox_record_count => g_lb_int_tab(l_n_rec_cntr).lockbox_record_count,
1770 x_lockbox_amt => g_lb_int_tab(l_n_rec_cntr).lockbox_amt,
1771 x_batch_name => g_lb_int_tab(l_n_rec_cntr).batch_name,
1772 x_batch_amt => g_lb_int_tab(l_n_rec_cntr).batch_amt,
1773 x_batch_record_count => g_lb_int_tab(l_n_rec_cntr).batch_record_count,
1774 x_item_number => g_lb_int_tab(l_n_rec_cntr).item_number,
1775 x_receipt_amt => g_lb_int_tab(l_n_rec_cntr).receipt_amt,
1776 x_check_cd => g_lb_int_tab(l_n_rec_cntr).check_cd,
1777 x_party_number => g_lb_int_tab(l_n_rec_cntr).party_number,
1778 x_payer_name => g_lb_int_tab(l_n_rec_cntr).payer_name,
1779 x_charge_cd1 => g_lb_int_tab(l_n_rec_cntr).charge_cd1,
1780 x_charge_cd2 => g_lb_int_tab(l_n_rec_cntr).charge_cd2,
1781 x_charge_cd3 => g_lb_int_tab(l_n_rec_cntr).charge_cd3,
1782 x_charge_cd4 => g_lb_int_tab(l_n_rec_cntr).charge_cd4,
1783 x_charge_cd5 => g_lb_int_tab(l_n_rec_cntr).charge_cd5,
1784 x_charge_cd6 => g_lb_int_tab(l_n_rec_cntr).charge_cd6,
1785 x_charge_cd7 => g_lb_int_tab(l_n_rec_cntr).charge_cd7,
1786 x_charge_cd8 => g_lb_int_tab(l_n_rec_cntr).charge_cd8,
1787 x_applied_amt1 => g_lb_int_tab(l_n_rec_cntr).applied_amt1,
1788 x_applied_amt2 => g_lb_int_tab(l_n_rec_cntr).applied_amt2,
1789 x_applied_amt3 => g_lb_int_tab(l_n_rec_cntr).applied_amt3,
1790 x_applied_amt4 => g_lb_int_tab(l_n_rec_cntr).applied_amt4,
1791 x_applied_amt5 => g_lb_int_tab(l_n_rec_cntr).applied_amt5,
1792 x_applied_amt6 => g_lb_int_tab(l_n_rec_cntr).applied_amt6,
1793 x_applied_amt7 => g_lb_int_tab(l_n_rec_cntr).applied_amt7,
1794 x_applied_amt8 => g_lb_int_tab(l_n_rec_cntr).applied_amt8,
1795 x_credit_type_cd => g_lb_int_tab(l_n_rec_cntr).credit_type_cd,
1796 x_fee_cal_instance_cd => g_lb_int_tab(l_n_rec_cntr).fee_cal_instance_cd,
1797 x_adm_application_id => g_lb_int_tab(l_n_rec_cntr).adm_application_id,
1798 x_attribute_category => g_lb_int_tab(l_n_rec_cntr).attribute_category,
1799 x_attribute1 => g_lb_int_tab(l_n_rec_cntr).attribute1,
1800 x_attribute2 => g_lb_int_tab(l_n_rec_cntr).attribute2,
1801 x_attribute3 => g_lb_int_tab(l_n_rec_cntr).attribute3,
1802 x_attribute4 => g_lb_int_tab(l_n_rec_cntr).attribute4,
1803 x_attribute5 => g_lb_int_tab(l_n_rec_cntr).attribute5,
1804 x_attribute6 => g_lb_int_tab(l_n_rec_cntr).attribute6,
1805 x_attribute7 => g_lb_int_tab(l_n_rec_cntr).attribute7,
1806 x_attribute8 => g_lb_int_tab(l_n_rec_cntr).attribute8,
1807 x_attribute9 => g_lb_int_tab(l_n_rec_cntr).attribute9,
1808 x_attribute10 => g_lb_int_tab(l_n_rec_cntr).attribute10,
1809 x_attribute11 => g_lb_int_tab(l_n_rec_cntr).attribute11,
1810 x_attribute12 => g_lb_int_tab(l_n_rec_cntr).attribute12,
1811 x_attribute13 => g_lb_int_tab(l_n_rec_cntr).attribute13,
1812 x_attribute14 => g_lb_int_tab(l_n_rec_cntr).attribute14,
1813 x_attribute15 => g_lb_int_tab(l_n_rec_cntr).attribute15,
1814 x_attribute16 => g_lb_int_tab(l_n_rec_cntr).attribute16,
1815 x_attribute17 => g_lb_int_tab(l_n_rec_cntr).attribute17,
1816 x_attribute18 => g_lb_int_tab(l_n_rec_cntr).attribute18,
1817 x_attribute19 => g_lb_int_tab(l_n_rec_cntr).attribute19,
1818 x_attribute20 => g_lb_int_tab(l_n_rec_cntr).attribute20);
1819 END IF;
1820 END LOOP;
1821 END IF;
1822 END update_lbint_status;
1823
1824 PROCEDURE populate_lb_receipts AS
1825 /******************************************************************
1826 Created By : Amit Gairola
1827 Date Created By : 12-Jun-2003
1828 Purpose : Procedure for populating the receipt and overflow
1829 records
1830
1831 Known limitations,enhancements,remarks:
1832 Change History
1833 Who When What
1834 ***************************************************************** */
1835 l_n_cntr NUMBER(38);
1836 l_n_rec_cntr NUMBER(38);
1837 BEGIN
1838 l_n_rec_cntr := 0;
1839 IF g_lb_int_tab.COUNT > 0 THEN
1840 FOR l_n_cntr IN g_lb_int_tab.FIRST..g_lb_int_tab.LAST LOOP
1841 IF g_lb_int_tab.EXISTS(l_n_cntr) THEN
1842 IF g_lb_int_tab(l_n_cntr).system_record_identifier IN (g_v_receipt,
1843 g_v_receipt_oflow) THEN
1844 l_n_rec_cntr := l_n_rec_cntr + 1;
1845 g_t_rec_tab(l_n_rec_cntr).row_id := g_lb_int_tab(l_n_cntr).row_id;
1846 g_t_rec_tab(l_n_rec_cntr).system_record_identifier := g_lb_int_tab(l_n_cntr).system_record_identifier;
1847 g_t_rec_tab(l_n_rec_cntr).lockbox_interface_id := g_lb_int_tab(l_n_cntr).lockbox_interface_id;
1848 g_t_rec_tab(l_n_rec_cntr).deposit_date := g_lb_int_tab(l_n_cntr).deposit_date;
1849 g_t_rec_tab(l_n_rec_cntr).lockbox_name := g_lb_int_tab(l_n_cntr).lockbox_name;
1850 g_t_rec_tab(l_n_rec_cntr).batch_name := g_lb_int_tab(l_n_cntr).batch_name;
1851 g_t_rec_tab(l_n_rec_cntr).item_number := g_lb_int_tab(l_n_cntr).item_number;
1852 g_t_rec_tab(l_n_rec_cntr).receipt_amt := g_lb_int_tab(l_n_cntr).receipt_amt;
1853 g_t_rec_tab(l_n_rec_cntr).check_cd := g_lb_int_tab(l_n_cntr).check_cd;
1854 g_t_rec_tab(l_n_rec_cntr).party_number := g_lb_int_tab(l_n_cntr).party_number;
1855 g_t_rec_tab(l_n_rec_cntr).mapped_party_id := null;
1856 g_t_rec_tab(l_n_rec_cntr).payer_name := g_lb_int_tab(l_n_cntr).payer_name;
1857 g_t_rec_tab(l_n_rec_cntr).credit_type_cd := g_lb_int_tab(l_n_cntr).credit_type_cd;
1858 g_t_rec_tab(l_n_rec_cntr).mapped_credit_type_id := null;
1859 g_t_rec_tab(l_n_rec_cntr).fee_cal_instance_cd := g_lb_int_tab(l_n_cntr).fee_cal_instance_cd;
1860 g_t_rec_tab(l_n_rec_cntr).mapped_fee_cal_type := null;
1861 g_t_rec_tab(l_n_rec_cntr).mapped_fee_ci_sequence_number := null;
1862 g_t_rec_tab(l_n_rec_cntr).charge_cd1 := g_lb_int_tab(l_n_cntr).charge_cd1;
1863 g_t_rec_tab(l_n_rec_cntr).charge_cd2 := g_lb_int_tab(l_n_cntr).charge_cd2;
1864 g_t_rec_tab(l_n_rec_cntr).charge_cd3 := g_lb_int_tab(l_n_cntr).charge_cd3;
1865 g_t_rec_tab(l_n_rec_cntr).charge_cd4 := g_lb_int_tab(l_n_cntr).charge_cd4;
1866 g_t_rec_tab(l_n_rec_cntr).charge_cd5 := g_lb_int_tab(l_n_cntr).charge_cd5;
1867 g_t_rec_tab(l_n_rec_cntr).charge_cd6 := g_lb_int_tab(l_n_cntr).charge_cd6;
1868 g_t_rec_tab(l_n_rec_cntr).charge_cd7 := g_lb_int_tab(l_n_cntr).charge_cd7;
1869 g_t_rec_tab(l_n_rec_cntr).charge_cd8 := g_lb_int_tab(l_n_cntr).charge_cd8;
1870 g_t_rec_tab(l_n_rec_cntr).applied_amt1 := g_lb_int_tab(l_n_cntr).applied_amt1;
1871 g_t_rec_tab(l_n_rec_cntr).applied_amt2 := g_lb_int_tab(l_n_cntr).applied_amt2;
1872 g_t_rec_tab(l_n_rec_cntr).applied_amt3 := g_lb_int_tab(l_n_cntr).applied_amt3;
1873 g_t_rec_tab(l_n_rec_cntr).applied_amt4 := g_lb_int_tab(l_n_cntr).applied_amt4;
1874 g_t_rec_tab(l_n_rec_cntr).applied_amt5 := g_lb_int_tab(l_n_cntr).applied_amt5;
1875 g_t_rec_tab(l_n_rec_cntr).applied_amt6 := g_lb_int_tab(l_n_cntr).applied_amt6;
1876 g_t_rec_tab(l_n_rec_cntr).applied_amt7 := g_lb_int_tab(l_n_cntr).applied_amt7;
1877 g_t_rec_tab(l_n_rec_cntr).applied_amt8 := g_lb_int_tab(l_n_cntr).applied_amt8;
1878 g_t_rec_tab(l_n_rec_cntr).adm_application_id := g_lb_int_tab(l_n_cntr).adm_application_id;
1879 g_t_rec_tab(l_n_rec_cntr).attribute_category := g_lb_int_tab(l_n_cntr).attribute_category;
1880 g_t_rec_tab(l_n_rec_cntr).attribute1 := g_lb_int_tab(l_n_cntr).attribute1;
1881 g_t_rec_tab(l_n_rec_cntr).attribute2 := g_lb_int_tab(l_n_cntr).attribute2;
1882 g_t_rec_tab(l_n_rec_cntr).attribute3 := g_lb_int_tab(l_n_cntr).attribute3;
1883 g_t_rec_tab(l_n_rec_cntr).attribute4 := g_lb_int_tab(l_n_cntr).attribute4;
1884 g_t_rec_tab(l_n_rec_cntr).attribute5 := g_lb_int_tab(l_n_cntr).attribute5;
1885 g_t_rec_tab(l_n_rec_cntr).attribute6 := g_lb_int_tab(l_n_cntr).attribute6;
1886 g_t_rec_tab(l_n_rec_cntr).attribute7 := g_lb_int_tab(l_n_cntr).attribute7;
1887 g_t_rec_tab(l_n_rec_cntr).attribute8 := g_lb_int_tab(l_n_cntr).attribute8;
1888 g_t_rec_tab(l_n_rec_cntr).attribute9 := g_lb_int_tab(l_n_cntr).attribute9;
1889 g_t_rec_tab(l_n_rec_cntr).attribute10 := g_lb_int_tab(l_n_cntr).attribute10;
1890 g_t_rec_tab(l_n_rec_cntr).attribute11 := g_lb_int_tab(l_n_cntr).attribute11;
1891 g_t_rec_tab(l_n_rec_cntr).attribute12 := g_lb_int_tab(l_n_cntr).attribute12;
1892 g_t_rec_tab(l_n_rec_cntr).attribute13 := g_lb_int_tab(l_n_cntr).attribute13;
1893 g_t_rec_tab(l_n_rec_cntr).attribute14 := g_lb_int_tab(l_n_cntr).attribute14;
1894 g_t_rec_tab(l_n_rec_cntr).attribute15 := g_lb_int_tab(l_n_cntr).attribute15;
1895 g_t_rec_tab(l_n_rec_cntr).attribute16 := g_lb_int_tab(l_n_cntr).attribute16;
1896 g_t_rec_tab(l_n_rec_cntr).attribute17 := g_lb_int_tab(l_n_cntr).attribute17;
1897 g_t_rec_tab(l_n_rec_cntr).attribute18 := g_lb_int_tab(l_n_cntr).attribute18;
1898 g_t_rec_tab(l_n_rec_cntr).attribute19 := g_lb_int_tab(l_n_cntr).attribute19;
1899 g_t_rec_tab(l_n_rec_cntr).attribute20 := g_lb_int_tab(l_n_cntr).attribute20;
1900 g_t_rec_tab(l_n_rec_cntr).receipt_number := null;
1901 g_t_rec_tab(l_n_rec_cntr).record_status := g_v_todo;
1902 g_t_rec_tab(l_n_rec_cntr).eligible_to_apply_yn := 'N';
1903 END IF;
1904 END IF;
1905 END LOOP;
1906 END IF;
1907 END populate_lb_receipts;
1908
1909 PROCEDURE val_charge_number_for_app(p_v_charge_code igs_fi_inv_int.invoice_number%TYPE,
1910 p_v_party_number hz_parties.party_number%TYPE,
1911 p_n_party_id pls_integer,
1912 p_v_fee_type OUT NOCOPY igs_fi_fee_type.fee_type%TYPE,
1913 p_n_invoice_id OUT NOCOPY igs_fi_inv_int.invoice_id%TYPE,
1914 p_v_message_name OUT NOCOPY VARCHAR2) AS
1915 /******************************************************************
1916 Created By : Amit Gairola
1917 Date Created By : 12-Jun-2003
1918 Purpose : Procedure for validating the charge number and party combination
1919
1920 Known limitations,enhancements,remarks:
1921 Change History
1922 Who When What
1923 ***************************************************************** */
1924 CURSOR cur_inv(cp_invoice_number igs_fi_inv_int.invoice_number%TYPE,
1925 cp_party_id igs_fi_inv_int.person_id%TYPE) IS
1926 SELECT invoice_id,
1927 fee_type
1928 FROM igs_fi_inv_int
1929 WHERE person_id = cp_party_id
1930 AND invoice_number = cp_invoice_number;
1931
1932 CURSOR cur_ft(cp_fee_type igs_fi_fee_type.fee_type%TYPE) IS
1933 SELECT designated_payment_flag
1934 FROM igs_fi_fee_type
1935 WHERE fee_type = cp_fee_type;
1936
1937 l_v_fee_type igs_fi_fee_type.fee_type%TYPE;
1938 l_n_inv_id igs_fi_inv_int.invoice_id%TYPE;
1939 l_v_designated_pay_flag igs_fi_fee_type.designated_payment_flag%TYPE;
1940 BEGIN
1941
1942 -- Validate if the Party Id and the charge code exist in the Charges table.
1943 -- If not, then it is an error condition
1944 OPEN cur_inv(p_v_charge_code,
1945 p_n_party_id);
1946 FETCH cur_inv INTO l_n_inv_id,
1947 l_v_fee_type;
1948 IF cur_inv%NOTFOUND THEN
1949 CLOSE cur_inv;
1950 p_n_invoice_id := null;
1951 p_v_fee_type := null;
1952 fnd_message.set_name('IGS',
1953 'IGS_FI_INV_CHG_CODE');
1954 fnd_message.set_token('CHARGE_NUMBER',
1955 p_v_charge_code);
1956 fnd_message.set_token('PARTY_NUMBER',
1957 p_v_party_number);
1958 p_v_message_name := fnd_message.get;
1959 RETURN;
1960 END IF;
1961 CLOSE cur_inv;
1962
1963 -- Validate if the Fee Type has the designated payment flag checked
1964 OPEN cur_ft(l_v_fee_type);
1965 FETCH cur_ft INTO l_v_designated_pay_flag;
1966 CLOSE cur_ft;
1967
1968 IF NVL(l_v_designated_pay_flag,'N') = 'N' THEN
1969 fnd_message.set_name('IGS',
1970 'IGS_FI_CHG_FT_NOT_DESG');
1971 fnd_message.set_token('CHARGE_NUMBER',
1972 p_v_charge_code);
1973 fnd_message.set_token('FEE_TYPE',
1974 l_v_fee_type);
1975 p_v_message_name := fnd_message.get;
1976 END IF;
1977
1978 p_n_invoice_id := l_n_inv_id;
1979 p_v_fee_type := l_v_fee_type;
1980 END val_charge_number_for_app;
1981
1982 PROCEDURE invoke_target_appl(p_n_credit_id PLS_INTEGER,
1983 p_v_charge_code igs_fi_inv_int.invoice_number%TYPE,
1984 p_n_target_invoice_id PLS_INTEGER,
1985 p_n_amount_applied NUMBER,
1986 p_d_gl_date DATE,
1987 p_n_act_amnt_applied OUT NOCOPY NUMBER,
1988 p_n_application_id OUT NOCOPY PLS_INTEGER,
1989 p_v_err_message OUT NOCOPY VARCHAR2) AS
1990 /******************************************************************
1991 Created By : Amit Gairola
1992 Date Created By : 12-Jun-2003
1993 Purpose : Procedure for invoking the applications API
1994
1995 Known limitations,enhancements,remarks:
1996 Change History
1997 Who When What
1998 ***************************************************************** */
1999 CURSOR cur_inv(cp_invoice_id igs_fi_inv_int.invoice_id%TYPE) IS
2000 SELECT invoice_amount_due
2001 FROM igs_fi_inv_int
2002 WHERE invoice_id = cp_invoice_id;
2003
2004
2005 l_n_inv_amt_due igs_fi_inv_int.invoice_amount_due%TYPE;
2006 l_n_app_id igs_fi_applications.application_id%TYPE;
2007 l_n_act_apply_amount igs_fi_applications.amount_applied%TYPE;
2008 l_n_dr_gl_ccid igs_fi_applications.dr_gl_code_ccid%TYPE;
2009 l_n_cr_gl_ccid igs_fi_applications.cr_gl_code_ccid%TYPE;
2010 l_v_dr_acc_cd igs_fi_applications.dr_account_cd%TYPE;
2011 l_v_cr_acc_cd igs_fi_applications.cr_account_cd%TYPE;
2012 l_n_unapp_amount igs_fi_credits.unapplied_amount%TYPE;
2013 l_n_inv_amount_due igs_fi_inv_int.invoice_amount_due%TYPE;
2014 l_v_err_msg VARCHAR2(2000);
2015 l_b_status BOOLEAN := FALSE;
2016 BEGIN
2017
2018 -- Fetch the Invoice Amount Due from the Charges table
2019 OPEN cur_inv(p_n_target_invoice_id);
2020 FETCH cur_inv INTO l_n_inv_amt_due;
2021 CLOSE cur_inv;
2022
2023 -- If the Invoice Amount Due is less than or equal to 0, then log this in the log file
2024 IF l_n_inv_amt_due <= 0 THEN
2025 p_n_act_amnt_applied := null;
2026 p_n_application_id := null;
2027 fnd_message.set_name('IGS',
2028 'IGS_FI_INV_AMT_DUE_NIL');
2029 fnd_message.set_token('CHARGE_NUMBER',
2030 p_v_charge_code);
2031 p_v_err_message := fnd_message.get;
2032 RETURN;
2033 ELSE
2034
2035 -- Else identify if the amount applied is greater than the Invoice Amount Due.
2036 -- If it is, then appply only the Invoice Amount Due
2037 IF p_n_amount_applied > l_n_inv_amt_due THEN
2038 l_n_act_apply_amount := l_n_inv_amt_due;
2039 ELSE
2040 l_n_act_apply_amount := p_n_amount_applied;
2041 END IF;
2042 END IF;
2043
2044 -- Call the API for application creation
2045 l_n_app_id := null;
2046 l_n_unapp_amount := 0;
2047 igs_fi_gen_007.create_application(p_application_id => l_n_app_id,
2048 p_credit_id => p_n_credit_id,
2049 p_invoice_id => p_n_target_invoice_id,
2050 p_amount_apply => l_n_act_apply_amount,
2051 p_appl_type => g_v_app,
2052 p_appl_hierarchy_id => null,
2053 p_validation => 'N',
2054 p_dr_gl_ccid => l_n_dr_gl_ccid,
2055 p_cr_gl_ccid => l_n_cr_gl_ccid,
2056 p_dr_account_cd => l_v_dr_acc_cd,
2057 p_cr_account_cd => l_v_cr_acc_cd,
2058 p_unapp_amount => l_n_unapp_amount,
2059 p_inv_amt_due => l_n_inv_amount_due,
2060 p_err_msg => l_v_err_msg,
2061 p_status => l_b_status,
2062 p_d_gl_date => p_d_gl_date);
2063 IF l_b_status THEN
2064 p_n_act_amnt_applied := l_n_act_apply_amount;
2065 p_n_application_id := l_n_app_id;
2066 p_v_err_message := null;
2067 ELSE
2068 p_n_act_amnt_applied := null;
2069 p_n_application_id := null;
2070 p_v_err_message := fnd_message.get_string('IGS',
2071 l_v_err_msg);
2072 END IF;
2073 END invoke_target_appl;
2074
2075 PROCEDURE insert_lb_errors(p_r_receipt_rec lb_receipt_rec,
2076 p_n_receipt_error_id OUT NOCOPY PLS_INTEGER) AS
2077 /******************************************************************
2078 Created By : Amit Gairola
2079 Date Created By : 12-Jun-2003
2080 Purpose : Procedure for inserting data in igs_fi_lb_rect_errs
2081 table
2082
2083 Known limitations,enhancements,remarks:
2084 Change History
2085 Who When What
2086 svuppala 12-May-2006 Bug 5217319 Added call to format amount by rounding off to currency precision
2087 in the igs_fi_lb_rect_errs_pkg.insert_row call
2088 ***************************************************************** */
2089 l_v_rowid VARCHAR2(25);
2090 l_n_lockbox_receipt_error_id igs_fi_lb_rect_errs.lockbox_receipt_error_id%TYPE;
2091 BEGIN
2092
2093 -- Create a record in the IGS_FI_LB_RECT_ERRS table
2094 l_v_rowid := null;
2095 l_n_lockbox_receipt_error_id := null;
2096
2097 -- Bug 5217319 Added call to format amount by rounding off to currency precision
2098 igs_fi_lb_rect_errs_pkg.insert_row(x_rowid => l_v_rowid,
2099 x_lockbox_receipt_error_id => l_n_lockbox_receipt_error_id,
2100 x_lockbox_interface_id => p_r_receipt_rec.lockbox_interface_id,
2101 x_item_number => p_r_receipt_rec.item_number,
2102 x_lockbox_name => p_r_receipt_rec.lockbox_name,
2103 x_receipt_amt => igs_fi_gen_gl.get_formatted_amount(p_r_receipt_rec.receipt_amt),
2104 x_batch_name => p_r_receipt_rec.batch_name,
2105 x_party_number => p_r_receipt_rec.party_number,
2106 x_payer_name => p_r_receipt_rec.payer_name,
2107 x_check_cd => p_r_receipt_rec.check_cd,
2108 x_deposit_date => p_r_receipt_rec.deposit_date,
2109 x_credit_type_cd => p_r_receipt_rec.credit_type_cd,
2110 x_fee_cal_instance_cd => p_r_receipt_rec.fee_cal_instance_cd,
2111 x_charge_cd1 => p_r_receipt_rec.charge_cd1,
2112 x_charge_cd2 => p_r_receipt_rec.charge_cd2,
2113 x_charge_cd3 => p_r_receipt_rec.charge_cd3,
2114 x_charge_cd4 => p_r_receipt_rec.charge_cd4,
2115 x_charge_cd5 => p_r_receipt_rec.charge_cd5,
2116 x_charge_cd6 => p_r_receipt_rec.charge_cd6,
2117 x_charge_cd7 => p_r_receipt_rec.charge_cd7,
2118 x_charge_cd8 => p_r_receipt_rec.charge_cd8,
2119 x_applied_amt1 => igs_fi_gen_gl.get_formatted_amount(p_r_receipt_rec.applied_amt1),
2120 x_applied_amt2 => igs_fi_gen_gl.get_formatted_amount(p_r_receipt_rec.applied_amt2),
2121 x_applied_amt3 => igs_fi_gen_gl.get_formatted_amount(p_r_receipt_rec.applied_amt3),
2122 x_applied_amt4 => igs_fi_gen_gl.get_formatted_amount(p_r_receipt_rec.applied_amt4),
2123 x_applied_amt5 => igs_fi_gen_gl.get_formatted_amount(p_r_receipt_rec.applied_amt5),
2124 x_applied_amt6 => igs_fi_gen_gl.get_formatted_amount(p_r_receipt_rec.applied_amt6),
2125 x_applied_amt7 => igs_fi_gen_gl.get_formatted_amount(p_r_receipt_rec.applied_amt7),
2126 x_applied_amt8 => igs_fi_gen_gl.get_formatted_amount(p_r_receipt_rec.applied_amt8),
2127 x_adm_application_id => p_r_receipt_rec.adm_application_id,
2128 x_attribute_category => p_r_receipt_rec.attribute_category,
2129 x_attribute1 => p_r_receipt_rec.attribute1,
2130 x_attribute2 => p_r_receipt_rec.attribute2,
2131 x_attribute3 => p_r_receipt_rec.attribute3,
2132 x_attribute4 => p_r_receipt_rec.attribute4,
2133 x_attribute5 => p_r_receipt_rec.attribute5,
2134 x_attribute6 => p_r_receipt_rec.attribute6,
2135 x_attribute7 => p_r_receipt_rec.attribute7,
2136 x_attribute8 => p_r_receipt_rec.attribute8,
2137 x_attribute9 => p_r_receipt_rec.attribute9,
2138 x_attribute10 => p_r_receipt_rec.attribute10,
2139 x_attribute11 => p_r_receipt_rec.attribute11,
2140 x_attribute12 => p_r_receipt_rec.attribute12,
2141 x_attribute13 => p_r_receipt_rec.attribute13,
2142 x_attribute14 => p_r_receipt_rec.attribute14,
2143 x_attribute15 => p_r_receipt_rec.attribute15,
2144 x_attribute16 => p_r_receipt_rec.attribute16,
2145 x_attribute17 => p_r_receipt_rec.attribute17,
2146 x_attribute18 => p_r_receipt_rec.attribute18,
2147 x_attribute19 => p_r_receipt_rec.attribute19,
2148 x_attribute20 => p_r_receipt_rec.attribute20);
2149 p_n_receipt_error_id := l_n_lockbox_receipt_error_id;
2150 END insert_lb_errors;
2151
2152 PROCEDURE insert_lb_ovfl_errors(p_r_receipt_rec lb_receipt_rec,
2153 p_n_receipt_error_id PLS_INTEGER) AS
2154 /******************************************************************
2155 Created By : Amit Gairola
2156 Date Created By : 12-Jun-2003
2157 Purpose : Procedure for inserting data in igs_fi_lb_ovfl_errs
2158 table
2159
2160 Known limitations,enhancements,remarks:
2161 Change History
2162 Who When What
2163 svuppala 12-May-2006 Bug 5217319 Added call to format amount by rounding off to currency precision
2164 in the igs_fi_lb_ovfl_errs_pkg.insert_row call
2165 ***************************************************************** */
2166 l_v_rowid VARCHAR2(25);
2167 l_n_rec_oflow_err_id igs_fi_lb_ovfl_errs.receipt_overflow_error_id%TYPE;
2168 BEGIN
2169 l_v_rowid := null;
2170 l_n_rec_oflow_err_id := null;
2171
2172 -- Create a record in the IGS_FI_LB_OVFL_ERRS table
2173 -- Bug 5217319 Added call to format amount by rounding off to currency precision
2174 igs_fi_lb_ovfl_errs_pkg.insert_row(x_rowid => l_v_rowid,
2175 x_receipt_overflow_error_id => l_n_rec_oflow_err_id,
2176 x_lockbox_receipt_error_id => p_n_receipt_error_id,
2177 x_charge_cd1 => p_r_receipt_rec.charge_cd1,
2178 x_charge_cd2 => p_r_receipt_rec.charge_cd2,
2179 x_charge_cd3 => p_r_receipt_rec.charge_cd3,
2180 x_charge_cd4 => p_r_receipt_rec.charge_cd4,
2181 x_charge_cd5 => p_r_receipt_rec.charge_cd5,
2182 x_charge_cd6 => p_r_receipt_rec.charge_cd6,
2183 x_charge_cd7 => p_r_receipt_rec.charge_cd7,
2184 x_charge_cd8 => p_r_receipt_rec.charge_cd8,
2185 x_applied_amt1 => igs_fi_gen_gl.get_formatted_amount(p_r_receipt_rec.applied_amt1),
2186 x_applied_amt2 => igs_fi_gen_gl.get_formatted_amount(p_r_receipt_rec.applied_amt2),
2187 x_applied_amt3 => igs_fi_gen_gl.get_formatted_amount(p_r_receipt_rec.applied_amt3),
2188 x_applied_amt4 => igs_fi_gen_gl.get_formatted_amount(p_r_receipt_rec.applied_amt4),
2189 x_applied_amt5 => igs_fi_gen_gl.get_formatted_amount(p_r_receipt_rec.applied_amt5),
2190 x_applied_amt6 => igs_fi_gen_gl.get_formatted_amount(p_r_receipt_rec.applied_amt6),
2191 x_applied_amt7 => igs_fi_gen_gl.get_formatted_amount(p_r_receipt_rec.applied_amt7),
2192 x_applied_amt8 => igs_fi_gen_gl.get_formatted_amount(p_r_receipt_rec.applied_amt8));
2193 END insert_lb_ovfl_errors;
2194
2195 PROCEDURE delete_err_success(p_r_rowid rowid) AS
2196 /******************************************************************
2197 Created By : Amit Gairola
2198 Date Created By : 12-Jun-2003
2199 Purpose : Procedure for deleting the successful records
2200
2201 Known limitations,enhancements,remarks:
2202 Change History
2203 Who When What
2204 ***************************************************************** */
2205 CURSOR cur_lb_err(cp_rowid rowid) IS
2206 SELECT lockbox_receipt_error_id
2207 FROM igs_fi_lb_rect_errs
2208 WHERE rowid = cp_rowid;
2209
2210 CURSOR cur_lb_oflow(cp_lb_rec_err_id igs_fi_lb_ovfl_errs.lockbox_receipt_error_id%TYPE) IS
2211 SELECT rowid row_id
2212 FROM igs_fi_lb_ovfl_errs
2213 WHERE lockbox_receipt_error_id = cp_lb_rec_err_id;
2214
2215 l_n_receipt_error_id igs_fi_lb_rect_errs.lockbox_receipt_error_id%TYPE;
2216 BEGIN
2217
2218 -- For the rowid passed, identifiy the receipt error_id
2219 OPEN cur_lb_err(p_r_rowid);
2220 FETCH cur_lb_err INTO l_n_receipt_error_id;
2221 CLOSE cur_lb_err;
2222
2223 -- For the receipt error id, loop across the records in the Overflow table
2224 FOR l_oflow_rec IN cur_lb_oflow(l_n_receipt_error_id) LOOP
2225
2226 -- delete the records in the Overflow table
2227 igs_fi_lb_ovfl_errs_pkg.delete_row(l_oflow_rec.row_id);
2228 END LOOP;
2229
2230 -- Delete the records in the main IGS_FI_LB_RECT_ERRS errors
2231 igs_fi_lb_rect_errs_pkg.delete_row(p_r_rowid);
2232 END delete_err_success;
2233
2234 PROCEDURE invoke_credits_api_pvt(p_r_receipt_rec lb_receipt_rec,
2235 p_n_credit_type_id NUMBER,
2236 p_n_receipt_amt NUMBER,
2237 p_n_credit_id OUT NOCOPY PLS_INTEGER,
2238 p_v_status OUT NOCOPY VARCHAR2,
2239 p_v_message_text OUT NOCOPY VARCHAR2) AS
2240 /******************************************************************
2241 Created By : Amit Gairola
2242 Date Created By : 12-Jun-2003
2243 Purpose : Procedure for invoking Private Credits API
2244
2245 Known limitations,enhancements,remarks:
2246 Change History
2247 Who When What
2248 pmarada 26-JUL-2005 Enh 3392095, modifed as per tution waiver build, passing p_api_version
2249 parameter value as 2.1 to the igs_fi_credit_pvt.create_credit call
2250 svuppala 9-JUN-2005 Enh 3442712 - Impact of automatic generation of the Receipt Number.
2251 changed logic for credit_number.
2252 shtatiko 26-AUG-2003 Enh# 3045007, Added two new parameters, p_n_credit_type_id and p_n_receipt_amt.
2253 pathipat 21-Aug-2003 Enh 3076768 - Auto Release of Holds
2254 Added code to get message even if
2255 credits_api returns with status = 'S'
2256 ***************************************************************** */
2257 l_attribute_rec igs_fi_credits_api_pub.attribute_rec_type;
2258 l_credit_rec igs_fi_credit_pvt.credit_rec_type;
2259 l_v_status VARCHAR2(1);
2260 l_n_msg_count NUMBER(10);
2261 l_v_msg_data VARCHAR2(2000);
2262 l_n_credit_id igs_fi_credits.credit_id%TYPE;
2263 l_n_cr_activity_id igs_fi_cr_activities.credit_activity_id%TYPE;
2264 l_v_msg_txt VARCHAR2(2000);
2265 l_v_credit_number igs_fi_credits_all.credit_number%TYPE;
2266
2267
2268
2269 BEGIN
2270
2271 -- Invoke the Credits API for the receipt record
2272 l_attribute_rec.p_attribute_category := p_r_receipt_rec.attribute_category;
2273 l_attribute_rec.p_attribute1 := p_r_receipt_rec.attribute1;
2274 l_attribute_rec.p_attribute2 := p_r_receipt_rec.attribute2;
2275 l_attribute_rec.p_attribute3 := p_r_receipt_rec.attribute3;
2276 l_attribute_rec.p_attribute4 := p_r_receipt_rec.attribute4;
2277 l_attribute_rec.p_attribute5 := p_r_receipt_rec.attribute5;
2278 l_attribute_rec.p_attribute6 := p_r_receipt_rec.attribute6;
2279 l_attribute_rec.p_attribute7 := p_r_receipt_rec.attribute7;
2280 l_attribute_rec.p_attribute8 := p_r_receipt_rec.attribute8;
2281 l_attribute_rec.p_attribute9 := p_r_receipt_rec.attribute9;
2282 l_attribute_rec.p_attribute10 := p_r_receipt_rec.attribute10;
2283 l_attribute_rec.p_attribute11 := p_r_receipt_rec.attribute11;
2284 l_attribute_rec.p_attribute12 := p_r_receipt_rec.attribute12;
2285 l_attribute_rec.p_attribute13 := p_r_receipt_rec.attribute13;
2286 l_attribute_rec.p_attribute14 := p_r_receipt_rec.attribute14;
2287 l_attribute_rec.p_attribute15 := p_r_receipt_rec.attribute15;
2288 l_attribute_rec.p_attribute16 := p_r_receipt_rec.attribute16;
2289 l_attribute_rec.p_attribute17 := p_r_receipt_rec.attribute17;
2290 l_attribute_rec.p_attribute18 := p_r_receipt_rec.attribute18;
2291 l_attribute_rec.p_attribute19 := p_r_receipt_rec.attribute19;
2292 l_attribute_rec.p_attribute20 := p_r_receipt_rec.attribute20;
2293
2294
2295 -- At present the deposit date, batch name and lockbox interface id columns are commented
2296 -- due to the changes pending for the Credits API
2297 l_credit_rec.p_credit_status := 'CLEARED';
2298 l_credit_rec.p_credit_source := null;
2299 l_credit_rec.p_party_id := p_r_receipt_rec.mapped_party_id;
2300 l_credit_rec.p_credit_instrument := 'LOCKBOX';
2301 l_credit_rec.p_description := g_v_cr_desc;
2302 l_credit_rec.p_currency_cd := g_v_currency_cd;
2303 l_credit_rec.p_exchange_rate := 1;
2304 l_credit_rec.p_transaction_date := trunc(sysdate);
2305 l_credit_rec.p_effective_date := trunc(sysdate);
2306 l_credit_rec.p_receipt_lockbox_number := p_r_receipt_rec.lockbox_name;
2307 l_credit_rec.p_fee_cal_type := p_r_receipt_rec.mapped_fee_cal_type;
2308 l_credit_rec.p_fee_ci_sequence_number := p_r_receipt_rec.mapped_fee_ci_sequence_number;
2309 l_credit_rec.p_check_number := p_r_receipt_rec.check_cd;
2310 l_credit_rec.p_source_tran_type := p_r_receipt_rec.source_transaction_type;
2311 l_credit_rec.p_source_tran_ref_number := p_r_receipt_rec.adm_application_id;
2312 l_credit_rec.p_gl_date := p_r_receipt_rec.gl_date;
2313 l_credit_rec.p_deposit_date := p_r_receipt_rec.deposit_date;
2314 l_credit_rec.p_batch_name := p_r_receipt_rec.batch_name;
2315 l_credit_rec.p_lockbox_interface_id := p_r_receipt_rec.lockbox_interface_id;
2316
2317 -- Assign passed Credit Type Id and Receipt Amount.
2318 l_credit_rec.p_credit_type_id := p_n_credit_type_id;
2319 l_credit_rec.p_amount := p_n_receipt_amt;
2320
2321 l_n_credit_id := null;
2322 l_n_cr_activity_id := null;
2323 igs_fi_credit_pvt.create_credit(p_api_version => 2.1,
2324 p_init_msg_list => fnd_api.g_true,
2325 p_commit => fnd_api.g_false,
2326 p_validation_level => fnd_api.g_valid_level_none,
2327 x_return_status => l_v_status,
2328 x_msg_count => l_n_msg_count,
2329 x_msg_data => l_v_msg_data,
2330 p_credit_rec => l_credit_rec,
2331 p_attribute_record => l_attribute_rec,
2332 x_credit_id => l_n_credit_id,
2333 x_credit_activity_id => l_n_cr_activity_id,
2334 x_credit_number => l_v_credit_number);
2335 IF l_v_status = 'S' THEN
2336 p_n_credit_id := l_n_credit_id;
2337 p_v_status := l_v_status;
2338 -- If Holds Release fails, then status = 'S' but msg count will be > 0
2339 -- Show the message on the stack in such a case
2340 IF l_n_msg_count <> 0 THEN
2341 FOR l_n_cntr IN 1..l_n_msg_count LOOP
2342 l_v_msg_txt := fnd_msg_pub.get(p_msg_index => l_n_cntr, p_encoded => 'T');
2343 fnd_message.set_encoded(l_v_msg_txt);
2344 p_v_message_text := p_v_message_text||fnd_message.get;
2345 END LOOP;
2346 END IF;
2347 ELSE
2348 -- If the credits API returns an error, then pass the error message out
2349 p_n_credit_id := null;
2350 p_v_status := l_v_status;
2351 IF l_n_msg_count = 1 THEN
2352 fnd_message.set_encoded(l_v_msg_data);
2353 p_v_message_text := fnd_message.get;
2354 ELSE
2355 FOR l_n_cntr IN 1..l_n_msg_count LOOP
2356 l_v_msg_txt := fnd_msg_pub.get(p_msg_index => l_n_cntr, p_encoded => 'T');
2357 fnd_message.set_encoded(l_v_msg_txt);
2358 p_v_message_text := p_v_message_text||fnd_message.get;
2359 END LOOP;
2360 END IF;
2361 END IF;
2362 END invoke_credits_api_pvt;
2363
2364 PROCEDURE valtype2_and_import_rects(p_t_lb_rec_tab lb_receipt_tab,
2365 p_v_test_run VARCHAR2,
2366 p_d_gl_date DATE,
2367 p_v_invoked_from VARCHAR2) AS
2368 /******************************************************************
2369 Created By : Amit Gairola
2370 Date Created By : 12-Jun-2003
2371 Purpose : Procedure for type2 validations
2372
2373 Known limitations,enhancements,remarks:
2374 Change History
2375 Who When What
2376 shtatiko 27-AUG-2003 Enh# 3045007, Added logic for creating Installment Credits.
2377 pathipat 21-Aug-2003 Enh 3076768 - Auto Release of Holds
2378 Logged message even if invoke_credits_api_pvt() returns Success
2379 for Holds-related actions
2380 agairola 01-Jul-03 Bug: 3030453 changed the call to the l_t_ro_tab.DELETE
2381 to execute only if the receipt number matches the counter
2382 agairola 01-Jul-03 Bug: 3030673 assigned g_n_retcode = 1 when credits API
2383 invocation fails
2384 ***************************************************************** */
2385 l_b_val_err BOOLEAN;
2386
2387 -- In this cursor, HZ_PARTIES has been directly used to improve performance
2388 CURSOR cur_party(cp_party_number hz_parties.party_number%TYPE) IS
2389 SELECT party_id person_id
2390 FROM hz_parties
2391 WHERE party_number = cp_party_number;
2392
2393 CURSOR cur_lb_crt(cp_lockbox_name igs_fi_lockboxes.lockbox_name%TYPE) IS
2394 SELECT default_credit_type_id
2395 FROM igs_fi_lockboxes
2396 WHERE lockbox_name = cp_lockbox_name;
2397
2398 CURSOR cur_fcmap(cp_lockbox_name igs_fi_lockboxes.lockbox_name%TYPE,
2399 cp_bank_cd igs_fi_lb_fcis.bank_cd%TYPE) IS
2400 SELECT fee_cal_type,
2401 fee_ci_sequence_number
2402 FROM igs_fi_lb_fcis
2403 WHERE lockbox_name = cp_lockbox_name
2404 AND bank_cd = cp_bank_cd;
2405
2406 CURSOR cur_lb_crt_map(cp_lockbox_name igs_fi_lb_cr_types.lockbox_name%TYPE,
2407 cp_bank_cd igs_fi_lb_cr_types.bank_cd%TYPE) IS
2408 SELECT credit_type_id
2409 FROM igs_fi_lb_cr_types
2410 WHERE bank_cd = cp_bank_cd
2411 AND lockbox_name = cp_lockbox_name;
2412
2413 l_t_rc_tab lb_receipt_tab;
2414 l_n_rc_cntr NUMBER(38) := 0;
2415
2416 l_t_ro_tab lb_receipt_tab;
2417 l_n_ro_cntr NUMBER(38) := 0;
2418 l_v_credit_class igs_fi_cr_types.credit_class%TYPE;
2419 l_b_ret_stat BOOLEAN;
2420 l_b_ro_rec_found BOOLEAN;
2421 l_n_pay_cr_type_id igs_fi_cr_types.credit_type_id%TYPE;
2422 l_v_closing_status VARCHAR2(5);
2423 l_v_message_name VARCHAR2(2000);
2424 l_v_ld_cal_type igs_ca_inst.cal_type%TYPE;
2425 l_n_ld_seq_num igs_ca_inst.sequence_number%TYPE;
2426 l_v_fee_type igs_fi_fee_type.fee_type%TYPE;
2427 l_n_invoice_id igs_fi_inv_int.invoice_id%TYPE;
2428 l_v_message_text VARCHAR2(2000);
2429 l_b_ro_rec_match BOOLEAN;
2430 l_n_rec_err_id igs_fi_lb_rect_errs.lockbox_receipt_error_id%TYPE;
2431 l_n_credit_id igs_fi_credits.credit_id%TYPE;
2432 l_v_status VARCHAR2(1);
2433 l_n_act_amnt_applied igs_fi_applications.amount_applied%TYPE;
2434 l_n_app_id igs_fi_applications.application_id%TYPE;
2435 l_n_rec_amnt_prc igs_fi_credits.amount%TYPE;
2436 l_n_rec_cntr NUMBER(38);
2437 l_n_receipt_number NUMBER(38);
2438 l_n_cntr NUMBER(38);
2439 l_n_cntr1 NUMBER(38);
2440 l_b_rec_succ BOOLEAN;
2441
2442 l_n_amount_api igs_fi_credits_all.amount%TYPE;
2443 l_n_cr_type_id_api igs_fi_cr_types_all.credit_type_id%TYPE;
2444 l_n_dflt_cr_type_id igs_fi_cr_types_all.credit_type_id%TYPE;
2445 l_v_act_plan_name igs_fi_pp_std_attrs.payment_plan_name%TYPE;
2446 l_n_act_plan_id igs_fi_pp_std_attrs.student_plan_id%TYPE;
2447 l_n_plan_balance igs_fi_pp_instlmnts.due_amt%TYPE;
2448 l_n_diff_amount NUMBER := 0;
2449
2450 BEGIN
2451
2452 -- Log the message for the Type 2 validation errors.
2453 fnd_file.put_line(fnd_file.log,
2454 g_v_line_sep);
2455 fnd_file.put_line(fnd_file.log,
2456 g_v_label_type2);
2457 fnd_message.set_name('IGS',
2458 'IGS_FI_REC_IMP_ERRS');
2459 fnd_file.put_line(fnd_file.log,
2460 fnd_message.get);
2461 fnd_file.put_line(fnd_file.log,
2462 g_v_line_sep);
2463
2464 -- Divide the PL/SQL table into Receipt and Receipt Overflow records.
2465 IF p_t_lb_rec_tab.COUNT > 0 THEN
2466 FOR l_n_cntr IN p_t_lb_rec_tab.FIRST..p_t_lb_rec_tab.LAST LOOP
2467 IF p_t_lb_rec_tab.EXISTS(l_n_cntr) THEN
2468 IF p_t_lb_rec_tab(l_n_cntr).system_record_identifier = g_v_receipt THEN
2469 l_n_rc_cntr := l_n_rc_cntr + 1;
2470 l_t_rc_tab(l_n_rc_cntr) := p_t_lb_rec_tab(l_n_cntr);
2471 ELSE
2472 l_n_ro_cntr := l_n_ro_cntr + 1;
2473 l_t_ro_tab(l_n_ro_cntr) := p_t_lb_rec_tab(l_n_cntr);
2474 END IF;
2475 END IF;
2476 END LOOP;
2477 END IF;
2478
2479 -- The following logic associates a Receipt Overflow to a Receipt by setting the receipt
2480 -- number field in the Receipt Overflow PL/SQL table to the index of the receipt record in
2481 -- the receipt table. If the batch name is present for the receipt overflow, then the
2482 -- combination of batch name and item number is checked. if the batch name is not present,
2483 -- then null batch name and item number is checked.
2484 IF l_n_ro_cntr > 0 THEN
2485 FOR l_n_cntr IN l_t_ro_tab.FIRST..l_t_ro_tab.LAST LOOP
2486 IF l_t_ro_tab.EXISTS(l_n_cntr) THEN
2487 l_b_ro_rec_found := FALSE;
2488 IF l_t_ro_tab(l_n_cntr).batch_name IS NOT NULL THEN
2489 IF l_n_rc_cntr > 0 THEN
2490 FOR l_n_cntr1 IN l_t_rc_tab.FIRST..l_t_rc_tab.LAST LOOP
2491 IF l_t_rc_tab.EXISTS(l_n_cntr1) THEN
2492 IF ((l_t_rc_tab(l_n_cntr1).batch_name IS NOT NULL) AND
2493 (l_t_rc_tab(l_n_cntr1).batch_name = l_t_ro_tab(l_n_cntr).batch_name) AND
2494 (l_t_rc_tab(l_n_cntr1).item_number = l_t_ro_tab(l_n_cntr).item_number)) THEN
2495 l_b_ro_rec_found := TRUE;
2496 l_n_receipt_number := l_n_cntr1;
2497 EXIT;
2498 END IF;
2499 END IF;
2500 END LOOP;
2501 END IF;
2502 IF l_b_ro_rec_found THEN
2503 l_t_ro_tab(l_n_cntr).receipt_number := l_n_receipt_number;
2504 END IF;
2505 l_n_receipt_number := null;
2506 ELSE
2507 IF l_n_rc_cntr > 0 THEN
2508 FOR l_n_cntr1 IN l_t_rc_tab.FIRST..l_t_rc_tab.LAST LOOP
2509 IF l_t_rc_tab.EXISTS(l_n_cntr1) THEN
2510 IF ((l_t_rc_tab(l_n_cntr1).batch_name IS NULL) AND
2511 (l_t_rc_tab(l_n_cntr1).item_number = l_t_ro_tab(l_n_cntr).item_number)) THEN
2512 l_b_ro_rec_found := TRUE;
2513 l_n_receipt_number := l_n_cntr1;
2514 EXIT;
2515 END IF;
2516 END IF;
2517 END LOOP;
2518 END IF;
2519 IF l_b_ro_rec_found THEN
2520 l_t_ro_tab(l_n_cntr).receipt_number := l_n_receipt_number;
2521 END IF;
2522 l_n_receipt_number := null;
2523 END IF;
2524 END IF;
2525 END LOOP;
2526 END IF;
2527
2528 -- Loop across the receipt records
2529 IF l_n_rc_cntr > 0 THEN
2530 FOR l_n_cntr IN l_t_rc_tab.FIRST..l_t_rc_tab.LAST LOOP
2531 l_b_val_err := FALSE;
2532 g_b_log_head := FALSE;
2533 IF l_t_rc_tab.EXISTS(l_n_cntr) THEN
2534
2535 -- Validate if the party id is a valid party
2536 OPEN cur_party(l_t_rc_tab(l_n_cntr).party_number);
2537 FETCH cur_party INTO l_t_rc_tab(l_n_cntr).mapped_party_id;
2538 IF cur_party%NOTFOUND THEN
2539 l_b_val_err := TRUE;
2540 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2541 l_t_rc_tab(l_n_cntr).batch_name,
2542 l_t_rc_tab(l_n_cntr).item_number);
2543 fnd_message.set_name('IGS',
2544 'IGS_FI_INV_PARTY_NUMBER');
2545 fnd_message.set_token('PARTY_NUMBER',
2546 l_t_rc_tab(l_n_cntr).party_number);
2547 fnd_file.put_line(fnd_file.log,
2548 fnd_message.get);
2549 END IF;
2550 CLOSE cur_party;
2551
2552 -- Validate if the Credit Type is valid credit type
2553 IF l_t_rc_tab(l_n_cntr).credit_type_cd IS NULL THEN
2554
2555 -- Get the default credit type id from the lockbox
2556 OPEN cur_lb_crt(l_t_rc_tab(l_n_cntr).lockbox_name);
2557 FETCH cur_lb_crt INTO l_t_rc_tab(l_n_cntr).mapped_credit_type_id;
2558 CLOSE cur_lb_crt;
2559
2560 -- If the mapped credit type id is null, then it is a type 2 validation error
2561 IF l_t_rc_tab(l_n_cntr).mapped_credit_type_id IS NULL THEN
2562 l_b_val_err := TRUE;
2563 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2564 l_t_rc_tab(l_n_cntr).batch_name,
2565 l_t_rc_tab(l_n_cntr).item_number);
2566 fnd_message.set_name('IGS',
2567 'IGS_FI_NO_DEF_CR_TYPE');
2568 fnd_message.set_token('LOCKBOX_NAME',
2569 l_t_rc_tab(l_n_cntr).lockbox_name);
2570 fnd_file.put_line(fnd_file.log,
2571 fnd_message.get);
2572 END IF;
2573 ELSE
2574
2575 -- For the Credit type code, get the mapped credit type id from the credit type
2576 -- mapping table
2577 OPEN cur_lb_crt_map(l_t_rc_tab(l_n_cntr).lockbox_name,
2578 l_t_rc_tab(l_n_cntr).credit_type_cd);
2579 FETCH cur_lb_crt_map INTO l_t_rc_tab(l_n_cntr).mapped_credit_type_id;
2580
2581 -- If the mapping could not be found, then it is a type 2 validation error
2582 IF cur_lb_crt_map%NOTFOUND THEN
2583 l_b_val_err := TRUE;
2584 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2585 l_t_rc_tab(l_n_cntr).batch_name,
2586 l_t_rc_tab(l_n_cntr).item_number);
2587 fnd_message.set_name('IGS',
2588 'IGS_FI_NO_CR_TYPE_MAP');
2589 fnd_message.set_token('CREDIT_TYPE_BANK_CODE',
2590 l_t_rc_tab(l_n_cntr).credit_type_cd);
2591 fnd_file.put_line(fnd_file.log,
2592 fnd_message.get);
2593 END IF;
2594 CLOSE cur_lb_crt_map;
2595 END IF;
2596
2597 -- If the mapped credit type id is not null then
2598 IF l_t_rc_tab(l_n_cntr).mapped_credit_type_id IS NOT NULL THEN
2599 l_v_credit_class := null;
2600 l_b_ret_stat := null;
2601
2602 -- Validate the Credit Type Id and get the credit class
2603 igs_fi_crdapi_util.validate_credit_type(p_n_credit_type_id => l_t_rc_tab(l_n_cntr).mapped_credit_type_id,
2604 p_v_credit_class => l_v_credit_class,
2605 p_b_return_stat => l_b_ret_stat);
2606 IF NOT l_b_ret_stat THEN
2607 l_b_val_err := TRUE;
2608 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2609 l_t_rc_tab(l_n_cntr).batch_name,
2610 l_t_rc_tab(l_n_cntr).item_number);
2611 fnd_message.set_name('IGS',
2612 'IGS_FI_CAPI_CR_TYPE_INVALID');
2613 fnd_message.set_token('CR_TYPE',
2614 get_credit_type_name(l_t_rc_tab(l_n_cntr).mapped_credit_type_id));
2615 fnd_file.put_line(fnd_file.log,
2616 fnd_message.get);
2617 END IF;
2618
2619 -- If the Credit Class is Enrollment Deposit or Other Deposit, then check if the Charge Code and Charge Amount
2620 -- are provided. If they are provided then it is an error.
2621 -- Added g_v_inst_payment to the following condition as part of Enh# 3045007 as Receipt Record with credit class
2622 -- Installment Payment cannot have designated payments associated with it.
2623 IF l_v_credit_class IN (g_v_enr_deposit,
2624 g_v_oth_deposit,
2625 g_v_inst_payment) THEN
2626 IF ((l_t_rc_tab(l_n_cntr).charge_cd1 IS NOT NULL) AND
2627 (l_t_rc_tab(l_n_cntr).applied_amt1 IS NOT NULL)) OR
2628 ((l_t_rc_tab(l_n_cntr).charge_cd2 IS NOT NULL) AND
2629 (l_t_rc_tab(l_n_cntr).applied_amt2 IS NOT NULL)) OR
2630 ((l_t_rc_tab(l_n_cntr).charge_cd3 IS NOT NULL) AND
2631 (l_t_rc_tab(l_n_cntr).applied_amt3 IS NOT NULL)) OR
2632 ((l_t_rc_tab(l_n_cntr).charge_cd4 IS NOT NULL) AND
2633 (l_t_rc_tab(l_n_cntr).applied_amt4 IS NOT NULL)) OR
2634 ((l_t_rc_tab(l_n_cntr).charge_cd5 IS NOT NULL) AND
2635 (l_t_rc_tab(l_n_cntr).applied_amt5 IS NOT NULL)) OR
2636 ((l_t_rc_tab(l_n_cntr).charge_cd6 IS NOT NULL) AND
2637 (l_t_rc_tab(l_n_cntr).applied_amt6 IS NOT NULL)) OR
2638 ((l_t_rc_tab(l_n_cntr).charge_cd7 IS NOT NULL) AND
2639 (l_t_rc_tab(l_n_cntr).applied_amt7 IS NOT NULL)) OR
2640 ((l_t_rc_tab(l_n_cntr).charge_cd8 IS NOT NULL) AND
2641 (l_t_rc_tab(l_n_cntr).applied_amt8 IS NOT NULL)) THEN
2642 -- Added code to set l_b_val_err as part of Enh# 3045007 so that application does not happen after credit creation.
2643 l_b_val_err := TRUE;
2644 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2645 l_t_rc_tab(l_n_cntr).batch_name,
2646 l_t_rc_tab(l_n_cntr).item_number);
2647 fnd_message.set_name('IGS',
2648 'IGS_FI_DEP_NO_OVFLOW');
2649 fnd_message.set_token('CREDIT_CLASS',
2650 igs_fi_gen_gl.get_lkp_meaning('IGS_FI_CREDIT_CLASS', l_v_credit_class));
2651 fnd_file.put_line(fnd_file.LOG, fnd_message.get);
2652 END IF;
2653
2654 -- Also check if there are any overflow records for the receipt in case of Enrollment Deposit or Other Deposit
2655 -- If there are any overflow records then it is a type 2 error.
2656 IF l_n_ro_cntr > 0 THEN
2657 l_b_ro_rec_found := FALSE;
2658 l_n_cntr1 := 0;
2659 FOR l_n_cntr1 IN l_t_ro_tab.FIRST..l_t_ro_tab.LAST LOOP
2660 IF l_t_ro_tab.EXISTS(l_n_cntr1) THEN
2661 IF l_t_ro_tab(l_n_cntr1).receipt_number = l_n_cntr THEN
2662 l_b_ro_rec_found := TRUE;
2663 EXIT;
2664 END IF;
2665 END IF;
2666 END LOOP;
2667
2668 IF l_b_ro_rec_found THEN
2669 l_b_val_err := TRUE;
2670 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2671 l_t_rc_tab(l_n_cntr).batch_name,
2672 l_t_rc_tab(l_n_cntr).item_number);
2673 fnd_message.set_name('IGS',
2674 'IGS_FI_DEP_NO_OVFLOW');
2675 fnd_message.set_token('CREDIT_CLASS',
2676 igs_fi_gen_gl.get_lkp_meaning('IGS_FI_CREDIT_CLASS', l_v_credit_class));
2677 fnd_file.put_line(fnd_file.log,
2678 fnd_message.get);
2679 END IF;
2680 END IF;
2681
2682 IF l_v_credit_class IN (g_v_enr_deposit,
2683 g_v_oth_deposit ) THEN
2684
2685 -- Validate if the Credit Class is Enrollment Deposit, then the mapped party should be a Student
2686 -- If the creidt class is Other Deposit, then the mapped party should be a person
2687 IF NOT igs_fi_crdapi_util.validate_party_id(p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
2688 p_v_credit_class => l_v_credit_class) THEN
2689 l_b_val_err := TRUE;
2690 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2691 l_t_rc_tab(l_n_cntr).batch_name,
2692 l_t_rc_tab(l_n_cntr).item_number);
2693 IF l_v_credit_class = g_v_enr_deposit THEN
2694 fnd_message.set_name('IGS',
2695 'IGS_FI_PARTY_STUDENT');
2696 fnd_message.set_token('PARTY_NUMBER',
2697 l_t_rc_tab(l_n_cntr).party_number);
2698 fnd_file.put_line(fnd_file.log,
2699 fnd_message.get);
2700 ELSIF l_v_credit_class = g_v_oth_deposit THEN
2701 fnd_message.set_name('IGS',
2702 'IGS_FI_PARTY_PERSON');
2703 fnd_message.set_token('PARTY_NUMBER',
2704 l_t_rc_tab(l_n_cntr).party_number);
2705 fnd_file.put_line(fnd_file.log,
2706 fnd_message.get);
2707 END IF;
2708 END IF;
2709 l_b_ret_stat := null;
2710 l_n_pay_cr_type_id := null;
2711
2712 -- Validate the Payment Credit Type for the Mapped Credit Type
2713 igs_fi_crdapi_util.validate_dep_crtype(p_n_credit_type_id => l_t_rc_tab(l_n_cntr).mapped_credit_type_id,
2714 p_n_pay_credit_type_id => l_n_pay_cr_type_id,
2715 p_b_return_stat => l_b_ret_stat);
2716
2717 -- If the payment credit type is not valid or is closed, then log the error in the log file
2718 IF NOT l_b_ret_stat THEN
2719 l_b_val_err := TRUE;
2720 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2721 l_t_rc_tab(l_n_cntr).batch_name,
2722 l_t_rc_tab(l_n_cntr).item_number);
2723 fnd_message.set_name('IGS',
2724 'IGS_FI_PCT_DCT_INVALID');
2725 fnd_message.set_token('PAY_CR_TYPE',
2726 get_credit_type_name(l_n_pay_cr_type_id));
2727 fnd_message.set_token('DEP_CR_TYPE',
2728 get_credit_type_name(l_t_rc_tab(l_n_cntr).mapped_credit_type_id));
2729 fnd_file.put_line(fnd_file.log,
2730 fnd_message.get);
2731 END IF;
2732
2733 -- If the credit class is ENRDEPOSIT, then validate if the Admission Application Id is valid. If not, log the error in the
2734 -- log file.
2735 IF l_v_credit_class = g_v_enr_deposit THEN
2736 IF NOT igs_fi_crdapi_util.validate_source_tran_ref_num(p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
2737 p_n_source_tran_ref_num => l_t_rc_tab(l_n_cntr).adm_application_id) THEN
2738 l_b_val_err := TRUE;
2739 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2740 l_t_rc_tab(l_n_cntr).batch_name,
2741 l_t_rc_tab(l_n_cntr).item_number);
2742 fnd_message.set_name('IGS',
2743 'IGS_FI_INV_ADM_APPL_ID');
2744 fnd_message.set_token('ADMISSION_APPLICATION_ID',
2745 l_t_rc_tab(l_n_cntr).adm_application_id);
2746 fnd_message.set_token('PARTY_NUMBER',
2747 l_t_rc_tab(l_n_cntr).party_number);
2748 fnd_file.put_line(fnd_file.log,
2749 fnd_message.get);
2750 ELSE
2751 l_t_rc_tab(l_n_cntr).source_transaction_type := g_v_adm;
2752 END IF;
2753 END IF;
2754 END IF;
2755 END IF; -- End if for the Credit Class
2756 END IF; -- Check for the Mapped Credit Id being present
2757
2758 -- If the GL Date Source is Deposit Date, then
2759 IF g_v_gl_date_source = g_v_deposit_date THEN
2760
2761 -- Validate if the Deposit Date is null. If yes, then log this error in the log file.
2762 IF l_t_rc_tab(l_n_cntr).deposit_date IS NULL THEN
2763 l_b_val_err := TRUE;
2764 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2765 l_t_rc_tab(l_n_cntr).batch_name,
2766 l_t_rc_tab(l_n_cntr).item_number);
2767 fnd_message.set_name('IGS',
2768 'IGS_FI_GL_DATE_MISSING');
2769 fnd_file.put_line(fnd_file.log,
2770 fnd_message.get);
2771 ELSE
2772
2773 -- Else, validate if the deposit date is in an Open or Future Period or is in a valid accounting period.
2774 l_t_rc_tab(l_n_cntr).gl_date := trunc(l_t_rc_tab(l_n_cntr).deposit_date);
2775 igs_fi_gen_gl.get_period_status_for_date(p_d_date => l_t_rc_tab(l_n_cntr).gl_date,
2776 p_v_closing_status => l_v_closing_status,
2777 p_v_message_name => l_v_message_name);
2778 IF l_v_message_name IS NOT NULL THEN
2779 l_b_val_err := TRUE;
2780 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2781 l_t_rc_tab(l_n_cntr).batch_name,
2782 l_t_rc_tab(l_n_cntr).item_number);
2783 fnd_message.set_name('IGS',
2784 l_v_message_name);
2785 fnd_file.put_line(fnd_file.log,
2786 fnd_message.get);
2787 ELSIF l_v_closing_status NOT IN ('O','F') THEN
2788 l_b_val_err := TRUE;
2789 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2790 l_t_rc_tab(l_n_cntr).batch_name,
2791 l_t_rc_tab(l_n_cntr).item_number);
2792 fnd_message.set_name('IGS',
2793 'IGS_FI_INVALID_GL_DATE');
2794 fnd_message.set_token('GL_DATE',
2795 l_t_rc_tab(l_n_cntr).gl_date);
2796 fnd_file.put_line(fnd_file.log,
2797 fnd_message.get);
2798 END IF;
2799 END IF;
2800 ELSIF g_v_gl_date_source = g_v_imp_date THEN
2801
2802 -- If the GL Date Source is Import Date, then System Date is used for the gl date
2803 l_t_rc_tab(l_n_cntr).gl_date := trunc(sysdate);
2804 ELSIF g_v_gl_date_source = g_v_user_supp_dt THEN
2805
2806 -- If the GL Date Source is User Supplied Date, then the input parameter p_d_gl_date is taken as GL Date
2807 l_t_rc_tab(l_n_cntr).gl_date := p_d_gl_date;
2808 END IF;
2809
2810 -- If the fee calendar instance code is provided, then
2811 IF l_t_rc_tab(l_n_cntr).fee_cal_instance_cd IS NOT NULL THEN
2812
2813 -- Get the mapped Fee Calendar Instance for the lockbox
2814 OPEN cur_fcmap(l_t_rc_tab(l_n_cntr).lockbox_name,
2815 l_t_rc_tab(l_n_cntr).fee_cal_instance_cd);
2816 FETCH cur_fcmap INTO l_t_rc_tab(l_n_cntr).mapped_fee_cal_type,
2817 l_t_rc_tab(l_n_cntr).mapped_fee_ci_sequence_number;
2818
2819 -- If the mapping is not available, then log the message in the log file.
2820 IF cur_fcmap%NOTFOUND THEN
2821 l_b_val_err := TRUE;
2822 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2823 l_t_rc_tab(l_n_cntr).batch_name,
2824 l_t_rc_tab(l_n_cntr).item_number);
2825 fnd_message.set_name('IGS',
2826 'IGS_FI_NO_FCI_MAP');
2827 fnd_message.set_token('FEE_CAL_INSTANCE_CODE',
2828 l_t_rc_tab(l_n_cntr).fee_cal_instance_cd);
2829 fnd_file.put_line(fnd_file.log,
2830 fnd_message.get);
2831 END IF;
2832 CLOSE cur_fcmap;
2833
2834 -- If the Mapped Fee Cal Type can be derived, then check if it is a valid Fee calendar.
2835 IF ((l_t_rc_tab(l_n_cntr).mapped_fee_cal_type IS NOT NULL) AND
2836 (l_t_rc_tab(l_n_cntr).mapped_fee_ci_sequence_number IS NOT NULL)) THEN
2837 IF NOT igs_fi_crdapi_util.validate_cal_inst(p_v_cal_type => l_t_rc_tab(l_n_cntr).mapped_fee_cal_type,
2838 p_n_ci_sequence_number => l_t_rc_tab(l_n_cntr).mapped_fee_ci_sequence_number,
2839 p_v_s_cal_cat => g_v_fee) THEN
2840 l_b_val_err := TRUE;
2841 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2842 l_t_rc_tab(l_n_cntr).batch_name,
2843 l_t_rc_tab(l_n_cntr).item_number);
2844 fnd_message.set_name('IGS',
2845 'IGS_FI_FCI_INVALID');
2846 fnd_message.set_token('FEE_CAL_INSTANCE_CODE',
2847 l_t_rc_tab(l_n_cntr).fee_cal_instance_cd);
2848 fnd_file.put_line(fnd_file.log,
2849 fnd_message.get);
2850 END IF;
2851
2852 -- Check if the Mapped Fee Calendar Instance has a valid Load Calendar Instance
2853 l_v_ld_cal_type := null;
2854 l_n_ld_seq_num := null;
2855 l_v_message_name := null;
2856 l_b_ret_stat := null;
2857 igs_fi_crdapi_util.validate_fci_lci_reln(p_v_fee_cal_type => l_t_rc_tab(l_n_cntr).mapped_fee_cal_type,
2858 p_n_fee_ci_sequence_number => l_t_rc_tab(l_n_cntr).mapped_fee_ci_sequence_number,
2859 p_v_ld_cal_type => l_v_ld_cal_type,
2860 p_n_ld_ci_sequence_number => l_n_ld_seq_num,
2861 p_v_message_name => l_v_message_name,
2862 p_b_return_stat => l_b_ret_stat);
2863 IF NOT l_b_ret_stat THEN
2864 l_b_val_err := TRUE;
2865 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2866 l_t_rc_tab(l_n_cntr).batch_name,
2867 l_t_rc_tab(l_n_cntr).item_number);
2868 fnd_message.set_name('IGS',
2869 l_v_message_name);
2870 fnd_file.put_line(fnd_file.log,
2871 fnd_message.get);
2872 END IF;
2873 END IF;
2874 END IF;
2875
2876 -- Validate the Receipt Amount
2877 l_v_message_name := null;
2878 l_b_ret_stat := null;
2879 igs_fi_crdapi_util.validate_amount(p_n_amount => l_t_rc_tab(l_n_cntr).receipt_amt,
2880 p_b_return_status => l_b_ret_stat,
2881 p_v_message_name => l_v_message_name);
2882 IF NOT l_b_ret_stat THEN
2883 l_b_val_err := TRUE;
2884 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2885 l_t_rc_tab(l_n_cntr).batch_name,
2886 l_t_rc_tab(l_n_cntr).item_number);
2887 fnd_message.set_name('IGS',
2888 l_v_message_name);
2889 fnd_file.put_line(fnd_file.log,
2890 fnd_message.get);
2891 END IF;
2892
2893 -- Validate the DFF
2894 IF NOT igs_fi_crdapi_util.validate_desc_flex(p_v_attribute_category => l_t_rc_tab(l_n_cntr).attribute_category,
2895 p_v_attribute1 => l_t_rc_tab(l_n_cntr).attribute1,
2896 p_v_attribute2 => l_t_rc_tab(l_n_cntr).attribute2,
2897 p_v_attribute3 => l_t_rc_tab(l_n_cntr).attribute3,
2898 p_v_attribute4 => l_t_rc_tab(l_n_cntr).attribute4,
2899 p_v_attribute5 => l_t_rc_tab(l_n_cntr).attribute5,
2900 p_v_attribute6 => l_t_rc_tab(l_n_cntr).attribute6,
2901 p_v_attribute7 => l_t_rc_tab(l_n_cntr).attribute7,
2902 p_v_attribute8 => l_t_rc_tab(l_n_cntr).attribute8,
2903 p_v_attribute9 => l_t_rc_tab(l_n_cntr).attribute9,
2904 p_v_attribute10 => l_t_rc_tab(l_n_cntr).attribute10,
2905 p_v_attribute11 => l_t_rc_tab(l_n_cntr).attribute11,
2906 p_v_attribute12 => l_t_rc_tab(l_n_cntr).attribute12,
2907 p_v_attribute13 => l_t_rc_tab(l_n_cntr).attribute13,
2908 p_v_attribute14 => l_t_rc_tab(l_n_cntr).attribute14,
2909 p_v_attribute15 => l_t_rc_tab(l_n_cntr).attribute15,
2910 p_v_attribute16 => l_t_rc_tab(l_n_cntr).attribute16,
2911 p_v_attribute17 => l_t_rc_tab(l_n_cntr).attribute17,
2912 p_v_attribute18 => l_t_rc_tab(l_n_cntr).attribute18,
2913 p_v_attribute19 => l_t_rc_tab(l_n_cntr).attribute19,
2914 p_v_attribute20 => l_t_rc_tab(l_n_cntr).attribute20,
2915 p_v_desc_flex_name => 'IGS_FI_CREDITS_ALL_FLEX') THEN
2916 l_b_val_err := TRUE;
2917 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2918 l_t_rc_tab(l_n_cntr).batch_name,
2919 l_t_rc_tab(l_n_cntr).item_number);
2920 fnd_message.set_name('IGS',
2921 'IGS_AD_INVALID_DESC_FLEX');
2922 fnd_file.put_line(fnd_file.log,
2923 fnd_message.get);
2924 END IF;
2925
2926 -- If any of the Charge Codes is not null, then validate if the charge number can be applied and is a valid charge
2927 -- If not then it is an error message.
2928 IF l_t_rc_tab(l_n_cntr).charge_cd1 IS NOT NULL THEN
2929 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
2930 l_v_fee_type := null;
2931 l_n_invoice_id := null;
2932 l_v_message_text := null;
2933 val_charge_number_for_app(p_v_charge_code => l_t_rc_tab(l_n_cntr).charge_cd1,
2934 p_v_party_number => l_t_rc_tab(l_n_cntr).party_number,
2935 p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
2936 p_v_fee_type => l_v_fee_type,
2937 p_n_invoice_id => l_n_invoice_id,
2938 p_v_message_name => l_v_message_text);
2939 IF l_v_message_text IS NOT NULL THEN
2940 l_b_val_err := TRUE;
2941 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2942 l_t_rc_tab(l_n_cntr).batch_name,
2943 l_t_rc_tab(l_n_cntr).item_number);
2944 fnd_file.put_line(fnd_file.log,
2945 l_v_message_text);
2946 ELSE
2947 l_t_rc_tab(l_n_cntr).target_invoice_id1 := l_n_invoice_id;
2948 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
2949 END IF;
2950 END IF;
2951
2952 IF l_t_rc_tab(l_n_cntr).charge_cd2 IS NOT NULL THEN
2953 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
2954 l_v_fee_type := null;
2955 l_n_invoice_id := null;
2956 l_v_message_text := null;
2957 val_charge_number_for_app(p_v_charge_code => l_t_rc_tab(l_n_cntr).charge_cd2,
2958 p_v_party_number => l_t_rc_tab(l_n_cntr).party_number,
2959 p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
2960 p_v_fee_type => l_v_fee_type,
2961 p_n_invoice_id => l_n_invoice_id,
2962 p_v_message_name => l_v_message_text);
2963 IF l_v_message_text IS NOT NULL THEN
2964 l_b_val_err := TRUE;
2965 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2966 l_t_rc_tab(l_n_cntr).batch_name,
2967 l_t_rc_tab(l_n_cntr).item_number);
2968 fnd_file.put_line(fnd_file.log,
2969 l_v_message_text);
2970 ELSE
2971 l_t_rc_tab(l_n_cntr).target_invoice_id2 := l_n_invoice_id;
2972 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
2973 END IF;
2974 END IF;
2975
2976 IF l_t_rc_tab(l_n_cntr).charge_cd3 IS NOT NULL THEN
2977 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
2978 l_v_fee_type := null;
2979 l_n_invoice_id := null;
2980 l_v_message_text := null;
2981 val_charge_number_for_app(p_v_charge_code => l_t_rc_tab(l_n_cntr).charge_cd3,
2982 p_v_party_number => l_t_rc_tab(l_n_cntr).party_number,
2983 p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
2984 p_v_fee_type => l_v_fee_type,
2985 p_n_invoice_id => l_n_invoice_id,
2986 p_v_message_name => l_v_message_text);
2987 IF l_v_message_text IS NOT NULL THEN
2988 l_b_val_err := TRUE;
2989 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
2990 l_t_rc_tab(l_n_cntr).batch_name,
2991 l_t_rc_tab(l_n_cntr).item_number);
2992 fnd_file.put_line(fnd_file.log,
2993 l_v_message_text);
2994 ELSE
2995 l_t_rc_tab(l_n_cntr).target_invoice_id3 := l_n_invoice_id;
2996 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
2997 END IF;
2998 END IF;
2999
3000 IF l_t_rc_tab(l_n_cntr).charge_cd4 IS NOT NULL THEN
3001 l_v_fee_type := null;
3002 l_n_invoice_id := null;
3003 l_v_message_text := null;
3004 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3005 val_charge_number_for_app(p_v_charge_code => l_t_rc_tab(l_n_cntr).charge_cd4,
3006 p_v_party_number => l_t_rc_tab(l_n_cntr).party_number,
3007 p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
3008 p_v_fee_type => l_v_fee_type,
3009 p_n_invoice_id => l_n_invoice_id,
3010 p_v_message_name => l_v_message_text);
3011 IF l_v_message_text IS NOT NULL THEN
3012 l_b_val_err := TRUE;
3013 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3014 l_t_rc_tab(l_n_cntr).batch_name,
3015 l_t_rc_tab(l_n_cntr).item_number);
3016 fnd_file.put_line(fnd_file.log,
3017 l_v_message_text);
3018 ELSE
3019 l_t_rc_tab(l_n_cntr).target_invoice_id4 := l_n_invoice_id;
3020 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3021 END IF;
3022 END IF;
3023
3024 IF l_t_rc_tab(l_n_cntr).charge_cd5 IS NOT NULL THEN
3025 l_v_fee_type := null;
3026 l_n_invoice_id := null;
3027 l_v_message_text := null;
3028 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3029 val_charge_number_for_app(p_v_charge_code => l_t_rc_tab(l_n_cntr).charge_cd5,
3030 p_v_party_number => l_t_rc_tab(l_n_cntr).party_number,
3031 p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
3032 p_v_fee_type => l_v_fee_type,
3033 p_n_invoice_id => l_n_invoice_id,
3034 p_v_message_name => l_v_message_text);
3035 IF l_v_message_text IS NOT NULL THEN
3036 l_b_val_err := TRUE;
3037 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3038 l_t_rc_tab(l_n_cntr).batch_name,
3039 l_t_rc_tab(l_n_cntr).item_number);
3040 fnd_file.put_line(fnd_file.log,
3041 l_v_message_text);
3042 ELSE
3043 l_t_rc_tab(l_n_cntr).target_invoice_id5 := l_n_invoice_id;
3044 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3045 END IF;
3046 END IF;
3047
3048 IF l_t_rc_tab(l_n_cntr).charge_cd6 IS NOT NULL THEN
3049 l_v_fee_type := null;
3050 l_n_invoice_id := null;
3051 l_v_message_text := null;
3052 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3053 val_charge_number_for_app(p_v_charge_code => l_t_rc_tab(l_n_cntr).charge_cd6,
3054 p_v_party_number => l_t_rc_tab(l_n_cntr).party_number,
3055 p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
3056 p_v_fee_type => l_v_fee_type,
3057 p_n_invoice_id => l_n_invoice_id,
3058 p_v_message_name => l_v_message_text);
3059 IF l_v_message_text IS NOT NULL THEN
3060 l_b_val_err := TRUE;
3061 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3062 l_t_rc_tab(l_n_cntr).batch_name,
3063 l_t_rc_tab(l_n_cntr).item_number);
3064 fnd_file.put_line(fnd_file.log,
3065 l_v_message_text);
3066 ELSE
3067 l_t_rc_tab(l_n_cntr).target_invoice_id6 := l_n_invoice_id;
3068 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3069 END IF;
3070 END IF;
3071
3072 IF l_t_rc_tab(l_n_cntr).charge_cd7 IS NOT NULL THEN
3073 l_v_fee_type := null;
3074 l_n_invoice_id := null;
3075 l_v_message_text := null;
3076 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3077 val_charge_number_for_app(p_v_charge_code => l_t_rc_tab(l_n_cntr).charge_cd7,
3078 p_v_party_number => l_t_rc_tab(l_n_cntr).party_number,
3079 p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
3080 p_v_fee_type => l_v_fee_type,
3081 p_n_invoice_id => l_n_invoice_id,
3082 p_v_message_name => l_v_message_text);
3083 IF l_v_message_text IS NOT NULL THEN
3084 l_b_val_err := TRUE;
3085 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3086 l_t_rc_tab(l_n_cntr).batch_name,
3087 l_t_rc_tab(l_n_cntr).item_number);
3088 fnd_file.put_line(fnd_file.log,
3089 l_v_message_text);
3090 ELSE
3091 l_t_rc_tab(l_n_cntr).target_invoice_id1 := l_n_invoice_id;
3092 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3093 END IF;
3094 END IF;
3095
3096 IF l_t_rc_tab(l_n_cntr).charge_cd8 IS NOT NULL THEN
3097 l_v_fee_type := null;
3098 l_n_invoice_id := null;
3099 l_v_message_text := null;
3100 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3101 val_charge_number_for_app(p_v_charge_code => l_t_rc_tab(l_n_cntr).charge_cd8,
3102 p_v_party_number => l_t_rc_tab(l_n_cntr).party_number,
3103 p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
3104 p_v_fee_type => l_v_fee_type,
3105 p_n_invoice_id => l_n_invoice_id,
3106 p_v_message_name => l_v_message_text);
3107 IF l_v_message_text IS NOT NULL THEN
3108 l_b_val_err := TRUE;
3109 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3110 l_t_rc_tab(l_n_cntr).batch_name,
3111 l_t_rc_tab(l_n_cntr).item_number);
3112 fnd_file.put_line(fnd_file.log,
3113 l_v_message_text);
3114 ELSE
3115 l_t_rc_tab(l_n_cntr).target_invoice_id8 := l_n_invoice_id;
3116 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3117 END IF;
3118 END IF;
3119
3120 -- Also, loop across the receipt overflow records for the receipt and validate if the Charge Code
3121 -- is not null, then check if charge can be applied and is a valid charge.
3122 IF l_n_ro_cntr > 0 THEN
3123 l_n_cntr1 := 0;
3124 FOR l_n_cntr1 IN l_t_ro_tab.FIRST..l_t_ro_tab.LAST LOOP
3125 IF l_t_ro_tab.EXISTS(l_n_cntr1) THEN
3126 IF l_t_ro_tab(l_n_cntr1).receipt_number = l_n_cntr THEN
3127 IF l_t_ro_tab(l_n_cntr1).charge_cd1 IS NOT NULL THEN
3128 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3129 l_v_fee_type := null;
3130 l_n_invoice_id := null;
3131 l_v_message_text := null;
3132 val_charge_number_for_app(p_v_charge_code => l_t_ro_tab(l_n_cntr1).charge_cd1,
3133 p_v_party_number => l_t_rc_tab(l_n_cntr).party_number,
3134 p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
3135 p_v_fee_type => l_v_fee_type,
3136 p_n_invoice_id => l_n_invoice_id,
3137 p_v_message_name => l_v_message_text);
3138 IF l_v_message_text IS NOT NULL THEN
3139 l_b_val_err := TRUE;
3140 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3141 l_t_rc_tab(l_n_cntr).batch_name,
3142 l_t_rc_tab(l_n_cntr).item_number);
3143 l_t_ro_tab(l_n_cntr1).record_status := g_v_error;
3144 fnd_file.put_line(fnd_file.log,
3145 l_v_message_text);
3146 ELSE
3147 IF l_b_val_err THEN
3148 l_t_ro_tab(l_n_cntr1).record_status := g_v_error;
3149 ELSE
3150 l_t_ro_tab(l_n_cntr1).target_invoice_id1 := l_n_invoice_id;
3151 l_t_ro_tab(l_n_cntr1).eligible_to_apply_yn := 'Y';
3152 END IF;
3153 END IF;
3154 END IF;
3155
3156 IF l_t_ro_tab(l_n_cntr1).charge_cd2 IS NOT NULL THEN
3157 l_v_fee_type := null;
3158 l_n_invoice_id := null;
3159 l_v_message_text := null;
3160 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3161 val_charge_number_for_app(p_v_charge_code => l_t_ro_tab(l_n_cntr1).charge_cd2,
3162 p_v_party_number => l_t_rc_tab(l_n_cntr).party_number,
3163 p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
3164 p_v_fee_type => l_v_fee_type,
3165 p_n_invoice_id => l_n_invoice_id,
3166 p_v_message_name => l_v_message_text);
3167 IF l_v_message_text IS NOT NULL THEN
3168 l_b_val_err := TRUE;
3169 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3170 l_t_rc_tab(l_n_cntr).batch_name,
3171 l_t_rc_tab(l_n_cntr).item_number);
3172 l_t_ro_tab(l_n_cntr1).record_status := g_v_error;
3173 fnd_file.put_line(fnd_file.log,
3174 l_v_message_text);
3175 ELSE
3176 IF l_b_val_err THEN
3177 l_t_ro_tab(l_n_cntr1).record_status := g_v_error;
3178 ELSE
3179 l_t_ro_tab(l_n_cntr1).target_invoice_id2 := l_n_invoice_id;
3180 l_t_ro_tab(l_n_cntr1).eligible_to_apply_yn := 'Y';
3181 END IF;
3182 END IF;
3183 END IF;
3184
3185 IF l_t_ro_tab(l_n_cntr1).charge_cd3 IS NOT NULL THEN
3186 l_v_fee_type := null;
3187 l_n_invoice_id := null;
3188 l_v_message_text := null;
3189 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3190 val_charge_number_for_app(p_v_charge_code => l_t_ro_tab(l_n_cntr1).charge_cd3,
3191 p_v_party_number => l_t_rc_tab(l_n_cntr).party_number,
3192 p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
3193 p_v_fee_type => l_v_fee_type,
3194 p_n_invoice_id => l_n_invoice_id,
3195 p_v_message_name => l_v_message_text);
3196 IF l_v_message_text IS NOT NULL THEN
3197 l_b_val_err := TRUE;
3198 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3199 l_t_rc_tab(l_n_cntr).batch_name,
3200 l_t_rc_tab(l_n_cntr).item_number);
3201 l_t_ro_tab(l_n_cntr1).record_status := g_v_error;
3202 fnd_file.put_line(fnd_file.log,
3203 l_v_message_text);
3204 ELSE
3205 IF l_b_val_err THEN
3206 l_t_ro_tab(l_n_cntr1).record_status := g_v_error;
3207 ELSE
3208 l_t_ro_tab(l_n_cntr1).target_invoice_id3 := l_n_invoice_id;
3209 l_t_ro_tab(l_n_cntr1).eligible_to_apply_yn := 'Y';
3210 END IF;
3211 END IF;
3212 END IF;
3213
3214 IF l_t_ro_tab(l_n_cntr1).charge_cd4 IS NOT NULL THEN
3215 l_v_fee_type := null;
3216 l_n_invoice_id := null;
3217 l_v_message_text := null;
3218 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3219 val_charge_number_for_app(p_v_charge_code => l_t_ro_tab(l_n_cntr1).charge_cd4,
3220 p_v_party_number => l_t_rc_tab(l_n_cntr).party_number,
3221 p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
3222 p_v_fee_type => l_v_fee_type,
3223 p_n_invoice_id => l_n_invoice_id,
3224 p_v_message_name => l_v_message_text);
3225 IF l_v_message_text IS NOT NULL THEN
3226 l_b_val_err := TRUE;
3227 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3228 l_t_rc_tab(l_n_cntr).batch_name,
3229 l_t_rc_tab(l_n_cntr).item_number);
3230 l_t_ro_tab(l_n_cntr1).record_status := g_v_error;
3231 fnd_file.put_line(fnd_file.log,
3232 l_v_message_text);
3233 ELSE
3234 IF l_b_val_err THEN
3235 l_t_ro_tab(l_n_cntr1).record_status := g_v_error;
3236 ELSE
3237 l_t_ro_tab(l_n_cntr1).target_invoice_id4 := l_n_invoice_id;
3238 l_t_ro_tab(l_n_cntr1).eligible_to_apply_yn := 'Y';
3239 END IF;
3240 END IF;
3241 END IF;
3242 IF l_t_ro_tab(l_n_cntr1).charge_cd5 IS NOT NULL THEN
3243 l_v_fee_type := null;
3244 l_n_invoice_id := null;
3245 l_v_message_text := null;
3246 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3247 val_charge_number_for_app(p_v_charge_code => l_t_ro_tab(l_n_cntr1).charge_cd5,
3248 p_v_party_number => l_t_rc_tab(l_n_cntr).party_number,
3249 p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
3250 p_v_fee_type => l_v_fee_type,
3251 p_n_invoice_id => l_n_invoice_id,
3252 p_v_message_name => l_v_message_text);
3253 IF l_v_message_text IS NOT NULL THEN
3254 l_b_val_err := TRUE;
3255 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3256 l_t_rc_tab(l_n_cntr).batch_name,
3257 l_t_rc_tab(l_n_cntr).item_number);
3258 l_t_ro_tab(l_n_cntr1).record_status := g_v_error;
3259 fnd_file.put_line(fnd_file.log,
3260 l_v_message_text);
3261 ELSE
3262 IF l_b_val_err THEN
3263 l_t_ro_tab(l_n_cntr1).record_status := g_v_error;
3264 ELSE
3265 l_t_ro_tab(l_n_cntr1).target_invoice_id5 := l_n_invoice_id;
3266 l_t_ro_tab(l_n_cntr1).eligible_to_apply_yn := 'Y';
3267 END IF;
3268 END IF;
3269 END IF;
3270
3271 IF l_t_ro_tab(l_n_cntr1).charge_cd6 IS NOT NULL THEN
3272 l_v_fee_type := null;
3273 l_n_invoice_id := null;
3274 l_v_message_text := null;
3275 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3276 val_charge_number_for_app(p_v_charge_code => l_t_ro_tab(l_n_cntr1).charge_cd6,
3277 p_v_party_number => l_t_rc_tab(l_n_cntr).party_number,
3278 p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
3279 p_v_fee_type => l_v_fee_type,
3280 p_n_invoice_id => l_n_invoice_id,
3281 p_v_message_name => l_v_message_text);
3282 IF l_v_message_text IS NOT NULL THEN
3283 l_b_val_err := TRUE;
3284 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3285 l_t_rc_tab(l_n_cntr).batch_name,
3286 l_t_rc_tab(l_n_cntr).item_number);
3287 l_t_ro_tab(l_n_cntr1).record_status := g_v_error;
3288 fnd_file.put_line(fnd_file.log,
3289 l_v_message_text);
3290 ELSE
3291 IF l_b_val_err THEN
3292 l_t_ro_tab(l_n_cntr1).record_status := g_v_error;
3293 ELSE
3294 l_t_ro_tab(l_n_cntr1).target_invoice_id6 := l_n_invoice_id;
3295 l_t_ro_tab(l_n_cntr1).eligible_to_apply_yn := 'Y';
3296 END IF;
3297 END IF;
3298 END IF;
3299
3300 IF l_t_ro_tab(l_n_cntr1).charge_cd7 IS NOT NULL THEN
3301 l_v_fee_type := null;
3302 l_n_invoice_id := null;
3303 l_v_message_text := null;
3304 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3305 val_charge_number_for_app(p_v_charge_code => l_t_ro_tab(l_n_cntr1).charge_cd7,
3306 p_v_party_number => l_t_rc_tab(l_n_cntr).party_number,
3307 p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
3308 p_v_fee_type => l_v_fee_type,
3309 p_n_invoice_id => l_n_invoice_id,
3310 p_v_message_name => l_v_message_text);
3311 IF l_v_message_text IS NOT NULL THEN
3312 l_b_val_err := TRUE;
3313 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3314 l_t_rc_tab(l_n_cntr).batch_name,
3315 l_t_rc_tab(l_n_cntr).item_number);
3316 l_t_ro_tab(l_n_cntr1).record_status := g_v_error;
3317 fnd_file.put_line(fnd_file.log,
3318 l_v_message_text);
3319 ELSE
3320 IF l_b_val_err THEN
3321 l_t_ro_tab(l_n_cntr1).record_status := g_v_error;
3322 ELSE
3323 l_t_ro_tab(l_n_cntr1).target_invoice_id7 := l_n_invoice_id;
3324 l_t_ro_tab(l_n_cntr1).eligible_to_apply_yn := 'Y';
3325 END IF;
3326 END IF;
3327 END IF;
3328
3329 IF l_t_ro_tab(l_n_cntr1).charge_cd8 IS NOT NULL THEN
3330 l_v_fee_type := null;
3331 l_n_invoice_id := null;
3332 l_v_message_text := null;
3333 l_t_rc_tab(l_n_cntr).eligible_to_apply_yn := 'Y';
3334 val_charge_number_for_app(p_v_charge_code => l_t_ro_tab(l_n_cntr1).charge_cd8,
3335 p_v_party_number => l_t_rc_tab(l_n_cntr).party_number,
3336 p_n_party_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
3337 p_v_fee_type => l_v_fee_type,
3338 p_n_invoice_id => l_n_invoice_id,
3339 p_v_message_name => l_v_message_text);
3340 IF l_v_message_text IS NOT NULL THEN
3341 l_b_val_err := TRUE;
3342 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3343 l_t_rc_tab(l_n_cntr).batch_name,
3344 l_t_rc_tab(l_n_cntr).item_number);
3345 l_t_ro_tab(l_n_cntr1).record_status := g_v_error;
3346 fnd_file.put_line(fnd_file.log,
3347 l_v_message_text);
3348 ELSE
3349 IF l_b_val_err THEN
3350 l_t_ro_tab(l_n_cntr1).record_status := g_v_error;
3351 ELSE
3352 l_t_ro_tab(l_n_cntr1).target_invoice_id8 := l_n_invoice_id;
3353 l_t_ro_tab(l_n_cntr1).eligible_to_apply_yn := 'Y';
3354 END IF;
3355 END IF;
3356 END IF;
3357
3358 IF l_b_val_err THEN
3359 g_n_retcode := 1;
3360 l_t_ro_tab(l_n_cntr1).record_status := g_v_error;
3361 END IF;
3362 END IF;
3363 END IF;
3364 END LOOP;
3365 END IF;
3366
3367 -- If there is any validation error, then update the receipt record status to Error
3368 -- If the test run is No and the process has been invoked from Interface Process, then
3369 -- create record in the Lockbox Error tables.
3370 -- Remove the erroneous records from the PL/SQL table.
3371 IF l_b_val_err THEN
3372 g_n_retcode := 1;
3373 l_t_rc_tab(l_n_cntr).record_status := g_v_error;
3374 IF p_v_test_run = 'N' AND p_v_invoked_from = 'I' THEN
3375 l_n_rec_err_id := null;
3376 insert_lb_errors(p_r_receipt_rec => l_t_rc_tab(l_n_cntr),
3377 p_n_receipt_error_id => l_n_rec_err_id);
3378 END IF;
3379 l_n_cntr1 := null;
3380 IF l_t_ro_tab.COUNT > 0 THEN
3381 FOR l_n_cntr1 IN l_t_ro_tab.FIRST..l_t_ro_tab.LAST LOOP
3382 IF l_t_ro_tab.EXISTS(l_n_cntr1) THEN
3383 IF l_t_ro_tab(l_n_cntr1).receipt_number = l_n_cntr THEN
3384 IF p_v_test_run = 'N' AND p_v_invoked_from = 'I' THEN
3385 insert_lb_ovfl_errors(p_r_receipt_rec => l_t_ro_tab(l_n_cntr1),
3386 p_n_receipt_error_id => l_n_rec_err_id);
3387 END IF;
3388 l_t_ro_tab.DELETE(l_n_cntr1);
3389 END IF;
3390 END IF;
3391 END LOOP;
3392 END IF;
3393 l_t_rc_tab.DELETE(l_n_cntr);
3394 l_n_rc_cntr := l_t_rc_tab.COUNT;
3395 l_n_ro_cntr := l_t_ro_tab.COUNT;
3396 ELSE
3397
3398 -- Else if there is no error, then
3399 BEGIN
3400 SAVEPOINT SP_LOCKBOX_TYPE2;
3401 l_n_credit_id := null;
3402 l_v_status := null;
3403 l_v_message_text := null;
3404
3405 IF l_v_credit_class <> g_v_inst_payment THEN
3406 l_n_cr_type_id_api := l_t_rc_tab(l_n_cntr).mapped_credit_type_id;
3407 l_n_amount_api := l_t_rc_tab(l_n_cntr).receipt_amt;
3408 ELSE
3409 -- If Credit Class is Installment Payments then carry on following validations.
3410
3411 -- Check if the person is on Active Payment Plan or Not.
3412 igs_fi_gen_008.get_plan_details ( p_n_person_id => l_t_rc_tab(l_n_cntr).mapped_party_id,
3413 p_n_act_plan_id => l_n_act_plan_id,
3414 p_v_act_plan_name => l_v_act_plan_name );
3415 IF l_v_act_plan_name IS NULL THEN
3416 -- If the person is not on any active Payment Plan then check for existence of Defauly Credit Type Id for the Lockbox in the context
3417 OPEN cur_lb_crt (l_t_rc_tab(l_n_cntr).lockbox_name);
3418 FETCH cur_lb_crt INTO l_n_dflt_cr_type_id;
3419 CLOSE cur_lb_crt;
3420 IF l_n_dflt_cr_type_id IS NULL THEN
3421 -- If Lockbox does not have Default Credit Type associated, then log error.
3422 l_b_val_err := TRUE;
3423 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3424 l_t_rc_tab(l_n_cntr).batch_name,
3425 l_t_rc_tab(l_n_cntr).item_number);
3426 l_t_rc_tab(l_n_cntr).record_status := g_v_error;
3427
3428 fnd_message.set_name( 'IGS', 'IGS_FI_PP_NO_DEF_CRT' );
3429 fnd_message.set_token( 'LOCKBOX_NAME', l_t_rc_tab(l_n_cntr).lockbox_name );
3430 fnd_file.put_line(fnd_file.LOG, fnd_message.get);
3431 ELSE
3432 -- If Default Credit Type is present then proceed with credit creation.
3433 l_n_cr_type_id_api := l_n_dflt_cr_type_id;
3434 l_t_rc_tab(l_n_cntr).mapped_credit_type_id := l_n_dflt_cr_type_id;
3435 l_n_amount_api := l_t_rc_tab(l_n_cntr).receipt_amt;
3436 END IF;
3437 ELSE
3438 -- If Person is on Active Payment Plan, get the plan balance
3439 l_n_plan_balance := igs_fi_gen_008.get_plan_balance( p_n_act_plan_id => l_n_act_plan_id,
3440 p_d_effective_date => NULL );
3441
3442 -- Check the difference between Receipt Amount of the Receipt record and Plan Balance.
3443 l_n_diff_amount := NVL(l_t_rc_tab(l_n_cntr).receipt_amt, 0) - NVL(l_n_plan_balance, 0);
3444 IF l_n_diff_amount <= 0 THEN
3445 -- Create credit for the given amount with INSTALLMENT_PAYMENTS Credit Class.
3446 l_n_amount_api := l_t_rc_tab(l_n_cntr).receipt_amt;
3447 l_n_cr_type_id_api := l_t_rc_tab(l_n_cntr).mapped_credit_type_id;
3448 ELSE
3449 -- If the receipt amount is greater than plan balance,
3450 -- then, create normal credit record for difference amount using default credit type of lockbox.
3451 -- and Installment credit should be created for plan balance.
3452 OPEN cur_lb_crt (l_t_rc_tab(l_n_cntr).lockbox_name);
3453 FETCH cur_lb_crt INTO l_n_dflt_cr_type_id;
3454 CLOSE cur_lb_crt;
3455 IF l_n_dflt_cr_type_id IS NULL THEN
3456 -- If Lockbox does not have Default Credit Type associated, then log error.
3457 l_b_val_err := TRUE;
3458 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3459 l_t_rc_tab(l_n_cntr).batch_name,
3460 l_t_rc_tab(l_n_cntr).item_number);
3461 l_t_rc_tab(l_n_cntr).record_status := g_v_error;
3462
3463 fnd_message.set_name( 'IGS', 'IGS_FI_PP_NO_DEF_CRT' );
3464 fnd_message.set_token( 'LOCKBOX_NAME', l_t_rc_tab(l_n_cntr).lockbox_name );
3465 fnd_file.put_line(fnd_file.LOG, fnd_message.get);
3466 ELSE
3467 -- If Default Credit Type is present then proceed with credit creation for the difference amount.
3468 l_n_cr_type_id_api := l_n_dflt_cr_type_id;
3469 l_n_amount_api := l_n_diff_amount;
3470
3471 -- Assign this extra amount and default credit type to l_t_rc_tab(l_n_cntr) so that this info is logged later on.
3472 l_t_rc_tab(l_n_cntr).balance_amount := l_n_amount_api;
3473 l_t_rc_tab(l_n_cntr).dflt_cr_type_id := l_n_dflt_cr_type_id;
3474
3475 -- Invoke the Credits API for creating the credit
3476 invoke_credits_api_pvt(p_r_receipt_rec => l_t_rc_tab(l_n_cntr),
3477 p_n_credit_type_id => l_n_cr_type_id_api, /* Default Credit Type */
3478 p_n_receipt_amt => l_n_amount_api, /* Difference Amount */
3479 p_n_credit_id => l_n_credit_id,
3480 p_v_status => l_v_status,
3481 p_v_message_text => l_v_message_text);
3482 IF l_v_status <> 'S' THEN
3483 l_b_val_err := TRUE;
3484 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3485 l_t_rc_tab(l_n_cntr).batch_name,
3486 l_t_rc_tab(l_n_cntr).item_number);
3487 l_t_rc_tab(l_n_cntr).record_status := g_v_error;
3488
3489 fnd_file.put_line(fnd_file.LOG, l_v_message_text);
3490 ELSE
3491 -- Even when status = 'S', there might be a message if holds release failed.
3492 l_b_val_err := FALSE;
3493 l_n_credit_id := NULL;
3494 l_v_status := NULL;
3495 l_v_message_text := NULL;
3496 l_n_cr_type_id_api := l_t_rc_tab(l_n_cntr).mapped_credit_type_id;
3497 l_n_amount_api := l_n_plan_balance;
3498 l_t_rc_tab(l_n_cntr).receipt_amt := l_n_plan_balance;
3499 END IF;
3500 END IF;
3501 END IF; -- End of checking the difference between receipt amount and plan balance.
3502 END IF; -- Checking for person on active payment plan.
3503 END IF; -- Check of Credit Class
3504
3505 IF NOT l_b_val_err THEN
3506 -- Invoke the Credits API for creating the credit
3507 invoke_credits_api_pvt(p_r_receipt_rec => l_t_rc_tab(l_n_cntr),
3508 p_n_credit_type_id => l_n_cr_type_id_api,
3509 p_n_receipt_amt => l_n_amount_api,
3510 p_n_credit_id => l_n_credit_id,
3511 p_v_status => l_v_status,
3512 p_v_message_text => l_v_message_text);
3513 IF l_v_status <> 'S' THEN
3514 -- If the credit API returns with an error, then log the error in the log file.
3515 l_b_val_err := TRUE;
3516 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3517 l_t_rc_tab(l_n_cntr).batch_name,
3518 l_t_rc_tab(l_n_cntr).item_number);
3519 l_t_rc_tab(l_n_cntr).record_status := g_v_error;
3520
3521 fnd_file.put_line(fnd_file.log,
3522 l_v_message_text);
3523 ELSE
3524 -- Even when status = 'S', there might be a message if holds release failed.
3525 l_b_val_err := FALSE;
3526 l_t_rc_tab(l_n_cntr).credit_id := l_n_credit_id;
3527 l_t_rc_tab(l_n_cntr).holds_released_yn := 'Y';
3528 -- Record status would be success since the record is imported
3529 -- irrespective of holds release failing
3530 l_t_rc_tab(l_n_cntr).record_status := g_v_success;
3531 IF l_v_message_text IS NOT NULL THEN
3532 -- Hence, log the message (Auto Release of Holds build)
3533 l_t_rc_tab(l_n_cntr).holds_released_yn := 'N';
3534 g_v_holds_message := l_v_message_text;
3535 END IF;
3536 END IF;
3537 END IF;
3538
3539 -- If there have been no errors, then
3540 IF NOT l_b_val_err THEN
3541
3542 -- If the eligible to apply flag is set to N, then record status is updated to success
3543 IF l_t_rc_tab(l_n_cntr).eligible_to_apply_yn = 'N' THEN
3544 l_t_rc_tab(l_n_cntr).record_status := g_v_success;
3545 ELSE
3546 -- Else if the eligible to apply flag is set to Y, then for each charge record,
3547 -- Invoke the application procedure. If the application procedure returns error then the whole receipt record is marked as error
3548 IF l_t_rc_tab(l_n_cntr).charge_cd1 IS NOT NULL THEN
3549 l_v_message_text := null;
3550 l_n_act_amnt_applied := null;
3551 l_n_app_id := null;
3552 invoke_target_appl(p_n_credit_id => l_t_rc_tab(l_n_cntr).credit_id,
3553 p_v_charge_code => l_t_rc_tab(l_n_cntr).charge_cd1,
3554 p_n_target_invoice_id => l_t_rc_tab(l_n_cntr).target_invoice_id1,
3555 p_n_amount_applied => l_t_rc_tab(l_n_cntr).applied_amt1,
3556 p_d_gl_date => l_t_rc_tab(l_n_cntr).gl_date,
3557 p_n_act_amnt_applied => l_n_act_amnt_applied,
3558 p_n_application_id => l_n_app_id,
3559 p_v_err_message => l_v_message_text);
3560 IF l_n_app_id IS NULL THEN
3561 l_b_val_err := TRUE;
3562 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3563 l_t_rc_tab(l_n_cntr).batch_name,
3564 l_t_rc_tab(l_n_cntr).item_number);
3565 fnd_file.put_line(fnd_file.log,
3566 l_v_message_text);
3567 ELSE
3568 l_t_rc_tab(l_n_cntr).act_applied_amt1 := l_n_act_amnt_applied;
3569 END IF;
3570 END IF;
3571 IF l_t_rc_tab(l_n_cntr).charge_cd2 IS NOT NULL THEN
3572 l_v_message_text := null;
3573 l_n_act_amnt_applied := null;
3574 l_n_app_id := null;
3575 invoke_target_appl(p_n_credit_id => l_t_rc_tab(l_n_cntr).credit_id,
3576 p_v_charge_code => l_t_rc_tab(l_n_cntr).charge_cd2,
3577 p_n_target_invoice_id => l_t_rc_tab(l_n_cntr).target_invoice_id2,
3578 p_n_amount_applied => l_t_rc_tab(l_n_cntr).applied_amt2,
3579 p_d_gl_date => l_t_rc_tab(l_n_cntr).gl_date,
3580 p_n_act_amnt_applied => l_n_act_amnt_applied,
3581 p_n_application_id => l_n_app_id,
3582 p_v_err_message => l_v_message_text);
3583 IF l_n_app_id IS NULL THEN
3584 l_b_val_err := TRUE;
3585 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3586 l_t_rc_tab(l_n_cntr).batch_name,
3587 l_t_rc_tab(l_n_cntr).item_number);
3588 fnd_file.put_line(fnd_file.log,
3589 l_v_message_text);
3590 ELSE
3591 l_t_rc_tab(l_n_cntr).act_applied_amt2 := l_n_act_amnt_applied;
3592 END IF;
3593 END IF;
3594
3595 IF l_t_rc_tab(l_n_cntr).charge_cd3 IS NOT NULL THEN
3596 l_v_message_text := null;
3597 l_n_act_amnt_applied := null;
3598 l_n_app_id := null;
3599 invoke_target_appl(p_n_credit_id => l_t_rc_tab(l_n_cntr).credit_id,
3600 p_v_charge_code => l_t_rc_tab(l_n_cntr).charge_cd3,
3601 p_n_target_invoice_id => l_t_rc_tab(l_n_cntr).target_invoice_id3,
3602 p_n_amount_applied => l_t_rc_tab(l_n_cntr).applied_amt3,
3603 p_d_gl_date => l_t_rc_tab(l_n_cntr).gl_date,
3604 p_n_act_amnt_applied => l_n_act_amnt_applied,
3605 p_n_application_id => l_n_app_id,
3606 p_v_err_message => l_v_message_text);
3607 IF l_n_app_id IS NULL THEN
3608 l_b_val_err := TRUE;
3609 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3610 l_t_rc_tab(l_n_cntr).batch_name,
3611 l_t_rc_tab(l_n_cntr).item_number);
3612 fnd_file.put_line(fnd_file.log,
3613 l_v_message_text);
3614 ELSE
3615 l_t_rc_tab(l_n_cntr).act_applied_amt3 := l_n_act_amnt_applied;
3616 END IF;
3617 END IF;
3618 IF l_t_rc_tab(l_n_cntr).charge_cd4 IS NOT NULL THEN
3619 l_v_message_text := null;
3620 l_n_act_amnt_applied := null;
3621 l_n_app_id := null;
3622 invoke_target_appl(p_n_credit_id => l_t_rc_tab(l_n_cntr).credit_id,
3623 p_v_charge_code => l_t_rc_tab(l_n_cntr).charge_cd4,
3624 p_n_target_invoice_id => l_t_rc_tab(l_n_cntr).target_invoice_id4,
3625 p_n_amount_applied => l_t_rc_tab(l_n_cntr).applied_amt4,
3626 p_d_gl_date => l_t_rc_tab(l_n_cntr).gl_date,
3627 p_n_act_amnt_applied => l_n_act_amnt_applied,
3628 p_n_application_id => l_n_app_id,
3629 p_v_err_message => l_v_message_text);
3630 IF l_n_app_id IS NULL THEN
3631 l_b_val_err := TRUE;
3632 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3633 l_t_rc_tab(l_n_cntr).batch_name,
3634 l_t_rc_tab(l_n_cntr).item_number);
3635 fnd_file.put_line(fnd_file.log,
3636 l_v_message_text);
3637 ELSE
3638 l_t_rc_tab(l_n_cntr).act_applied_amt4 := l_n_act_amnt_applied;
3639 END IF;
3640 END IF;
3641 IF l_t_rc_tab(l_n_cntr).charge_cd5 IS NOT NULL THEN
3642 l_v_message_text := null;
3643 l_n_act_amnt_applied := null;
3644 l_n_app_id := null;
3645 invoke_target_appl(p_n_credit_id => l_t_rc_tab(l_n_cntr).credit_id,
3646 p_v_charge_code => l_t_rc_tab(l_n_cntr).charge_cd5,
3647 p_n_target_invoice_id => l_t_rc_tab(l_n_cntr).target_invoice_id5,
3648 p_n_amount_applied => l_t_rc_tab(l_n_cntr).applied_amt5,
3649 p_d_gl_date => l_t_rc_tab(l_n_cntr).gl_date,
3650 p_n_act_amnt_applied => l_n_act_amnt_applied,
3651 p_n_application_id => l_n_app_id,
3652 p_v_err_message => l_v_message_text);
3653 IF l_n_app_id IS NULL THEN
3654 l_b_val_err := TRUE;
3655 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3656 l_t_rc_tab(l_n_cntr).batch_name,
3657 l_t_rc_tab(l_n_cntr).item_number);
3658 fnd_file.put_line(fnd_file.log,
3659 l_v_message_text);
3660 ELSE
3661 l_t_rc_tab(l_n_cntr).act_applied_amt5 := l_n_act_amnt_applied;
3662 END IF;
3663 END IF;
3664 IF l_t_rc_tab(l_n_cntr).charge_cd6 IS NOT NULL THEN
3665 l_v_message_text := null;
3666 l_n_act_amnt_applied := null;
3667 l_n_app_id := null;
3668 invoke_target_appl(p_n_credit_id => l_t_rc_tab(l_n_cntr).credit_id,
3669 p_v_charge_code => l_t_rc_tab(l_n_cntr).charge_cd6,
3670 p_n_target_invoice_id => l_t_rc_tab(l_n_cntr).target_invoice_id6,
3671 p_n_amount_applied => l_t_rc_tab(l_n_cntr).applied_amt6,
3672 p_d_gl_date => l_t_rc_tab(l_n_cntr).gl_date,
3673 p_n_act_amnt_applied => l_n_act_amnt_applied,
3674 p_n_application_id => l_n_app_id,
3675 p_v_err_message => l_v_message_text);
3676 IF l_n_app_id IS NULL THEN
3677 l_b_val_err := TRUE;
3678 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3679 l_t_rc_tab(l_n_cntr).batch_name,
3680 l_t_rc_tab(l_n_cntr).item_number);
3681 fnd_file.put_line(fnd_file.log,
3682 l_v_message_text);
3683 ELSE
3684 l_t_rc_tab(l_n_cntr).act_applied_amt6 := l_n_act_amnt_applied;
3685 END IF;
3686 END IF;
3687 IF l_t_rc_tab(l_n_cntr).charge_cd7 IS NOT NULL THEN
3688 l_v_message_text := null;
3689 l_n_act_amnt_applied := null;
3690 l_n_app_id := null;
3691 invoke_target_appl(p_n_credit_id => l_t_rc_tab(l_n_cntr).credit_id,
3692 p_v_charge_code => l_t_rc_tab(l_n_cntr).charge_cd7,
3693 p_n_target_invoice_id => l_t_rc_tab(l_n_cntr).target_invoice_id7,
3694 p_n_amount_applied => l_t_rc_tab(l_n_cntr).applied_amt7,
3695 p_d_gl_date => l_t_rc_tab(l_n_cntr).gl_date,
3696 p_n_act_amnt_applied => l_n_act_amnt_applied,
3697 p_n_application_id => l_n_app_id,
3698 p_v_err_message => l_v_message_text);
3699 IF l_n_app_id IS NULL THEN
3700 l_b_val_err := TRUE;
3701 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3702 l_t_rc_tab(l_n_cntr).batch_name,
3703 l_t_rc_tab(l_n_cntr).item_number);
3704 fnd_file.put_line(fnd_file.log,
3705 l_v_message_text);
3706 ELSE
3707 l_t_rc_tab(l_n_cntr).act_applied_amt7 := l_n_act_amnt_applied;
3708 END IF;
3709 END IF;
3710 IF l_t_rc_tab(l_n_cntr).charge_cd8 IS NOT NULL THEN
3711 l_v_message_text := null;
3712 l_n_act_amnt_applied := null;
3713 l_n_app_id := null;
3714 invoke_target_appl(p_n_credit_id => l_t_rc_tab(l_n_cntr).credit_id,
3715 p_v_charge_code => l_t_rc_tab(l_n_cntr).charge_cd8,
3716 p_n_target_invoice_id => l_t_rc_tab(l_n_cntr).target_invoice_id8,
3717 p_n_amount_applied => l_t_rc_tab(l_n_cntr).applied_amt8,
3718 p_d_gl_date => l_t_rc_tab(l_n_cntr).gl_date,
3719 p_n_act_amnt_applied => l_n_act_amnt_applied,
3720 p_n_application_id => l_n_app_id,
3721 p_v_err_message => l_v_message_text);
3722 IF l_n_app_id IS NULL THEN
3723 l_b_val_err := TRUE;
3724 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3725 l_t_rc_tab(l_n_cntr).batch_name,
3726 l_t_rc_tab(l_n_cntr).item_number);
3727 fnd_file.put_line(fnd_file.log,
3728 l_v_message_text);
3729 ELSE
3730 l_t_rc_tab(l_n_cntr).act_applied_amt8 := l_n_act_amnt_applied;
3731 END IF;
3732 END IF;
3733
3734 -- For each of the receipt overflow record for the reciept, invoke the Applications procedure. Incase of error
3735 -- the receipt and the receipt overflow would be marked as error
3736 IF l_t_ro_tab.COUNT > 0 THEN
3737 FOR l_n_cntr1 IN l_t_ro_tab.FIRST..l_t_ro_tab.LAST LOOP
3738 IF l_t_ro_tab.EXISTS(l_n_cntr1) THEN
3739 IF l_t_ro_tab(l_n_cntr1).receipt_number = l_n_cntr THEN
3740 IF l_t_ro_tab(l_n_cntr1).charge_cd1 IS NOT NULL THEN
3741 l_v_message_text := null;
3742 l_n_act_amnt_applied := null;
3743 l_n_app_id := null;
3744 invoke_target_appl(p_n_credit_id => l_t_rc_tab(l_n_cntr).credit_id,
3745 p_v_charge_code => l_t_ro_tab(l_n_cntr1).charge_cd1,
3746 p_n_target_invoice_id => l_t_ro_tab(l_n_cntr1).target_invoice_id1,
3747 p_n_amount_applied => l_t_ro_tab(l_n_cntr1).applied_amt1,
3748 p_d_gl_date => l_t_rc_tab(l_n_cntr).gl_date,
3749 p_n_act_amnt_applied => l_n_act_amnt_applied,
3750 p_n_application_id => l_n_app_id,
3751 p_v_err_message => l_v_message_text);
3752 IF l_n_app_id IS NULL THEN
3753 l_b_val_err := TRUE;
3754 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3755 l_t_rc_tab(l_n_cntr).batch_name,
3756 l_t_rc_tab(l_n_cntr).item_number);
3757 fnd_file.put_line(fnd_file.log,
3758 l_v_message_text);
3759 ELSE
3760 l_t_ro_tab(l_n_cntr1).act_applied_amt1 := l_n_act_amnt_applied;
3761 END IF;
3762 END IF;
3763
3764 IF l_t_ro_tab(l_n_cntr1).charge_cd2 IS NOT NULL THEN
3765 l_v_message_text := null;
3766 l_n_act_amnt_applied := null;
3767 l_n_app_id := null;
3768 invoke_target_appl(p_n_credit_id => l_t_rc_tab(l_n_cntr).credit_id,
3769 p_v_charge_code => l_t_ro_tab(l_n_cntr1).charge_cd2,
3770 p_n_target_invoice_id => l_t_ro_tab(l_n_cntr1).target_invoice_id2,
3771 p_n_amount_applied => l_t_ro_tab(l_n_cntr1).applied_amt2,
3772 p_d_gl_date => l_t_rc_tab(l_n_cntr).gl_date,
3773 p_n_act_amnt_applied => l_n_act_amnt_applied,
3774 p_n_application_id => l_n_app_id,
3775 p_v_err_message => l_v_message_text);
3776 IF l_n_app_id IS NULL THEN
3777 l_b_val_err := TRUE;
3778 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3779 l_t_rc_tab(l_n_cntr).batch_name,
3780 l_t_rc_tab(l_n_cntr).item_number);
3781 fnd_file.put_line(fnd_file.log,
3782 l_v_message_text);
3783 ELSE
3784 l_t_ro_tab(l_n_cntr1).act_applied_amt2 := l_n_act_amnt_applied;
3785 END IF;
3786 END IF;
3787
3788 IF l_t_ro_tab(l_n_cntr1).charge_cd3 IS NOT NULL THEN
3789 l_v_message_text := null;
3790 l_n_act_amnt_applied := null;
3791 l_n_app_id := null;
3792 invoke_target_appl(p_n_credit_id => l_t_rc_tab(l_n_cntr).credit_id,
3793 p_v_charge_code => l_t_ro_tab(l_n_cntr1).charge_cd3,
3794 p_n_target_invoice_id => l_t_ro_tab(l_n_cntr1).target_invoice_id3,
3795 p_n_amount_applied => l_t_ro_tab(l_n_cntr1).applied_amt3,
3796 p_d_gl_date => l_t_rc_tab(l_n_cntr).gl_date,
3797 p_n_act_amnt_applied => l_n_act_amnt_applied,
3798 p_n_application_id => l_n_app_id,
3799 p_v_err_message => l_v_message_text);
3800 IF l_n_app_id IS NULL THEN
3801 l_b_val_err := TRUE;
3802 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3803 l_t_rc_tab(l_n_cntr).batch_name,
3804 l_t_rc_tab(l_n_cntr).item_number);
3805 fnd_file.put_line(fnd_file.log,
3806 l_v_message_text);
3807 ELSE
3808 l_t_ro_tab(l_n_cntr1).act_applied_amt3 := l_n_act_amnt_applied;
3809 END IF;
3810 END IF;
3811
3812 IF l_t_ro_tab(l_n_cntr1).charge_cd4 IS NOT NULL THEN
3813 l_v_message_text := null;
3814 l_n_act_amnt_applied := null;
3815 l_n_app_id := null;
3816 invoke_target_appl(p_n_credit_id => l_t_rc_tab(l_n_cntr).credit_id,
3817 p_v_charge_code => l_t_ro_tab(l_n_cntr1).charge_cd1,
3818 p_n_target_invoice_id => l_t_ro_tab(l_n_cntr1).target_invoice_id4,
3819 p_n_amount_applied => l_t_ro_tab(l_n_cntr1).applied_amt4,
3820 p_d_gl_date => l_t_rc_tab(l_n_cntr).gl_date,
3821 p_n_act_amnt_applied => l_n_act_amnt_applied,
3822 p_n_application_id => l_n_app_id,
3823 p_v_err_message => l_v_message_text);
3824 IF l_n_app_id IS NULL THEN
3825 l_b_val_err := TRUE;
3826 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3827 l_t_rc_tab(l_n_cntr).batch_name,
3828 l_t_rc_tab(l_n_cntr).item_number);
3829 fnd_file.put_line(fnd_file.log,
3830 l_v_message_text);
3831 ELSE
3832 l_t_ro_tab(l_n_cntr1).act_applied_amt4 := l_n_act_amnt_applied;
3833 END IF;
3834 END IF;
3835
3836 IF l_t_ro_tab(l_n_cntr1).charge_cd5 IS NOT NULL THEN
3837 l_v_message_text := null;
3838 l_n_act_amnt_applied := null;
3839 l_n_app_id := null;
3840 invoke_target_appl(p_n_credit_id => l_t_rc_tab(l_n_cntr).credit_id,
3841 p_v_charge_code => l_t_ro_tab(l_n_cntr1).charge_cd5,
3842 p_n_target_invoice_id => l_t_ro_tab(l_n_cntr1).target_invoice_id5,
3843 p_n_amount_applied => l_t_ro_tab(l_n_cntr1).applied_amt5,
3844 p_d_gl_date => l_t_rc_tab(l_n_cntr).gl_date,
3845 p_n_act_amnt_applied => l_n_act_amnt_applied,
3846 p_n_application_id => l_n_app_id,
3847 p_v_err_message => l_v_message_text);
3848 IF l_n_app_id IS NULL THEN
3849 l_b_val_err := TRUE;
3850 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3851 l_t_rc_tab(l_n_cntr).batch_name,
3852 l_t_rc_tab(l_n_cntr).item_number);
3853 fnd_file.put_line(fnd_file.log,
3854 l_v_message_text);
3855 ELSE
3856 l_t_ro_tab(l_n_cntr1).act_applied_amt5 := l_n_act_amnt_applied;
3857 END IF;
3858 END IF;
3859
3860 IF l_t_ro_tab(l_n_cntr1).charge_cd6 IS NOT NULL THEN
3861 l_v_message_text := null;
3862 l_n_act_amnt_applied := null;
3863 l_n_app_id := null;
3864 invoke_target_appl(p_n_credit_id => l_t_rc_tab(l_n_cntr).credit_id,
3865 p_v_charge_code => l_t_ro_tab(l_n_cntr1).charge_cd6,
3866 p_n_target_invoice_id => l_t_ro_tab(l_n_cntr1).target_invoice_id6,
3867 p_n_amount_applied => l_t_ro_tab(l_n_cntr1).applied_amt6,
3868 p_d_gl_date => l_t_rc_tab(l_n_cntr).gl_date,
3869 p_n_act_amnt_applied => l_n_act_amnt_applied,
3870 p_n_application_id => l_n_app_id,
3871 p_v_err_message => l_v_message_text);
3872 IF l_n_app_id IS NULL THEN
3873 l_b_val_err := TRUE;
3874 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3875 l_t_rc_tab(l_n_cntr).batch_name,
3876 l_t_rc_tab(l_n_cntr).item_number);
3877 fnd_file.put_line(fnd_file.log,
3878 l_v_message_text);
3879 ELSE
3880 l_t_ro_tab(l_n_cntr1).act_applied_amt6 := l_n_act_amnt_applied;
3881 END IF;
3882 END IF;
3883 IF l_t_ro_tab(l_n_cntr1).charge_cd7 IS NOT NULL THEN
3884 l_v_message_text := null;
3885 l_n_act_amnt_applied := null;
3886 l_n_app_id := null;
3887 invoke_target_appl(p_n_credit_id => l_t_rc_tab(l_n_cntr).credit_id,
3888 p_v_charge_code => l_t_ro_tab(l_n_cntr1).charge_cd7,
3889 p_n_target_invoice_id => l_t_ro_tab(l_n_cntr1).target_invoice_id7,
3890 p_n_amount_applied => l_t_ro_tab(l_n_cntr1).applied_amt7,
3891 p_d_gl_date => l_t_rc_tab(l_n_cntr).gl_date,
3892 p_n_act_amnt_applied => l_n_act_amnt_applied,
3893 p_n_application_id => l_n_app_id,
3894 p_v_err_message => l_v_message_text);
3895 IF l_n_app_id IS NULL THEN
3896 l_b_val_err := TRUE;
3897 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3898 l_t_rc_tab(l_n_cntr).batch_name,
3899 l_t_rc_tab(l_n_cntr).item_number);
3900 fnd_file.put_line(fnd_file.log,
3901 l_v_message_text);
3902 ELSE
3903 l_t_ro_tab(l_n_cntr1).act_applied_amt7 := l_n_act_amnt_applied;
3904 END IF;
3905 END IF;
3906 IF l_t_ro_tab(l_n_cntr1).charge_cd8 IS NOT NULL THEN
3907 l_v_message_text := null;
3908 l_n_act_amnt_applied := null;
3909 l_n_app_id := null;
3910 invoke_target_appl(p_n_credit_id => l_t_rc_tab(l_n_cntr).credit_id,
3911 p_v_charge_code => l_t_ro_tab(l_n_cntr1).charge_cd8,
3912 p_n_target_invoice_id => l_t_ro_tab(l_n_cntr1).target_invoice_id8,
3913 p_n_amount_applied => l_t_ro_tab(l_n_cntr1).applied_amt8,
3914 p_d_gl_date => l_t_rc_tab(l_n_cntr).gl_date,
3915 p_n_act_amnt_applied => l_n_act_amnt_applied,
3916 p_n_application_id => l_n_app_id,
3917 p_v_err_message => l_v_message_text);
3918 IF l_n_app_id IS NULL THEN
3919 l_b_val_err := TRUE;
3920 log_type2_err(l_t_rc_tab(l_n_cntr).lockbox_name,
3921 l_t_rc_tab(l_n_cntr).batch_name,
3922 l_t_rc_tab(l_n_cntr).item_number);
3923 fnd_file.put_line(fnd_file.log,
3924 l_v_message_text);
3925 ELSE
3926 l_t_ro_tab(l_n_cntr1).act_applied_amt8 := l_n_act_amnt_applied;
3927 END IF;
3928 END IF;
3929 END IF;
3930 END IF;
3931 END LOOP;
3932 END IF;
3933
3934 IF l_b_val_err THEN
3935 ROLLBACK TO SP_LOCKBOX_TYPE2;
3936 l_t_rc_tab(l_n_cntr).record_status := g_v_error;
3937 ELSE
3938 l_t_rc_tab(l_n_cntr).record_status := g_v_success;
3939 END IF;
3940 END IF;
3941 END IF;
3942 EXCEPTION
3943 WHEN OTHERS THEN
3944 l_b_val_err := TRUE;
3945 ROLLBACK TO SP_LOCKBOX_TYPE2;
3946 END;
3947
3948 -- If there have been any errors, then
3949 -- If the test run is No and the process has been invoked from Interface Process, then
3950 -- create record in the Lockbox Error tables.
3951 -- Remove the erroneous records from the PL/SQL table.
3952 IF l_b_val_err THEN
3953 g_n_retcode := 1;
3954 IF p_v_test_run = 'N' AND p_v_invoked_from = 'I' THEN
3955 l_n_rec_err_id := null;
3956 insert_lb_errors(p_r_receipt_rec => l_t_rc_tab(l_n_cntr),
3957 p_n_receipt_error_id => l_n_rec_err_id);
3958 END IF;
3959 l_n_cntr1 := null;
3960 IF l_t_ro_tab.COUNT > 0 THEN
3961 FOR l_n_cntr1 IN l_t_ro_tab.FIRST..l_t_ro_tab.LAST LOOP
3962 IF l_t_ro_tab.EXISTS(l_n_cntr1) THEN
3963 IF l_t_ro_tab(l_n_cntr1).receipt_number = l_n_cntr THEN
3964 IF p_v_test_run = 'N' AND p_v_invoked_from = 'I' THEN
3965 insert_lb_ovfl_errors(p_r_receipt_rec => l_t_ro_tab(l_n_cntr1),
3966 p_n_receipt_error_id => l_n_rec_err_id);
3967 END IF;
3968 l_t_ro_tab.DELETE(l_n_cntr1);
3969 END IF;
3970 END IF;
3971 END LOOP;
3972 END IF;
3973 l_t_rc_tab.DELETE(l_n_cntr);
3974 l_n_rc_cntr := l_t_rc_tab.COUNT;
3975 l_n_ro_cntr := l_t_ro_tab.COUNT;
3976 END IF;
3977 END IF;
3978 l_b_val_err := FALSE;
3979 END IF; -- End if for check of EXISTS
3980 END LOOP;
3981 END IF;
3982
3983 IF l_t_rc_tab.COUNT = 0 THEN
3984 fnd_file.put_line(fnd_file.log,
3985 g_v_line_sep);
3986 END IF;
3987
3988
3989 -- Following logic writes the successfully imported records details in the
3990 -- concurrent manager log file
3991
3992 l_b_rec_succ := FALSE;
3993 IF l_t_rc_tab.COUNT > 0 THEN
3994 -- All erraneous records are deleted from PL/SQL table above, so l_t_rc_tab contains all success records.
3995 l_b_rec_succ := TRUE;
3996 fnd_file.new_line(fnd_file.log);
3997 fnd_file.put_line(fnd_file.log,
3998 g_v_line_sep);
3999 fnd_message.set_name('IGS',
4000 'IGS_FI_REC_IMP_SUCC');
4001 fnd_file.put_line(fnd_file.log,
4002 fnd_message.get);
4003 fnd_file.put_line(fnd_file.log,
4004 g_v_line_sep);
4005 l_n_rec_cntr := 0;
4006 FOR l_n_cntr IN l_t_rc_tab.FIRST..l_t_rc_tab.LAST LOOP
4007 IF l_t_rc_tab.EXISTS(l_n_cntr) THEN
4008 IF l_t_rc_tab(l_n_cntr).record_status = g_v_success THEN
4009 l_n_rec_cntr := l_n_rec_cntr + 1;
4010 l_n_rec_amnt_prc := NVL(l_n_rec_amnt_prc,0) +
4011 NVL(l_t_rc_tab(l_n_cntr).receipt_amt,0);
4012 log_line(g_v_label_lb_name,
4013 l_t_rc_tab(l_n_cntr).lockbox_name);
4014 log_line(g_v_label_batch,
4015 l_t_rc_tab(l_n_cntr).batch_name);
4016 log_line(g_v_label_item,
4017 l_t_rc_tab(l_n_cntr).item_number);
4018 log_line(g_v_label_status,
4019 g_v_label_success);
4020 log_line(g_v_label_party,
4021 l_t_rc_tab(l_n_cntr).party_number);
4022 log_line(g_v_label_rec_amnt,
4023 l_t_rc_tab(l_n_cntr).receipt_amt);
4024 log_line(g_v_label_cr_type,
4025 get_credit_type_name(l_t_rc_tab(l_n_cntr).mapped_credit_type_id));
4026 -- Log amount and credit type name if there is balance amount after creating Installment Credit.
4027 IF l_t_rc_tab(l_n_cntr).dflt_cr_type_id IS NOT NULL THEN
4028 log_line(g_v_label_bal_amnt,
4029 l_t_rc_tab(l_n_cntr).balance_amount);
4030 log_line(g_v_label_dflt_cr_type,
4031 get_credit_type_name(l_t_rc_tab(l_n_cntr).dflt_cr_type_id));
4032 END IF;
4033
4034 log_line(g_v_label_fee_prd,
4035 get_fee_period(l_t_rc_tab(l_n_cntr).mapped_fee_cal_type,
4036 l_t_rc_tab(l_n_cntr).mapped_fee_ci_sequence_number));
4037 log_line(g_v_label_gl_date,
4038 l_t_rc_tab(l_n_cntr).gl_date);
4039 log_line(g_v_label_adm_appl_num,
4040 l_t_rc_tab(l_n_cntr).adm_application_id);
4041 fnd_file.new_line(fnd_file.log);
4042
4043 IF l_t_rc_tab(l_n_cntr).charge_cd1 IS NOT NULL THEN
4044 log_line(g_v_label_charge_code,
4045 l_t_rc_tab(l_n_cntr).charge_cd1);
4046 log_line(g_v_label_bank_app_amt,
4047 l_t_rc_tab(l_n_cntr).applied_amt1);
4048 log_line(g_v_label_act_app_amt,
4049 l_t_rc_tab(l_n_cntr).act_applied_amt1);
4050 fnd_file.new_line(fnd_file.log);
4051 END IF;
4052
4053 IF l_t_rc_tab(l_n_cntr).charge_cd2 IS NOT NULL THEN
4054 log_line(g_v_label_charge_code,
4055 l_t_rc_tab(l_n_cntr).charge_cd2);
4056 log_line(g_v_label_bank_app_amt,
4057 l_t_rc_tab(l_n_cntr).applied_amt2);
4058 log_line(g_v_label_act_app_amt,
4059 l_t_rc_tab(l_n_cntr).act_applied_amt2);
4060 fnd_file.new_line(fnd_file.log);
4061 END IF;
4062
4063 IF l_t_rc_tab(l_n_cntr).charge_cd3 IS NOT NULL THEN
4064 log_line(g_v_label_charge_code,
4065 l_t_rc_tab(l_n_cntr).charge_cd3);
4066 log_line(g_v_label_bank_app_amt,
4067 l_t_rc_tab(l_n_cntr).applied_amt3);
4068 log_line(g_v_label_act_app_amt,
4069 l_t_rc_tab(l_n_cntr).act_applied_amt3);
4070 fnd_file.new_line(fnd_file.log);
4071 END IF;
4072
4073 IF l_t_rc_tab(l_n_cntr).charge_cd4 IS NOT NULL THEN
4074 log_line(g_v_label_charge_code,
4075 l_t_rc_tab(l_n_cntr).charge_cd4);
4076 log_line(g_v_label_bank_app_amt,
4077 l_t_rc_tab(l_n_cntr).applied_amt4);
4078 log_line(g_v_label_act_app_amt,
4079 l_t_rc_tab(l_n_cntr).act_applied_amt4);
4080 fnd_file.new_line(fnd_file.log);
4081 END IF;
4082
4083 IF l_t_rc_tab(l_n_cntr).charge_cd5 IS NOT NULL THEN
4084 log_line(g_v_label_charge_code,
4085 l_t_rc_tab(l_n_cntr).charge_cd5);
4086 log_line(g_v_label_bank_app_amt,
4087 l_t_rc_tab(l_n_cntr).applied_amt5);
4088 log_line(g_v_label_act_app_amt,
4089 l_t_rc_tab(l_n_cntr).act_applied_amt5);
4090 fnd_file.new_line(fnd_file.log);
4091 END IF;
4092
4093 IF l_t_rc_tab(l_n_cntr).charge_cd6 IS NOT NULL THEN
4094 log_line(g_v_label_charge_code,
4095 l_t_rc_tab(l_n_cntr).charge_cd6);
4096 log_line(g_v_label_bank_app_amt,
4097 l_t_rc_tab(l_n_cntr).applied_amt6);
4098 log_line(g_v_label_act_app_amt,
4099 l_t_rc_tab(l_n_cntr).act_applied_amt6);
4100 fnd_file.new_line(fnd_file.log);
4101 END IF;
4102
4103 IF l_t_rc_tab(l_n_cntr).charge_cd7 IS NOT NULL THEN
4104 log_line(g_v_label_charge_code,
4105 l_t_rc_tab(l_n_cntr).charge_cd7);
4106 log_line(g_v_label_bank_app_amt,
4107 l_t_rc_tab(l_n_cntr).applied_amt7);
4108 log_line(g_v_label_act_app_amt,
4109 l_t_rc_tab(l_n_cntr).act_applied_amt7);
4110 fnd_file.new_line(fnd_file.log);
4111 END IF;
4112
4113 IF l_t_rc_tab(l_n_cntr).charge_cd8 IS NOT NULL THEN
4114 log_line(g_v_label_charge_code,
4115 l_t_rc_tab(l_n_cntr).charge_cd8);
4116 log_line(g_v_label_bank_app_amt,
4117 l_t_rc_tab(l_n_cntr).applied_amt8);
4118 log_line(g_v_label_act_app_amt,
4119 l_t_rc_tab(l_n_cntr).act_applied_amt8);
4120 fnd_file.new_line(fnd_file.log);
4121 END IF;
4122
4123 l_n_cntr1 := 0;
4124 IF l_t_ro_tab.COUNT > 0 THEN
4125 FOR l_n_cntr1 IN l_t_ro_tab.FIRST..l_t_ro_tab.LAST LOOP
4126 IF l_t_ro_tab.EXISTS(l_n_cntr1) THEN
4127 IF l_t_ro_tab(l_n_cntr1).receipt_number = l_n_cntr THEN
4128 IF l_t_ro_tab(l_n_cntr1).charge_cd1 IS NOT NULL THEN
4129 log_line(g_v_label_charge_code,
4130 l_t_ro_tab(l_n_cntr1).charge_cd1);
4131 log_line(g_v_label_bank_app_amt,
4132 l_t_ro_tab(l_n_cntr1).applied_amt1);
4133 log_line(g_v_label_act_app_amt,
4134 l_t_ro_tab(l_n_cntr1).act_applied_amt1);
4135 fnd_file.new_line(fnd_file.log);
4136 END IF;
4137
4138 IF l_t_ro_tab(l_n_cntr1).charge_cd2 IS NOT NULL THEN
4139 log_line(g_v_label_charge_code,
4140 l_t_ro_tab(l_n_cntr1).charge_cd2);
4141 log_line(g_v_label_bank_app_amt,
4142 l_t_ro_tab(l_n_cntr1).applied_amt2);
4143 log_line(g_v_label_act_app_amt,
4144 l_t_ro_tab(l_n_cntr1).act_applied_amt2);
4145 fnd_file.new_line(fnd_file.log);
4146 END IF;
4147
4148 IF l_t_ro_tab(l_n_cntr1).charge_cd3 IS NOT NULL THEN
4149 log_line(g_v_label_charge_code,
4150 l_t_ro_tab(l_n_cntr1).charge_cd3);
4151 log_line(g_v_label_bank_app_amt,
4152 l_t_ro_tab(l_n_cntr1).applied_amt3);
4153 log_line(g_v_label_act_app_amt,
4154 l_t_ro_tab(l_n_cntr1).act_applied_amt3);
4155 fnd_file.new_line(fnd_file.log);
4156 END IF;
4157
4158 IF l_t_ro_tab(l_n_cntr1).charge_cd4 IS NOT NULL THEN
4159 log_line(g_v_label_charge_code,
4160 l_t_ro_tab(l_n_cntr1).charge_cd4);
4161 log_line(g_v_label_bank_app_amt,
4162 l_t_ro_tab(l_n_cntr1).applied_amt4);
4163 log_line(g_v_label_act_app_amt,
4164 l_t_ro_tab(l_n_cntr1).act_applied_amt4);
4165 fnd_file.new_line(fnd_file.log);
4166 END IF;
4167
4168 IF l_t_ro_tab(l_n_cntr1).charge_cd5 IS NOT NULL THEN
4169 log_line(g_v_label_charge_code,
4170 l_t_ro_tab(l_n_cntr1).charge_cd5);
4171 log_line(g_v_label_bank_app_amt,
4172 l_t_ro_tab(l_n_cntr1).applied_amt5);
4173 log_line(g_v_label_act_app_amt,
4174 l_t_ro_tab(l_n_cntr1).act_applied_amt5);
4175 fnd_file.new_line(fnd_file.log);
4176 END IF;
4177
4178 IF l_t_ro_tab(l_n_cntr1).charge_cd6 IS NOT NULL THEN
4179 log_line(g_v_label_charge_code,
4180 l_t_ro_tab(l_n_cntr1).charge_cd6);
4181 log_line(g_v_label_bank_app_amt,
4182 l_t_ro_tab(l_n_cntr1).applied_amt6);
4183 log_line(g_v_label_act_app_amt,
4184 l_t_ro_tab(l_n_cntr1).act_applied_amt6);
4185 fnd_file.new_line(fnd_file.log);
4186 END IF;
4187
4188 IF l_t_ro_tab(l_n_cntr1).charge_cd7 IS NOT NULL THEN
4189 log_line(g_v_label_charge_code,
4190 l_t_ro_tab(l_n_cntr1).charge_cd7);
4191 log_line(g_v_label_bank_app_amt,
4192 l_t_ro_tab(l_n_cntr1).applied_amt7);
4193 log_line(g_v_label_act_app_amt,
4194 l_t_ro_tab(l_n_cntr1).act_applied_amt7);
4195 fnd_file.new_line(fnd_file.log);
4196 END IF;
4197
4198 IF l_t_ro_tab(l_n_cntr1).charge_cd8 IS NOT NULL THEN
4199 log_line(g_v_label_charge_code,
4200 l_t_ro_tab(l_n_cntr1).charge_cd8);
4201 log_line(g_v_label_bank_app_amt,
4202 l_t_ro_tab(l_n_cntr1).applied_amt8);
4203 log_line(g_v_label_act_app_amt,
4204 l_t_ro_tab(l_n_cntr1).act_applied_amt8);
4205 fnd_file.new_line(fnd_file.log);
4206 END IF;
4207 END IF; -- End if for l_t_ro_tab(l_n_cntr1).receipt_number = l_n_cntr
4208 END IF; -- End if for l_t_ro_tab.EXISTS(l_n_cntr1)
4209 END LOOP;
4210 END IF; -- End if for l_t_ro_tab.COUNT > 0
4211
4212 -- If holds could not be released after credit creation,
4213 -- display message conveying the same.
4214 IF l_t_rc_tab(l_n_cntr).holds_released_yn = 'N' THEN
4215 fnd_file.put_line(fnd_file.log,g_v_holds_message);
4216 fnd_file.new_line(fnd_file.log);
4217 END IF;
4218
4219 END IF; -- End if for l_t_rc_tab(l_n_cntr).record_status = g_v_success
4220
4221
4222 -- If the Procedure has been invoked from the Error resolution process and the
4223 -- test run is No, then delete the successful records from the lockbox error tables
4224 IF p_v_invoked_from = 'E' AND p_v_test_run = 'N' THEN
4225 delete_err_success(p_r_rowid => l_t_rc_tab(l_n_cntr).row_id);
4226 END IF;
4227 END IF; -- End if for l_t_rc_tab.EXISTS(l_n_cntr)
4228 END LOOP;
4229 END IF;
4230
4231 -- Log the final summary of transactions
4232 fnd_file.new_line(fnd_file.log,2);
4233 log_line(g_v_label_num_rec,
4234 NVL(l_n_rec_cntr,0));
4235 log_line(g_v_label_cur_rec,
4236 NVL(l_n_rec_amnt_prc,0));
4237 fnd_file.put_line(fnd_file.log,
4238 g_v_line_sep);
4239
4240 l_n_rec_cntr := 0;
4241 l_n_rec_amnt_prc := 0;
4242
4243 -- Setting the g_n_retcode appropriately
4244 IF p_v_invoked_from = 'E' THEN
4245 IF NOT l_b_rec_succ THEN
4246 g_n_retcode := 2;
4247 ELSE
4248 IF g_n_retcode = 0 THEN
4249 g_n_retcode := 0;
4250 ELSE
4251 g_n_retcode := 1;
4252 END IF;
4253 END IF;
4254 END IF;
4255 END valtype2_and_import_rects;
4256
4257 PROCEDURE populate_err_rec( p_v_lockbox_name IN igs_fi_lockboxes.lockbox_name%TYPE,
4258 p_t_err_rec_tab OUT NOCOPY lb_receipt_tab) AS
4259
4260 /******************************************************************
4261 Created By : Shirish Tatikonda
4262 Date Created By : 12-Jun-2003
4263 Purpose : Function for populating the Error Reciept/Overflow records
4264
4265 Known limitations,enhancements,remarks:
4266 Change History
4267 Who When What
4268 ***************************************************************** */
4269 CURSOR cur_err_rec( cp_v_lockbox_name igs_fi_lockboxes.lockbox_name%TYPE ) IS
4270 SELECT ROWID row_id, lre.*
4271 FROM igs_fi_lb_rect_errs lre
4272 WHERE lockbox_name = cp_v_lockbox_name
4273 FOR UPDATE NOWAIT;
4274
4275 l_err_rec cur_err_rec%ROWTYPE;
4276
4277 CURSOR cur_err_ro( cp_n_lre_id igs_fi_lb_ovfl_errs.lockbox_receipt_error_id%TYPE ) IS
4278 SELECT ROWID row_id, loe.*
4279 FROM igs_fi_lb_ovfl_errs loe
4280 WHERE lockbox_receipt_error_id = cp_n_lre_id
4281 FOR UPDATE NOWAIT;
4282
4283 l_err_ro cur_err_ro%ROWTYPE;
4284 l_n_cntr NUMBER := 0;
4285
4286 BEGIN
4287
4288 -- Populate Receipt Records from igs_fi_lb_rect_errs into PL/SQL Table.
4289 FOR l_err_rec IN cur_err_rec( p_v_lockbox_name ) LOOP
4290 l_n_cntr := l_n_cntr + 1;
4291
4292 p_t_err_rec_tab(l_n_cntr).record_status := g_v_todo;
4293 p_t_err_rec_tab(l_n_cntr).row_id := l_err_rec.row_id;
4294 p_t_err_rec_tab(l_n_cntr).lockbox_interface_id := l_err_rec.lockbox_interface_id;
4295 p_t_err_rec_tab(l_n_cntr).system_record_identifier := g_v_receipt;
4296 p_t_err_rec_tab(l_n_cntr).deposit_date := l_err_rec.deposit_date;
4297 p_t_err_rec_tab(l_n_cntr).lockbox_name := l_err_rec.lockbox_name;
4298 p_t_err_rec_tab(l_n_cntr).batch_name := l_err_rec.batch_name;
4299 p_t_err_rec_tab(l_n_cntr).item_number := l_err_rec.item_number;
4300 p_t_err_rec_tab(l_n_cntr).receipt_amt := l_err_rec.receipt_amt;
4301 p_t_err_rec_tab(l_n_cntr).check_cd := l_err_rec.check_cd;
4302 p_t_err_rec_tab(l_n_cntr).party_number := l_err_rec.party_number;
4303 p_t_err_rec_tab(l_n_cntr).mapped_party_id := NULL;
4304 p_t_err_rec_tab(l_n_cntr).payer_name := l_err_rec.payer_name;
4305 p_t_err_rec_tab(l_n_cntr).credit_type_cd := l_err_rec.credit_type_cd;
4306 p_t_err_rec_tab(l_n_cntr).mapped_credit_type_id := NULL;
4307 p_t_err_rec_tab(l_n_cntr).fee_cal_instance_cd := l_err_rec.fee_cal_instance_cd;
4308 p_t_err_rec_tab(l_n_cntr).mapped_fee_cal_type := NULL;
4309 p_t_err_rec_tab(l_n_cntr).mapped_fee_ci_sequence_number := NULL;
4310 p_t_err_rec_tab(l_n_cntr).charge_cd1 := l_err_rec.charge_cd1;
4311 p_t_err_rec_tab(l_n_cntr).charge_cd2 := l_err_rec.charge_cd2;
4312 p_t_err_rec_tab(l_n_cntr).charge_cd3 := l_err_rec.charge_cd3;
4313 p_t_err_rec_tab(l_n_cntr).charge_cd4 := l_err_rec.charge_cd4;
4314 p_t_err_rec_tab(l_n_cntr).charge_cd5 := l_err_rec.charge_cd5;
4315 p_t_err_rec_tab(l_n_cntr).charge_cd6 := l_err_rec.charge_cd6;
4316 p_t_err_rec_tab(l_n_cntr).charge_cd7 := l_err_rec.charge_cd7;
4317 p_t_err_rec_tab(l_n_cntr).charge_cd8 := l_err_rec.charge_cd8;
4318 p_t_err_rec_tab(l_n_cntr).applied_amt1 := l_err_rec.applied_amt1;
4319 p_t_err_rec_tab(l_n_cntr).applied_amt2 := l_err_rec.applied_amt2;
4320 p_t_err_rec_tab(l_n_cntr).applied_amt3 := l_err_rec.applied_amt3;
4321 p_t_err_rec_tab(l_n_cntr).applied_amt4 := l_err_rec.applied_amt4;
4322 p_t_err_rec_tab(l_n_cntr).applied_amt5 := l_err_rec.applied_amt5;
4323 p_t_err_rec_tab(l_n_cntr).applied_amt6 := l_err_rec.applied_amt6;
4324 p_t_err_rec_tab(l_n_cntr).applied_amt7 := l_err_rec.applied_amt7;
4325 p_t_err_rec_tab(l_n_cntr).applied_amt8 := l_err_rec.applied_amt8;
4326 p_t_err_rec_tab(l_n_cntr).adm_application_id := l_err_rec.adm_application_id;
4327 p_t_err_rec_tab(l_n_cntr).attribute_category := l_err_rec.attribute_category;
4328 p_t_err_rec_tab(l_n_cntr).attribute1 := l_err_rec.attribute1;
4329 p_t_err_rec_tab(l_n_cntr).attribute2 := l_err_rec.attribute2;
4330 p_t_err_rec_tab(l_n_cntr).attribute3 := l_err_rec.attribute3;
4331 p_t_err_rec_tab(l_n_cntr).attribute4 := l_err_rec.attribute4;
4332 p_t_err_rec_tab(l_n_cntr).attribute5 := l_err_rec.attribute5;
4333 p_t_err_rec_tab(l_n_cntr).attribute6 := l_err_rec.attribute6;
4334 p_t_err_rec_tab(l_n_cntr).attribute7 := l_err_rec.attribute7;
4335 p_t_err_rec_tab(l_n_cntr).attribute8 := l_err_rec.attribute8;
4336 p_t_err_rec_tab(l_n_cntr).attribute9 := l_err_rec.attribute9;
4337 p_t_err_rec_tab(l_n_cntr).attribute10 := l_err_rec.attribute10;
4338 p_t_err_rec_tab(l_n_cntr).attribute11 := l_err_rec.attribute11;
4339 p_t_err_rec_tab(l_n_cntr).attribute12 := l_err_rec.attribute12;
4340 p_t_err_rec_tab(l_n_cntr).attribute13 := l_err_rec.attribute13;
4341 p_t_err_rec_tab(l_n_cntr).attribute14 := l_err_rec.attribute14;
4342 p_t_err_rec_tab(l_n_cntr).attribute15 := l_err_rec.attribute15;
4343 p_t_err_rec_tab(l_n_cntr).attribute16 := l_err_rec.attribute16;
4344 p_t_err_rec_tab(l_n_cntr).attribute17 := l_err_rec.attribute17;
4345 p_t_err_rec_tab(l_n_cntr).attribute18 := l_err_rec.attribute18;
4346 p_t_err_rec_tab(l_n_cntr).attribute19 := l_err_rec.attribute19;
4347 p_t_err_rec_tab(l_n_cntr).attribute20 := l_err_rec.attribute20;
4348 p_t_err_rec_tab(l_n_cntr).credit_id := NULL;
4349 p_t_err_rec_tab(l_n_cntr).gl_date := NULL;
4350 p_t_err_rec_tab(l_n_cntr).source_transaction_type := NULL;
4351 p_t_err_rec_tab(l_n_cntr).eligible_to_apply_yn := NULL;
4352 p_t_err_rec_tab(l_n_cntr).receipt_number := NULL;
4353
4354 -- Populate Receipt Overflow Records found for each Receipt Record from igs_fi_lb_ovfl_errs into PL/SQL Table.
4355 FOR l_err_ro IN cur_err_ro( l_err_rec.lockbox_receipt_error_id ) LOOP
4356 l_n_cntr := l_n_cntr + 1;
4357
4358 p_t_err_rec_tab(l_n_cntr).record_status := g_v_todo;
4359 p_t_err_rec_tab(l_n_cntr).row_id := l_err_ro.row_id;
4360 p_t_err_rec_tab(l_n_cntr).lockbox_interface_id := NULL;
4361 p_t_err_rec_tab(l_n_cntr).system_record_identifier := g_v_receipt_oflow;
4362 p_t_err_rec_tab(l_n_cntr).deposit_date := NULL;
4363 p_t_err_rec_tab(l_n_cntr).lockbox_name := l_err_rec.lockbox_name;
4364 p_t_err_rec_tab(l_n_cntr).batch_name := l_err_rec.batch_name;
4365 p_t_err_rec_tab(l_n_cntr).item_number := l_err_rec.item_number;
4366 p_t_err_rec_tab(l_n_cntr).receipt_amt := NULL;
4367 p_t_err_rec_tab(l_n_cntr).check_cd := NULL;
4368 p_t_err_rec_tab(l_n_cntr).party_number := NULL;
4369 p_t_err_rec_tab(l_n_cntr).mapped_party_id := NULL;
4370 p_t_err_rec_tab(l_n_cntr).payer_name := NULL;
4371 p_t_err_rec_tab(l_n_cntr).credit_type_cd := NULL;
4372 p_t_err_rec_tab(l_n_cntr).mapped_credit_type_id := NULL;
4373 p_t_err_rec_tab(l_n_cntr).fee_cal_instance_cd := NULL;
4374 p_t_err_rec_tab(l_n_cntr).mapped_fee_cal_type := NULL;
4375 p_t_err_rec_tab(l_n_cntr).mapped_fee_ci_sequence_number := NULL;
4376 p_t_err_rec_tab(l_n_cntr).charge_cd1 := l_err_ro.charge_cd1;
4377 p_t_err_rec_tab(l_n_cntr).charge_cd2 := l_err_ro.charge_cd2;
4378 p_t_err_rec_tab(l_n_cntr).charge_cd3 := l_err_ro.charge_cd3;
4379 p_t_err_rec_tab(l_n_cntr).charge_cd4 := l_err_ro.charge_cd4;
4380 p_t_err_rec_tab(l_n_cntr).charge_cd5 := l_err_ro.charge_cd5;
4381 p_t_err_rec_tab(l_n_cntr).charge_cd6 := l_err_ro.charge_cd6;
4382 p_t_err_rec_tab(l_n_cntr).charge_cd7 := l_err_ro.charge_cd7;
4383 p_t_err_rec_tab(l_n_cntr).charge_cd8 := l_err_ro.charge_cd8;
4384 p_t_err_rec_tab(l_n_cntr).applied_amt1 := l_err_ro.applied_amt1;
4385 p_t_err_rec_tab(l_n_cntr).applied_amt2 := l_err_ro.applied_amt2;
4386 p_t_err_rec_tab(l_n_cntr).applied_amt3 := l_err_ro.applied_amt3;
4387 p_t_err_rec_tab(l_n_cntr).applied_amt4 := l_err_ro.applied_amt4;
4388 p_t_err_rec_tab(l_n_cntr).applied_amt5 := l_err_ro.applied_amt5;
4389 p_t_err_rec_tab(l_n_cntr).applied_amt6 := l_err_ro.applied_amt6;
4390 p_t_err_rec_tab(l_n_cntr).applied_amt7 := l_err_ro.applied_amt7;
4391 p_t_err_rec_tab(l_n_cntr).applied_amt8 := l_err_ro.applied_amt8;
4392 p_t_err_rec_tab(l_n_cntr).adm_application_id := NULL;
4393 p_t_err_rec_tab(l_n_cntr).credit_id := NULL;
4394 p_t_err_rec_tab(l_n_cntr).gl_date := NULL;
4395 p_t_err_rec_tab(l_n_cntr).source_transaction_type := NULL;
4396 p_t_err_rec_tab(l_n_cntr).eligible_to_apply_yn := NULL;
4397 p_t_err_rec_tab(l_n_cntr).receipt_number := NULL;
4398 END LOOP;
4399 END LOOP;
4400
4401 END populate_err_rec;
4402
4403
4404 PROCEDURE import_interface_lockbox(errbuf OUT NOCOPY VARCHAR2,
4405 retcode OUT NOCOPY NUMBER,
4406 p_v_lockbox_name VARCHAR2,
4407 p_d_gl_date VARCHAR2,
4408 p_v_test_run VARCHAR2) AS
4409 /******************************************************************
4410 Created By : Amit Gairola
4411 Date Created By : 12-Jun-2003
4412 Purpose : Main procedure for Concurrent Process
4413
4414 Known limitations,enhancements,remarks:
4415 Change History
4416 Who When What
4417 ***************************************************************** */
4418 l_d_gl_date DATE;
4419 l_v_type1_status VARCHAR2(1);
4420 l_b_prc_err BOOLEAN := FALSE;
4421 e_resource_busy EXCEPTION;
4422
4423 PRAGMA EXCEPTION_INIT(e_resource_busy, -54);
4424 BEGIN
4425
4426 -- Create a savepoint
4427 SAVEPOINT SP_LOCKBOX_MAIN;
4428 retcode := 0;
4429
4430 l_d_gl_date := TRUNC(igs_ge_date.igsdate(p_d_gl_date));
4431
4432 -- Call the initialize procedure to initialize the global variables
4433 -- and the PL/SQL tables
4434 initialize;
4435
4436 -- Validate the parameters. Incase of error exit
4437 IF NOT validate_parameters(p_v_lockbox_name,
4438 l_d_gl_date,
4439 p_v_test_run) THEN
4440 retcode := 2;
4441 RETURN;
4442 END IF;
4443
4444 -- Populate the Lockbox Interface PL/SQL table
4445 IF populate_lb_interface(p_v_lockbox_name) THEN
4446 update_lbint_status(g_v_error);
4447 g_n_retcode := 2;
4448 l_b_prc_err := TRUE;
4449 END IF;
4450
4451 -- If there have been no errors and there are records in the Lockbox Interface
4452 -- PL/SQL table
4453 IF (NOT l_b_prc_err) AND g_b_rec_exists THEN
4454
4455 -- Call the procedure for type1 validations
4456 l_v_type1_status := validate_type1;
4457
4458 -- If the procedure returns an error, then the retcode is set to 2
4459 -- and the interface records are set to Error
4460 IF (l_v_type1_status='E') THEN
4461 update_lbint_status(g_v_error);
4462 g_n_retcode := 2;
4463 ELSIF (l_v_type1_status='S') THEN
4464 -- Else the interface records are set to Success
4465 update_lbint_status(g_v_success);
4466 END IF;
4467
4468 -- If type1 validations have been successful
4469 IF l_v_type1_status = 'S' THEN
4470
4471 -- Populate the Receipts PL/SQL table
4472 populate_lb_receipts;
4473
4474 -- Call the Type2 validations procedure
4475 valtype2_and_import_rects(p_t_lb_rec_tab => g_t_rec_tab,
4476 p_v_test_run => p_v_test_run,
4477 p_d_gl_date => l_d_gl_date,
4478 p_v_invoked_from => 'I');
4479 END IF;
4480 END IF;
4481
4482 retcode := g_n_retcode;
4483
4484 -- If the test run is 'Y', then rollback all the transactions
4485 IF p_v_test_run = 'Y' THEN
4486 ROLLBACK TO SP_LOCKBOX_MAIN;
4487
4488 -- If records exist then log the message than the Records have been rolled back
4489 IF g_b_rec_exists THEN
4490 fnd_message.set_name('IGS',
4491 'IGS_FI_PRC_TEST_RUN');
4492 fnd_file.put_line(fnd_file.log,
4493 fnd_message.get);
4494 ELSE
4495
4496 -- Else log no data found
4497 fnd_message.set_name('IGS',
4498 'IGS_GE_NO_DATA_FOUND');
4499 fnd_file.put_line(fnd_file.log,
4500 fnd_message.get);
4501 END IF;
4502 ELSE
4503
4504 -- If the test run is No and records exist, then commit
4505 IF g_b_rec_exists THEN
4506 COMMIT;
4507 ELSE
4508 -- Elsif records do not exist, then log no data found
4509 fnd_message.set_name('IGS',
4510 'IGS_GE_NO_DATA_FOUND');
4511 fnd_file.put_line(fnd_file.log,
4512 fnd_message.get);
4513 END IF;
4514 END IF;
4515
4516 -- Clear the global PL/SQL tables
4517 g_t_rec_tab.DELETE;
4518 g_lb_int_tab.DELETE;
4519 EXCEPTION
4520
4521 -- Handle the Locking exception
4522 WHEN e_resource_busy THEN
4523 ROLLBACK TO SP_LOCKBOX_MAIN;
4524 retcode := 2;
4525 fnd_message.set_name('IGS','IGS_FI_RFND_REC_LOCK');
4526 fnd_file.put_line(fnd_file.log,fnd_message.get());
4527 fnd_file.new_line(fnd_file.log);
4528 WHEN OTHERS THEN
4529 -- Handling the When Others Condition
4530 retcode := 2;
4531 ROLLBACK TO SP_LOCKBOX_MAIN;
4532 fnd_message.set_name('IGS',
4533 'IGS_GE_UNHANDLED_EXCEPTION');
4534 fnd_file.put_line(fnd_file.log,
4535 fnd_message.get||' - '||sqlerrm);
4536 END import_interface_lockbox;
4537
4538 PROCEDURE import_error_lockbox( errbuf OUT NOCOPY VARCHAR2,
4539 retcode OUT NOCOPY NUMBER,
4540 p_v_lockbox_name IN VARCHAR2,
4541 p_d_gl_date IN VARCHAR2,
4542 p_v_test_run IN VARCHAR2) AS
4543 /******************************************************************
4544 Created By : Shirish Tatikonda
4545 Date Created By : 12-Jun-2003
4546 Purpose : Main Procedure for Import Error Lockbox
4547
4548 Known limitations,enhancements,remarks:
4549 Change History
4550 Who When What
4551 ***************************************************************** */
4552 l_d_gl_date DATE;
4553 l_v_manage_account igs_fi_control.manage_accounts%TYPE;
4554 l_v_message_name fnd_new_messages.message_name%TYPE;
4555 l_t_err_rec_tab lb_receipt_tab;
4556 l_n_record_count NUMBER;
4557 e_resource_busy EXCEPTION;
4558
4559 PRAGMA EXCEPTION_INIT(e_resource_busy, -54);
4560 BEGIN
4561 -- Create a Savepoint
4562 SAVEPOINT SP_LOCKBOX_ERROR;
4563 retcode := 0;
4564
4565 l_d_gl_date := igs_ge_date.igsdate(p_d_gl_date);
4566 -- Call initialize to set all the global variables.
4567 initialize;
4568
4569 -- Log and Validate Parameters
4570 IF NOT validate_parameters(p_v_lockbox_name,
4571 l_d_gl_date,
4572 p_v_test_run) THEN
4573 retcode := 2;
4574 RETURN;
4575 END IF;
4576
4577 -- Populate Receipt and Receipt Overflow records
4578 populate_err_rec( p_v_lockbox_name, l_t_err_rec_tab );
4579 -- Fetch the number of records found
4580 l_n_record_count := l_t_err_rec_tab.COUNT;
4581
4582 -- Pass populated records for Type II validations
4583 IF l_n_record_count > 0 THEN
4584 valtype2_and_import_rects(p_t_lb_rec_tab => l_t_err_rec_tab,
4585 p_v_test_run => p_v_test_run,
4586 p_d_gl_date => l_d_gl_date,
4587 p_v_invoked_from => 'E');
4588 END IF;
4589
4590 retcode := g_n_retcode;
4591
4592 IF( l_n_record_count > 0 ) THEN
4593 -- If Test Run is Y, log generic message saying that all transactions are rolled back
4594 IF( p_v_test_run = 'Y' ) THEN
4595 ROLLBACK TO SP_LOCKBOX_ERROR;
4596 fnd_message.set_name('IGS', 'IGS_FI_PRC_TEST_RUN');
4597 fnd_file.put_line(fnd_file.LOG, fnd_message.get);
4598 ELSE
4599 -- If Test Run is N, commit.
4600 COMMIT;
4601 END IF;
4602 ELSE
4603 -- If no records found for processing log the message saying so.
4604 fnd_message.set_name('IGS', 'IGS_GE_NO_DATA_FOUND');
4605 fnd_file.put_line(fnd_file.LOG, fnd_message.get);
4606 END IF;
4607
4608 l_t_err_rec_tab.DELETE;
4609
4610 EXCEPTION
4611 -- Handle the Locking exception
4612 WHEN e_resource_busy THEN
4613 ROLLBACK TO SP_LOCKBOX_ERROR;
4614 retcode := 2;
4615 fnd_message.set_name('IGS','IGS_FI_RFND_REC_LOCK');
4616 fnd_file.put_line(fnd_file.log,fnd_message.get());
4617 fnd_file.new_line(fnd_file.log);
4618
4619 -- Handle Other Exceptions
4620 WHEN OTHERS THEN
4621 retcode := 2;
4622 ROLLBACK TO SP_LOCKBOX_ERROR;
4623 fnd_message.set_name('IGS', 'IGS_GE_UNHANDLED_EXCEPTION');
4624 fnd_file.put_line(fnd_file.LOG, fnd_message.get || ' - ' || SQLERRM);
4625 END import_error_lockbox;
4626 END igs_fi_prc_lockbox;