DBA Data[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;