[Home] [Help]
PACKAGE BODY: APPS.OKL_VAR_INT_FLOAT_PVT
Source
1 PACKAGE BODY OKL_VAR_INT_FLOAT_PVT AS
2 /* $Header: OKLRVFLB.pls 120.0.12020000.6 2012/11/24 04:22:57 rpillay noship $ */
3
4
5 --Bug# 14165508
6 TYPE payment_rec_type IS RECORD (
7 period_start_date DATE
8 ,period_end_date DATE
9 ,period_or_stub_flag VARCHAR2(1)
10 ,conversion_factor NUMBER);
11
12 --Bug# 14165508
13 TYPE payment_tbl_type IS TABLE OF payment_rec_type INDEX BY BINARY_INTEGER;
14
15 --Bug# 14165508
16 FUNCTION get_conversion_factor(p_khr_id IN NUMBER,
17 p_start_date IN DATE,
18 p_due_date IN DATE) RETURN payment_tbl_type IS
19
20 CURSOR l_contract_csr(p_contract_id NUMBER) IS
21 SELECT (NVL(term_duration,0) * 30) term_days
22 FROM okl_k_headers
23 WHERE id = p_contract_id;
24
25 CURSOR l_payment_line_csr(p_contract_id NUMBER) IS
26 SELECT Fnd_Date.canonical_to_date(rulb2.RULE_INFORMATION2) start_date,
27 rulb2.RULE_INFORMATION3 level_periods,
28 rulb2.RULE_INFORMATION7 stub_days,
29 rulb2.RULE_INFORMATION8 stub_amount,
30 rulb2.object1_id1 frequency
31 FROM okc_rule_groups_b rgpb,
32 okc_rules_b rulb,
33 okc_rules_b rulb2,
34 okl_strm_type_b styb
35 WHERE rgpb.chr_id = p_contract_id
36 AND rgpb.dnz_chr_id = p_contract_id
37 AND rgpb.rgd_code = 'LALEVL'
38 AND rulb.rgp_id = rgpb.id
39 AND rulb.rule_information_category = 'LASLH'
40 AND TO_CHAR(styb.id) = rulb.object1_id1
41 AND rulb2.object2_id1 = TO_CHAR(rulb.id)
42 AND rulb2.rgp_id = rgpb.id
43 AND rulb2.rule_information_category = 'LASLL'
44 AND styb.STREAM_TYPE_PURPOSE = 'VARIABLE_INTEREST_SCHEDULE'
45 ORDER BY start_date;
46
47 CURSOR l_periods_csr(p_contract_id NUMBER) IS
48 SELECT NVL(SUM(TO_NUMBER(rulb2.RULE_INFORMATION3) * DECODE(rulb2.object1_id1,'M',1,'Q',3,'S',6,'A',12) * 30),0)
49 FROM okc_rule_groups_b rgpb,
50 okc_rules_b rulb,
51 okc_rules_b rulb2,
52 okl_strm_type_b styb
53 WHERE rgpb.chr_id = p_contract_id
54 AND rgpb.dnz_chr_id = p_contract_id
55 AND rgpb.rgd_code = 'LALEVL'
56 AND rulb.rgp_id = rgpb.id
57 AND rulb.rule_information_category = 'LASLH'
58 AND TO_CHAR(styb.id) = rulb.object1_id1
59 AND rulb2.object2_id1 = TO_CHAR(rulb.id)
60 AND rulb2.rgp_id = rgpb.id
61 AND rulb2.rule_information_category = 'LASLL'
62 AND rulb2.RULE_INFORMATION3 IS NOT NULL
63 AND styb.STREAM_TYPE_PURPOSE = 'VARIABLE_INTEREST_SCHEDULE';
64
65 CURSOR l_stubs_csr(p_contract_id NUMBER) IS
66 SELECT NVL(SUM(TO_NUMBER(rulb2.RULE_INFORMATION7)),0)
67 FROM okc_rule_groups_b rgpb,
68 okc_rules_b rulb,
69 okc_rules_b rulb2,
70 okl_strm_type_b styb
71 WHERE rgpb.chr_id = p_contract_id
72 AND rgpb.dnz_chr_id = p_contract_id
73 AND rgpb.rgd_code = 'LALEVL'
74 AND rulb.rgp_id = rgpb.id
75 AND rulb.rule_information_category = 'LASLH'
76 AND TO_CHAR(styb.id) = rulb.object1_id1
77 AND rulb2.object2_id1 = TO_CHAR(rulb.id)
78 AND rulb2.rgp_id = rgpb.id
79 AND rulb2.rule_information_category = 'LASLL'
80 AND rulb2.RULE_INFORMATION7 IS NOT NULL
81 AND styb.STREAM_TYPE_PURPOSE = 'VARIABLE_INTEREST_SCHEDULE';
82
83 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
84 l_recurrence_date DATE := NULL;
85 l_frequency okc_rules_b.object1_id1%type;
86 l_adder_months NUMBER := 0;
87
88 l_chr_term_days NUMBER := 0;
89 l_chr_period_days NUMBER := 0;
90 l_chr_stub_days NUMBER := 0;
91 l_actual_stub_days NUMBER := 0;
92 l_stub_conversion_factor NUMBER := 0;
93
94 x_payment_tbl payment_tbl_type;
95 i NUMBER;
96 l_start_date DATE;
97 l_end_date DATE;
98
99 BEGIN
100
101 OPEN l_contract_csr(p_khr_id);
102 FETCH l_contract_csr INTO l_chr_term_days;
103 CLOSE l_contract_csr;
104
105 OKL_VARIABLE_INTEREST_PVT.print_debug('l_chr_term_days: '|| l_chr_term_days);
106
107 OPEN l_periods_csr(p_khr_id);
108 FETCH l_periods_csr INTO l_chr_period_days;
109 CLOSE l_periods_csr;
110
111 OKL_VARIABLE_INTEREST_PVT.print_debug('l_chr_period_days: '|| l_chr_period_days);
112
113 l_chr_stub_days := l_chr_term_days - NVL(l_chr_period_days,0);
114
115 OKL_VARIABLE_INTEREST_PVT.print_debug('l_chr_stub_days : '|| l_chr_stub_days);
116
117 OPEN l_stubs_csr(p_khr_id);
118 FETCH l_stubs_csr INTO l_actual_stub_days;
119 CLOSE l_stubs_csr;
120
121 OKL_VARIABLE_INTEREST_PVT.print_debug('l_actual_stub_days : '|| l_actual_stub_days);
122
123 IF (NVL(l_actual_stub_days,0) <> 0 AND l_chr_stub_days <> 0) THEN
124 l_stub_conversion_factor := l_chr_stub_days/l_actual_stub_days;
125 END IF;
126
127 OKL_VARIABLE_INTEREST_PVT.print_debug('l_stub_conversion_factor : '|| l_stub_conversion_factor);
128
129 i := 0;
130
131 FOR l_payment_line in l_payment_line_csr(p_khr_id)
132 LOOP
133
134 IF(l_recurrence_date IS NULL) THEN
135 l_recurrence_date := l_payment_line.start_date;
136 END IF;
137
138 OKL_VARIABLE_INTEREST_PVT.print_debug('l_payment_line_start_date: '|| l_payment_line.start_date);
139
140 OKL_VARIABLE_INTEREST_PVT.print_debug('l_recurrence_date: '|| l_recurrence_date);
141
142 IF (p_due_date >= l_payment_line.start_date) THEN
143
144 IF(l_payment_line.stub_days IS NOT NULL) THEN
145 l_recurrence_date := NULL;
146 l_end_date := l_payment_line.start_date + to_number(l_payment_line.stub_days) - 1;
147
148 IF (l_end_date >= p_start_date) THEN
149
150 i := i + 1;
151 x_payment_tbl(i).period_start_date := l_payment_line.start_date;
152 x_payment_tbl(i).period_end_date := l_end_date;
153 x_payment_tbl(i).period_or_stub_flag := 'S';
154 x_payment_tbl(i).conversion_factor := l_stub_conversion_factor;
155
156 OKL_VARIABLE_INTEREST_PVT.print_debug('i : '|| i);
157 OKL_VARIABLE_INTEREST_PVT.print_debug('x_payment_tbl(i).period_start_date : '|| x_payment_tbl(i).period_start_date);
158 OKL_VARIABLE_INTEREST_PVT.print_debug('x_payment_tbl(i).period_end_date : '|| x_payment_tbl(i).period_end_date);
159 OKL_VARIABLE_INTEREST_PVT.print_debug('x_payment_tbl(i).period_or_stub_flag : '|| x_payment_tbl(i).period_or_stub_flag);
160 OKL_VARIABLE_INTEREST_PVT.print_debug('x_payment_tbl(i).conversion_factor : '|| x_payment_tbl(i).conversion_factor);
161 END IF;
162
163 ELSIF(l_payment_line.level_periods IS NOT NULL) THEN
164 l_frequency := l_payment_line.frequency;
165 IF(l_frequency = 'M') THEN
166 l_adder_months := 1;
167 ELSIF(l_frequency = 'Q') THEN
168 l_adder_months := 3;
169 ELSIF(l_frequency = 'S') THEN
170 l_adder_months := 6;
171 ELSIF(l_frequency = 'A') THEN
172 l_adder_months := 12;
173 END IF;
174
175 l_start_date := l_payment_line.start_date;
176 FOR j IN 1..l_payment_line.level_periods
177 LOOP
178
179 OKL_STREAM_GENERATOR_PVT.get_sel_date(p_start_date => l_payment_line.start_date,
180 p_advance_or_arrears => 'ARREARS',
181 p_periods_after => j,
182 p_months_per_period => l_adder_months,
183 x_date => l_end_date,
184 x_return_status => l_return_status,
185 p_recurrence_date => l_recurrence_date,
186 p_arrears_pay_dates_option => 'LAST_DAY_OF_PERIOD');
187 IF(l_return_status <> OKL_API.G_RET_STS_SUCCESS)THEN
188 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
189 END IF;
190
191 OKL_VARIABLE_INTEREST_PVT.print_debug('l_start_date: '|| l_start_date);
192 OKL_VARIABLE_INTEREST_PVT.print_debug('l_end_date: '|| l_end_date);
193
194 IF(l_end_date < p_start_date) THEN
195 l_start_date := l_end_date + 1;
196
197 ELSIF (l_start_date <= p_due_date) THEN
198
199 i := i + 1;
200 x_payment_tbl(i).period_start_date := l_start_date;
201 x_payment_tbl(i).period_end_date := l_end_date;
202 x_payment_tbl(i).period_or_stub_flag := 'P';
203 x_payment_tbl(i).conversion_factor := (30 * l_adder_months)/(l_end_date - l_start_date + 1);
204
205 OKL_VARIABLE_INTEREST_PVT.print_debug('i : '|| i);
206 OKL_VARIABLE_INTEREST_PVT.print_debug('x_payment_tbl(i).period_start_date : '|| x_payment_tbl(i).period_start_date);
207 OKL_VARIABLE_INTEREST_PVT.print_debug('x_payment_tbl(i).period_end_date : '|| x_payment_tbl(i).period_end_date);
208 OKL_VARIABLE_INTEREST_PVT.print_debug('x_payment_tbl(i).period_or_stub_flag : '|| x_payment_tbl(i).period_or_stub_flag);
209 OKL_VARIABLE_INTEREST_PVT.print_debug('x_payment_tbl(i).conversion_factor : '|| x_payment_tbl(i).conversion_factor);
210
211 l_start_date := l_end_date + 1;
212 ELSE
213 EXIT;
214 END IF;
215
216 END LOOP;
217
218 END IF;
219 END IF;
220 END LOOP;
221
222 RETURN x_payment_tbl;
223 END get_conversion_factor;
224 --Bug# 14165508
225
226 ------------------------------------------------------------------------------
227 -- Start of Comments
228 -- Created By: Bhanu Katragadda
229 -- Procedure Name variable_int_rev_loan_float
230 -- Description: This procedure is called by Variable Interest Calculation for Revolving Loans
231 -- Inputs :
232 -- Output :
233 -- Dependencies:
234 -- Parameters:
235 -- Version: 1.0
236 -- End of Comments
237 ------------------------------------------------------------------------------
238 PROCEDURE variable_int_rev_loan_float(
239 p_api_version IN NUMBER,
240 p_init_msg_list IN VARCHAR2,
241 x_return_status OUT NOCOPY VARCHAR2,
242 x_msg_count OUT NOCOPY NUMBER,
243 x_msg_data OUT NOCOPY VARCHAR2,
244 p_contract_id IN NUMBER,
245 p_principal_basis IN VARCHAR2,
246 p_rev_rec_method IN VARCHAR2,
247 p_deal_type IN VARCHAR2,
248 p_currency_code IN VARCHAR2,
249 p_start_date IN DATE,
250 p_due_date IN DATE,
251 --Bug# 13026821
252 p_invoice_date IN DATE) IS
253
254 l_api_version CONSTANT NUMBER := 1.0;
255 l_api_name CONSTANT VARCHAR2(30) := 'VARIABLE_INT_REV_LOAN_FLOAT';
256 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
257 l_msg_index_out NUMBER;
258 l_interest_calculated NUMBER := 0;
259 l_total_loan_pmt NUMBER := 0;
260 l_invoice_id NUMBER;
261 l_invoice_amt NUMBER := 0;
262 l_interest_paid NUMBER := 0;
263 l_stream_type_purpose OKL_STRM_TYPE_V.stream_type_purpose%TYPE;
264 i_vir_tbl OKL_VARIABLE_INTEREST_PVT.vir_tbl_type;
265 r_vir_tbl OKL_VARIABLE_INTEREST_PVT.vir_tbl_type;
266 l_stream_element_id OKL_STRM_ELEMENTS_v.id%TYPE;
267 variable_int_rev_loan_float EXCEPTION;
268
269 CURSOR loan_payment_amount_csr (cp_khr_id NUMBER, cp_start_date DATE, cp_due_date DATE, cp_stream_type_purpose VARCHAR2) IS
270 SELECT nvl(SUM(nvl(sel_prin_pmt.amount, 0)),0) pmt_amt
271 FROM okl_strm_type_v sty_prin_pmt,
272 okl_streams_v stm_prin_pmt,
273 okl_strm_elements_v sel_prin_pmt
274 WHERE stm_prin_pmt.khr_id = cp_khr_id
275 AND stm_prin_pmt.id = sel_prin_pmt.stm_id
276 AND sel_prin_pmt.stream_element_date BETWEEN cp_start_date AND cp_due_date
277 AND stm_prin_pmt.sty_id = sty_prin_pmt.id
278 AND stm_prin_pmt.active_yn = 'Y'
279 AND stm_prin_pmt.say_code = 'CURR'
280 AND sty_prin_pmt.stream_type_purpose = cp_stream_type_purpose ; -- 'PRINCIPAL_PAYMENT'
281
282 --Bug# 13001695
283 l_arrears_pay_dates_option okl_st_gen_tmpt_sets_all.isg_arrears_pay_dates_option%type;
284 l_stream_element_start_date DATE;
285 l_stream_element_end_date DATE;
286
287 --Bug# 14165508
288 l_payment_tbl payment_tbl_type;
289 l_interest NUMBER;
290
291 BEGIN
292 ------------------------------------------------------------
293 -- Start processing
294 ------------------------------------------------------------
295
296 OKL_VARIABLE_INTEREST_PVT.print_debug('Executing procedure VARIABLE_INT_REV_LOAN_FLOAT using the foll. parameters:');
297 OKL_VARIABLE_INTEREST_PVT.print_debug('contract ID: '|| p_contract_id);
298 OKL_VARIABLE_INTEREST_PVT.print_Debug('Principal Basis: '|| p_principal_basis);
299 OKL_VARIABLE_INTEREST_PVT.print_debug('Revenue Recognition Method: '|| p_rev_rec_method);
300 OKL_VARIABLE_INTEREST_PVT.print_debug('Deal Type: '|| p_deal_type);
301 OKL_VARIABLE_INTEREST_PVT.Print_debug('Currency Code: '|| p_currency_code);
302 OKL_VARIABLE_INTEREST_PVT.print_debug('Start Date: '|| p_start_date);
303 OKL_VARIABLE_INTEREST_PVT.print_debug('Due Date: '|| p_due_date);
304
305 x_return_status := OKL_API.G_RET_STS_SUCCESS;
306 OKL_VARIABLE_INTEREST_PVT.g_vir_tbl.delete;
307 OKL_VARIABLE_INTEREST_PVT.g_vir_tbl_counter := 0;
308 OKL_VARIABLE_INTEREST_PVT.g_vpb_tbl.delete;
309 OKL_VARIABLE_INTEREST_PVT.g_vpb_tbl_counter := 0;
310
311 OKL_VARIABLE_INTEREST_PVT.populate_txns (p_api_version => p_api_version,
312 p_init_msg_list => p_init_msg_list,
313 p_khr_id => p_contract_id,
314 p_from_date => p_start_date,
315 p_to_date => p_due_date,
316 x_return_status => x_return_status,
317 x_msg_count => x_msg_count,
318 x_msg_data => x_msg_data);
319
320 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
321 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to POPULATE_TXNS');
322 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
323 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
324 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to POPULATE_TXNS');
325 RAISE variable_int_rev_loan_float;
326 END IF;
327
328 --Bug# 14165508
329 IF OKL_VARIABLE_INTEREST_PVT.G_DAYS_IN_A_MONTH_CODE = '30' THEN
330
331 l_payment_tbl := get_conversion_factor(p_khr_id => p_contract_id,
332 p_start_date => p_start_date,
333 p_due_date => p_due_date);
334 END IF;
335 --Bug# 14165508
336
337 --Bug# 14165508
338 IF OKL_VARIABLE_INTEREST_PVT.G_DAYS_IN_A_MONTH_CODE = '30' THEN
339
340 l_interest_calculated := 0;
341 OKL_VARIABLE_INTEREST_PVT.print_debug('l_payment_tbl COUNT '|| l_payment_tbl.COUNT);
342 IF (l_payment_tbl.COUNT > 0) THEN
343 FOR i IN l_payment_tbl.FIRST..l_payment_tbl.LAST LOOP
344
345 l_interest := OKL_VARIABLE_INTEREST_PVT.calculate_total_interest_due(
346 p_api_version => 1.0,
347 p_init_msg_list => OKL_API.G_FALSE,
348 x_return_status => x_return_status,
349 x_msg_count => x_msg_count,
350 x_msg_data => x_msg_data,
351 p_contract_id => p_contract_id,
352 p_currency_code => p_currency_code,
353 p_start_date => l_payment_tbl(i).period_start_date,
354 p_due_date => l_payment_tbl(i).period_end_date,
355 p_conversion_factor => l_payment_tbl(i).conversion_factor);
356 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
357 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to CALCULATE_TOTAL_INTEREST_DUE');
358 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
359 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
360 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to CALCULATE_TOTAL_INTEREST_DUE');
361 RAISE variable_int_rev_loan_float;
362 END IF;
363
364 l_interest_calculated := l_interest_calculated + NVL(l_interest,0);
365 END LOOP;
366 END IF;
367 ELSE
368 l_interest_calculated := OKL_VARIABLE_INTEREST_PVT.calculate_total_interest_due(
369 p_api_version => 1.0,
370 p_init_msg_list => OKL_API.G_FALSE,
371 x_return_status => x_return_status,
372 x_msg_count => x_msg_count,
373 x_msg_data => x_msg_data,
374 p_contract_id => p_contract_id,
375 p_currency_code => p_currency_code,
376 p_start_date => p_start_date,
377 p_due_date => p_due_date);
378 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
379 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to CALCULATE_TOTAL_INTEREST_DUE');
380 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
381 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
382 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to CALCULATE_TOTAL_INTEREST_DUE');
383 RAISE variable_int_rev_loan_float;
384 END IF;
385 END IF;
386 --Bug# 14165508
387
388 l_total_loan_pmt := 0;
389 l_interest_paid := 0;
390
391 --Bug# 13001695
392 OKL_ISG_UTILS_PVT.get_arrears_pay_dates_option(
393 p_khr_id => p_contract_id,
394 x_arrears_pay_dates_option => l_arrears_pay_dates_option,
395 x_return_status => x_return_status);
396
397 IF(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
398 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
399 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
400 RAISE OKL_API.G_EXCEPTION_ERROR;
401 END IF;
402
403 IF (p_principal_basis = 'ACTUAL') THEN
404 l_stream_element_start_date := p_start_date;
405 l_stream_element_end_date := p_due_date;
406
407 IF (l_arrears_pay_dates_option = 'FIRST_DAY_OF_NEXT_PERIOD') THEN
408 l_stream_element_start_date := p_start_date + 1;
409 l_stream_element_end_date := p_due_date + 1;
410 END IF;
411
412 IF (p_rev_rec_method = 'ACTUAL') THEN
413 OPEN loan_payment_amount_csr (p_contract_id, l_stream_element_start_date, l_stream_element_end_date, 'VARIABLE_LOAN_PAYMENT');
414 FETCH loan_payment_amount_csr INTO l_total_loan_pmt;
415 IF (loan_payment_amount_csr%NOTFOUND) THEN
416 l_total_loan_pmt := 0;
417 END IF;
418 CLOSE loan_payment_amount_csr;
419
420 l_invoice_amt := l_interest_calculated - l_total_loan_pmt;
421
422 ELSE
423
424 --Bug# 13001695: Effective Date of Variable Interest should be last day of previous period
425 -- regardless of SGT Arrears option
426
427 OPEN loan_payment_amount_csr (p_contract_id, l_stream_element_start_date, l_stream_element_end_date, 'VARIABLE_INTEREST');
428 FETCH loan_payment_amount_csr INTO l_interest_paid;
429 IF (loan_payment_amount_csr%NOTFOUND) THEN
430 l_interest_paid := 0;
431 END IF;
432 CLOSE loan_payment_amount_csr;
433
434 --Bug# 13001695
435
436 l_invoice_amt := l_interest_calculated - l_interest_paid;
437
438 END IF;
439 END IF;
440
441 --sechawla : print the invoice amount
442 OKL_VARIABLE_INTEREST_PVT.Print_debug ('Invoice Amount : '|| l_invoice_amt);
443
444 IF (p_rev_rec_method = 'ACTUAL') THEN
445 l_stream_type_purpose := 'VARIABLE_LOAN_PAYMENT';
446 ELSE
447 l_stream_type_purpose := 'VARIABLE_INTEREST';
448 END IF;
449
450 IF (l_invoice_amt <> 0) THEN --sechawla : added this condition
451 OKL_VR_DOCUMENT_PVT.create_stream_invoice (
452 p_api_version => 1.0,
453 p_init_msg_list => p_init_msg_list,
454 x_return_status => x_return_status,
455 x_msg_count => x_msg_count,
456 x_msg_data => x_msg_data,
457 p_contract_id => p_contract_id,
458 p_line_id => NULL,
459 p_amount => l_invoice_amt,
460 --Bug# 13026821
461 p_due_date => p_invoice_date,
462 p_stream_type_purpose => l_stream_type_purpose,
463 p_create_invoice_flag => OKL_API.G_TRUE,
464 p_parent_strm_element_id => NULL,
465 x_invoice_id => l_invoice_id,
466 x_stream_element_id => l_stream_element_id);
467
468 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
469 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to CREATE_STREAM_INVOICE');
470 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
471 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
472 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to CREATE_STREAM_INVOICE');
473 RAISE variable_int_rev_loan_float;
474 END IF;
475 i_vir_tbl := OKL_VARIABLE_INTEREST_PVT.g_vir_tbl;
476
477 --checkwhat does it do
478 OKL_VARIABLE_INTEREST_PVT.upd_vir_params_with_invoice (
479 p_api_version => 1.0,
480 p_init_msg_list => OKL_API.G_TRUE,
481 x_return_status => x_return_status,
482 x_msg_count => x_msg_count,
483 x_msg_data => x_msg_data,
484 p_source_id => l_invoice_id,
485 p_vir_tbl => i_vir_tbl,
486 x_vir_tbl => r_vir_tbl);
487 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
488 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to UPD_VIR_PARAMS_WITH_INVOICE');
489 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
490 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
491 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to UPD_VIR_PARAMS_WITH_INVOICE');
492 RAISE variable_int_rev_loan_float;
493 END IF;
494
495 OKL_VARIABLE_INTEREST_PVT.g_vir_tbl := r_vir_tbl;
496
497 OKL_VR_DATA_HANDLER_PVT.INSERT_VIR_PARAMS(
498 p_api_version => 1.0,
499 p_init_msg_list => OKL_API.G_TRUE,
500 x_return_status => x_return_status,
501 x_msg_count => x_msg_count,
502 x_msg_data => x_msg_data,
503 p_vir_tbl => OKL_VARIABLE_INTEREST_PVT.g_vir_tbl);
504 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
505 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to INSERT_VIR_PARAMS');
506 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
507 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
508 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to INSERT_VIR_PARAMS');
509 RAISE variable_int_rev_loan_float;
510 END IF;
511
512 OKL_VR_DATA_HANDLER_PVT.INSERT_PRINCIPAL_BAL_TXN(
513 p_api_version => p_api_version,
514 p_init_msg_list => p_init_msg_list,
515 x_return_status => x_return_status,
516 x_msg_count => x_msg_count,
517 x_msg_data => x_msg_data,
518 p_vpb_tbl => OKL_VARIABLE_INTEREST_PVT.g_vpb_tbl);
519
520 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
521 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to INSERT_PRINCIPAL_BAL_TXN');
522 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
523 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
524 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to INSERT_PRINCIPAL_BAL_TXN');
525 RAISE variable_int_rev_loan_float;
526 END IF;
527
528 OKL_VARIABLE_INTEREST_PVT.g_vpb_tbl.delete;
529 OKL_VARIABLE_INTEREST_PVT.g_vpb_tbl_counter := 0;
530
531 END IF; --sechawla
532
533 EXCEPTION
534 WHEN variable_int_rev_loan_float THEN
535 OKL_VARIABLE_INTEREST_PVT.print_error_message ('Exception var_int_float_failed raised in procedure VARIABLE_INT_REV_LOAN_FLOAT');
536 x_return_status := OKL_API.G_RET_STS_ERROR;
537 WHEN OTHERS THEN
538 OKL_VARIABLE_INTEREST_PVT.print_error_message ('Exception raised in procedure VARIABLE_INT_REV_LOAN_FLOAT');
539 Okl_Api.SET_MESSAGE(
540 p_app_name => G_APP_NAME,
541 p_msg_name => G_UNEXPECTED_ERROR,
542 p_token1 => G_SQLCODE_TOKEN,
543 p_token1_value => SQLCODE,
544 p_token2 => G_SQLERRM_TOKEN,
545 p_token2_value => SQLERRM);
546
547 x_return_status := OKL_API.G_RET_STS_ERROR;
548
549 END variable_int_rev_loan_float;
550
551
552
553 ------------------------------------------------------------------------------
554
555 -- Start of Comments
556 -- Created By: Ramesh Seela
557 -- Procedure Name variable_interest_loan_float
558 -- Description: This procedure is called by Variable Interest Calculation for Loans
559 -- Inputs :
560 -- Output :
561 -- Dependencies:
562 -- Parameters:
563 -- Version: 1.0
564 -- End of Comments
565
566 ------------------------------------------------------------------------------
567
568 PROCEDURE variable_interest_loan_float(
569 p_api_version IN NUMBER,
570 p_init_msg_list IN VARCHAR2,
571 x_return_status OUT NOCOPY VARCHAR2,
572 x_msg_count OUT NOCOPY NUMBER,
573 x_msg_data OUT NOCOPY VARCHAR2,
574 p_contract_id IN NUMBER,
575 p_principal_basis IN VARCHAR2,
576 p_rev_rec_method IN VARCHAR2,
577 p_deal_type IN VARCHAR2,
578 p_currency_code IN VARCHAR2,
579 p_start_date IN DATE,
580 p_due_date IN DATE,
581 --Bug# 13026821
582 p_invoice_date IN DATE) IS
583
584 l_api_version CONSTANT NUMBER := 1.0;
585 l_api_name CONSTANT VARCHAR2(30) := 'VARIABLE_INTEREST_LOAN_FLOAT';
586 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
587 l_msg_index_out NUMBER;
588 l_principal_balance NUMBER := 0;
589 l_interest_calculated NUMBER := 0;
590 r_principal_balance_tbl OKL_VARIABLE_INTEREST_PVT.principal_balance_tbl_typ;
591 l_total_loan_pmt NUMBER := 0;
592 l_total_principal_pmt NUMBER := 0;
593 l_scheduled_prin_pmnt_amt NUMBER := 0;
594 l_invoice_id NUMBER;
595 l_invoice_amt NUMBER := 0;
596 l_interest_paid NUMBER := 0;
597 l_stream_type_purpose OKL_STRM_TYPE_V.stream_type_purpose%TYPE;
598 i_vir_tbl OKL_VARIABLE_INTEREST_PVT.vir_tbl_type;
599 r_vir_tbl OKL_VARIABLE_INTEREST_PVT.vir_tbl_type;
600 l_stream_element_id OKL_STRM_ELEMENTS_v.id%TYPE;
601 l_kle_id OKL_K_LINES.id%TYPE;
602 l_strm_element_date OKL_STRM_ELEMENTS.stream_element_date%TYPE;
603 l_parent_strm_element_id OKL_STRM_ELEMENTS.id%TYPE;
604 var_int_loan_float_failed EXCEPTION;
605
606 --Added cp_kle_id by bkatraga for bug 13447258
607 CURSOR loan_payment_amount_csr (cp_khr_id NUMBER, cp_start_date DATE, cp_due_date DATE, cp_stream_type_purpose VARCHAR2, cp_kle_id NUMBER) IS
608 SELECT nvl(SUM(nvl(sel_prin_pmt.amount, 0)),0) pmt_amt
609 FROM okl_strm_type_v sty_prin_pmt,
610 okl_streams_v stm_prin_pmt,
611 okl_strm_elements_v sel_prin_pmt
612 WHERE stm_prin_pmt.khr_id = cp_khr_id
613 AND stm_prin_pmt.kle_id = cp_kle_id
614 AND stm_prin_pmt.id = sel_prin_pmt.stm_id
615 AND sel_prin_pmt.stream_element_date BETWEEN cp_start_date AND cp_due_date
616 AND stm_prin_pmt.sty_id = sty_prin_pmt.id
617 AND stm_prin_pmt.active_yn = 'Y'
618 AND stm_prin_pmt.say_code = 'CURR'
619 AND sty_prin_pmt.stream_type_purpose = cp_stream_type_purpose ; -- 'PRINCIPAL_PAYMENT'
620
621 --Added cp_kle_id by bkatraga for bug 13447258
622 -- Derive the interest billed for previous billing periods
623 CURSOR Interest_payment_amount_csr (cp_khr_id NUMBER, cp_start_date DATE, cp_due_date DATE, cp_kle_id NUMBER) IS
624 SELECT nvl(SUM(nvl(sel_prin_pmt.amount, 0)),0) pmt_amt
625 FROM okl_strm_type_v sty_prin_pmt,
626 okl_streams_v stm_prin_pmt,
627 okl_strm_elements_v sel_prin_pmt
628 WHERE stm_prin_pmt.khr_id = cp_khr_id
629 AND stm_prin_pmt.kle_id = cp_kle_id
630 AND stm_prin_pmt.id = sel_prin_pmt.stm_id
631 AND sel_prin_pmt.stream_element_date BETWEEN cp_start_date AND cp_due_date
632 AND stm_prin_pmt.sty_id = sty_prin_pmt.id
633 AND stm_prin_pmt.active_yn = 'Y'
634 AND stm_prin_pmt.say_code = 'CURR'
635 AND sel_prin_pmt.sel_id IS NULL
636 AND sty_prin_pmt.stream_type_purpose = 'VARIABLE_LOAN_PAYMENT';
637
638 CURSOR contract_line_csr (cp_khr_id NUMBER, cp_due_date DATE) IS
639 SELECT id
640 FROM okl_k_lines_full_v
641 WHERE chr_id = cp_khr_id
642 AND lse_id = OKL_VARIABLE_INTEREST_PVT.G_FIN_LINE_LTY_ID
643 AND nvl(date_terminated, cp_due_date + 1) > cp_due_date
644 ORDER BY id;
645
646 CURSOR Principal_payment_streams_csr (cp_khr_id NUMBER, cp_kle_id NUMBER, cp_due_date DATE) IS
647 SELECT sel.id,
648 sel.stream_element_date,
649 sel.amount
650 FROM okl_strm_type_v sty,
651 okl_streams str,
652 okl_strm_elements sel
653 WHERE sel.stm_id = str.id
654 AND str.khr_id = cp_khr_id
655 AND str.kle_id = cp_kle_id
656 AND str.say_code = 'CURR'
657 AND str.active_yn = 'Y'
658 AND sel.stream_element_date <= cp_due_date
659 AND str.sty_id = sty.id
660 AND sty.stream_type_purpose = 'PRINCIPAL_PAYMENT'
661 AND NOT EXISTS (
662 SELECT 'X'
663 FROM okl_strm_elements selc
664 WHERE selc.sel_id = sel.id)
665 ORDER BY stream_element_date;
666
667
668 CURSOR scheduled_prin_pmnt_amt_csr (cp_khr_id NUMBER, cp_due_date DATE, cp_stream_type_purpose VARCHAR2) IS
669 SELECT nvl(SUM(nvl(sel_prin_pmt.amount, 0)),0) pmt_amt
670 FROM okl_strm_type_v sty_prin_pmt,
671 okl_streams_v stm_prin_pmt,
672 okl_strm_elements_v sel_prin_pmt
673 WHERE stm_prin_pmt.khr_id = cp_khr_id
674 AND stm_prin_pmt.id = sel_prin_pmt.stm_id
675 AND sel_prin_pmt.stream_element_date = cp_due_date
676 AND stm_prin_pmt.sty_id = sty_prin_pmt.id
677 AND stm_prin_pmt.active_yn = 'Y'
678 AND stm_prin_pmt.say_code = 'CURR'
679 AND sty_prin_pmt.stream_type_purpose = cp_stream_type_purpose ; -- 'PRINCIPAL_PAYMENT'
680
681
682 --Added by bkatraga for bug 13447258
683 CURSOR l_assets_csr(p_contract_id NUMBER) IS
684 SELECT cle.id
685 FROM okc_k_lines_b cle,
686 okc_statuses_b sts
687 WHERE cle.lse_id = OKL_VARIABLE_INTEREST_PVT.G_FIN_LINE_LTY_ID
688 AND cle.dnz_chr_id = p_contract_id
689 AND cle.chr_id = p_contract_id
690 AND cle.sts_code = sts.code
691 AND sts.ste_code NOT IN ('TERMINATED', 'CANCELLED');
692 --end bkatraga
693
694 --Bug# 13001695
695 l_arrears_pay_dates_option okl_st_gen_tmpt_sets_all.isg_arrears_pay_dates_option%type;
696 l_stream_element_start_date DATE;
697 l_stream_element_end_date DATE;
698
699 --Bug# 14165508
700 l_payment_tbl payment_tbl_type;
701 l_interest NUMBER;
702
703 BEGIN
704 ------------------------------------------------------------
705 -- Start processing
706 ------------------------------------------------------------
707
708 OKL_VARIABLE_INTEREST_PVT.print_debug('Executing procedure VARIABLE_INTEREST_LOAN_FLOAT using the foll. parameters:');
709 OKL_VARIABLE_INTEREST_PVT.print_debug('contract ID: '|| p_contract_id);
710 OKL_VARIABLE_INTEREST_PVT.print_Debug('Principal Basis: '|| p_principal_basis);
711 OKL_VARIABLE_INTEREST_PVT.print_debug('Revenue Recognition Method: '|| p_rev_rec_method);
712 OKL_VARIABLE_INTEREST_PVT.print_debug('Deal Type: '|| p_deal_type);
713 OKL_VARIABLE_INTEREST_PVT.Print_debug('Currency Code: '|| p_currency_code);
714 OKL_VARIABLE_INTEREST_PVT.print_debug('Start Date: '|| p_start_date);
715 OKL_VARIABLE_INTEREST_PVT.print_debug('Due Date: '|| p_due_date);
716
717 x_return_status := OKL_API.G_RET_STS_SUCCESS;
718
719 --Bug# 13447258: Variable Rate processing is not allowed for Float Loan contracts if
720 -- contract streams have not been upgraded to asset level
721 OKL_VARIABLE_INT_UTIL_PVT.check_vr_asset_level_upgrade(
722 p_khr_id => p_contract_id,
723 x_return_status => x_return_status);
724
725 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
726 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
727 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
728 RAISE var_int_loan_float_failed;
729 END IF;
730
731 OKL_VARIABLE_INTEREST_PVT.g_vpb_tbl.delete;
732 OKL_VARIABLE_INTEREST_PVT.g_vpb_tbl_counter := 0;
733
734 OKL_VARIABLE_INTEREST_PVT.populate_txns (p_api_version => p_api_version,
735 p_init_msg_list => p_init_msg_list,
736 p_khr_id => p_contract_id,
737 p_from_date => p_start_date,
738 p_to_date => p_due_date,
739 x_return_status => x_return_status,
740 x_msg_count => x_msg_count,
741 x_msg_data => x_msg_data);
742
743 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
744 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to POPULATE_TXNS');
745 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
746 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
747 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to POPULATE_TXNS');
748 RAISE var_int_loan_float_failed;
749 END IF;
750
751 --Added by bkatraga for bug 13447258
752 OKL_ISG_UTILS_PVT.get_arrears_pay_dates_option(
753 p_khr_id => p_contract_id,
754 x_arrears_pay_dates_option => l_arrears_pay_dates_option,
755 x_return_status => x_return_status);
756 IF(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
757 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
758 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
759 RAISE OKL_API.G_EXCEPTION_ERROR;
760 END IF;
761
762 --Bug# 14165508
763 IF OKL_VARIABLE_INTEREST_PVT.G_DAYS_IN_A_MONTH_CODE = '30' THEN
764
765 l_payment_tbl := get_conversion_factor(p_khr_id => p_contract_id,
766 p_start_date => p_start_date,
767 p_due_date => p_due_date);
768 END IF;
769 --Bug# 14165508
770
771 FOR l_asset_rec in l_assets_csr(p_contract_id)
772 LOOP
773 OKL_VARIABLE_INTEREST_PVT.g_vir_tbl.delete;
774 OKL_VARIABLE_INTEREST_PVT.g_vir_tbl_counter := 0;
775 --end bkatraga
776
777 --Bug# 14165508
778 IF OKL_VARIABLE_INTEREST_PVT.G_DAYS_IN_A_MONTH_CODE = '30' THEN
779
780 l_interest_calculated := 0;
781 OKL_VARIABLE_INTEREST_PVT.print_debug('l_payment_tbl COUNT '|| l_payment_tbl.COUNT);
782 IF (l_payment_tbl.COUNT > 0) THEN
783 FOR i IN l_payment_tbl.FIRST..l_payment_tbl.LAST LOOP
784
785 --Added parameter p_line_id by bkatraga for bug 13447258
786 l_interest := OKL_VARIABLE_INTEREST_PVT.calculate_total_interest_due(
787 p_api_version => 1.0,
788 p_init_msg_list => OKL_API.G_FALSE,
789 x_return_status => x_return_status,
790 x_msg_count => x_msg_count,
791 x_msg_data => x_msg_data,
792 p_contract_id => p_contract_id,
793 p_currency_code => p_currency_code,
794 p_start_date => l_payment_tbl(i).period_start_date,
795 p_due_date => l_payment_tbl(i).period_end_date,
796 p_line_id => l_asset_rec.id,
797 p_conversion_factor => l_payment_tbl(i).conversion_factor);
798 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
799 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to CALCULATE_TOTAL_INTEREST_DUE');
800 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
801 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
802 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to CALCULATE_TOTAL_INTEREST_DUE');
803 RAISE var_int_loan_float_failed;
804 END IF;
805
806 l_interest_calculated := l_interest_calculated + NVL(l_interest,0);
807 END LOOP;
808 END IF;
809 ELSE
810
811 --Added parameter p_line_id by bkatraga for bug 13447258
812 l_interest_calculated := OKL_VARIABLE_INTEREST_PVT.calculate_total_interest_due(
813 p_api_version => 1.0,
814 p_init_msg_list => OKL_API.G_FALSE,
815 x_return_status => x_return_status,
816 x_msg_count => x_msg_count,
817 x_msg_data => x_msg_data,
818 p_contract_id => p_contract_id,
819 p_currency_code => p_currency_code,
820 p_start_date => p_start_date,
821 p_due_date => p_due_date,
822 p_line_id => l_asset_rec.id);
823 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
824 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to CALCULATE_TOTAL_INTEREST_DUE');
825 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
826 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
827 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to CALCULATE_TOTAL_INTEREST_DUE');
828 RAISE var_int_loan_float_failed;
829 END IF;
830
831 END IF;
832 --Bug# 14165508
833
834 l_total_loan_pmt := 0;
835 l_total_principal_pmt := 0;
836 l_interest_paid := 0;
837 l_scheduled_prin_pmnt_amt := 0;
838
839 IF (p_principal_basis = 'ACTUAL') THEN
840 l_stream_element_start_date := p_start_date;
841 l_stream_element_end_date := p_due_date;
842
843 IF (l_arrears_pay_dates_option = 'FIRST_DAY_OF_NEXT_PERIOD') THEN
844 l_stream_element_start_date := p_start_date + 1;
845 l_stream_element_end_date := p_due_date + 1;
846 END IF;
847
848 IF (p_rev_rec_method = 'ACTUAL') THEN
849 --Added l_asset_rec.id by bkatraga for bug 13447258
850 OPEN interest_payment_amount_csr (p_contract_id, l_stream_element_start_date, l_stream_element_end_date, l_asset_rec.id);
851 FETCH interest_payment_amount_csr INTO l_interest_paid;
852 IF (interest_payment_amount_csr%NOTFOUND) THEN
853 l_interest_paid := 0;
854 END IF;
855
856 CLOSE interest_payment_amount_csr;
857
858 OKL_VARIABLE_INTEREST_PVT.Print_debug ('Total Interest Payment = '|| l_interest_paid);
859
860 l_invoice_amt := l_interest_calculated - l_interest_paid;
861
862 ELSE /* Estimated and Billed */
863
864 --Bug# 13001695: Effective Date of Variable Interest should be last day of previous period
865 -- regardless of SGT Arrears option
866
867 --Added l_asset_rec.id by bkatraga for bug 13447258
868 OPEN loan_payment_amount_csr (p_contract_id, l_stream_element_start_date, l_stream_element_end_date, 'VARIABLE_INTEREST', l_asset_rec.id);
869 FETCH loan_payment_amount_csr INTO l_interest_paid;
870 IF (loan_payment_amount_csr%NOTFOUND) THEN
871 l_interest_paid := 0;
872 END IF;
873 CLOSE loan_payment_amount_csr;
874
875 --Bug# 13001695
876
877 OKL_VARIABLE_INTEREST_PVT.Print_debug ('Total Interest Payment = '|| l_interest_paid);
878
879 l_invoice_amt := l_interest_calculated - l_interest_paid;
880
881 END IF;
882 ELSIF (p_principal_basis = 'SCHEDULED') THEN
883 l_invoice_amt := l_interest_calculated;
884 END IF;
885
886 --sechawla : print the invoice amount
887 OKL_VARIABLE_INTEREST_PVT.Print_debug ('Invoice Amount : '|| l_invoice_amt);
888
889 IF (p_rev_rec_method = 'ACTUAL') THEN
890 l_stream_type_purpose := 'VARIABLE_LOAN_PAYMENT';
891 ELSE
892 l_stream_type_purpose := 'VARIABLE_INTEREST';
893 END IF;
894
895 IF (l_invoice_amt <> 0) THEN --sechawla : added this condition
896 --Passed l_asset_rec.id for p_line_id by bkatraga for bug 13447258
897 OKL_VR_DOCUMENT_PVT.create_stream_invoice (
898 p_api_version => 1.0,
899 p_init_msg_list => p_init_msg_list,
900 x_return_status => x_return_status,
901 x_msg_count => x_msg_count,
902 x_msg_data => x_msg_data,
903 p_contract_id => p_contract_id,
904 p_line_id => l_asset_rec.id,
905 p_amount => l_invoice_amt,
906 --Bug# 13026821
907 p_due_date => p_invoice_date,
908 p_stream_type_purpose => l_stream_type_purpose,
909 p_create_invoice_flag => OKL_API.G_TRUE,
910 p_parent_strm_element_id => NULL,
911 x_invoice_id => l_invoice_id,
912 x_stream_element_id => l_stream_element_id);
913
914 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
915 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to CREATE_STREAM_INVOICE');
916 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
917 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
918 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to CREATE_STREAM_INVOICE');
919 RAISE var_int_loan_float_failed;
920 END IF;
921 i_vir_tbl := OKL_VARIABLE_INTEREST_PVT.g_vir_tbl;
922
923 --checkwhat does it do
924 OKL_VARIABLE_INTEREST_PVT.upd_vir_params_with_invoice (
925 p_api_version => 1.0,
926 p_init_msg_list => OKL_API.G_TRUE,
927 x_return_status => x_return_status,
928 x_msg_count => x_msg_count,
929 x_msg_data => x_msg_data,
930 p_source_id => l_invoice_id,
931 p_vir_tbl => i_vir_tbl,
932 x_vir_tbl => r_vir_tbl);
933 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
934 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to UPD_VIR_PARAMS_WITH_INVOICE');
935 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
936 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
937 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to UPD_VIR_PARAMS_WITH_INVOICE');
938 RAISE var_int_loan_float_failed;
939 END IF;
940
941 OKL_VARIABLE_INTEREST_PVT.g_vir_tbl := r_vir_tbl;
942
943 OKL_VR_DATA_HANDLER_PVT.INSERT_VIR_PARAMS(
944 p_api_version => 1.0,
945 p_init_msg_list => OKL_API.G_TRUE,
946 x_return_status => x_return_status,
947 x_msg_count => x_msg_count,
948 x_msg_data => x_msg_data,
949 p_vir_tbl => OKL_VARIABLE_INTEREST_PVT.g_vir_tbl);
950 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
951 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to INSERT_VIR_PARAMS');
952 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
953 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
954 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to INSERT_VIR_PARAMS');
955 RAISE var_int_loan_float_failed;
956 END IF;
957
958 END IF; --sechawla
959 END LOOP; --Added by bkatraga for bug 13447258
960
961 --Added by bkatraga for bug 13447258
962 OKL_VR_DATA_HANDLER_PVT.INSERT_PRINCIPAL_BAL_TXN(
963 p_api_version => p_api_version,
964 p_init_msg_list => p_init_msg_list,
965 x_return_status => x_return_status,
966 x_msg_count => x_msg_count,
967 x_msg_data => x_msg_data,
968 p_vpb_tbl => OKL_VARIABLE_INTEREST_PVT.g_vpb_tbl);
969
970 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
971 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to INSERT_PRINCIPAL_BAL_TXN');
972 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
973 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
974 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to INSERT_PRINCIPAL_BAL_TXN');
975 RAISE var_int_loan_float_failed;
976 END IF;
977
978 OKL_VARIABLE_INTEREST_PVT.g_vpb_tbl.delete;
979 OKL_VARIABLE_INTEREST_PVT.g_vpb_tbl_counter := 0;
980 --end bkatraga
981
982 --4731205
983 IF (p_principal_basis = 'ACTUAL' AND p_rev_rec_method = 'ACTUAL') THEN
984 FOR current_line in contract_line_csr(p_contract_id, p_due_date)
985 LOOP
986 l_kle_id := current_line.id;
987
988 l_stream_element_end_date := p_due_date;
989 IF (l_arrears_pay_dates_option = 'FIRST_DAY_OF_NEXT_PERIOD') THEN
990 l_stream_element_end_date := p_due_date + 1;
991 END IF;
992
993 FOR current_stream_element in principal_payment_streams_csr (p_contract_id, l_kle_id, l_stream_element_end_date)
994 LOOP
995 l_stream_type_purpose := 'VARIABLE_LOAN_PAYMENT';
996 l_invoice_amt := current_stream_element.amount;
997
998 l_strm_element_date := current_stream_element.stream_element_date;
999 l_parent_strm_element_id := current_stream_element.id;
1000
1001 --sechawla : print the invoice amount
1002 OKL_VARIABLE_INTEREST_PVT.Print_debug ('Invoice Amount : '|| l_invoice_amt);
1003
1004 IF (l_invoice_amt <> 0 )THEN --sechawla : added
1005 OKL_VR_DOCUMENT_PVT.create_stream_invoice (
1006 p_api_version => 1.0,
1007 p_init_msg_list => p_init_msg_list,
1008 x_return_status => x_return_status,
1009 x_msg_count => x_msg_count,
1010 x_msg_data => x_msg_data,
1011 p_contract_id => p_contract_id,
1012 p_line_id => l_kle_id,
1013 p_amount => l_invoice_amt,
1014 p_due_date => l_strm_element_date,
1015 p_stream_type_purpose => l_stream_type_purpose,
1016 p_create_invoice_flag => OKL_API.G_TRUE,
1017 p_parent_strm_element_id => l_parent_strm_element_id,
1018 x_invoice_id => l_invoice_id,
1019 x_stream_element_id => l_stream_element_id);
1020 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1021 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to CREATE_STREAM_INVOICE');
1022 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1023 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1024 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to CREATE_STREAM_INVOICE');
1025 RAISE var_int_loan_float_failed;
1026 END IF;
1027
1028 END IF; --sechawla
1029 END LOOP;
1030 END LOOP;
1031 END IF;
1032
1033 EXCEPTION
1034 WHEN var_int_loan_float_failed THEN
1035 OKL_VARIABLE_INTEREST_PVT.print_error_message ('Exception var_int_loan_float_failed raised in procedure VARIABLE_INTEREST_LOAN_FLOAT');
1036 x_return_status := OKL_API.G_RET_STS_ERROR;
1037 WHEN OTHERS THEN
1038 OKL_VARIABLE_INTEREST_PVT.print_error_message ('Exception raised in procedure VARIABLE_INTEREST_LOAN_FLOAT');
1039 Okl_Api.SET_MESSAGE(
1040 p_app_name => G_APP_NAME,
1041 p_msg_name => G_UNEXPECTED_ERROR,
1042 p_token1 => G_SQLCODE_TOKEN,
1043 p_token1_value => SQLCODE,
1044 p_token2 => G_SQLERRM_TOKEN,
1045 p_token2_value => SQLERRM);
1046
1047 x_return_status := OKL_API.G_RET_STS_ERROR;
1048
1049 END variable_interest_loan_float;
1050
1051
1052 -----------------------------------------------------------------
1053 PROCEDURE process_interest_float(
1054 p_api_version IN NUMBER,
1055 p_init_msg_list IN VARCHAR2,
1056 x_return_status OUT NOCOPY VARCHAR2,
1057 x_msg_count OUT NOCOPY NUMBER,
1058 x_msg_data OUT NOCOPY VARCHAR2,
1059 p_contract_id IN NUMBER,
1060 p_to_date IN DATE,
1061 p_last_interest_cal_date IN OUT NOCOPY DATE,
1062 p_print_lead_days IN NUMBER
1063 )
1064 IS
1065 process_int_float_failed EXCEPTION;
1066 l_int_cal_start_date DATE;
1067 l_calculate_from_khr_start VARCHAR2(10) := 'Y';
1068 l_end_of_process BOOLEAN := FALSE;
1069 l_bill_date OKL_TRX_AR_INVOICES_V.date_invoiced%TYPE;
1070 l_stm_date DATE;
1071 l_due_date DATE;
1072 l_period_start_date DATE;
1073 l_period_end_date DATE;
1074
1075 --Bug# 13026821
1076 CURSOR l_varint_sll_csr( khrid NUMBER ) IS
1077 SELECT NVL(rul2.rule_information10,'N') arrears_yn
1078 FROM okc_rule_groups_b rgp,
1079 okc_rules_b rul1,
1080 okc_rules_b rul2,
1081 okl_strm_type_b sty
1082 WHERE rul2.dnz_chr_id = rgp.dnz_chr_id
1083 AND rul2.rule_information_category = 'LASLL'
1084 AND rul2.rgp_id = rgp.id
1085 AND rgp.cle_id IS NULL
1086 AND rgp.chr_id = khrid
1087 AND rgp.dnz_chr_id = khrid
1088 AND rgp.rgd_code = 'LALEVL'
1089 AND rul1.dnz_chr_id = rgp.dnz_chr_id
1090 AND rul1.rule_information_category = 'LASLH'
1091 AND rul1.rgp_id = rgp.id
1092 AND TO_NUMBER(rul2.object2_id1) = rul1.id
1093 AND TO_NUMBER(rul1.object1_id1) = sty.id
1094 AND sty.stream_type_purpose = 'VARIABLE_INTEREST_SCHEDULE'
1095 ORDER BY FND_DATE.canonical_to_date(rul2.rule_information2);
1096
1097 l_arrears_pay_dates_option VARCHAR2(50);
1098 l_arrears_yn VARCHAR2(50);
1099 l_invoice_date DATE;
1100 --Bug# 13026821
1101
1102 BEGIN
1103
1104 --Bug# 13026821
1105 OPEN l_varint_sll_csr(OKL_VARIABLE_INTEREST_PVT.G_CONTRACT_ID);
1106 FETCH l_varint_sll_csr into l_arrears_yn;
1107 CLOSE l_varint_sll_csr;
1108
1109 OKL_VARIABLE_INTEREST_PVT.print_debug('Arrears Option for Variable Interest Schedule: '|| l_arrears_yn);
1110
1111 IF l_arrears_yn = 'Y' THEN
1112 OKL_VARIABLE_INTEREST_PVT.print_debug('Executing OKL_ISG_UTILS_PVT.get_arrears_pay_dates_option');
1113
1114 OKL_ISG_UTILS_PVT.get_arrears_pay_dates_option(
1115 p_khr_id => OKL_VARIABLE_INTEREST_PVT.G_CONTRACT_ID,
1116 x_arrears_pay_dates_option => l_arrears_pay_dates_option,
1117 x_return_status => x_return_status);
1118
1119 IF(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1120 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1121 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1122 RAISE OKL_API.G_EXCEPTION_ERROR;
1123 END IF;
1124
1125 OKL_VARIABLE_INTEREST_PVT.print_debug('Internal Arrears Pay Date Option : '|| l_arrears_pay_dates_option);
1126 END IF;
1127 --Bug# 13026821
1128
1129 l_end_of_process := FALSE;
1130 l_calculate_from_khr_start := 'Y';
1131
1132 OKL_VARIABLE_INTEREST_PVT.print_debug ('Contract Id: '||OKL_VARIABLE_INTEREST_PVT.G_CONTRACT_ID);
1133 OKL_VARIABLE_INTEREST_PVT.print_debug ('To Date: '||p_to_date);
1134
1135 l_end_of_process := FALSE;
1136 l_bill_date := null;
1137 l_due_date := null;
1138 LOOP
1139 IF ((OKL_VARIABLE_INTEREST_PVT.G_DEAL_TYPE = 'LOAN' or OKL_VARIABLE_INTEREST_PVT.G_DEAL_TYPE ='LOAN-REVOLVING') AND
1140 ( NOT(l_end_of_process))) THEN
1141
1142 --Removed and clause in IF condition by bkatraga for bug 14639377
1143 --Bug# 13026821
1144 IF (p_last_interest_cal_date is not null) THEN
1145 l_stm_date := p_last_interest_cal_date;
1146
1147 --Bug# 13026821
1148 IF (l_arrears_yn = 'Y' AND l_arrears_pay_dates_option = 'FIRST_DAY_OF_NEXT_PERIOD') THEN
1149 l_stm_date := p_last_interest_cal_date + 1;
1150 END IF;
1151 --Bug# 13026821
1152
1153 ELSE
1154 l_stm_date := OKL_VARIABLE_INTEREST_PVT.G_CONTRACT_START_DATE;
1155
1156 --Bug# 14696586
1157 IF (l_arrears_yn = 'Y' AND l_arrears_pay_dates_option = 'LAST_DAY_OF_PERIOD') THEN
1158 l_stm_date := l_stm_date - 1;
1159 END IF;
1160 --Bug# 14696586
1161
1162 END IF;
1163
1164 OKL_VARIABLE_INTEREST_PVT.print_debug('Stream Start Date: '||l_stm_date);
1165
1166 OKL_VARIABLE_INTEREST_PVT.print_debug('Executing OKL_STREAM_GENERATOR_PVT.get_next_billing_date ');
1167 OKL_VARIABLE_INTEREST_PVT.print_debug('Billing Date : '|| nvl(l_stm_date, OKL_VARIABLE_INTEREST_PVT.G_CONTRACT_START_DATE) );
1168
1169 OKL_STREAM_GENERATOR_PVT.get_next_billing_date(
1170 p_api_version => p_api_version,
1171 p_init_msg_list => p_init_msg_list,
1172 p_khr_id => OKL_VARIABLE_INTEREST_PVT.G_CONTRACT_ID,
1173 --Bug# 13026821
1174 p_billing_date => nvl(l_stm_date, OKL_VARIABLE_INTEREST_PVT.G_CONTRACT_START_DATE),
1175 x_next_due_date => l_due_date,
1176 x_next_period_start_date => l_period_start_date,
1177 x_next_period_end_date => l_period_end_date,
1178 x_return_status => x_return_status,
1179 x_msg_count => x_msg_count,
1180 x_msg_data => x_msg_data);
1181
1182 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1183 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to OKL_STREAM_GENERATOR_PVT.get_next_billing_date');
1184 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1185 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1186 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to OKL_STREAM_GENERATOR_PVT.get_next_billing_date');
1187 RAISE process_int_float_failed;
1188 END IF;
1189
1190 --Bug# 13026821
1191 l_invoice_date := l_due_date;
1192
1193 IF (l_arrears_yn = 'Y' AND l_arrears_pay_dates_option = 'FIRST_DAY_OF_NEXT_PERIOD') THEN
1194 l_due_date := l_due_date - 1;
1195
1196 IF l_period_start_date > OKL_VARIABLE_INTEREST_PVT.G_CONTRACT_START_DATE THEN
1197 l_period_start_date := l_period_start_date - 1;
1198 END IF;
1199 l_period_end_date := l_period_end_date - 1;
1200 END IF;
1201 --Bug# 13026821
1202
1203 OKL_VARIABLE_INTEREST_PVT.print_debug(' Next Due Date : '|| l_due_date );
1204 OKL_VARIABLE_INTEREST_PVT.print_debug(' Next Period Start Date : '|| l_period_start_date );
1205 OKL_VARIABLE_INTEREST_PVT.print_debug(' Next Period End Date : ' || l_period_end_date );
1206 OKL_VARIABLE_INTEREST_PVT.print_debug(' Last Interest calculation date : '|| p_last_interest_cal_date);
1207
1208 END IF;
1209
1210 IF (trunc(l_due_date) = p_last_interest_cal_date OR
1211 l_due_date is null OR
1212 --Bug# 13506924
1213 trunc(l_invoice_date) > (trunc(sysdate)+ p_print_lead_days) OR
1214 trunc(l_invoice_date) > trunc(p_to_date)+ NVL(p_print_lead_days,0)) THEN
1215 l_end_of_process := TRUE;
1216 END IF;
1217
1218 OKL_VARIABLE_INTEREST_PVT.print_debug('Stream Element Date: '||l_due_date);
1219
1220 x_return_status := OKL_API.G_RET_STS_SUCCESS;
1221 ----------------------------------------------------
1222 -- Create new transaction header for every
1223 -- contract and bill_date combination
1224 ----------------------------------------------------
1225 OKL_VARIABLE_INTEREST_PVT.print_debug('Bill Date: '||l_due_date);
1226
1227 IF NOT(l_end_of_process) THEN
1228 ------------------------------------------------------------
1229 OKL_VARIABLE_INTEREST_PVT.print_debug ('Executing procedure variable_interest_float');
1230 OKL_VARIABLE_INTEREST_PVT.print_debug ('Contract ID : '|| OKL_VARIABLE_INTEREST_PVT.G_CONTRACT_ID );
1231 OKL_VARIABLE_INTEREST_PVT.print_debug( 'Principal Basis : '|| OKL_VARIABLE_INTEREST_PVT.G_PRINCIPAL_BASIS_CODE);
1232 OKL_VARIABLE_INTEREST_PVT.print_debug( 'Revenue Recognition Method : '|| OKL_VARIABLE_INTEREST_PVT.G_REVENUE_RECOGNITION_METHOD );
1233 OKL_VARIABLE_INTEREST_PVT.print_debug( 'Calculation Basis : '|| OKL_VARIABLE_INTEREST_PVT.G_INTEREST_CALCULATION_BASIS );
1234 OKL_VARIABLE_INTEREST_PVT.print_debug( 'Deal Type : '|| OKL_VARIABLE_INTEREST_PVT.G_DEAL_TYPE);
1235 OKL_VARIABLE_INTEREST_PVT.print_debug( 'Currency Code : '|| OKL_VARIABLE_INTEREST_PVT.G_CURRENCY_CODE );
1236 OKL_VARIABLE_INTEREST_PVT.print_debug( 'Start Date : '|| OKL_VARIABLE_INTEREST_PVT.G_CONTRACT_START_DATE );
1237 OKL_VARIABLE_INTEREST_PVT.print_debug( 'Period Start Date : '|| l_period_start_date );
1238 OKL_VARIABLE_INTEREST_PVT.print_debug( 'Due Date : '|| l_due_date);
1239
1240 -- BUG 4748287
1241 IF (OKL_VARIABLE_INTEREST_PVT.G_PRINCIPAL_BASIS_CODE = 'SCHEDULED') THEN
1242 l_int_cal_start_date := l_period_start_date;
1243 ELSE
1244 l_calculate_from_khr_start := OKL_VARIABLE_INTEREST_PVT.calculate_from_khr_start_date(p_khr_id => OKL_VARIABLE_INTEREST_PVT.G_CONTRACT_ID,
1245 p_from_date => l_period_start_date);
1246
1247 IF (l_calculate_from_khr_start = 'Y') THEN
1248 l_int_cal_start_date := OKL_VARIABLE_INTEREST_PVT.G_CONTRACT_START_DATE;
1249 OKL_VARIABLE_INTEREST_PVT.print_debug('Float interest calculation will start from contract start date : ' || l_int_cal_start_date);
1250 ELSE
1251 l_int_cal_start_date := l_period_start_date;
1252 OKL_VARIABLE_INTEREST_PVT.print_debug('Float interest calculation will start from billing period start date : ' || l_int_cal_start_date);
1253 END IF;
1254 END IF;
1255
1256 IF (OKL_VARIABLE_INTEREST_PVT.G_DEAL_TYPE = 'LOAN') THEN
1257 variable_interest_loan_float(
1258 p_api_version => 1.0,
1259 p_init_msg_list => OKL_API.G_TRUE,
1260 x_return_status => x_return_status,
1261 x_msg_count => x_msg_count,
1262 x_msg_data => x_msg_data,
1263 p_contract_id => OKL_VARIABLE_INTEREST_PVT.G_CONTRACT_ID,
1264 p_principal_basis => OKL_VARIABLE_INTEREST_PVT.G_PRINCIPAL_BASIS_CODE,
1265 p_rev_rec_method => OKL_VARIABLE_INTEREST_PVT.G_REVENUE_RECOGNITION_METHOD,
1266 p_deal_type => OKL_VARIABLE_INTEREST_PVT.G_DEAL_TYPE,
1267 p_currency_code => OKL_VARIABLE_INTEREST_PVT.G_CURRENCY_CODE,
1268 p_start_date => l_int_cal_start_date,
1269 p_due_date => l_due_date,
1270 --Bug# 13026821
1271 p_invoice_date => l_invoice_date);
1272 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1273 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to VARIABLE_INTEREST_LOAN_FLOAT');
1274 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1275 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1276 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to VARIABLE_INTEREST_LOAN_FLOAT');
1277 RAISE process_int_float_failed;
1278 END IF;
1279 ELSIF (OKL_VARIABLE_INTEREST_PVT.G_DEAL_TYPE = 'LOAN-REVOLVING') THEN
1280 variable_int_rev_loan_float(
1281 p_api_version => 1.0,
1282 p_init_msg_list => OKL_API.G_TRUE,
1283 x_return_status => x_return_status,
1284 x_msg_count => x_msg_count,
1285 x_msg_data => x_msg_data,
1286 p_contract_id => OKL_VARIABLE_INTEREST_PVT.G_CONTRACT_ID,
1287 p_principal_basis => OKL_VARIABLE_INTEREST_PVT.G_PRINCIPAL_BASIS_CODE,
1288 p_rev_rec_method => OKL_VARIABLE_INTEREST_PVT.G_REVENUE_RECOGNITION_METHOD,
1289 p_deal_type => OKL_VARIABLE_INTEREST_PVT.G_DEAL_TYPE,
1290 p_currency_code => OKL_VARIABLE_INTEREST_PVT.G_CURRENCY_CODE,
1291 p_start_date => l_int_cal_start_date,
1292 p_due_date => l_due_date,
1293 --Bug# 13026821
1294 p_invoice_date => l_invoice_date);
1295 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1296 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to VARIABLE_INT_REV_LOAN_FLOAT');
1297 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1298 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1299 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to VARIABLE_INT_REV_LOAN_FLOAT');
1300 RAISE process_int_float_failed;
1301 END IF;
1302 END IF;
1303
1304 OKL_VARIABLE_INTEREST_PVT.print_debug ('Variable interest Calculation completed successfully for Billing period : '|| l_due_date);
1305 ELSE
1306 EXIT;
1307 END IF;
1308
1309 FND_FILE.PUT_LINE (FND_FILE.LOG, '===============================================================================');
1310
1311 OKL_VR_DATA_HANDLER_PVT.UPDATE_LAST_INT_CAL_DATE(
1312 p_api_version => 1.0,
1313 p_init_msg_list => OKL_API.G_TRUE,
1314 x_return_status => x_return_status,
1315 x_msg_count => x_msg_count,
1316 x_msg_data => x_msg_data,
1317 p_contract_id => OKL_VARIABLE_INTEREST_PVT.G_CONTRACT_ID,
1318 p_last_interest_cal_date => l_due_date);
1319 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1320 OKL_VARIABLE_INTEREST_PVT.print_error_message('Unexpected error raised in call to UPDATE_LAST_INT_CAL_DATE');
1321 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1322 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1323 OKL_VARIABLE_INTEREST_PVT.print_error_message('Error raised in call to UPDATE_LAST_INT_CAL_DATE');
1324 RAISE process_int_float_failed;
1325 END IF;
1326
1327 p_last_interest_cal_date := l_due_date;
1328
1329 COMMIT;
1330
1331 OKL_VARIABLE_INTEREST_PVT.Print_debug('Processing complete for due date : '|| l_due_date);
1332 END LOOP;
1333
1334 EXCEPTION
1335 WHEN process_int_float_failed THEN
1336 OKL_VARIABLE_INTEREST_PVT.print_error_message ('Exception process_int_float_failed raised in procedure PROCESS_INTEREST_FLOAT');
1337 x_return_status := OKL_API.G_RET_STS_ERROR;
1338 WHEN OTHERS THEN
1339 OKL_VARIABLE_INTEREST_PVT.print_error_message ('Exception raised in procedure PROCESS_INTEREST_FLOAT');
1340 Okl_Api.SET_MESSAGE(
1341 p_app_name => G_APP_NAME,
1342 p_msg_name => G_UNEXPECTED_ERROR,
1343 p_token1 => G_SQLCODE_TOKEN,
1344 p_token1_value => SQLCODE,
1345 p_token2 => G_SQLERRM_TOKEN,
1346 p_token2_value => SQLERRM);
1347 x_return_status := OKL_API.G_RET_STS_ERROR;
1348 END process_interest_float;
1349 END;