[Home] [Help]
PACKAGE BODY: APPS.OKL_VARIABLE_INTEREST_PVT
Source
1 PACKAGE BODY OKL_VARIABLE_INTEREST_PVT AS
2 /* $Header: OKLRVARB.pls 120.110.12020000.14 2012/11/23 14:41:06 rpillay ship $ */
3
4 G_DEBUG CONSTANT VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
5 G_INIT_NUMBER CONSTANT NUMBER := -9999;
6 G_API_TYPE CONSTANT VARCHAR2(4) := '_PVT';
7 G_REQUIRED_VALUE CONSTANT VARCHAR2(200) := OKL_API.G_REQUIRED_VALUE;
8 G_COL_NAME_TOKEN CONSTANT VARCHAR2(200) := OKL_API.G_COL_NAME_TOKEN;
9 --G_FIN_LINE_LTY_ID CONSTANT NUMBER := 33;
10 rule_failed EXCEPTION;
11
12 --Bug# 14799218
13 G_MODULE_NAME CONSTANT VARCHAR2(500) := 'okl.var.plsql.okl_variable_interest_pvt';
14
15 TYPE vrc_rec_type IS RECORD (
16 CONTRACT_NUMBER OKL_K_HEADERS_FULL_V.CONTRACT_NUMBER%TYPE
17 ,CONTRACT_ID OKL_K_HEADERS_FULL_V.ID%TYPE
18 ,START_DATE OKL_K_HEADERS_FULL_V.START_DATE%TYPE
19 ,END_DATE OKL_K_HEADERS_FULL_V.END_DATE%TYPE
20 ,INTEREST_CALCULATION_BASIS OKL_PRODUCT_PARAMETERS_V.INTEREST_CALCULATION_BASIS%TYPE
21 ,DAYS_IN_A_MONTH_CODE OKL_K_RATE_PARAMS.DAYS_IN_A_MONTH_CODE%TYPE
22 ,DAYS_IN_A_YEAR_CODE OKL_K_RATE_PARAMS.DAYS_IN_A_YEAR_CODE%TYPE
23 ,RATE_CHANGE_VALUE OKL_K_RATE_PARAMS.RATE_CHANGE_VALUE%TYPE
24 ,PROCESS_STATUS VARCHAR2(1));
25
26 TYPE vrc_tbl_type IS TABLE OF vrc_rec_type INDEX BY BINARY_INTEGER;
27
28 g_to_date DATE;
29 g_no_of_contracts_processed NUMBER;
30 g_no_of_rejected_contracts NUMBER;
31 g_no_of_successful_contracts NUMBER;
32
33
34 --Bug# 7277007
35 TYPE rpt_summary_rec_type IS RECORD (
36 total_contract_num_success NUMBER
37 ,total_contract_num_error NUMBER);
38
39 TYPE rpt_summary_tbl_type IS TABLE OF rpt_summary_rec_type INDEX BY VARCHAR2(30);
40 g_rpt_summary_tbl rpt_summary_tbl_type;
41
42 TYPE error_msg_tbl_type is TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
43
44 TYPE rpt_error_rec_type IS RECORD (
45 contract_number okc_k_headers_b.contract_number%TYPE
46 ,product_name okl_products.name%TYPE
47 ,interest_calc_basis fnd_lookup_values.lookup_code%TYPE
48 ,last_int_calc_date DATE
49 ,error_msg_tbl error_msg_tbl_type);
50
51 TYPE rpt_error_tbl_type IS TABLE OF rpt_error_rec_type INDEX BY BINARY_INTEGER;
52 g_rpt_error_tbl rpt_error_tbl_type;
53 g_rpt_error_tbl_counter BINARY_INTEGER := 0;
54
55 TYPE rpt_success_rec_type IS RECORD (
56 contract_id okc_k_headers_b.id%TYPE
57 ,contract_number okc_k_headers_b.contract_number%TYPE
58 ,days_in_a_month_code okl_k_rate_params.days_in_a_month_code%TYPE
59 ,days_in_a_year_code okl_k_rate_params.days_in_a_year_code%TYPE);
60
61 TYPE rpt_success_tbl_type IS TABLE OF rpt_success_rec_type INDEX BY BINARY_INTEGER;
62
63 TYPE rpt_success_icb_tbl_type IS TABLE OF rpt_success_tbl_type INDEX BY VARCHAR2(30);
64
65 g_rpt_success_icb_tbl rpt_success_icb_tbl_type;
66 --Bug# 7277007
67
68 --Bug# 13447258: Changes to store catchup calculated values in okl_var_int_params_all
69 --Bug# 12974796
70 /*TYPE rpt_catchup_rec_type IS RECORD (
71 catchup_amount NUMBER
72 ,catchup_settlement_type VARCHAR2(30)
73 ,vir_id NUMBER);
74
75 TYPE rpt_catchup_tbl_type IS TABLE OF rpt_catchup_rec_type INDEX BY BINARY_INTEGER;
76
77 TYPE rpt_chr_catchup_tbl_type IS TABLE OF rpt_catchup_tbl_type INDEX BY VARCHAR2(120);
78
79 g_rpt_chr_catchup_tbl rpt_chr_catchup_tbl_type;*/
80 --Bug# 12974796
81
82 ------------------------------------------------------------------------------
83 -- PROCEDURE print_line
84 --
85 -- This procedure prints message
86 --
87 -- Calls:
88 -- Called By:
89 ------------------------------------------------------------------------------
90
91 PROCEDURE print_line (p_message IN VARCHAR2) IS
92 BEGIN
93 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, p_message);
94 EXCEPTION
95 WHEN OTHERS THEN
96 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '** EXCEPTION IN print_line: '||SQLERRM);
97 END print_line;
98
99 ------------------------------------------------------------------------------
100 -- PROCEDURE print
101 --
102 -- This procedure prints message
103 --
104 -- Calls:
105 -- Called By:
106 ------------------------------------------------------------------------------
107 /* Included this procedure to avoid GSCC error file.sql.26 */
108 PROCEDURE print(p_message IN VARCHAR2) IS
109 BEGIN
110 FND_FILE.PUT(FND_FILE.OUTPUT, p_message);
111 EXCEPTION
112 WHEN OTHERS THEN
113 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '** EXCEPTION IN print_line: '||SQLERRM);
114 END print;
115
116 ------------------------------------------------------------------------------
117 -- PROCEDURE print_debug
118 --
119 -- This procedure prints message
120 --
121 -- Calls:
122 -- Called By:
123 ------------------------------------------------------------------------------
124
125 PROCEDURE print_debug (p_message IN VARCHAR2) IS
126 BEGIN
127 --Bug# 14799218: Perform logging only when FND: Debug Log Enabled
128 -- profile is turned on
129 IF ( G_DEBUG = 'Y' ) THEN
130 -- FND_FILE.PUT_LINE (FND_FILE.LOG, p_message);
131 -- OKL_DEBUG_PUB.logmessage(p_message, 25);
132 -- dbms_output.put_line(p_message);
133
134 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE_NAME, p_message);
135 END IF;
136 EXCEPTION
137 WHEN OTHERS THEN
138 FND_FILE.PUT_LINE (FND_FILE.LOG, '** EXCEPTION IN print_line: '||SQLERRM);
139 END print_debug;
140
141 ------------------------------------------------------------------------------
142 -- PROCEDURE print_error_message
143 --
144 -- This procedure prints error message in the request log file
145 --
146 -- Calls:
147 -- Called By:
148 ------------------------------------------------------------------------------
149
150 PROCEDURE print_error_message (p_message IN VARCHAR2) IS
151 BEGIN
152 FND_FILE.PUT_LINE (FND_FILE.LOG, p_message);
153 EXCEPTION
154 WHEN OTHERS THEN
155 FND_FILE.PUT_LINE (FND_FILE.LOG, '** EXCEPTION IN print_line: '||SQLERRM);
156 END print_error_message;
157
158 ------------------------------------------------------------------------------
159 -- PROCEDURE report_error
160 --
161 -- This procedure prints error messages
162 --
163 -- Calls:
164 -- Called By:
165 ------------------------------------------------------------------------------
166
167 PROCEDURE Report_Error(p_contract_number IN VARCHAR2,
168 p_product_name IN VARCHAR2,
169 p_interest_calc_basis IN VARCHAR2,
170 p_last_int_calc_date IN DATE,
171 x_msg_count OUT NOCOPY NUMBER,
172 x_msg_data OUT NOCOPY VARCHAR2
173 ) IS
174
175 x_msg_index_out NUMBER;
176 x_msg_out VARCHAR2(2000);
177
178 BEGIN
179
180 okl_api.end_activity(
181 X_msg_count => x_msg_count,
182 X_msg_data => x_msg_data
183 );
184
185 --Bug# 7277007
186 IF g_rpt_summary_tbl.EXISTS(p_interest_calc_basis)
187 THEN
188 g_rpt_summary_tbl(p_interest_calc_basis).total_contract_num_error :=
189 NVL(g_rpt_summary_tbl(p_interest_calc_basis).total_contract_num_error,0) + 1;
190 ELSE
191 g_rpt_summary_tbl(p_interest_calc_basis).total_contract_num_error := 1;
192 END IF;
193
194 g_rpt_error_tbl_counter := g_rpt_error_tbl_counter + 1;
195 g_rpt_error_tbl(g_rpt_error_tbl_counter).contract_number := p_contract_number;
196 g_rpt_error_tbl(g_rpt_error_tbl_counter).product_name := p_product_name;
197 g_rpt_error_tbl(g_rpt_error_tbl_counter).interest_calc_basis := p_interest_calc_basis;
198 g_rpt_error_tbl(g_rpt_error_tbl_counter).last_int_calc_date := p_last_int_calc_date;
199 --Bug# 7277007
200
201 FOR i in 1..x_msg_count
202 LOOP
203 FND_MSG_PUB.GET(
204 p_msg_index => i,
205 p_encoded => FND_API.G_FALSE,
206 p_data => x_msg_data,
207 p_msg_index_out => x_msg_index_out
208 );
209
210 --Bug# 7277007
211 g_rpt_error_tbl(g_rpt_error_tbl_counter).error_msg_tbl(i) := SUBSTR(x_msg_data,1,2000);
212 print_debug('Error '||to_char(i)||': '||x_msg_data);
213
214 END LOOP;
215 return;
216 EXCEPTION
217 WHEN OTHERS THEN
218 NULL;
219 END Report_Error;
220 ------------------------------------------------------------------------------
221 -- Start of Comments
222 -- Created By: Ramesh Seela
223 -- Procedure Name initialize_contract_params
224 -- Description: This procedure initializes the package variables
225 -- Dependencies:
226 -- Parameters:
227 -- Version: 1.0
228 -- End of Comments
229
230 ------------------------------------------------------------------------------
231 PROCEDURE initialize_contract_params (
232 p_api_version IN NUMBER,
233 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
234 x_return_status OUT NOCOPY VARCHAR2,
235 x_msg_count OUT NOCOPY NUMBER,
236 x_msg_data OUT NOCOPY VARCHAR2,
237 p_contract_id IN NUMBER) IS
238
239 l_api_name CONSTANT VARCHAR2(30) := 'INITIALIZE_CONTRACT_PARAMS';
240 l_api_version CONSTANT NUMBER := 1.0;
241 init_ctr_params_failed EXCEPTION;
242 l_interest_calculation_basis OKL_PRODUCT_PARAMETERS_V.interest_calculation_basis%TYPE;
243
244
245 Cursor contract_csr (p_contract_id NUMBER) IS
246 SELECT id,
247 deal_type,
248 start_date,
249 end_date,
250 currency_code,
251 pdt_id,
252 authoring_org_id
253 FROM okl_k_headers_full_v
254 WHERE id = p_contract_id;
255
256 Cursor interest_params_csr (p_contract_id NUMBER) IS
257 SELECT interest_basis_code,
258 calculation_formula_id,
259 nvl(principal_basis_code, 'ACTUAL') principal_basis_code,
260 days_in_a_month_code,
261 days_in_a_year_code,
262 catchup_settlement_code
263 FROM okl_k_rate_params
264 WHERE khr_id = p_contract_id
265 AND SYSDATE BETWEEN effective_from_date and nvl(effective_to_date, SYSDATE);
266
267 Cursor product_params_csr (p_product_id NUMBER) IS
268 SELECT ppm.revenue_recognition_method,
269 ppm.interest_calculation_basis
270 FROM okl_product_parameters_v ppm
271 WHERE ppm.id = p_product_id;
272
273 BEGIN
274 x_return_status := OKL_API.G_RET_STS_SUCCESS;
275
276 print_debug('Executing procedure INITIALIZE_CONTRACT_PARAMS using following parameters : ');
277 print_debug(' p_contract_id : '|| p_contract_id );
278
279 IF (G_CONTRACT_ID IS NULL OR G_CONTRACT_ID <> p_contract_id) THEN
280 OPEN contract_csr (p_contract_id);
281 FETCH contract_csr INTO G_CONTRACT_ID, G_DEAL_TYPE, G_CONTRACT_START_DATE, G_CONTRACT_END_DATE,
282 G_CURRENCY_CODE, G_PRODUCT_ID, G_AUTHORING_ORG_ID;
283 IF (contract_csr%NOTFOUND) THEN
284 CLOSE contract_csr;
285 print_error_message('Contract cursor did not return records for contract ID :' || p_contract_id);
286 RAISE init_ctr_params_failed;
287 END IF;
288 CLOSE contract_csr;
289
290 -- Fix for bug 6760186
291 OPEN product_params_csr (G_PRODUCT_ID);
292 FETCH product_params_csr INTO G_REVENUE_RECOGNITION_METHOD, l_interest_calculation_basis;
293 IF (product_params_csr%NOTFOUND) THEN
294 CLOSE product_params_csr;
295 print_error_message('Product Params cursor did not return records for product ID :' || G_PRODUCT_ID);
296 RAISE init_ctr_params_failed;
297 END IF;
298 CLOSE product_params_csr;
299
300 OPEN interest_params_csr (p_contract_id);
301 FETCH interest_params_csr INTO G_INTEREST_BASIS_CODE, G_CALCULATION_FORMULA_ID, G_PRINCIPAL_BASIS_CODE,
302 G_DAYS_IN_A_MONTH_CODE, G_DAYS_IN_A_YEAR_CODE, G_CATCHUP_SETTLEMENT_CODE;
303 IF (interest_params_csr%NOTFOUND) THEN
304 CLOSE interest_params_csr;
305 print_error_message('Interest Params cursor did not return records for contract ID :' || p_contract_id);
306 RAISE init_ctr_params_failed;
307 END IF;
308 CLOSE interest_params_csr;
309
310 /* Moved this code before querying interest rate parameters --6760186 */
311 /*OPEN product_params_csr (G_PRODUCT_ID);
312 FETCH product_params_csr INTO G_REVENUE_RECOGNITION_METHOD, l_interest_calculation_basis;
313 IF (product_params_csr%NOTFOUND) THEN
314 CLOSE product_params_csr;
315 print_error_message('Product Params cursor did not return records for product ID :' || G_PRODUCT_ID);
316 RAISE init_ctr_params_failed;
317 END IF;
318 CLOSE product_params_csr; */
319 -- 5047041
320 -- These changes are required to meet the requirements of code in procedure Interest_Date_Range
321 IF (G_INTEREST_CALCULATION_BASIS IS NULL OR G_INTEREST_CALCULATION_BASIS <> 'DAILY_INTEREST') THEN
322 G_INTEREST_CALCULATION_BASIS := l_interest_calculation_basis;
323 END IF;
324
325 IF (l_interest_calculation_basis = 'FIXED' AND
326 G_REVENUE_RECOGNITION_METHOD = 'ACTUAL') THEN
327 G_INTEREST_CALCULATION_BASIS := 'DAILY_INTEREST';
328 END IF;
329 -- These changes are required to meet the requirements of code in procedure Interest_Date_Range
330 END IF;
331
332
333
334 print_debug('Contract ID: '|| G_CONTRACT_ID);
335 print_debug('Authoring Org ID: '|| G_AUTHORING_ORG_ID);
336 print_debug('Product ID: '|| G_PRODUCT_ID);
337 print_debug('deal type :'|| G_DEAL_TYPE );
338 print_debug('Contract Start Date: '||G_CONTRACT_START_DATE);
339 print_debug('Contract End Date: '||G_CONTRACT_END_DATE);
340 print_debug('Currency code: '||G_CURRENCY_CODE);
341 print_debug('calculation basis : '|| G_INTEREST_CALCULATION_BASIS );
342 print_debug('revenue recognition method : '|| G_REVENUE_RECOGNITION_METHOD);
343 print_debug('Principal Balance : '|| G_CONTRACT_PRINCIPAL_BALANCE);
344 print_debug('Interest basis : '|| G_INTEREST_BASIS_CODE );
345 print_debug('Calculation Formula ID : '|| G_CALCULATION_FORMULA_ID);
346 print_debug('Principal Basis : '|| G_PRINCIPAL_BASIS_CODE);
347 print_debug('Days in a Month : '|| G_DAYS_IN_A_MONTH_CODE);
348 print_debug('Days in a Year : '|| G_DAYS_IN_A_YEAR_CODE);
349 print_debug('Catchup Settlement Code : '|| G_CATCHUP_SETTLEMENT_CODE);
350
351 print_debug ('Exiting initialize_contract_params');
352
353 EXCEPTION
354 WHEN init_ctr_params_failed THEN
355 print_error_message('init_ctr_params_failed Exception raised in procedure INITIALIZE_CONTRACT_PARAMS');
356 x_return_status := OKL_API.G_RET_STS_ERROR;
357
358 WHEN OTHERS THEN
359 print_error_message('Exception raised in procedure INITIALIZE_CONTRACT_PARAMS');
360 Okl_Api.SET_MESSAGE(
361 p_app_name => G_APP_NAME,
362 p_msg_name => G_UNEXPECTED_ERROR,
363 p_token1 => G_SQLCODE_TOKEN,
364 p_token1_value => SQLCODE,
365 p_token2 => G_SQLERRM_TOKEN,
366 p_token2_value => SQLERRM);
367
368 x_return_status := OKL_API.G_RET_STS_ERROR;
369
370 END initialize_contract_params;
371
372 ------------------------------------------------------------------------------
373 -- Start of Comments
374 -- Created By: Ramesh Seela
375 -- Procedure Name Get_contract_financed_amount
376 -- Description: The function derives the financed amount at Header Level
377 -- Dependencies:
378 -- Parameters:
379 -- Version: 1.0
380 -- End of Comments
381
382 ------------------------------------------------------------------------------
383 PROCEDURE get_contract_financed_amount (
384 p_api_version IN NUMBER,
385 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
386 x_return_status OUT NOCOPY VARCHAR2,
387 x_msg_count OUT NOCOPY NUMBER,
388 x_msg_data OUT NOCOPY VARCHAR2,
389 p_contract_id IN NUMBER,
390 x_principal_balance OUT NOCOPY NUMBER) IS
391
392 l_api_name CONSTANT VARCHAR2(30) := 'GET_CONTRACT_FINANCED_AMOUNT';
393 l_api_version CONSTANT NUMBER := 1.0;
394 get_ctr_fin_amt_failed EXCEPTION;
395
396
397 BEGIN
398 x_return_status := OKL_API.G_RET_STS_SUCCESS;
399
400 print_debug('Executing procedure GET_CONTRACT_FINANCED_AMOUNT using following parameters : ');
401 print_debug(' p_contract_id : '|| p_contract_id );
402 print_debug(' G_CONTRACT_ID : '|| G_CONTRACT_ID );
403 print_debug(' G_CONTRACT_PRINCIPAL_BALANCE : '|| G_CONTRACT_PRINCIPAL_BALANCE );
404
405
406 IF (G_CONTRACT_ID IS NULL OR
407 G_CONTRACT_PRINCIPAL_BALANCE IS NULL OR
408 G_CONTRACT_ID <> p_contract_id
409 ) THEN
410
411 --Changed the formula to CONTRACT_CAP_AMNT_LOAN by bkatraga for bug 13031080
412 --Bug# 13809156: Changed Formula to CONTRACT_CAP_AMNT_PRICE to reduce
413 -- capitalized downpayment when computing contract cap amount
414 -- Derive Principal Balance
415 Okl_Execute_Formula_Pub.EXECUTE(p_api_version => 1.0,
416 p_init_msg_list => OKL_API.G_FALSE,
417 x_return_status => x_return_status,
418 x_msg_count => x_msg_count,
419 x_msg_data => x_msg_data,
420 p_formula_name => 'CONTRACT_CAP_AMNT_PRICE',
421 p_contract_id => p_contract_id,
422 p_line_id => NULL,
423 p_additional_parameters => Okl_Execute_Formula_Pub.g_additional_parameters, -- vsgandhi Bug 13106699
424 x_value => x_principal_balance
425 );
426
427 IF (x_return_status = Okl_Api.G_RET_STS_SUCCESS) THEN
428 print_debug ('Procedure OKL_EXECUTE_FORMULA_PUB.EXECUTE completed successfully');
429 ELSIF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
430 print_debug ('Procedure OKL_EXECUTE_FORMULA_PUB.EXECUTE returned unexpected error');
431 print_error_message ('Procedure OKL_EXECUTE_FORMULA_PUB.EXECUTE returned unexpected error');
432 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
433 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
434 print_debug ('Procedure OKL_EXECUTE_FORMULA_PUB.EXECUTE returned exception');
435 print_error_message ('Procedure OKL_EXECUTE_FORMULA_PUB.EXECUTE returned exception');
436 RAISE get_ctr_fin_amt_failed;
437 END IF;
438
439 G_CONTRACT_ID := p_contract_id;
440 G_CONTRACT_PRINCIPAL_BALANCE := x_principal_balance;
441
442 ELSE
443 x_principal_balance := G_CONTRACT_PRINCIPAL_BALANCE;
444 END IF;
445
446 print_debug('Contract Financed Amount : '|| x_principal_balance);
447
448
449 EXCEPTION
450 WHEN get_ctr_fin_amt_failed THEN
451 print_error_message('get_ctr_fin_amt_failed Exception raised in procedure GET_CONTRACT_FINANCED_AMOUNT');
452 x_return_status := OKL_API.G_RET_STS_ERROR;
453
454 WHEN OTHERS THEN
455 print_error_message('Exception raised in procedure GET_CONTRACT_FINANCED_AMOUNT');
456 Okl_Api.SET_MESSAGE(
457 p_app_name => G_APP_NAME,
458 p_msg_name => G_UNEXPECTED_ERROR,
459 p_token1 => G_SQLCODE_TOKEN,
460 p_token1_value => SQLCODE,
461 p_token2 => G_SQLERRM_TOKEN,
462 p_token2_value => SQLERRM);
463
464 x_return_status := OKL_API.G_RET_STS_ERROR;
465
466 END get_contract_financed_amount;
467
468 ------------------------------------------------------------------------------
469 -- Start of Comments
470 -- Created By: Ramesh Seela
471 -- Procedure Name Get_Line_financed_amount
472 -- Description: The function derives the financed amount at Header Level
473 -- Dependencies:
474 -- Parameters:
475 -- Version: 1.0
476 -- End of Comments
477
478 ------------------------------------------------------------------------------
479 PROCEDURE get_asset_financed_amount (
480 p_api_version IN NUMBER,
481 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
482 x_return_status OUT NOCOPY VARCHAR2,
483 x_msg_count OUT NOCOPY NUMBER,
484 x_msg_data OUT NOCOPY VARCHAR2,
485 p_contract_id IN NUMBER,
486 p_line_id IN NUMBER,
487 x_principal_balance OUT NOCOPY NUMBER) IS
488
489 l_api_name CONSTANT VARCHAR2(30) := 'GET_ASSET_FINANCED_AMOUNT';
490 l_api_version CONSTANT NUMBER := 1.0;
491 get_asset_fin_amt_failed EXCEPTION;
492
493
494 BEGIN
495 x_return_status := OKL_API.G_RET_STS_SUCCESS;
496
497 print_debug('Executing procedure GET_ASSET_FINANCED_AMOUNT using following parameters : ');
498 print_debug(' p_contract_id : '|| p_contract_id );
499 print_debug(' p_line_id : '|| p_line_id );
500 print_debug(' G_CONTRACT_ID : '|| G_CONTRACT_ID );
501 print_debug(' G_FIN_AST_LINE_ID : '|| G_FIN_AST_LINE_ID);
502 print_debug(' G_ASSET_PRINCIPAL_BALANCE : '|| G_ASSET_PRINCIPAL_BALANCE );
503
504
505 IF (G_CONTRACT_ID IS NULL OR
506 G_FIN_AST_LINE_ID IS NULL OR
507 G_ASSET_PRINCIPAL_BALANCE IS NULL OR
508 G_CONTRACT_ID <> p_contract_id OR
509 G_FIN_AST_LINE_ID <> p_line_id
510 ) THEN
511
512 --Changed the formula to LINE_CAP_AMNT_LOAN by bkatraga for bug 13031080
513 --Bug# 14637671: Changed Formula to LINE_CAP_AMNT_PRICE to reduce
514 -- capitalized downpayment when computing line cap amount
515 -- Derive Principal Balance
516 Okl_Execute_Formula_Pub.EXECUTE(p_api_version => 1.0,
517 p_init_msg_list => OKL_API.G_FALSE,
518 x_return_status => x_return_status,
519 x_msg_count => x_msg_count,
520 x_msg_data => x_msg_data,
521 p_formula_name => 'LINE_CAP_AMNT_PRICE',
522 p_contract_id => p_contract_id,
523 p_line_id => p_line_id,
524 p_additional_parameters => Okl_Execute_Formula_Pub.g_additional_parameters, -- vsgandhi bug13106699
525 x_value => x_principal_balance
526 );
527
528 IF (x_return_status = Okl_Api.G_RET_STS_SUCCESS) THEN
529 print_debug ('Procedure OKL_EXECUTE_FORMULA_PUB.EXECUTE completed successfully');
530 ELSIF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
531 print_debug ('Procedure OKL_EXECUTE_FORMULA_PUB.EXECUTE returned unexpected error');
532 print_error_message ('Procedure OKL_EXECUTE_FORMULA_PUB.EXECUTE returned unexpected error');
533 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
534 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
535 print_debug ('Procedure OKL_EXECUTE_FORMULA_PUB.EXECUTE returned exception');
536 print_error_message ('Procedure OKL_EXECUTE_FORMULA_PUB.EXECUTE returned exception');
537 RAISE get_asset_fin_amt_failed;
538 END IF;
539
540 G_CONTRACT_ID := p_contract_id;
541 G_FIN_AST_LINE_ID := p_line_id;
542 G_ASSET_PRINCIPAL_BALANCE := x_principal_balance;
543
544 ELSE
545 x_principal_balance := G_ASSET_PRINCIPAL_BALANCE;
546 END IF;
547
548 print_debug('Asset Line Financed Amount : '|| x_principal_balance);
549
550
551 EXCEPTION
552 WHEN get_asset_fin_amt_failed THEN
553 print_error_message('get_asset_fin_amt_failed Exception raised in procedure GET_ASSET_FINANCED_AMOUNT');
554 x_return_status := OKL_API.G_RET_STS_ERROR;
555
556 WHEN OTHERS THEN
557 print_error_message('Exception raised in procedure GET_ASSET_FINANCED_AMOUNT');
558 Okl_Api.SET_MESSAGE(
559 p_app_name => G_APP_NAME,
560 p_msg_name => G_UNEXPECTED_ERROR,
561 p_token1 => G_SQLCODE_TOKEN,
562 p_token1_value => SQLCODE,
563 p_token2 => G_SQLERRM_TOKEN,
564 p_token2_value => SQLERRM);
565
566 x_return_status := OKL_API.G_RET_STS_ERROR;
567
568 END get_asset_financed_amount;
569
570 ------------------------------------------------------------------------------
571 -- PROCEDURE print_report
572 --
573 -- This procedure prints consolidated list of processed contracts
574 --
575 -- Calls:
576 -- Called By:
577 ------------------------------------------------------------------------------
578 --Bug# 13447258: Added support to display Asset Level calculations
579 --Bug# 7277007
580 PROCEDURE Print_Report(
581 p_contract_number IN VARCHAR2
582 ) IS
583
584 l_operating_unit_name HR_OPERATING_UNITS.name%TYPE;
585 l_currency_code GL_LEDGERS_PUBLIC_V.currency_code%TYPE;
586 l_index NUMBER;
587 l_rec_count NUMBER;
588 l_no_of_days NUMBER;
589 l_counter NUMBER;
590 l_contract_number OKC_K_HEADERS_B.contract_number%TYPE;
591 l_contract_number1 OKC_K_HEADERS_B.contract_number%TYPE;
592 l_contract_number2 OKC_K_HEADERS_B.contract_number%TYPE;
593 l_icb_counter VARCHAR2(30);
594 l_days_in_a_month_code OKL_K_RATE_PARAMS.days_in_a_month_code%TYPE;
595 l_days_in_a_year_code OKL_K_RATE_PARAMS.days_in_a_year_code%TYPE;
596 l_separator VARCHAR2(1);
597 l_success_count NUMBER;
598 l_rejected_count NUMBER;
599
600 --Bug# 12974796
601 l_catchup_amount NUMBER;
602
603 CURSOR operating_unit_csr IS
604 SELECT hou.name,
605 book.currency_code
606 FROM hr_operating_units hou,
607 GL_LEDGERS_PUBLIC_V book
608 WHERE hou.set_of_books_id = book.ledger_id
609 AND hou.ORGANIZATION_ID = mo_global.get_current_org_id();
610
611 --Added ORDER BY clause by bkatraga for bug 13476838
612 CURSOR var_int_params_csr (p_contract_id NUMBER) IS
613 SELECT vip.interest_calc_start_date,
614 vip.interest_calc_end_date,
615 vip.interest_rate,
616 OKL_ACCOUNTING_UTIL.format_amount(NVL(vip.principal_balance,0),chr.currency_code) principal_balance,
617 OKL_ACCOUNTING_UTIL.format_amount(NVL(vip.interest_amt,0),chr.currency_code) interest_amt,
618 vip.interest_calc_days,
619 --Bug# 12974796
620 vip.id vir_id,
621 vip.kle_id,
622 cle.name asset_number,
623 DECODE(NVL(vip.catchup_amt,0),0,' ',OKL_ACCOUNTING_UTIL.format_amount(NVL(vip.catchup_amt,0),chr.currency_code)) catchup_amt,
624 vip.catchup_settlement_code
625 FROM okl_var_int_params vip,
626 okc_k_headers_b chr,
627 okc_k_lines_v cle
628 WHERE chr.id = p_contract_id
629 AND vip.khr_id = chr.id
630 AND vip.request_id = g_request_id
631 AND vip.kle_id = cle.id
632 ORDER BY asset_number, vip.interest_calc_start_date;
633
634 --Bug# 12974796
635 CURSOR fnd_lookup_csr (p_lookup_type VARCHAR2, p_lookup_code VARCHAR2) IS
636 SELECT meaning
637 FROM fnd_lookups
638 WHERE lookup_code = p_lookup_code
639 AND lookup_type = p_lookup_type;
640
641 l_catchup_settlement_desc VARCHAR2(2000);
642 --Bug# 12974796
643
644 l_asset_number OKC_K_LINES_V.NAME%TYPE;
645 l_display_asset_number OKC_K_LINES_V.NAME%TYPE;
646
647 CURSOR var_int_params_contract_csr (p_contract_id NUMBER) IS
648 SELECT vip.interest_calc_start_date,
649 vip.interest_calc_end_date,
650 vip.interest_rate,
651 SUM(NVL(vip.principal_balance,0)) principal_balance,
652 SUM(NVL(vip.interest_amt,0)) interest_amt,
653 vip.interest_calc_days,
654 chr.currency_code
655 FROM okl_var_int_params vip,
656 okc_k_headers_b chr
657 WHERE vip.khr_id = p_contract_id
658 AND chr.id = vip.khr_id
659 AND vip.request_id = g_request_id
660 GROUP BY vip.interest_calc_start_date, vip.interest_calc_end_date, vip.interest_rate, vip.interest_calc_days, chr.currency_code
661 ORDER BY vip.interest_calc_start_date;
662
663 --Bug# 14523043
664 l_contract_label VARCHAR2(15) := 'Contract: ';
665 l_asset_label VARCHAR2(15) := 'Asset: ';
666
667 BEGIN
668
669 OPEN operating_unit_csr;
670 FETCH operating_unit_csr INTO l_operating_unit_name, l_currency_code;
671 IF ( operating_unit_csr % NOTFOUND) THEN
672 NULL;
673 END IF;
674 CLOSE operating_unit_csr;
675
676 print_line('Create Receivables Variable Rate Invoices');
677 print_line('****************************************************************************************************');
678 print_line('Program Run Date: '||trunc(sysdate));
679 print_line('Operating Unit: '||l_operating_unit_name);
680 print_line('Contract Number: '||p_contract_number);
681 print_line('To Due Date: '||trunc(g_to_date));
682 print_line('****************************************************************************************************');
683 print_line(' ');
684 print_line(' ');
685 print_line('====================================================================================================');
686 print_line('Summary');
687 print_line(' ');
688 print_line(' _________________________________________________________________________');
689 print_line('| | Number of contracts |');
690 print_line('| Interest Calculation Basis | Processed | Rejected | Total |');
691 print_line('|_______________________________|_____________|_____________|_____________|');
692
693 l_success_count := 0;
694 l_rejected_count := 0;
695 IF (g_rpt_summary_tbl.COUNT > 0) THEN
696 l_icb_counter := g_rpt_summary_tbl.FIRST;
697 LOOP
698
699 l_success_count := l_success_count + NVL(g_rpt_summary_tbl(l_icb_counter).total_contract_num_success,0);
700 l_rejected_count := l_rejected_count + NVL(g_rpt_summary_tbl(l_icb_counter).total_contract_num_error,0);
701
702 print_line('| ' || RPAD(l_icb_counter,30,' ') || '|' ||
703 LPAD(NVL(g_rpt_summary_tbl(l_icb_counter).total_contract_num_success,0),12,' ') || ' |' ||
704 LPAD(NVL(g_rpt_summary_tbl(l_icb_counter).total_contract_num_error,0),12,' ') || ' |' ||
705 LPAD((NVL(g_rpt_summary_tbl(l_icb_counter).total_contract_num_success,0) +
706 NVL(g_rpt_summary_tbl(l_icb_counter).total_contract_num_error,0)),12,' ') || ' |');
707
708 print_line('|_________________________________________________________________________|');
709
710 EXIT WHEN l_icb_counter = g_rpt_summary_tbl.LAST;
711 l_icb_counter := g_rpt_summary_tbl.next(l_icb_counter);
712 END LOOP;
713 ELSE
714 print_line('|_________________________________________________________________________|');
715 END IF;
716
717 print_line('| ' || RPAD('Total',30,' ') || '|' || LPAD(l_success_count,12,' ') || ' |' || LPAD(l_rejected_count,12,' ') || ' |');
718 print_line('|_______________________________|_____________|_____________|');
719
720 print_line(' ');
721 print_line(' ');
722 print_line('====================================================================================================');
723
724 IF (g_rpt_error_tbl.COUNT > 0) THEN
725 print_line('Rejected Contracts');
726 print_line('____________________________________________________________________________________________________');
727
728 FOR i IN g_rpt_error_tbl.FIRST..g_rpt_error_tbl.LAST LOOP
729 print_line(' ');
730 print_line(RPAD('Contract Number: '||g_rpt_error_tbl(i).contract_number,77,' ')||
731 'Product: '||g_rpt_error_tbl(i).product_name);
732
733 IF LENGTH(g_rpt_error_tbl(i).contract_number) > 60 THEN
734 print_line(LPAD(SUBSTR(g_rpt_error_tbl(i).contract_number,61),' ',17));
735 END IF;
736
737 print_line(RPAD('Interest Calculation Basis: '||g_rpt_error_tbl(i).interest_calc_basis,77,' ')||
738 'Last Interest Calculation Date: '||g_rpt_error_tbl(i).last_int_calc_date);
739 print_line(' ');
740 print_line('Error Description: ');
741
742 FOR j IN g_rpt_error_tbl(i).error_msg_tbl.FIRST..g_rpt_error_tbl(i).error_msg_tbl.LAST LOOP
743
744 l_counter := 1;
745 WHILE l_counter <= LENGTH(g_rpt_error_tbl(i).error_msg_tbl(j))
746 LOOP
747 print_line(SUBSTR(g_rpt_error_tbl(i).error_msg_tbl(j),l_counter,105));
748 l_counter := l_counter + 105;
749 END LOOP;
750
751 END LOOP;
752
753 print_line(' ');
754 print_line('____________________________________________________________________________________________________');
755 END LOOP;
756
757 print_line(' ');
758 print_line(' ');
759 print_line('====================================================================================================');
760 END IF;
761
762 IF (g_rpt_success_icb_tbl.COUNT > 0) THEN
763
764 print_line('Processed Contracts');
765 print_line(' ');
766
767 l_icb_counter := g_rpt_success_icb_tbl.FIRST;
768 LOOP
769
770 print_line('Interest Calculation Basis'||RPAD(' ',30,' ')||': '||l_icb_counter);
771 print_line(' ');
772
773 --Bug# 12974796
774 IF l_icb_counter = G_INT_CALC_BASIS_CATCHUP THEN
775
776 print_line(' '|| RPAD('_',203,'_'));
777
778 print_line('|' || RPAD('Contract Number / Asset Number',50,' ') ||
779 ' |' || RPAD('Days',15,' ') ||
780 ' |' || RPAD('Interest',11,' ') ||
781 ' |' || RPAD('Interest',11,' ') ||
782 ' |' || LPAD('Interest',10,' ') ||
783 ' |' || LPAD('Effective(%)',13,' ') ||
784 ' |' || LPAD('Principal Amount',18,' ') ||
785 ' |' || LPAD('Interest Amount',18,' ') ||
786 ' |' || LPAD('Catchup Amount',18,' ') ||
787 ' |' || RPAD('Catchup Settlement',20,' ') ||
788 ' |');
789
790 print_line('|' || RPAD(' ',50,' ') ||
791 ' |' || RPAD('Month/Year',15,' ') ||
792 ' |' || RPAD('Start Date',11,' ') ||
793 ' |' || RPAD('End Date',11,' ') ||
794 ' |' || LPAD('Calc. Days',10,' ') ||
795 ' |' || LPAD('Interest Rate',13,' ') ||
796 ' |' || LPAD(' ',18,' ') ||
797 ' |' || LPAD(' ',18,' ') ||
798 ' |' || LPAD(' ',18,' ') ||
799 ' |' || RPAD(' ',20,' ') ||
800 ' |');
801
802 print_line('|' || RPAD('_',203,'_') || '|');
803
804 ELSE
805
806 print_line(' '|| RPAD('_',161,'_'));
807
808 print_line('|' || RPAD('Contract Number / Asset Number',50,' ') ||
809 ' |' || RPAD('Days',15,' ') ||
810 ' |' || RPAD('Interest',11,' ') ||
811 ' |' || RPAD('Interest',11,' ') ||
812 ' |' || LPAD('Interest',10,' ') ||
813 ' |' || LPAD('Effective(%)',13,' ') ||
814 ' |' || LPAD('Principal Amount',18,' ') ||
815 ' |' || LPAD('Interest Amount',18,' ') ||
816 ' |');
817
818 print_line('|' || RPAD(' ',50,' ') ||
819 ' |' || RPAD('Month/Year',15,' ') ||
820 ' |' || RPAD('Start Date',11,' ') ||
821 ' |' || RPAD('End Date',11,' ') ||
822 ' |' || LPAD('Calc. Days',10,' ') ||
823 ' |' || LPAD('Interest Rate',13,' ') ||
824 ' |' || LPAD(' ',18,' ') ||
825 ' |' || LPAD(' ',18,' ') ||
826 ' |');
827
828 print_line('|' || RPAD('_',161,'_') || '|');
829
830 END IF;
831 --Bug# 12974796
832
833 FOR i IN g_rpt_success_icb_tbl(l_icb_counter).FIRST..g_rpt_success_icb_tbl(l_icb_counter).LAST LOOP
834
835 --Bug# 14523043
836 l_contract_number := l_contract_label || g_rpt_success_icb_tbl(l_icb_counter)(i).contract_number;
837 l_contract_number1 := NULL;
838 l_contract_number2 := NULL;
839 IF LENGTH(l_contract_number) > 40 THEN
840 l_contract_number1 := SUBSTR(l_contract_number,41,40);
841 l_contract_number2 := SUBSTR(l_contract_number,81,40);
842 END IF;
843
844 l_asset_number := NULL;
845 l_display_asset_number := ' ';
846 FOR var_int_param_rec IN var_int_params_csr(g_rpt_success_icb_tbl(l_icb_counter)(i).contract_id)
847 LOOP
848
849 IF (l_asset_number IS NULL OR l_asset_number <> var_int_param_rec.asset_number) THEN
850
851 IF l_icb_counter = G_INT_CALC_BASIS_CATCHUP THEN
852
853 print_line('|' || RPAD(' ',50,' ') ||
854 ' |' || RPAD(' ',15,' ') ||
855 ' |' || RPAD(' ',11,' ') ||
856 ' |' || RPAD(' ',11,' ') ||
857 ' |' || LPAD(' ',10,' ') ||
858 ' |' || LPAD(' ',13,' ') ||
859 ' |' || LPAD(' ',18,' ') ||
860 ' |' || LPAD(' ',18,' ') ||
861 ' |' || LPAD(' ',18,' ') ||
862 ' |' || RPAD(' ',20,' ') ||
863 ' |');
864 ELSE
865 print_line('|' || RPAD(' ',50,' ') ||
866 ' |' || RPAD(' ',15,' ') ||
867 ' |' || RPAD(' ',11,' ') ||
868 ' |' || RPAD(' ',11,' ') ||
869 ' |' || LPAD(' ',10,' ') ||
870 ' |' || LPAD(' ',13,' ') ||
871 ' |' || LPAD(' ',18,' ') ||
872 ' |' || LPAD(' ',18,' ') ||
873 ' |');
874 END IF;
875
876 l_asset_number := var_int_param_rec.asset_number;
877 --Bug# 14523043
878 l_display_asset_number := l_asset_label || var_int_param_rec.asset_number;
879 l_days_in_a_month_code := g_rpt_success_icb_tbl(l_icb_counter)(i).days_in_a_month_code;
880 l_days_in_a_year_code := g_rpt_success_icb_tbl(l_icb_counter)(i).days_in_a_year_code;
881 l_separator := '/';
882 ELSE
883 l_days_in_a_month_code := ' ';
884 l_days_in_a_year_code := ' ';
885 l_separator := ' ';
886 l_display_asset_number := ' ';
887 END IF;
888
889 --Bug# 12974796
890 IF l_icb_counter = G_INT_CALC_BASIS_CATCHUP THEN
891
892 l_catchup_amount := NULL;
893 l_catchup_settlement_desc := ' ' ;
894
895 IF var_int_param_rec.catchup_settlement_code = 'INTEREST_CATCHUP' THEN
896 OPEN fnd_lookup_csr('OKL_STREAM_TYPE_PURPOSE',var_int_param_rec.catchup_settlement_code);
897 FETCH fnd_lookup_csr INTO l_catchup_settlement_desc;
898 CLOSE fnd_lookup_csr;
899 ELSE
900 OPEN fnd_lookup_csr('OKL_CATCHUP_SETTLEMENT_CODE', var_int_param_rec.catchup_settlement_code);
901 FETCH fnd_lookup_csr INTO l_catchup_settlement_desc;
902 CLOSE fnd_lookup_csr;
903 END IF;
904
905 print_line('|' || RPAD(l_display_asset_number,50,' ') ||
906 ' |' || LPAD(l_days_in_a_month_code,7,' ') || l_separator || RPAD(l_days_in_a_year_code,7,' ') ||
907 ' |' || RPAD(TO_CHAR(var_int_param_rec.interest_calc_start_date,'DD-MON-RRRR'),11,' ') ||
908 ' |' || RPAD(TO_CHAR(var_int_param_rec.interest_calc_end_date,'DD-MON-RRRR'),11,' ') ||
909 ' |' || LPAD(NVL(var_int_param_rec.interest_calc_days,0),10,' ') ||
910 ' |' || LPAD(NVL(var_int_param_rec.interest_rate,0),13,' ') ||
911 ' |' || LPAD(NVL(var_int_param_rec.principal_balance,0),18,' ') ||
912 ' |' || LPAD(NVL(var_int_param_rec.interest_amt,0),18,' ') ||
913 ' |' || LPAD(NVL(var_int_param_rec.catchup_amt,0),18,' ') ||
914 ' |' || RPAD(l_catchup_settlement_desc,20,' ') ||
915 ' |');
916
917
918 ELSE
919 print_line('|' || RPAD(l_display_asset_number,50,' ') ||
920 ' |' || LPAD(l_days_in_a_month_code,7,' ') || l_separator || RPAD(l_days_in_a_year_code,7,' ') ||
921 ' |' || RPAD(TO_CHAR(var_int_param_rec.interest_calc_start_date,'DD-MON-RRRR'),11,' ') ||
922 ' |' || RPAD(TO_CHAR(var_int_param_rec.interest_calc_end_date,'DD-MON-RRRR'),11,' ') ||
923 ' |' || LPAD(NVL(var_int_param_rec.interest_calc_days,0),10,' ') ||
924 ' |' || LPAD(NVL(var_int_param_rec.interest_rate,0),13,' ') ||
925 ' |' || LPAD(NVL(var_int_param_rec.principal_balance,0),18,' ') ||
926 ' |' || LPAD(NVL(var_int_param_rec.interest_amt,0),18,' ') ||
927 ' |');
928
929 END IF;
930 --Bug# 12974796
931
932 END LOOP;
933
934 IF l_icb_counter = G_INT_CALC_BASIS_CATCHUP THEN
935
936 print_line('|' || RPAD(' ',50,' ') ||
937 ' |' || RPAD(' ',15,' ') ||
938 ' |' || RPAD(' ',11,' ') ||
939 ' |' || RPAD(' ',11,' ') ||
940 ' |' || LPAD(' ',10,' ') ||
941 ' |' || LPAD(' ',13,' ') ||
942 ' |' || LPAD(' ',18,' ') ||
943 ' |' || LPAD(' ',18,' ') ||
944 ' |' || LPAD(' ',18,' ') ||
945 ' |' || RPAD(' ',20,' ') ||
946 ' |');
947 ELSE
948 print_line('|' || RPAD(' ',50,' ') ||
949 ' |' || RPAD(' ',15,' ') ||
950 ' |' || RPAD(' ',11,' ') ||
951 ' |' || RPAD(' ',11,' ') ||
952 ' |' || LPAD(' ',10,' ') ||
953 ' |' || LPAD(' ',13,' ') ||
954 ' |' || LPAD(' ',18,' ') ||
955 ' |' || LPAD(' ',18,' ') ||
956 ' |');
957
958 END IF;
959
960 l_days_in_a_month_code := g_rpt_success_icb_tbl(l_icb_counter)(i).days_in_a_month_code;
961 l_days_in_a_year_code := g_rpt_success_icb_tbl(l_icb_counter)(i).days_in_a_year_code;
962 l_separator := '/';
963
964 FOR var_int_param_contract_rec IN var_int_params_contract_csr(g_rpt_success_icb_tbl(l_icb_counter)(i).contract_id)
965 LOOP
966
967 IF l_icb_counter = G_INT_CALC_BASIS_CATCHUP THEN
968 print_line('|' || RPAD(l_contract_number,50,' ') ||
969 ' |' || LPAD(l_days_in_a_month_code,7,' ') || l_separator || RPAD(l_days_in_a_year_code,7,' ') ||
970 ' |' || RPAD(TO_CHAR(var_int_param_contract_rec.interest_calc_start_date,'DD-MON-RRRR'),11,' ') ||
971 ' |' || RPAD(TO_CHAR(var_int_param_contract_rec.interest_calc_end_date,'DD-MON-RRRR'),11,' ') ||
972 ' |' || LPAD(NVL(var_int_param_contract_rec.interest_calc_days,0),10,' ') ||
973 ' |' || LPAD(NVL(var_int_param_contract_rec.interest_rate,0),13,' ') ||
974 ' |' || LPAD(OKL_ACCOUNTING_UTIL.format_amount(NVL(var_int_param_contract_rec.principal_balance,0),var_int_param_contract_rec.currency_code),18,' ') ||
975 ' |' || LPAD(OKL_ACCOUNTING_UTIL.format_amount(NVL(var_int_param_contract_rec.interest_amt,0),var_int_param_contract_rec.currency_code),18,' ') ||
976 ' |' || LPAD(' ',18,' ') ||
977 ' |' || RPAD(' ',20,' ') ||
978 ' |');
979
980 IF l_contract_number1 IS NOT NULL THEN
981 print_line('|' || RPAD(l_contract_number1,50,' ') ||
982 ' |' || RPAD(' ',15,' ') ||
983 ' |' || RPAD(' ',11,' ') ||
984 ' |' || RPAD(' ',11,' ') ||
985 ' |' || LPAD(' ',10,' ') ||
986 ' |' || LPAD(' ',13,' ') ||
987 ' |' || LPAD(' ',18,' ') ||
988 ' |' || LPAD(' ',18,' ') ||
989 ' |' || LPAD(' ',18,' ') ||
990 ' |' || RPAD(' ',20,' ') ||
991 ' |');
992 END IF;
993
994 IF l_contract_number2 IS NOT NULL THEN
995 print_line('|' || RPAD(l_contract_number2,50,' ') ||
996 ' |' || RPAD(' ',15,' ') ||
997 ' |' || RPAD(' ',11,' ') ||
998 ' |' || RPAD(' ',11,' ') ||
999 ' |' || LPAD(' ',10,' ') ||
1000 ' |' || LPAD(' ',13,' ') ||
1001 ' |' || LPAD(' ',18,' ') ||
1002 ' |' || LPAD(' ',18,' ') ||
1003 ' |' || LPAD(' ',18,' ') ||
1004 ' |' || RPAD(' ',20,' ') ||
1005 ' |');
1006 END IF;
1007
1008 ELSE
1009 print_line('|' || RPAD(l_contract_number,50,' ') ||
1010 ' |' || LPAD(l_days_in_a_month_code,7,' ') || l_separator || RPAD(l_days_in_a_year_code,7,' ') ||
1011 ' |' || RPAD(TO_CHAR(var_int_param_contract_rec.interest_calc_start_date,'DD-MON-RRRR'),11,' ') ||
1012 ' |' || RPAD(TO_CHAR(var_int_param_contract_rec.interest_calc_end_date,'DD-MON-RRRR'),11,' ') ||
1013 ' |' || LPAD(NVL(var_int_param_contract_rec.interest_calc_days,0),10,' ') ||
1014 ' |' || LPAD(NVL(var_int_param_contract_rec.interest_rate,0),13,' ') ||
1015 ' |' || LPAD(OKL_ACCOUNTING_UTIL.format_amount(NVL(var_int_param_contract_rec.principal_balance,0),var_int_param_contract_rec.currency_code),18,' ') ||
1016 ' |' || LPAD(OKL_ACCOUNTING_UTIL.format_amount(NVL(var_int_param_contract_rec.interest_amt,0),var_int_param_contract_rec.currency_code),18,' ') ||
1017 ' |');
1018
1019 IF l_contract_number1 IS NOT NULL THEN
1020 print_line('|' || RPAD(l_contract_number1,50,' ') ||
1021 ' |' || RPAD(' ',15,' ') ||
1022 ' |' || RPAD(' ',11,' ') ||
1023 ' |' || RPAD(' ',11,' ') ||
1024 ' |' || LPAD(' ',10,' ') ||
1025 ' |' || LPAD(' ',13,' ') ||
1026 ' |' || LPAD(' ',18,' ') ||
1027 ' |' || LPAD(' ',18,' ') ||
1028 ' |');
1029 END IF;
1030
1031 IF l_contract_number2 IS NOT NULL THEN
1032 print_line('|' || RPAD(l_contract_number2,50,' ') ||
1033 ' |' || RPAD(' ',15,' ') ||
1034 ' |' || RPAD(' ',11,' ') ||
1035 ' |' || RPAD(' ',11,' ') ||
1036 ' |' || LPAD(' ',10,' ') ||
1037 ' |' || LPAD(' ',13,' ') ||
1038 ' |' || LPAD(' ',18,' ') ||
1039 ' |' || LPAD(' ',18,' ') ||
1040 ' |');
1041 END IF;
1042
1043 END IF;
1044
1045 l_contract_number := ' ';
1046 l_contract_number1 := NULL;
1047 l_contract_number2 := NULL;
1048 l_days_in_a_month_code := ' ';
1049 l_days_in_a_year_code := ' ';
1050 l_separator := ' ';
1051
1052 END LOOP;
1053
1054 --Bug# 12974796
1055 IF l_icb_counter = G_INT_CALC_BASIS_CATCHUP THEN
1056 print_line('|' || RPAD('_',203,'_') || '|');
1057 ELSE
1058 print_line('|' || RPAD('_',161,'_') || '|');
1059 END IF;
1060 --Bug# 12974796
1061
1062 END LOOP;
1063
1064 EXIT WHEN l_icb_counter = g_rpt_success_icb_tbl.LAST;
1065 l_icb_counter := g_rpt_success_icb_tbl.next(l_icb_counter);
1066 print_line(' ');
1067 print_line(' ');
1068 END LOOP;
1069 END IF;
1070
1071 EXCEPTION
1072 WHEN OTHERS THEN
1073 NULL;
1074 END;
1075
1076 ------------------------------------------------------------------------------
1077 -- Function GET_PRINT_LEAD_DAYS to extract lead days for invoice generation
1078 ------------------------------------------------------------------------------
1079 FUNCTION get_printing_lead_days
1080 (p_khr_id NUMBER)
1081 RETURN NUMBER IS
1082
1083 -- Derive print lead days from the rules
1084 CURSOR c_lead_days(p_khr_id IN NUMBER) IS
1085 SELECT rule_information3
1086 FROM okc_rules_b rule,
1087 okc_rule_groups_b rgp
1088 WHERE rgp.id = rule.rgp_id
1089 AND rgp.dnz_chr_id = p_khr_id
1090 AND rgd_code = 'LABILL'
1091 AND rule_information_category = 'LAINVD';
1092
1093 --Derive print lead days from receivables setup
1094 CURSOR c_default_lead_days(p_khr_id IN NUMBER) IS
1095 SELECT term.printing_lead_days
1096 FROM okl_k_headers_full_v khr
1097 ,hz_customer_profiles cp
1098 ,ra_terms term
1099 WHERE khr.id = p_khr_id
1100 AND khr.bill_to_site_use_id = cp.site_use_id
1101 AND cp.standard_terms = term.term_id;
1102
1103 l_printing_lead_days NUMBER := 0;
1104 BEGIN
1105 OPEN c_lead_days(p_khr_id);
1106 FETCH c_lead_days INTO l_printing_lead_days;
1107 CLOSE c_lead_days;
1108
1109 IF (l_printing_lead_days IS NULL) THEN
1110 OPEN c_default_lead_days(p_khr_id);
1111 FETCH c_default_lead_days INTO l_printing_lead_days;
1112 CLOSE c_default_lead_days;
1113 END IF;
1114
1115 RETURN NVL(l_printing_lead_days, 0);
1116 END get_printing_lead_days;
1117
1118 ------------------------------------------------------------------------------
1119
1120 -- Start of Comments
1121 -- Created By: Ramesh Seela
1122 -- Function Name get_prorated_principal_amt_line
1123 -- Description: Derives the principal amount from the loan amount passed.
1124 -- Dependencies:
1125 -- Parameters: contract line id, stream element date, loan amount, and the currency code
1126 -- Version: 1.0
1127 -- End of Comments
1128
1129 ------------------------------------------------------------------------------
1130 FUNCTION get_prorated_prin_amt_line (
1131 p_line_id IN NUMBER,
1132 p_stream_element_date IN DATE,
1133 p_loan_amount IN NUMBER,
1134 p_currency_code IN VARCHAR2) RETURN NUMBER IS
1135
1136 Cursor stream_element_interest_csr (p_line_id NUMBER,
1137 p_stream_element_date DATE) IS
1138 SELECT nvl(sel_int_pmt.amount, 0) interest
1139 FROM okl_strm_type_v sty_int_pmt
1140 ,okl_streams_v stm_int_pmt
1141 ,okl_strm_elements_v sel_int_pmt
1142 WHERE stm_int_pmt.kle_id = p_line_id
1143 AND stm_int_pmt.id = sel_int_pmt.stm_id
1144 AND sel_int_pmt.stream_element_date = p_stream_element_date
1145 AND stm_int_pmt.sty_id = sty_int_pmt.id
1146 AND stm_int_pmt.active_yn = 'Y'
1147 AND stm_int_pmt.say_code = 'CURR'
1148 AND sty_int_pmt.stream_type_purpose IN ('INTEREST_PAYMENT', 'VARIABLE_INTEREST');
1149
1150 Cursor stream_element_principal_csr (p_line_id NUMBER,
1151 p_stream_element_date DATE) IS
1152 SELECT nvl(sel_prin_pmt.amount, 0) principal
1153 FROM okl_strm_type_v sty_prin_pmt
1154 ,okl_streams_v stm_prin_pmt
1155 ,okl_strm_elements_v sel_prin_pmt
1156 WHERE stm_prin_pmt.kle_id = p_line_id
1157 AND stm_prin_pmt.id = sel_prin_pmt.stm_id
1158 AND sel_prin_pmt.stream_element_date = p_stream_element_date
1159 AND stm_prin_pmt.sty_id = sty_prin_pmt.id
1160 AND stm_prin_pmt.active_yn = 'Y'
1161 AND stm_prin_pmt.say_code = 'CURR'
1162 AND sty_prin_pmt.stream_type_purpose = 'PRINCIPAL_PAYMENT';
1163
1164 l_interest okl_strm_elements_v.amount%TYPE;
1165 l_principal okl_strm_elements_v.amount%TYPE;
1166 l_prorated_principal okl_strm_elements_v.amount%TYPE;
1167 BEGIN
1168 OPEN stream_element_interest_csr (p_line_id, p_stream_element_date);
1169 FETCH stream_element_interest_csr INTO l_interest;
1170 IF stream_element_interest_csr%NOTFOUND THEN
1171 l_interest := 0;
1172 l_prorated_principal := p_loan_amount;
1173 RETURN l_prorated_principal;
1174 END IF;
1175 CLOSE stream_element_interest_csr;
1176
1177 OPEN stream_element_principal_csr (p_line_id, p_stream_element_date);
1178 FETCH stream_element_principal_csr INTO l_principal;
1179 IF stream_element_principal_csr%NOTFOUND THEN
1180 l_interest := 0;
1181 l_prorated_principal := p_loan_amount;
1182 RETURN l_prorated_principal;
1183 END IF;
1184 CLOSE stream_element_principal_csr;
1185
1186 IF (( l_interest <> 0 ) AND (l_principal <> 0)) THEN
1187 l_prorated_principal := (p_loan_amount * l_principal) /(l_principal + l_interest);
1188 RETURN l_prorated_principal;
1189 ELSE
1190 RETURN p_loan_amount;
1191 END IF;
1192 EXCEPTION
1193 WHEN OTHERS THEN
1194 IF ( stream_element_interest_csr%ISOPEN ) THEN
1195 CLOSE stream_element_interest_csr;
1196 END IF;
1197 IF ( stream_element_principal_csr%ISOPEN ) THEN
1198 CLOSE stream_element_interest_csr;
1199 END IF;
1200 RETURN NULL;
1201 END;
1202
1203 ------------------------------------------------------------------------------
1204
1205 -- Start of Comments
1206 -- Created By: Ramesh Seela
1207 -- Function Name get_prorated_prin_amt_header
1208 -- Description: Derives the principal amount from the loan amount passed.
1209 -- Dependencies:
1210 -- Parameters: contract id, contract line id, stream element date, loan amount, and the currency code
1211 -- Version: 1.0
1212 -- End of Comments
1213
1214 ------------------------------------------------------------------------------
1215 FUNCTION get_prorated_prin_amt_header (
1216 p_contract_id IN NUMBER,
1217 p_line_id IN NUMBER,
1218 p_stream_element_date IN DATE,
1219 p_loan_amount IN NUMBER,
1220 p_currency_code IN VARCHAR2) RETURN NUMBER IS
1221
1222 Cursor strm_elem_int_line_csr (p_line_id NUMBER,
1223 p_stream_element_date DATE) IS
1224 SELECT nvl(sel_int_pmt.amount, 0) interest
1225 FROM okl_strm_type_v sty_int_pmt
1226 ,okl_streams_v stm_int_pmt
1227 ,okl_strm_elements_v sel_int_pmt
1228 WHERE stm_int_pmt.kle_id = p_line_id
1229 AND stm_int_pmt.id = sel_int_pmt.stm_id
1230 AND sel_int_pmt.stream_element_date = p_stream_element_date
1231 AND stm_int_pmt.sty_id = sty_int_pmt.id
1232 AND stm_int_pmt.active_yn = 'Y'
1233 AND stm_int_pmt.say_code = 'CURR'
1234 AND sty_int_pmt.stream_type_purpose IN ('INTEREST_PAYMENT', 'VARIABLE_INTEREST');
1235
1236 Cursor strm_elem_prin_line_csr (p_line_id NUMBER,
1237 p_stream_element_date DATE) IS
1238 SELECT nvl(sel_prin_pmt.amount, 0) principal
1239 FROM okl_strm_type_v sty_prin_pmt
1240 ,okl_streams_v stm_prin_pmt
1241 ,okl_strm_elements_v sel_prin_pmt
1242 WHERE stm_prin_pmt.kle_id = p_line_id
1243 AND stm_prin_pmt.id = sel_prin_pmt.stm_id
1244 AND sel_prin_pmt.stream_element_date = p_stream_element_date
1245 AND stm_prin_pmt.sty_id = sty_prin_pmt.id
1246 AND stm_prin_pmt.active_yn = 'Y'
1247 AND stm_prin_pmt.say_code = 'CURR'
1248 AND sty_prin_pmt.stream_type_purpose = 'PRINCIPAL_PAYMENT';
1249
1250 Cursor strm_elem_int_hdr_csr (p_khr_id NUMBER,
1251 p_stream_element_date DATE) IS
1252 SELECT nvl(sel_int_pmt.amount, 0) interest
1253 FROM okl_strm_type_v sty_int_pmt
1254 ,okl_streams_v stm_int_pmt
1255 ,okl_strm_elements_v sel_int_pmt
1256 WHERE stm_int_pmt.khr_id = p_khr_id
1257 AND stm_int_pmt.id = sel_int_pmt.stm_id
1258 AND sel_int_pmt.stream_element_date = p_stream_element_date
1259 AND stm_int_pmt.sty_id = sty_int_pmt.id
1260 AND stm_int_pmt.active_yn = 'Y'
1261 AND stm_int_pmt.say_code = 'CURR'
1262 AND sty_int_pmt.stream_type_purpose IN ('INTEREST_PAYMENT', 'VARIABLE_INTEREST');
1263
1264 Cursor strm_elem_prin_hdr_csr ( p_khr_id NUMBER,
1265 p_stream_element_date DATE) IS
1266 SELECT nvl(sel_prin_pmt.amount, 0) principal
1267 FROM okl_strm_type_v sty_prin_pmt
1268 ,okl_streams_v stm_prin_pmt
1269 ,okl_strm_elements_v sel_prin_pmt
1270 WHERE stm_prin_pmt.khr_id = p_khr_id
1271 AND stm_prin_pmt.id = sel_prin_pmt.stm_id
1272 AND sel_prin_pmt.stream_element_date = p_stream_element_date
1273 AND stm_prin_pmt.sty_id = sty_prin_pmt.id
1274 AND stm_prin_pmt.active_yn = 'Y'
1275 AND stm_prin_pmt.say_code = 'CURR'
1276 AND sty_prin_pmt.stream_type_purpose = 'PRINCIPAL_PAYMENT';
1277
1278 l_interest okl_strm_elements_v.amount%TYPE;
1279 l_principal okl_strm_elements_v.amount%TYPE;
1280 l_prorated_principal okl_strm_elements_v.amount%TYPE;
1281 BEGIN
1282 IF (p_line_id IS NOT NULL) THEN
1283 OPEN strm_elem_int_line_csr (p_line_id, p_stream_element_date);
1284 FETCH strm_elem_int_line_csr INTO l_interest;
1285 IF strm_elem_int_line_csr%NOTFOUND THEN
1286 l_interest := 0;
1287 l_prorated_principal := p_loan_amount;
1288 RETURN l_prorated_principal;
1289 END IF;
1290 CLOSE strm_elem_int_line_csr;
1291
1292 OPEN strm_elem_prin_line_csr (p_line_id, p_stream_element_date);
1293 FETCH strm_elem_prin_line_csr INTO l_principal;
1294 IF strm_elem_prin_line_csr%NOTFOUND THEN
1295 l_interest := 0;
1296 l_prorated_principal := p_loan_amount;
1297 RETURN l_prorated_principal;
1298 END IF;
1299 CLOSE strm_elem_prin_line_csr;
1300
1301 IF (( l_interest <> 0 ) AND (l_principal <> 0)) THEN
1302 l_prorated_principal := (p_loan_amount * l_principal) /(l_principal + l_interest);
1303 RETURN l_prorated_principal;
1304 ELSE
1305 RETURN p_loan_amount;
1306 END IF;
1307 ELSE /* p_line_id is NULL */
1308 OPEN strm_elem_int_hdr_csr (p_contract_id, p_stream_element_date);
1309 FETCH strm_elem_int_hdr_csr INTO l_interest;
1310 IF strm_elem_int_hdr_csr%NOTFOUND THEN
1311 l_interest := 0;
1312 l_prorated_principal := p_loan_amount;
1313 RETURN l_prorated_principal;
1314 END IF;
1315 CLOSE strm_elem_int_hdr_csr;
1316
1317 OPEN strm_elem_prin_hdr_csr (p_contract_id, p_stream_element_date);
1318 FETCH strm_elem_prin_hdr_csr INTO l_principal;
1319 IF strm_elem_prin_hdr_csr%NOTFOUND THEN
1320 l_interest := 0;
1321 l_prorated_principal := p_loan_amount;
1322 RETURN l_prorated_principal;
1323 END IF;
1324 CLOSE strm_elem_prin_hdr_csr;
1325
1326 IF (( l_interest <> 0 ) AND (l_principal <> 0)) THEN
1327 l_prorated_principal := (p_loan_amount * l_principal) /(l_principal + l_interest);
1328 RETURN l_prorated_principal;
1329 ELSE
1330 RETURN p_loan_amount;
1331 END IF;
1332 END IF;
1333 EXCEPTION
1334 WHEN OTHERS THEN
1335 IF ( strm_elem_int_line_csr%ISOPEN ) THEN
1336 CLOSE strm_elem_int_line_csr;
1337 END IF;
1338 IF ( strm_elem_prin_line_csr%ISOPEN ) THEN
1339 CLOSE strm_elem_prin_line_csr;
1340 END IF;
1341 IF ( strm_elem_int_hdr_csr%ISOPEN ) THEN
1342 CLOSE strm_elem_int_hdr_csr;
1343 END IF;
1344 IF ( strm_elem_prin_hdr_csr%ISOPEN ) THEN
1345 CLOSE strm_elem_prin_hdr_csr;
1346 END IF;
1347
1348 RETURN NULL;
1349 END;
1350
1351 ------------------------------------------------------------------------------
1352 -- Start of Comments
1353 -- Created By: Ramesh Seela
1354 -- Procedure Name print_principal_date_range_tbl
1355 -- Description: This procedure prints all the records in the principal date range buffer
1356 --
1357 -- Dependencies:
1358 -- Parameters: .
1359 -- Version: 1.0
1360 -- End of Comments
1361
1362 ------------------------------------------------------------------------------
1363
1364 PROCEDURE print_principal_date_range_tbl ( p_principal_balance_tbl IN principal_balance_tbl_typ) IS
1365
1366 l_rec_count NUMBER;
1367 l_index NUMBER;
1368 l_counter NUMBER := 0;
1369 BEGIN
1370 l_rec_count := p_principal_balance_tbl.COUNT;
1371 IF (l_rec_count > 0) THEN
1372 l_index := p_principal_balance_tbl.FIRST;
1373 print_debug('Principal Balance Table : ');
1374 ELSE
1375 print_debug('No records exist in the table');
1376 END IF;
1377 FOR l_rcpt_tbl_counter in 1 .. l_rec_count
1378 LOOP
1379 l_counter := l_counter + 1;
1380 print_debug( 'Record : '|| l_counter );
1381 print_debug( 'From Date : '|| p_principal_balance_tbl(l_index).from_date);
1382 print_debug( 'TO Date : '|| p_principal_balance_tbl(l_index).to_date);
1383 print_debug( 'Principal Balance : '|| p_principal_balance_tbl(l_index).principal_balance);
1384
1385 l_index := p_principal_balance_tbl.NEXT(l_index);
1386 END LOOP;
1387 EXCEPTION
1388 WHEN OTHERS THEN
1389 Okl_Api.SET_MESSAGE(
1390 p_app_name => G_APP_NAME,
1391 p_msg_name => G_UNEXPECTED_ERROR,
1392 p_token1 => G_SQLCODE_TOKEN,
1393 p_token1_value => SQLCODE,
1394 p_token2 => G_SQLERRM_TOKEN,
1395 p_token2_value => SQLERRM);
1396 END;
1397
1398 ------------------------------------------------------------------------------
1399
1400 -- Start of Comments
1401 -- Created By: Ramesh Seela
1402 -- Procedure Name prin_date_range_loan_old
1403 -- Description: This procedure is used by Variable Interest Calculation program for LOANS
1404 -- Returns a PL/SQL table of records with following entries Start Date, End Date,
1405 -- and Principal Balance
1406 -- Dependencies:
1407 -- Parameters:
1408 -- Version: 1.0
1409 -- Version : 1.1 - Obsoleted this local procedure due to Billing Inline changes - Bug#5898792 - 23/2/2007
1410 -- End of Comments
1411
1412 ------------------------------------------------------------------------------
1413
1414
1415 ------------------------------------------------------------------------------
1416
1417 -- Start of Comments
1418 -- Created By: Ramesh Seela
1419 -- Procedure Name principal_date_range_var_int_loan
1420 -- Description: This procedure is used by Variable Interest Calculation program for LOANS
1421 -- Returns a PL/SQL table of records with following entries Start Date, End Date,
1422 -- and Principal Balance
1423 -- Dependencies:
1424 -- Parameters:
1425 -- Version: 1.0
1426 -- End of Comments
1427
1428 ------------------------------------------------------------------------------
1429 PROCEDURE prin_date_range_var_int_loan (
1430 p_api_version IN NUMBER,
1431 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
1432 x_return_status OUT NOCOPY VARCHAR2,
1433 x_msg_count OUT NOCOPY NUMBER,
1434 x_msg_data OUT NOCOPY VARCHAR2,
1435 p_contract_id IN NUMBER,
1436 p_line_id IN NUMBER,
1437 p_start_date IN DATE,
1438 p_due_date IN DATE,
1439 p_principal_basis IN VARCHAR2 DEFAULT NULL,
1440 x_principal_balance_tbl OUT NOCOPY principal_balance_tbl_typ) IS
1441
1442 l_api_name CONSTANT VARCHAR2(30) := 'PRIN_DATE_RANGE_VAR_INT_LOAN';
1443 l_api_version CONSTANT NUMBER := 1.0;
1444 l_principal_basis OKL_K_RATE_PARAMS.principal_basis_code%TYPE;
1445 l_effective_date DATE := SYSDATE;
1446 l_principal_balance_tbl principal_balance_tbl_typ ;
1447 l_principal_balance_tbl_tmp principal_balance_tbl_typ ;
1448 -- l_contract_start_date DATE;
1449 l_start_date DATE;
1450 l_principal_balance NUMBER;
1451 l_counter NUMBER := 0;
1452 l_counter_tmp NUMBER := 0;
1453 l_receipt_counter NUMBER := 0;
1454 -- l_revenue_recognition OKL_PRODUCT_PARAMETERS_V.revenue_recognition_method%TYPE;
1455 l_receipt_date DATE;
1456 -- l_interest_calc_basis OKL_PRODUCT_PARAMETERS_V.interest_calculation_basis%TYPE;
1457 l_receipt_tbl receipt_tbl_type;
1458 lx_receipt_tbl receipt_tbl_type;
1459 l_rcpt_tbl_count NUMBER := 0;
1460 l_rcpt_tbl_index NUMBER := 0;
1461 -- l_currency_code OKL_K_HEADERS_FULL_V.currency_code%TYPE;
1462 l_prev_rcpt_date DATE;
1463 l_current_rcpt_date DATE;
1464 l_total_rcpt_prin_amt NUMBER;
1465 l_current_rcpt_prin_amt NUMBER;
1466 l_total_rcpt_loan_amt NUMBER;
1467 l_current_rcpt_loan_amt NUMBER;
1468 l_prin_bal_strm_element_date DATE;
1469 prin_date_range_loan_failed EXCEPTION;
1470 l_previous_receipt_date DATE;
1471
1472 --Bug# 12903938
1473 j NUMBER := 0;
1474 l_stream_element_date DATE;
1475
1476 /*
1477 Cursor principal_basis_csr (p_contract_id NUMBER,
1478 p_effective_date DATE) IS
1479 SELECT nvl(principal_basis_code, 'ACTUAL')
1480 FROM okl_k_rate_params
1481 WHERE khr_id = p_contract_id
1482 AND p_effective_date BETWEEN effective_from_date and nvl(effective_to_date, p_effective_date)
1483 AND parameter_type_code = 'ACTUAL';
1484
1485 Cursor contract_csr (p_contract_id NUMBER) IS
1486 SELECT start_date, currency_code
1487 FROM okl_k_headers_full_v
1488 WHERE id = p_contract_id;
1489 */
1490 --Bug# 12903938: Modified cursor
1491 Cursor sch_asset_prin_balance_csr (p_contract_id NUMBER,
1492 p_line_id NUMBER,
1493 --Bug# 12903938
1494 p_start_date DATE,
1495 p_due_date DATE) IS
1496
1497 --Bug# 12903938
1498 SELECT sel.stream_element_date stream_element_date,
1499 sel.amount amount
1500 FROM
1501 okl_strm_elements sel
1502 ,okl_streams str
1503 ,okl_strm_type_v sty
1504 WHERE sel.stm_id = str.id
1505 AND str.khr_id = p_contract_id
1506 AND str.kle_id = p_line_id
1507 AND str.say_code = 'CURR'
1508 AND str.active_yn = 'Y'
1509 --Bug# 12903938
1510 AND sel.stream_element_date BETWEEN p_start_date AND p_due_date
1511 AND str.sty_id = sty.id
1512 AND sty.stream_type_purpose = 'PRINCIPAL_BALANCE'
1513 --Bug# 12903938
1514 ORDER BY sel.stream_element_date;
1515
1516 --Bug# 12903938: Modified cursor
1517 --Bug# 13384468: Modified cursor to exclude Financed Fees
1518 Cursor sch_ctr_prin_balance_csr (p_contract_id NUMBER,
1519 --Bug# 12903938
1520 p_start_date DATE,
1521 p_due_date DATE) IS
1522 --Bug# 12903938
1523 SELECT sel.stream_element_date stream_element_date,
1524 SUM(amount) amount
1525 FROM
1526 okl_strm_elements sel
1527 ,okl_streams str
1528 ,okl_strm_type_v sty
1529 ,okc_k_lines_b cle
1530 ,okc_statuses_b sts
1531 WHERE sel.stm_id = str.id
1532 AND str.khr_id = p_contract_id
1533 AND str.say_code = 'CURR'
1534 AND str.active_yn = 'Y'
1535 --Bug# 12903938
1536 AND sel.stream_element_date BETWEEN p_start_date AND p_due_date
1537 AND str.sty_id = sty.id
1538 AND sty.stream_type_purpose = 'PRINCIPAL_BALANCE'
1539 AND cle.chr_id = str.khr_id
1540 AND cle.dnz_chr_id = str.khr_id
1541 AND cle.id = str.kle_id
1542 AND cle.lse_id = G_FIN_LINE_LTY_ID
1543 AND cle.sts_code = sts.code
1544 AND sts.ste_code <> 'CANCELLED'
1545 --Bug# 12903938
1546 GROUP BY sel.stream_element_date
1547 ORDER BY sel.stream_element_date;
1548
1549 --Bug# 12903938: Added cursor
1550 Cursor sch_asset_prin_balance_csr1 (p_contract_id NUMBER,
1551 p_line_id NUMBER,
1552 p_start_date DATE) IS
1553 SELECT sel.stream_element_date stream_element_date,
1554 sel.amount amount
1555 FROM
1556 okl_strm_elements sel
1557 ,okl_streams str
1558 ,okl_strm_type_v sty
1559 WHERE sel.stm_id = str.id
1560 AND str.khr_id = p_contract_id
1561 AND str.kle_id = p_line_id
1562 AND str.say_code = 'CURR'
1563 AND str.active_yn = 'Y'
1564 AND sel.stream_element_date = (SELECT MAX(sel1.stream_element_date)
1565 FROM okl_strm_elements sel1
1566 WHERE sel1.stm_id = sel.stm_id
1567 AND sel1.stream_element_date < p_start_date)
1568 AND str.sty_id = sty.id
1569 AND sty.stream_type_purpose = 'PRINCIPAL_BALANCE';
1570
1571 --Bug# 12903938: Added cursor
1572
1573 Cursor sch_ctr_prin_balance_csr1 (p_contract_id NUMBER,
1574 p_start_date DATE) IS
1575 SELECT sel.stream_element_date stream_element_date,
1576 SUM(amount) amount
1577 FROM
1578 okl_strm_elements sel
1579 ,okl_streams str
1580 ,okl_strm_type_v sty
1581 ,okc_k_lines_b cle
1582 ,okc_statuses_b sts
1583 WHERE sel.stm_id = str.id
1584 AND str.khr_id = p_contract_id
1585 AND str.say_code = 'CURR'
1586 AND str.active_yn = 'Y'
1587 AND sel.stream_element_date = (SELECT MAX(sel1.stream_element_date)
1588 FROM okl_strm_elements sel1
1589 WHERE sel1.stm_id = sel.stm_id
1590 AND sel1.stream_element_date < p_start_date)
1591 AND str.sty_id = sty.id
1592 AND sty.stream_type_purpose = 'PRINCIPAL_BALANCE'
1593 AND cle.chr_id = str.khr_id
1594 AND cle.dnz_chr_id = str.khr_id
1595 AND cle.id = str.kle_id
1596 AND cle.lse_id = G_FIN_LINE_LTY_ID
1597 AND cle.sts_code = sts.code
1598 AND sts.ste_code <> 'CANCELLED'
1599 GROUP BY stream_element_date;
1600
1601 -- Begin - Billing Inline changes - Bug#5898792 - varangan - 23/2/2007
1602 --Bug# 6819044: Fetch receipt applications correctly when
1603 -- contracts have multiple asset lines and
1604 -- invoices have lines from multiple contracts
1605
1606 --Bug# 14179413: Include Credit Memos and Adjustments when calculating
1607 -- Actual Principal Balance
1608 Cursor receipt_details_csr (p_contract_id NUMBER,
1609 p_line_id NUMBER,
1610 p_start_date DATE,
1611 p_due_date DATE) IS
1612 SELECT cra.receipt_date receipt_date
1613 ,SUM(nvl(ad.amount_cr,0))- SUM(nvl(ad.amount_dr,0)) principal_pmt_rcpt_amt -- 4884843, 4872370
1614 FROM okl_txd_ar_ln_dtls_b tld,
1615 ra_customer_trx_lines_all ractrl,
1616 okl_txl_ar_inv_lns_b til,
1617 okl_trx_ar_invoices_b tai,
1618 ar_payment_schedules_all aps,
1619 ar_receivable_applications_all raa,
1620 ar_cash_receipts_all cra,
1621 okl_strm_type_b sty,
1622 ar_distributions_all ad
1623 WHERE tai.trx_status_code = 'PROCESSED'
1624 AND tai.khr_id = p_contract_id
1625 AND tld.khr_id = p_contract_id
1626 AND tld.kle_id = NVL(p_line_id, tld.kle_id)
1627 AND ractrl.customer_trx_id = aps.customer_trx_id
1628 AND raa.applied_customer_trx_id = aps.customer_trx_id
1629 AND aps.class = 'INV'
1630 AND raa.application_type = 'CASH'
1631 AND raa.status = 'APP'
1632 AND raa.display = 'Y'
1633 AND cra.receipt_date <= NVL(p_due_date, cra.receipt_date)
1634 AND raa.cash_receipt_id = cra.cash_receipt_id
1635 AND tld.sty_id = sty.id
1636 AND sty.stream_type_purpose IN ('PRINCIPAL_PAYMENT', 'UNSCHEDULED_PRINCIPAL_PAYMENT')
1637 AND to_char(tld.id) = ractrl.interface_line_attribute14
1638 AND tld.til_id_details = til.id
1639 AND til.tai_id = tai.id
1640 AND raa.receivable_application_id = ad.source_id
1641 AND ad.source_table = 'RA'
1642 AND ad.ref_customer_trx_Line_Id = ractrl.customer_trx_line_id
1643 GROUP BY cra.receipt_date
1644 UNION ALL
1645 SELECT cra.receipt_date receipt_date
1646 ,SUM(raa.line_applied) principal_pmt_rcpt_amt -- 4884843, 4872370
1647 FROM okl_txd_ar_ln_dtls_b tld,
1648 ra_customer_trx_lines_all ractrl,
1649 okl_txl_ar_inv_lns_b til,
1650 okl_trx_ar_invoices_b tai,
1651 ar_payment_schedules_all aps,
1652 ar_receivable_applications_all raa,
1653 ar_cash_receipts_all cra,
1654 okl_strm_type_b sty
1655 WHERE tai.trx_status_code = 'PROCESSED'
1656 AND tai.khr_id = p_contract_id
1657 AND tld.khr_id = p_contract_id
1658 AND tld.kle_id = NVL(p_line_id, tld.kle_id)
1659 AND ractrl.customer_trx_id = aps.customer_trx_id
1660 AND raa.applied_customer_trx_id = aps.customer_trx_id
1661 AND aps.class = 'INV'
1662 AND raa.application_type = 'CASH'
1663 AND raa.status = 'APP'
1664 AND raa.display = 'Y'
1665 AND cra.receipt_date <= NVL(p_due_date, cra.receipt_date)
1666 AND raa.cash_receipt_id = cra.cash_receipt_id
1667 AND tld.sty_id = sty.id
1668 AND sty.stream_type_purpose IN ('PRINCIPAL_PAYMENT', 'UNSCHEDULED_PRINCIPAL_PAYMENT')
1669 AND to_char(tld.id) = ractrl.interface_line_attribute14
1670 AND tld.til_id_details = til.id
1671 AND til.tai_id = tai.id
1672 AND EXISTS (SELECT 1
1673 FROM ar_distributions_all ad
1674 WHERE raa.receivable_application_id = ad.source_id
1675 AND ad.source_table = 'RA'
1676 AND ad.ref_customer_trx_Line_Id IS NULL)
1677 GROUP BY cra.receipt_date
1678 UNION ALL
1679 SELECT ocb.termination_date receipt_date,
1680 sum(ocb.termination_value_amt) principal_pmt_rcpt_amt
1681 FROM okl_contract_balances ocb
1682 WHERE ocb.khr_id = p_contract_id
1683 AND ocb.kle_id = NVL(p_line_id, kle_id)
1684 AND ocb.termination_date BETWEEN p_start_date AND p_due_date
1685 GROUP BY ocb.termination_date
1686 UNION ALL
1687 SELECT sel.stream_element_date receipt_date,
1688 sum(sel.amount) principal_pmt_rcpt_amt
1689 FROM
1690 okl_strm_elements sel
1691 ,okl_streams str
1692 ,okl_strm_type_v sty
1693 WHERE sel.stm_id = str.id
1694 AND str.khr_id = p_contract_id
1695 AND str.kle_id = NVL(p_line_id, str.kle_id)
1696 AND str.say_code = 'CURR'
1697 AND str.active_yn = 'Y'
1698 AND sel.stream_element_date BETWEEN p_start_date AND NVL(p_due_date, sel.stream_element_date)
1699 AND str.sty_id = sty.id
1700 AND sty.stream_type_purpose = 'PRINCIPAL_CATCHUP'
1701 GROUP BY sel.stream_element_date
1702 UNION ALL
1703 SELECT cm.trx_date receipt_date
1704 ,SUM(nvl(ad.amount_cr,0))- SUM(nvl(ad.amount_dr,0)) principal_pmt_rcpt_amt
1705 FROM okl_txd_ar_ln_dtls_b tld,
1706 ra_customer_trx_lines_all ractrl,
1707 okl_txl_ar_inv_lns_b til,
1708 okl_trx_ar_invoices_b tai,
1709 ar_payment_schedules_all aps,
1710 ar_receivable_applications_all raa,
1711 ra_customer_trx_all cm,
1712 okl_strm_type_b sty,
1713 ar_distributions_all ad
1714 WHERE tai.trx_status_code = 'PROCESSED'
1715 AND tai.khr_id = p_contract_id
1716 AND tld.khr_id = p_contract_id
1717 AND tld.kle_id = NVL(p_line_id, tld.kle_id)
1718 AND ractrl.customer_trx_id = aps.customer_trx_id
1719 AND raa.applied_customer_trx_id = aps.customer_trx_id
1720 AND aps.class = 'INV'
1721 AND raa.application_type = 'CM'
1722 AND raa.status = 'APP'
1723 AND raa.display = 'Y'
1724 AND cm.trx_date <= NVL(p_due_date, cm.trx_date)
1725 AND raa.customer_trx_id = cm.customer_trx_id
1726 AND tld.sty_id = sty.id
1727 AND sty.stream_type_purpose IN ('PRINCIPAL_PAYMENT', 'UNSCHEDULED_PRINCIPAL_PAYMENT')
1728 AND to_char(tld.id) = ractrl.interface_line_attribute14
1729 AND tld.til_id_details = til.id
1730 AND til.tai_id = tai.id
1731 AND raa.receivable_application_id = ad.source_id
1732 AND ad.source_table = 'RA'
1733 AND ad.ref_customer_trx_Line_Id = ractrl.customer_trx_line_id
1734 GROUP BY cm.trx_date
1735 UNION ALL
1736 SELECT cm.trx_date receipt_date
1737 ,SUM(raa.line_applied) principal_pmt_rcpt_amt -- 4884843, 4872370
1738 FROM okl_txd_ar_ln_dtls_b tld,
1739 ra_customer_trx_lines_all ractrl,
1740 okl_txl_ar_inv_lns_b til,
1741 okl_trx_ar_invoices_b tai,
1742 ar_payment_schedules_all aps,
1743 ar_receivable_applications_all raa,
1744 ra_customer_trx_all cm,
1745 okl_strm_type_b sty
1746 WHERE tai.trx_status_code = 'PROCESSED'
1747 AND tai.khr_id = p_contract_id
1748 AND tld.khr_id = p_contract_id
1749 AND tld.kle_id = NVL(p_line_id, tld.kle_id)
1750 AND ractrl.customer_trx_id = aps.customer_trx_id
1751 AND raa.applied_customer_trx_id = aps.customer_trx_id
1752 AND aps.class = 'INV'
1753 AND raa.application_type = 'CM'
1754 AND raa.status = 'APP'
1755 AND raa.display = 'Y'
1756 AND cm.trx_date <= NVL(p_due_date, cm.trx_date)
1757 AND raa.customer_trx_id = cm.customer_trx_id
1758 AND tld.sty_id = sty.id
1759 AND sty.stream_type_purpose IN ('PRINCIPAL_PAYMENT', 'UNSCHEDULED_PRINCIPAL_PAYMENT')
1760 AND to_char(tld.id) = ractrl.interface_line_attribute14
1761 AND tld.til_id_details = til.id
1762 AND til.tai_id = tai.id
1763 AND EXISTS (SELECT 1
1764 FROM ar_distributions_all ad
1765 WHERE raa.receivable_application_id = ad.source_id
1766 AND ad.source_table = 'RA'
1767 AND ad.ref_customer_trx_Line_Id IS NULL)
1768 GROUP BY cm.trx_date
1769 UNION ALL
1770 SELECT adj.apply_date receipt_date
1771 ,SUM(nvl(ad.amount_dr,0))- SUM(nvl(ad.amount_cr,0)) principal_pmt_rcpt_amt
1772 FROM okl_txd_ar_ln_dtls_b tld,
1773 ra_customer_trx_lines_all ractrl,
1774 okl_txl_ar_inv_lns_b til,
1775 okl_trx_ar_invoices_b tai,
1776 ar_payment_schedules_all aps,
1777 ar_adjustments_all adj,
1778 okl_strm_type_b sty,
1779 ar_distributions_all ad
1780 WHERE tai.trx_status_code = 'PROCESSED'
1781 AND tai.khr_id = p_contract_id
1782 AND tld.khr_id = p_contract_id
1783 AND tld.kle_id = NVL(p_line_id, tld.kle_id)
1784 AND ractrl.customer_trx_id = aps.customer_trx_id
1785 AND adj.customer_trx_id = aps.customer_trx_id
1786 AND aps.class = 'INV'
1787 AND adj.status = 'A'
1788 AND adj.apply_date <= NVL(p_due_date, adj.apply_date)
1789 AND tld.sty_id = sty.id
1790 AND sty.stream_type_purpose IN ('PRINCIPAL_PAYMENT', 'UNSCHEDULED_PRINCIPAL_PAYMENT')
1791 AND to_char(tld.id) = ractrl.interface_line_attribute14
1792 AND tld.til_id_details = til.id
1793 AND til.tai_id = tai.id
1794 AND adj.adjustment_id = ad.source_id
1795 AND ad.source_table = 'ADJ'
1796 AND ad.ref_customer_trx_Line_Id = ractrl.customer_trx_line_id
1797 GROUP BY adj.apply_date
1798 ORDER BY receipt_date asc;
1799 -- End - Billing Inline changes - Bug#5898792 - varangan - 23/2/2007
1800
1801 Cursor rcpt_dtls_actual_strm_csr (p_contract_id NUMBER,
1802 p_line_id NUMBER,
1803 p_start_date DATE,
1804 p_due_date DATE) IS
1805 SELECT sel.stream_element_date receipt_date,
1806 sum(sel.amount) principal_pmt_rcpt_amt
1807 FROM
1808 okl_strm_elements sel
1809 ,okl_streams str
1810 ,okl_strm_type_v sty
1811 WHERE sel.stm_id = str.id
1812 AND str.khr_id = p_contract_id
1813 AND str.kle_id = NVL(p_line_id, str.kle_id)
1814 AND str.say_code = 'CURR'
1815 AND str.active_yn = 'Y'
1816 AND sel.stream_element_date <= NVL(p_due_date, sel.stream_element_date)
1817 AND str.sty_id = sty.id
1818 AND sty.stream_type_purpose = 'DAILY_INTEREST_PRINCIPAL'
1819 GROUP BY sel.stream_element_date
1820 ORDER BY receipt_date asc;
1821
1822
1823 BEGIN
1824 x_return_status := OKL_API.G_RET_STS_SUCCESS;
1825
1826 print_debug('Executing procedure PRIN_DATE_RANGE_VAR_INT_LOAN using following parameters : ');
1827 print_debug(' p_contract_id : '|| p_contract_id );
1828 print_debug(' p_line_id : '|| p_line_id );
1829 print_debug(' p_start_date : '|| to_char(p_start_date));
1830 print_debug(' p_due_date : '|| to_char(p_due_date));
1831 print_debug(' p_principal_basis : '|| p_principal_basis);
1832
1833 Initialize_contract_params( p_api_version => 1.0,
1834 p_init_msg_list => OKL_API.G_FALSE,
1835 x_return_status => x_return_status,
1836 x_msg_count => x_msg_count,
1837 x_msg_data => x_msg_data,
1838 p_contract_id => p_contract_id
1839 );
1840 IF (x_return_status = Okl_Api.G_RET_STS_SUCCESS) THEN
1841 print_debug ('Procedure INITIALIZE_CONTRACT_PARAMS completed successfully');
1842 ELSIF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1843 print_debug ('Procedure INITIALIZE_CONTRACT_PARAMS returned unexpected error');
1844 print_error_message ('Procedure INITIALIZE_CONTRACT_PARAMS returned unexpected error');
1845 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1846 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1847 print_debug ('Procedure INITIALIZE_CONTRACT_PARAMS returned exception');
1848 print_error_message ('Procedure INITIALIZE_CONTRACT_PARAMS returned exception');
1849 RAISE prin_date_range_loan_failed;
1850 END IF;
1851
1852
1853 IF (p_principal_basis IS NOT NULL) THEN
1854 l_principal_basis := p_principal_basis;
1855 ELSE
1856 l_principal_basis := G_PRINCIPAL_BASIS_CODE;
1857 END IF;
1858
1859
1860 print_debug('principal basis : '||l_principal_basis);
1861
1862 print_debug('contract start date : '||G_CONTRACT_START_DATE );
1863 print_debug('currency code : '|| G_CURRENCY_CODE);
1864
1865 IF (l_principal_basis = 'ACTUAL') THEN
1866 IF (p_line_id IS NULL) THEN
1867 get_contract_financed_amount (
1868 p_api_version => 1.0,
1869 p_init_msg_list => OKL_API.G_FALSE,
1870 x_return_status => x_return_status,
1871 x_msg_count => x_msg_count,
1872 x_msg_data => x_msg_data,
1873 p_contract_id => p_contract_id,
1874 x_principal_balance => l_principal_balance);
1875
1876 IF (x_return_status = Okl_Api.G_RET_STS_SUCCESS) THEN
1877 print_debug ('Procedure GET_CONTRACT_FINANCED_AMOUNT completed successfully');
1878 ELSIF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1879 print_debug ('Procedure GET_CONTRACT_FINANCED_AMOUNT returned unexpected error');
1880 print_error_message ('Procedure GET_CONTRACT_FINANCED_AMOUNT returned unexpected error');
1881 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1882 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1883 print_debug ('Procedure GET_CONTRACT_FINANCED_AMOUNT returned exception');
1884 print_error_message ('Procedure GET_CONTRACT_FINANCED_AMOUNT returned exception');
1885 RAISE prin_date_range_loan_failed;
1886 END IF;
1887 ELSE
1888 get_asset_financed_amount (
1889 p_api_version => 1.0,
1890 p_init_msg_list => OKL_API.G_FALSE,
1891 x_return_status => x_return_status,
1892 x_msg_count => x_msg_count,
1893 x_msg_data => x_msg_data,
1894 p_contract_id => p_contract_id,
1895 p_line_id => p_line_id,
1896 x_principal_balance => l_principal_balance);
1897
1898 IF (x_return_status = Okl_Api.G_RET_STS_SUCCESS) THEN
1899 print_debug ('Procedure GET_ASSET_FINANCED_AMOUNT completed successfully');
1900 ELSIF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1901 print_debug ('Procedure GET_ASSET_FINANCED_AMOUNT returned unexpected error');
1902 print_error_message ('Procedure GET_ASSET_FINANCED_AMOUNT returned unexpected error');
1903 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1904 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1905 print_debug ('Procedure GET_ASSET_FINANCED_AMOUNT returned exception');
1906 print_error_message ('Procedure GET_ASSET_FINANCED_AMOUNT returned exception');
1907 RAISE prin_date_range_loan_failed;
1908 END IF;
1909 END IF;
1910 END IF;
1911 print_debug('principal balance : '||l_principal_balance);
1912
1913 IF (l_principal_basis = 'SCHEDULED') THEN
1914 IF (p_line_id IS NOT NULL) THEN
1915 print_debug('Stream Element Date : '|| to_char(p_start_date));
1916
1917 --Bug# 12903938: Commented out
1918 --Bug# 12903938: New code start
1919
1920 -- Fetch the first Principal Balance stream element that falls between Start Date and Due Date
1921 -- If no Principal Balance stream element found for this period or if Principal Balance stream
1922 -- element date is later than Start Date, then fetch the immediately preceeding Principal Balance
1923 -- stream element amount
1924
1925 l_stream_element_date := NULL;
1926 l_principal_balance := NULL;
1927 OPEN sch_asset_prin_balance_csr (p_contract_id, p_line_id, p_start_date, p_due_date);
1928 FETCH sch_asset_prin_balance_csr INTO l_stream_element_date, l_principal_balance;
1929 CLOSE sch_asset_prin_balance_csr;
1930
1931 IF (l_stream_element_date IS NULL) OR
1932 (l_stream_element_date IS NOT NULL AND l_stream_element_date > p_start_date) THEN
1933
1934 l_counter := l_counter + 1;
1935 l_principal_balance_tbl(l_counter).khr_id := p_contract_id;
1936 l_principal_balance_tbl(l_counter).kle_id := p_line_id;
1937 l_principal_balance_tbl(l_counter).from_date := p_start_date;
1938
1939 OPEN sch_asset_prin_balance_csr1 (p_contract_id, p_line_id, p_start_date);
1940 FETCH sch_asset_prin_balance_csr1 INTO l_stream_element_date, l_principal_balance_tbl(l_counter).principal_balance;
1941 IF (sch_asset_prin_balance_csr1%NOTFOUND) THEN
1942 CLOSE sch_asset_prin_balance_csr1;
1943 print_error_message('Scheduled Asset Principal Balance stream cursor1 did not return records for contract ID :' || p_contract_id);
1944 RAISE prin_date_range_loan_failed;
1945 END IF;
1946 CLOSE sch_asset_prin_balance_csr1;
1947
1948 END IF;
1949
1950 FOR sch_asset_prin_balance_rec IN sch_asset_prin_balance_csr(p_contract_id, p_line_id, p_start_date, p_due_date) LOOP
1951
1952 l_counter := l_counter + 1;
1953 l_principal_balance_tbl(l_counter).khr_id := p_contract_id;
1954 l_principal_balance_tbl(l_counter).kle_id := p_line_id;
1955 l_principal_balance_tbl(l_counter).from_date := sch_asset_prin_balance_rec.stream_element_date;
1956 l_principal_balance_tbl(l_counter).principal_balance := sch_asset_prin_balance_rec.amount;
1957
1958 END LOOP;
1959 --Bug# 12903938: New code end
1960
1961 ELSE
1962 print_debug('Stream Element Date : '|| to_char(p_start_date));
1963
1964 --Bug# 12903938: Commented out
1965 --Bug# 12903938: New code start
1966
1967 -- Fetch the first Principal Balance stream element that falls between Start Date and Due Date
1968 -- If no Principal Balance stream element found for this period or if Principal Balance stream
1969 -- element date is later than Start Date, then fetch the immediately preceeding Principal Balance
1970 -- stream element amount
1971
1972 l_stream_element_date := NULL;
1973 l_principal_balance := NULL;
1974 OPEN sch_ctr_prin_balance_csr (p_contract_id, p_start_date, p_due_date);
1975 FETCH sch_ctr_prin_balance_csr INTO l_stream_element_date, l_principal_balance;
1976 CLOSE sch_ctr_prin_balance_csr;
1977
1978 IF (l_stream_element_date IS NULL) OR
1979 (l_stream_element_date IS NOT NULL AND l_stream_element_date > p_start_date) THEN
1980
1981 l_counter := l_counter + 1;
1982 l_principal_balance_tbl(l_counter).khr_id := p_contract_id;
1983 l_principal_balance_tbl(l_counter).kle_id := NULL;
1984 l_principal_balance_tbl(l_counter).from_date := p_start_date;
1985
1986 OPEN sch_ctr_prin_balance_csr1 (p_contract_id, p_start_date);
1987 FETCH sch_ctr_prin_balance_csr1 INTO l_stream_element_date, l_principal_balance_tbl(l_counter).principal_balance;
1988 IF (sch_ctr_prin_balance_csr1%NOTFOUND) THEN
1989 CLOSE sch_ctr_prin_balance_csr1;
1990 print_error_message('Scheduled Contract Principal Balance stream cursor1 did not return records for contract ID :' || p_contract_id);
1991 RAISE prin_date_range_loan_failed;
1992 END IF;
1993 CLOSE sch_ctr_prin_balance_csr1;
1994
1995 END IF;
1996
1997 FOR sch_ctr_prin_balance_rec IN sch_ctr_prin_balance_csr(p_contract_id, p_start_date, p_due_date) LOOP
1998
1999 l_counter := l_counter + 1;
2000 l_principal_balance_tbl(l_counter).khr_id := p_contract_id;
2001 l_principal_balance_tbl(l_counter).kle_id := NULL;
2002 l_principal_balance_tbl(l_counter).from_date := sch_ctr_prin_balance_rec.stream_element_date;
2003 l_principal_balance_tbl(l_counter).principal_balance := sch_ctr_prin_balance_rec.amount;
2004
2005 END LOOP;
2006 --Bug# 12903938: New code end
2007
2008 END IF;
2009
2010 --Bug# 12903938: Commented out
2011 --Bug# 12903938: New code start
2012 FOR i IN l_principal_balance_tbl.FIRST..l_principal_balance_tbl.LAST LOOP
2013 j := i + 1;
2014 IF j <= l_principal_balance_tbl.LAST THEN
2015 l_principal_balance_tbl(i).to_date := l_principal_balance_tbl(j).from_date - 1;
2016 ELSE
2017 l_principal_balance_tbl(i).to_date := p_due_date;
2018 END IF;
2019 END LOOP;
2020 --Bug# 12903938: New code end
2021
2022 ELSIF (l_principal_basis = 'ACTUAL') THEN
2023
2024 print_debug('revenue recognition method : '|| G_REVENUE_RECOGNITION_METHOD);
2025 print_debug('Interest calculation basis: '|| G_INTEREST_CALCULATION_BASIS);
2026 l_counter := 0;
2027
2028 IF (G_REVENUE_RECOGNITION_METHOD <> 'ACTUAL') THEN
2029 FOR current_receipt in receipt_details_csr (p_contract_id, p_line_id, G_CONTRACT_START_DATE, p_due_date)
2030 LOOP
2031 l_counter := l_counter + 1;
2032 l_receipt_tbl(l_counter).khr_id := p_contract_id;
2033 l_receipt_tbl(l_counter).kle_id := p_line_id;
2034 l_receipt_tbl(l_counter).receipt_date := current_receipt.receipt_date;
2035 l_receipt_tbl(l_counter).principal_pmt_rcpt_amt := current_receipt.principal_pmt_rcpt_amt;
2036 l_receipt_tbl(l_counter).loan_pmt_rcpt_amt := 0;
2037 END LOOP;
2038 ELSE
2039 FOR current_receipt in rcpt_dtls_actual_strm_csr(p_contract_id, p_line_id, G_CONTRACT_START_DATE, p_due_date)
2040 LOOP
2041 l_counter := l_counter + 1;
2042 l_receipt_tbl(l_counter).khr_id := p_contract_id;
2043 l_receipt_tbl(l_counter).kle_id := p_line_id;
2044 l_receipt_tbl(l_counter).receipt_date := current_receipt.receipt_date;
2045 l_receipt_tbl(l_counter).principal_pmt_rcpt_amt := current_receipt.principal_pmt_rcpt_amt;
2046 l_receipt_tbl(l_counter).loan_pmt_rcpt_amt := 0;
2047 END LOOP;
2048 END IF;
2049
2050 -- Records before Consolidation
2051 l_counter := 0;
2052 l_rcpt_tbl_count := l_receipt_tbl.COUNT;
2053
2054 Print_debug ('Contents of Receipts table before consolidation');
2055
2056 FOR l_counter IN 1 .. l_rcpt_tbl_count
2057 LOOP
2058 Print_debug('Record Number : '||l_counter);
2059 Print_debug('Contract : '||l_receipt_tbl(l_counter).khr_id);
2060 Print_debug('Line : '||l_receipt_tbl(l_counter).kle_id);
2061 Print_debug('Receipt Date: '|| l_receipt_tbl(l_counter).receipt_date);
2062 Print_debug('Principal Payment: '|| l_receipt_tbl(l_counter).principal_pmt_rcpt_amt);
2063 Print_debug(' ');
2064 END LOOP;
2065
2066 -- Consolidate the receipts posted after contract start date
2067 l_counter := 0;
2068 l_rcpt_tbl_count := l_receipt_tbl.COUNT;
2069 l_previous_receipt_date := NULL;
2070 lx_receipt_tbl.delete;
2071
2072 FOR l_receipt_tbl_counter in 1 .. l_rcpt_tbl_count
2073 LOOP
2074 IF (l_receipt_tbl(l_receipt_tbl_counter).receipt_date <= G_CONTRACT_START_DATE) THEN
2075 l_counter := l_counter + 1;
2076 lx_receipt_tbl(l_counter).khr_id := l_receipt_tbl(l_receipt_tbl_counter).khr_id;
2077 lx_receipt_tbl(l_counter).kle_id := l_receipt_tbl(l_receipt_tbl_counter).kle_id;
2078 lx_receipt_tbl(l_counter).receipt_date := l_receipt_tbl(l_receipt_tbl_counter).receipt_date;
2079 lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt := l_receipt_tbl(l_receipt_tbl_counter).principal_pmt_rcpt_amt;
2080 lx_receipt_tbl(l_counter).loan_pmt_rcpt_amt := l_receipt_tbl(l_receipt_tbl_counter).loan_pmt_rcpt_amt;
2081 ELSE
2082 IF (l_receipt_tbl(l_receipt_tbl_counter).receipt_date = l_previous_receipt_date ) THEN
2083 lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt := lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt + l_receipt_tbl(l_receipt_tbl_counter).principal_pmt_rcpt_amt;
2084 lx_receipt_tbl(l_counter).loan_pmt_rcpt_amt := lx_receipt_tbl(l_counter).loan_pmt_rcpt_amt + l_receipt_tbl(l_receipt_tbl_counter).loan_pmt_rcpt_amt;
2085 ELSE
2086 l_counter := l_counter + 1;
2087 lx_receipt_tbl(l_counter).khr_id := l_receipt_tbl(l_receipt_tbl_counter).khr_id;
2088 lx_receipt_tbl(l_counter).kle_id := l_receipt_tbl(l_receipt_tbl_counter).kle_id;
2089 lx_receipt_tbl(l_counter).receipt_date := l_receipt_tbl(l_receipt_tbl_counter).receipt_date;
2090 lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt := l_receipt_tbl(l_receipt_tbl_counter).principal_pmt_rcpt_amt;
2091 lx_receipt_tbl(l_counter).loan_pmt_rcpt_amt := l_receipt_tbl(l_receipt_tbl_counter).loan_pmt_rcpt_amt;
2092 l_previous_receipt_date := lx_receipt_tbl(l_counter).receipt_date;
2093 END IF;
2094 END IF;
2095 END LOOP;
2096 l_receipt_tbl := lx_receipt_tbl;
2097
2098
2099 -- Records after Consolidation
2100 l_counter := 0;
2101 l_rcpt_tbl_count := l_receipt_tbl.COUNT;
2102
2103 Print_debug ('Contents of Receipts table after consolidation');
2104
2105 FOR l_counter IN 1 .. l_rcpt_tbl_count
2106 LOOP
2107 Print_debug('Record Number : '||l_counter);
2108 Print_debug('Contract : '||l_receipt_tbl(l_counter).khr_id);
2109 Print_debug('Line : '||l_receipt_tbl(l_counter).kle_id);
2110 Print_debug('Receipt Date: '|| l_receipt_tbl(l_counter).receipt_date);
2111 Print_debug('Principal Payment: '|| l_receipt_tbl(l_counter).principal_pmt_rcpt_amt);
2112 Print_debug(' ');
2113 END LOOP;
2114
2115 -- Process the receipts
2116 l_counter := 0;
2117 l_rcpt_tbl_count := l_receipt_tbl.COUNT;
2118 lx_receipt_tbl.delete;
2119
2120 FOR l_receipt_tbl_counter in 1 .. l_rcpt_tbl_count
2121 LOOP
2122 IF (l_receipt_tbl(l_receipt_tbl_counter).receipt_date <= G_CONTRACT_START_DATE) THEN
2123 l_principal_balance := l_principal_balance - l_receipt_tbl(l_receipt_tbl_counter).principal_pmt_rcpt_amt;
2124 ELSE
2125 l_counter := l_counter + 1;
2126 lx_receipt_tbl(l_counter).khr_id := l_receipt_tbl(l_receipt_tbl_counter).khr_id;
2127 lx_receipt_tbl(l_counter).kle_id := l_receipt_tbl(l_receipt_tbl_counter).kle_id;
2128 lx_receipt_tbl(l_counter).receipt_date := l_receipt_tbl(l_receipt_tbl_counter).receipt_date;
2129 lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt := l_receipt_tbl(l_receipt_tbl_counter).principal_pmt_rcpt_amt;
2130 lx_receipt_tbl(l_counter).loan_pmt_rcpt_amt := l_receipt_tbl(l_receipt_tbl_counter).loan_pmt_rcpt_amt;
2131 END IF;
2132 END LOOP;
2133
2134 l_receipt_tbl := lx_receipt_tbl;
2135 l_start_date := G_CONTRACT_START_DATE;
2136 l_counter := 0;
2137 l_rcpt_tbl_count := l_receipt_tbl.COUNT;
2138
2139 print_debug('No. of Consolidated Receipts after contract start date: '|| l_rcpt_tbl_count);
2140
2141 IF (l_rcpt_tbl_count > 0) THEN
2142 l_rcpt_tbl_index := l_receipt_tbl.FIRST;
2143 END IF;
2144
2145 FOR l_rcpt_tbl_counter in 1 .. l_rcpt_tbl_count
2146 LOOP
2147 l_counter := l_counter + 1;
2148 l_principal_balance_tbl(l_counter).khr_id := p_contract_id;
2149 IF (p_line_id IS NOT NULL) THEN
2150 l_principal_balance_tbl(l_counter).kle_id := p_line_id;
2151 ELSE
2152 l_principal_balance_tbl(l_counter).kle_id := NULL;
2153 END IF;
2154
2155 l_principal_balance_tbl(l_counter).from_date := l_start_date;
2156
2157 l_receipt_date := l_receipt_tbl(l_rcpt_tbl_index).receipt_date;
2158
2159 l_principal_balance_tbl(l_counter).to_date := l_receipt_tbl(l_rcpt_tbl_index).receipt_date - 1;
2160 l_principal_balance_tbl(l_counter).principal_balance := l_principal_balance;
2161 l_principal_balance := l_principal_balance - l_receipt_tbl(l_rcpt_tbl_index).principal_pmt_rcpt_amt;
2162 l_start_date := l_receipt_tbl(l_rcpt_tbl_index).receipt_date;
2163 l_rcpt_tbl_index := l_receipt_tbl.NEXT(l_rcpt_tbl_index);
2164
2165 END LOOP;
2166
2167 l_counter := l_counter + 1;
2168 l_principal_balance_tbl(l_counter).khr_id := p_contract_id;
2169 IF (p_line_id IS NOT NULL) THEN
2170 l_principal_balance_tbl(l_counter).kle_id := p_line_id;
2171 ELSE
2172 l_principal_balance_tbl(l_counter).kle_id := NULL;
2173 END IF;
2174 l_principal_balance_tbl(l_counter).from_date := l_start_date;
2175 l_principal_balance_tbl(l_counter).to_date := p_due_date;
2176 l_principal_balance_tbl(l_counter).principal_balance := l_principal_balance;
2177
2178 END IF;
2179
2180 l_counter := l_principal_balance_tbl.first;
2181 LOOP
2182 EXIT WHEN l_counter IS NULL;
2183 IF ((p_start_date >= l_principal_balance_tbl(l_counter).from_date AND p_start_date <= l_principal_balance_tbl(l_counter).to_date) OR
2184 (p_due_date >= l_principal_balance_tbl(l_counter).from_date AND p_due_date <= l_principal_balance_tbl(l_counter).to_date) OR
2185 (l_principal_balance_tbl(l_counter).from_date >= p_start_date AND l_principal_balance_tbl(l_counter).to_date <= p_due_date)) THEN
2186 l_counter_tmp := l_counter_tmp + 1;
2187 l_principal_balance_tbl_tmp(l_counter_tmp) := l_principal_balance_tbl(l_counter);
2188 l_principal_balance_tbl_tmp(l_counter_tmp).from_date := GREATEST(l_principal_balance_tbl_tmp(l_counter_tmp).from_date, p_start_date);
2189 l_principal_balance_tbl_tmp(l_counter_tmp).to_date := LEAST(l_principal_balance_tbl_tmp(l_counter_tmp).to_date, p_due_date);
2190 END IF;
2191 l_counter := l_principal_balance_tbl.next(l_counter);
2192 END LOOP;
2193
2194 x_principal_balance_tbl := l_principal_balance_tbl_tmp;
2195
2196 print_principal_date_range_tbl (x_principal_balance_tbl);
2197
2198 EXCEPTION
2199 WHEN prin_date_range_loan_failed THEN
2200 print_error_message('prin_date_range_loan_failed Exception Raised in procedure PRIN_DATE_RANGE_VAR_INT_LOAN ');
2201 x_return_status := OKL_API.G_RET_STS_ERROR;
2202 WHEN OTHERS THEN
2203 print_error_message('Exception Raised in procedure PRIN_DATE_RANGE_VAR_INT_LOAN ');
2204 Okl_Api.SET_MESSAGE(
2205 p_app_name => G_APP_NAME,
2206 p_msg_name => G_UNEXPECTED_ERROR,
2207 p_token1 => G_SQLCODE_TOKEN,
2208 p_token1_value => SQLCODE,
2209 p_token2 => G_SQLERRM_TOKEN,
2210 p_token2_value => SQLERRM);
2211 x_return_status := OKL_API.G_RET_STS_ERROR;
2212 END prin_date_range_var_int_loan;
2213
2214 ------------------------------------------------------------------------------
2215
2216 -- Start of Comments
2217 -- Created By: Ramesh Seela
2218 -- Procedure Name prin_date_range_var_int_rloan
2219 -- Description: This procedure is called by Variable Interest Calculation for Revolving Loans
2220 -- Returns a PL/SQL table of records with following entries Start Date, End Date,
2221 -- and Principal Balance
2222 -- Dependencies:
2223 -- Parameters: contract id, date.
2224 -- Version: 1.0
2225 -- End of Comments
2226
2227 ------------------------------------------------------------------------------
2228 PROCEDURE prin_date_range_var_int_rloan (
2229 p_api_version IN NUMBER,
2230 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
2231 x_return_status OUT NOCOPY VARCHAR2,
2232 x_msg_count OUT NOCOPY NUMBER,
2233 x_msg_data OUT NOCOPY VARCHAR2,
2234 p_contract_id IN NUMBER,
2235 p_line_id IN NUMBER,
2236 p_start_date IN DATE,
2237 p_due_date IN DATE,
2238 x_principal_balance_tbl OUT NOCOPY principal_balance_tbl_typ) IS
2239
2240 l_api_name CONSTANT VARCHAR2(30) := 'PRIN_DATE_RANGE_VAR_INT_RLOAN';
2241 l_api_version CONSTANT NUMBER := 1.0;
2242 l_principal_balance_tbl principal_balance_tbl_typ ;
2243 l_principal_balance_tbl_tmp principal_balance_tbl_typ ;
2244 -- l_contract_start_date DATE;
2245 l_start_date DATE;
2246 l_principal_balance NUMBER;
2247 l_counter NUMBER := 0;
2248 l_counter_tmp NUMBER := 0;
2249 -- l_currency_code OKL_K_HEADERS_FULL_V.currency_code%TYPE;
2250 -- l_revenue_recognition OKL_PRODUCT_PARAMETERS_V.revenue_recognition_method%TYPE;
2251 l_current_txn_date DATE;
2252 prin_date_range_rloan_failed EXCEPTION;
2253 l_receipt_tbl receipt_tbl_type;
2254 lx_receipt_tbl receipt_tbl_type;
2255 l_previous_receipt_date DATE;
2256 l_rcpt_tbl_count NUMBER := 0;
2257 l_rcpt_tbl_counter NUMBER := 0;
2258
2259 -- sjalasut, modified the cursor to have khr_id referred from
2260 -- okl_txl_ap_inv_lns_all_b
2261 Cursor pymt_rcpt_actual_var_int_csr (p_contract_id NUMBER,
2262 p_due_date DATE) IS
2263 SELECT iph.check_date txn_date,
2264 sum(iph.amount) txn_amount,
2265 'P' txn_type
2266 FROM ap_invoices_all ap_inv,
2267 okl_trx_ap_invoices_v okl_inv,
2268 ap_invoice_payment_history_v iph
2269 ,okl_cnsld_ap_invs_all cnsld
2270 ,okl_txl_ap_inv_lns_all_b okl_inv_ln
2271 ,fnd_application fnd_app
2272 WHERE okl_inv.id = okl_inv_ln.tap_id
2273 AND okl_inv_ln.khr_id = p_contract_id
2274 AND ap_inv.application_id = fnd_app.application_id
2275 AND fnd_app.application_short_name = 'OKL'
2276 AND okl_inv_ln.cnsld_ap_inv_id = cnsld.cnsld_ap_inv_id
2277 AND cnsld.cnsld_ap_inv_id = to_number(ap_inv.reference_key1)
2278 AND okl_inv.funding_type_code = 'BORROWER_PAYMENT'
2279 AND ap_inv.invoice_id = iph.invoice_id
2280 AND iph.check_date <= NVL(p_due_date, iph.check_date)
2281 GROUP BY iph.check_date
2282 UNION
2283 SELECT sel.stream_element_date txn_date,
2284 sum(sel.amount) txn_amount,
2285 'R' txn_type
2286 FROM
2287 okl_strm_elements sel
2288 ,okl_streams str
2289 ,okl_strm_type_v sty
2290 WHERE sel.stm_id = str.id
2291 AND str.khr_id = p_contract_id
2292 AND str.say_code = 'CURR'
2293 AND str.active_yn = 'Y'
2294 AND sel.stream_element_date <= NVL(p_due_date, sel.stream_element_date)
2295 AND str.sty_id = sty.id
2296 AND sty.stream_type_purpose = 'DAILY_INTEREST_PRINCIPAL'
2297 GROUP BY sel.stream_element_date
2298 ORDER BY txn_date asc, txn_type;
2299
2300 -- sjalasut, modified the cursor to have khr_id referred from okl_txl_Ap_inv_lns_all_b
2301 -- Begin - Billing Inline changes - Bug#5898792 - varangan - 23/2/2007
2302
2303 --Bug# 14179413: Include Credit Memos and Adjustments when calculating
2304 -- Actual Principal Balance
2305 Cursor pymt_rcpt_est_bill_var_int_csr (p_contract_id NUMBER,
2306 p_due_date DATE) IS
2307 SELECT iph.check_date txn_date,
2308 sum(iph.amount) txn_amount,
2309 'P' txn_type
2310 FROM ap_invoices_all ap_inv,
2311 okl_trx_ap_invoices_v okl_inv,
2312 ap_invoice_payment_history_v iph
2313 ,okl_cnsld_ap_invs_all cnsld
2314 ,okl_txl_ap_inv_lns_all_b okl_inv_ln
2315 ,fnd_application fnd_app
2316 WHERE okl_inv.id = okl_inv_ln.tap_id
2317 AND okl_inv_ln.khr_id = p_contract_id
2318 AND ap_inv.application_id = fnd_app.application_id
2319 AND fnd_app.application_short_name = 'OKL'
2320 AND okl_inv_ln.cnsld_ap_inv_id = cnsld.cnsld_ap_inv_id
2321 AND cnsld.cnsld_ap_inv_id = to_number(ap_inv.reference_key1)
2322 AND okl_inv.funding_type_code = 'BORROWER_PAYMENT'
2323 AND ap_inv.invoice_id = iph.invoice_id
2324 AND iph.check_date <= NVL(p_due_date, iph.check_date)
2325 GROUP BY iph.check_date
2326 UNION ALL
2327 SELECT cra.receipt_date txn_date,
2328 sum(raa.line_applied) txn_amount, -- 4884843, 4872370
2329 'R' txn_type
2330 FROM okl_bpd_tld_ar_lines_v tld,
2331 ar_payment_schedules_all aps,
2332 ar_receivable_applications_all raa,
2333 ar_cash_receipts_all cra,
2334 okl_strm_type_v sty
2335 WHERE tld.trx_status_code = 'PROCESSED'
2336 AND tld.khr_id = NVL(p_contract_id, tld.khr_id)
2337 AND tld.customer_trx_id = aps.customer_trx_id
2338 AND raa.applied_customer_trx_id = aps.customer_trx_id
2339 AND aps.class = 'INV'
2340 AND raa.application_type = 'CASH'
2341 AND raa.status = 'APP'
2342 AND raa.display = 'Y'
2343 AND cra.receipt_date <= NVL(p_due_date, cra.receipt_date)
2344 AND raa.cash_receipt_id = cra.cash_receipt_id
2345 AND tld.sty_id = sty.id
2346 AND sty.stream_type_purpose = 'UNSCHEDULED_PRINCIPAL_PAYMENT'
2347 GROUP BY cra.receipt_date
2348 UNION ALL
2349 SELECT cm.trx_date txn_date,
2350 sum(raa.line_applied) txn_amount,
2351 'R' txn_type
2352 FROM okl_bpd_tld_ar_lines_v tld,
2353 ar_payment_schedules_all aps,
2354 ar_receivable_applications_all raa,
2355 ra_customer_trx_all cm,
2356 okl_strm_type_v sty
2357 WHERE tld.trx_status_code = 'PROCESSED'
2358 AND tld.khr_id = NVL(p_contract_id, tld.khr_id)
2359 AND tld.customer_trx_id = aps.customer_trx_id
2360 AND raa.applied_customer_trx_id = aps.customer_trx_id
2361 AND aps.class = 'INV'
2362 AND raa.application_type = 'CM'
2363 AND raa.status = 'APP'
2364 AND raa.display = 'Y'
2365 AND cm.trx_date <= NVL(p_due_date, cm.trx_date)
2366 AND raa.customer_trx_id = cm.customer_trx_id
2367 AND tld.sty_id = sty.id
2368 AND sty.stream_type_purpose = 'UNSCHEDULED_PRINCIPAL_PAYMENT'
2369 GROUP BY cm.trx_date
2370 UNION ALL
2371 SELECT adj.apply_date txn_date,
2372 sum( -1 * NVL(adj.amount,0)) txn_amount,
2373 'R' txn_type
2374 FROM okl_bpd_tld_ar_lines_v tld,
2375 ar_payment_schedules_all aps,
2376 ar_adjustments_all adj,
2377 okl_strm_type_v sty
2378 WHERE tld.trx_status_code = 'PROCESSED'
2379 AND tld.khr_id = NVL(p_contract_id, tld.khr_id)
2380 AND tld.customer_trx_id = aps.customer_trx_id
2381 AND adj.customer_trx_id = aps.customer_trx_id
2382 AND aps.class = 'INV'
2383 AND adj.status = 'A'
2384 AND adj.apply_date <= NVL(p_due_date, adj.apply_date)
2385 AND tld.sty_id = sty.id
2386 AND sty.stream_type_purpose = 'UNSCHEDULED_PRINCIPAL_PAYMENT'
2387 GROUP BY adj.apply_date
2388 ORDER BY txn_date asc, txn_type;
2389 -- End - Billing Inline changes - Bug#5898792 - varangan - 23/2/2007
2390
2391
2392 BEGIN
2393 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2394
2395 print_debug('Executing procedure PRIN_DATE_RANGE_VAR_INT_RLOAN using following parameters : ');
2396 print_debug(' p_contract_id : '|| p_contract_id);
2397 print_debug(' p_line_id : '|| p_line_id );
2398 print_debug(' p_due_date : '|| to_char(p_due_date));
2399
2400 Initialize_contract_params( p_api_version => 1.0,
2401 p_init_msg_list => OKL_API.G_FALSE,
2402 x_return_status => x_return_status,
2403 x_msg_count => x_msg_count,
2404 x_msg_data => x_msg_data,
2405 p_contract_id => p_contract_id
2406 );
2407 IF (x_return_status = Okl_Api.G_RET_STS_SUCCESS) THEN
2408 print_debug ('Procedure INITIALIZE_CONTRACT_PARAMS completed successfully');
2409 ELSIF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2410 print_debug ('Procedure INITIALIZE_CONTRACT_PARAMS returned unexpected error');
2411 print_error_message ('Procedure INITIALIZE_CONTRACT_PARAMS returned unexpected error');
2412 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2413 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2414 print_debug ('Procedure INITIALIZE_CONTRACT_PARAMS returned exception');
2415 print_error_message ('Procedure INITIALIZE_CONTRACT_PARAMS returned exception');
2416 RAISE prin_date_range_rloan_failed;
2417 END IF;
2418
2419 print_debug('contract start date : '||G_CONTRACT_START_DATE );
2420 print_debug('currency code : '|| G_CURRENCY_CODE);
2421 print_debug ('Revenue Recognition method : '|| G_REVENUE_RECOGNITION_METHOD);
2422
2423 l_counter := 0;
2424
2425 IF (G_REVENUE_RECOGNITION_METHOD = 'ACTUAL') THEN
2426 FOR current_txn in pymt_rcpt_actual_var_int_csr (p_contract_id, p_due_date)
2427 LOOP
2428 l_counter := l_counter + 1;
2429 l_receipt_tbl(l_counter).khr_id := p_contract_id;
2430 l_receipt_tbl(l_counter).kle_id := NULL;
2431 l_receipt_tbl(l_counter).receipt_date := current_txn.txn_date;
2432 l_receipt_tbl(l_counter).transaction_type := current_txn.txn_type;
2433 l_receipt_tbl(l_counter).principal_pmt_rcpt_amt := current_txn.txn_amount;
2434 l_receipt_tbl(l_counter).loan_pmt_rcpt_amt := 0;
2435 END LOOP;
2436 ELSE
2437 FOR current_txn in pymt_rcpt_est_bill_var_int_csr (p_contract_id, p_due_date)
2438 LOOP
2439 l_counter := l_counter + 1;
2440 l_receipt_tbl(l_counter).khr_id := p_contract_id;
2441 l_receipt_tbl(l_counter).kle_id := NULL;
2442 l_receipt_tbl(l_counter).receipt_date := current_txn.txn_date;
2443 l_receipt_tbl(l_counter).transaction_type := current_txn.txn_type;
2444 l_receipt_tbl(l_counter).principal_pmt_rcpt_amt := current_txn.txn_amount;
2445 l_receipt_tbl(l_counter).loan_pmt_rcpt_amt := 0;
2446 END LOOP;
2447 END IF;
2448
2449 l_counter := 0;
2450 l_rcpt_tbl_count := l_receipt_tbl.COUNT;
2451
2452 Print_debug ('Contents of Receipts table before consolidation');
2453
2454 FOR l_counter IN 1 .. l_rcpt_tbl_count
2455 LOOP
2456 Print_debug('Record Number : '||l_counter);
2457 Print_debug('Contract : '||l_receipt_tbl(l_counter).khr_id);
2458 Print_debug('Receipt Date: '|| l_receipt_tbl(l_counter).receipt_date);
2459 Print_debug('Type : '|| l_receipt_tbl(l_counter).transaction_type);
2460 Print_debug('Principal Payment: '|| l_receipt_tbl(l_counter).principal_pmt_rcpt_amt);
2461 Print_debug(' ');
2462 END LOOP;
2463
2464 -- Consolidate the receipts posted after contract start date
2465 l_counter := 0;
2466 l_rcpt_tbl_count := l_receipt_tbl.COUNT;
2467 l_previous_receipt_date := NULL;
2468 lx_receipt_tbl.delete;
2469
2470 FOR l_receipt_tbl_counter in 1 .. l_rcpt_tbl_count
2471 LOOP
2472 IF (l_receipt_tbl(l_receipt_tbl_counter).receipt_date <= G_CONTRACT_START_DATE) THEN
2473 l_counter := 1;
2474 lx_receipt_tbl(l_counter).khr_id := l_receipt_tbl(l_receipt_tbl_counter).khr_id;
2475 lx_receipt_tbl(l_counter).receipt_date := G_CONTRACT_START_DATE;
2476 IF (l_receipt_tbl(l_receipt_tbl_counter).transaction_type = 'P') THEN
2477 IF (nvl(lx_receipt_tbl(l_counter).transaction_type, 'P') = 'P') THEN
2478 lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt := nvl(lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt,0) + l_receipt_tbl(l_receipt_tbl_counter).principal_pmt_rcpt_amt;
2479 ELSE
2480 lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt := -1 * nvl(lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt,0) + l_receipt_tbl(l_receipt_tbl_counter).principal_pmt_rcpt_amt;
2481 END IF;
2482 ELSE -- 'R'
2483 IF (nvl(lx_receipt_tbl(l_counter).transaction_type, 'P') = 'P') THEN
2484 lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt := nvl(lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt,0) - l_receipt_tbl(l_receipt_tbl_counter).principal_pmt_rcpt_amt;
2485 ELSE
2486 lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt := -1 * nvl(lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt,0) - l_receipt_tbl(l_receipt_tbl_counter).principal_pmt_rcpt_amt;
2487 END IF;
2488 END IF;
2489
2490 IF (lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt > 0) THEN
2491 lx_receipt_tbl(l_counter).transaction_type := 'P';
2492 ELSE
2493 lx_receipt_tbl(l_counter).transaction_type := 'R';
2494 lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt := abs(lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt);
2495 END IF;
2496 ELSE -- receipt date > contract start date
2497 IF (l_receipt_tbl(l_receipt_tbl_counter).receipt_date = l_previous_receipt_date ) THEN
2498 IF (l_receipt_tbl(l_receipt_tbl_counter).transaction_type = 'P') THEN
2499 IF (nvl(lx_receipt_tbl(l_counter).transaction_type, 'P') = 'P') THEN
2500 lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt := nvl(lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt,0) + l_receipt_tbl(l_receipt_tbl_counter).principal_pmt_rcpt_amt;
2501 ELSE
2502 lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt := -1 * nvl(lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt,0) + l_receipt_tbl(l_receipt_tbl_counter).principal_pmt_rcpt_amt;
2503 END IF;
2504 ELSE -- transaction type = 'R'
2505 IF (nvl(lx_receipt_tbl(l_counter).transaction_type, 'P') = 'P') THEN
2506 lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt := nvl(lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt,0) - l_receipt_tbl(l_receipt_tbl_counter).principal_pmt_rcpt_amt;
2507 ELSE
2508 lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt := -1 * nvl(lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt,0) - l_receipt_tbl(l_receipt_tbl_counter).principal_pmt_rcpt_amt;
2509 END IF;
2510 END IF;
2511
2512 IF (lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt > 0) THEN
2513 lx_receipt_tbl(l_counter).transaction_type := 'P';
2514 ELSE
2515 lx_receipt_tbl(l_counter).transaction_type := 'R';
2516 lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt := abs(lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt);
2517 END IF;
2518 ELSE -- receipt date <> previous receipt date
2519 l_counter := l_counter + 1;
2520 lx_receipt_tbl(l_counter).khr_id := l_receipt_tbl(l_receipt_tbl_counter).khr_id;
2521 lx_receipt_tbl(l_counter).receipt_date := l_receipt_tbl(l_receipt_tbl_counter).receipt_date;
2522 lx_receipt_tbl(l_counter).transaction_type := l_receipt_tbl(l_receipt_tbl_counter).transaction_type;
2523 lx_receipt_tbl(l_counter).principal_pmt_rcpt_amt := l_receipt_tbl(l_receipt_tbl_counter).principal_pmt_rcpt_amt;
2524 l_previous_receipt_date := lx_receipt_tbl(l_counter).receipt_date;
2525 END IF;
2526 END IF;
2527 END LOOP;
2528 l_receipt_tbl := lx_receipt_tbl;
2529
2530 l_counter := 0;
2531 l_rcpt_tbl_count := l_receipt_tbl.COUNT;
2532
2533 Print_debug ('Contents of Receipts table after consolidation');
2534
2535 FOR l_counter IN 1 .. l_rcpt_tbl_count
2536 LOOP
2537 Print_debug('Record Number : '||l_counter);
2538 Print_debug('Contract : '||l_receipt_tbl(l_counter).khr_id);
2539 Print_debug('Receipt Date: '|| l_receipt_tbl(l_counter).receipt_date);
2540 Print_debug('Type : '|| l_receipt_tbl(l_counter).transaction_type);
2541 Print_debug('Principal Payment: '|| l_receipt_tbl(l_counter).principal_pmt_rcpt_amt);
2542 Print_debug(' ');
2543 END LOOP;
2544
2545 l_counter := 0;
2546 l_start_date := G_CONTRACT_START_DATE;
2547 l_principal_balance := 0;
2548 l_current_txn_date := NULL;
2549 l_rcpt_tbl_count := l_receipt_tbl.COUNT;
2550
2551 FOR l_rcpt_tbl_counter IN 1 .. l_rcpt_tbl_count
2552 LOOP
2553 l_current_txn_date := l_receipt_tbl(l_rcpt_tbl_counter).receipt_date;
2554 IF (l_current_txn_date > G_CONTRACT_START_DATE) THEN
2555 l_counter := l_counter + 1;
2556 -- l_current_txn_date := l_receipt_tbl(l_rcpt_tbl_counter).receipt_date;
2557 l_principal_balance_tbl(l_counter).khr_id := p_contract_id;
2558 l_principal_balance_tbl(l_counter).kle_id := NULL;
2559 l_principal_balance_tbl(l_counter).from_date := l_start_date;
2560 l_principal_balance_tbl(l_counter).to_date := l_current_txn_date - 1;
2561 l_principal_balance_tbl(l_counter).principal_balance := l_principal_balance;
2562 l_start_date := l_current_txn_date;
2563
2564 IF (l_receipt_tbl(l_rcpt_tbl_counter).transaction_type = 'P') THEN
2565 l_principal_balance := l_principal_balance + l_receipt_tbl(l_rcpt_tbl_counter).principal_pmt_rcpt_amt;
2566 ELSE
2567 l_principal_balance := l_principal_balance - l_receipt_tbl(l_rcpt_tbl_counter).principal_pmt_rcpt_amt;
2568 END IF;
2569 print_debug ('l_principal_balance_tbl(l_counter).khr_id : '|| l_principal_balance_tbl(l_counter).khr_id);
2570 print_debug ('l_principal_balance_tbl(l_counter).from_date : '|| l_principal_balance_tbl(l_counter).from_date);
2571 print_debug ('l_principal_balance_tbl(l_counter).to_date : '|| l_principal_balance_tbl(l_counter).to_date);
2572 print_debug ('l_principal_balance_tbl(l_counter).principal_balance : '|| l_principal_balance_tbl(l_counter).principal_balance);
2573
2574 ELSE
2575 l_principal_balance := l_principal_balance + l_receipt_tbl(l_rcpt_tbl_counter).principal_pmt_rcpt_amt;
2576 END IF;
2577
2578 END LOOP;
2579
2580 l_counter := l_counter + 1;
2581 l_principal_balance_tbl(l_counter).khr_id := p_contract_id;
2582 l_principal_balance_tbl(l_counter).kle_id := NULL;
2583 l_principal_balance_tbl(l_counter).from_date := l_start_date;
2584 l_principal_balance_tbl(l_counter).to_date := p_due_date;
2585 l_principal_balance_tbl(l_counter).principal_balance := l_principal_balance;
2586
2587 print_debug ('l_principal_balance_tbl(l_counter).khr_id : '|| l_principal_balance_tbl(l_counter).khr_id);
2588 print_debug ('l_principal_balance_tbl(l_counter).from_date : '|| l_principal_balance_tbl(l_counter).from_date);
2589 print_debug ('l_principal_balance_tbl(l_counter).to_date : '|| l_principal_balance_tbl(l_counter).to_date);
2590 print_debug ('l_principal_balance_tbl(l_counter).principal_balance : '|| l_principal_balance_tbl(l_counter).principal_balance);
2591
2592
2593 l_counter := l_principal_balance_tbl.first;
2594 LOOP
2595 EXIT WHEN l_counter IS NULL;
2596 IF ((p_start_date >= l_principal_balance_tbl(l_counter).from_date AND p_start_date <= l_principal_balance_tbl(l_counter).to_date) OR
2597 (p_due_date >= l_principal_balance_tbl(l_counter).from_date AND p_due_date <= l_principal_balance_tbl(l_counter).to_date) OR
2598 (l_principal_balance_tbl(l_counter).from_date >= p_start_date AND l_principal_balance_tbl(l_counter).to_date <= p_due_date)) THEN
2599 l_counter_tmp := l_counter_tmp + 1;
2600 l_principal_balance_tbl_tmp(l_counter_tmp) := l_principal_balance_tbl(l_counter);
2601 l_principal_balance_tbl_tmp(l_counter_tmp).from_date := GREATEST(l_principal_balance_tbl_tmp(l_counter_tmp).from_date, p_start_date);
2602 l_principal_balance_tbl_tmp(l_counter_tmp).to_date := LEAST(l_principal_balance_tbl_tmp(l_counter_tmp).to_date, p_due_date);
2603 END IF;
2604 l_counter := l_principal_balance_tbl.next(l_counter);
2605 END LOOP;
2606
2607 x_principal_balance_tbl := l_principal_balance_tbl_tmp;
2608
2609 print_principal_date_range_tbl (x_principal_balance_tbl);
2610
2611 EXCEPTION
2612 WHEN prin_date_range_rloan_failed THEN
2613 print_error_message('print_date_range_rloan_failed Exception raised inside procedure PRIN_DATE_RANGE_VAR_INT_RLOAN');
2614 x_return_status := OKL_API.G_RET_STS_ERROR;
2615
2616 WHEN OTHERS THEN
2617 print_error_message('Exception raised inside procedure PRIN_DATE_RANGE_VAR_INT_RLOAN');
2618 Okl_Api.SET_MESSAGE(
2619 p_app_name => G_APP_NAME,
2620 p_msg_name => G_UNEXPECTED_ERROR,
2621 p_token1 => G_SQLCODE_TOKEN,
2622 p_token1_value => SQLCODE,
2623 p_token2 => G_SQLERRM_TOKEN,
2624 p_token2_value => SQLERRM);
2625
2626 x_return_status := OKL_API.G_RET_STS_ERROR;
2627
2628 END prin_date_range_var_int_rloan;
2629
2630 ------------------------------------------------------------------------------
2631
2632 -- Start of Comments
2633 -- Created By: Ramesh Seela
2634 -- Procedure Name prin_date_range_var_int_rl_old
2635 -- Description: This procedure is called by Variable Interest Calculation for Revolving Loans
2636 -- Returns a PL/SQL table of records with following entries Start Date, End Date,
2637 -- and Principal Balance
2638 -- Dependencies:
2639 -- Parameters: contract id, date.
2640 -- Version: 1.0
2641 -- 2.0 - Obsoleted this local procedure as part of Billing Inline changes- Bug#5898792 - varangan - 23/2/2007
2642 -- End of Comments
2643
2644 ------------------------------------------------------------------------------
2645
2646 ------------------------------------------------------------------------------
2647 -- Start of Comments
2648 -- Created By: Ramesh Seela
2649 -- Procedure Name prin_date_range_var_rate_ctr
2650 -- Description: This procedure is called by Variable Interest Calculation
2651 -- Returns a PL/SQL table of records with following entries Start Date, End Date,
2652 -- and Principal Balance
2653 -- Dependencies:
2654 -- Parameters:
2655 -- Version: 1.0
2656 -- End of Comments
2657
2658 ------------------------------------------------------------------------------
2659 PROCEDURE prin_date_range_var_rate_ctr (
2660 p_api_version IN NUMBER,
2661 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
2662 x_return_status OUT NOCOPY VARCHAR2,
2663 x_msg_count OUT NOCOPY NUMBER,
2664 x_msg_data OUT NOCOPY VARCHAR2,
2665 p_contract_id IN NUMBER,
2666 p_line_id IN NUMBER,
2667 p_start_date IN DATE,
2668 p_due_date IN DATE,
2669 p_principal_basis IN VARCHAR2 DEFAULT NULL,
2670 x_principal_balance_tbl OUT NOCOPY principal_balance_tbl_typ) IS
2671
2672 l_api_name CONSTANT VARCHAR2(30) := 'PRIN_DATE_RANGE_VAR_RATE_CTR';
2673 l_api_version CONSTANT NUMBER := 1.0;
2674 r_principal_balance_tbl principal_balance_tbl_typ ;
2675 l_deal_type OKL_K_HEADERS_FULL_V.deal_type%TYPE;
2676 prin_date_range_failed EXCEPTION;
2677
2678
2679 Cursor contract_csr (p_contract_id NUMBER) IS
2680 SELECT deal_type
2681 FROM okl_k_headers_full_v
2682 WHERE id = p_contract_id;
2683
2684
2685 BEGIN
2686 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2687
2688 print_debug('Executing procedure PRIN_DATE_RANGE_VAR_RATE_CTR using following parameters : ');
2689 print_debug(' p_contract_id : '|| p_contract_id );
2690 print_debug(' p_line_id : '|| p_line_id );
2691 print_debug(' p_start_date : '|| to_char(p_start_date));
2692 print_debug(' p_due_date : '|| to_char(p_due_date));
2693
2694 print_debug(' G_CONTRACT_ID : '|| G_CONTRACT_ID );
2695
2696 IF (p_contract_id = G_CONTRACT_ID) THEN
2697 l_deal_type := G_DEAL_TYPE;
2698 ELSE
2699 OPEN contract_csr (p_contract_id);
2700 FETCH contract_csr INTO l_deal_type;
2701 IF (contract_csr%NOTFOUND) THEN
2702 CLOSE contract_csr;
2703 print_error_message('Contract cursor did not return records for contract ID :' || p_contract_id);
2704 RAISE prin_date_range_failed;
2705 END IF;
2706 CLOSE contract_csr;
2707 END IF;
2708
2709 print_debug('deal type : '|| l_deal_type);
2710
2711 IF (l_deal_type = 'LOAN') THEN
2712 prin_date_range_var_int_loan (
2713 p_api_version => 1.0,
2714 p_init_msg_list => OKL_API.G_FALSE,
2715 x_return_status => x_return_status,
2716 x_msg_count => x_msg_count,
2717 x_msg_data => x_msg_data,
2718 p_contract_id => p_contract_id,
2719 p_line_id => p_line_id,
2720 p_start_date => p_start_date,
2721 p_due_date => p_due_date,
2722 p_principal_basis => p_principal_basis,
2723 x_principal_balance_tbl => r_principal_balance_tbl);
2724
2725 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2726 print_error_message('Unexpected error raised in call to PRIN_DATE_RANGE_VAR_INT_LOAN');
2727 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2728 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2729 print_error_message('Error raised in call to PRIN_DATE_RANGE_VAR_INT_LOAN');
2730 RAISE prin_date_range_failed;
2731 END IF;
2732
2733 ELSIF (l_deal_type = 'LOAN-REVOLVING') THEN
2734 prin_date_range_var_int_rloan (
2735 p_api_version => 1.0,
2736 p_init_msg_list => OKL_API.G_FALSE,
2737 x_return_status => x_return_status,
2738 x_msg_count => x_msg_count,
2739 x_msg_data => x_msg_data,
2740 p_contract_id => p_contract_id,
2741 p_line_id => p_line_id,
2742 p_start_date => p_start_date,
2743 p_due_date => p_due_date,
2744 x_principal_balance_tbl => r_principal_balance_tbl);
2745 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2746 print_error_message('Unexpected error raised in call to PRIN_DATE_RANGE_VAR_INT_RLOAN');
2747 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2748 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2749 print_error_message('Error raised in call to PRIN_DATE_RANGE_VAR_INT_LOAN');
2750 RAISE prin_date_range_failed;
2751 END IF;
2752 END IF;
2753
2754 x_principal_balance_tbl := r_principal_balance_tbl;
2755
2756 EXCEPTION
2757 WHEN prin_date_range_failed THEN
2758 print_error_message('prin_date_range_failed Exception raised in procedure PRIN_DATE_RANGE_VAR_INT_CTR');
2759 x_return_status := OKL_API.G_RET_STS_ERROR;
2760
2761 WHEN OTHERS THEN
2762 print_error_message('Exception raised in procedure PRIN_DATE_RANGE_VAR_INT_CTR');
2763 Okl_Api.SET_MESSAGE(
2764 p_app_name => G_APP_NAME,
2765 p_msg_name => G_UNEXPECTED_ERROR,
2766 p_token1 => G_SQLCODE_TOKEN,
2767 p_token1_value => SQLCODE,
2768 p_token2 => G_SQLERRM_TOKEN,
2769 p_token2_value => SQLERRM);
2770
2771 x_return_status := OKL_API.G_RET_STS_ERROR;
2772
2773 END prin_date_range_var_rate_ctr;
2774 ------------------------------------------------------------------------------
2775 FUNCTION get_last_int_calc_date(p_khr_id IN NUMBER) RETURN DATE IS
2776 l_ret_date DATE := NULL;
2777
2778 CURSOR c_int_calc_date_csr(cp_khr_id NUMBER) IS SELECT (max(sel.stream_element_date) - 1) last_interest_calc_date
2779 FROM okl_streams stm,
2780 okl_strm_elements sel,
2781 okl_strm_type_b sty
2782 WHERE stm.khr_id = cp_khr_id
2783 AND stm.id = sel.stm_id
2784 AND stm.sty_id = sty.id
2785 AND (sty.stream_type_purpose = 'DAILY_INTEREST_PRINCIPAL' OR sty.stream_type_purpose = 'DAILY_INTEREST_INTEREST');
2786
2787 CURSOR c_khr_start_date_csr(cp_khr_id NUMBER) IS SELECT start_date - 1
2788 FROM okc_k_headers_b
2789 WHERE id = cp_khr_id;
2790
2791 BEGIN
2792 OPEN c_int_calc_date_csr(p_khr_id);
2793 FETCH c_int_calc_date_csr INTO l_ret_date;
2794 CLOSE c_int_calc_date_csr;
2795
2796 IF (l_ret_date IS NULL) THEN
2797 OPEN c_khr_start_date_csr(p_khr_id);
2798 FETCH c_khr_start_date_csr INTO l_ret_date;
2799 CLOSE c_khr_start_date_csr;
2800 END IF;
2801
2802 RETURN l_ret_date;
2803 END;
2804 ------------------------------------------------------------------------------
2805
2806 /*
2807 Added by bkatraga for bug 13693187
2808 This function returns the next period start date
2809 */
2810 FUNCTION get_next_period_start_date(p_khr_id IN NUMBER,
2811 p_start_date IN DATE) RETURN DATE IS
2812
2813 CURSOR l_payment_line_csr(p_contract_id NUMBER, p_cle_id NUMBER) IS
2814 SELECT Fnd_Date.canonical_to_date(rulb2.RULE_INFORMATION2) start_date,
2815 rulb2.RULE_INFORMATION3 level_periods,
2816 rulb2.RULE_INFORMATION7 stub_days,
2817 rulb2.RULE_INFORMATION8 stub_amount,
2818 rulb2.object1_id1 frequency
2819 FROM okc_k_lines_b cleb,
2820 okc_rule_groups_b rgpb,
2821 okc_rules_b rulb,
2822 okc_rules_b rulb2,
2823 okl_strm_type_b styb
2824 WHERE rgpb.chr_id IS NULL
2825 AND rgpb.dnz_chr_id = cleb.dnz_chr_id
2826 AND rgpb.cle_id = cleb.id
2827 AND cleb.id = p_cle_id
2828 AND cleb.dnz_chr_id = p_contract_id
2829 AND rgpb.rgd_code = 'LALEVL'
2830 AND rulb.rgp_id = rgpb.id
2831 AND rulb.rule_information_category = 'LASLH'
2832 AND TO_CHAR(styb.id) = rulb.object1_id1
2833 AND rulb2.object2_id1 = TO_CHAR(rulb.id)
2834 AND rulb2.rgp_id = rgpb.id
2835 AND rulb2.rule_information_category = 'LASLL'
2836 AND styb.STREAM_TYPE_PURPOSE IN ('RENT', 'LOAN_PAYMENT', 'PRINCIPAL_PAYMENT')
2837 ORDER BY start_date;
2838
2839 CURSOR l_assets_csr(p_contract_id NUMBER) IS
2840 SELECT cle.id
2841 FROM okc_k_lines_v cle,
2842 okc_line_styles_b sty,
2843 okc_statuses_b sts
2844 WHERE cle.lse_id = sty.id
2845 AND cle.dnz_chr_id = p_contract_id
2846 AND sty.lty_code = 'FREE_FORM1'
2847 AND cle.sts_code = sts.code
2848 AND sts.ste_code NOT IN ( 'HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
2849
2850 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2851 l_next_start_date DATE := p_start_date;
2852 l_sel_date DATE;
2853 l_recurrence_date DATE := NULL;
2854 l_frequency okc_rules_b.object1_id1%type;
2855 l_adder_months NUMBER := 0;
2856 l_cle_id OKC_K_LINES_B.ID%TYPE;
2857
2858 BEGIN
2859 --Fetch the first asset
2860 OPEN l_assets_csr(p_khr_id);
2861 FETCH l_assets_csr INTO l_cle_id;
2862 CLOSE l_assets_csr;
2863
2864 FOR l_payment_line in l_payment_line_csr(p_khr_id, l_cle_id)
2865 LOOP
2866 IF(l_recurrence_date IS NULL) THEN
2867 l_recurrence_date := l_payment_line.start_date;
2868 END IF;
2869
2870 IF(l_payment_line.stub_days IS NOT NULL) THEN
2871 l_recurrence_date := NULL;
2872 l_sel_date := l_payment_line.start_date + to_number(l_payment_line.stub_days);
2873 IF(l_sel_date > p_start_date) THEN
2874 l_next_start_date := l_sel_date;
2875 RETURN l_next_start_date;
2876 END IF;
2877 ELSIF(l_payment_line.level_periods IS NOT NULL) THEN
2878 l_frequency := l_payment_line.frequency;
2879 IF(l_frequency = 'M') THEN
2880 l_adder_months := 1;
2881 ELSIF(l_frequency = 'Q') THEN
2882 l_adder_months := 3;
2883 ELSIF(l_frequency = 'S') THEN
2884 l_adder_months := 6;
2885 ELSIF(l_frequency = 'A') THEN
2886 l_adder_months := 12;
2887 END IF;
2888
2889 FOR i IN 1..l_payment_line.level_periods
2890 LOOP
2891 OKL_STREAM_GENERATOR_PVT.get_sel_date(p_start_date => l_payment_line.start_date,
2892 p_advance_or_arrears => 'ARREARS',
2893 p_periods_after => i,
2894 p_months_per_period => l_adder_months,
2895 x_date => l_sel_date,
2896 x_return_status => l_return_status,
2897 p_recurrence_date => l_recurrence_date,
2898 p_arrears_pay_dates_option => 'FIRST_DAY_OF_NEXT_PERIOD');
2899 IF(l_return_status <> OKL_API.G_RET_STS_SUCCESS)THEN
2900 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2901 END IF;
2902
2903 IF(l_sel_date > p_start_date) THEN
2904 l_next_start_date := l_sel_date;
2905 RETURN l_next_start_date;
2906 END IF;
2907 END LOOP;
2908 END IF;
2909 END LOOP;
2910 RETURN l_next_start_date;
2911 EXCEPTION
2912 WHEN OTHERS THEN
2913 RETURN NULL;
2914 END get_next_period_start_date;
2915
2916
2917 PROCEDURE interest_date_range (
2918 p_api_version IN NUMBER,
2919 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
2920 x_return_status OUT NOCOPY VARCHAR2,
2921 x_msg_count OUT NOCOPY NUMBER,
2922 x_msg_data OUT NOCOPY VARCHAR2,
2923 p_contract_id IN NUMBER,
2924 p_start_date IN DATE,
2925 p_end_date IN DATE,
2926 p_process_flag IN VARCHAR2,
2927 p_rate_param_rowid IN ROWID,
2928 x_interest_rate_tbl OUT NOCOPY interest_rate_tbl_type) IS
2929
2930 -----------------------------------------------------------------
2931 -- Declare Process Variable
2932 -----------------------------------------------------------------
2933 l_api_name CONSTANT VARCHAR2(30) := 'interest_date_range';
2934 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2935
2936 l_interest_rate_tbl interest_rate_tbl_type;
2937 l_start_date DATE;
2938 l_end_date DATE;
2939 l_int_tbl_row NUMBER := 0;
2940 --specifies whether the rate is to be derived from interest index
2941 l_derive_rate_flag VARCHAR2(1) := 'Y';
2942
2943 l_rate_change_start_date DATE := NULL;
2944 l_next_rate_change_date DATE := NULL;
2945
2946 --Added by bkatraga for bug 13258144
2947 l_int_start_date DATE;
2948 l_int_end_date DATE;
2949 --end bkatraga
2950
2951 --Bug# 13247845
2952 l_first_rate_chg_start_date DATE;
2953
2954 ----------------------------------------------------------------
2955 -- Declare variable interest parameter cursor
2956 -----------------------------------------------------------------
2957 --dkagrawa changed query to use okl_prod_qlty_val_uv than okl_product_parameter_v for performance
2958 CURSOR c_int_param(cp_rate_param_rowid ROWID) IS
2959 SELECT krp.interest_index_id
2960 , NVL(krp.base_rate, 0) base_rate
2961 , NVL(krp.interest_start_date, chr.start_date) interest_start_date
2962 , NVL(krp.adder_rate, 0) adder_rate
2963 , NVL(krp.maximum_rate, 9999) maximum_rate
2964 , NVL(krp.minimum_rate, 0) minimum_rate
2965 , krp.rate_delay_code
2966 , NVL(krp.rate_delay_frequency, 0) rate_delay_frequency
2967 , NVL(krp.rate_change_start_date, chr.start_date) rate_change_start_date
2968 , NVL(krp.rate_change_frequency_code, 'DAILY') rate_change_frequency_code
2969 , NVL(krp.rate_change_value, 0) rate_change_value
2970 --if the calling process is Daily Interest, get the last int cal date from
2971 --the Daily Interest streams
2972 --for a REAMORT contract, if the calling process is Reamortization (initiate_request)
2973 --and it is being run for the first time for the contract, the last interest calc date
2974 --defaults to the start date (as there may be a previously derived value due to the fact
2975 --that the Reamort may not have completed in its entirety)
2976 --if it is called from any other process for a REAMORT contract, the last int calc date
2977 --defaults to start date minus 1
2978 --for all other types of contracts, the last int calc date
2979 --defaults to start date minus 1
2980 , decode(p_process_flag, 'DAILY_INTEREST', get_last_int_calc_date(chr.id),
2981 decode(ppm.quality_val, 'REAMORT', NVL(khr.date_last_interim_interest_cal,
2982 decode(OKL_VARIABLE_INTEREST_PVT.G_CALC_METHOD_CODE, 'REAMORT', chr.start_date, chr.start_date-1)), NVL(khr.date_last_interim_interest_cal, chr.start_date - 1))) date_last_interim_interest_cal
2983 , chr.start_date contract_start_date
2984 , chr.end_date contract_end_date
2985 , chr.id khr_id
2986 , ppm.quality_val interest_calculation_basis
2987 , NULL pay_freq
2988 FROM okl_k_rate_params krp
2989 , okl_k_headers khr
2990 , okc_k_headers_b chr
2991 , okl_prod_qlty_val_uv ppm
2992 WHERE krp.rowid = cp_rate_param_rowid
2993 AND krp.khr_id = khr.id
2994 AND khr.id = chr.id
2995 --AND TRUNC(SYSDATE) BETWEEN krp.effective_from_date and NVL(krp.effective_to_date, trunc(SYSDATE))
2996 --AND krp.parameter_type_code = 'ACTUAL'
2997 AND khr.pdt_id = ppm.pdt_id
2998 AND ppm.quality_name = 'INTEREST_CALCULATION_BASIS';
2999
3000 TYPE int_param_tbl_type IS TABLE OF c_int_param%ROWTYPE INDEX BY BINARY_INTEGER;
3001
3002 l_int_param_tbl int_param_tbl_type;
3003 l_param_tbl_row NUMBER := 0;
3004 x_eff_int_tbl interest_rate_tbl_type;
3005 l_eff_int_row NUMBER := 0;
3006
3007 ----------------------------------------------------------------
3008 -- Declare interest rate cursor
3009 -- used to derive interest rates from the interest parameter
3010 -- when interest dates are less than last int calc date
3011 -----------------------------------------------------------------
3012 CURSOR c_param_rate(cp_khr_id NUMBER, cp_start_date DATE, cp_end_date DATE, cp_process_flag IN VARCHAR2) IS
3013 SELECT DISTINCT
3014 vip.interest_rate VALUE,
3015 GREATEST(trunc(cp_start_date),interest_calc_start_date) VALID_FROM,
3016 LEAST(trunc(cp_end_date),NVL(interest_calc_end_date, trunc(sysdate))) VALID_UNTIL
3017 FROM okl_var_int_params vip
3018 WHERE vip.khr_id = cp_khr_id
3019 AND (cp_start_date BETWEEN vip.interest_calc_start_date AND nvl(vip.interest_calc_end_date, trunc(cp_start_date))
3020 OR (cp_end_date BETWEEN vip.interest_calc_start_date AND nvl(vip.interest_calc_end_date, trunc(cp_end_date)))
3021 OR (vip.interest_calc_start_date >= cp_start_date AND nvl(vip.interest_calc_end_date, trunc(sysdate + 9999)) <= cp_end_date) )
3022 AND vip.calc_method_code = NVL(cp_process_flag, vip.calc_method_code)
3023 AND vip.valid_yn = 'Y'
3024 ORDER BY VALID_FROM;
3025
3026 ----------------------------------------------------------------
3027 -- Declare payment frequency cursor
3028 -----------------------------------------------------------------
3029 CURSOR c_pay_freq(cp_khr_id NUMBER) IS
3030 select sll_rulb.object1_id1 pay_freq
3031 from okc_rules_b sll_rulb,
3032 okc_rules_b slh_rulb,
3033 okl_strm_type_b styb,
3034 okc_rule_groups_b rgpb
3035 where sll_rulb.rgp_id = rgpb.id
3036 and sll_rulb.rule_information_category = 'LASLL'
3037 and sll_rulb.dnz_chr_id = rgpb.dnz_chr_id
3038 and sll_rulb.object2_id1 = to_char(slh_rulb.id)
3039 and slh_rulb.rgp_id = rgpb.id
3040 and slh_rulb.rule_information_category = 'LASLH'
3041 and slh_rulb.dnz_chr_id = rgpb.dnz_chr_id
3042 and styb.id = slh_rulb.object1_id1
3043 and styb.stream_type_purpose IN ('RENT', 'PRINCIPAL_PAYMENT')
3044 and rgpb.dnz_chr_id = cp_khr_id
3045 and rgpb.rgd_code = 'LALEVL'
3046 order by sll_rulb.rule_information1;
3047
3048 /*Returns the interest rate from the interest index for inputted index id and date range*/
3049 PROCEDURE get_eff_int_rate(p_start_date IN DATE, p_end_date IN DATE, p_int_param_tbl IN int_param_tbl_type, x_eff_int_tbl IN OUT NOCOPY interest_rate_tbl_type) IS
3050
3051 --Bug# 14639522: If End Date is not defined on the Interest Rate Index then use the latest of sysdate or cp_end_date
3052 CURSOR c_int_rate(cp_index_id NUMBER, cp_start_date DATE, cp_end_date DATE) IS
3053 SELECT ive.value VALUE,
3054 GREATEST(trunc(cp_start_date),datetime_valid) VALID_FROM,
3055 LEAST(trunc(cp_end_date),NVL(datetime_invalid, GREATEST(trunc(sysdate),trunc(cp_end_date)))) VALID_UNTIL
3056 FROM okl_indices idx,
3057 okl_index_values ive
3058 WHERE idx.id = cp_index_id
3059 AND idx.id = ive.idx_id
3060 AND (cp_start_date BETWEEN ive.datetime_valid AND nvl(ive.datetime_invalid, trunc(cp_start_date))
3061 OR (cp_end_date BETWEEN ive.datetime_valid AND nvl(ive.datetime_invalid, trunc(cp_end_date)))
3062 OR (ive.datetime_valid >= cp_start_date AND nvl(ive.datetime_invalid, trunc(sysdate + 9999)) <= cp_end_date) )
3063 ORDER BY VALID_FROM;
3064
3065 l_int_param_row NUMBER := 0;
3066 l_eff_int_row NUMBER := 0;
3067 l_int_param_tbl int_param_tbl_type;
3068 l_eff_int_tbl interest_rate_tbl_type;
3069
3070 --Bug# 14557128: Moved code from interest_date_range
3071 --Bug# 14528742
3072 l_icx_date_format VARCHAR2(240);
3073
3074 CURSOR c_last_interest_calc_date(p_khr_id NUMBER) IS
3075 SELECT NVL(khr.date_last_interim_interest_cal, chr.start_date) last_interest_calc_date
3076 FROM okc_k_headers_b chr,
3077 okl_k_headers khr
3078 WHERE chr.id = p_khr_id
3079 AND khr.id = chr.id;
3080
3081 l_last_interest_calc_date okl_k_headers.date_last_interim_interest_cal%TYPE;
3082 --Bug# 14528742
3083
3084 BEGIN
3085 l_int_param_tbl := p_int_param_tbl;
3086 l_eff_int_tbl.delete;
3087
3088 l_int_param_row := l_int_param_tbl.first;
3089 l_eff_int_row := 0;
3090
3091 print_debug('in procedure get_eff_int_rate for date range : ' || p_start_date || ' - ' || p_end_date);
3092 WHILE l_int_param_row IS NOT NULL
3093 LOOP
3094
3095 FOR cur_int_rate IN c_int_rate(l_int_param_tbl(l_int_param_row).interest_index_id,
3096 p_start_date,
3097 p_end_date) LOOP
3098 l_eff_int_row := l_eff_int_row + 1;
3099 l_eff_int_tbl(l_eff_int_row).from_date := cur_int_rate.valid_from;
3100 l_eff_int_tbl(l_eff_int_row).to_date := cur_int_rate.valid_until;
3101 l_eff_int_tbl(l_eff_int_row).rate := cur_int_rate.value + l_int_param_tbl(l_int_param_row).adder_rate;
3102 l_eff_int_tbl(l_eff_int_row).derived_flag := 'Y';
3103 l_eff_int_tbl(l_eff_int_row).apply_tolerance := 'Y';
3104 END LOOP;
3105
3106 --Bug# 14557128: Moved code from interest_date_range
3107 --Bug# 14528742
3108 -- Raise error is Interest Rates have not been defined for any period
3109 IF (l_eff_int_tbl.COUNT = 0 OR l_eff_int_tbl(l_eff_int_row).to_date < p_end_date) THEN
3110
3111 l_last_interest_calc_date := NULL;
3112 OPEN c_last_interest_calc_date(p_khr_id => G_CONTRACT_ID);
3113 FETCH c_last_interest_calc_date INTO l_last_interest_calc_date;
3114 CLOSE c_last_interest_calc_date;
3115
3116 l_icx_date_format := NVL(fnd_profile.value('ICX_DATE_FORMAT_MASK'),'DD-MON-RRRR');
3117
3118 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
3119 p_msg_name => 'OKL_VAR_INT_RATE_NOT_DEF',
3120 p_token1 => 'START_DATE',
3121 p_token1_value => TO_CHAR(p_start_date,l_icx_date_format),
3122 p_token2 => 'END_DATE',
3123 p_token2_value => TO_CHAR(p_end_date,l_icx_date_format),
3124 p_token3 => 'LAST_INTEREST_CALC_DATE',
3125 p_token3_value => TO_CHAR(l_last_interest_calc_date,l_icx_date_format));
3126
3127 print_error_message('Interest Rates not defined - Error raised in procedure get_eff_int_rate');
3128 RAISE Okl_Api.G_EXCEPTION_ERROR;
3129 END IF;
3130 --Bug# 14528742
3131
3132 l_int_param_row := l_int_param_tbl.next(l_int_param_row);
3133 END LOOP;
3134
3135 print_debug('exit procedure get_eff_int_rate');
3136 x_eff_int_tbl := l_eff_int_tbl;
3137 EXCEPTION
3138
3139 --Bug# 14528742
3140 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3141 RAISE;
3142
3143 WHEN OTHERS THEN
3144 OKL_API.SET_MESSAGE( p_app_name => G_APP_NAME
3145 ,p_msg_name => G_UNEXPECTED_ERROR
3146 ,p_token1 => G_SQLCODE_TOKEN
3147 ,p_token1_value => SQLCODE
3148 ,p_token2 => G_SQLERRM_TOKEN
3149 ,p_token2_value => SQLERRM);
3150 END get_eff_int_rate;
3151
3152 /*returnd the next applicable rate change start date for a contract*/
3153 FUNCTION get_next_rate_change_date(p_rate_change_start_date DATE, p_int_param_tbl IN int_param_tbl_type) RETURN DATE IS
3154 l_int_param_tbl int_param_tbl_type;
3155 l_int_param_tbl_row NUMBER := 0;
3156 l_next_rate_change_date DATE;
3157 l_period_start_date DATE;
3158 l_period_end_date DATE;
3159 l_adder_months NUMBER;
3160 x_return_status VARCHAR2(1);
3161 x_msg_count NUMBER;
3162 x_msg_data VARCHAR2(4000);
3163 --Added by bkatraga for bug 12996272
3164 l_arrears_pay_dates_option okl_st_gen_tmpt_sets_all.isg_arrears_pay_dates_option%type;
3165 BEGIN
3166 print_debug('in function get_next_rate_change_date');
3167 print_debug('input parameters :-');
3168 print_debug('p_rate_change_start_date : ' || p_rate_change_start_date);
3169
3170 l_int_param_tbl := p_int_param_tbl;
3171 l_int_param_tbl_row := l_int_param_tbl.first;
3172
3173 IF (l_int_param_tbl(l_int_param_tbl_row).rate_change_frequency_code = 'MONTHLY') THEN
3174 l_next_rate_change_date := add_months(p_rate_change_start_date, 1);
3175 ELSIF (l_int_param_tbl(l_int_param_tbl_row).rate_change_frequency_code = 'QUARTERLY') THEN
3176 l_next_rate_change_date := add_months(p_rate_change_start_date, 3);
3177 --Added by bkatraga for bug 13476838
3178 ELSIF (l_int_param_tbl(l_int_param_tbl_row).rate_change_frequency_code = 'SEMI_ANNUAL') THEN
3179 l_next_rate_change_date := add_months(p_rate_change_start_date, 6);
3180 ELSIF (l_int_param_tbl(l_int_param_tbl_row).rate_change_frequency_code = 'ANNUAL') THEN
3181 l_next_rate_change_date := add_months(p_rate_change_start_date, 12);
3182 --Bug# 13247845
3183 ELSIF (l_int_param_tbl(l_int_param_tbl_row).rate_change_frequency_code = 'ANNIVERSARY_DATE') THEN
3184 l_next_rate_change_date := add_months(l_int_param_tbl(l_int_param_tbl_row).contract_start_date, 12);
3185 LOOP
3186 EXIT WHEN l_next_rate_change_date > p_rate_change_start_date;
3187 l_next_rate_change_date := add_months(l_next_rate_change_date, 12);
3188 END LOOP;
3189 ELSE -- (l_int_param_tbl(l_int_param_row).rate_change_frequency_code = 'BILLING_DATE' THEN
3190 IF (l_int_param_tbl(l_int_param_tbl_row).interest_calculation_basis = 'FLOAT') THEN
3191 OKL_STREAM_GENERATOR_PVT.get_next_billing_date(
3192 p_api_version => p_api_version,
3193 p_init_msg_list => p_init_msg_list,
3194 p_khr_id => l_int_param_tbl(l_int_param_tbl_row).khr_id,
3195 p_billing_date => p_rate_change_start_date,
3196 x_next_due_date => l_next_rate_change_date,
3197 x_next_period_start_date => l_period_start_date,
3198 x_next_period_end_date => l_period_end_date,
3199 x_return_status => x_return_status,
3200 x_msg_count => x_msg_count,
3201 x_msg_data => x_msg_data);
3202
3203 --Added by bkatraga for bug 12996272
3204 OKL_ISG_UTILS_PVT.get_arrears_pay_dates_option(
3205 p_khr_id => l_int_param_tbl(l_int_param_tbl_row).khr_id,
3206 x_arrears_pay_dates_option => l_arrears_pay_dates_option,
3207 x_return_status => x_return_status);
3208
3209 IF l_arrears_pay_dates_option = 'LAST_DAY_OF_PERIOD' THEN
3210 l_next_rate_change_date := l_next_rate_change_date + 1;
3211 END IF;
3212 --end bkatraga for bug 12996272
3213 --Added ESLIF condition by bkatraga for bug 13693187
3214 ELSIF(l_int_param_tbl(l_int_param_tbl_row).interest_calculation_basis = 'REAMORT') THEN
3215 l_next_rate_change_date := get_next_period_start_date(l_int_param_tbl(l_int_param_tbl_row).khr_id, p_rate_change_start_date);
3216 ELSE
3217 IF (l_int_param_tbl(l_int_param_tbl_row).pay_freq = 'M') THEN
3218 l_adder_months := 1;
3219 ELSIF (l_int_param_tbl(l_int_param_tbl_row).pay_freq = 'Q') THEN
3220 l_adder_months := 3;
3221 ELSIF (l_int_param_tbl(l_int_param_tbl_row).pay_freq = 'S') THEN
3222 l_adder_months := 6;
3223 ELSIF (l_int_param_tbl(l_int_param_tbl_row).pay_freq = 'A') THEN
3224 l_adder_months := 12;
3225 ELSE
3226 l_adder_months := 1;
3227 END IF;
3228 l_next_rate_change_date := add_months(p_rate_change_start_date, l_adder_months);
3229 END IF;
3230 END IF;
3231
3232 print_debug('l_next_rate_change_date : ' || l_next_rate_change_date);
3233 print_debug('exiting function get_next_rate_change_date');
3234 RETURN l_next_rate_change_date;
3235 EXCEPTION
3236 WHEN OTHERS THEN
3237 OKL_API.SET_MESSAGE( p_app_name => G_APP_NAME
3238 ,p_msg_name => G_UNEXPECTED_ERROR
3239 ,p_token1 => G_SQLCODE_TOKEN
3240 ,p_token1_value => SQLCODE
3241 ,p_token2 => G_SQLERRM_TOKEN
3242 ,p_token2_value => SQLERRM);
3243
3244 RETURN l_next_rate_change_date;
3245 END get_next_rate_change_date;
3246
3247 /*check the derived interest rates for tolerance*/
3248 PROCEDURE apply_tolerance(p_int_param_tbl IN int_param_tbl_type, p_eff_int_tbl IN interest_rate_tbl_type, x_eff_int_with_tol_tbl IN OUT NOCOPY interest_rate_tbl_type) IS
3249 l_int_param_row NUMBER := 0;
3250 l_eff_int_row NUMBER := 0;
3251 l_eff_int_with_tol_row NUMBER := 0;
3252 l_prev_eff_int_with_tol_row NUMBER := 0;
3253
3254 l_int_param_tbl int_param_tbl_type;
3255 l_eff_int_tbl interest_rate_tbl_type;
3256 l_eff_int_with_tol_tbl interest_rate_tbl_type;
3257
3258 l_first_row BOOLEAN := TRUE;
3259 l_compare_to_base BOOLEAN := TRUE;
3260 l_compare_to_min_max BOOLEAN := TRUE;
3261
3262 cursor c_most_recent_rate(cp_khr_id IN NUMBER, cp_from_date IN DATE, cp_process_flag IN VARCHAR2) IS
3263 select interest_calc_start_date
3264 ,interest_calc_end_date
3265 ,interest_rate
3266 from (select vip.interest_calc_start_date
3267 ,vip.interest_calc_end_date
3268 ,vip.interest_rate
3269 from okl_var_int_params vip
3270 where vip.khr_id = cp_khr_id
3271 and vip.interest_calc_end_date < cp_from_date
3272 AND vip.calc_method_code = NVL(cp_process_flag, vip.calc_method_code)
3273 AND vip.valid_yn = 'Y'
3274 order by vip.interest_calc_end_date desc)
3275 where rownum = 1;
3276
3277 BEGIN
3278 print_debug('in procedure apply_tolerance');
3279 l_int_param_tbl := p_int_param_tbl;
3280 l_eff_int_tbl := p_eff_int_tbl;
3281 l_eff_int_with_tol_tbl.delete;
3282
3283 l_int_param_row := l_int_param_tbl.first;
3284 l_eff_int_row := l_eff_int_tbl.first;
3285 WHILE l_eff_int_row IS NOT NULL
3286 LOOP
3287 l_prev_eff_int_with_tol_row := l_eff_int_with_tol_row;
3288 l_eff_int_with_tol_row := l_eff_int_with_tol_row + 1;
3289 l_eff_int_with_tol_tbl(l_eff_int_with_tol_row) := l_eff_int_tbl(l_eff_int_row);
3290 l_compare_to_min_max := TRUE;
3291
3292 IF (l_eff_int_tbl(l_eff_int_row).apply_tolerance = 'Y') THEN
3293 --first row in the effective interest rates table
3294 IF (l_first_row) THEN
3295 --comparing to most recent rate
3296 FOR cur_most_recent_rate IN c_most_recent_rate(l_int_param_tbl(l_int_param_row).khr_id, l_eff_int_tbl(l_eff_int_row).from_date, p_process_flag) LOOP
3297 IF (ABS(l_eff_int_tbl(l_eff_int_row).rate - cur_most_recent_rate.interest_rate) < l_int_param_tbl(l_int_param_row).rate_change_value) THEN
3298 l_eff_int_with_tol_tbl(l_eff_int_with_tol_row).rate := cur_most_recent_rate.interest_rate;
3299 l_compare_to_min_max := FALSE;
3300 END IF;
3301 l_compare_to_base := FALSE;
3302 END LOOP;
3303
3304 --compare to base rate
3305 IF (l_compare_to_base AND ABS(l_eff_int_tbl(l_eff_int_row).rate - l_int_param_tbl(l_int_param_row).base_rate) < l_int_param_tbl(l_int_param_row).rate_change_value) THEN
3306 l_eff_int_with_tol_tbl(l_eff_int_with_tol_row).rate := l_int_param_tbl(l_int_param_row).base_rate;
3307 l_compare_to_min_max := FALSE;
3308 END IF;
3309
3310 l_first_row := FALSE;
3311 ELSE
3312 --compare to the previous entry in the rates table
3313 IF (ABS(l_eff_int_tbl(l_eff_int_row).rate - l_eff_int_with_tol_tbl(l_prev_eff_int_with_tol_row).rate) < l_int_param_tbl(l_int_param_row).rate_change_value) THEN
3314 l_eff_int_with_tol_tbl(l_eff_int_with_tol_row).rate := l_eff_int_with_tol_tbl(l_prev_eff_int_with_tol_row).rate;
3315 l_compare_to_min_max := FALSE;
3316 END IF;
3317 END IF;
3318
3319 --compare to minimum and maximum
3320 IF (l_compare_to_min_max) THEN
3321 IF (l_eff_int_with_tol_tbl(l_eff_int_with_tol_row).rate < l_int_param_tbl(l_int_param_row).minimum_rate) THEN
3322 l_eff_int_with_tol_tbl(l_eff_int_with_tol_row).rate := l_int_param_tbl(l_int_param_row).minimum_rate;
3323 END IF;
3324
3325 IF (l_eff_int_with_tol_tbl(l_eff_int_with_tol_row).rate > l_int_param_tbl(l_int_param_row).maximum_rate) THEN
3326 l_eff_int_with_tol_tbl(l_eff_int_with_tol_row).rate := l_int_param_tbl(l_int_param_row).maximum_rate;
3327 END IF;
3328 END IF;
3329 END IF;
3330
3331 l_eff_int_row := l_eff_int_tbl.next(l_eff_int_row);
3332 END LOOP;
3333
3334 x_eff_int_with_tol_tbl := l_eff_int_with_tol_tbl;
3335 print_debug('exiting procedure apply_tolerance');
3336 EXCEPTION
3337 WHEN OTHERS THEN
3338 OKL_API.SET_MESSAGE( p_app_name => G_APP_NAME
3339 ,p_msg_name => G_UNEXPECTED_ERROR
3340 ,p_token1 => G_SQLCODE_TOKEN
3341 ,p_token1_value => SQLCODE
3342 ,p_token2 => G_SQLERRM_TOKEN
3343 ,p_token2_value => SQLERRM);
3344 END apply_tolerance;
3345
3346 /*outputs the contents of tables passed to it*/
3347 PROCEDURE print_table_content(p_int_param_tbl IN int_param_tbl_type, p_eff_int_tbl IN interest_rate_tbl_type) IS
3348 l_int_param_row NUMBER := 0;
3349 l_eff_int_row NUMBER := 0;
3350 l_out_str varchar2(2000);
3351 BEGIN
3352
3353 print_debug('*****************************************');
3354 print_debug('****START CONTENTS OF P_INT_PARAM_TBL****');
3355 l_int_param_row := p_int_param_tbl.first;
3356 WHILE l_int_param_row IS NOT NULL
3357 LOOP
3358 print_debug(' interest_index_id : ' || p_int_param_tbl(l_int_param_row).interest_index_id);
3359 print_debug(' base_rate : ' || p_int_param_tbl(l_int_param_row).base_rate);
3360 print_debug(' interest_start_date : ' || p_int_param_tbl(l_int_param_row).interest_start_date);
3361 print_debug(' adder_rate : ' || p_int_param_tbl(l_int_param_row).adder_rate);
3362 print_debug(' maximum_rate : ' || p_int_param_tbl(l_int_param_row).maximum_rate);
3363 print_debug(' minimum_rate : ' || p_int_param_tbl(l_int_param_row).minimum_rate);
3364 print_debug(' rate_delay_code : ' || p_int_param_tbl(l_int_param_row).rate_delay_code);
3365 print_debug(' rate_delay_frequency : ' || p_int_param_tbl(l_int_param_row).rate_delay_frequency);
3366 print_debug(' rate_change_start_date : ' || p_int_param_tbl(l_int_param_row).rate_change_start_date);
3367 print_debug(' rate_change_frequency_code : ' || p_int_param_tbl(l_int_param_row).rate_change_frequency_code);
3368 print_debug(' rate_change_value : ' || p_int_param_tbl(l_int_param_row).rate_change_value);
3369 print_debug(' date_last_interim_interest_cal : ' || p_int_param_tbl(l_int_param_row).date_last_interim_interest_cal);
3370 print_debug(' contract_start_date : ' || p_int_param_tbl(l_int_param_row).contract_start_date);
3371 print_debug(' khr_id : ' || p_int_param_tbl(l_int_param_row).khr_id);
3372 print_debug(' interest_calculation_basis : ' || p_int_param_tbl(l_int_param_row).interest_calculation_basis);
3373 print_debug(' pay_freq : ' || p_int_param_tbl(l_int_param_row).pay_freq);
3374
3375 l_int_param_row := p_int_param_tbl.next(l_int_param_row);
3376 END LOOP;
3377 print_debug('*****END CONTENTS OF P_INT_PARAM_TBL*****');
3378 print_debug('*****************************************');
3379
3380 print_debug('*****START CONTENTS OF P_EFF_INT_TBL*****');
3381 l_eff_int_row := p_eff_int_tbl.first;
3382 l_out_str := rpad(' from_date', 14, ' ') || rpad('to_date', 15, ' ')
3383 || rpad('rate', 15, ' ') || rpad('derived_flag', 15, ' ') || rpad('apply_tolerance', 15, ' ');
3384 print_debug(l_out_str);
3385 WHILE l_eff_int_row IS NOT NULL
3386 LOOP
3387 /*print_debug(' from_date : ' || p_eff_int_tbl(l_eff_int_row).from_date);
3388 print_debug(' to_date : ' || p_eff_int_tbl(l_eff_int_row).to_date);
3389 print_debug(' rate : ' || p_eff_int_tbl(l_eff_int_row).rate);
3390 print_debug(' derived_flag : ' || p_eff_int_tbl(l_eff_int_row).derived_flag);*/
3391 l_out_str := rpad(' ' || p_eff_int_tbl(l_eff_int_row).from_date, 14, ' ') ||
3392 rpad( p_eff_int_tbl(l_eff_int_row).to_date, 15, ' ') ||
3393 rpad(p_eff_int_tbl(l_eff_int_row).rate, 15, ' ') ||
3394 rpad( p_eff_int_tbl(l_eff_int_row).derived_flag, 15, ' ') ||
3395 rpad(p_eff_int_tbl(l_eff_int_row).apply_tolerance, 15, ' ');
3396
3397 print_debug(l_out_str);
3398 l_eff_int_row := p_eff_int_tbl.next(l_eff_int_row);
3399 END LOOP;
3400 print_debug('******END CONTENTS OF P_EFF_INT_TBL******');
3401 print_debug('*****************************************');
3402
3403
3404 EXCEPTION
3405 WHEN OTHERS THEN
3406 print_debug('SQLCODE : ' || SQLCODE || ' SQLERRM : ' || SQLERRM);
3407 END print_table_content;
3408
3409 BEGIN
3410
3411 print_debug('in procedure interest_date_range');
3412 l_int_param_tbl.delete;
3413 l_param_tbl_row := 0;
3414
3415 FOR cur_int_param IN c_int_param(p_rate_param_rowid) LOOP
3416 l_param_tbl_row := l_param_tbl_row + 1;
3417 l_int_param_tbl(l_param_tbl_row) := cur_int_param;
3418
3419 FOR cur_pay_freq IN c_pay_freq(p_contract_id) LOOP
3420 l_int_param_tbl(l_param_tbl_row).pay_freq := cur_pay_freq.pay_freq;
3421 EXIT;
3422 END LOOP;
3423
3424 l_interest_rate_tbl.delete;
3425 l_start_date := NVL(p_start_date, cur_int_param.contract_start_date);
3426 l_end_date := p_end_date;
3427
3428 print_debug('cal start date : ' || l_start_date);
3429 print_debug('cal end date : ' || l_end_date);
3430 print_debug('value of global variable okl_variable_interest_pvt.g_calc_method_code : ' || OKL_VARIABLE_INTEREST_PVT.G_CALC_METHOD_CODE);
3431
3432 --check for interest start date
3433 print_debug('in procedure interest_date_range - check for interest start date');
3434 IF (cur_int_param.interest_start_date < l_start_date) THEN
3435 NULL;
3436 ELSE
3437 IF (cur_int_param.interest_start_date <= l_end_date) THEN
3438 l_start_date := cur_int_param.interest_start_date;
3439 ELSE
3440 RETURN;
3441 END IF;
3442 END IF;
3443
3444 --check for date last interim interest calculated
3445 print_debug('in procedure interest_date_range - check for date last interim interest calculated');
3446 IF ((l_start_date <= cur_int_param.date_last_interim_interest_cal) AND
3447 (((cur_int_param.interest_calculation_basis = 'REAMORT') AND (OKL_VARIABLE_INTEREST_PVT.G_CALC_METHOD_CODE = 'REAMORT')) OR
3448 (cur_int_param.interest_calculation_basis <> 'REAMORT'))) THEN
3449 --check if the start date is before last int calc date and
3450 --if the proc is not called from the variable rate - initiate request
3451 --then derive the rates for the date range passed
3452 --else retrieve the previously derived rates
3453 IF (l_end_date <= cur_int_param.date_last_interim_interest_cal) THEN
3454 --get the interest rate for l_start_date to l_end_date from okl_var_int_params
3455 print_debug('in procedure interest_date_range - get the interest rate for l_start_date to l_end_date from okl_var_int_params');
3456 FOR cur_param_rate IN c_param_rate(p_contract_id, l_start_date, l_end_date, p_process_flag) LOOP
3457 l_int_tbl_row := l_int_tbl_row + 1;
3458 l_interest_rate_tbl(l_int_tbl_row).from_date := cur_param_rate.valid_from;
3459 l_interest_rate_tbl(l_int_tbl_row).to_date := cur_param_rate.valid_until;
3460 l_interest_rate_tbl(l_int_tbl_row).rate := cur_param_rate.value;
3461 l_interest_rate_tbl(l_int_tbl_row).derived_flag := 'N';
3462 l_interest_rate_tbl(l_int_tbl_row).apply_tolerance := 'N';
3463 END LOOP;
3464
3465 print_table_content(l_int_param_tbl , l_interest_rate_tbl);
3466 l_derive_rate_flag := 'N';
3467 ELSE
3468 --get the interest rate for l_start_date to date last interim interest cal from okl_var_int_params
3469 print_debug('in procedure interest_date_range - get the interest rate for l_start_date to date last interim interest cal from okl_var_int_params');
3470 FOR cur_param_rate IN c_param_rate(p_contract_id, l_start_date, cur_int_param.date_last_interim_interest_cal, p_process_flag) LOOP
3471 l_int_tbl_row := l_int_tbl_row + 1;
3472 l_interest_rate_tbl(l_int_tbl_row).from_date := cur_param_rate.valid_from;
3473 l_interest_rate_tbl(l_int_tbl_row).to_date := cur_param_rate.valid_until;
3474 l_interest_rate_tbl(l_int_tbl_row).rate := cur_param_rate.value;
3475 l_interest_rate_tbl(l_int_tbl_row).derived_flag := 'N';
3476 l_interest_rate_tbl(l_int_tbl_row).apply_tolerance := 'N';
3477 END LOOP;
3478
3479 print_table_content(l_int_param_tbl , l_interest_rate_tbl);
3480 l_start_date := cur_int_param.date_last_interim_interest_cal + 1;
3481 l_derive_rate_flag := 'Y';
3482 END IF;
3483 END IF;
3484
3485 --no interest rate was available in the interest params table
3486 --therefore we need to derive the rates from the index
3487 print_debug('in procedure interest_date_range - no interest rate was available in the interest params table');
3488 print_debug('in procedure interest_date_range - therefore we need to derive the rates from the index');
3489 IF ((l_derive_rate_flag = 'N' AND NVL(l_interest_rate_tbl.count, 0) = 0) OR l_derive_rate_flag = 'Y') THEN
3490 --apply rate delay parameters to start date, end date, rate change start date
3491 print_debug('in procedure interest_date_range - apply rate delay parameters to start date, end date, rate change start date');
3492 l_rate_change_start_date := cur_int_param.rate_change_start_date;
3493
3494 --Bug# 13247845: Compute first rate change start date correctly for frequencies Anniversary Date and Billing Date
3495 IF (cur_int_param.rate_change_frequency_code IN ('ANNIVERSARY_DATE', 'BILLING_DATE')) AND
3496 (l_rate_change_start_date > cur_int_param.contract_start_date) THEN
3497 l_first_rate_chg_start_date := get_next_rate_change_date(cur_int_param.contract_start_date, l_int_param_tbl);
3498 LOOP
3499 IF (l_rate_change_start_date <= l_first_rate_chg_start_date) THEN
3500 l_rate_change_start_date := l_first_rate_chg_start_date;
3501 EXIT;
3502 ELSE
3503 l_first_rate_chg_start_date := get_next_rate_change_date(l_first_rate_chg_start_date, l_int_param_tbl);
3504 END IF;
3505 END LOOP;
3506 END IF;
3507 --Bug# 13247845
3508
3509 /* Commented by bkatraga for bug 13258144
3510 IF (cur_int_param.rate_delay_code = 'DAYS') THEN
3511 l_start_date := l_start_date - cur_int_param.rate_delay_frequency;
3512 l_end_date := l_end_date - cur_int_param.rate_delay_frequency;
3513 l_rate_change_start_date := l_rate_change_start_date - cur_int_param.rate_delay_frequency;
3514 ELSIF (cur_int_param.rate_delay_code = 'MONTHS') THEN
3515 l_start_date := add_months(l_start_date, -1 * cur_int_param.rate_delay_frequency);
3516 l_end_date := add_months(l_end_date, -1 * cur_int_param.rate_delay_frequency);
3517 l_rate_change_start_date := add_months(l_rate_change_start_date, -1 * cur_int_param.rate_delay_frequency);
3518 END IF;*/
3519
3520 print_debug('in procedure interest_date_range - values after rate delay application');
3521 print_debug('in procedure interest_date_range - l_start_date: ' || l_start_date);
3522 print_debug('in procedure interest_date_range - l_end_date: ' || l_end_date);
3523 print_debug('in procedure interest_date_range - l_rate_change_start_date: ' || l_rate_change_start_date);
3524
3525 --start dt LESS THAN RCSD
3526 print_debug('in procedure interest_date_range - start dt LESS THAN RCSD');
3527 IF (l_start_date <= l_rate_change_start_date) THEN
3528 --end dt LESS THAN RCSD
3529 print_debug('in procedure interest_date_range - end dt LESS THAN RCSD');
3530 IF(l_end_date < l_rate_change_start_date) THEN
3531 l_int_tbl_row := l_int_tbl_row + 1;
3532 l_interest_rate_tbl(l_int_tbl_row).from_date := l_start_date;
3533 l_interest_rate_tbl(l_int_tbl_row).to_date := l_end_date;
3534 l_interest_rate_tbl(l_int_tbl_row).rate := cur_int_param.base_rate;
3535 l_interest_rate_tbl(l_int_tbl_row).derived_flag := 'Y';
3536 l_interest_rate_tbl(l_int_tbl_row).apply_tolerance := 'N';
3537
3538 print_table_content(l_int_param_tbl , l_interest_rate_tbl);
3539 ELSE
3540 --end dt NOT LESS THAN RCSD
3541 print_debug('in procedure interest_date_range - end dt NOT LESS THAN RCSD');
3542 IF (l_start_date < l_rate_change_start_date) THEN
3543 l_int_tbl_row := l_int_tbl_row + 1;
3544 l_interest_rate_tbl(l_int_tbl_row).from_date := l_start_date;
3545 l_interest_rate_tbl(l_int_tbl_row).to_date := l_rate_change_start_date - 1;
3546 l_interest_rate_tbl(l_int_tbl_row).rate := cur_int_param.base_rate;
3547 l_interest_rate_tbl(l_int_tbl_row).derived_flag := 'Y';
3548 l_interest_rate_tbl(l_int_tbl_row).apply_tolerance := 'N';
3549 END IF;
3550
3551 --get daily rate if rate_change_frequency_code is Daily
3552 print_debug('in procedure interest_date_range - get daily rate if rate_change_frequency_code is Daily');
3553 IF (cur_int_param.rate_change_frequency_code = 'DAILY') THEN
3554 l_start_date := l_rate_change_start_date;
3555 print_debug('1 -> before calling get_eff_int_rate.');
3556
3557 --Added by bkatraga for bug 13258144
3558 l_int_start_date := l_start_date;
3559 l_int_end_date := l_end_date;
3560 IF (cur_int_param.rate_delay_code = 'DAYS') THEN
3561 l_int_start_date := l_int_start_date - cur_int_param.rate_delay_frequency;
3562 l_int_end_date := l_int_end_date - cur_int_param.rate_delay_frequency;
3563 ELSIF (cur_int_param.rate_delay_code = 'MONTHS') THEN
3564 l_int_start_date := add_months(l_int_start_date, -1 * cur_int_param.rate_delay_frequency);
3565 l_int_end_date := add_months(l_int_end_date, -1 * cur_int_param.rate_delay_frequency);
3566 END IF;
3567 --end bkatraga for bug 13258144
3568
3569 --Modified parameters by bkatraga for bug 13258144
3570 get_eff_int_rate(l_int_start_date, l_int_end_date, l_int_param_tbl , x_eff_int_tbl);
3571 l_eff_int_row := x_eff_int_tbl.first;
3572 WHILE (l_eff_int_row IS NOT NULL)
3573 LOOP
3574 l_int_tbl_row := l_int_tbl_row + 1;
3575 l_interest_rate_tbl(l_int_tbl_row).from_date := x_eff_int_tbl(l_eff_int_row).from_date;
3576 l_interest_rate_tbl(l_int_tbl_row).to_date := x_eff_int_tbl(l_eff_int_row).to_date;
3577 l_interest_rate_tbl(l_int_tbl_row).rate := x_eff_int_tbl(l_eff_int_row).rate;
3578 l_interest_rate_tbl(l_int_tbl_row).derived_flag := x_eff_int_tbl(l_eff_int_row).derived_flag;
3579 l_interest_rate_tbl(l_int_tbl_row).apply_tolerance := x_eff_int_tbl(l_eff_int_row).apply_tolerance;
3580 l_eff_int_row := x_eff_int_tbl.next(l_eff_int_row);
3581 END LOOP;
3582 print_table_content(l_int_param_tbl , l_interest_rate_tbl);
3583 ELSE
3584 print_debug('in procedure interest_date_range - get the next rate change date');
3585 --get the next rate change date
3586 --and so on and so forth
3587 l_next_rate_change_date := get_next_rate_change_date(l_rate_change_start_date, l_int_param_tbl);
3588 print_debug('in procedure interest_date_range - l_next_rate_change_date : ' || l_next_rate_change_date);
3589 --end dt LESS THAN NRCSD
3590 /*IF (l_end_date < l_next_rate_change_date) THEN
3591 get_eff_int_rate(l_rate_change_start_date, l_rate_change_start_date, l_int_param_tbl , x_eff_int_tbl);
3592 l_eff_int_row := x_eff_int_tbl.first;
3593 WHILE (l_eff_int_row IS NOT NULL)
3594 LOOP
3595 l_int_tbl_row := l_int_tbl_row + 1;
3596 l_interest_rate_tbl(l_int_tbl_row).from_date := l_rate_change_start_date;
3597 l_interest_rate_tbl(l_int_tbl_row).to_date := l_end_date;
3598 l_interest_rate_tbl(l_int_tbl_row).rate := x_eff_int_tbl(l_eff_int_row).rate;
3599 l_interest_rate_tbl(l_int_tbl_row).derived_flag := x_eff_int_tbl(l_eff_int_row).derived_flag;
3600 l_eff_int_row := x_eff_int_tbl.next(l_eff_int_row);
3601 END LOOP;
3602 ELSE*/
3603 --end dt NOT LESS THAN NRCSD
3604 print_debug('in procedure interest_date_range - end dt NOT LESS THAN NRCSD');
3605 LOOP
3606 print_debug('2 -> before calling get_eff_int_rate.');
3607
3608 --Added by bkatraga for bug 13258144
3609 l_int_start_date := l_rate_change_start_date;
3610 IF (cur_int_param.rate_delay_code = 'DAYS') THEN
3611 l_int_start_date := l_int_start_date - cur_int_param.rate_delay_frequency;
3612 ELSIF (cur_int_param.rate_delay_code = 'MONTHS') THEN
3613 l_int_start_date := add_months(l_int_start_date, -1 * cur_int_param.rate_delay_frequency);
3614 END IF;
3615 --end bkatraga for bug 13258144
3616
3617 --Modified parameters by bkatraga for bug 13258144
3618 get_eff_int_rate(l_int_start_date, l_int_start_date, l_int_param_tbl , x_eff_int_tbl);
3619 l_eff_int_row := x_eff_int_tbl.first;
3620 WHILE (l_eff_int_row IS NOT NULL)
3621 LOOP
3622 l_int_tbl_row := l_int_tbl_row + 1;
3623 l_interest_rate_tbl(l_int_tbl_row).from_date := l_rate_change_start_date;
3624 IF (l_end_date < l_next_rate_change_date) THEN
3625 l_interest_rate_tbl(l_int_tbl_row).to_date := l_end_date;
3626 ELSE
3627 IF (l_next_rate_change_date IS NOT NULL) THEN
3628 l_interest_rate_tbl(l_int_tbl_row).to_date := l_next_rate_change_date - 1;
3629 ELSE
3630 l_interest_rate_tbl(l_int_tbl_row).to_date := cur_int_param.contract_end_date;
3631 END IF;
3632 END IF;
3633 l_interest_rate_tbl(l_int_tbl_row).rate := x_eff_int_tbl(l_eff_int_row).rate;
3634 l_interest_rate_tbl(l_int_tbl_row).derived_flag := x_eff_int_tbl(l_eff_int_row).derived_flag;
3635 l_interest_rate_tbl(l_int_tbl_row).apply_tolerance := x_eff_int_tbl(l_eff_int_row).apply_tolerance;
3636 l_eff_int_row := x_eff_int_tbl.next(l_eff_int_row);
3637 END LOOP;
3638
3639 EXIT WHEN ((l_end_date < l_next_rate_change_date) OR
3640 (l_rate_change_start_date = cur_int_param.contract_end_date));
3641 l_rate_change_start_date := l_next_rate_change_date;
3642 l_next_rate_change_date := get_next_rate_change_date(l_rate_change_start_date, l_int_param_tbl);
3643 print_debug('1 -> l_rate_change_start_date : ' || l_rate_change_start_date);
3644 print_debug('1 -> l_next_rate_change_date : ' || l_next_rate_change_date);
3645 END LOOP;
3646 print_table_content(l_int_param_tbl , l_interest_rate_tbl);
3647 --END IF;
3648 END IF;
3649
3650 END IF;
3651 ELSE
3652 --start dt NOT LESS THAN RCSD
3653 IF (cur_int_param.rate_change_frequency_code = 'DAILY') THEN
3654 --l_start_date := l_rate_change_start_date;
3655 print_debug('3 -> before calling get_eff_int_rate.');
3656
3657 --Added by bkatraga for bug 13258144
3658 l_int_start_date := l_start_date;
3659 l_int_end_date := l_end_date;
3660 IF (cur_int_param.rate_delay_code = 'DAYS') THEN
3661 l_int_start_date := l_int_start_date - cur_int_param.rate_delay_frequency;
3662 l_int_end_date := l_int_end_date - cur_int_param.rate_delay_frequency;
3663 ELSIF (cur_int_param.rate_delay_code = 'MONTHS') THEN
3664 l_int_start_date := add_months(l_int_start_date, -1 * cur_int_param.rate_delay_frequency);
3665 l_int_end_date := add_months(l_int_end_date, -1 * cur_int_param.rate_delay_frequency);
3666 END IF;
3667 --end bkatraga for bug 13258144
3668
3669 --Modified parameters by bkatraga for bug 13258144
3670 get_eff_int_rate(l_int_start_date, l_int_end_date, l_int_param_tbl , x_eff_int_tbl);
3671 l_eff_int_row := x_eff_int_tbl.first;
3672 WHILE (l_eff_int_row IS NOT NULL)
3673 LOOP
3674 l_int_tbl_row := l_int_tbl_row + 1;
3675 l_interest_rate_tbl(l_int_tbl_row).from_date := x_eff_int_tbl(l_eff_int_row).from_date;
3676 l_interest_rate_tbl(l_int_tbl_row).to_date := x_eff_int_tbl(l_eff_int_row).to_date;
3677 l_interest_rate_tbl(l_int_tbl_row).rate := x_eff_int_tbl(l_eff_int_row).rate;
3678 l_interest_rate_tbl(l_int_tbl_row).derived_flag := x_eff_int_tbl(l_eff_int_row).derived_flag;
3679 l_interest_rate_tbl(l_int_tbl_row).apply_tolerance := x_eff_int_tbl(l_eff_int_row).apply_tolerance;
3680 l_eff_int_row := x_eff_int_tbl.next(l_eff_int_row);
3681 END LOOP;
3682 print_table_content(l_int_param_tbl , l_interest_rate_tbl);
3683 ELSE
3684
3685 print_table_content(l_int_param_tbl , l_interest_rate_tbl);
3686 print_debug('in procedure interest_date_range - start dt NOT LESS THAN RCSD');
3687 l_next_rate_change_date := get_next_rate_change_date(l_rate_change_start_date, l_int_param_tbl);
3688
3689 LOOP
3690 print_debug('l_start_date : ' || l_start_date);
3691 print_debug('l_next_rate_change_date : ' || l_next_rate_change_date);
3692
3693 EXIT WHEN ((l_start_date < l_next_rate_change_date) OR
3694 (l_rate_change_start_date = cur_int_param.contract_end_date));
3695 l_rate_change_start_date := l_next_rate_change_date;
3696 l_next_rate_change_date := get_next_rate_change_date(l_rate_change_start_date, l_int_param_tbl);
3697 END LOOP;
3698
3699 --end dt LESS THAN NRCSD
3700 print_debug('in procedure interest_date_range - end dt LESS THAN NRCSD');
3701 IF (l_end_date < l_next_rate_change_date) THEN
3702 print_debug('4 -> before calling get_eff_int_rate.');
3703
3704 --Added by bkatraga for bug 13258144
3705 l_int_start_date := l_rate_change_start_date;
3706 IF (cur_int_param.rate_delay_code = 'DAYS') THEN
3707 l_int_start_date := l_int_start_date - cur_int_param.rate_delay_frequency;
3708 ELSIF (cur_int_param.rate_delay_code = 'MONTHS') THEN
3709 l_int_start_date := add_months(l_int_start_date, -1 * cur_int_param.rate_delay_frequency);
3710 END IF;
3711 --end bkatraga for bug 13258144
3712
3713 --Modified parameters by bkatraga for bug 13258144
3714 get_eff_int_rate(l_int_start_date, l_int_start_date, l_int_param_tbl , x_eff_int_tbl);
3715 l_eff_int_row := x_eff_int_tbl.first;
3716 WHILE (l_eff_int_row IS NOT NULL)
3717 LOOP
3718 l_int_tbl_row := l_int_tbl_row + 1;
3719 l_interest_rate_tbl(l_int_tbl_row).from_date := l_start_date;
3720 l_interest_rate_tbl(l_int_tbl_row).to_date := l_end_date;
3721 l_interest_rate_tbl(l_int_tbl_row).rate := x_eff_int_tbl(l_eff_int_row).rate;
3722 l_interest_rate_tbl(l_int_tbl_row).derived_flag := x_eff_int_tbl(l_eff_int_row).derived_flag;
3723 l_interest_rate_tbl(l_int_tbl_row).apply_tolerance := x_eff_int_tbl(l_eff_int_row).apply_tolerance;
3724 l_eff_int_row := x_eff_int_tbl.next(l_eff_int_row);
3725 END LOOP;
3726 --end dt NOT LESS THAN NRCSD
3727 print_debug('in procedure interest_date_range - end dt NOT LESS THAN NRCSD');
3728 print_table_content(l_int_param_tbl , l_interest_rate_tbl);
3729 ELSE
3730 LOOP
3731 print_debug('5 -> before calling get_eff_int_rate.');
3732
3733 --Added by bkatraga for bug 13258144
3734 l_int_start_date := l_rate_change_start_date;
3735 IF (cur_int_param.rate_delay_code = 'DAYS') THEN
3736 l_int_start_date := l_int_start_date - cur_int_param.rate_delay_frequency;
3737 ELSIF (cur_int_param.rate_delay_code = 'MONTHS') THEN
3738 l_int_start_date := add_months(l_int_start_date, -1 * cur_int_param.rate_delay_frequency);
3739 END IF;
3740 --end bkatraga for bug 13258144
3741
3742 --Modified parameters by bkatraga for bug 13258144
3743 get_eff_int_rate(l_int_start_date, l_int_start_date, l_int_param_tbl , x_eff_int_tbl);
3744 l_eff_int_row := x_eff_int_tbl.first;
3745 WHILE (l_eff_int_row IS NOT NULL)
3746 LOOP
3747 l_int_tbl_row := l_int_tbl_row + 1;
3748 IF (l_start_date >= l_rate_change_start_date) THEN
3749 l_interest_rate_tbl(l_int_tbl_row).from_date := l_start_date;
3750 ELSE
3751 l_interest_rate_tbl(l_int_tbl_row).from_date := l_rate_change_start_date;
3752 END IF;
3753
3754 IF (l_end_date < NVL(l_next_rate_change_date, l_end_date)) THEN
3755 l_interest_rate_tbl(l_int_tbl_row).to_date := l_end_date;
3756 ELSE
3757 IF (l_next_rate_change_date IS NOT NULL) THEN
3758 l_interest_rate_tbl(l_int_tbl_row).to_date := l_next_rate_change_date - 1;
3759 ELSE
3760 l_interest_rate_tbl(l_int_tbl_row).to_date := cur_int_param.contract_end_date;
3761 END IF;
3762 END IF;
3763 l_interest_rate_tbl(l_int_tbl_row).rate := x_eff_int_tbl(l_eff_int_row).rate;
3764 l_interest_rate_tbl(l_int_tbl_row).derived_flag := x_eff_int_tbl(l_eff_int_row).derived_flag;
3765 l_interest_rate_tbl(l_int_tbl_row).apply_tolerance := x_eff_int_tbl(l_eff_int_row).apply_tolerance;
3766 l_eff_int_row := x_eff_int_tbl.next(l_eff_int_row);
3767 END LOOP;
3768
3769 EXIT WHEN ((l_end_date < l_next_rate_change_date) OR
3770 (l_rate_change_start_date = cur_int_param.contract_end_date));
3771 l_rate_change_start_date := l_next_rate_change_date;
3772 l_next_rate_change_date := get_next_rate_change_date(l_rate_change_start_date, l_int_param_tbl);
3773 print_debug('2 -> l_rate_change_start_date : ' || l_rate_change_start_date);
3774 print_debug('2 -> l_next_rate_change_date : ' || l_next_rate_change_date);
3775 END LOOP;
3776 print_table_content(l_int_param_tbl , l_interest_rate_tbl);
3777 END IF;
3778 END IF;--here
3779 END IF;
3780 END IF;
3781
3782 END LOOP;
3783
3784 /*--Commented by bkatraga for bug 13258144
3785 --unapply rate delay*/
3786
3787
3788 --apply tolerance
3789 print_debug('in procedure interest_date_range - apply tolerance');
3790 apply_tolerance(l_int_param_tbl, l_interest_rate_tbl, x_interest_rate_tbl);
3791 print_table_content(l_int_param_tbl , x_interest_rate_tbl);
3792
3793 print_debug('exiting procedure interest_date_range');
3794 x_return_status := l_return_status;
3795 Exception
3796
3797 --Bug# 14528742
3798 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
3799 print_error_message('Exception raised in procedure interest_date_range');
3800 x_return_status := OKL_API.G_RET_STS_ERROR;
3801
3802 WHEN OTHERS THEN
3803 print_debug('sqlcode : ' || sqlcode || ' $ sqlerrm : ' || sqlerrm);
3804 x_return_status := OKL_API.HANDLE_EXCEPTIONS (
3805 p_api_name => l_api_name,
3806 p_pkg_name => G_PKG_NAME,
3807 p_exc_name => 'OTHERS',
3808 x_msg_count => x_msg_count,
3809 x_msg_data => x_msg_data,
3810 p_api_type => '_PVT');
3811
3812 END interest_date_range;
3813
3814 ------------------------------------------------------------------------------
3815
3816 PROCEDURE interest_date_range (
3817 p_api_version IN NUMBER,
3818 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3819 x_return_status OUT NOCOPY VARCHAR2,
3820 x_msg_count OUT NOCOPY NUMBER,
3821 x_msg_data OUT NOCOPY VARCHAR2,
3822 p_contract_id IN NUMBER,
3823 p_start_date IN DATE,
3824 p_end_date IN DATE,
3825 p_process_flag IN VARCHAR2 ,
3826 x_interest_rate_tbl OUT NOCOPY interest_rate_tbl_type) IS
3827
3828 -----------------------------------------------------------------
3829 -- Declare Process Variable
3830 -----------------------------------------------------------------
3831 l_api_name CONSTANT VARCHAR2(30) := 'interest_date_range';
3832 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3833
3834 l_interest_rate_tbl interest_rate_tbl_type;
3835 l_interest_rate_tbl_out interest_rate_tbl_type;
3836 l_int_tbl_row NUMBER := 0;
3837 l_int_tbl_row_out NUMBER := 0;
3838
3839 CURSOR c_param_rate(cp_khr_id NUMBER, cp_start_date DATE, cp_end_date DATE) IS
3840 SELECT krp.rowid rate_param_rowid,
3841 GREATEST(trunc(cp_start_date),krp.effective_from_date) start_date,
3842 LEAST(trunc(cp_end_date),NVL(krp.effective_to_date, trunc(sysdate + 9999))) end_date
3843 FROM okl_k_rate_params krp
3844 WHERE krp.khr_id = cp_khr_id
3845 AND krp.parameter_type_code = 'ACTUAL'
3846 AND (cp_start_date BETWEEN krp.effective_from_date AND nvl(krp.effective_to_date, trunc(cp_start_date))
3847 OR (cp_end_date BETWEEN krp.effective_from_date AND nvl(krp.effective_to_date, trunc(cp_end_date)))
3848 OR (krp.effective_from_date >= cp_start_date AND nvl(krp.effective_to_date, trunc(sysdate + 9999)) <= cp_end_date));
3849
3850 BEGIN
3851 print_debug('entering procedure interest_date_range outer with the foll. parameters:-');
3852 print_debug('p_contract_id: ' || p_contract_id);
3853 print_debug('p_start_date: ' || p_start_date);
3854 print_debug('p_end_date: ' || p_end_date);
3855 print_debug('p_process_flag: ' || p_process_flag);
3856
3857 l_interest_rate_tbl.delete;
3858 l_interest_rate_tbl_out.delete;
3859 l_int_tbl_row_out := 0;
3860
3861 FOR cur_param_rate IN c_param_rate(p_contract_id, p_start_date, p_end_date) LOOP
3862 print_debug('calling procedure interest_date_range inner with foll. params:-');
3863 print_debug('p_contract_id: ' || p_contract_id);
3864 print_debug('start_date: ' || cur_param_rate.start_date);
3865 print_debug('end_date: ' || cur_param_rate.end_date);
3866 print_debug('rate_param_rowid: ' || cur_param_rate.rate_param_rowid);
3867 interest_date_range (
3868 p_api_version => 1.0,
3869 p_init_msg_list => OKL_API.G_FALSE,
3870 x_return_status => x_return_status,
3871 x_msg_count => x_msg_count,
3872 x_msg_data => x_msg_data,
3873 p_contract_id => p_contract_id,
3874 p_start_date => cur_param_rate.start_date,
3875 p_end_date => cur_param_rate.end_date,
3876 p_process_flag => p_process_flag,
3877 p_rate_param_rowid => cur_param_rate.rate_param_rowid,
3878 x_interest_rate_tbl => l_interest_rate_tbl);
3879
3880 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3881 print_error_message('Unexpected error raised in call to INTEREST_DATE_RANGE');
3882 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3883 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3884 print_error_message('Error raised in call to INTEREST_DATE_RANGE');
3885 RAISE Okl_Api.G_EXCEPTION_ERROR;
3886 END IF;
3887
3888 print_debug('count in l_interest_rate_tbl: ' || l_interest_rate_tbl.count);
3889 l_int_tbl_row := l_interest_rate_tbl.first;
3890 LOOP
3891 EXIT WHEN l_int_tbl_row IS NULL;
3892 l_int_tbl_row_out := l_int_tbl_row_out + 1;
3893 l_interest_rate_tbl_out(l_int_tbl_row_out) := l_interest_rate_tbl(l_int_tbl_row);
3894
3895 l_int_tbl_row := l_interest_rate_tbl.next(l_int_tbl_row);
3896 END LOOP;
3897 print_debug('count in l_interest_rate_tbl_out: ' || l_interest_rate_tbl_out.count);
3898 END LOOP;
3899
3900 x_interest_rate_tbl := l_interest_rate_tbl_out;
3901 x_return_status := l_return_status;
3902 print_debug('exiting procedure interest_date_range outer');
3903 Exception
3904
3905 --Bug# 14528742
3906 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
3907 print_error_message('Exception raised in procedure interest_date_range');
3908 x_return_status := OKL_API.G_RET_STS_ERROR;
3909
3910 WHEN OTHERS THEN
3911 print_debug('sqlcode : ' || sqlcode || ' $ sqlerrm : ' || sqlerrm);
3912 x_return_status := OKL_API.HANDLE_EXCEPTIONS (
3913 p_api_name => l_api_name,
3914 p_pkg_name => G_PKG_NAME,
3915 p_exc_name => 'OTHERS',
3916 x_msg_count => x_msg_count,
3917 x_msg_data => x_msg_data,
3918 p_api_type => '_PVT');
3919
3920 END interest_date_range;
3921
3922 ------------------------------------------------------------------------------
3923 -- Start of Comments
3924 -- Created By: Ramesh Seela
3925 -- Procedure Name calculate_interest
3926 -- Description: This procedure is called by Variable Interest Calculation for Loans
3927 -- Inputs :
3928 -- Output : Interest Calculated
3929 -- Dependencies:
3930 -- Parameters: Start Date, End Date, Interest Rate Range.
3931 -- Version: 1.0
3932 -- End of Comments
3933
3934 ------------------------------------------------------------------------------
3935 Function calculate_interest (
3936 p_api_version IN NUMBER,
3937 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3938 x_return_status OUT NOCOPY VARCHAR2,
3939 x_msg_count OUT NOCOPY NUMBER,
3940 x_msg_data OUT NOCOPY VARCHAR2,
3941 p_contract_id IN NUMBER,
3942 p_from_date IN DATE,
3943 p_to_date IN DATE,
3944 p_principal_amount IN NUMBER,
3945 p_currency_code IN VARCHAR2,
3946 --Bug# 14165508
3947 p_conversion_factor IN NUMBER DEFAULT NULL) RETURN NUMBER IS
3948
3949 l_api_name CONSTANT VARCHAR2(30) := 'CALCULATE_INTEREST';
3950 l_api_version CONSTANT NUMBER := 1.0;
3951 l_interest_rate_tbl interest_rate_tbl_type;
3952 l_interest_rate_tbl_count NUMBER;
3953 l_interest_rate_tbl_counter NUMBER;
3954 l_interest_rate_tbl_index NUMBER;
3955 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
3956 l_msg_count NUMBER;
3957 l_msg_data VARCHAR2(2000);
3958 l_from_date DATE;
3959 l_to_date DATE;
3960 l_interest_rate NUMBER;
3961 l_calc_days NUMBER;
3962 l_year_days NUMBER;
3963 l_interest_amt NUMBER := 0;
3964 l_total_interest_amt NUMBER := 0;
3965 l_year_part NUMBER;
3966 l_interest_basis OKL_K_RATE_PARAMS.interest_basis_code%TYPE;
3967 l_calculation_formula_id OKL_K_RATE_PARAMS.calculation_formula_id%TYPE;
3968 l_derived_flag VARCHAR2(1);
3969 calculate_interest_failed EXCEPTION;
3970
3971
3972 BEGIN
3973 x_return_status := OKL_API.G_RET_STS_SUCCESS;
3974
3975 print_debug('Executing procedure CALCULATE_INTEREST using following parameters : ');
3976 print_debug(' p_contract_id : '|| p_contract_id );
3977 print_debug(' p_from_date : '|| to_char(p_from_date));
3978 print_debug(' p_to_date : '|| to_char(p_to_date));
3979 print_debug(' p_principal_amount: '|| p_principal_amount);
3980 print_debug(' p_currency_code : '|| p_currency_code);
3981
3982 print_debug(' g_contract_id : '|| G_CONTRACT_ID );
3983
3984 Initialize_contract_params( p_api_version => 1.0,
3985 p_init_msg_list => OKL_API.G_FALSE,
3986 x_return_status => x_return_status,
3987 x_msg_count => x_msg_count,
3988 x_msg_data => x_msg_data,
3989 p_contract_id => p_contract_id
3990 );
3991 IF (x_return_status = Okl_Api.G_RET_STS_SUCCESS) THEN
3992 print_debug ('Procedure INITIALIZE_CONTRACT_PARAMS completed successfully');
3993 ELSIF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3994 print_debug ('Procedure INITIALIZE_CONTRACT_PARAMS returned unexpected error');
3995 print_error_message ('Procedure INITIALIZE_CONTRACT_PARAMS returned unexpected error');
3996 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3997 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3998 print_debug ('Procedure INITIALIZE_CONTRACT_PARAMS returned exception');
3999 print_error_message ('Procedure INITIALIZE_CONTRACT_PARAMS returned exception');
4000 RAISE calculate_interest_failed;
4001 END IF;
4002
4003
4004 print_debug('Days in a month: '|| G_DAYS_IN_A_MONTH_CODE);
4005 print_debug('Days in a year: '|| G_DAYS_IN_A_YEAR_CODE);
4006
4007 /* start prasjain bug#5645266
4008 Added the check condition as the interest is getting calculated for
4009 31 days if the interest rate changes on 31st of the month in a 30/360
4010 contract
4011 */
4012
4013 --Bug# 14165508: Always pass the actual date
4014 interest_date_range (
4015 p_api_version => 1.0,
4016 p_init_msg_list => OKL_API.G_FALSE,
4017 x_return_status => x_return_status,
4018 x_msg_count => x_msg_count,
4019 x_msg_data => x_msg_data,
4020 p_contract_id => p_contract_id,
4021 p_start_date => p_from_date,
4022 p_end_date => p_to_date,
4023 p_process_flag => G_INTEREST_CALCULATION_BASIS, /* value is set in Calculate_total_interest_due */
4024 x_interest_rate_tbl => l_interest_rate_tbl);
4025
4026 -- end prasjain bug#5645266
4027
4028 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4029 print_error_message('Unexpected error raised in call to INTEREST_DATE_RANGE');
4030 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
4031 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
4032 print_error_message('Error raised in call to INTEREST_DATE_RANGE');
4033 RAISE calculate_interest_failed;
4034 END IF;
4035
4036 l_interest_rate_tbl_count := l_interest_rate_tbl.COUNT;
4037
4038 print_debug('No. of records in Interest Date Range TAble : '|| l_interest_rate_tbl_count);
4039
4040 IF (l_interest_rate_tbl_count = 0) THEN
4041 RETURN 0;
4042 END IF;
4043 l_interest_rate_tbl_index := l_interest_rate_tbl.FIRST;
4044
4045 FOR l_interest_rate_tbl_counter in 1 .. l_interest_rate_tbl_count
4046 LOOP
4047 l_from_date := l_interest_rate_tbl(l_interest_rate_tbl_index).from_date;
4048 l_to_date := l_interest_rate_tbl(l_interest_rate_tbl_index).to_date;
4049 l_interest_rate := l_interest_rate_tbl(l_interest_rate_tbl_index).rate;
4050 l_derived_flag := l_interest_rate_tbl(l_interest_rate_tbl_index).derived_flag;
4051
4052 print_debug('From Date: '|| l_from_date ||' To Date: '|| l_to_date||' Interest: '|| l_interest_rate || 'Derived flag: '|| l_derived_flag);
4053
4054 IF (G_DAYS_IN_A_MONTH_CODE = '30') THEN
4055 -- gboomina modified for bug 7130132 - Start
4056 -- using correct day count logic from OKL_PRICING_UTILS_PVT
4057
4058 print_debug('p_conversion_factor '||p_conversion_factor);
4059 l_calc_days := OKL_PRICING_UTILS_PVT.get_day_count( G_DAYS_IN_A_MONTH_CODE,
4060 G_DAYS_IN_A_YEAR_CODE,
4061 l_from_date,
4062 l_to_date,
4063 'Y',
4064 x_return_status,
4065 --Bug# 14165508
4066 p_conversion_factor);
4067 -- gboomina modified for bug 7130132 - End
4068 ELSE
4069 l_calc_days := l_to_date - l_from_date + 1;
4070 END IF;
4071
4072 print_debug('No. of calc Days : '|| l_calc_days);
4073
4074 IF (G_DAYS_IN_A_YEAR_CODE = 'ACTUAL') THEN
4075 l_year_part := to_char(l_from_date, 'YYYY');
4076 l_year_days := (to_date(('01-01-'||(l_year_part+1)),'DD-MM-YYYY') - to_date(('01-01-'||l_year_part),
4077 'DD-MM-YYYY'));
4078 ELSE
4079 l_year_days := G_DAYS_IN_A_YEAR_CODE;
4080 END IF;
4081
4082 print_debug('No. of Days in the year: '|| l_year_days);
4083
4084 l_interest_amt := OKL_ACCOUNTING_UTIL.round_amount((p_principal_amount * l_interest_rate/100) * (
4085 l_calc_days / l_year_days), p_currency_code);
4086
4087 print_debug(' Interest : '|| l_interest_amt);
4088 l_total_interest_amt := l_total_interest_amt + l_interest_amt;
4089 l_interest_rate_tbl_index := l_interest_rate_tbl.NEXT(l_interest_rate_tbl_index);
4090
4091 print_debug ('g_request_id : '|| g_request_id);
4092 print_debug ('Concurrent Request ID : '|| fnd_global.conc_request_id);
4093 print_debug ('l_derived_flag : '|| l_derived_flag);
4094
4095 IF ((g_request_id > 0) AND (l_derived_flag = 'Y'))THEN
4096 g_vir_tbl_counter := nvl(g_vir_tbl_counter,0) + 1;
4097 g_vir_tbl(g_vir_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
4098 g_vir_tbl(g_vir_tbl_counter).khr_id := p_contract_id;
4099 g_vir_tbl(g_vir_tbl_counter).kle_id := G_CONTRACT_LINE_ID;
4100 IF (G_CALC_METHOD_CODE = 'DAILY_INTEREST') THEN
4101 g_vir_tbl(g_vir_tbl_counter).source_table := 'OKL_STRM_ELEMENTS_B';
4102 ELSIF (G_CALC_METHOD_CODE = 'REAMORT') THEN
4103 g_vir_tbl(g_vir_tbl_counter).source_table := 'OKL_VAR_INT_PROCESS_B';
4104 ELSE
4105 g_vir_tbl(g_vir_tbl_counter).source_table := 'OKL_TRX_AR_INVOICES_V';
4106 END IF;
4107 g_vir_tbl(g_vir_tbl_counter).interest_rate := l_interest_rate;
4108 g_vir_tbl(g_vir_tbl_counter).interest_calc_start_date := l_from_date;
4109 g_vir_tbl(g_vir_tbl_counter).interest_calc_end_date := l_to_date;
4110 g_vir_tbl(g_vir_tbl_counter).calc_method_code := G_CALC_METHOD_CODE;
4111 g_vir_tbl(g_vir_tbl_counter).principal_balance := p_principal_amount;
4112 g_vir_tbl(g_vir_tbl_counter).valid_yn := 'Y';
4113 g_vir_tbl(g_vir_tbl_counter).object_version_number := 1.0;
4114 g_vir_tbl(g_vir_tbl_counter).org_id := g_authoring_org_id;
4115 g_vir_tbl(g_vir_tbl_counter).request_id := g_request_id;
4116 g_vir_tbl(g_vir_tbl_counter).program_application_id := NULL;
4117 g_vir_tbl(g_vir_tbl_counter).program_id := NULL;
4118 g_vir_tbl(g_vir_tbl_counter).program_update_date := SYSDATE;
4119 g_vir_tbl(g_vir_tbl_counter).attribute_category := NULL;
4120 g_vir_tbl(g_vir_tbl_counter).attribute1 := NULL;
4121 g_vir_tbl(g_vir_tbl_counter).attribute2 := NULL;
4122 g_vir_tbl(g_vir_tbl_counter).attribute3 := NULL;
4123 g_vir_tbl(g_vir_tbl_counter).attribute4 := NULL;
4124 g_vir_tbl(g_vir_tbl_counter).attribute5 := NULL;
4125 g_vir_tbl(g_vir_tbl_counter).attribute6 := NULL;
4126 g_vir_tbl(g_vir_tbl_counter).attribute7 := NULL;
4127 g_vir_tbl(g_vir_tbl_counter).attribute8 := NULL;
4128 g_vir_tbl(g_vir_tbl_counter).attribute9 := NULL;
4129 g_vir_tbl(g_vir_tbl_counter).attribute10 := NULL;
4130 g_vir_tbl(g_vir_tbl_counter).attribute11 := NULL;
4131 g_vir_tbl(g_vir_tbl_counter).attribute12 := NULL;
4132 g_vir_tbl(g_vir_tbl_counter).attribute13 := NULL;
4133 g_vir_tbl(g_vir_tbl_counter).attribute14 := NULL;
4134 g_vir_tbl(g_vir_tbl_counter).attribute15 := NULL;
4135 g_vir_tbl(g_vir_tbl_counter).created_by := FND_GLOBAL.user_id;
4136 g_vir_tbl(g_vir_tbl_counter).creation_date := SYSDATE;
4137 g_vir_tbl(g_vir_tbl_counter).last_updated_by := FND_GLOBAL.user_id;
4138 g_vir_tbl(g_vir_tbl_counter).last_update_date := SYSDATE;
4139 g_vir_tbl(g_vir_tbl_counter).last_update_login := FND_GLOBAL.login_id;
4140 g_vir_tbl(g_vir_tbl_counter).interest_amt := l_interest_amt;
4141 g_vir_tbl(g_vir_tbl_counter).interest_calc_days := l_calc_days;
4142 --Bug# 13447258: Changes to store catchup calculated values
4143 g_vir_tbl(g_vir_tbl_counter).catchup_amt := NULL;
4144 g_vir_tbl(g_vir_tbl_counter).catchup_settlement_code := NULL;
4145 END IF;
4146 END LOOP;
4147
4148 print_debug ('Total interest amount : '|| l_total_interest_amt);
4149
4150 RETURN l_total_interest_amt;
4151
4152 EXCEPTION
4153 WHEN calculate_interest_failed THEN
4154 print_error_message('Exception calculate_interest_failed raised in function CALCULATE_INTEREST');
4155 x_return_status := OKL_API.G_RET_STS_ERROR;
4156 RETURN NULL;
4157 WHEN OTHERS THEN
4158 print_error_message('Exception raised in function CALCULATE_INTEREST');
4159 Okl_Api.SET_MESSAGE(
4160 p_app_name => G_APP_NAME,
4161 p_msg_name => G_UNEXPECTED_ERROR,
4162 p_token1 => G_SQLCODE_TOKEN,
4163 p_token1_value => SQLCODE,
4164 p_token2 => G_SQLERRM_TOKEN,
4165 p_token2_value => SQLERRM);
4166 x_return_status := OKL_API.G_RET_STS_ERROR;
4167 RETURN NULL;
4168
4169 END calculate_interest;
4170
4171 ------------------------------------------------------------------------------
4172
4173 -- Start of Comments
4174 -- Created By: Ramesh Seela
4175 -- Procedure Name Calc_Variable_Rate_Interest
4176 -- Description: This procedure is called by Variable Interest Calculation for Loans
4177 -- Inputs :
4178 -- Output : Interest Calculated
4179 -- Dependencies:
4180 -- Parameters: Start Date, End Date, Interest Rate Range.
4181 -- Version: 1.0
4182 -- End of Comments
4183
4184 ------------------------------------------------------------------------------
4185 Function Calc_Variable_Rate_Interest (
4186 p_api_version IN NUMBER,
4187 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
4188 x_return_status OUT NOCOPY VARCHAR2,
4189 x_msg_count OUT NOCOPY NUMBER,
4190 x_msg_data OUT NOCOPY VARCHAR2,
4191 p_contract_id IN NUMBER,
4192 p_currency_code IN VARCHAR2,
4193 p_principal_balance_tbl IN principal_balance_tbl_typ,
4194 --Bug# 14165508
4195 p_conversion_factor IN NUMBER DEFAULT NULL) RETURN NUMBER IS
4196
4197 l_api_name CONSTANT VARCHAR2(30) := 'CALC_VARIABLE_RATE_INTEREST';
4198 l_api_version CONSTANT NUMBER := 1.0;
4199 l_principal_balance_tbl principal_balance_tbl_typ;
4200 l_principal_bal_tbl_count NUMBER;
4201 l_principal_bal_tbl_counter NUMBER;
4202 l_principal_bal_tbl_index NUMBER;
4203 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
4204 l_msg_count NUMBER;
4205 l_msg_data VARCHAR2(2000);
4206 l_from_date DATE;
4207 l_to_date DATE;
4208 l_interest_amt NUMBER := 0;
4209 l_total_interest_amt NUMBER := 0;
4210 Calc_Var_Rate_Int_failed EXCEPTION;
4211
4212 BEGIN
4213 print_debug('Executing function CALC_VARIABLE_RATE_INTEREST using following parameters : ');
4214 print_debug('p_contract_id : '|| p_contract_id );
4215 print_debug('p_currency_code : '|| p_currency_code);
4216
4217 x_return_status := OKL_API.G_RET_STS_SUCCESS;
4218 l_principal_balance_tbl := p_principal_balance_tbl;
4219 l_principal_bal_tbl_count := l_principal_balance_tbl.COUNT;
4220
4221 print_debug ('No. of records in Principal balance table: '|| l_principal_bal_tbl_count);
4222 IF (l_principal_bal_tbl_count = 0) THEN
4223 RETURN 0;
4224 END IF;
4225 l_principal_bal_tbl_index := l_principal_balance_tbl.FIRST;
4226
4227 FOR l_principal_bal_tbl_counter in 1 .. l_principal_bal_tbl_count
4228 LOOP
4229 l_from_date := l_principal_balance_tbl(l_principal_bal_tbl_index).from_date;
4230 l_to_date := l_principal_balance_tbl(l_principal_bal_tbl_index).to_date;
4231
4232 IF (l_principal_balance_tbl(l_principal_bal_tbl_index).principal_balance > 0) THEN
4233 l_interest_amt := calculate_interest (
4234 p_api_version => 1.0,
4235 p_init_msg_list => OKL_API.G_FALSE,
4236 x_return_status => x_return_status,
4237 x_msg_count => x_msg_count,
4238 x_msg_data => x_msg_data,
4239 p_contract_id => p_contract_id,
4240 p_from_date => l_from_date,
4241 p_to_date => l_to_date,
4242 p_principal_amount => l_principal_balance_tbl(l_principal_bal_tbl_index).principal_balance,
4243 p_currency_code => p_currency_code,
4244 --Bug# 14165508
4245 p_conversion_factor => p_conversion_factor);
4246
4247 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4248 print_error_message('Unexpected error raised in call to CALCULATE_INTEREST');
4249 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
4250 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
4251 print_error_message('Error raised in call to CALCULATE_INTEREST');
4252 RAISE Calc_Var_Rate_Int_failed;
4253 END IF;
4254 ELSE
4255 l_interest_amt := 0;
4256 END IF;
4257
4258 l_total_interest_amt := l_total_interest_amt + l_interest_amt;
4259 l_principal_bal_tbl_index := l_principal_balance_tbl.NEXT(l_principal_bal_tbl_index);
4260
4261 END LOOP;
4262 print_debug('Total Interest Amount: '|| l_total_interest_amt);
4263
4264 RETURN l_total_interest_amt;
4265
4266 EXCEPTION
4267 WHEN Calc_Var_Rate_Int_failed THEN
4268 print_error_message('Exception Calc_Var_Rate_Int_failed raised in function CALC_VARIABLE_RATE_INTEREST');
4269 x_return_status := OKL_API.G_RET_STS_ERROR;
4270 RETURN NULL;
4271
4272 WHEN OTHERS THEN
4273 print_error_message('Exception raised in function CALC_VARIABLE_RATE_INTEREST');
4274 Okl_Api.SET_MESSAGE(
4275 p_app_name => G_APP_NAME,
4276 p_msg_name => G_UNEXPECTED_ERROR,
4277 p_token1 => G_SQLCODE_TOKEN,
4278 p_token1_value => SQLCODE,
4279 p_token2 => G_SQLERRM_TOKEN,
4280 p_token2_value => SQLERRM);
4281 x_return_status := OKL_API.G_RET_STS_ERROR;
4282 RETURN NULL;
4283
4284
4285 END Calc_Variable_Rate_Interest;
4286
4287 ------------------------------------------------------------------------------
4288
4289 -- Start of Comments
4290 -- Created By: Ramesh Seela
4291 -- Procedure Name UPD_VIR_PARAMS_WITH_INVOICE
4292 -- Description: This procedure is called by Variable Interest Calculation for Loans
4293 -- Inputs :
4294 -- Output : Interest Calculated
4295 -- Dependencies:
4296 -- Parameters: Start Date, End Date, Interest Rate Range.
4297 -- Version: 1.0
4298 -- End of Comments
4299
4300 ------------------------------------------------------------------------------
4301 Procedure upd_vir_params_with_invoice (
4302 p_api_version IN NUMBER,
4303 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
4304 x_return_status OUT NOCOPY VARCHAR2,
4305 x_msg_count OUT NOCOPY NUMBER,
4306 x_msg_data OUT NOCOPY VARCHAR2,
4307 p_source_id IN NUMBER,
4308 p_catchup_amt IN NUMBER DEFAULT NULL,
4309 p_catchup_settlement_code IN VARCHAR2 DEFAULT NULL,
4310 p_vir_tbl IN vir_tbl_type,
4311 x_vir_tbl OUT NOCOPY vir_tbl_type,
4312 --Bug# 12974796
4313 p_source_table IN VARCHAR2 DEFAULT NULL) IS
4314
4315 l_api_name CONSTANT VARCHAR2(30) := 'UPD_VIR_PARAMS_WITH_INVOICE';
4316 l_api_version CONSTANT NUMBER := 1.0;
4317 l_index NUMBER := 0;
4318
4319 BEGIN
4320 x_return_status := OKL_API.G_RET_STS_SUCCESS;
4321 x_vir_tbl := p_vir_tbl;
4322
4323 print_debug('Executing procedure UPD_VIR_PARAMS_WITH_INVOICE using following parameters : ');
4324 print_debug(' p_source_id : '|| p_source_id );
4325 print_debug(' p_catchup_amt : '|| p_catchup_amt );
4326 print_debug(' p_catchup_settlement_code : '|| p_catchup_settlement_code );
4327
4328 print_debug(' g_vir_tbl_counter : '|| g_vir_tbl_counter );
4329 -- 5034946
4330 IF (NVL(g_vir_tbl_counter,0) > 0 ) THEN
4331 FOR l_index in 1 .. g_vir_tbl_counter
4332 LOOP
4333 x_vir_tbl(l_index).source_id := p_source_id;
4334
4335 --Bug# 12974796
4336 IF p_source_table IS NOT NULL THEN
4337 x_vir_tbl(l_index).source_table := p_source_table;
4338 END IF;
4339
4340 IF (p_source_table = 'OKL_VAR_INT_PARAMS') THEN
4341 x_vir_tbl(l_index).source_id := x_vir_tbl(l_index).id;
4342 END IF;
4343 --Bug# 12974796
4344
4345 END LOOP;
4346
4347 IF p_catchup_amt IS NOT NULL THEN
4348 x_vir_tbl(x_vir_tbl.LAST).catchup_amt := p_catchup_amt;
4349 END IF;
4350
4351 IF p_catchup_settlement_code IS NOT NULL THEN
4352 x_vir_tbl(x_vir_tbl.LAST).catchup_settlement_code := p_catchup_settlement_code;
4353 END IF;
4354
4355 END IF;
4356
4357 EXCEPTION
4358
4359 WHEN OTHERS THEN
4360 print_error_message('Exception raised in procedure UPD_VIR_PARAMS_WITH_INVOICE');
4361 x_return_status := OKL_API.G_RET_STS_ERROR;
4362 Okl_Api.SET_MESSAGE(
4363 p_app_name => G_APP_NAME,
4364 p_msg_name => G_UNEXPECTED_ERROR,
4365 p_token1 => G_SQLCODE_TOKEN,
4366 p_token1_value => SQLCODE,
4367 p_token2 => G_SQLERRM_TOKEN,
4368 p_token2_value => SQLERRM);
4369
4370 END upd_vir_params_with_invoice;
4371
4372 ------------------------------------------------------------------------------
4373 -- Start of Comments
4374 -- Created By: Ramesh Seela
4375 -- Procedure Name print_g_vir_tbl
4376 -- Description: This procedure prints all the records in the PL/SQL table g_vir_tbl
4377 --
4378 -- Dependencies:
4379 -- Parameters: .
4380 -- Version: 1.0
4381 -- End of Comments
4382
4383 ------------------------------------------------------------------------------
4384
4385 PROCEDURE print_vir_tbl ( p_vir_tbl IN vir_tbl_type) IS
4386
4387 l_rec_count NUMBER;
4388 l_index NUMBER;
4389 l_counter NUMBER := 0;
4390 BEGIN
4391 l_rec_count := p_vir_tbl.COUNT;
4392 IF (l_rec_count > 0) THEN
4393 l_index := p_vir_tbl.FIRST;
4394 print_debug('VIR Table : ');
4395 ELSE
4396 print_debug('No records exist in the table');
4397 END IF;
4398 FOR l_vir_tbl_counter in 1 .. l_rec_count
4399 LOOP
4400 l_counter := l_counter + 1;
4401 print_debug( 'Record Number : '||l_counter);
4402 print_debug( 'id : '||p_vir_tbl(l_index).id );
4403 print_debug( 'khr_id : '||p_vir_tbl(l_index).khr_id);
4404 print_debug( 'source_table : '|| p_vir_tbl(l_index).source_table);
4405 print_debug( 'source_id : '|| p_vir_tbl(l_index).source_id);
4406 print_debug( 'interest_rate : '|| p_vir_tbl(l_index).interest_rate);
4407 print_debug( 'interest_calc_start_date : '|| p_vir_tbl(l_index).interest_calc_start_date);
4408 print_debug( 'interest_calc_end_date : '|| p_vir_tbl(l_index).interest_calc_end_date);
4409 print_debug( 'calc_method_code : '|| p_vir_tbl(l_index).calc_method_code);
4410 print_debug( 'principal_balance : '|| p_vir_tbl(l_index).principal_balance);
4411 print_debug( 'valid_yn : '|| p_vir_tbl(l_index).valid_yn);
4412 print_debug( 'Object_Version_Number : '|| p_vir_tbl(l_index).Object_Version_Number);
4413 print_debug( 'Org ID : '|| p_vir_tbl(l_index).Org_id);
4414 print_debug( 'request ID : '|| p_vir_tbl(l_index).request_id);
4415 print_debug( 'Program Application ID : '|| p_vir_tbl(l_index).program_application_id);
4416 print_debug( 'program ID : '|| p_vir_tbl(l_index).program_id);
4417 print_debug( 'Program Update date : '|| p_vir_tbl(l_index).program_update_date);
4418 print_debug( 'attribute category : '|| p_vir_tbl(l_index).attribute_category);
4419 print_debug( 'attribute1 : '|| p_vir_tbl(l_index).attribute1);
4420 print_debug( 'attribute2 : '|| p_vir_tbl(l_index).attribute2);
4421 print_debug( 'attribute3 : '|| p_vir_tbl(l_index).attribute3);
4422 print_debug( 'attribute4 : '|| p_vir_tbl(l_index).attribute4);
4423 print_debug( 'attribute5 : '|| p_vir_tbl(l_index).attribute5);
4424 print_debug( 'attribute6 : '|| p_vir_tbl(l_index).attribute6);
4425 print_debug( 'attribute7 : '|| p_vir_tbl(l_index).attribute7);
4426 print_debug( 'attribute8 : '|| p_vir_tbl(l_index).attribute8);
4427 print_debug( 'attribute9 : '|| p_vir_tbl(l_index).attribute9);
4428 print_debug( 'attribute10 : '|| p_vir_tbl(l_index).attribute10);
4429 print_debug( 'attribute11 : '|| p_vir_tbl(l_index).attribute11);
4430 print_debug( 'attribute12 : '|| p_vir_tbl(l_index).attribute12);
4431 print_debug( 'attribute13 : '|| p_vir_tbl(l_index).attribute13);
4432 print_debug( 'attribute14 : '|| p_vir_tbl(l_index).attribute14);
4433 print_debug( 'attribute15 : '|| p_vir_tbl(l_index).attribute15);
4434 print_debug( 'created_by : '|| p_vir_tbl(l_index).created_by);
4435 print_debug( 'creation_date : '|| p_vir_tbl(l_index).creation_date);
4436 print_debug( 'last_updated_by : '|| p_vir_tbl(l_index).last_updated_by);
4437 print_debug( 'last_update_date : '|| p_vir_tbl(l_index).last_update_date);
4438 print_debug( 'last_update_login : '|| p_vir_tbl(l_index).last_update_login);
4439 print_debug( 'interest_amt : '|| p_vir_tbl(l_index).interest_amt);
4440 print_debug( 'interest_calc_days : '|| p_vir_tbl(l_index).interest_calc_days);
4441 print_debug( 'kle_id : '|| p_vir_tbl(l_index).kle_id);
4442 l_index := p_vir_tbl.NEXT(l_index);
4443 END LOOP;
4444 EXCEPTION
4445 WHEN OTHERS THEN
4446 print_error_message('Exception raised in procedure PRINT_VIR_TBL');
4447 Okl_Api.SET_MESSAGE(
4448 p_app_name => G_APP_NAME,
4449 p_msg_name => G_UNEXPECTED_ERROR,
4450 p_token1 => G_SQLCODE_TOKEN,
4451 p_token1_value => SQLCODE,
4452 p_token2 => G_SQLERRM_TOKEN,
4453 p_token2_value => SQLERRM);
4454 END;
4455
4456 ------------------------------------------------------------------------------
4457
4458 FUNCTION calculate_from_khr_start_date(p_khr_id IN NUMBER,
4459 p_from_date IN DATE) RETURN VARCHAR2 IS
4460
4461 l_return_value varchar2(10) := 'N';
4462
4463 --checks for online rebook
4464 CURSOR l_rebook_csr(cp_khr_id NUMBER) IS
4465 SELECT 'Y' return_value
4466 FROM okc_k_headers_b chrb,
4467 okc_k_headers_b chrb2,
4468 okl_trx_contracts ktrx
4469 WHERE ktrx.khr_id_old = chrb.id
4470 AND ktrx.tsu_code = 'PROCESSED'
4471 AND ktrx.rbr_code IS NOT NULL
4472 AND ktrx.tcn_type = 'TRBK'
4473 --rkuttiya added for 12.1.1 Multi GAAP
4474 AND ktrx.representation_type = 'PRIMARY'
4475 --
4476 AND chrb.id = cp_khr_id
4477 AND chrb2.orig_system_source_code = 'OKL_REBOOK'
4478 AND chrb2.id = ktrx.khr_id_new
4479 AND NOT EXISTS (select 1 FROM OKL_VAR_PRINCIPAL_BAL_TXN vpb
4480 WHERE vpb.khr_id = chrb.id
4481 AND vpb.source_table = 'OKL_TRX_CONTRACTS'
4482 AND vpb.int_cal_process = 'VARIABLE_INTEREST'
4483 AND vpb.source_id = ktrx.id);
4484
4485 --checks if newly created Daily Interest - Principal stream elements exist
4486 --prior to date passed
4487 CURSOR l_daily_int_strm_csr(cp_khr_id NUMBER, cp_from_date DATE) IS
4488 SELECT 'Y' return_value
4489 FROM okl_streams stm,
4490 okl_strm_type_b sty,
4491 okl_strm_elements sel
4492 WHERE stm.khr_id = cp_khr_id
4493 AND stm.sty_id = sty.id
4494 AND sty.stream_type_purpose = 'DAILY_INTEREST_PRINCIPAL'
4495 AND stm.id = sel.stm_id
4496 AND sel.stream_element_date < cp_from_date
4497 AND NOT EXISTS (select 1 FROM OKL_VAR_PRINCIPAL_BAL_TXN vpb
4498 WHERE vpb.khr_id = stm.khr_id
4499 AND vpb.source_table = 'OKL_STRM_ELEMENTS_V'
4500 AND vpb.int_cal_process = 'VARIABLE_INTEREST'
4501 AND vpb.source_id = sel.id);
4502
4503 --checks if newly created Principal Catchup stream elements exist
4504 --prior to date passed
4505 CURSOR l_prin_catch_strm_csr(cp_khr_id NUMBER, cp_from_date DATE) IS
4506 SELECT 'Y' return_value
4507 FROM okl_streams stm,
4508 okl_strm_type_b sty,
4509 okl_strm_elements sel
4510 WHERE stm.khr_id = cp_khr_id
4511 AND stm.sty_id = sty.id
4512 AND sty.stream_type_purpose = 'PRINCIPAL_CATCHUP'
4513 AND stm.id = sel.stm_id
4514 AND sel.stream_element_date < cp_from_date
4515 AND NOT EXISTS (select 1 FROM OKL_VAR_PRINCIPAL_BAL_TXN vpb
4516 WHERE vpb.khr_id = stm.khr_id
4517 AND vpb.source_table = 'OKL_STRM_ELEMENTS_V'
4518 AND vpb.int_cal_process = 'VARIABLE_INTEREST'
4519 AND vpb.source_id = sel.id);
4520
4521 --checks if newly created Receipt Application to PRINCIPAL_PAYMENT, UNSCHEDULED_PRINCIPAL_PAYMENT exist
4522 --prior to date passed
4523 -- Begin - Billing Inline changes - Bug#5898792 - varangan - 23/2/2007
4524 --Bug# 6819044: Fetch receipt applications correctly when
4525 -- invoices have lines from multiple contracts
4526 CURSOR l_rcpt_app_csr(cp_khr_id NUMBER, cp_from_date DATE) IS
4527 SELECT /*+ leading(tai, til, tld, sty, ractrl, aps) */
4528 'Y' return_value
4529 FROM okl_txd_ar_ln_dtls_b tld
4530 ,ra_customer_trx_lines_all ractrl
4531 ,okl_txl_ar_inv_lns_b til
4532 ,okl_trx_ar_invoices_b tai
4533 ,ar_payment_schedules_all aps
4534 ,ar_receivable_applications_all raa
4535 ,ar_cash_receipts_all cra
4536 ,okl_strm_type_b sty
4537 WHERE tai.trx_status_code = 'PROCESSED'
4538 AND tai.khr_id = cp_khr_id
4539 AND tld.khr_id = cp_khr_id
4540 AND ractrl.customer_trx_id = aps.customer_trx_id
4541 AND raa.applied_customer_trx_id = aps.customer_trx_id
4542 AND aps.class = 'INV'
4543 AND raa.application_type = 'CASH'
4544 AND raa.status = 'APP'
4545 AND raa.display = 'Y'
4546 AND cra.receipt_date < cp_from_date
4547 AND raa.cash_receipt_id = cra.cash_receipt_id
4548 AND tld.sty_id = sty.id
4549 AND sty.stream_type_purpose IN ('PRINCIPAL_PAYMENT', 'UNSCHEDULED_PRINCIPAL_PAYMENT')
4550 AND to_char(tld.id) = ractrl.interface_line_attribute14
4551 AND tld.til_id_details = til.id
4552 AND til.tai_id = tai.id
4553 AND NOT EXISTS (select 1 FROM OKL_VAR_PRINCIPAL_BAL_TXN vpb
4554 WHERE vpb.khr_id = tld.khr_id
4555 AND vpb.source_table = 'AR_RECEIVABLE_APPLICATIONS_ALL'
4556 AND vpb.int_cal_process = 'VARIABLE_INTEREST'
4557 AND vpb.source_id = raa.receivable_application_id)
4558 AND EXISTS (SELECT 1
4559 FROM ar_distributions_all ad
4560 WHERE raa.receivable_application_id = ad.source_id
4561 AND ad.source_table = 'RA'
4562 AND (ad.ref_customer_trx_Line_Id IS NULL OR
4563 ad.ref_customer_trx_Line_Id = ractrl.customer_trx_line_id));
4564 -- End - Billing Inline changes - Bug#5898792 - varangan - 23/2/2007
4565
4566 --checks if newly created Borrower Payment exist
4567 --prior to date passed
4568 -- sjalasut, modified the cursor to have khr_id be passed from okl_txl_ap_inv_lns_all_b
4569 CURSOR l_borrow_payment_csr(cp_khr_id NUMBER, cp_from_date DATE) IS
4570 SELECT 'Y' return_value
4571 FROM ap_invoices_all ap_inv,
4572 okl_trx_ap_invoices_v okl_inv,
4573 ap_invoice_payment_history_v iph
4574 ,okl_cnsld_ap_invs_all cnsld
4575 ,okl_txl_ap_inv_lns_all_b okl_inv_ln
4576 ,fnd_application fnd_app
4577 WHERE okl_inv.id = okl_inv_ln.tap_id
4578 AND okl_inv_ln.khr_id = cp_khr_id
4579 AND ap_inv.application_id = fnd_app.application_id
4580 AND fnd_app.application_short_name = 'OKL'
4581 AND okl_inv_ln.cnsld_ap_inv_id = cnsld.cnsld_ap_inv_id
4582 AND cnsld.cnsld_ap_inv_id = to_number(ap_inv.reference_key1)
4583 AND okl_inv.funding_type_code = 'BORROWER_PAYMENT'
4584 AND ap_inv.invoice_id = iph.invoice_id
4585 AND iph.check_date < cp_from_date
4586 AND NOT EXISTS (select 1 FROM OKL_VAR_PRINCIPAL_BAL_TXN vpb
4587 WHERE vpb.khr_id = okl_inv_ln.khr_id
4588 AND vpb.source_table = 'AP_INVOICE_PAYMENTS_ALL'
4589 AND vpb.int_cal_process = 'VARIABLE_INTEREST'
4590 AND vpb.source_id = iph.invoice_payment_id);
4591
4592 --checks if newly created records for okl_contract_balances which have the asset balances
4593 --as of the partial termination date exist prior to date passed
4594 CURSOR l_partial_term_csr(cp_khr_id NUMBER, cp_from_date DATE) IS
4595 SELECT 'Y' return_value
4596 FROM okl_contract_balances ocb
4597 WHERE ocb.khr_id = cp_khr_id
4598 AND ocb.termination_date < cp_from_date
4599 AND NOT EXISTS (select 1 FROM OKL_VAR_PRINCIPAL_BAL_TXN vpb
4600 WHERE vpb.khr_id = ocb.khr_id
4601 AND vpb.source_table = 'OKL_CONTRACT_BALANCES'
4602 AND vpb.int_cal_process = 'VARIABLE_INTEREST'
4603 AND vpb.source_id = ocb.id);
4604
4605 --Bug# 14179413: Include Credit Memos and Adjustments when calculating
4606 -- Actual Principal Balance
4607 CURSOR l_credit_memo_csr(cp_khr_id NUMBER, cp_from_date DATE) IS
4608 SELECT /*+ leading(tai, til, tld, sty, ractrl, aps) */
4609 'Y' return_value
4610 FROM okl_txd_ar_ln_dtls_b tld
4611 ,ra_customer_trx_lines_all ractrl
4612 ,okl_txl_ar_inv_lns_b til
4613 ,okl_trx_ar_invoices_b tai
4614 ,ar_payment_schedules_all aps
4615 ,ar_receivable_applications_all raa
4616 ,ra_customer_trx_all cm
4617 ,okl_strm_type_b sty
4618 WHERE tai.trx_status_code = 'PROCESSED'
4619 AND tai.khr_id = cp_khr_id
4620 AND tld.khr_id = cp_khr_id
4621 AND ractrl.customer_trx_id = aps.customer_trx_id
4622 AND raa.applied_customer_trx_id = aps.customer_trx_id
4623 AND aps.class = 'INV'
4624 AND raa.application_type = 'CM'
4625 AND raa.status = 'APP'
4626 AND raa.display = 'Y'
4627 AND cm.trx_date < cp_from_date
4628 AND raa.customer_trx_id = cm.customer_trx_id
4629 AND tld.sty_id = sty.id
4630 AND sty.stream_type_purpose IN ('PRINCIPAL_PAYMENT', 'UNSCHEDULED_PRINCIPAL_PAYMENT')
4631 AND to_char(tld.id) = ractrl.interface_line_attribute14
4632 AND tld.til_id_details = til.id
4633 AND til.tai_id = tai.id
4634 AND NOT EXISTS (select 1 FROM OKL_VAR_PRINCIPAL_BAL_TXN vpb
4635 WHERE vpb.khr_id = tld.khr_id
4636 AND vpb.source_table = 'AR_RECEIVABLE_APPLICATIONS_ALL'
4637 AND vpb.int_cal_process = 'VARIABLE_INTEREST'
4638 AND vpb.source_id = raa.receivable_application_id)
4639 AND EXISTS (SELECT 1
4640 FROM ar_distributions_all ad
4641 WHERE raa.receivable_application_id = ad.source_id
4642 AND ad.source_table = 'RA'
4643 AND (ad.ref_customer_trx_Line_Id IS NULL OR
4644 ad.ref_customer_trx_Line_Id = ractrl.customer_trx_line_id));
4645
4646 --Bug# 14179413: Include Credit Memos and Adjustments when calculating
4647 -- Actual Principal Balance
4648 CURSOR l_adjustment_csr(cp_khr_id NUMBER, cp_from_date DATE) IS
4649 SELECT /*+ leading(tai, til, tld, sty, ractrl, aps) */
4650 'Y' return_value
4651 FROM okl_txd_ar_ln_dtls_b tld
4652 ,ra_customer_trx_lines_all ractrl
4653 ,okl_txl_ar_inv_lns_b til
4654 ,okl_trx_ar_invoices_b tai
4655 ,ar_payment_schedules_all aps
4656 ,ar_adjustments_all adj
4657 ,okl_strm_type_b sty
4658 WHERE tai.trx_status_code = 'PROCESSED'
4659 AND tai.khr_id = cp_khr_id
4660 AND tld.khr_id = cp_khr_id
4661 AND ractrl.customer_trx_id = aps.customer_trx_id
4662 AND adj.customer_trx_id = aps.customer_trx_id
4663 AND aps.class = 'INV'
4664 AND adj.status = 'A'
4665 AND adj.apply_date < cp_from_date
4666 AND tld.sty_id = sty.id
4667 AND sty.stream_type_purpose IN ('PRINCIPAL_PAYMENT', 'UNSCHEDULED_PRINCIPAL_PAYMENT')
4668 AND to_char(tld.id) = ractrl.interface_line_attribute14
4669 AND tld.til_id_details = til.id
4670 AND til.tai_id = tai.id
4671 AND NOT EXISTS (select 1 FROM OKL_VAR_PRINCIPAL_BAL_TXN vpb
4672 WHERE vpb.khr_id = tld.khr_id
4673 AND vpb.source_table = 'AR_ADJUSTMENTS_ALL'
4674 AND vpb.int_cal_process = 'VARIABLE_INTEREST'
4675 AND vpb.source_id = adj.adjustment_id);
4676
4677 BEGIN
4678 print_debug('Executing function calculate_from_khr_start_date');
4679
4680 print_debug('Before Checking for existence of Rebook Transactions');
4681 OPEN l_rebook_csr(p_khr_id);
4682 FETCH l_rebook_csr INTO l_return_value;
4683 CLOSE l_rebook_csr;
4684 print_debug('After Checking for existence of Rebook Transactions');
4685
4686
4687 IF (G_DEAL_TYPE = 'LOAN') THEN
4688 IF (G_INTEREST_CALCULATION_BASIS = G_INT_CALC_BASIS_FLOAT) THEN
4689 IF (G_REVENUE_RECOGNITION_METHOD = 'ACTUAL') THEN
4690 print_debug('Deal Type => ' || G_DEAL_TYPE || ' Int Calc Basis => ' || G_INTEREST_CALCULATION_BASIS || ' Rev Rec Method => ' || G_REVENUE_RECOGNITION_METHOD);
4691 print_debug('Before Checking for existence of Daily Interest streams');
4692 IF (NVL(l_return_value, 'N') = 'N') THEN
4693 OPEN l_daily_int_strm_csr(p_khr_id, p_from_date);
4694 FETCH l_daily_int_strm_csr INTO l_return_value;
4695 CLOSE l_daily_int_strm_csr;
4696 END IF;
4697 print_debug('After Checking for existence of Daily Interest streams');
4698 ELSE
4699 --rev rec method = ESTIMATED AND BILLED
4700 print_debug('Deal Type => ' || G_DEAL_TYPE || ' Int Calc Basis => ' || G_INTEREST_CALCULATION_BASIS || ' Rev Rec Method => ' || G_REVENUE_RECOGNITION_METHOD);
4701 print_debug('Before Checking for existence of Receipt Applications');
4702 IF (NVL(l_return_value, 'N') = 'N') THEN
4703 OPEN l_rcpt_app_csr(p_khr_id, p_from_date);
4704 FETCH l_rcpt_app_csr INTO l_return_value;
4705 CLOSE l_rcpt_app_csr;
4706 END IF;
4707 print_debug('After Checking for existence of Receipt Applications');
4708
4709 print_debug('Before Checking for existence of Early Termination records');
4710 IF (NVL(l_return_value, 'N') = 'N') THEN
4711 OPEN l_partial_term_csr(p_khr_id, p_from_date);
4712 FETCH l_partial_term_csr INTO l_return_value;
4713 CLOSE l_partial_term_csr;
4714 END IF;
4715 print_debug('After Checking for existence of Early Termination records');
4716
4717 --Bug# 14179413
4718 print_debug('Before Checking for existence of Credit Memo');
4719 IF (NVL(l_return_value, 'N') = 'N') THEN
4720 OPEN l_credit_memo_csr(p_khr_id, p_from_date);
4721 FETCH l_credit_memo_csr INTO l_return_value;
4722 CLOSE l_credit_memo_csr;
4723 END IF;
4724 print_debug('After Checking for existence of Credit Memo');
4725
4726 print_debug('Before Checking for existence of Adjustments');
4727 IF (NVL(l_return_value, 'N') = 'N') THEN
4728 OPEN l_adjustment_csr(p_khr_id, p_from_date);
4729 FETCH l_adjustment_csr INTO l_return_value;
4730 CLOSE l_adjustment_csr;
4731 END IF;
4732 print_debug('After Checking for existence of Adjustments');
4733 --Bug# 14179413
4734
4735 END IF;
4736 ELSIF (G_INTEREST_CALCULATION_BASIS = G_INT_CALC_BASIS_CATCHUP) THEN
4737 print_debug('Deal Type => ' || G_DEAL_TYPE || ' Int Calc Basis => ' || G_INTEREST_CALCULATION_BASIS || ' Rev Rec Method => ' || G_REVENUE_RECOGNITION_METHOD);
4738 print_debug('Before Checking for existence of Receipt Applications');
4739 IF (NVL(l_return_value, 'N') = 'N') THEN
4740 OPEN l_rcpt_app_csr(p_khr_id, p_from_date);
4741 FETCH l_rcpt_app_csr INTO l_return_value;
4742 CLOSE l_rcpt_app_csr;
4743 END IF;
4744 print_debug('After Checking for existence of Receipt Applications');
4745
4746 print_debug('Before Checking for existence of Early Termination records');
4747 IF (NVL(l_return_value, 'N') = 'N') THEN
4748 OPEN l_partial_term_csr(p_khr_id, p_from_date);
4749 FETCH l_partial_term_csr INTO l_return_value;
4750 CLOSE l_partial_term_csr;
4751 END IF;
4752 print_debug('After Checking for existence of Early Termination records');
4753
4754 print_debug('Before Checking for existence of Principal Catchup streams');
4755 IF (NVL(l_return_value, 'N') = 'N') THEN
4756 OPEN l_prin_catch_strm_csr(p_khr_id, p_from_date);
4757 FETCH l_prin_catch_strm_csr INTO l_return_value;
4758 CLOSE l_prin_catch_strm_csr;
4759 END IF;
4760 print_debug('After Checking for existence of Principal Catchup streams');
4761
4762 print_debug('Before Checking for existence of Catchup settlement code');
4763 IF (NVL(l_return_value, 'N') = 'N') THEN
4764 IF (G_CATCHUP_SETTLEMENT_CODE = 'NOT_ADJUST') THEN
4765 l_return_value := 'Y';
4766 END IF;
4767 END IF;
4768 print_debug('After Checking for existence of Catchup settlement code');
4769
4770 --Bug# 14179413
4771 print_debug('Before Checking for existence of Credit Memo');
4772 IF (NVL(l_return_value, 'N') = 'N') THEN
4773 OPEN l_credit_memo_csr(p_khr_id, p_from_date);
4774 FETCH l_credit_memo_csr INTO l_return_value;
4775 CLOSE l_credit_memo_csr;
4776 END IF;
4777 print_debug('After Checking for existence of Credit Memo');
4778
4779 print_debug('Before Checking for existence of Adjustments');
4780 IF (NVL(l_return_value, 'N') = 'N') THEN
4781 OPEN l_adjustment_csr(p_khr_id, p_from_date);
4782 FETCH l_adjustment_csr INTO l_return_value;
4783 CLOSE l_adjustment_csr;
4784 END IF;
4785 print_debug('After Checking for existence of Adjustments');
4786 --Bug# 14179413
4787
4788 END IF;
4789 ELSIF (G_DEAL_TYPE ='LOAN-REVOLVING') THEN
4790 IF (G_REVENUE_RECOGNITION_METHOD = 'ACTUAL') THEN
4791 print_debug('Deal Type => ' || G_DEAL_TYPE || ' Int Calc Basis => ' || G_INTEREST_CALCULATION_BASIS || ' Rev Rec Method => ' || G_REVENUE_RECOGNITION_METHOD);
4792
4793 print_debug('Before Checking for existence of Borrower payments');
4794 IF (NVL(l_return_value, 'N') = 'N') THEN
4795 OPEN l_borrow_payment_csr(p_khr_id, p_from_date);
4796 FETCH l_borrow_payment_csr INTO l_return_value;
4797 CLOSE l_borrow_payment_csr;
4798 END IF;
4799 print_debug('After Checking for existence of Borrower payments');
4800
4801 print_debug('Before Checking for existence of Daily Interest streams');
4802 IF (NVL(l_return_value, 'N') = 'N') THEN
4803 OPEN l_daily_int_strm_csr(p_khr_id, p_from_date);
4804 FETCH l_daily_int_strm_csr INTO l_return_value;
4805 CLOSE l_daily_int_strm_csr;
4806 END IF;
4807 print_debug('After Checking for existence of Daily Interest streams');
4808 ELSE
4809 --rev rec method = ESTIMATED AND BILLED
4810 print_debug('Deal Type => ' || G_DEAL_TYPE || ' Int Calc Basis => ' || G_INTEREST_CALCULATION_BASIS || ' Rev Rec Method => ' || G_REVENUE_RECOGNITION_METHOD);
4811 print_debug('Before Checking for existence of Borrower payments');
4812 IF (NVL(l_return_value, 'N') = 'N') THEN
4813 OPEN l_borrow_payment_csr(p_khr_id, p_from_date);
4814 FETCH l_borrow_payment_csr INTO l_return_value;
4815 CLOSE l_borrow_payment_csr;
4816 END IF;
4817 print_debug('After Checking for existence of Borrower payments');
4818
4819 print_debug('Before Checking for existence of Receipt Applications');
4820 IF (NVL(l_return_value, 'N') = 'N') THEN
4821 OPEN l_rcpt_app_csr(p_khr_id, p_from_date);
4822 FETCH l_rcpt_app_csr INTO l_return_value;
4823 CLOSE l_rcpt_app_csr;
4824 END IF;
4825 print_debug('After Checking for existence of Receipt Applications');
4826
4827 --Bug# 14179413
4828 print_debug('Before Checking for existence of Credit Memo');
4829 IF (NVL(l_return_value, 'N') = 'N') THEN
4830 OPEN l_credit_memo_csr(p_khr_id, p_from_date);
4831 FETCH l_credit_memo_csr INTO l_return_value;
4832 CLOSE l_credit_memo_csr;
4833 END IF;
4834 print_debug('After Checking for existence of Credit Memo');
4835
4836 print_debug('Before Checking for existence of Adjustments');
4837 IF (NVL(l_return_value, 'N') = 'N') THEN
4838 OPEN l_adjustment_csr(p_khr_id, p_from_date);
4839 FETCH l_adjustment_csr INTO l_return_value;
4840 CLOSE l_adjustment_csr;
4841 END IF;
4842 print_debug('After Checking for existence of Adjustments');
4843 --Bug# 14179413
4844
4845 END IF;
4846 END IF;
4847 return NVL(l_return_value, 'N');
4848 EXCEPTION
4849 WHEN OTHERS THEN
4850 return l_return_value;
4851 END calculate_from_khr_start_date;
4852
4853 ------------------------------------------------------------------------------
4854 -- Start of Comments
4855 -- Created By: pgomes
4856 -- Procedure Name populate_txns
4857 -- Description: This procedure populates g_vpb_tbl with Daily Interest
4858 -- stream id, receipt app id, EOT id, Borrower payment id
4859 -- Dependencies:
4860 -- Parameters: .
4861 -- Version: 1.0
4862 -- End of Comments
4863
4864 ------------------------------------------------------------------------------
4865
4866 PROCEDURE populate_txns ( p_api_version IN NUMBER,
4867 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
4868 p_khr_id IN NUMBER,
4869 p_from_date IN DATE,
4870 p_to_date IN DATE,
4871 x_return_status OUT NOCOPY VARCHAR2,
4872 x_msg_count OUT NOCOPY NUMBER,
4873 x_msg_data OUT NOCOPY VARCHAR2) IS
4874
4875 l_api_name CONSTANT VARCHAR2(30) := 'populate_txns';
4876 l_api_version CONSTANT NUMBER := 1.0;
4877 L_FETCH_SIZE CONSTANT NUMBER := 100;
4878 l_source_id OKL_VAR_PRINCIPAL_BAL_TXN.source_id%TYPE;
4879 l_source_table OKL_VAR_PRINCIPAL_BAL_TXN.source_table%TYPE;
4880
4881 --get the id's of Rebook Transactions
4882 CURSOR l_rebook_csr(cp_khr_id NUMBER) IS
4883 SELECT ktrx.id source_id
4884 ,'OKL_TRX_CONTRACTS' source_table
4885 FROM okc_k_headers_b chrb,
4886 okc_k_headers_b chrb2,
4887 okl_trx_contracts ktrx
4888 WHERE ktrx.khr_id_old = chrb.id
4889 AND ktrx.tsu_code = 'PROCESSED'
4890 AND ktrx.rbr_code IS NOT NULL
4891 AND ktrx.tcn_type = 'TRBK'
4892 --rkuttiya added for 12.1.1 Multi GAAP
4893 AND ktrx.representation_type = 'PRIMARY'
4894 --
4895 AND chrb.id = cp_khr_id
4896 AND chrb2.orig_system_source_code = 'OKL_REBOOK'
4897 AND chrb2.id = ktrx.khr_id_new
4898 AND NOT EXISTS (select 1 FROM OKL_VAR_PRINCIPAL_BAL_TXN vpb
4899 WHERE vpb.khr_id = chrb.id
4900 AND vpb.source_table = 'OKL_TRX_CONTRACTS'
4901 AND vpb.int_cal_process = 'VARIABLE_INTEREST'
4902 AND vpb.source_id = ktrx.id);
4903
4904 --get the id's of Daily Interest - Principal stream elements
4905 CURSOR l_daily_int_strm_csr(cp_khr_id NUMBER, cp_from_date DATE, cp_to_date DATE) IS
4906 SELECT sel.id source_id
4907 , 'OKL_STRM_ELEMENTS_V' source_table
4908 FROM okl_streams stm,
4909 okl_strm_type_b sty,
4910 okl_strm_elements sel
4911 WHERE stm.khr_id = cp_khr_id
4912 AND stm.sty_id = sty.id
4913 AND sty.stream_type_purpose = 'DAILY_INTEREST_PRINCIPAL'
4914 AND stm.id = sel.stm_id
4915 --AND sel.stream_element_date BETWEEN cp_from_date AND cp_to_date
4916 AND sel.stream_element_date <= cp_to_date
4917 AND NOT EXISTS (select 1 FROM OKL_VAR_PRINCIPAL_BAL_TXN vpb
4918 WHERE vpb.khr_id = stm.khr_id
4919 AND vpb.source_table = 'OKL_STRM_ELEMENTS_V'
4920 AND vpb.int_cal_process = 'VARIABLE_INTEREST'
4921 AND vpb.source_id = sel.id);
4922
4923 --get the id's of Principal Catchup stream elements
4924 CURSOR l_prin_catch_strm_csr(cp_khr_id NUMBER, cp_from_date DATE, cp_to_date DATE) IS
4925 SELECT sel.id source_id
4926 , 'OKL_STRM_ELEMENTS_V' source_table
4927 FROM okl_streams stm,
4928 okl_strm_type_b sty,
4929 okl_strm_elements sel
4930 WHERE stm.khr_id = cp_khr_id
4931 AND stm.sty_id = sty.id
4932 AND sty.stream_type_purpose = 'PRINCIPAL_CATCHUP'
4933 AND stm.id = sel.stm_id
4934 --AND sel.stream_element_date BETWEEN cp_from_date AND cp_to_date
4935 AND sel.stream_element_date <= cp_to_date
4936 AND NOT EXISTS (select 1 FROM OKL_VAR_PRINCIPAL_BAL_TXN vpb
4937 WHERE vpb.khr_id = stm.khr_id
4938 AND vpb.source_table = 'OKL_STRM_ELEMENTS_V'
4939 AND vpb.int_cal_process = 'VARIABLE_INTEREST'
4940 AND vpb.source_id = sel.id);
4941
4942 --get the id's of Receipt Application to PRINCIPAL_PAYMENT, UNSCHEDULED_PRINCIPAL_PAYMENT
4943 --Begin - Billing Inline changes - Bug#5898792 - varangan - 23/2/2007
4944 --Bug# 6819044: Fetch receipt applications correctly when
4945 -- invoices have lines from multiple contracts
4946 --Bug# 7007130: Fetch unique receipt application ids for
4947 -- a contract
4948 CURSOR l_rcpt_app_csr(cp_khr_id NUMBER, cp_from_date DATE, cp_to_date DATE) IS
4949 SELECT DISTINCT raa.receivable_application_id source_id
4950 , 'AR_RECEIVABLE_APPLICATIONS_ALL' source_table
4951 FROM okl_txd_ar_ln_dtls_b tld
4952 ,ra_customer_trx_lines_all ractrl
4953 ,okl_txl_ar_inv_lns_b til
4954 ,okl_trx_ar_invoices_b tai
4955 ,ar_payment_schedules_all aps
4956 ,ar_receivable_applications_all raa
4957 ,ar_cash_receipts_all cra
4958 ,okl_strm_type_b sty
4959 WHERE tai.trx_status_code = 'PROCESSED'
4960 AND tai.khr_id = cp_khr_id
4961 AND tld.khr_id = cp_khr_id
4962 AND ractrl.customer_trx_id = aps.customer_trx_id
4963 AND raa.applied_customer_trx_id = aps.customer_trx_id
4964 AND aps.class = 'INV'
4965 AND raa.application_type = 'CASH'
4966 AND raa.status = 'APP'
4967 AND raa.display = 'Y'
4968 AND cra.receipt_date <= cp_to_date
4969 AND raa.cash_receipt_id = cra.cash_receipt_id
4970 AND tld.sty_id = sty.id
4971 AND sty.stream_type_purpose IN ('PRINCIPAL_PAYMENT', 'UNSCHEDULED_PRINCIPAL_PAYMENT')
4972 AND to_char(tld.id) = ractrl.interface_line_attribute14
4973 AND tld.til_id_details = til.id
4974 AND til.tai_id = tai.id
4975 AND NOT EXISTS (select 1 FROM OKL_VAR_PRINCIPAL_BAL_TXN vpb
4976 WHERE vpb.khr_id = tld.khr_id
4977 AND vpb.source_table = 'AR_RECEIVABLE_APPLICATIONS_ALL'
4978 AND vpb.int_cal_process = 'VARIABLE_INTEREST'
4979 AND vpb.source_id = raa.receivable_application_id)
4980 AND EXISTS (SELECT 1
4981 FROM ar_distributions_all ad
4982 WHERE raa.receivable_application_id = ad.source_id
4983 AND ad.source_table = 'RA'
4984 AND (ad.ref_customer_trx_Line_Id IS NULL OR
4985 ad.ref_customer_trx_Line_Id = ractrl.customer_trx_line_id));
4986
4987 -- End - Billing Inline changes - Bug#5898792 - varangan - 23/2/2007
4988
4989 --get the id's of Borrower Payment
4990 CURSOR l_borrow_payment_csr(cp_khr_id NUMBER, cp_from_date DATE, cp_to_date DATE) IS
4991 SELECT iph.invoice_payment_id source_id
4992 , 'AP_INVOICE_PAYMENTS_ALL' source_table
4993 FROM ap_invoices_all ap_inv,
4994 okl_trx_ap_invoices_v okl_inv,
4995 ap_invoice_payment_history_v iph
4996 ,okl_cnsld_ap_invs_all cnsld
4997 ,okl_txl_ap_inv_lns_all_b okl_inv_ln
4998 ,fnd_application fnd_app
4999 WHERE okl_inv.id = okl_inv_ln.tap_id
5000 AND okl_inv_ln.khr_id = cp_khr_id
5001 AND ap_inv.application_id = fnd_app.application_id
5002 AND fnd_app.application_short_name = 'OKL'
5003 AND okl_inv_ln.cnsld_ap_inv_id = cnsld.cnsld_ap_inv_id
5004 AND cnsld.cnsld_ap_inv_id = to_number(ap_inv.reference_key1)
5005 AND okl_inv.funding_type_code = 'BORROWER_PAYMENT'
5006 AND ap_inv.invoice_id = iph.invoice_id
5007 --AND iph.check_date BETWEEN cp_from_date AND cp_to_date
5008 AND iph.check_date <= cp_to_date
5009 AND NOT EXISTS (select 1 FROM OKL_VAR_PRINCIPAL_BAL_TXN vpb
5010 WHERE vpb.khr_id = okl_inv_ln.khr_id
5011 AND vpb.source_table = 'AP_INVOICE_PAYMENTS_ALL'
5012 AND vpb.int_cal_process = 'VARIABLE_INTEREST'
5013 AND vpb.source_id = iph.invoice_payment_id);
5014
5015 --get the id's of records from okl_contract_balances which have the asset balances
5016 --as of the partial termination date
5017 CURSOR l_partial_term_csr(cp_khr_id NUMBER, cp_from_date DATE, cp_to_date DATE) IS
5018 SELECT ocb.id source_id
5019 , 'OKL_CONTRACT_BALANCES' source_table
5020 FROM okl_contract_balances ocb
5021 WHERE ocb.khr_id = cp_khr_id
5022 AND ocb.termination_date BETWEEN cp_from_date AND cp_to_date
5023 AND NOT EXISTS (select 1 FROM OKL_VAR_PRINCIPAL_BAL_TXN vpb
5024 WHERE vpb.khr_id = ocb.khr_id
5025 AND vpb.source_table = 'OKL_CONTRACT_BALANCES'
5026 AND vpb.int_cal_process = 'VARIABLE_INTEREST'
5027 AND vpb.source_id = ocb.id);
5028
5029
5030 --Bug# 14179413: Include Credit Memos and Adjustments when calculating
5031 -- Actual Principal Balance
5032 CURSOR l_credit_memo_csr(cp_khr_id NUMBER, cp_from_date DATE, cp_to_date DATE) IS
5033 SELECT DISTINCT raa.receivable_application_id source_id
5034 , 'AR_RECEIVABLE_APPLICATIONS_ALL' source_table
5035 FROM okl_txd_ar_ln_dtls_b tld
5036 ,ra_customer_trx_lines_all ractrl
5037 ,okl_txl_ar_inv_lns_b til
5038 ,okl_trx_ar_invoices_b tai
5039 ,ar_payment_schedules_all aps
5040 ,ar_receivable_applications_all raa
5041 ,ra_customer_trx_all cm
5042 ,okl_strm_type_b sty
5043 WHERE tai.trx_status_code = 'PROCESSED'
5044 AND tai.khr_id = cp_khr_id
5045 AND tld.khr_id = cp_khr_id
5046 AND ractrl.customer_trx_id = aps.customer_trx_id
5047 AND raa.applied_customer_trx_id = aps.customer_trx_id
5048 AND aps.class = 'INV'
5049 AND raa.application_type = 'CM'
5050 AND raa.status = 'APP'
5051 AND raa.display = 'Y'
5052 AND cm.trx_date <= cp_to_date
5053 AND raa.customer_trx_id = cm.customer_trx_id
5054 AND tld.sty_id = sty.id
5055 AND sty.stream_type_purpose IN ('PRINCIPAL_PAYMENT', 'UNSCHEDULED_PRINCIPAL_PAYMENT')
5056 AND to_char(tld.id) = ractrl.interface_line_attribute14
5057 AND tld.til_id_details = til.id
5058 AND til.tai_id = tai.id
5059 AND NOT EXISTS (select 1 FROM OKL_VAR_PRINCIPAL_BAL_TXN vpb
5060 WHERE vpb.khr_id = tld.khr_id
5061 AND vpb.source_table = 'AR_RECEIVABLE_APPLICATIONS_ALL'
5062 AND vpb.int_cal_process = 'VARIABLE_INTEREST'
5063 AND vpb.source_id = raa.receivable_application_id)
5064 AND EXISTS (SELECT 1
5065 FROM ar_distributions_all ad
5066 WHERE raa.receivable_application_id = ad.source_id
5067 AND ad.source_table = 'RA'
5068 AND (ad.ref_customer_trx_Line_Id IS NULL OR
5069 ad.ref_customer_trx_Line_Id = ractrl.customer_trx_line_id));
5070
5071 --Bug# 14179413: Include Credit Memos and Adjustments when calculating
5072 -- Actual Principal Balance
5073 CURSOR l_adjustment_csr(cp_khr_id NUMBER, cp_from_date DATE, cp_to_date DATE) IS
5074 SELECT DISTINCT adj.adjustment_id source_id
5075 , 'AR_ADJUSTMENTS_ALL' source_table
5076 FROM okl_txd_ar_ln_dtls_b tld
5077 ,ra_customer_trx_lines_all ractrl
5078 ,okl_txl_ar_inv_lns_b til
5079 ,okl_trx_ar_invoices_b tai
5080 ,ar_payment_schedules_all aps
5081 ,ar_adjustments_all adj
5082 ,okl_strm_type_b sty
5083 WHERE tai.trx_status_code = 'PROCESSED'
5084 AND tai.khr_id = cp_khr_id
5085 AND tld.khr_id = cp_khr_id
5086 AND ractrl.customer_trx_id = aps.customer_trx_id
5087 AND adj.customer_trx_id = aps.customer_trx_id
5088 AND aps.class = 'INV'
5089 AND adj.status = 'A'
5090 AND adj.apply_date <= cp_to_date
5091 AND tld.sty_id = sty.id
5092 AND sty.stream_type_purpose IN ('PRINCIPAL_PAYMENT', 'UNSCHEDULED_PRINCIPAL_PAYMENT')
5093 AND to_char(tld.id) = ractrl.interface_line_attribute14
5094 AND tld.til_id_details = til.id
5095 AND til.tai_id = tai.id
5096 AND NOT EXISTS (select 1 FROM OKL_VAR_PRINCIPAL_BAL_TXN vpb
5097 WHERE vpb.khr_id = tld.khr_id
5098 AND vpb.source_table = 'AR_ADJUSTMENTS_ALL'
5099 AND vpb.int_cal_process = 'VARIABLE_INTEREST'
5100 AND vpb.source_id = adj.adjustment_id);
5101
5102 BEGIN
5103 x_return_status := OKL_API.G_RET_STS_SUCCESS;
5104 print_debug('Executing procedure populate_txns');
5105
5106 print_debug('Before fetching Rebook Transactions g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5107 OPEN l_rebook_csr(p_khr_id);
5108 LOOP
5109 --FETCH l_rebook_csr INTO g_vpb_tbl(g_vpb_tbl_counter).source_id, g_vpb_tbl(g_vpb_tbl_counter).source_table;
5110 l_source_id := NULL;
5111 l_source_table := NULL;
5112 FETCH l_rebook_csr INTO l_source_id, l_source_table;
5113 EXIT WHEN l_rebook_csr%NOTFOUND;
5114 g_vpb_tbl_counter := g_vpb_tbl_counter + 1;
5115 g_vpb_tbl(g_vpb_tbl_counter).source_id := l_source_id;
5116 g_vpb_tbl(g_vpb_tbl_counter).source_table := l_source_table;
5117 g_vpb_tbl(g_vpb_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
5118 g_vpb_tbl(g_vpb_tbl_counter).khr_id := p_khr_id;
5119 g_vpb_tbl(g_vpb_tbl_counter).int_cal_process := 'VARIABLE_INTEREST';
5120 g_vpb_tbl(g_vpb_tbl_counter).OBJECT_VERSION_NUMBER := 1.0;
5121 g_vpb_tbl(g_vpb_tbl_counter).org_id := g_authoring_org_id;
5122 g_vpb_tbl(g_vpb_tbl_counter).request_id := g_request_id;
5123 g_vpb_tbl(g_vpb_tbl_counter).program_application_id := NULL;
5124 g_vpb_tbl(g_vpb_tbl_counter).program_id := NULL;
5125 g_vpb_tbl(g_vpb_tbl_counter).program_update_date := SYSDATE;
5126 g_vpb_tbl(g_vpb_tbl_counter).attribute_category := NULL;
5127 g_vpb_tbl(g_vpb_tbl_counter).attribute1 := NULL;
5128 g_vpb_tbl(g_vpb_tbl_counter).attribute2 := NULL;
5129 g_vpb_tbl(g_vpb_tbl_counter).attribute3 := NULL;
5130 g_vpb_tbl(g_vpb_tbl_counter).attribute4 := NULL;
5131 g_vpb_tbl(g_vpb_tbl_counter).attribute5 := NULL;
5132 g_vpb_tbl(g_vpb_tbl_counter).attribute6 := NULL;
5133 g_vpb_tbl(g_vpb_tbl_counter).attribute7 := NULL;
5134 g_vpb_tbl(g_vpb_tbl_counter).attribute8 := NULL;
5135 g_vpb_tbl(g_vpb_tbl_counter).attribute9 := NULL;
5136 g_vpb_tbl(g_vpb_tbl_counter).attribute10 := NULL;
5137 g_vpb_tbl(g_vpb_tbl_counter).attribute11 := NULL;
5138 g_vpb_tbl(g_vpb_tbl_counter).attribute12 := NULL;
5139 g_vpb_tbl(g_vpb_tbl_counter).attribute13 := NULL;
5140 g_vpb_tbl(g_vpb_tbl_counter).attribute14 := NULL;
5141 g_vpb_tbl(g_vpb_tbl_counter).attribute15 := NULL;
5142 g_vpb_tbl(g_vpb_tbl_counter).created_by := FND_GLOBAL.USER_ID;
5143 g_vpb_tbl(g_vpb_tbl_counter).creation_date := SYSDATE;
5144 g_vpb_tbl(g_vpb_tbl_counter).last_updated_by := FND_GLOBAL.USER_ID;
5145 g_vpb_tbl(g_vpb_tbl_counter).last_update_date := SYSDATE;
5146 g_vpb_tbl(g_vpb_tbl_counter).last_update_login := FND_GLOBAL.LOGIN_ID;
5147 END LOOP;
5148 CLOSE l_rebook_csr;
5149 print_debug('After fetching Rebook Transactions g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5150
5151 IF (G_DEAL_TYPE = 'LOAN') THEN
5152 IF (G_INTEREST_CALCULATION_BASIS = G_INT_CALC_BASIS_FLOAT) THEN
5153 IF (G_REVENUE_RECOGNITION_METHOD = 'ACTUAL') THEN
5154 print_debug('Deal Type => ' || G_DEAL_TYPE || ' Int Calc Basis => ' || G_INTEREST_CALCULATION_BASIS || ' Rev Rec Method => ' || G_REVENUE_RECOGNITION_METHOD);
5155 print_debug('Before fetching Daily Interest streams g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5156 OPEN l_daily_int_strm_csr(p_khr_id, p_from_date, p_to_date);
5157 LOOP
5158 l_source_id := NULL;
5159 l_source_table := NULL;
5160 FETCH l_daily_int_strm_csr INTO l_source_id, l_source_table;
5161 EXIT WHEN l_daily_int_strm_csr%NOTFOUND;
5162 g_vpb_tbl_counter := g_vpb_tbl_counter + 1;
5163 g_vpb_tbl(g_vpb_tbl_counter).source_id := l_source_id;
5164 g_vpb_tbl(g_vpb_tbl_counter).source_table := l_source_table;
5165 g_vpb_tbl(g_vpb_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
5166 g_vpb_tbl(g_vpb_tbl_counter).khr_id := p_khr_id;
5167 g_vpb_tbl(g_vpb_tbl_counter).int_cal_process := 'VARIABLE_INTEREST';
5168 g_vpb_tbl(g_vpb_tbl_counter).OBJECT_VERSION_NUMBER := 1.0;
5169 g_vpb_tbl(g_vpb_tbl_counter).org_id := g_authoring_org_id;
5170 g_vpb_tbl(g_vpb_tbl_counter).request_id := g_request_id;
5171 g_vpb_tbl(g_vpb_tbl_counter).program_application_id := NULL;
5172 g_vpb_tbl(g_vpb_tbl_counter).program_id := NULL;
5173 g_vpb_tbl(g_vpb_tbl_counter).program_update_date := SYSDATE;
5174 g_vpb_tbl(g_vpb_tbl_counter).attribute_category := NULL;
5175 g_vpb_tbl(g_vpb_tbl_counter).attribute1 := NULL;
5176 g_vpb_tbl(g_vpb_tbl_counter).attribute2 := NULL;
5177 g_vpb_tbl(g_vpb_tbl_counter).attribute3 := NULL;
5178 g_vpb_tbl(g_vpb_tbl_counter).attribute4 := NULL;
5179 g_vpb_tbl(g_vpb_tbl_counter).attribute5 := NULL;
5180 g_vpb_tbl(g_vpb_tbl_counter).attribute6 := NULL;
5181 g_vpb_tbl(g_vpb_tbl_counter).attribute7 := NULL;
5182 g_vpb_tbl(g_vpb_tbl_counter).attribute8 := NULL;
5183 g_vpb_tbl(g_vpb_tbl_counter).attribute9 := NULL;
5184 g_vpb_tbl(g_vpb_tbl_counter).attribute10 := NULL;
5185 g_vpb_tbl(g_vpb_tbl_counter).attribute11 := NULL;
5186 g_vpb_tbl(g_vpb_tbl_counter).attribute12 := NULL;
5187 g_vpb_tbl(g_vpb_tbl_counter).attribute13 := NULL;
5188 g_vpb_tbl(g_vpb_tbl_counter).attribute14 := NULL;
5189 g_vpb_tbl(g_vpb_tbl_counter).attribute15 := NULL;
5190 g_vpb_tbl(g_vpb_tbl_counter).created_by := FND_GLOBAL.USER_ID;
5191 g_vpb_tbl(g_vpb_tbl_counter).creation_date := SYSDATE;
5192 g_vpb_tbl(g_vpb_tbl_counter).last_updated_by := FND_GLOBAL.USER_ID;
5193 g_vpb_tbl(g_vpb_tbl_counter).last_update_date := SYSDATE;
5194 g_vpb_tbl(g_vpb_tbl_counter).last_update_login := FND_GLOBAL.LOGIN_ID;
5195 END LOOP;
5196 CLOSE l_daily_int_strm_csr;
5197 print_debug('After fetching Daily Interest streams g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5198 ELSE
5199 --rev rec method = ESTIMATED AND BILLED
5200 IF (G_PRINCIPAL_BASIS_CODE = 'ACTUAL') THEN
5201 print_debug('Deal Type => ' || G_DEAL_TYPE || ' Int Calc Basis => ' || G_INTEREST_CALCULATION_BASIS || ' Rev Rec Method => ' || G_REVENUE_RECOGNITION_METHOD);
5202 print_debug('Before fetching Receipt Applications g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5203 OPEN l_rcpt_app_csr(p_khr_id, p_from_date, p_to_date);
5204 LOOP
5205 l_source_id := NULL;
5206 l_source_table := NULL;
5207 FETCH l_rcpt_app_csr INTO l_source_id, l_source_table;
5208 EXIT WHEN l_rcpt_app_csr%NOTFOUND;
5209 g_vpb_tbl_counter := g_vpb_tbl_counter + 1;
5210 g_vpb_tbl(g_vpb_tbl_counter).source_id := l_source_id;
5211 g_vpb_tbl(g_vpb_tbl_counter).source_table := l_source_table;
5212 g_vpb_tbl(g_vpb_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
5213 g_vpb_tbl(g_vpb_tbl_counter).khr_id := p_khr_id;
5214 g_vpb_tbl(g_vpb_tbl_counter).int_cal_process := 'VARIABLE_INTEREST';
5215 g_vpb_tbl(g_vpb_tbl_counter).OBJECT_VERSION_NUMBER := 1.0;
5216 g_vpb_tbl(g_vpb_tbl_counter).org_id := g_authoring_org_id;
5217 g_vpb_tbl(g_vpb_tbl_counter).request_id := g_request_id;
5218 g_vpb_tbl(g_vpb_tbl_counter).program_application_id := NULL;
5219 g_vpb_tbl(g_vpb_tbl_counter).program_id := NULL;
5220 g_vpb_tbl(g_vpb_tbl_counter).program_update_date := SYSDATE;
5221 g_vpb_tbl(g_vpb_tbl_counter).attribute_category := NULL;
5222 g_vpb_tbl(g_vpb_tbl_counter).attribute1 := NULL;
5223 g_vpb_tbl(g_vpb_tbl_counter).attribute2 := NULL;
5224 g_vpb_tbl(g_vpb_tbl_counter).attribute3 := NULL;
5225 g_vpb_tbl(g_vpb_tbl_counter).attribute4 := NULL;
5226 g_vpb_tbl(g_vpb_tbl_counter).attribute5 := NULL;
5227 g_vpb_tbl(g_vpb_tbl_counter).attribute6 := NULL;
5228 g_vpb_tbl(g_vpb_tbl_counter).attribute7 := NULL;
5229 g_vpb_tbl(g_vpb_tbl_counter).attribute8 := NULL;
5230 g_vpb_tbl(g_vpb_tbl_counter).attribute9 := NULL;
5231 g_vpb_tbl(g_vpb_tbl_counter).attribute10 := NULL;
5232 g_vpb_tbl(g_vpb_tbl_counter).attribute11 := NULL;
5233 g_vpb_tbl(g_vpb_tbl_counter).attribute12 := NULL;
5234 g_vpb_tbl(g_vpb_tbl_counter).attribute13 := NULL;
5235 g_vpb_tbl(g_vpb_tbl_counter).attribute14 := NULL;
5236 g_vpb_tbl(g_vpb_tbl_counter).attribute15 := NULL;
5237 g_vpb_tbl(g_vpb_tbl_counter).created_by := FND_GLOBAL.USER_ID;
5238 g_vpb_tbl(g_vpb_tbl_counter).creation_date := SYSDATE;
5239 g_vpb_tbl(g_vpb_tbl_counter).last_updated_by := FND_GLOBAL.USER_ID;
5240 g_vpb_tbl(g_vpb_tbl_counter).last_update_date := SYSDATE;
5241 g_vpb_tbl(g_vpb_tbl_counter).last_update_login := FND_GLOBAL.LOGIN_ID;
5242 END LOOP;
5243 CLOSE l_rcpt_app_csr;
5244 print_debug('After fetching Receipt Applications g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5245
5246 print_debug('Before fetching Early Termination records g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5247 OPEN l_partial_term_csr(p_khr_id, p_from_date, p_to_date);
5248 LOOP
5249 l_source_id := NULL;
5250 l_source_table := NULL;
5251 FETCH l_partial_term_csr INTO l_source_id, l_source_table;
5252 EXIT WHEN l_partial_term_csr%NOTFOUND;
5253 g_vpb_tbl_counter := g_vpb_tbl_counter + 1;
5254 g_vpb_tbl(g_vpb_tbl_counter).source_id := l_source_id;
5255 g_vpb_tbl(g_vpb_tbl_counter).source_table := l_source_table;
5256 g_vpb_tbl(g_vpb_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
5257 g_vpb_tbl(g_vpb_tbl_counter).khr_id := p_khr_id;
5258 g_vpb_tbl(g_vpb_tbl_counter).int_cal_process := 'VARIABLE_INTEREST';
5259 g_vpb_tbl(g_vpb_tbl_counter).OBJECT_VERSION_NUMBER := 1.0;
5260 g_vpb_tbl(g_vpb_tbl_counter).org_id := g_authoring_org_id;
5261 g_vpb_tbl(g_vpb_tbl_counter).request_id := g_request_id;
5262 g_vpb_tbl(g_vpb_tbl_counter).program_application_id := NULL;
5263 g_vpb_tbl(g_vpb_tbl_counter).program_id := NULL;
5264 g_vpb_tbl(g_vpb_tbl_counter).program_update_date := SYSDATE;
5265 g_vpb_tbl(g_vpb_tbl_counter).attribute_category := NULL;
5266 g_vpb_tbl(g_vpb_tbl_counter).attribute1 := NULL;
5267 g_vpb_tbl(g_vpb_tbl_counter).attribute2 := NULL;
5268 g_vpb_tbl(g_vpb_tbl_counter).attribute3 := NULL;
5269 g_vpb_tbl(g_vpb_tbl_counter).attribute4 := NULL;
5270 g_vpb_tbl(g_vpb_tbl_counter).attribute5 := NULL;
5271 g_vpb_tbl(g_vpb_tbl_counter).attribute6 := NULL;
5272 g_vpb_tbl(g_vpb_tbl_counter).attribute7 := NULL;
5273 g_vpb_tbl(g_vpb_tbl_counter).attribute8 := NULL;
5274 g_vpb_tbl(g_vpb_tbl_counter).attribute9 := NULL;
5275 g_vpb_tbl(g_vpb_tbl_counter).attribute10 := NULL;
5276 g_vpb_tbl(g_vpb_tbl_counter).attribute11 := NULL;
5277 g_vpb_tbl(g_vpb_tbl_counter).attribute12 := NULL;
5278 g_vpb_tbl(g_vpb_tbl_counter).attribute13 := NULL;
5279 g_vpb_tbl(g_vpb_tbl_counter).attribute14 := NULL;
5280 g_vpb_tbl(g_vpb_tbl_counter).attribute15 := NULL;
5281 g_vpb_tbl(g_vpb_tbl_counter).created_by := FND_GLOBAL.USER_ID;
5282 g_vpb_tbl(g_vpb_tbl_counter).creation_date := SYSDATE;
5283 g_vpb_tbl(g_vpb_tbl_counter).last_updated_by := FND_GLOBAL.USER_ID;
5284 g_vpb_tbl(g_vpb_tbl_counter).last_update_date := SYSDATE;
5285 g_vpb_tbl(g_vpb_tbl_counter).last_update_login := FND_GLOBAL.LOGIN_ID;
5286 END LOOP;
5287 CLOSE l_partial_term_csr;
5288 print_debug('After fetching Early Termination records g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5289
5290 --Bug# 14179413
5291 print_debug('Before fetching Credit Memos g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5292 OPEN l_credit_memo_csr(p_khr_id, p_from_date, p_to_date);
5293 LOOP
5294 l_source_id := NULL;
5295 l_source_table := NULL;
5296 FETCH l_credit_memo_csr INTO l_source_id, l_source_table;
5297 EXIT WHEN l_credit_memo_csr%NOTFOUND;
5298 g_vpb_tbl_counter := g_vpb_tbl_counter + 1;
5299 g_vpb_tbl(g_vpb_tbl_counter).source_id := l_source_id;
5300 g_vpb_tbl(g_vpb_tbl_counter).source_table := l_source_table;
5301 g_vpb_tbl(g_vpb_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
5302 g_vpb_tbl(g_vpb_tbl_counter).khr_id := p_khr_id;
5303 g_vpb_tbl(g_vpb_tbl_counter).int_cal_process := 'VARIABLE_INTEREST';
5304 g_vpb_tbl(g_vpb_tbl_counter).OBJECT_VERSION_NUMBER := 1.0;
5305 g_vpb_tbl(g_vpb_tbl_counter).org_id := g_authoring_org_id;
5306 g_vpb_tbl(g_vpb_tbl_counter).request_id := g_request_id;
5307 g_vpb_tbl(g_vpb_tbl_counter).program_application_id := NULL;
5308 g_vpb_tbl(g_vpb_tbl_counter).program_id := NULL;
5309 g_vpb_tbl(g_vpb_tbl_counter).program_update_date := SYSDATE;
5310 g_vpb_tbl(g_vpb_tbl_counter).attribute_category := NULL;
5311 g_vpb_tbl(g_vpb_tbl_counter).attribute1 := NULL;
5312 g_vpb_tbl(g_vpb_tbl_counter).attribute2 := NULL;
5313 g_vpb_tbl(g_vpb_tbl_counter).attribute3 := NULL;
5314 g_vpb_tbl(g_vpb_tbl_counter).attribute4 := NULL;
5315 g_vpb_tbl(g_vpb_tbl_counter).attribute5 := NULL;
5316 g_vpb_tbl(g_vpb_tbl_counter).attribute6 := NULL;
5317 g_vpb_tbl(g_vpb_tbl_counter).attribute7 := NULL;
5318 g_vpb_tbl(g_vpb_tbl_counter).attribute8 := NULL;
5319 g_vpb_tbl(g_vpb_tbl_counter).attribute9 := NULL;
5320 g_vpb_tbl(g_vpb_tbl_counter).attribute10 := NULL;
5321 g_vpb_tbl(g_vpb_tbl_counter).attribute11 := NULL;
5322 g_vpb_tbl(g_vpb_tbl_counter).attribute12 := NULL;
5323 g_vpb_tbl(g_vpb_tbl_counter).attribute13 := NULL;
5324 g_vpb_tbl(g_vpb_tbl_counter).attribute14 := NULL;
5325 g_vpb_tbl(g_vpb_tbl_counter).attribute15 := NULL;
5326 g_vpb_tbl(g_vpb_tbl_counter).created_by := FND_GLOBAL.USER_ID;
5327 g_vpb_tbl(g_vpb_tbl_counter).creation_date := SYSDATE;
5328 g_vpb_tbl(g_vpb_tbl_counter).last_updated_by := FND_GLOBAL.USER_ID;
5329 g_vpb_tbl(g_vpb_tbl_counter).last_update_date := SYSDATE;
5330 g_vpb_tbl(g_vpb_tbl_counter).last_update_login := FND_GLOBAL.LOGIN_ID;
5331 END LOOP;
5332 CLOSE l_credit_memo_csr;
5333 print_debug('After fetching Credit Memos g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5334
5335 print_debug('Before fetching Adjustments g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5336 OPEN l_adjustment_csr(p_khr_id, p_from_date, p_to_date);
5337 LOOP
5338 l_source_id := NULL;
5339 l_source_table := NULL;
5340 FETCH l_adjustment_csr INTO l_source_id, l_source_table;
5341 EXIT WHEN l_adjustment_csr%NOTFOUND;
5342 g_vpb_tbl_counter := g_vpb_tbl_counter + 1;
5343 g_vpb_tbl(g_vpb_tbl_counter).source_id := l_source_id;
5344 g_vpb_tbl(g_vpb_tbl_counter).source_table := l_source_table;
5345 g_vpb_tbl(g_vpb_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
5346 g_vpb_tbl(g_vpb_tbl_counter).khr_id := p_khr_id;
5347 g_vpb_tbl(g_vpb_tbl_counter).int_cal_process := 'VARIABLE_INTEREST';
5348 g_vpb_tbl(g_vpb_tbl_counter).OBJECT_VERSION_NUMBER := 1.0;
5349 g_vpb_tbl(g_vpb_tbl_counter).org_id := g_authoring_org_id;
5350 g_vpb_tbl(g_vpb_tbl_counter).request_id := g_request_id;
5351 g_vpb_tbl(g_vpb_tbl_counter).program_application_id := NULL;
5352 g_vpb_tbl(g_vpb_tbl_counter).program_id := NULL;
5353 g_vpb_tbl(g_vpb_tbl_counter).program_update_date := SYSDATE;
5354 g_vpb_tbl(g_vpb_tbl_counter).attribute_category := NULL;
5355 g_vpb_tbl(g_vpb_tbl_counter).attribute1 := NULL;
5356 g_vpb_tbl(g_vpb_tbl_counter).attribute2 := NULL;
5357 g_vpb_tbl(g_vpb_tbl_counter).attribute3 := NULL;
5358 g_vpb_tbl(g_vpb_tbl_counter).attribute4 := NULL;
5359 g_vpb_tbl(g_vpb_tbl_counter).attribute5 := NULL;
5360 g_vpb_tbl(g_vpb_tbl_counter).attribute6 := NULL;
5361 g_vpb_tbl(g_vpb_tbl_counter).attribute7 := NULL;
5362 g_vpb_tbl(g_vpb_tbl_counter).attribute8 := NULL;
5363 g_vpb_tbl(g_vpb_tbl_counter).attribute9 := NULL;
5364 g_vpb_tbl(g_vpb_tbl_counter).attribute10 := NULL;
5365 g_vpb_tbl(g_vpb_tbl_counter).attribute11 := NULL;
5366 g_vpb_tbl(g_vpb_tbl_counter).attribute12 := NULL;
5367 g_vpb_tbl(g_vpb_tbl_counter).attribute13 := NULL;
5368 g_vpb_tbl(g_vpb_tbl_counter).attribute14 := NULL;
5369 g_vpb_tbl(g_vpb_tbl_counter).attribute15 := NULL;
5370 g_vpb_tbl(g_vpb_tbl_counter).created_by := FND_GLOBAL.USER_ID;
5371 g_vpb_tbl(g_vpb_tbl_counter).creation_date := SYSDATE;
5372 g_vpb_tbl(g_vpb_tbl_counter).last_updated_by := FND_GLOBAL.USER_ID;
5373 g_vpb_tbl(g_vpb_tbl_counter).last_update_date := SYSDATE;
5374 g_vpb_tbl(g_vpb_tbl_counter).last_update_login := FND_GLOBAL.LOGIN_ID;
5375 END LOOP;
5376 CLOSE l_adjustment_csr;
5377 print_debug('After fetching Adjustments g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5378 --Bug# 14179413
5379
5380 END IF;
5381 END IF;
5382 ELSIF (G_INTEREST_CALCULATION_BASIS = G_INT_CALC_BASIS_CATCHUP) THEN
5383 print_debug('Deal Type => ' || G_DEAL_TYPE || ' Int Calc Basis => ' || G_INTEREST_CALCULATION_BASIS || ' Rev Rec Method => ' || G_REVENUE_RECOGNITION_METHOD);
5384 print_debug('Before fetching Receipt Applications g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5385 OPEN l_rcpt_app_csr(p_khr_id, p_from_date, p_to_date);
5386 LOOP
5387 l_source_id := NULL;
5388 l_source_table := NULL;
5389 FETCH l_rcpt_app_csr INTO l_source_id, l_source_table;
5390 EXIT WHEN l_rcpt_app_csr%NOTFOUND;
5391 g_vpb_tbl_counter := g_vpb_tbl_counter + 1;
5392 g_vpb_tbl(g_vpb_tbl_counter).source_id := l_source_id;
5393 g_vpb_tbl(g_vpb_tbl_counter).source_table := l_source_table;
5394 g_vpb_tbl(g_vpb_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
5395 g_vpb_tbl(g_vpb_tbl_counter).khr_id := p_khr_id;
5396 g_vpb_tbl(g_vpb_tbl_counter).int_cal_process := 'VARIABLE_INTEREST';
5397 g_vpb_tbl(g_vpb_tbl_counter).OBJECT_VERSION_NUMBER := 1.0;
5398 g_vpb_tbl(g_vpb_tbl_counter).org_id := g_authoring_org_id;
5399 g_vpb_tbl(g_vpb_tbl_counter).request_id := g_request_id;
5400 g_vpb_tbl(g_vpb_tbl_counter).program_application_id := NULL;
5401 g_vpb_tbl(g_vpb_tbl_counter).program_id := NULL;
5402 g_vpb_tbl(g_vpb_tbl_counter).program_update_date := SYSDATE;
5403 g_vpb_tbl(g_vpb_tbl_counter).attribute_category := NULL;
5404 g_vpb_tbl(g_vpb_tbl_counter).attribute1 := NULL;
5405 g_vpb_tbl(g_vpb_tbl_counter).attribute2 := NULL;
5406 g_vpb_tbl(g_vpb_tbl_counter).attribute3 := NULL;
5407 g_vpb_tbl(g_vpb_tbl_counter).attribute4 := NULL;
5408 g_vpb_tbl(g_vpb_tbl_counter).attribute5 := NULL;
5409 g_vpb_tbl(g_vpb_tbl_counter).attribute6 := NULL;
5410 g_vpb_tbl(g_vpb_tbl_counter).attribute7 := NULL;
5411 g_vpb_tbl(g_vpb_tbl_counter).attribute8 := NULL;
5412 g_vpb_tbl(g_vpb_tbl_counter).attribute9 := NULL;
5413 g_vpb_tbl(g_vpb_tbl_counter).attribute10 := NULL;
5414 g_vpb_tbl(g_vpb_tbl_counter).attribute11 := NULL;
5415 g_vpb_tbl(g_vpb_tbl_counter).attribute12 := NULL;
5416 g_vpb_tbl(g_vpb_tbl_counter).attribute13 := NULL;
5417 g_vpb_tbl(g_vpb_tbl_counter).attribute14 := NULL;
5418 g_vpb_tbl(g_vpb_tbl_counter).attribute15 := NULL;
5419 g_vpb_tbl(g_vpb_tbl_counter).created_by := FND_GLOBAL.USER_ID;
5420 g_vpb_tbl(g_vpb_tbl_counter).creation_date := SYSDATE;
5421 g_vpb_tbl(g_vpb_tbl_counter).last_updated_by := FND_GLOBAL.USER_ID;
5422 g_vpb_tbl(g_vpb_tbl_counter).last_update_date := SYSDATE;
5423 g_vpb_tbl(g_vpb_tbl_counter).last_update_login := FND_GLOBAL.LOGIN_ID;
5424 END LOOP;
5425 CLOSE l_rcpt_app_csr;
5426 print_debug('After fetching Receipt Applications g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5427
5428 print_debug('Before fetching Early Termination records g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5429 OPEN l_partial_term_csr(p_khr_id, p_from_date, p_to_date);
5430 LOOP
5431 l_source_id := NULL;
5432 l_source_table := NULL;
5433 FETCH l_partial_term_csr INTO l_source_id, l_source_table;
5434 EXIT WHEN l_partial_term_csr%NOTFOUND;
5435 g_vpb_tbl_counter := g_vpb_tbl_counter + 1;
5436 g_vpb_tbl(g_vpb_tbl_counter).source_id := l_source_id;
5437 g_vpb_tbl(g_vpb_tbl_counter).source_table := l_source_table;
5438 g_vpb_tbl(g_vpb_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
5439 g_vpb_tbl(g_vpb_tbl_counter).khr_id := p_khr_id;
5440 g_vpb_tbl(g_vpb_tbl_counter).int_cal_process := 'VARIABLE_INTEREST';
5441 g_vpb_tbl(g_vpb_tbl_counter).OBJECT_VERSION_NUMBER := 1.0;
5442 g_vpb_tbl(g_vpb_tbl_counter).org_id := g_authoring_org_id;
5443 g_vpb_tbl(g_vpb_tbl_counter).request_id := g_request_id;
5444 g_vpb_tbl(g_vpb_tbl_counter).program_application_id := NULL;
5445 g_vpb_tbl(g_vpb_tbl_counter).program_id := NULL;
5446 g_vpb_tbl(g_vpb_tbl_counter).program_update_date := SYSDATE;
5447 g_vpb_tbl(g_vpb_tbl_counter).attribute_category := NULL;
5448 g_vpb_tbl(g_vpb_tbl_counter).attribute1 := NULL;
5449 g_vpb_tbl(g_vpb_tbl_counter).attribute2 := NULL;
5450 g_vpb_tbl(g_vpb_tbl_counter).attribute3 := NULL;
5451 g_vpb_tbl(g_vpb_tbl_counter).attribute4 := NULL;
5452 g_vpb_tbl(g_vpb_tbl_counter).attribute5 := NULL;
5453 g_vpb_tbl(g_vpb_tbl_counter).attribute6 := NULL;
5454 g_vpb_tbl(g_vpb_tbl_counter).attribute7 := NULL;
5455 g_vpb_tbl(g_vpb_tbl_counter).attribute8 := NULL;
5456 g_vpb_tbl(g_vpb_tbl_counter).attribute9 := NULL;
5457 g_vpb_tbl(g_vpb_tbl_counter).attribute10 := NULL;
5458 g_vpb_tbl(g_vpb_tbl_counter).attribute11 := NULL;
5459 g_vpb_tbl(g_vpb_tbl_counter).attribute12 := NULL;
5460 g_vpb_tbl(g_vpb_tbl_counter).attribute13 := NULL;
5461 g_vpb_tbl(g_vpb_tbl_counter).attribute14 := NULL;
5462 g_vpb_tbl(g_vpb_tbl_counter).attribute15 := NULL;
5463 g_vpb_tbl(g_vpb_tbl_counter).created_by := FND_GLOBAL.USER_ID;
5464 g_vpb_tbl(g_vpb_tbl_counter).creation_date := SYSDATE;
5465 g_vpb_tbl(g_vpb_tbl_counter).last_updated_by := FND_GLOBAL.USER_ID;
5466 g_vpb_tbl(g_vpb_tbl_counter).last_update_date := SYSDATE;
5467 g_vpb_tbl(g_vpb_tbl_counter).last_update_login := FND_GLOBAL.LOGIN_ID;
5468 END LOOP;
5469 CLOSE l_partial_term_csr;
5470 print_debug('After fetching Early Termination records g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5471
5472 print_debug('Before fetching Principal Catchup streams g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5473 OPEN l_prin_catch_strm_csr(p_khr_id, p_from_date, p_to_date);
5474 LOOP
5475 l_source_id := NULL;
5476 l_source_table := NULL;
5477 FETCH l_prin_catch_strm_csr INTO l_source_id, l_source_table;
5478 EXIT WHEN l_prin_catch_strm_csr%NOTFOUND;
5479 g_vpb_tbl_counter := g_vpb_tbl_counter + 1;
5480 g_vpb_tbl(g_vpb_tbl_counter).source_id := l_source_id;
5481 g_vpb_tbl(g_vpb_tbl_counter).source_table := l_source_table;
5482 g_vpb_tbl(g_vpb_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
5483 g_vpb_tbl(g_vpb_tbl_counter).khr_id := p_khr_id;
5484 g_vpb_tbl(g_vpb_tbl_counter).int_cal_process := 'VARIABLE_INTEREST';
5485 g_vpb_tbl(g_vpb_tbl_counter).OBJECT_VERSION_NUMBER := 1.0;
5486 g_vpb_tbl(g_vpb_tbl_counter).org_id := g_authoring_org_id;
5487 g_vpb_tbl(g_vpb_tbl_counter).request_id := g_request_id;
5488 g_vpb_tbl(g_vpb_tbl_counter).program_application_id := NULL;
5489 g_vpb_tbl(g_vpb_tbl_counter).program_id := NULL;
5490 g_vpb_tbl(g_vpb_tbl_counter).program_update_date := SYSDATE;
5491 g_vpb_tbl(g_vpb_tbl_counter).attribute_category := NULL;
5492 g_vpb_tbl(g_vpb_tbl_counter).attribute1 := NULL;
5493 g_vpb_tbl(g_vpb_tbl_counter).attribute2 := NULL;
5494 g_vpb_tbl(g_vpb_tbl_counter).attribute3 := NULL;
5495 g_vpb_tbl(g_vpb_tbl_counter).attribute4 := NULL;
5496 g_vpb_tbl(g_vpb_tbl_counter).attribute5 := NULL;
5497 g_vpb_tbl(g_vpb_tbl_counter).attribute6 := NULL;
5498 g_vpb_tbl(g_vpb_tbl_counter).attribute7 := NULL;
5499 g_vpb_tbl(g_vpb_tbl_counter).attribute8 := NULL;
5500 g_vpb_tbl(g_vpb_tbl_counter).attribute9 := NULL;
5501 g_vpb_tbl(g_vpb_tbl_counter).attribute10 := NULL;
5502 g_vpb_tbl(g_vpb_tbl_counter).attribute11 := NULL;
5503 g_vpb_tbl(g_vpb_tbl_counter).attribute12 := NULL;
5504 g_vpb_tbl(g_vpb_tbl_counter).attribute13 := NULL;
5505 g_vpb_tbl(g_vpb_tbl_counter).attribute14 := NULL;
5506 g_vpb_tbl(g_vpb_tbl_counter).attribute15 := NULL;
5507 g_vpb_tbl(g_vpb_tbl_counter).created_by := FND_GLOBAL.USER_ID;
5508 g_vpb_tbl(g_vpb_tbl_counter).creation_date := SYSDATE;
5509 g_vpb_tbl(g_vpb_tbl_counter).last_updated_by := FND_GLOBAL.USER_ID;
5510 g_vpb_tbl(g_vpb_tbl_counter).last_update_date := SYSDATE;
5511 g_vpb_tbl(g_vpb_tbl_counter).last_update_login := FND_GLOBAL.LOGIN_ID;
5512 END LOOP;
5513 CLOSE l_prin_catch_strm_csr;
5514 print_debug('After fetching Principal Catchup streams g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5515
5516 --Bug# 14179413
5517 print_debug('Before fetching Credit Memos g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5518 OPEN l_credit_memo_csr(p_khr_id, p_from_date, p_to_date);
5519 LOOP
5520 l_source_id := NULL;
5521 l_source_table := NULL;
5522 FETCH l_credit_memo_csr INTO l_source_id, l_source_table;
5523 EXIT WHEN l_credit_memo_csr%NOTFOUND;
5524 g_vpb_tbl_counter := g_vpb_tbl_counter + 1;
5525 g_vpb_tbl(g_vpb_tbl_counter).source_id := l_source_id;
5526 g_vpb_tbl(g_vpb_tbl_counter).source_table := l_source_table;
5527 g_vpb_tbl(g_vpb_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
5528 g_vpb_tbl(g_vpb_tbl_counter).khr_id := p_khr_id;
5529 g_vpb_tbl(g_vpb_tbl_counter).int_cal_process := 'VARIABLE_INTEREST';
5530 g_vpb_tbl(g_vpb_tbl_counter).OBJECT_VERSION_NUMBER := 1.0;
5531 g_vpb_tbl(g_vpb_tbl_counter).org_id := g_authoring_org_id;
5532 g_vpb_tbl(g_vpb_tbl_counter).request_id := g_request_id;
5533 g_vpb_tbl(g_vpb_tbl_counter).program_application_id := NULL;
5534 g_vpb_tbl(g_vpb_tbl_counter).program_id := NULL;
5535 g_vpb_tbl(g_vpb_tbl_counter).program_update_date := SYSDATE;
5536 g_vpb_tbl(g_vpb_tbl_counter).attribute_category := NULL;
5537 g_vpb_tbl(g_vpb_tbl_counter).attribute1 := NULL;
5538 g_vpb_tbl(g_vpb_tbl_counter).attribute2 := NULL;
5539 g_vpb_tbl(g_vpb_tbl_counter).attribute3 := NULL;
5540 g_vpb_tbl(g_vpb_tbl_counter).attribute4 := NULL;
5541 g_vpb_tbl(g_vpb_tbl_counter).attribute5 := NULL;
5542 g_vpb_tbl(g_vpb_tbl_counter).attribute6 := NULL;
5543 g_vpb_tbl(g_vpb_tbl_counter).attribute7 := NULL;
5544 g_vpb_tbl(g_vpb_tbl_counter).attribute8 := NULL;
5545 g_vpb_tbl(g_vpb_tbl_counter).attribute9 := NULL;
5546 g_vpb_tbl(g_vpb_tbl_counter).attribute10 := NULL;
5547 g_vpb_tbl(g_vpb_tbl_counter).attribute11 := NULL;
5548 g_vpb_tbl(g_vpb_tbl_counter).attribute12 := NULL;
5549 g_vpb_tbl(g_vpb_tbl_counter).attribute13 := NULL;
5550 g_vpb_tbl(g_vpb_tbl_counter).attribute14 := NULL;
5551 g_vpb_tbl(g_vpb_tbl_counter).attribute15 := NULL;
5552 g_vpb_tbl(g_vpb_tbl_counter).created_by := FND_GLOBAL.USER_ID;
5553 g_vpb_tbl(g_vpb_tbl_counter).creation_date := SYSDATE;
5554 g_vpb_tbl(g_vpb_tbl_counter).last_updated_by := FND_GLOBAL.USER_ID;
5555 g_vpb_tbl(g_vpb_tbl_counter).last_update_date := SYSDATE;
5556 g_vpb_tbl(g_vpb_tbl_counter).last_update_login := FND_GLOBAL.LOGIN_ID;
5557 END LOOP;
5558 CLOSE l_credit_memo_csr;
5559 print_debug('After fetching Credit Memos g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5560
5561 print_debug('Before fetching Adjustments g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5562 OPEN l_adjustment_csr(p_khr_id, p_from_date, p_to_date);
5563 LOOP
5564 l_source_id := NULL;
5565 l_source_table := NULL;
5566 FETCH l_adjustment_csr INTO l_source_id, l_source_table;
5567 EXIT WHEN l_adjustment_csr%NOTFOUND;
5568 g_vpb_tbl_counter := g_vpb_tbl_counter + 1;
5569 g_vpb_tbl(g_vpb_tbl_counter).source_id := l_source_id;
5570 g_vpb_tbl(g_vpb_tbl_counter).source_table := l_source_table;
5571 g_vpb_tbl(g_vpb_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
5572 g_vpb_tbl(g_vpb_tbl_counter).khr_id := p_khr_id;
5573 g_vpb_tbl(g_vpb_tbl_counter).int_cal_process := 'VARIABLE_INTEREST';
5574 g_vpb_tbl(g_vpb_tbl_counter).OBJECT_VERSION_NUMBER := 1.0;
5575 g_vpb_tbl(g_vpb_tbl_counter).org_id := g_authoring_org_id;
5576 g_vpb_tbl(g_vpb_tbl_counter).request_id := g_request_id;
5577 g_vpb_tbl(g_vpb_tbl_counter).program_application_id := NULL;
5578 g_vpb_tbl(g_vpb_tbl_counter).program_id := NULL;
5579 g_vpb_tbl(g_vpb_tbl_counter).program_update_date := SYSDATE;
5580 g_vpb_tbl(g_vpb_tbl_counter).attribute_category := NULL;
5581 g_vpb_tbl(g_vpb_tbl_counter).attribute1 := NULL;
5582 g_vpb_tbl(g_vpb_tbl_counter).attribute2 := NULL;
5583 g_vpb_tbl(g_vpb_tbl_counter).attribute3 := NULL;
5584 g_vpb_tbl(g_vpb_tbl_counter).attribute4 := NULL;
5585 g_vpb_tbl(g_vpb_tbl_counter).attribute5 := NULL;
5586 g_vpb_tbl(g_vpb_tbl_counter).attribute6 := NULL;
5587 g_vpb_tbl(g_vpb_tbl_counter).attribute7 := NULL;
5588 g_vpb_tbl(g_vpb_tbl_counter).attribute8 := NULL;
5589 g_vpb_tbl(g_vpb_tbl_counter).attribute9 := NULL;
5590 g_vpb_tbl(g_vpb_tbl_counter).attribute10 := NULL;
5591 g_vpb_tbl(g_vpb_tbl_counter).attribute11 := NULL;
5592 g_vpb_tbl(g_vpb_tbl_counter).attribute12 := NULL;
5593 g_vpb_tbl(g_vpb_tbl_counter).attribute13 := NULL;
5594 g_vpb_tbl(g_vpb_tbl_counter).attribute14 := NULL;
5595 g_vpb_tbl(g_vpb_tbl_counter).attribute15 := NULL;
5596 g_vpb_tbl(g_vpb_tbl_counter).created_by := FND_GLOBAL.USER_ID;
5597 g_vpb_tbl(g_vpb_tbl_counter).creation_date := SYSDATE;
5598 g_vpb_tbl(g_vpb_tbl_counter).last_updated_by := FND_GLOBAL.USER_ID;
5599 g_vpb_tbl(g_vpb_tbl_counter).last_update_date := SYSDATE;
5600 g_vpb_tbl(g_vpb_tbl_counter).last_update_login := FND_GLOBAL.LOGIN_ID;
5601 END LOOP;
5602 CLOSE l_adjustment_csr;
5603 print_debug('After fetching Adjustments g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5604 --Bug# 14179413
5605 END IF;
5606 ELSIF (G_DEAL_TYPE ='LOAN-REVOLVING') THEN
5607 IF (G_REVENUE_RECOGNITION_METHOD = 'ACTUAL') THEN
5608 print_debug('Deal Type => ' || G_DEAL_TYPE || ' Int Calc Basis => ' || G_INTEREST_CALCULATION_BASIS || ' Rev Rec Method => ' || G_REVENUE_RECOGNITION_METHOD);
5609 print_debug('Before fetching Borrower payments g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5610 OPEN l_borrow_payment_csr(p_khr_id, p_from_date, p_to_date);
5611 LOOP
5612 l_source_id := NULL;
5613 l_source_table := NULL;
5614 FETCH l_borrow_payment_csr INTO l_source_id, l_source_table;
5615 EXIT WHEN l_borrow_payment_csr%NOTFOUND;
5616 g_vpb_tbl_counter := g_vpb_tbl_counter + 1;
5617 g_vpb_tbl(g_vpb_tbl_counter).source_id := l_source_id;
5618 g_vpb_tbl(g_vpb_tbl_counter).source_table := l_source_table;
5619 g_vpb_tbl(g_vpb_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
5620 g_vpb_tbl(g_vpb_tbl_counter).khr_id := p_khr_id;
5621 g_vpb_tbl(g_vpb_tbl_counter).int_cal_process := 'VARIABLE_INTEREST';
5622 g_vpb_tbl(g_vpb_tbl_counter).OBJECT_VERSION_NUMBER := 1.0;
5623 g_vpb_tbl(g_vpb_tbl_counter).org_id := g_authoring_org_id;
5624 g_vpb_tbl(g_vpb_tbl_counter).request_id := g_request_id;
5625 g_vpb_tbl(g_vpb_tbl_counter).program_application_id := NULL;
5626 g_vpb_tbl(g_vpb_tbl_counter).program_id := NULL;
5627 g_vpb_tbl(g_vpb_tbl_counter).program_update_date := SYSDATE;
5628 g_vpb_tbl(g_vpb_tbl_counter).attribute_category := NULL;
5629 g_vpb_tbl(g_vpb_tbl_counter).attribute1 := NULL;
5630 g_vpb_tbl(g_vpb_tbl_counter).attribute2 := NULL;
5631 g_vpb_tbl(g_vpb_tbl_counter).attribute3 := NULL;
5632 g_vpb_tbl(g_vpb_tbl_counter).attribute4 := NULL;
5633 g_vpb_tbl(g_vpb_tbl_counter).attribute5 := NULL;
5634 g_vpb_tbl(g_vpb_tbl_counter).attribute6 := NULL;
5635 g_vpb_tbl(g_vpb_tbl_counter).attribute7 := NULL;
5636 g_vpb_tbl(g_vpb_tbl_counter).attribute8 := NULL;
5637 g_vpb_tbl(g_vpb_tbl_counter).attribute9 := NULL;
5638 g_vpb_tbl(g_vpb_tbl_counter).attribute10 := NULL;
5639 g_vpb_tbl(g_vpb_tbl_counter).attribute11 := NULL;
5640 g_vpb_tbl(g_vpb_tbl_counter).attribute12 := NULL;
5641 g_vpb_tbl(g_vpb_tbl_counter).attribute13 := NULL;
5642 g_vpb_tbl(g_vpb_tbl_counter).attribute14 := NULL;
5643 g_vpb_tbl(g_vpb_tbl_counter).attribute15 := NULL;
5644 g_vpb_tbl(g_vpb_tbl_counter).created_by := FND_GLOBAL.USER_ID;
5645 g_vpb_tbl(g_vpb_tbl_counter).creation_date := SYSDATE;
5646 g_vpb_tbl(g_vpb_tbl_counter).last_updated_by := FND_GLOBAL.USER_ID;
5647 g_vpb_tbl(g_vpb_tbl_counter).last_update_date := SYSDATE;
5648 g_vpb_tbl(g_vpb_tbl_counter).last_update_login := FND_GLOBAL.LOGIN_ID;
5649 END LOOP;
5650 CLOSE l_borrow_payment_csr;
5651 print_debug('After fetching Borrower payments g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5652
5653 print_debug('Before fetching Daily Interest streams g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5654 OPEN l_daily_int_strm_csr(p_khr_id, p_from_date, p_to_date);
5655 LOOP
5656 l_source_id := NULL;
5657 l_source_table := NULL;
5658 FETCH l_daily_int_strm_csr INTO l_source_id, l_source_table;
5659 EXIT WHEN l_daily_int_strm_csr%NOTFOUND;
5660 g_vpb_tbl_counter := g_vpb_tbl_counter + 1;
5661 g_vpb_tbl(g_vpb_tbl_counter).source_id := l_source_id;
5662 g_vpb_tbl(g_vpb_tbl_counter).source_table := l_source_table;
5663 g_vpb_tbl(g_vpb_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
5664 g_vpb_tbl(g_vpb_tbl_counter).khr_id := p_khr_id;
5665 g_vpb_tbl(g_vpb_tbl_counter).int_cal_process := 'VARIABLE_INTEREST';
5666 g_vpb_tbl(g_vpb_tbl_counter).OBJECT_VERSION_NUMBER := 1.0;
5667 g_vpb_tbl(g_vpb_tbl_counter).org_id := g_authoring_org_id;
5668 g_vpb_tbl(g_vpb_tbl_counter).request_id := g_request_id;
5669 g_vpb_tbl(g_vpb_tbl_counter).program_application_id := NULL;
5670 g_vpb_tbl(g_vpb_tbl_counter).program_id := NULL;
5671 g_vpb_tbl(g_vpb_tbl_counter).program_update_date := SYSDATE;
5672 g_vpb_tbl(g_vpb_tbl_counter).attribute_category := NULL;
5673 g_vpb_tbl(g_vpb_tbl_counter).attribute1 := NULL;
5674 g_vpb_tbl(g_vpb_tbl_counter).attribute2 := NULL;
5675 g_vpb_tbl(g_vpb_tbl_counter).attribute3 := NULL;
5676 g_vpb_tbl(g_vpb_tbl_counter).attribute4 := NULL;
5677 g_vpb_tbl(g_vpb_tbl_counter).attribute5 := NULL;
5678 g_vpb_tbl(g_vpb_tbl_counter).attribute6 := NULL;
5679 g_vpb_tbl(g_vpb_tbl_counter).attribute7 := NULL;
5680 g_vpb_tbl(g_vpb_tbl_counter).attribute8 := NULL;
5681 g_vpb_tbl(g_vpb_tbl_counter).attribute9 := NULL;
5682 g_vpb_tbl(g_vpb_tbl_counter).attribute10 := NULL;
5683 g_vpb_tbl(g_vpb_tbl_counter).attribute11 := NULL;
5684 g_vpb_tbl(g_vpb_tbl_counter).attribute12 := NULL;
5685 g_vpb_tbl(g_vpb_tbl_counter).attribute13 := NULL;
5686 g_vpb_tbl(g_vpb_tbl_counter).attribute14 := NULL;
5687 g_vpb_tbl(g_vpb_tbl_counter).attribute15 := NULL;
5688 g_vpb_tbl(g_vpb_tbl_counter).created_by := FND_GLOBAL.USER_ID;
5689 g_vpb_tbl(g_vpb_tbl_counter).creation_date := SYSDATE;
5690 g_vpb_tbl(g_vpb_tbl_counter).last_updated_by := FND_GLOBAL.USER_ID;
5691 g_vpb_tbl(g_vpb_tbl_counter).last_update_date := SYSDATE;
5692 g_vpb_tbl(g_vpb_tbl_counter).last_update_login := FND_GLOBAL.LOGIN_ID;
5693 END LOOP;
5694 CLOSE l_daily_int_strm_csr;
5695 print_debug('After fetching Daily Interest streams g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5696 ELSE
5697 --rev rec method = ESTIMATED AND BILLED
5698 print_debug('Deal Type => ' || G_DEAL_TYPE || ' Int Calc Basis => ' || G_INTEREST_CALCULATION_BASIS || ' Rev Rec Method => ' || G_REVENUE_RECOGNITION_METHOD);
5699 print_debug('Before fetching Borrower payments g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5700 OPEN l_borrow_payment_csr(p_khr_id, p_from_date, p_to_date);
5701 LOOP
5702 l_source_id := NULL;
5703 l_source_table := NULL;
5704 FETCH l_borrow_payment_csr INTO l_source_id, l_source_table;
5705 EXIT WHEN l_borrow_payment_csr%NOTFOUND;
5706 g_vpb_tbl_counter := g_vpb_tbl_counter + 1;
5707 g_vpb_tbl(g_vpb_tbl_counter).source_id := l_source_id;
5708 g_vpb_tbl(g_vpb_tbl_counter).source_table := l_source_table;
5709 g_vpb_tbl(g_vpb_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
5710 g_vpb_tbl(g_vpb_tbl_counter).khr_id := p_khr_id;
5711 g_vpb_tbl(g_vpb_tbl_counter).int_cal_process := 'VARIABLE_INTEREST';
5712 g_vpb_tbl(g_vpb_tbl_counter).OBJECT_VERSION_NUMBER := 1.0;
5713 g_vpb_tbl(g_vpb_tbl_counter).org_id := g_authoring_org_id;
5714 g_vpb_tbl(g_vpb_tbl_counter).request_id := g_request_id;
5715 g_vpb_tbl(g_vpb_tbl_counter).program_application_id := NULL;
5716 g_vpb_tbl(g_vpb_tbl_counter).program_id := NULL;
5717 g_vpb_tbl(g_vpb_tbl_counter).program_update_date := SYSDATE;
5718 g_vpb_tbl(g_vpb_tbl_counter).attribute_category := NULL;
5719 g_vpb_tbl(g_vpb_tbl_counter).attribute1 := NULL;
5720 g_vpb_tbl(g_vpb_tbl_counter).attribute2 := NULL;
5721 g_vpb_tbl(g_vpb_tbl_counter).attribute3 := NULL;
5722 g_vpb_tbl(g_vpb_tbl_counter).attribute4 := NULL;
5723 g_vpb_tbl(g_vpb_tbl_counter).attribute5 := NULL;
5724 g_vpb_tbl(g_vpb_tbl_counter).attribute6 := NULL;
5725 g_vpb_tbl(g_vpb_tbl_counter).attribute7 := NULL;
5726 g_vpb_tbl(g_vpb_tbl_counter).attribute8 := NULL;
5727 g_vpb_tbl(g_vpb_tbl_counter).attribute9 := NULL;
5728 g_vpb_tbl(g_vpb_tbl_counter).attribute10 := NULL;
5729 g_vpb_tbl(g_vpb_tbl_counter).attribute11 := NULL;
5730 g_vpb_tbl(g_vpb_tbl_counter).attribute12 := NULL;
5731 g_vpb_tbl(g_vpb_tbl_counter).attribute13 := NULL;
5732 g_vpb_tbl(g_vpb_tbl_counter).attribute14 := NULL;
5733 g_vpb_tbl(g_vpb_tbl_counter).attribute15 := NULL;
5734 g_vpb_tbl(g_vpb_tbl_counter).created_by := FND_GLOBAL.USER_ID;
5735 g_vpb_tbl(g_vpb_tbl_counter).creation_date := SYSDATE;
5736 g_vpb_tbl(g_vpb_tbl_counter).last_updated_by := FND_GLOBAL.USER_ID;
5737 g_vpb_tbl(g_vpb_tbl_counter).last_update_date := SYSDATE;
5738 g_vpb_tbl(g_vpb_tbl_counter).last_update_login := FND_GLOBAL.LOGIN_ID;
5739 END LOOP;
5740 CLOSE l_borrow_payment_csr;
5741 print_debug('After fetching Borrower payments g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5742
5743 print_debug('Before fetching Receipt Applications g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5744 OPEN l_rcpt_app_csr(p_khr_id, p_from_date, p_to_date);
5745 LOOP
5746 l_source_id := NULL;
5747 l_source_table := NULL;
5748 FETCH l_rcpt_app_csr INTO l_source_id, l_source_table;
5749 EXIT WHEN l_rcpt_app_csr%NOTFOUND;
5750 g_vpb_tbl_counter := g_vpb_tbl_counter + 1;
5751 g_vpb_tbl(g_vpb_tbl_counter).source_id := l_source_id;
5752 g_vpb_tbl(g_vpb_tbl_counter).source_table := l_source_table;
5753 g_vpb_tbl(g_vpb_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
5754 g_vpb_tbl(g_vpb_tbl_counter).khr_id := p_khr_id;
5755 g_vpb_tbl(g_vpb_tbl_counter).int_cal_process := 'VARIABLE_INTEREST';
5756 g_vpb_tbl(g_vpb_tbl_counter).OBJECT_VERSION_NUMBER := 1.0;
5757 g_vpb_tbl(g_vpb_tbl_counter).org_id := g_authoring_org_id;
5758 g_vpb_tbl(g_vpb_tbl_counter).request_id := g_request_id;
5759 g_vpb_tbl(g_vpb_tbl_counter).program_application_id := NULL;
5760 g_vpb_tbl(g_vpb_tbl_counter).program_id := NULL;
5761 g_vpb_tbl(g_vpb_tbl_counter).program_update_date := SYSDATE;
5762 g_vpb_tbl(g_vpb_tbl_counter).attribute_category := NULL;
5763 g_vpb_tbl(g_vpb_tbl_counter).attribute1 := NULL;
5764 g_vpb_tbl(g_vpb_tbl_counter).attribute2 := NULL;
5765 g_vpb_tbl(g_vpb_tbl_counter).attribute3 := NULL;
5766 g_vpb_tbl(g_vpb_tbl_counter).attribute4 := NULL;
5767 g_vpb_tbl(g_vpb_tbl_counter).attribute5 := NULL;
5768 g_vpb_tbl(g_vpb_tbl_counter).attribute6 := NULL;
5769 g_vpb_tbl(g_vpb_tbl_counter).attribute7 := NULL;
5770 g_vpb_tbl(g_vpb_tbl_counter).attribute8 := NULL;
5771 g_vpb_tbl(g_vpb_tbl_counter).attribute9 := NULL;
5772 g_vpb_tbl(g_vpb_tbl_counter).attribute10 := NULL;
5773 g_vpb_tbl(g_vpb_tbl_counter).attribute11 := NULL;
5774 g_vpb_tbl(g_vpb_tbl_counter).attribute12 := NULL;
5775 g_vpb_tbl(g_vpb_tbl_counter).attribute13 := NULL;
5776 g_vpb_tbl(g_vpb_tbl_counter).attribute14 := NULL;
5777 g_vpb_tbl(g_vpb_tbl_counter).attribute15 := NULL;
5778 g_vpb_tbl(g_vpb_tbl_counter).created_by := FND_GLOBAL.USER_ID;
5779 g_vpb_tbl(g_vpb_tbl_counter).creation_date := SYSDATE;
5780 g_vpb_tbl(g_vpb_tbl_counter).last_updated_by := FND_GLOBAL.USER_ID;
5781 g_vpb_tbl(g_vpb_tbl_counter).last_update_date := SYSDATE;
5782 g_vpb_tbl(g_vpb_tbl_counter).last_update_login := FND_GLOBAL.LOGIN_ID;
5783 END LOOP;
5784 CLOSE l_rcpt_app_csr;
5785 print_debug('After fetching Receipt Applications g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5786
5787 --Bug# 14179413
5788 print_debug('Before fetching Credit Memos g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5789 OPEN l_credit_memo_csr(p_khr_id, p_from_date, p_to_date);
5790 LOOP
5791 l_source_id := NULL;
5792 l_source_table := NULL;
5793 FETCH l_credit_memo_csr INTO l_source_id, l_source_table;
5794 EXIT WHEN l_credit_memo_csr%NOTFOUND;
5795 g_vpb_tbl_counter := g_vpb_tbl_counter + 1;
5796 g_vpb_tbl(g_vpb_tbl_counter).source_id := l_source_id;
5797 g_vpb_tbl(g_vpb_tbl_counter).source_table := l_source_table;
5798 g_vpb_tbl(g_vpb_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
5799 g_vpb_tbl(g_vpb_tbl_counter).khr_id := p_khr_id;
5800 g_vpb_tbl(g_vpb_tbl_counter).int_cal_process := 'VARIABLE_INTEREST';
5801 g_vpb_tbl(g_vpb_tbl_counter).OBJECT_VERSION_NUMBER := 1.0;
5802 g_vpb_tbl(g_vpb_tbl_counter).org_id := g_authoring_org_id;
5803 g_vpb_tbl(g_vpb_tbl_counter).request_id := g_request_id;
5804 g_vpb_tbl(g_vpb_tbl_counter).program_application_id := NULL;
5805 g_vpb_tbl(g_vpb_tbl_counter).program_id := NULL;
5806 g_vpb_tbl(g_vpb_tbl_counter).program_update_date := SYSDATE;
5807 g_vpb_tbl(g_vpb_tbl_counter).attribute_category := NULL;
5808 g_vpb_tbl(g_vpb_tbl_counter).attribute1 := NULL;
5809 g_vpb_tbl(g_vpb_tbl_counter).attribute2 := NULL;
5810 g_vpb_tbl(g_vpb_tbl_counter).attribute3 := NULL;
5811 g_vpb_tbl(g_vpb_tbl_counter).attribute4 := NULL;
5812 g_vpb_tbl(g_vpb_tbl_counter).attribute5 := NULL;
5813 g_vpb_tbl(g_vpb_tbl_counter).attribute6 := NULL;
5814 g_vpb_tbl(g_vpb_tbl_counter).attribute7 := NULL;
5815 g_vpb_tbl(g_vpb_tbl_counter).attribute8 := NULL;
5816 g_vpb_tbl(g_vpb_tbl_counter).attribute9 := NULL;
5817 g_vpb_tbl(g_vpb_tbl_counter).attribute10 := NULL;
5818 g_vpb_tbl(g_vpb_tbl_counter).attribute11 := NULL;
5819 g_vpb_tbl(g_vpb_tbl_counter).attribute12 := NULL;
5820 g_vpb_tbl(g_vpb_tbl_counter).attribute13 := NULL;
5821 g_vpb_tbl(g_vpb_tbl_counter).attribute14 := NULL;
5822 g_vpb_tbl(g_vpb_tbl_counter).attribute15 := NULL;
5823 g_vpb_tbl(g_vpb_tbl_counter).created_by := FND_GLOBAL.USER_ID;
5824 g_vpb_tbl(g_vpb_tbl_counter).creation_date := SYSDATE;
5825 g_vpb_tbl(g_vpb_tbl_counter).last_updated_by := FND_GLOBAL.USER_ID;
5826 g_vpb_tbl(g_vpb_tbl_counter).last_update_date := SYSDATE;
5827 g_vpb_tbl(g_vpb_tbl_counter).last_update_login := FND_GLOBAL.LOGIN_ID;
5828 END LOOP;
5829 CLOSE l_credit_memo_csr;
5830 print_debug('After fetching Credit Memos g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5831
5832 print_debug('Before fetching Adjustments g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5833 OPEN l_adjustment_csr(p_khr_id, p_from_date, p_to_date);
5834 LOOP
5835 l_source_id := NULL;
5836 l_source_table := NULL;
5837 FETCH l_adjustment_csr INTO l_source_id, l_source_table;
5838 EXIT WHEN l_adjustment_csr%NOTFOUND;
5839 g_vpb_tbl_counter := g_vpb_tbl_counter + 1;
5840 g_vpb_tbl(g_vpb_tbl_counter).source_id := l_source_id;
5841 g_vpb_tbl(g_vpb_tbl_counter).source_table := l_source_table;
5842 g_vpb_tbl(g_vpb_tbl_counter).id := okc_p_util.raw_to_number(sys_guid());
5843 g_vpb_tbl(g_vpb_tbl_counter).khr_id := p_khr_id;
5844 g_vpb_tbl(g_vpb_tbl_counter).int_cal_process := 'VARIABLE_INTEREST';
5845 g_vpb_tbl(g_vpb_tbl_counter).OBJECT_VERSION_NUMBER := 1.0;
5846 g_vpb_tbl(g_vpb_tbl_counter).org_id := g_authoring_org_id;
5847 g_vpb_tbl(g_vpb_tbl_counter).request_id := g_request_id;
5848 g_vpb_tbl(g_vpb_tbl_counter).program_application_id := NULL;
5849 g_vpb_tbl(g_vpb_tbl_counter).program_id := NULL;
5850 g_vpb_tbl(g_vpb_tbl_counter).program_update_date := SYSDATE;
5851 g_vpb_tbl(g_vpb_tbl_counter).attribute_category := NULL;
5852 g_vpb_tbl(g_vpb_tbl_counter).attribute1 := NULL;
5853 g_vpb_tbl(g_vpb_tbl_counter).attribute2 := NULL;
5854 g_vpb_tbl(g_vpb_tbl_counter).attribute3 := NULL;
5855 g_vpb_tbl(g_vpb_tbl_counter).attribute4 := NULL;
5856 g_vpb_tbl(g_vpb_tbl_counter).attribute5 := NULL;
5857 g_vpb_tbl(g_vpb_tbl_counter).attribute6 := NULL;
5858 g_vpb_tbl(g_vpb_tbl_counter).attribute7 := NULL;
5859 g_vpb_tbl(g_vpb_tbl_counter).attribute8 := NULL;
5860 g_vpb_tbl(g_vpb_tbl_counter).attribute9 := NULL;
5861 g_vpb_tbl(g_vpb_tbl_counter).attribute10 := NULL;
5862 g_vpb_tbl(g_vpb_tbl_counter).attribute11 := NULL;
5863 g_vpb_tbl(g_vpb_tbl_counter).attribute12 := NULL;
5864 g_vpb_tbl(g_vpb_tbl_counter).attribute13 := NULL;
5865 g_vpb_tbl(g_vpb_tbl_counter).attribute14 := NULL;
5866 g_vpb_tbl(g_vpb_tbl_counter).attribute15 := NULL;
5867 g_vpb_tbl(g_vpb_tbl_counter).created_by := FND_GLOBAL.USER_ID;
5868 g_vpb_tbl(g_vpb_tbl_counter).creation_date := SYSDATE;
5869 g_vpb_tbl(g_vpb_tbl_counter).last_updated_by := FND_GLOBAL.USER_ID;
5870 g_vpb_tbl(g_vpb_tbl_counter).last_update_date := SYSDATE;
5871 g_vpb_tbl(g_vpb_tbl_counter).last_update_login := FND_GLOBAL.LOGIN_ID;
5872 END LOOP;
5873 CLOSE l_adjustment_csr;
5874 print_debug('After fetching Adjustments g_vpb_tbl count is: '|| g_vpb_tbl.COUNT);
5875 --Bug# 14179413
5876
5877 END IF;
5878 END IF;
5879 EXCEPTION
5880 WHEN OTHERS THEN
5881 print_error_message('Exception raised in procedure POPULATE_TXNS');
5882 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
5883 Okl_Api.SET_MESSAGE(
5884 p_app_name => G_APP_NAME,
5885 p_msg_name => G_UNEXPECTED_ERROR,
5886 p_token1 => G_SQLCODE_TOKEN,
5887 p_token1_value => SQLCODE,
5888 p_token2 => G_SQLERRM_TOKEN,
5889 p_token2_value => SQLERRM);
5890 END populate_txns;
5891
5892 ------------------------------------------------------------------------------
5893 -- Start of Comments
5894 -- Created By: pgomes
5895 -- Procedure Name print_vpb_tbl
5896 -- Description: This procedure prints all the records in the PL/SQL table g_vpb_tbl
5897 --
5898 -- Dependencies:
5899 -- Parameters: .
5900 -- Version: 1.0
5901 -- End of Comments
5902
5903 ------------------------------------------------------------------------------
5904
5905 PROCEDURE print_vpb_tbl ( p_vpb_tbl IN vpb_tbl_type) IS
5906
5907 l_index NUMBER;
5908 BEGIN
5909 print_debug('Start => Contents of p_vpb_tbl');
5910 print_debug('******************************');
5911 l_index := p_vpb_tbl.first;
5912 LOOP
5913 EXIT when l_index IS NULL;
5914 print_debug( 'Record Number : '||l_index);
5915 print_debug( 'id : '||p_vpb_tbl(l_index).id );
5916 print_debug( 'khr_id : '||p_vpb_tbl(l_index).khr_id);
5917 print_debug( 'source_table : '|| p_vpb_tbl(l_index).source_table);
5918 print_debug( 'source_id : '|| p_vpb_tbl(l_index).source_id);
5919 print_debug( 'int_cal_process : '|| p_vpb_tbl(l_index).int_cal_process);
5920 print_debug( 'Object_Version_Number : '|| p_vpb_tbl(l_index).Object_Version_Number);
5921 print_debug( 'Org ID : '|| p_vpb_tbl(l_index).Org_id);
5922 print_debug( 'request ID : '|| p_vpb_tbl(l_index).request_id);
5923 print_debug( 'Program Application ID : '|| p_vpb_tbl(l_index).program_application_id);
5924 print_debug( 'program ID : '|| p_vpb_tbl(l_index).program_id);
5925 print_debug( 'Program Update date : '|| p_vpb_tbl(l_index).program_update_date);
5926 print_debug( 'attribute category : '|| p_vpb_tbl(l_index).attribute_category);
5927 print_debug( 'attribute1 : '|| p_vpb_tbl(l_index).attribute1);
5928 print_debug( 'attribute2 : '|| p_vpb_tbl(l_index).attribute2);
5929 print_debug( 'attribute3 : '|| p_vpb_tbl(l_index).attribute3);
5930 print_debug( 'attribute4 : '|| p_vpb_tbl(l_index).attribute4);
5931 print_debug( 'attribute5 : '|| p_vpb_tbl(l_index).attribute5);
5932 print_debug( 'attribute6 : '|| p_vpb_tbl(l_index).attribute6);
5933 print_debug( 'attribute7 : '|| p_vpb_tbl(l_index).attribute7);
5934 print_debug( 'attribute8 : '|| p_vpb_tbl(l_index).attribute8);
5935 print_debug( 'attribute9 : '|| p_vpb_tbl(l_index).attribute9);
5936 print_debug( 'attribute10 : '|| p_vpb_tbl(l_index).attribute10);
5937 print_debug( 'attribute11 : '|| p_vpb_tbl(l_index).attribute11);
5938 print_debug( 'attribute12 : '|| p_vpb_tbl(l_index).attribute12);
5939 print_debug( 'attribute13 : '|| p_vpb_tbl(l_index).attribute13);
5940 print_debug( 'attribute14 : '|| p_vpb_tbl(l_index).attribute14);
5941 print_debug( 'attribute15 : '|| p_vpb_tbl(l_index).attribute15);
5942 print_debug( 'created_by : '|| p_vpb_tbl(l_index).created_by);
5943 print_debug( 'creation_date : '|| p_vpb_tbl(l_index).creation_date);
5944 print_debug( 'last_updated_by : '|| p_vpb_tbl(l_index).last_updated_by);
5945 print_debug( 'last_update_date : '|| p_vpb_tbl(l_index).last_update_date);
5946 print_debug( 'last_update_login : '|| p_vpb_tbl(l_index).last_update_login);
5947 l_index := p_vpb_tbl.NEXT(l_index);
5948 END LOOP;
5949 print_debug('****************************');
5950 print_debug('End => Contents of p_vpb_tbl');
5951 EXCEPTION
5952 WHEN OTHERS THEN
5953 print_error_message('Exception raised in procedure PRINT_VPB_TBL');
5954 Okl_Api.SET_MESSAGE(
5955 p_app_name => G_APP_NAME,
5956 p_msg_name => G_UNEXPECTED_ERROR,
5957 p_token1 => G_SQLCODE_TOKEN,
5958 p_token1_value => SQLCODE,
5959 p_token2 => G_SQLERRM_TOKEN,
5960 p_token2_value => SQLERRM);
5961 END print_vpb_tbl;
5962
5963 ------------------------------------------------------------------------------
5964
5965 -- Start of Comments
5966 -- Created By: Ramesh Seela
5967 -- Procedure Name Create_Daily_Interest_Streams
5968 -- Description: This procedure is called by Daily Interest Calculation program
5969 -- Inputs :
5970 -- Output :
5971 -- Dependencies:
5972 -- Parameters:
5973 -- Version: 1.0
5974 -- End of Comments
5975
5976 ------------------------------------------------------------------------------
5977 Procedure Create_Daily_Interest_Streams (
5978 p_api_version IN NUMBER,
5979 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
5980 x_return_status OUT NOCOPY VARCHAR2,
5981 x_msg_count OUT NOCOPY NUMBER,
5982 x_msg_data OUT NOCOPY VARCHAR2,
5983 p_contract_id IN NUMBER,
5984 p_line_id IN NUMBER DEFAULT NULL, -- not currently used
5985 p_amount IN NUMBER,
5986 p_due_date IN DATE,
5987 p_stream_type_purpose IN VARCHAR2,
5988 p_create_invoice_flag IN VARCHAR2 DEFAULT OKL_API.G_TRUE,
5989 p_process_flag IN VARCHAR2 DEFAULT NULL,
5990 p_currency_code IN VARCHAR2 DEFAULT NULL ) IS
5991
5992 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_DAILY_INTEREST_STREAMS';
5993 l_api_version CONSTANT NUMBER := 1.0;
5994 l_invoice_id NUMBER;
5995 l_stream_element_id OKL_STRM_ELEMENTS_V.id%TYPE;
5996 i_vir_tbl vir_tbl_type;
5997 r_vir_tbl vir_tbl_type;
5998 Create_Daily_Int_Str_failed EXCEPTION;
5999 l_asset_cost NUMBER;
6000 l_total_asset_val NUMBER := 0;
6001 l_asset_line_tbl okl_kle_pvt.kle_tbl_type;
6002 l_line_index NUMBER := 0;
6003 l_index NUMBER := 0;
6004 l_asset_line_tbl_count NUMBER := 0;
6005 l_invoice_amt NUMBER;
6006 l_prorated_invoice_amt NUMBER := 0;
6007
6008
6009 CURSOR contract_line_csr (p_khr_id NUMBER, p_due_date DATE) IS
6010 SELECT id
6011 FROM okl_k_lines_full_v
6012 WHERE chr_id = p_khr_id
6013 AND lse_id = G_FIN_LINE_LTY_ID
6014 AND nvl(date_terminated, p_due_date + 1) > p_due_date
6015 ORDER BY id;
6016
6017
6018 BEGIN
6019 print_debug('Executing procedure CREATE_DAILY_INTEREST_STREAMS using following parameters : ');
6020 print_debug(' p_contract_id : '|| p_contract_id );
6021 print_debug(' p_line_id : '|| p_line_id);
6022 print_debug(' p_amount : '|| p_amount );
6023 print_debug(' p_due_date: '|| p_due_date);
6024 print_debug(' p_stream_type_purpose : '||p_stream_type_purpose);
6025 print_debug(' p_create_invoice_flag: '|| p_create_invoice_flag);
6026 print_debug(' p_process_flag : '|| p_process_flag);
6027
6028 x_return_status := OKL_API.G_RET_STS_SUCCESS;
6029
6030 Initialize_contract_params( p_api_version => 1.0,
6031 p_init_msg_list => OKL_API.G_FALSE,
6032 x_return_status => x_return_status,
6033 x_msg_count => x_msg_count,
6034 x_msg_data => x_msg_data,
6035 p_contract_id => p_contract_id
6036 );
6037 IF (x_return_status = Okl_Api.G_RET_STS_SUCCESS) THEN
6038 print_debug ('Procedure INITIALIZE_CONTRACT_PARAMS completed successfully');
6039 ELSIF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6040 print_debug ('Procedure INITIALIZE_CONTRACT_PARAMS returned unexpected error');
6041 print_error_message ('Procedure INITIALIZE_CONTRACT_PARAMS returned unexpected error');
6042 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6043 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6044 print_debug ('Procedure INITIALIZE_CONTRACT_PARAMS returned exception');
6045 print_error_message ('Procedure INITIALIZE_CONTRACT_PARAMS returned exception');
6046 RAISE Create_Daily_Int_Str_failed;
6047 END IF;
6048
6049 IF (p_stream_type_purpose = 'DAILY_INTEREST_INTEREST') THEN
6050
6051 OKL_VR_DOCUMENT_PVT.Create_Stream_Invoice (
6052 p_api_version => 1.0,
6053 p_init_msg_list => OKL_API.G_FALSE,
6054 x_return_status => x_return_status,
6055 x_msg_count => x_msg_count,
6056 x_msg_data => x_msg_data,
6057 p_contract_id => p_contract_id,
6058 p_line_id => NULL,
6059 p_amount => p_amount,
6060 p_due_date => p_due_date,
6061 p_stream_type_purpose => p_stream_type_purpose,
6062 p_create_invoice_flag => p_create_invoice_flag,
6063 p_process_flag => p_process_flag,
6064 p_parent_strm_element_id => NULL,
6065 x_invoice_id => l_invoice_id,
6066 x_stream_element_id => l_stream_element_id);
6067
6068 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6069 print_error_message('Unexpected error raised in call to CREATE_STREAM_INVOICE');
6070 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6071 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6072 print_error_message('Error raised in call to CREATE_STREAM_INVOICE');
6073 RAISE Create_Daily_Int_Str_failed;
6074 END IF;
6075
6076 i_vir_tbl := g_vir_tbl;
6077
6078 upd_vir_params_with_invoice (
6079 p_api_version => 1.0,
6080 p_init_msg_list => OKL_API.G_TRUE,
6081 x_return_status => x_return_status,
6082 x_msg_count => x_msg_count,
6083 x_msg_data => x_msg_data,
6084 p_source_id => l_stream_element_id,
6085 p_vir_tbl => i_vir_tbl,
6086 x_vir_tbl => r_vir_tbl);
6087 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6088 print_error_message('Unexpected error raised in call to UPD_VIR_PARAMS_WITH_INVOICE');
6089 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6090 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6091 print_error_message('Error raised in call to UPD_VIR_PARAMS_WITH_INVOICE');
6092 RAISE Create_Daily_Int_Str_failed;
6093 END IF;
6094
6095 g_vir_tbl := r_vir_tbl;
6096
6097 OKL_VR_DATA_HANDLER_PVT.insert_vir_params(
6098 p_api_version => 1.0,
6099 p_init_msg_list => OKL_API.G_TRUE,
6100 x_return_status => x_return_status,
6101 x_msg_count => x_msg_count,
6102 x_msg_data => x_msg_data,
6103 p_vir_tbl => g_vir_tbl);
6104 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6105 print_error_message('Unexpected error raised in call to POPULATE_VIR_PARAMS');
6106 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6107 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6108 print_error_message('Error raised in call to POPULATE_VIR_PARAMS');
6109 RAISE Create_Daily_Int_Str_failed;
6110 END IF;
6111
6112 g_vir_tbl.delete;
6113 g_vir_tbl_counter := 0;
6114
6115 ELSIF (p_stream_type_purpose = 'DAILY_INTEREST_PRINCIPAL') THEN
6116 l_total_asset_val := 0;
6117 FOR current_line in contract_line_csr(p_contract_id, p_due_date)
6118 LOOP
6119 -- Derive Asset Cost
6120 Okl_Execute_Formula_Pub.EXECUTE(
6121 p_api_version => 1.0,
6122 p_init_msg_list => OKL_API.G_FALSE,
6123 x_return_status => x_return_status,
6124 x_msg_count => x_msg_count,
6125 x_msg_data => x_msg_data,
6126 p_formula_name => 'LINE_OEC',
6127 p_contract_id => p_contract_id,
6128 p_line_id => current_line.id,
6129 x_value => l_asset_cost);
6130 IF (x_return_status = Okl_Api.G_RET_STS_SUCCESS) THEN
6131 print_debug ('Procedure OKL_EXECUTE_FORMULA_PUB.EXECUTE completed successfully');
6132 ELSIF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6133 print_debug ('Procedure OKL_EXECUTE_FORMULA_PUB.EXECUTE returned unexpected error');
6134 print_error_message ('Procedure OKL_EXECUTE_FORMULA_PUB.EXECUTE returned unexpected error');
6135 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6136 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6137 print_debug ('Procedure OKL_EXECUTE_FORMULA_PUB.EXECUTE returned exception');
6138 print_error_message ('Procedure OKL_EXECUTE_FORMULA_PUB.EXECUTE returned exception');
6139 RAISE Create_Daily_Int_Str_failed;
6140 END IF;
6141
6142 IF (l_asset_cost > 0) THEN
6143 l_line_index := l_line_index + 1;
6144 l_asset_line_tbl(l_line_index).id := current_line.id;
6145 l_asset_line_tbl(l_line_index).amount := l_asset_cost;
6146 l_total_asset_val := l_total_asset_val + l_asset_cost;
6147 print_debug('Asset id :' || l_asset_line_tbl(l_line_index).id || ' Asset Cost :' || l_asset_cost);
6148 END IF;
6149 END LOOP;
6150
6151 l_asset_line_tbl_count := l_asset_line_tbl.COUNT;
6152 l_invoice_amt := p_amount;
6153
6154 IF (l_asset_line_tbl_count > 0) THEN
6155 print_debug('Creating DAILY_INTEREST_PRINCIPAL streams for assets.');
6156
6157 FOR l_index in 1 .. l_asset_line_tbl_count
6158 LOOP
6159 l_prorated_invoice_amt := OKL_ACCOUNTING_UTIL.round_amount((l_asset_line_tbl(l_index).amount * l_invoice_amt / l_total_asset_val),p_currency_code);
6160
6161 print_debug('Creating DAILY_INTEREST_PRINCIPAL streams for asset id : ' || l_asset_line_tbl(l_index).id || ' for Amount :' || l_prorated_invoice_amt);
6162
6163 OKL_VR_DOCUMENT_PVT.Create_Stream_Invoice (
6164 p_api_version => 1.0,
6165 p_init_msg_list => OKL_API.G_FALSE,
6166 x_return_status => x_return_status,
6167 x_msg_count => x_msg_count,
6168 x_msg_data => x_msg_data,
6169 p_contract_id => p_contract_id,
6170 p_line_id => l_asset_line_tbl(l_index).id,
6171 p_amount => l_prorated_invoice_amt,
6172 p_due_date => p_due_date,
6173 p_stream_type_purpose => p_stream_type_purpose,
6174 p_create_invoice_flag => p_create_invoice_flag,
6175 p_process_flag => p_process_flag,
6176 p_parent_strm_element_id => NULL,
6177 x_invoice_id => l_invoice_id,
6178 x_stream_element_id => l_stream_element_id);
6179
6180 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6181 print_error_message('Unexpected error raised in call to CREATE_STREAM_INVOICE');
6182 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6183 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6184 print_error_message('Error raised in call to CREATE_STREAM_INVOICE');
6185 RAISE Create_Daily_Int_Str_failed;
6186 END IF;
6187 print_debug('Successfully created DAILY_INTEREST_PRINCIPAL streams for asset id : ' || l_asset_line_tbl(l_index).id || ' for Amount :' || l_prorated_invoice_amt);
6188 l_invoice_amt := l_invoice_amt - l_prorated_invoice_amt;
6189 l_total_asset_val := l_total_asset_val - l_asset_line_tbl(l_index).amount;
6190 END LOOP;
6191 ELSE /* The contract is a revolving loan */
6192 print_debug('Creating DAILY_INTEREST_PRINCIPAL streams '|| ' for Amount :' || l_invoice_amt);
6193
6194 OKL_VR_DOCUMENT_PVT.Create_Stream_Invoice (
6195 p_api_version => 1.0,
6196 p_init_msg_list => OKL_API.G_FALSE,
6197 x_return_status => x_return_status,
6198 x_msg_count => x_msg_count,
6199 x_msg_data => x_msg_data,
6200 p_contract_id => p_contract_id,
6201 p_line_id => NULL,
6202 p_amount => l_invoice_amt,
6203 p_due_date => p_due_date,
6204 p_stream_type_purpose => p_stream_type_purpose,
6205 p_create_invoice_flag => p_create_invoice_flag,
6206 p_process_flag => p_process_flag,
6207 p_parent_strm_element_id => NULL,
6208 x_invoice_id => l_invoice_id,
6209 x_stream_element_id => l_stream_element_id);
6210
6211 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6212 print_error_message('Unexpected error raised in call to CREATE_STREAM_INVOICE');
6213 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6214 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6215 print_error_message('Error raised in call to CREATE_STREAM_INVOICE');
6216 RAISE Create_Daily_Int_Str_failed;
6217 END IF;
6218 print_debug('Successfully created DAILY_INTEREST_PRINCIPAL streams ' || ' for Amount :' || l_invoice_amt);
6219
6220 END IF;
6221 END IF;
6222
6223 EXCEPTION
6224 WHEN Create_Daily_Int_Str_failed THEN
6225 print_error_message('Exception Create_Daily_Int_Str_failed raised in procedure CREATE_DAILY_INTEREST_STREAMS');
6226 x_return_status := OKL_API.G_RET_STS_ERROR;
6227 WHEN OTHERS THEN
6228 print_error_message('Exception raised in procedure CREATE_DAILY_INTEREST_STREAMS');
6229 x_return_status := OKL_API.G_RET_STS_ERROR;
6230 Okl_Api.SET_MESSAGE(
6231 p_app_name => G_APP_NAME,
6232 p_msg_name => G_UNEXPECTED_ERROR,
6233 p_token1 => G_SQLCODE_TOKEN,
6234 p_token1_value => SQLCODE,
6235 p_token2 => G_SQLERRM_TOKEN,
6236 p_token2_value => SQLERRM);
6237
6238 END Create_Daily_Interest_Streams;
6239 ------------------------------------------------------------------------------
6240
6241 -- Start of Comments
6242 -- Created By: Ramesh Seela
6243 -- Procedure Name calculate_total_interest_due
6244 -- Description: This procedure is called by Variable Interest Calculation for Loans
6245 -- Inputs :
6246 -- Output : Interest Calculated
6247 -- Dependencies:
6248 -- Parameters: Start Date, End Date, Interest Rate Range.
6249 -- Version: 1.0
6250 -- End of Comments
6251
6252 ------------------------------------------------------------------------------
6253 --Bug# 13447258: Added p_line_id parameter
6254 FUNCTION calculate_total_interest_due(
6255 p_api_version IN NUMBER,
6256 p_init_msg_list IN VARCHAR2,
6257 x_return_status OUT NOCOPY VARCHAR2,
6258 x_msg_count OUT NOCOPY NUMBER,
6259 x_msg_data OUT NOCOPY VARCHAR2,
6260 p_contract_id IN NUMBER,
6261 p_currency_code IN VARCHAR2,
6262 p_start_date IN DATE,
6263 p_due_date IN DATE,
6264 p_principal_basis IN VARCHAR2 DEFAULT NULL,
6265 p_line_id IN NUMBER DEFAULT NULL,
6266 --Bug# 14165508
6267 p_conversion_factor IN NUMBER DEFAULT NULL) RETURN NUMBER IS
6268
6269 l_api_version CONSTANT NUMBER := 1.0;
6270 l_api_name CONSTANT VARCHAR2(30) := 'CALCULATE_TOTAL_INTEREST_DUE';
6271 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6272 l_interest_calculated NUMBER := 0;
6273 r_principal_balance_tbl principal_balance_tbl_typ;
6274 l_formula_name OKL_FORMULAE_V.name%TYPE;
6275 calc_total_int_due_failed EXCEPTION;
6276
6277 Cursor formula_csr (p_formula_id NUMBER) IS
6278 SELECT name
6279 FROM okl_formulae_v
6280 WHERE id = p_formula_id;
6281
6282 BEGIN
6283 ------------------------------------------------------------
6284 -- Start processing
6285 ------------------------------------------------------------
6286
6287 x_return_status := OKL_API.G_RET_STS_SUCCESS;
6288
6289 print_debug('Executing function CALCULATE_TOTAL_INTEREST_DUE using following parameters : ');
6290 print_debug('contract ID : '|| p_contract_id);
6291 print_debug('Currency Code : '|| p_currency_code);
6292 print_debug('start date : '|| p_start_date);
6293 print_Debug('Due date : '|| p_due_date);
6294
6295 print_Debug('Line ID : '|| p_line_id);
6296
6297 G_CONTRACT_LINE_ID := p_line_id;
6298
6299 Initialize_contract_params( p_api_version => 1.0,
6300 p_init_msg_list => OKL_API.G_FALSE,
6301 x_return_status => x_return_status,
6302 x_msg_count => x_msg_count,
6303 x_msg_data => x_msg_data,
6304 p_contract_id => p_contract_id
6305 );
6306 IF (x_return_status = Okl_Api.G_RET_STS_SUCCESS) THEN
6307 print_debug ('Procedure INITIALIZE_CONTRACT_PARAMS completed successfully');
6308 ELSIF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6309 print_debug ('Procedure INITIALIZE_CONTRACT_PARAMS returned unexpected error');
6310 print_error_message ('Procedure INITIALIZE_CONTRACT_PARAMS returned unexpected error');
6311 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6312 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6313 print_debug ('Procedure INITIALIZE_CONTRACT_PARAMS returned exception');
6314 print_error_message ('Procedure INITIALIZE_CONTRACT_PARAMS returned exception');
6315 RAISE calc_total_int_due_failed;
6316 END IF;
6317
6318 print_debug('Interest Basis: '|| G_INTEREST_BASIS_CODE || ' formula ID :'|| G_CALCULATION_FORMULA_ID);
6319
6320 IF (G_INTEREST_BASIS_CODE = 'SIMPLE') THEN
6321
6322 prin_date_range_var_rate_ctr (
6323 p_api_version => 1.0,
6324 p_init_msg_list => OKL_API.G_FALSE,
6325 x_return_status => x_return_status,
6326 x_msg_count => x_msg_count,
6327 x_msg_data => x_msg_data,
6328 p_contract_id => p_contract_id,
6329 p_line_id => p_line_id,
6330 p_start_date => p_start_date,
6331 p_due_date => p_due_date,
6332 p_principal_basis => p_principal_basis,
6333 x_principal_balance_tbl => r_principal_balance_tbl);
6334 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6335 print_error_message('Unexpected error raised in call to PRIN_DATE_RANGE_VAR_RATE_CTR');
6336 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6337 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6338 print_error_message('Error raised in call to PRIN_DATE_RANGE_VAR_RATE_CTR');
6339 RAISE calc_total_int_due_failed;
6340 END IF;
6341 print_debug ('Before call to Calc_Variable_Rate_Interest');
6342
6343 l_interest_calculated := Calc_Variable_Rate_Interest (
6344 p_api_version => p_api_version,
6345 p_init_msg_list => OKL_API.G_FALSE,
6346 x_return_status => x_return_status,
6347 x_msg_count => x_msg_count,
6348 x_msg_data => x_msg_data,
6349 p_contract_id => p_contract_id,
6350 p_currency_code => p_currency_code,
6351 p_principal_balance_tbl => r_principal_balance_tbl,
6352 --Bug# 14165508
6353 p_conversion_factor => p_conversion_factor);
6354 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6355 print_error_message('Unexpected error raised in call to CALC_VARIABLE_RATE_INTEREST');
6356 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6357 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6358 print_error_message('Error raised in call to CALC_VARIABLE_RATE_INTEREST');
6359 RAISE calc_total_int_due_failed;
6360 END IF;
6361 ELSE
6362 OPEN formula_csr(G_CALCULATION_FORMULA_ID);
6363 FETCH formula_csr INTO l_formula_name;
6364 IF (formula_csr%NOTFOUND) THEN
6365 CLOSE formula_csr;
6366 print_error_message('Formula cursor did not return any records for formula ID: '|| G_CALCULATION_FORMULA_ID);
6367 RAISE calc_total_int_due_failed;
6368 END IF;
6369 CLOSE formula_csr;
6370
6371 -- Derive Interest using formula
6372 Okl_Execute_Formula_Pub.EXECUTE(p_api_version => 1.0,
6373 p_init_msg_list => OKL_API.G_TRUE,
6374 x_return_status => x_return_status,
6375 x_msg_count => x_msg_count,
6376 x_msg_data => x_msg_data,
6377 p_formula_name => l_formula_name,
6378 p_contract_id => p_contract_id,
6379 p_line_id => p_line_id,
6380 p_additional_parameters => Okl_Execute_Formula_Pub.g_additional_parameters, -- vsgandhi bug 13106699
6381 x_value => l_interest_calculated
6382 );
6383 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6384 print_error_message('Unexpected error raised in call to OKL_EXECUTE_FORMULA_PUB.EXECUTE');
6385 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6386 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6387 print_error_message('Error raised in call to OKL_EXECUTE_FORMULA_PUB.EXECUTE');
6388 RAISE calc_total_int_due_failed;
6389 END IF;
6390 END IF;
6391 RETURN l_interest_calculated;
6392 EXCEPTION
6393 WHEN calc_total_int_due_failed THEN
6394 print_error_message('Exception calc_total_int_due_failed raised in function CALCULATE_TOTAL_INTEREST_DUE');
6395 x_return_status := OKL_API.G_RET_STS_ERROR;
6396 RETURN -1;
6397 WHEN OTHERS THEN
6398 print_error_message('Exception raised in function CALCULATE_TOTAL_INTEREST_DUE');
6399 Okl_Api.SET_MESSAGE(
6400 p_app_name => G_APP_NAME,
6401 p_msg_name => G_UNEXPECTED_ERROR,
6402 p_token1 => G_SQLCODE_TOKEN,
6403 p_token1_value => SQLCODE,
6404 p_token2 => G_SQLERRM_TOKEN,
6405 p_token2_value => SQLERRM);
6406
6407 x_return_status := OKL_API.G_RET_STS_ERROR;
6408 RETURN -1;
6409 END calculate_total_interest_due;
6410
6411 -----------------------------------------------------------------
6412 PROCEDURE variable_interest(
6413 p_api_version IN NUMBER,
6414 p_init_msg_list IN VARCHAR2,
6415 x_return_status OUT NOCOPY VARCHAR2,
6416 x_msg_count OUT NOCOPY NUMBER,
6417 x_msg_data OUT NOCOPY VARCHAR2,
6418 p_contract_number IN VARCHAR2,
6419 P_to_date IN DATE)
6420
6421 IS
6422 ------------------------------------------------------------
6423 -- Declare variables required by APIs
6424 ------------------------------------------------------------
6425
6426 l_api_version CONSTANT NUMBER := 1.0;
6427 l_api_name CONSTANT VARCHAR2(30) := 'VARIABLE_INTEREST';
6428 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6429 l_msg_data VARCHAR2(2000);
6430 l_def_no_val CONSTANT NUMBER := -1;
6431 l_bill_date OKL_TRX_AR_INVOICES_V.date_invoiced%TYPE;
6432 l_kle_id OKL_TXL_AR_INV_LNS_V.kle_id%TYPE;
6433 l_stm_date DATE;
6434 l_period_start_date DATE;
6435 l_period_end_date DATE;
6436 l_due_date DATE;
6437 l_last_interest_cal_date DATE;
6438 l_end_of_process BOOLEAN := FALSE;
6439 l_int_params_exist BOOLEAN := TRUE;
6440 l_msg_count NUMBER;
6441 l_from_date DATE;
6442 l_to_date DATE;
6443 l_rate_change_value OKL_K_RATE_PARAMS.rate_change_value%TYPE;
6444 l_catchup_date DATE;
6445 l_termination_date DATE;
6446 l_print_lead_days NUMBER;
6447 l_vrc_report_tbl vrc_tbl_type;
6448 variable_interest_failed EXCEPTION;
6449 l_int_cal_start_date DATE;
6450 l_calculate_from_khr_start VARCHAR2(10) := 'Y';
6451
6452 --Bug# 13026821
6453 CURSOR l_varint_sll_csr( khrid NUMBER ) IS
6454 SELECT NVL(rul2.rule_information10,'N') arrears_yn
6455 FROM okc_rule_groups_b rgp,
6456 okc_rules_b rul1,
6457 okc_rules_b rul2,
6458 okl_strm_type_b sty
6459 WHERE rul2.dnz_chr_id = rgp.dnz_chr_id
6460 AND rul2.rule_information_category = 'LASLL'
6461 AND rul2.rgp_id = rgp.id
6462 AND rgp.cle_id IS NULL
6463 AND rgp.chr_id = khrid
6464 AND rgp.dnz_chr_id = khrid
6465 AND rgp.rgd_code = 'LALEVL'
6466 AND rul1.dnz_chr_id = rgp.dnz_chr_id
6467 AND rul1.rule_information_category = 'LASLH'
6468 AND rul1.rgp_id = rgp.id
6469 AND TO_NUMBER(rul2.object2_id1) = rul1.id
6470 AND TO_NUMBER(rul1.object1_id1) = sty.id
6471 AND sty.stream_type_purpose = 'VARIABLE_INTEREST_SCHEDULE'
6472 ORDER BY FND_DATE.canonical_to_date(rul2.rule_information2);
6473
6474 l_arrears_pay_dates_option VARCHAR2(50);
6475 l_arrears_yn VARCHAR2(50);
6476 l_invoice_date DATE;
6477 --Bug# 13026821
6478
6479 --Bug# 7277007
6480 l_counter NUMBER;
6481 l_contract_number OKC_K_HEADERS_B.contract_number%TYPE;
6482 l_product_name OKL_PRODUCTS.name%TYPE;
6483
6484 CURSOR c_var_int_params_csr(p_chr_id IN NUMBER,
6485 p_req_id IN NUMBER) IS
6486 SELECT 'Y'
6487 FROM okl_var_int_params
6488 WHERE khr_id = p_chr_id
6489 AND request_id = p_req_id;
6490
6491 l_var_int_params_found_yn VARCHAR2(1);
6492 --Bug# 7277007
6493
6494 /* Cursor to evaluate contracts eligible for calculating Variable Interest depending on
6495 Principal Payment streams are between the last interest calculation date and the date
6496 user wants to run upto
6497 */
6498 CURSOR c_contracts_csr ( p_contract_number VARCHAR2, p_to_date DATE )IS
6499 SELECT distinct khr.id khr_id,
6500 khr.deal_type,
6501 khr.date_last_interim_interest_cal,
6502 chr.contract_number,
6503 chr.start_date start_date,
6504 chr.date_terminated termination_date,
6505 chr.end_date end_date,
6506 chr.currency_code,
6507 ppm.interest_calculation_basis,
6508 ppm.revenue_recognition_method,
6509 chr.authoring_org_id,
6510 khr.pdt_id,
6511 --Bug# 7277007
6512 iex_wf_ban_status_pub.get_turninvoff(hca.party_id,hca.cust_account_id,SYSDATE) bankruptcy_sts, --- Added as part of Bug# 14119181
6513 ppm.name product_name
6514 FROM okc_k_headers_b chr,
6515 okl_k_headers khr,
6516 okc_statuses_b khs,
6517 okl_product_parameters_v ppm,
6518 hz_cust_accounts hca --- Added as part of Bug# 14119181
6519 WHERE CHR.CONTRACT_NUMBER = NVL(p_contract_number,CHR.CONTRACT_NUMBER)
6520 AND khr.deal_type IN ('LOAN','LEASEDF','LOAN-REVOLVING','LEASEST','LEASEOP')
6521 AND chr.id = khr.id
6522 AND khs.code = chr.sts_code
6523 AND khs.ste_code = 'ACTIVE'
6524 AND khr.pdt_id = ppm.id
6525 AND ppm.interest_calculation_basis <> 'FIXED'
6526 AND hca.cust_account_id = chr.cust_acct_id --- Added as part of Bug# 14119181
6527 AND hca.status = 'A' --- Added as part of Bug# 14119181
6528 ORDER BY khr.deal_type, chr.contract_number;
6529
6530
6531 CURSOR interest_params_csr (p_contract_id NUMBER,
6532 p_effective_date DATE) IS
6533 SELECT interest_basis_code,
6534 calculation_formula_id,
6535 nvl(principal_basis_code, 'ACTUAL'),
6536 days_in_a_month_code,
6537 days_in_a_year_code,
6538 rate_change_value,
6539 catchup_settlement_code
6540 FROM okl_k_rate_params
6541 WHERE khr_id = p_contract_id
6542 AND p_effective_date BETWEEN effective_from_date and nvl(effective_to_date, p_effective_date)
6543 AND parameter_type_code = 'ACTUAL';
6544
6545 l_next_period_start_date DATE; --Added by bkatraga for bug 13693187
6546
6547 BEGIN
6548
6549 ------------------------------------------------------------
6550 -- Start processing
6551 ------------------------------------------------------------
6552
6553 x_return_status := OKL_API.G_RET_STS_SUCCESS;
6554
6555 g_request_id := FND_GLOBAL.CONC_REQUEST_ID;
6556
6557 print_debug ('g_request_id : '|| g_request_id);
6558 print_debug ('Concurrent Request ID : '|| FND_GLOBAL.CONC_REQUEST_ID);
6559
6560 g_to_date := p_to_date;
6561
6562 ------------------------------------------------------------
6563 -- Initialise local variables
6564 ------------------------------------------------------------
6565
6566 l_kle_id := l_def_no_val;
6567
6568
6569 -- **********************
6570 -- ** Process contracts *
6571 -- **********************
6572
6573 print_debug('***Start of Processing***');
6574 print_debug('Contract Number: '||p_contract_number);
6575
6576 g_no_of_contracts_processed := 0;
6577 g_no_of_rejected_contracts := 0;
6578 g_no_of_successful_contracts := 0;
6579
6580 FOR r_contracts_csr IN c_contracts_csr ( p_contract_number, p_to_date) LOOP
6581
6582 -- Start of Code added as part of Bug# 14119181
6583 IF ( r_contracts_csr.bankruptcy_sts = 'Y')
6584 THEN
6585 print_debug('Invoices of contract => ' || r_contracts_csr.contract_number || ' not billed due to bankruptcy.');
6586 print_error_message ('Invoices of contract => ' || r_contracts_csr.contract_number || ' not billed due to bankruptcy.');
6587
6588 ELSIF ( r_contracts_csr.bankruptcy_sts = 'N')
6589 THEN
6590 -- End of Code added as part of Bug# 14119181
6591
6592 print_debug ('--------------------------------------------------------------------------');
6593 print_debug ('--------------------------------------------------------------------------');
6594 print_debug ('Start Processing for Contract Number: ' ||r_contracts_csr.contract_number);
6595 print_debug('Last Interest Calculation Date: ' ||r_contracts_csr.date_last_interim_interest_cal);
6596
6597 G_CONTRACT_ID := r_contracts_csr.khr_id;
6598 G_AUTHORING_ORG_ID := r_contracts_csr.authoring_org_id;
6599 G_PRODUCT_ID := r_contracts_csr.pdt_id;
6600 G_DEAL_TYPE := r_contracts_csr.deal_type;
6601 G_CONTRACT_START_DATE := r_contracts_csr.start_date;
6602 G_CONTRACT_END_DATE := r_contracts_csr.end_date;
6603 G_CURRENCY_CODE := r_contracts_csr.currency_code;
6604 G_INTEREST_CALCULATION_BASIS := r_contracts_csr.interest_calculation_basis;
6605 G_CALC_METHOD_CODE := r_contracts_csr.interest_calculation_basis;
6606 G_REVENUE_RECOGNITION_METHOD := r_contracts_csr.revenue_recognition_method;
6607 G_CONTRACT_PRINCIPAL_BALANCE := NULL;
6608 l_termination_date := r_contracts_csr.termination_date;
6609 l_last_interest_cal_date := r_contracts_csr.date_last_interim_interest_cal;
6610
6611 G_FIN_AST_LINE_ID := NULL;
6612 G_ASSET_PRINCIPAL_BALANCE := NULL;
6613
6614 l_print_lead_days := get_printing_lead_days (G_CONTRACT_ID);
6615
6616 --Bug# 7277007
6617 l_contract_number := r_contracts_csr.contract_number;
6618 l_product_name := r_contracts_csr.product_name;
6619 --Bug# 7277007
6620 IF G_CONTRACT_START_DATE > nvl(p_to_date,SYSDATE) THEN
6621 OPEN interest_params_csr (G_CONTRACT_ID, G_CONTRACT_START_DATE);
6622 ELSE
6623 OPEN interest_params_csr (G_CONTRACT_ID, nvl(p_to_date,SYSDATE));
6624
6625 END IF;
6626 -- OPEN interest_params_csr (G_CONTRACT_ID, nvl(p_to_date,SYSDATE));
6627 FETCH interest_params_csr INTO G_INTEREST_BASIS_CODE, G_CALCULATION_FORMULA_ID,
6628 G_PRINCIPAL_BASIS_CODE, G_DAYS_IN_A_MONTH_CODE,
6629 G_DAYS_IN_A_YEAR_CODE, l_rate_change_value,
6630 G_CATCHUP_SETTLEMENT_CODE;
6631
6632 IF interest_params_csr%NOTFOUND THEN
6633 l_int_params_exist := FALSE;
6634 print_error_message('Interest Params cursor did not return any records for contract ID: '||G_CONTRACT_ID);
6635 -- RAISE variable_interest_failed;
6636 ELSE
6637 l_int_params_exist := TRUE;
6638 END IF;
6639 CLOSE interest_params_csr;
6640
6641 IF (l_int_params_exist) THEN
6642 print_debug('Contract Number: '||r_contracts_csr.contract_number);
6643 print_debug('Contract ID: '|| G_CONTRACT_ID);
6644 print_debug('Authoring Org ID: '|| G_AUTHORING_ORG_ID);
6645 print_debug('Product ID: '|| G_PRODUCT_ID);
6646 print_debug('deal type :'|| G_DEAL_TYPE );
6647 print_debug('Contract Start Date: '||G_CONTRACT_START_DATE);
6648 print_debug('Contract End Date: '||G_CONTRACT_END_DATE);
6649 print_debug('Currency code: '||G_CURRENCY_CODE);
6650 print_debug('calculation basis : '|| G_INTEREST_CALCULATION_BASIS );
6651 print_debug('revenue recognition method : '|| G_REVENUE_RECOGNITION_METHOD);
6652 print_debug('Principal Balance : '|| G_CONTRACT_PRINCIPAL_BALANCE);
6653 print_debug('Last Interest Calculation Date: ' ||r_contracts_csr.date_last_interim_interest_cal );
6654
6655 print_debug('Interest basis : '|| G_INTEREST_BASIS_CODE );
6656 print_debug('Calculation Formula ID : '|| G_CALCULATION_FORMULA_ID);
6657 print_debug('Principal Basis : '|| G_PRINCIPAL_BASIS_CODE);
6658 print_debug('Days in a Month : '|| G_DAYS_IN_A_MONTH_CODE);
6659 print_debug('Days in a Year : '|| G_DAYS_IN_A_YEAR_CODE);
6660 print_debug('Catchup Settlement Code : '|| G_CATCHUP_SETTLEMENT_CODE);
6661
6662 IF (G_INTEREST_CALCULATION_BASIS = G_INT_CALC_BASIS_FLOAT_FACTORS) THEN
6663 BEGIN
6664 --Bug# 13447258: New API For Float Factor calculations
6665 OKL_VAR_INT_FLOAT_FACTOR_PVT.process_interest_float_factor(
6666 p_api_version => 1.0,
6667 p_init_msg_list => OKL_API.G_TRUE,
6668 x_return_status => l_return_status,
6669 x_msg_count => l_msg_count,
6670 x_msg_data => l_msg_data,
6671 p_contract_id => G_CONTRACT_ID,
6672 p_to_date => p_to_date,
6673 p_last_interest_cal_date => l_last_interest_cal_date,
6674 p_print_lead_days => l_print_lead_days);
6675 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6676 print_error_message('Unexpected error raised in call to PROCESS_INTEREST_FLOAT_FACTOR');
6677 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6678 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6679 print_error_message('Error raised in call to PROCESS_INTEREST_FLOAT_FACTOR');
6680 RAISE variable_interest_failed;
6681 END IF;
6682
6683 g_no_of_successful_contracts := g_no_of_successful_contracts + 1;
6684 EXCEPTION
6685 WHEN OTHERS THEN
6686 g_no_of_rejected_contracts := g_no_of_rejected_contracts + 1;
6687 ROLLBACK;
6688 report_error (
6689 p_contract_number => l_contract_number,
6690 p_product_name => l_product_name,
6691 p_interest_calc_basis => G_INTEREST_CALCULATION_BASIS,
6692 p_last_int_calc_date => l_last_interest_cal_date,
6693 x_msg_count => x_msg_count,
6694 x_msg_data => x_msg_data);
6695
6696 x_return_status := OKL_API.G_RET_STS_ERROR;
6697 END;
6698 ELSIF (G_INTEREST_CALCULATION_BASIS = G_INT_CALC_BASIS_REAMORT) THEN
6699 BEGIN
6700 --Bug# 13447258: New API For Reamort calculations
6701 OKL_VAR_INT_REAMORT_PVT.process_interest_reamort(
6702 p_api_version => 1.0,
6703 p_init_msg_list => OKL_API.G_TRUE,
6704 x_return_status => l_return_status,
6705 x_msg_count => l_msg_count,
6706 x_msg_data => l_msg_data,
6707 p_contract_id => G_CONTRACT_ID,
6708 p_to_date => p_to_date,
6709 p_last_interest_cal_date => l_last_interest_cal_date,
6710 p_print_lead_days => l_print_lead_days);
6711 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6712 print_error_message('Unexpected error raised in call to PROCESS_INTEREST_REAMORT');
6713 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6714 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6715 print_error_message('Error raised in call to PROCESS_INTEREST_REAMORT');
6716 RAISE variable_interest_failed;
6717 END IF;
6718
6719 g_no_of_successful_contracts := g_no_of_successful_contracts + 1;
6720 EXCEPTION
6721 WHEN OTHERS THEN
6722 g_no_of_rejected_contracts := g_no_of_rejected_contracts + 1;
6723 ROLLBACK;
6724 report_error (
6725 p_contract_number => l_contract_number,
6726 p_product_name => l_product_name,
6727 p_interest_calc_basis => G_INTEREST_CALCULATION_BASIS,
6728 p_last_int_calc_date => l_last_interest_cal_date,
6729 x_msg_count => x_msg_count,
6730 x_msg_data => x_msg_data);
6731
6732 x_return_status := OKL_API.G_RET_STS_ERROR;
6733 END;
6734 ELSIF (G_INTEREST_CALCULATION_BASIS = G_INT_CALC_BASIS_FLOAT) THEN
6735 BEGIN
6736 --Bug# 13447258: New API For Float calculations
6737 OKL_VAR_INT_FLOAT_PVT.process_interest_float(
6738 p_api_version => 1.0,
6739 p_init_msg_list => OKL_API.G_TRUE,
6740 x_return_status => l_return_status,
6741 x_msg_count => l_msg_count,
6742 x_msg_data => l_msg_data,
6743 p_contract_id => G_CONTRACT_ID,
6744 p_to_date => p_to_date,
6745 p_last_interest_cal_date => l_last_interest_cal_date,
6746 p_print_lead_days => l_print_lead_days);
6747 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6748 print_error_message('Unexpected error raised in call to PROCESS_INTEREST_FLOAT');
6749 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6750 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6751 print_error_message('Error raised in call to PROCESS_INTEREST_FLOAT');
6752 RAISE variable_interest_failed;
6753 END IF;
6754
6755 g_no_of_successful_contracts := g_no_of_successful_contracts + 1;
6756 EXCEPTION
6757 WHEN OTHERS THEN
6758 g_no_of_rejected_contracts := g_no_of_rejected_contracts + 1;
6759 x_return_status := OKL_API.G_RET_STS_ERROR;
6760 l_end_of_process := TRUE;
6761 report_error (
6762 p_contract_number => l_contract_number,
6763 p_product_name => l_product_name,
6764 p_interest_calc_basis => G_INTEREST_CALCULATION_BASIS,
6765 p_last_int_calc_date => l_last_interest_cal_date,
6766 x_msg_count => x_msg_count,
6767 x_msg_data => x_msg_data);
6768 ROLLBACK;
6769 END;
6770 ELSIF (G_INTEREST_CALCULATION_BASIS = G_INT_CALC_BASIS_CATCHUP) THEN
6771 BEGIN
6772 --Bug# 13447258: New API For Catchup-Cleanup calculations
6773 OKL_VAR_INT_CATCHUP_PVT.process_interest_catchup(
6774 p_api_version => 1.0,
6775 p_init_msg_list => OKL_API.G_TRUE,
6776 x_return_status => l_return_status,
6777 x_msg_count => l_msg_count,
6778 x_msg_data => l_msg_data,
6779 p_contract_id => G_CONTRACT_ID,
6780 p_to_date => p_to_date,
6781 p_last_interest_cal_date => l_last_interest_cal_date,
6782 p_print_lead_days => l_print_lead_days);
6783 IF (l_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6784 print_error_message('Unexpected error raised in call to PROCESS_INTEREST_CATCHUP');
6785 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6786 ELSIF (l_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6787 print_error_message('Error raised in call to PROCESS_INTEREST_CATCHUP');
6788 RAISE variable_interest_failed;
6789 END IF;
6790
6791 g_no_of_successful_contracts := g_no_of_successful_contracts + 1;
6792 EXCEPTION
6793 WHEN OTHERS THEN
6794 g_no_of_rejected_contracts := g_no_of_rejected_contracts + 1;
6795 x_return_status := OKL_API.G_RET_STS_ERROR;
6796 l_end_of_process := TRUE;
6797 report_error (
6798 p_contract_number => l_contract_number,
6799 p_product_name => l_product_name,
6800 p_interest_calc_basis => G_INTEREST_CALCULATION_BASIS,
6801 p_last_int_calc_date => l_last_interest_cal_date,
6802 x_msg_count => x_msg_count,
6803 x_msg_data => x_msg_data);
6804 ROLLBACK;
6805 END;
6806 END IF;
6807 END IF;
6808
6809 g_no_of_contracts_processed := g_no_of_contracts_processed + 1;
6810
6811 l_vrc_report_tbl(g_no_of_contracts_processed).contract_number := r_contracts_csr.contract_number;
6812 l_vrc_report_tbl(g_no_of_contracts_processed).contract_id := G_CONTRACT_ID;
6813 l_vrc_report_tbl(g_no_of_contracts_processed).start_date := G_CONTRACT_START_DATE;
6814 l_vrc_report_tbl(g_no_of_contracts_processed).end_date := G_CONTRACT_END_DATE;
6815 l_vrc_report_tbl(g_no_of_contracts_processed).interest_calculation_basis := G_INTEREST_CALCULATION_BASIS;
6816 l_vrc_report_tbl(g_no_of_contracts_processed).days_in_a_month_code := G_DAYS_IN_A_MONTH_CODE;
6817 l_vrc_report_tbl(g_no_of_contracts_processed).days_in_a_year_code := G_DAYS_IN_A_YEAR_CODE;
6818 l_vrc_report_tbl(g_no_of_contracts_processed).rate_change_value := l_rate_change_value;
6819 l_vrc_report_tbl(g_no_of_contracts_processed).process_status := x_return_status;
6820
6821 --Bug# 7277007
6822 --Bug# 14528742: Include partially processed contracts also in Successful contracts report
6823 IF (x_return_status IN ('S','E')) THEN
6824
6825 l_var_int_params_found_yn := 'N';
6826 OPEN c_var_int_params_csr(p_chr_id => g_contract_id,
6827 p_req_id => g_request_id);
6828 FETCH c_var_int_params_csr INTO l_var_int_params_found_yn;
6829 CLOSE c_var_int_params_csr;
6830
6831 IF (l_var_int_params_found_yn = 'Y') THEN
6832 IF g_rpt_summary_tbl.EXISTS(G_INTEREST_CALCULATION_BASIS) THEN
6833 g_rpt_summary_tbl(G_INTEREST_CALCULATION_BASIS).total_contract_num_success :=
6834 NVL(g_rpt_summary_tbl(G_INTEREST_CALCULATION_BASIS).total_contract_num_success,0) + 1;
6835 ELSE
6836 g_rpt_summary_tbl(G_INTEREST_CALCULATION_BASIS).total_contract_num_success := 1;
6837 END IF;
6838
6839 l_counter := 1;
6840 IF g_rpt_success_icb_tbl.EXISTS(G_INTEREST_CALCULATION_BASIS) THEN
6841 l_counter := g_rpt_success_icb_tbl(G_INTEREST_CALCULATION_BASIS).LAST + 1;
6842 END IF;
6843
6844 g_rpt_success_icb_tbl(G_INTEREST_CALCULATION_BASIS)(l_counter).contract_id := G_CONTRACT_ID;
6845 g_rpt_success_icb_tbl(G_INTEREST_CALCULATION_BASIS)(l_counter).contract_number := r_contracts_csr.contract_number;
6846 g_rpt_success_icb_tbl(G_INTEREST_CALCULATION_BASIS)(l_counter).days_in_a_month_code := G_DAYS_IN_A_MONTH_CODE;
6847 g_rpt_success_icb_tbl(G_INTEREST_CALCULATION_BASIS)(l_counter).days_in_a_year_code := G_DAYS_IN_A_YEAR_CODE;
6848 END IF;
6849 END IF;
6850 --Bug# 7277007
6851
6852 print_debug ('End Processing for Contract Number: ' ||r_contracts_csr.contract_number);
6853 END IF; -- Added as part of Bug# 14119181
6854 END LOOP;
6855 print_debug('***Printing Report***');
6856 Print_Report(p_contract_number => p_contract_number);
6857 print_debug('***End of Processing***');
6858 -- Added for bug 13931371
6859 IF g_no_of_rejected_contracts > 0 THEN
6860 x_return_status := 'W';
6861 END IF;
6862
6863
6864 EXCEPTION
6865 ------------------------------------------------------------
6866 -- Exception handling
6867 ------------------------------------------------------------
6868 WHEN OTHERS THEN
6869 print_error_message('Exception raised in procedure VARIABLE_INTEREST');
6870 report_error (
6871 p_contract_number => l_contract_number,
6872 p_product_name => l_product_name,
6873 p_interest_calc_basis => G_INTEREST_CALCULATION_BASIS,
6874 p_last_int_calc_date => l_last_interest_cal_date,
6875 x_msg_count => x_msg_count,
6876 x_msg_data => x_msg_data);
6877 x_return_status := OKL_API.G_RET_STS_ERROR;
6878 ROLLBACK;
6879 END variable_interest;
6880 END;