[Home] [Help]
PACKAGE BODY: APPS.OKL_LA_STREAM_PVT
Source
1 Package body OKL_LA_STREAM_PVT as
2 /* $Header: OKLRSGAB.pls 120.141.12010000.3 2008/10/22 00:24:11 rbanerje ship $ */
3
4 -------------------------------------------------------------------------------------------------
5 -- GLOBAL MESSAGE CONSTANTS
6 -------------------------------------------------------------------------------------------------
7 G_NO_PARENT_RECORD CONSTANT VARCHAR2(200) := 'OKL_NO_PARENT_RECORD';
8 G_FND_APP CONSTANT VARCHAR2(200) := OKL_API.G_FND_APP;
9 g_rep_req_yn VARCHAR2(3) := 'N';
10 G_SFE_TYPE_SUBSIDY CONSTANT VARCHAR2(200) := okl_create_streams_pvt.G_SFE_TYPE_SUBSIDY;
11 G_REQUIRED_VALUE CONSTANT VARCHAR2(200) := OKL_API.G_REQUIRED_VALUE;
12 G_INVALID_VALUE CONSTANT VARCHAR2(200) := OKL_API.G_INVALID_VALUE;
13 G_UNEXPECTED_ERROR CONSTANT VARCHAR2(200) := 'OKL_CONTRACTS_UNEXP_ERROR';
14 G_DB_ERROR CONSTANT VARCHAR2(12) := 'OKL_DB_ERROR';
15 G_PROG_NAME_TOKEN CONSTANT VARCHAR2(9) := 'PROG_NAME';
16 G_SQLCODE_TOKEN CONSTANT VARCHAR2(7) := 'SQLCODE';
17 G_SQLERRM_TOKEN CONSTANT VARCHAR2(7) := 'SQLERRM';
18 G_UPPERCASE_REQUIRED CONSTANT VARCHAR2(200) := 'OKL_CONTRACTS_UPPERCASE_REQ';
19 G_COL_NAME_TOKEN CONSTANT VARCHAR2(200) := OKL_API.G_COL_NAME_TOKEN;
20 -- Start modification Bug#3066346 bakuchib
21 G_LLA_NO_MATCHING_RECORD CONSTANT VARCHAR2(200) := 'OKL_LLA_NO_MATCHING_RECORD';
22 l_pay_tbl OKL_STREAM_GENERATOR_PVT.payment_tbl_type;
23 -- End modification Bug#3066346 bakuchib
24 -- Variable put by HKPATEL for rollover quote
25 l_link_fee_asset_yn VARCHAR2(12) := 'NONE';
26 -- srsreeni - Bug#5699923 - Added - Start
27 G_STREAM_ACTIVITY_WORK CONSTANT VARCHAR2(4) := OKL_PROCESS_STREAMS_PVT.G_STREAM_ACTIVITY_WORK;
28 G_FEE_ROLLOVER CONSTANT VARCHAR2(30) := 'ROLLOVER';
29 G_FEE_FINANCED CONSTANT VARCHAR2(30) := 'FINANCED';
30 G_ORIGIN_STRM_PURPOSE CONSTANT VARCHAR2(30) := 'ORIGIN';
31 G_REPORT_STRM_PURPOSE CONSTANT VARCHAR2(30) := 'REPORT';
32 -- srsreeni - Bug#5699923 - Added - End
33 ------------------------------------------------------------------------------------
34 -- GLOBAL EXCEPTION
35 ------------------------------------------------------------------------------------
36 G_EXCEPTION_HALT_VALIDATION EXCEPTION;
37 G_EXCEPTION_STOP_VALIDATION EXCEPTION;
38 G_API_TYPE CONSTANT VARCHAR2(4) := '_PVT';
39 G_API_VERSION CONSTANT NUMBER := 1.0;
40 G_SCOPE CONSTANT VARCHAR2(4) := '_PVT';
41
42 --Added by kthiruva for Bug 5161075 on 19-Apr-2006
43 G_FALSE CONSTANT VARCHAR2(10) := 'false';
44 -- GLOBAL COMPOSITE DATA TYPE
45 --Added for debug_logging
46 L_DEBUG_ENABLED VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
47
48 -----------------------------------------------------------------------------------
49 -- Start of Bug#2757289 modification bakuchib
50 TYPE stub_rec_type IS RECORD (
51 number_of_periods NUMBER := 1,
52 advance_or_arrears OKL_SIF_FEES_V.advance_or_arrears%TYPE := OKL_CREATE_STREAMS_PVT.G_ARREARS,
53 period OKL_SIF_FEES_V.period%TYPE := 'T');
54 g_stub_rec stub_rec_type;
55 SUBTYPE pdtv_rec_type IS okl_setupproducts_pvt.pdtv_rec_type;
56 SUBTYPE ast_dtl_tbl_type IS okl_activate_asset_pvt.ast_dtl_tbl_type;
57 SUBTYPE pdt_param_rec_type IS okl_setupproducts_pvt.pdt_parameters_rec_type;
58 SUBTYPE asbv_tbl_type IS okl_subsidy_process_pvt.asbv_tbl_type;
59 -- End of Bug#2757289 modification bakuchib
60 -----------------------------------------------------------------------------------
61 --Added by kthiruva for the Variable Rate Build
62 --Record type declaration for storing the date and amount all the paydowns on a contract
63 TYPE ppd_rec_type IS RECORD (
64 paydown_date DATE,
65 paydown_amount NUMBER,
66 curr_paydown VARCHAR2(1),
67 diff_to_next NUMBER,
68 ppd_processed_yn VARCHAR2(1)
69 );
70
71 TYPE ppd_tbl_type is TABLE OF ppd_rec_Type INDEX BY BINARY_INTEGER;
72 l_ppd_tbl ppd_tbl_type;
73 l_ppd_count NUMBER := 0;
74 g_paydown_date DATE;
75 l_days_in_period NUMBER;
76 l_first_batch VARCHAR2(1) := 'N';
77 l_periods_after_ppd NUMBER;
78 l_period_end_date DATE;
79 l_adjusting_stub_date DATE;
80 l_days_between NUMBER;
81 --End of Changes
82
83 --Added by kthiruva on 27-Mar-2006 for logging purposes
84 --Start of Changes
85 PROCEDURE WRITE_TO_LOG(p_message IN VARCHAR2)
86 IS
87 BEGIN
88 IF L_DEBUG_ENABLED = 'Y' then
89 fnd_file.put_line (fnd_file.log,p_message);
90 END IF;
91 END WRITE_TO_LOG;
92
93
94 --Debuging procedures
95 PROCEDURE print(p_proc_name IN VARCHAR2,
96 p_message IN VARCHAR2,
97 x_return_status IN VARCHAR2) IS
98 BEGIN
99 NULL;
100 -- dbms_output.put_line( G_PKG_NAME||':'||p_proc_name||':'||p_message||':'||x_return_status );
101 END;
102 PROCEDURE print(p_proc_name IN VARCHAR2,
103 p_message IN VARCHAR2) IS
104 BEGIN
105 print(p_proc_name, p_message, 'S' );
106 END;
107 -- Added new procedure for get the streams for reporting and original product
108 PROCEDURE get_primary_pricing_name
109 (
110 p_khr_id IN okl_k_headers_full_v.id%TYPE,
111 p_sty_id IN okl_strm_type_b.ID%TYPE,
112 x_return_status OUT NOCOPY VARCHAR2,
113 x_primary_pricing_name OUT NOCOPY OKL_ST_GEN_TMPT_LNS.PRICING_NAME%TYPE
114 )
115
116 IS
117
118 CURSOR cntrct_csr (l_khr_id NUMBER)IS
119 SELECT pdt_id, start_date
120 FROM okl_k_headers_full_v
121 WHERE id = l_khr_id;
122
123 CURSOR pry_prc_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
124 SELECT PRICING_NAME
125 FROM OKL_STRM_TMPT_LINES_UV STL
126 WHERE STL.PRIMARY_YN = 'Y'
127 AND STL.PDT_ID = l_pdt_id
128 AND (STL.START_DATE <= l_contract_start_date)
129 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
130 AND PRIMARY_STY_ID = p_sty_id;
131
132 CURSOR sty_csr IS
133 SELECT CODE
134 FROM okl_strm_type_b
135 WHERE id = p_sty_id;
136
137
138 l_primary_pricing_name VARCHAR2(30);
139
140 l_contract_start_date DATE;
141 l_product_id NUMBER;
142 l_sty_code okl_strm_type_b.code%TYPE;
143
144 BEGIN
145
146 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
147
148
149 OPEN cntrct_csr (p_khr_id);
150 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
151 CLOSE cntrct_csr;
152
153
154
155 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
156 OPEN pry_prc_csr (l_product_id, l_contract_start_date);
157 FETCH pry_prc_csr INTO l_primary_pricing_name;
158 IF pry_prc_csr%NOTFOUND THEN
159
160 -- Bug 4064253
161
162 OPEN sty_csr;
163 FETCH sty_csr INTO l_sty_code;
164 CLOSE sty_csr;
165
166 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
167 p_msg_name => 'OKL_PRY_STY_CODE_NOT_FOUND',
168 p_token1 => 'STY_CODE',
169 p_token1_value => l_sty_code);
170 RAISE Okl_Api.G_EXCEPTION_ERROR;
171 END IF;
172 CLOSE pry_prc_csr;
173
174 ELSE
175
176 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
177 p_msg_name => 'OKL_NO_PDT_FOUND');
178 RAISE Okl_Api.G_EXCEPTION_ERROR;
179
180 END IF;
181
182 x_primary_pricing_name := l_primary_pricing_name;
183
184 EXCEPTION
185 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
186 IF cntrct_csr%ISOPEN THEN
187 CLOSE cntrct_csr;
188 END IF;
189 IF pry_prc_csr%ISOPEN THEN
190 CLOSE pry_prc_csr;
191 END IF;
192 x_return_status := Okl_Api.G_RET_STS_ERROR ;
193
194 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
195 IF cntrct_csr%ISOPEN THEN
196 CLOSE cntrct_csr;
197 END IF;
198 IF pry_prc_csr%ISOPEN THEN
199 CLOSE pry_prc_csr;
200 END IF;
201 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
202
203 WHEN OTHERS THEN
204 IF cntrct_csr%ISOPEN THEN
205 CLOSE cntrct_csr;
206 END IF;
207 IF pry_prc_csr%ISOPEN THEN
208 CLOSE pry_prc_csr;
209 END IF;
210 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
211
212
213 END get_primary_pricing_name;
214
215 PROCEDURE get_dependent_pricing_name
216 (
217 p_khr_id IN okl_k_headers_full_v.id%TYPE,
218 p_sty_id IN okl_strm_type_b.ID%TYPE,
219 x_return_status OUT NOCOPY VARCHAR2,
220 x_dependent_pricing_name OUT NOCOPY OKL_ST_GEN_TMPT_LNS.PRICING_NAME%TYPE
221 )
222
223 IS
224
225 CURSOR cntrct_csr (l_khr_id NUMBER)IS
226 SELECT pdt_id, start_date
227 FROM okl_k_headers_full_v
228 WHERE id = l_khr_id;
229
230 CURSOR pry_prc_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
231 SELECT PRICING_NAME
232 FROM OKL_STRM_TMPT_LINES_UV STL
233 WHERE STL.PRIMARY_YN = 'N'
234 AND STL.PDT_ID = l_pdt_id
235 AND (STL.START_DATE <= l_contract_start_date)
236 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
237 AND DEPENDENT_STY_ID = p_sty_id
238 AND PRICING_NAME IS NOT NULL;
239
240 CURSOR sty_csr IS
241 SELECT CODE
242 FROM okl_strm_type_b
243 WHERE id = p_sty_id;
244
245 l_dependent_pricing_name VARCHAR2(40);
246
247 l_contract_start_date DATE;
248 l_product_id NUMBER;
249 l_sty_code okl_strm_type_b.code%TYPE;
250
251 BEGIN
252
253 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
254
255
256 OPEN cntrct_csr (p_khr_id);
257 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
258 CLOSE cntrct_csr;
259
260
261
262 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
263 --okl_debug_pub.logmessage('Product Id1'||l_product_id);
264 --okl_debug_pub.logmessage('Contract Strat Date1'||l_contract_start_date);
265 OPEN pry_prc_csr (l_product_id, l_contract_start_date);
266 FETCH pry_prc_csr INTO l_dependent_pricing_name;
267 IF pry_prc_csr%NOTFOUND THEN
268
269 -- Bug 4064253
270 OPEN sty_csr;
271 FETCH sty_csr INTO l_sty_code;
272 CLOSE sty_csr;
273
274 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
275 p_msg_name => 'OKL_DEP_STY_CODE_NOT_FOUND',
276 p_token1 => 'STY_CODE',
277 p_token1_value => l_sty_code);
278
279 RAISE Okl_Api.G_EXCEPTION_ERROR;
280 END IF;
281 CLOSE pry_prc_csr;
282
283 ELSE
284
285 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
286 p_msg_name => 'OKL_NO_PDT_FOUND');
287 RAISE Okl_Api.G_EXCEPTION_ERROR;
288
289 END IF;
290
291 x_dependent_pricing_name := l_dependent_pricing_name;
292
293 EXCEPTION
294 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
295 IF cntrct_csr%ISOPEN THEN
296 CLOSE cntrct_csr;
297 END IF;
298 IF pry_prc_csr%ISOPEN THEN
299 CLOSE pry_prc_csr;
300 END IF;
301 x_return_status := Okl_Api.G_RET_STS_ERROR ;
302
303 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
304 IF cntrct_csr%ISOPEN THEN
305 CLOSE cntrct_csr;
306 END IF;
307 IF pry_prc_csr%ISOPEN THEN
308 CLOSE pry_prc_csr;
309 END IF;
310 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
311
312 WHEN OTHERS THEN
313 IF cntrct_csr%ISOPEN THEN
314 CLOSE cntrct_csr;
315 END IF;
316 IF pry_prc_csr%ISOPEN THEN
317 CLOSE pry_prc_csr;
318 END IF;
319 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
320 --okl_debug_pub.logmessage(SQLERRM);
321
322 END get_dependent_pricing_name;
323
324 PROCEDURE get_primary_stream_type
325 (
326 p_khr_id IN okl_k_headers_full_v.id%TYPE,
327 p_primary_sty_purpose IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
328 x_return_status OUT NOCOPY VARCHAR2,
329 x_primary_sty_id OUT NOCOPY strm_rec_type
330 )
331
332 IS
333
334 CURSOR cntrct_csr (l_khr_id NUMBER)IS
335 SELECT pdt_id, start_date
336 FROM okl_k_headers_full_v
337 WHERE id = l_khr_id;
338
339 CURSOR pry_sty_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
340 SELECT PRIMARY_STY_ID, PRICING_NAME
341 FROM OKL_STRM_TMPT_LINES_UV STL
342 WHERE STL.PRIMARY_YN = 'Y'
343 AND STL.PDT_ID = l_pdt_id
344 AND (STL.START_DATE <= l_contract_start_date)
345 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
346 AND PRIMARY_STY_PURPOSE = p_primary_sty_purpose
347 AND PRICING_NAME IS NOT NULL;
348
349 l_product_id NUMBER;
350 l_strm_rec_type strm_rec_type;
351 l_contract_start_date DATE;
352 l_primary_sty_id NUMBER;
353 l_primary_sty_purpose_meaning VARCHAR2(4000);
354
355 BEGIN
356
357 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
358
359
360 OPEN cntrct_csr (p_khr_id);
361 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
362 CLOSE cntrct_csr;
363
364
365
366 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
367 OPEN pry_sty_csr (l_product_id, l_contract_start_date);
368 FETCH pry_sty_csr INTO l_strm_rec_type;
369 IF pry_sty_csr%NOTFOUND THEN
370
371 -- Bug 4064253
372
373 l_primary_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
374 ('OKL_STREAM_TYPE_PURPOSE', p_primary_sty_purpose);
375
376 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
377 p_msg_name => 'OKL_NO_PRY_STY_FOUND',
378 p_token1 => 'PURPOSE',
379 p_token1_value => l_primary_sty_purpose_meaning);
380
381 RAISE Okl_Api.G_EXCEPTION_ERROR;
382 END IF;
383 CLOSE pry_sty_csr;
384
385 ELSE
386
387 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
388 p_msg_name => 'OKL_NO_PDT_FOUND');
389 RAISE Okl_Api.G_EXCEPTION_ERROR;
390
391 END IF;
392
393 x_primary_sty_id := l_strm_rec_type;
394
395 EXCEPTION
396 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
397 IF cntrct_csr%ISOPEN THEN
398 CLOSE cntrct_csr;
399 END IF;
400 IF pry_sty_csr%ISOPEN THEN
401 CLOSE pry_sty_csr;
402 END IF;
403 x_return_status := Okl_Api.G_RET_STS_ERROR ;
404
405 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
406 IF cntrct_csr%ISOPEN THEN
407 CLOSE cntrct_csr;
408 END IF;
409 IF pry_sty_csr%ISOPEN THEN
410 CLOSE pry_sty_csr;
411 END IF;
412 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
413
414 WHEN OTHERS THEN
415 IF cntrct_csr%ISOPEN THEN
416 CLOSE cntrct_csr;
417 END IF;
418 IF pry_sty_csr%ISOPEN THEN
419 CLOSE pry_sty_csr;
420 END IF;
421 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
422
423
424 END get_primary_stream_type;
425
426 PROCEDURE get_primary_no_prc_stream_type
427 (
428 p_khr_id IN okl_k_headers_full_v.id%TYPE,
429 p_pdt_id IN okl_k_headers_full_v.pdt_id%TYPE,
430 p_primary_sty_purpose IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
431 x_return_status OUT NOCOPY VARCHAR2,
432 x_primary_sty_id OUT NOCOPY strm_rec_type
433 )
434
435
436
437 IS
438
439 CURSOR cntrct_csr (l_khr_id NUMBER)IS
440 SELECT pdt_id, start_date
441 FROM okl_k_headers_full_v
442 WHERE id = l_khr_id;
443
444 CURSOR pry_sty_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
445 SELECT PRIMARY_STY_ID,PRICING_NAME
446 FROM OKL_STRM_TMPT_LINES_UV STL
447 WHERE STL.PRIMARY_YN = 'Y'
448 AND STL.PDT_ID = l_pdt_id
449 AND (STL.START_DATE <= l_contract_start_date)
450 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
451 AND PRIMARY_STY_PURPOSE = p_primary_sty_purpose;
452
453 l_product_id NUMBER;
454 l_strm_rec_type strm_rec_type;
455 l_contract_start_date DATE;
456 l_primary_sty_id NUMBER;
457 l_primary_sty_purpose_meaning VARCHAR2(4000);
458
459 BEGIN
460
461 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
462
463
464 OPEN cntrct_csr (p_khr_id);
465 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
466 CLOSE cntrct_csr;
467
468
469
470 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
471
472 OPEN pry_sty_csr (l_product_id, l_contract_start_date);
473 FETCH pry_sty_csr INTO l_strm_rec_type;
474 IF pry_sty_csr%NOTFOUND THEN
475
476 -- Bug 4064253
477
478 l_primary_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
479 ('OKL_STREAM_TYPE_PURPOSE', p_primary_sty_purpose);
480
481 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
482 p_msg_name => 'OKL_NO_PRY_STY_FOUND',
483 p_token1 => 'PURPOSE',
484 p_token1_value => l_primary_sty_purpose_meaning);
485
486 RAISE Okl_Api.G_EXCEPTION_ERROR;
487 END IF;
488 CLOSE pry_sty_csr;
489
490 ELSE
491
492 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
493 p_msg_name => 'OKL_NO_PDT_FOUND');
494 RAISE Okl_Api.G_EXCEPTION_ERROR;
495
496 END IF;
497
498 x_primary_sty_id := l_strm_rec_type;
499
500 EXCEPTION
501 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
502 IF cntrct_csr%ISOPEN THEN
503 CLOSE cntrct_csr;
504 END IF;
505 IF pry_sty_csr%ISOPEN THEN
506 CLOSE pry_sty_csr;
507 END IF;
508 x_return_status := Okl_Api.G_RET_STS_ERROR ;
509
510 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
511 IF cntrct_csr%ISOPEN THEN
512 CLOSE cntrct_csr;
513 END IF;
514 IF pry_sty_csr%ISOPEN THEN
515 CLOSE pry_sty_csr;
516 END IF;
517 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
518
519 WHEN OTHERS THEN
520 IF cntrct_csr%ISOPEN THEN
521 CLOSE cntrct_csr;
522 END IF;
523 IF pry_sty_csr%ISOPEN THEN
524 CLOSE pry_sty_csr;
525 END IF;
526 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
527
528
529 END get_primary_no_prc_stream_type;
530
531 PROCEDURE get_dep_no_prc_stream_type
532 (
533 p_khr_id IN okl_k_headers_full_v.id%TYPE,
534 p_pdt_id IN okl_k_headers_full_v.pdt_id%TYPE,
535 p_primary_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
536 p_dependent_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
537 x_return_status OUT NOCOPY VARCHAR2,
538 x_dependent_sty_id OUT NOCOPY strm_rec_type
539 )
540
541 IS
542
543 CURSOR cntrct_csr (l_khr_id NUMBER)IS
544 SELECT pdt_id, start_date
545 FROM okl_k_headers_full_v
546 WHERE id = l_khr_id;
547
548 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
549 SELECT DEPENDENT_STY_ID,PRICING_NAME
550 FROM OKL_STRM_TMPT_LINES_UV STL
551 WHERE PRIMARY_YN = 'N'
552 AND STL.PDT_ID = l_product_id
553 AND (STL.START_DATE <= l_contract_start_date)
554 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
555 AND PRIMARY_STY_PURPOSE = p_primary_sty_purpose
556 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose;
557
558 l_product_id NUMBER;
559 l_strm_rec_type strm_rec_type;
560 l_contract_start_date DATE;
561 l_dependetn_sty_id NUMBER;
562 rec_count NUMBER := 0;
563 l_dep_sty_purpose_meaning VARCHAR2(4000);
564
565 BEGIN
566
567 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
568
569 -- DBMS_OUTPUT.PUT_LINE('l_p_khr_id - ' || p_khr_id);
570
571 OPEN cntrct_csr (p_khr_id);
572 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
573 CLOSE cntrct_csr;
574
575 -- DBMS_OUTPUT.PUT_LINE('l_pdt_id - ' || l_product_id);
576 -- DBMS_OUTPUT.PUT_LINE('l_start_date - ' || l_contract_start_date);
577
578 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
579
580 OPEN dep_sty_csr (p_pdt_id, l_contract_start_date);
581 FETCH dep_sty_csr INTO l_strm_rec_type;
582 IF dep_sty_csr%NOTFOUND THEN
583
584 -- Bug 4064253
585
586 l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
587 ('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
588
589 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
590 p_msg_name => 'OKL_NO_DEP_STY_FOUND',
591 p_token1 => 'PURPOSE',
592 p_token1_value => l_dep_sty_purpose_meaning);
593
594 RAISE Okl_Api.G_EXCEPTION_ERROR;
595 END IF;
596 CLOSE dep_sty_csr;
597
598 ELSE
599
600 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
601 p_msg_name => 'OKL_NO_PDT_FOUND');
602 RAISE Okl_Api.G_EXCEPTION_ERROR;
603
604 END IF;
605
606 x_dependent_sty_id := l_strm_rec_type;
607
608 EXCEPTION
609 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
610 IF cntrct_csr%ISOPEN THEN
611 CLOSE cntrct_csr;
612 END IF;
613 IF dep_sty_csr%ISOPEN THEN
614 CLOSE dep_sty_csr;
615 END IF;
616 x_return_status := Okl_Api.G_RET_STS_ERROR ;
617
618 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
619 IF cntrct_csr%ISOPEN THEN
620 CLOSE cntrct_csr;
621 END IF;
622 IF dep_sty_csr%ISOPEN THEN
623 CLOSE dep_sty_csr;
624 END IF;
625 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
626
627 WHEN OTHERS THEN
628 IF cntrct_csr%ISOPEN THEN
629 CLOSE cntrct_csr;
630 END IF;
631 IF dep_sty_csr%ISOPEN THEN
632 CLOSE dep_sty_csr;
633 END IF;
634 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
635
636 END get_dep_no_prc_stream_type;
637
638 PROCEDURE get_dep_no_prc_stream_type
639 (
640 p_khr_id IN okl_k_headers_full_v.id%TYPE,
641 p_pdt_id IN okl_k_headers_full_v.pdt_id%TYPE,
642 p_primary_sty_id IN okl_strm_type_b.id%TYPE,
643 p_dependent_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
644 x_return_status OUT NOCOPY VARCHAR2,
645 x_dependent_sty_id OUT NOCOPY strm_rec_type
646 )
647
648 IS
649
650 CURSOR cntrct_csr (l_khr_id NUMBER)IS
651 SELECT pdt_id, start_date
652 FROM okl_k_headers_full_v
653 WHERE id = l_khr_id;
654
655 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
656 SELECT DEPENDENT_STY_ID,PRICING_NAME
657 FROM OKL_STRM_TMPT_LINES_UV STL
658 WHERE PRIMARY_YN = 'N'
659 AND STL.PDT_ID = l_product_id
660 AND (STL.START_DATE <= l_contract_start_date)
661 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
662 AND PRIMARY_STY_ID = p_primary_sty_id
663 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose;
664
665 l_product_id NUMBER;
666 l_strm_rec_type strm_rec_type;
667 l_contract_start_date DATE;
668 l_dependetn_sty_id NUMBER;
669 rec_count NUMBER := 0;
670 l_dep_sty_purpose_meaning VARCHAR2(4000);
671
672 BEGIN
673
674 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
675
676 -- DBMS_OUTPUT.PUT_LINE('l_p_khr_id - ' || p_khr_id);
677
678 OPEN cntrct_csr (p_khr_id);
679 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
680 CLOSE cntrct_csr;
681
682 -- DBMS_OUTPUT.PUT_LINE('l_pdt_id - ' || l_product_id);
683 -- DBMS_OUTPUT.PUT_LINE('l_start_date - ' || l_contract_start_date);
684
685 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
686
687 OPEN dep_sty_csr (p_pdt_id, l_contract_start_date);
688 FETCH dep_sty_csr INTO l_strm_rec_type;
689 IF dep_sty_csr%NOTFOUND THEN
690
691 -- Bug 4064253
692
693 l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
694 ('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
695
696 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
697 p_msg_name => 'OKL_NO_DEP_STY_FOUND',
698 p_token1 => 'PURPOSE',
699 p_token1_value => l_dep_sty_purpose_meaning);
700
701 RAISE Okl_Api.G_EXCEPTION_ERROR;
702 END IF;
703 CLOSE dep_sty_csr;
704
705 ELSE
706
707 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
708 p_msg_name => 'OKL_NO_PDT_FOUND');
709 RAISE Okl_Api.G_EXCEPTION_ERROR;
710
711 END IF;
712
713 x_dependent_sty_id := l_strm_rec_type;
714
715 EXCEPTION
716 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
717 IF cntrct_csr%ISOPEN THEN
718 CLOSE cntrct_csr;
719 END IF;
720 IF dep_sty_csr%ISOPEN THEN
721 CLOSE dep_sty_csr;
722 END IF;
723 x_return_status := Okl_Api.G_RET_STS_ERROR ;
724
725 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
726 IF cntrct_csr%ISOPEN THEN
727 CLOSE cntrct_csr;
728 END IF;
729 IF dep_sty_csr%ISOPEN THEN
730 CLOSE dep_sty_csr;
731 END IF;
732 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
733
734 WHEN OTHERS THEN
735 IF cntrct_csr%ISOPEN THEN
736 CLOSE cntrct_csr;
737 END IF;
738 IF dep_sty_csr%ISOPEN THEN
739 CLOSE dep_sty_csr;
740 END IF;
741 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
742
743 END get_dep_no_prc_stream_type;
744
745 PROCEDURE get_dep_no_prc_stream_type
746 (
747 p_khr_id IN okl_k_headers_full_v.id%TYPE,
748 p_primary_sty_id IN okl_strm_type_b.id%TYPE,
749 p_dependent_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
750 x_return_status OUT NOCOPY VARCHAR2,
751 x_dependent_sty_id OUT NOCOPY strm_rec_type
752 )
753
754 IS
755
756 CURSOR cntrct_csr (l_khr_id NUMBER)IS
757 SELECT pdt_id, start_date
758 FROM okl_k_headers_full_v
759 WHERE id = l_khr_id;
760
761 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
762 SELECT DEPENDENT_STY_ID,PRICING_NAME
763 FROM OKL_STRM_TMPT_LINES_UV STL
764 WHERE PRIMARY_YN = 'N'
765 AND STL.PDT_ID = l_product_id
766 AND (STL.START_DATE <= l_contract_start_date)
767 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
768 AND PRIMARY_STY_ID = p_primary_sty_id
769 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose;
770
771 l_product_id NUMBER;
772 l_strm_rec_type strm_rec_type;
773 l_contract_start_date DATE;
774 l_dependetn_sty_id NUMBER;
775 rec_count NUMBER := 0;
776 l_dep_sty_purpose_meaning VARCHAR2(4000);
777
778 BEGIN
779
780 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
781
782 -- DBMS_OUTPUT.PUT_LINE('l_p_khr_id - ' || p_khr_id);
783
784 OPEN cntrct_csr (p_khr_id);
785 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
786 CLOSE cntrct_csr;
787
788 -- DBMS_OUTPUT.PUT_LINE('l_pdt_id - ' || l_product_id);
789 -- DBMS_OUTPUT.PUT_LINE('l_start_date - ' || l_contract_start_date);
790
791 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
792
793 OPEN dep_sty_csr (l_product_id, l_contract_start_date);
794 FETCH dep_sty_csr INTO l_strm_rec_type;
795 IF dep_sty_csr%NOTFOUND THEN
796
797 -- Bug 4064253
798
799 l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
800 ('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
801
802 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
803 p_msg_name => 'OKL_NO_DEP_STY_FOUND',
804 p_token1 => 'PURPOSE',
805 p_token1_value => l_dep_sty_purpose_meaning);
806
807 RAISE Okl_Api.G_EXCEPTION_ERROR;
808 END IF;
809 CLOSE dep_sty_csr;
810
811 ELSE
812
813 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
814 p_msg_name => 'OKL_NO_PDT_FOUND');
815 RAISE Okl_Api.G_EXCEPTION_ERROR;
816
817 END IF;
818
819 x_dependent_sty_id := l_strm_rec_type;
820
821 EXCEPTION
822 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
823 IF cntrct_csr%ISOPEN THEN
824 CLOSE cntrct_csr;
825 END IF;
826 IF dep_sty_csr%ISOPEN THEN
827 CLOSE dep_sty_csr;
828 END IF;
829 x_return_status := Okl_Api.G_RET_STS_ERROR ;
830
831 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
832 IF cntrct_csr%ISOPEN THEN
833 CLOSE cntrct_csr;
834 END IF;
835 IF dep_sty_csr%ISOPEN THEN
836 CLOSE dep_sty_csr;
837 END IF;
838 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
839
840 WHEN OTHERS THEN
841 IF cntrct_csr%ISOPEN THEN
842 CLOSE cntrct_csr;
843 END IF;
844 IF dep_sty_csr%ISOPEN THEN
845 CLOSE dep_sty_csr;
846 END IF;
847 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
848
849 END get_dep_no_prc_stream_type;
850
851
852 PROCEDURE get_primary_stream_type
853 (
854 p_khr_id IN okl_k_headers_full_v.id%TYPE,
855 p_pdt_id IN okl_k_headers_full_v.pdt_id%TYPE,
856 p_primary_sty_purpose IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
857 x_return_status OUT NOCOPY VARCHAR2,
858 x_primary_sty_id OUT NOCOPY strm_rec_type
859 )
860
861
862
863 IS
864
865 CURSOR cntrct_csr (l_khr_id NUMBER)IS
866 SELECT pdt_id, start_date
867 FROM okl_k_headers_full_v
868 WHERE id = l_khr_id;
869
870 CURSOR pry_sty_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
871 SELECT PRIMARY_STY_ID,PRICING_NAME
872 FROM OKL_STRM_TMPT_LINES_UV STL
873 WHERE STL.PRIMARY_YN = 'Y'
874 AND STL.PDT_ID = l_pdt_id
875 AND (STL.START_DATE <= l_contract_start_date)
876 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
877 AND PRIMARY_STY_PURPOSE = p_primary_sty_purpose
878 AND PRICING_NAME IS NOT NULL;
879
880 l_product_id NUMBER;
881 l_strm_rec_type strm_rec_type;
882 l_contract_start_date DATE;
883 l_primary_sty_id NUMBER;
884 l_primary_sty_purpose_meaning VARCHAR2(4000);
885
886 BEGIN
887
888 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
889
890
891 OPEN cntrct_csr (p_khr_id);
892 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
893 CLOSE cntrct_csr;
894
895
896
897 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
898
899 OPEN pry_sty_csr (l_product_id, l_contract_start_date);
900 FETCH pry_sty_csr INTO l_strm_rec_type;
901 IF pry_sty_csr%NOTFOUND THEN
902
903 -- Bug 4064253
904
905 l_primary_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
906 ('OKL_STREAM_TYPE_PURPOSE', p_primary_sty_purpose);
907
908 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
909 p_msg_name => 'OKL_NO_PRY_STY_FOUND',
910 p_token1 => 'PURPOSE',
911 p_token1_value => l_primary_sty_purpose_meaning);
912
913 RAISE Okl_Api.G_EXCEPTION_ERROR;
914 END IF;
915 CLOSE pry_sty_csr;
916
917 ELSE
918
919 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
920 p_msg_name => 'OKL_NO_PDT_FOUND');
921 RAISE Okl_Api.G_EXCEPTION_ERROR;
922
923 END IF;
924
925 x_primary_sty_id := l_strm_rec_type;
926
927 EXCEPTION
928 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
929 IF cntrct_csr%ISOPEN THEN
930 CLOSE cntrct_csr;
931 END IF;
932 IF pry_sty_csr%ISOPEN THEN
933 CLOSE pry_sty_csr;
934 END IF;
935 x_return_status := Okl_Api.G_RET_STS_ERROR ;
936
937 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
938 IF cntrct_csr%ISOPEN THEN
939 CLOSE cntrct_csr;
940 END IF;
941 IF pry_sty_csr%ISOPEN THEN
942 CLOSE pry_sty_csr;
943 END IF;
944 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
945
946 WHEN OTHERS THEN
947 IF cntrct_csr%ISOPEN THEN
948 CLOSE cntrct_csr;
949 END IF;
950 IF pry_sty_csr%ISOPEN THEN
951 CLOSE pry_sty_csr;
952 END IF;
953 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
954
955
956 END get_primary_stream_type;
957
958 PROCEDURE get_primary_stream_types
959 (
960 p_khr_id IN okl_k_headers_full_v.id%TYPE,
961 p_primary_sty_purpose IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
962 x_return_status OUT NOCOPY VARCHAR2,
963 x_primary_sty_id OUT NOCOPY okl_strm_type_id_tbl_type
964 )
965
966 IS
967
968 CURSOR cntrct_csr (l_khr_id NUMBER)IS
969 SELECT pdt_id, start_date
970 FROM okl_k_headers_full_v
971 WHERE id = l_khr_id;
972
973 CURSOR pry_sty_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
974 SELECT PRIMARY_STY_ID,PRICING_NAME
975 FROM OKL_STRM_TMPT_LINES_UV STL
976 WHERE STL.PRIMARY_YN = 'Y'
977 AND STL.PDT_ID = l_pdt_id
978 AND (STL.START_DATE <= l_contract_start_date)
979 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
980 AND PRIMARY_STY_PURPOSE = p_primary_sty_purpose
981 AND PRICING_NAME IS NOT NULL;
982
983 l_product_id NUMBER;
984 l_contract_start_date DATE;
985 l_primary_sty_id NUMBER;
986 rec_count INTEGER := 0;
987 l_primary_sty_purpose_meaning VARCHAR2(4000);
988
989 BEGIN
990
991 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
992 x_primary_sty_id.delete;
993
994
995 OPEN cntrct_csr (p_khr_id);
996 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
997 CLOSE cntrct_csr;
998
999 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1000
1001 FOR l_pry_sty_csr_rec in pry_sty_csr(l_product_id, l_contract_start_date) LOOP
1002 rec_count := rec_count + 1;
1003 x_primary_sty_id(rec_count).id := l_pry_sty_csr_rec.primary_sty_id;
1004 x_primary_sty_id(rec_count).pricing_name := l_pry_sty_csr_rec.pricing_name;
1005 END LOOP;
1006
1007 -- Bug 4064253
1008 IF (x_primary_sty_id.count = 0) THEN
1009 l_primary_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
1010 ('OKL_STREAM_TYPE_PURPOSE', p_primary_sty_purpose);
1011
1012 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1013 p_msg_name => 'OKL_NO_PRY_STY_FOUND',
1014 p_token1 => 'PURPOSE',
1015 p_token1_value => l_primary_sty_purpose_meaning);
1016
1017 RAISE Okl_Api.G_EXCEPTION_ERROR;
1018 END IF;
1019 ELSE
1020
1021 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1022 p_msg_name => 'OKL_NO_PDT_FOUND');
1023 RAISE Okl_Api.G_EXCEPTION_ERROR;
1024
1025 END IF;
1026
1027 -- x_primary_sty_id := l_primary_sty_id;
1028
1029 EXCEPTION
1030 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1031 IF cntrct_csr%ISOPEN THEN
1032 CLOSE cntrct_csr;
1033 END IF;
1034 IF pry_sty_csr%ISOPEN THEN
1035 CLOSE pry_sty_csr;
1036 END IF;
1037 x_return_status := Okl_Api.G_RET_STS_ERROR ;
1038
1039 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1040 IF cntrct_csr%ISOPEN THEN
1041 CLOSE cntrct_csr;
1042 END IF;
1043 IF pry_sty_csr%ISOPEN THEN
1044 CLOSE pry_sty_csr;
1045 END IF;
1046 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1047
1048 WHEN OTHERS THEN
1049 IF cntrct_csr%ISOPEN THEN
1050 CLOSE cntrct_csr;
1051 END IF;
1052 IF pry_sty_csr%ISOPEN THEN
1053 CLOSE pry_sty_csr;
1054 END IF;
1055 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1056
1057
1058 END get_primary_stream_types;
1059
1060 PROCEDURE get_dependent_stream_type
1061 (
1062 p_khr_id IN okl_k_headers_full_v.id%TYPE,
1063 p_primary_sty_purpose IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
1064 p_dependent_sty_purpose IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
1065 x_return_status OUT NOCOPY VARCHAR2,
1066 x_dependent_sty_id OUT NOCOPY strm_rec_type
1067 )
1068
1069 IS
1070
1071 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1072 SELECT pdt_id, start_date
1073 FROM okl_k_headers_full_v
1074 WHERE id = l_khr_id;
1075
1076 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1077 SELECT DEPENDENT_STY_ID,PRICING_NAME
1078 FROM OKL_STRM_TMPT_LINES_UV STL
1079 WHERE PRIMARY_YN = 'N'
1080 AND STL.PDT_ID = l_product_id
1081 AND (STL.START_DATE <= l_contract_start_date)
1082 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1083 AND PRIMARY_STY_PURPOSE = p_primary_sty_purpose
1084 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose
1085 AND PRICING_NAME IS NOT NULL;
1086
1087 l_product_id NUMBER;
1088 l_strm_rec_type strm_rec_type;
1089 l_contract_start_date DATE;
1090 l_dependetn_sty_id NUMBER;
1091 l_dep_sty_purpose_meaning VARCHAR2(4000);
1092 BEGIN
1093
1094 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1095
1096 -- DBMS_OUTPUT.PUT_LINE('l_p_khr_id - ' || p_khr_id);
1097
1098 OPEN cntrct_csr (p_khr_id);
1099 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1100 CLOSE cntrct_csr;
1101
1102 -- DBMS_OUTPUT.PUT_LINE('l_pdt_id - ' || l_product_id);
1103 -- DBMS_OUTPUT.PUT_LINE('l_start_date - ' || l_contract_start_date);
1104
1105 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1106 OPEN dep_sty_csr (l_product_id, l_contract_start_date);
1107 FETCH dep_sty_csr INTO l_strm_rec_type;
1108 IF dep_sty_csr%NOTFOUND THEN
1109
1110 -- Bug 4064253
1111
1112 l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
1113 ('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
1114
1115 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1116 p_msg_name => 'OKL_NO_DEP_STY_FOUND',
1117 p_token1 => 'PURPOSE',
1118 p_token1_value => l_dep_sty_purpose_meaning);
1119
1120 RAISE Okl_Api.G_EXCEPTION_ERROR;
1121 END IF;
1122 CLOSE dep_sty_csr;
1123
1124 ELSE
1125
1126 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1127 p_msg_name => 'OKL_NO_PDT_FOUND');
1128 RAISE Okl_Api.G_EXCEPTION_ERROR;
1129
1130 END IF;
1131
1132 x_dependent_sty_id := l_strm_rec_type;
1133
1134 EXCEPTION
1135 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1136 IF cntrct_csr%ISOPEN THEN
1137 CLOSE cntrct_csr;
1138 END IF;
1139 IF dep_sty_csr%ISOPEN THEN
1140 CLOSE dep_sty_csr;
1141 END IF;
1142 x_return_status := Okl_Api.G_RET_STS_ERROR ;
1143
1144 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1145 IF cntrct_csr%ISOPEN THEN
1146 CLOSE cntrct_csr;
1147 END IF;
1148 IF dep_sty_csr%ISOPEN THEN
1149 CLOSE dep_sty_csr;
1150 END IF;
1151 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1152
1153 WHEN OTHERS THEN
1154 IF cntrct_csr%ISOPEN THEN
1155 CLOSE cntrct_csr;
1156 END IF;
1157 IF dep_sty_csr%ISOPEN THEN
1158 CLOSE dep_sty_csr;
1159 END IF;
1160 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1161
1162 END get_dependent_stream_type;
1163
1164 PROCEDURE get_dependent_stream_type
1165 (
1166 p_khr_id IN okl_k_headers_full_v.id%TYPE,
1167 p_primary_sty_id IN okl_strm_type_b.ID%TYPE,
1168 p_dependent_sty_purpose IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
1169 x_return_status OUT NOCOPY VARCHAR2,
1170 x_dependent_sty_id OUT NOCOPY strm_rec_type
1171 )
1172
1173 IS
1174
1175 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1176 SELECT pdt_id, start_date
1177 FROM okl_k_headers_full_v
1178 WHERE id = l_khr_id;
1179
1180 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1181 SELECT DEPENDENT_STY_ID,PRICING_NAME
1182 FROM OKL_STRM_TMPT_LINES_UV STL
1183 WHERE PRIMARY_YN = 'N'
1184 AND STL.PDT_ID = l_product_id
1185 AND (STL.START_DATE <= l_contract_start_date)
1186 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1187 AND PRIMARY_STY_ID = p_primary_sty_id
1188 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose
1189 AND PRICING_NAME IS NOT NULL;
1190
1191 l_product_id NUMBER;
1192 l_strm_rec_type strm_rec_type;
1193 l_contract_start_date DATE;
1194 l_dependetn_sty_id NUMBER;
1195 l_dep_sty_purpose_meaning VARCHAR2(4000);
1196 BEGIN
1197
1198 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1199
1200 -- DBMS_OUTPUT.PUT_LINE('l_p_khr_id - ' || p_khr_id);
1201
1202 OPEN cntrct_csr (p_khr_id);
1203 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1204 CLOSE cntrct_csr;
1205
1206 -- DBMS_OUTPUT.PUT_LINE('l_pdt_id - ' || l_product_id);
1207 -- DBMS_OUTPUT.PUT_LINE('l_start_date - ' || l_contract_start_date);
1208
1209 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1210 OPEN dep_sty_csr (l_product_id, l_contract_start_date);
1211 FETCH dep_sty_csr INTO l_strm_rec_type;
1212 IF dep_sty_csr%NOTFOUND THEN
1213
1214 -- Bug 4064253
1215
1216 l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
1217 ('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
1218
1219 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1220 p_msg_name => 'OKL_NO_DEP_STY_FOUND',
1221 p_token1 => 'PURPOSE',
1222 p_token1_value => l_dep_sty_purpose_meaning);
1223
1224 RAISE Okl_Api.G_EXCEPTION_ERROR;
1225 END IF;
1226 CLOSE dep_sty_csr;
1227
1228 ELSE
1229
1230 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1231 p_msg_name => 'OKL_NO_PDT_FOUND');
1232 RAISE Okl_Api.G_EXCEPTION_ERROR;
1233
1234 END IF;
1235
1236 x_dependent_sty_id := l_strm_rec_type;
1237
1238 EXCEPTION
1239 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1240 IF cntrct_csr%ISOPEN THEN
1241 CLOSE cntrct_csr;
1242 END IF;
1243 IF dep_sty_csr%ISOPEN THEN
1244 CLOSE dep_sty_csr;
1245 END IF;
1246 x_return_status := Okl_Api.G_RET_STS_ERROR ;
1247
1248 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1249 IF cntrct_csr%ISOPEN THEN
1250 CLOSE cntrct_csr;
1251 END IF;
1252 IF dep_sty_csr%ISOPEN THEN
1253 CLOSE dep_sty_csr;
1254 END IF;
1255 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1256
1257 WHEN OTHERS THEN
1258 IF cntrct_csr%ISOPEN THEN
1259 CLOSE cntrct_csr;
1260 END IF;
1261 IF dep_sty_csr%ISOPEN THEN
1262 CLOSE dep_sty_csr;
1263 END IF;
1264 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1265
1266 END get_dependent_stream_type;
1267 PROCEDURE get_dependent_stream_types
1268 (
1269 p_khr_id IN okl_k_headers_full_v.id%TYPE,
1270 p_primary_sty_id IN okl_strm_type_b.ID%TYPE,
1271 x_return_status OUT NOCOPY VARCHAR2,
1272 x_dependent_sty_id OUT NOCOPY okl_strm_type_id_tbl_type
1273 )
1274
1275 IS
1276
1277 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1278 SELECT pdt_id, start_date
1279 FROM okl_k_headers_full_v
1280 WHERE id = l_khr_id;
1281
1282 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1283 SELECT DEPENDENT_STY_ID,PRICING_NAME
1284 FROM OKL_STRM_TMPT_LINES_UV STL
1285 WHERE PRIMARY_YN = 'N'
1286 AND STL.PDT_ID = l_product_id
1287 AND (STL.START_DATE <= l_contract_start_date)
1288 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1289 AND PRIMARY_STY_ID = p_primary_sty_id
1290 AND PRICING_NAME IS NOT NULL;
1291
1292 l_product_id NUMBER;
1293 l_contract_start_date DATE;
1294 l_dependetn_sty_id NUMBER;
1295 rec_count NUMBER:= 0 ;
1296 l_dep_sty_purpose_meaning VARCHAR2(4000);
1297
1298 BEGIN
1299
1300 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1301
1302 -- DBMS_OUTPUT.PUT_LINE('l_p_khr_id - ' || p_khr_id);
1303
1304 OPEN cntrct_csr (p_khr_id);
1305 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1306 CLOSE cntrct_csr;
1307
1308 -- DBMS_OUTPUT.PUT_LINE('l_pdt_id - ' || l_product_id);
1309 -- DBMS_OUTPUT.PUT_LINE('l_start_date - ' || l_contract_start_date);
1310
1311 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1312 FOR l_dep_sty_csr_rec in dep_sty_csr(l_product_id, l_contract_start_date) LOOP
1313 rec_count := rec_count + 1;
1314 x_dependent_sty_id(rec_count).id := l_dep_sty_csr_rec.dependent_sty_id;
1315 x_dependent_sty_id(rec_count).pricing_name := l_dep_sty_csr_rec.pricing_name;
1316 END LOOP;
1317
1318 -- Bug 4064253
1319 /*
1320 IF (x_dependent_sty_id.count = 0) THEN
1321 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1322 p_msg_name => 'OKL_NO_PDT_FOUND');,
1323
1324 RAISE Okl_Api.G_EXCEPTION_ERROR;
1325 END IF;
1326 */
1327
1328 ELSE
1329 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1330 p_msg_name => 'OKL_NO_PDT_FOUND');
1331 RAISE Okl_Api.G_EXCEPTION_ERROR;
1332 END IF;
1333
1334 EXCEPTION
1335 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1336 IF cntrct_csr%ISOPEN THEN
1337 CLOSE cntrct_csr;
1338 END IF;
1339 IF dep_sty_csr%ISOPEN THEN
1340 CLOSE dep_sty_csr;
1341 END IF;
1342 x_return_status := Okl_Api.G_RET_STS_ERROR ;
1343
1344 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1345 IF cntrct_csr%ISOPEN THEN
1346 CLOSE cntrct_csr;
1347 END IF;
1348 IF dep_sty_csr%ISOPEN THEN
1349 CLOSE dep_sty_csr;
1350 END IF;
1351 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1352
1353 WHEN OTHERS THEN
1354 IF cntrct_csr%ISOPEN THEN
1355 CLOSE cntrct_csr;
1356 END IF;
1357 IF dep_sty_csr%ISOPEN THEN
1358 CLOSE dep_sty_csr;
1359 END IF;
1360 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1361
1362 END get_dependent_stream_types;
1363
1364
1365
1366 PROCEDURE get_dependent_stream_types
1367 (
1368 p_khr_id IN okl_k_headers_full_v.id%TYPE,
1369 p_pdt_id IN okl_k_headers_full_v.pdt_id%TYPE,
1370 p_primary_sty_id IN okl_strm_type_b.ID%TYPE,
1371 x_return_status OUT NOCOPY VARCHAR2,
1372 x_dependent_sty_id OUT NOCOPY okl_strm_type_id_tbl_type
1373 )
1374
1375 IS
1376
1377 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1378 SELECT pdt_id, start_date
1379 FROM okl_k_headers_full_v
1380 WHERE id = l_khr_id;
1381
1382 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1383 SELECT DEPENDENT_STY_ID, PRICING_NAME
1384 FROM OKL_STRM_TMPT_LINES_UV STL
1385 WHERE PRIMARY_YN = 'N'
1386 AND STL.PDT_ID = l_product_id
1387 AND (STL.START_DATE <= l_contract_start_date)
1388 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1389 AND PRIMARY_STY_ID = p_primary_sty_id
1390 AND PRICING_NAME IS NOT NULL;
1391
1392 l_product_id NUMBER;
1393 l_contract_start_date DATE;
1394 l_dependetn_sty_id NUMBER;
1395 rec_count NUMBER := 0 ;
1396 l_dep_sty_purpose_meaning VARCHAR2(4000);
1397
1398 BEGIN
1399
1400 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1401
1402 -- DBMS_OUTPUT.PUT_LINE('l_p_khr_id - ' || p_khr_id);
1403
1404 OPEN cntrct_csr (p_khr_id);
1405 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1406 CLOSE cntrct_csr;
1407
1408 -- DBMS_OUTPUT.PUT_LINE('l_pdt_id - ' || l_product_id);
1409 -- DBMS_OUTPUT.PUT_LINE('l_start_date - ' || l_contract_start_date);
1410
1411 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1412
1413 FOR l_dep_sty_csr_rec in dep_sty_csr(p_pdt_id, l_contract_start_date) LOOP
1414 rec_count := rec_count + 1;
1415 x_dependent_sty_id(rec_count).id := l_dep_sty_csr_rec.dependent_sty_id;
1416 x_dependent_sty_id(rec_count).pricing_name := l_dep_sty_csr_rec.pricing_name;
1417 END LOOP;
1418
1419 -- Bug 4064253
1420 /*
1421 IF (x_primary_sty_id.count = 0) THEN
1422 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1423 p_msg_name => 'OKL_NO_PDT_FOUND');
1424 RAISE Okl_Api.G_EXCEPTION_ERROR;
1425 END IF;
1426 */
1427
1428
1429 ELSE
1430 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1431 p_msg_name => 'OKL_NO_PDT_FOUND');
1432 RAISE Okl_Api.G_EXCEPTION_ERROR;
1433 END IF;
1434
1435 EXCEPTION
1436 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1437 IF cntrct_csr%ISOPEN THEN
1438 CLOSE cntrct_csr;
1439 END IF;
1440 IF dep_sty_csr%ISOPEN THEN
1441 CLOSE dep_sty_csr;
1442 END IF;
1443 x_return_status := Okl_Api.G_RET_STS_ERROR ;
1444
1445 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1446 IF cntrct_csr%ISOPEN THEN
1447 CLOSE cntrct_csr;
1448 END IF;
1449 IF dep_sty_csr%ISOPEN THEN
1450 CLOSE dep_sty_csr;
1451 END IF;
1452 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1453
1454 WHEN OTHERS THEN
1455 IF cntrct_csr%ISOPEN THEN
1456 CLOSE cntrct_csr;
1457 END IF;
1458 IF dep_sty_csr%ISOPEN THEN
1459 CLOSE dep_sty_csr;
1460 END IF;
1461 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1462
1463 END get_dependent_stream_types;
1464
1465 PROCEDURE get_dependent_stream_type
1466 (
1467 p_khr_id IN okl_k_headers_full_v.id%TYPE,
1468 p_pdt_id IN okl_k_headers_full_v.pdt_id%TYPE,
1469 p_primary_sty_id IN okl_strm_type_b.ID%TYPE,
1470 p_dependent_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
1471 x_return_status OUT NOCOPY VARCHAR2,
1472 x_dependent_sty_id OUT NOCOPY strm_rec_type
1473 )
1474
1475 IS
1476
1477 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1478 SELECT pdt_id, start_date
1479 FROM okl_k_headers_full_v
1480 WHERE id = l_khr_id;
1481
1482 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1483 SELECT DEPENDENT_STY_ID,PRICING_NAME
1484 FROM OKL_STRM_TMPT_LINES_UV STL
1485 WHERE PRIMARY_YN = 'N'
1486 AND STL.PDT_ID = l_product_id
1487 AND (STL.START_DATE <= l_contract_start_date)
1488 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1489 AND PRIMARY_STY_ID = p_primary_sty_id
1490 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose
1491 AND PRICING_NAME IS NOT NULL;
1492
1493 l_product_id NUMBER;
1494 l_strm_rec_type strm_rec_type;
1495 l_contract_start_date DATE;
1496 l_dependetn_sty_id NUMBER;
1497 rec_count NUMBER := 0;
1498 l_dep_sty_purpose_meaning VARCHAR2(4000);
1499
1500 BEGIN
1501
1502 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1503
1504 -- DBMS_OUTPUT.PUT_LINE('l_p_khr_id - ' || p_khr_id);
1505
1506 OPEN cntrct_csr (p_khr_id);
1507 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1508 CLOSE cntrct_csr;
1509
1510 -- DBMS_OUTPUT.PUT_LINE('l_pdt_id - ' || l_product_id);
1511 -- DBMS_OUTPUT.PUT_LINE('l_start_date - ' || l_contract_start_date);
1512
1513 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1514
1515 OPEN dep_sty_csr (l_product_id, l_contract_start_date);
1516 FETCH dep_sty_csr INTO l_strm_rec_type;
1517 IF dep_sty_csr%NOTFOUND THEN
1518
1519 -- Bug 4064253
1520
1521 l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
1522 ('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
1523
1524 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1525 p_msg_name => 'OKL_NO_DEP_STY_FOUND',
1526 p_token1 => 'PURPOSE',
1527 p_token1_value => l_dep_sty_purpose_meaning);
1528
1529 RAISE Okl_Api.G_EXCEPTION_ERROR;
1530 END IF;
1531 CLOSE dep_sty_csr;
1532
1533 ELSE
1534
1535 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1536 p_msg_name => 'OKL_NO_PDT_FOUND');
1537 RAISE Okl_Api.G_EXCEPTION_ERROR;
1538
1539 END IF;
1540
1541 x_dependent_sty_id := l_strm_rec_type;
1542
1543 EXCEPTION
1544 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1545 IF cntrct_csr%ISOPEN THEN
1546 CLOSE cntrct_csr;
1547 END IF;
1548 IF dep_sty_csr%ISOPEN THEN
1549 CLOSE dep_sty_csr;
1550 END IF;
1551 x_return_status := Okl_Api.G_RET_STS_ERROR ;
1552
1553 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1554 IF cntrct_csr%ISOPEN THEN
1555 CLOSE cntrct_csr;
1556 END IF;
1557 IF dep_sty_csr%ISOPEN THEN
1558 CLOSE dep_sty_csr;
1559 END IF;
1560 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1561
1562 WHEN OTHERS THEN
1563 IF cntrct_csr%ISOPEN THEN
1564 CLOSE cntrct_csr;
1565 END IF;
1566 IF dep_sty_csr%ISOPEN THEN
1567 CLOSE dep_sty_csr;
1568 END IF;
1569 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1570
1571 END get_dependent_stream_type;
1572
1573 PROCEDURE get_dependent_stream_type
1574 (
1575 p_khr_id IN okl_k_headers_full_v.id%TYPE,
1576 p_pdt_id IN okl_k_headers_full_v.pdt_id%TYPE,
1577 p_primary_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
1578 p_dependent_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
1579 x_return_status OUT NOCOPY VARCHAR2,
1580 x_dependent_sty_id OUT NOCOPY strm_rec_type
1581 )
1582
1583 IS
1584
1585 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1586 SELECT pdt_id, start_date
1587 FROM okl_k_headers_full_v
1588 WHERE id = l_khr_id;
1589
1590 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1591 SELECT DEPENDENT_STY_ID,PRICING_NAME
1592 FROM OKL_STRM_TMPT_LINES_UV STL
1593 WHERE PRIMARY_YN = 'N'
1594 AND STL.PDT_ID = l_product_id
1595 AND (STL.START_DATE <= l_contract_start_date)
1596 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1597 AND PRIMARY_STY_PURPOSE = p_primary_sty_purpose
1598 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose
1599 AND PRICING_NAME IS NOT NULL;
1600
1601 l_product_id NUMBER;
1602 l_strm_rec_type strm_rec_type;
1603 l_contract_start_date DATE;
1604 l_dependetn_sty_id NUMBER;
1605 rec_count NUMBER;
1606 l_dep_sty_purpose_meaning VARCHAR2(4000);
1607
1608 BEGIN
1609
1610 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1611
1612 -- DBMS_OUTPUT.PUT_LINE('l_p_khr_id - ' || p_khr_id);
1613
1614 OPEN cntrct_csr (p_khr_id);
1615 FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1616 CLOSE cntrct_csr;
1617
1618 -- DBMS_OUTPUT.PUT_LINE('l_pdt_id - ' || l_product_id);
1619 -- DBMS_OUTPUT.PUT_LINE('l_start_date - ' || l_contract_start_date);
1620
1621 IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1622
1623 OPEN dep_sty_csr (l_product_id, l_contract_start_date);
1624 FETCH dep_sty_csr INTO l_strm_rec_type;
1625 IF dep_sty_csr%NOTFOUND THEN
1626 -- Bug 4064253
1627
1628 l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
1629 ('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
1630
1631 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1632 p_msg_name => 'OKL_NO_DEP_STY_FOUND',
1633 p_token1 => 'PURPOSE',
1634 p_token1_value => l_dep_sty_purpose_meaning);
1635
1636 RAISE Okl_Api.G_EXCEPTION_ERROR;
1637 END IF;
1638 CLOSE dep_sty_csr;
1639
1640 ELSE
1641
1642 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
1643 p_msg_name => 'OKL_NO_PDT_FOUND');
1644 RAISE Okl_Api.G_EXCEPTION_ERROR;
1645
1646 END IF;
1647
1648 x_dependent_sty_id := l_strm_rec_type;
1649
1650 EXCEPTION
1651 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1652 IF cntrct_csr%ISOPEN THEN
1653 CLOSE cntrct_csr;
1654 END IF;
1655 IF dep_sty_csr%ISOPEN THEN
1656 CLOSE dep_sty_csr;
1657 END IF;
1658 x_return_status := Okl_Api.G_RET_STS_ERROR ;
1659
1660 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1661 IF cntrct_csr%ISOPEN THEN
1662 CLOSE cntrct_csr;
1663 END IF;
1664 IF dep_sty_csr%ISOPEN THEN
1665 CLOSE dep_sty_csr;
1666 END IF;
1667 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1668
1669 WHEN OTHERS THEN
1670 IF cntrct_csr%ISOPEN THEN
1671 CLOSE cntrct_csr;
1672 END IF;
1673 IF dep_sty_csr%ISOPEN THEN
1674 CLOSE dep_sty_csr;
1675 END IF;
1676 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1677
1678 END get_dependent_stream_type;
1679
1680 -- End code for new procedures of stream type
1681
1682 -- gboomina BUG#4508077 changes start
1683 -- procedure to update the rvi_amount and delete the primary stream
1684 PROCEDURE update_rvi_amount(p_api_version IN NUMBER,
1685 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
1686 p_chr_id IN NUMBER,
1687 p_purpose IN VARCHAR2,
1688 x_return_status OUT NOCOPY VARCHAR2,
1689 x_msg_count OUT NOCOPY NUMBER,
1690 x_msg_data OUT NOCOPY VARCHAR2)
1691 IS
1692 -- cursor to fetch the abosrbed fee line with purpose as RVI
1693 CURSOR rvi_fee_csr IS
1694 SELECT KLE.ID ID
1695 FROM OKL_K_LINES KLE, OKC_K_LINES_B CLE, OKC_LINE_STYLES_B LSE
1696 WHERE CLE.CHR_ID = p_chr_id
1697 AND CLE.DNZ_CHR_ID = p_chr_id
1698 AND CLE.ID = KLE.ID
1699 AND CLE.LSE_ID = LSE.ID
1700 AND LSE.LTY_CODE = 'FEE'
1701 AND KLE.FEE_PURPOSE_CODE = 'RVI'
1702 AND KLE.FEE_TYPE = 'ABSORBED';
1703 -- cursor to fetch the fee line details
1704 CURSOR get_fee_dtls_csr(p_line_id NUMBER) IS
1705 SELECT LINE_ID, ITEM_ID, ITEM_OBJECT1_ID1, ITEM_OBJECT1_ID2, LINE_START_DATE, LINE_END_DATE, LINE_AMOUNT
1706 FROM okl_k_fee_lines_uv
1707 WHERE LINE_ID = p_line_id;
1708 -- cursor to fetch the stream element amount
1709 CURSOR get_strmele_csr(p_khr_id NUMBER, p_strm_id NUMBER, p_sty_id NUMBER) IS
1710 SELECT ele.amount
1711 FROM okl_strm_elements ele,
1712 okl_streams str
1713 WHERE ele.stm_id = p_strm_id
1714 AND str.khr_id = p_khr_id
1715 AND str.sty_id = p_sty_id
1716 AND upper(str.say_code) = 'CURR'
1717 AND upper(str.active_yn) = 'Y';
1718
1719 l_line_id NUMBER;
1720 lx_fee_types_rec okl_maintain_fee_pvt.fee_types_rec_type;
1721 l_fee_types_rec okl_maintain_fee_pvt.fee_types_rec_type;
1722 l_rvi_amount NUMBER;
1723 l_strm_id NUMBER;
1724 l_stmv_rec okl_streams_pub.stmv_rec_type;
1725 l_api_name VARCHAR2(255) := 'update_rvi_amount';
1726 BEGIN
1727 x_return_status := OKL_API.G_RET_STS_SUCCESS;
1728 -- Call start_activity to create savepoint, check compatibility
1729 -- and initialize message list
1730 x_return_status := OKL_API.START_ACTIVITY (
1731 l_api_name
1732 ,p_init_msg_list
1733 ,'_PVT'
1734 ,x_return_status);
1735 -- Check if activity started successfully
1736 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1737 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1738 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1739 RAISE OKL_API.G_EXCEPTION_ERROR;
1740 END IF;
1741 l_line_id := NULL;
1742 l_rvi_amount := NULL;
1743 -- get the abosrbed fee line with purpose code as RVI
1744 FOR l_rvi_fee_rec IN rvi_fee_csr
1745 LOOP
1746 l_line_id := l_rvi_fee_rec.ID;
1747 END LOOP;
1748 -- if abosrbed fee line with purpose code as RVI exists
1749 -- populate the fee record
1750 IF l_line_id IS NOT NULL THEN
1751 FOR l_fee_dtls_rec IN get_fee_dtls_csr(p_line_id => l_line_id)
1752 LOOP
1753 l_fee_types_rec.line_id := l_line_id;
1754 l_fee_types_rec.dnz_chr_id := p_chr_id;
1755 l_fee_types_rec.fee_type := 'ABSORBED';
1756 l_fee_types_rec.item_id := l_fee_dtls_rec.item_id;
1757 l_fee_types_rec.item_id1 := l_fee_dtls_rec.item_object1_id1;
1758 l_fee_types_rec.item_id2 := l_fee_dtls_rec.item_object1_id2;
1759 l_fee_types_rec.effective_from := l_fee_dtls_rec.line_start_date;
1760 l_fee_types_rec.effective_to := l_fee_dtls_rec.line_end_date;
1761 END LOOP;
1762 -- fetch the residual value insurance amount
1763 -- get the stream header id
1764 FOR l_strm_rec IN strm_csr(p_chr_id,l_line_id,'CURR',p_purpose,l_fee_types_rec.item_id1)
1765 LOOP
1766 l_stmv_rec.id := l_strm_rec.strm_id;
1767 l_strm_id := l_strm_rec.strm_id;
1768 END LOOP;
1769
1770 IF l_strm_id IS NOT NULL THEN
1771 -- update the line amount only when the API is called for main product
1772 IF p_purpose = 'ORIGIN' THEN
1773 -- get the amount
1774 FOR l_strmele_rec IN get_strmele_csr(p_chr_id, l_strm_id, l_fee_types_rec.item_id1)
1775 LOOP
1776 l_rvi_amount := l_strmele_rec.amount;
1777 END LOOP;
1778 -- update the fee line amount when the stream element returns a value
1779 IF l_rvi_amount IS NOT NULL THEN
1780 l_fee_types_rec.amount := l_rvi_amount;
1781 -- update the fee line
1782 okl_maintain_fee_pvt.update_fee_type(p_api_version => p_api_version,
1783 p_init_msg_list => OKL_API.G_FALSE,
1784 x_return_status => x_return_status,
1785 x_msg_count => x_msg_count,
1786 x_msg_data => x_msg_data,
1787 p_fee_types_rec => l_fee_types_rec,
1788 x_fee_types_rec => lx_fee_types_rec);
1789 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1790 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1791 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1792 RAISE OKL_API.G_EXCEPTION_ERROR;
1793 END IF;
1794 END IF; -- end of stream element check
1795 END IF; -- end of main product check
1796 -- delete the primary stream for all products
1797 okl_streams_pub.delete_streams(p_api_version => p_api_version,
1798 p_init_msg_list => OKL_API.G_FALSE,
1799 x_return_status => x_return_status,
1800 x_msg_count => x_msg_count,
1801 x_msg_data => x_msg_data,
1802 p_stmv_rec => l_stmv_rec);
1803 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1804 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1805 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1806 RAISE OKL_API.G_EXCEPTION_ERROR;
1807 END IF;
1808 END IF; -- end of strm id not null check
1809 END IF; -- end of line id not null check
1810 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
1811 EXCEPTION
1812 WHEN OKL_API.G_EXCEPTION_ERROR THEN
1813 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1814 p_api_name => l_api_name,
1815 p_pkg_name => g_pkg_name,
1816 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
1817 x_msg_count => x_msg_count,
1818 x_msg_data => x_msg_data,
1819 p_api_type => g_api_type);
1820
1821 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
1822 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1823 p_api_name => l_api_name,
1824 p_pkg_name => g_pkg_name,
1825 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
1826 x_msg_count => x_msg_count,
1827 x_msg_data => x_msg_data,
1828 p_api_type => g_api_type);
1829
1830 WHEN OTHERS then
1831 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1832 p_api_name => l_api_name,
1833 p_pkg_name => g_pkg_name,
1834 p_exc_name => 'OTHERS',
1835 x_msg_count => x_msg_count,
1836 x_msg_data => x_msg_data,
1837 p_api_type => g_api_type);
1838 END update_rvi_amount;
1839 -- gboomina BUG#4508077 changes end
1840
1841 --Debuging procedures
1842 -------------------------------------------------------------------------------------------------
1843 -- Start of Commnets
1844 -- Badrinath Kuchibholta
1845 -- Procedure Name : yield_request
1846 -- Description : Making of Yield requests
1847 -- Business Rules : Yields are requested from the pricing engine as needed
1848 -- Parameters : out yield pl/sql table of recors
1849 -- Version :
1850 -- End of Commnets
1851 -------------------------------------------------------------------------------------------------
1852 FUNCTION yield_request(x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type)
1853 RETURN VARCHAR2 IS
1854 l_prog_name VARCHAR2(100) := 'YIELD_REQUEST';
1855 x_return_status VARCHAR2(3) := okl_api.g_ret_sts_success;
1856 l_csm_yields_tbl okl_create_streams_pub.csm_yields_tbl_type;
1857 BEGIN
1858 -- Pre tax IRR with subsidy
1859 l_csm_yields_tbl(1).yield_name := 'PTIRR';
1860 l_csm_yields_tbl(1).method := 'Internal rate-of-return';
1861 l_csm_yields_tbl(1).array_type := 'PTCF';
1862 l_csm_yields_tbl(1).compounded_method := 'Periodic';
1863 l_csm_yields_tbl(1).nominal_yn := 'Y';
1864 l_csm_yields_tbl(1).pre_tax_yn := 'Y';
1865 l_csm_yields_tbl(1).siy_type := okl_create_streams_pvt.g_siy_type_yield;
1866 -- After tax IRR with subsidy
1867 l_csm_yields_tbl(2).yield_name := 'NAT';
1868 l_csm_yields_tbl(2).method := 'Internal rate-of-return';
1869 l_csm_yields_tbl(2).array_type := 'ATCF';
1870 l_csm_yields_tbl(2).compounded_method := 'Periodic';
1871 l_csm_yields_tbl(2).nominal_yn := 'Y';
1872 l_csm_yields_tbl(2).pre_tax_yn := 'Y';
1873 l_csm_yields_tbl(2).siy_type := okl_create_streams_pvt.g_siy_type_yield;
1874 -- Booking yield with subsidy
1875 l_csm_yields_tbl(3).yield_name := 'Booking';
1876 l_csm_yields_tbl(3).method := 'FAS 13 accounting';
1877 l_csm_yields_tbl(3).array_type := 'Full-term rate and subsidies';
1878 l_csm_yields_tbl(3).compounded_method := 'Periodic';
1879 l_csm_yields_tbl(3).nominal_yn := 'Y';
1880 l_csm_yields_tbl(3).pre_tax_yn := 'Y';
1881 l_csm_yields_tbl(3).siy_type := okl_create_streams_pvt.g_siy_type_yield;
1882 -- Pre tax IRR without subsidy
1883 l_csm_yields_tbl(4).yield_name := 'PTIRRWS';
1884 l_csm_yields_tbl(4).method := 'Internal rate-of-return';
1885 l_csm_yields_tbl(4).array_type := 'PTCF w/o subsidies';
1886 l_csm_yields_tbl(4).compounded_method := 'Periodic';
1887 l_csm_yields_tbl(4).nominal_yn := 'Y';
1888 l_csm_yields_tbl(4).pre_tax_yn := 'Y';
1889 l_csm_yields_tbl(4).siy_type := okl_create_streams_pvt.g_siy_type_yield;
1890 -- After tax IRR without subsidy
1891 l_csm_yields_tbl(5).yield_name := 'NATWS';
1892 l_csm_yields_tbl(5).method := 'Internal rate-of-return';
1893 l_csm_yields_tbl(5).array_type := 'ATCF w/o subsidies';
1894 l_csm_yields_tbl(5).compounded_method := 'Periodic';
1895 l_csm_yields_tbl(5).nominal_yn := 'Y';
1896 l_csm_yields_tbl(5).pre_tax_yn := 'N';
1897 l_csm_yields_tbl(5).siy_type := okl_create_streams_pvt.g_siy_type_yield;
1898 -- Booking yield without subsidy
1899 l_csm_yields_tbl(6).yield_name := 'BookingWS';
1900 l_csm_yields_tbl(6).method := 'FAS 13 accounting';
1901 l_csm_yields_tbl(6).array_type := 'Full-term rate';
1902 l_csm_yields_tbl(6).compounded_method := 'Periodic';
1903 l_csm_yields_tbl(6).nominal_yn := 'Y';
1904 l_csm_yields_tbl(6).pre_tax_yn := 'N';
1905 l_csm_yields_tbl(6).siy_type := okl_create_streams_pvt.g_siy_type_yield;
1906 -- Assign output rec
1907 x_csm_yields_tbl := l_csm_yields_tbl;
1908 RETURN x_return_status;
1909 EXCEPTION
1910 WHEN OTHERS THEN
1911 okl_api.set_message (p_app_name => G_APP_NAME,
1912 p_msg_name => G_DB_ERROR,
1913 p_token1 => G_PROG_NAME_TOKEN,
1914 p_token1_value => l_prog_name,
1915 p_token2 => G_SQLCODE_TOKEN,
1916 p_token2_value => sqlcode,
1917 p_token3 => G_SQLERRM_TOKEN,
1918 p_token3_value => sqlerrm);
1919 x_return_status := okl_api.g_ret_sts_error;
1920 RETURN x_return_status;
1921 END yield_request;
1922 --------------------------------------------------------------------------------
1923 -- Start modification 11i9 bakuchib
1924 -- Start modification Bug#3066346 bakuchib
1925 --------------------------------------------------------------------------------
1926 -- Start of Commnets
1927 -- Badrinath Kuchibholta
1928 -- Procedure Name : validate_txd_tax_book
1929 -- Description : Validate the Tax book for an asset number
1930 -- Business Rules : If there is only a single tax book and it is not
1931 -- designated as either Federal or State,
1932 -- We assume it as Federal.
1933 -- IF there are two tax books and neither is designated
1934 -- as either Federal or State, We issue an error
1935 -- during stream generation.
1936 -- Parameters : p_asset_number
1937 -- Version : 1.0
1938 -- History : BAKUCHIB 29-JUL-2003 - 3066346 created
1939 -- : BAKUCHIB 05-FEB-2004 - 3381853 Modified
1940 -- End of Commnets
1941 --------------------------------------------------------------------------------
1942 FUNCTION validate_txd_tax_book(p_asset_number IN OKL_TXD_ASSETS_B.ASSET_NUMBER%TYPE,
1943 x_fed_only_tax_book OUT NOCOPY OKL_TXD_ASSETS_B.TAX_BOOK%TYPE,
1944 x_fed_only OUT NOCOPY VARCHAR2)
1945 RETURN VARCHAR2 IS
1946 l_prog_name VARCHAR2(100) := 'VAL_TXD_TAX_BOOK';
1947 g_process_error EXCEPTION;
1948 G_NO_SETUP_TAX_BOOK CONSTANT VARCHAR2(200) := 'OKL_LLP_TAX_BOOK_MAP';
1949 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
1950 i NUMBER := 0;
1951 lv_tax_book OKL_TXD_ASSETS_B.TAX_BOOK%TYPE := NULL;
1952 -- Get the OKL_TXD_ASSETS_B info
1953 CURSOR l_txd_csr(p_asset_num VARCHAR2)
1954 IS
1955 SELECT tax_book
1956 FROM okl_txd_assets_v txd
1957 WHERE txd.asset_number = p_asset_num;
1958 -- Get the types of TAX BOOKS defined in the setup
1959 -- We get first for the Federal or state
1960 CURSOR l_txtrans_csr (p_book fa_book_controls.book_type_code%TYPE)
1961 IS
1962 SELECT trns.value,
1963 books.book_type_code
1964 FROM okl_sgn_translations trns,
1965 fa_book_controls books
1966 WHERE trns.jtot_object1_code = 'FA_BOOK_CONTROLS'
1967 AND trns.object1_id1 = books.book_type_code
1968 AND books.book_type_code = p_book;
1969 TYPE tax_book_value_rec IS RECORD(
1970 tax_book okl_txd_assets_b.tax_book%TYPE := NULL ,
1971 value okl_sgn_translations.value%TYPE := NULL);
1972 TYPE tax_book_value_tbl IS TABLE OF tax_book_value_rec
1973 INDEX BY BINARY_INTEGER;
1974 lt_tax_book_value_tbl tax_book_value_tbl;
1975 BEGIN
1976 -- We scan thru OKL_TXD_ASSETS_B for tax book
1977 FOR r_txd_csr IN l_txd_csr(p_asset_num => p_asset_number) LOOP
1978 OPEN l_txtrans_csr(p_book => r_txd_csr.tax_book);
1979 FETCH l_txtrans_csr INTO lt_tax_book_value_tbl(i).value,
1980 lt_tax_book_value_tbl(i).tax_book;
1981 IF l_txtrans_csr%NOTFOUND THEN
1982 lt_tax_book_value_tbl(i).tax_book := r_txd_csr.tax_book;
1983 END IF;
1984 CLOSE l_txtrans_csr;
1985 i := i + 1;
1986 END LOOP;
1987 x_fed_only := 'N';
1988 x_fed_only_tax_book := NULL;
1989 IF lt_tax_book_value_tbl.COUNT = 1 THEN
1990 IF lt_tax_book_value_tbl(lt_tax_book_value_tbl.FIRST).VALUE IS NULL THEN
1991 x_fed_only := 'Y';
1992 x_fed_only_tax_book := lt_tax_book_value_tbl(lt_tax_book_value_tbl.FIRST).tax_book;
1993 RETURN x_return_status;
1994 END IF;
1995 ELSIF lt_tax_book_value_tbl.COUNT > 1 THEN
1996 FOR j IN lt_tax_book_value_tbl.FIRST..lt_tax_book_value_tbl.LAST LOOP
1997 EXIT WHEN(j = j + 1);
1998 IF lt_tax_book_value_tbl(j).VALUE IS NULL AND
1999 lt_tax_book_value_tbl(j+1).VALUE IS NULL THEN
2000 okl_api.set_message(p_app_name => G_APP_NAME,
2001 p_msg_name => G_NO_SETUP_TAX_BOOK,
2002 p_token1 => 'TAX_BOOK',
2003 p_token1_value => lt_tax_book_value_tbl(j).tax_book);
2004 x_return_status := OKL_API.G_RET_STS_ERROR;
2005 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
2006 END IF;
2007 END LOOP;
2008 ELSE
2009 x_fed_only := 'N';
2010 x_fed_only_tax_book := NULL;
2011 RETURN x_return_status;
2012 END IF;
2013 IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2014 RAISE g_process_error;
2015 END IF;
2016 RETURN x_return_status;
2017 EXCEPTION
2018 WHEN g_process_error THEN
2019 IF l_txtrans_csr%ISOPEN THEN
2020 CLOSE l_txtrans_csr;
2021 END IF;
2022 IF l_txd_csr%ISOPEN THEN
2023 CLOSE l_txd_csr;
2024 END IF;
2025 x_return_status := OKL_API.G_RET_STS_ERROR;
2026 RETURN x_return_status;
2027 WHEN OTHERS THEN
2028 IF l_txtrans_csr%ISOPEN THEN
2029 CLOSE l_txtrans_csr;
2030 END IF;
2031 IF l_txd_csr%ISOPEN THEN
2032 CLOSE l_txd_csr;
2033 END IF;
2034 OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME,
2035 p_msg_name => G_DB_ERROR,
2036 p_token1 => G_PROG_NAME_TOKEN,
2037 p_token1_value => l_prog_name,
2038 p_token2 => G_SQLCODE_TOKEN,
2039 p_token2_value => sqlcode,
2040 p_token3 => G_SQLERRM_TOKEN,
2041 p_token3_value => sqlerrm);
2042 x_return_status := OKL_API.G_RET_STS_ERROR;
2043 RETURN x_return_status;
2044 END validate_txd_tax_book;
2045 -------------------------------------------------------------------------------------------------
2046 -- Start modification 11i10 bakuchib
2047 -- Start modification Bug#3447917 bakuchib
2048 --------------------------------------------------------------------------------
2049 -- Start of Commnets
2050 -- Badrinath Kuchibholta
2051 -- Function Name : is_rep_pdt
2052 -- Description : Validate if the original product has a reporting product
2053 -- Business Rules : If there is a reporting product then we would generated
2054 -- book depreciation streams for the reporting tax book.
2055 -- and not generate federal depreciation streams or state
2056 -- depreciation streams.
2057 -- Parameters :
2058 -- Version : 1.0
2059 -- History : BAKUCHIB 20-FEB-2004 - 3447917 created
2060 -- End of Commnets
2061 --------------------------------------------------------------------------------
2062 -- bug 4194673 fixed by HKPATEL
2063 FUNCTION is_rep_pdt(--p_asset_number IN okl_txd_assets_b.asset_number%TYPE,
2064 p_corp_book IN VARCHAR2,
2065 x_mg_tax_yn OUT NOCOPY VARCHAR2)
2066 RETURN VARCHAR2 IS
2067 l_prog_name VARCHAR2(100) := 'IS_REP_PDT';
2068 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
2069 lv_mg_tax_yn VARCHAR2(3) := 'N';
2070 /*
2071 CURSOR get_rep_tax_csr(p_asset_number okl_txd_assets_b.asset_number%TYPE)
2072 IS
2073 SELECT 'Y'
2074 FROM DUAL
2075 WHERE EXISTS (SELECT 'Y'
2076 FROM okl_txd_assets_b txd
2077 WHERE txd.asset_number = p_asset_number
2078 AND txd.tax_book = fnd_profile.value('OKL_REPORTING_PDT_ASSET_BOOK'));
2079 */
2080 CURSOR get_rep_tax_csr(p_corp_book VARCHAR2)
2081 IS
2082 SELECT 'Y'
2083 FROM fa_book_controls
2084 WHERE book_class = 'TAX'
2085 AND mass_copy_source_book = p_corp_book
2086 AND book_type_code = OKL_SYSTEM_PARAMS_ALL_PUB.get_system_param_value(OKL_SYSTEM_PARAMS_ALL_PUB.G_RPT_PROD_BOOK_TYPE_CODE);
2087
2088 BEGIN
2089 --OPEN get_rep_tax_csr(p_asset_number => p_asset_number);
2090 OPEN get_rep_tax_csr(p_corp_book => p_corp_book);
2091 FETCH get_rep_tax_csr INTO lv_mg_tax_yn;
2092 CLOSE get_rep_tax_csr;
2093 x_mg_tax_yn := NVL(lv_mg_tax_yn,'N');
2094 RETURN x_return_status;
2095 EXCEPTION
2096 WHEN OTHERS THEN
2097 IF get_rep_tax_csr%ISOPEN THEN
2098 CLOSE get_rep_tax_csr;
2099 END IF;
2100 x_return_status := OKL_API.G_RET_STS_ERROR;
2101 RETURN x_return_status;
2102 END is_rep_pdt;
2103 -------------------------------------------------------------------------------------------------
2104 -- Start of Commnets
2105 -- Badrinath Kuchibholta
2106 -- Procedure Name : execute_formula
2107 -- Description : Execution of Formula Based on Line Status
2108 -- Business Rules : Execution of the formula will be based on the line status
2109 -- of the contract, presently we will be considering the TERMINATED
2110 -- line to compute the forumla since the resultant value will be
2111 -- included in yield calculations.
2112 -- Parameters : Standard Parameters with p_khr_id and p_line_id
2113 -- Version :
2114 -- End of Commnets
2115 -------------------------------------------------------------------------------------------------
2116 PROCEDURE execute_formula(p_api_version IN NUMBER,
2117 p_init_msg_list IN VARCHAR2,
2118 x_return_status OUT NOCOPY VARCHAR2,
2119 x_msg_count OUT NOCOPY NUMBER,
2120 x_msg_data OUT NOCOPY VARCHAR2,
2121 p_formula_name IN okl_formulae_v.name%TYPE,
2122 p_contract_id IN okl_k_headers_v.id%TYPE,
2123 p_line_id IN okl_k_lines_v.id%TYPE,
2124 x_value OUT NOCOPY NUMBER)
2125 IS
2126 l_api_name CONSTANT VARCHAR2(30) := 'EXECUTE_FORMULA';
2127 lv_hdr_ter VARCHAR2(3) := 'N';
2128 lv_lne_ter VARCHAR2(3) := 'N';
2129 SUBTYPE ctxt_val_tbl_type IS
2130 okl_execute_formula_pvt.ctxt_val_tbl_type;
2131 l_additional_parameters ctxt_val_tbl_type;
2132 -- To check if the chr_id has TERMINATED Line
2133 CURSOR l_hdr_ter_csr (p_chr_id NUMBER)
2134 IS
2135 SELECT 'Y'
2136 FROM dual
2137 WHERE EXISTS (SELECT 'Y'
2138 FROM okc_k_lines_b cle,
2139 okc_line_styles_b lse
2140 WHERE cle.dnz_chr_id = p_chr_id
2141 AND cle.lse_id = lse.id
2142 AND cle.sts_code = 'TERMINATED'
2143 AND lse.lty_code = 'FREE_FORM1');
2144 -- To check if the chr_id and line_id is a TERMINATED Line
2145 CURSOR l_lne_ter_csr (p_chr_id NUMBER,
2146 p_cle_id NUMBER)
2147 IS
2148 SELECT 'Y'
2149 FROM dual
2150 WHERE EXISTS (SELECT 'Y'
2151 FROM okc_k_lines_b cle,
2152 okc_line_styles_b lse
2153 WHERE cle.dnz_chr_id = p_chr_id
2154 AND cle.id = p_cle_id
2155 AND cle.lse_id = lse.id
2156 AND cle.sts_code = 'TERMINATED'
2157 AND lse.lty_code = 'FREE_FORM1');
2158 BEGIN
2159 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2160 -- Call start_activity to create savepoint, check compatibility
2161 -- and initialize message list
2162 x_return_status := OKL_API.START_ACTIVITY (
2163 l_api_name
2164 ,p_init_msg_list
2165 ,'_PVT'
2166 ,x_return_status);
2167 -- Check if activity started successfully
2168 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2169 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2170 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2171 RAISE OKL_API.G_EXCEPTION_ERROR;
2172 END IF;
2173 IF (p_contract_id IS NOT NULL OR
2174 p_contract_id <> okl_api.g_miss_num) AND
2175 (p_line_id IS NULL OR
2176 p_line_id = okl_api.g_miss_num) THEN
2177 OPEN l_hdr_ter_csr(p_chr_id => p_contract_id);
2178 FETCH l_hdr_ter_csr INTO lv_hdr_ter;
2179 CLOSE l_hdr_ter_csr;
2180 IF lv_hdr_ter = 'Y' THEN
2181 -- We need to set the global formula addtional parameter to Y and reset the
2182 -- same to N after using the formula since we need to consider TERMINATED lines
2183 l_additional_parameters(0).name := 'TERMINATED_LINES_YN';
2184 l_additional_parameters(0).value := 'Y';
2185 -- Calling the formula Engine with additional parameter
2186 -- so that the terminated lines are included for computing
2187 OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
2188 p_init_msg_list => p_init_msg_list,
2189 x_return_status => x_return_status,
2190 x_msg_count => x_msg_count,
2191 x_msg_data => x_msg_data,
2192 p_formula_name => p_formula_name,
2193 p_contract_id => p_contract_id,
2194 p_line_id => NULL,
2195 p_additional_parameters => l_additional_parameters,
2196 x_value => x_value);
2197 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2198 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2199 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2200 RAISE OKL_API.G_EXCEPTION_ERROR;
2201 END IF;
2202 -- We need to set the global formula addtional parameter to Y and reset the
2203 -- same to N after using the formula since we need to consider TERMINATED lines
2204 l_additional_parameters.delete;
2205 ELSIF lv_hdr_ter <> 'Y' THEN
2206 -- Normal calling of the formula engine
2207 OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
2208 p_init_msg_list => p_init_msg_list,
2209 x_return_status => x_return_status,
2210 x_msg_count => x_msg_count,
2211 x_msg_data => x_msg_data,
2212 p_formula_name => p_formula_name,
2213 p_contract_id => p_contract_id,
2214 p_line_id => NULL,
2215 x_value => x_value);
2216 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2217 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2218 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2219 RAISE OKL_API.G_EXCEPTION_ERROR;
2220 END IF;
2221 END IF;
2222 ELSIF (p_contract_id IS NOT NULL OR
2223 p_contract_id <> okl_api.g_miss_num) AND
2224 (p_line_id IS NOT NULL OR
2225 p_line_id <> okl_api.g_miss_num) THEN
2226 OPEN l_lne_ter_csr(p_chr_id => p_contract_id,
2227 p_cle_id => p_line_id);
2228 FETCH l_lne_ter_csr INTO lv_lne_ter;
2229 CLOSE l_lne_ter_csr;
2230 IF lv_lne_ter = 'Y' THEN
2231 -- We need to set the global formula addtional parameter to Y and reset the
2232 -- same to N after using the formula since we need to consider TERMINATED lines
2233 l_additional_parameters(0).name := 'TERMINATED_LINES_YN';
2234 l_additional_parameters(0).value := 'Y';
2235 -- Calling the formula Engine with additional parameter
2236 -- so that the terminated lines are included for computing
2237 OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
2238 p_init_msg_list => p_init_msg_list,
2239 x_return_status => x_return_status,
2240 x_msg_count => x_msg_count,
2241 x_msg_data => x_msg_data,
2242 p_formula_name => p_formula_name,
2243 p_contract_id => p_contract_id,
2244 p_line_id => p_line_id,
2245 p_additional_parameters => l_additional_parameters,
2246 x_value => x_value);
2247 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2248 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2249 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2250 RAISE OKL_API.G_EXCEPTION_ERROR;
2251 END IF;
2252 -- We need to set the global formula addtional parameter to Y and reset the
2253 -- same to N after using the formula since we need to consider TERMINATED lines
2254 l_additional_parameters.delete;
2255 ELSIF lv_lne_ter <> 'Y' THEN
2256 -- Normal calling of the formula engine
2257 OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
2258 p_init_msg_list => p_init_msg_list,
2259 x_return_status => x_return_status,
2260 x_msg_count => x_msg_count,
2261 x_msg_data => x_msg_data,
2262 p_formula_name => p_formula_name,
2263 p_contract_id => p_contract_id,
2264 p_line_id => p_line_id,
2265 x_value => x_value);
2266 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2267 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2268 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2269 RAISE OKL_API.G_EXCEPTION_ERROR;
2270 END IF;
2271 END IF;
2272 ELSE
2273 okl_api.set_message(p_app_name => G_APP_NAME,
2274 p_msg_name => G_REQUIRED_VALUE,
2275 p_token1 => G_COL_NAME_TOKEN,
2276 p_token1_value => 'Stub days, Periods');
2277 x_return_status := okl_api.g_ret_sts_error;
2278 RAISE OKL_API.G_EXCEPTION_ERROR;
2279 END IF;
2280 OKL_API.END_ACTIVITY (x_msg_count,
2281 x_msg_data );
2282 EXCEPTION
2283 WHEN OKL_API.G_EXCEPTION_ERROR then
2284 IF l_hdr_ter_csr%ISOPEN THEN
2285 CLOSE l_hdr_ter_csr;
2286 END IF;
2287 IF l_lne_ter_csr%ISOPEN THEN
2288 CLOSE l_lne_ter_csr;
2289 END IF;
2290 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2291 l_api_name,
2292 G_PKG_NAME,
2293 'OKL_API.G_RET_STS_ERROR',
2294 x_msg_count,
2295 x_msg_data,
2296 '_PVT');
2297 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
2298 IF l_hdr_ter_csr%ISOPEN THEN
2299 CLOSE l_hdr_ter_csr;
2300 END IF;
2301 IF l_lne_ter_csr%ISOPEN THEN
2302 CLOSE l_lne_ter_csr;
2303 END IF;
2304 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2305 l_api_name,
2306 G_PKG_NAME,
2307 'OKL_API.G_RET_STS_UNEXP_ERROR',
2308 x_msg_count,
2309 x_msg_data,
2310 '_PVT');
2311 WHEN OTHERS then
2312 IF l_hdr_ter_csr%ISOPEN THEN
2313 CLOSE l_hdr_ter_csr;
2314 END IF;
2315 IF l_lne_ter_csr%ISOPEN THEN
2316 CLOSE l_lne_ter_csr;
2317 END IF;
2318 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2319 l_api_name,
2320 G_PKG_NAME,
2321 'OTHERS',
2322 x_msg_count,
2323 x_msg_data,
2324 '_PVT');
2325 END execute_formula;
2326 -------------------------------------------------------------------------------------------------
2327 -- Start of Commnets
2328 -- Badrinath Kuchibholta
2329 -- Procedure Name : append_perd_exp_tbl
2330 -- Description : append_perd_exp_tbl
2331 -- Business Rules : If the start date of the contract and start of the payment level
2332 -- are different we then append the periodic expenses table
2333 -- to include a stub.This is done for Fee lines only.
2334 -- Parameters : Standard Parameters with p_khr_id and p_csm_perd_exp_tbl
2335 -- Version :
2336 -- End of Commnets
2337 -------------------------------------------------------------------------------------------------
2338 FUNCTION append_perd_exp_tbl(p_khr_id IN OKC_K_HEADERS_B.ID%TYPE,
2339 p_csm_perd_exp_tbl IN OUT NOCOPY OKL_CREATE_STREAMS_PUB.csm_periodic_expenses_tbl_type)
2340 RETURN VARCHAR2 IS
2341 l_csm_perd_exp_tbl OKL_CREATE_STREAMS_PUB.csm_periodic_expenses_tbl_type := p_csm_perd_exp_tbl;
2342 m_csm_perd_exp_tbl OKL_CREATE_STREAMS_PUB.csm_periodic_expenses_tbl_type;
2343 mx_csm_perd_exp_tbl OKL_CREATE_STREAMS_PUB.csm_periodic_expenses_tbl_type;
2344 lx_csm_perd_exp_tbl OKL_CREATE_STREAMS_PUB.csm_periodic_expenses_tbl_type;
2345 i NUMBER := 0;
2346 m NUMBER := 0;
2347 n NUMBER := 0;
2348 ld_start_date OKC_K_HEADERS_B.START_DATE%TYPE;
2349 g_process_error EXCEPTION;
2350 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
2351 -- Cursor to get the Start of the contract
2352 -- To compare the date Start of the table of Records
2353 CURSOR c_start_date_khr_csr(p_khr_id OKC_K_HEADERS_B.ID%TYPE)
2354 IS
2355 SELECT start_date
2356 FROM okc_k_headers_b
2357 WHERE id = p_khr_id;
2358 -- Since We are now Dealing with fee lines
2359 -- So we look for Fee lines in the Table of Records
2360 CURSOR c_fee_line_csr(p_khr_id OKC_K_HEADERS_B.ID%TYPE)
2361 IS
2362 SELECT cle.id id
2363 FROM okc_k_lines_b cle,
2364 okc_line_styles_b lse
2365 WHERE dnz_chr_id = p_khr_id
2366 AND cle.lse_id = lse.id
2367 AND lse.lty_code = 'FEE';
2368 BEGIN
2369 IF p_khr_id IS NOT NULL OR
2370 p_khr_id <> OKL_API.G_MISS_NUM THEN
2371 -- Cursor to get the Start of the contract
2372 -- To compare the date Start of the table of Records
2373 OPEN c_start_date_khr_csr(p_khr_id => p_khr_id);
2374 FETCH c_start_date_khr_csr INTO ld_start_date;
2375 IF c_start_date_khr_csr%NOTFOUND THEN
2376 RAISE g_process_error;
2377 END IF;
2378 CLOSE c_start_date_khr_csr;
2379 IF l_csm_perd_exp_tbl.COUNT > 0 THEN
2380 -- Since We are now Dealing with fee lines
2381 -- So we look for Fee lines in the Table of Records
2382 FOR r_fee_line_csr IN c_fee_line_csr(p_khr_id => p_khr_id) LOOP
2383 -- Now scanning the table of records and build a temp table of
2384 -- records which match the below condition
2385 FOR i IN l_csm_perd_exp_tbl.FIRST..l_csm_perd_exp_tbl.LAST LOOP
2386 IF l_csm_perd_exp_tbl(i).kle_fee_id = r_fee_line_csr.id AND
2387 l_csm_perd_exp_tbl(i).level_index_number = 1 AND
2388 (ld_start_date IS NOT NULL OR
2389 ld_start_date <> OKL_API.G_MISS_DATE) AND
2390 l_csm_perd_exp_tbl(i).date_start <> ld_start_date THEN
2391 m_csm_perd_exp_tbl(i) := l_csm_perd_exp_tbl(i);
2392 END IF;
2393 END LOOP;
2394 END LOOP;
2395 -- If the Temp table of records are there
2396 IF m_csm_perd_exp_tbl.COUNT > 0 THEN
2397 -- Scan each record of the temp table
2398 i := m_csm_perd_exp_tbl.FIRST;
2399 LOOP
2400 -- Scan each record of the org table
2401 FOR j IN l_csm_perd_exp_tbl.FIRST..l_csm_perd_exp_tbl.LAST LOOP
2402 IF j = (i + m) THEN
2403 -- if the record of the org table matches the temp table records.
2404 -- Then re arrange the table of record index number.
2405 FOR k IN REVERSE j..l_csm_perd_exp_tbl.LAST LOOP
2406 l_csm_perd_exp_tbl(k+1) := l_csm_perd_exp_tbl(k);
2407 END LOOP;
2408 -- Now after re arrangement we are Modifying the stub record.
2409 l_csm_perd_exp_tbl(j).level_index_number := 0;
2410 l_csm_perd_exp_tbl(j).number_of_periods := 1;
2411 l_csm_perd_exp_tbl(j).lock_level_step := NULL;
2412 -- Start modification bug#3145540,3145597
2413 l_csm_perd_exp_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
2414 -- End modification bug#3145540,3145597
2415 l_csm_perd_exp_tbl(j).query_level_yn := NULL;
2416 l_csm_perd_exp_tbl(j).structure := NULL;
2417 l_csm_perd_exp_tbl(j).amount := 0;
2418 l_csm_perd_exp_tbl(j).period := 'T';
2419 END IF;
2420 END LOOP;
2421 EXIT WHEN (i = m_csm_perd_exp_tbl.LAST);
2422 i := m_csm_perd_exp_tbl.NEXT(i);
2423 m := m + 1;
2424 END LOOP;
2425 END IF;
2426 IF l_csm_perd_exp_tbl.COUNT > 0 THEN
2427 -- Since We are now Dealing with fee lines
2428 -- So we look for Fee lines in the Table of Records
2429 FOR r_fee_line_csr IN c_fee_line_csr(p_khr_id => p_khr_id) LOOP
2430 n := 0;
2431 -- We are now re arranging the Level index number so that it
2432 -- should start from 1 instead of 0 .
2433 FOR i IN l_csm_perd_exp_tbl.FIRST..l_csm_perd_exp_tbl.LAST LOOP
2434 IF l_csm_perd_exp_tbl(i).kle_fee_id = r_fee_line_csr.id AND
2435 l_csm_perd_exp_tbl(i).level_index_number = n AND
2436 (ld_start_date IS NOT NULL OR
2437 ld_start_date <> OKL_API.G_MISS_DATE) AND
2438 l_csm_perd_exp_tbl(i).date_start <> ld_start_date THEN
2439 n := n + 1;
2440 l_csm_perd_exp_tbl(i).level_index_number := n;
2441 END IF;
2442 END LOOP;
2443 END LOOP;
2444 END IF;
2445 END IF;
2446 ELSE
2447 RAISE g_process_error;
2448 END IF;
2449 p_csm_perd_exp_tbl := l_csm_perd_exp_tbl;
2450 RETURN x_return_status;
2451 EXCEPTION
2452 WHEN g_process_error THEN
2453 IF c_start_date_khr_csr%ISOPEN THEN
2454 CLOSE c_start_date_khr_csr;
2455 END IF;
2456 IF c_fee_line_csr%ISOPEN THEN
2457 CLOSE c_fee_line_csr;
2458 END IF;
2459 x_return_status := OKL_API.G_RET_STS_ERROR;
2460 RETURN x_return_status;
2461 WHEN OTHERS THEN
2462 IF c_start_date_khr_csr%ISOPEN THEN
2463 CLOSE c_start_date_khr_csr;
2464 END IF;
2465 IF c_fee_line_csr%ISOPEN THEN
2466 CLOSE c_fee_line_csr;
2467 END IF;
2468 x_return_status := OKL_API.G_RET_STS_ERROR;
2469 RETURN x_return_status;
2470 END append_perd_exp_tbl;
2471 -- End modification 11i9 bakuchib
2472 PROCEDURE delete_working_streams(
2473 p_api_version IN NUMBER,
2474 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
2475 x_return_status OUT NOCOPY VARCHAR2,
2476 x_msg_count OUT NOCOPY NUMBER,
2477 x_msg_data OUT NOCOPY VARCHAR2,
2478 p_chr_id IN NUMBER) AS
2479 l_api_name CONSTANT VARCHAR2(30) := 'DELETE_WKG_STRMS';
2480 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2481 l_api_version NUMBER := 1.0;
2482
2483 l_stmv_tbl okl_streams_pub.stmv_tbl_type;
2484 x_stmv_tbl okl_streams_pub.stmv_tbl_type;
2485 l_strms_orig_rec strms_csr%ROWTYPE;
2486 l_strms_rep_rec strms_csr%ROWTYPE;
2487
2488 i NUMBER;
2489
2490 Begin
2491
2492 print( l_api_name, 'begin');
2493 l_return_status := OKL_API.START_ACTIVITY(
2494 p_api_name => l_api_name,
2495 p_pkg_name => g_pkg_name,
2496 p_init_msg_list => p_init_msg_list,
2497 l_api_version => l_api_version,
2498 p_api_version => p_api_version,
2499 p_api_type => G_API_TYPE,
2500 x_return_status => x_return_status);
2501
2502 -- check if activity started successfully
2503 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
2504 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2505 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
2506 raise OKL_API.G_EXCEPTION_ERROR;
2507 End If;
2508
2509 i := 0;
2510 FOR l_strms_orig_rec in strms_csr ( p_chr_id, 'WORK', 'ORIGIN')
2511 LOOP
2512
2513 i := i + 1;
2514 print( l_api_name, 'DELETE:'||to_char(l_strms_orig_rec.strm_id));
2515 l_stmv_tbl(i).id := l_strms_orig_rec.STRM_ID;
2516 l_stmv_tbl(i).sty_id := l_strms_orig_rec.STY_ID;
2517 l_stmv_tbl(i).khr_id := p_chr_id;
2518 l_stmv_tbl(i).sgn_code := l_strms_orig_rec.SGN_CODE;
2519 l_stmv_tbl(i).transaction_number := l_strms_orig_rec.TRN_NUM;
2520
2521 END LOOP;
2522 FOR l_strms_rep_rec in strms_csr ( p_chr_id, 'WORK', 'REPORT')
2523 LOOP
2524
2525 i := i + 1;
2526 print( l_api_name, 'DELETE:'||to_char(l_strms_rep_rec.strm_id));
2527 l_stmv_tbl(i).id := l_strms_rep_rec.STRM_ID;
2528 l_stmv_tbl(i).sty_id := l_strms_rep_rec.STY_ID;
2529 l_stmv_tbl(i).khr_id := p_chr_id;
2530 l_stmv_tbl(i).sgn_code := l_strms_rep_rec.SGN_CODE;
2531 l_stmv_tbl(i).transaction_number := l_strms_rep_rec.TRN_NUM;
2532
2533 END LOOP;
2534
2535 If ( i > 0 ) Then
2536
2537 Okl_Streams_pub.delete_streams(
2538 p_api_version => p_api_version,
2539 p_init_msg_list => p_init_msg_list,
2540 x_return_status => x_return_status,
2541 x_msg_count => x_msg_count,
2542 x_msg_data => x_msg_data,
2543 p_stmv_tbl => l_stmv_tbl);
2544
2545 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2546 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2547 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2548 RAISE OKL_API.G_EXCEPTION_ERROR;
2549 END IF;
2550
2551 End If;
2552
2553 print( l_api_name, 'end');
2554 EXCEPTION
2555 when OKL_API.G_EXCEPTION_ERROR then
2556 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
2557 p_api_name => l_api_name,
2558 p_pkg_name => g_pkg_name,
2559 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
2560 x_msg_count => x_msg_count,
2561 x_msg_data => x_msg_data,
2562 p_api_type => g_api_type);
2563 x_return_status := l_return_status;
2564
2565 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
2566 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
2567 p_api_name => l_api_name,
2568 p_pkg_name => g_pkg_name,
2569 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
2570 x_msg_count => x_msg_count,
2571 x_msg_data => x_msg_data,
2572 p_api_type => g_api_type);
2573 x_return_status := l_return_status;
2574
2575 when OTHERS then
2576 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
2577 p_api_name => l_api_name,
2578 p_pkg_name => g_pkg_name,
2579 p_exc_name => 'OTHERS',
2580 x_msg_count => x_msg_count,
2581 x_msg_data => x_msg_data,
2582 p_api_type => g_api_type);
2583 x_return_status := l_return_status;
2584
2585
2586 End delete_working_streams;
2587
2588 ---------------------------------------------------------------------------------------------
2589 -- Procedure adjust_passthrough_streams to handle passthrough streams.
2590 ---------------------------------------------------------------------------------------------
2591
2592 PROCEDURE adjust_passthrough_streams(
2593 p_api_version IN NUMBER,
2594 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
2595 x_return_status OUT NOCOPY VARCHAR2,
2596 x_msg_count OUT NOCOPY NUMBER,
2597 x_msg_data OUT NOCOPY VARCHAR2,
2598 p_chr_id IN VARCHAR2,
2599 p_purpose IN VARCHAR2) AS
2600 l_api_name CONSTANT VARCHAR2(30) := 'ADJUST_PASSTHROUGH_STREAMS';
2601 i BINARY_INTEGER := 0;
2602 --srsreeni Bug 5917582 start
2603 j BINARY_INTEGER := 0;
2604 --srsreeni Bug 5917582 end
2605 l_passthru_percent NUMBER := 0;
2606 --l_sty_id NUMBER;
2607 l_sty_id strm_rec_type;
2608 l_sty_name VARCHAR2(150);
2609 lx_return_status VARCHAR2(1);
2610 lx_isAllowed BOOLEAN;
2611 lx_passStatus VARCHAR2(30);
2612 lx_failStatus VARCHAR2(30);
2613 c_kle_id NUMBER;
2614 c_sty_id NUMBER;
2615 v_adj_amt NUMBER;
2616 l_stmv_tbl okl_streams_pub.stmv_tbl_type;
2617 x_stmv_tbl okl_streams_pub.stmv_tbl_type;
2618 l_selv_tbl okl_streams_pvt.selv_tbl_type;
2619 l_pt_tbl okl_streams_pub.selv_tbl_type;
2620 --srsreeni Bug 5917582 start
2621 l_pt_tbl_tmp okl_streams_pub.selv_tbl_type;
2622 --srsreeni Bug 5917582 end
2623 lx_selv_tbl okl_streams_pvt.selv_tbl_type;
2624 l_stmv_rec okl_streams_pub.stmv_rec_type;
2625 lx_stmv_rec okl_streams_pub.stmv_rec_type;
2626 --srsreeni bug 5869271 start add
2627 l_old_cle_id okc_k_lines_b.ID%TYPE;
2628 l_old_sty_id okl_strm_type_b.ID%TYPE;
2629 l_old_str_stmv_rec okl_streams_pub.stmv_rec_type;
2630 l_old_acr_stmv_rec okl_streams_pub.stmv_rec_type;
2631 l_last_se_line_number OKL_STRM_ELEMENTS_V.SE_LINE_NUMBER%TYPE;
2632 l_last_acr_se_line_number OKL_STRM_ELEMENTS_V.SE_LINE_NUMBER%TYPE;
2633 --srsreeni bug 5869271 end add
2634 l_purpose_code VARCHAR2(30) := p_purpose;
2635 -- To get the header information
2636 CURSOR c_hdr
2637 IS
2638 SELECT chr.template_yn,
2639 chr.currency_code,
2640 chr.start_date,
2641 khr.deal_type,
2642 khr.term_duration,
2643 NVL(khr.generate_accrual_yn, 'Y')
2644 FROM okc_k_headers_b chr,
2645 okl_k_headers khr
2646 WHERE khr.id = p_chr_id
2647 AND chr.id = khr.id;
2648
2649 --Added order by rul2.rule_information2 by djanaswa for bug 6007644
2650 -- To get the payment information
2651 CURSOR c_inflows
2652 IS
2653 SELECT rgp.cle_id cle_id,
2654 TO_NUMBER(rul1.object1_id1) sty_id,
2655 FND_DATE.canonical_to_date(rul2.rule_information2) start_date,
2656 TO_NUMBER(rul2.rule_information3) periods,
2657 -- srsreeni Bug 5917582 start
2658 TO_NUMBER(rul2.rule_information7) stub_days,
2659 TO_NUMBER(rul2.rule_information8) stub_amount,
2660 -- srsreeni Bug 5917582 end
2661 rul2.object1_id1 frequency,
2662 rul2.rule_information5 structure,
2663 DECODE(rul2.rule_information10, 'Y', 'ARREARS', 'ADVANCE') advance_arrears,
2664 FND_NUMBER.canonical_to_number(rul2.rule_information6) amount,
2665 lse.lty_code lty_code,
2666 kle.capital_amount capital_amount,
2667 kle.residual_value residual_value
2668 FROM okc_rule_groups_b rgp,
2669 okc_rules_b rul1,
2670 okc_rules_b rul2,
2671 okc_k_lines_b cle,
2672 okl_k_lines kle,
2673 okc_line_styles_b lse
2674 WHERE rul2.dnz_chr_id = p_chr_id
2675 AND rul2.rule_information_category = 'LASLL'
2676 AND rgp.RGD_CODE = 'LALEVL'
2677 AND rul2.rgp_id = rgp.id
2678 AND TO_NUMBER(rul2.object2_id1) = rul1.id
2679 AND rgp.cle_id = cle.id
2680 AND cle.sts_code IN ('PASSED','TERMINATED', 'COMPLETE')
2681 AND lse.lty_code = 'FEE'
2682 AND kle.fee_type = 'PASSTHROUGH'
2683 AND cle.id = kle.id
2684 AND cle.lse_id = lse.id
2685 --srsreeni bug 5869271 start add
2686 ORDER BY cle_id,sty_id, FND_DATE.canonical_to_date(rul2.rule_information2);
2687 --srsreeni bug 5869271 end add
2688 -- To get the streams information
2689 CURSOR l_stmp_yn_csr(khrid NUMBER, p VARCHAR2) IS
2690 SELECT 'Y' What
2691 FROM dual
2692 WHERE EXISTS(SELECT stm.id stmid
2693 FROM okl_streams stm
2694 WHERE stm.khr_id = khrid
2695 --AND stm.say_code = 'CURR'
2696 AND stm.say_code = 'WORK'
2697 AND stm.sgn_code = 'STMP'
2698 AND NVL(stm.purpose_code, 'ORIGIN') = p
2699 AND stm.active_yn = 'N');
2700 -- To get the stream information
2701 CURSOR l_stm_csr(khrid NUMBER, kleid NUMBER, styid NUMBER, p VARCHAR2) IS
2702 SELECT stm.id stmid
2703 FROM okl_streams stm
2704 WHERE stm.khr_id = khrid
2705 AND stm.kle_id = kleid
2706 AND stm.sty_id = styid
2707 AND stm.say_code = 'CURR'
2708 AND nvl(stm.purpose_code, 'ORIGIN') = p
2709 AND stm.active_yn = 'Y';
2710
2711 -- Added for user defined streams HKPATEL
2712 Cursor dependent_sty_csr (payment_type_id NUMBER, p_purpose VARCHAR2)
2713 IS
2714 Select dependent_sty_id,dependent_sty_name
2715 FROM OKL_STRM_TMPT_LINES_UV where primary_sty_id = payment_type_id
2716 and pdt_id = (select pdt_id from okl_k_headers where id = p_chr_id)
2717 and dependent_sty_purpose = p_purpose
2718 and dependent_sty_id is not null;
2719
2720 l_dependent_strm_rec dependent_sty_csr%ROWTYPE;
2721 -- Added code ends here
2722 l_rl_rec1 l_rl_csr1%ROWTYPE;
2723 l_stm_rec l_stm_csr%ROWTYPE;
2724 l_stmp_yn_rec l_stmp_yn_csr%ROWTYPE;
2725 l_hdr c_hdr%ROWTYPE;
2726 l_hdr_rec l_hdr_csr%ROWTYPE;
2727 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
2728 l_pdt_id NUMBER;
2729 l_primary_sty_id NUMBER;
2730
2731 -- gboomina Bug 4746368 - Added - Start
2732 l_pt_pro_fee_tbl okl_streams_pub.selv_tbl_type;
2733 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
2734 -- gboomina Bug 4746368 - Added - End
2735 --srsreeni Bug 5917582 start
2736 l_pt_pro_fee_tbl_tmp okl_streams_pub.selv_tbl_type;
2737 --srsreeni Bug 5917582 end
2738
2739 --Added by djanaswa for bug 6007644
2740 l_recurrence_date DATE := NULL;
2741 l_old_cleId NUMBER;
2742 l_old_styId NUMBER;
2743 --end djanaswa
2744
2745 BEGIN
2746 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2747 -- Call start_activity to create savepoint, check compatibility
2748 -- and initialize message list
2749 x_return_status := OKL_API.START_ACTIVITY (
2750 l_api_name
2751 ,p_init_msg_list
2752 ,'_PVT'
2753 ,x_return_status);
2754 -- Check if activity started successfully
2755 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2756 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2757 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2758 RAISE OKL_API.G_EXCEPTION_ERROR;
2759 END IF;
2760 OPEN l_stmp_yn_csr( TO_NUMBER(p_chr_id), p_purpose);
2761 FETCH l_stmp_yn_csr INTO l_stmp_yn_rec;
2762 CLOSE l_stmp_yn_csr;
2763 IF ( NVL(l_stmp_yn_rec.What, 'N') = 'N' ) THEN
2764 RETURN;
2765 END IF;
2766 OPEN c_hdr;
2767 FETCH c_hdr INTO l_hdr;
2768 CLOSE c_hdr;
2769 l_stmv_tbl.delete;
2770 FOR l_inflow IN c_inflows LOOP
2771 OPEN l_rl_csr1 ( 'LAPSTH', 'LAPTPR', TO_NUMBER(p_chr_id), l_inflow.cle_id );
2772 FETCH l_rl_csr1 INTO l_rl_rec1;
2773 CLOSE l_rl_csr1;
2774 l_passthru_percent := nvl( l_rl_rec1.rule_information1, 0.0 );
2775 /*Commented for bug 4203804
2776 i := 0;
2777 FOR l_stm_rec in l_stm_csr(p_chr_id, l_inflow.cle_id, l_inflow.sty_id, p_purpose) LOOP
2778 i := i + 1;
2779 l_stmv_tbl(i).id := l_stm_rec.stmid;
2780 END LOOP;
2781 IF ( i > 0 ) THEN
2782 okl_streams_pub.delete_streams(p_api_version => p_api_version,
2783 x_return_status => x_return_status,
2784 p_init_msg_list => p_init_msg_list,
2785 x_msg_count => x_msg_count,
2786 x_msg_data => x_msg_data,
2787 p_stmv_tbl => l_stmv_tbl);
2788 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
2789 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
2790 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
2791 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
2792 END IF;
2793 END IF;
2794 */
2795
2796 --Added by djanaswa for bug 6007644
2797 IF((l_inflow.periods IS NULL) AND (l_inflow.stub_days IS NOT NULL)) THEN
2798 --Set the recurrence date to null for stub payment
2799 l_recurrence_date := NULL;
2800 ELSIF(l_recurrence_date IS NULL
2801 OR l_old_cleId <> l_inflow.cle_id
2802 OR l_old_styId <> l_inflow.sty_id) THEN
2803 --Set the recurrence date as periodic payment level start date
2804 l_recurrence_date := l_inflow.start_date;
2805 END IF;
2806 l_old_cleId := l_inflow.cle_id;
2807 l_old_styId := l_inflow.sty_id;
2808 --end djanaswa
2809
2810
2811 -- gboomina Bug 4746368 - Start
2812 -- calling get_stream_elements with l_pt_pro_fee_tbl parameter
2813 -- Added parameter p_recurrence_date by djanaswa for bug 6007644
2814 okl_stream_generator_pvt.get_stream_elements(
2815 p_start_date => l_inflow.start_date,
2816 p_periods => l_inflow.periods,
2817 p_frequency => l_inflow.frequency,
2818 p_structure => l_inflow.structure,
2819 p_advance_or_arrears => l_inflow.advance_arrears,
2820 p_amount => l_inflow.amount,
2821 --srsreeni Bug 5917582 start
2822 --p_stub_days => NULL,
2823 --p_stub_amount => NULL,
2824 p_stub_days => l_inflow.stub_days,
2825 p_stub_amount => l_inflow.stub_amount,
2826 --srsreeni Bug 5917582 end
2827 p_currency_code => l_hdr.currency_code,
2828 p_khr_id => p_chr_id,
2829 p_kle_id => l_inflow.cle_id,
2830 p_purpose_code => l_purpose_code,
2831 x_selv_tbl => l_selv_tbl,
2832 x_pt_tbl => l_pt_tbl,
2833 x_pt_pro_fee_tbl => l_pt_pro_fee_tbl,
2834 x_return_status => x_return_status,
2835 x_msg_count => x_msg_count,
2836 x_msg_data => x_msg_data,
2837 p_recurrence_date => l_recurrence_date);
2838 -- gboomina Bug 4746368 - End
2839 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
2840 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
2841 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
2842 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
2843 END IF;
2844 --srsreeni Bug 5917582 start
2845 -- consolidation of tables used for:
2846 -- passthrough expense accrual
2847 IF (l_pt_tbl.COUNT > 0) THEN
2848 i := l_pt_tbl.FIRST;
2849 j := 1;
2850 IF (l_pt_tbl_tmp.count > 0) THEN
2851 j := l_pt_tbl_tmp.LAST + 1;
2852 END IF;
2853 LOOP
2854 l_pt_tbl_tmp(j) := l_pt_tbl(i);
2855 l_pt_tbl_tmp(j).se_line_number := j;
2856 EXIT WHEN (i = l_pt_tbl.LAST);
2857 i := l_pt_tbl.NEXT(i);
2858 j := j + 1;
2859 END LOOP;
2860 END IF;
2861 -- processing fee accrual
2862 IF (l_pt_pro_fee_tbl.COUNT > 0) THEN
2863 i := l_pt_pro_fee_tbl.FIRST;
2864 j := 1;
2865 IF (l_pt_pro_fee_tbl_tmp.count > 0) THEN
2866 j := l_pt_pro_fee_tbl_tmp.LAST + 1;
2867 END IF;
2868 LOOP
2869 l_pt_pro_fee_tbl_tmp(j) := l_pt_pro_fee_tbl(i);
2870 l_pt_pro_fee_tbl_tmp(j).se_line_number := j;
2871 EXIT WHEN (i = l_pt_pro_fee_tbl.LAST);
2872 i := l_pt_pro_fee_tbl.NEXT(i);
2873 j := j + 1;
2874 END LOOP;
2875 END IF;
2876 --srsreeni Bug 5917582 end
2877 -- Code commented and added for user defined streams - HKPATEL
2878 -- Payment level streams LASLL stream type
2879 -- Put the code for bug 4203804
2880 --srsreeni bug 5869271 start add
2881 IF (l_old_cle_id IS NULL OR (l_old_cle_id <> l_inflow.cle_id OR l_old_sty_id <> l_inflow.sty_id)) THEN
2882 --srsreeni bug 5869271 end add
2883 okl_stream_generator_pvt.get_stream_header(
2884 p_khr_id => p_chr_id,
2885 p_kle_id => l_inflow.cle_id,
2886 p_sty_id => l_inflow.sty_id,
2887 p_purpose_code => l_purpose_code,
2888 x_stmv_rec => l_stmv_rec,
2889 x_return_status => x_return_status);
2890 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
2891 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
2892 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
2893 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
2894 END IF;
2895 --l_stmv_rec.say_code := 'CURR';
2896 l_stmv_rec.say_code := 'WORK';
2897 l_stmv_rec.active_yn := 'Y';
2898 l_stmv_rec.date_working := SYSDATE;
2899 --Added by kthiruva on 09-Feb-2006
2900 --Bug 5029161 - Start of Changes
2901 IF l_selv_tbl.COUNT > 0 THEN
2902 okl_streams_pub.create_streams(p_api_version => p_api_version,
2903 p_init_msg_list => p_init_msg_list,
2904 x_return_status => x_return_status,
2905 x_msg_count => x_msg_count,
2906 x_msg_data => x_msg_data,
2907 p_stmv_rec => l_stmv_rec,
2908 p_selv_tbl => l_selv_tbl,
2909 x_stmv_rec => lx_stmv_rec,
2910 x_selv_tbl => lx_selv_tbl);
2911 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
2912 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
2913 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
2914 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
2915 END IF;
2916 END IF;
2917 --Bug 5029161 - End of Changes
2918 --srsreeni bug 5869271 start
2919 l_old_str_stmv_rec := lx_stmv_rec;
2920 l_last_se_line_number := l_selv_tbl(l_selv_tbl.LAST).se_line_number;
2921 ELSE
2922 -- populate the foreign key for the stream elements
2923 IF (l_selv_tbl.COUNT > 0) THEN
2924 i:= l_selv_tbl.FIRST;
2925 LOOP
2926 l_selv_tbl(i).stm_id := l_old_str_stmv_rec.id;
2927 l_last_se_line_number := l_last_se_line_number + 1;
2928 l_selv_tbl(i).se_line_number := l_last_se_line_number;
2929 EXIT WHEN(i = l_selv_tbl.LAST);
2930 i := l_selv_tbl.NEXT(i);
2931 END LOOP;
2932 -- populate the detail
2933 okl_streams_pub.create_stream_elements(
2934 p_api_version => p_api_version
2935 ,p_init_msg_list => p_init_msg_list
2936 ,x_return_status => x_return_status
2937 ,x_msg_count => x_msg_count
2938 ,x_msg_data => x_msg_data
2939 ,p_selv_tbl => l_selv_tbl
2940 ,x_selv_tbl => lx_selv_tbl);
2941 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
2942 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
2943 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
2944 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
2945 END IF;
2946 END IF;
2947 END IF;
2948 --srsreeni bug 5869271 end
2949
2950 okl_stream_generator_pvt.get_accrual_elements(
2951 p_start_date => l_inflow.start_date,
2952 p_periods => l_inflow.periods,
2953 p_frequency => l_inflow.frequency,
2954 p_structure => l_inflow.structure,
2955 p_advance_or_arrears => l_inflow.advance_arrears,
2956 p_amount => l_inflow.amount,
2957 --srsreeni Bug 5917582 start
2958 --p_stub_days => NULL,
2959 --p_stub_amount => NULL,
2960 p_stub_days => l_inflow.stub_days,
2961 p_stub_amount => l_inflow.stub_amount,
2962 --srsreeni Bug 5917582 end
2963 p_currency_code => l_hdr.currency_code,
2964 x_selv_tbl => l_selv_tbl,
2965 x_return_status => x_return_status);
2966 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
2967 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
2968 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
2969 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
2970 END IF;
2971
2972 --srsreeni bug 5869271 start add
2973 IF (l_old_cle_id IS NULL OR (l_old_cle_id <> l_inflow.cle_id OR l_old_sty_id <> l_inflow.sty_id)) THEN
2974 --srsreeni bug 5869271 end add
2975 -- Code commented and added for user defined streams - HKPATEL
2976 IF(g_rep_req_yn = 'Y') THEN
2977
2978 OPEN l_hdr_pdt_csr(p_chr_id);
2979 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
2980 CLOSE l_hdr_pdt_csr;
2981
2982 get_dep_no_prc_stream_type
2983 (
2984 p_khr_id => p_chr_id,
2985 p_pdt_id => l_pdt_id_rec.report_pdt_id,
2986 p_primary_sty_id => l_inflow.sty_id,
2987 p_dependent_sty_purpose => 'PASS_THRU_REV_ACCRUAL',
2988 x_return_status => x_return_status,
2989 x_dependent_sty_id => l_sty_id
2990 );
2991 IF x_return_status = 'E' THEN
2992 x_return_status := 'S';
2993 END IF;
2994
2995 ELSE
2996 get_dep_no_prc_stream_type
2997 (
2998 p_khr_id => p_chr_id,
2999 p_primary_sty_id => l_inflow.sty_id,
3000 p_dependent_sty_purpose => 'PASS_THRU_REV_ACCRUAL',
3001 x_return_status => x_return_status,
3002 x_dependent_sty_id => l_sty_id
3003 );
3004 IF x_return_status = 'E' THEN
3005 x_return_status := 'S';
3006 END IF;
3007
3008 END IF;
3009
3010 /*
3011 okl_stream_generator_pvt.get_sty_details (
3012 p_sty_name => 'PASS THROUGH REVENUE ACCRUAL',
3013 x_sty_id => l_sty_id,
3014 x_sty_name => l_sty_name,
3015 x_return_status => x_return_status);
3016 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3017 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3018 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3019 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3020 END IF;
3021 */
3022 -- Code commented and added for user defined streams ends here- HKPATEL
3023 IF(l_sty_id.id IS NOT NULL) THEN
3024 okl_stream_generator_pvt.get_stream_header(
3025 p_khr_id => p_chr_id,
3026 p_kle_id => l_inflow.cle_id,
3027 p_sty_id => l_sty_id.id,
3028 p_purpose_code => l_purpose_code,
3029 x_stmv_rec => l_stmv_rec,
3030 x_return_status => x_return_status);
3031 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3032 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3033 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3034 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3035 END IF;
3036 --l_stmv_rec.say_code := 'CURR';
3037 l_stmv_rec.say_code := 'WORK';
3038 l_stmv_rec.active_yn := 'Y';
3039 l_stmv_rec.date_working := SYSDATE;
3040 --Added by kthiruva on 09-Feb-2006
3041 --Bug 5029161 - Start of Changes
3042 IF l_selv_tbl.COUNT > 0 THEN
3043 okl_streams_pub.create_streams(p_api_version => p_api_version,
3044 p_init_msg_list => p_init_msg_list,
3045 x_return_status => x_return_status,
3046 x_msg_count => x_msg_count,
3047 x_msg_data => x_msg_data,
3048 p_stmv_rec => l_stmv_rec,
3049 p_selv_tbl => l_selv_tbl,
3050 x_stmv_rec => lx_stmv_rec,
3051 x_selv_tbl => lx_selv_tbl);
3052 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3053 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3054 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3055 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3056 END IF;
3057 END IF;
3058 --Bug 5029161 - Start of Changes
3059 --srsreeni bug 5869271 start add
3060 l_old_acr_stmv_rec := lx_stmv_rec;
3061 l_last_acr_se_line_number := l_selv_tbl(l_selv_tbl.LAST).se_line_number;
3062 END IF;
3063 ELSE
3064 -- populate the foreign key for the stream elements
3065 IF (l_selv_tbl.COUNT > 0) THEN
3066 i:= l_selv_tbl.FIRST;
3067 LOOP
3068 l_selv_tbl(i).stm_id := l_old_acr_stmv_rec.id;
3069 l_last_acr_se_line_number := l_last_acr_se_line_number + 1;
3070 l_selv_tbl(i).se_line_number := l_last_acr_se_line_number;
3071 EXIT WHEN(i = l_selv_tbl.LAST);
3072 i := l_selv_tbl.NEXT(i);
3073 END LOOP;
3074 -- populate the detail
3075 okl_streams_pub.create_stream_elements(
3076 p_api_version => p_api_version
3077 ,p_init_msg_list => p_init_msg_list
3078 ,x_return_status => x_return_status
3079 ,x_msg_count => x_msg_count
3080 ,x_msg_data => x_msg_data
3081 ,p_selv_tbl => l_selv_tbl
3082 ,x_selv_tbl => lx_selv_tbl);
3083 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3084 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3085 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3086 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3087 END IF;
3088 END IF;
3089 END IF;
3090 l_old_cle_id := l_inflow.cle_id;
3091 l_old_sty_id := l_inflow.sty_id;
3092 --srsreeni bug 5869271 ends
3093 -- Clear out reusable data structures
3094 l_sty_name := NULL;
3095 l_sty_id := NULL;
3096 l_stmv_rec := NULL;
3097 l_selv_tbl.delete;
3098 lx_stmv_rec := NULL;
3099 lx_selv_tbl.delete;
3100 END LOOP;
3101 --srsreeni Bug 5917582 start
3102 l_pt_tbl := l_pt_tbl_tmp;
3103 l_pt_pro_fee_tbl := l_pt_pro_fee_tbl_tmp;
3104 --srsreeni Bug 5917582 end
3105 -- gboomina - Bug 4746368 - Start
3106 -- moved PASS_THRU_EXP_ACCRUAL stream generation outside the Loop such that PASS_THRU_EXP_ACCRUAL will be dependent on PASS THROUGH FEE purpose.
3107 -------------------------------------------------------------------------------
3108 ---- Code for Generating PASS_THRU_EXP_ACCRUAL Streams ----
3109 -------------------------------------------------------------------------------
3110
3111 FOR l_lne_rec in l_line_rec_csr ( p_chr_id, 'FEE' )
3112 LOOP
3113 --Added by kthiruva on 04-Apr-2006
3114 --Perform the below processing only for Passthrough Fees
3115 --Bug 5137824 - Start of Changes
3116 IF (l_lne_rec.fee_type = 'PASSTHROUGH') THEN
3117 OPEN fee_strm_type_csr ( l_lne_rec.id, 'FEE' );
3118 FETCH fee_strm_type_csr into l_fee_strm_type_rec;
3119 CLOSE fee_strm_type_csr;
3120
3121 IF(g_rep_req_yn = 'Y') THEN
3122 OPEN l_hdr_pdt_csr(p_chr_id);
3123 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
3124 CLOSE l_hdr_pdt_csr;
3125
3126 l_pdt_id := l_pdt_id_rec.report_pdt_id;
3127 l_primary_sty_id := l_fee_strm_type_rec.styp_id;
3128 get_dep_no_prc_stream_type
3129 (
3130 p_khr_id => p_chr_id,
3131 p_pdt_id => l_pdt_id_rec.report_pdt_id,
3132 p_primary_sty_id => l_fee_strm_type_rec.styp_id,
3133 p_dependent_sty_purpose => 'PASS_THRU_EXP_ACCRUAL',
3134 x_return_status => x_return_status,
3135 x_dependent_sty_id => l_sty_id
3136 );
3137 IF x_return_status = 'E' THEN
3138 x_return_status := 'S';
3139 END IF;
3140 ELSE
3141 get_dep_no_prc_stream_type
3142 (
3143 p_khr_id => p_chr_id,
3144 p_primary_sty_id => l_fee_strm_type_rec.styp_id,
3145 p_dependent_sty_purpose => 'PASS_THRU_EXP_ACCRUAL',
3146 x_return_status => x_return_status,
3147 x_dependent_sty_id => l_sty_id
3148 );
3149 IF x_return_status = 'E' THEN
3150 x_return_status := 'S';
3151 END IF;
3152 END IF;
3153
3154 IF(l_sty_id.id IS NOT NULL) THEN
3155 okl_stream_generator_pvt.get_stream_header(
3156 p_khr_id => p_chr_id,
3157 p_kle_id => l_lne_rec.id,
3158 p_sty_id => l_sty_id.id,
3159 p_purpose_code => l_purpose_code,
3160 x_stmv_rec => l_stmv_rec,
3161 x_return_status => x_return_status);
3162 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3163 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3164 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3165 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3166 END IF;
3167 l_stmv_rec.say_code := 'WORK';
3168 l_stmv_rec.active_yn := 'Y';
3169 l_stmv_rec.date_working := SYSDATE;
3170
3171 --Added by kthiruva on 09-Feb-2006
3172 --Bug 5029161 - Start of Changes
3173 IF l_pt_tbl.COUNT > 0 THEN
3174 okl_streams_pub.create_streams(p_api_version => p_api_version,
3175 p_init_msg_list => p_init_msg_list,
3176 x_return_status => x_return_status,
3177 x_msg_count => x_msg_count,
3178 x_msg_data => x_msg_data,
3179 p_stmv_rec => l_stmv_rec,
3180 p_selv_tbl => l_pt_tbl,
3181 x_stmv_rec => lx_stmv_rec,
3182 x_selv_tbl => lx_selv_tbl);
3183 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3184 EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3185 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3186 EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3187 END IF;
3188 END IF;
3189 --Bug 5029161 - End of Changes
3190 END IF;
3191 -- Clear out reusable data structures
3192 l_sty_name := NULL;
3193 l_sty_id := NULL;
3194 l_stmv_rec := NULL;
3195 l_selv_tbl.delete;
3196 lx_stmv_rec := NULL;
3197 lx_selv_tbl.delete;
3198
3199 -------------------------------------------------------------------------------
3200 ---- Code for Generating PROCESSING_FEE_ACCRUAL Streams ----
3201 -------------------------------------------------------------------------------
3202 IF(g_rep_req_yn = 'Y') THEN
3203 OPEN l_hdr_pdt_csr(p_chr_id);
3204 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
3205 CLOSE l_hdr_pdt_csr;
3206
3207 l_pdt_id := l_pdt_id_rec.report_pdt_id;
3208 l_primary_sty_id := l_fee_strm_type_rec.styp_id;
3209
3210 get_dep_no_prc_stream_type
3211 (
3212 p_khr_id => p_chr_id,
3213 p_pdt_id => l_pdt_id_rec.report_pdt_id,
3214 p_primary_sty_id => l_fee_strm_type_rec.styp_id,
3215 p_dependent_sty_purpose => 'PROCESSING_FEE_ACCRUAL',
3216 x_return_status => x_return_status,
3217 x_dependent_sty_id => l_sty_id
3218 );
3219 IF x_return_status = 'E' THEN
3220 x_return_status := 'S';
3221 END IF;
3222 ELSE
3223 get_dep_no_prc_stream_type
3224 (
3225 p_khr_id => p_chr_id,
3226 p_primary_sty_id => l_fee_strm_type_rec.styp_id,
3227 p_dependent_sty_purpose => 'PROCESSING_FEE_ACCRUAL',
3228 x_return_status => x_return_status,
3229 x_dependent_sty_id => l_sty_id
3230 );
3231 IF x_return_status = 'E' THEN
3232 x_return_status := 'S';
3233 END IF;
3234 END IF;
3235 -- Code added and commented ends here - HKPATEL
3236 IF(l_sty_id.id IS NOT NULL) THEN
3237 okl_stream_generator_pvt.get_stream_header(
3238 p_khr_id => p_chr_id,
3239 p_kle_id => l_lne_rec.id,
3240 p_sty_id => l_sty_id.id,
3241 p_purpose_code => l_purpose_code,
3242 x_stmv_rec => l_stmv_rec,
3243 x_return_status => x_return_status);
3244 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3245 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3246 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3247 RAISE OKL_API.G_EXCEPTION_ERROR;
3248 END IF;
3249 l_stmv_rec.say_code := 'WORK';
3250 l_stmv_rec.active_yn := 'Y';
3251 l_stmv_rec.date_working := SYSDATE;
3252 --Added by kthiruva on 09-Feb-2006
3253 --Bug 5029161 - Start of Changes
3254 IF l_pt_pro_fee_tbl.COUNT > 0 THEN
3255 okl_streams_pub.create_streams(p_api_version => p_api_version,
3256 p_init_msg_list => p_init_msg_list,
3257 x_return_status => x_return_status,
3258 x_msg_count => x_msg_count,
3259 x_msg_data => x_msg_data,
3260 p_stmv_rec => l_stmv_rec,
3261 p_selv_tbl => l_pt_pro_fee_tbl,
3262 x_stmv_rec => lx_stmv_rec,
3263 x_selv_tbl => lx_selv_tbl);
3264 IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3265 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3266 ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3267 RAISE OKL_API.G_EXCEPTION_ERROR;
3268 END IF;
3269 END IF;
3270 --Bug 5029161 - End of Changes
3271 END IF;
3272 END IF;
3273 --Bug 5137824 - End of Changes
3274 END LOOP;
3275 -- gboomina Bug 4746368 - End
3276 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3277 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3278 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3279 RAISE OKL_API.G_EXCEPTION_ERROR;
3280 END IF;
3281 OKL_API.END_ACTIVITY (x_msg_count,
3282 x_msg_data );
3283 EXCEPTION
3284 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3285 IF c_hdr%ISOPEN THEN
3286 CLOSE c_hdr;
3287 END IF;
3288 IF c_inflows%ISOPEN THEN
3289 CLOSE c_hdr;
3290 END IF;
3291 IF l_stmp_yn_csr%ISOPEN THEN
3292 CLOSE l_stmp_yn_csr;
3293 END IF;
3294 IF l_stm_csr%ISOPEN THEN
3295 CLOSE l_stm_csr;
3296 END IF;
3297 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3298 l_api_name,
3299 G_PKG_NAME,
3300 'OKL_API.G_RET_STS_ERROR',
3301 x_msg_count,
3302 x_msg_data,
3303 '_PVT');
3304 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3305 IF c_hdr%ISOPEN THEN
3306 CLOSE c_hdr;
3307 END IF;
3308 IF c_inflows%ISOPEN THEN
3309 CLOSE c_hdr;
3310 END IF;
3311 IF l_stmp_yn_csr%ISOPEN THEN
3312 CLOSE l_stmp_yn_csr;
3313 END IF;
3314 IF l_stm_csr%ISOPEN THEN
3315 CLOSE l_stm_csr;
3316 END IF;
3317 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3318 l_api_name,
3319 G_PKG_NAME,
3320 'OKL_API.G_RET_STS_UNEXP_ERROR',
3321 x_msg_count,
3322 x_msg_data,
3323 '_PVT');
3324 WHEN OTHERS THEN
3325 IF c_hdr%ISOPEN THEN
3326 CLOSE c_hdr;
3327 END IF;
3328 IF c_inflows%ISOPEN THEN
3329 CLOSE c_hdr;
3330 END IF;
3331 IF l_stmp_yn_csr%ISOPEN THEN
3332 CLOSE l_stmp_yn_csr;
3333 END IF;
3334 IF l_stm_csr%ISOPEN THEN
3335 CLOSE l_stm_csr;
3336 END IF;
3337 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3338 l_api_name,
3339 G_PKG_NAME,
3340 'OTHERS',
3341 x_msg_count,
3342 x_msg_data,
3343 '_PVT');
3344 END adjust_passthrough_streams;
3345
3346 Procedure alloc_strms_basis_level(
3347 p_api_version IN NUMBER,
3348 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3349 x_return_status OUT NOCOPY VARCHAR2,
3350 x_msg_count OUT NOCOPY NUMBER,
3351 x_msg_data OUT NOCOPY VARCHAR2,
3352 p_chr_id IN NUMBER,
3353 p_sty_id IN NUMBER,
3354 p_ctrt_cap_amnt IN NUMBER,
3355 p_strmele_tbl IN strmele_tbl_type) AS
3356
3357 l_api_name CONSTANT VARCHAR2(30) := 'ALLOC_STRMS_BASIS_LEVEL';
3358 l_api_version CONSTANT NUMBER := 1;
3359 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3360
3361
3362 l_ctrt_cap_amnt NUMBER := p_ctrt_cap_amnt;
3363
3364 l_stmv_rec Okl_Streams_pub.stmv_rec_type;
3365 l_selv_tbl Okl_Streams_pub.selv_tbl_type;
3366 x_stmv_rec Okl_Streams_pub.stmv_rec_type;
3367 x_selv_tbl Okl_Streams_pub.selv_tbl_type;
3368
3369 i NUMBER;
3370 j NUMBER;
3371 k NUMBER;
3372 TYPE amounts_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3373 amounts amounts_tbl_type;
3374 l_num_per NUMBER;
3375
3376 l_finline_rec l_line_rec_csr%ROWTYPE;
3377 l_subfee_rec l_subfee_csr%ROWTYPE;
3378 l_strmele_tbl strmele_tbl_type := p_strmele_tbl;
3379
3380 BEGIN
3381
3382 l_return_status := OKL_API.START_ACTIVITY(
3383 p_api_name => l_api_name,
3384 p_pkg_name => g_pkg_name,
3385 p_init_msg_list => p_init_msg_list,
3386 l_api_version => l_api_version,
3387 p_api_version => p_api_version,
3388 p_api_type => G_API_TYPE,
3389 x_return_status => x_return_status);
3390
3391 -- check if activity started successfully
3392 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3393 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3394 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
3395 raise OKL_API.G_EXCEPTION_ERROR;
3396 End If;
3397
3398 FOR l_finline_rec in l_line_rec_csr ( p_chr_id, 'FREE_FORM1')
3399 LOOP
3400
3401 l_stmv_rec.sty_id := p_sty_id;
3402 l_stmv_rec.khr_id := p_chr_id;
3403 l_stmv_rec.kle_id := l_finline_rec.id;
3404 l_stmv_rec.say_code := 'WORK';
3405 l_stmv_rec.active_yn := 'N';
3406 l_stmv_rec.date_working := sysdate;
3407
3408 l_stmv_rec.transaction_number := l_strmele_tbl(1).transaction_number;
3409 l_stmv_rec.sgn_code := l_strmele_tbl(1).sgn_code;
3410
3411 k := 0;
3412 FOR l_rl_rec1 in l_rl_csr1 ( 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_finline_rec.id )
3413 LOOP
3414
3415 l_num_per := l_rl_rec1.object1_id1;
3416 k := amounts.COUNT;
3417 FOR j in 1..l_num_per
3418 LOOP
3419 amounts(j+k) := l_rl_rec1.RULE_INFORMATION6;
3420 END LOOP;
3421
3422 END LOOP;
3423
3424 FOR i in 1..l_strmele_tbl.COUNT
3425 LOOP
3426
3427 l_selv_tbl(i).amount := amounts(i);
3428 l_selv_tbl(i).accrued_yn := l_strmele_tbl(i).accrued_yn;
3429 l_selv_tbl(i).stream_element_date := l_strmele_tbl(i).stream_element_date;
3430 l_selv_tbl(i).date_billed := l_strmele_tbl(i).date_billed;
3431 l_selv_tbl(i).se_line_number := l_strmele_tbl(i).SE_LINE_NUMBER;
3432 l_selv_tbl(i).comments := l_strmele_tbl(i).comments;
3433
3434 END LOOP;
3435
3436
3437
3438 Okl_Streams_Pub.create_streams(
3439 p_api_version => l_api_version
3440 ,p_init_msg_list => p_init_msg_list
3441 ,x_return_status => l_return_status
3442 ,x_msg_count => x_msg_count
3443 ,x_msg_data => x_msg_data
3444 ,p_stmv_rec => l_stmv_rec
3445 ,p_selv_tbl => l_selv_tbl
3446 ,x_stmv_rec => x_stmv_rec
3447 ,x_selv_tbl => x_selv_tbl);
3448
3449 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3450 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3451 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
3452 raise OKL_API.G_EXCEPTION_ERROR;
3453 End If;
3454
3455 l_selv_tbl.DELETE(1, l_selv_tbl.COUNT);
3456 amounts.DELETE(1, amounts.COUNT);
3457 l_stmv_rec := NULL;
3458
3459
3460 END LOOP;
3461
3462
3463 x_return_status := l_return_status;
3464
3465 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
3466
3467 EXCEPTION
3468 when OKL_API.G_EXCEPTION_ERROR then
3469 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3470 p_api_name => l_api_name,
3471 p_pkg_name => g_pkg_name,
3472 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
3473 x_msg_count => x_msg_count,
3474 x_msg_data => x_msg_data,
3475 p_api_type => g_api_type);
3476 x_return_status := l_return_status;
3477
3478 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
3479 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3480 p_api_name => l_api_name,
3481 p_pkg_name => g_pkg_name,
3482 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
3483 x_msg_count => x_msg_count,
3484 x_msg_data => x_msg_data,
3485 p_api_type => g_api_type);
3486 x_return_status := l_return_status;
3487 If( l_strmele_csr%ISOPEN ) Then
3488 CLOSE l_strmele_csr;
3489 End If;
3490
3491
3492 when OTHERS then
3493 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3494 p_api_name => l_api_name,
3495 p_pkg_name => g_pkg_name,
3496 p_exc_name => 'OTHERS',
3497 x_msg_count => x_msg_count,
3498 x_msg_data => x_msg_data,
3499 p_api_type => g_api_type);
3500 x_return_status := l_return_status;
3501
3502
3503 END alloc_strms_basis_level;
3504
3505
3506 Procedure alloc_strms_basis_capital(
3507 p_api_version IN NUMBER,
3508 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3509 x_return_status OUT NOCOPY VARCHAR2,
3510 x_msg_count OUT NOCOPY NUMBER,
3511 x_msg_data OUT NOCOPY VARCHAR2,
3512 p_chr_id IN NUMBER,
3513 p_sty_id IN NUMBER,
3514 p_ctrt_cap_amnt IN NUMBER,
3515 p_strmele_tbl IN strmele_tbl_type) AS
3516
3517 l_api_name CONSTANT VARCHAR2(30) := 'ALLOC_STRMS_BASIS_CAPITAL';
3518 l_api_version CONSTANT NUMBER := 1;
3519 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3520
3521
3522
3523 l_finline_rec l_line_rec_csr%ROWTYPE;
3524 l_strmele_tbl strmele_tbl_type := p_strmele_tbl;
3525 l_subfee_rec l_subfee_csr%ROWTYPE;
3526
3527 i NUMBER;
3528 l_line_amnt NUMBER;
3529 l_feeline_amnt NUMBER;
3530 l_superTval NUMBER;
3531 l_alloc_value NUMBER;
3532 l_ctrt_cap_amnt NUMBER := p_ctrt_cap_amnt;
3533
3534 l_stmv_rec Okl_Streams_pub.stmv_rec_type;
3535 l_selv_tbl Okl_Streams_pub.selv_tbl_type;
3536 x_stmv_rec Okl_Streams_pub.stmv_rec_type;
3537 x_selv_tbl Okl_Streams_pub.selv_tbl_type;
3538
3539 BEGIN
3540
3541 l_return_status := OKL_API.START_ACTIVITY(
3542 p_api_name => l_api_name,
3543 p_pkg_name => g_pkg_name,
3544 p_init_msg_list => p_init_msg_list,
3545 l_api_version => l_api_version,
3546 p_api_version => p_api_version,
3547 p_api_type => G_API_TYPE,
3548 x_return_status => x_return_status);
3549
3550
3551 -- check if activity started successfully
3552 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3553 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3554 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
3555 raise OKL_API.G_EXCEPTION_ERROR;
3556 End If;
3557
3558
3559 FOR l_finline_rec in l_line_rec_csr ( p_chr_id, 'FREE_FORM1')
3560 LOOP
3561
3562 l_stmv_rec.sty_id := p_sty_id;
3563 l_stmv_rec.khr_id := p_chr_id;
3564 l_stmv_rec.kle_id := l_finline_rec.id;
3565 l_stmv_rec.say_code := 'CURR';
3566 l_stmv_rec.active_yn := 'Y';
3567 l_stmv_rec.date_current := sysdate;
3568
3569 l_stmv_rec.transaction_number := l_strmele_tbl(1).transaction_number;
3570 l_stmv_rec.sgn_code := l_strmele_tbl(1).sgn_code;
3571 l_stmv_rec.id := l_strmele_tbl(1).stm_id;
3572
3573
3574 l_line_amnt := l_finline_rec.capital_amount;
3575
3576 OPEN l_subfee_csr( l_finline_rec.id,
3577 'LINK_FEE_ASSET',
3578 'OKX_COVASST');
3579 FETCH l_subfee_csr INTO l_subfee_rec;
3580 If( l_subfee_csr%NOTFOUND ) Then
3581 l_feeline_amnt := 0.0;
3582 Else
3583 l_feeline_amnt := l_subfee_rec.capital_amount;
3584 End If;
3585 CLOSE l_subfee_csr;
3586
3587 FOR i in 1..l_strmele_tbl.COUNT
3588 LOOP
3589 l_superTval := l_strmele_tbl(i).AMOUNT;
3590 l_alloc_value := (l_superTval * ( l_line_amnt + l_feeline_amnt )) / l_ctrt_cap_amnt;
3591
3592 l_selv_tbl(i).amount := l_alloc_value;
3593 l_selv_tbl(i).accrued_yn := l_strmele_tbl(i).accrued_yn;
3594 l_selv_tbl(i).stream_element_date := l_strmele_tbl(i).stream_element_date;
3595 l_selv_tbl(i).date_billed := l_strmele_tbl(i).date_billed;
3596 l_selv_tbl(i).comments := l_strmele_tbl(i).comments;
3597 l_selv_tbl(i).se_line_number := l_strmele_tbl(i).SE_LINE_NUMBER;
3598
3599 END LOOP;
3600
3601
3602 Okl_Streams_Pub.update_streams(
3603 p_api_version => l_api_version
3604 ,p_init_msg_list => p_init_msg_list
3605 ,x_return_status => l_return_status
3606 ,x_msg_count => x_msg_count
3607 ,x_msg_data => x_msg_data
3608 ,p_stmv_rec => l_stmv_rec
3609 ,x_stmv_rec => x_stmv_rec);
3610
3611
3612
3613 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3614 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3615 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
3616 raise OKL_API.G_EXCEPTION_ERROR;
3617 End If;
3618
3619
3620
3621 FOR i in 1..l_selv_tbl.COUNT
3622 LOOP
3623 l_selv_tbl(i).stm_id := x_stmv_rec.id;
3624 END LOOP;
3625
3626 Okl_Streams_Pub.create_stream_elements(
3627 p_api_version => l_api_version
3628 ,p_init_msg_list => p_init_msg_list
3629 ,x_return_status => l_return_status
3630 ,x_msg_count => x_msg_count
3631 ,x_msg_data => x_msg_data
3632 ,p_selv_tbl => l_selv_tbl
3633 ,x_selv_tbl => x_selv_tbl);
3634
3635 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3636 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3637 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
3638 raise OKL_API.G_EXCEPTION_ERROR;
3639 End If;
3640
3641 l_selv_tbl.DELETE(1, l_selv_tbl.COUNT);
3642 l_stmv_rec := NULL;
3643
3644
3645 END LOOP;
3646
3647 x_return_status := l_return_status;
3648
3649 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
3650
3651 EXCEPTION
3652 when OKL_API.G_EXCEPTION_ERROR then
3653 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3654 p_api_name => l_api_name,
3655 p_pkg_name => g_pkg_name,
3656 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
3657 x_msg_count => x_msg_count,
3658 x_msg_data => x_msg_data,
3659 p_api_type => g_api_type);
3660 x_return_status := l_return_status;
3661
3662 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
3663 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3664 p_api_name => l_api_name,
3665 p_pkg_name => g_pkg_name,
3666 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
3667 x_msg_count => x_msg_count,
3668 x_msg_data => x_msg_data,
3669 p_api_type => g_api_type);
3670 x_return_status := l_return_status;
3671 If( l_strmele_csr%ISOPEN ) Then
3672 CLOSE l_strmele_csr;
3673 End If;
3674
3675
3676 when OTHERS then
3677 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3678 p_api_name => l_api_name,
3679 p_pkg_name => g_pkg_name,
3680 p_exc_name => 'OTHERS',
3681 x_msg_count => x_msg_count,
3682 x_msg_data => x_msg_data,
3683 p_api_type => g_api_type);
3684 x_return_status := l_return_status;
3685
3686
3687 END alloc_strms_basis_capital;
3688
3689 Procedure allocate_streams(
3690 p_api_version IN NUMBER,
3691 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3692 x_return_status OUT NOCOPY VARCHAR2,
3693 x_msg_count OUT NOCOPY NUMBER,
3694 x_msg_data OUT NOCOPY VARCHAR2,
3695 p_chr_id IN NUMBER) AS
3696
3697 l_api_name CONSTANT VARCHAR2(30) := 'ALLOCATE_STREAMS';
3698 l_api_version CONSTANT NUMBER := 1;
3699 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3700 l_ctrt_cap_amnt NUMBER;
3701 l_strmele_rec l_strmele_csr%ROWTYPE;
3702 l_strmele_tbl strmele_tbl_type;
3703 i NUMBER;
3704
3705 Cursor l_strms_csr ( chrId NUMBER, st VARCHAR2 ) IS
3706 Select sty.id sty_id,
3707 sty.name
3708 From okl_streams str,
3709 okl_strm_type_tl sty
3710 Where sty.id = str.sty_id
3711 and str.khr_id = chrId
3712 and sty.name = st
3713 and sty.language = 'US'
3714 and nvl( str.kle_id, 'XXX' ) = 'XXX';
3715
3716 l_strm_rec l_strms_csr%ROWTYPE;
3717
3718 BEGIN
3719
3720 print( l_api_name, 'begin');
3721
3722 l_return_status := OKL_API.START_ACTIVITY(
3723 p_api_name => l_api_name,
3724 p_pkg_name => g_pkg_name,
3725 p_init_msg_list => p_init_msg_list,
3726 l_api_version => l_api_version,
3727 p_api_version => p_api_version,
3728 p_api_type => G_API_TYPE,
3729 x_return_status => x_return_status);
3730
3731 -- check if activity started successfully
3732 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3733 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3734 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
3735 raise OKL_API.G_EXCEPTION_ERROR;
3736 End If;
3737
3738 execute_formula(p_api_version => l_api_version,
3739 p_init_msg_list => p_init_msg_list,
3740 x_return_status => l_return_status,
3741 x_msg_count => x_msg_count,
3742 x_msg_data => x_msg_data,
3743 p_formula_name => 'CONTRACT_CAP_AMNT',
3744 p_contract_id => p_chr_id,
3745 p_line_id => NULL,
3746 x_value => l_ctrt_cap_amnt);
3747 print( l_api_name, 'execute formula', x_return_status);
3748
3749 -- check if activity started successfully
3750 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3751 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3752 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
3753 raise OKL_API.G_EXCEPTION_ERROR;
3754 End If;
3755
3756 If (l_ctrt_cap_amnt <= 0) Then
3757 okl_api.set_message(
3758 p_app_name => G_APP_NAME,
3759 p_msg_name => 'G_INVALID_CONTRACT_CAP_AMNT');
3760 raise OKL_API.G_EXCEPTION_ERROR;
3761 End If;
3762
3763 /*
3764 FOR j in 1..n l_strms_csr ( TO_NUMBER(p_chr_id ), 'STREAM TYPE')
3765 LOOP
3766 */
3767
3768 OPEN l_strms_csr( TO_NUMBER(p_chr_id ), 'STREAM TYPE');
3769 FETCH l_strms_csr INTO l_strm_rec;
3770 CLOSE l_strms_csr;
3771
3772 i := 0;
3773 FOR l_strmele_rec in l_strmele_csr ( p_chr_id, l_strm_rec.sty_id)
3774 LOOP
3775
3776 i := i + 1;
3777 l_strmele_tbl(i).DATE_BILLED := l_strmele_rec.DATE_BILLED;
3778 l_strmele_tbl(i).STREAM_ELEMENT_DATE := l_strmele_rec.STREAM_ELEMENT_DATE;
3779 l_strmele_tbl(i).AMOUNT := l_strmele_rec.AMOUNT;
3780 l_strmele_tbl(i).ACCRUED_YN := l_strmele_rec.ACCRUED_YN;
3781 l_strmele_tbl(i).comments := l_strmele_rec.comments;
3782 l_strmele_tbl(i).se_line_number := l_strmele_rec.SE_LINE_NUMBER;
3783 l_strmele_tbl(i).sgn_code := l_strmele_rec.SGN_CODE;
3784 l_strmele_tbl(i).stm_id := l_strmele_rec.STM_ID;
3785 l_strmele_tbl(i).transaction_number := l_strmele_rec.TRANSACTION_NUMBER;
3786
3787 END LOOP;
3788
3789
3790 alloc_strms_basis_capital(
3791 p_api_version => p_api_version,
3792 p_init_msg_list => p_init_msg_list,
3793 x_return_status => l_return_status,
3794 x_msg_count => x_msg_count,
3795 x_msg_data => x_msg_data,
3796 p_chr_id => TO_NUMBER(p_chr_id),
3797 p_sty_id => l_strm_rec.sty_id,
3798 p_ctrt_cap_amnt => l_ctrt_cap_amnt,
3799 p_strmele_tbl => l_strmele_tbl );
3800
3801 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3802 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3803 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3804 RAISE OKL_API.G_EXCEPTION_ERROR;
3805 END IF;
3806
3807 l_strmele_tbl.DELETE(1, l_strmele_tbl.COUNT);
3808
3809 -- END LOOP;
3810
3811 x_return_status := l_return_status;
3812
3813 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
3814
3815 EXCEPTION
3816 when OKL_API.G_EXCEPTION_ERROR then
3817 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3818 p_api_name => l_api_name,
3819 p_pkg_name => g_pkg_name,
3820 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
3821 x_msg_count => x_msg_count,
3822 x_msg_data => x_msg_data,
3823 p_api_type => g_api_type);
3824 x_return_status := l_return_status;
3825
3826 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
3827 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3828 p_api_name => l_api_name,
3829 p_pkg_name => g_pkg_name,
3830 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
3831 x_msg_count => x_msg_count,
3832 x_msg_data => x_msg_data,
3833 p_api_type => g_api_type);
3834 x_return_status := l_return_status;
3835 If( strm_name_csr%ISOPEN ) Then
3836 CLOSE strm_name_csr;
3837 End If;
3838
3839 when OTHERS then
3840 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3841 p_api_name => l_api_name,
3842 p_pkg_name => g_pkg_name,
3843 p_exc_name => 'OTHERS',
3844 x_msg_count => x_msg_count,
3845 x_msg_data => x_msg_data,
3846 p_api_type => g_api_type);
3847 x_return_status := l_return_status;
3848
3849 End allocate_streams;
3850 -- Start modification 11i10 bakuchib
3851 PROCEDURE create_interim_rental_streams(p_api_version IN NUMBER,
3852 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3853 x_return_status OUT NOCOPY VARCHAR2,
3854 x_msg_count OUT NOCOPY NUMBER,
3855 x_msg_data OUT NOCOPY VARCHAR2,
3856 p_chr_id IN NUMBER,
3857 p_purpose IN VARCHAR2) AS
3858 l_api_name CONSTANT VARCHAR2(256) := 'INTERIM_STREAMS';
3859 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3860 i NUMBER;
3861 j NUMBER;
3862 l_orig_amount NUMBER;
3863 l_rebook_amount NUMBER;
3864 l_structure NUMBER;
3865 error VARCHAR2(256);
3866 --styid NUMBER;
3867 styid strm_rec_type;
3868 stream_name VARCHAR2(256);
3869 lv_chr_secure VARCHAR2(3) := OKL_API.G_FALSE;
3870 ln_secure_amt NUMBER := 0;
3871 -- get the transaction number
3872 CURSOR l_strm_csr (chrId NUMBER, pp VARCHAR2 )
3873 IS
3874 SELECT DISTINCT str.transaction_number transaction_number
3875 FROM okl_streams str
3876 WHERE str.khr_id = chrId
3877 AND str.say_code = 'CURR'
3878 AND nvl(str.purpose_code, 'ORIGIN') = pp;
3879 -- Billable rents
3880
3881 -- Bug 4164120 changes start
3882
3883 CURSOR l_billedrents_csr(chrId NUMBER, kleid NUMBER, p VARCHAR2)
3884 IS
3885 SELECT nvl(sum(ele.AMOUNT),0)
3886 FROM okl_strm_elements ele,
3887 okl_streams str,
3888 okl_strm_type_b sty
3889 WHERE str.khr_id = chrId
3890 AND nvl(str.kle_id, -1) = kleid
3891 AND str.sty_id = sty.id
3892 AND str.say_code = 'CURR'
3893 AND nvl(str.purpose_code, 'ORIGIN') = p
3894 AND sty.stream_type_purpose <> 'REBOOK_BILLING_ADJUSTMENT'
3895 AND ele.stm_id = str.id
3896 AND nvl(ele.date_billed, sysdate+1) < sysdate;
3897
3898 -- Bug 4164120 changes end
3899
3900 -- Get the Line info
3901 CURSOR l_line_csr( chrid NUMBER )
3902 IS
3903 SELECT kle.id,
3904 kle.oec,
3905 kle.residual_code,
3906 kle.capital_amount,
3907 kle.delivered_date,
3908 kle.date_funding_required,
3909 kle.residual_grnty_amount,
3910 kle.date_funding,
3911 kle.residual_value,
3912 kle.amount,
3913 kle.price_negotiated,
3914 kle.start_date,
3915 kle.end_date,
3916 kle.orig_system_id1,
3917 kle.initial_direct_cost,
3918 tl.item_description,
3919 tl.name
3920 FROM okl_k_lines_full_v kle,
3921 okc_line_styles_b lse,
3922 okc_k_lines_tl tl,
3923 okc_statuses_b sts
3924 WHERE kle.lse_id = lse.id
3925 AND lse.lty_code in ( 'FREE_FORM1', 'FEE', 'SOLD_SERVICE', 'LINK_SERV_ASSET')--bug# 3343133 (ssiruvol)
3926 AND tl.id = kle.id
3927 AND tl.language = USERENV('LANG')
3928 AND kle.dnz_chr_id = chrid
3929 AND sts.code = kle.sts_code
3930 --Start of bug#3121708 modification BAKUCHIB
3931 AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
3932 --End of bug#3121708 modification BAKUCHIB
3933
3934 -- Get the Header info
3935 CURSOR l_hdr_csr( chrId NUMBER )
3936 IS
3937 SELECT chr.orig_system_source_code,
3938 chr.start_date,
3939 chr.authoring_org_id,
3940 chr.inv_organization_id,
3941 khr.deal_type,
3942 pdt.id pid,
3943 chr.currency_code currency_code,
3944 khr.term_duration term,
3945 chr.orig_system_id1
3946 FROM okc_k_headers_v chr,
3947 okl_k_headers khr,
3948 okl_products_v pdt
3949 WHERE khr.id = chr.id
3950 AND chr.id = chrId
3951 AND khr.pdt_id = pdt.id(+);
3952 -- Get the Stream id
3953 CURSOR get_styid_csr(p_strm_name OKL_STRM_TYPE_TL.NAME%TYPE)
3954 IS
3955 SELECT nvl(tl.id,-1) id,
3956 b.stream_type_subclass
3957 FROM okl_strm_type_tl tl,
3958 okl_strm_type_b b
3959 WHERE tl.language = USERENV('LANG')
3960 AND tl.name = p_strm_name
3961 AND tl.id = b.id;
3962
3963 -- Added for user defined streams - HKPATEL
3964 l_strm_name VARCHAR2(30);
3965
3966 -- Added code ends here - HKPATEL
3967
3968 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
3969 l_hdr_rec l_hdr_csr%ROWTYPE;
3970 l_rl_rec1 l_rl_csr1%ROWTYPE;
3971 l_line_rec l_line_csr%ROWTYPE;
3972 l_strm_rec l_strm_csr%ROWTYPE;
3973 l_styid_rec get_styid_csr%ROWTYPE;
3974 l_stmv_rec Okl_Streams_pub.stmv_rec_type;
3975 l_stmv_rec_intm_rentals Okl_Streams_pub.stmv_rec_type;
3976 l_selv_tbl Okl_Streams_pub.selv_tbl_type;
3977 l_selv_tbl_intm_rentals Okl_Streams_pub.selv_tbl_type;
3978 x_stmv_rec Okl_Streams_pub.stmv_rec_type;
3979 x_selv_tbl Okl_Streams_pub.selv_tbl_type;
3980 l_stmv_rec_secure Okl_Streams_pub.stmv_rec_type;
3981 l_selv_tbl_secure Okl_Streams_pub.selv_tbl_type;
3982 lx_stmv_rec_secure Okl_Streams_pub.stmv_rec_type;
3983 lx_selv_tbl_secure Okl_Streams_pub.selv_tbl_type;
3984 lx_inv_agmt_chr_id_tbl okl_securitization_pvt.inv_agmt_chr_id_tbl_type;
3985 BEGIN
3986 x_return_status := OKL_API.G_RET_STS_SUCCESS;
3987 -- Call start_activity to create savepoint, check compatibility
3988 -- and initialize message list
3989 x_return_status := OKL_API.START_ACTIVITY (
3990 l_api_name
3991 ,p_init_msg_list
3992 ,'_PVT'
3993 ,x_return_status);
3994 -- Check if activity started successfully
3995 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3996 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3997 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3998 RAISE OKL_API.G_EXCEPTION_ERROR;
3999 END IF;
4000 -- get the stream id
4001 -- Code added and commented for user defined streams - HKPATEL
4002 IF(g_rep_req_yn = 'Y') THEN
4003
4004 OPEN l_hdr_pdt_csr(p_chr_id);
4005 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
4006 CLOSE l_hdr_pdt_csr;
4007
4008 get_primary_no_prc_stream_type
4009 (
4010 p_khr_id =>p_chr_id,
4011 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
4012 p_primary_sty_purpose =>'REBOOK_BILLING_ADJUSTMENT',
4013 x_return_status => x_return_status,
4014 x_primary_sty_id =>styid
4015 );
4016 IF x_return_status = 'E' THEN
4017 x_return_status := 'S';
4018 END IF;
4019
4020
4021 ELSE
4022 get_primary_no_prc_stream_type
4023 (
4024 p_khr_id =>p_chr_id,
4025 p_pdt_id =>l_pdt_id_rec.pid,
4026 p_primary_sty_purpose =>'REBOOK_BILLING_ADJUSTMENT',
4027 x_return_status => x_return_status,
4028 x_primary_sty_id =>styid
4029 );
4030 IF x_return_status = 'E' THEN
4031 x_return_status := 'S';
4032 END IF;
4033
4034 END IF;
4035
4036 /*
4037 OPEN primary_sty_name_csr(p_chr_id => p_chr_id,
4038 p_purpose => 'REBOOK_BILLING_ADJUSTMENT');
4039 FETCH primary_sty_name_csr into l_strm_name;
4040 IF primary_sty_name_csr%NOTFOUND THEN
4041 okl_api.set_message(p_app_name => G_APP_NAME,
4042 p_msg_name => G_LLA_NO_MATCHING_RECORD,
4043 p_token1 => G_COL_NAME_TOKEN,
4044 p_token1_value => 'Stream name');
4045 RAISE OKL_API.G_EXCEPTION_ERROR;
4046 END IF;
4047 CLOSE primary_sty_name_csr;
4048
4049
4050 OPEN get_styid_csr(p_strm_name => l_strm_name);
4051 FETCH get_styid_csr INTO l_styid_rec;
4052 IF get_styid_csr%NOTFOUND THEN
4053 okl_api.set_message(p_app_name => G_APP_NAME,
4054 p_msg_name => G_LLA_NO_MATCHING_RECORD,
4055 p_token1 => G_COL_NAME_TOKEN,
4056 p_token1_value => 'Stream name');
4057 RAISE OKL_API.G_EXCEPTION_ERROR;
4058 END IF;
4059 CLOSE get_styid_csr;
4060
4061
4062
4063 IF l_styid_rec.id = -1 THEN
4064 okl_api.set_message(p_app_name => G_APP_NAME,
4065 p_msg_name => G_INVALID_VALUE,
4066 p_token1 => G_COL_NAME_TOKEN,
4067 p_token1_value => 'Stream ID');
4068 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4069 END IF;
4070 -- added code for user defined streams ends here
4071 */
4072 -- get the transaction number
4073 OPEN l_strm_csr (p_chr_id, p_purpose);
4074 FETCH l_strm_csr INTO l_strm_rec;
4075 IF l_strm_csr%NOTFOUND THEN
4076 okl_api.set_message(p_app_name => G_APP_NAME,
4077 p_msg_name => G_LLA_NO_MATCHING_RECORD,
4078 p_token1 => G_COL_NAME_TOKEN,
4079 p_token1_value => 'Chr_id and for '||p_purpose);
4080 RAISE OKL_API.G_EXCEPTION_ERROR;
4081 END IF;
4082 CLOSE l_strm_csr;
4083 -- Get the header info
4084 OPEN l_hdr_csr (p_chr_id);
4085 FETCH l_hdr_csr INTO l_hdr_rec;
4086 IF l_hdr_csr%NOTFOUND THEN
4087 okl_api.set_message(p_app_name => G_APP_NAME,
4088 p_msg_name => G_LLA_NO_MATCHING_RECORD,
4089 p_token1 => G_COL_NAME_TOKEN,
4090 p_token1_value => 'Chr_id ');
4091 RAISE OKL_API.G_EXCEPTION_ERROR;
4092 END IF;
4093 CLOSE l_hdr_csr;
4094 -- Get the line info
4095 FOR l_line_rec IN l_line_csr (p_chr_id) LOOP
4096 l_stmv_rec_intm_rentals.khr_id := p_chr_id;
4097 l_stmv_rec_intm_rentals.kle_id := l_line_rec.id;
4098 l_stmv_rec_intm_rentals.say_code := 'CURR';
4099 IF (p_purpose = 'REPORT') THEN
4100 l_stmv_rec_intm_rentals.active_yn := 'N';
4101 ELSE
4102 l_stmv_rec_intm_rentals.active_yn := 'Y';
4103 END IF;
4104 l_stmv_rec_intm_rentals.date_current := sysdate;
4105 l_stmv_rec_intm_rentals.transaction_number := l_strm_rec.transaction_number;
4106 l_stmv_rec_intm_rentals.sgn_code := 'MANL';
4107 -- get Billabel Rentals original contract
4108
4109
4110 OPEN l_hdr_pdt_csr(p_chr_id);
4111 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
4112 CLOSE l_hdr_pdt_csr;
4113
4114 OPEN l_billedrents_csr(l_hdr_rec.orig_system_id1, l_line_rec.orig_system_id1, p_purpose );
4115 FETCH l_billedrents_csr INTO l_orig_amount;
4116 IF l_billedrents_csr%NOTFOUND THEN
4117 okl_api.set_message(p_app_name => G_APP_NAME,
4118 p_msg_name => G_LLA_NO_MATCHING_RECORD,
4119 p_token1 => G_COL_NAME_TOKEN,
4120 p_token1_value => 'Orig System Chr_id/Line id and for '||p_purpose);
4121 x_return_status := OKL_API.G_RET_STS_ERROR;
4122 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4123 END IF;
4124 CLOSE l_billedrents_csr;
4125 -- get Billabel Rentals contract id sent as parameter
4126 OPEN l_billedrents_csr(p_chr_id,l_line_rec.id,p_purpose );
4127 FETCH l_billedrents_csr INTO l_rebook_amount;
4128 IF l_billedrents_csr%NOTFOUND THEN
4129 okl_api.set_message(p_app_name => G_APP_NAME,
4130 p_msg_name => G_LLA_NO_MATCHING_RECORD,
4131 p_token1 => G_COL_NAME_TOKEN,
4132 p_token1_value => 'Chr_id/Line id and for '||p_purpose);
4133 x_return_status := OKL_API.G_RET_STS_ERROR;
4134 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4135 END IF;
4136 CLOSE l_billedrents_csr;
4137
4138
4139 l_selv_tbl_intm_rentals(1).amount := l_rebook_amount - l_orig_amount;
4140 l_selv_tbl_intm_rentals(1).accrued_yn := 'Y';
4141 l_selv_tbl_intm_rentals(1).stream_element_date := sysdate;
4142 l_selv_tbl_intm_rentals(1).se_line_number := 1;
4143 l_selv_tbl_intm_rentals(1).comments := 'Interim Rentals for a Rebooked Rentals';
4144 --bug# 3014721
4145 --l_selv_tbl_intm_rentals(1).date_billed := sysdate;
4146 --l_stmv_rec_intm_rentals.sty_id := l_styid_rec.id;
4147 l_stmv_rec_intm_rentals.sty_id := styid.id;
4148 IF l_selv_tbl_intm_rentals(1).amount <> 0 THEN
4149 Okl_Streams_Pub.create_streams(
4150 p_api_version => p_api_version,
4151 p_init_msg_list => p_init_msg_list,
4152 x_return_status => x_return_status,
4153 x_msg_count => x_msg_count,
4154 x_msg_data => x_msg_data,
4155 p_stmv_rec => l_stmv_rec_intm_rentals,
4156 p_selv_tbl => l_selv_tbl_intm_rentals,
4157 x_stmv_rec => x_stmv_rec,
4158 x_selv_tbl => x_selv_tbl);
4159 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4160 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4161 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4162 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
4163 END IF;
4164 END IF;
4165 -- Check for Original contract is securitized
4166 okl_securitization_pvt.check_khr_securitized(
4167 p_api_version => p_api_version,
4168 p_init_msg_list => p_init_msg_list,
4169 x_return_status => x_return_status,
4170 x_msg_count => x_msg_count,
4171 x_msg_data => x_msg_data,
4172 p_khr_id => l_hdr_rec.orig_system_id1,
4173 p_effective_date => l_line_rec.start_date,
4174 p_effective_date_operator => okl_securitization_pvt.G_GREATER_THAN_EQUAL_TO,
4175 p_stream_type_subclass => l_styid_rec.stream_type_subclass,
4176 x_value => lv_chr_secure,
4177 x_inv_agmt_chr_id_tbl => lx_inv_agmt_chr_id_tbl);
4178 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4179 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4180 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4181 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
4182 END IF;
4183 IF lv_chr_secure = OKL_API.G_TRUE THEN
4184 -- get the stream id
4185 -- code added for user defined stream
4186 IF(g_rep_req_yn = 'Y') THEN
4187 get_primary_no_prc_stream_type
4188 (
4189 p_khr_id =>p_chr_id,
4190 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
4191 p_primary_sty_purpose =>'INVESTOR_DISB_ADJUSTMENT',
4192 x_return_status => x_return_status,
4193 x_primary_sty_id =>styid
4194 );
4195 IF x_return_status = 'E' THEN
4196 x_return_status := 'S';
4197 END IF;
4198
4199 ELSE
4200 get_primary_no_prc_stream_type
4201 (
4202 p_khr_id =>p_chr_id,
4203 p_pdt_id =>l_pdt_id_rec.pid,
4204 p_primary_sty_purpose =>'INVESTOR_DISB_ADJUSTMENT',
4205 x_return_status => x_return_status,
4206 x_primary_sty_id =>styid
4207 );
4208 IF x_return_status = 'E' THEN
4209 x_return_status := 'S';
4210 END IF;
4211
4212 END IF;
4213 /*
4214 --OPEN get_styid_csr(p_strm_name => 'INVESTOR DISBURSEMENT ADJUSTMENT');
4215 OPEN get_styid_csr(p_strm_name => l_strm_name);
4216
4217
4218 FETCH get_styid_csr INTO l_styid_rec;
4219 IF get_styid_csr%NOTFOUND THEN
4220 okl_api.set_message(p_app_name => G_APP_NAME,
4221 p_msg_name => G_LLA_NO_MATCHING_RECORD,
4222 p_token1 => G_COL_NAME_TOKEN,
4223 p_token1_value => 'Stream name');
4224 x_return_status := OKL_API.G_RET_STS_ERROR;
4225 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4226 END IF;
4227 CLOSE get_styid_csr;
4228 IF l_styid_rec.id = -1 THEN
4229 okl_api.set_message(p_app_name => G_APP_NAME,
4230 p_msg_name => G_INVALID_VALUE,
4231 p_token1 => G_COL_NAME_TOKEN,
4232 p_token1_value => 'Stream ID');
4233 x_return_status := OKL_API.G_RET_STS_ERROR;
4234 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4235 END IF;
4236 */
4237 -- Added code for user defined stream ends here
4238 -- Get the amount
4239 -- LOOP start.
4240 okl_securitization_pvt.check_kle_securitized(
4241 p_api_version => p_api_version,
4242 p_init_msg_list => p_init_msg_list,
4243 x_return_status => x_return_status,
4244 x_msg_count => x_msg_count,
4245 x_msg_data => x_msg_data,
4246 p_kle_id => l_line_rec.orig_system_id1,
4247 p_effective_date => l_line_rec.start_date,
4248 p_effective_date_operator => okl_securitization_pvt.G_GREATER_THAN_EQUAL_TO,
4249 p_stream_type_subclass => l_styid_rec.stream_type_subclass,
4250 x_value => lv_chr_secure,
4251 x_inv_agmt_chr_id_tbl => lx_inv_agmt_chr_id_tbl);
4252 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4253 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4254 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4255 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
4256 END IF;
4257
4258 --Start of modification Bug#3293300 - BAKUCHIB
4259 FOR i in lx_inv_agmt_chr_id_tbl.FIRST..lx_inv_agmt_chr_id_tbl.LAST LOOP
4260 --End of modification Bug#3293300 - BAKUCHIB
4261 ln_secure_amt := okl_investor_invoice_disb_pvt.get_disb_amt(
4262 p_ia_id => lx_inv_agmt_chr_id_tbl(i).khr_id,
4263 p_rbk_khr_id => l_hdr_rec.orig_system_id1,
4264 p_rbk_kle_id => l_line_rec.orig_system_id1);
4265 l_stmv_rec_secure := l_stmv_rec_intm_rentals;
4266 l_selv_tbl_secure := l_selv_tbl_intm_rentals;
4267 --l_stmv_rec_secure.sty_id := l_styid_rec.id;
4268 l_stmv_rec_secure.sty_id := styid.id;
4269
4270 l_stmv_rec_secure.source_id := lx_inv_agmt_chr_id_tbl(i).khr_id;
4271 l_stmv_rec_secure.source_table := 'OKL_K_HEADERS';
4272
4273 l_selv_tbl_secure(1).amount := ln_secure_amt * -1;
4274
4275 IF l_selv_tbl_secure(1).amount <> 0 THEN
4276
4277 okl_streams_pub.create_streams(
4278 p_api_version => p_api_version,
4279 p_init_msg_list => p_init_msg_list,
4280 x_return_status => x_return_status,
4281 x_msg_count => x_msg_count,
4282 x_msg_data => x_msg_data,
4283 p_stmv_rec => l_stmv_rec_secure,
4284 p_selv_tbl => l_selv_tbl_secure,
4285 x_stmv_rec => lx_stmv_rec_secure,
4286 x_selv_tbl => lx_selv_tbl_secure);
4287 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4288 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4289 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4290 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
4291 END IF;
4292
4293 END IF;
4294
4295 l_selv_tbl_secure.DELETE;
4296 l_selv_tbl_secure := l_selv_tbl;
4297 l_stmv_rec_secure := l_stmv_rec;
4298
4299 END LOOP;
4300
4301 -- LOOP end.
4302 END if;
4303 l_selv_tbl_intm_rentals.DELETE;
4304 l_selv_tbl_intm_rentals := l_selv_tbl;
4305 l_stmv_rec_intm_rentals := l_stmv_rec;
4306 END LOOP;
4307 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4308 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4309 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4310 RAISE OKL_API.G_EXCEPTION_ERROR;
4311 END IF;
4312 -- for the contract header level.
4313 l_stmv_rec_intm_rentals.khr_id := TO_NUMBER(p_chr_id);
4314 l_stmv_rec_intm_rentals.kle_id := NULL;
4315 l_stmv_rec_intm_rentals.say_code := 'CURR';
4316 IF ( p_purpose = 'REPORT') THEN
4317 l_stmv_rec_intm_rentals.active_yn := 'N';
4318 ELSE
4319 l_stmv_rec_intm_rentals.active_yn := 'Y';
4320 END IF;
4321 l_stmv_rec_intm_rentals.date_current := sysdate;
4322 l_stmv_rec_intm_rentals.transaction_number := l_strm_rec.transaction_number;
4323 l_stmv_rec_intm_rentals.sgn_code := 'MANL';
4324 -- Get Billabel rentals
4325
4326 OPEN l_billedrents_csr(l_hdr_rec.orig_system_id1, -1, p_purpose );
4327 FETCH l_billedrents_csr INTO l_orig_amount;
4328 IF l_billedrents_csr%NOTFOUND THEN
4329 okl_api.set_message(p_app_name => G_APP_NAME,
4330 p_msg_name => G_LLA_NO_MATCHING_RECORD,
4331 p_token1 => G_COL_NAME_TOKEN,
4332 p_token1_value => 'Orig System Chr_id and for '||p_purpose);
4333 RAISE OKL_API.G_EXCEPTION_ERROR;
4334 END IF;
4335 CLOSE l_billedrents_csr;
4336 -- Get Billabel rentals
4337 OPEN l_billedrents_csr(TO_NUMBER(p_chr_id), -1, p_purpose );
4338 FETCH l_billedrents_csr INTO l_rebook_amount;
4339 IF l_billedrents_csr%NOTFOUND THEN
4340 okl_api.set_message(p_app_name => G_APP_NAME,
4341 p_msg_name => G_LLA_NO_MATCHING_RECORD,
4342 p_token1 => G_COL_NAME_TOKEN,
4343 p_token1_value => 'Chr_id and for '||p_purpose);
4344 RAISE OKL_API.G_EXCEPTION_ERROR;
4345 END IF;
4346 CLOSE l_billedrents_csr;
4347
4348 l_selv_tbl_intm_rentals(1).amount := l_rebook_amount - l_orig_amount;
4349 l_selv_tbl_intm_rentals(1).accrued_yn := 'Y';
4350 l_selv_tbl_intm_rentals(1).stream_element_date := sysdate;
4351 l_selv_tbl_intm_rentals(1).se_line_number := 1;
4352 l_selv_tbl_intm_rentals(1).comments := 'Interim Rentals for a Rebooked Rentals';
4353 --bug# 3014721
4354 --l_selv_tbl_intm_rentals(1).date_billed := sysdate;
4355 --l_stmv_rec_intm_rentals.sty_id := l_styid_rec.id;
4356 l_stmv_rec_intm_rentals.sty_id := styid.id;
4357 IF l_selv_tbl_intm_rentals(1).amount <> 0 THEN
4358 Okl_Streams_Pub.create_streams(
4359 p_api_version => p_api_version,
4360 p_init_msg_list => p_init_msg_list,
4361 x_return_status => x_return_status,
4362 x_msg_count => x_msg_count,
4363 x_msg_data => x_msg_data,
4364 p_stmv_rec => l_stmv_rec_intm_rentals,
4365 p_selv_tbl => l_selv_tbl_intm_rentals,
4366 x_stmv_rec => x_stmv_rec,
4367 x_selv_tbl => x_selv_tbl);
4368 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4369 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4370 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4371 RAISE OKL_API.G_EXCEPTION_ERROR;
4372 END IF;
4373 END IF;
4374 l_selv_tbl_intm_rentals.DELETE(1, l_selv_tbl_intm_rentals.LAST);
4375 l_stmv_rec_intm_rentals := NULL;
4376 -- for the contract header level.
4377 OKL_API.END_ACTIVITY (x_msg_count,
4378 x_msg_data );
4379 EXCEPTION
4380 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4381 IF l_strm_csr%ISOPEN THEN
4382 CLOSE l_strm_csr;
4383 END IF;
4384 IF l_billedrents_csr%ISOPEN THEN
4385 CLOSE l_billedrents_csr;
4386 END IF;
4387 IF l_line_csr%ISOPEN THEN
4388 CLOSE l_line_csr;
4389 END IF;
4390 IF l_hdr_csr%ISOPEN THEN
4391 CLOSE l_hdr_csr;
4392 END IF;
4393 IF get_styid_csr%ISOPEN THEN
4394 CLOSE get_styid_csr;
4395 END IF;
4396 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4397 l_api_name,
4398 G_PKG_NAME,
4399 'OKL_API.G_RET_STS_ERROR',
4400 x_msg_count,
4401 x_msg_data,
4402 '_PVT');
4403 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4404 IF l_strm_csr%ISOPEN THEN
4405 CLOSE l_strm_csr;
4406 END IF;
4407 IF l_billedrents_csr%ISOPEN THEN
4408 CLOSE l_billedrents_csr;
4409 END IF;
4410 IF l_line_csr%ISOPEN THEN
4411 CLOSE l_line_csr;
4412 END IF;
4413 IF l_hdr_csr%ISOPEN THEN
4414 CLOSE l_hdr_csr;
4415 END IF;
4416 IF get_styid_csr%ISOPEN THEN
4417 CLOSE get_styid_csr;
4418 END IF;
4419 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4420 l_api_name,
4421 G_PKG_NAME,
4422 'OKL_API.G_RET_STS_UNEXP_ERROR',
4423 x_msg_count,
4424 x_msg_data,
4425 '_PVT');
4426 WHEN OTHERS THEN
4427 IF l_strm_csr%ISOPEN THEN
4428 CLOSE l_strm_csr;
4429 END IF;
4430 IF l_billedrents_csr%ISOPEN THEN
4431 CLOSE l_billedrents_csr;
4432 END IF;
4433 IF l_line_csr%ISOPEN THEN
4434 CLOSE l_line_csr;
4435 END IF;
4436 IF l_hdr_csr%ISOPEN THEN
4437 CLOSE l_hdr_csr;
4438 END IF;
4439 IF get_styid_csr%ISOPEN THEN
4440 CLOSE get_styid_csr;
4441 END IF;
4442 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4443 l_api_name,
4444 G_PKG_NAME,
4445 'OTHERS',
4446 x_msg_count,
4447 x_msg_data,
4448 '_PVT');
4449 END create_interim_rental_streams;
4450
4451 -- Added by HKPATEL for mass rebook fix
4452 PROCEDURE adjust_massrebook_streams(
4453 p_api_version IN NUMBER,
4454 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
4455 x_return_status OUT NOCOPY VARCHAR2,
4456 x_msg_count OUT NOCOPY NUMBER,
4457 x_msg_data OUT NOCOPY VARCHAR2,
4458 p_chr_id IN VARCHAR2,
4459 p_purpose IN VARCHAR2) AS
4460
4461 l_api_name CONSTANT VARCHAR2(256) := 'ADJUSTMENT_STREAMS';
4462 --styid NUMBER;
4463 styid strm_rec_type;
4464 stream_name VARCHAR2(256);
4465 lv_chr_secure VARCHAR2(3) := OKL_API.G_FALSE;
4466 ln_secure_amt NUMBER := 0;
4467
4468 -- To check if the contract is MASS REBOOK candidate
4469 CURSOR c_chk_msrbk_csr(p_chr_id NUMBER)
4470 IS
4471 SELECT 'Y'
4472 FROM DUAL
4473 WHERE EXISTS (SELECT 'Y'
4474 FROM okl_rbk_selected_contract
4475 WHERE khr_id = p_chr_id
4476 AND status = 'UNDER REVISION');
4477 -- Billable rents
4478
4479 -- Bug 4164120 changes start
4480
4481 CURSOR l_billedrents_csr(p_chr_id NUMBER,
4482 p_kle_id NUMBER,
4483 p_purpose VARCHAR2)
4484 IS
4485 SELECT NVL(SUM(ele.AMOUNT),0) amount
4486 FROM okl_strm_elements ele,
4487 okl_streams str,
4488 okl_strm_type_b sty
4489 WHERE str.khr_id = p_chr_id
4490 AND NVL(str.kle_id, -1) = p_kle_id
4491 AND str.sty_id = sty.id
4492 AND str.say_code = 'CURR'
4493 AND nvl(str.purpose_code, 'ORIGIN') = p_purpose
4494 AND sty.stream_type_purpose <> 'REBOOK_BILLING_ADJUSTMENT'
4495 AND ele.stm_id = str.id
4496 AND NVL(ele.date_billed, SYSDATE+1) < SYSDATE;
4497
4498 -- Get billing adjustment stream amount which are not billed
4499 CURSOR l_bill_adjust_csr(p_chr_id NUMBER,
4500 p_kle_id NUMBER,
4501 p_purpose VARCHAR2)
4502 IS
4503 SELECT NVL(SUM(ele.AMOUNT),0) amount
4504 FROM okl_strm_elements ele,
4505 okl_streams str,
4506 okl_strm_type_b sty
4507 WHERE str.khr_id = p_chr_id
4508 AND NVL(str.kle_id, -1) = p_kle_id
4509 AND str.sty_id = sty.id
4510 AND str.say_code = 'CURR'
4511 AND nvl(str.purpose_code, 'ORIGIN') = p_purpose
4512 AND sty.stream_type_purpose = 'REBOOK_BILLING_ADJUSTMENT'
4513 AND ele.stm_id = str.id
4514 AND ele.date_billed IS NULL;
4515
4516 -- Bug 4164120 changes end
4517
4518 -- Get the Line info
4519 CURSOR l_line_csr( p_chr_id NUMBER )
4520 IS
4521 SELECT kle.id kle_id,
4522 kle.start_date
4523 FROM okc_k_lines_b kle,
4524 okc_line_styles_b lse
4525 WHERE kle.lse_id = lse.id
4526 AND lse.lty_code in ( 'FREE_FORM1', 'FEE', 'SOLD_SERVICE', 'LINK_SERV_ASSET')--bug# 3343133 (ssiruvol)
4527 AND kle.dnz_chr_id = p_chr_id;
4528
4529 -- Get the Stream id
4530 CURSOR get_styid_csr(p_strm_name OKL_STRM_TYPE_TL.NAME%TYPE)
4531 IS
4532 SELECT nvl(tl.id,-1) id,
4533 b.stream_type_subclass
4534 FROM okl_strm_type_tl tl,
4535 okl_strm_type_b b
4536 WHERE tl.language = USERENV('LANG')
4537 AND tl.name = p_strm_name
4538 AND tl.id = b.id;
4539
4540 -- Added for user defined streams - HKPATEL
4541
4542 l_strm_name VARCHAR2(30);
4543
4544 -- Added code ends here - HKPATEL
4545
4546
4547 -- get the transaction number
4548 CURSOR l_trx_num_csr
4549 IS
4550 -- SELECT DISTINCT str.transaction_number transaction_number
4551 -- FROM okl_streams str
4552 -- WHERE str.khr_id = p_chr_id
4553 -- AND str.say_code = 'CURR'
4554 -- AND nvl(str.purpose_code, 'ORIGIN') = p_purpose;
4555 SELECT OKL_SIF_SEQ.NEXTVAL
4556 FROM dual;
4557
4558 -- Bucket to store the billed amonts
4559 TYPE bill_rec_type IS RECORD (
4560 kle_id NUMBER := NULL,
4561 billed_amt NUMBER := NULL);
4562 lt_bill_rec bill_rec_type;
4563 k NUMBER := 0;
4564 ln_billed_adj_amt NUMBER := 0;
4565 ln_transaction_number NUMBER := 0;
4566 lv_msrbk_yn VARCHAR2(3) := 'N';
4567 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
4568 r_line_rec l_line_csr%ROWTYPE;
4569 l_strm_rec l_trx_num_csr%ROWTYPE;
4570 l_styid_rec get_styid_csr%ROWTYPE;
4571 l_stmv_rec Okl_Streams_pub.stmv_rec_type;
4572 l_stmv_rec_intm_rentals Okl_Streams_pub.stmv_rec_type;
4573 l_selv_tbl Okl_Streams_pub.selv_tbl_type;
4574 l_selv_tbl_intm_rentals Okl_Streams_pub.selv_tbl_type;
4575 x_stmv_rec Okl_Streams_pub.stmv_rec_type;
4576 x_selv_tbl Okl_Streams_pub.selv_tbl_type;
4577 l_stmv_rec_secure Okl_Streams_pub.stmv_rec_type;
4578 l_selv_tbl_secure Okl_Streams_pub.selv_tbl_type;
4579 lx_stmv_rec_secure Okl_Streams_pub.stmv_rec_type;
4580 lx_selv_tbl_secure Okl_Streams_pub.selv_tbl_type;
4581 lx_inv_agmt_chr_id_tbl okl_securitization_pvt.inv_agmt_chr_id_tbl_type;
4582 Begin
4583 x_return_status := OKL_API.G_RET_STS_SUCCESS;
4584 -- Call start_activity to create savepoint, check compatibility
4585 -- and initialize message list
4586 x_return_status := OKL_API.START_ACTIVITY (
4587 l_api_name
4588 ,p_init_msg_list
4589 ,'_PVT'
4590 ,x_return_status);
4591 -- Check if activity started successfully
4592 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4593 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4594 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4595 RAISE OKL_API.G_EXCEPTION_ERROR;
4596 END IF;
4597
4598 OPEN l_hdr_pdt_csr(p_chr_id);
4599 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
4600 CLOSE l_hdr_pdt_csr;
4601
4602 OPEN c_chk_msrbk_csr(p_chr_id => p_chr_id);
4603 FETCH c_chk_msrbk_csr INTO lv_msrbk_yn;
4604 CLOSE c_chk_msrbk_csr;
4605 IF lv_msrbk_yn = 'Y' THEN
4606 -- Code added and commented for user defined streams - HKPATEL
4607 IF(g_rep_req_yn = 'Y') THEN
4608
4609 get_primary_no_prc_stream_type
4610 (
4611 p_khr_id =>p_chr_id,
4612 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
4613 p_primary_sty_purpose =>'REBOOK_BILLING_ADJUSTMENT',
4614 x_return_status => x_return_status,
4615 x_primary_sty_id =>styid
4616 );
4617 IF x_return_status = 'E' THEN
4618 x_return_status := 'S';
4619 END IF;
4620
4621 ELSE
4622 get_primary_no_prc_stream_type
4623 (
4624 p_khr_id =>p_chr_id,
4625 p_pdt_id =>l_pdt_id_rec.pid,
4626 p_primary_sty_purpose =>'REBOOK_BILLING_ADJUSTMENT',
4627 x_return_status => x_return_status,
4628 x_primary_sty_id =>styid
4629 );
4630 IF x_return_status = 'E' THEN
4631 x_return_status := 'S';
4632 END IF;
4633
4634 END IF;
4635 /*
4636 -- get the stream id
4637 OPEN get_styid_csr(p_strm_name => l_strm_name);
4638 --OPEN get_styid_csr(p_strm_name => 'BILLING ADJUSTMENT');
4639
4640 FETCH get_styid_csr INTO l_styid_rec;
4641 IF get_styid_csr%NOTFOUND THEN
4642 okl_api.set_message(p_app_name => G_APP_NAME,
4643 p_msg_name => G_LLA_NO_MATCHING_RECORD,
4644 p_token1 => G_COL_NAME_TOKEN,
4645 p_token1_value => 'Stream name');
4646 RAISE OKL_API.G_EXCEPTION_ERROR;
4647 END IF;
4648 CLOSE get_styid_csr;
4649 IF l_styid_rec.id = -1 THEN
4650 okl_api.set_message(p_app_name => G_APP_NAME,
4651 p_msg_name => G_INVALID_VALUE,
4652 p_token1 => G_COL_NAME_TOKEN,
4653 p_token1_value => 'Stream ID');
4654 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4655 END IF;
4656 */
4657 -- Added code for user defined stream ends here
4658 -- Get the line info
4659 FOR r_line_rec IN l_line_csr (p_chr_id) LOOP
4660 l_stmv_rec_intm_rentals.khr_id := p_chr_id;
4661 l_stmv_rec_intm_rentals.kle_id := r_line_rec.kle_id;
4662 l_stmv_rec_intm_rentals.say_code := 'WORK';
4663 l_stmv_rec_intm_rentals.date_working := SYSDATE;
4664
4665 IF (p_purpose = 'REPORT') THEN
4666 l_stmv_rec_intm_rentals.active_yn := 'N';
4667 ELSE
4668 l_stmv_rec_intm_rentals.active_yn := 'Y';
4669 END IF;
4670
4671 -- to get the transaction number of the contract
4672 OPEN l_trx_num_csr;
4673 FETCH l_trx_num_csr INTO ln_transaction_number;
4674 CLOSE l_trx_num_csr;
4675 l_stmv_rec_intm_rentals.transaction_number := ln_transaction_number;
4676 l_stmv_rec_intm_rentals.sgn_code := 'MANL';
4677 l_stmv_rec_intm_rentals.sty_id := styid.id;
4678 -- Get the billed amount + not billed billing adjustment amount
4679 -- When the billing adjustment streams are billed then
4680 -- we need to take the same into account.
4681 OPEN l_bill_adjust_csr(p_chr_id => p_chr_id,
4682 p_kle_id => r_line_rec.kle_id,
4683 p_purpose => p_purpose);
4684 FETCH l_bill_adjust_csr INTO ln_billed_adj_amt;
4685 IF l_bill_adjust_csr%NOTFOUND THEN
4686 okl_api.set_message(p_app_name => G_APP_NAME,
4687 p_msg_name => G_LLA_NO_MATCHING_RECORD,
4688 p_token1 => G_COL_NAME_TOKEN,
4689 p_token1_value => 'Chr_id/Line id and for '||p_purpose);
4690 x_return_status := OKL_API.G_RET_STS_ERROR;
4691 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4692 END IF;
4693 CLOSE l_bill_adjust_csr;
4694 -- to get the billed amount of all the rent that have been
4695 -- billed but does not include the billing adjustment stream amount
4696 OPEN l_billedrents_csr(p_chr_id => p_chr_id,
4697 p_kle_id => r_line_rec.kle_id,
4698 p_purpose => p_purpose);
4699 FETCH l_billedrents_csr INTO lt_bill_rec.billed_amt;
4700 IF l_billedrents_csr%NOTFOUND THEN
4701 okl_api.set_message(p_app_name => G_APP_NAME,
4702 p_msg_name => G_LLA_NO_MATCHING_RECORD,
4703 p_token1 => G_COL_NAME_TOKEN,
4704 p_token1_value => 'Chr_id/Line id and for '||p_purpose);
4705 x_return_status := OKL_API.G_RET_STS_ERROR;
4706 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4707 END IF;
4708 CLOSE l_billedrents_csr;
4709
4710 l_selv_tbl_intm_rentals(1).amount := (lt_bill_rec.billed_amt) * -1 + ln_billed_adj_amt;
4711 l_selv_tbl_intm_rentals(1).accrued_yn := 'Y';
4712 l_selv_tbl_intm_rentals(1).stream_element_date := sysdate;
4713 l_selv_tbl_intm_rentals(1).se_line_number := 1;
4714 l_selv_tbl_intm_rentals(1).comments := 'Interim Rentals for a Mass Rebooked Rentals';
4715 IF l_selv_tbl_intm_rentals(1).amount <> 0 THEN
4716 Okl_Streams_Pub.create_streams(
4717 p_api_version => p_api_version,
4718 p_init_msg_list => p_init_msg_list,
4719 x_return_status => x_return_status,
4720 x_msg_count => x_msg_count,
4721 x_msg_data => x_msg_data,
4722 p_stmv_rec => l_stmv_rec_intm_rentals,
4723 p_selv_tbl => l_selv_tbl_intm_rentals,
4724 x_stmv_rec => x_stmv_rec,
4725 x_selv_tbl => x_selv_tbl);
4726 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4727 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4728 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4729 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
4730 END IF;
4731 END IF;
4732 -- Check for Original contract is securitized
4733 okl_securitization_pvt.check_khr_securitized(
4734 p_api_version => p_api_version,
4735 p_init_msg_list => p_init_msg_list,
4736 x_return_status => x_return_status,
4737 x_msg_count => x_msg_count,
4738 x_msg_data => x_msg_data,
4739 p_khr_id => p_chr_id,
4740 p_effective_date => r_line_rec.start_date,
4741 p_effective_date_operator => okl_securitization_pvt.G_GREATER_THAN_EQUAL_TO,
4742 p_stream_type_subclass => l_styid_rec.stream_type_subclass,
4743 x_value => lv_chr_secure,
4744 x_inv_agmt_chr_id_tbl => lx_inv_agmt_chr_id_tbl);
4745 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4746 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4747 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4748 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
4749 END IF;
4750 IF lv_chr_secure = OKL_API.G_TRUE THEN
4751 IF(g_rep_req_yn = 'Y') THEN
4752 get_primary_no_prc_stream_type
4753 (
4754 p_khr_id =>p_chr_id,
4755 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
4756 p_primary_sty_purpose =>'INVESTOR_DISB_ADJUSTMENT',
4757 x_return_status => x_return_status,
4758 x_primary_sty_id =>styid
4759 );
4760 IF x_return_status = 'E' THEN
4761 x_return_status := 'S';
4762 END IF;
4763
4764
4765 ELSE
4766 get_primary_no_prc_stream_type
4767 (
4768 p_khr_id =>p_chr_id,
4769 p_pdt_id =>l_pdt_id_rec.pid,
4770 p_primary_sty_purpose =>'INVESTOR_DISB_ADJUSTMENT',
4771 x_return_status => x_return_status,
4772 x_primary_sty_id =>styid
4773 );
4774 IF x_return_status = 'E' THEN
4775 x_return_status := 'S';
4776 END IF;
4777
4778 END IF;
4779
4780 /*
4781 --OPEN get_styid_csr(p_strm_name => 'INVESTOR DISBURSEMENT ADJUSTMENT');
4782 OPEN get_styid_csr(p_strm_name => l_strm_name);
4783 FETCH get_styid_csr INTO l_styid_rec;
4784 IF get_styid_csr%NOTFOUND THEN
4785 okl_api.set_message(p_app_name => G_APP_NAME,
4786 p_msg_name => G_LLA_NO_MATCHING_RECORD,
4787 p_token1 => G_COL_NAME_TOKEN,
4788 p_token1_value => 'Stream name');
4789 x_return_status := OKL_API.G_RET_STS_ERROR;
4790 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4791 END IF;
4792 CLOSE get_styid_csr;
4793 IF l_styid_rec.id = -1 THEN
4794 okl_api.set_message(p_app_name => G_APP_NAME,
4795 p_msg_name => G_INVALID_VALUE,
4796 p_token1 => G_COL_NAME_TOKEN,
4797 p_token1_value => 'Stream ID');
4798 x_return_status := OKL_API.G_RET_STS_ERROR;
4799 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4800 END IF;
4801 */
4802 -- Get the amount
4803 -- LOOP start.
4804 okl_securitization_pvt.check_kle_securitized(
4805 p_api_version => p_api_version,
4806 p_init_msg_list => p_init_msg_list,
4807 x_return_status => x_return_status,
4808 x_msg_count => x_msg_count,
4809 x_msg_data => x_msg_data,
4810 p_kle_id => r_line_rec.kle_id,
4811 p_effective_date => r_line_rec.start_date,
4812 p_effective_date_operator => okl_securitization_pvt.G_GREATER_THAN_EQUAL_TO,
4813 p_stream_type_subclass => l_styid_rec.stream_type_subclass,
4814 x_value => lv_chr_secure,
4815 x_inv_agmt_chr_id_tbl => lx_inv_agmt_chr_id_tbl);
4816 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4817 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4818 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4819 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
4820 END IF;
4821 FOR i in lx_inv_agmt_chr_id_tbl.FIRST..lx_inv_agmt_chr_id_tbl.LAST LOOP
4822 ln_secure_amt := okl_investor_invoice_disb_pvt.get_disb_amt(
4823 p_ia_id => lx_inv_agmt_chr_id_tbl(i).khr_id,
4824 p_rbk_khr_id => p_chr_id,
4825 p_rbk_kle_id => r_line_rec.kle_id);
4826 l_stmv_rec_secure := l_stmv_rec_intm_rentals;
4827 l_selv_tbl_secure := l_selv_tbl_intm_rentals;
4828 l_stmv_rec_secure.sty_id := styid.id;
4829 l_stmv_rec_secure.source_id := lx_inv_agmt_chr_id_tbl(i).khr_id;
4830 l_stmv_rec_secure.source_table := 'OKL_K_HEADERS';
4831 l_selv_tbl_secure(1).amount := ln_secure_amt * -1;
4832 IF l_selv_tbl_secure(1).amount <> 0 THEN
4833 okl_streams_pub.create_streams(
4834 p_api_version => p_api_version,
4835 p_init_msg_list => p_init_msg_list,
4836 x_return_status => x_return_status,
4837 x_msg_count => x_msg_count,
4838 x_msg_data => x_msg_data,
4839 p_stmv_rec => l_stmv_rec_secure,
4840 p_selv_tbl => l_selv_tbl_secure,
4841 x_stmv_rec => lx_stmv_rec_secure,
4842 x_selv_tbl => lx_selv_tbl_secure);
4843 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4844 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4845 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4846 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
4847 END IF;
4848 END IF;
4849 l_selv_tbl_secure.DELETE;
4850 l_selv_tbl_secure := l_selv_tbl;
4851 l_stmv_rec_secure := l_stmv_rec;
4852 END LOOP;
4853 END IF;
4854 l_selv_tbl_intm_rentals.DELETE;
4855 l_selv_tbl_intm_rentals := l_selv_tbl;
4856 l_stmv_rec_intm_rentals := l_stmv_rec;
4857 END LOOP;
4858 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4859 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4860 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4861 RAISE OKL_API.G_EXCEPTION_ERROR;
4862 END IF;
4863 -- generate for the contract lines
4864 l_stmv_rec_intm_rentals.khr_id := p_chr_id;
4865 l_stmv_rec_intm_rentals.kle_id := NULL;
4866 l_stmv_rec_intm_rentals.say_code := 'WORK';
4867 IF (p_purpose = 'REPORT') THEN
4868 l_stmv_rec_intm_rentals.active_yn := 'N';
4869 ELSE
4870 l_stmv_rec_intm_rentals.active_yn := 'Y';
4871 END IF;
4872 l_stmv_rec_intm_rentals.date_working := sysdate;
4873 l_stmv_rec_intm_rentals.transaction_number := ln_transaction_number;
4874 l_stmv_rec_intm_rentals.sgn_code := 'MANL';
4875 l_stmv_rec_intm_rentals.sty_id := l_styid_rec.id;
4876 -- Get the billed amount + not billed billing adjustment amount
4877 -- When the billing adjustment streams are billed then
4878 -- we need to take the same into account.
4879 OPEN l_bill_adjust_csr(p_chr_id => p_chr_id,
4880 p_kle_id => NULL,
4881 p_purpose => p_purpose);
4882 FETCH l_bill_adjust_csr INTO ln_billed_adj_amt;
4883 IF l_bill_adjust_csr%NOTFOUND THEN
4884 okl_api.set_message(p_app_name => G_APP_NAME,
4885 p_msg_name => G_LLA_NO_MATCHING_RECORD,
4886 p_token1 => G_COL_NAME_TOKEN,
4887 p_token1_value => 'Chr_id/Line id and for '||p_purpose);
4888 x_return_status := OKL_API.G_RET_STS_ERROR;
4889 RAISE OKL_API.G_EXCEPTION_ERROR;
4890 END IF;
4891 CLOSE l_bill_adjust_csr;
4892 -- to get the billed amount of all the rent that have been
4893 -- billed but does not include the billing adjustment stream amount
4894 OPEN l_billedrents_csr(p_chr_id => p_chr_id,
4895 p_kle_id => NULL,
4896 p_purpose => p_purpose);
4897 FETCH l_billedrents_csr INTO lt_bill_rec.billed_amt;
4898 IF l_billedrents_csr%NOTFOUND THEN
4899 okl_api.set_message(p_app_name => G_APP_NAME,
4900 p_msg_name => G_LLA_NO_MATCHING_RECORD,
4901 p_token1 => G_COL_NAME_TOKEN,
4902 p_token1_value => 'Chr_id/Line id and for '||p_purpose);
4903 x_return_status := OKL_API.G_RET_STS_ERROR;
4904 RAISE OKL_API.G_EXCEPTION_ERROR;
4905 END IF;
4906 CLOSE l_billedrents_csr;
4907
4908 l_selv_tbl_intm_rentals(1).amount := (lt_bill_rec.billed_amt) * -1 + ln_billed_adj_amt;
4909 l_selv_tbl_intm_rentals(1).accrued_yn := 'Y';
4910 l_selv_tbl_intm_rentals(1).stream_element_date := sysdate;
4911 l_selv_tbl_intm_rentals(1).se_line_number := 1;
4912 l_selv_tbl_intm_rentals(1).comments := 'Interim Rentals for a Mass Rebooked Rentals';
4913 IF l_selv_tbl_intm_rentals(1).amount <> 0 THEN
4914 Okl_Streams_Pub.create_streams(
4915 p_api_version => p_api_version,
4916 p_init_msg_list => p_init_msg_list,
4917 x_return_status => x_return_status,
4918 x_msg_count => x_msg_count,
4919 x_msg_data => x_msg_data,
4920 p_stmv_rec => l_stmv_rec_intm_rentals,
4921 p_selv_tbl => l_selv_tbl_intm_rentals,
4922 x_stmv_rec => x_stmv_rec,
4923 x_selv_tbl => x_selv_tbl);
4924 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4925 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4926 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4927 RAISE OKL_API.G_EXCEPTION_ERROR;
4928 END IF;
4929 END IF;
4930 END IF;
4931 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4932 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4933 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4934 RAISE OKL_API.G_EXCEPTION_ERROR;
4935 END IF;
4936
4937 OKL_API.END_ACTIVITY (x_msg_count,
4938 x_msg_data );
4939 EXCEPTION
4940 WHEN OKL_API.G_EXCEPTION_ERROR then
4941 IF c_chk_msrbk_csr%ISOPEN THEN
4942 CLOSE c_chk_msrbk_csr;
4943 END IF;
4944 IF l_billedrents_csr%ISOPEN THEN
4945 CLOSE l_billedrents_csr;
4946 END IF;
4947 IF l_bill_adjust_csr%ISOPEN THEN
4948 CLOSE l_bill_adjust_csr;
4949 END IF;
4950 IF l_line_csr%ISOPEN THEN
4951 CLOSE l_line_csr;
4952 END IF;
4953 IF get_styid_csr%ISOPEN THEN
4954 CLOSE get_styid_csr;
4955 END IF;
4956 IF l_trx_num_csr%ISOPEN THEN
4957 CLOSE l_trx_num_csr;
4958 END IF;
4959 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4960 l_api_name,
4961 G_PKG_NAME,
4962 'OKL_API.G_RET_STS_ERROR',
4963 x_msg_count,
4964 x_msg_data,
4965 '_PVT');
4966 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
4967 IF c_chk_msrbk_csr%ISOPEN THEN
4968 CLOSE c_chk_msrbk_csr;
4969 END IF;
4970 IF l_billedrents_csr%ISOPEN THEN
4971 CLOSE l_billedrents_csr;
4972 END IF;
4973 IF l_bill_adjust_csr%ISOPEN THEN
4974 CLOSE l_bill_adjust_csr;
4975 END IF;
4976 IF l_line_csr%ISOPEN THEN
4977 CLOSE l_line_csr;
4978 END IF;
4979 IF get_styid_csr%ISOPEN THEN
4980 CLOSE get_styid_csr;
4981 END IF;
4982 IF l_trx_num_csr%ISOPEN THEN
4983 CLOSE l_trx_num_csr;
4984 END IF;
4985 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4986 l_api_name,
4987 G_PKG_NAME,
4988 'OKL_API.G_RET_STS_UNEXP_ERROR',
4989 x_msg_count,
4990 x_msg_data,
4991 '_PVT');
4992 WHEN OTHERS then
4993 IF c_chk_msrbk_csr%ISOPEN THEN
4994 CLOSE c_chk_msrbk_csr;
4995 END IF;
4996 IF l_billedrents_csr%ISOPEN THEN
4997 CLOSE l_billedrents_csr;
4998 END IF;
4999 IF l_bill_adjust_csr%ISOPEN THEN
5000 CLOSE l_bill_adjust_csr;
5001 END IF;
5002 IF l_line_csr%ISOPEN THEN
5003 CLOSE l_line_csr;
5004 END IF;
5005 IF get_styid_csr%ISOPEN THEN
5006 CLOSE get_styid_csr;
5007 END IF;
5008 IF l_trx_num_csr%ISOPEN THEN
5009 CLOSE l_trx_num_csr;
5010 END IF;
5011 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5012 l_api_name,
5013 G_PKG_NAME,
5014 'OTHERS',
5015 x_msg_count,
5016 x_msg_data,
5017 '_PVT');
5018 END adjust_massrebook_streams;
5019
5020
5021 -- End modification 11i10 bakuchib
5022 -- Start modification 11i10 bakuchib
5023 procedure create_advance_rental_streams(
5024 p_api_version IN NUMBER,
5025 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
5026 x_return_status OUT NOCOPY VARCHAR2,
5027 x_msg_count OUT NOCOPY NUMBER,
5028 x_msg_data OUT NOCOPY VARCHAR2,
5029 p_chr_id IN NUMBER,
5030 p_purpose IN VARCHAR2) AS
5031
5032 l_api_name CONSTANT VARCHAR2(256) := 'CREATE_ADV_RTL_STRMS';
5033 l_api_version CONSTANT NUMBER := 1;
5034 i NUMBER;
5035 j NUMBER;
5036 l_amount NUMBER;
5037 l_pay_amount NUMBER;
5038 l_structure NUMBER;
5039 error VARCHAR2(256);
5040 --styid NUMBER;
5041 styid strm_rec_type;
5042 stream_name VARCHAR2(256);
5043 l_stmv_rec okl_streams_pub.stmv_rec_type;
5044 l_stmv_rec_adv_rentals okl_streams_pub.stmv_rec_type;
5045 l_selv_tbl okl_streams_pub.selv_tbl_type;
5046 l_selv_tbl_adv_rentals okl_streams_pub.selv_tbl_type;
5047 x_stmv_rec okl_streams_pub.stmv_rec_type;
5048 x_selv_tbl okl_streams_pub.selv_tbl_type;
5049
5050 --Modified for streams performance
5051 -- This cursors fetches all the line id's for the contract whose Rent streams
5052 -- have a structure that is not -1 or 0
5053 --Bug 4346646 - Start of Changes
5054 -- arajagop added disticnt to the cursor below
5055 CURSOR l_struct_csr(chrId NUMBER , styId NUMBER)
5056 IS
5057 SELECT distinct crg.cle_id line_id,
5058 (NVL(crl.rule_information5,-1)) structure
5059 FROM okc_rule_groups_b crg,
5060 okc_rules_b crl,
5061 okc_rules_b crl1
5062 WHERE crl.rgp_id = crg.id
5063 AND crg.rgd_code = 'LALEVL'
5064 AND crl.rule_information_category = 'LASLL'
5065 AND crl1.rule_information_category = 'LASLH'
5066 AND crl.object2_id1 = crl1.id
5067 AND crl1.object1_id1 = styid
5068 AND crg.dnz_chr_id = chrId
5069 AND (NVL(crl.rule_information5,-1)) not in (-1,0);
5070 --Bug 4346646 - End of Changes
5071
5072 --Added by kthiruva on 04-Jul-2005
5073 --Bug 4414441 - Start of Changes
5074 --This cursor fetches the details of the payment plan the would be used in the Advance Rent Calculation
5075 CURSOR l_payment_csr(chrId NUMBER , styId NUMBER,kleId NUMBER)
5076 IS
5077 SELECT (NVL(crl.rule_information5,-1)) structure,
5078 fnd_date.canonical_to_date(crl.RULE_INFORMATION2) START_DATE,
5079 crl.RULE_INFORMATION3 PERIOD_IN_MONTHS,
5080 crl.RULE_INFORMATION6 AMOUNT,
5081 nvl(crl.RULE_INFORMATION10,'N') ARREARS,
5082 crl.RULE_INFORMATION7 STUB_DAYS,
5083 crl.RULE_INFORMATION8 STUB_AMOUNT,
5084 TUOM.ID1 FREQUENCY,
5085 null END_DATE
5086 FROM okc_rule_groups_b crg,
5087 okc_rules_b crl,
5088 okc_rules_b crl1,
5089 okl_time_units_v tuom
5090 WHERE crl.rgp_id = crg.id
5091 AND crg.rgd_code = 'LALEVL'
5092 AND crl.rule_information_category = 'LASLL'
5093 AND crl1.rule_information_category = 'LASLH'
5094 AND crl.object2_id1 = crl1.id
5095 AND crl1.object1_id1 = styId
5096 AND crg.dnz_chr_id = chrId
5097 AND TUOM.ID1=crl.OBJECT1_ID1
5098 AND (NVL(crl.rule_information5,-1)) not in (-1,0)
5099 AND crg.cle_id = kleId
5100 ORDER BY start_date ASC;
5101 --Bug 4414441 - End of Changes
5102
5103 CURSOR l_strm_csr (chrId NUMBER,
5104 kleId NUMBER,
5105 styId NUMBER,
5106 status VARCHAR2,
5107 pp VARCHAR2)
5108 IS
5109 SELECT str.Id,
5110 str.transaction_number,
5111 str.sgn_code sgn_code,
5112 str.khr_id,
5113 str.sty_id,
5114 str.say_code,
5115 str.active_yn,
5116 str.kle_id
5117 FROM okl_streams str
5118 WHERE str.khr_id = chrId
5119 AND str.kle_id = kleId
5120 AND str.say_code = 'WORK'
5121 --Added by kthiruva for Streams Performance Patch
5122 --Bug 4346646 - Start of Changes
5123 AND str.sty_id = styId
5124 --Bug 4346646 -End of Changes
5125 AND nvl( str.purpose_code, 'ORIGIN') = pp;
5126
5127 CURSOR l_strmele1_csr(stmid NUMBER)
5128 IS
5129 SELECT ele.id,
5130 ele.date_billed,
5131 ele.stream_element_date,
5132 ele.amount,
5133 ele.accrued_yn,
5134 ele.comments,
5135 ele.stm_id stm_id,
5136 ele.se_line_number se_line_number
5137 FROM okl_strm_elements ele
5138 WHERE ele.stm_id = stmid
5139 ORDER BY ele.stream_element_date;
5140
5141 CURSOR l_stmp_yn_csr(khrid NUMBER, p VARCHAR2) IS
5142 SELECT count(stm.id) cnt
5143 FROM okl_streams stm
5144 WHERE stm.khr_id = khrid
5145 AND stm.say_code = 'WORK'
5146 AND stm.sgn_code = 'STMP'
5147 AND nvl(stm.purpose_code, 'ORIGIN') = p;
5148
5149 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
5150 l_struct_rec l_struct_csr%ROWTYPE;
5151 l_strm_rec l_strm_csr%ROWTYPE;
5152 l_strmele_rec l_strmele1_csr%ROWTYPE;
5153 l_line_rec l_line_rec_csr%ROWTYPE;
5154 l_rl_rec1 l_rl_csr1%ROWTYPE;
5155 l_stmp_yn_rec l_stmp_yn_csr%ROWTYPE;
5156 --Added for Streams Perf by kthiruva
5157 --Bug 4346646 - Start of Changes
5158 l_sty_id strm_rec_type;
5159 --Bug 4346646 - End of Changes
5160 --Added by kthiruva for Bug 4402229
5161 l_product_id NUMBER;
5162 --Added by kthiruva for handling the Advance Rent Streams esp for stub payments
5163 --Bug 4414441 - Start of Changes
5164 l_payment_rec l_payment_csr%ROWTYPE;
5165 TYPE l_payment_tbl_type IS TABLE OF l_payment_csr%ROWTYPE INDEX BY BINARY_INTEGER;
5166 l_payment_tbl l_payment_tbl_type;
5167 l_rent_amt_tbl Okl_Streams_Util.NumberTabTyp;
5168 k NUMBER;
5169 l_next_position NUMBER;
5170 --Bug 4414441 - End of Changes
5171 BEGIN
5172 print( l_api_name, 'begin');
5173 x_return_status := OKL_API.START_ACTIVITY(
5174 p_api_name => l_api_name,
5175 p_pkg_name => g_pkg_name,
5176 p_init_msg_list => p_init_msg_list,
5177 l_api_version => l_api_version,
5178 p_api_version => p_api_version,
5179 p_api_type => G_API_TYPE,
5180 x_return_status => x_return_status);
5181 -- check if activity started successfully
5182 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5183 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5184 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5185 RAISE OKL_API.G_EXCEPTION_ERROR;
5186 End If;
5187
5188
5189 OPEN l_stmp_yn_csr (TO_NUMBER(p_chr_id), p_purpose);
5190 FETCH l_stmp_yn_csr INTO l_stmp_yn_rec;
5191 CLOSE l_stmp_yn_csr;
5192
5193 --Added by kthiruva on 01-Jun-2005
5194 --Bug 4402229 - Start of Changes
5195 --Fetching the contract details
5196 OPEN l_hdr_pdt_csr(p_chr_id);
5197 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
5198 CLOSE l_hdr_pdt_csr;
5199
5200 IF ( p_purpose = 'ORIGIN') THEN
5201 l_product_id := l_pdt_id_rec.pid;
5202 ELSIF (p_purpose = 'REPORT') THEN
5203 l_product_id := l_pdt_id_rec.report_pdt_id;
5204 END IF;
5205
5206 --Added by kthiruva for Streams Performance
5207 --This call returns the id of the stream type of purpose 'RENT' in the contract's Stream Generation Template.
5208 get_primary_no_prc_stream_type
5209 (
5210 p_khr_id =>p_chr_id,
5211 p_pdt_id =>l_product_id,
5212 p_primary_sty_purpose =>'RENT',
5213 x_return_status => x_return_status,
5214 x_primary_sty_id =>l_sty_id
5215 );
5216 --Bug 4402229 - End of Changes
5217 --Looping through all the contract lines that have a structure payment defined on them
5218 --Initialising the counter variable k
5219
5220 FOR l_struct_rec IN l_struct_csr(TO_NUMBER(p_chr_id),l_sty_id.id)
5221 LOOP
5222 k := 0;
5223 l_payment_tbl.delete;
5224
5225 l_structure := TO_NUMBER(l_struct_rec.structure);
5226
5227 --Added by kthiruva on 04-Jul-2005
5228 --Bug 4414441 - Start of Changes
5229 --Fetching the payment lines
5230 FOR l_payment_rec IN l_payment_csr(chrId => TO_NUMBER(p_chr_id),
5231 styId => l_sty_id.id,
5232 kleId => l_struct_rec.line_id)
5233 LOOP
5234 l_payment_tbl(k) := l_payment_rec;
5235 k := k + 1;
5236 END LOOP;
5237
5238 --If the structure exists then, the amount for the 1st element has to be copied
5239 --from the payments table for the Rent Streams
5240 IF (l_payment_tbl(0).stub_days is not null) AND (l_payment_tbl(0).period_in_months is null)
5241 THEN
5242 l_rent_amt_tbl(0) := l_payment_tbl(0).stub_amount;
5243 ELSE
5244 l_rent_amt_tbl(0) := l_payment_tbl(0).amount;
5245 END IF;
5246
5247 --Fetching the values from the payment definition for the Last n elements where n refers
5248 --to the structure for Rent Streams
5249 --To fetch the values of the last n stream elements, we loop through the payment table
5250 --from LAST to FIRST
5251
5252 k := l_payment_tbl.LAST;
5253 i := 1;
5254 WHILE (i <= l_structure )
5255 LOOP
5256 WHILE (k >= l_payment_tbl.FIRST )
5257 LOOP
5258 --If the line is a stub payment,then we take the amount as it is and move to the previous line
5259 --in the payments table
5260 IF (l_payment_tbl(k).stub_days IS NOT NULL) AND (l_payment_tbl(k).period_in_months IS NULL)
5261 THEN
5262 l_rent_amt_tbl(l_structure - i + 1) := l_payment_tbl(k).stub_amount;
5263 k := k - 1;
5264 i := i + 1;
5265 ELSE
5266 --If the payment is periodic then we take the amount.We then check if the number of periods is
5267 --greater than 1. If so, the same line is used
5268 l_rent_amt_tbl(l_structure - i + 1) := l_payment_tbl(k).amount;
5269 i := i + 1;
5270 IF ( i > l_payment_tbl(k).period_in_months)
5271 THEN
5272 k := k - 1;
5273 END IF;
5274 END IF;
5275 --If the amounts of all the advance rent elements are derived then we exit the loop.
5276 IF (i > l_structure)
5277 THEN
5278 EXIT;
5279 END IF;
5280 END LOOP;
5281 END LOOP;
5282 --Bug 4414441 - End of Changes
5283
5284 OPEN l_strm_csr (TO_NUMBER(p_chr_id),
5285 l_struct_rec.line_id,
5286 l_sty_id.id,
5287 'WORK',
5288 p_purpose);
5289 FETCH l_strm_csr into l_strm_rec;
5290 IF l_strm_csr%FOUND THEN
5291 l_stmv_rec.id := l_strm_rec.id;
5292 -- Start of BUG# 3101439 modification
5293 --l_stmv_rec.active_yn := 'Y';
5294 -- End of BUG# 3101439 modification
5295 l_stmv_rec.date_current := sysdate;
5296 l_stmv_rec_adv_rentals.khr_id := TO_NUMBER(p_chr_id);
5297 l_stmv_rec_adv_rentals.kle_id := l_struct_rec.line_id;
5298 --l_stmv_rec_adv_rentals.say_code := 'CURR';
5299 l_stmv_rec_adv_rentals.say_code := 'WORK';
5300 IF (p_purpose = 'REPORT') THEN
5301 -- Start of BUG# 3101439 modification
5302 l_stmv_rec.active_yn := 'N';
5303 -- End of BUG# 3101439 modification
5304 l_stmv_rec_adv_rentals.active_yn := 'N';
5305 l_stmv_rec_adv_rentals.purpose_code := p_purpose;
5306 ELSE
5307 l_stmv_rec_adv_rentals.purpose_code := NULL;
5308 l_stmv_rec_adv_rentals.active_yn := 'N';
5309 -- Start of BUG# 3101439 modification
5310 l_stmv_rec.active_yn := 'N';
5311 -- End of BUG# 3101439 modification
5312 END IF;
5313 l_stmv_rec_adv_rentals.date_working := sysdate;
5314 l_stmv_rec_adv_rentals.transaction_number := l_strm_rec.transaction_number;
5315 l_stmv_rec_adv_rentals.sgn_code := 'MANL';
5316 i := 0;
5317 FOR l_strmele_rec IN l_strmele1_csr ( l_strm_rec.id) LOOP
5318 i := i + 1;
5319 l_selv_tbl(i).id := l_strmele_rec.id;
5320 l_selv_tbl(i).date_billed := l_strmele_rec.date_billed;
5321 l_selv_tbl(i).stream_element_date := l_strmele_rec.stream_element_date;
5322 l_selv_tbl(i).amount := l_strmele_rec.amount;
5323 l_selv_tbl(i).accrued_yn := l_strmele_rec.accrued_yn;
5324 l_selv_tbl(i).comments := l_strmele_rec.comments;
5325 l_selv_tbl(i).se_line_number := l_strmele_rec.se_line_number;
5326 l_selv_tbl(i).stm_id := l_strmele_rec.STM_ID;
5327 END LOOP;
5328 -- arajagop : the following calculation is needed for ESG
5329 -- where the RENT stream itself comes adjusted (8000, 4000, 0) say for a
5330 -- 4000 Advance First and Last payment
5331 j := 1;
5332 l_pay_amount := 0;
5333 --Added by kthiruva on 04-Jul-2005 for the Advance Rent Fix
5334 --Bug 4414441 - Start of Changes
5335 k := 1;
5336 l_pay_amount := 0;
5337 IF (l_stmp_yn_rec.cnt > 0) THEN
5338 --Assign the value for the first rent stream element from the rent amount table populated
5339 l_selv_tbl(1).amount := l_rent_amt_tbl(0);
5340 END IF;
5341 --Bug 4414441 - End of Changes
5342
5343 l_selv_tbl_adv_rentals(j).accrued_yn := l_selv_tbl(1).accrued_yn;
5344 l_selv_tbl_adv_rentals(j).stream_element_date := l_selv_tbl(1).stream_element_date;
5345 l_selv_tbl_adv_rentals(j).se_line_number := j; --l_selv_tbl(i).SE_LINE_NUMBER;
5346 l_selv_tbl_adv_rentals(j).comments := l_selv_tbl(1).comments;
5347 FOR i IN (l_selv_tbl.COUNT-l_structure+1)..l_selv_tbl.COUNT LOOP
5348 j := j + 1;
5349 IF (l_stmp_yn_rec.cnt > 0) THEN
5350 --Modified by kthriuva on 04-Jul-2005
5351 --Bug 4414441 - Start of Changes
5352 --Assign the values derived from the payment plan cursor to the last n stream elements for Rent
5353 l_selv_tbl(i).amount := l_rent_amt_tbl(k);
5354 l_selv_tbl_adv_rentals(j).amount := -1.0 * l_rent_amt_tbl(k);
5355 l_pay_amount := l_pay_amount+ l_rent_amt_tbl(k);
5356 k := k + 1;
5357 --Bug 4414441 - End of Changes
5358 ELSE
5359 -- sum up this value and store it for ISG first element
5360 l_pay_amount := l_pay_amount + l_selv_tbl(i).amount;
5361 -- store the same value as negative of the stream element value
5362 l_selv_tbl_adv_rentals(j).amount := -1.0 * l_selv_tbl(i).amount;
5363 END IF;
5364 l_selv_tbl_adv_rentals(j).accrued_yn := l_selv_tbl(i).accrued_yn;
5365 l_selv_tbl_adv_rentals(j).stream_element_date := l_selv_tbl(i).stream_element_date;
5366 l_selv_tbl_adv_rentals(j).date_billed := l_selv_tbl(i).date_billed;
5367 l_selv_tbl_adv_rentals(j).se_line_number := j; --l_selv_tbl(i).se_line_number;
5368 l_selv_tbl_adv_rentals(j).comments := l_selv_tbl(i).comments;
5369 END LOOP;
5370 IF (l_stmp_yn_rec.cnt > 0) THEN
5371 --Added by kthiruva on 04-Jul-2005
5372 --Bug 4414441 - Start of Changes
5373 --Assigning the value of the sum of the last n element amounts to the first advance rent stream
5374 l_selv_tbl_adv_rentals(1).amount := l_pay_amount;
5375 --Bug 4414441 - End of Changes
5376 -- update the rent streams for ESG to reflect uniform rental payment
5377 okl_streams_pub.update_streams(
5378 p_api_version => l_api_version
5379 ,p_init_msg_list => p_init_msg_list
5380 ,x_return_status => x_return_status
5381 ,x_msg_count => x_msg_count
5382 ,x_msg_data => x_msg_data
5383 ,p_stmv_rec => l_stmv_rec
5384 ,p_selv_tbl => l_selv_tbl
5385 ,x_stmv_rec => x_stmv_rec
5386 ,x_selv_tbl => x_selv_tbl);
5387
5388 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5389 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5390 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5391 RAISE OKL_API.G_EXCEPTION_ERROR;
5392 END IF;
5393 ELSE
5394 -- FOR ISG store the value for the first element alone
5395 -- as the sum of all the elements based on the structure (1,2,3)
5396 l_selv_tbl_adv_rentals(1).amount := l_pay_amount;
5397 END IF;
5398
5399 OPEN l_hdr_pdt_csr(p_chr_id);
5400 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
5401 CLOSE l_hdr_pdt_csr;
5402
5403 -- get the stream type id based on the type of the product
5404 IF(g_rep_req_yn = 'Y') THEN
5405 get_dep_no_prc_stream_type
5406 (
5407 p_khr_id =>p_chr_id,
5408 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
5409 p_primary_sty_purpose=>'RENT',
5410 p_dependent_sty_purpose=>'ADVANCE_RENT',
5411 x_return_status => x_return_status,
5412 x_dependent_sty_id => styid
5413 );
5414 IF x_return_status = 'E' THEN
5415 x_return_status := 'S';
5416 END IF;
5417 ELSE
5418 get_dep_no_prc_stream_type
5419 (
5420 p_khr_id =>p_chr_id,
5421 p_pdt_id =>l_pdt_id_rec.pid,
5422 p_primary_sty_purpose=>'RENT',
5423 p_dependent_sty_purpose=>'ADVANCE_RENT',
5424 x_return_status => x_return_status,
5425 x_dependent_sty_id => styid
5426 );
5427 IF x_return_status = 'E' THEN
5428 x_return_status := 'S';
5429 END IF;
5430 END IF;
5431
5432 l_stmv_rec_adv_rentals.sty_id := styid.id;
5433 okl_streams_pub.create_streams(
5434 p_api_version => l_api_version
5435 ,p_init_msg_list => p_init_msg_list
5436 ,x_return_status => x_return_status
5437 ,x_msg_count => x_msg_count
5438 ,x_msg_data => x_msg_data
5439 ,p_stmv_rec => l_stmv_rec_adv_rentals
5440 ,p_selv_tbl => l_selv_tbl_adv_rentals
5441 ,x_stmv_rec => x_stmv_rec
5442 ,x_selv_tbl => x_selv_tbl);
5443
5444 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5445 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5446 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5447 RAISE OKL_API.G_EXCEPTION_ERROR;
5448 END IF;
5449 l_selv_tbl.DELETE(1, l_selv_tbl.COUNT);
5450 l_selv_tbl_adv_rentals.DELETE(1, l_selv_tbl_adv_rentals.COUNT);
5451 l_stmv_rec := NULL;
5452 l_stmv_rec_adv_rentals := NULL;
5453 /* Dont raise any exceptions if you dont find any thing for rent streams ..
5454 ELSE
5455 RAISE OKL_API.G_EXCEPTION_ERROR;
5456 */
5457 END IF;
5458 CLOSE l_Strm_csr;
5459 END LOOP;
5460 --Bug 4346646 - End of Changes
5461
5462 print( l_api_name, 'end', x_return_status);
5463 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
5464 EXCEPTION
5465 WHEN OKL_API.G_EXCEPTION_ERROR THEN
5466 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5467 p_api_name => l_api_name,
5468 p_pkg_name => g_pkg_name,
5469 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
5470 x_msg_count => x_msg_count,
5471 x_msg_data => x_msg_data,
5472 p_api_type => g_api_type);
5473 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5474 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5475 p_api_name => l_api_name,
5476 p_pkg_name => g_pkg_name,
5477 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5478 x_msg_count => x_msg_count,
5479 x_msg_data => x_msg_data,
5480 p_api_type => g_api_type);
5481 If( strm_name_csr%ISOPEN ) Then
5482 CLOSE strm_name_csr;
5483 End If;
5484 WHEN OTHERS THEN
5485 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5486 p_api_name => l_api_name,
5487 p_pkg_name => g_pkg_name,
5488 p_exc_name => 'OTHERS',
5489 x_msg_count => x_msg_count,
5490 x_msg_data => x_msg_data,
5491 p_api_type => g_api_type);
5492 End create_advance_rental_streams;
5493
5494 -- End modification 11i10 bakuchib
5495 -- Start modification Bug#3121708 bakuchib
5496 Procedure update_contract_yields(
5497 p_api_version IN NUMBER,
5498 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
5499 x_return_status OUT NOCOPY VARCHAR2,
5500 x_msg_count OUT NOCOPY NUMBER,
5501 x_msg_data OUT NOCOPY VARCHAR2,
5502 p_chr_id IN VARCHAR2,
5503 p_chr_yields IN yields_rec_type) AS
5504
5505 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_CONTRACT_YIELDS';
5506 l_api_version CONSTANT NUMBER := 1;
5507 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5508
5509 pl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
5510 pl_khrv_rec okl_contract_pvt.khrv_rec_type;
5511 xl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
5512 xl_khrv_rec okl_contract_pub.khrv_rec_type;
5513
5514 l_trxH_in_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
5515 l_trxH_out_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
5516
5517 i NUMBER;
5518 l_tcnCode VARCHAR2(256);
5519 l_transaction_type VARCHAR2(256) := 'Miscellaneous';--'Generate Yields';
5520
5521 l_fnd_rec fnd_lookups_csr%ROWTYPE;
5522 l_trx_rec trx_csr%ROWTYPE;
5523 l_hdr_rec l_hdr_csr%ROWTYPE;
5524
5525 l_chr_id NUMBER := TO_NUMBER(p_chr_id);
5526 ln_sub_exists NUMBER := 0;
5527 ln_esg_isg NUMBER := 0;
5528
5529 -- Validate weather the stream generation is done thru internal/external stream generation
5530 CURSOR validate_esg_isg (p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE)
5531 IS
5532 SELECT 1
5533 FROM dual
5534 WHERE EXISTS (SELECT 1
5535 FROM okl_streams
5536 WHERE khr_id= p_dnz_chr_id
5537 AND say_code = 'WORK'
5538 AND sgn_code = 'STMP');
5539 -- Validate the contract has Subsidy line
5540 CURSOR validate_sub_line (p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE)
5541 IS
5542 SELECT 1
5543 FROM dual
5544 WHERE EXISTS (SELECT '1'
5545 FROM okl_subsidies_b subb,
5546 okc_k_lines_b cle_fin,
5547 okc_line_styles_b lse_fin,
5548 okc_k_lines_b cle,
5549 okl_k_headers khr,
5550 okl_k_lines kle,
5551 okc_line_styles_b lse
5552 WHERE cle.dnz_chr_id = p_dnz_chr_id
5553 AND cle.dnz_chr_id = khr.id
5554 AND khr.deal_type IN ('LEASEDF','LEASEOP','LEASEST','LOAN')
5555 AND cle.cle_id = cle_fin.id
5556 AND cle.dnz_chr_id = cle_fin.dnz_chr_id
5557 AND cle.id = kle.id
5558 AND cle.lse_id = lse.id
5559 AND lse.lty_code = 'SUBSIDY'
5560 AND subb.id = kle.subsidy_id
5561 AND cle_fin.id = cle.cle_id
5562 AND cle_fin.lse_id = lse_fin.id
5563 AND lse_fin.lty_code = 'FREE_FORM1');
5564 begin
5565
5566 print( l_api_name, 'begin');
5567
5568 x_return_status := OKL_API.START_ACTIVITY(
5569 p_api_name => l_api_name,
5570 p_pkg_name => g_pkg_name,
5571 p_init_msg_list => p_init_msg_list,
5572 l_api_version => l_api_version,
5573 p_api_version => p_api_version,
5574 p_api_type => G_API_TYPE,
5575 x_return_status => x_return_status);
5576
5577 -- check if activity started successfully
5578 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5579 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5580 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5581 raise OKL_API.G_EXCEPTION_ERROR;
5582 End If;
5583 OPEN validate_sub_line(p_dnz_chr_id => l_chr_id);
5584 FETCH validate_sub_line INTO ln_sub_exists;
5585 CLOSE validate_sub_line;
5586 --Start of modifcation BAKUCHIB
5587 -- If the contract has Subsidy line then now we are populating
5588 -- Sub yield record of the okl_k_headers with regular yield's
5589 -- given by super trump/Internal stream generation
5590 OPEN validate_esg_isg(p_dnz_chr_id => l_chr_id);
5591 FETCH validate_esg_isg INTO ln_esg_isg;
5592 CLOSE validate_esg_isg;
5593 IF ln_sub_exists = 1 THEN
5594 print( l_api_name, ' contract # subsidy ' || to_char( l_chr_id ));
5595 pl_chrv_rec.id := l_chr_id;
5596 pl_khrv_rec.id := l_chr_id;
5597 --Start of modifcation Bug#3254058 BAKUCHIB
5598 -- Depending on the value of ln_esg_isg we decide weather stream generated by extrenal/internal
5599 IF ln_esg_isg = 1 THEN
5600 pl_khrv_rec.sub_pre_tax_yield := TRUNC(p_chr_yields.sub_pre_tax_yield*100.00,3);
5601 pl_khrv_rec.sub_after_tax_yield := TRUNC(p_chr_yields.sub_after_tax_yield*100.00,3);
5602 pl_khrv_rec.sub_pre_tax_irr := TRUNC(p_chr_yields.sub_pre_tax_irr*100.00,3);
5603 pl_khrv_rec.sub_after_tax_irr := TRUNC(p_chr_yields.sub_after_tax_irr*100.00,3);
5604 --Bug 4687692 dpsingh
5605 pl_khrv_rec.sub_impl_interest_rate := TRUNC(p_chr_yields.sub_impl_interest_rate*100.00,3);
5606 --Bug 4687692 end
5607 pl_khrv_rec.pre_tax_yield := TRUNC(p_chr_yields.pre_tax_yield*100.00,3);
5608 pl_khrv_rec.after_tax_yield := TRUNC(p_chr_yields.after_tax_yield*100.00,3);
5609 pl_khrv_rec.pre_tax_irr := TRUNC(p_chr_yields.pre_tax_irr*100.00,3);
5610 pl_khrv_rec.after_tax_irr := TRUNC(p_chr_yields.after_tax_irr*100.00,3);
5611 pl_khrv_rec.implicit_interest_rate := TRUNC(p_chr_yields.implicit_interest_rate*100.00,3);
5612 ELSIF ln_esg_isg = 0 THEN
5613 pl_khrv_rec.sub_pre_tax_yield := TRUNC(p_chr_yields.sub_pre_tax_yield*100.00,3);
5614 pl_khrv_rec.sub_after_tax_yield := TRUNC(p_chr_yields.sub_after_tax_yield*100.00,3);
5615 pl_khrv_rec.sub_pre_tax_irr := TRUNC(p_chr_yields.sub_pre_tax_irr*100.00,3);
5616 pl_khrv_rec.sub_after_tax_irr := TRUNC(p_chr_yields.sub_after_tax_irr*100.00,3);
5617 pl_khrv_rec.sub_impl_interest_rate := TRUNC(p_chr_yields.sub_impl_interest_rate*100.00,3);
5618 pl_khrv_rec.pre_tax_yield := TRUNC(p_chr_yields.pre_tax_yield*100.00,3);
5619 pl_khrv_rec.after_tax_yield := TRUNC(p_chr_yields.after_tax_yield*100.00,3);
5620 pl_khrv_rec.pre_tax_irr := TRUNC(p_chr_yields.pre_tax_irr*100.00,3);
5621 pl_khrv_rec.after_tax_irr := TRUNC(p_chr_yields.after_tax_irr*100.00,3);
5622 pl_khrv_rec.implicit_interest_rate := TRUNC(p_chr_yields.implicit_interest_rate*100.00,3);
5623 END IF;
5624 --End of modifcation Bug#3254058 BAKUCHIB
5625 ELSIF ln_sub_exists = 0 THEN
5626 print( l_api_name, ' contract # ' || to_char( l_chr_id ));
5627 pl_chrv_rec.id := l_chr_id;
5628 pl_khrv_rec.id := l_chr_id;
5629 pl_khrv_rec.pre_tax_yield := TRUNC(p_chr_yields.pre_tax_yield*100.00,3);
5630 pl_khrv_rec.after_tax_yield := TRUNC(p_chr_yields.after_tax_yield*100.00,3);
5631 pl_khrv_rec.pre_tax_irr := TRUNC(p_chr_yields.pre_tax_irr*100.00,3);
5632 pl_khrv_rec.after_tax_irr := TRUNC(p_chr_yields.after_tax_irr*100.00,3);
5633 pl_khrv_rec.implicit_interest_rate := TRUNC(p_chr_yields.implicit_interest_rate*100.00,3);
5634 pl_khrv_rec.sub_pre_tax_yield := NULL;
5635 pl_khrv_rec.sub_after_tax_yield := NULL;
5636 pl_khrv_rec.sub_pre_tax_irr := NULL;
5637 pl_khrv_rec.sub_after_tax_irr := NULL;
5638 pl_khrv_rec.sub_impl_interest_rate := NULL;
5639 END IF;
5640 --End of modifcation BAKUCHIB
5641 okl_contract_pvt.update_contract_header(
5642 p_api_version => p_api_version,
5643 p_init_msg_list => p_init_msg_list,
5644 x_return_status => x_return_status,
5645 x_msg_count => x_msg_count,
5646 x_msg_data => x_msg_data,
5647 p_restricted_update => OKL_API.G_FALSE,
5648 p_chrv_rec => pl_chrv_rec,
5649 p_khrv_rec => pl_khrv_rec,
5650 p_edit_mode => 'N',
5651 x_chrv_rec => xl_chrv_rec,
5652 x_khrv_rec => xl_khrv_rec);
5653
5654
5655 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5656 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5657 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5658 raise OKL_API.G_EXCEPTION_ERROR;
5659 End If;
5660
5661
5662 print( l_api_name, 'end', x_return_status);
5663
5664 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
5665
5666 Exception
5667 when OKL_API.G_EXCEPTION_ERROR then
5668 IF validate_sub_line%ISOPEN THEN
5669 CLOSE validate_sub_line;
5670 END IF;
5671 IF validate_esg_isg%ISOPEN THEN
5672 CLOSE validate_esg_isg;
5673 END IF;
5674 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5675 p_api_name => l_api_name,
5676 p_pkg_name => g_pkg_name,
5677 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
5678 x_msg_count => x_msg_count,
5679 x_msg_data => x_msg_data,
5680 p_api_type => g_api_type);
5681 IF l_hdr_csr%ISOPEN THEN
5682 CLOSE l_hdr_csr;
5683 End If;
5684
5685 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5686 IF validate_sub_line%ISOPEN THEN
5687 CLOSE validate_sub_line;
5688 END IF;
5689 IF validate_esg_isg%ISOPEN THEN
5690 CLOSE validate_esg_isg;
5691 END IF;
5692 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5693 p_api_name => l_api_name,
5694 p_pkg_name => g_pkg_name,
5695 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5696 x_msg_count => x_msg_count,
5697 x_msg_data => x_msg_data,
5698 p_api_type => g_api_type);
5699
5700 IF l_hdr_csr%ISOPEN THEN
5701 CLOSE l_hdr_csr;
5702 End If;
5703
5704 when OTHERS then
5705 IF validate_sub_line%ISOPEN THEN
5706 CLOSE validate_sub_line;
5707 END IF;
5708 IF validate_esg_isg%ISOPEN THEN
5709 CLOSE validate_esg_isg;
5710 END IF;
5711 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5712 p_api_name => l_api_name,
5713 p_pkg_name => g_pkg_name,
5714 p_exc_name => 'OTHERS',
5715 x_msg_count => x_msg_count,
5716 x_msg_data => x_msg_data,
5717 p_api_type => g_api_type);
5718
5719 IF l_hdr_csr%ISOPEN THEN
5720 CLOSE l_hdr_csr;
5721 End If;
5722
5723 end update_contract_yields;
5724 -- Start modification Bug#3121708 bakuchib
5725 -- gboomina BUG#4508077 added p_source_call as a parameter
5726 Procedure adjust_streams(
5727 p_api_version IN NUMBER,
5728 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
5729 x_return_status OUT NOCOPY VARCHAR2,
5730 x_msg_count OUT NOCOPY NUMBER,
5731 x_msg_data OUT NOCOPY VARCHAR2,
5732 p_chr_id IN VARCHAR2,
5733 p_purpose IN VARCHAR2,
5734 p_source_call IN VARCHAR2) AS
5735
5736 l_api_name CONSTANT VARCHAR2(30) := 'ADJUST_STREAMS';
5737 l_api_version CONSTANT NUMBER := 1;
5738 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5739
5740 pl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
5741 pl_khrv_rec okl_contract_pvt.khrv_rec_type;
5742 xl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
5743 xl_khrv_rec okl_contract_pub.khrv_rec_type;
5744
5745 l_trxH_in_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
5746 l_trxH_out_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
5747 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
5748 l_strm_rec strm_csr%ROWTYPE;
5749 l_strms_rec strms_csr%ROWTYPE;
5750
5751 l_stmv_tbl okl_streams_pub.stmv_tbl_type;
5752 x_stmv_tbl okl_streams_pub.stmv_tbl_type;
5753 l_selv_tbl Okl_Streams_pub.selv_tbl_type;
5754 x_selv_tbl Okl_Streams_pub.selv_tbl_type;
5755
5756 -- Code for bulk update -02/28/2004 - HKPATEL
5757 l_id_tbl okl_streams_util.NumberTabTyp;
5758 l_say_code_tbl okl_streams_util.Var10TabTyp;
5759 l_active_yn_tbl okl_streams_util.Var10TabTyp;
5760 l_date_history_tbl okl_streams_util.DateTabTyp;
5761 l_date_curr_tbl okl_streams_util.DateTabTyp;
5762
5763 -- Code for bulk update ends here -02/28/2004 - HKPATEL
5764
5765
5766 i NUMBER;
5767 j NUMBER;
5768 l_tcnCode VARCHAR2(256);
5769 l_transaction_type VARCHAR2(256) := 'Miscellaneous';--'Generate Yields';
5770
5771 l_fnd_rec fnd_lookups_csr%ROWTYPE;
5772 l_trx_rec trx_csr%ROWTYPE;
5773 l_hdr_rec l_hdr_csr%ROWTYPE;
5774
5775 l_strm_name_rec strm_name_csr%ROWTYPE;
5776 l_strm_name VARCHAR2(256);
5777
5778 l_chr_id NUMBER := TO_NUMBER(p_chr_id);
5779
5780 -- Changed this cursor for user defined streams
5781 Cursor l_secdep_csr( chrId NUMBER,pdtId NUMBER, pp VARCHAR2 ) is
5782 Select ele.id
5783 From okl_strm_elements ele,
5784 okl_streams str,
5785 --okl_strm_type_v sty,
5786 OKL_STRM_TMPT_LINES_UV sty,
5787 okl_k_lines_full_v kle,
5788 okc_line_styles_b lse,
5789 okc_statuses_b sts
5790 Where ele.stm_id = str.id
5791 and str.khr_id = chrId
5792 and str.kle_id = kle.id
5793 and str.sty_id = sty.primary_sty_id
5794 --and sty.name = 'SECURITY DEPOSIT'
5795 and sty.primary_sty_purpose = 'SECURITY_DEPOSIT'
5796 and sty.pdt_id = pdtId
5797 and str.say_code = 'CURR'
5798 and nvl(str.purpose_code, 'ORIGIN') = pp
5799 and str.active_yn = 'Y'
5800 and KLE.LSE_ID = LSE.ID
5801 and KLE.fee_type = 'SECDEPOSIT'
5802 and lse.lty_code = 'FEE'
5803 and kle.dnz_chr_id = str.khr_id
5804 and sts.code = kle.sts_code
5805 --Start of bug#3121708 modification BAKUCHIB
5806 and sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED')
5807 --End of bug#3121708 modification BAKUCHIB
5808 and ele.amount < 0
5809 Order By ele.stream_element_date;
5810
5811 l_secdep_rec l_secdep_csr%ROWTYPE;
5812
5813 CURSOR l_stmp_yn_csr(khrid NUMBER, p VARCHAR2) IS
5814 SELECT count(stm.id) cnt
5815 FROM okl_streams stm
5816 WHERE stm.khr_id = khrid
5817 AND stm.say_code = 'WORK'
5818 AND stm.sgn_code = 'STMP'
5819 AND nvl(stm.purpose_code, 'ORIGIN') = p;
5820
5821 l_stmp_yn_rec l_stmp_yn_csr%ROWTYPE;
5822 -- added for bugfix 4034007
5823 CURSOR l_report_deal_csr (product_id number) IS
5824 select value
5825 from okl_pdt_pqy_vals_uv
5826 where name = 'LEASE' and pdt_id = product_id;
5827 l_rep_pdt_deal_type VARCHAR2(10);
5828 l_deal_type VARCHAR2(10);
5829 l_origin_purpose VARCHAR2(10);
5830
5831 -- Cursor for rebook enhancement - HKPATEL - 4212626
5832 l_hist_flag VARCHAR2(1) := 'Y';
5833 CURSOR bill_strm_hist_csr(chrId NUMBER,
5834 styId NUMBER,
5835 status VARCHAR2,
5836 pp VARCHAR2 )
5837 IS
5838
5839 SELECT 'N'
5840 FROM OKL_STREAMS str
5841 WHERE EXISTS (SELECT ID FROM OKL_STRM_ELEMENTS ele WHERE ele.STM_ID = str.ID AND ele.DATE_BILLED IS NULL )
5842 AND str.KHR_ID = chrId
5843 AND str.STY_ID = styId
5844 AND str.SAY_CODE = status
5845 AND nvl(str.purpose_code, 'ORIGIN') = pp;
5846 -- Cursor for rebook enhancement ends here - HKPATEL
5847
5848
5849
5850 begin
5851
5852 --Added by kthiruva for Debugging
5853 write_to_log('Inside procedure adjust_Streams');
5854
5855 print( l_api_name, 'begin');
5856 x_return_status := OKL_API.START_ACTIVITY(
5857 p_api_name => l_api_name,
5858 p_pkg_name => g_pkg_name,
5859 p_init_msg_list => p_init_msg_list,
5860 l_api_version => l_api_version,
5861 p_api_version => p_api_version,
5862 p_api_type => G_API_TYPE,
5863 x_return_status => x_return_status);
5864 -- check if activity started successfully
5865 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5866 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5867 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5868 raise OKL_API.G_EXCEPTION_ERROR;
5869 End If;
5870 OPEN l_hdr_pdt_csr(p_chr_id);
5871 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
5872 CLOSE l_hdr_pdt_csr;
5873
5874 OPEN l_stmp_yn_csr( TO_NUMBER(p_chr_id), p_purpose);
5875 FETCH l_stmp_yn_csr INTO l_stmp_yn_rec;
5876 CLOSE l_stmp_yn_csr;
5877 If ( l_stmp_yn_rec.cnt > 0 ) Then
5878
5879 OPEN l_hdr_csr( p_chr_id );
5880 FETCH l_hdr_csr INTO l_hdr_rec;
5881 CLOSE l_hdr_csr;
5882 -- added for bugfix 4034007
5883 if (p_purpose = 'ORIGIN') then
5884 l_origin_purpose := '-99';
5885 l_deal_type := l_hdr_rec.deal_type;
5886 else
5887 l_origin_purpose := p_purpose;
5888
5889 OPEN l_report_deal_csr( l_hdr_rec.report_pdt_id );
5890 FETCH l_report_deal_csr INTO l_rep_pdt_deal_type;
5891 CLOSE l_report_deal_csr;
5892
5893 l_deal_type := l_rep_pdt_deal_type;
5894 end if;
5895
5896 -- gboomina BUG#4508077 start - generating IDC streams only for ISG
5897 IF(p_source_call = 'ISG') THEN
5898 OKL_EXPENSE_STREAMS_PVT.generate_idc(
5899 p_khr_id => p_chr_id,
5900 p_purpose_code => l_origin_purpose,
5901 p_currency_code => l_hdr_rec.currency_code,
5902 p_start_date => l_hdr_rec.start_date,
5903 p_end_date => l_hdr_rec.end_date,
5904 p_deal_type => l_deal_type,
5905 x_return_status => x_return_status);
5906 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5907 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5908 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5909 raise OKL_API.G_EXCEPTION_ERROR;
5910 End If;
5911 END IF;
5912 -- gboomina BUG#4508077 end
5913 END IF;
5914 --Added by kthiruva for Debugging
5915 write_To_log('Prior to the call to OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE');
5916 OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE(
5917 p_api_version => p_api_version,
5918 p_init_msg_list => p_init_msg_list,
5919 p_khr_id => p_chr_id,
5920 p_purpose_code => p_purpose,
5921 x_return_status => x_return_status,
5922 x_msg_count => x_msg_count,
5923 x_msg_data => x_msg_data);
5924
5925 --Added by kthiruva for Debugging
5926 write_to_log('After the call to OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE, return status is :'||x_return_status);
5927 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5928 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5929 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5930 raise OKL_API.G_EXCEPTION_ERROR;
5931 END IF;
5932
5933 -- Added by HKPATEL for mass rebook fix
5934 /*
5935 Commented by HKPATEL for bug 4212626
5936 adjust_massrebook_streams(p_api_version => p_api_version,
5937 p_init_msg_list => p_init_msg_list,
5938 x_return_status => x_return_status,
5939 x_msg_count => x_msg_count,
5940 x_msg_data => x_msg_data,
5941 p_chr_id => p_chr_id,
5942 p_purpose => p_purpose);
5943 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5944 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5945 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5946 raise OKL_API.G_EXCEPTION_ERROR;
5947 END IF;
5948 */
5949
5950 -- Code for rebook enhancement - HKPATEL - 4212626
5951 --Added by kthiruva for Debugging
5952 write_to_log('Prior to the call to create_advance_rental_streams');
5953 create_advance_rental_streams(
5954 p_api_version => p_api_version,
5955 p_init_msg_list => p_init_msg_list,
5956 x_return_status => x_return_status,
5957 x_msg_count => x_msg_count,
5958 x_msg_data => x_msg_data,
5959 p_chr_id => l_chr_id,
5960 p_purpose => p_purpose);
5961
5962 --Added by kthiruva for Debugging
5963 write_to_log('After the call to create_advance_rental_streams, return status is :'||x_return_status);
5964
5965 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5966 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5967 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5968 raise OKL_API.G_EXCEPTION_ERROR;
5969 END IF;
5970
5971 --Added by kthiruva for Debugging
5972 write_to_log('Prior to the call to adjust_passthrough_streams ');
5973 adjust_passthrough_streams(
5974 p_api_version => p_api_version,
5975 p_init_msg_list => p_init_msg_list,
5976 x_return_status => x_return_status,
5977 x_msg_count => x_msg_count,
5978 x_msg_data => x_msg_data,
5979 p_chr_id => p_chr_id,
5980 p_purpose => p_purpose);
5981
5982 --Added by kthiruva for Debugging
5983 write_to_log('After the call to adjust_passthrough_streams, return status is :'||x_return_status);
5984
5985 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5986 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5987 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5988 RAISE OKL_API.G_EXCEPTION_ERROR;
5989 END IF;
5990
5991 --Added by kthiruva for Debugging
5992 write_to_log('Prior to the call to OKL_CONTRACT_REBOOK_PVT.link_streams');
5993 OKL_CONTRACT_REBOOK_PVT.link_streams(
5994 p_api_version => p_api_version,
5995 p_init_msg_list => p_init_msg_list,
5996 x_return_status => x_return_status,
5997 x_msg_count => x_msg_count,
5998 x_msg_data => x_msg_data,
5999 p_khr_id => p_chr_id);
6000
6001 --Added by kthiruva for Debugging
6002 write_to_log('After the call to OKL_CONTRACT_REBOOK_PVT.link_streams, return status is :'||x_return_status);
6003
6004 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6005 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6006 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6007 RAISE OKL_API.G_EXCEPTION_ERROR;
6008 END IF;
6009 -- Code for rebook enhancement ends here - HKPATEL
6010
6011 i := 0;
6012 FOR l_strms_rec in strms_csr ( l_chr_id, 'CURR', p_purpose )
6013 LOOP
6014 -- code change for rebook enhancement - HKPATEL-4212626
6015 l_hist_flag := 'Y';
6016 OPEN strm_name_csr ( l_strms_rec.sty_id );
6017 FETCH strm_name_csr into l_strm_name_rec;
6018 IF strm_name_csr%NOTFOUND THEN
6019 CLOSE strm_name_csr;
6020 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6021 ELSIF (l_strm_name_rec.name = 'BILLING ADJUSTMENT') THEN
6022 OPEN bill_strm_hist_csr(l_chr_id,l_strms_rec.sty_id,'CURR',p_purpose);
6023 FETCH bill_strm_hist_csr into l_hist_flag;
6024 IF bill_strm_hist_csr%NOTFOUND THEN
6025 CLOSE bill_strm_hist_csr;
6026 END IF;
6027 END IF;
6028 CLOSE strm_name_csr;
6029
6030 -- code change for rebook enhancement ends here- HKPATEL
6031
6032 OPEN strm_name_csr ( l_strms_rec.sty_id );
6033 FETCH strm_name_csr into l_strm_name_rec;
6034
6035 IF strm_name_csr%NOTFOUND THEN
6036 CLOSE strm_name_csr;
6037 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6038
6039 ELSIF (l_strm_name_rec.stream_type_purpose NOT IN (
6040 'INVESTOR_CNTRCT_OBLIGATION_PAY', 'INVESTOR_DISB_ADJUSTMENT',
6041 'INVESTOR_EVERGREEN_RENT_PAY', 'INVESTOR_INTEREST_INCOME',
6042 'INVESTOR_INTEREST_PAYABLE', 'INVESTOR_LATE_FEE_PAYABLE',
6043 'INVESTOR_LATE_INTEREST_PAY', 'INVESTOR_PAYABLE',
6044 'INVESTOR_PRETAX_INCOME', 'INVESTOR_PRINCIPAL_PAYABLE',
6045 'INVESTOR_RECEIVABLE', 'INVESTOR_RENTAL_ACCRUAL',
6046 'INVESTOR_RENT_BUYBACK', 'INVESTOR_RENT_DISB_BASIS',
6047 'INVESTOR_RENT_PAYABLE', 'INVESTOR_RESIDUAL_BUYBACK',
6048 'INVESTOR_RESIDUAL_DISB_BASIS', 'INVESTOR_RESIDUAL_PAY',
6049 'INVESTOR_VARIABLE_INTEREST', 'PV_RENT_SECURITIZED',
6050 'PV_RV_SECURITIZED')
6051 -- INVESTOR_CNTRCT_OBLIGATION_PAY' --'INVESTOR_CONTRACT_OBLIGATION_PAYABLE'
6052 -- ,'INVESTOR_RESIDUAL_PAY' ) --'INVESTOR_RESIDUAL_PAYABLE')
6053
6054 --Condition added by kthiruva for Bug 4737555 .Streams generated by Interest Calc Prog should not be historised
6055 AND (l_strms_rec.SGN_CODE NOT IN ('INTC','LATE_CALC')) -- bug 6472228
6056 AND l_hist_flag = 'Y') THEN
6057 i := i + 1;
6058 print( l_api_name, 'to HIST STMID:' || to_char(l_strm_rec.strm_id ));
6059 -- Code commented and added for bulk update by HKPATEL - 02/28/2005
6060 /*
6061 l_stmv_tbl(i).id := l_strms_rec.STRM_ID;
6062 l_stmv_tbl(i).say_code := 'HIST';
6063 l_stmv_tbl(i).active_yn := 'N';
6064 l_stmv_tbl(i).date_history := sysdate;
6065 */
6066
6067 l_id_tbl(i):= l_strms_rec.STRM_ID;
6068 l_say_code_tbl(i) := 'HIST';
6069 l_active_yn_tbl(i) := 'N';
6070 l_date_history_tbl(i) := sysdate;
6071 l_date_curr_tbl(i) := l_strms_rec.date_current;
6072 -- Code commented and added ends here for bulk update by HKPATEL - 02/28/2005
6073
6074
6075 END IF;
6076 CLOSE strm_name_csr;
6077
6078 END LOOP;
6079 FOR l_strms_rec in strms_csr ( l_chr_id, 'WORK', p_purpose)
6080 LOOP
6081 OPEN strm_name_csr ( l_strms_rec.sty_id );
6082 FETCH strm_name_csr into l_strm_name_rec;
6083 IF strm_name_csr%NOTFOUND THEN
6084 CLOSE strm_name_csr;
6085 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6086 END IF;
6087 CLOSE strm_name_csr;
6088 -- Code commented and added for use defined streams
6089 --l_strm_name := l_strm_name_rec.name;
6090 l_strm_name := l_strm_name_rec.stream_type_purpose;
6091
6092
6093 -- Added and commented code ends here.
6094 i := i + 1;
6095 print( l_api_name, 'to CURR STMID:' || to_char(l_strms_rec.strm_id ));
6096 -- Code for bulk update -02/28/2004 - HKPATEL
6097 l_id_tbl(i):= l_strms_rec.STRM_ID;
6098 l_say_code_tbl(i) := 'CURR';
6099 l_date_curr_tbl(i) := sysdate;
6100 l_date_history_tbl(i) := NULL;
6101
6102 --l_stmv_tbl(i).id := l_strms_rec.STRM_ID;
6103 --l_stmv_tbl(i).say_code := 'CURR';
6104
6105
6106 -- Code for bulk update ends here -02/28/2004 - HKPATEL
6107
6108 -- code added and commented for user defined streams
6109 /*
6110 If (( l_strm_name = 'FEDERAL DEPRECIATION' ) OR
6111 ( l_strm_name = 'STATE DEPRECIATION' ) OR
6112 ( l_strm_name = 'BOOK DEPRECIATION' )) THEN
6113 */
6114 If (( l_strm_name = 'FEDERAL_DEPRECIATION' ) OR
6115 ( l_strm_name = 'STATE_DEPRECIATION' ) OR
6116 ( l_strm_name = 'BOOK_DEPRECIATION' )) THEN
6117
6118 --l_stmv_tbl(i).active_yn := 'N';
6119 l_active_yn_tbl(i) := 'N';
6120 Else
6121 --l_stmv_tbl(i).active_yn := 'Y';
6122 l_active_yn_tbl(i) := 'Y';
6123 End If;
6124
6125 If ( p_purpose = 'REPORT') THEN
6126 --l_stmv_tbl(i).active_yn := 'N';
6127 l_active_yn_tbl(i) := 'N';
6128 Else
6129 --l_stmv_tbl(i).active_yn := 'Y';
6130 l_active_yn_tbl(i) := 'Y';
6131 End If;
6132
6133 --l_stmv_tbl(i).date_current := sysdate;
6134
6135
6136 END LOOP;
6137 If ( l_id_tbl.COUNT > 0 ) Then
6138 /* Commented for Bulk update by HKPATEL -02/18/2005
6139 If ( l_stmv_tbl.COUNT > 0 ) Then
6140 Okl_Streams_pub.update_streams(
6141 p_api_version => p_api_version,
6142 p_init_msg_list => p_init_msg_list,
6143 x_return_status => x_return_status,
6144 x_msg_count => x_msg_count,
6145 x_msg_data => x_msg_data,
6146 p_stmv_tbl => l_stmv_tbl,
6147 x_stmv_tbl => x_stmv_tbl);
6148 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6149 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6150 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6151 raise OKL_API.G_EXCEPTION_ERROR;
6152 END IF;
6153 Commented code for Bulk update ends here by HKPATEL -02/18/2005 */
6154
6155 -- Bulk update
6156 BEGIN
6157 --Added by kthiruva for Debugging
6158 write_to_log('Prior to the Historing of Current streams and updation of Work streams to current');
6159
6160 FORALL i IN l_id_tbl.FIRST..l_id_tbl.LAST
6161 UPDATE OKL_STREAMS
6162 SET say_code = l_say_code_tbl(i),
6163 active_yn = l_active_yn_tbl(i),
6164 date_history = l_date_history_tbl(i),
6165 date_current = l_date_curr_tbl(i)
6166 WHERE ID = l_id_tbl(i);
6167
6168 --Added by kthiruva for Debugging
6169 write_to_log('Statuses updated successfully');
6170
6171 -- Added by mansrini for bug 4728636 (G bug 4520466)
6172 IF p_purpose <> 'REPORT' THEN
6173 OKL_BILLING_CONTROLLER_PVT.track_next_bill_date(p_chr_id);
6174 END IF;
6175 -- end changes
6176 --Added by kthiruva for Debugging
6177 write_to_log('After the call to OKL_BILLING_CONTROLLER_PVT.track_next_bill_date');
6178
6179 EXCEPTION
6180 WHEN OTHERS THEN
6181 okl_api.set_message (p_app_name => G_APP_NAME,
6182 p_msg_name => G_DB_ERROR,
6183 p_token1 => G_PROG_NAME_TOKEN,
6184 p_token1_value => l_api_name,
6185 p_token2 => G_SQLCODE_TOKEN,
6186 p_token2_value => sqlcode,
6187 p_token3 => G_SQLERRM_TOKEN,
6188 p_token3_value => sqlerrm);
6189 l_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
6190 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6191 END;
6192
6193 -- Bulk update ends here
6194
6195 End If;
6196 /* Changed the position of code for bug 4212626
6197 create_advance_rental_streams(
6198 p_api_version => p_api_version,
6199 p_init_msg_list => p_init_msg_list,
6200 x_return_status => x_return_status,
6201 x_msg_count => x_msg_count,
6202 x_msg_data => x_msg_data,
6203 p_chr_id => l_chr_id,
6204 p_purpose => p_purpose);
6205
6206
6207 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6208 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6209 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6210 raise OKL_API.G_EXCEPTION_ERROR;
6211 END IF;
6212 */
6213 OPEN l_hdr_csr( l_chr_id);
6214 FETCH l_hdr_csr INTO l_hdr_rec;
6215
6216 IF l_hdr_csr%NOTFOUND THEN
6217 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6218 Elsif (l_hdr_rec.orig_system_source_code = 'OKL_REBOOK') Then
6219 NULL;
6220 /* Changed the position of code for bug 4212626
6221 create_interim_rental_streams(
6222 p_api_version => p_api_version,
6223 p_init_msg_list => p_init_msg_list,
6224 x_return_status => x_return_status,
6225 x_msg_count => x_msg_count,
6226 x_msg_data => x_msg_data,
6227 p_chr_id => l_chr_id,
6228 p_purpose => p_purpose);
6229
6230 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6231 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6232 END IF;
6233 */
6234 END IF;
6235 CLOSE l_hdr_csr;
6236
6237 /*
6238 * get rid of return negative stream value for Security Deposit.
6239 */
6240 l_selv_tbl.delete(1, l_selv_tbl.COUNT );
6241 i := 0;
6242 IF(g_rep_req_yn = 'Y') THEN
6243 FOR l_secdep_rec in l_secdep_csr ( p_chr_id,l_pdt_id_rec.report_pdt_id, p_purpose )
6244 LOOP
6245
6246 i := i + 1;
6247 l_selv_tbl(i).id := l_secdep_rec.ID;
6248
6249 END LOOP;
6250 ELSE
6251 FOR l_secdep_rec in l_secdep_csr ( p_chr_id,l_pdt_id_rec.pid, p_purpose )
6252 LOOP
6253
6254 i := i + 1;
6255 l_selv_tbl(i).id := l_secdep_rec.ID;
6256
6257 END LOOP;
6258
6259 END IF;
6260
6261
6262 If ( i > 0 ) Then
6263
6264 Okl_Streams_pub.delete_stream_elements(
6265 p_api_version => p_api_version,
6266 p_init_msg_list => p_init_msg_list,
6267 x_return_status => x_return_status,
6268 x_msg_count => x_msg_count,
6269 x_msg_data => x_msg_data,
6270 p_selv_tbl => l_selv_tbl);
6271
6272
6273 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6274 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6275 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6276 RAISE OKL_API.G_EXCEPTION_ERROR;
6277 END IF;
6278 End If;
6279 /* Changed the position of code for bug 4212626
6280 adjust_passthrough_streams(
6281 p_api_version => p_api_version,
6282 p_init_msg_list => p_init_msg_list,
6283 x_return_status => x_return_status,
6284 x_msg_count => x_msg_count,
6285 x_msg_data => x_msg_data,
6286 p_chr_id => p_chr_id,
6287 p_purpose => p_purpose);
6288
6289
6290 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6291 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6292 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6293 RAISE OKL_API.G_EXCEPTION_ERROR;
6294 END IF;
6295 */
6296 x_return_status := l_return_status;
6297
6298 print( l_api_name, 'end', x_return_status);
6299
6300 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
6301
6302 Exception
6303 when OKL_API.G_EXCEPTION_ERROR THEN
6304 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6305 p_api_name => l_api_name,
6306 p_pkg_name => g_pkg_name,
6307 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
6308 x_msg_count => x_msg_count,
6309 x_msg_data => x_msg_data,
6310 p_api_type => g_api_type);
6311 IF l_hdr_csr%ISOPEN THEN
6312 CLOSE l_hdr_csr;
6313 End If;
6314
6315 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6316 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6317 p_api_name => l_api_name,
6318 p_pkg_name => g_pkg_name,
6319 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
6320 x_msg_count => x_msg_count,
6321 x_msg_data => x_msg_data,
6322 p_api_type => g_api_type);
6323
6324 If ( strm_csr%ISOPEN ) Then
6325 CLOSE strm_csr;
6326 End If;
6327
6328 IF l_hdr_csr%ISOPEN THEN
6329 CLOSE l_hdr_csr;
6330 End If;
6331
6332 when OTHERS THEN
6333 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6334 p_api_name => l_api_name,
6335 p_pkg_name => g_pkg_name,
6336 p_exc_name => 'OTHERS',
6337 x_msg_count => x_msg_count,
6338 x_msg_data => x_msg_data,
6339 p_api_type => g_api_type);
6340
6341 IF l_hdr_csr%ISOPEN THEN
6342 CLOSE l_hdr_csr;
6343 End If;
6344
6345 end adjust_streams;
6346 --vdamerla Bug6149951 - Added - Start
6347 -- New procedure to identify and retrieve the khr_id
6348 -- of a original contract if the input contract is REBOOK copy
6349 -- Else input contract is returned as output
6350 PROCEDURE retrive_orig_hdr_id(p_chr_id IN VARCHAR2
6351 , x_chr_id OUT NOCOPY VARCHAR2
6352 ) IS
6353 l_orig_chr_id OKC_K_HEADERS_B.ID%TYPE;
6354 cursor c_online_rbk_csr(cp_chr_id in okc_k_headers_b.id%TYPE) is
6355 select ORIG_SYSTEM_ID1
6356 from okc_k_headers_b
6357 where id=cp_chr_id
6358 and trim(ORIG_SYSTEM_SOURCE_CODE)='OKL_REBOOK';
6359
6360 begin
6361 open c_online_rbk_csr(p_chr_id);
6362 fetch c_online_rbk_csr into l_orig_chr_id;
6363 IF c_online_rbk_csr%FOUND THEN
6364 x_chr_id := l_orig_chr_id;
6365 ELSE
6366 x_chr_id := p_chr_id;
6367 END IF;
6368 close c_online_rbk_csr;
6369
6370 end retrive_orig_hdr_id;
6371 --vdamerla Bug6149951 - Added - End
6372
6373 -- srsreeni - Bug#5699923 - Added - Start
6374 -- Start of comments
6375 -- Procedure Name : RECREATE_TMT_LN_STRMS
6376 -- Description : Creates Working copy of the CURRENT streams of LOAN Components
6377 -- of TERMINATED LINES. LOAN components refer to
6378 -- lines on a LOAN contract or FINANCED or
6379 -- ROLLOVER Fees.
6380 -- Business Rules : During partial termination, mass rebook re-generates streams of terminated lines.
6381 -- This process has been modified not to generate streams for
6382 -- Loan components. Instead the current streams are copied over.
6383 -- Parameters : p_chr_id - Contract Identifier
6384 -- p_source_call - Identifies if this is ESG or ISG
6385 -- Version : 1.0 - Introduced as part of Bug#5699923
6386 --
6387 -- End of comments
6388 PROCEDURE RECREATE_TMT_LN_STRMS(
6389 p_api_version IN NUMBER,
6390 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
6391 x_return_status OUT NOCOPY VARCHAR2,
6392 x_msg_count OUT NOCOPY NUMBER,
6393 x_msg_data OUT NOCOPY VARCHAR2,
6394 p_chr_id IN VARCHAR2,
6395 p_trx_number IN NUMBER,
6396 p_source_call IN VARCHAR2 default 'ESG') AS
6397
6398 -- Declare Variables
6399 l_api_name CONSTANT VARCHAR2(30) := 'RECREATE_TMT_LN_STRMS';
6400 l_strm_index NUMBER;
6401 l_sel_index NUMBER;
6402 l_prev_stm_id OKL_STREAMS.ID%TYPE;
6403
6404 -- vdamerla Forward Ported Bug6149951 starts
6405
6406 l_orig_chr_id OKC_K_HEADERS_B.ID%TYPE; -- smadhava - Bug# 6149951
6407 l_new_stm_cle_id OKC_K_LINES_B.ID%TYPE; -- smadhava - Bug# 6149951
6408
6409 -- vdamerla Forward Ported Bug6149951 ends
6410
6411 -- Declare records/table types
6412 l_stmv_tbl okl_streams_pub.stmv_tbl_type;
6413 lx_stmv_tbl okl_streams_pub.stmv_tbl_type;
6414 l_selv_tbl okl_streams_pub.selv_tbl_type;
6415 lx_selv_tbl okl_streams_pub.selv_tbl_type;
6416 -- vdamerla Forward Port
6417 -- Cursor to get fees linked to a terminated Asset
6418 CURSOR c_lnk_fin_rol_trm_fee (cp_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
6419 SELECT LNK_CLE.ID LNK_ID
6420 , FEE_CLE.ID FEE_ID
6421 , LNK_CLE.DATE_TERMINATED
6422 FROM OKC_K_LINES_B LNK_CLE
6423 , OKC_LINE_STYLES_B LNK_LSE
6424 , OKL_K_LINES FEE_KLE
6425 , OKC_K_LINES_B FEE_CLE
6426 , OKC_STATUSES_B STS
6427 WHERE LNK_CLE.CLE_ID = FEE_CLE.ID
6428 AND LNK_CLE.DNZ_CHR_ID = cp_chr_id
6429 AND FEE_CLE.DNZ_CHR_ID = cp_chr_id
6430 AND LNK_LSE.ID = LNK_CLE.LSE_ID
6431 AND LNK_LSE.LTY_CODE = 'LINK_FEE_ASSET'
6432 AND STS.CODE = LNK_CLE.STS_CODE
6433 AND STS.STE_CODE = 'TERMINATED' -- LINKED line is terminated
6434 AND FEE_KLE.ID = FEE_CLE.ID;
6435 -- vdamerla Forward Ported Bug6149951
6436 --AND FEE_KLE.ID = FEE_CLE.ID
6437 --AND FEE_KLE.FEE_TYPE IN (G_FEE_FINANCED,G_FEE_ROLLOVER);
6438
6439
6440 -- Cursor to get Terminated Asset lines of a LOAN contract
6441 CURSOR c_tmt_asset_loan (cp_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
6442 SELECT CLE.ID LINE_ID
6443 , CLE.DATE_TERMINATED
6444 FROM OKL_K_HEADERS KHR
6445 , OKC_K_LINES_B CLE
6446 , OKC_LINE_STYLES_B LSE
6447 , OKC_STATUSES_B STS
6448 WHERE CLE.DNZ_CHR_ID = KHR.ID
6449 AND LSE.ID = CLE.LSE_ID
6450 AND LSE.LTY_CODE ='FREE_FORM1'
6451 AND STS.CODE = CLE.STS_CODE
6452 AND STS.STE_CODE = 'TERMINATED'
6453 AND KHR.ID = cp_chr_id
6454 --vdamerla Bug6149951 starts. Need to restrict only LOAN-REVOLVING deal type for a terminated asset
6455 --LOAN and LEASE stream types needs to be copied as they will not be requested for a terminated asset
6456 -- AND KHR.DEAL_TYPE = 'LOAN' -- only LOAN contracts (exclude REV-LOAN)
6457 AND KHR.DEAL_TYPE <> 'LOAN-REVOLVING'
6458 --vdamerla Bug6149951 ends
6459 ;
6460
6461 -- Modified by bkatraga for bug 5704245. Added bind condition for purpose_code
6462 -- Cursor to get Current Streams and elements for a particular line of a contract
6463 -- Modified the cursor by vdamerla for bug 6344223
6464 -- Added ISG generated stream type purposes so that these streams will not be
6465 -- copied over during mass/online rebook. Streams will be regenerated by ISG
6466
6467 CURSOR c_streams (cp_chr_id OKC_K_HEADERS_B.ID%TYPE
6468 , cp_cle_id OKC_K_LINES_B.ID%TYPE
6469 , cp_date_terminated DATE
6470 , cp_trx_number okl_streams.transaction_number%TYPE) IS
6471 SELECT STM.ID STREAM_ID
6472 , STM.STY_ID
6473 , STM.SGN_CODE
6474 , STM.PURPOSE_CODE
6475 , STM.ACTIVE_YN -- vdamerla Forward Ported Bug 6082209
6476 , SEL.STREAM_ELEMENT_DATE
6477 , SEL.AMOUNT
6478 , SEL.SE_LINE_NUMBER
6479 , SEL.COMMENTS -- vdamerla Forward Ported Bug 6344223
6480 FROM OKL_STREAMS STM
6481 , OKL_STRM_ELEMENTS SEL
6482 , OKL_STRM_TYPE_B STY -- vdamerla Forward Ported Bug 6082209
6483 WHERE SEL.STM_ID = STM.ID
6484 AND STM.KHR_ID = cp_chr_id
6485 AND STM.KLE_ID = cp_cle_id
6486 AND (nvl(STM.purpose_code,'ORIG') = (select nvl(si.PURPOSE_CODE,'ORIG') from okl_stream_interfaces si
6487 where transaction_number = cp_trx_number))
6488 AND STM.SAY_CODE = 'CURR'
6489 -- vdamerla Forward Ported Bug6344223
6490 AND SEL.STREAM_ELEMENT_DATE <= nvl(cp_date_terminated, SEL.STREAM_ELEMENT_DATE)
6491 AND STM.SGN_CODE <> 'INTC'
6492 AND STM.STY_ID = STY.ID
6493 AND STY.stream_type_purpose NOT IN
6494 ('INVESTOR_CNTRCT_OBLIGATION_PAY', 'INVESTOR_DISB_ADJUSTMENT', 'INVESTOR_EVERGREEN_RENT_PAY', 'INVESTOR_INTEREST_INCOME',
6495 'INVESTOR_INTEREST_PAYABLE', 'INVESTOR_LATE_FEE_PAYABLE', 'INVESTOR_LATE_INTEREST_PAY', 'INVESTOR_PAYABLE',
6496 'INVESTOR_PRETAX_INCOME', 'INVESTOR_PRINCIPAL_PAYABLE', 'INVESTOR_RECEIVABLE', 'INVESTOR_RENTAL_ACCRUAL',
6497 'INVESTOR_RENT_BUYBACK', 'INVESTOR_RENT_DISB_BASIS', 'INVESTOR_RENT_PAYABLE', 'INVESTOR_RESIDUAL_BUYBACK',
6498 'INVESTOR_RESIDUAL_DISB_BASIS', 'INVESTOR_RESIDUAL_PAY', 'INVESTOR_VARIABLE_INTEREST', 'PV_RENT_SECURITIZED',
6499 'PV_RV_SECURITIZED', 'ADVANCE_RENT', 'PASS_THROUGH_EVERGREEN_FEE', 'PASS_THROUGH_EVERGREEN_RENT', 'PASS_THROUGH_EVERGREEN_SERVICE',
6500 'PASS_THROUGH_FEE', 'PASS_THROUGH_SERVICE', 'PASS_THRU_EXP_ACCRUAL', 'PASS_THRU_REV_ACCRUAL', 'PASS_THRU_SVC_EXP_ACCRUAL',
6501 'PASS_THRU_SVC_REV_ACCRUAL', 'PV_RV', 'PV_RV_GUARANTEED', 'PV_RV_UNGUARANTEED', 'RESIDUAL_GUARANTEED', 'RESIDUAL_VALUE',
6502 'SECURITY_DEPOSIT', 'SERVICE_EXPENSE', 'SERVICE_FEE_AMORT_SCHEDULE', 'SERVICE_FEE_AUDIT_LETTER', 'SERVICE_FEE_DOCUMENT_REQ',
6503 'SERVICE_FEE_EXCHG_REQUEST', 'SERVICE_FEE_GENERAL', 'SERVICE_FEE_INTEREST_CONV', 'SERVICE_FEE_INVOICE_DEMAND',
6504 'SERVICE_FEE_INVOICE_REPRINT', 'SERVICE_FEE_PMT_CHANGE', 'SERVICE_FEE_REST_REQUEST', 'SERVICE_FEE_TERM_REQUEST',
6505 'SERVICE_FEE_TRANS_REQUEST', 'SERVICE_FEE_VAR_RATE_STMNT', 'SERVICE_FEE_VAT_SCHEDULE', 'SERVICE_INCOME', 'SERVICE_PAYMENT',
6506 'SERVICE_RENEWAL')
6507
6508 --AND SEL.STREAM_ELEMENT_DATE <= cp_date_terminated
6509 -- vdamerla End Forward Ported Bug6344223
6510 AND STM.SGN_CODE NOT IN ('INTC','LATE_CALC') -- Bug 6472228
6511 ORDER BY STM.ID -- to get the stream elements of a stream together
6512 ;
6513
6514 lnk_fin_rol_trm_fee_rec c_lnk_fin_rol_trm_fee%ROWTYPE;
6515 tmt_asset_loan_rec c_tmt_asset_loan%ROWTYPE;
6516 streams_rec c_streams%ROWTYPE;
6517 --Added by vdamerla for bug 6082209
6518 --Cursor to check whether it is a partial termination mass rebook transaction
6519 CURSOR l_chk_mass_rbk_csr IS
6520 SELECT '!'
6521 FROM okc_k_headers_b CHR,
6522 okl_trx_contracts ktrx,
6523 okl_trx_contracts trx
6524 WHERE CHR.ID = p_chr_id
6525 AND ktrx.KHR_ID = chr.id
6526 AND ktrx.tsu_code = 'ENTERED'
6527 AND ktrx.rbr_code IS NOT NULL
6528 AND ktrx.tcn_type = 'TRBK'
6529 --rkuttiya added for 12.1.1 Multi GAAP
6530 AND ktrx.representation_type = 'PRIMARY'
6531 --
6532 AND ktrx.source_trx_type = 'TCN'
6533 AND trx.tcn_type = 'ALT'
6534 AND trx.id = ktrx.source_trx_id
6535 AND EXISTS (SELECT '1'
6536 FROM okl_rbk_selected_contract rbk_khr
6537 WHERE rbk_khr.KHR_ID = chr.id
6538 AND rbk_khr.STATUS <> 'PROCESSED');
6539
6540 --Modified by vdamerla for bug 6344223
6541 --This cursor will get the terminated lines of current streams
6542 CURSOR l_get_curr_streams_lines
6543 IS
6544 SELECT distinct stm.kle_id
6545 FROM okl_streams stm,
6546 okc_k_lines_b ln
6547 WHERE stm.khr_id = p_chr_id
6548 AND stm.say_code = 'CURR'
6549 AND stm.kle_id = ln.id
6550 AND ln.STS_CODE = 'TERMINATED'
6551 AND (nvl(stm.purpose_code,'ORIG') = (select nvl(si.PURPOSE_CODE,'ORIG')
6552 from okl_stream_interfaces si
6553 where si.transaction_number = p_trx_number));
6554
6555 --Cursor to get the line terminated date
6556 --Modified by vdamerla for bug 6344223
6557 CURSOR l_get_line_term_date(p_line_id OKC_K_LINES_B.ID%TYPE)
6558 IS
6559 SELECT date_terminated
6560 FROM okc_k_lines_b
6561 WHERE id = p_line_id;
6562
6563 --To get the streams for which kle_id is null
6564 --Also streams related to Investor and Interest Calc Prog should not be copied over as these streams are not historized
6565 --Modified the cursor by vdamerla for bug 6344223
6566 --Added ISG generated stream type purposes so that these streams will not be
6567 --copied over during mass/online rebook. Streams will be regenerated by ISG
6568 CURSOR c_streams1 (cp_chr_id OKC_K_HEADERS_B.ID%TYPE
6569 ,cp_trx_number okl_streams.transaction_number%TYPE) IS
6570 SELECT STM.ID STREAM_ID
6571 , STM.STY_ID
6572 , STM.SGN_CODE
6573 , STM.PURPOSE_CODE
6574 , STM.ACTIVE_YN
6575 , SEL.STREAM_ELEMENT_DATE
6576 , SEL.AMOUNT
6577 , SEL.SE_LINE_NUMBER
6578 , SEL.COMMENTS
6579 FROM OKL_STREAMS STM
6580 , OKL_STRM_ELEMENTS SEL
6581 , OKL_STRM_TYPE_B STY
6582 WHERE SEL.STM_ID = STM.ID
6583 AND STM.KHR_ID = cp_chr_id
6584 AND STM.KLE_ID IS NULL
6585 AND (nvl(STM.purpose_code,'ORIG') = (select nvl(si.PURPOSE_CODE,'ORIG') from okl_stream_interfaces si
6586 where transaction_number = cp_trx_number))
6587 AND STM.SAY_CODE = 'CURR'
6588 AND STM.SGN_CODE <> 'INTC'
6589 AND STM.STY_ID = STY.ID
6590 AND STY.stream_type_purpose NOT IN
6591 ('INVESTOR_CNTRCT_OBLIGATION_PAY', 'INVESTOR_DISB_ADJUSTMENT', 'INVESTOR_EVERGREEN_RENT_PAY', 'INVESTOR_INTEREST_INCOME',
6592 'INVESTOR_INTEREST_PAYABLE', 'INVESTOR_LATE_FEE_PAYABLE', 'INVESTOR_LATE_INTEREST_PAY', 'INVESTOR_PAYABLE',
6593 'INVESTOR_PRETAX_INCOME', 'INVESTOR_PRINCIPAL_PAYABLE', 'INVESTOR_RECEIVABLE', 'INVESTOR_RENTAL_ACCRUAL',
6594 'INVESTOR_RENT_BUYBACK', 'INVESTOR_RENT_DISB_BASIS', 'INVESTOR_RENT_PAYABLE', 'INVESTOR_RESIDUAL_BUYBACK',
6595 'INVESTOR_RESIDUAL_DISB_BASIS', 'INVESTOR_RESIDUAL_PAY', 'INVESTOR_VARIABLE_INTEREST', 'PV_RENT_SECURITIZED',
6596 'PV_RV_SECURITIZED', 'ADVANCE_RENT', 'PASS_THROUGH_EVERGREEN_FEE', 'PASS_THROUGH_EVERGREEN_RENT', 'PASS_THROUGH_EVERGREEN_SERVICE',
6597 'PASS_THROUGH_FEE', 'PASS_THROUGH_SERVICE', 'PASS_THRU_EXP_ACCRUAL', 'PASS_THRU_REV_ACCRUAL', 'PASS_THRU_SVC_EXP_ACCRUAL',
6598 'PASS_THRU_SVC_REV_ACCRUAL', 'PV_RV', 'PV_RV_GUARANTEED', 'PV_RV_UNGUARANTEED', 'RESIDUAL_GUARANTEED', 'RESIDUAL_VALUE',
6599 'SECURITY_DEPOSIT', 'SERVICE_EXPENSE', 'SERVICE_FEE_AMORT_SCHEDULE', 'SERVICE_FEE_AUDIT_LETTER', 'SERVICE_FEE_DOCUMENT_REQ',
6600 'SERVICE_FEE_EXCHG_REQUEST', 'SERVICE_FEE_GENERAL', 'SERVICE_FEE_INTEREST_CONV', 'SERVICE_FEE_INVOICE_DEMAND',
6601 'SERVICE_FEE_INVOICE_REPRINT', 'SERVICE_FEE_PMT_CHANGE', 'SERVICE_FEE_REST_REQUEST', 'SERVICE_FEE_TERM_REQUEST',
6602 'SERVICE_FEE_TRANS_REQUEST', 'SERVICE_FEE_VAR_RATE_STMNT', 'SERVICE_FEE_VAT_SCHEDULE', 'SERVICE_INCOME', 'SERVICE_PAYMENT',
6603 'SERVICE_RENEWAL')
6604 ORDER BY STM.ID; -- to get the stream elements of a stream together
6605
6606 l_mass_rbk_khr VARCHAR2(1) DEFAULT '?';
6607 l_terminated_date DATE;
6608 --end vdamerla
6609
6610 --smadhava - Bug# 6149951 - Added - Start
6611 -- Get Line ID in rebook copy that was copied from LINE the original contract
6612 -- cp_rbk_chr_id is the rebook copy contract
6613 -- cp_ole_id is original contract line ID
6614 CURSOR c_get_orig_line_id (cp_rbk_chr_id IN okc_k_headers_b.id%type
6615 , cp_ole_id IN OKC_K_LINES_B.ID%TYPE) is
6616 SELECT cle.id new_cle_id
6617 FROM okc_k_lines_b cle
6618 ,okc_k_lines_b ole
6619 WHERE cle.dnz_chr_id=cp_rbk_chr_id
6620 and ole.id = cp_ole_id
6621 and ole.lse_id = cle.lse_id
6622 and ole.id=cle.orig_system_id1;
6623 --smadhava - Bug# 6149951 - Added - End
6624 --Added by vdamerla for bug 6149951
6625 CURSOR c_chk_accrual_sty_on_pdt(cp_pdt_id OKL_PRODUCTS.ID%TYPE,
6626 cp_sty_id OKL_STRM_TYPE_B.ID%TYPE) IS
6627 SELECT 'Y'
6628 FROM OKL_STRM_TYPE_B sty,
6629 OKL_PROD_STRM_TYPES psty
6630 WHERE sty.id = psty.sty_id
6631 AND psty.pdt_id = cp_pdt_id
6632 AND psty.accrual_yn = 'Y'
6633 --srsreeni Might need this
6634 AND psty.sty_id=cp_sty_id
6635 --
6636 AND sty.stream_type_purpose NOT IN ('SUBSIDY_INCOME');
6637
6638 --Cursor to get the purpose code to identify whether it is a regular or reporting product call
6639 CURSOR c_get_purpose_code IS
6640 select nvl(purpose_code,'ORIGIN')
6641 from okl_stream_interfaces
6642 where transaction_number = p_trx_number;
6643
6644 --To get the regular product id
6645 CURSOR c_get_regular_product_id IS
6646 SELECT pdt_id
6647 FROM okl_k_headers
6648 WHERE id = p_chr_id;
6649
6650 --To get the reporting product id
6651 CURSOR c_get_report_product_id IS
6652 SELECT pdt.reporting_pdt_id
6653 FROM okl_k_headers khr,
6654 okl_products pdt
6655 WHERE khr.id = p_chr_id
6656 AND khr.pdt_id = pdt.id;
6657
6658 --To check whether the accrual flag is checked or not
6659 CURSOR check_accrual_previous_csr IS
6660 SELECT NVL(CHK_ACCRUAL_PREVIOUS_MNTH_YN,'N')
6661 FROM OKL_SYSTEM_PARAMS_ALL;
6662
6663 CURSOR chk_curr_terminated_line(p_kle_id IN OKC_K_LINES_B.ID%TYPE) IS
6664 SELECT 'Y'
6665 FROM okc_k_headers_b CHR,
6666 okl_trx_contracts ktrx,
6667 okl_trx_contracts trx,
6668 okl_txl_quote_lines_b txl
6669 WHERE CHR.ID = p_chr_id
6670 AND ktrx.KHR_ID = chr.id
6671 AND ktrx.tsu_code = 'ENTERED'
6672 AND ktrx.rbr_code IS NOT NULL
6673 AND ktrx.tcn_type = 'TRBK'
6674 --rkuttiya added for 12.1.1 Multi GAAP
6675 AND ktrx.representation_type = 'PRIMARY'
6676 --
6677 AND ktrx.source_trx_type = 'TCN'
6678 AND trx.tcn_type = 'ALT'
6679 AND trx.id = ktrx.source_trx_id
6680 AND TXL.QTE_ID = TRX.QTE_ID
6681 AND TXL.qlt_code = 'AMCFIA'
6682 AND TXL.kle_id = p_kle_id
6683 AND EXISTS (SELECT '1'
6684 FROM okl_rbk_selected_contract rbk_khr
6685 WHERE rbk_khr.KHR_ID = chr.id
6686 AND rbk_khr.STATUS <> 'PROCESSED')
6687 AND TXL.QTE_ID = TRX.QTE_ID;
6688
6689 l_accrual_previous_mnth_yn VARCHAR2(3);
6690 l_purpose_code okl_stream_interfaces.purpose_code%TYPE;
6691 l_product_id okl_products.id%TYPE;
6692 l_temp_term_date DATE;
6693 l_chk_accrual_stream VARCHAR2(1);
6694 l_curr_term_flag VARCHAR2(1);
6695 --end vdamerla
6696 -- vdamerla End Forward Ported Bug 6082209
6697
6698
6699
6700 BEGIN
6701
6702 x_return_status := OKL_API.G_RET_STS_SUCCESS;
6703
6704 -- Call start_activity to create savepoint, check compatibility
6705 -- and initialize message list
6706 x_return_status := OKL_API.START_ACTIVITY (
6707 l_api_name
6708 ,p_init_msg_list
6709 ,'_PVT'
6710 ,x_return_status);
6711 -- Check if activity started successfully
6712 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6713 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6714 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6715 RAISE OKL_API.G_EXCEPTION_ERROR;
6716 END IF;
6717
6718 -- Initialize variables/records
6719 l_strm_index := 0;
6720 l_sel_index := 0;
6721 l_prev_stm_id := NULL;
6722
6723 -- Currently as part of Bug#5668947, logic written for ESG flow
6724 -- If fix is made for ISG, this check can be removed and the logic can be
6725 -- opened to ISG also. The only place where p_source_call will then be useful
6726 -- is in case of determining the transaction_number
6727 IF p_source_call = 'ESG' THEN
6728 --Added by vdamerla for bug 6082209
6729 --check for mass rebook contract
6730 --If termination mass rebook transaction exists, then copy the old streams as
6731 --new streams instead of re-generating them
6732 l_mass_rbk_khr := '?';
6733 OPEN l_chk_mass_rbk_csr;
6734 FETCH l_chk_mass_rbk_csr INTO l_mass_rbk_khr;
6735 CLOSE l_chk_mass_rbk_csr;
6736
6737 IF l_mass_rbk_khr = '!' THEN
6738
6739 --Added by vdamerla for bug 6149951
6740 --Check whether the stream type is accrual or not
6741 OPEN c_get_purpose_code;
6742 FETCH c_get_purpose_code INTO l_purpose_code;
6743 CLOSE c_get_purpose_code;
6744
6745 IF(l_purpose_code = 'ORIGIN') THEN
6746 OPEN c_get_regular_product_id;
6747 FETCH c_get_regular_product_id INTO l_product_id;
6748 CLOSE c_get_regular_product_id;
6749 ELSE
6750 OPEN c_get_report_product_id;
6751 FETCH c_get_report_product_id INTO l_product_id;
6752 CLOSE c_get_report_product_id;
6753 END IF;
6754
6755 --Check whether the CHECK_ACCRUALS_TILL_PREVIOUS_MONTH flag is checked or not
6756 OPEN check_accrual_previous_csr;
6757 FETCH check_accrual_previous_csr INTO l_accrual_previous_mnth_yn;
6758 CLOSE check_accrual_previous_csr;
6759 --end vdamerla
6760
6761 FOR curr_rec IN l_get_curr_streams_lines
6762 LOOP
6763 --Modified by vdamerla for bug 6344223
6764 OPEN l_get_line_term_date (p_line_id => curr_rec.kle_id);
6765 FETCH l_get_line_term_date INTO l_terminated_date;
6766 CLOSE l_get_line_term_date;
6767
6768 --Added by vdamerla for bug 6149951
6769 l_curr_term_flag := NULL;
6770 OPEN chk_curr_terminated_line (p_kle_id => curr_rec.kle_id);
6771 FETCH chk_curr_terminated_line INTO l_curr_term_flag;
6772 CLOSE chk_curr_terminated_line;
6773 --end vdamerla
6774
6775 FOR streams_rec IN c_streams (p_chr_id
6776 ,curr_rec.kle_id
6777 ,TRUNC(LAST_DAY(l_terminated_date)) --Added by vdamerla for bug 6149951
6778 ,p_trx_number)
6779 LOOP
6780 -- Set the Stream record if this is a new Stream
6781 IF l_prev_stm_id IS NULL OR (l_prev_stm_id <> streams_rec.STREAM_ID) THEN
6782 l_prev_stm_id := streams_rec.STREAM_ID;
6783 l_strm_index := l_strm_index + 1;
6784
6785 l_stmv_tbl(l_strm_index).khr_id := p_chr_id;
6786 l_stmv_tbl(l_strm_index).kle_id := curr_rec.kle_id;
6787 l_stmv_tbl(l_strm_index).sty_id := streams_rec.STY_ID;
6788 l_stmv_tbl(l_strm_index).sgn_code := streams_rec.sgn_code;
6789 l_stmv_tbl(l_strm_index).purpose_code := streams_rec.purpose_code;
6790 l_stmv_tbl(l_strm_index).say_code := G_STREAM_ACTIVITY_WORK;
6791 l_stmv_tbl(l_strm_index).active_yn := streams_rec.active_yn;
6792 l_stmv_tbl(l_strm_index).date_working := SYSDATE;
6793
6794 --Added by bkatraga for bug 5704245
6795 l_stmv_tbl(l_strm_index).transaction_number := p_trx_number;
6796 --end bkatraga
6797 --Added by vdamerla for bug 6149951
6798 l_temp_term_date := NULL;
6799 l_chk_accrual_stream := NULL;
6800 IF(l_terminated_date IS NOT NULL AND l_curr_term_flag = 'Y') THEN
6801 OPEN c_chk_accrual_sty_on_pdt(cp_pdt_id => l_product_id,
6802 cp_sty_id => streams_rec.STY_ID);
6803 FETCH c_chk_accrual_sty_on_pdt INTO l_chk_accrual_stream;
6804 CLOSE c_chk_accrual_sty_on_pdt;
6805
6806 --To check whether the stream is accrual or not
6807 IF(l_chk_accrual_stream = 'Y') THEN
6808 IF nvl(l_accrual_previous_mnth_yn,'N') = 'N' THEN
6809 l_temp_term_date := TRUNC(LAST_DAY(l_terminated_date));
6810 ELSE
6811 l_temp_term_date := LAST_DAY(TRUNC(l_terminated_date, 'MONTH')-1);
6812 END IF;
6813 ELSE
6814 l_temp_term_date := TRUNC(l_terminated_date);
6815 END IF;
6816 END IF;
6817 --end bkatraga
6818
6819 END IF; -- end of check for new stream record
6820
6821 ----------------------------------------------------
6822 -- Get the Stream Elements
6823 ----------------------------------------------------
6824 --Added if condition by bkatraga for bug 6149951
6825 IF(l_temp_term_date IS NULL
6826 OR streams_rec.stream_element_date <= l_temp_term_date) THEN
6827 l_sel_index := l_sel_index + 1;
6828 l_selv_tbl(l_sel_index).parent_index := l_strm_index;
6829 l_selv_tbl(l_sel_index).stream_element_date := streams_rec.stream_element_date;
6830 l_selv_tbl(l_sel_index).amount := streams_rec.amount;
6831 l_selv_tbl(l_sel_index).se_line_number := streams_rec.se_line_number;
6832 l_selv_tbl(l_sel_index).comments := streams_rec.comments;
6833 END IF; --Added by vdamerla for bug 6149951
6834
6835 END LOOP; -- END of FOR for Streams
6836
6837 END LOOP;
6838
6839 ELSE
6840 --end bkatraga
6841
6842 -- srsreeni - Bug# 6149951 - Added - Start
6843 -- Determine if this ESG call is from a rebook copy, if so rebook copies
6844 -- donot have streams to copy from. Hence look at the original contract
6845 retrive_orig_hdr_id(p_chr_id, l_orig_chr_id);
6846 -- srsreeni - Bug# 6149951 - Added - End
6847
6848 -- vdamerla End Forward Ported Bug6082209
6849
6850
6851 -- STEP 1(a)
6852 ----------------------------------------------------
6853 -- Get the FINANCED/ROLLOVER FEE lines attached to
6854 -- TERMINATED Assets
6855 ----------------------------------------------------
6856
6857 -- vdamerla Forward Ported Bug6082209
6858 FOR lnk_fin_rol_trm_fee_rec IN c_lnk_fin_rol_trm_fee (l_orig_chr_id)
6859 --FOR lnk_fin_rol_trm_fee_rec IN c_lnk_fin_rol_trm_fee (p_chr_id)
6860 -- vdamerla End Forward Ported Bug6082209
6861 LOOP
6862
6863 -- STEP 1(b)
6864 ----------------------------------------------------
6865 -- Get the CURRENT Streams of fees attached to
6866 -- TERMINATED Asset Lines of the contract.
6867 -- And Create a WORKING COPY.
6868 ----------------------------------------------------
6869 -- vdamerla Forward Ported Bug6082209
6870 FOR streams_rec IN c_streams (l_orig_chr_id
6871 --FOR streams_rec IN c_streams (p_chr_id
6872 -- vdamerla End Forward Ported Bug6082209
6873 , lnk_fin_rol_trm_fee_rec.LNK_ID
6874 -- vdamerla Forward Port Bug6149951
6875 , NULL -- smadhava - Bug# 6149951 -- Blindly copy stream elements
6876 -- of terminated lines during flows other than partial termination mass rebook of the asset
6877 -- vdamerla End Forward Port Bug6149951
6878
6879 --, TRUNC(lnk_fin_rol_trm_fee_rec.DATE_TERMINATED)
6880 , p_trx_number) --Added by bkatraga for bug 5704245
6881 LOOP
6882 -- Set the Stream record if this is a new Stream
6883 IF l_prev_stm_id IS NULL OR (l_prev_stm_id <> streams_rec.STREAM_ID) THEN
6884 l_prev_stm_id := streams_rec.STREAM_ID;
6885 l_strm_index := l_strm_index + 1;
6886
6887 -- vdamerla Forward Port Bug6149951
6888
6889 -- srsreeni - Bug# 6149951 - Added - Start
6890 IF l_orig_chr_id <> p_chr_id THEN
6891 OPEN c_get_orig_line_id(cp_rbk_chr_id => p_chr_id,
6892 cp_ole_id => lnk_fin_rol_trm_fee_rec.LNK_ID);
6893 FETCH c_get_orig_line_id INTO l_new_stm_cle_id;
6894 CLOSE c_get_orig_line_id;
6895 ELSE
6896 l_new_stm_cle_id := lnk_fin_rol_trm_fee_rec.LNK_ID;
6897 END IF;
6898 -- srsreeni - Bug# 6149951 - Added - End
6899 -- vdamerla End Forward Port Bug6149951
6900
6901
6902
6903 l_stmv_tbl(l_strm_index).khr_id := p_chr_id;
6904 -- vdamerla Forward Ported Bug6149951
6905 l_stmv_tbl(l_strm_index).kle_id := l_new_stm_cle_id;
6906 --l_stmv_tbl(l_strm_index).kle_id := lnk_fin_rol_trm_fee_rec.LNK_ID;
6907 -- vdamerla End Forward Ported Bug6149951
6908 l_stmv_tbl(l_strm_index).sty_id := streams_rec.STY_ID;
6909 l_stmv_tbl(l_strm_index).sgn_code := streams_rec.sgn_code;
6910 l_stmv_tbl(l_strm_index).purpose_code := streams_rec.purpose_code;
6911 l_stmv_tbl(l_strm_index).say_code := G_STREAM_ACTIVITY_WORK;
6912 l_stmv_tbl(l_strm_index).active_yn := 'N';
6913 l_stmv_tbl(l_strm_index).date_working := SYSDATE;
6914
6915 --Added by bkatraga for bug 5704245
6916 l_stmv_tbl(l_strm_index).transaction_number := p_trx_number;
6917 --end bkatraga
6918
6919 END IF; -- end of check for new stream record
6920
6921 -- STEP 1(c)
6922 ----------------------------------------------------
6923 -- Get the Stream Elements of FINANCED/ROLLOVER fee attached
6924 -- to TERMINATED Asset Lines of the contract.
6925 -- Only Elements ON or BEFORE the TERMINATION DATE of Fee are copied
6926 ----------------------------------------------------
6927 l_sel_index := l_sel_index + 1;
6928 l_selv_tbl(l_sel_index).parent_index := l_strm_index;
6929 l_selv_tbl(l_sel_index).stream_element_date := streams_rec.stream_element_date;
6930 l_selv_tbl(l_sel_index).amount := streams_rec.amount;
6931 l_selv_tbl(l_sel_index).se_line_number := streams_rec.se_line_number;
6932 --Added by vdamerla for bug 6082209
6933 l_selv_tbl(l_sel_index).comments := streams_rec.comments;
6934 --end bkatraga
6935 -- vdamerla End Forward Ported Bug6082209
6936
6937
6938 END LOOP; -- END of FOR for Streams
6939 END LOOP; -- END of FOR For FINANCED/ROLLOVER
6940
6941 -- Reinitialize variables
6942 l_prev_stm_id := NULL;
6943
6944 -- STEP 2(a)
6945 ----------------------------------------------------
6946 -- Get the TERMINATED Asset lines of contracts
6947 ----------------------------------------------------
6948 -- vdamerla Forward Ported Bug6149951
6949 FOR tmt_asset_loan_rec IN c_tmt_asset_loan (l_orig_chr_id) -- smadhava - Bug# 6149951
6950 --FOR tmt_asset_loan_rec IN c_tmt_asset_loan (p_chr_id)
6951 -- vdamerla End Forward Ported Bug6149951
6952 LOOP
6953
6954 -- STEP 2(b)
6955 ----------------------------------------------------
6956 -- Get the CURRENT Streams of Asset lines.
6957 -- And Create a WORKING COPY.
6958 ----------------------------------------------------
6959 -- vdamerla Forward Ported Bug6149951
6960 FOR streams_rec IN c_streams (l_orig_chr_id -- smadhava - Bug# 6149951
6961 -- FOR streams_rec IN c_streams (p_chr_id
6962 , tmt_asset_loan_rec.LINE_ID
6963 , NULL -- smadhava - Bug# 6149951 -- Blindly copy stream elements
6964 -- of terminated lines during flows other than partial termination mass rebook of the asset
6965 --, TRUNC(tmt_asset_loan_rec.DATE_TERMINATED)
6966 -- vdamerla End Forward Ported Bug6149951
6967 , p_trx_number) --Added by bkatraga for bug 5704245
6968 LOOP
6969 -- Set the Stream record if this is a new Stream
6970 IF l_prev_stm_id IS NULL OR (l_prev_stm_id <> streams_rec.STREAM_ID) THEN
6971 l_prev_stm_id := streams_rec.STREAM_ID;
6972 l_strm_index := l_strm_index + 1;
6973 -- vdamerla - Bug# 6149951 - Added - Start
6974 IF l_orig_chr_id <> p_chr_id THEN
6975 OPEN c_get_orig_line_id(cp_rbk_chr_id => p_chr_id,
6976 cp_ole_id => tmt_asset_loan_rec.LINE_ID);
6977 FETCH c_get_orig_line_id INTO l_new_stm_cle_id;
6978 CLOSE c_get_orig_line_id;
6979 ELSE
6980 l_new_stm_cle_id := tmt_asset_loan_rec.LINE_ID;
6981 END IF;
6982 -- vdamerla End Forward Ported Bug6149951
6983
6984
6985
6986
6987 l_stmv_tbl(l_strm_index).khr_id := p_chr_id;
6988 -- vdamerla Forward Ported Bug6149951
6989 l_stmv_tbl(l_strm_index).kle_id := l_new_stm_cle_id; -- smadhava Bug# 6149951
6990 --l_stmv_tbl(l_strm_index).kle_id := tmt_asset_loan_rec.LINE_ID;
6991 -- vdamerla End Forward Ported Bug6149951
6992 l_stmv_tbl(l_strm_index).sty_id := streams_rec.STY_ID;
6993 l_stmv_tbl(l_strm_index).sgn_code := streams_rec.sgn_code;
6994 l_stmv_tbl(l_strm_index).purpose_code := streams_rec.purpose_code;
6995 l_stmv_tbl(l_strm_index).say_code := G_STREAM_ACTIVITY_WORK;
6996 l_stmv_tbl(l_strm_index).active_yn := 'N';
6997 l_stmv_tbl(l_strm_index).date_working := SYSDATE;
6998
6999 --Added by bkatraga for bug 5704245
7000 l_stmv_tbl(l_strm_index).transaction_number := p_trx_number;
7001 --end bkatraga
7002
7003 END IF; -- end of check for new stream record
7004
7005 -- STEP 2(c)
7006 ----------------------------------------------------
7007 -- Get the Stream Elements of of LOAN Asset lines.
7008 -- Only Elements ON or BEFORE the TERMINATION DATE of lines are copied
7009 ----------------------------------------------------
7010 l_sel_index := l_sel_index + 1;
7011 l_selv_tbl(l_sel_index).parent_index := l_strm_index;
7012 l_selv_tbl(l_sel_index).stream_element_date := streams_rec.stream_element_date;
7013 l_selv_tbl(l_sel_index).amount := streams_rec.amount;
7014 l_selv_tbl(l_sel_index).se_line_number := streams_rec.se_line_number;
7015 --Added by vdamerla for bug 6082209
7016 l_selv_tbl(l_sel_index).comments := streams_rec.comments;
7017 --end bkatraga
7018 -- vdamerla End Forward Ported Bug 6082209
7019
7020
7021
7022 END LOOP; -- END of FOR for Streams
7023 END LOOP; -- END of For loop over Terminated loan assets
7024 END IF; --Added by bkatraga for bug 6082209
7025
7026 -- STEP 3
7027 IF l_stmv_tbl.COUNT > 0 THEN
7028 -- Call the API to bulk insert data into streams and stream elements
7029 OKL_STREAMS_PUB.CREATE_STREAMS_PERF(p_api_version
7030 , p_init_msg_list
7031 , x_return_status
7032 , x_msg_count
7033 , x_msg_data
7034 , l_stmv_tbl
7035 , l_selv_tbl
7036 , lx_stmv_tbl
7037 , lx_selv_tbl);
7038 IF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7039 RAISE OKL_API.G_EXCEPTION_ERROR;
7040 ELSIF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
7041 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7042 END IF;
7043 END IF; -- l_stmv_tbl count check
7044
7045 END IF; -- END IF p_source_call check
7046
7047 -- End of API
7048 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
7049 EXCEPTION
7050 WHEN OKL_API.G_EXCEPTION_ERROR THEN
7051 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7052 p_api_name => l_api_name,
7053 p_pkg_name => g_pkg_name,
7054 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
7055 x_msg_count => x_msg_count,
7056 x_msg_data => x_msg_data,
7057 p_api_type => g_api_type);
7058 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7059 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7060 p_api_name => l_api_name,
7061 p_pkg_name => g_pkg_name,
7062 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
7063 x_msg_count => x_msg_count,
7064 x_msg_data => x_msg_data,
7065 p_api_type => g_api_type);
7066 WHEN OTHERS THEN
7067 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7068 p_api_name => l_api_name,
7069 p_pkg_name => g_pkg_name,
7070 p_exc_name => 'OTHERS',
7071 x_msg_count => x_msg_count,
7072 x_msg_data => x_msg_data,
7073 p_api_type => g_api_type);
7074 END RECREATE_TMT_LN_STRMS;
7075 -- srsreeni - Bug#5699923 - Added - End
7076
7077 -- Start modification 11i10 bakuchib
7078 Procedure process_streams(
7079 p_api_version IN NUMBER,
7080 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
7081 x_return_status OUT NOCOPY VARCHAR2,
7082 x_msg_count OUT NOCOPY NUMBER,
7083 x_msg_data OUT NOCOPY VARCHAR2,
7084 p_chr_id IN VARCHAR2,
7085 p_process_yn IN VARCHAR2,
7086 p_chr_yields IN yields_rec_type,
7087 p_source_call IN VARCHAR2) AS
7088
7089 l_api_name CONSTANT VARCHAR2(30) := 'PROCESS_STREAMS';
7090 l_api_version CONSTANT NUMBER := 1;
7091 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
7092
7093 pl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
7094 pl_khrv_rec okl_contract_pvt.khrv_rec_type;
7095 xl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
7096 xl_khrv_rec okl_contract_pub.khrv_rec_type;
7097
7098 l_chr_yields yields_rec_type;
7099
7100 l_trxH_in_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
7101 l_trxH_out_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
7102 -- Code for bulk update -02/18/2004 - HKPATEL
7103 l_id_tbl okl_streams_util.NumberTabTyp;
7104 -- Code for bulk update ends here -02/18/2004 - HKPATEL
7105
7106
7107 Cursor ylds_csr( chrId NUMBER ) IS
7108 Select 'N' exist
7109 from okl_k_headers_full_v
7110 where id = chrId
7111 and pre_tax_yield is NULL
7112 and after_tax_yield is NULL
7113 and pre_tax_irr is NULL
7114 and after_tax_irr is NULL
7115 and implicit_interest_rate is NULL;
7116 -- get rates and line id for a financed fee
7117 CURSOR get_fin_lne_csr(p_chr_id NUMBER)
7118 IS
7119 SELECT DISTINCT cle.id line_id,
7120 lev.rate
7121 FROM okl_sif_ret_levels lev,
7122 okl_sif_rets ret,
7123 okl_stream_interfaces sif,
7124 okl_sif_lines line,
7125 okc_k_lines_b cle,
7126 okl_k_lines kle,
7127 okc_line_styles_b lse,
7128 okl_sif_fees fee
7129 WHERE lev.sir_id = ret.id
7130 AND lev.level_type = 'Payment'
7131 AND ret.transaction_number = sif.transaction_number
7132 AND sif.id = line.sif_id
7133 AND line.sif_id = fee.sif_id
7134 AND line.id = fee.sil_id
7135 AND line.kle_id = cle.id
7136 AND cle.lse_id = lse.id
7137 AND lse.lty_code = 'FEE'
7138 AND cle.id = kle.id
7139 AND kle.fee_type = 'FINANCED'
7140 AND fee.fee_index_number = lev.index_number
7141 AND line.sil_type = 'SGN'
7142 AND sif.transaction_number IN (SELECT MAX(transaction_number)
7143 FROM okl_stream_interfaces
7144 WHERE khr_id = p_chr_id
7145 AND purpose_code IS NULL);
7146 -- get payment levels for line
7147 CURSOR get_level_csr(p_chr_id NUMBER,
7148 p_cle_id NUMBER)
7149 IS
7150 SELECT sll.id sll_id,
7151 slh.id slh_id
7152 FROM okc_rule_groups_b rgp,
7153 okc_rules_b slh,
7154 okc_rules_b sll
7155 WHERE rgp.dnz_chr_id = p_chr_id
7156 AND rgp.rgd_code = 'LALEVL'
7157 AND rgp.cle_id = p_cle_id
7158 AND rgp.id = slh.rgp_id
7159 AND sll.rgp_id = slh.rgp_id
7160 AND sll.dnz_chr_id = slh.dnz_chr_id
7161 AND slh.dnz_chr_id = rgp.dnz_chr_id
7162 AND sll.object2_id1 = slh.id
7163 AND sll.object2_id2 = '#'
7164 AND sll.jtot_object2_code = 'OKL_STRMHDR';
7165 -- validate the contract is reporting product or not
7166 CURSOR validate_pdt_csr(p_chr_id NUMBER)
7167 IS
7168 SELECT 'Y'
7169 FROM DUAL
7170 WHERE EXISTS (SELECT 1
7171 FROM okl_k_headers khr,
7172 okl_products_v pdt
7173 WHERE khr.id = p_chr_id
7174 AND khr.pdt_id = pdt.id
7175 AND pdt.reporting_pdt_id IS NOT NULL);
7176 -- Check for reporting streams for non MGAPP prodcut
7177 -- Modified by kthiruva on 17-Nov-2005.
7178 -- Streams having an SGN_CODE = 'INTC' should not be historized
7179 -- Bug 4737555 - Start of Changes
7180 CURSOR non_mg_rep_csr(p_chr_id NUMBER)
7181 IS
7182 SELECT str.id strm_id,
7183 str.kle_id,
7184 str.sty_id sty_id,
7185 str.sgn_code sgn_code,
7186 str.sgn_code alloc_yn,
7187 str.comments alloc_basis,
7188 str.transaction_number trn_num,
7189 str.purpose_code,
7190 str.say_code,
7191 str.active_yn
7192 FROM okl_streams str
7193 WHERE str.khr_id = p_chr_id
7194 AND str.purpose_code = 'REPORT'
7195 AND str.say_code = 'CURR'
7196 AND str.sgn_code NOT IN ('INTC','LATE_CALC') -- bug 6472228
7197 AND (NVL( str.kle_id, -1) = -1 OR
7198 str.kle_id IN (SELECT kle.id
7199 FROM okl_k_lines_full_v kle,
7200 okc_line_styles_b lse,
7201 okc_statuses_b sts
7202 WHERE KLE.LSE_ID = LSE.ID
7203 AND kle.dnz_chr_id = p_chr_id
7204 AND sts.code = kle.sts_code
7205 AND lse.lty_code NOT IN ('INSURANCE')));
7206 -- Bug 4737555 - End of Changes
7207
7208 lv_pdt_no_rep VARCHAR2(3) := 'N';
7209 j NUMBER := 0;
7210 m_stmv_tbl okl_streams_pub.stmv_tbl_type;
7211 mx_stmv_tbl okl_streams_pub.stmv_tbl_type;
7212 ylds_rec ylds_csr%ROWTYPE;
7213
7214 l_strm_rec strm_csr%ROWTYPE;
7215 l_stmv_tbl okl_streams_pub.stmv_tbl_type;
7216 x_stmv_tbl okl_streams_pub.stmv_tbl_type;
7217
7218 i NUMBER;
7219 l_tcnCode VARCHAR2(256);
7220 l_transaction_type VARCHAR2(256) := 'Miscellaneous';--'Generate Yields';
7221
7222 l_fnd_rec fnd_lookups_csr%ROWTYPE;
7223 l_trx_rec trx_csr%ROWTYPE;
7224 l_hdr_rec l_hdr_csr%ROWTYPE;
7225
7226 l_strm_name_rec strm_name_csr%ROWTYPE;
7227 l_strms_orig_rec strms_csr%ROWTYPE;
7228 l_strms_rep_rec strms_csr%ROWTYPE;
7229 l_strm_name VARCHAR2(256);
7230
7231 l_chr_id NUMBER := TO_NUMBER(p_chr_id);
7232
7233 l_process_yn VARCHAR2(1) := 'N';
7234 l_orig_yn VARCHAR2(1) := 'N';
7235 l_rep_yn VARCHAR2(1) := 'N';
7236 l_mgaap_yn VARCHAR2(1) := 'N';
7237
7238 c_num VARCHAR2(256);
7239 -- Start of modification for bug#3320656 -- bakuchib
7240 -- Start of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
7241 l_rulv_rec OKL_RULE_PUB.rulv_rec_type;
7242 lx_rulv_rec OKL_RULE_PUB.rulv_rec_type;
7243 r_rulv_rec OKL_RULE_PUB.rulv_rec_type;
7244 rx_rulv_rec OKL_RULE_PUB.rulv_rec_type;
7245 -- End of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
7246 -- End of modification for bug#3320656 -- bakuchib
7247 --Added by kthiruva on 11-Aug-2005
7248 --Bug 4541302 - Start of Changes
7249 CURSOR get_stream_req_status_csr(p_khr_id NUMBER)
7250 IS
7251 SELECT * FROM (
7252 SELECT SIF.SIS_CODE REQUEST_STATUS
7253 FROM OKL_STREAM_INTERFACES SIF
7254 WHERE SIF.KHR_ID = p_khr_id
7255 AND SIF.PURPOSE_CODE = 'REPORT'
7256 ORDER BY SIF.TRANSACTION_NUMBER DESC)
7257 WHERE ROWNUM < 2;
7258
7259 -- To get the reporting request transaction number
7260 CURSOR get_rep_trans_num(p_khr_id NUMBER)
7261 IS
7262 SELECT * FROM (
7263 SELECT SIF.TRANSACTION_NUMBER TRANSACTION_NUMBER
7264 FROM OKL_STREAM_INTERFACES SIF
7265 WHERE SIF.KHR_ID = p_khr_id
7266 AND SIF.PURPOSE_CODE = 'REPORT'
7267 ORDER BY SIF.TRANSACTION_NUMBER DESC)
7268 WHERE ROWNUM < 2;
7269
7270 l_report_req_status VARCHAR2(100);
7271 l_message VARCHAR2(30);
7272 l_status NUMBER := 0;
7273 l_timeout NUMBER := 120;
7274 l_alert_name VARCHAR2(20) := 'REP_PROD_COMPLETE';
7275 l_rep_message VARCHAR2(30) := 'PROCESSED';
7276 --Bug 4541302 - End of Changes
7277
7278
7279 BEGIN
7280 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7281 -- Call start_activity to create savepoint, check compatibility
7282 -- and initialize message list
7283 x_return_status := OKL_API.START_ACTIVITY (
7284 l_api_name
7285 ,p_init_msg_list
7286 ,'_PVT'
7287 ,x_return_status);
7288 -- Check if activity started successfully
7289 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7290 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7291 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7292 RAISE OKL_API.G_EXCEPTION_ERROR;
7293 END IF;
7294 IF p_process_yn = OKL_API.G_TRUE Then
7295 l_process_yn := 'Y';
7296 END IF;
7297
7298 --Added by kthiruva for Debug Logging
7299 write_to_log('Just inside process_streams ');
7300
7301 FOR get_fin_lne_rec IN get_fin_lne_csr(p_chr_id => p_chr_id) LOOP
7302 FOR get_level_rec IN get_level_csr(p_chr_id => p_chr_id,
7303 p_cle_id => get_fin_lne_rec.line_id) LOOP
7304 r_rulv_rec.id := get_level_rec.slh_id;
7305 r_rulv_rec.rule_information2 := 'IMPL_INTEREST_RATE';
7306 -- Start of modification for bug#3320656 -- bakuchib
7307 -- Start of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
7308 OKL_RULE_PUB.update_rule(
7309 -- End of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
7310 -- end of modification for bug#3320656 -- bakuchib
7311 p_api_version => p_api_version,
7312 p_init_msg_list => p_init_msg_list,
7313 x_return_status => x_return_status,
7314 x_msg_count => x_msg_count,
7315 x_msg_data => x_msg_data,
7316 p_rulv_rec => r_rulv_rec,
7317 p_edit_mode => 'N',
7318 x_rulv_rec => rx_rulv_rec);
7319 l_rulv_rec.id := get_level_rec.sll_id;
7320 l_rulv_rec.rule_information13 := get_fin_lne_rec.rate;
7321 -- Start of modification for bug#3320656 -- bakuchib
7322 -- Start of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
7323 OKL_RULE_PUB.update_rule(
7324 -- End of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
7325 -- end of modification for bug#3320656 -- bakuchib
7326 p_api_version => p_api_version,
7327 p_init_msg_list => p_init_msg_list,
7328 x_return_status => x_return_status,
7329 x_msg_count => x_msg_count,
7330 x_msg_data => x_msg_data,
7331 p_rulv_rec => l_rulv_rec,
7332 p_edit_mode => 'N',
7333 x_rulv_rec => lx_rulv_rec);
7334 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7335 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
7336 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7337 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
7338 END IF;
7339 END LOOP;
7340 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7341 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
7342 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7343 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
7344 END IF;
7345 END LOOP;
7346 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7347 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7348 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7349 RAISE OKL_API.G_EXCEPTION_ERROR;
7350 END IF;
7351 -- getting the header info
7352 OPEN l_hdr_csr( p_chr_id );
7353 FETCH l_hdr_csr INTO l_hdr_rec;
7354 CLOSE l_hdr_csr;
7355 -- Checking if the normal streams which are in working status
7356 OPEN strms_csr(p_chr_id, 'WORK', 'ORIGIN');
7357 FETCH strms_csr INTO l_strms_orig_rec;
7358 IF strms_csr%FOUND THEN
7359 l_orig_yn := 'Y';
7360 END IF;
7361 CLOSE strms_csr;
7362 -- bug# 2763523
7363 okl_context.set_okc_org_context(l_hdr_rec.authoring_org_id,l_hdr_rec.inv_organization_id);
7364 IF l_hdr_rec.report_pdt_id <> -1 THEN
7365 -- Checking if the Reporting streams which are in working status
7366 OPEN strms_csr(p_chr_id, 'WORK', 'REPORT');
7367 FETCH strms_csr into l_strms_rep_rec;
7368 IF strms_csr%FOUND THEN
7369 l_rep_yn := 'Y';
7370 END IF;
7371 CLOSE strms_csr;
7372 l_mgaap_yn := 'Y';
7373 END IF;
7374 IF ((l_mgaap_yn='N' AND l_process_yn='N') OR
7375 (l_mgaap_yn='Y' AND l_orig_yn='N' AND l_rep_yn='N' AND l_process_yn='N')) Then
7376 RETURN;
7377 END IF;
7378 IF ((l_orig_yn='Y' ) AND (l_process_yn='Y' )) THEN
7379 l_chr_yields.pre_tax_yield := p_chr_yields.PRE_TAX_YIELD;
7380 l_chr_yields.after_tax_yield := p_chr_yields.AFTER_TAX_YIELD;
7381 l_chr_yields.pre_tax_irr := p_chr_yields.PRE_TAX_IRR;
7382 l_chr_yields.after_tax_irr := p_chr_yields.AFTER_TAX_IRR;
7383 l_chr_yields.implicit_interest_rate := p_chr_yields.IMPLICIT_INTEREST_RATE;
7384 l_chr_yields.sub_pre_Tax_yield := p_chr_yields.sub_pre_Tax_yield;
7385 l_chr_yields.sub_after_tax_yield := p_chr_yields.sub_after_tax_yield;
7386 l_chr_yields.sub_pre_tax_irr := p_chr_yields.sub_pre_tax_irr;
7387 l_chr_yields.sub_after_tax_irr := p_chr_yields.sub_after_tax_irr;
7388 l_chr_yields.sub_impl_interest_rate := p_chr_yields.sub_impl_interest_rate;
7389 END IF;
7390 OPEN ylds_csr(p_chr_id);
7391 FETCH ylds_csr into ylds_rec;
7392 CLOSE ylds_csr;
7393 --Modified by kthiruva on 08-Feb-2005
7394 --Ensure that the reporting producti does not update the contract yields
7395 --Bug 3955561 - Start of Changes
7396 -- IF NOT (l_orig_yn='Y' AND l_rep_yn='Y' AND ylds_rec.exist = 'Y' ) THEN
7397 IF not(l_orig_yn='N' AND l_rep_yn='Y' AND ylds_rec.exist = 'N' ) THEN
7398 --Bug 3955561 - End of Changes
7399 --Added by kthiruva for Logging Purposes
7400 write_to_log('Before the call to update_contract_yields');
7401
7402 update_contract_yields(
7403 p_api_version => p_api_version,
7404 p_init_msg_list => p_init_msg_list,
7405 x_return_status => x_return_status,
7406 x_msg_count => x_msg_count,
7407 x_msg_data => x_msg_data,
7408 p_chr_id => p_chr_id,
7409 p_chr_yields => l_chr_yields);
7410
7411 --Added by kthiruva for Logging Purposes
7412 write_to_log('After the call to update_contract_yields, the return status is :'||x_return_status);
7413
7414 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7415 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7416 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7417 RAISE OKL_API.G_EXCEPTION_ERROR;
7418 END IF;
7419 END IF;
7420 IF p_source_call = 'ESG' THEN
7421 --Added by kthiruva for Debugging
7422 write_to_log('The source call is ESG');
7423 IF l_mgaap_yn = 'Y' THEN
7424 IF l_process_yn='N' THEN
7425 i := 0;
7426 FOR l_strms_orig_rec in strms_csr ( p_chr_id, 'WORK', 'ORIGIN') LOOP
7427 i := i + 1;
7428 l_stmv_tbl(i).id := l_strms_orig_rec.STRM_ID;
7429 l_stmv_tbl(i).sty_id := l_strms_orig_rec.STY_ID;
7430 l_stmv_tbl(i).khr_id := p_chr_id;
7431 l_stmv_tbl(i).sgn_code := l_strms_orig_rec.SGN_CODE;
7432 l_stmv_tbl(i).transaction_number := l_strms_orig_rec.TRN_NUM;
7433 END LOOP;
7434 FOR l_strms_rep_rec in strms_csr ( p_chr_id, 'WORK', 'REPORT') LOOP
7435 i := i + 1;
7436 l_stmv_tbl(i).id := l_strms_rep_rec.STRM_ID;
7437 l_stmv_tbl(i).sty_id := l_strms_rep_rec.STY_ID;
7438 l_stmv_tbl(i).khr_id := p_chr_id;
7439 l_stmv_tbl(i).sgn_code := l_strms_rep_rec.SGN_CODE;
7440 l_stmv_tbl(i).transaction_number := l_strms_rep_rec.TRN_NUM;
7441 END LOOP;
7442 IF i > 0 THEN
7443 Okl_Streams_pub.delete_streams(
7444 p_api_version => p_api_version,
7445 p_init_msg_list => p_init_msg_list,
7446 x_return_status => x_return_status,
7447 x_msg_count => x_msg_count,
7448 x_msg_data => x_msg_data,
7449 p_stmv_tbl => l_stmv_tbl);
7450
7451 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7452 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7453 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7454 RAISE OKL_API.G_EXCEPTION_ERROR;
7455 END IF;
7456 END IF;
7457 RETURN;
7458 -- Start for bug#3388812 modification - BAKUCHIB
7459 -- ELSIF (l_orig_yn <> l_rep_yn ) THEN -- when (orig=Y and rep=N) OR (orig=N and rep=Y)
7460 -- RETURN;
7461 -- End for bug#3388812 modification - BAKUCHIB
7462 ELSIF l_rep_yn='Y' THEN
7463 -- gboomina BUG#4508077 passing p_source_call as a parameter
7464
7465 --Added by kthiruva for Debug Purposes
7466 write_to_log('Value of l_rep_yn is Y');
7467 write_to_log('Before the call to Adjust Streams');
7468
7469 adjust_streams(p_api_version => p_api_version,
7470 p_init_msg_list => p_init_msg_list,
7471 x_return_status => x_return_status,
7472 x_msg_count => x_msg_count,
7473 x_msg_data => x_msg_data,
7474 p_chr_id => p_chr_id,
7475 p_purpose => 'REPORT',
7476 p_source_call => p_source_call);
7477
7478 --Added by kthiruva for Debug Purposes
7479 write_to_log('After the call to adjust_streams, the return status is :'||x_return_status);
7480
7481 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7482 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7483 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7484 RAISE OKL_API.G_EXCEPTION_ERROR;
7485 END IF;
7486 END IF;
7487 END If;
7488 IF l_orig_yn = 'Y' THEN
7489 -- gboomina BUG#4508077 passing p_source_call as a parameter
7490 --Added by kthiruva for Debug Purposes
7491 write_to_log('Value of l_orig_yn is Y');
7492 write_to_log('Before the call to Adjust Streams');
7493 adjust_streams(p_api_version => p_api_version,
7494 p_init_msg_list => p_init_msg_list,
7495 x_return_status => x_return_status,
7496 x_msg_count => x_msg_count,
7497 x_msg_data => x_msg_data,
7498 p_chr_id => p_chr_id,
7499 p_purpose => 'ORIGIN',
7500 p_source_call => p_source_call);
7501
7502 --Added by kthiruva for Debug Purposes
7503 write_to_log('After the call to adjust_streams, the return status is :'||x_return_status);
7504
7505 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7506 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7507 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7508 RAISE OKL_API.G_EXCEPTION_ERROR;
7509 END IF;
7510 END IF;
7511 ELSIF p_source_call = 'ISG' THEN
7512 --Added by kthiruva for Debugging
7513 write_to_log('The source call is ISG');
7514
7515 IF l_mgaap_yn = 'Y' THEN
7516 IF l_process_yn='N' THEN
7517 i := 0;
7518 FOR l_strms_orig_rec in strms_csr ( p_chr_id, 'WORK', 'ORIGIN') LOOP
7519 i := i + 1;
7520 l_stmv_tbl(i).id := l_strms_orig_rec.STRM_ID;
7521 l_stmv_tbl(i).sty_id := l_strms_orig_rec.STY_ID;
7522 l_stmv_tbl(i).khr_id := p_chr_id;
7523 l_stmv_tbl(i).sgn_code := l_strms_orig_rec.SGN_CODE;
7524 l_stmv_tbl(i).transaction_number := l_strms_orig_rec.TRN_NUM;
7525 END LOOP;
7526 FOR l_strms_rep_rec in strms_csr ( p_chr_id, 'WORK', 'REPORT') LOOP
7527 i := i + 1;
7528 l_stmv_tbl(i).id := l_strms_rep_rec.STRM_ID;
7529 l_stmv_tbl(i).sty_id := l_strms_rep_rec.STY_ID;
7530 l_stmv_tbl(i).khr_id := p_chr_id;
7531 l_stmv_tbl(i).sgn_code := l_strms_rep_rec.SGN_CODE;
7532 l_stmv_tbl(i).transaction_number := l_strms_rep_rec.TRN_NUM;
7533 END LOOP;
7534 IF i > 0 THEN
7535 Okl_Streams_pub.delete_streams(
7536 p_api_version => p_api_version,
7537 p_init_msg_list => p_init_msg_list,
7538 x_return_status => x_return_status,
7539 x_msg_count => x_msg_count,
7540 x_msg_data => x_msg_data,
7541 p_stmv_tbl => l_stmv_tbl);
7542
7543 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7544 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7545 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7546 RAISE OKL_API.G_EXCEPTION_ERROR;
7547 END IF;
7548 END IF;
7549 RETURN;
7550 -- Start for bug#3388812 modification - BAKUCHIB
7551 -- ELSIF (l_orig_yn <> l_rep_yn ) THEN -- when (orig=Y and rep=N) OR (orig=N and rep=Y)
7552 -- RETURN;
7553 -- End for bug#3388812 modification - BAKUCHIB
7554 -- gboomina BUG#4508077 passing p_source_call as a parameter
7555 ELSIF l_rep_yn='Y' THEN
7556 adjust_streams(p_api_version => p_api_version,
7557 p_init_msg_list => p_init_msg_list,
7558 x_return_status => x_return_status,
7559 x_msg_count => x_msg_count,
7560 x_msg_data => x_msg_data,
7561 p_chr_id => p_chr_id,
7562 p_purpose => 'REPORT',
7563 p_source_call => p_source_call);
7564
7565 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7566 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7567 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7568 RAISE OKL_API.G_EXCEPTION_ERROR;
7569 END IF;
7570 -- gboomina BUG#4508077 passing p_source_call as a parameter
7571 adjust_streams(p_api_version => p_api_version,
7572 p_init_msg_list => p_init_msg_list,
7573 x_return_status => x_return_status,
7574 x_msg_count => x_msg_count,
7575 x_msg_data => x_msg_data,
7576 p_chr_id => p_chr_id,
7577 p_purpose => 'ORIGIN',
7578 p_source_call => p_source_call);
7579
7580 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7581 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7582 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7583 RAISE OKL_API.G_EXCEPTION_ERROR;
7584 END IF;
7585 END IF;
7586 ELSE
7587 write_to_log('Before the call to Adjust Streams');
7588 -- gboomina BUG#4508077 passing p_source_call as a parameter
7589 adjust_streams(p_api_version => p_api_version,
7590 p_init_msg_list => p_init_msg_list,
7591 x_return_status => x_return_status,
7592 x_msg_count => x_msg_count,
7593 x_msg_data => x_msg_data,
7594 p_chr_id => p_chr_id,
7595 p_purpose => 'ORIGIN',
7596 p_source_call => p_source_call);
7597
7598 --Added by kthiruva for Debug Purposes
7599 write_to_log('After the call to adjust_streams, the return status is :'||x_return_status);
7600
7601 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7602 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7603 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7604 RAISE OKL_API.G_EXCEPTION_ERROR;
7605 END IF;
7606 END If;
7607 END IF;
7608 -- Start for bug#3388812 modification - BAKUCHIB
7609 -- We are explicitly making the non MGAAP streams to History if the product
7610 -- is non MGAPP.
7611 OPEN validate_pdt_csr(p_chr_id => p_chr_id);
7612 FETCH validate_pdt_csr INTO lv_pdt_no_rep;
7613 CLOSE validate_pdt_csr;
7614 IF lv_pdt_no_rep = 'N' THEN
7615 FOR non_mg_rep_rec IN non_mg_rep_csr(p_chr_id => p_chr_id) LOOP
7616 j := j + 1;
7617 /* Commeneted for Bulk update by HKPATEL -02/28/04
7618 m_stmv_tbl(j).id := non_mg_rep_rec.strm_id;
7619 m_stmv_tbl(j).say_code := 'HIST';
7620 m_stmv_tbl(j).active_yn := 'N';
7621 m_stmv_tbl(j).date_history := sysdate;
7622 */
7623
7624 l_id_tbl(j) := non_mg_rep_rec.strm_id;
7625 END LOOP;
7626 IF (l_id_tbl.COUNT > 0) THEN
7627
7628 BEGIN
7629 --Added by kthiruva for Debugging
7630 write_to_log('Prior to the call to historing current streams');
7631 FORALL i IN l_id_tbl.FIRST..l_id_tbl.LAST
7632 UPDATE OKL_STREAMS
7633 SET say_code = 'HIST',
7634 active_yn = 'N',
7635 date_history = sysdate
7636 WHERE ID = l_id_tbl(i);
7637 write_to_log('Streams historised successfully');
7638
7639 EXCEPTION
7640 WHEN OTHERS THEN
7641 okl_api.set_message (p_app_name => G_APP_NAME,
7642 p_msg_name => G_DB_ERROR,
7643 p_token1 => G_PROG_NAME_TOKEN,
7644 p_token1_value => l_api_name,
7645 p_token2 => G_SQLCODE_TOKEN,
7646 p_token2_value => sqlcode,
7647 p_token3 => G_SQLERRM_TOKEN,
7648 p_token3_value => sqlerrm);
7649 l_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
7650 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7651 END;
7652 /* Commented for Bulk Update - HKPATEL - 02/18/2004
7653 IF (m_stmv_tbl.COUNT > 0) THEN
7654 okl_streams_pub.update_streams(
7655 p_api_version => p_api_version,
7656 p_init_msg_list => p_init_msg_list,
7657 x_return_status => x_return_status,
7658 x_msg_count => x_msg_count,
7659 x_msg_data => x_msg_data,
7660 p_stmv_tbl => m_stmv_tbl,
7661 x_stmv_tbl => mx_stmv_tbl);
7662 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7663 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7664 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7665 raise OKL_API.G_EXCEPTION_ERROR;
7666 END IF;
7667 */
7668 END IF;
7669 END IF;
7670 -- gboomina BUG#4508077 changes start
7671 -- for main product
7672 IF l_orig_yn = 'Y' THEN
7673 --Added by kthiruva for Debugging
7674 write_to_log('Value of l_orig_yn = Y');
7675 write_to_log('Prior to the call to update_rvi_amount');
7676
7677 update_rvi_amount(p_api_version => p_api_version,
7678 p_init_msg_list => OKL_API.G_FALSE,
7679 p_chr_id => p_chr_id,
7680 p_purpose => 'ORIGIN',
7681 x_return_status => x_return_status,
7682 x_msg_count => x_msg_count,
7683 x_msg_data => x_msg_data);
7684
7685 --Added by kthiruva for Debugging
7686 write_to_log('After the call to Update_rvi_amount, the return status is :'||x_return_status);
7687 -- raise appropriate exceptions depending on the return status
7688 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7689 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7690 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7691 RAISE OKL_API.G_EXCEPTION_ERROR;
7692 END IF;
7693 END IF;
7694 -- for reporting product
7695 IF l_rep_yn = 'Y' THEN
7696 --Added by kthiruva for Debugging
7697 write_to_log('Value of l_rep_yn = Y');
7698 write_to_log('Prior to the call to update_rvi_amount');
7699
7700 update_rvi_amount(p_api_version => p_api_version,
7701 p_init_msg_list => OKL_API.G_FALSE,
7702 p_chr_id => p_chr_id,
7703 p_purpose => 'REPORT',
7704 x_return_status => x_return_status,
7705 x_msg_count => x_msg_count,
7706 x_msg_data => x_msg_data);
7707
7708 --Added by kthiruva for Debugging
7709 write_to_log('After the call to Update_rvi_amount, the return status is :'||x_return_status);
7710 -- raise appropriate exceptions depending on the return status
7711 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7712 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7713 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7714 RAISE OKL_API.G_EXCEPTION_ERROR;
7715 END IF;
7716 END IF;
7717 -- gboomina BUG#4508077 changes end
7718 -- End for bug#3388812 modification - BAKUCHIB
7719 IF (x_return_status = Okl_Api.G_RET_STS_SUCCESS) THEN
7720 --PAGARG 25-Feb-2005 Bug 4037658 starts
7721 IF (p_source_call = 'ESG') THEN
7722 IF not (l_orig_yn='N' AND l_rep_yn='Y') THEN
7723 --Added by kthiruva on 11-Aug-2005
7724 --Bug 4541302 - Start of Changes
7725 --1)If the regular product has a Multi-GAAP product then, we check to see if the Reporting
7726 -- Product's stream generation request is already completed.
7727 --2)If yes, we update the contract status
7728 --3)If no and the request is still being processed, we register an alert and wait on the alert.
7729 --4)The alert would be signalled by the reporting product once its stream generation request
7730 -- is complete.
7731 --5)Once the alert is received, the regular product can update the contract status to complete.
7732 --6)If the reporting product's stream generation request does not complete, and there is no
7733 -- alert signalled, then the contract status is not updated.
7734 IF l_mgaap_yn = 'Y' THEN
7735 --Fetching the request status of the Reporting Product
7736 OPEN get_stream_req_status_csr(p_chr_id);
7737 FETCH get_stream_req_status_csr INTO l_report_req_status;
7738 CLOSE get_stream_req_status_csr;
7739
7740 --When the reporting request has completed with the below statuses, we do not want to update
7741 --the contract status. We therefore, update l_status to 1.
7742 IF l_report_req_status IN ('PROCESSING_FAILED','PROCESS_ABORTED','SERVER_NA','TIME_OUT') THEN
7743 l_status := 1;
7744 END IF;
7745
7746 IF(l_report_req_status NOT IN('PROCESS_COMPLETE', 'PROCESS_COMPLETE_ERRORS','PROCESSING_FAILED'
7747 ,'PROCESS_ABORTED','SERVER_NA','TIME_OUT')) THEN
7748
7749 --Fetching the value of the time out variable
7750 l_timeout := FND_PROFILE.value('OKL_STREAMS_TIME_OUT');
7751 l_timeout := l_timeout * 60;
7752
7753 OPEN get_rep_trans_num(p_chr_id);
7754 FETCH get_rep_trans_num INTO l_alert_name;
7755 CLOSE get_rep_trans_num;
7756
7757 DBMS_ALERT.REGISTER(l_alert_name);
7758 DBMS_ALERT.WAITONE(l_alert_name,l_message,l_status,l_timeout);
7759 DBMS_ALERT.REMOVE(l_alert_name);
7760
7761 IF l_status = 1 THEN
7762 --Fetching the request status of the Reporting Product
7763 OPEN get_stream_req_status_csr(p_chr_id);
7764 FETCH get_stream_req_status_csr INTO l_report_req_status;
7765 CLOSE get_stream_req_status_csr;
7766 END IF;
7767 END IF;
7768 END IF;
7769
7770 IF(l_status = 0 OR (l_report_req_status IN('PROCESS_COMPLETE', 'PROCESS_COMPLETE_ERRORS'))) THEN
7771 print( l_api_name, 'updating the status');
7772 --Added by kthiruva for Debugging
7773 write_to_log('Prior to the call to update_contract_status');
7774 okl_contract_status_pub.update_contract_status(
7775 l_api_version,
7776 p_init_msg_list,
7777 x_return_status,
7778 x_msg_count,
7779 x_msg_data,
7780 'COMPLETE',
7781 p_chr_id );
7782 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7783 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7784 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7785 RAISE OKL_API.G_EXCEPTION_ERROR;
7786 END IF;
7787 --Added by kthiruva for Debugging
7788 write_to_log('After the call to update_contract_status, return status is :'||x_return_status);
7789
7790 --call to cascade status on to lines
7791 OKL_CONTRACT_STATUS_PVT.cascade_lease_status(
7792 p_api_version => l_api_version,
7793 p_init_msg_list => p_init_msg_list,
7794 x_return_status => x_return_status,
7795 x_msg_count => x_msg_count,
7796 x_msg_data => x_msg_data,
7797 p_chr_id => l_chr_id);
7798 --Added by kthiruva for Debugging
7799 write_to_log('After the call to cascade_lease_status, return status is :'||x_return_status);
7800
7801 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7802 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7803 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7804 RAISE OKL_API.G_EXCEPTION_ERROR;
7805 END IF;
7806 --srsreeni Bug6011651 starts
7807 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
7808 p_api_version => l_api_version,
7809 p_init_msg_list => p_init_msg_list,
7810 x_return_status => x_return_status,
7811 x_msg_count => x_msg_count,
7812 x_msg_data => x_msg_data,
7813 p_khr_id => l_chr_id,
7814 p_prog_short_name => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
7815 p_progress_status => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_COMPLETE);
7816 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7817 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7818 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7819 RAISE OKL_API.G_EXCEPTION_ERROR;
7820 END IF;
7821 --srsreeni Bug6011651 ends
7822 END IF;
7823
7824 ELSE --For the if condition that checks if the request is of the regular product
7825 OPEN get_rep_trans_num(p_chr_id);
7826 FETCH get_rep_trans_num INTO l_alert_name;
7827 CLOSE get_rep_trans_num;
7828
7829 DBMS_ALERT.SIGNAL(l_alert_name,l_rep_message);
7830 COMMIT;
7831 -- Bug 4541302 - End of Changes
7832 END IF;
7833 ELSE
7834 --PAGARG 25-Feb-2005 Bug 4037658 ends
7835
7836 print( l_api_name, 'updating the status');
7837 okl_contract_status_pub.update_contract_status(
7838 l_api_version,
7839 p_init_msg_list,
7840 x_return_status,
7841 x_msg_count,
7842 x_msg_data,
7843 'COMPLETE',
7844 p_chr_id );
7845
7846 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7847 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7848 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7849 RAISE OKL_API.G_EXCEPTION_ERROR;
7850 END IF;
7851 --call to cascade status on to lines
7852 OKL_CONTRACT_STATUS_PVT.cascade_lease_status
7853 (p_api_version => l_api_version,
7854 p_init_msg_list => p_init_msg_list,
7855 x_return_status => x_return_status,
7856 x_msg_count => x_msg_count,
7857 x_msg_data => x_msg_data,
7858 p_chr_id => l_chr_id);
7859
7860 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7861 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7862 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7863 RAISE OKL_API.G_EXCEPTION_ERROR;
7864 END IF;
7865 --srsreeni Bug6011651 starts
7866 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
7867 p_api_version => l_api_version,
7868 p_init_msg_list => p_init_msg_list,
7869 x_return_status => x_return_status,
7870 x_msg_count => x_msg_count,
7871 x_msg_data => x_msg_data,
7872 p_khr_id => l_chr_id,
7873 p_prog_short_name => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
7874 p_progress_status => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_COMPLETE);
7875 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7876 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7877 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7878 RAISE OKL_API.G_EXCEPTION_ERROR;
7879 END IF;
7880 --srsreeni Bug6011651 ends
7881 END IF;
7882 --PAGARG 25-Feb-2005 Bug 4037658 starts
7883 END IF; -- for p_source_call = 'ESG' check
7884
7885 IF (p_source_call = 'ESG') THEN
7886 IF not (l_orig_yn='N' AND l_rep_yn='Y') THEN
7887 -- rebook contract.
7888 print( l_api_name, 'calling mass rebook api');
7889 --Added by kthiruva for Debugging
7890 write_to_log('Prior to the call to mass_rebook_after_yield'||x_return_status);
7891
7892 OKL_MASS_REBOOK_PUB.mass_rebook_after_yield(
7893 p_api_version => l_api_version
7894 ,p_init_msg_list => p_init_msg_list
7895 ,x_return_status => x_return_status
7896 ,x_msg_count => x_msg_count
7897 ,x_msg_data => x_msg_data
7898 ,p_chr_id => l_chr_id);
7899 --Added by kthiruva for Debugging
7900 write_to_log('After the call to mass_rebook_after_yield, return status is '||x_return_status);
7901
7902 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7903 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7904 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7905 RAISE OKL_API.G_EXCEPTION_ERROR;
7906 END IF;
7907
7908 -- after yield processing for an imported contract.
7909 print( l_api_name, 'calling import api');
7910 --Added by kthiruva for Debugging
7911 write_to_log('Prior to the call to contract_after_yield'||x_return_status);
7912 OKL_OPEN_INTERFACE_PVT.contract_after_yield(
7913 p_api_version => l_api_version
7914 ,p_init_msg_list => p_init_msg_list
7915 ,x_return_status => x_return_status
7916 ,x_msg_count => x_msg_count
7917 ,x_msg_data => x_msg_data
7918 ,p_chr_id => l_chr_id);
7919
7920 --Added by kthiruva for Debugging
7921 write_to_log('After the call to contract_after_yield, return status is '||x_return_status);
7922
7923 print( l_api_name, 'import api', x_return_status);
7924 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7925 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7926 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7927 RAISE OKL_API.G_EXCEPTION_ERROR;
7928 END IF;
7929 END IF;
7930 ELSE -- For Internal Stream generator
7931 --PAGARG 25-Feb-2005 Bug 4037658 ends
7932
7933 -- rebook contract.
7934 print( l_api_name, 'calling mass rebook api');
7935 OKL_MASS_REBOOK_PUB.mass_rebook_after_yield(
7936 p_api_version => l_api_version
7937 ,p_init_msg_list => p_init_msg_list
7938 ,x_return_status => x_return_status
7939 ,x_msg_count => x_msg_count
7940 ,x_msg_data => x_msg_data
7941 ,p_chr_id => l_chr_id);
7942
7943 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7944 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7945 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7946 RAISE OKL_API.G_EXCEPTION_ERROR;
7947 END IF;
7948
7949 -- after yield processing for an imported contract.
7950 print( l_api_name, 'calling import api');
7951 OKL_OPEN_INTERFACE_PVT.contract_after_yield(
7952 p_api_version => l_api_version
7953 ,p_init_msg_list => p_init_msg_list
7954 ,x_return_status => x_return_status
7955 ,x_msg_count => x_msg_count
7956 ,x_msg_data => x_msg_data
7957 ,p_chr_id => l_chr_id);
7958
7959 print( l_api_name, 'import api', x_return_status);
7960 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7961 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7962 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7963 RAISE OKL_API.G_EXCEPTION_ERROR;
7964 END IF;
7965 --PAGARG 25-Feb-2005 Bug 4037658
7966 END IF; -- for p_source_call = 'ESG' check
7967 --Added by vdamerla for bug 6344223
7968 OKL_SPLIT_ASSET_PVT.split_asset_after_yield(
7969 p_api_version => l_api_version
7970 ,p_init_msg_list => p_init_msg_list
7971 ,x_return_status => x_return_status
7972 ,x_msg_count => x_msg_count
7973 ,x_msg_data => x_msg_data
7974 ,p_chr_id => l_chr_id);
7975 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7976 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7977 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7978 RAISE OKL_API.G_EXCEPTION_ERROR;
7979 END IF;
7980 --end vdamerla for bug 6344223
7981
7982
7983 print( l_api_name, 'end', x_return_status);
7984 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
7985 EXCEPTION
7986 WHEN OKL_API.G_EXCEPTION_ERROR THEN
7987 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7988 p_api_name => l_api_name,
7989 p_pkg_name => g_pkg_name,
7990 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
7991 x_msg_count => x_msg_count,
7992 x_msg_data => x_msg_data,
7993 p_api_type => g_api_type);
7994 IF l_hdr_csr%ISOPEN THEN
7995 CLOSE l_hdr_csr;
7996 End If;
7997 IF get_fin_lne_csr%ISOPEN THEN
7998 CLOSE get_fin_lne_csr;
7999 End If;
8000 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
8001 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8002 p_api_name => l_api_name,
8003 p_pkg_name => g_pkg_name,
8004 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
8005 x_msg_count => x_msg_count,
8006 x_msg_data => x_msg_data,
8007 p_api_type => g_api_type);
8008
8009 If ( strms_csr%ISOPEN ) Then
8010 CLOSE strms_csr;
8011 End If;
8012
8013 IF l_hdr_csr%ISOPEN THEN
8014 CLOSE l_hdr_csr;
8015 End If;
8016 IF get_fin_lne_csr%ISOPEN THEN
8017 CLOSE get_fin_lne_csr;
8018 End If;
8019 when OTHERS then
8020 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8021 p_api_name => l_api_name,
8022 p_pkg_name => g_pkg_name,
8023 p_exc_name => 'OTHERS',
8024 x_msg_count => x_msg_count,
8025 x_msg_data => x_msg_data,
8026 p_api_type => g_api_type);
8027
8028 IF l_hdr_csr%ISOPEN THEN
8029 CLOSE l_hdr_csr;
8030 End If;
8031 IF get_fin_lne_csr%ISOPEN THEN
8032 CLOSE get_fin_lne_csr;
8033 End If;
8034 end process_streams;
8035 -- End modification 11i10 bakuchib
8036 -- Start modification 11i10 bakuchib
8037 PROCEDURE check_for_mandatory_streams(
8038 p_api_version IN NUMBER,
8039 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
8040 x_return_status OUT NOCOPY VARCHAR2,
8041 x_msg_count OUT NOCOPY NUMBER,
8042 x_msg_data OUT NOCOPY VARCHAR2,
8043 p_chr_id IN OKC_K_HEADERS_B.ID%TYPE,
8044 p_deal_type IN VARCHAR2,
8045 p_stream_types_tbl IN okl_create_streams_pub.csm_stream_types_tbl_type,
8046 x_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type) AS
8047 l_api_name VARCHAR2(256) := 'CHECK_FOR_MD_STRMS';
8048 i NUMBER;
8049 styid NUMBER;
8050 l_return_status VARCHAR2(1);
8051 j NUMBER;
8052 k NUMBER :=0;
8053 ln_dummy NUMBER := 0;
8054 ln_income NUMBER := 0;
8055 l_strm_name VARCHAR2(256) := OKL_API.G_MISS_CHAR;
8056 l_blnInclude VARCHAR2(3) := OKL_API.G_TRUE;
8057 l_blnhasfees VARCHAR2(3) := OKL_API.G_FALSE;
8058 l_blnhasfin VARCHAR2(3) := OKL_API.G_FALSE;
8059 TYPE l_streams_tbl_type IS TABLE OF VARCHAR2(256)
8060 INDEX BY BINARY_INTEGER;
8061 TYPE fin_id_tbl_type IS TABLE OF NUMBER
8062 INDEX BY BINARY_INTEGER;
8063 l_streams_tbl l_streams_tbl_type;
8064 l_fin_id_tbl fin_id_tbl_type;
8065 l_strm_type_id_tbl okl_strm_type_id_tbl_type;
8066 -- get Stream name
8067 CURSOR strm_name_csr (styid NUMBER)
8068 IS
8069 SELECT tl.name name,
8070 stm.stream_type_class stream_type_class,
8071 tl.description alloc_basis,
8072 stm.capitalize_yn capitalize_yn,
8073 stm.periodic_yn periodic_yn
8074 FROM okl_strm_type_b stm,
8075 okl_strm_type_tl tl
8076 WHERE tl.id = stm.id
8077 AND tl.language = 'US'
8078 AND stm.id = styid;
8079 --get finance strms
8080 -- nikshah -- Bug # 5484903 Fixed,
8081 -- Removed CURSOR c_finance_strm_csr
8082
8083 -- Get the stream type id
8084 CURSOR l_strmid_csr (strmName VARCHAR2)
8085 IS
8086 SELECT id styid
8087 FROM okl_strm_type_tl
8088 WHERE LANGUAGE = 'US'
8089 AND NAME = strmName;
8090 -- get the Contract line info
8091 CURSOR l_line_rec_csr(chrid NUMBER)
8092 IS
8093 SELECT cle.id
8094 FROM okc_k_lines_b cle,
8095 okc_line_styles_b lse,
8096 okc_statuses_b sts
8097 WHERE cle.dnz_chr_id = chrid
8098 AND cle.lse_id = lse.id
8099 AND lse.lty_code = 'FREE_FORM1'
8100 AND sts.code = cle.sts_code
8101 --Start of bug#3121708 modification BAKUCHIB
8102 AND sts.ste_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED');
8103 --End of bug#3121708 modification BAKUCHIB
8104 -- Get all valid fee lines
8105 CURSOR l_fee_type_csr ( chrId NUMBER, feeId NUMBER ) IS
8106 SELECT kle.fee_type
8107 FROM okl_k_lines kle,
8108 okc_k_lines_b cle,
8109 okc_line_styles_b lse,
8110 okc_statuses_b sts
8111 WHERE cle.lse_id = lse.id
8112 AND lse.lty_code = 'FEE'
8113 AND cle.dnz_chr_id = chrid
8114 AND cle.id = kle.id
8115 AND kle.id = feeId
8116 AND sts.code = cle.sts_code
8117 --Start of bug#3121708 modification BAKUCHIB
8118 AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED');
8119 --End of bug#3121708 modification BAKUCHIB
8120
8121 -- To check if the chr_id has Financed fee feetype defined
8122 CURSOR l_fin_type_csr (chrId NUMBER)
8123 IS
8124 SELECT cle.id fin_id
8125 FROM okc_k_lines_b cle,
8126 okc_line_styles_b lse,
8127 okl_k_lines kle,
8128 okc_statuses_b sts
8129 WHERE cle.dnz_chr_id = chrId
8130 AND cle.lse_id = lse.id
8131 AND lse.lty_code = 'FEE'
8132 AND cle.id = kle.id
8133 AND sts.code = cle.sts_code
8134 AND sts.ste_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED')
8135 AND kle.fee_type = 'FINANCED';
8136
8137 -- Code required for rollover quote- HKPATEL
8138 CURSOR l_rollover_csr(chrId NUMBER)
8139 IS
8140 SELECT cle.id fin_id
8141 FROM okc_k_lines_b cle,
8142 okc_line_styles_b lse,
8143 okl_k_lines kle,
8144 okc_statuses_b sts
8145 WHERE cle.dnz_chr_id = chrId
8146 AND cle.lse_id = lse.id
8147 AND lse.lty_code = 'FEE'
8148 AND cle.id = kle.id
8149 AND sts.code = cle.sts_code
8150 AND sts.ste_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED')
8151 AND kle.fee_type = 'ROLLOVER';
8152
8153 CURSOR l_link_rollover_csr(cleId NUMBER)
8154 IS
8155 SELECT okc.id kle_id
8156 FROM okc_k_lines_b okc,
8157 okl_k_lines kle ,
8158 okc_line_styles_b lse
8159 WHERE okc.cle_id = cleId
8160 AND okc.lse_id = lse.id
8161 AND okc.id = kle.id
8162 AND lty_code = 'LINK_FEE_ASSET';
8163 -- Code for rollover quotes ends here- HKPATEL
8164
8165 -- To get the Subsidy Income Accural stream type id
8166 -- and also fetch the sub line id
8167 /*
8168 CURSOR get_sub_line_csr (p_dnz_chr_id okc_k_lines_b.dnz_chr_id%TYPE)
8169 IS
8170 SELECT TO_NUMBER(sgn.value) sty_id,
8171 cle.id
8172 FROM okl_sgn_translations sgn,
8173 okl_strm_type_b sty,
8174 okl_subsidies_v sub,
8175 okl_k_lines kle,
8176 okc_statuses_b sts,
8177 okc_line_styles_b lse,
8178 okc_k_lines_b cle
8179 WHERE cle.dnz_chr_id = p_dnz_chr_id
8180 AND cle.lse_id = lse.id
8181 AND lse.lty_code = 'SUBSIDY'
8182 AND sts.code = cle.sts_code
8183 AND sts.ste_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED')
8184 AND cle.id = kle.id
8185 AND TO_CHAR(kle.sty_id) = sgn.object1_id1
8186 AND sgn.object1_id1 = TO_CHAR(sty.id)
8187 AND sgn.jtot_object1_code = 'OKL_STRMTYP'
8188 AND kle.subsidy_id = sub.id;
8189 */
8190 CURSOR get_sub_line_csr(p_dnz_chr_id IN okc_k_lines_b.dnz_chr_id%TYPE)
8191 IS
8192 SELECT kle.sty_id,
8193 cle.id
8194 --srsreeni Bug5699923 Start
8195 ,sts.ste_code
8196 --srsreeni Bug5699923 End
8197 FROM okl_k_lines kle,
8198 okc_k_lines_b cle,
8199 okl_subsidies_v sub,
8200 okc_statuses_b sts,
8201 okc_line_styles_b lse
8202 WHERE cle.dnz_chr_id = p_dnz_chr_id
8203 AND cle.lse_id = lse.id
8204 AND lse.lty_code = 'SUBSIDY'
8205 AND sts.code = cle.sts_code
8206 AND sts.ste_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED')
8207 AND cle.id = kle.id
8208 AND kle.subsidy_id = sub.id;
8209
8210 -- srsreeni - Bug#5699923 - Added - Start
8211 CURSOR c_is_loan_khr(p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
8212 SELECT 'Y'
8213 FROM OKL_K_HEADERS
8214 WHERE ID = p_chr_id
8215 AND DEAL_TYPE = 'LOAN';
8216
8217 l_is_loan_khr VARCHAR2(1) := 'N';
8218 -- srsreeni - Bug#569923 - Added - End
8219
8220 l_fee_type_rec l_fee_type_csr%ROWTYPE;
8221 l_strm_name_rec strm_name_csr%ROWTYPE;
8222 l_strmid_rec l_strmid_csr%ROWTYPE;
8223 r_strmid_rec l_strmid_csr%ROWTYPE;
8224 m_strmid_rec l_strmid_csr%ROWTYPE;
8225
8226 -- Code added by HKPATEL for user defined streams
8227 l_flag VARCHAR2(3) := 'YES';
8228
8229 -- Added code ends here for user defined streams
8230 -- Added by mansrini for Bug 5111058 (Fwd port bug 5061024)
8231 l_pricing_name VARCHAR2(40);
8232 -- end mansrini
8233
8234 BEGIN
8235 x_return_status := OKL_API.G_RET_STS_SUCCESS;
8236 -- Call start_activity to create savepoint, check compatibility
8237 -- and initialize message list
8238 x_return_status := OKL_API.START_ACTIVITY (
8239 l_api_name
8240 ,p_init_msg_list
8241 ,'_PVT'
8242 ,x_return_status);
8243 -- Check if activity started successfully
8244 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8245 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8246 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8247 RAISE OKL_API.G_EXCEPTION_ERROR;
8248 END IF;
8249 l_streams_tbl(1) := 'RENT';
8250 l_streams_tbl(2) := 'PRINCIPAL BALANCE';
8251 l_streams_tbl(3) := 'RATE PARTICIPATION';
8252 l_streams_tbl(4) := 'INTEREST PAYMENT';
8253 l_streams_tbl(5) := 'PRINCIPAL PAYMENT';
8254 l_streams_tbl(6) := 'FAS 91 FEE INCOME';
8255 l_streams_tbl(7) := 'RENTAL ACCRUAL';
8256 l_streams_tbl(8) := 'FINANCED EXTENSION FEE INCOME';
8257 l_streams_tbl(9) := 'RATE SUBSIDY';
8258 l_streams_tbl(10) := 'PRE-TAX INCOME';
8259 l_streams_tbl(11) := 'RENT';--'PRESENT VALUE RESIDUAL'; --TBC
8260 l_streams_tbl(12) := 'RENT';--'PV GUARANTEE';--TBC
8261 l_streams_tbl(13) := 'RESIDUAL VALUE INSURANCE PREMIUM';
8262 l_streams_tbl(14) := 'GUARANTEED RESIDUAL INSURED'; -- RVI takes care of requesting by default.
8263 l_streams_tbl(15) := 'RENT';--'PRESENT VALUE INSURED RESIDUAL';--TBC
8264 l_streams_tbl(16) := 'RENT';--'UNEARNED INCOME';
8265 l_streams_tbl(17) := 'RENT'; --'DEFERRED INCOME';
8266 l_streams_tbl(18) := 'TERMINATION VALUE';
8267 l_streams_tbl(19) := 'STIP LOSS VALUE';
8268 l_streams_tbl(20) := 'LOAN PAYMENT';
8269 l_streams_tbl(21) := 'FEE INCOME';
8270 l_streams_tbl(22) := 'PERIODIC EXPENSE PAYABLE';
8271 l_streams_tbl(23) := 'INTEREST INCOME';
8272 -- Populating the O/P Stream Type tables with the existing one
8273 IF p_stream_types_tbl.COUNT > 0 THEN
8274 FOR i IN p_stream_types_tbl.FIRST..p_stream_types_tbl.LAST LOOP
8275 x_stream_types_tbl(i).stream_type_id := p_stream_types_tbl(i).stream_type_id;
8276 x_stream_types_tbl(i).pricing_name := p_stream_types_tbl(i).pricing_name;
8277 x_stream_types_tbl(i).kle_asset_id := p_stream_types_tbl(i).kle_asset_id;
8278 x_stream_types_tbl(i).kle_fee_id := p_stream_types_tbl(i).kle_fee_id;
8279 IF x_stream_types_tbl(i).kle_fee_id <> OKL_API.G_MISS_NUM AND
8280 l_blnhasfees = OKL_API.G_FALSE THEN
8281 l_blnhasfees := OKL_API.G_TRUE;
8282 END IF;
8283 END LOOP;
8284 END IF;
8285
8286 -- Code commented by HKPATEL for user defined stream
8287 /*
8288 -- Scan through Stream types tables
8289 FOR i IN l_streams_tbl.FIRST..l_streams_tbl.LAST LOOP
8290 j := 1;
8291 -- Validate the Stream type
8292 WHILE (( l_strm_name <> l_streams_tbl(i) ) AND ( j <= x_stream_types_tbl.COUNT)) LOOP
8293 OPEN strm_name_csr ( x_stream_types_tbl(j).stream_type_id );
8294 FETCH strm_name_csr into l_strm_name_rec;
8295 IF strm_name_csr%NOTFOUND THEN
8296 okl_api.set_message(p_app_name => G_APP_NAME,
8297 p_msg_name => G_LLA_NO_MATCHING_RECORD,
8298 p_token1 => G_COL_NAME_TOKEN,
8299 p_token1_value => 'Stream Type id');
8300 x_return_status := OKL_API.G_RET_STS_ERROR;
8301 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8302 END IF;
8303 CLOSE strm_name_csr;
8304 l_strm_name := l_strm_name_rec.name;
8305 j := j + 1;
8306 END LOOP;
8307 IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
8308 EXIT WHEN (x_return_status <> OKL_API.G_RET_STS_SUCCESS);
8309 END IF;
8310 IF ((j > x_stream_types_tbl.COUNT ) AND ( l_strm_name <> l_streams_tbl(i))) THEN
8311 l_blnInclude := OKL_API.G_FALSE;
8312 -- If the Deal type Containing Lease
8313 IF (INSTR( p_deal_type, 'LEASE') > 0) THEN
8314 -- Then we can include RENT,RENT,RENT,RESIDUAL VALUE INSURANCE PREMIUM
8315 -- RENT,RENT
8316 IF l_streams_tbl(i) = 'RENT' OR
8317 l_streams_tbl(i) = 'RESIDUAL VALUE INSURANCE PREMIUM' THEN
8318 l_blnInclude := OKL_API.G_TRUE;
8319 -- then we can include PRE-TAX INCOME if Deal type is Lease Direct finance
8320 -- then we can include PRE-TAX INCOME if Deal type is Lease Sale Type
8321 ELSIF l_streams_tbl(i) = 'PRE-TAX INCOME' AND
8322 trim(p_deal_type) IN ('LEASEDF','LEASEST') THEN
8323 l_blnInclude := OKL_API.G_TRUE;
8324 -- Then we can include FINANCED EXTENSION FEE INCOME if the Lease contract has Fee line
8325 ELSIF l_streams_tbl(i) = 'FINANCED EXTENSION FEE INCOME' AND
8326 l_blnhasfees = OKL_API.G_TRUE THEN
8327 l_blnInclude := OKL_API.G_TRUE;
8328 -- then we can include RENTAL ACCRUAL if Deal type is Lease operating
8329 ELSIF l_streams_tbl(i) = 'RENTAL ACCRUAL' AND
8330 trim(p_deal_type) = 'LEASEOP' THEN
8331 l_blnInclude := OKL_API.G_TRUE;
8332 END IF;
8333 -- If the Deal type Containing Loan
8334 ELSIF (INSTR(p_deal_type, 'LOAN') > 0) THEN
8335 -- Then we can include PRINCIPAL BALANCE,INTEREST PAYMENT,PRINCIPAL PAYMENT,
8336 -- LOAN PAYMENT, PRE-TAX INCOME
8337 IF l_streams_tbl(i) = 'PRINCIPAL BALANCE' OR
8338 l_streams_tbl(i) = 'INTEREST PAYMENT' OR
8339 l_streams_tbl(i) = 'PRINCIPAL PAYMENT' OR
8340 l_streams_tbl(i) = 'LOAN PAYMENT' OR
8341 l_streams_tbl(i) = 'PRE-TAX INCOME' THEN
8342 l_blnInclude := OKL_API.G_TRUE;
8343 END IF;
8344 END IF;
8345 -- We include the below streams independent of the Deal type but
8346 -- Conditional basis of weather the contact has Fee line
8347 -- RATE PARTICIPATION,FAS 91 FEE INCOME,RATE SUBSIDY,
8348 -- TERMINATION VALUE,STIP LOSS VALUE,FEE INCOME,PERIODIC EXPENSE PAYABLE
8349 IF (l_streams_tbl(i) = 'RATE PARTICIPATION' AND
8350 l_blnhasfees = OKL_API.G_TRUE) OR
8351 (l_streams_tbl(i) = 'RATE SUBSIDY' AND
8352 l_blnhasfees = OKL_API.G_TRUE) OR
8353 (l_streams_tbl(i) = 'FEE INCOME' AND
8354 l_blnhasfees = OKL_API.G_TRUE) OR
8355 (l_streams_tbl(i) = 'FAS 91 FEE INCOME') OR
8356 (l_streams_tbl(i) = 'TERMINATION VALUE') OR
8357 (l_streams_tbl(i) = 'STIP LOSS VALUE') THEN
8358 l_blnInclude := OKL_API.G_TRUE;
8359 -- Start of BUG#2997914 fix
8360 END IF;
8361 -- End of BUG#2997914 fix
8362 -- Handling only fee receivable Streams
8363 IF l_streams_tbl(i) = 'FEE INCOME' AND
8364 l_blnInclude = OKL_API.G_TRUE THEN
8365 FOR k IN p_stream_types_tbl.FIRST..p_stream_types_tbl.LAST LOOP
8366 IF p_stream_types_tbl(k).kle_fee_id <> OKL_API.G_MISS_NUM THEN
8367 OPEN l_fee_type_csr (p_chr_id,
8368 p_stream_types_tbl(k).kle_fee_id);
8369 FETCH l_fee_type_csr INTO l_fee_type_rec;
8370 CLOSE l_fee_type_csr;
8371 IF l_fee_type_rec.fee_type IN ('PASSTHROUGH','MISCELLANEOUS') THEN
8372 l_blnInclude := OKL_API.G_TRUE;
8373 EXIT;
8374 ELSE
8375 l_blnInclude := OKL_API.G_FALSE;
8376 END IF;
8377 END IF;
8378 END LOOP;
8379 END IF;
8380 IF (l_blnInclude = OKL_API.G_TRUE) THEN
8381 OPEN l_strmid_csr(l_streams_tbl(i));
8382 FETCH l_strmid_csr into l_strmid_rec;
8383 IF l_strmid_csr%NOTFOUND THEN
8384 okl_api.set_message(p_app_name => G_APP_NAME,
8385 p_msg_name => G_LLA_NO_MATCHING_RECORD,
8386 p_token1 => G_COL_NAME_TOKEN,
8387 p_token1_value => 'Stream Type');
8388 x_return_status := OKL_API.G_RET_STS_ERROR;
8389 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8390 END IF;
8391 CLOSE l_strmid_csr;
8392 styid := l_strmid_rec.styid;
8393 -- Then we can include PRINCIPAL BALANCE,INTEREST PAYMENT,PRINCIPAL PAYMENT,
8394 -- LOAN PAYMENT
8395 -- This will be true for Loan deal type
8396 IF (l_streams_tbl(i) = 'PRINCIPAL BALANCE' OR
8397 l_streams_tbl(i) = 'INTEREST PAYMENT' OR
8398 l_streams_tbl(i) = 'PRE-TAX INCOME' OR
8399 l_streams_tbl(i) = 'PRINCIPAL PAYMENT' OR
8400 l_streams_tbl(i) = 'LOAN PAYMENT') AND
8401 p_deal_type = 'LOAN' THEN
8402 FOR l_line_rec in l_line_rec_csr(p_chr_id) LOOP
8403 x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := styid;
8404 x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_asset_id := l_line_rec.id;
8405 END LOOP;
8406 -- Added by dedey, arun, since mandatory sterams are not getting picked up
8407 -- during Lease Contract stream generation
8408 -- starts 06/14/2002
8409 ELSE
8410 x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := styid;
8411 -- end 06/14/2002
8412 END IF;
8413 END IF;
8414 END IF;
8415 END LOOP;
8416 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8417 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8418 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8419 RAISE OKL_API.G_EXCEPTION_ERROR;
8420 END IF;
8421
8422 --Code commented by HKPATEL for userdefined streams */
8423 /*
8424 IF x_stream_types_tbl.COUNT > 0 THEN
8425 FOR l_fin_type_rec IN l_fin_type_csr(chrId => p_chr_id) LOOP
8426 FOR r_finance_strm_rec IN c_finance_strm_csr LOOP
8427 x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := r_finance_strm_rec.id;
8428 x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_asset_id := l_fin_type_rec.fin_id;
8429 END LOOP;
8430 l_blnhasfin := OKL_API.G_TRUE;
8431 END LOOP;
8432 -- Now we get the Subsidy Income Accural stream type id , wil be fetched from
8433 -- Subsidy setup
8434 FOR get_sub_line_rec IN get_sub_line_csr (p_dnz_chr_id => p_chr_id) LOOP
8435 x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := get_sub_line_rec.sty_id;
8436 x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_fee_id := get_sub_line_rec.id;
8437 END LOOP;
8438 END IF;
8439
8440 -- Requesting streams for rollover quote- HKPATEL
8441 IF x_stream_types_tbl.COUNT > 0 THEN
8442 IF l_link_fee_asset_yn = 'FALSE' THEN
8443 FOR l_rollover_rec IN l_rollover_csr(chrId => p_chr_id) LOOP
8444 FOR r_finance_strm_rec IN c_finance_strm_csr LOOP
8445 x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := r_finance_strm_rec.id;
8446 x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_asset_id := l_rollover_rec.fin_id;
8447 END LOOP;
8448 END LOOP;
8449 ELSIF l_link_fee_asset_yn = 'TRUE' THEN
8450 FOR l_rollover_rec IN l_rollover_csr(chrId => p_chr_id) LOOP
8451 FOR l_link_rollover_rec IN l_link_rollover_csr(cleId => l_rollover_rec.fin_id) LOOP
8452 FOR r_finance_strm_rec IN c_finance_strm_csr LOOP
8453 x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := r_finance_strm_rec.id;
8454 x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_asset_id := l_link_rollover_rec.kle_id;
8455 END LOOP;
8456 END LOOP;
8457 END LOOP;
8458 END IF;
8459 END IF;
8460 -- Stream request for rollover quote ends here - HKPATEL
8461
8462 */
8463 -- srsreeni - Bug#5699923 - Added - Start
8464 -- Determine if the contract is a loan contract (rev-loan excluded)
8465 OPEN c_is_loan_khr(p_chr_id);
8466 FETCH c_is_loan_khr INTO l_is_loan_khr;
8467 CLOSE c_is_loan_khr;
8468 -- srsreeni - Bug#5699923 - Added - End
8469 IF x_stream_types_tbl.COUNT > 0 THEN
8470 -- Now we get the Subsidy Income Accural stream type id , wil be fetched from
8471 -- Subsidy setup
8472 FOR get_sub_line_rec IN get_sub_line_csr (p_dnz_chr_id => p_chr_id) LOOP
8473 -- srsreeni - Bug#5699923 - Added - Start
8474 -- DONOT request SuperTrump to generate streams
8475 -- for TERMINATED lines. Fix for Bug#5699923 deals with LOAN
8476 -- contracts alone and hence this check is restricted to LOAN
8477 --vdamerla Bug6149951 start commented the following as streams should not be requested for any terminated asset line
8478 --of a contract of any book classification and not just LOAN
8479 -- IF l_is_loan_khr ='Y' AND get_sub_line_rec.ste_code = 'TERMINATED' THEN
8480 IF get_sub_line_rec.ste_code = 'TERMINATED' THEN
8481 --srsreeni Bug6149951 ends
8482 NULL; -- Donot request streams if LOAN and line TERMINATED
8483 ELSE
8484 get_dependent_stream_types
8485 (
8486 p_khr_id => p_chr_id,
8487 p_primary_sty_id => get_sub_line_rec.sty_id,
8488 x_return_status => l_return_status,
8489 x_dependent_sty_id => l_strm_type_id_tbl
8490 );
8491 IF l_return_status = 'E' THEN
8492 l_return_status := 'S';
8493 END IF;
8494
8495 IF l_strm_type_id_tbl.COUNT > 0 THEN
8496 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
8497 x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := l_strm_type_id_tbl(i).id;
8498 x_stream_types_tbl(x_stream_types_tbl.COUNT).pricing_name := l_strm_type_id_tbl(i).pricing_name;
8499 x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_fee_id := get_sub_line_rec.id;
8500 END LOOP;
8501 END IF;
8502
8503 -- Added by bkatraga for bug 5061024
8504 -- To generate the primary stream of purpose Subsidy
8505 get_primary_pricing_name
8506 (
8507 p_khr_id => p_chr_id,
8508 p_sty_id => get_sub_line_rec.sty_id,
8509 x_return_status => l_return_status,
8510 x_primary_pricing_name => l_pricing_name
8511 );
8512
8513 IF l_return_status = 'E' THEN
8514 l_return_status := 'S';
8515 END IF;
8516
8517 IF l_pricing_name IS NOT NULL THEN
8518 x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := get_sub_line_rec.sty_id;
8519 x_stream_types_tbl(x_stream_types_tbl.COUNT).pricing_name := l_pricing_name;
8520 x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_fee_id := get_sub_line_rec.id;
8521 END IF;
8522 -- end bkatraga for bug 5061024
8523 END IF; -- Check for terminated lines on a LOAN contract
8524 -- srsreeni - Bug#5699923 - Added - End
8525
8526 END LOOP;
8527 END IF;
8528
8529 -- Code for user defined streams ends here
8530
8531
8532 OKL_API.END_ACTIVITY (x_msg_count,
8533 x_msg_data );
8534
8535 EXCEPTION
8536 WHEN OKL_API.G_EXCEPTION_ERROR THEN
8537 IF get_sub_line_csr%ISOPEN THEN
8538 CLOSE get_sub_line_csr;
8539 END IF;
8540 IF strm_name_csr%ISOPEN THEN
8541 CLOSE strm_name_csr;
8542 END IF;
8543 IF l_strmid_csr%ISOPEN THEN
8544 CLOSE l_strmid_csr;
8545 END IF;
8546 IF l_line_rec_csr%ISOPEN THEN
8547 CLOSE l_line_rec_csr;
8548 END IF;
8549 IF l_fee_type_csr%ISOPEN THEN
8550 CLOSE l_fee_type_csr;
8551 END IF;
8552 IF l_fin_type_csr%ISOPEN THEN
8553 CLOSE l_fin_type_csr;
8554 END IF;
8555
8556 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8557 l_api_name,
8558 G_PKG_NAME,
8559 'OKL_API.G_RET_STS_ERROR',
8560 x_msg_count,
8561 x_msg_data,
8562 '_PVT');
8563 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
8564 IF get_sub_line_csr%ISOPEN THEN
8565 CLOSE get_sub_line_csr;
8566 END IF;
8567 IF strm_name_csr%ISOPEN THEN
8568 CLOSE strm_name_csr;
8569 END IF;
8570 IF l_strmid_csr%ISOPEN THEN
8571 CLOSE l_strmid_csr;
8572 END IF;
8573 IF l_line_rec_csr%ISOPEN THEN
8574 CLOSE l_line_rec_csr;
8575 END IF;
8576 IF l_fee_type_csr%ISOPEN THEN
8577 CLOSE l_fee_type_csr;
8578 END IF;
8579 IF l_fin_type_csr%ISOPEN THEN
8580 CLOSE l_fin_type_csr;
8581 END IF;
8582 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
8583 l_api_name,
8584 G_PKG_NAME,
8585 'OKL_API.G_RET_STS_UNEXP_ERROR',
8586 x_msg_count,
8587 x_msg_data,
8588 '_PVT');
8589 WHEN OTHERS THEN
8590 IF get_sub_line_csr%ISOPEN THEN
8591 CLOSE get_sub_line_csr;
8592 END IF;
8593 IF strm_name_csr%ISOPEN THEN
8594 CLOSE strm_name_csr;
8595 END IF;
8596 IF l_strmid_csr%ISOPEN THEN
8597 CLOSE l_strmid_csr;
8598 END IF;
8599
8600 IF l_line_rec_csr%ISOPEN THEN
8601 CLOSE l_line_rec_csr;
8602 END IF;
8603 IF l_fee_type_csr%ISOPEN THEN
8604 CLOSE l_fee_type_csr;
8605 END IF;
8606 IF l_fin_type_csr%ISOPEN THEN
8607 CLOSE l_fin_type_csr;
8608 END IF;
8609 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
8610 l_api_name,
8611 G_PKG_NAME,
8612 'OTHERS',
8613 x_msg_count,
8614 x_msg_data,
8615 '_PVT');
8616 END check_for_mandatory_streams;
8617 -- End modification 11i10 bakuchib
8618 Procedure extract_security_deposit( p_api_version IN NUMBER,
8619 p_chr_id IN NUMBER,
8620 p_deal_type IN VARCHAR2,
8621 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
8622 x_msg_count OUT NOCOPY NUMBER,
8623 x_msg_data OUT NOCOPY VARCHAR2,
8624 x_return_status OUT NOCOPY VARCHAR2,
8625 px_csm_lease_header IN OUT NOCOPY okl_create_streams_pub.csm_lease_rec_type,
8626 px_csm_one_off_fee_tbl IN OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
8627 px_csm_periodic_expenses_tbl IN OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
8628 px_csm_stream_types_tbl IN OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type) AS
8629
8630 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_SECURITY_DEPOSIT';
8631 l_api_version CONSTANT NUMBER := 1;
8632
8633 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
8634 x NUMBER := 0;
8635
8636 CURSOR c_deposit_date( chrId NUMBER) IS
8637 SELECT FND_DATE.canonical_to_date(rule_information5) date_returned
8638 FROM okc_rules_b
8639 WHERE dnz_chr_id = chrId
8640 AND rule_information_category = 'LASDEP';
8641
8642 l_c_deposit_date c_deposit_date%ROWTYPE;
8643
8644 cursor l_line_rec_csr1( chrid NUMBER, lnetype VARCHAR2 ) is
8645 select kle.id,
8646 kle.oec,
8647 kle.residual_code,
8648 kle.capital_amount,
8649 kle.delivered_date,
8650 kle.date_funding_required,
8651 kle.residual_grnty_amount,
8652 kle.date_funding,
8653 kle.residual_value,
8654 kle.amount,
8655 kle.price_negotiated,
8656 kle.start_date,
8657 kle.end_date,
8658 kle.orig_system_id1,
8659 kle.fee_type,
8660 kle.initial_direct_cost,
8661 tl.item_description,
8662 tl.name
8663 from okl_k_lines_full_v kle,
8664 okc_line_styles_b lse,
8665 okc_k_lines_tl tl,
8666 okc_statuses_b sts
8667 where KLE.LSE_ID = LSE.ID
8668 and lse.lty_code = lnetype
8669 and tl.id = kle.id
8670 and tl.language = userenv('LANG')
8671 and kle.dnz_chr_id = chrid
8672 and kle.fee_type = 'SECDEPOSIT'
8673 and sts.code = kle.sts_code
8674 --Start of bug#3121708 modification BAKUCHIB
8675 and sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
8676 --End of bug#3121708 modification BAKUCHIB
8677
8678
8679 --- sgorantl added for bug#4084201
8680 CURSOR fee_strm_type_csr1 (kleid NUMBER,
8681 linestyle VARCHAR2 )
8682 IS
8683 SELECT stl.ST_GEN_TMPT_SET_NAME strm_name,
8684 stl.pricing_name pricing_name,
8685 kle.id line_id,
8686 stl.id styp_id
8687 FROM OKL_STRM_TMPT_LINES_UV stl,
8688 okc_k_items cim,
8689 okl_k_lines_full_v kle,
8690 okc_line_styles_b ls
8691 WHERE cim.cle_id = kle.id
8692 AND ls.id = kle.lse_id
8693 AND ls.lty_code = 'FEE'
8694 AND cim.object1_id1 = stl.primary_sty_id
8695 AND cim.object1_id2 = '#'
8696 AND kle.id = kleid
8697 AND stl.pricing_name is not null;
8698 --- sgorantl added for bug#4084201 --end
8699
8700 l_line_rec1 l_line_rec_csr1%ROWTYPE;
8701 l_rl_rec l_rl_csr%ROWTYPE;
8702 l_rl_rec1 l_rl_csr1%ROWTYPE;
8703 l_rl_rec2 l_rl_csr2%ROWTYPE;
8704 l_fee_strm_type_rec1 fee_strm_type_csr1%ROWTYPE;
8705 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
8706 l_strm_name_rec strm_name_csr%ROWTYPE;
8707
8708 l_hdr_rec l_hdr_csr%ROWTYPE;
8709
8710 l_level_type NUMBER;
8711 l_strm_name VARCHAR2(200);
8712 i BINARY_INTEGER := 0;
8713 j BINARY_INTEGER := 0;
8714 k BINARY_INTEGER := 0;
8715 l BINARY_INTEGER := 0;
8716 m BINARY_INTEGER := 0;
8717 idx BINARY_INTEGER := 0;
8718
8719
8720 Begin
8721
8722 print( l_api_name, 'begin');
8723
8724 x_return_status := OKL_API.START_ACTIVITY(
8725 p_api_name => l_api_name,
8726 p_pkg_name => g_pkg_name,
8727 p_init_msg_list => p_init_msg_list,
8728 l_api_version => l_api_version,
8729 p_api_version => p_api_version,
8730 p_api_type => G_API_TYPE,
8731
8732 x_return_status => x_return_status);
8733
8734 -- check if ac1tivity started successfully
8735 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8736 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8737 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8738 raise OKL_API.G_EXCEPTION_ERROR;
8739 End If;
8740
8741 l := px_csm_one_off_fee_tbl.COUNT;
8742 m := px_csm_stream_types_tbl.COUNT;
8743
8744 FOR l_lne_rec1 in l_line_rec_csr1 ( p_chr_id, 'FEE' )
8745 LOOP
8746
8747 IF( l_lne_rec1.fee_type = 'SECDEPOSIT' ) THEN
8748 --- sgorantl added for bug#4084201 --end
8749 OPEN fee_strm_type_csr1 ( l_lne_rec1.id, 'FEE' );
8750 FETCH fee_strm_type_csr1 into l_fee_strm_type_rec1;
8751 CLOSE fee_strm_type_csr1;
8752 IF l_fee_strm_type_rec1.PRICING_NAME IS NOT NULL THEN
8753 --end
8754 OPEN fee_strm_type_csr ( l_lne_rec1.id, 'FEE' );
8755 FETCH fee_strm_type_csr into l_fee_strm_type_rec;
8756 CLOSE fee_strm_type_csr;
8757
8758 l_level_type := l_fee_strm_type_rec.styp_id;
8759 l_strm_name := l_fee_strm_type_rec.strm_name;
8760
8761 --px_csm_lease_header.security_deposit_amount := l_lne_rec.amount;
8762 --px_csm_lease_header.date_sec_deposit_collected := l_lne_rec.start_date;
8763
8764 print( l_api_name, 'requesting sec dep streams');
8765 m := m + 1;
8766 px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
8767 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec1.id;
8768 --- sgorantl added for bug#4084201
8769 px_csm_stream_types_tbl(m).pricing_name := l_fee_strm_type_rec1.PRICING_NAME;
8770 --end
8771 l := l + 1;
8772 px_csm_one_off_fee_tbl(l).description := l_strm_name;
8773 px_csm_one_off_fee_tbl(l).fee_type := 'SECDEPOSIT';
8774 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
8775 px_csm_one_off_fee_tbl(l).kle_fee_id := l_lne_rec1.id;
8776
8777 OPEN l_rl_csr1 ( 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_lne_rec1.id );
8778 FETCH l_rl_csr1 INTO l_rl_rec1;
8779 CLOSE l_rl_csr1;
8780 px_csm_one_off_fee_tbl(l).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec1.RULE_INFORMATION6,'0'));
8781 IF(l_rl_rec1.RULE_INFORMATION2 IS NULL or l_rl_rec1.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
8782 px_csm_one_off_fee_tbl(l).date_start := l_lne_rec1.start_date ;
8783 ELSE
8784 px_csm_one_off_fee_tbl(l).date_start := FND_DATE.canonical_to_date(l_rl_rec1.RULE_INFORMATION2);
8785 END IF;
8786
8787 OPEN c_deposit_date ( TO_NUMBER(p_chr_id) );
8788 FETCH c_deposit_date INTO l_c_deposit_date;
8789 CLOSE c_deposit_date;
8790
8791 OPEN l_hdr_csr( p_chr_id );
8792 FETCH l_hdr_csr INTO l_hdr_rec;
8793 CLOSE l_hdr_csr;
8794
8795 px_csm_one_off_fee_tbl(l).date_paid := nvl(l_c_deposit_date.date_returned, l_hdr_rec.end_date);
8796
8797 print( l_api_name, 'amnt='||to_char(px_csm_one_off_fee_tbl(l).amount)||
8798 'dateStart='||to_char(px_csm_one_off_fee_tbl(l).date_paid));
8799
8800 End If;
8801 END IF;
8802 END LOOP;
8803
8804 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
8805
8806 print( l_api_name, 'end', x_return_status);
8807
8808 Exception
8809
8810 when OKL_API.G_EXCEPTION_ERROR then
8811 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8812 p_api_name => l_api_name,
8813 p_pkg_name => g_pkg_name,
8814 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
8815 x_msg_count => x_msg_count,
8816 x_msg_data => x_msg_data,
8817 p_api_type => g_api_type);
8818
8819 If (fee_strm_type_csr1%ISOPEN) Then
8820 CLOSE fee_strm_type_csr1;
8821 End If;
8822
8823 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
8824 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8825
8826 p_api_name => l_api_name,
8827
8828 p_pkg_name => g_pkg_name,
8829 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
8830 x_msg_count => x_msg_count,
8831 x_msg_data => x_msg_data,
8832 p_api_type => g_api_type);
8833
8834 If (fee_strm_type_csr%ISOPEN) Then
8835 CLOSE fee_strm_type_csr;
8836 End If;
8837
8838 when OTHERS then
8839 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8840 p_api_name => l_api_name,
8841 p_pkg_name => g_pkg_name,
8842 p_exc_name => 'OTHERS',
8843 x_msg_count => x_msg_count,
8844 x_msg_data => x_msg_data,
8845 p_api_type => g_api_type);
8846
8847 If (fee_strm_type_csr%ISOPEN) Then
8848 CLOSE fee_strm_type_csr;
8849 End If;
8850
8851 If (fee_strm_type_csr1%ISOPEN) Then
8852 CLOSE fee_strm_type_csr1;
8853 End If;
8854
8855 end extract_security_deposit;
8856 -- Start modification 11i10 release
8857 --------------------------------------------------------------------------------
8858 -- Start of Commnets
8859 -- Badrinath Kuchibholta
8860 -- Procedure Name : extract_subsidized_lines
8861 -- Description : extraction of subsidized lines for amortized
8862 -- accounting methode code
8863 -- Business Rules : extraction of subsidized lines for amortized
8864 -- accounting methode code
8865 -- Parameters : p_chr_id, p_csm_line_details_tbl and
8866 -- px_csm_one_off_fee_tbl
8867 -- Version : 1.0
8868 -- History : BAKUCHIB 21-oct-2003
8869 -- : BAKUCHIB 24-FEB-2004
8870 -- : BAKUCHIB 19-MAR-2004
8871 -- End of Commnets
8872 --------------------------------------------------------------------------------
8873 PROCEDURE extract_subsidized_lines(p_api_version IN NUMBER,
8874 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
8875 x_return_status OUT NOCOPY VARCHAR2,
8876 x_msg_count OUT NOCOPY NUMBER,
8877 x_msg_data OUT NOCOPY VARCHAR2,
8878 p_chr_id IN NUMBER,
8879 px_csm_one_off_fee_tbl IN OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type)
8880
8881 AS
8882 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_SUBSIDIZED_LINES';
8883 l_csm_one_off_fee_tbl okl_create_streams_pub.csm_one_off_fee_tbl_type := px_csm_one_off_fee_tbl;
8884 i BINARY_INTEGER := 0;
8885 lv_acc_mtd_code okl_subsidies_b.accounting_method_code%TYPE := NULL;
8886 lv_strm_desc VARCHAR2(200);
8887 ln_sub_id okc_k_lines_b.id%TYPE := NULL;
8888 ln_dummy NUMBER := 0;
8889 ln_cap_wos okl_k_lines.capital_amount%TYPE := 0;
8890 ln_cap_amt okl_k_lines.capital_amount%TYPE := 0;
8891 ln_cap_dis okl_k_lines.capital_amount%TYPE := 0;
8892 l_asbv_tbl asbv_tbl_type;
8893 l_sty_id NUMBER;
8894 l_dep_sty_id NUMBER;
8895 l_return_status VARCHAR2(1);
8896 -- get Asset lines for the contract
8897 CURSOR get_asset_lines_csr (p_chr_id okc_k_lines_b.id%TYPE)
8898 IS
8899 SELECT cle.id,
8900 NVL(kle.date_funding,cle.start_date) date_funding
8901 FROM okc_k_lines_b cle,
8902 okl_k_lines kle,
8903 okc_line_styles_b lse
8904 WHERE cle.dnz_chr_id = p_chr_id
8905 AND cle.sts_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED')
8906 AND cle.id = kle.id
8907 AND cle.lse_id = lse.id
8908 AND lse.lty_code = 'FREE_FORM1';
8909 -- get the accouting method to send only Amoritized Subsidy lines
8910 CURSOR get_acc_mth_code (p_line_id OKL_K_LINES.ID%TYPE)
8911 IS
8912 SELECT subb.accounting_method_code,
8913 cle.id
8914 FROM okl_subsidies_b subb,
8915 okc_k_lines_b cle_fin,
8916 okc_line_styles_b lse_fin,
8917 okc_k_lines_b cle,
8918 okl_k_lines kle,
8919 okc_line_styles_b lse
8920 WHERE cle.cle_id = p_line_id
8921 AND cle.id = kle.id
8922 AND cle.lse_id = lse.id
8923 AND lse.lty_code = 'SUBSIDY'
8924 AND subb.id = kle.subsidy_id
8925 AND cle_fin.id = cle.cle_id
8926 AND cle_fin.lse_id = lse_fin.id
8927 AND lse_fin.lty_code = 'FREE_FORM1';
8928 -- Validate the contract has Subsidy line
8929 CURSOR validate_sub_line (p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE)
8930 IS
8931 SELECT 1
8932 FROM dual
8933 WHERE EXISTS (SELECT '1'
8934 FROM okl_subsidies_b subb,
8935 okc_k_lines_b cle_fin,
8936 okc_line_styles_b lse_fin,
8937 okc_k_lines_b cle,
8938 okl_k_lines kle,
8939 okc_line_styles_b lse
8940 WHERE cle.dnz_chr_id = p_dnz_chr_id
8941 AND cle.cle_id = cle_fin.id
8942 AND cle.dnz_chr_id = cle_fin.dnz_chr_id
8943 AND cle.id = kle.id
8944 AND cle.lse_id = lse.id
8945 AND lse.lty_code = 'SUBSIDY'
8946 AND subb.id = kle.subsidy_id
8947 AND cle_fin.id = cle.cle_id
8948 AND cle_fin.lse_id = lse_fin.id
8949 AND lse_fin.lty_code = 'FREE_FORM1');
8950 -- To get the Subsidy Income Accural Description
8951 -- Changed for bug 4044089 by HKPATEL 12/02/2004
8952 CURSOR get_sub_income_strm_csr (p_dnz_chr_id IN okc_k_lines_b.dnz_chr_id%TYPE,
8953 p_sub_cle_id IN okc_k_lines_b.id%TYPE)
8954 IS
8955
8956 SELECT kle.sty_id
8957 FROM okl_k_lines kle,
8958 okc_k_lines_b cle,
8959 okc_line_styles_b lse,
8960 okl_subsidies_v sub
8961
8962 WHERE cle.dnz_chr_id = p_dnz_chr_id
8963 AND cle.id = p_sub_cle_id
8964 AND cle.lse_id = lse.id
8965 AND lse.lty_code = 'SUBSIDY'
8966 AND cle.id = kle.id
8967 AND kle.subsidy_id = sub.id;
8968 /*
8969 SELECT sty_inc.code strm_desc
8970 FROM okl_sgn_translations sgn,
8971 okl_strm_type_b sty_inc,
8972 okl_strm_type_b sty,
8973 okl_subsidies_v sub,
8974 okl_k_lines kle,
8975 okc_line_styles_b lse,
8976 okc_k_lines_b cle
8977 WHERE cle.dnz_chr_id = p_dnz_chr_id
8978 AND cle.id = p_sub_cle_id
8979 AND cle.lse_id = lse.id
8980 AND lse.lty_code = 'SUBSIDY'
8981 AND cle.id = kle.id
8982 AND TO_CHAR(kle.sty_id) = sgn.object1_id1
8983 AND sgn.object1_id1 = TO_CHAR(sty.id)
8984 AND TO_CHAR(sty_inc.id) = sgn.value
8985 AND sgn.jtot_object1_code = 'OKL_STRMTYP'
8986 AND kle.subsidy_id = sub.id;
8987 */
8988 -- New code for bug 4044089 by HKPATEL 12/02/2004
8989 CURSOR get_strm_type_code (p_sty_id IN okl_strm_type_b.ID%TYPE)
8990 IS
8991
8992 SELECT code
8993 FROM okl_strm_type_b
8994 WHERE id = p_sty_id;
8995
8996
8997 BEGIN
8998 x_return_status := OKL_API.G_RET_STS_SUCCESS;
8999 -- Call start_activity to create savepoint, check compatibility
9000 -- and initialize message list
9001 x_return_status := OKL_API.START_ACTIVITY (
9002 l_api_name
9003 ,p_init_msg_list
9004 ,'_PVT'
9005 ,x_return_status);
9006 -- check if ac1tivity started successfully
9007 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9008 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9009 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9010 RAISE OKL_API.G_EXCEPTION_ERROR;
9011 END IF;
9012 OPEN validate_sub_line (p_dnz_chr_id => p_chr_id );
9013 FETCH validate_sub_line INTO ln_dummy;
9014 CLOSE validate_sub_line;
9015 IF ln_dummy = 1 THEN
9016 IF l_csm_one_off_fee_tbl.COUNT > 0 THEN
9017 -- Get the last record of each one off table
9018 i := l_csm_one_off_fee_tbl.LAST;
9019 -- Now scan thru the CSM line details table for the asset id
9020 -- and then call the OKL_SUBSIDY_PROCESS_PVT to get the total subsidized amount for an asset
9021 FOR get_asset_lines_rec IN get_asset_lines_csr (p_chr_id => p_chr_id) LOOP
9022 IF get_asset_lines_rec.id IS NOT NULL OR
9023 get_asset_lines_rec.id <> OKL_API.G_MISS_NUM THEN
9024 execute_formula(p_api_version => p_api_version,
9025 p_init_msg_list => p_init_msg_list,
9026 x_return_status => x_return_status,
9027 x_msg_count => x_msg_count,
9028 x_msg_data => x_msg_data,
9029 p_formula_name => 'LINE_CAP_AMNT',
9030 p_contract_id => p_chr_id,
9031 p_line_id => get_asset_lines_rec.id,
9032 x_value => ln_cap_amt);
9033 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9034 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
9035 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9036 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9037 END IF;
9038 execute_formula(p_api_version => p_api_version,
9039 p_init_msg_list => p_init_msg_list,
9040 x_return_status => x_return_status,
9041 x_msg_count => x_msg_count,
9042 x_msg_data => x_msg_data,
9043 p_formula_name => 'LINE_DISCOUNT',
9044 p_contract_id => p_chr_id,
9045 p_line_id => get_asset_lines_rec.id,
9046 x_value => ln_cap_dis);
9047 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9048 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
9049 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9050 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9051 END IF;
9052 -- We are doing the above since we need the cap amt for each line
9053 -- and since the cap amt is inclusive of the discount then
9054 -- we need to exclude the same and then use to send the same to
9055 -- pricing engine since we need to send the subsidyl in %
9056 -- This is applicable to NET accouting method of Subsidy only
9057
9058 --Modified by kthiruva on 15-Mar-2006
9059 --Bug 4898772 - Start of Changes
9060 --As the subsidy is not being deducted in the formula LINE_CAP_AMNT, it does not have to be added again
9061 ln_cap_wos := ln_cap_amt;
9062 --Bug 4898772 - End of Changes
9063 FOR get_acc_mth_code_rec IN get_acc_mth_code (p_line_id => get_asset_lines_rec.id) LOOP
9064 i := i + 1;
9065 -- Changing the over loaded get_asset_subsidy_amont the tbl version
9066 okl_subsidy_process_pvt.get_asset_subsidy_amount(
9067 p_api_version => p_api_version,
9068 p_init_msg_list => p_init_msg_list,
9069 x_return_status => x_return_status,
9070 x_msg_count => x_msg_count,
9071 x_msg_data => x_msg_data,
9072 p_asset_cle_id => get_asset_lines_rec.id,
9073 x_asbv_tbl => l_asbv_tbl);
9074 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9075 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
9076 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9077 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9078 END IF;
9079 IF l_asbv_tbl.COUNT > 0 THEN
9080 FOR k IN l_asbv_tbl.FIRST..l_asbv_tbl.LAST LOOP
9081 IF get_acc_mth_code_rec.accounting_method_code = 'AMORTIZE' AND
9082 l_asbv_tbl(k).subsidy_cle_id = get_acc_mth_code_rec.id THEN
9083 l_csm_one_off_fee_tbl(i).amount := l_asbv_tbl(k).amount;
9084 ELSIF get_acc_mth_code_rec.accounting_method_code = 'NET' AND
9085 l_asbv_tbl(k).subsidy_cle_id = get_acc_mth_code_rec.id THEN
9086 IF l_asbv_tbl(k).amount < ln_cap_wos THEN
9087 l_csm_one_off_fee_tbl(i).rate := l_asbv_tbl(k).amount/ln_cap_wos;
9088 END IF;
9089 END IF;
9090 END LOOP;
9091 ELSE
9092 okl_api.set_message(
9093 p_app_name => G_APP_NAME,
9094 p_msg_name => G_LLA_NO_MATCHING_RECORD,
9095 p_token1 => G_COL_NAME_TOKEN,
9096 p_token1_value => 'Subsidy Records');
9097 x_return_status := OKL_API.G_RET_STS_ERROR;
9098 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9099 END IF;
9100 l_csm_one_off_fee_tbl(i).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
9101 l_csm_one_off_fee_tbl(i).date_paid := get_asset_lines_rec.date_funding;
9102 l_csm_one_off_fee_tbl(i).kle_asset_id := get_asset_lines_rec.id;
9103 l_csm_one_off_fee_tbl(i).other_type_id := get_acc_mth_code_rec.id;
9104 l_csm_one_off_fee_tbl(i).other_type := G_SFE_TYPE_SUBSIDY;
9105
9106 OPEN get_sub_income_strm_csr(p_dnz_chr_id => p_chr_id,
9107 p_sub_cle_id => get_acc_mth_code_rec.id);
9108 -- Changed for bug 4044089 by HKPATEL 12/02/2004
9109 --FETCH get_sub_income_strm_csr INTO l_csm_one_off_fee_tbl(i).description;
9110 FETCH get_sub_income_strm_csr INTO l_sty_id;
9111 IF get_sub_income_strm_csr%NOTFOUND THEN
9112 OKL_API.set_message(p_app_name => G_APP_NAME,
9113 p_msg_name => G_REQUIRED_VALUE,
9114 p_token1 => G_COL_NAME_TOKEN,
9115 p_token1_value => 'Subsidy Income Stream Description');
9116 x_return_status := OKL_API.G_RET_STS_ERROR;
9117 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9118 END IF;
9119 CLOSE get_sub_income_strm_csr;
9120
9121 -- New code for bug 4044089 by HKPATEL 12/02/2004
9122 OKL_STREAMS_UTIL.get_dependent_stream_type
9123 (
9124 p_khr_id =>p_chr_id,
9125 p_primary_sty_id =>l_sty_id,
9126 p_dependent_sty_purpose=>'SUBSIDY_INCOME',
9127 x_return_status => l_return_status,
9128 x_dependent_sty_id=>l_dep_sty_id
9129 );
9130 IF l_return_status = 'E' THEN
9131 l_return_status := 'S';
9132 END IF;
9133
9134 IF l_dep_sty_id IS NOT NULL THEN
9135 l_sty_id := l_dep_sty_id;
9136 END IF;
9137
9138 OPEN get_strm_type_code(p_sty_id => l_sty_id);
9139 FETCH get_strm_type_code INTO l_csm_one_off_fee_tbl(i).description;
9140 CLOSE get_strm_type_code;
9141 -- New code for bug 4044089 by HKPATEL 12/02/2004 ends here
9142
9143 END LOOP;
9144 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9145 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
9146 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9147 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9148 END IF;
9149 ELSE
9150 OKL_API.set_message(p_app_name => G_APP_NAME,
9151 p_msg_name => G_REQUIRED_VALUE,
9152 p_token1 => G_COL_NAME_TOKEN,
9153 p_token1_value => 'kle_asset_id');
9154 x_return_status := OKL_API.G_RET_STS_ERROR;
9155 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9156 END IF;
9157 END LOOP;
9158 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
9159 RAISE OKL_API.G_EXCEPTION_ERROR;
9160 END IF;
9161 ELSE
9162 -- Since there are no One off tbl create one
9163 -- Now scan thru the CSM line details table for the asset id
9164 -- and then call the OKL_SUBSIDY_PROCESS_PVT to get the total subsidized amount for an asset
9165 FOR get_asset_lines_rec IN get_asset_lines_csr (p_chr_id => p_chr_id) LOOP
9166 IF get_asset_lines_rec.id IS NOT NULL OR
9167 get_asset_lines_rec.id <> OKL_API.G_MISS_NUM THEN
9168 execute_formula(p_api_version => p_api_version,
9169 p_init_msg_list => p_init_msg_list,
9170 x_return_status => x_return_status,
9171 x_msg_count => x_msg_count,
9172 x_msg_data => x_msg_data,
9173 p_formula_name => 'LINE_CAP_AMNT',
9174 p_contract_id => p_chr_id,
9175 p_line_id => get_asset_lines_rec.id,
9176 x_value => ln_cap_amt);
9177 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9178 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
9179 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9180 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9181 END IF;
9182 execute_formula(p_api_version => p_api_version,
9183 p_init_msg_list => p_init_msg_list,
9184 x_return_status => x_return_status,
9185 x_msg_count => x_msg_count,
9186 x_msg_data => x_msg_data,
9187 p_formula_name => 'LINE_DISCOUNT',
9188 p_contract_id => p_chr_id,
9189 p_line_id => get_asset_lines_rec.id,
9190 x_value => ln_cap_dis);
9191 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9192 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
9193 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9194 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9195 END IF;
9196 -- We are doing the above since we need the cap amt for each line
9197 -- and since the cap amt is inclusive of the discount then
9198 -- we need to exclude the same and then use to send the same to
9199 -- pricing engine since we need to send the subsidyl in %
9200 -- This is applicable to NET accouting method of Subsidy only
9201
9202 --Modified by kthiruva on 15-Mar-2006
9203 --Bug 4898772 - Start of Changes
9204 --As the subsidy is not being deducted in the formula LINE_CAP_AMNT, it does not have to be added again
9205 ln_cap_wos := ln_cap_amt;
9206 --Bug 4898772 - End of Changes
9207
9208 FOR get_acc_mth_code_rec IN get_acc_mth_code (p_line_id => get_asset_lines_rec.id) LOOP
9209 i := i + 1;
9210 -- Changing the over loaded get_asset_subsidy_amont the tbl version
9211 okl_subsidy_process_pvt.get_asset_subsidy_amount(
9212 p_api_version => p_api_version,
9213 p_init_msg_list => p_init_msg_list,
9214 x_return_status => x_return_status,
9215 x_msg_count => x_msg_count,
9216 x_msg_data => x_msg_data,
9217 p_asset_cle_id => get_asset_lines_rec.id,
9218 x_asbv_tbl => l_asbv_tbl);
9219 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9220 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
9221 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9222 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9223 END IF;
9224 IF l_asbv_tbl.COUNT > 0 THEN
9225 FOR k IN l_asbv_tbl.FIRST..l_asbv_tbl.LAST LOOP
9226 IF get_acc_mth_code_rec.accounting_method_code = 'AMORTIZE' AND
9227 l_asbv_tbl(k).subsidy_cle_id = get_acc_mth_code_rec.id THEN
9228 l_csm_one_off_fee_tbl(i).amount := l_asbv_tbl(k).amount;
9229 ELSIF get_acc_mth_code_rec.accounting_method_code = 'NET' AND
9230 l_asbv_tbl(k).subsidy_cle_id = get_acc_mth_code_rec.id THEN
9231 IF l_asbv_tbl(k).amount < ln_cap_wos THEN
9232 l_csm_one_off_fee_tbl(i).rate := l_asbv_tbl(k).amount/ln_cap_wos;
9233 END IF;
9234 END IF;
9235 END LOOP;
9236 ELSE
9237 okl_api.set_message(
9238 p_app_name => G_APP_NAME,
9239 p_msg_name => G_LLA_NO_MATCHING_RECORD,
9240 p_token1 => G_COL_NAME_TOKEN,
9241 p_token1_value => 'Subsidy Records');
9242 x_return_status := OKL_API.G_RET_STS_ERROR;
9243 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9244 END IF;
9245 l_csm_one_off_fee_tbl(i).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
9246 l_csm_one_off_fee_tbl(i).date_paid := get_asset_lines_rec.date_funding;
9247 l_csm_one_off_fee_tbl(i).kle_asset_id := get_asset_lines_rec.id;
9248 l_csm_one_off_fee_tbl(i).other_type_id := get_acc_mth_code_rec.id;
9249 l_csm_one_off_fee_tbl(i).other_type := G_SFE_TYPE_SUBSIDY;
9250 OPEN get_sub_income_strm_csr(p_dnz_chr_id => p_chr_id,
9251 p_sub_cle_id => get_acc_mth_code_rec.id);
9252 --FETCH get_sub_income_strm_csr INTO l_csm_one_off_fee_tbl(i).description;
9253 FETCH get_sub_income_strm_csr INTO l_sty_id;
9254 IF get_sub_income_strm_csr%NOTFOUND THEN
9255 OKL_API.set_message(p_app_name => G_APP_NAME,
9256 p_msg_name => G_REQUIRED_VALUE,
9257 p_token1 => G_COL_NAME_TOKEN,
9258 p_token1_value => 'Subsidy Income Stream Description');
9259 x_return_status := OKL_API.G_RET_STS_ERROR;
9260 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9261 END IF;
9262 CLOSE get_sub_income_strm_csr;
9263 -- New code for bug 4044089 by HKPATEL 12/02/2004
9264 OKL_STREAMS_UTIL.get_dependent_stream_type
9265 (
9266 p_khr_id =>p_chr_id,
9267 p_primary_sty_id =>l_sty_id,
9268 p_dependent_sty_purpose=>'SUBSIDY_INCOME',
9269 x_return_status => l_return_status,
9270 x_dependent_sty_id=>l_dep_sty_id
9271 );
9272 IF l_return_status = 'E' THEN
9273 l_return_status := 'S';
9274 END IF;
9275
9276 IF l_dep_sty_id IS NOT NULL THEN
9277 l_sty_id := l_dep_sty_id;
9278 END IF;
9279
9280 OPEN get_strm_type_code(p_sty_id => l_sty_id);
9281 FETCH get_strm_type_code INTO l_csm_one_off_fee_tbl(i).description;
9282 CLOSE get_strm_type_code;
9283 -- New code for bug 4044089 by HKPATEL 12/02/2004 ends here
9284
9285 END LOOP;
9286 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9287 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
9288 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9289 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9290 END IF;
9291 ELSE
9292 OKL_API.set_message(p_app_name => G_APP_NAME,
9293 p_msg_name => G_REQUIRED_VALUE,
9294 p_token1 => G_COL_NAME_TOKEN,
9295 p_token1_value => 'kle_asset_id');
9296 x_return_status := OKL_API.G_RET_STS_ERROR;
9297 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9298 END IF;
9299 END LOOP;
9300 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
9301 RAISE OKL_API.G_EXCEPTION_ERROR;
9302 END IF;
9303 END IF;
9304 END IF;
9305 px_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
9306 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
9307 x_msg_data => x_msg_data);
9308 EXCEPTION
9309 WHEN OKL_API.G_EXCEPTION_ERROR THEN
9310 IF get_asset_lines_csr%ISOPEN THEN
9311 CLOSE get_asset_lines_csr;
9312 END IF;
9313 IF get_sub_income_strm_csr%ISOPEN THEN
9314 CLOSE get_sub_income_strm_csr;
9315 END IF;
9316 IF get_acc_mth_code%ISOPEN THEN
9317 CLOSE get_acc_mth_code;
9318 END IF;
9319 IF validate_sub_line%ISOPEN THEN
9320 CLOSE validate_sub_line;
9321 END IF;
9322 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9323 p_api_name => l_api_name,
9324 p_pkg_name => g_pkg_name,
9325 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
9326 x_msg_count => x_msg_count,
9327 x_msg_data => x_msg_data,
9328 p_api_type => g_api_type);
9329 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
9330 IF get_asset_lines_csr%ISOPEN THEN
9331 CLOSE get_asset_lines_csr;
9332 END IF;
9333 IF get_sub_income_strm_csr%ISOPEN THEN
9334 CLOSE get_sub_income_strm_csr;
9335 END IF;
9336 IF get_acc_mth_code%ISOPEN THEN
9337 CLOSE get_acc_mth_code;
9338 END IF;
9339 IF validate_sub_line%ISOPEN THEN
9340 CLOSE validate_sub_line;
9341 END IF;
9342 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9343 p_api_name => l_api_name,
9344 p_pkg_name => g_pkg_name,
9345 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
9346 x_msg_count => x_msg_count,
9347 x_msg_data => x_msg_data,
9348 p_api_type => g_api_type);
9349 WHEN OTHERS THEN
9350 IF get_asset_lines_csr%ISOPEN THEN
9351 CLOSE get_asset_lines_csr;
9352 END IF;
9353 IF get_sub_income_strm_csr%ISOPEN THEN
9354 CLOSE get_sub_income_strm_csr;
9355 END IF;
9356 IF get_acc_mth_code%ISOPEN THEN
9357 CLOSE get_acc_mth_code;
9358 END IF;
9359 IF validate_sub_line%ISOPEN THEN
9360 CLOSE validate_sub_line;
9361 END IF;
9362 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9363 p_api_name => l_api_name,
9364 p_pkg_name => g_pkg_name,
9365 p_exc_name => 'OTHERS',
9366 x_msg_count => x_msg_count,
9367 x_msg_data => x_msg_data,
9368 p_api_type => g_api_type);
9369 END extract_subsidized_lines;
9370 -- End modification 11i10 release
9371 -- Start modification 11i10 bakuchib
9372 Procedure extract_fee_lines( p_api_version IN NUMBER,
9373 p_chr_id IN NUMBER,
9374 p_deal_type IN VARCHAR2,
9375 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
9376 x_msg_count OUT NOCOPY NUMBER,
9377 x_msg_data OUT NOCOPY VARCHAR2,
9378 x_return_status OUT NOCOPY VARCHAR2,
9379 px_csm_one_off_fee_tbl IN OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
9380 px_csm_periodic_expenses_tbl IN OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
9381 px_csm_stream_types_tbl IN OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type) AS
9382
9383 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_FEE_LINES';
9384 l_api_version CONSTANT NUMBER := 1;
9385 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
9386 ln_level_cnt NUMBER := 0;
9387 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
9388 l_line_rec l_line_rec_csr%ROWTYPE;
9389 l_lne_rec l_line_rec_csr%ROWTYPE;
9390 l_rl_rec l_rl_csr%ROWTYPE;
9391 r_rl_rec l_rl_csr%ROWTYPE;
9392 l_rl_rec1 l_rl_csr1%ROWTYPE;
9393 l_rl_rec2 l_rl_csr2%ROWTYPE;
9394 l_rl_rec2_exp l_rl_csr2%ROWTYPE;
9395 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
9396 l_strm_name_rec strm_name_csr%ROWTYPE;
9397
9398 l_hdr_rec l_hdr_csr%ROWTYPE;
9399
9400 l_level_type NUMBER;
9401 l_strm_name VARCHAR2(200);
9402 i BINARY_INTEGER := 0;
9403 j BINARY_INTEGER := 0;
9404 k BINARY_INTEGER := 0;
9405 l BINARY_INTEGER := 0;
9406 m BINARY_INTEGER := 0;
9407 idx BINARY_INTEGER := 0;
9408 --l_sty_id NUMBER;
9409 l_sty_id strm_rec_type;
9410 l_pricing_name VARCHAR2(40);
9411
9412 l_passthru_percent NUMBER := 0;
9413 l_fee_type apps.OKL_K_LINES.FEE_TYPE%TYPE;
9414
9415 --TYPE okl_strm_type_id_tbl_type IS TABLE OF okl_strm_type_b.ID%TYPE
9416 --INDEX BY BINARY_INTEGER;
9417 l_strm_type_id_tbl okl_strm_type_id_tbl_type;
9418
9419
9420 px_csm_lease_header okl_create_streams_pub.csm_lease_rec_type;
9421
9422 /* ER# 5150038 */
9423 /* This cursor is used to fetch the linked asset lines when fees are associated to assets */
9424 CURSOR l_linked_asset_line_csr (p_chr_d NUMBER,
9425 p_cle_id NUMBER)
9426 IS
9427 SELECT lse.lty_code,
9428 kle.fee_type,
9429 tl.name,
9430 tl.item_description,
9431 kle.id,
9432 kle.cle_id,
9433 kle.oec,
9434 kle.residual_code,
9435 kle.capital_amount,
9436 kle.initial_direct_cost,
9437 kle.delivered_date,
9438 kle.date_funding_required,
9439 kle.residual_grnty_amount,
9440 kle.date_funding,
9441 kle.residual_value,
9442 kle.date_delivery_expected,
9443 kle.orig_system_id1 old_line_id,
9444 kle.amount,
9445 kle.price_negotiated,
9446 kle.start_date,
9447 kle.end_date,
9448 kle.orig_system_id1,
9449 sts.ste_code,
9450 kle.tradein_amount,
9451 kle.date_funding_expected,
9452 kle.capital_reduction,
9453 kle.capitalize_down_payment_yn
9454 FROM okl_k_lines_full_v kle,
9455 okc_line_styles_b lse,
9456 okc_k_lines_tl tl,
9457 okc_statuses_b sts
9458 WHERE kle.lse_id = lse.id
9459 AND lse.lty_code = 'LINK_FEE_ASSET'
9460 AND tl.id = kle.id
9461 AND kle.cle_id = p_cle_id
9462 AND tl.language = userenv('LANG')
9463 AND kle.dnz_chr_id = p_chr_d
9464 AND sts.code = kle.sts_code
9465 AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
9466
9467 l_linked_asset_line_rec l_linked_asset_line_csr%ROWTYPE;
9468 l_asset_association BOOLEAN := FALSE;
9469 l_expense_exists BOOLEAN := FALSE;
9470 l_ratio NUMBER := 0.0;
9471
9472 CURSOR get_strm_name_fin_csr(p_chr_d NUMBER,
9473 p_cle_id NUMBER )
9474 IS
9475 SELECT crl.rule_information2 amount,
9476 styt.name strm_name
9477 FROM okl_strm_type_tl styt,
9478 okc_k_items cim,
9479 okc_rule_groups_b crg,
9480 okc_rules_b crl
9481 WHERE crl.rgp_id = crg.id
9482 AND crg.RGD_CODE = 'LAFEXP'
9483 AND crl.RULE_INFORMATION_CATEGORY = 'LAFEXP'
9484 AND crg.dnz_chr_id = p_chr_d
9485 AND crg.cle_id = p_cle_id
9486 AND cim.dnz_chr_id = crg.dnz_chr_id
9487 AND cim.cle_id = crg.cle_id
9488 AND cim.object1_id1 = TO_CHAR(styt.id)
9489 AND cim.object1_id2 = '#'
9490 AND cim.jtot_object1_code = 'OKL_STRMTYP'
9491 AND styt.language = USERENV('lang');
9492
9493 -- Cursor put by HKPATEL for rollover fee associated with asset
9494 CURSOR link_rollover_csr(cleId NUMBER)
9495 IS
9496 SELECT okc.id id,
9497 okc.chr_id chr_id,
9498 okc.cle_id cle_id,
9499 okc.dnz_chr_id dnz_chr_id,
9500 kle.capital_amount capital_amount,
9501 kle.amount amount,
9502 lse.lty_code lty_code
9503 -- srsreeni - Bug#5699923 - Added - Start
9504 , sts.ste_code
9505 -- srsreeni - Bug#5699923 - Added - End
9506 FROM okc_k_lines_b okc,
9507 okl_k_lines kle ,
9508 okc_line_styles_b lse
9509 ,okc_statuses_b sts
9510 WHERE okc.cle_id = cleId
9511 AND okc.lse_id = lse.id
9512 AND okc.id = kle.id
9513 AND lty_code = 'LINK_FEE_ASSET'
9514 AND sts.code=okc.sts_code;
9515
9516 --Start of modification for Bug#3320656 BAKUCHIB Modified
9517 -- to get the absorbed fees amount
9518 -- gboomina BUG#4508077 changes start - selecting the fee purpose and stream type
9519 CURSOR get_strm_name_abs_csr(p_chr_d NUMBER,
9520 p_cle_id NUMBER )
9521 IS
9522 SELECT kle.amount amount,
9523 styt.name strm_name,
9524 kle.fee_purpose_code fee_purpose_code,
9525 styt.id sty_id
9526 FROM okl_strm_type_tl styt,
9527 okc_k_items cim,
9528 okc_k_lines_b cle,
9529 okl_k_lines kle
9530 WHERE cle.dnz_chr_id = p_chr_d
9531 AND cle.id = p_cle_id
9532 AND cle.id = kle.id
9533 AND cim.dnz_chr_id = cle.dnz_chr_id
9534 AND cim.cle_id = cle.id
9535 AND cim.object1_id1 = TO_CHAR(styt.id)
9536 AND cim.object1_id2 = '#'
9537 AND cim.jtot_object1_code = 'OKL_STRMTYP'
9538 AND styt.language = USERENV('lang');
9539 --End of modification for Bug#3320656 BAKUCHIB Modified
9540 -- get the self referencing Line based rule information
9541 CURSOR l_rl_income_csr(rlgpId NUMBER,
9542 rgcode okc_rule_groups_b.rgd_code%TYPE,
9543 rlcat okc_rules_b.rule_information_category%TYPE,
9544 chrId NUMBER,
9545 cleId NUMBER )
9546 IS
9547 --srsreeni Bug5890437 start
9548 -- Start of modification for Bug#3322910 BAKUCHIB Modified
9549 SELECT SUM(TO_NUMBER(NVL(crl.rule_information3,1))) level_cnt
9550 -- End of modification for Bug#3322910 BAKUCHIB Modified
9551 --srsreeni Bug5890437 end
9552 FROM okc_rule_groups_b crg,
9553 okc_rules_b crl
9554 WHERE crl.rgp_id = crg.id
9555 AND crl.object2_id1 = rlgpId
9556 AND crg.rgd_code = rgcode
9557 AND crl.rule_information_category = rlcat
9558 AND crg.dnz_chr_id = chrId
9559 AND crg.cle_id = cleId
9560 ORDER BY FND_DATE.canonical_to_date(crl.rule_information2);
9561
9562 -- nikshah -- Bug # 5484903 Fixed
9563 -- Removed CURSOR c_finance_strm_csr (payment_type_id NUMBER, p_chr_id NUMBER)
9564
9565 --mansrini : Code for VR build
9566 CURSOR get_day_conv_on_contrct
9567 IS
9568 SELECT
9569 --Added by srsreeni for bug6076113
9570 -- rate_params.days_in_a_year_code,
9571 -- DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
9572 DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
9573 rate_params.days_in_a_year_code
9574 --srsreeni bug6076113 ends
9575 FROM okl_k_rate_params rate_params
9576 WHERE khr_id = p_chr_id;
9577
9578 CURSOR get_day_conv_on_sgt
9579 IS
9580 SELECT DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
9581 gts.days_in_yr_code
9582 FROM
9583 okl_k_headers khr,
9584 okl_products_v pdt,
9585 okl_ae_tmpt_sets_v aes,
9586 OKL_ST_GEN_TMPT_SETS gts
9587 WHERE
9588 khr.pdt_id = pdt.id AND
9589 pdt.aes_id = aes.id AND
9590 aes.gts_id = gts.id AND
9591 khr.id = p_chr_id;
9592
9593 l_strm_name_fin_rec get_strm_name_fin_csr%ROWTYPE;
9594 --Start of modification for Bug#3320656 BAKUCHIB Modified
9595 l_strm_name_abs_rec get_strm_name_abs_csr%ROWTYPE;
9596 l_strmid_rec l_strmid_csr%ROWTYPE;
9597 --End of modification for Bug#3320656 BAKUCHIB Modified
9598 -- Rollover modification by HKPATEL
9599 link_rollover_rec link_rollover_csr%ROWTYPE;
9600 -- Rollover modification ends here
9601 l_days_in_month_code OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
9602 l_days_in_yr_code OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
9603
9604 -- gboomina Bug 4746368 - Added - Start
9605 -- Condition added to the cursor by kthiruva on 09-Feb-2006
9606 --Only disbursement and processing fee details specified in Base Term should be picked
9607 --Bug 4746189 - Start of Changes
9608 Cursor c_pass ( khrId NUMBER, cleId NUMBER) IS
9609 select vDtls.DISBURSEMENT_BASIS,
9610 vDtls.DISBURSEMENT_FIXED_AMOUNT,
9611 vDtls.DISBURSEMENT_PERCENT,
9612 vDtls.PROCESSING_FEE_BASIS,
9613 vDtls.PROCESSING_FEE_FIXED_AMOUNT,
9614 vDtls.PROCESSING_FEE_PERCENT
9615 from okl_party_payment_hdr vHdr,
9616 okl_party_payment_dtls vDtls
9617 where vDtls.payment_hdr_id = vHdr.id
9618 and vHdr.CLE_ID = cleId
9619 and vHdr.DNZ_CHR_ID = khrId
9620 and vHdr.PASSTHRU_TERM = 'BASE';
9621 --Bug 4746189 - End of Changes
9622
9623 r_pass c_pass%ROWTYPE;
9624
9625 l_disbursement_amount NUMBER;
9626 l_pass_thru_amount NUMBER;
9627 l_pass_thru_pro_fee NUMBER;
9628 -- gboomina Bug 4746368 - Added - End
9629
9630 Begin
9631 print( l_api_name, 'begin');
9632 x_return_status := OKL_API.START_ACTIVITY(
9633 p_api_name => l_api_name,
9634 p_pkg_name => g_pkg_name,
9635 p_init_msg_list => p_init_msg_list,
9636 l_api_version => l_api_version,
9637 p_api_version => p_api_version,
9638 p_api_type => G_API_TYPE,
9639 x_return_status => x_return_status);
9640 -- check if activity started successfully
9641 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
9642 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9643 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
9644 raise OKL_API.G_EXCEPTION_ERROR;
9645 End If;
9646
9647 --get day convention info : mansrini
9648 OPEN get_day_conv_on_contrct;
9649 FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
9650 CLOSE get_day_conv_on_contrct;
9651
9652 --Added by srsreeni for bug6076113
9653 -- IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
9654 IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
9655 --srsreeni bug6076113 ends
9656 THEN
9657 OPEN get_day_conv_on_sgt;
9658 FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
9659 CLOSE get_day_conv_on_sgt;
9660 END IF;
9661
9662 OPEN l_hdr_pdt_csr(p_chr_id);
9663 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
9664 CLOSE l_hdr_pdt_csr;
9665
9666 OPEN l_hdr_csr(p_chr_id);
9667 FETCH l_hdr_csr into l_hdr_rec;
9668 IF l_hdr_csr%NOTFOUND THEN
9669 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9670 END IF;
9671 CLOSE l_hdr_csr;
9672 i := 0; j := 0;
9673 k := px_csm_periodic_expenses_tbl.COUNT;
9674 l := px_csm_one_off_fee_tbl.COUNT;
9675 m := px_csm_stream_types_tbl.COUNT;
9676 FOR l_lne_rec in l_line_rec_csr ( p_chr_id, 'FEE' ) LOOP
9677
9678 OPEN fee_strm_type_csr ( l_lne_rec.id, 'FEE' );
9679 FETCH fee_strm_type_csr into l_fee_strm_type_rec;
9680 CLOSE fee_strm_type_csr;
9681 l_level_type := l_fee_strm_type_rec.styp_id;
9682 l_strm_name := l_fee_strm_type_rec.strm_name;
9683 print( l_api_name, 'Fee Line='||l_strm_name);
9684
9685 l_fee_type := nvl(l_lne_rec.fee_type, 'NOFEETYPE');
9686 If (( l_fee_type = 'PASSTHROUGH' ) AND (l_passthru_percent < 0.0)) Then
9687 okl_api.set_message(
9688 p_app_name => G_APP_NAME,
9689 p_msg_name => 'OKL_LLA_NEG_PASSTHRU');
9690 raise OKL_API.G_EXCEPTION_ERROR;
9691 End If;
9692
9693 print( l_api_name, 'fee type'||l_fee_type);
9694 If (( l_fee_strm_type_rec.capitalize_yn = 'Y') OR ( l_fee_type = 'CAPITALIZED' )) Then
9695 /* The fee amounts are already prorated into
9696 * asset costs. This is true only for
9697 * capitalized fees.
9698 */
9699 NULL;
9700 Elsif ( l_fee_type = 'PASSTHROUGH' ) Then
9701
9702 /* ER# 5150038 */
9703 /* Getting the linked asset line for the EXPENSE or MISCELLANEOUS fee.
9704 * If there is an asset association, this cursor will return those linked asset association.
9705 * In the case of MISCELLANEOUS fee, only if the relevant payment is also associated to an asset,
9706 * it is considered as an asset association.
9707 */
9708 OPEN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id);
9709 FETCH l_linked_asset_line_csr INTO l_linked_asset_line_rec;
9710
9711 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
9712 FETCH l_rl_csr2 INTO l_rl_rec2;
9713
9714 IF l_linked_asset_line_csr%FOUND AND
9715 l_rl_csr2%FOUND
9716 THEN
9717 l_asset_association := TRUE;
9718 ELSE
9719 l_asset_association := FALSE;
9720 END IF;
9721 CLOSE l_linked_asset_line_csr;
9722 CLOSE l_rl_csr2;
9723
9724 IF l_asset_association THEN
9725
9726 FOR l_linked_asset_line_rec IN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id) LOOP
9727
9728 /* Calculate the ratio */
9729 l_ratio := l_linked_asset_line_rec.amount / l_lne_rec.amount;
9730
9731 -- gboomina Bug 4746368 - Start
9732 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
9733 FETCH l_rl_csr2 INTO l_rl_rec2;
9734 IF l_rl_csr2%FOUND THEN
9735 idx := 0;
9736 FOR l_rl_rec in l_rl_csr (l_rl_rec2.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_linked_asset_line_rec.id ) LOOP
9737
9738 -- instead of l_rl_csr1 cursor, using c_pass cursor to calculate pass thru amount
9739 l_disbursement_amount := 0;
9740 l_pass_thru_amount := 0;
9741 l_pass_thru_pro_fee:= 0;
9742
9743 FOR r_pass in c_pass(TO_NUMBER(p_chr_id), l_lne_rec.id )
9744 LOOP
9745 If ( r_pass.disbursement_basis = 'AMOUNT' ) Then
9746 /* Calculate the portion of the disbursement for the current linked asset */
9747 l_disbursement_amount := NVL(r_pass.disbursement_fixed_amount,0) * l_ratio;
9748
9749 /* Prorate the disbursement amount into each level amount */
9750 IF l_rl_rec.rule_information8 IS NOT NULL THEN
9751 l_disbursement_amount := l_disbursement_amount *
9752 TO_NUMBER(l_rl_rec.rule_information8) /
9753 l_linked_asset_line_rec.amount;
9754 ELSE
9755 l_disbursement_amount := l_disbursement_amount *
9756 TO_NUMBER(l_rl_rec.rule_information6) /
9757 l_linked_asset_line_rec.amount;
9758 END IF;
9759
9760 Else
9761 l_disbursement_amount := NVL(l_rl_rec.RULE_INFORMATION6,0) * NVL(r_pass.disbursement_percent,0) / 100 ;
9762 End If;
9763
9764 If ( r_pass.processing_fee_basis = 'AMOUNT' ) Then
9765 /* Calculate the portion of the processing fee for the current linked asset */
9766 l_pass_thru_pro_fee := NVL(r_pass.processing_fee_fixed_amount,0) * l_ratio;
9767
9768 /* Prorate the disbursement amount into each level amount */
9769 IF l_rl_rec.rule_information8 IS NOT NULL THEN
9770 l_pass_thru_pro_fee := l_pass_thru_pro_fee *
9771 TO_NUMBER(l_rl_rec.rule_information8) /
9772 l_linked_asset_line_rec.amount;
9773 ELSE
9774 l_pass_thru_pro_fee := l_pass_thru_pro_fee *
9775 TO_NUMBER(l_rl_rec.rule_information6) /
9776 l_linked_asset_line_rec.amount;
9777 END IF;
9778 Else
9779 l_pass_thru_pro_fee := l_disbursement_amount * r_pass.processing_fee_percent/100;
9780 End If;
9781 l_pass_thru_amount := l_pass_thru_amount + l_disbursement_amount - l_pass_thru_pro_fee;
9782 END LOOP;
9783 -- gboomina Bug 4746189 - End
9784 IF ( l_pass_thru_amount <> NVL(l_rl_rec.RULE_INFORMATION6,0)) Then
9785 -- Start of Bug#2757289 modification
9786 IF (l_rl_rec.rule_information7 IS NOT NULL OR
9787 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
9788 (l_rl_rec.rule_information8 IS NOT NULL OR
9789 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
9790 k := k + 1;
9791 idx := idx + 1;
9792 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
9793 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
9794 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
9795 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
9796 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
9797 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
9798 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
9799 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
9800 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
9801 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
9802 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
9803 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
9804
9805 IF(l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
9806 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
9807 END IF;
9808 -- End of Bug#2757289 modification
9809
9810 -- Added by kthiruva on 29-Dec-2005.
9811 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
9812 -- Bug 4915938 - Start of Changes
9813 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
9814 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
9815 ELSE
9816 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
9817 END IF;
9818 -- Bug 4915938 - End of Changes
9819
9820 ELSIF (l_rl_rec.rule_information7 IS NULL OR
9821 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
9822 (l_rl_rec.rule_information8 IS NULL OR
9823 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
9824 k := k + 1;
9825 idx := idx + 1;
9826 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
9827 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
9828 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
9829 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
9830 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
9831 -- gboomina Bug 4746368 - Modified amount calculation - Start
9832 px_csm_periodic_expenses_tbl(k).amount := px_csm_periodic_expenses_tbl(k).amount - l_pass_thru_amount;
9833 -- gboomina Bug 4746368 - Modified amount calculation - End
9834 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
9835 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
9836 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
9837 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
9838 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
9839 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
9840
9841 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
9842 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
9843 END IF;
9844 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
9845 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
9846 ELSE
9847 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
9848 END IF;
9849 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
9850 px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
9851 ELSE
9852 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
9853 END IF;
9854 END IF;
9855 END IF;
9856 END LOOP;-- end-loop: l_rl_rec
9857 Else -- this condition is never reached.
9858 k := k + 1;
9859 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
9860 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
9861 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
9862 px_csm_periodic_expenses_tbl(k).period := 'M';
9863 -- gboomina Bug 4746368 - Modified amount calculation - Start
9864 px_csm_periodic_expenses_tbl(k).amount := l_linked_asset_line_rec.amount - l_pass_thru_amount;
9865 -- gboomina Bug 4746368 - Modified amount calculation - End
9866 px_csm_periodic_expenses_tbl(k).number_of_periods := 1;
9867 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
9868 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
9869 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
9870 px_csm_periodic_expenses_tbl(k).date_start := l_linked_asset_line_rec.start_date;
9871 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
9872 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
9873 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
9874
9875 print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
9876 '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
9877 'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
9878 End If;
9879 CLOSE l_rl_csr2;
9880 END LOOP; -- end-for-loop: l_linked_asset_line_rec
9881 ELSE
9882 -- gboomina Bug 4746368 - Start
9883 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne_rec.id );
9884 FETCH l_rl_csr2 INTO l_rl_rec2;
9885 IF l_rl_csr2%FOUND THEN
9886 idx := 0;
9887 FOR l_rl_rec in l_rl_csr (l_rl_rec2.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_lne_rec.id ) LOOP
9888
9889 -- instead of l_rl_csr1 cursor, using c_pass cursor to calculate pass thru amount
9890 l_disbursement_amount := 0;
9891 l_pass_thru_amount := 0;
9892 l_pass_thru_pro_fee:= 0;
9893
9894 FOR r_pass in c_pass(TO_NUMBER(p_chr_id), l_lne_rec.id )
9895 LOOP
9896 If ( r_pass.disbursement_basis = 'AMOUNT' ) Then
9897 l_disbursement_amount := NVL(r_pass.disbursement_fixed_amount,0);
9898 Else
9899 l_disbursement_amount := NVL(l_rl_rec.RULE_INFORMATION6,0) * NVL(r_pass.disbursement_percent,0) / 100 ;
9900 End If;
9901 If ( r_pass.processing_fee_basis = 'AMOUNT' ) Then
9902 l_pass_thru_pro_fee := r_pass.processing_fee_fixed_amount;
9903 Else
9904 l_pass_thru_pro_fee := l_disbursement_amount * r_pass.processing_fee_percent/100;
9905 End If;
9906 l_pass_thru_amount := l_pass_thru_amount + l_disbursement_amount - l_pass_thru_pro_fee;
9907 END LOOP;
9908 -- gboomina Bug 4746189 - End
9909 IF ( l_pass_thru_amount <> NVL(l_rl_rec.RULE_INFORMATION6,0)) Then
9910 -- Start of Bug#2757289 modification
9911 IF (l_rl_rec.rule_information7 IS NOT NULL OR
9912 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
9913 (l_rl_rec.rule_information8 IS NOT NULL OR
9914 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
9915 k := k + 1;
9916 idx := idx + 1;
9917 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
9918 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
9919 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
9920 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
9921 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
9922 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
9923 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
9924 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
9925 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
9926 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
9927 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
9928 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
9929
9930 IF(l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
9931 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
9932 END IF;
9933 -- End of Bug#2757289 modification
9934
9935 -- Added by kthiruva on 29-Dec-2005.
9936 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
9937 -- Bug 4915938 - Start of Changes
9938 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
9939 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
9940 ELSE
9941 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
9942 END IF;
9943 -- Bug 4915938 - End of Changes
9944
9945 ELSIF (l_rl_rec.rule_information7 IS NULL OR
9946 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
9947 (l_rl_rec.rule_information8 IS NULL OR
9948 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
9949 k := k + 1;
9950 idx := idx + 1;
9951 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
9952 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
9953 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
9954 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
9955 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
9956 -- gboomina Bug 4746368 - Modified amount calculation - Start
9957 px_csm_periodic_expenses_tbl(k).amount := px_csm_periodic_expenses_tbl(k).amount - l_pass_thru_amount;
9958 -- gboomina Bug 4746368 - Modified amount calculation - End
9959 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
9960 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
9961 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
9962 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
9963 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
9964 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
9965
9966 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
9967 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
9968 END IF;
9969 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
9970 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
9971 ELSE
9972 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
9973 END IF;
9974 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
9975 px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
9976 ELSE
9977 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
9978 END IF;
9979 END IF;
9980 END IF;
9981 END LOOP;
9982 Else -- this condition is never reached.
9983 k := k + 1;
9984 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
9985 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
9986 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
9987 px_csm_periodic_expenses_tbl(k).period := 'M';
9988 -- gboomina Bug 4746368 - Modified amount calculation - Start
9989 px_csm_periodic_expenses_tbl(k).amount := l_lne_rec.amount - l_pass_thru_amount;
9990 -- gboomina Bug 4746368 - Modified amount calculation - End
9991 px_csm_periodic_expenses_tbl(k).number_of_periods := 1;
9992 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
9993 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
9994 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
9995 px_csm_periodic_expenses_tbl(k).date_start := l_lne_rec.start_date;
9996 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
9997 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
9998 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
9999
10000 print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
10001 '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
10002 'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
10003 End If;
10004 CLOSE l_rl_csr2;
10005 END IF; -- end-if l_asset_association
10006 Elsif (( l_fee_type = 'EXPENSE' )OR ( l_fee_type = 'MISCELLANEOUS' )) THEN
10007 /* ER# 5150038 */
10008 /* Getting the linked asset line for the EXPENSE or MISCELLANEOUS fee.
10009 * If there is an asset association, this cursor will return those linked asset association.
10010 * In the case of MISCELLANEOUS fee, only if the relevant payment is also associated to an asset,
10011 * it is considered as an asset association.
10012 */
10013 OPEN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id);
10014 FETCH l_linked_asset_line_csr INTO l_linked_asset_line_rec;
10015
10016 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
10017 FETCH l_rl_csr2 INTO l_rl_rec2;
10018
10019 IF l_linked_asset_line_csr%FOUND AND
10020 ((l_rl_csr2%FOUND AND l_fee_type = 'MISCELLANEOUS') OR
10021 l_fee_type = 'EXPENSE')
10022 THEN
10023 l_asset_association := TRUE;
10024 ELSE
10025 l_asset_association := FALSE;
10026 END IF;
10027 CLOSE l_linked_asset_line_csr;
10028 CLOSE l_rl_csr2;
10029
10030 OPEN l_rl_csr2 ( 'LAFEXP', 'LAFEXP', TO_NUMBER(p_chr_id), l_lne_rec.id );
10031 FETCH l_rl_csr2 INTO l_rl_rec2_exp;
10032 IF l_rl_csr2%FOUND THEN
10033 l_expense_exists := TRUE;
10034 ELSE
10035 l_expense_exists := FALSE;
10036 END IF;
10037 CLOSE l_rl_csr2;
10038
10039 IF l_expense_exists THEN
10040 OPEN l_rl_csr1 ( 'LAFEXP', 'LAFREQ', TO_NUMBER(p_chr_id), l_lne_rec.id );
10041 FETCH l_rl_csr1 INTO l_rl_rec1;
10042 CLOSE l_rl_csr1;
10043 END IF;
10044
10045 IF l_asset_association THEN
10046 FOR l_linked_asset_line_rec IN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id)
10047 LOOP
10048 /* IDC amount needs to be prorated based on the fee amounts allocated to each assets
10049 * Hence the formula of the ratio calculation = (fee amounts allocated to each assets) / (total fee amount)
10050 * fee amounts allocated to each assets = l_linked_asset_line_rec.amount
10051 * total fee amount = l_lne_rec.amount
10052 * Hence the IDC amount to be prorated = (IDC amount) * ratio
10053 */
10054 l_ratio := l_linked_asset_line_rec.amount / l_lne_rec.amount;
10055
10056 If ( nvl(l_lne_rec.initial_direct_cost,0) > 0.0 ) Then
10057 l := l + 1;
10058 px_csm_one_off_fee_tbl(l).description := l_fee_strm_type_rec.strm_name;
10059 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
10060 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
10061 px_csm_one_off_fee_tbl(l).amount := l_lne_rec.initial_direct_cost * l_ratio;
10062 px_csm_one_off_fee_tbl(l).date_paid := l_linked_asset_line_rec.start_date;
10063 px_csm_one_off_fee_tbl(l).kle_fee_id := l_linked_asset_line_rec.id; -- Assign linked fee asset line id
10064 -- gboomina BUG#4508077 IDC changes start
10065 px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
10066 -- gboomina BUG#4508077 IDC changes end
10067 End If;
10068 --Added by kthiruva on 15-Feb-2006
10069 -- Streams for the fee need to be retrieved if Pricing Name is setup for the same
10070 --Bug 4930293 - Start of Changes
10071 --Added by srsreeni for bug5841892
10072 -- m := m + 1;
10073 -- px_csm_stream_types_tbl(m).stream_type_id := l_fee_strm_type_rec.styp_id;
10074 --bug5841892 end of changes
10075 --vdamerla Bug6149951 start
10076 IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
10077 get_primary_pricing_name
10078 (
10079 p_khr_id =>p_chr_id,
10080 p_sty_id =>l_fee_strm_type_rec.styp_id,
10081 x_return_status =>x_return_status,
10082 x_primary_pricing_name =>l_pricing_name
10083 );
10084 --Added by srsreeni for bug5841892
10085 if l_pricing_name is not null then
10086 m := m + 1;
10087 px_csm_stream_types_tbl(m).stream_type_id := l_fee_strm_type_rec.styp_id;
10088 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
10089 px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id; -- Assign linked fee asset line id
10090 end if;
10091 --bug5841892 end of changes
10092 --Bug 4930293 - End of Changes
10093
10094 -- gboomina BUG#4508077 IDC changes start
10095 -- get dependent streams for the reporting product
10096 IF(g_rep_req_yn = 'Y') THEN
10097
10098 get_dependent_stream_types
10099 (
10100 p_khr_id => p_chr_id,
10101 p_pdt_id => l_pdt_id_rec.report_pdt_id,
10102 p_primary_sty_id => l_fee_strm_type_rec.styp_id,
10103 x_return_status => x_return_status,
10104 x_dependent_sty_id => l_strm_type_id_tbl
10105 );
10106 IF(x_return_status = 'E') THEN
10107 x_return_status := 'S';
10108 END IF;
10109 -- get dependent streams for the main product
10110 ELSE
10111 get_dependent_stream_types
10112 (
10113 p_khr_id => p_chr_id,
10114 p_primary_sty_id => l_fee_strm_type_rec.styp_id,
10115 x_return_status => x_return_status,
10116 x_dependent_sty_id => l_strm_type_id_tbl
10117 );
10118 IF(x_return_status = 'E') THEN
10119 x_return_status := 'S';
10120 END IF;
10121
10122 END IF; -- end of dependent streams block
10123 -- populate the dependent stream types
10124 IF l_strm_type_id_tbl.COUNT > 0 THEN
10125 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
10126 m := m + 1;
10127 --Modified by kthiruva on 21-Oct-2005
10128 --Bug 4690770 - Start of Changes
10129 --l_strm_type_id_tbl should be referenced, not l_sty_id during the assignments
10130 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
10131 px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
10132 px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;-- Assign linked fee asset line id
10133 --Bug 4690770 - End of Changes
10134 END LOOP;
10135 END IF; -- end of populate dependent stream types
10136 -- gboomina BUG#4508077 IDC changes end
10137 END IF;--vdamerla Bug6149951 ends
10138
10139 IF l_expense_exists THEN
10140 -- sjalasut, bug 4872258. assumption is now -1 instead of zero. START
10141 IF NVL(l_lne_rec.amount,-1) <> NVL(l_lne_rec.initial_direct_cost,-1) THEN
10142 -- sjalasut, bug 4872258. assumption is now -1 instead of zero. END
10143 k := k + 1;
10144 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
10145 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10146 px_csm_periodic_expenses_tbl(k).description := l_fee_strm_type_rec.strm_name;
10147 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
10148 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(nvl(l_rl_rec2_exp.RULE_INFORMATION2,'0'));
10149 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec2_exp.RULE_INFORMATION1, l_hdr_rec.term));
10150 px_csm_periodic_expenses_tbl(k).amount := px_csm_periodic_expenses_tbl(k).amount - (NVL(l_lne_rec.initial_direct_cost,0)/px_csm_periodic_expenses_tbl(k).number_of_periods);
10151 px_csm_periodic_expenses_tbl(k).amount := px_csm_periodic_expenses_tbl(k).amount * l_ratio;
10152 px_csm_periodic_expenses_tbl(k).period := l_rl_rec1.object1_id1;
10153 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10154 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
10155 px_csm_periodic_expenses_tbl(k).date_start := l_linked_asset_line_rec.start_date;
10156 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
10157 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10158 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
10159 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
10160 END IF;
10161 Elsif ( l_fee_type <> 'MISCELLANEOUS' ) Then
10162 --m := m + 1;
10163 --px_csm_stream_types_tbl(m).stream_type_id := l_fee_strm_type_rec.styp_id;
10164 --px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;
10165 k := k + 1;
10166 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
10167 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10168 px_csm_periodic_expenses_tbl(k).description := l_fee_strm_type_rec.strm_name;
10169 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
10170 px_csm_periodic_expenses_tbl(k).amount := nvl(l_lne_rec.amount,0)-nvl(l_lne_rec.initial_direct_cost,0);
10171 px_csm_periodic_expenses_tbl(k).amount := px_csm_periodic_expenses_tbl(k).amount * l_ratio;
10172 px_csm_periodic_expenses_tbl(k).number_of_periods := 1;
10173 px_csm_periodic_expenses_tbl(k).period := 'M';
10174 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10175 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
10176 px_csm_periodic_expenses_tbl(k).date_start := l_linked_asset_line_rec.start_date;
10177 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
10178 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10179 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
10180 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
10181
10182 print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
10183 '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
10184 'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
10185
10186 End If; -- end-if: l_expense_exists
10187
10188 -- Process payments
10189 IF ( l_fee_type = 'MISCELLANEOUS' ) Then
10190 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
10191 FETCH l_rl_csr2 INTO l_rl_rec2;
10192
10193 IF l_rl_csr2%FOUND THEN
10194
10195 --Added by srsreeni for bug5841892
10196 -- m := m + 1;
10197 -- px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
10198 --bug5841892 end of changes
10199 -- vdamerla Forward Port Bug6149951
10200 --vdamerla Bug6149951 start
10201 IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
10202
10203 get_primary_pricing_name
10204 (
10205 p_khr_id =>p_chr_id,
10206 p_sty_id =>l_rl_rec2.object1_id1,
10207 x_return_status =>x_return_status,
10208 x_primary_pricing_name =>l_pricing_name
10209 );
10210 --Added by srsreeni for bug5841892
10211 if l_pricing_name is not null then
10212 m := m + 1;
10213 px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
10214 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
10215 px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;
10216 end if;
10217 --bug5841892 end of changes
10218 -- vdamerla Forward Port Bug6149951
10219 --OPEN strm_name_csr( l_rl_rec2.object1_id1);
10220 --FETCH strm_name_csr INTO l_strm_name_rec;
10221 --CLOSE strm_name_csr;
10222
10223 --l_level_type := l_rl_rec2.object1_id1;
10224 --l_strm_name := l_strm_name_rec.name;
10225
10226 --Added by srsreeni for bug5841892
10227 -- px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;
10228 --bug5841892 end of changes
10229 --Added by kthiruva on 07-Dec-2005
10230 --Accrued Fee Income streams are retrieved and requested if defined
10231 --Bug 3410253 - Start of Changes
10232 IF(g_rep_req_yn = 'Y') THEN
10233
10234 get_dependent_stream_type
10235 (
10236 p_khr_id =>p_chr_id,
10237 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
10238 p_primary_sty_id => l_level_type,
10239 p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
10240 x_return_status => x_return_status,
10241 x_dependent_sty_id =>l_sty_id
10242 );
10243
10244 IF(x_return_status = 'E') THEN
10245 x_return_status := 'S';
10246 END IF;
10247
10248 ELSE
10249 get_dependent_stream_type
10250 (
10251 p_khr_id => p_chr_id,
10252 p_primary_sty_id => l_level_type,
10253 p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
10254 x_return_status => x_return_status,
10255 x_dependent_sty_id =>l_sty_id
10256 );
10257
10258 IF x_return_status = 'E' THEN
10259 x_return_status := 'S';
10260 END IF;
10261 END IF;
10262
10263 IF(l_sty_id.id IS NOT NULL) THEN
10264 m := m + 1;
10265 px_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
10266 px_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
10267 px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;
10268 END IF;
10269
10270 --Bug 3410253 - End of Changes
10271 END IF;--vdamerla Bug6149951 ends
10272
10273 OPEN strm_name_csr( l_rl_rec2.object1_id1);
10274 FETCH strm_name_csr INTO l_strm_name_rec;
10275 CLOSE strm_name_csr;
10276
10277 l_level_type := l_rl_rec2.object1_id1;
10278 l_strm_name := l_strm_name_rec.name;
10279
10280
10281 idx := 0;
10282 FOR l_rl_rec in l_rl_csr (l_rl_rec2.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_linked_asset_line_rec.id ) LOOP
10283 -- Start of Bug#2757289 modification
10284 IF (l_rl_rec.rule_information7 IS NOT NULL OR
10285 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
10286 (l_rl_rec.rule_information8 IS NOT NULL OR
10287 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
10288 k := k + 1;
10289 idx := idx + 1;
10290 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
10291 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
10292 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
10293 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
10294 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
10295 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
10296 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10297 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
10298 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
10299 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
10300 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
10301 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
10302
10303 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
10304 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
10305 END IF;
10306
10307 -- Added by kthiruva on 29-Dec-2005.
10308 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
10309 -- Bug 4915938 - Start of Changes
10310 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
10311 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
10312 ELSE
10313 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10314 END IF;
10315 -- Bug 4915938 - End of Changes
10316 ELSIF (l_rl_rec.rule_information7 IS NULL OR
10317 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
10318 (l_rl_rec.rule_information8 IS NULL OR
10319 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
10320 -- End of Bug#2757289 modification
10321 k := k + 1;
10322 idx := idx + 1;
10323 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
10324 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
10325 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
10326 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
10327 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
10328 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
10329 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
10330 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10331 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
10332 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
10333 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
10334
10335 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
10336 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
10337 END IF;
10338 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
10339 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
10340 ELSE
10341 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10342 END IF;
10343 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
10344 px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
10345 ELSE
10346 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
10347 END IF;
10348 END IF;
10349 END LOOP; -- END-FOR-LOOP: l_rl_csr
10350 Else -- l_rl_csr2%NOTFOUND
10351 --Added by srsreeni for bug5841892
10352 -- m := m + 1;
10353 -- px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
10354 --bug5841892 end of changes
10355 --vdamerla Bug6149951 start
10356 IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
10357 get_primary_pricing_name
10358 (
10359 p_khr_id =>p_chr_id,
10360 p_sty_id =>l_level_type,
10361 x_return_status =>x_return_status,
10362 x_primary_pricing_name =>l_pricing_name
10363 );
10364 --Added by srsreeni for bug5841892
10365 if l_pricing_name is not null then
10366 m := m + 1;
10367 px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
10368 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
10369 px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;
10370 end if;
10371 END IF;--vdamerla Bug6149951 ends
10372
10373 --bug5841892 end of changes
10374 k := k + 1;
10375 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
10376 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
10377 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
10378 px_csm_periodic_expenses_tbl(k).period := 'M';
10379 px_csm_periodic_expenses_tbl(k).amount := l_linked_asset_line_rec.amount;
10380 px_csm_periodic_expenses_tbl(k).number_of_periods := 1;
10381 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10382 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10383 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
10384 px_csm_periodic_expenses_tbl(k).date_start := l_linked_asset_line_rec.start_date;
10385 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
10386 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
10387 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
10388
10389 print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
10390 '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
10391 'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
10392
10393 End If; -- end-if l_rl_csr2%FOUND
10394 CLOSE l_rl_csr2;
10395 End If; -- end-if l_fee_type = 'MISCELLANEOUS'
10396
10397 END LOOP; -- end-loop: l_linked_asset_line_rec
10398 ELSE -- No asset association found
10399 If ( nvl(l_lne_rec.initial_direct_cost,0) > 0.0 ) Then
10400 l := l + 1;
10401 px_csm_one_off_fee_tbl(l).description := l_strm_name;
10402 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
10403 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
10404 px_csm_one_off_fee_tbl(l).amount := l_lne_rec.initial_direct_cost;
10405 px_csm_one_off_fee_tbl(l).date_paid := l_lne_rec.start_date;
10406 px_csm_one_off_fee_tbl(l).kle_fee_id := l_lne_rec.id;
10407 -- gboomina BUG#4508077 IDC changes start
10408 px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
10409 -- gboomina BUG#4508077 IDC changes end
10410 End If;
10411 --Added by kthiruva on 15-Feb-2006
10412 -- Streams for the fee need to be retrieved if Pricing Name is setup for the same
10413 --Bug 4930293 - Start of Changes
10414 --Added by srsreeni for bug5841892
10415 -- m := m + 1;
10416 -- px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
10417 --bug5841892 end of changes
10418 get_primary_pricing_name
10419 (
10420 p_khr_id =>p_chr_id,
10421 p_sty_id =>l_level_type,
10422 x_return_status =>x_return_status,
10423 x_primary_pricing_name =>l_pricing_name
10424 );
10425 --Added by srsreeni for bug5841892
10426 if l_pricing_name is not null then
10427 m := m + 1;
10428 px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
10429 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
10430 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
10431 end if;
10432 --bug5841892 end of changes
10433 --Bug 4930293 - End of Changes
10434
10435 -- gboomina BUG#4508077 IDC changes start
10436 -- get dependent streams for the reporting product
10437 IF(g_rep_req_yn = 'Y') THEN
10438
10439 get_dependent_stream_types
10440 (
10441 p_khr_id => p_chr_id,
10442 p_pdt_id => l_pdt_id_rec.report_pdt_id,
10443 p_primary_sty_id => l_level_type,
10444 x_return_status => x_return_status,
10445 x_dependent_sty_id => l_strm_type_id_tbl
10446 );
10447 IF(x_return_status = 'E') THEN
10448 x_return_status := 'S';
10449 END IF;
10450 -- get dependent streams for the main product
10451 ELSE
10452 get_dependent_stream_types
10453 (
10454 p_khr_id => p_chr_id,
10455 p_primary_sty_id => l_level_type,
10456 x_return_status => x_return_status,
10457 x_dependent_sty_id => l_strm_type_id_tbl
10458 );
10459 IF(x_return_status = 'E') THEN
10460 x_return_status := 'S';
10461 END IF;
10462
10463 END IF; -- end of dependent streams block
10464
10465 -- populate the dependent stream types
10466 IF l_strm_type_id_tbl.COUNT > 0 THEN
10467 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
10468 m := m + 1;
10469 --Modified by kthiruva on 21-Oct-2005
10470 --Bug 4690770 - Start of Changes
10471 --l_strm_type_id_tbl should be referenced, not l_sty_id during the assignments
10472 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
10473 px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
10474 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
10475 --Bug 4690770 - End of Changes
10476 END LOOP;
10477 -- gboomina BUG#4508077 IDC changes end
10478 END IF; -- end of populate dependent stream types
10479
10480 IF l_expense_exists THEN
10481 -- sjalasut, bug 4872258. assumption is now -1 instead of zero. START
10482 IF NVL(l_lne_rec.amount,-1) <> NVL(l_lne_rec.initial_direct_cost,-1) THEN
10483 -- sjalasut, bug 4872258. assumption is now -1 instead of zero. END
10484 k := k + 1;
10485 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
10486 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10487 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
10488 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
10489 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(nvl(l_rl_rec2_exp.RULE_INFORMATION2,'0'));
10490 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec2_exp.RULE_INFORMATION1, l_hdr_rec.term));
10491 px_csm_periodic_expenses_tbl(k).amount := px_csm_periodic_expenses_tbl(k).amount - (NVL(l_lne_rec.initial_direct_cost,0)/px_csm_periodic_expenses_tbl(k).number_of_periods);
10492 px_csm_periodic_expenses_tbl(k).period := l_rl_rec1.object1_id1;
10493 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10494 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
10495 px_csm_periodic_expenses_tbl(k).date_start := l_lne_rec.start_date;
10496 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
10497 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10498 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
10499 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
10500 END IF;
10501 Elsif ( l_fee_type <> 'MISCELLANEOUS' ) Then
10502 --m := m + 1;
10503 --px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
10504 --srsreeni Bug6149951 start
10505 IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
10506 get_primary_pricing_name
10507 (
10508 p_khr_id =>p_chr_id,
10509 p_sty_id =>l_level_type,
10510 x_return_status =>x_return_status,
10511 x_primary_pricing_name =>l_pricing_name
10512 );
10513 IF l_pricing_name IS NOT NULL
10514 THEN
10515 m := m + 1;
10516 px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
10517 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
10518 px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;
10519 END IF;
10520 END IF;
10521 --srsreeni Bug6149951 ends
10522 --px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
10523 k := k + 1;
10524 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
10525 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10526 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
10527 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
10528 px_csm_periodic_expenses_tbl(k).amount := nvl(l_lne_rec.amount,0)-nvl(l_lne_rec.initial_direct_cost,0);
10529 px_csm_periodic_expenses_tbl(k).number_of_periods := 1;
10530 px_csm_periodic_expenses_tbl(k).period := 'M';
10531 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10532 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
10533 px_csm_periodic_expenses_tbl(k).date_start := l_lne_rec.start_date;
10534 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
10535 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10536 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
10537 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
10538
10539 print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
10540 '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
10541 'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
10542
10543 End If; -- end-if: l_expense_exists
10544
10545 IF ( l_fee_type = 'MISCELLANEOUS' ) Then
10546 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne_rec.id );
10547 FETCH l_rl_csr2 INTO l_rl_rec2;
10548
10549 IF l_rl_csr2%FOUND THEN
10550 --Added by srsreeni for bug5841892
10551 -- m := m + 1;
10552 -- px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
10553 --bug5841892 end of changes
10554 get_primary_pricing_name
10555 (
10556 p_khr_id =>p_chr_id,
10557 p_sty_id =>l_rl_rec2.object1_id1,
10558 x_return_status =>x_return_status,
10559 x_primary_pricing_name =>l_pricing_name
10560 );
10561 --Added by srsreeni for bug5841892
10562 if l_pricing_name is not null then
10563 m := m + 1;
10564 px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
10565 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
10566 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
10567 end if;
10568 --bug5841892 end of changes
10569 OPEN strm_name_csr( l_rl_rec2.object1_id1);
10570 FETCH strm_name_csr INTO l_strm_name_rec;
10571 CLOSE strm_name_csr;
10572
10573 l_level_type := l_rl_rec2.object1_id1;
10574 l_strm_name := l_strm_name_rec.name;
10575 --Added by srsreeni for bug5841892
10576 -- px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
10577 --bug5841892 end of changes
10578 --Added by kthiruva on 07-Dec-2005
10579 --Accrued Fee Income streams are retrieved and requested if defined
10580 --Bug 3410253 - Start of Changes
10581 IF(g_rep_req_yn = 'Y') THEN
10582
10583 get_dependent_stream_type
10584 (
10585 p_khr_id =>p_chr_id,
10586 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
10587 p_primary_sty_id => l_level_type,
10588 p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
10589 x_return_status => x_return_status,
10590 x_dependent_sty_id =>l_sty_id
10591 );
10592
10593 IF(x_return_status = 'E') THEN
10594 x_return_status := 'S';
10595 END IF;
10596
10597 ELSE
10598 get_dependent_stream_type
10599 (
10600 p_khr_id => p_chr_id,
10601 p_primary_sty_id => l_level_type,
10602 p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
10603 x_return_status => x_return_status,
10604 x_dependent_sty_id =>l_sty_id
10605 );
10606
10607 IF x_return_status = 'E' THEN
10608 x_return_status := 'S';
10609 END IF;
10610 END IF;
10611
10612 IF(l_sty_id.id IS NOT NULL) THEN
10613 m := m + 1;
10614 px_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
10615 px_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
10616 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
10617 END IF;
10618
10619 --Bug 3410253 - End of Changes
10620
10621 idx := 0;
10622 FOR l_rl_rec in l_rl_csr (l_rl_rec2.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_lne_rec.id ) LOOP
10623 -- Start of Bug#2757289 modification
10624 IF (l_rl_rec.rule_information7 IS NOT NULL OR
10625 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
10626 (l_rl_rec.rule_information8 IS NOT NULL OR
10627 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
10628 k := k + 1;
10629 idx := idx + 1;
10630 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
10631 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
10632 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
10633 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
10634 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
10635 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
10636 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10637 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
10638 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
10639 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
10640 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
10641 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
10642
10643 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
10644 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
10645 END IF;
10646
10647 -- Added by kthiruva on 29-Dec-2005.
10648 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
10649 -- Bug 4915938 - Start of Changes
10650 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
10651 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
10652 ELSE
10653 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10654 END IF;
10655 -- Bug 4915938 - End of Changes
10656 ELSIF (l_rl_rec.rule_information7 IS NULL OR
10657 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
10658 (l_rl_rec.rule_information8 IS NULL OR
10659 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
10660 -- End of Bug#2757289 modification
10661 k := k + 1;
10662 idx := idx + 1;
10663 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
10664 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
10665 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
10666 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
10667 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
10668 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
10669 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
10670 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10671 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
10672 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
10673 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
10674
10675 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
10676 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
10677 END IF;
10678 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
10679 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
10680 ELSE
10681 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10682 END IF;
10683 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
10684 px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
10685 ELSE
10686 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
10687 END IF;
10688 END IF;
10689 END LOOP; -- END-FOR-LOOP: l_rl_csr
10690 Else -- l_rl_csr2%NOTFOUND
10691 --Added by srsreeni for bug5841892
10692 -- m := m + 1;
10693 -- px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
10694 --bug5841892 end of changes
10695
10696 get_primary_pricing_name
10697 (
10698 p_khr_id =>p_chr_id,
10699 p_sty_id =>l_level_type,
10700 x_return_status =>x_return_status,
10701 x_primary_pricing_name =>l_pricing_name
10702 );
10703 --Added by srsreeni for bug5841892
10704 if l_pricing_name is not null then
10705 m := m + 1;
10706 px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
10707 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
10708 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
10709 end if;
10710
10711 --bug5841892 end of changes
10712 k := k + 1;
10713 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
10714 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
10715 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
10716 px_csm_periodic_expenses_tbl(k).period := 'M';
10717 px_csm_periodic_expenses_tbl(k).amount := l_lne_rec.amount;
10718 px_csm_periodic_expenses_tbl(k).number_of_periods := 1;
10719 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10720 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10721 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
10722 px_csm_periodic_expenses_tbl(k).date_start := l_lne_rec.start_date;
10723 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
10724 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
10725 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
10726
10727 print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
10728 '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
10729 'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
10730
10731 End If; -- end-if l_rl_csr2%FOUND
10732 CLOSE l_rl_csr2;
10733 End If; -- end-if l_fee_type = 'MISCELLANEOUS'
10734
10735 END IF; -- end-if: l_asset_association
10736
10737 ELSIF l_fee_type = 'FINANCED' THEN
10738 OPEN get_strm_name_fin_csr(p_chr_d => p_chr_id,
10739 p_cle_id => l_lne_rec.id);
10740 FETCH get_strm_name_fin_csr INTO l_strm_name_fin_rec;
10741 CLOSE get_strm_name_fin_csr;
10742
10743 /* ER# 5150038 */
10744 /* Getting the linked asset line for the current financed fee.
10745 * If there is an asset association, this cursor will return those linked asset association.
10746 * Only if the relevant payment is also associated to an asset, then use the amount allocated to
10747 * each asset as funding amount since the number of periods in expense is always 1.
10748 * You don't have to split the expense amount based on a ratio of amount allocated to each assets.
10749 */
10750 OPEN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id);
10751 FETCH l_linked_asset_line_csr INTO l_linked_asset_line_rec;
10752
10753 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
10754 FETCH l_rl_csr2 INTO l_rl_rec2;
10755
10756 IF l_linked_asset_line_csr%FOUND AND
10757 l_rl_csr2%FOUND
10758 THEN
10759 l_asset_association := TRUE;
10760 ELSE
10761 l_asset_association := FALSE;
10762 END IF;
10763 CLOSE l_linked_asset_line_csr;
10764 CLOSE l_rl_csr2;
10765
10766 IF l_asset_association THEN
10767 FOR l_linked_asset_line_rec IN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id) LOOP
10768 l := l + 1;
10769 px_csm_one_off_fee_tbl(l).description := l_strm_name_fin_rec.strm_name;
10770 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
10771 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
10772 px_csm_one_off_fee_tbl(l).amount := l_linked_asset_line_rec.amount;
10773 px_csm_one_off_fee_tbl(l).date_paid := l_linked_asset_line_rec.start_date;
10774 px_csm_one_off_fee_tbl(l).kle_fee_id := l_linked_asset_line_rec.id;
10775
10776 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
10777 FETCH l_rl_csr2 INTO l_rl_rec2;
10778 IF l_rl_csr2%FOUND THEN
10779 -- Code added and commented for user defined streams
10780 --m := m + 1;
10781 -- srsreeni - Bug#5699923 - Added - Start
10782 -- DONOT request SuperTrump to generate streams
10783 -- for TERMINATED lines
10784 IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
10785
10786 IF(g_rep_req_yn = 'Y') THEN
10787
10788 get_dependent_stream_types
10789 (
10790 p_khr_id =>p_chr_id,
10791 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
10792 p_primary_sty_id =>l_rl_rec2.object1_id1,
10793 x_return_status => x_return_status,
10794 x_dependent_sty_id =>l_strm_type_id_tbl
10795 );
10796 IF x_return_status = 'E' THEN
10797 x_return_status := 'S';
10798 END IF;
10799
10800 ELSE
10801 get_dependent_stream_types
10802 (
10803 p_khr_id =>p_chr_id,
10804 p_primary_sty_id =>l_rl_rec2.object1_id1,
10805 x_return_status => x_return_status,
10806 x_dependent_sty_id =>l_strm_type_id_tbl
10807 );
10808 IF x_return_status = 'E' THEN
10809 x_return_status := 'S';
10810 END IF;
10811 END IF;
10812
10813 IF l_strm_type_id_tbl.COUNT > 0 THEN
10814 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
10815 m := m + 1;
10816
10817 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
10818 px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
10819 px_csm_stream_types_tbl(m).kle_asset_id := l_linked_asset_line_rec.id;
10820 END LOOP;
10821 END IF;
10822 END IF; -- End of check for TERMINATED status
10823 -- srsreeni - Bug#5699923 - Added - End
10824
10825 OPEN strm_name_csr( l_rl_rec2.object1_id1);
10826 FETCH strm_name_csr INTO l_strm_name_rec;
10827 CLOSE strm_name_csr;
10828 l_level_type := l_rl_rec2.object1_id1;
10829 l_strm_name := l_strm_name_rec.name;
10830 idx := 0;
10831 FOR l_rl_rec IN l_rl_csr (l_rl_rec2.slh_id,'LALEVL','LASLL',p_chr_id, l_linked_asset_line_rec.id) LOOP
10832 -- Start of Bug#2757289 modification
10833 IF (l_rl_rec.rule_information7 IS NOT NULL OR
10834 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
10835 (l_rl_rec.rule_information8 IS NOT NULL OR
10836 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
10837 k := k + 1;
10838 idx := idx + 1;
10839 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
10840 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
10841 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
10842 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
10843 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
10844 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
10845 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10846 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
10847 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
10848 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
10849 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
10850 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
10851
10852 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
10853 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
10854 END IF;
10855 -- End of Bug#2757289 modification
10856
10857 -- Added by kthiruva on 29-Dec-2005.
10858 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
10859 -- Bug 4915938 - Start of Changes
10860 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
10861 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
10862 ELSE
10863 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10864 END IF;
10865 -- Bug 4915938 - End of Changes
10866
10867 ELSIF (l_rl_rec.rule_information7 IS NULL OR
10868 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
10869 (l_rl_rec.rule_information8 IS NULL OR
10870 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
10871 k := k + 1;
10872 idx := idx + 1;
10873 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
10874 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
10875 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
10876 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
10877 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.rule_information6,'0'));
10878 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.rule_information3, l_hdr_rec.term));
10879 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10880 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_linked_asset_line_rec.id;
10881 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
10882 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
10883 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
10884
10885 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
10886 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
10887 END IF;
10888 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
10889 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
10890 ELSE
10891 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10892 END IF;
10893 IF(l_rl_rec.rule_information2 IS NULL OR
10894 l_rl_rec.rule_information2 = OKL_API.G_MISS_CHAR) THEN
10895 px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
10896 ELSE
10897 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
10898 END IF;
10899 END IF;
10900 END LOOP;
10901
10902 END IF; -- l_rl_csr2%FOUND
10903 CLOSE l_rl_csr2;
10904 END LOOP; -- l_linked_asset_line_csr
10905 ELSE
10906 l := l + 1;
10907 px_csm_one_off_fee_tbl(l).description := l_strm_name_fin_rec.strm_name;
10908 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
10909 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
10910 px_csm_one_off_fee_tbl(l).amount := l_strm_name_fin_rec.amount;
10911 px_csm_one_off_fee_tbl(l).date_paid := l_lne_rec.start_date;
10912 px_csm_one_off_fee_tbl(l).kle_fee_id := l_lne_rec.id;
10913
10914 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne_rec.id );
10915 FETCH l_rl_csr2 INTO l_rl_rec2;
10916 IF l_rl_csr2%FOUND THEN
10917 -- Code added and commented for user defined streams
10918 --m := m + 1;
10919 IF(g_rep_req_yn = 'Y') THEN
10920
10921 get_dependent_stream_types
10922 (
10923 p_khr_id =>p_chr_id,
10924 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
10925 p_primary_sty_id =>l_rl_rec2.object1_id1,
10926 x_return_status => x_return_status,
10927 x_dependent_sty_id =>l_strm_type_id_tbl
10928 );
10929 IF x_return_status = 'E' THEN
10930 x_return_status := 'S';
10931 END IF;
10932
10933 ELSE
10934 get_dependent_stream_types
10935 (
10936 p_khr_id =>p_chr_id,
10937 p_primary_sty_id =>l_rl_rec2.object1_id1,
10938 x_return_status => x_return_status,
10939 x_dependent_sty_id =>l_strm_type_id_tbl
10940 );
10941 IF x_return_status = 'E' THEN
10942 x_return_status := 'S';
10943 END IF;
10944
10945 END IF;
10946
10947 IF l_strm_type_id_tbl.COUNT > 0 THEN
10948 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
10949 m := m + 1;
10950
10951 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
10952 px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
10953 px_csm_stream_types_tbl(m).kle_asset_id := l_lne_rec.id;
10954 END LOOP;
10955 END IF;
10956
10957 --px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
10958 --px_csm_stream_types_tbl(m).kle_asset_id := l_lne_rec.id;
10959
10960 --Added Code ends here
10961 OPEN strm_name_csr( l_rl_rec2.object1_id1);
10962 FETCH strm_name_csr INTO l_strm_name_rec;
10963 CLOSE strm_name_csr;
10964 l_level_type := l_rl_rec2.object1_id1;
10965 l_strm_name := l_strm_name_rec.name;
10966 idx := 0;
10967 FOR l_rl_rec IN l_rl_csr (l_rl_rec2.slh_id,'LALEVL','LASLL',p_chr_id, l_lne_rec.id) LOOP
10968 -- Start of Bug#2757289 modification
10969 IF (l_rl_rec.rule_information7 IS NOT NULL OR
10970 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
10971 (l_rl_rec.rule_information8 IS NOT NULL OR
10972 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
10973 k := k + 1;
10974 idx := idx + 1;
10975 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
10976 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
10977 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
10978 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
10979 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
10980 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
10981 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10982 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
10983 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
10984 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
10985 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
10986 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
10987
10988 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
10989 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
10990 END IF;
10991 -- End of Bug#2757289 modification
10992
10993 -- Added by kthiruva on 29-Dec-2005.
10994 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
10995 -- Bug 4915938 - Start of Changes
10996 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
10997 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
10998 ELSE
10999 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11000 END IF;
11001 -- Bug 4915938 - End of Changes
11002
11003 ELSIF (l_rl_rec.rule_information7 IS NULL OR
11004 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
11005 (l_rl_rec.rule_information8 IS NULL OR
11006 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
11007 k := k + 1;
11008 idx := idx + 1;
11009 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11010 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
11011 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
11012 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
11013 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.rule_information6,'0'));
11014 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.rule_information3, l_hdr_rec.term));
11015 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11016 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
11017 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
11018 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11019 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11020
11021 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
11022 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
11023 END IF;
11024 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11025 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11026 ELSE
11027 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11028 END IF;
11029 IF(l_rl_rec.rule_information2 IS NULL OR
11030 l_rl_rec.rule_information2 = OKL_API.G_MISS_CHAR) THEN
11031 px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
11032 ELSE
11033 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
11034 END IF;
11035 END IF;
11036 END LOOP;
11037
11038 END IF; -- l_rl_csr2%FOUND
11039 CLOSE l_rl_csr2;
11040 END IF; -- l_asset_association
11041
11042 /* -- End of the process for Funding section considering asset association -- */
11043
11044
11045 -- Code added by HKPATEL 04-AUG-2004 for ROLLOVER QUOTE changes
11046
11047 ELSIF l_fee_type = 'ROLLOVER' THEN
11048 OPEN get_strm_name_abs_csr(p_chr_d => p_chr_id,
11049 p_cle_id => l_lne_rec.id);
11050 FETCH get_strm_name_abs_csr INTO l_strm_name_abs_rec;
11051 CLOSE get_strm_name_abs_csr;
11052
11053 l_link_fee_asset_yn := 'FALSE';
11054 -- Code for linked asset with rollover fee
11055 OPEN link_rollover_csr(l_lne_rec.id);
11056 FETCH link_rollover_csr INTO link_rollover_rec;
11057 IF link_rollover_csr%FOUND THEN
11058 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), link_rollover_rec.id );
11059 FETCH l_rl_csr2 INTO l_rl_rec2;
11060 IF l_rl_csr2%FOUND THEN
11061 l_link_fee_asset_yn := 'TRUE';
11062 END IF;
11063 CLOSE l_rl_csr2;
11064 END IF;
11065 CLOSE link_rollover_csr;
11066
11067 IF l_link_fee_asset_yn = 'TRUE' THEN
11068 FOR link_rollover_rec IN link_rollover_csr(l_lne_rec.id) LOOP
11069
11070 l := l + 1;
11071 px_csm_one_off_fee_tbl(l).description := l_strm_name_abs_rec.strm_name;
11072 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
11073 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
11074 px_csm_one_off_fee_tbl(l).amount := link_rollover_rec.amount;
11075 px_csm_one_off_fee_tbl(l).date_paid := l_lne_rec.start_date;
11076 px_csm_one_off_fee_tbl(l).kle_fee_id := link_rollover_rec.id;
11077
11078 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), link_rollover_rec.id );
11079 FETCH l_rl_csr2 INTO l_rl_rec2;
11080 IF l_rl_csr2%FOUND THEN
11081 /*m := m + 1;
11082 px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
11083 px_csm_stream_types_tbl(m).kle_asset_id := link_rollover_rec.id;
11084 */
11085
11086 -- srsreeni - Bug#5699923 - Added - Start
11087 -- DONOT request SuperTrump to generate streams
11088 -- for TERMINATED lines
11089 IF link_rollover_rec.STE_CODE <> 'TERMINATED' THEN
11090 IF(g_rep_req_yn = 'Y') THEN
11091
11092 get_dependent_stream_types
11093 (
11094 p_khr_id =>p_chr_id,
11095 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
11096 p_primary_sty_id =>l_rl_rec2.object1_id1,
11097 x_return_status => x_return_status,
11098 x_dependent_sty_id =>l_strm_type_id_tbl
11099 );
11100 IF x_return_status = 'E' THEN
11101 x_return_status := 'S';
11102 END IF;
11103
11104 ELSE
11105 get_dependent_stream_types
11106 (
11107 p_khr_id =>p_chr_id,
11108 p_primary_sty_id =>l_rl_rec2.object1_id1,
11109 x_return_status => x_return_status,
11110 x_dependent_sty_id =>l_strm_type_id_tbl
11111 );
11112 IF x_return_status = 'E' THEN
11113 x_return_status := 'S';
11114 END IF;
11115
11116 END IF;
11117
11118 IF l_strm_type_id_tbl.COUNT > 0 THEN
11119 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
11120 m := m + 1;
11121 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
11122 px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
11123 --smahapat for bug 4100031
11124 --px_csm_stream_types_tbl(m).kle_asset_id := l_lne_rec.id;
11125 px_csm_stream_types_tbl(m).kle_asset_id := link_rollover_rec.id;
11126 -- end change for bug 4100031
11127 END LOOP;
11128 END IF;
11129 END IF; -- End of check for TERMINATED status
11130 -- srsreeni - Bug#5699923 - Added - End
11131
11132
11133 OPEN strm_name_csr( l_rl_rec2.object1_id1);
11134 FETCH strm_name_csr INTO l_strm_name_rec;
11135 CLOSE strm_name_csr;
11136 l_level_type := l_rl_rec2.object1_id1;
11137 l_strm_name := l_strm_name_rec.name;
11138 idx := 0;
11139 FOR l_rl_rec IN l_rl_csr (l_rl_rec2.slh_id,'LALEVL','LASLL',p_chr_id, link_rollover_rec.id) LOOP
11140 -- Start of Bug#2757289 modification
11141 IF (l_rl_rec.rule_information7 IS NOT NULL OR
11142 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
11143 (l_rl_rec.rule_information8 IS NOT NULL OR
11144 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
11145 k := k + 1;
11146 idx := idx + 1;
11147 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11148 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
11149 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
11150 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
11151 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
11152 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
11153 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11154 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
11155 px_csm_periodic_expenses_tbl(k).kle_fee_id := link_rollover_rec.id;
11156 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
11157 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11158 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11159
11160 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
11161 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
11162 END IF;
11163 -- End of Bug#2757289 modification
11164
11165 -- Added by kthiruva on 29-Dec-2005.
11166 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
11167 -- Bug 4915938 - Start of Changes
11168 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11169 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11170 ELSE
11171 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11172 END IF;
11173 -- Bug 4915938 - End of Changes
11174
11175 ELSIF (l_rl_rec.rule_information7 IS NULL OR
11176 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
11177 (l_rl_rec.rule_information8 IS NULL OR
11178 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
11179 k := k + 1;
11180 idx := idx + 1;
11181 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11182 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
11183 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
11184 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
11185 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.rule_information6,'0'));
11186 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.rule_information3, l_hdr_rec.term));
11187 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11188 px_csm_periodic_expenses_tbl(k).kle_fee_id := link_rollover_rec.id;
11189 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
11190 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11191 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11192
11193 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
11194 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
11195 END IF;
11196 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11197 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11198 ELSE
11199 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11200 END IF;
11201 IF(l_rl_rec.rule_information2 IS NULL OR
11202 l_rl_rec.rule_information2 = OKL_API.G_MISS_CHAR) THEN
11203 px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
11204 ELSE
11205 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
11206 END IF;
11207 END IF;
11208 END LOOP;
11209 END IF;
11210 CLOSE l_rl_csr2;
11211 END LOOP;
11212 END IF;
11213 -- Code for linked asset ends here
11214
11215 IF l_link_fee_asset_yn = 'FALSE' THEN
11216 l := l + 1;
11217 px_csm_one_off_fee_tbl(l).description := l_strm_name_abs_rec.strm_name;
11218 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
11219 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
11220 px_csm_one_off_fee_tbl(l).amount := l_strm_name_abs_rec.amount;
11221 px_csm_one_off_fee_tbl(l).date_paid := l_lne_rec.start_date;
11222 px_csm_one_off_fee_tbl(l).kle_fee_id := l_lne_rec.id;
11223 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne_rec.id );
11224 FETCH l_rl_csr2 INTO l_rl_rec2;
11225 IF l_rl_csr2%FOUND THEN
11226 /*
11227 m := m + 1;
11228 px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
11229 px_csm_stream_types_tbl(m).kle_asset_id := l_lne_rec.id;
11230 */
11231 IF(g_rep_req_yn = 'Y') THEN
11232
11233 get_dependent_stream_types
11234 (
11235 p_khr_id =>p_chr_id,
11236 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
11237 p_primary_sty_id =>l_rl_rec2.object1_id1,
11238 x_return_status => x_return_status,
11239 x_dependent_sty_id =>l_strm_type_id_tbl
11240 );
11241 IF x_return_status = 'E' THEN
11242 x_return_status := 'S';
11243 END IF;
11244
11245 ELSE
11246 get_dependent_stream_types
11247 (
11248 p_khr_id =>p_chr_id,
11249 p_primary_sty_id =>l_rl_rec2.object1_id1,
11250 x_return_status => x_return_status,
11251 x_dependent_sty_id =>l_strm_type_id_tbl
11252 );
11253 IF x_return_status = 'E' THEN
11254 x_return_status := 'S';
11255 END IF;
11256
11257 END IF;
11258
11259 IF l_strm_type_id_tbl.COUNT > 0 THEN
11260 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
11261 m := m + 1;
11262 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
11263 px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
11264 px_csm_stream_types_tbl(m).kle_asset_id := l_lne_rec.id;
11265 END LOOP;
11266 END IF;
11267
11268 OPEN strm_name_csr( l_rl_rec2.object1_id1);
11269 FETCH strm_name_csr INTO l_strm_name_rec;
11270 CLOSE strm_name_csr;
11271 l_level_type := l_rl_rec2.object1_id1;
11272 l_strm_name := l_strm_name_rec.name;
11273 idx := 0;
11274 FOR l_rl_rec IN l_rl_csr (l_rl_rec2.slh_id,'LALEVL','LASLL',p_chr_id, l_lne_rec.id) LOOP
11275 -- Start of Bug#2757289 modification
11276 IF (l_rl_rec.rule_information7 IS NOT NULL OR
11277 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
11278 (l_rl_rec.rule_information8 IS NOT NULL OR
11279 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
11280 k := k + 1;
11281 idx := idx + 1;
11282 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11283 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
11284 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
11285 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
11286 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
11287 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
11288 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11289 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
11290 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
11291 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
11292 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11293 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11294
11295 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
11296 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
11297 END IF;
11298 -- End of Bug#2757289 modification
11299
11300 -- Added by kthiruva on 29-Dec-2005.
11301 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
11302 -- Bug 4915938 - Start of Changes
11303 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11304 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11305 ELSE
11306 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11307 END IF;
11308 -- Bug 4915938 - End of Changes
11309
11310 ELSIF (l_rl_rec.rule_information7 IS NULL OR
11311 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
11312 (l_rl_rec.rule_information8 IS NULL OR
11313 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
11314 k := k + 1;
11315 idx := idx + 1;
11316 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11317 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
11318 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
11319 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
11320 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.rule_information6,'0'));
11321 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.rule_information3, l_hdr_rec.term));
11322 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11323 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
11324 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
11325 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11326 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11327
11328 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
11329 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
11330 END IF;
11331 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11332 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11333 ELSE
11334 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11335 END IF;
11336 IF(l_rl_rec.rule_information2 IS NULL OR
11337 l_rl_rec.rule_information2 = OKL_API.G_MISS_CHAR) THEN
11338 px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
11339 ELSE
11340 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
11341 END IF;
11342 END IF;
11343 END LOOP;
11344 END IF;
11345 CLOSE l_rl_csr2;
11346 END IF;
11347
11348 --CLOSE link_rollover_csr;
11349
11350 -- Code added by HKPATEL 04-AUG-2004 for ROLLOVER QUOTE ends here
11351
11352 ELSIF l_fee_type = 'ABSORBED' THEN
11353 --Start of modification for Bug#3320656 BAKUCHIB Modified
11354 OPEN get_strm_name_abs_csr(p_chr_d => p_chr_id,
11355 p_cle_id => l_lne_rec.id);
11356 FETCH get_strm_name_abs_csr INTO l_strm_name_abs_rec;
11357 CLOSE get_strm_name_abs_csr;
11358
11359 /* ER# 5150038 */
11360 /* Getting the linked asset line for the current absorbed fee.
11361 * If absorbed fee is associated to assets, this cursor will return those linked asset association.
11362 * Use the amount allocated to each asset as one-time fee amount.
11363 * Since no payments are expected for absorbed fee,
11364 * you don't have to check if payment lines are associated to assets.
11365 */
11366 OPEN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id);
11367 FETCH l_linked_asset_line_csr INTO l_linked_asset_line_rec;
11368
11369 IF l_linked_asset_line_csr%FOUND THEN
11370 l_asset_association := TRUE;
11371 ELSE
11372 l_asset_association := FALSE;
11373 END IF;
11374 CLOSE l_linked_asset_line_csr;
11375
11376 IF l_asset_association THEN
11377 FOR l_linked_asset_line_rec IN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id) LOOP
11378 l := l + 1;
11379 px_csm_one_off_fee_tbl(l).description := l_strm_name_abs_rec.strm_name;
11380 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
11381 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
11382 px_csm_one_off_fee_tbl(l).amount := l_linked_asset_line_rec.amount;
11383 px_csm_one_off_fee_tbl(l).date_paid := l_linked_asset_line_rec.start_date;
11384 px_csm_one_off_fee_tbl(l).kle_fee_id := l_linked_asset_line_rec.id;
11385
11386 -- gboomina BUG#4508077 changes start
11387 IF('RVI' = l_strm_name_abs_rec.fee_purpose_code) THEN
11388 px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
11389 -- populating the interface table records if pricing name is not null
11390 -- vdamerla Bug6149951
11391 --vdamerla Bug6149951 start
11392 IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
11393 get_primary_pricing_name
11394 (
11395 p_khr_id =>p_chr_id,
11396 p_sty_id =>l_strm_name_abs_rec.sty_id,
11397 x_return_status =>x_return_status,
11398 x_primary_pricing_name => l_pricing_name
11399 );
11400 IF l_pricing_name IS NOT NULL THEN
11401 m := m + 1;
11402 px_csm_stream_types_tbl(m).stream_type_id := l_strm_name_abs_rec.sty_id;
11403 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
11404 px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;
11405 END IF;
11406 -- vdamerla Forward Ported Bug6149951
11407 END IF;
11408 --Added by kthiruva on 03-Jan-2005
11409 --Dependents on Absorbd Fees need to be requested always
11410 --Bug 4918934 - Start of Changes
11411 END IF;
11412 -- vdamerla Forward Ported Bug6149951
11413 --srsreeni Bug6149951 start
11414 IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
11415 --Bug 4918934 - End of Changes
11416 -- get dependent streams for the reporting product
11417 IF(g_rep_req_yn = 'Y') THEN
11418 get_dependent_stream_types(p_khr_id => p_chr_id,
11419 p_pdt_id => l_pdt_id_rec.report_pdt_id,
11420 p_primary_sty_id => l_strm_name_abs_rec.sty_id,
11421 x_return_status => x_return_status,
11422 x_dependent_sty_id => l_strm_type_id_tbl);
11423 IF(x_return_status = 'E') THEN
11424 x_return_status := 'S';
11425 END IF;
11426 -- get dependent streams for the main product
11427 ELSE
11428 get_dependent_stream_types(p_khr_id => p_chr_id,
11429 p_primary_sty_id => l_strm_name_abs_rec.sty_id,
11430 x_return_status => x_return_status,
11431 x_dependent_sty_id => l_strm_type_id_tbl);
11432 IF(x_return_status = 'E') THEN
11433 x_return_status := 'S';
11434 END IF;
11435 END IF; -- end of dependent streams block
11436 -- populate the dependent stream types
11437 IF l_strm_type_id_tbl.COUNT > 0 THEN
11438 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
11439 m := m + 1;
11440 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
11441 px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
11442 px_csm_stream_types_tbl(m).kle_fee_id := l_linked_asset_line_rec.id;
11443 END LOOP;
11444 END IF; -- end of populate dependent stream types
11445 -- gboomina BUG#4508077 changes end
11446 END IF;--vdamerla Bug6149951 ends
11447
11448 --End of modification for Bug#3320656 BAKUCHIB Modified
11449 -- gboomina BUG#4598620 changes start
11450 -- requesting all ABSORBED fees as IDC fees
11451 px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
11452 -- gboomina BUG#4598620 changes end
11453 END LOOP; -- l_linked_asset_line_csr
11454 ELSE
11455 l := l + 1;
11456 px_csm_one_off_fee_tbl(l).description := l_strm_name_abs_rec.strm_name;
11457 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
11458 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
11459 px_csm_one_off_fee_tbl(l).amount := l_strm_name_abs_rec.amount;
11460 px_csm_one_off_fee_tbl(l).date_paid := l_lne_rec.start_date;
11461 px_csm_one_off_fee_tbl(l).kle_fee_id := l_lne_rec.id;
11462
11463 -- gboomina BUG#4508077 changes start
11464 IF('RVI' = l_strm_name_abs_rec.fee_purpose_code) THEN
11465 px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
11466 -- populating the interface table records if pricing name is not null
11467 get_primary_pricing_name
11468 (
11469 p_khr_id =>p_chr_id,
11470 p_sty_id =>l_strm_name_abs_rec.sty_id,
11471 x_return_status =>x_return_status,
11472 x_primary_pricing_name => l_pricing_name
11473 );
11474 IF l_pricing_name IS NOT NULL THEN
11475 m := m + 1;
11476 px_csm_stream_types_tbl(m).stream_type_id := l_strm_name_abs_rec.sty_id;
11477 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
11478 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
11479 END IF;
11480 --Added by kthiruva on 03-Jan-2005
11481 --Dependents on Absorbd Fees need to be requested always
11482 --Bug 4918934 - Start of Changes
11483 END IF;
11484 --Bug 4918934 - End of Changes
11485 -- get dependent streams for the reporting product
11486 IF(g_rep_req_yn = 'Y') THEN
11487 get_dependent_stream_types(p_khr_id => p_chr_id,
11488 p_pdt_id => l_pdt_id_rec.report_pdt_id,
11489 p_primary_sty_id => l_strm_name_abs_rec.sty_id,
11490 x_return_status => x_return_status,
11491 x_dependent_sty_id => l_strm_type_id_tbl);
11492 IF(x_return_status = 'E') THEN
11493 x_return_status := 'S';
11494 END IF;
11495 -- get dependent streams for the main product
11496 ELSE
11497 get_dependent_stream_types(p_khr_id => p_chr_id,
11498 p_primary_sty_id => l_strm_name_abs_rec.sty_id,
11499 x_return_status => x_return_status,
11500 x_dependent_sty_id => l_strm_type_id_tbl);
11501 IF(x_return_status = 'E') THEN
11502 x_return_status := 'S';
11503 END IF;
11504 END IF; -- end of dependent streams block
11505 -- populate the dependent stream types
11506 IF l_strm_type_id_tbl.COUNT > 0 THEN
11507 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
11508 m := m + 1;
11509 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
11510 px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
11511 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
11512 END LOOP;
11513 END IF; -- end of populate dependent stream types
11514 -- gboomina BUG#4508077 changes end
11515
11516 --End of modification for Bug#3320656 BAKUCHIB Modified
11517 -- gboomina BUG#4598620 changes start
11518 -- requesting all ABSORBED fees as IDC fees
11519 px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
11520 -- gboomina BUG#4598620 changes end
11521 END IF; -- l_asset_association
11522
11523 ELSIF l_fee_type = 'INCOME' THEN
11524 OPEN l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne_rec.id );
11525 FETCH l_rl_csr2 INTO l_rl_rec2;
11526 IF l_rl_csr2%FOUND THEN
11527 -- rabhupat BUG#4234441 start
11528 -- populating the interface table records if pricing name is not null
11529 get_primary_pricing_name
11530 (
11531 p_khr_id =>p_chr_id,
11532 p_sty_id =>l_rl_rec2.object1_id1,
11533 x_return_status =>x_return_status,
11534 x_primary_pricing_name =>l_pricing_name
11535 );
11536 IF l_pricing_name IS NOT NULL THEN
11537 -- rabhupat BUG#4234441 end
11538 m := m + 1;
11539 px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
11540 px_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
11541
11542 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
11543 OPEN strm_name_csr( l_rl_rec2.object1_id1);
11544 FETCH strm_name_csr INTO l_strm_name_rec;
11545 CLOSE strm_name_csr;
11546 l_level_type := l_rl_rec2.object1_id1;
11547 l_strm_name := l_strm_name_rec.name;
11548 -- Bakuchib
11549 -- we need to find the number of payment levels for the income fees to
11550 -- decide weather we should send the one off table of records or
11551 -- Periodic expense table of records
11552 OPEN l_rl_income_csr(rlgpId => l_rl_rec2.slh_id,
11553 rgcode => 'LALEVL',
11554 rlcat => 'LASLL',
11555 chrId => p_chr_id,
11556 cleId => l_lne_rec.id);
11557 FETCH l_rl_income_csr INTO ln_level_cnt;
11558 CLOSE l_rl_income_csr;
11559 IF ln_level_cnt = 1 THEN
11560 -- Requesting for Amortized Fee Income streams Additionaly
11561 -- added and commented code for user defined streams
11562 IF(g_rep_req_yn = 'Y') THEN
11563
11564 get_dependent_stream_type
11565 (
11566 p_khr_id =>p_chr_id,
11567 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
11568 p_primary_sty_id => l_level_type,
11569 p_dependent_sty_purpose =>'AMORTIZE_FEE_INCOME',
11570 x_return_status => x_return_status,
11571 x_dependent_sty_id =>l_sty_id
11572 );
11573 IF(x_return_status = 'E') THEN
11574 x_return_status := 'S';
11575 END IF;
11576
11577 ELSE
11578 get_dependent_stream_type
11579 (
11580 p_khr_id => p_chr_id,
11581 p_primary_sty_id => l_level_type,
11582 p_dependent_sty_purpose =>'AMORTIZE_FEE_INCOME',
11583 x_return_status => x_return_status,
11584 x_dependent_sty_id =>l_sty_id
11585 );
11586 IF x_return_status = 'E' THEN
11587 x_return_status := 'S';
11588 END IF;
11589 END IF;
11590
11591 /*
11592 OPEN l_strmid_csr('AMORTIZED FEE INCOME');
11593 FETCH l_strmid_csr into l_strmid_rec;
11594 IF l_strmid_csr%NOTFOUND THEN
11595 OKL_API.set_message(p_app_name => G_APP_NAME,
11596 p_msg_name => G_LLA_NO_MATCHING_RECORD,
11597 p_token1 => G_COL_NAME_TOKEN,
11598 p_token1_value => 'AMORTIZED FEE INCOME');
11599 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11600 END IF;
11601 CLOSE l_strmid_csr;
11602 */
11603 -- added and commented code ends here.
11604 IF (l_sty_id.id IS NOT NULL) THEN
11605 m := m + 1;
11606 --px_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
11607 px_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
11608 px_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
11609 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
11610 END IF;
11611 l := l + 1;
11612 OPEN l_rl_csr(rlgpId => l_rl_rec2.slh_id,
11613 rgcode => 'LALEVL',
11614 rlcat => 'LASLL',
11615 chrId => p_chr_id,
11616 cleId => l_lne_rec.id);
11617 FETCH l_rl_csr INTO r_rl_rec;
11618 CLOSE l_rl_csr;
11619 px_csm_one_off_fee_tbl(l).description := l_strm_name;
11620 px_csm_one_off_fee_tbl(l).fee_type := l_fee_type;
11621 px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
11622 px_csm_one_off_fee_tbl(l).amount := FND_NUMBER.canonical_to_number(r_rl_rec.rule_information6);
11623 px_csm_one_off_fee_tbl(l).date_paid := l_lne_rec.start_date;
11624 px_csm_one_off_fee_tbl(l).kle_fee_id := l_lne_rec.id;
11625
11626 ELSIF ln_level_cnt > 1 THEN
11627 -- Requesting for Amortized Fee Income streams Additionaly
11628 -- added and commented code for user defined streams
11629
11630 -- Put the rignt stream purpose 'ACCRUED_FEE_INCOME'- hkpatel- 4374085
11631 IF(g_rep_req_yn = 'Y') THEN
11632
11633 get_dependent_stream_type
11634 (
11635 p_khr_id =>p_chr_id,
11636 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
11637 p_primary_sty_id => l_level_type,
11638 p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
11639 x_return_status => x_return_status,
11640 x_dependent_sty_id =>l_sty_id
11641 );
11642 IF(x_return_status = 'E') THEN
11643 x_return_status := 'S';
11644 END IF;
11645
11646 ELSE
11647 get_dependent_stream_type
11648 (
11649 p_khr_id => p_chr_id,
11650 p_primary_sty_id => l_level_type,
11651 p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
11652 x_return_status => x_return_status,
11653 x_dependent_sty_id =>l_sty_id
11654 );
11655 IF x_return_status = 'E' THEN
11656 x_return_status := 'S';
11657 END IF;
11658 END IF;
11659
11660 -- End Put the rignt stream purpose 'ACCRUED_FEE_INCOME'- hkpatel- 4374085
11661 /*
11662 OPEN l_strmid_csr('FEE INCOME');
11663 FETCH l_strmid_csr into l_strmid_rec;
11664 IF l_strmid_csr%NOTFOUND THEN
11665 OKL_API.set_message(p_app_name => G_APP_NAME,
11666 p_msg_name => G_LLA_NO_MATCHING_RECORD,
11667 p_token1 => G_COL_NAME_TOKEN,
11668 p_token1_value => 'FEE INCOME');
11669 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11670 END IF;
11671 CLOSE l_strmid_csr;
11672 */
11673 IF(l_sty_id.id IS NOT NULL) THEN
11674 m := m + 1;
11675 --px_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
11676 px_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
11677 px_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
11678 px_csm_stream_types_tbl(m).kle_fee_id := l_lne_rec.id;
11679 END IF;
11680 idx := 0;
11681 FOR l_rl_rec IN l_rl_csr (l_rl_rec2.slh_id,'LALEVL','LASLL',p_chr_id, l_lne_rec.id) LOOP
11682 -- Start of Bug#2757289 modification
11683 IF (l_rl_rec.rule_information7 IS NOT NULL OR
11684 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
11685 (l_rl_rec.rule_information8 IS NOT NULL OR
11686 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
11687 k := k + 1;
11688 idx := idx + 1;
11689 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11690 px_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
11691 px_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
11692 px_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
11693 px_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
11694 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
11695 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11696 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
11697 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
11698 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
11699 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11700 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11701
11702 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
11703 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
11704 END IF;
11705 -- End of Bug#2757289 modification
11706
11707 -- Added by kthiruva on 29-Dec-2005.
11708 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
11709 -- Bug 4915938 - Start of Changes
11710 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11711 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11712 ELSE
11713 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11714 END IF;
11715 -- Bug 4915938 - End of Changes
11716
11717 ELSIF (l_rl_rec.rule_information7 IS NULL OR
11718 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
11719 (l_rl_rec.rule_information8 IS NULL OR
11720 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
11721 k := k + 1;
11722 idx := idx + 1;
11723 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11724 px_csm_periodic_expenses_tbl(k).description := l_strm_name;
11725 px_csm_periodic_expenses_tbl(k).fee_type := l_fee_type;
11726 px_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
11727 px_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.rule_information6,'0'));
11728 px_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.rule_information3, l_hdr_rec.term));
11729 px_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
11730 px_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11731 px_csm_periodic_expenses_tbl(k).kle_fee_id := l_lne_rec.id;
11732 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11733 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11734
11735 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
11736 px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
11737 END IF;
11738 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11739 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11740 ELSE
11741 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11742 END IF;
11743 IF(l_rl_rec.rule_information2 IS NULL OR
11744 l_rl_rec.rule_information2 = OKL_API.G_MISS_CHAR) THEN
11745 px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
11746 ELSE
11747 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
11748 END IF;
11749 END IF;
11750 END LOOP;
11751 END IF;
11752 -- rabhupat BUG#4234441 start
11753 END IF; -- end of pricing name check
11754 -- rabhupat BUG#4234441 end
11755 END IF;
11756 CLOSE l_rl_csr2;
11757 ElsIF( l_lne_rec.fee_type = 'SECDEPOSIT' ) THEN
11758
11759 extract_security_deposit( p_api_version => p_api_version,
11760 p_chr_id => TO_NUMBER(p_chr_id),
11761 p_deal_type => p_deal_type,
11762 p_init_msg_list => p_init_msg_list,
11763 x_return_status => x_return_status,
11764 x_msg_count => x_msg_count,
11765 x_msg_data => x_msg_data,
11766 px_csm_lease_header => px_csm_lease_header,
11767 px_csm_stream_types_tbl => px_csm_stream_types_tbl,
11768 px_csm_one_off_fee_tbl => px_csm_one_off_fee_tbl,
11769 px_csm_periodic_expenses_tbl => px_csm_periodic_expenses_tbl);
11770
11771 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
11772 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11773 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
11774 raise OKL_API.G_EXCEPTION_ERROR;
11775 End If;
11776
11777 k := px_csm_periodic_expenses_tbl.COUNT;
11778 l := px_csm_one_off_fee_tbl.COUNT;
11779 m := px_csm_stream_types_tbl.COUNT;
11780
11781 Else
11782
11783 okl_api.set_message(
11784 p_app_name => G_APP_NAME,
11785 p_msg_name => 'OKL_LLA_NO_FEETYPE');
11786 raise OKL_API.G_EXCEPTION_ERROR;
11787
11788 End If;
11789
11790 END LOOP;
11791
11792 print( l_api_name, 'end', x_return_status);
11793
11794 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
11795
11796 Exception
11797
11798 when OKL_API.G_EXCEPTION_ERROR THEN
11799
11800 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
11801
11802 p_api_name => l_api_name,
11803 p_pkg_name => g_pkg_name,
11804 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
11805 x_msg_count => x_msg_count,
11806 x_msg_data => x_msg_data,
11807 p_api_type => g_api_type);
11808
11809 If(l_rl_csr1%ISOPEN) Then
11810 CLOSE l_rl_csr1;
11811 End If;
11812 If(l_rl_csr2%ISOPEN) Then
11813 CLOSE l_rl_csr2;
11814 End If;
11815
11816 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
11817
11818 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
11819 p_api_name => l_api_name,
11820 p_pkg_name => g_pkg_name,
11821 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
11822 x_msg_count => x_msg_count,
11823 x_msg_data => x_msg_data,
11824 p_api_type => g_api_type);
11825 If(l_rl_csr1%ISOPEN) Then
11826 CLOSE l_rl_csr1;
11827 End If;
11828 If(l_rl_csr2%ISOPEN) Then
11829 CLOSE l_rl_csr2;
11830 End If;
11831
11832 when OTHERS THEN
11833
11834 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
11835 p_api_name => l_api_name,
11836 p_pkg_name => g_pkg_name,
11837 p_exc_name => 'OTHERS',
11838 x_msg_count => x_msg_count,
11839 x_msg_data => x_msg_data,
11840 p_api_type => g_api_type);
11841 If(l_rl_csr1%ISOPEN) Then
11842 CLOSE l_rl_csr1;
11843 End If;
11844 If(l_rl_csr2%ISOPEN) Then
11845 CLOSE l_rl_csr2;
11846 End If;
11847
11848 End extract_fee_lines;
11849 -- End modification 11i10 bakuchib
11850 -- Start modification 11i10 bakuchib
11851 PROCEDURE extract_params_loan_deal(
11852 p_api_version IN NUMBER,
11853 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
11854 p_chr_id IN VARCHAR2,
11855 p_deal_type IN VARCHAR2,
11856 x_return_status OUT NOCOPY VARCHAR2,
11857 x_msg_count OUT NOCOPY NUMBER,
11858 x_msg_data OUT NOCOPY VARCHAR2,
11859 x_csm_loan_header OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
11860 x_csm_loan_lines_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
11861 x_csm_loan_levels_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type,
11862 x_csm_one_off_fee_tbl OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
11863 x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
11864 x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
11865 x_csm_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type) AS
11866
11867 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_LOAN_DEAL';
11868 l_api_version CONSTANT NUMBER := 1;
11869 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
11870 l_level_type NUMBER;
11871 l_strm_name VARCHAR2(200);
11872 i BINARY_INTEGER := 0;
11873 j BINARY_INTEGER := 0;
11874 k BINARY_INTEGER := 0;
11875 l BINARY_INTEGER := 0;
11876 m BINARY_INTEGER := 0;
11877 idx BINARY_INTEGER := 0;
11878 idx_exp BINARY_INTEGER := 0; -- bug6245602
11879 l_basis_percent NUMBER;
11880 styid NUMBER;
11881 l_pricing_name VARCHAR2(40);
11882 l_salvage NUMBER;
11883 l_purchase_option VARCHAR2(256);
11884 l_deal_type VARCHAR2(256);
11885 l_purchase_option_amount NUMBER;
11886 l_msg_count Number;
11887 l_msg_data varchar2(2000);
11888 l_chr_id Number := TO_NUMBER(p_chr_id);
11889 l_cle_id Number;
11890 l_rgd_code Varchar2(30) := 'LAPSTH';
11891 l_rdf_code Varchar2(30) := 'LASTRM';
11892 l_rdf_name Varchar2(80) := 'xxx';
11893 l_id1 Varchar2(40);
11894 l_id2 Varchar2(200);
11895 l_name Varchar2(200);
11896 l_description Varchar2(2000);
11897 l_status Varchar2(1);
11898 l_start_date date;
11899 l_end_date date;
11900 l_org_id Number;
11901 l_inv_org_id Number;
11902 l_book_type_code Varchar2(15);
11903 l_select Varchar2(2000);
11904 l_msg_index_out Number;
11905 l_total_lending NUMBER;
11906
11907
11908 Cursor l_struct_csr( chrId NUMBER ) is
11909 select distinct(nvl(crl.RULE_INFORMATION5,-1)) structure
11910 from OKC_RULE_GROUPS_B crg,
11911 OKC_RULES_B crl
11912 where crl.rgp_id = crg.id
11913 and crg.RGD_CODE = 'LALEVL'
11914 and crl.RULE_INFORMATION_CATEGORY = 'LASLL'
11915 and crg.dnz_chr_id = chrId;
11916
11917
11918 l_line_rec l_line_rec_csr%ROWTYPE;
11919 l_lne_rec l_line_rec_csr%ROWTYPE;
11920 l_hdr_rec l_hdr_csr%ROWTYPE;
11921 l_rl_rec l_rl_csr%ROWTYPE;
11922 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
11923 l_rl_rec1 l_rl_csr1%ROWTYPE;
11924 l_tx_rec l_tx_csr%ROWTYPE;
11925 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
11926 l_strm_name_rec strm_name_csr%ROWTYPE;
11927 l_ib_rec ib_csr%ROWTYPE;
11928 l_struct_rec l_struct_csr%ROWTYPE;
11929 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
11930 l_csm_loan_header okl_create_streams_pvt.csm_loan_rec_type;
11931 l_csm_loan_levels_tbl okl_create_streams_pvt.csm_loan_line_tbl_type;
11932 l_csm_one_off_fee_tbl okl_create_streams_pub.csm_one_off_fee_tbl_type;
11933 l_csm_periodic_expenses_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
11934 l_csm_yields_tbl okl_create_streams_pub.csm_yields_tbl_type;
11935 l_csm_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
11936 l_req_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
11937 l_csm_line_details_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
11938 l_rents_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
11939 l_strm_type_id_tbl okl_strm_type_id_tbl_type;
11940
11941 --mansrini : Code for VR build
11942 CURSOR get_day_conv_on_contrct
11943 IS
11944 SELECT
11945 --Added by srsreeni for bug6076113
11946 -- rate_params.days_in_a_year_code,
11947 -- DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
11948 DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
11949 rate_params.days_in_a_year_code
11950 --srsreeni bug6076113 ends
11951 FROM okl_k_rate_params rate_params
11952 WHERE khr_id = p_chr_id;
11953
11954 CURSOR get_day_conv_on_sgt
11955 IS
11956 SELECT DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
11957 gts.days_in_yr_code
11958 FROM
11959 okl_k_headers khr,
11960 okl_products_v pdt,
11961 okl_ae_tmpt_sets_v aes,
11962 OKL_ST_GEN_TMPT_SETS gts
11963 WHERE
11964 khr.pdt_id = pdt.id AND
11965 pdt.aes_id = aes.id AND
11966 aes.gts_id = gts.id AND
11967 khr.id = p_chr_id;
11968
11969 l_days_in_month_code OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
11970 l_days_in_yr_code OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
11971
11972 --Added by kthiruva on 13-Sep-2005 for the VR build
11973 --The base rate defined on the contract is captured when the payment type is Principal
11974 CURSOR get_base_rate_csr(p_chr_id IN NUMBER,
11975 p_date IN DATE)
11976 IS
11977 SELECT PARM.BASE_RATE
11978 FROM OKL_K_RATE_PARAMS parm
11979 WHERE PARM.KHR_ID = p_chr_id
11980 AND PARM.PARAMETER_TYPE_CODE = 'ACTUAL'
11981 AND p_date BETWEEN EFFECTIVE_FROM_DATE AND NVL(EFFECTIVE_TO_DATE,p_date);
11982
11983 l_base_rate NUMBER;
11984 l_rent_sty_id strm_rec_type;
11985 --Added by kthiruva on 22-Nov-2005 for the Down Payment CR
11986 --Bug 4738011 - Start of Changes
11987 l_sty_id strm_rec_type;
11988 --Bug 4738011 - End of Changes
11989
11990 BEGIN
11991 --Added by kthiruva for Debugging
11992 write_to_log('Inside procedure extract_params_loan_deal');
11993
11994 x_return_status := OKL_API.G_RET_STS_SUCCESS;
11995 -- Call start_activity to create savepoint, check compatibility
11996 -- and initialize message list
11997 x_return_status := OKL_API.START_ACTIVITY (
11998 l_api_name
11999 ,p_init_msg_list
12000 ,'_PVT'
12001 ,x_return_status);
12002 -- Check if activity started successfully
12003 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12004 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12005 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12006 RAISE OKL_API.G_EXCEPTION_ERROR;
12007 END IF;
12008
12009 OPEN l_hdr_pdt_csr(p_chr_id);
12010 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
12011 CLOSE l_hdr_pdt_csr;
12012
12013 --get day convention info : mansrini
12014 OPEN get_day_conv_on_contrct;
12015 FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
12016 CLOSE get_day_conv_on_contrct;
12017
12018 --Added by srsreeni for bug6076113
12019 -- IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
12020 IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
12021 --srsreeni bug6076113 ends
12022 THEN
12023 OPEN get_day_conv_on_sgt;
12024 FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
12025 CLOSE get_day_conv_on_sgt;
12026 END IF;
12027
12028 --Added by kthiruva for Debugging
12029 write_to_log('Prior to the call to validate_payments');
12030 -- Validate the payments
12031 validate_payments(p_api_version => p_api_version,
12032 p_init_msg_list => p_init_msg_list,
12033 x_return_status => x_return_status,
12034 x_msg_count => x_msg_count,
12035 x_msg_data => x_msg_data,
12036 p_khr_id => p_chr_id,
12037 p_paym_tbl => l_pay_tbl);
12038 --Added by kthiruva for Debugging
12039 write_to_log('After the call to validate_payments, the return status is :'|| x_return_status);
12040 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12041 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12042 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12043 RAISE OKL_API.G_EXCEPTION_ERROR;
12044 END IF;
12045 i := 0; j := 0; k := 0; l := 0; m := 0;
12046
12047 -- Header infro
12048 OPEN l_hdr_csr(p_chr_id);
12049 FETCH l_hdr_csr into l_hdr_rec;
12050 IF l_hdr_csr%NOTFOUND THEN
12051 --Added by kthiruva for Debugging
12052 write_to_log('Cursor l_hdr_csr not found ');
12053 okl_api.set_message(p_app_name => G_APP_NAME,
12054 p_msg_name => G_LLA_NO_MATCHING_RECORD,
12055 p_token1 => G_COL_NAME_TOKEN,
12056 p_token1_value => 'Contract id');
12057 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12058 END IF;
12059 CLOSE l_hdr_csr;
12060 l_csm_loan_header.khr_id := p_chr_id;
12061 l_csm_loan_header.date_payments_commencement := l_hdr_rec.start_date;
12062 l_csm_loan_header.date_start := l_hdr_rec.start_date;
12063 l_csm_loan_header.pdt_id := l_hdr_rec.pid;
12064 IF ( p_deal_type IS NULL ) THEN
12065 l_deal_type := l_hdr_rec.deal_type;
12066 ELSE
12067 l_deal_type := p_deal_type;
12068 END IF;
12069 -- Fetching the location of the asset
12070 OPEN ib_csr(TO_NUMBER(p_chr_id));
12071 FETCH ib_csr into l_ib_rec;
12072 IF ib_csr%NOTFOUND THEN
12073 --Added by kthiruva for Debugging
12074 write_to_log('Cursor ib_csr not found ');
12075 okl_api.set_message(p_app_name => G_APP_NAME,
12076 p_msg_name => G_LLA_NO_MATCHING_RECORD,
12077 p_token1 => G_COL_NAME_TOKEN,
12078 p_token1_value => 'Contract id');
12079 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12080 END IF;
12081 CLOSE ib_csr;
12082 l_csm_loan_header.country := l_ib_rec.country;
12083 l_csm_loan_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_BOOKING;
12084 -- Callling the formual ccontract cap amount
12085 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
12086 --The Capital Reduction should not be removed from the Funding amount
12087 --Bug 4738011 - Start of Changes
12088
12089 --Added by kthiruva for Debugging
12090 write_to_log('Prior to the call to execute_formula');
12091
12092 execute_formula(p_api_version => p_api_version,
12093 p_init_msg_list => p_init_msg_list,
12094 x_return_status => x_return_status,
12095 x_msg_count => x_msg_count,
12096 x_msg_data => x_msg_data,
12097 p_formula_name => 'CONTRACT_CAP_AMNT_LOAN',
12098 p_contract_id => p_chr_id,
12099 p_line_id => NULL,
12100 x_value => l_total_lending);
12101
12102 --Added by kthiruva for Debugging
12103 write_to_log('After the call to execute_formula, the return status is :'||x_return_status);
12104 --Bug 4738011 - End of Changes
12105 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12106 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12107 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12108 RAISE OKL_API.G_EXCEPTION_ERROR;
12109 END IF;
12110 l_csm_loan_header.total_lending := l_total_lending;
12111 l_csm_loan_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_LENDER;
12112 -- asset infor
12113 FOR l_line_rec IN l_line_rec_csr ( p_chr_id , 'FREE_FORM1') LOOP
12114 i := i + 1;
12115 idx := 0;
12116 idx_exp := 0; -- bug6245602
12117 l_csm_loan_levels_tbl(i).kle_loan_id := l_line_rec.id;
12118 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
12119 --When the Down payment is not capitalised, the Down payment amount needs to be passed through the Down
12120 --payment tag in the Lending Loans tag of the Outbound XML.
12121 --Bug 4738011 - Start of Changes
12122 IF l_line_rec.capitalize_down_payment_yn = 'N' THEN
12123 l_csm_loan_levels_tbl(i).capitalize_down_payment_yn := l_line_rec.capitalize_down_payment_yn;
12124 l_csm_loan_levels_tbl(i).down_payment_amount := l_line_rec.capital_reduction;
12125 END IF;
12126 --Bug 4738011 - End of Changes
12127 FOR l_rl_rec1 in l_rl_csr1 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
12128 l_level_type := l_rl_rec1.object1_id1;
12129
12130 OPEN strm_name_csr ( l_level_type );
12131 FETCH strm_name_csr into l_strm_name_rec;
12132 IF strm_name_csr%NOTFOUND THEN
12133 okl_api.set_message(p_app_name => G_APP_NAME,
12134 p_msg_name => G_LLA_NO_MATCHING_RECORD,
12135 p_token1 => G_COL_NAME_TOKEN,
12136 p_token1_value => 'Contract id');
12137 x_return_status := OKL_API.G_RET_STS_ERROR;
12138 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
12139 END IF;
12140 CLOSE strm_name_csr;
12141 --l_strm_name := l_strm_name_rec.name;
12142 l_strm_name := l_strm_name_rec.stream_type_purpose;
12143 -- srsreeni - Bug#5699923 - Added - Start
12144 -- DONOT request SuperTrump to generate streams
12145 -- for TERMINATED lines
12146 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
12147 --Modified by kthiruva for the VR build
12148 --Including PRINCIPAL_PAYMENT Stream in the condition.
12149 --From OKL.H,in addition to Rent, Payment of type Principal can also be defined on assets
12150 --srsreeni Bug6245602 Added DOWN_PAYMENT and ESTIMATED_PROPERTY_TAX
12151 IF( UPPER(TRIM(l_strm_name)) NOT IN ('RENT','PRINCIPAL_PAYMENT','DOWN_PAYMENT','ESTIMATED_PROPERTY_TAX') ) THEN
12152 --srsreeni Bug6245602 ends
12153 --Added by srsreeni for bug5841892
12154 -- m := m + 1;
12155 -- l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12156 --bug5841892 end of changes
12157 get_dependent_pricing_name
12158 (
12159 p_khr_id =>p_chr_id,
12160 p_sty_id =>l_level_type,
12161 x_return_status =>x_return_status,
12162 x_dependent_pricing_name =>l_pricing_name
12163 );
12164 --Added by srsreeni for bug5841892
12165 if l_pricing_name is not null then
12166 m := m + 1;
12167 l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12168 l_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
12169 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
12170 end if;
12171 --bug5841892 end of changes
12172 END IF;
12173 --idx := 0;
12174 --Added by kthiruva on 16-Nov-2005 for the Down Payment CR
12175 --Bug 4738011 - Start of Changes
12176 IF( UPPER(TRIM(l_strm_name)) ='DOWN_PAYMENT' ) THEN
12177 --Added by srsreeni for bug5841892
12178 -- l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12179 --bug5841892 end of changes
12180 get_primary_pricing_name
12181 (
12182 p_khr_id =>p_chr_id,
12183 p_sty_id =>l_level_type,
12184 x_return_status =>x_return_status,
12185 x_primary_pricing_name =>l_pricing_name
12186 );
12187 IF x_return_status = 'E' THEN
12188 x_return_status := 'S';
12189 END IF;
12190 --Added by srsreeni for bug5841892
12191 if l_pricing_name is not null then
12192 m:=m+1; --added to increase the counter
12193 l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12194 l_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
12195 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
12196 end if;
12197 --bug5841892 end of changes
12198 END IF;
12199 --Bug 4738011 - End of Changes
12200 END IF; -- End of check for TERMINATED status
12201 -- srsreeni - Bug#5699923 - Added - End
12202
12203 IF( UPPER(TRIM(l_strm_name)) = 'RENT' ) THEN
12204 -- srsreeni - Bug#5699923 - Added - Start
12205 -- DONOT request SuperTrump to generate streams
12206 -- for TERMINATED lines
12207 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
12208 IF(g_rep_req_yn = 'Y') THEN
12209 get_dependent_stream_types
12210 (
12211 p_khr_id =>p_chr_id,
12212 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
12213 p_primary_sty_id =>l_level_type,
12214 x_return_status => x_return_status,
12215 x_dependent_sty_id =>l_strm_type_id_tbl
12216 );
12217 IF x_return_status = 'E' THEN
12218 x_return_status := 'S';
12219 END IF;
12220 ELSE
12221 get_dependent_stream_types
12222 (
12223 p_khr_id =>p_chr_id,
12224 p_primary_sty_id =>l_level_type,
12225 x_return_status => x_return_status,
12226 x_dependent_sty_id =>l_strm_type_id_tbl
12227 );
12228 IF x_return_status = 'E' THEN
12229 x_return_status := 'S';
12230 END IF;
12231 END IF;
12232 IF l_strm_type_id_tbl.COUNT > 0 THEN
12233 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
12234 m := m + 1;
12235 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
12236 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
12237 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
12238 END LOOP;
12239 END IF;
12240 END IF; -- End of check for TERMINATED status
12241 -- srsreeni - Bug#5699923 - Added - End
12242 j := j + 1;
12243 idx := idx + 1;
12244 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
12245 l_csm_line_details_tbl(j).description := 'Funding';
12246 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
12247 --The Capital Reduction should not be removed from the Funding amount
12248 --Bug 4738011 - Start of Changes
12249 execute_formula(p_api_version => p_api_version,
12250 p_init_msg_list => p_init_msg_list,
12251 x_return_status => x_return_status,
12252 x_msg_count => x_msg_count,
12253 x_msg_data => x_msg_data,
12254 p_formula_name => 'LINE_CAP_AMNT_LOAN',
12255 p_contract_id => p_chr_id,
12256 p_line_id => l_line_rec.id,
12257 x_value => l_total_lending);
12258 --Bug 4738011 - End of Changes
12259 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12260 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
12261 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12262 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
12263 END IF;
12264 l_csm_line_details_tbl(j).amount := l_total_lending;
12265 --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
12266 --Bug 4576794 - Start of Changes
12267 --When a funding date is specified on the asset,it needs to be used as the date_start
12268 --When funding date is not specified, we use the contract start date
12269 l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
12270 --Bug 4576794 - End of Changes
12271 l_csm_line_details_tbl(j).level_index_number := idx;
12272 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
12273 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
12274 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
12275
12276 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
12277 --If the Down Payment is capitalised then , a new funding line with the opposite sign
12278 --needs to be added
12279 --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
12280 --Bug 4738011 - Start of Changes
12281 IF l_line_rec.capitalize_down_payment_yn = 'Y' AND l_line_rec.capital_reduction IS NOT NULL THEN
12282 j := j + 1;
12283 idx := idx + 1;
12284 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
12285 l_csm_line_details_tbl(j).description := 'Funding';
12286 l_csm_line_details_tbl(j).amount := l_line_rec.capital_reduction * (-1);
12287 l_csm_line_details_tbl(j).date_start := l_hdr_rec.start_date;
12288 l_csm_line_details_tbl(j).level_index_number := idx;
12289 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
12290 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
12291 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
12292 -- srsreeni - Bug#5699923 - Added - Start
12293 -- DONOT request SuperTrump to generate streams
12294 -- for TERMINATED lines
12295 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
12296
12297 --Fetching and Requesting the Capital Reduction stream type if it has been defined on
12298 --the Stream Generation Template
12299 get_primary_stream_type
12300 (
12301 p_khr_id => p_chr_id,
12302 p_primary_sty_purpose => 'CAPITAL_REDUCTION',
12303 x_return_status => x_return_status,
12304 x_primary_sty_id =>l_sty_id
12305 );
12306 IF x_return_status = 'E' THEN
12307 x_return_status := 'S';
12308 END IF;
12309 IF (l_sty_id.id IS NOT NULL ) THEN
12310 m := m + 1;
12311 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
12312 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
12313 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
12314 END IF;
12315 END IF;
12316 END IF; -- End of check for TERMINATED status
12317 -- srsreeni - Bug#5699923 - Added - End
12318 --Bug 4738011 - End of Changes
12319
12320
12321 FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
12322 -- Start of Bug#2757289 modification
12323 IF (l_rl_rec.rule_information7 IS NOT NULL OR
12324 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
12325 (l_rl_rec.rule_information8 IS NOT NULL OR
12326 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
12327 j := j + 1;
12328 idx := idx + 1;
12329 l_csm_line_details_tbl(j).level_index_number := idx;
12330 l_csm_line_details_tbl(j).amount := TO_NUMBER(l_rl_rec.rule_information8);
12331 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
12332 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
12333 l_csm_line_details_tbl(j).period := g_stub_rec.period;
12334 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12335 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
12336 l_csm_line_details_tbl(j).description := l_strm_name;
12337 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
12338 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
12339 --Added by kthiruva on 09-Dec-2005
12340 --This rate column is relevant for rent payments only in the rebook scenarios
12341 --after a reamort
12342 --Bug 4766555 - Start of Changes
12343 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
12344 --Bug 4766555 - End of Changes
12345
12346 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
12347 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12348 ELSE
12349 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12350 END IF;
12351 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
12352 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12353 END IF;
12354 -- End of Bug#2757289 modification
12355
12356 -- Added by kthiruva on 29-Dec-2005.
12357 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
12358 -- Bug 4915938 - Start of Changes
12359 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12360 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12361 ELSE
12362 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12363 END IF;
12364 -- Bug 4915938 - End of Changes
12365
12366 ELSIF (l_rl_rec.rule_information7 IS NULL OR
12367 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
12368 (l_rl_rec.rule_information8 IS NULL OR
12369 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
12370 j := j + 1;
12371 idx := idx + 1;
12372 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
12373 l_csm_line_details_tbl(j).description := l_strm_name;
12374 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
12375 --Modified by kthiruva on 09-Dec-2005 for the VR build
12376 --Bug 4766555 - Start of Changes
12377 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
12378 --Bug 4766555 - End of Changes
12379 l_csm_line_details_tbl(j).level_index_number := idx;
12380 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12381 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
12382 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
12383 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
12384 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
12385 --Added by kthiruva on 09-Dec-2005
12386 --This rate column is relevant for rent payments only in the rebook scenarios
12387 --after a reamort
12388 --Bug 4766555 - Start of Changes
12389 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
12390 --Bug 4766555 - End of Changes
12391
12392 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
12393 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12394 END IF;
12395 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12396 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12397 ELSE
12398 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12399 END IF;
12400 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
12401 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12402 ELSE
12403 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12404 END IF;
12405 END IF;
12406 END LOOP;
12407 --Code for the new payment type 'PRINCIPAL_PAYMENT' that is allowed for Loan Contracts
12408 --Added by kthiruva on 13-Sep-2005 for the VR Build
12409 --Bug - Start of Changes
12410 ELSIF( UPPER(TRIM(l_strm_name)) = 'PRINCIPAL_PAYMENT' ) THEN
12411 IF(g_rep_req_yn = 'Y') THEN
12412 --Added by kthriuva for VR build
12413 --For payment of type principal, we need to request the dependents
12414 --on Rent. Hence obtaining the stream type id of Rent
12415 get_primary_no_prc_stream_type
12416 (
12417 p_khr_id =>p_chr_id,
12418 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
12419 p_primary_sty_purpose =>'RENT',
12420 x_return_status => x_return_status,
12421 x_primary_sty_id => l_rent_sty_id
12422 );
12423 --kthriuva - End of Changes for VR build
12424 get_dependent_stream_types
12425 (
12426 p_khr_id =>p_chr_id,
12427 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
12428 p_primary_sty_id =>l_rent_sty_id.id,
12429 x_return_status => x_return_status,
12430 x_dependent_sty_id =>l_strm_type_id_tbl
12431 );
12432 IF x_return_status = 'E' THEN
12433 x_return_status := 'S';
12434 END IF;
12435 ELSE
12436 --Added by kthriuva for VR build
12437 --For payment of type principal, we need to request the dependents
12438 --on Rent. Hence obtaining the stream type id of Rent
12439 get_primary_no_prc_stream_type
12440 (
12441 p_khr_id =>p_chr_id,
12442 p_pdt_id =>l_pdt_id_rec.pid,
12443 p_primary_sty_purpose =>'RENT',
12444 x_return_status => x_return_status,
12445 x_primary_sty_id => l_rent_sty_id
12446 );
12447
12448 --kthriuva - End of Changes for VR build
12449 get_dependent_stream_types
12450 (
12451 p_khr_id =>p_chr_id,
12452 p_primary_sty_id =>l_rent_sty_id.id,
12453 x_return_status => x_return_status,
12454 x_dependent_sty_id =>l_strm_type_id_tbl
12455 );
12456 IF x_return_status = 'E' THEN
12457 x_return_status := 'S';
12458 END IF;
12459 END IF;
12460 --Fetching the base rate
12461 OPEN get_base_rate_csr(p_chr_id => p_chr_id,
12462 p_date => l_hdr_rec.start_date);
12463 FETCH get_base_rate_csr INTO l_base_rate;
12464 IF get_base_rate_csr%NOTFOUND THEN
12465 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
12466 p_msg_name => 'OKL_LLAP_BASE_RATE_NOT_DEF');
12467 RAISE Okl_Api.G_EXCEPTION_ERROR;
12468 END IF;
12469 CLOSE get_base_rate_csr;
12470 -- srsreeni - Bug#5699923 - Added - Start
12471 -- DONOT request SuperTrump to generate streams
12472 -- for TERMINATED lines
12473 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
12474 IF l_strm_type_id_tbl.COUNT > 0 THEN
12475 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
12476 m := m + 1;
12477 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
12478 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
12479 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
12480 END LOOP;
12481 END IF;
12482 END IF; -- End of check for TERMINATED status
12483 -- srsreeni - Bug#5699923 - Added - End
12484 j := j + 1;
12485 idx := idx + 1;
12486 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
12487 l_csm_line_details_tbl(j).description := 'Funding';
12488 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
12489 --The Capital Reduction should not be removed from the Funding amount
12490 --Bug 4738011 - Start of Changes
12491 execute_formula(p_api_version => p_api_version,
12492 p_init_msg_list => p_init_msg_list,
12493 x_return_status => x_return_status,
12494 x_msg_count => x_msg_count,
12495 x_msg_data => x_msg_data,
12496 p_formula_name => 'LINE_CAP_AMNT_LOAN',
12497 p_contract_id => p_chr_id,
12498 p_line_id => l_line_rec.id,
12499 x_value => l_total_lending);
12500 --Bug 4738011 - End of Changes
12501 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12502 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
12503 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12504 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
12505 END IF;
12506 l_csm_line_details_tbl(j).amount := l_total_lending;
12507 --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
12508 --Bug 4576794 - Start of Changes
12509 --When a funding date is specified on the asset,it needs to be used as the date_start
12510 --When funding date is not specified, we use the contract start date
12511 l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
12512 --Bug 4576794 - End of Changes
12513 l_csm_line_details_tbl(j).level_index_number := idx;
12514 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
12515 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
12516 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
12517
12518 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
12519 --If the Down Payment is capitalised then , a new funding line with the opposite sign
12520 --needs to be added
12521 --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
12522 --Bug 4738011 - Start of Changes
12523 IF l_line_rec.capitalize_down_payment_yn = 'Y' AND l_line_rec.capital_reduction IS NOT NULL THEN
12524 j := j + 1;
12525 idx := idx + 1;
12526 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
12527 l_csm_line_details_tbl(j).description := 'Funding';
12528 l_csm_line_details_tbl(j).amount := l_line_rec.capital_reduction * (-1);
12529 l_csm_line_details_tbl(j).date_start := l_hdr_rec.start_date;
12530 l_csm_line_details_tbl(j).level_index_number := idx;
12531 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
12532 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
12533 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
12534 -- srsreeni - Bug#5699923 - Added - Start
12535 -- DONOT request SuperTrump to generate streams
12536 -- for TERMINATED lines
12537 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
12538
12539 --Fetching and Requesting the Capital Reduction stream type if it has been defined on
12540 --the Stream Generation Template
12541 get_primary_stream_type
12542 (
12543 p_khr_id => p_chr_id,
12544 p_primary_sty_purpose => 'CAPITAL_REDUCTION',
12545 x_return_status => x_return_status,
12546 x_primary_sty_id =>l_sty_id
12547 );
12548 IF x_return_status = 'E' THEN
12549 x_return_status := 'S';
12550 END IF;
12551 IF (l_sty_id.id IS NOT NULL ) THEN
12552 m := m + 1;
12553 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
12554 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
12555 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
12556 END IF;
12557
12558 END IF; -- End of check for TERMINATED status
12559 -- srsreeni - Bug#5699923 - Added - End
12560 END IF;
12561 --Bug 4738011 - End of Changes
12562
12563 FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
12564 -- Start of Bug#2757289 modification
12565 IF (l_rl_rec.rule_information7 IS NOT NULL OR
12566 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
12567 (l_rl_rec.rule_information8 IS NOT NULL OR
12568 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
12569 j := j + 1;
12570 idx := idx + 1;
12571 l_csm_line_details_tbl(j).level_index_number := idx;
12572 l_csm_line_details_tbl(j).amount := TO_NUMBER(l_rl_rec.rule_information8);
12573 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
12574 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
12575 l_csm_line_details_tbl(j).period := g_stub_rec.period;
12576 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
12577 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
12578 l_csm_line_details_tbl(j).description := l_strm_name;
12579 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
12580 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
12581 --When the payment type is Principal, the Base Rate specified in the contract needs to be
12582 --captured and passed. This rate is used in calculation of the Interest Payment Streams
12583 --Modified by kthiruva on 09-Dec-2005
12584 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
12585 --l_base_Rate needs to be used.
12586 --Bug 4766555 - Start of Changes
12587 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
12588 --Bug 4766555 - End of Changes
12589
12590 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
12591 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12592 ELSE
12593 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12594 END IF;
12595
12596 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
12597 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12598 END IF;
12599
12600 -- End of Bug#2757289 modification
12601
12602 -- Added by kthiruva on 29-Dec-2005.
12603 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
12604 -- Bug 4915938 - Start of Changes
12605 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12606 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12607 ELSE
12608 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12609 END IF;
12610 -- Bug 4915938 - End of Changes
12611
12612 ELSIF (l_rl_rec.rule_information7 IS NULL OR
12613 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
12614 (l_rl_rec.rule_information8 IS NULL OR
12615 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
12616 j := j + 1;
12617 idx := idx + 1;
12618 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
12619 l_csm_line_details_tbl(j).description := l_strm_name;
12620 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
12621 --Modified by kthiruva on 09-Dec-2005 for the VR build
12622 --Bug 4766555 - Start of Changes
12623 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
12624 --Bug 4766555 - End of Changes
12625 l_csm_line_details_tbl(j).level_index_number := idx;
12626 --Modified by kthiruva on 09-Nov-2005.The level type should be
12627 --set as PRINCIPAL as the payment type is PRINCIPAL_PAYMENT
12628 --Bug 4726209 - Start of Changes
12629 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
12630 --Bug 4726209 - End of Changes
12631 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
12632 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
12633 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
12634 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
12635 --When the payment type is Principal, the Base Rate specified in the contract needs to be
12636 --captured and passed. This rate is used in calculation of the Interest Payment Streams
12637 --Modified by kthiruva on 09-Dec-2005
12638 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
12639 --l_base_Rate needs to be used.
12640 --Bug 4766555 - Start of Changes
12641 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
12642 --Bug 4766555 - End of Changes
12643
12644 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
12645 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12646 END IF;
12647 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12648 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12649 ELSE
12650 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12651 END IF;
12652 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
12653 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12654 ELSE
12655 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12656 END IF;
12657 END IF;
12658 END LOOP;
12659
12660 -- Code for Estimated Property Tax Starts Here
12661 ELSIF( UPPER(TRIM(l_strm_name)) = 'ESTIMATED_PROPERTY_TAX' ) THEN
12662 --srsreeni Bug6245602 start. Added logic to request for streams
12663 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
12664 get_primary_pricing_name
12665 (
12666 p_khr_id =>p_chr_id,
12667 p_sty_id =>l_level_type,
12668 x_return_status =>x_return_status,
12669 x_primary_pricing_name =>l_pricing_name
12670 );
12671 IF x_return_status = 'E' THEN
12672 x_return_status := 'S';
12673 END IF;
12674 if l_pricing_name is not null then
12675 m:=m+1; --added to increase the counter
12676 l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12677 l_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
12678 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
12679 end if;
12680 --get dependent
12681 IF(g_rep_req_yn = 'Y') THEN
12682 get_dependent_stream_types
12683 (
12684 p_khr_id =>p_chr_id,
12685 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
12686 p_primary_sty_id =>l_level_type,
12687 x_return_status => x_return_status,
12688 x_dependent_sty_id =>l_strm_type_id_tbl
12689 );
12690 IF x_return_status = 'E' THEN
12691 x_return_status := 'S';
12692 END IF;
12693 ELSE
12694 get_dependent_stream_types
12695 (
12696 p_khr_id =>p_chr_id,
12697 p_primary_sty_id =>l_level_type,
12698 x_return_status => x_return_status,
12699 x_dependent_sty_id =>l_strm_type_id_tbl
12700 );
12701 IF x_return_status = 'E' THEN
12702 x_return_status := 'S';
12703 END IF;
12704 END IF;
12705 IF l_strm_type_id_tbl.COUNT > 0 THEN
12706 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
12707 m := m + 1;
12708 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
12709 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
12710 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
12711 END LOOP;
12712 end if;
12713 end if;
12714 --srsreeni Bug6245602 end
12715 FOR l_rl_rec in l_rl_csr(l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
12716 IF (l_rl_rec.rule_information7 IS NOT NULL OR
12717 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
12718 (l_rl_rec.rule_information8 IS NOT NULL OR
12719 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
12720 k := k + 1;
12721 -- idx := idx + 1; bug6245602
12722 idx_exp := idx_exp + 1; -- bug6245602
12723 l_csm_periodic_expenses_tbl(k).level_index_number := idx_exp; -- bug6245602
12724 l_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
12725 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
12726 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
12727 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
12728 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12729 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12730 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
12731 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
12732 l_csm_periodic_expenses_tbl(k).cash_effect_yn := 'N';
12733 l_csm_periodic_expenses_tbl(k).tax_effect_yn := 'N';
12734 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12735 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12736
12737 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
12738 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12739 END If;
12740
12741 -- Added by kthiruva on 29-Dec-2005.
12742 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
12743 -- Bug 4915938 - Start of Changes
12744 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12745 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12746 ELSE
12747 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12748 END IF;
12749 -- Bug 4915938 - End of Changes
12750
12751 ELSIF (l_rl_rec.rule_information7 IS NULL OR
12752 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
12753 (l_rl_rec.rule_information8 IS NULL OR
12754 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
12755 k := k + 1;
12756 -- idx := idx + 1; bug6245602
12757 idx_exp := idx_exp + 1; -- bug6245602
12758 l_csm_periodic_expenses_tbl(k).level_index_number := idx_exp; -- bug6245602
12759 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12760 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
12761 l_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
12762 l_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
12763 l_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
12764 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
12765 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12766 l_csm_periodic_expenses_tbl(k).cash_effect_yn := 'N';
12767 l_csm_periodic_expenses_tbl(k).tax_effect_yn := 'N';
12768 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12769 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12770
12771 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
12772 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12773 END If;
12774 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12775 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12776 ELSE
12777 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12778 END IF;
12779 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
12780 l_csm_periodic_expenses_tbl(k).date_start := l_hdr_rec.start_date;
12781 ELSE
12782 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
12783 END IF;
12784 END IF;
12785 END LOOP;
12786 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12787 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
12788 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12789 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
12790 END IF;
12791
12792 -- Code for Estimated Property Tax Ends Here
12793
12794 ELSIF (((l_strm_name_rec.periodic_yn = 'Y' ) AND
12795 (UPPER(l_strm_name_rec.stream_type_purpose) = 'FEE') AND
12796 (l_strm_name_rec.capitalize_yn = 'N')) OR
12797 ((l_strm_name_rec.periodic_yn = 'Y' ) AND
12798 -- code for user defined streams
12799 --(UPPER(l_strm_name_rec.name) <> 'FEE'))) THEN
12800 (UPPER(l_strm_name_rec.stream_type_purpose) <> 'FEE'))) THEN
12801 -- code for use defined streams ends here
12802 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
12803 -- Start of Bug#2757289 modification
12804 IF (l_rl_rec.rule_information7 IS NOT NULL OR
12805 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
12806 (l_rl_rec.rule_information8 IS NOT NULL OR
12807 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
12808 k := k + 1;
12809 -- idx := idx + 1; bug6245602
12810 idx_exp := idx_exp + 1; -- bug6245602
12811 l_csm_periodic_expenses_tbl(k).level_index_number := idx_exp;
12812 l_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
12813 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+l_rl_rec.rule_information7;
12814 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
12815 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
12816 l_csm_periodic_expenses_tbl(k).advance_or_arrears := g_stub_rec.advance_or_arrears;
12817 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
12818 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
12819 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12820 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12821
12822 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
12823 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12824 END IF;
12825 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
12826 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12827 ELSE
12828 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12829 END IF;
12830 -- Code for user defined streams
12831 --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
12832 IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
12833 -- code ends here
12834 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
12835 --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) THEN
12836 ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) THEN
12837 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
12838 ELSE
12839 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12840 END If;
12841 -- End of Bug#2757289 modification
12842
12843 -- Added by kthiruva on 29-Dec-2005.
12844 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
12845 -- Bug 4915938 - Start of Changes
12846 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12847 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12848 ELSE
12849 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12850 END IF;
12851 -- Bug 4915938 - End of Changes
12852
12853 ELSIF (l_rl_rec.rule_information7 IS NULL OR
12854 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
12855 (l_rl_rec.rule_information8 IS NULL OR
12856 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
12857 k := k + 1;
12858 -- idx := idx + 1; bug6245602
12859 idx_exp := idx_exp + 1; -- bug6245602
12860 l_csm_periodic_expenses_tbl(k).level_index_number := idx_exp;
12861 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
12862 l_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
12863 l_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
12864 l_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
12865 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
12866 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12867 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12868
12869 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
12870 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12871 END IF;
12872 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12873 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12874 ELSE
12875 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12876 END IF;
12877 IF (l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
12878 l_csm_periodic_expenses_tbl(k).date_start := l_hdr_rec.start_date;
12879 ELSE
12880 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
12881 END IF;
12882 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
12883 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12884 ELSE
12885 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12886 END IF;
12887 --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
12888 IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
12889 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
12890 --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) Then
12891 ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) Then
12892 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
12893 ELSE
12894 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12895 END If;
12896 END IF;
12897 END LOOP;
12898 ELSIf ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' )) Then
12899 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
12900 l := l + 1;
12901 l_csm_one_off_fee_tbl(l).description := l_strm_name_rec.name;
12902 l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12903 l_csm_one_off_fee_tbl(l).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
12904 If(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
12905 l_csm_one_off_fee_tbl(l).date_paid := l_hdr_rec.start_date;
12906 Else
12907 l_csm_one_off_fee_tbl(l).date_paid := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
12908 End If;
12909 l_csm_one_off_fee_tbl(l).kle_asset_id := l_line_rec.id;
12910 END LOOP;
12911 END IF;
12912 END LOOP;
12913 END LOOP;
12914 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12915 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12916 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12917 RAISE OKL_API.G_EXCEPTION_ERROR;
12918 End If;
12919 -- Extract fee line
12920 -- Added by kthiruva for Debugging
12921 write_to_log('Before the call to extract_fee_lines');
12922 extract_fee_lines( p_api_version => p_api_version,
12923 p_chr_id => TO_NUMBER(p_chr_id),
12924 p_deal_type => l_deal_type,
12925 p_init_msg_list => p_init_msg_list,
12926 x_msg_count => x_msg_count,
12927 x_msg_data => x_msg_data,
12928 x_return_status => x_return_status,
12929 px_csm_stream_types_tbl => l_csm_stream_types_tbl,
12930 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl,
12931 px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
12932 --Added by kthiruva for Debugging
12933 write_to_log('After the call to extract_fee_lines, the return status is :'||x_return_status);
12934
12935 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
12936 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12937 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
12938 raise OKL_API.G_EXCEPTION_ERROR;
12939 End If;
12940 extract_subsidized_lines(p_api_version => p_api_version,
12941 p_init_msg_list => p_init_msg_list,
12942 x_return_status => x_return_status,
12943 x_msg_count => x_msg_count,
12944 x_msg_data => x_msg_data,
12945 p_chr_id => TO_NUMBER(p_chr_id),
12946 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
12947 --Added by kthiruva for Debugging
12948 write_to_log('After the call to extract_subsidized_lines, the return status is :'||x_return_status);
12949 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
12950 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12951 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
12952 raise OKL_API.G_EXCEPTION_ERROR;
12953 End If;
12954 check_for_mandatory_streams(
12955 p_api_version => p_api_version,
12956 p_init_msg_list => p_init_msg_list,
12957 x_msg_count => x_msg_count,
12958 x_msg_data => x_msg_data,
12959 x_return_status => x_return_status,
12960 p_chr_id => p_chr_id,
12961 p_deal_type => l_deal_type,
12962 p_stream_types_tbl => l_csm_stream_types_tbl,
12963 x_stream_types_tbl => l_req_stream_types_tbl);
12964 --Added by kthiruva for Debugging
12965 write_to_log('After the call to check_for_mandatory_streams, the return status is :'||x_return_status);
12966
12967 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
12968 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12969 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
12970 raise OKL_API.G_EXCEPTION_ERROR;
12971 End If;
12972 -- Requesting for yields
12973 x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
12974 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12975 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12976 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12977 RAISE OKL_API.G_EXCEPTION_ERROR;
12978 END IF;
12979
12980 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
12981 okl_api.set_message(
12982 p_app_name => G_APP_NAME,
12983 p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
12984 raise OKL_API.G_EXCEPTION_ERROR;
12985 End If;
12986
12987 x_csm_loan_header := l_csm_loan_header;
12988 x_csm_loan_lines_tbl := l_csm_loan_levels_tbl;
12989 x_csm_loan_levels_tbl := l_csm_line_details_tbl;
12990 x_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
12991 x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
12992 x_csm_yields_tbl := l_csm_yields_tbl;
12993 x_csm_stream_types_tbl := l_req_stream_types_tbl;
12994 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
12995 x_msg_data => x_msg_data);
12996 EXCEPTION
12997 WHEN OKL_API.G_EXCEPTION_ERROR THEN
12998 IF l_hdr_csr%ISOPEN THEN
12999 CLOSE l_hdr_csr;
13000 END IF;
13001 IF ib_csr%ISOPEN THEN
13002 CLOSE ib_csr;
13003 END IF;
13004 IF l_line_rec_csr%ISOPEN THEN
13005 CLOSE l_line_rec_csr;
13006 END IF;
13007 IF l_rl_csr1%ISOPEN THEN
13008 CLOSE l_rl_csr1;
13009 END IF;
13010 IF strm_name_csr%ISOPEN THEN
13011 CLOSE strm_name_csr;
13012 END IF;
13013 IF l_rl_csr%ISOPEN THEN
13014 CLOSE l_rl_csr;
13015 END IF;
13016 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
13017 l_api_name,
13018 G_PKG_NAME,
13019 'OKL_API.G_RET_STS_ERROR',
13020 x_msg_count,
13021 x_msg_data,
13022 '_PVT');
13023 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
13024 IF l_hdr_csr%ISOPEN THEN
13025 CLOSE l_hdr_csr;
13026 END IF;
13027 IF ib_csr%ISOPEN THEN
13028 CLOSE ib_csr;
13029 END IF;
13030 IF l_line_rec_csr%ISOPEN THEN
13031 CLOSE l_line_rec_csr;
13032 END IF;
13033 IF l_rl_csr1%ISOPEN THEN
13034 CLOSE l_rl_csr1;
13035 END IF;
13036 IF strm_name_csr%ISOPEN THEN
13037 CLOSE strm_name_csr;
13038 END IF;
13039 IF l_rl_csr%ISOPEN THEN
13040 CLOSE l_rl_csr;
13041 END IF;
13042 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
13043 l_api_name,
13044 G_PKG_NAME,
13045 'OKL_API.G_RET_STS_UNEXP_ERROR',
13046 x_msg_count,
13047 x_msg_data,
13048 '_PVT');
13049 WHEN OTHERS then
13050 IF l_hdr_csr%ISOPEN THEN
13051 CLOSE l_hdr_csr;
13052 END IF;
13053 IF ib_csr%ISOPEN THEN
13054 CLOSE ib_csr;
13055 END IF;
13056 IF l_line_rec_csr%ISOPEN THEN
13057 CLOSE l_line_rec_csr;
13058 END IF;
13059 IF l_rl_csr1%ISOPEN THEN
13060 CLOSE l_rl_csr1;
13061 END IF;
13062 IF strm_name_csr%ISOPEN THEN
13063 CLOSE strm_name_csr;
13064 END IF;
13065 IF l_rl_csr%ISOPEN THEN
13066 CLOSE l_rl_csr;
13067 END IF;
13068 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
13069 l_api_name,
13070 G_PKG_NAME,
13071 'OTHERS',
13072 x_msg_count,
13073 x_msg_data,
13074 '_PVT');
13075 END extract_params_loan_deal;
13076 -- End modification 11i10 bakuchib
13077 PROCEDURE extract_params_loan_paydown(
13078 p_api_version IN NUMBER,
13079 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
13080 p_chr_id IN VARCHAR2,
13081 p_deal_type IN VARCHAR2,
13082 p_paydown_type IN VARCHAR2,
13083 p_paydown_date IN DATE,
13084 p_paydown_amount IN NUMBER,
13085 p_balance_type_code IN VARCHAR2,
13086 x_return_status OUT NOCOPY VARCHAR2,
13087 x_msg_count OUT NOCOPY NUMBER,
13088 x_msg_data OUT NOCOPY VARCHAR2,
13089 x_csm_loan_header OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
13090 x_csm_loan_lines_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
13091 x_csm_loan_levels_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type,
13092 x_csm_one_off_fee_tbl OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
13093 x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
13094 x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
13095 x_csm_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type) AS
13096
13097 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_LOAN_PPD';
13098 l_api_version CONSTANT NUMBER := 1;
13099 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
13100 l_level_type NUMBER;
13101 l_strm_name VARCHAR2(200);
13102 i BINARY_INTEGER := 0;
13103 j BINARY_INTEGER := 0;
13104 k BINARY_INTEGER := 0;
13105 l BINARY_INTEGER := 0;
13106 m BINARY_INTEGER := 0;
13107 idx BINARY_INTEGER := 0;
13108 l_basis_percent NUMBER;
13109 styid NUMBER;
13110 l_pricing_name VARCHAR2(40);
13111 l_salvage NUMBER;
13112 l_purchase_option VARCHAR2(256);
13113 l_deal_type VARCHAR2(256);
13114 l_purchase_option_amount NUMBER;
13115 l_msg_count Number;
13116 l_msg_data varchar2(2000);
13117 l_chr_id Number := TO_NUMBER(p_chr_id);
13118 l_cle_id Number;
13119 l_rgd_code Varchar2(30) := 'LAPSTH';
13120 l_rdf_code Varchar2(30) := 'LASTRM';
13121 l_rdf_name Varchar2(80) := 'xxx';
13122 l_id1 Varchar2(40);
13123 l_id2 Varchar2(200);
13124 l_name Varchar2(200);
13125 l_description Varchar2(2000);
13126 l_status Varchar2(1);
13127 l_start_date date;
13128 l_end_date date;
13129 l_org_id Number;
13130 l_inv_org_id Number;
13131 l_book_type_code Varchar2(15);
13132 l_select Varchar2(2000);
13133 l_msg_index_out Number;
13134 l_total_lending NUMBER;
13135
13136 --Bug 5146545 dpsingh start
13137 l_ic VARCHAR2(30);
13138
13139 Cursor check_fixed_contract(chrId VARCHAR2) is
13140 SELECT
13141 gts.interest_calc_meth_code
13142 FROM
13143 okl_k_headers khr,
13144 okl_products_v pdt,
13145 okl_ae_tmpt_sets_v aes,
13146 OKL_ST_GEN_TMPT_SETS gts
13147 WHERE
13148 khr.pdt_id = pdt.id AND
13149 pdt.aes_id = aes.id AND
13150 aes.gts_id = gts.id AND
13151 khr.id =chrId;
13152
13153 Cursor get_iir_value(chrId VARCHAR2) is
13154 SELECT
13155 implicit_interest_rate
13156 FROM
13157 okl_k_headers
13158 WHERE id=chrId;
13159 --Bug 5146545 dpsingh end
13160
13161
13162 Cursor l_struct_csr( chrId NUMBER ) is
13163 select distinct(nvl(crl.RULE_INFORMATION5,-1)) structure
13164 from OKC_RULE_GROUPS_B crg,
13165 OKC_RULES_B crl
13166 where crl.rgp_id = crg.id
13167 and crg.RGD_CODE = 'LALEVL'
13168 and crl.RULE_INFORMATION_CATEGORY = 'LASLL'
13169 and crg.dnz_chr_id = chrId;
13170
13171
13172 l_line_rec l_line_rec_csr%ROWTYPE;
13173 l_lne_rec l_line_rec_csr%ROWTYPE;
13174 l_hdr_rec l_hdr_csr%ROWTYPE;
13175 l_rl_rec l_rl_csr%ROWTYPE;
13176 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
13177 l_rl_rec1 l_rl_csr1%ROWTYPE;
13178 l_tx_rec l_tx_csr%ROWTYPE;
13179 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
13180 l_strm_name_rec strm_name_csr%ROWTYPE;
13181 l_ib_rec ib_csr%ROWTYPE;
13182 l_struct_rec l_struct_csr%ROWTYPE;
13183 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
13184 l_csm_loan_header okl_create_streams_pvt.csm_loan_rec_type;
13185 l_csm_loan_levels_tbl okl_create_streams_pvt.csm_loan_line_tbl_type;
13186 l_csm_one_off_fee_tbl okl_create_streams_pub.csm_one_off_fee_tbl_type;
13187 l_csm_periodic_expenses_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
13188 l_csm_yields_tbl okl_create_streams_pub.csm_yields_tbl_type;
13189 l_csm_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
13190 l_req_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
13191 l_csm_line_details_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
13192 l_rents_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
13193 l_strm_type_id_tbl okl_strm_type_id_tbl_type;
13194 --p_deal_type okl_st_gen_tmpt_sets.deal_type%TYPE;
13195
13196 --mansrini : Code for VR build
13197 CURSOR get_day_conv_on_contrct
13198 IS
13199 SELECT
13200 --Added by srsreeni for bug6076113
13201 -- rate_params.days_in_a_year_code,
13202 -- DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
13203 DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
13204 rate_params.days_in_a_year_code
13205 --srsreeni bug6076113 ends
13206 FROM okl_k_rate_params rate_params
13207 WHERE khr_id = p_chr_id;
13208
13209 CURSOR get_day_conv_on_sgt
13210 IS
13211 SELECT DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
13212 gts.days_in_yr_code
13213 FROM
13214 okl_k_headers khr,
13215 okl_products_v pdt,
13216 okl_ae_tmpt_sets_v aes,
13217 OKL_ST_GEN_TMPT_SETS gts
13218 WHERE
13219 khr.pdt_id = pdt.id AND
13220 pdt.aes_id = aes.id AND
13221 aes.gts_id = gts.id AND
13222 khr.id = p_chr_id;
13223
13224 l_days_in_month_code OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
13225 l_days_in_yr_code OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
13226 l_number_periods_remaining okl_sif_fees.number_of_periods%TYPE;
13227 l_number_periods_completed okl_sif_fees.number_of_periods%TYPE;
13228 l_number_periods_completed_cpy okl_sif_fees.number_of_periods%TYPE;
13229 l_variable_rate okl_sif_fees.rate%TYPE;
13230 l_total_oec okl_k_lines_full_v.oec%TYPE;
13231 --Added by kthiruva for the VR build
13232 l_ppd_assigned VARCHAR2(1) := 'N';
13233 l_rent_sty_id strm_rec_type;
13234 l_prev_ppd NUMBER := 0;
13235
13236 --This Cursor fetches the Principal Paydown lines existing per asset line
13237 --on the contract
13238 CURSOR get_prev_ppd_csr(rgcode okc_rule_groups_b.rgd_code%TYPE,
13239 rlcat okc_rules_b.rule_information_category%TYPE,
13240 chrId NUMBER,
13241 cleId NUMBER )
13242 IS
13243 SELECT crl.id slh_id,
13244 crl.object1_id1,
13245 crl.rule_information1,
13246 crl.rule_information2,
13247 crl.rule_information3,
13248 crl.rule_information5,
13249 crl.rule_information6,
13250 crl.rule_information7,
13251 crl.rule_information8,
13252 crl.rule_information13,
13253 crl.rule_information10
13254 FROM okc_rule_groups_b crg,
13255 okc_rules_b crl,
13256 okl_strm_type_v sty
13257 WHERE crl.rgp_id = crg.id
13258 AND crg.rgd_code = rgcode
13259 AND crl.rule_information_category = rlcat
13260 AND crg.dnz_chr_id = chrId
13261 AND crg.cle_id = cleId
13262 AND crl.object1_id1 = sty.id
13263 AND sty.stream_type_purpose = 'UNSCHEDULED_PRINCIPAL_PAYMENT'
13264 ORDER BY crl.rule_information1;
13265
13266 get_prev_ppd_rec get_prev_ppd_csr%ROWTYPE;
13267
13268
13269 FUNCTION get_end_date(
13270 l_start_date IN DATE,
13271 p_frequency IN VARCHAR2,
13272 p_period IN NUMBER,
13273 ---- cklee/mvasudev,06-02-2005,Bug#4392051/okl.h 4437938
13274 p_start_day IN NUMBER DEFAULT NULL
13275 )
13276 RETURN DATE IS
13277 l_end_date date;
13278 factor number := 0;
13279 BEGIN
13280 if(p_frequency = 'M') then
13281 factor := 1;
13282 elsif(p_frequency = 'Q') then
13283 factor := 3;
13284 elsif(p_frequency = 'S') then
13285 factor := 6;
13286 elsif(p_frequency = 'A') then
13287 factor := 12;
13288 end if;
13289 l_end_date := Okl_Lla_Util_Pvt.calculate_end_date(p_start_date => l_start_date,
13290 p_months => factor * NVL(p_period,0),
13291 p_start_day => p_start_day);
13292
13293 return l_end_date;
13294 EXCEPTION
13295 WHEN OTHERS THEN
13296 RETURN null;
13297 END get_end_date;
13298
13299 BEGIN
13300 x_return_status := OKL_API.G_RET_STS_SUCCESS;
13301 -- Call start_activity to create savepoint, check compatibility
13302 -- and initialize message list
13303 x_return_status := OKL_API.START_ACTIVITY (
13304 l_api_name
13305 ,p_init_msg_list
13306 ,'_PVT'
13307 ,x_return_status);
13308 -- Check if activity started successfully
13309 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13310 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13311 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13312 RAISE OKL_API.G_EXCEPTION_ERROR;
13313 END IF;
13314
13315 OPEN l_hdr_pdt_csr(p_chr_id);
13316 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
13317 CLOSE l_hdr_pdt_csr;
13318
13319 --get day convention info : mansrini
13320 OPEN get_day_conv_on_contrct;
13321 FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
13322 CLOSE get_day_conv_on_contrct;
13323
13324 --Added by srsreeni for bug6076113
13325 -- IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
13326 IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
13327 --srsreeni bug6076113 ends
13328 THEN
13329 OPEN get_day_conv_on_sgt;
13330 FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
13331 CLOSE get_day_conv_on_sgt;
13332 END IF;
13333 -- Validate the payments
13334 validate_payments(p_api_version => p_api_version,
13335 p_init_msg_list => p_init_msg_list,
13336 x_return_status => x_return_status,
13337 x_msg_count => x_msg_count,
13338 x_msg_data => x_msg_data,
13339 p_khr_id => p_chr_id,
13340 p_paym_tbl => l_pay_tbl);
13341 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13342 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13343 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13344 RAISE OKL_API.G_EXCEPTION_ERROR;
13345 END IF;
13346 i := 0; j := 0; k := 0; l := 0; m := 0;
13347 /*
13348 OPEN l_hdr_pdt_csr(p_chr_id);
13349 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
13350 CLOSE l_hdr_pdt_csr;
13351 */
13352 -- Header infro
13353 OPEN l_hdr_csr(p_chr_id);
13354 FETCH l_hdr_csr into l_hdr_rec;
13355 IF l_hdr_csr%NOTFOUND THEN
13356 okl_api.set_message(p_app_name => G_APP_NAME,
13357 p_msg_name => G_LLA_NO_MATCHING_RECORD,
13358 p_token1 => G_COL_NAME_TOKEN,
13359 p_token1_value => 'Contract id');
13360 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13361 END IF;
13362 CLOSE l_hdr_csr;
13363 l_csm_loan_header.khr_id := p_chr_id;
13364 l_csm_loan_header.date_payments_commencement := l_hdr_rec.start_date;
13365 l_csm_loan_header.date_start := l_hdr_rec.start_date;
13366 l_csm_loan_header.pdt_id := l_hdr_rec.pid;
13367 IF ( p_deal_type IS NULL ) THEN
13368 l_deal_type := l_hdr_rec.deal_type;
13369 ELSE
13370 l_deal_type := p_deal_type;
13371 END IF;
13372 -- Fetching the location of the asset
13373 OPEN ib_csr(TO_NUMBER(p_chr_id));
13374 FETCH ib_csr into l_ib_rec;
13375 IF ib_csr%NOTFOUND THEN
13376 okl_api.set_message(p_app_name => G_APP_NAME,
13377 p_msg_name => G_LLA_NO_MATCHING_RECORD,
13378 p_token1 => G_COL_NAME_TOKEN,
13379 p_token1_value => 'Contract id');
13380 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13381 END IF;
13382 CLOSE ib_csr;
13383 l_csm_loan_header.country := l_ib_rec.country;
13384 --The orp code for the Principal Paydown process is used here.
13385 l_csm_loan_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_RENEWAL;
13386 -- Callling the formual ccontract cap amount
13387 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
13388 --The Capital Reduction should not be removed from the Funding amount
13389 --Bug 4738011 - Start of Changes
13390 execute_formula(p_api_version => p_api_version,
13391 p_init_msg_list => p_init_msg_list,
13392 x_return_status => x_return_status,
13393 x_msg_count => x_msg_count,
13394 x_msg_data => x_msg_data,
13395 p_formula_name => 'CONTRACT_CAP_AMNT_LOAN',
13396 p_contract_id => p_chr_id,
13397 p_line_id => NULL,
13398 x_value => l_total_lending);
13399 --Bug 4738011 - End of Changes
13400 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13401 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13402 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13403 RAISE OKL_API.G_EXCEPTION_ERROR;
13404 END IF;
13405 l_csm_loan_header.total_lending := l_total_lending;
13406 l_csm_loan_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_LENDER;
13407
13408 --kthiruva : for PR proj
13409 --Fetch the total OEC for this contract so that it can be prorated for each asset in
13410 --the following loop
13411 OPEN total_oec_csr(p_chr_id);
13412 FETCH total_oec_csr INTO l_total_oec;
13413 CLOSE total_oec_csr;
13414
13415 -- asset infor
13416 FOR l_line_rec IN l_line_rec_csr ( p_chr_id , 'FREE_FORM1') LOOP
13417 i := i + 1;
13418 idx := 0;
13419 l_csm_loan_levels_tbl(i).kle_loan_id := l_line_rec.id;
13420 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
13421 --When the Down payment is not capitalised, the Down payment amount needs to be passed through the Down
13422 --payment tag in the Lending Loans tag of the Outbound XML.
13423 --Bug 4738011 - Start of Changes
13424 IF l_line_rec.capitalize_down_payment_yn = 'N' THEN
13425 l_csm_loan_levels_tbl(i).capitalize_down_payment_yn := l_line_rec.capitalize_down_payment_yn;
13426 l_csm_loan_levels_tbl(i).down_payment_amount := l_line_rec.capital_reduction;
13427 END IF;
13428 --Bug 4738011 - End of Changes
13429
13430 FOR l_rl_rec1 in l_rl_csr1 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
13431 --Added by kthiruva on 05-Dec-2005
13432 --Initialising l_first_batch for every asset line
13433 --Bug 4777531 - Start of Changes
13434 l_first_batch := 'N';
13435 l_ppd_assigned := 'N';
13436 --Bug 4777531 - End of Changes
13437
13438 l_level_type := l_rl_rec1.object1_id1;
13439
13440 OPEN strm_name_csr ( l_level_type );
13441 FETCH strm_name_csr into l_strm_name_rec;
13442 IF strm_name_csr%NOTFOUND THEN
13443 okl_api.set_message(p_app_name => G_APP_NAME,
13444 p_msg_name => G_LLA_NO_MATCHING_RECORD,
13445 p_token1 => G_COL_NAME_TOKEN,
13446 p_token1_value => 'Contract id');
13447 x_return_status := OKL_API.G_RET_STS_ERROR;
13448 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
13449 END IF;
13450 CLOSE strm_name_csr;
13451
13452 --Bug 5146545 dpsingh start
13453 OPEN check_fixed_contract(p_chr_id);
13454 FETCH check_fixed_contract INTO l_ic;
13455 CLOSE check_fixed_contract;
13456
13457 IF l_ic = 'FIXED' THEN
13458 OPEN get_iir_value(p_chr_id);
13459 FETCH get_iir_value INTO l_variable_rate ;
13460 CLOSE get_iir_value;
13461 ELSE
13462 --Added by kthiruva on 04-Oct-2005
13463 --Calling the variable Rate utility to determine the rate that needs to be used to solve for payment
13464 l_variable_rate := OKL_VARIABLE_INT_UTIL_PVT.get_effective_int_rate(
13465 x_return_status => l_return_status,
13466 p_khr_id => p_chr_id,
13467 p_effective_date => p_paydown_date);
13468
13469
13470 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
13471 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13472 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
13473 raise OKL_API.G_EXCEPTION_ERROR;
13474 End If;
13475 END IF;
13476 --Bug 5146545 dpsingh end
13477 --l_strm_name := l_strm_name_rec.name;
13478 l_strm_name := l_strm_name_rec.stream_type_purpose;
13479 -- srsreeni - Bug#5699923 - Added - Start
13480 -- DONOT request SuperTrump to generate streams
13481 -- for TERMINATED lines
13482 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
13483 --srsreeni Bug6245602 Added DOWN_PAYMENT and ESTIMATED_PROPERTY_TAX
13484 IF( UPPER(TRIM(l_strm_name)) NOT IN ('RENT','PRINCIPAL_PAYMENT','DOWN_PAYMENT','ESTIMATED_PROPERTY_TAX') ) THEN
13485 --srsreeni Bug6245602 end
13486 --Added by srsreeni for bug5841892
13487 -- m := m + 1;
13488 -- l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
13489 --bug5841892 end of changes
13490 get_dependent_pricing_name
13491 (
13492 p_khr_id =>p_chr_id,
13493 p_sty_id =>l_level_type,
13494 x_return_status =>x_return_status,
13495 x_dependent_pricing_name =>l_pricing_name
13496 );
13497 --Added by srsreeni for bug5841892
13498 if l_pricing_name is not null then
13499 m := m + 1;
13500 l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
13501 l_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
13502 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
13503 end if;
13504 --bug5841892 end of changes
13505 END IF;
13506 END IF; -- End of check for TERMINATED status
13507 -- srsreeni - Bug#5699923 - Added - End
13508 --idx := 0;
13509 IF( UPPER(TRIM(l_strm_name)) = 'RENT' ) THEN
13510 -- srsreeni - Bug#5699923 - Added - Start
13511 -- DONOT request SuperTrump to generate streams
13512 -- for TERMINATED lines
13513 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
13514 IF(g_rep_req_yn = 'Y') THEN
13515
13516 get_dependent_stream_types
13517 (
13518 p_khr_id =>p_chr_id,
13519 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
13520 p_primary_sty_id =>l_level_type,
13521 x_return_status => x_return_status,
13522 x_dependent_sty_id =>l_strm_type_id_tbl
13523 );
13524 IF x_return_status = 'E' THEN
13525 x_return_status := 'S';
13526 END IF;
13527
13528 ELSE
13529
13530 get_dependent_stream_types
13531 (
13532 p_khr_id =>p_chr_id,
13533 p_primary_sty_id =>l_level_type,
13534 x_return_status => x_return_status,
13535 x_dependent_sty_id =>l_strm_type_id_tbl
13536 );
13537 IF x_return_status = 'E' THEN
13538 x_return_status := 'S';
13539 END IF;
13540
13541 END IF;
13542
13543
13544 IF l_strm_type_id_tbl.COUNT > 0 THEN
13545 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
13546 m := m + 1;
13547
13548 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
13549 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
13550 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
13551 END LOOP;
13552 END IF;
13553 END IF; -- End of check for TERMINATED status
13554 -- srsreeni - Bug#5699923 - Added - End
13555
13556 j := j + 1;
13557 idx := idx + 1;
13558 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
13559 l_csm_line_details_tbl(j).description := 'Funding';
13560 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
13561 --The Capital Reduction should not be removed from the Funding amount
13562 --Bug 4738011 - Start of Changes
13563 execute_formula(p_api_version => p_api_version,
13564 p_init_msg_list => p_init_msg_list,
13565 x_return_status => x_return_status,
13566 x_msg_count => x_msg_count,
13567 x_msg_data => x_msg_data,
13568 p_formula_name => 'LINE_CAP_AMNT_LOAN',
13569 p_contract_id => p_chr_id,
13570 p_line_id => l_line_rec.id,
13571 x_value => l_total_lending);
13572 --Bug 4738011 - End of Changes
13573 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13574 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
13575 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13576 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
13577 END IF;
13578 --Initialising l_ppd_count for every asset and deleting the existing l_ppd_Tbl
13579 l_ppd_count := 0;
13580 l_ppd_tbl.delete;
13581 --Modified by kthiruva on 26-Sep-2005
13582 --All previous PPDs defined on the contract are fetched and added to a PL/SQL table
13583 FOR get_prev_ppd_rec IN get_prev_ppd_csr('LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id) LOOP
13584 FOR l_rl_rec in l_rl_csr ( get_prev_ppd_rec.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
13585 IF (l_rl_rec.rule_information7 IS NOT NULL OR
13586 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
13587 (l_rl_rec.rule_information8 IS NOT NULL OR
13588 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
13589 l_ppd_tbl(l_ppd_count).paydown_date := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
13590 l_ppd_tbl(l_ppd_count).paydown_amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION8,'0'));
13591 l_ppd_tbl(l_ppd_count).curr_paydown := 'N';
13592 l_ppd_count := l_ppd_count + 1;
13593 END IF;
13594 END LOOP;
13595 END LOOP;
13596 --Adding the current paydown to the ppd_tbl as the current paydown is not yet updated on the contract
13597 l_ppd_tbl(l_ppd_count).paydown_date := p_paydown_date;
13598 --Assigning it to 0 initially the paydown amount per line needs to be derived after proration
13599 l_ppd_tbl(l_ppd_count).paydown_amount := 0;
13600 l_ppd_tbl(l_ppd_count).curr_paydown := 'Y';
13601 --kthiruva : End of Changes
13602
13603 --Populating the diff_to_next column for all records in the l_ppd_tbl
13604 --The diff_to_next stores the number of days between a paydown and its subsequent paydown
13605 --If there is no subsequent paydown then the diff_to_next column stores a value 0
13606 FOR k in l_ppd_tbl.FIRST.. l_ppd_tbl.LAST LOOP
13607 IF l_ppd_tbl.COUNT = 1 THEN
13608 l_ppd_tbl(k).diff_to_next := 0;
13609 ELSE
13610 IF (k = l_ppd_tbl.LAST) THEN
13611 l_ppd_tbl(k).diff_to_next := 0;
13612 ELSE
13613 l_ppd_tbl(k).diff_to_next := l_ppd_tbl(k+1).paydown_date - l_ppd_tbl(k).paydown_date;
13614 END IF;
13615 END IF;
13616 END LOOP;
13617
13618 l_csm_line_details_tbl(j).amount := l_total_lending;
13619 --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
13620 --Bug 4576794 - Start of Changes
13621 --When a funding date is specified on the asset,it needs to be used as the date_start
13622 --When funding date is not specified, we use the contract start date
13623 l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
13624 --Bug 4576794 - End of Changes
13625 l_csm_line_details_tbl(j).level_index_number := idx;
13626 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
13627 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
13628 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
13629 l_csm_line_details_tbl(j).rate := l_variable_rate;
13630
13631 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
13632 --If the Down Payment is capitalised then , a new funding line with the opposite sign
13633 --needs to be added
13634 --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
13635 --Bug 4738011 - Start of Changes
13636 IF l_line_rec.capitalize_down_payment_yn = 'Y' AND l_line_rec.capital_reduction IS NOT NULL THEN
13637 j := j + 1;
13638 idx := idx + 1;
13639 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
13640 l_csm_line_details_tbl(j).description := 'Funding';
13641 l_csm_line_details_tbl(j).amount := l_line_rec.capital_reduction * (-1);
13642 l_csm_line_details_tbl(j).date_start := l_hdr_rec.start_date;
13643 l_csm_line_details_tbl(j).level_index_number := idx;
13644 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
13645 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
13646 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
13647 END IF;
13648 --Bug 4738011 - End of Changes
13649
13650 FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
13651 -- Start of Bug#2757289 modification
13652
13653 l_number_periods_remaining :=0;
13654 l_number_periods_completed := 0;
13655 l_number_periods_completed_cpy :=0;
13656 --If the payment is a stub
13657 IF (l_rl_rec.rule_information7 IS NOT NULL OR
13658 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
13659 (l_rl_rec.rule_information8 IS NOT NULL OR
13660 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
13661
13662 IF p_paydown_type = OKL_CREATE_STREAMS_PVT.G_PAYDOWN_TYPE_PPD THEN
13663 FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
13664 --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
13665 --Modified by kthiruva on 13-Feb-2006
13666 --Bug 4964710 - Start of Changes
13667 --============================================================================================
13668 --Step 1 : If payment is in Arrears created the PPD stub First
13669 --============================================================================================
13670 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
13671 AND l_ppd_tbl(k).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
13672 AND (l_rl_rec.RULE_INFORMATION10 IS NOT NULL) THEN
13673 j := j + 1;
13674 idx := idx + 1;
13675 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
13676 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
13677 l_csm_line_details_tbl(j).period := g_stub_rec.period;
13678 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
13679 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
13680 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
13681 IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
13682 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount(p_amount => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
13683 p_currency_code => l_hdr_rec.currency_code) ;
13684 --The flag l_ppd_assigned is set to true.
13685 --The flag is used to track whether a stub is appearing after the Prinicpal Paydown stub
13686 l_ppd_assigned := 'Y';
13687 ELSE
13688 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
13689 END IF;
13690 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
13691 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
13692 l_csm_line_details_tbl(j).level_index_number := idx;
13693 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
13694 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
13695 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
13696 l_csm_line_details_tbl(j).rate := l_variable_rate;
13697 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
13698 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
13699 ELSE
13700 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
13701 END IF;
13702
13703 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
13704 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
13705 END IF;
13706
13707 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
13708 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
13709 ELSE
13710 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
13711 END IF;
13712
13713 END IF;
13714 END LOOP;
13715 --=====================================================================
13716 --Step 2 : The payment like for the existing stub is being created here
13717 --=====================================================================
13718 --The payment line for the existing stub is created here
13719 j := j + 1;
13720 idx := idx + 1;
13721 l_csm_line_details_tbl(j).level_index_number := idx;
13722 l_csm_line_details_tbl(j).amount := TO_NUMBER(l_rl_rec.rule_information8);
13723 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
13724 THEN
13725 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
13726 ELSE
13727 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
13728 END IF;
13729 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
13730 l_csm_line_details_tbl(j).period := g_stub_rec.period;
13731 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
13732 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
13733 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
13734 l_csm_line_details_tbl(j).description := l_strm_name;
13735 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
13736 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
13737 l_csm_line_details_tbl(j).rate := l_variable_rate;
13738 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
13739 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
13740 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
13741 --solving for the new payment plan.
13742 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
13743 --both rate and amount
13744 IF l_ppd_assigned = 'Y' THEN
13745 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
13746 ELSIF l_ppd_assigned = 'N' THEN
13747 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
13748 END IF;
13749
13750 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
13751 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
13752 ELSE
13753 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
13754 END IF;
13755
13756 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
13757 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
13758 END IF;
13759
13760 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
13761 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
13762 ELSE
13763 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
13764 END IF;
13765 --=======================================================================================
13766 --Step 3 : IF the Payment is Advance then the PPD stub is created after the existing stub
13767 --=======================================================================================
13768 FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
13769 --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
13770 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
13771 AND l_ppd_tbl(k).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
13772 AND (l_rl_rec.RULE_INFORMATION10 IS NULL) THEN
13773 j := j + 1;
13774 idx := idx + 1;
13775 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
13776 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
13777 l_csm_line_details_tbl(j).period := g_stub_rec.period;
13778 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
13779 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
13780 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
13781 IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
13782 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount(p_amount => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
13783 p_currency_code => l_hdr_rec.currency_code) ;
13784 --The flag l_ppd_assigned is set to true.
13785 --The flag is used to track whether a stub is appearing after the Prinicpal Paydown stub
13786 l_ppd_assigned := 'Y';
13787 ELSE
13788 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
13789 END IF;
13790 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
13791 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
13792 l_csm_line_details_tbl(j).level_index_number := idx;
13793 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
13794 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
13795 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
13796 l_csm_line_details_tbl(j).rate := l_variable_rate;
13797 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
13798 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
13799 ELSE
13800 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
13801 END IF;
13802
13803 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
13804 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
13805 END IF;
13806
13807 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
13808 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
13809 ELSE
13810 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
13811 END IF;
13812
13813 END IF;
13814 END LOOP;
13815 --Bug 4964710 - End of Changes
13816
13817 END IF;
13818 -- End of Bug#2757289 modification
13819 /*mansrini Handle PPD for non-stub payments here*/
13820 ELSIF (l_rl_rec.rule_information7 IS NULL OR
13821 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
13822 (l_rl_rec.rule_information8 IS NULL OR
13823 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
13824
13825 --When there is no PPD in the range of the periodic payment, the payment is retained as is
13826 IF (l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
13827 OR l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3))
13828 AND (l_ppd_tbl(l_ppd_tbl.LAST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
13829 OR l_ppd_tbl(l_ppd_tbl.LAST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3)) THEN /*chk date cols*/
13830
13831 j := j + 1;
13832 idx := idx + 1;
13833 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
13834 l_csm_line_details_tbl(j).description := l_strm_name;
13835 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
13836 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
13837 l_csm_line_details_tbl(j).level_index_number := idx;
13838 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
13839 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
13840
13841 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
13842 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
13843 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
13844 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
13845 l_csm_line_details_tbl(j).rate := l_variable_rate;
13846 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
13847 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
13848 --solving for the new payment plan.
13849 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
13850 --both rate and amount
13851 IF l_ppd_assigned = 'Y' THEN
13852 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
13853 ELSIF l_ppd_assigned = 'N' THEN
13854 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
13855 END IF;
13856
13857 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
13858 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
13859 END IF;
13860
13861 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
13862 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
13863 ELSE
13864 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
13865 END IF;
13866
13867 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
13868 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
13869 ELSE
13870 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
13871 END IF;
13872
13873 ELSE
13874
13875 FOR k in l_ppd_tbl.FIRST .. l_ppd_tbl.LAST LOOP
13876 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
13877 AND l_ppd_tbl(k).paydown_date < get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) THEN /*chk date cols*/
13878 --=============================================================
13879 --Step 1 : Obtaining the number of periods prior to the paydown
13880 --=============================================================
13881 l_number_periods_remaining := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term)) ;
13882 --Modified by kthiruva on 12-Dec-2005
13883 --Instead of round, the function trunc needs to be used as we want the number
13884 --of periods elapsed completely
13885 --Bug 4878162 - Start of Changes
13886 l_number_periods_completed := trunc (months_between(l_ppd_tbl(k).paydown_date, FND_DATE.canonical_to_date(l_rl_rec.rule_information2)) / l_rl_rec.decoded_object1_id1,0);
13887 --Bug 4878162 - End of Changes
13888
13889 IF l_number_periods_completed = 0 THEN
13890 l_number_periods_completed_cpy := 0;
13891 l_number_periods_remaining := l_number_periods_remaining - 1;
13892 ELSE
13893 l_number_periods_completed_cpy := l_number_periods_completed;
13894 l_number_periods_remaining := l_number_periods_remaining - l_number_periods_completed - 1;
13895 END IF;
13896 --======================================================================================
13897 --Step 2 : Creating the first payment line with the periods preceeding the first paydown
13898 -- yet to be processed
13899 --=======================================================================================
13900
13901 IF (l_first_batch = 'N') AND (NVL(l_number_periods_completed,0) > 0 OR l_csm_line_details_tbl(j).date_start > l_ppd_tbl(k).paydown_date) THEN /*Periods that have been complete before paydown*/
13902 j := j + 1;
13903 idx := idx + 1;
13904 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
13905 l_csm_line_details_tbl(j).description := l_strm_name;
13906 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
13907 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
13908 l_csm_line_details_tbl(j).level_index_number := idx;
13909 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
13910
13911 IF l_number_periods_completed_cpy = 0 THEN
13912 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
13913 ELSE
13914 l_csm_line_details_tbl(j).number_of_periods := l_number_periods_completed_cpy;
13915 END IF;
13916
13917 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
13918 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
13919 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
13920 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
13921 l_csm_line_details_tbl(j).rate := l_variable_rate;
13922 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
13923 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
13924 --solving for the new payment plan.
13925 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
13926 --both rate and amount
13927 IF l_ppd_assigned = 'Y' THEN
13928 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
13929 ELSIF l_ppd_assigned = 'N' THEN
13930 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
13931 END IF;
13932
13933 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
13934 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
13935 END IF;
13936
13937 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
13938 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
13939 ELSE
13940 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
13941 END IF;
13942
13943 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
13944 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
13945 ELSE
13946 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
13947 END IF;
13948 l_first_batch := 'Y';
13949 END IF;
13950 --=====================================================================
13951 --Step 3 : If the payment is in Advance Create the Adjusting stub first
13952 --=====================================================================
13953 --If the payment is in Advance, the Adjusting stub needs to be created
13954 --first followed up the PPD Stub
13955 --For Payment in Arrears, the PPD stub is creted first followed by the
13956 --Adjusting Stub
13957 --Added by kthiruva on 10-Feb-2006
13958 --Bug 4964710 - Start of Changes
13959 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
13960 THEN
13961 --Calculating the days between the Paydown date and the due date of the next periodic payment
13962 l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
13963 l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
13964
13965 --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
13966 --line for remaining payments are created.
13967 --If only one PPD is within a period then an adjusting stub is created for the rest
13968 --of the period and one payment line for the remaining periods until the next paydown date
13969 IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
13970 j := j + 1;
13971 idx := idx + 1;
13972 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
13973 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
13974 l_csm_line_details_tbl(j).period := g_stub_rec.period;
13975 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
13976 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
13977 l_csm_line_details_tbl(j).description := l_strm_name;
13978 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
13979 --The adjusting stub would end one day before the PPD date
13980 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
13981 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
13982 l_csm_line_details_tbl(j).level_index_number := idx;
13983 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
13984 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
13985 l_csm_line_details_tbl(j).rate := l_variable_rate;
13986 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
13987 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
13988 --solving for the new payment plan.
13989 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
13990 --both rate and amount
13991 IF l_ppd_assigned = 'Y' THEN
13992 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
13993 ELSIF l_ppd_assigned = 'N' THEN
13994 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
13995 END IF;
13996
13997 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
13998 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
13999 END IF;
14000
14001 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14002 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14003 ELSE
14004 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14005 END IF;
14006
14007 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14008 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14009 ELSE
14010 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14011 END IF;
14012 END IF;
14013 END IF;
14014 --Bug 4964710 - End of Changes
14015
14016 --=================================
14017 --Step 4 : Create the paydown stub
14018 --=================================
14019
14020 IF p_paydown_type = OKL_CREATE_STREAMS_PVT.G_PAYDOWN_TYPE_PPD THEN
14021 /*PPD stub*/
14022 j := j + 1;
14023 idx := idx + 1;
14024 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14025 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
14026 l_csm_line_details_tbl(j).period := g_stub_rec.period;
14027 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14028 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14029 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
14030 --Calculating the prorated paydown amount if it is the current PPD
14031 IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
14032 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount(p_amount => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
14033 p_currency_code => l_hdr_rec.currency_code) ;
14034 --The flag l_ppd_assigned is set to true.
14035 --The flag is used to track whether a payment is appearing after the Prinicpal Paydown stub
14036 l_ppd_assigned := 'Y';
14037 ELSE
14038 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
14039 END IF;
14040 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
14041 THEN
14042 l_csm_line_details_tbl(j).date_start := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
14043 ELSE
14044 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
14045 END IF;
14046 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
14047 l_csm_line_details_tbl(j).level_index_number := idx;
14048 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14049 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14050 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14051 l_csm_line_details_tbl(j).rate := l_variable_rate;
14052
14053 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14054 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14055 END IF;
14056
14057 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14058 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14059 ELSE
14060 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14061 END IF;
14062
14063 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14064 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14065 ELSE
14066 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14067 END IF;
14068 --===============================================================================
14069 --Step 5: Check whether Ajusting stub needs to be created and create if necessary
14070 --================================================================================
14071 --Added by kthiruva on 10-Feb-2006
14072 --Bug 4964710 - Start of Changes
14073 IF (l_rl_rec.RULE_INFORMATION10 IS NOT NULL)
14074 THEN
14075 --Calculating the days between the Paydown date and the due date of the next periodic payment
14076 l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
14077 l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
14078
14079 --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
14080 --line for remaining payments are created.
14081 --If only one PPD is within a period then an adjusting stub is created for the rest
14082 --of the period and one payment line for the remaining periods until the next paydown date
14083 IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
14084 /*Adjusting stub*/
14085 j := j + 1;
14086 idx := idx + 1;
14087 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
14088 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
14089 l_csm_line_details_tbl(j).period := g_stub_rec.period;
14090 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14091 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14092 l_csm_line_details_tbl(j).description := l_strm_name;
14093 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14094 l_csm_line_details_tbl(j).date_start := l_adjusting_stub_date;
14095 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
14096 l_csm_line_details_tbl(j).level_index_number := idx;
14097 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14098 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14099 l_csm_line_details_tbl(j).rate := l_variable_rate;
14100 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
14101 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
14102 --solving for the new payment plan.
14103 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
14104 --both rate and amount
14105 IF l_ppd_assigned = 'Y' THEN
14106 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
14107 ELSIF l_ppd_assigned = 'N' THEN
14108 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14109 END IF;
14110
14111 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14112 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14113 END IF;
14114
14115 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14116 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14117 ELSE
14118 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14119 END IF;
14120
14121 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14122 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14123 ELSE
14124 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14125 END IF;
14126 END IF;
14127 END IF;
14128 --Bug 4964710 - Start of Changes
14129 --===================================================================================
14130 --Step 6 : Check whether a payment line for the remaining payments needs to be created
14131 --===================================================================================
14132
14133 --The periods between the end date of the adjusting stub and the next PPD is calculated
14134 --If number of periods > 0, then a payment line for that many periods needs to be created.
14135 IF k = l_ppd_tbl.LAST THEN
14136 l_period_end_date := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3);
14137 ELSE
14138 l_period_end_date := l_ppd_tbl(k+1).paydown_date;
14139 END IF;
14140 --Modified by kthiruva on 12-Dec-2005
14141 --Use round here
14142 --Bug 4878162 - Start of Changes
14143 l_periods_after_ppd := round (months_between(l_period_end_date,l_csm_line_details_tbl(j).date_start ) / l_rl_rec.decoded_object1_id1,0);
14144 --Bug 4878162 - End of Changes
14145
14146 --Create a payment line only if the number of periods till the next paydown is greater than 0
14147 IF (l_periods_after_ppd > 0) THEN
14148 /*Remaining amts*/
14149 j := j + 1;
14150 idx := idx + 1;
14151 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
14152 l_csm_line_details_tbl(j).number_of_periods := l_periods_after_ppd;
14153 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
14154 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14155 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14156 l_csm_line_details_tbl(j).description := l_strm_name;
14157 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14158 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
14159 l_csm_line_details_tbl(j).level_index_number := idx;
14160 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14161 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14162 l_csm_line_details_tbl(j).date_start := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) ;
14163 l_csm_line_details_tbl(j).rate := l_variable_rate;
14164 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
14165 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
14166 --solving for the new payment plan.
14167 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
14168 --both rate and amount
14169 IF l_ppd_assigned = 'Y' THEN
14170 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
14171 ELSIF l_ppd_assigned = 'N' THEN
14172 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14173 END IF;
14174
14175 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14176 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14177 END IF;
14178
14179 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14180 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14181 ELSE
14182 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14183 END IF;
14184
14185 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14186 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14187 ELSE
14188 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14189 END IF;
14190 END IF;--End of condition l_periods_after_ppd >0
14191 END IF;--The condition that checks the paydown type
14192 END IF;--The condition check for the date of every PPD in the ppd_tbl
14193 END LOOP;--loop for l_ppd_tbl
14194 END IF;--The condition checking if there is any PPD inside the date range of the periodic payment
14195 END IF;--The condition checking for Stub or periodic payment
14196 END LOOP;
14197 --Added by kthiruva for VR Build
14198 --When the Payment Type on the loan contract is PRINCIPAL.
14199 ELSIF( UPPER(TRIM(l_strm_name)) = 'PRINCIPAL_PAYMENT' ) THEN
14200 -- srsreeni - Bug#5699923 - Added - Start
14201 -- DONOT request SuperTrump to generate streams
14202 -- for TERMINATED lines
14203 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
14204 IF(g_rep_req_yn = 'Y') THEN
14205
14206 --Added by kthriuva for VR build
14207 --For payment of type principal, we need to request the dependents
14208 --on Rent. Hence obtaining the stream type id of Rent
14209 get_primary_no_prc_stream_type
14210 (
14211 p_khr_id =>p_chr_id,
14212 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
14213 p_primary_sty_purpose =>'RENT',
14214 x_return_status => x_return_status,
14215 x_primary_sty_id => l_rent_sty_id
14216 );
14217 --kthriuva - End of Changes for VR build
14218
14219 get_dependent_stream_types
14220 (
14221 p_khr_id =>p_chr_id,
14222 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
14223 p_primary_sty_id =>l_rent_sty_id.id,
14224 x_return_status => x_return_status,
14225 x_dependent_sty_id =>l_strm_type_id_tbl
14226 );
14227 IF x_return_status = 'E' THEN
14228 x_return_status := 'S';
14229 END IF;
14230
14231 ELSE
14232 --Added by kthriuva for VR build
14233 --For payment of type principal, we need to request the dependents
14234 --on Rent. Hence obtaining the stream type id of Rent
14235 get_primary_no_prc_stream_type
14236 (
14237 p_khr_id =>p_chr_id,
14238 p_pdt_id =>l_pdt_id_rec.pid,
14239 p_primary_sty_purpose =>'RENT',
14240 x_return_status => x_return_status,
14241 x_primary_sty_id => l_rent_sty_id
14242 );
14243
14244 --kthriuva - End of Changes for VR build
14245 get_dependent_stream_types
14246 (
14247 p_khr_id =>p_chr_id,
14248 p_primary_sty_id =>l_rent_sty_id.id,
14249 x_return_status => x_return_status,
14250 x_dependent_sty_id =>l_strm_type_id_tbl
14251 );
14252 IF x_return_status = 'E' THEN
14253 x_return_status := 'S';
14254 END IF;
14255
14256 END IF;
14257
14258
14259 IF l_strm_type_id_tbl.COUNT > 0 THEN
14260 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
14261 m := m + 1;
14262
14263 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
14264 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
14265 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
14266 END LOOP;
14267 END IF;
14268 END IF; -- End of check for TERMINATED status
14269 -- srsreeni - Bug#5699923 - Added - End
14270
14271 j := j + 1;
14272 idx := idx + 1;
14273 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14274 l_csm_line_details_tbl(j).description := 'Funding';
14275 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
14276 --The Capital Reduction should not be removed from the Funding amount
14277 --Bug 4738011 - Start of Changes
14278 execute_formula(p_api_version => p_api_version,
14279 p_init_msg_list => p_init_msg_list,
14280 x_return_status => x_return_status,
14281 x_msg_count => x_msg_count,
14282 x_msg_data => x_msg_data,
14283 p_formula_name => 'LINE_CAP_AMNT_LOAN',
14284 p_contract_id => p_chr_id,
14285 p_line_id => l_line_rec.id,
14286 x_value => l_total_lending);
14287 --Bug 4738011 - End of Changes
14288 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14289 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
14290 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14291 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
14292 END IF;
14293 --Initialising l_ppd_count for every asset and deleting the existing l_ppd_Tbl
14294 l_ppd_count := 0;
14295 l_ppd_tbl.delete;
14296 --Added by kthiruva on 19-Sep-2005
14297 --All previous PPDs defined on the contract are fetched and added to a PL/SQL table
14298 FOR get_prev_ppd_rec IN get_prev_ppd_csr('LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id) LOOP
14299 FOR l_rl_rec in l_rl_csr ( get_prev_ppd_rec.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
14300 IF (l_rl_rec.rule_information7 IS NOT NULL OR
14301 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
14302 (l_rl_rec.rule_information8 IS NOT NULL OR
14303 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
14304 l_ppd_tbl(l_ppd_count).paydown_date := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
14305 l_ppd_tbl(l_ppd_count).paydown_amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION8,'0'));
14306 l_ppd_tbl(l_ppd_count).curr_paydown := 'N';
14307 l_ppd_count := l_ppd_count + 1;
14308 END IF;
14309 END LOOP;
14310 END LOOP;
14311 --Adding the current paydown to the ppd_tbl as the current paydown is not yet updated on the contract
14312 l_ppd_tbl(l_ppd_count).paydown_date := p_paydown_date;
14313 --Assigning it to 0 initially the paydown amount per line needs to be derived after proration
14314 l_ppd_tbl(l_ppd_count).paydown_amount := 0;
14315 l_ppd_tbl(l_ppd_count).curr_paydown := 'Y';
14316 --kthiruva : End of Changes
14317
14318 --Populating the diff_to_next column for all records in the l_ppd_tbl
14319 --The diff_to_next stores the number of days between a paydown and its subsequent paydown
14320 --If there is no subsequent paydown then the diff_to_next column stores a value 0
14321 FOR k in l_ppd_tbl.FIRST.. l_ppd_tbl.LAST LOOP
14322 IF l_ppd_tbl.COUNT = 1 THEN
14323 l_ppd_tbl(k).diff_to_next := 0;
14324 ELSE
14325 IF (k = l_ppd_tbl.LAST) THEN
14326 l_ppd_tbl(k).diff_to_next := 0;
14327 ELSE
14328 l_ppd_tbl(k).diff_to_next := l_ppd_tbl(k+1).paydown_date - l_ppd_tbl(k).paydown_date;
14329 END IF;
14330 END IF;
14331 END LOOP;
14332
14333 l_csm_line_details_tbl(j).amount := l_total_lending;
14334 --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
14335 --Bug 4576794 - Start of Changes
14336 --When a funding date is specified on the asset,it needs to be used as the date_start
14337 --When funding date is not specified, we use the contract start date
14338 l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
14339 --Bug 4576794 - End of Changes
14340 l_csm_line_details_tbl(j).level_index_number := idx;
14341 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
14342 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14343 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14344 l_csm_line_details_tbl(j).rate := l_variable_rate;
14345
14346 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
14347 --If the Down Payment is capitalised then , a new funding line with the opposite sign
14348 --needs to be added
14349 --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
14350 --Bug 4738011 - Start of Changes
14351 IF l_line_rec.capitalize_down_payment_yn = 'Y' AND l_line_rec.capital_reduction IS NOT NULL THEN
14352 j := j + 1;
14353 idx := idx + 1;
14354 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14355 l_csm_line_details_tbl(j).description := 'Funding';
14356 l_csm_line_details_tbl(j).amount := l_line_rec.capital_reduction * (-1);
14357 l_csm_line_details_tbl(j).date_start := l_hdr_rec.start_date;
14358 l_csm_line_details_tbl(j).level_index_number := idx;
14359 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
14360 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14361 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14362 END IF;
14363 --Bug 4738011 - End of Changes
14364
14365 FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
14366 -- Start of Bug#2757289 modification
14367
14368 l_number_periods_remaining :=0;
14369 l_number_periods_completed := 0;
14370 l_number_periods_completed_cpy :=0;
14371 --If payment is a stub
14372 IF (l_rl_rec.rule_information7 IS NOT NULL OR
14373 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
14374 (l_rl_rec.rule_information8 IS NOT NULL OR
14375 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
14376 IF p_paydown_type = OKL_CREATE_STREAMS_PVT.G_PAYDOWN_TYPE_PPD THEN
14377 FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
14378 --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
14379 --Modified by kthiruva on 13-Feb-2006
14380 --Bug 4964710 - Start of Changes
14381 --============================================================================================
14382 --Step 1 : If payment is in Arrears created the PPD stub First
14383 --============================================================================================
14384 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
14385 AND l_ppd_tbl(k).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
14386 AND (l_rl_rec.RULE_INFORMATION10 IS NOT NULL) THEN
14387 j := j + 1;
14388 idx := idx + 1;
14389 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14390 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
14391 l_csm_line_details_tbl(j).period := g_stub_rec.period;
14392 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14393 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14394 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
14395 IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
14396 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount(p_amount => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
14397 p_currency_code => l_hdr_rec.currency_code) ;
14398 --The flag l_ppd_assigned is set to true.
14399 --The flag is used to track whether a stub is appearing after the Prinicpal Paydown stub
14400 l_ppd_assigned := 'Y';
14401 ELSE
14402 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
14403 END IF;
14404 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
14405 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
14406 l_csm_line_details_tbl(j).level_index_number := idx;
14407 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14408 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14409 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14410 l_csm_line_details_tbl(j).rate := l_variable_rate;
14411 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14412 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14413 ELSE
14414 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14415 END IF;
14416
14417 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14418 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14419 END IF;
14420
14421 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14422 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14423 ELSE
14424 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14425 END IF;
14426
14427 END IF;
14428 END LOOP;
14429 --=====================================================================
14430 --Step 2 : The payment like for the existing stub is being created here
14431 --=====================================================================
14432 --The payment line for the existing stub is created here
14433 j := j + 1;
14434 idx := idx + 1;
14435 l_csm_line_details_tbl(j).level_index_number := idx;
14436 l_csm_line_details_tbl(j).amount := TO_NUMBER(l_rl_rec.rule_information8);
14437 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
14438 THEN
14439 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
14440 ELSE
14441 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
14442 END IF;
14443 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
14444 l_csm_line_details_tbl(j).period := g_stub_rec.period;
14445 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14446 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14447 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14448 l_csm_line_details_tbl(j).description := l_strm_name;
14449 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14450 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14451 l_csm_line_details_tbl(j).rate := l_variable_rate;
14452 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
14453 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
14454 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
14455 --solving for the new payment plan.
14456 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
14457 --both rate and amount
14458 IF l_ppd_assigned = 'Y' THEN
14459 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
14460 ELSIF l_ppd_assigned = 'N' THEN
14461 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14462 END IF;
14463
14464 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14465 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14466 ELSE
14467 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14468 END IF;
14469
14470 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14471 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14472 END IF;
14473
14474 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14475 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14476 ELSE
14477 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14478 END IF;
14479 --=======================================================================================
14480 --Step 3 : IF the Payment is Advance then the PPD stub is created after the existing stub
14481 --=======================================================================================
14482 FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
14483 --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
14484 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
14485 AND l_ppd_tbl(k).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
14486 AND (l_rl_rec.RULE_INFORMATION10 IS NULL) THEN
14487 j := j + 1;
14488 idx := idx + 1;
14489 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14490 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
14491 l_csm_line_details_tbl(j).period := g_stub_rec.period;
14492 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14493 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14494 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
14495 IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
14496 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount(p_amount => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
14497 p_currency_code => l_hdr_rec.currency_code) ;
14498 --The flag l_ppd_assigned is set to true.
14499 --The flag is used to track whether a stub is appearing after the Prinicpal Paydown stub
14500 l_ppd_assigned := 'Y';
14501 ELSE
14502 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
14503 END IF;
14504 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
14505 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
14506 l_csm_line_details_tbl(j).level_index_number := idx;
14507 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14508 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14509 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14510 l_csm_line_details_tbl(j).rate := l_variable_rate;
14511 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14512 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14513 ELSE
14514 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14515 END IF;
14516
14517 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14518 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14519 END IF;
14520
14521 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14522 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14523 ELSE
14524 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14525 END IF;
14526
14527 END IF;
14528 END LOOP;
14529 --Bug 4964710 - End of Changes
14530 END IF;
14531 -- End of Bug#2757289 modification
14532 /*mansrini Handle PPD for non-stub payments here*/
14533 ELSIF (l_rl_rec.rule_information7 IS NULL OR
14534 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
14535 (l_rl_rec.rule_information8 IS NULL OR
14536 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
14537
14538 --When there is no PPD in the range of the periodic payment, the payment is retained as is
14539 IF (l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
14540 OR l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3))
14541 AND (l_ppd_tbl(l_ppd_tbl.LAST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
14542 OR l_ppd_tbl(l_ppd_tbl.LAST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3)) THEN /*chk date cols*/
14543
14544 j := j + 1;
14545 idx := idx + 1;
14546 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14547 l_csm_line_details_tbl(j).description := l_strm_name;
14548 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14549 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
14550 l_csm_line_details_tbl(j).level_index_number := idx;
14551 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14552 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
14553
14554 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
14555 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14556 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14557 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
14558 l_csm_line_details_tbl(j).rate := l_variable_rate;
14559 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
14560 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
14561 --solving for the new payment plan.
14562 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
14563 --both rate and amount
14564 IF l_ppd_assigned = 'Y' THEN
14565 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
14566 ELSIF l_ppd_assigned = 'N' THEN
14567 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14568 END IF;
14569
14570 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14571 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14572 END IF;
14573
14574 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14575 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14576 ELSE
14577 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14578 END IF;
14579
14580 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14581 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14582 ELSE
14583 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14584 END IF;
14585
14586 ELSE
14587
14588 FOR k in l_ppd_tbl.FIRST .. l_ppd_tbl.LAST LOOP
14589 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
14590 AND l_ppd_tbl(k).paydown_date < get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) THEN
14591 --=============================================================
14592 --Step 1 : Obtaining the number of periods prior to the paydown
14593 --=============================================================
14594 l_number_periods_remaining := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term)) ;
14595 --Modified by kthiruva on 12-Dec-2005
14596 --Use trunc instead of round as we need the number of periods elapsed completely
14597 --Bug 4878162 - Start of Changes
14598 l_number_periods_completed := trunc (months_between(l_ppd_tbl(k).paydown_date, FND_DATE.canonical_to_date(l_rl_rec.rule_information2)) / l_rl_rec.decoded_object1_id1,0);
14599 --Bug 4878162 - End of Changes
14600
14601
14602 IF l_number_periods_completed = 0 THEN
14603 l_number_periods_completed_cpy := 0;
14604 l_number_periods_remaining := l_number_periods_remaining - 1;
14605 ELSE
14606 l_number_periods_completed_cpy := l_number_periods_completed;
14607 l_number_periods_remaining := l_number_periods_remaining - l_number_periods_completed - 1;
14608 END IF;
14609 --======================================================================================
14610 --Step 2 : Creating the first payment line with the periods preceeding the first paydown
14611 -- yet to be processed
14612 --=======================================================================================
14613
14614 IF (l_first_batch = 'N') AND (NVL(l_number_periods_completed,0) > 0 OR l_csm_line_details_tbl(j).date_start > l_ppd_tbl(k).paydown_date) THEN /*Periods that have been complete before paydown*/
14615 j := j + 1;
14616 idx := idx + 1;
14617 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14618 l_csm_line_details_tbl(j).description := l_strm_name;
14619 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14620 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
14621 l_csm_line_details_tbl(j).level_index_number := idx;
14622 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14623
14624 IF l_number_periods_completed_cpy = 0 THEN
14625 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
14626 ELSE
14627 l_csm_line_details_tbl(j).number_of_periods := l_number_periods_completed_cpy;
14628 END IF;
14629
14630 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
14631 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14632 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14633 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
14634 l_csm_line_details_tbl(j).rate := l_variable_rate;
14635 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
14636 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
14637 --solving for the new payment plan.
14638 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
14639 --both rate and amount
14640 IF l_ppd_assigned = 'Y' THEN
14641 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
14642 ELSIF l_ppd_assigned = 'N' THEN
14643 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14644 END IF;
14645
14646 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14647 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14648 END IF;
14649
14650 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14651 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14652 ELSE
14653 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14654 END IF;
14655
14656 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14657 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14658 ELSE
14659 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14660 END IF;
14661 l_first_batch := 'Y';
14662 END IF;
14663 --=====================================================================
14664 --Step 3 : If the payment is in Advance Create the Adjusting stub first
14665 --=====================================================================
14666 --If the payment is in Advance, the Adjusting stub needs to be created
14667 --first followed up the PPD Stub
14668 --For Payment in Arrears, the PPD stub is creted first followed by the
14669 --Adjusting Stub
14670 --Added by kthiruva on 10-Feb-2006
14671 --Bug 4964710 - Start of Changes
14672 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
14673 THEN
14674 --Calculating the days between the Paydown date and the due date of the next periodic payment
14675 l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
14676 l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
14677
14678 --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
14679 --line for remaining payments are created.
14680 --If only one PPD is within a period then an adjusting stub is created for the rest
14681 --of the period and one payment line for the remaining periods until the next paydown date
14682 IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
14683 j := j + 1;
14684 idx := idx + 1;
14685 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
14686 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
14687 l_csm_line_details_tbl(j).period := g_stub_rec.period;
14688 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14689 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14690 l_csm_line_details_tbl(j).description := l_strm_name;
14691 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14692 --The adjusting stub would end one day before the PPD date
14693 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
14694 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
14695 l_csm_line_details_tbl(j).level_index_number := idx;
14696 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14697 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14698 l_csm_line_details_tbl(j).rate := l_variable_rate;
14699 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
14700 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
14701 --solving for the new payment plan.
14702 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
14703 --both rate and amount
14704 IF l_ppd_assigned = 'Y' THEN
14705 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
14706 ELSIF l_ppd_assigned = 'N' THEN
14707 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14708 END IF;
14709
14710 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14711 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14712 END IF;
14713
14714 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14715 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14716 ELSE
14717 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14718 END IF;
14719
14720 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14721 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14722 ELSE
14723 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14724 END IF;
14725 END IF;
14726 END IF;
14727 --Bug 4964710 - End of Changes
14728
14729 --=================================
14730 --Step 4 : Create the paydown stub
14731 --=================================
14732
14733 IF p_paydown_type = OKL_CREATE_STREAMS_PVT.G_PAYDOWN_TYPE_PPD THEN
14734 /*PPD stub*/
14735 j := j + 1;
14736 idx := idx + 1;
14737 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14738 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
14739 l_csm_line_details_tbl(j).period := g_stub_rec.period;
14740 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14741 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14742 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
14743 --Calculating the prorated paydown amount if it is the current PPD
14744 IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
14745 l_csm_line_details_tbl(j).amount := okl_accounting_util.round_amount(p_amount => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
14746 p_currency_code => l_hdr_rec.currency_code) ;
14747 --The flag l_ppd_assigned is set to true.
14748 --The flag is used to track whether a payment is appearing after the Prinicpal Paydown stub
14749 l_ppd_assigned := 'Y';
14750 ELSE
14751 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
14752 END IF;
14753 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
14754 THEN
14755 l_csm_line_details_tbl(j).date_start := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
14756 ELSE
14757 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
14758 END IF;
14759 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
14760 l_csm_line_details_tbl(j).level_index_number := idx;
14761 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14762 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14763 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14764 l_csm_line_details_tbl(j).rate := l_variable_rate;
14765
14766 /*Populate the accrual end date as well*/
14767 /*Create a stub for principal paydown*/
14768 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14769 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14770 END IF;
14771
14772 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14773 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14774 ELSE
14775 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14776 END IF;
14777
14778 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14779 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14780 ELSE
14781 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14782 END IF;
14783 --===============================================================================
14784 --Step 5: Check whether Ajusting stub needs to be created and create if necessary
14785 --================================================================================
14786 --Added by kthiruva on 10-Feb-2006
14787 --Bug 4964710 - Start of Changes
14788 IF (l_rl_rec.RULE_INFORMATION10 IS NOT NULL)
14789 THEN
14790 --Calculating the days between the Paydown date and the due date of the next periodic payment
14791 l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
14792 l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
14793
14794 --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
14795 --line for remaining payments are created.
14796 --If only one PPD is within a period then an adjusting stub is created for the rest
14797 --of the period and one payment line for the remaining periods until the next paydown date
14798 IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
14799 /*Adjusting stub*/
14800 j := j + 1;
14801 idx := idx + 1;
14802 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14803 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
14804 l_csm_line_details_tbl(j).period := g_stub_rec.period;
14805 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14806 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14807 l_csm_line_details_tbl(j).description := l_strm_name;
14808 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14809 l_csm_line_details_tbl(j).date_start := l_adjusting_stub_date;
14810 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
14811 l_csm_line_details_tbl(j).level_index_number := idx;
14812 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14813 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14814 l_csm_line_details_tbl(j).rate := l_variable_rate;
14815 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
14816 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
14817 --solving for the new payment plan.
14818 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
14819 --both rate and amount
14820 IF l_ppd_assigned = 'Y' THEN
14821 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
14822 ELSIF l_ppd_assigned = 'N' THEN
14823 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14824 END IF;
14825
14826 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14827 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14828 END IF;
14829
14830 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14831 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14832 ELSE
14833 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14834 END IF;
14835
14836 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14837 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14838 ELSE
14839 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14840 END IF;
14841 END IF;
14842 END IF;
14843 --===================================================================================
14844 --Step 6 : Check whether a payment line for the remaining payments needs to be creted
14845 --===================================================================================
14846
14847 --The periods between the end date of the adjusting stub and the next PPD is calculated
14848 --If number of periods > 0, then a payment line for that many periods needs to be created.
14849 IF k = l_ppd_tbl.LAST THEN
14850 l_period_end_date := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3);
14851 ELSE
14852 l_period_end_date := l_ppd_tbl(k+1).paydown_date;
14853 END IF;
14854 --Modified by kthiruva on 12-Dec-2005
14855 --Use round here
14856 --Bug 4878162 - Start of Changes
14857 l_periods_after_ppd := round (months_between(l_period_end_date,l_csm_line_details_tbl(j).date_start ) / l_rl_rec.decoded_object1_id1,0);
14858 --Bug 4878162 - Start of Changes
14859 --Create a payment line only if the number of periods till the next paydown is greater than 0
14860 IF (l_periods_after_ppd > 0) THEN
14861 /*Remaining amts*/
14862 j := j + 1;
14863 idx := idx + 1;
14864 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14865 l_csm_line_details_tbl(j).number_of_periods := l_periods_after_ppd;
14866 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
14867 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14868 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
14869 l_csm_line_details_tbl(j).description := l_strm_name;
14870 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14871 l_csm_line_details_tbl(j).balance_type_code := p_balance_type_code;
14872 l_csm_line_details_tbl(j).level_index_number := idx;
14873 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14874 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
14875 l_csm_line_details_tbl(j).date_start := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) ;
14876 l_csm_line_details_tbl(j).rate := l_variable_rate;
14877 --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
14878 --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
14879 --solving for the new payment plan.
14880 --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
14881 --both rate and amount
14882 IF l_ppd_assigned = 'Y' THEN
14883 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
14884 ELSIF l_ppd_assigned = 'N' THEN
14885 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14886 END IF;
14887
14888 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14889 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14890 END IF;
14891
14892 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14893 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14894 ELSE
14895 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14896 END IF;
14897
14898 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14899 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14900 ELSE
14901 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14902 END IF;
14903 END IF;--End of condition l_periods_after_ppd >0
14904
14905 END IF;--The condition that checks the paydown type
14906 END IF;--The condition check for the date of every PPD in the ppd_tbl
14907 END LOOP;--loop for l_ppd_tbl
14908 END IF;--The condition checking if there is any PPD inside the date range of the periodic payment
14909 END IF;--The condition checking for Stub or periodic payment
14910 END LOOP;
14911 --Emd of Changes for payment type 'PRINCIPAL_PAYMENT'
14912 ELSIF (((l_strm_name_rec.periodic_yn = 'Y' ) AND
14913 (UPPER(l_strm_name_rec.stream_type_purpose) = 'FEE') AND
14914 (l_strm_name_rec.capitalize_yn = 'N')) OR
14915 ((l_strm_name_rec.periodic_yn = 'Y' ) AND
14916 -- code for user defined streams
14917 --(UPPER(l_strm_name_rec.name) <> 'FEE'))) THEN
14918 (UPPER(l_strm_name_rec.stream_type_purpose) <> 'FEE'))) THEN
14919 -- code for use defined streams ends here
14920 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
14921 -- Start of Bug#2757289 modification
14922 IF (l_rl_rec.rule_information7 IS NOT NULL OR
14923 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
14924 (l_rl_rec.rule_information8 IS NOT NULL OR
14925 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
14926 k := k + 1;
14927 idx := idx + 1;
14928 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
14929 l_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
14930 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+l_rl_rec.rule_information7;
14931 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
14932 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
14933 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
14934 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
14935 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
14936 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
14937
14938 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14939 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14940 END IF;
14941 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14942 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14943 ELSE
14944 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14945 END IF;
14946 -- Code for user defined streams
14947 --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
14948 IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
14949 -- code ends here
14950 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
14951 --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) THEN
14952 ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) THEN
14953 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14954 ELSE
14955 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
14956 END If;
14957 -- End of Bug#2757289 modification
14958
14959 -- Added by kthiruva on 29-Dec-2005.
14960 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
14961 -- Bug 4915938 - Start of Changes
14962 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14963 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14964 ELSE
14965 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14966 END IF;
14967 -- Bug 4915938 - End of Changes
14968
14969 ELSIF (l_rl_rec.rule_information7 IS NULL OR
14970 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
14971 (l_rl_rec.rule_information8 IS NULL OR
14972 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
14973 k := k + 1;
14974 idx := idx + 1;
14975 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
14976 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
14977 l_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
14978 l_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14979 l_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
14980 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
14981 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
14982 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
14983
14984 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14985 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14986 END IF;
14987 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14988 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14989 ELSE
14990 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14991 END IF;
14992 IF (l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
14993 l_csm_periodic_expenses_tbl(k).date_start := l_hdr_rec.start_date;
14994 ELSE
14995 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
14996 END IF;
14997 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14998 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14999 ELSE
15000 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
15001 END IF;
15002 --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
15003 IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
15004 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
15005 --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) Then
15006 ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) Then
15007 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
15008 ELSE
15009 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
15010 END If;
15011 END IF;
15012 END LOOP;
15013 ELSIf ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' )) Then
15014 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
15015 l := l + 1;
15016 l_csm_one_off_fee_tbl(l).description := l_strm_name_rec.name;
15017 l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
15018 l_csm_one_off_fee_tbl(l).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
15019 If(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
15020 l_csm_one_off_fee_tbl(l).date_paid := l_hdr_rec.start_date;
15021 Else
15022 l_csm_one_off_fee_tbl(l).date_paid := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
15023 End If;
15024 l_csm_one_off_fee_tbl(l).kle_asset_id := l_line_rec.id;
15025 END LOOP;
15026 END IF;
15027 END LOOP;
15028 END LOOP;
15029 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15030 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15031 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15032 RAISE OKL_API.G_EXCEPTION_ERROR;
15033 End If;
15034 -- Extract fee line
15035 extract_fee_lines( p_api_version => p_api_version,
15036 p_chr_id => TO_NUMBER(p_chr_id),
15037 p_deal_type => l_deal_type,
15038 p_init_msg_list => p_init_msg_list,
15039 x_msg_count => x_msg_count,
15040 x_msg_data => x_msg_data,
15041 x_return_status => x_return_status,
15042 px_csm_stream_types_tbl => l_csm_stream_types_tbl,
15043 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl,
15044 px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
15045 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
15046 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15047 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
15048 raise OKL_API.G_EXCEPTION_ERROR;
15049 End If;
15050 extract_subsidized_lines(p_api_version => p_api_version,
15051 p_init_msg_list => p_init_msg_list,
15052 x_return_status => x_return_status,
15053 x_msg_count => x_msg_count,
15054 x_msg_data => x_msg_data,
15055 p_chr_id => TO_NUMBER(p_chr_id),
15056 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
15057 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
15058 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15059 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
15060 raise OKL_API.G_EXCEPTION_ERROR;
15061 End If;
15062 check_for_mandatory_streams(
15063 p_api_version => p_api_version,
15064 p_init_msg_list => p_init_msg_list,
15065 x_msg_count => x_msg_count,
15066 x_msg_data => x_msg_data,
15067 x_return_status => x_return_status,
15068 p_chr_id => p_chr_id,
15069 p_deal_type => l_deal_type,
15070 p_stream_types_tbl => l_csm_stream_types_tbl,
15071 x_stream_types_tbl => l_req_stream_types_tbl);
15072 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
15073 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15074 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
15075 raise OKL_API.G_EXCEPTION_ERROR;
15076 End If;
15077 -- Requesting for yields
15078 x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
15079 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15080 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15081 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15082 RAISE OKL_API.G_EXCEPTION_ERROR;
15083 END IF;
15084
15085 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
15086 okl_api.set_message(
15087 p_app_name => G_APP_NAME,
15088 p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
15089 raise OKL_API.G_EXCEPTION_ERROR;
15090 End If;
15091
15092 x_csm_loan_header := l_csm_loan_header;
15093 x_csm_loan_lines_tbl := l_csm_loan_levels_tbl;
15094 x_csm_loan_levels_tbl := l_csm_line_details_tbl;
15095 x_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
15096 x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
15097 x_csm_yields_tbl := l_csm_yields_tbl;
15098 x_csm_stream_types_tbl := l_req_stream_types_tbl;
15099 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
15100 x_msg_data => x_msg_data);
15101 EXCEPTION
15102 WHEN OKL_API.G_EXCEPTION_ERROR THEN
15103 IF l_hdr_csr%ISOPEN THEN
15104 CLOSE l_hdr_csr;
15105 END IF;
15106 IF ib_csr%ISOPEN THEN
15107 CLOSE ib_csr;
15108 END IF;
15109 IF l_line_rec_csr%ISOPEN THEN
15110 CLOSE l_line_rec_csr;
15111 END IF;
15112 IF l_rl_csr1%ISOPEN THEN
15113 CLOSE l_rl_csr1;
15114 END IF;
15115 IF strm_name_csr%ISOPEN THEN
15116 CLOSE strm_name_csr;
15117 END IF;
15118 IF l_rl_csr%ISOPEN THEN
15119 CLOSE l_rl_csr;
15120 END IF;
15121 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
15122 l_api_name,
15123 G_PKG_NAME,
15124 'OKL_API.G_RET_STS_ERROR',
15125 x_msg_count,
15126 x_msg_data,
15127 '_PVT');
15128 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
15129 IF l_hdr_csr%ISOPEN THEN
15130 CLOSE l_hdr_csr;
15131 END IF;
15132 IF ib_csr%ISOPEN THEN
15133 CLOSE ib_csr;
15134 END IF;
15135 IF l_line_rec_csr%ISOPEN THEN
15136 CLOSE l_line_rec_csr;
15137 END IF;
15138 IF l_rl_csr1%ISOPEN THEN
15139 CLOSE l_rl_csr1;
15140 END IF;
15141 IF strm_name_csr%ISOPEN THEN
15142 CLOSE strm_name_csr;
15143 END IF;
15144 IF l_rl_csr%ISOPEN THEN
15145 CLOSE l_rl_csr;
15146 END IF;
15147 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
15148 l_api_name,
15149 G_PKG_NAME,
15150 'OKL_API.G_RET_STS_UNEXP_ERROR',
15151 x_msg_count,
15152 x_msg_data,
15153 '_PVT');
15154 WHEN OTHERS then
15155 IF l_hdr_csr%ISOPEN THEN
15156 CLOSE l_hdr_csr;
15157 END IF;
15158 IF ib_csr%ISOPEN THEN
15159 CLOSE ib_csr;
15160 END IF;
15161 IF l_line_rec_csr%ISOPEN THEN
15162 CLOSE l_line_rec_csr;
15163 END IF;
15164 IF l_rl_csr1%ISOPEN THEN
15165 CLOSE l_rl_csr1;
15166 END IF;
15167 IF strm_name_csr%ISOPEN THEN
15168 CLOSE strm_name_csr;
15169 END IF;
15170 IF l_rl_csr%ISOPEN THEN
15171 CLOSE l_rl_csr;
15172 END IF;
15173 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
15174 l_api_name,
15175 G_PKG_NAME,
15176 'OTHERS',
15177 x_msg_count,
15178 x_msg_data,
15179 '_PVT');
15180 END extract_params_loan_paydown;
15181
15182 PROCEDURE extract_params_ppd_rebook(
15183 p_api_version IN NUMBER,
15184 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
15185 p_chr_id IN VARCHAR2,
15186 x_return_status OUT NOCOPY VARCHAR2,
15187 x_msg_count OUT NOCOPY NUMBER,
15188 x_msg_data OUT NOCOPY VARCHAR2,
15189 x_csm_loan_header OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
15190 x_csm_loan_lines_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
15191 x_csm_loan_levels_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type,
15192 x_csm_one_off_fee_tbl OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
15193 x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
15194 x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
15195 x_csm_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type) AS
15196
15197 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_PPD_REBOOK';
15198 l_api_version CONSTANT NUMBER := 1;
15199 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
15200 l_level_type NUMBER;
15201 l_strm_name VARCHAR2(200);
15202 i BINARY_INTEGER := 0;
15203 j BINARY_INTEGER := 0;
15204 k BINARY_INTEGER := 0;
15205 l BINARY_INTEGER := 0;
15206 m BINARY_INTEGER := 0;
15207 idx BINARY_INTEGER := 0;
15208 l_basis_percent NUMBER;
15209 styid NUMBER;
15210 l_pricing_name VARCHAR2(40);
15211 l_salvage NUMBER;
15212 l_purchase_option VARCHAR2(256);
15213 l_deal_type VARCHAR2(256);
15214 l_purchase_option_amount NUMBER;
15215 l_msg_count Number;
15216 l_msg_data varchar2(2000);
15217 l_chr_id Number := TO_NUMBER(p_chr_id);
15218 l_cle_id Number;
15219 l_rgd_code Varchar2(30) := 'LAPSTH';
15220 l_rdf_code Varchar2(30) := 'LASTRM';
15221 l_rdf_name Varchar2(80) := 'xxx';
15222 l_id1 Varchar2(40);
15223 l_id2 Varchar2(200);
15224 l_name Varchar2(200);
15225 l_description Varchar2(2000);
15226 l_status Varchar2(1);
15227 l_start_date date;
15228 l_end_date date;
15229 l_org_id Number;
15230 l_inv_org_id Number;
15231 l_book_type_code Varchar2(15);
15232 l_select Varchar2(2000);
15233 l_msg_index_out Number;
15234 l_total_lending NUMBER;
15235
15236
15237 Cursor l_struct_csr( chrId NUMBER ) is
15238 select distinct(nvl(crl.RULE_INFORMATION5,-1)) structure
15239 from OKC_RULE_GROUPS_B crg,
15240 OKC_RULES_B crl
15241 where crl.rgp_id = crg.id
15242 and crg.RGD_CODE = 'LALEVL'
15243 and crl.RULE_INFORMATION_CATEGORY = 'LASLL'
15244 and crg.dnz_chr_id = chrId;
15245
15246
15247 l_line_rec l_line_rec_csr%ROWTYPE;
15248 l_lne_rec l_line_rec_csr%ROWTYPE;
15249 l_hdr_rec l_hdr_csr%ROWTYPE;
15250 l_rl_rec l_rl_csr%ROWTYPE;
15251 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
15252 l_rl_rec1 l_rl_csr1%ROWTYPE;
15253 l_tx_rec l_tx_csr%ROWTYPE;
15254 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
15255 l_strm_name_rec strm_name_csr%ROWTYPE;
15256 l_ib_rec ib_csr%ROWTYPE;
15257 l_struct_rec l_struct_csr%ROWTYPE;
15258 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
15259 l_csm_loan_header okl_create_streams_pvt.csm_loan_rec_type;
15260 l_csm_loan_levels_tbl okl_create_streams_pvt.csm_loan_line_tbl_type;
15261 l_csm_one_off_fee_tbl okl_create_streams_pub.csm_one_off_fee_tbl_type;
15262 l_csm_periodic_expenses_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
15263 l_csm_yields_tbl okl_create_streams_pub.csm_yields_tbl_type;
15264 l_csm_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
15265 l_req_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
15266 l_csm_line_details_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
15267 l_rents_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
15268 l_strm_type_id_tbl okl_strm_type_id_tbl_type;
15269 --p_deal_type okl_st_gen_tmpt_sets.deal_type%TYPE;
15270
15271 --mansrini : Code for VR build
15272 CURSOR get_day_conv_on_contrct
15273 IS
15274 SELECT
15275 --Added by srsreeni for bug6076113
15276 -- rate_params.days_in_a_year_code,
15277 -- DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
15278 DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
15279 rate_params.days_in_a_year_code
15280 --srsreeni bug6076113 ends
15281 FROM okl_k_rate_params rate_params
15282 WHERE khr_id = p_chr_id;
15283
15284 CURSOR get_day_conv_on_sgt
15285 IS
15286 SELECT DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
15287 gts.days_in_yr_code
15288 FROM
15289 okl_k_headers khr,
15290 okl_products_v pdt,
15291 okl_ae_tmpt_sets_v aes,
15292 OKL_ST_GEN_TMPT_SETS gts
15293 WHERE
15294 khr.pdt_id = pdt.id AND
15295 pdt.aes_id = aes.id AND
15296 aes.gts_id = gts.id AND
15297 khr.id = p_chr_id;
15298
15299 l_days_in_month_code OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
15300 l_days_in_yr_code OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
15301 l_number_periods_remaining okl_sif_fees.number_of_periods%TYPE;
15302 l_number_periods_completed okl_sif_fees.number_of_periods%TYPE;
15303 l_number_periods_completed_cpy okl_sif_fees.number_of_periods%TYPE;
15304 l_variable_rate okl_sif_fees.rate%TYPE;
15305 l_total_oec okl_k_lines_full_v.oec%TYPE;
15306 --Added by kthiruva for the VR build
15307 l_rent_sty_id strm_rec_type;
15308 l_prev_ppd NUMBER := 0;
15309
15310 --This Cursor fetches the Principal Paydown lines existing per asset line
15311 --on the contract
15312 CURSOR get_prev_ppd_csr(rgcode okc_rule_groups_b.rgd_code%TYPE,
15313 rlcat okc_rules_b.rule_information_category%TYPE,
15314 chrId NUMBER,
15315 cleId NUMBER )
15316 IS
15317 SELECT crl.id slh_id,
15318 crl.object1_id1,
15319 crl.rule_information1,
15320 crl.rule_information2,
15321 crl.rule_information3,
15322 crl.rule_information5,
15323 crl.rule_information6,
15324 crl.rule_information7,
15325 crl.rule_information8,
15326 crl.rule_information13,
15327 crl.rule_information10
15328 FROM okc_rule_groups_b crg,
15329 okc_rules_b crl,
15330 okl_strm_type_v sty
15331 WHERE crl.rgp_id = crg.id
15332 AND crg.rgd_code = rgcode
15333 AND crl.rule_information_category = rlcat
15334 AND crg.dnz_chr_id = chrId
15335 AND crg.cle_id = cleId
15336 AND crl.object1_id1 = sty.id
15337 AND sty.stream_type_purpose = 'UNSCHEDULED_PRINCIPAL_PAYMENT'
15338 ORDER BY crl.rule_information1;
15339
15340 get_prev_ppd_rec get_prev_ppd_csr%ROWTYPE;
15341
15342 --Added by kthiruva on 15-Jun-2006 for Bug 5261952
15343 --The base rate defined on the contract is captured when the payment type is Principal
15344 CURSOR get_base_rate_csr(p_chr_id IN NUMBER,
15345 p_date IN DATE)
15346 IS
15347 SELECT PARM.BASE_RATE
15348 FROM OKL_K_RATE_PARAMS parm
15349 WHERE PARM.KHR_ID = p_chr_id
15350 AND PARM.PARAMETER_TYPE_CODE = 'ACTUAL'
15351 AND p_date BETWEEN EFFECTIVE_FROM_DATE AND NVL(EFFECTIVE_TO_DATE,p_date);
15352
15353 l_base_rate NUMBER;
15354
15355 FUNCTION get_end_date(
15356 l_start_date IN DATE,
15357 p_frequency IN VARCHAR2,
15358 p_period IN NUMBER,
15359 ---- cklee/mvasudev,06-02-2005,Bug#4392051/okl.h 4437938
15360 p_start_day IN NUMBER DEFAULT NULL
15361 )
15362 RETURN DATE IS
15363 l_end_date date;
15364 factor number := 0;
15365 BEGIN
15366 if(p_frequency = 'M') then
15367 factor := 1;
15368 elsif(p_frequency = 'Q') then
15369 factor := 3;
15370 elsif(p_frequency = 'S') then
15371 factor := 6;
15372 elsif(p_frequency = 'A') then
15373 factor := 12;
15374 end if;
15375 l_end_date := Okl_Lla_Util_Pvt.calculate_end_date(p_start_date => l_start_date,
15376 p_months => factor * NVL(p_period,0),
15377 p_start_day => p_start_day);
15378
15379 return l_end_date;
15380 EXCEPTION
15381 WHEN OTHERS THEN
15382 RETURN null;
15383 END get_end_date;
15384
15385 BEGIN
15386 x_return_status := OKL_API.G_RET_STS_SUCCESS;
15387 -- Call start_activity to create savepoint, check compatibility
15388 -- and initialize message list
15389 x_return_status := OKL_API.START_ACTIVITY (
15390 l_api_name
15391 ,p_init_msg_list
15392 ,'_PVT'
15393 ,x_return_status);
15394 -- Check if activity started successfully
15395 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15396 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15397 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15398 RAISE OKL_API.G_EXCEPTION_ERROR;
15399 END IF;
15400
15401 OPEN l_hdr_pdt_csr(p_chr_id);
15402 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
15403 CLOSE l_hdr_pdt_csr;
15404
15405 --get day convention info : mansrini
15406 OPEN get_day_conv_on_contrct;
15407 FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
15408 CLOSE get_day_conv_on_contrct;
15409
15410 --Added by srsreeni for bug6076113
15411 -- IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
15412 IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
15413 --srsreeni bug6076113 ends
15414 THEN
15415 OPEN get_day_conv_on_sgt;
15416 FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
15417 CLOSE get_day_conv_on_sgt;
15418 END IF;
15419 -- Validate the payments
15420 validate_payments(p_api_version => p_api_version,
15421 p_init_msg_list => p_init_msg_list,
15422 x_return_status => x_return_status,
15423 x_msg_count => x_msg_count,
15424 x_msg_data => x_msg_data,
15425 p_khr_id => p_chr_id,
15426 p_paym_tbl => l_pay_tbl);
15427 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15428 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15429 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15430 RAISE OKL_API.G_EXCEPTION_ERROR;
15431 END IF;
15432 i := 0; j := 0; k := 0; l := 0; m := 0;
15433 /*
15434 OPEN l_hdr_pdt_csr(p_chr_id);
15435 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
15436 CLOSE l_hdr_pdt_csr;
15437 */
15438 -- Header infro
15439 OPEN l_hdr_csr(p_chr_id);
15440 FETCH l_hdr_csr into l_hdr_rec;
15441 IF l_hdr_csr%NOTFOUND THEN
15442 okl_api.set_message(p_app_name => G_APP_NAME,
15443 p_msg_name => G_LLA_NO_MATCHING_RECORD,
15444 p_token1 => G_COL_NAME_TOKEN,
15445 p_token1_value => 'Contract id');
15446 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15447 END IF;
15448 CLOSE l_hdr_csr;
15449 l_csm_loan_header.khr_id := p_chr_id;
15450 l_csm_loan_header.date_payments_commencement := l_hdr_rec.start_date;
15451 l_csm_loan_header.date_start := l_hdr_rec.start_date;
15452 l_csm_loan_header.pdt_id := l_hdr_rec.pid;
15453 l_deal_type := l_hdr_rec.deal_type;
15454 -- Fetching the location of the asset
15455 OPEN ib_csr(TO_NUMBER(p_chr_id));
15456 FETCH ib_csr into l_ib_rec;
15457 IF ib_csr%NOTFOUND THEN
15458 okl_api.set_message(p_app_name => G_APP_NAME,
15459 p_msg_name => G_LLA_NO_MATCHING_RECORD,
15460 p_token1 => G_COL_NAME_TOKEN,
15461 p_token1_value => 'Contract id');
15462 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15463 END IF;
15464 CLOSE ib_csr;
15465 l_csm_loan_header.country := l_ib_rec.country;
15466 --The orp code for the Principal Paydown process is used here.
15467 l_csm_loan_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_BOOKING;
15468 -- Callling the formual ccontract cap amount
15469 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
15470 --The Capital Reduction should not be removed from the Funding amount
15471 --Bug 4738011 - Start of Changes
15472 execute_formula(p_api_version => p_api_version,
15473 p_init_msg_list => p_init_msg_list,
15474 x_return_status => x_return_status,
15475 x_msg_count => x_msg_count,
15476 x_msg_data => x_msg_data,
15477 p_formula_name => 'CONTRACT_CAP_AMNT_LOAN',
15478 p_contract_id => p_chr_id,
15479 p_line_id => NULL,
15480 x_value => l_total_lending);
15481 --Bug 4738011 - End of Changes
15482 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15483 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15484 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15485 RAISE OKL_API.G_EXCEPTION_ERROR;
15486 END IF;
15487 l_csm_loan_header.total_lending := l_total_lending;
15488 l_csm_loan_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_LENDER;
15489
15490 --kthiruva : for PR proj
15491 --Fetch the total OEC for this contract so that it can be prorated for each asset in
15492 --the following loop
15493 OPEN total_oec_csr(p_chr_id);
15494 FETCH total_oec_csr INTO l_total_oec;
15495 CLOSE total_oec_csr;
15496
15497 -- asset infor
15498 FOR l_line_rec IN l_line_rec_csr ( p_chr_id , 'FREE_FORM1') LOOP
15499 i := i + 1;
15500 idx := 0;
15501 l_csm_loan_levels_tbl(i).kle_loan_id := l_line_rec.id;
15502 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
15503 --When the Down payment is not capitalised, the Down payment amount needs to be passed through the Down
15504 --payment tag in the Lending Loans tag of the Outbound XML.
15505 --Bug 4738011 - Start of Changes
15506 IF l_line_rec.capitalize_down_payment_yn = 'N' THEN
15507 l_csm_loan_levels_tbl(i).capitalize_down_payment_yn := l_line_rec.capitalize_down_payment_yn;
15508 l_csm_loan_levels_tbl(i).down_payment_amount := l_line_rec.capital_reduction;
15509 END IF;
15510 --Bug 4738011 - End of Changes
15511
15512 FOR l_rl_rec1 in l_rl_csr1 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
15513 --Added by kthiruva on 05-Dec-2005
15514 --Initialising l_first_batch for every asset line
15515 --Bug 4777531 - Start of Changes
15516 l_first_batch := 'N';
15517 --Bug 4777531 - End of Changes
15518
15519 l_level_type := l_rl_rec1.object1_id1;
15520
15521 OPEN strm_name_csr ( l_level_type );
15522 FETCH strm_name_csr into l_strm_name_rec;
15523 IF strm_name_csr%NOTFOUND THEN
15524 okl_api.set_message(p_app_name => G_APP_NAME,
15525 p_msg_name => G_LLA_NO_MATCHING_RECORD,
15526 p_token1 => G_COL_NAME_TOKEN,
15527 p_token1_value => 'Contract id');
15528 x_return_status := OKL_API.G_RET_STS_ERROR;
15529 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
15530 END IF;
15531 CLOSE strm_name_csr;
15532
15533 --l_strm_name := l_strm_name_rec.name;
15534 l_strm_name := l_strm_name_rec.stream_type_purpose;
15535 -- srsreeni - Bug#5699923 - Added - Start
15536 -- DONOT request SuperTrump to generate streams
15537 -- for TERMINATED lines
15538 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
15539 --srsreeni Bug6245602 Added DOWN_PAYMENT and ESTIMATED_PROPERTY_TAX
15540 IF( UPPER(TRIM(l_strm_name)) NOT IN ('RENT','PRINCIPAL_PAYMENT','DOWN_PAYMENT','ESTIMATED_PROPERTY_TAX') ) THEN
15541 --srsreeni Bug6245602 end
15542 --Added by srsreeni for bug5841892
15543 -- m := m + 1;
15544 -- l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
15545 --bug5841892 end of changes
15546 get_dependent_pricing_name
15547 (
15548 p_khr_id =>p_chr_id,
15549 p_sty_id =>l_level_type,
15550 x_return_status =>x_return_status,
15551 x_dependent_pricing_name =>l_pricing_name
15552 );
15553 --Added by srsreeni for bug5841892
15554 if l_pricing_name is not null then
15555 m := m + 1;
15556 l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
15557 l_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
15558
15559 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
15560 end if;
15561 --bug5841892 end of changes
15562 END IF;
15563 END IF; -- End of check for TERMINATED status
15564 -- srsreeni - Bug#5699923 - Added - End
15565 --idx := 0;
15566 IF( UPPER(TRIM(l_strm_name)) = 'RENT' ) THEN
15567 -- srsreeni - Bug#5699923 - Added - Start
15568 -- DONOT request SuperTrump to generate streams
15569 -- for TERMINATED lines
15570 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
15571 IF(g_rep_req_yn = 'Y') THEN
15572
15573 get_dependent_stream_types
15574 (
15575 p_khr_id =>p_chr_id,
15576 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
15577 p_primary_sty_id =>l_level_type,
15578 x_return_status => x_return_status,
15579 x_dependent_sty_id =>l_strm_type_id_tbl
15580 );
15581 IF x_return_status = 'E' THEN
15582 x_return_status := 'S';
15583 END IF;
15584
15585 ELSE
15586
15587 get_dependent_stream_types
15588 (
15589 p_khr_id =>p_chr_id,
15590 p_primary_sty_id =>l_level_type,
15591 x_return_status => x_return_status,
15592 x_dependent_sty_id =>l_strm_type_id_tbl
15593 );
15594 IF x_return_status = 'E' THEN
15595 x_return_status := 'S';
15596 END IF;
15597
15598 END IF;
15599
15600
15601 IF l_strm_type_id_tbl.COUNT > 0 THEN
15602 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
15603 m := m + 1;
15604
15605 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
15606 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
15607 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
15608 END LOOP;
15609 END IF;
15610 END IF; -- End of check for TERMINATED status
15611 -- srsreeni - Bug#5699923 - Added - End
15612
15613 j := j + 1;
15614 idx := idx + 1;
15615 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
15616 l_csm_line_details_tbl(j).description := 'Funding';
15617 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
15618 --The Capital Reduction should not be removed from the Funding amount
15619 --Bug 4738011 - Start of Changes
15620 execute_formula(p_api_version => p_api_version,
15621 p_init_msg_list => p_init_msg_list,
15622 x_return_status => x_return_status,
15623 x_msg_count => x_msg_count,
15624 x_msg_data => x_msg_data,
15625 p_formula_name => 'LINE_CAP_AMNT_LOAN',
15626 p_contract_id => p_chr_id,
15627 p_line_id => l_line_rec.id,
15628 x_value => l_total_lending);
15629 --Bug 4738011 - End of Changes
15630 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15631 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
15632 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15633 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
15634 END IF;
15635 --Initialising l_ppd_count for every asset and deleting the existing l_ppd_Tbl
15636 l_ppd_count := 0;
15637 l_ppd_tbl.delete;
15638 --Modified by kthiruva on 26-Sep-2005
15639 --All previous PPDs defined on the contract are fetched and added to a PL/SQL table
15640 FOR get_prev_ppd_rec IN get_prev_ppd_csr('LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id) LOOP
15641 FOR l_rl_rec in l_rl_csr ( get_prev_ppd_rec.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
15642 IF (l_rl_rec.rule_information7 IS NOT NULL OR
15643 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
15644 (l_rl_rec.rule_information8 IS NOT NULL OR
15645 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
15646 l_ppd_tbl(l_ppd_count).paydown_date := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
15647 l_ppd_tbl(l_ppd_count).paydown_amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION8,'0'));
15648 l_ppd_tbl(l_ppd_count).curr_paydown := 'N';
15649 l_ppd_count := l_ppd_count + 1;
15650 END IF;
15651 END LOOP;
15652 END LOOP;
15653
15654 --Populating the diff_to_next column for all records in the l_ppd_tbl
15655 --The diff_to_next stores the number of days between a paydown and its subsequent paydown
15656 --If there is no subsequent paydown then the diff_to_next column stores a value 0
15657 FOR k in l_ppd_tbl.FIRST.. l_ppd_tbl.LAST LOOP
15658 IF l_ppd_tbl.COUNT = 1 THEN
15659 l_ppd_tbl(k).diff_to_next := 0;
15660 ELSE
15661 IF (k = l_ppd_tbl.LAST) THEN
15662 l_ppd_tbl(k).diff_to_next := 0;
15663 ELSE
15664 l_ppd_tbl(k).diff_to_next := l_ppd_tbl(k+1).paydown_date - l_ppd_tbl(k).paydown_date;
15665 END IF;
15666 END IF;
15667 END LOOP;
15668
15669 l_csm_line_details_tbl(j).amount := l_total_lending;
15670 --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
15671 --Bug 4576794 - Start of Changes
15672 --When a funding date is specified on the asset,it needs to be used as the date_start
15673 --When funding date is not specified, we use the contract start date
15674 l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
15675 --Bug 4576794 - End of Changes
15676 l_csm_line_details_tbl(j).level_index_number := idx;
15677 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
15678 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
15679 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
15680
15681 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
15682 --If the Down Payment is capitalised then , a new funding line with the opposite sign
15683 --needs to be added
15684 --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
15685 --Bug 4738011 - Start of Changes
15686 IF l_line_rec.capitalize_down_payment_yn = 'Y' AND l_line_rec.capital_reduction IS NOT NULL THEN
15687 j := j + 1;
15688 idx := idx + 1;
15689 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
15690 l_csm_line_details_tbl(j).description := 'Funding';
15691 l_csm_line_details_tbl(j).amount := l_line_rec.capital_reduction * (-1);
15692 l_csm_line_details_tbl(j).date_start := l_hdr_rec.start_date;
15693 l_csm_line_details_tbl(j).level_index_number := idx;
15694 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
15695 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
15696 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
15697 END IF;
15698 --Bug 4738011 - End of Changes
15699
15700 FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
15701 -- Start of Bug#2757289 modification
15702
15703 l_number_periods_remaining :=0;
15704 l_number_periods_completed := 0;
15705 l_number_periods_completed_cpy :=0;
15706 --If the payment is a stub
15707 IF (l_rl_rec.rule_information7 IS NOT NULL OR
15708 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
15709 (l_rl_rec.rule_information8 IS NOT NULL OR
15710 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
15711
15712 FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
15713 --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
15714 --Modified by kthiruva on 13-Feb-2006
15715 --Bug 4964710 - Start of Changes
15716 --============================================================================================
15717 --Step 1 : If payment is in Arrears created the PPD stub First
15718 --============================================================================================
15719 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
15720 AND l_ppd_tbl(k).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
15721 AND (l_rl_rec.RULE_INFORMATION10 IS NOT NULL) THEN
15722 j := j + 1;
15723 idx := idx + 1;
15724 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
15725 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
15726 l_csm_line_details_tbl(j).period := g_stub_rec.period;
15727 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
15728 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
15729 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
15730 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
15731 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
15732 l_csm_line_details_tbl(j).level_index_number := idx;
15733 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
15734 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
15735 --This rate column is relevant for rent payments only in the rebook scenarios
15736 --after a reamort
15737 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
15738
15739 --When the cashflow step is a payment line, both amount and rate should not be locked
15740 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
15741 -- we are solving for rate.
15742 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
15743 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
15744 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
15745 ELSE
15746 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
15747 END IF;
15748
15749 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
15750 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
15751 END IF;
15752
15753 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
15754 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
15755 ELSE
15756 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
15757 END IF;
15758
15759 END IF;
15760 END LOOP;
15761 --=====================================================================
15762 --Step 2 : The payment like for the existing stub is being created here
15763 --=====================================================================
15764 --The payment line for the existing stub is created here
15765 j := j + 1;
15766 idx := idx + 1;
15767 l_csm_line_details_tbl(j).level_index_number := idx;
15768 l_csm_line_details_tbl(j).amount := TO_NUMBER(l_rl_rec.rule_information8);
15769 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
15770 THEN
15771 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
15772 ELSE
15773 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
15774 END IF;
15775 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
15776 l_csm_line_details_tbl(j).period := g_stub_rec.period;
15777 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
15778 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
15779 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
15780 l_csm_line_details_tbl(j).description := l_strm_name;
15781 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
15782 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
15783 --This rate column is relevant for rent payments only in the rebook scenarios
15784 --after a reamort
15785 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
15786
15787 --When the cashflow step is a payment line, both amount and rate should not be locked
15788 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
15789 -- we are solving for rate.
15790 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
15791
15792 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
15793 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
15794 ELSE
15795 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
15796 END IF;
15797
15798 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
15799 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
15800 END IF;
15801
15802 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
15803 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
15804 ELSE
15805 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
15806 END IF;
15807 --=======================================================================================
15808 --Step 3 : IF the Payment is Advance then the PPD stub is created after the existing stub
15809 --=======================================================================================
15810 FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
15811 --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
15812 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
15813 AND l_ppd_tbl(k).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
15814 AND (l_rl_rec.RULE_INFORMATION10 IS NULL) THEN
15815 j := j + 1;
15816 idx := idx + 1;
15817 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
15818 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
15819 l_csm_line_details_tbl(j).period := g_stub_rec.period;
15820 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
15821 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
15822 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
15823 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
15824 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
15825 l_csm_line_details_tbl(j).level_index_number := idx;
15826 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
15827 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
15828 --This rate column is relevant for rent payments only in the rebook scenarios
15829 --after a reamort
15830 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
15831
15832 --When the cashflow step is a payment line, both amount and rate should not be locked
15833 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
15834 -- we are solving for rate.
15835 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
15836 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
15837 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
15838 ELSE
15839 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
15840 END IF;
15841
15842 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
15843 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
15844 END IF;
15845
15846 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
15847 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
15848 ELSE
15849 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
15850 END IF;
15851
15852 END IF;
15853 END LOOP;
15854 --Bug 4964710 - End of Changes
15855 -- End of Bug#2757289 modification
15856 /*mansrini Handle PPD for non-stub payments here*/
15857 ELSIF (l_rl_rec.rule_information7 IS NULL OR
15858 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
15859 (l_rl_rec.rule_information8 IS NULL OR
15860 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
15861
15862 --When there is no PPD in the range of the periodic payment, the payment is retained as is
15863 IF (l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
15864 OR l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3))
15865 AND (l_ppd_tbl(l_ppd_tbl.LAST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
15866 OR l_ppd_tbl(l_ppd_tbl.LAST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3)) THEN /*chk date cols*/
15867
15868 j := j + 1;
15869 idx := idx + 1;
15870 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
15871 l_csm_line_details_tbl(j).description := l_strm_name;
15872 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
15873 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
15874 l_csm_line_details_tbl(j).level_index_number := idx;
15875 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
15876 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
15877
15878 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
15879 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
15880 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
15881 --This rate column is relevant for rent payments only in the rebook scenarios
15882 --after a reamort
15883 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
15884
15885 --When the cashflow step is a payment line, both amount and rate should not be locked
15886 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
15887 -- we are solving for rate.
15888 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
15889
15890 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
15891 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
15892 END IF;
15893
15894 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
15895 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
15896 ELSE
15897 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
15898 END IF;
15899
15900 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
15901 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
15902 ELSE
15903 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
15904 END IF;
15905
15906 ELSE
15907
15908 FOR k in l_ppd_tbl.FIRST .. l_ppd_tbl.LAST LOOP
15909 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
15910 AND l_ppd_tbl(k).paydown_date < get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) THEN /*chk date cols*/
15911 --=============================================================
15912 --Step 1 : Obtaining the number of periods prior to the paydown
15913 --=============================================================
15914 l_number_periods_remaining := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term)) ;
15915 --Modified by kthiruva on 12-Dec-2005
15916 --Instead of round, the function trunc needs to be used as we want the number
15917 --of periods elapsed completely
15918 --Bug 4878162 - Start of Changes
15919 l_number_periods_completed := trunc (months_between(l_ppd_tbl(k).paydown_date, FND_DATE.canonical_to_date(l_rl_rec.rule_information2)) / l_rl_rec.decoded_object1_id1,0);
15920 --Bug 4878162 - End of Changes
15921
15922 IF l_number_periods_completed = 0 THEN
15923 l_number_periods_completed_cpy := 0;
15924 l_number_periods_remaining := l_number_periods_remaining - 1;
15925 ELSE
15926 l_number_periods_completed_cpy := l_number_periods_completed;
15927 l_number_periods_remaining := l_number_periods_remaining - l_number_periods_completed - 1;
15928 END IF;
15929 --======================================================================================
15930 --Step 2 : Creating the first payment line with the periods preceeding the first paydown
15931 -- yet to be processed
15932 --=======================================================================================
15933
15934 IF (l_first_batch = 'N') AND (NVL(l_number_periods_completed,0) > 0 OR l_csm_line_details_tbl(j).date_start > l_ppd_tbl(k).paydown_date) THEN /*Periods that have been complete before paydown*/
15935 j := j + 1;
15936 idx := idx + 1;
15937 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
15938 l_csm_line_details_tbl(j).description := l_strm_name;
15939 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
15940 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
15941 l_csm_line_details_tbl(j).level_index_number := idx;
15942 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
15943
15944 IF l_number_periods_completed_cpy = 0 THEN
15945 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
15946 ELSE
15947 l_csm_line_details_tbl(j).number_of_periods := l_number_periods_completed_cpy;
15948 END IF;
15949
15950 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
15951 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
15952 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
15953 --This rate column is relevant for rent payments only in the rebook scenarios
15954 --after a reamort
15955 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
15956
15957 --When the cashflow step is a payment line, both amount and rate should not be locked
15958 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
15959 -- we are solving for rate.
15960 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
15961
15962 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
15963 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
15964 END IF;
15965
15966 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
15967 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
15968 ELSE
15969 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
15970 END IF;
15971
15972 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
15973 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
15974 ELSE
15975 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
15976 END IF;
15977 l_first_batch := 'Y';
15978 END IF;
15979 --=====================================================================
15980 --Step 3 : If the payment is in Advance Create the Adjusting stub first
15981 --=====================================================================
15982 --If the payment is in Advance, the Adjusting stub needs to be created
15983 --first followed up the PPD Stub
15984 --For Payment in Arrears, the PPD stub is creted first followed by the
15985 --Adjusting Stub
15986 --Added by kthiruva on 10-Feb-2006
15987 --Bug 4964710 - Start of Changes
15988 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
15989 THEN
15990 --Calculating the days between the Paydown date and the due date of the next periodic payment
15991 l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
15992 l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
15993
15994 --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
15995 --line for remaining payments are created.
15996 --If only one PPD is within a period then an adjusting stub is created for the rest
15997 --of the period and one payment line for the remaining periods until the next paydown date
15998 IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
15999 j := j + 1;
16000 idx := idx + 1;
16001 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
16002 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
16003 l_csm_line_details_tbl(j).period := g_stub_rec.period;
16004 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16005 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16006 l_csm_line_details_tbl(j).description := l_strm_name;
16007 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16008 --The adjusting stub would end one day before the PPD date
16009 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
16010 l_csm_line_details_tbl(j).level_index_number := idx;
16011 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16012 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16013 --This rate column is relevant for rent payments only in the rebook scenarios
16014 --after a reamort
16015 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
16016
16017 --When the cashflow step is a payment line, both amount and rate should not be locked
16018 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16019 -- we are solving for rate.
16020 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
16021
16022 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16023 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16024 END IF;
16025
16026 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16027 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16028 ELSE
16029 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16030 END IF;
16031
16032 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16033 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16034 ELSE
16035 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16036 END IF;
16037 END IF;
16038 END IF;
16039 --Bug 4964710 - End of Changes
16040
16041 --=================================
16042 --Step 4 : Create the paydown stub
16043 --=================================
16044
16045 /*PPD stub*/
16046 j := j + 1;
16047 idx := idx + 1;
16048 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16049 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
16050 l_csm_line_details_tbl(j).period := g_stub_rec.period;
16051 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16052 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16053 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
16054 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
16055 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
16056 THEN
16057 l_csm_line_details_tbl(j).date_start := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
16058 ELSE
16059 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
16060 END IF;
16061 l_csm_line_details_tbl(j).level_index_number := idx;
16062 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16063 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16064 --This rate column is relevant for rent payments only in the rebook scenarios
16065 --after a reamort
16066 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
16067
16068 --When the cashflow step is a payment line, both amount and rate should not be locked
16069 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16070 -- we are solving for rate.
16071 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
16072
16073 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16074 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16075 END IF;
16076
16077 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16078 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16079 ELSE
16080 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16081 END IF;
16082
16083 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16084 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16085 ELSE
16086 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16087 END IF;
16088 --===============================================================================
16089 --Step 5: Check whether Ajusting stub needs to be created and create if necessary
16090 --================================================================================
16091 --Added by kthiruva on 10-Feb-2006
16092 --Bug 4964710 - Start of Changes
16093 IF (l_rl_rec.RULE_INFORMATION10 IS NOT NULL)
16094 THEN
16095 --Calculating the days between the Paydown date and the due date of the next periodic payment
16096 l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
16097 l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
16098
16099 --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
16100 --line for remaining payments are created.
16101 --If only one PPD is within a period then an adjusting stub is created for the rest
16102 --of the period and one payment line for the remaining periods until the next paydown date
16103 IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
16104 /*Adjusting stub*/
16105 j := j + 1;
16106 idx := idx + 1;
16107 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
16108 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
16109 l_csm_line_details_tbl(j).period := g_stub_rec.period;
16110 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16111 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16112 l_csm_line_details_tbl(j).description := l_strm_name;
16113 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16114 l_csm_line_details_tbl(j).date_start := l_adjusting_stub_date;
16115 l_csm_line_details_tbl(j).level_index_number := idx;
16116 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16117 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16118 --This rate column is relevant for rent payments only in the rebook scenarios
16119 --after a reamort
16120 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
16121
16122 --When the cashflow step is a payment line, both amount and rate should not be locked
16123 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16124 -- we are solving for rate.
16125 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
16126
16127 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16128 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16129 END IF;
16130
16131 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16132 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16133 ELSE
16134 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16135 END IF;
16136
16137 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16138 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16139 ELSE
16140 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16141 END IF;
16142 END IF;
16143 END IF;
16144 --Bug 4964710 - Start of Changes
16145 --===================================================================================
16146 --Step 6 : Check whether a payment line for the remaining payments needs to be created
16147 --===================================================================================
16148
16149 --The periods between the end date of the adjusting stub and the next PPD is calculated
16150 --If number of periods > 0, then a payment line for that many periods needs to be created.
16151 IF k = l_ppd_tbl.LAST THEN
16152 l_period_end_date := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3);
16153 ELSE
16154 l_period_end_date := l_ppd_tbl(k+1).paydown_date;
16155 END IF;
16156 --Modified by kthiruva on 12-Dec-2005
16157 --Use round here
16158 --Bug 4878162 - Start of Changes
16159 l_periods_after_ppd := round (months_between(l_period_end_date,l_csm_line_details_tbl(j).date_start ) / l_rl_rec.decoded_object1_id1,0);
16160 --Bug 4878162 - End of Changes
16161
16162 --Create a payment line only if the number of periods till the next paydown is greater than 0
16163 IF (l_periods_after_ppd > 0) THEN
16164 /*Remaining amts*/
16165 j := j + 1;
16166 idx := idx + 1;
16167 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
16168 l_csm_line_details_tbl(j).number_of_periods := l_periods_after_ppd;
16169 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
16170 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16171 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16172 l_csm_line_details_tbl(j).description := l_strm_name;
16173 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16174 l_csm_line_details_tbl(j).level_index_number := idx;
16175 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16176 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16177 --This rate column is relevant for rent payments only in the rebook scenarios
16178 --after a reamort
16179 l_csm_line_details_tbl(j).rate := l_rl_rec.rule_information13;
16180
16181 l_csm_line_details_tbl(j).date_start := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) ;
16182 --When the cashflow step is a payment line, both amount and rate should not be locked
16183 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16184 -- we are solving for rate.
16185 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
16186
16187 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16188 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16189 END IF;
16190
16191 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16192 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16193 ELSE
16194 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16195 END IF;
16196
16197 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16198 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16199 ELSE
16200 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16201 END IF;
16202 END IF;--End of condition l_periods_after_ppd >0
16203 END IF;--The condition check for the date of every PPD in the ppd_tbl
16204 END LOOP;--loop for l_ppd_tbl
16205 END IF;--The condition checking if there is any PPD inside the date range of the periodic payment
16206 END IF;--The condition checking for Stub or periodic payment
16207 END LOOP;
16208 --Added by kthiruva for VR Build
16209 --When the Payment Type on the loan contract is PRINCIPAL.
16210 ELSIF( UPPER(TRIM(l_strm_name)) = 'PRINCIPAL_PAYMENT' ) THEN
16211 -- srsreeni - Bug#5699923 - Added - Start
16212 -- DONOT request SuperTrump to generate streams
16213 -- for TERMINATED lines
16214 IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
16215 IF(g_rep_req_yn = 'Y') THEN
16216
16217 --Added by kthriuva for VR build
16218 --For payment of type principal, we need to request the dependents
16219 --on Rent. Hence obtaining the stream type id of Rent
16220 get_primary_no_prc_stream_type
16221 (
16222 p_khr_id =>p_chr_id,
16223 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
16224 p_primary_sty_purpose =>'RENT',
16225 x_return_status => x_return_status,
16226 x_primary_sty_id => l_rent_sty_id
16227 );
16228 --kthriuva - End of Changes for VR build
16229
16230 get_dependent_stream_types
16231 (
16232 p_khr_id =>p_chr_id,
16233 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
16234 p_primary_sty_id =>l_rent_sty_id.id,
16235 x_return_status => x_return_status,
16236 x_dependent_sty_id =>l_strm_type_id_tbl
16237 );
16238 IF x_return_status = 'E' THEN
16239 x_return_status := 'S';
16240 END IF;
16241
16242 ELSE
16243 --Added by kthriuva for VR build
16244 --For payment of type principal, we need to request the dependents
16245 --on Rent. Hence obtaining the stream type id of Rent
16246 get_primary_no_prc_stream_type
16247 (
16248 p_khr_id =>p_chr_id,
16249 p_pdt_id =>l_pdt_id_rec.pid,
16250 p_primary_sty_purpose =>'RENT',
16251 x_return_status => x_return_status,
16252 x_primary_sty_id => l_rent_sty_id
16253 );
16254
16255 --kthriuva - End of Changes for VR build
16256 get_dependent_stream_types
16257 (
16258 p_khr_id =>p_chr_id,
16259 p_primary_sty_id =>l_rent_sty_id.id,
16260 x_return_status => x_return_status,
16261 x_dependent_sty_id =>l_strm_type_id_tbl
16262 );
16263 IF x_return_status = 'E' THEN
16264 x_return_status := 'S';
16265 END IF;
16266
16267 END IF;
16268
16269
16270 IF l_strm_type_id_tbl.COUNT > 0 THEN
16271 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
16272 m := m + 1;
16273
16274 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
16275 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
16276 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
16277 END LOOP;
16278 END IF;
16279 END IF; -- End of check for TERMINATED status
16280 -- srsreeni - Bug#5699923 - Added - End
16281 --Fetching the base rate
16282 OPEN get_base_rate_csr(p_chr_id => p_chr_id,
16283 p_date => l_hdr_rec.start_date);
16284 FETCH get_base_rate_csr INTO l_base_rate;
16285 IF get_base_rate_csr%NOTFOUND THEN
16286 Okl_Api.SET_MESSAGE(p_app_name => g_app_name,
16287 p_msg_name => 'OKL_LLAP_BASE_RATE_NOT_DEF');
16288 RAISE Okl_Api.G_EXCEPTION_ERROR;
16289 END IF;
16290 CLOSE get_base_rate_csr;
16291
16292 j := j + 1;
16293 idx := idx + 1;
16294 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16295 l_csm_line_details_tbl(j).description := 'Funding';
16296 --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
16297 --The Capital Reduction should not be removed from the Funding amount
16298 --Bug 4738011 - Start of Changes
16299 execute_formula(p_api_version => p_api_version,
16300 p_init_msg_list => p_init_msg_list,
16301 x_return_status => x_return_status,
16302 x_msg_count => x_msg_count,
16303 x_msg_data => x_msg_data,
16304 p_formula_name => 'LINE_CAP_AMNT_LOAN',
16305 p_contract_id => p_chr_id,
16306 p_line_id => l_line_rec.id,
16307 x_value => l_total_lending);
16308 --Bug 4738011 - End of Changes
16309 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16310 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
16311 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16312 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
16313 END IF;
16314 --Initialising l_ppd_count for every asset and deleting the existing l_ppd_Tbl
16315 l_ppd_count := 0;
16316 l_ppd_tbl.delete;
16317 --Added by kthiruva on 19-Sep-2005
16318 --All previous PPDs defined on the contract are fetched and added to a PL/SQL table
16319 FOR get_prev_ppd_rec IN get_prev_ppd_csr('LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id) LOOP
16320 FOR l_rl_rec in l_rl_csr ( get_prev_ppd_rec.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
16321 IF (l_rl_rec.rule_information7 IS NOT NULL OR
16322 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
16323 (l_rl_rec.rule_information8 IS NOT NULL OR
16324 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
16325 l_ppd_tbl(l_ppd_count).paydown_date := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
16326 l_ppd_tbl(l_ppd_count).paydown_amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION8,'0'));
16327 l_ppd_tbl(l_ppd_count).curr_paydown := 'N';
16328 l_ppd_count := l_ppd_count + 1;
16329 END IF;
16330 END LOOP;
16331 END LOOP;
16332
16333 --Populating the diff_to_next column for all records in the l_ppd_tbl
16334 --The diff_to_next stores the number of days between a paydown and its subsequent paydown
16335 --If there is no subsequent paydown then the diff_to_next column stores a value 0
16336 FOR k in l_ppd_tbl.FIRST.. l_ppd_tbl.LAST LOOP
16337 IF l_ppd_tbl.COUNT = 1 THEN
16338 l_ppd_tbl(k).diff_to_next := 0;
16339 ELSE
16340 IF (k = l_ppd_tbl.LAST) THEN
16341 l_ppd_tbl(k).diff_to_next := 0;
16342 ELSE
16343 l_ppd_tbl(k).diff_to_next := l_ppd_tbl(k+1).paydown_date - l_ppd_tbl(k).paydown_date;
16344 END IF;
16345 END IF;
16346 END LOOP;
16347
16348 l_csm_line_details_tbl(j).amount := l_total_lending;
16349 --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
16350 --Bug 4576794 - Start of Changes
16351 --When a funding date is specified on the asset,it needs to be used as the date_start
16352 --When funding date is not specified, we use the contract start date
16353 l_csm_line_details_tbl(j).date_start := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
16354 --Bug 4576794 - End of Changes
16355 l_csm_line_details_tbl(j).level_index_number := idx;
16356 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
16357 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16358 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16359
16360 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
16361 --If the Down Payment is capitalised then , a new funding line with the opposite sign
16362 --needs to be added
16363 --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
16364 --Bug 4738011 - Start of Changes
16365 IF l_line_rec.capitalize_down_payment_yn = 'Y' AND l_line_rec.capital_reduction IS NOT NULL THEN
16366 j := j + 1;
16367 idx := idx + 1;
16368 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16369 l_csm_line_details_tbl(j).description := 'Funding';
16370 l_csm_line_details_tbl(j).amount := l_line_rec.capital_reduction * (-1);
16371 l_csm_line_details_tbl(j).date_start := l_hdr_rec.start_date;
16372 l_csm_line_details_tbl(j).level_index_number := idx;
16373 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
16374 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16375 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16376 END IF;
16377 --Bug 4738011 - End of Changes
16378
16379 FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
16380 -- Start of Bug#2757289 modification
16381
16382 l_number_periods_remaining :=0;
16383 l_number_periods_completed := 0;
16384 l_number_periods_completed_cpy :=0;
16385 --If payment is a stub
16386 IF (l_rl_rec.rule_information7 IS NOT NULL OR
16387 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
16388 (l_rl_rec.rule_information8 IS NOT NULL OR
16389 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
16390 FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
16391 --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
16392 --Modified by kthiruva on 13-Feb-2006
16393 --Bug 4964710 - Start of Changes
16394 --============================================================================================
16395 --Step 1 : If payment is in Arrears created the PPD stub First
16396 --============================================================================================
16397 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
16398 AND l_ppd_tbl(k).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
16399 AND (l_rl_rec.RULE_INFORMATION10 IS NOT NULL) THEN
16400 j := j + 1;
16401 idx := idx + 1;
16402 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16403 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
16404 l_csm_line_details_tbl(j).period := g_stub_rec.period;
16405 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16406 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16407 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
16408 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
16409 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
16410 l_csm_line_details_tbl(j).level_index_number := idx;
16411 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16412 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16413 --When the payment type is Principal, the Base Rate specified in the contract needs to be
16414 --captured and passed. This rate is used in calculation of the Interest Payment Streams
16415 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16416 --l_base_Rate needs to be used.
16417 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
16418
16419 --When the cashflow step is a payment line, both amount and rate should not be locked
16420 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16421 -- we are solving for rate.
16422 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
16423 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16424 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16425 ELSE
16426 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16427 END IF;
16428
16429 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16430 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16431 END IF;
16432
16433 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16434 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16435 ELSE
16436 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16437 END IF;
16438
16439 END IF;
16440 END LOOP;
16441 --=====================================================================
16442 --Step 2 : The payment like for the existing stub is being created here
16443 --=====================================================================
16444 --The payment line for the existing stub is created here
16445 j := j + 1;
16446 idx := idx + 1;
16447 l_csm_line_details_tbl(j).level_index_number := idx;
16448 l_csm_line_details_tbl(j).amount := TO_NUMBER(l_rl_rec.rule_information8);
16449 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
16450 THEN
16451 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
16452 ELSE
16453 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
16454 END IF;
16455 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
16456 l_csm_line_details_tbl(j).period := g_stub_rec.period;
16457 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16458 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16459 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16460 l_csm_line_details_tbl(j).description := l_strm_name;
16461 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16462 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16463 --When the payment type is Principal, the Base Rate specified in the contract needs to be
16464 --captured and passed. This rate is used in calculation of the Interest Payment Streams
16465 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16466 --l_base_Rate needs to be used.
16467 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
16468
16469 --When the cashflow step is a payment line, both amount and rate should not be locked
16470 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16471 -- we are solving for rate.
16472 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
16473
16474 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16475 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16476 ELSE
16477 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16478 END IF;
16479
16480 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16481 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16482 END IF;
16483
16484 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16485 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16486 ELSE
16487 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16488 END IF;
16489 --=======================================================================================
16490 --Step 3 : IF the Payment is Advance then the PPD stub is created after the existing stub
16491 --=======================================================================================
16492 FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
16493 --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
16494 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
16495 AND l_ppd_tbl(k).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
16496 AND (l_rl_rec.RULE_INFORMATION10 IS NULL) THEN
16497 j := j + 1;
16498 idx := idx + 1;
16499 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16500 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
16501 l_csm_line_details_tbl(j).period := g_stub_rec.period;
16502 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16503 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16504 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
16505 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
16506 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
16507 l_csm_line_details_tbl(j).level_index_number := idx;
16508 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16509 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16510 --When the payment type is Principal, the Base Rate specified in the contract needs to be
16511 --captured and passed. This rate is used in calculation of the Interest Payment Streams
16512 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16513 --l_base_Rate needs to be used.
16514 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
16515
16516 --When the cashflow step is a payment line, both amount and rate should not be locked
16517 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16518 -- we are solving for rate.
16519 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
16520 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16521 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16522 ELSE
16523 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16524 END IF;
16525
16526 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16527 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16528 END IF;
16529
16530 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16531 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16532 ELSE
16533 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16534 END IF;
16535
16536 END IF;
16537 END LOOP;
16538 --Bug 4964710 - End of Changes
16539 -- End of Bug#2757289 modification
16540 /*mansrini Handle PPD for non-stub payments here*/
16541 ELSIF (l_rl_rec.rule_information7 IS NULL OR
16542 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
16543 (l_rl_rec.rule_information8 IS NULL OR
16544 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
16545
16546 --When there is no PPD in the range of the periodic payment, the payment is retained as is
16547 IF (l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
16548 OR l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3))
16549 AND (l_ppd_tbl(l_ppd_tbl.LAST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
16550 OR l_ppd_tbl(l_ppd_tbl.LAST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3)) THEN /*chk date cols*/
16551
16552 j := j + 1;
16553 idx := idx + 1;
16554 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16555 l_csm_line_details_tbl(j).description := l_strm_name;
16556 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16557 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
16558 l_csm_line_details_tbl(j).level_index_number := idx;
16559 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16560 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
16561
16562 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
16563 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16564 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16565 --When the payment type is Principal, the Base Rate specified in the contract needs to be
16566 --captured and passed. This rate is used in calculation of the Interest Payment Streams
16567 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16568 --l_base_Rate needs to be used.
16569 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
16570
16571 --When the cashflow step is a payment line, both amount and rate should not be locked
16572 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16573 -- we are solving for rate.
16574 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
16575
16576 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16577 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16578 END IF;
16579
16580 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16581 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16582 ELSE
16583 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16584 END IF;
16585
16586 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16587 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16588 ELSE
16589 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16590 END IF;
16591
16592 ELSE
16593
16594 FOR k in l_ppd_tbl.FIRST .. l_ppd_tbl.LAST LOOP
16595 IF l_ppd_tbl(k).paydown_date >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
16596 AND l_ppd_tbl(k).paydown_date < get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) THEN
16597 --=============================================================
16598 --Step 1 : Obtaining the number of periods prior to the paydown
16599 --=============================================================
16600 l_number_periods_remaining := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term)) ;
16601 --Modified by kthiruva on 12-Dec-2005
16602 --Use trunc instead of round as we need the number of periods elapsed completely
16603 --Bug 4878162 - Start of Changes
16604 l_number_periods_completed := trunc (months_between(l_ppd_tbl(k).paydown_date, FND_DATE.canonical_to_date(l_rl_rec.rule_information2)) / l_rl_rec.decoded_object1_id1,0);
16605 --Bug 4878162 - End of Changes
16606
16607
16608 IF l_number_periods_completed = 0 THEN
16609 l_number_periods_completed_cpy := 0;
16610 l_number_periods_remaining := l_number_periods_remaining - 1;
16611 ELSE
16612 l_number_periods_completed_cpy := l_number_periods_completed;
16613 l_number_periods_remaining := l_number_periods_remaining - l_number_periods_completed - 1;
16614 END IF;
16615 --======================================================================================
16616 --Step 2 : Creating the first payment line with the periods preceeding the first paydown
16617 -- yet to be processed
16618 --=======================================================================================
16619
16620 IF (l_first_batch = 'N') AND (NVL(l_number_periods_completed,0) > 0 OR l_csm_line_details_tbl(j).date_start > l_ppd_tbl(k).paydown_date) THEN /*Periods that have been complete before paydown*/
16621 j := j + 1;
16622 idx := idx + 1;
16623 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16624 l_csm_line_details_tbl(j).description := l_strm_name;
16625 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16626 l_csm_line_details_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
16627 l_csm_line_details_tbl(j).level_index_number := idx;
16628 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16629
16630 IF l_number_periods_completed_cpy = 0 THEN
16631 l_csm_line_details_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
16632 ELSE
16633 l_csm_line_details_tbl(j).number_of_periods := l_number_periods_completed_cpy;
16634 END IF;
16635
16636 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
16637 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16638 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16639 --When the payment type is Principal, the Base Rate specified in the contract needs to be
16640 --captured and passed. This rate is used in calculation of the Interest Payment Streams
16641 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16642 --l_base_Rate needs to be used.
16643 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
16644
16645 --When the cashflow step is a payment line, both amount and rate should not be locked
16646 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16647 -- we are solving for rate.
16648 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
16649
16650 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16651 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16652 END IF;
16653
16654 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16655 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16656 ELSE
16657 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16658 END IF;
16659
16660 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16661 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16662 ELSE
16663 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16664 END IF;
16665 l_first_batch := 'Y';
16666 END IF;
16667 --=====================================================================
16668 --Step 3 : If the payment is in Advance Create the Adjusting stub first
16669 --=====================================================================
16670 --If the payment is in Advance, the Adjusting stub needs to be created
16671 --first followed up the PPD Stub
16672 --For Payment in Arrears, the PPD stub is creted first followed by the
16673 --Adjusting Stub
16674 --Added by kthiruva on 10-Feb-2006
16675 --Bug 4964710 - Start of Changes
16676 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
16677 THEN
16678 --Calculating the days between the Paydown date and the due date of the next periodic payment
16679 l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
16680 l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
16681
16682 --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
16683 --line for remaining payments are created.
16684 --If only one PPD is within a period then an adjusting stub is created for the rest
16685 --of the period and one payment line for the remaining periods until the next paydown date
16686 IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
16687 j := j + 1;
16688 idx := idx + 1;
16689 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
16690 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
16691 l_csm_line_details_tbl(j).period := g_stub_rec.period;
16692 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16693 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16694 l_csm_line_details_tbl(j).description := l_strm_name;
16695 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16696 --The adjusting stub would end one day before the PPD date
16697 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
16698 l_csm_line_details_tbl(j).level_index_number := idx;
16699 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16700 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16701 --When the payment type is Principal, the Base Rate specified in the contract needs to be
16702 --captured and passed. This rate is used in calculation of the Interest Payment Streams
16703 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16704 --l_base_Rate needs to be used.
16705 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
16706
16707 --When the cashflow step is a payment line, both amount and rate should not be locked
16708 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16709 -- we are solving for rate.
16710 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
16711
16712 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16713 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16714 END IF;
16715
16716 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16717 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16718 ELSE
16719 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16720 END IF;
16721
16722 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16723 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16724 ELSE
16725 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16726 END IF;
16727 END IF;
16728 END IF;
16729 --Bug 4964710 - End of Changes
16730
16731 --=================================
16732 --Step 4 : Create the paydown stub
16733 --=================================
16734
16735 /*PPD stub*/
16736 j := j + 1;
16737 idx := idx + 1;
16738 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16739 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
16740 l_csm_line_details_tbl(j).period := g_stub_rec.period;
16741 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16742 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16743 l_csm_line_details_tbl(j).description := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
16744 l_csm_line_details_tbl(j).amount := l_ppd_tbl(k).paydown_amount;
16745 IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
16746 THEN
16747 l_csm_line_details_tbl(j).date_start := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
16748 ELSE
16749 l_csm_line_details_tbl(j).date_start := l_ppd_tbl(k).paydown_date;
16750 END IF;
16751 l_csm_line_details_tbl(j).level_index_number := idx;
16752 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16753 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16754 --When the payment type is Principal, the Base Rate specified in the contract needs to be
16755 --captured and passed. This rate is used in calculation of the Interest Payment Streams
16756 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16757 --l_base_Rate needs to be used.
16758 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
16759
16760
16761 --When the cashflow step is a payment line, both amount and rate should not be locked
16762 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16763 -- we are solving for rate.
16764 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
16765
16766 /*Populate the accrual end date as well*/
16767 /*Create a stub for principal paydown*/
16768 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16769 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16770 END IF;
16771
16772 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16773 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16774 ELSE
16775 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16776 END IF;
16777
16778 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16779 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16780 ELSE
16781 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16782 END IF;
16783 --===============================================================================
16784 --Step 5: Check whether Ajusting stub needs to be created and create if necessary
16785 --================================================================================
16786 --Added by kthiruva on 10-Feb-2006
16787 --Bug 4964710 - Start of Changes
16788 IF (l_rl_rec.RULE_INFORMATION10 IS NOT NULL)
16789 THEN
16790 --Calculating the days between the Paydown date and the due date of the next periodic payment
16791 l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
16792 l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
16793
16794 --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
16795 --line for remaining payments are created.
16796 --If only one PPD is within a period then an adjusting stub is created for the rest
16797 --of the period and one payment line for the remaining periods until the next paydown date
16798 IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
16799 /*Adjusting stub*/
16800 j := j + 1;
16801 idx := idx + 1;
16802 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16803 l_csm_line_details_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
16804 l_csm_line_details_tbl(j).period := g_stub_rec.period;
16805 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16806 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16807 l_csm_line_details_tbl(j).description := l_strm_name;
16808 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16809 l_csm_line_details_tbl(j).date_start := l_adjusting_stub_date;
16810 l_csm_line_details_tbl(j).level_index_number := idx;
16811 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16812 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16813 --When the payment type is Principal, the Base Rate specified in the contract needs to be
16814 --captured and passed. This rate is used in calculation of the Interest Payment Streams
16815 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16816 --l_base_Rate needs to be used.
16817 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
16818
16819 --When the cashflow step is a payment line, both amount and rate should not be locked
16820 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16821 -- we are solving for rate.
16822 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
16823
16824 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16825 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16826 END IF;
16827
16828 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16829 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16830 ELSE
16831 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16832 END IF;
16833
16834 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16835 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16836 ELSE
16837 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16838 END IF;
16839 END IF;
16840 END IF;
16841 --===================================================================================
16842 --Step 6 : Check whether a payment line for the remaining payments needs to be creted
16843 --===================================================================================
16844
16845 --The periods between the end date of the adjusting stub and the next PPD is calculated
16846 --If number of periods > 0, then a payment line for that many periods needs to be created.
16847 IF k = l_ppd_tbl.LAST THEN
16848 l_period_end_date := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3);
16849 ELSE
16850 l_period_end_date := l_ppd_tbl(k+1).paydown_date;
16851 END IF;
16852 --Modified by kthiruva on 12-Dec-2005
16853 --Use round here
16854 --Bug 4878162 - Start of Changes
16855 l_periods_after_ppd := round (months_between(l_period_end_date,l_csm_line_details_tbl(j).date_start ) / l_rl_rec.decoded_object1_id1,0);
16856 --Bug 4878162 - Start of Changes
16857 --Create a payment line only if the number of periods till the next paydown is greater than 0
16858 IF (l_periods_after_ppd > 0) THEN
16859 /*Remaining amts*/
16860 j := j + 1;
16861 idx := idx + 1;
16862 l_csm_line_details_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16863 l_csm_line_details_tbl(j).number_of_periods := l_periods_after_ppd;
16864 l_csm_line_details_tbl(j).period := l_rl_rec.object1_id1;
16865 l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16866 l_csm_line_details_tbl(j).kle_loan_id := l_line_rec.id;
16867 l_csm_line_details_tbl(j).description := l_strm_name;
16868 l_csm_line_details_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16869 l_csm_line_details_tbl(j).level_index_number := idx;
16870 l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16871 l_csm_line_details_tbl(j).days_in_year := l_days_in_yr_code;
16872 --When the payment type is Principal, the Base Rate specified in the contract needs to be
16873 --captured and passed. This rate is used in calculation of the Interest Payment Streams
16874 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16875 --l_base_Rate needs to be used.
16876 l_csm_line_details_tbl(j).rate := nvl(l_rl_rec.rule_information13,l_base_rate);
16877
16878 l_csm_line_details_tbl(j).date_start := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) ;
16879 --When the cashflow step is a payment line, both amount and rate should not be locked
16880 -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16881 -- we are solving for rate.
16882 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP := G_FALSE;
16883
16884 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16885 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16886 END IF;
16887
16888 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16889 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16890 ELSE
16891 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16892 END IF;
16893
16894 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16895 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16896 ELSE
16897 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16898 END IF;
16899 END IF;--End of condition l_periods_after_ppd >0
16900
16901 END IF;--The condition check for the date of every PPD in the ppd_tbl
16902 END LOOP;--loop for l_ppd_tbl
16903 END IF;--The condition checking if there is any PPD inside the date range of the periodic payment
16904 END IF;--The condition checking for Stub or periodic payment
16905 END LOOP;
16906 --Emd of Changes for payment type 'PRINCIPAL_PAYMENT'
16907 ELSIF (((l_strm_name_rec.periodic_yn = 'Y' ) AND
16908 (UPPER(l_strm_name_rec.stream_type_purpose) = 'FEE') AND
16909 (l_strm_name_rec.capitalize_yn = 'N')) OR
16910 ((l_strm_name_rec.periodic_yn = 'Y' ) AND
16911 -- code for user defined streams
16912 --(UPPER(l_strm_name_rec.name) <> 'FEE'))) THEN
16913 (UPPER(l_strm_name_rec.stream_type_purpose) <> 'FEE'))) THEN
16914 -- code for use defined streams ends here
16915 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
16916 -- Start of Bug#2757289 modification
16917 IF (l_rl_rec.rule_information7 IS NOT NULL OR
16918 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
16919 (l_rl_rec.rule_information8 IS NOT NULL OR
16920 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
16921 k := k + 1;
16922 idx := idx + 1;
16923 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
16924 l_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
16925 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+l_rl_rec.rule_information7;
16926 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
16927 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
16928 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
16929 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
16930 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
16931 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
16932
16933 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16934 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16935 END IF;
16936 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16937 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16938 ELSE
16939 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16940 END IF;
16941 -- Code for user defined streams
16942 --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
16943 IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
16944 -- code ends here
16945 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
16946 --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) THEN
16947 ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) THEN
16948 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16949 ELSE
16950 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
16951 END If;
16952 -- End of Bug#2757289 modification
16953
16954 -- Added by kthiruva on 29-Dec-2005.
16955 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
16956 -- Bug 4915938 - Start of Changes
16957 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16958 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16959 ELSE
16960 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16961 END IF;
16962 -- Bug 4915938 - End of Changes
16963
16964 ELSIF (l_rl_rec.rule_information7 IS NULL OR
16965 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
16966 (l_rl_rec.rule_information8 IS NULL OR
16967 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
16968 k := k + 1;
16969 idx := idx + 1;
16970 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
16971 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
16972 l_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
16973 l_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16974 l_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
16975 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
16976 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
16977 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
16978
16979 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16980 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16981 END IF;
16982 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16983 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16984 ELSE
16985 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16986 END IF;
16987 IF (l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
16988 l_csm_periodic_expenses_tbl(k).date_start := l_hdr_rec.start_date;
16989 ELSE
16990 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
16991 END IF;
16992 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16993 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16994 ELSE
16995 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16996 END IF;
16997 --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
16998 IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
16999 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
17000 --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) Then
17001 ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) Then
17002 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
17003 ELSE
17004 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
17005 END If;
17006 END IF;
17007 END LOOP;
17008 ELSIf ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' )) Then
17009 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
17010 l := l + 1;
17011 l_csm_one_off_fee_tbl(l).description := l_strm_name_rec.name;
17012 l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
17013 l_csm_one_off_fee_tbl(l).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
17014 If(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
17015 l_csm_one_off_fee_tbl(l).date_paid := l_hdr_rec.start_date;
17016 Else
17017 l_csm_one_off_fee_tbl(l).date_paid := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
17018 End If;
17019 l_csm_one_off_fee_tbl(l).kle_asset_id := l_line_rec.id;
17020 END LOOP;
17021 END IF;
17022 END LOOP;
17023 END LOOP;
17024 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17025 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17026 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17027 RAISE OKL_API.G_EXCEPTION_ERROR;
17028 End If;
17029 -- Extract fee line
17030 extract_fee_lines( p_api_version => p_api_version,
17031 p_chr_id => TO_NUMBER(p_chr_id),
17032 p_deal_type => l_deal_type,
17033 p_init_msg_list => p_init_msg_list,
17034 x_msg_count => x_msg_count,
17035 x_msg_data => x_msg_data,
17036 x_return_status => x_return_status,
17037 px_csm_stream_types_tbl => l_csm_stream_types_tbl,
17038 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl,
17039 px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
17040 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
17041 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17042 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
17043 raise OKL_API.G_EXCEPTION_ERROR;
17044 End If;
17045 extract_subsidized_lines(p_api_version => p_api_version,
17046 p_init_msg_list => p_init_msg_list,
17047 x_return_status => x_return_status,
17048 x_msg_count => x_msg_count,
17049 x_msg_data => x_msg_data,
17050 p_chr_id => TO_NUMBER(p_chr_id),
17051 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
17052 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
17053 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17054 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
17055 raise OKL_API.G_EXCEPTION_ERROR;
17056 End If;
17057 check_for_mandatory_streams(
17058 p_api_version => p_api_version,
17059 p_init_msg_list => p_init_msg_list,
17060 x_msg_count => x_msg_count,
17061 x_msg_data => x_msg_data,
17062 x_return_status => x_return_status,
17063 p_chr_id => p_chr_id,
17064 p_deal_type => l_deal_type,
17065 p_stream_types_tbl => l_csm_stream_types_tbl,
17066 x_stream_types_tbl => l_req_stream_types_tbl);
17067 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
17068 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17069 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
17070 raise OKL_API.G_EXCEPTION_ERROR;
17071 End If;
17072 -- Requesting for yields
17073 x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
17074 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17075 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17076 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17077 RAISE OKL_API.G_EXCEPTION_ERROR;
17078 END IF;
17079
17080 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
17081 okl_api.set_message(
17082 p_app_name => G_APP_NAME,
17083 p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
17084 raise OKL_API.G_EXCEPTION_ERROR;
17085 End If;
17086
17087 x_csm_loan_header := l_csm_loan_header;
17088 x_csm_loan_lines_tbl := l_csm_loan_levels_tbl;
17089 x_csm_loan_levels_tbl := l_csm_line_details_tbl;
17090 x_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
17091 x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
17092 x_csm_yields_tbl := l_csm_yields_tbl;
17093 x_csm_stream_types_tbl := l_req_stream_types_tbl;
17094 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
17095 x_msg_data => x_msg_data);
17096 EXCEPTION
17097 WHEN OKL_API.G_EXCEPTION_ERROR THEN
17098 IF l_hdr_csr%ISOPEN THEN
17099 CLOSE l_hdr_csr;
17100 END IF;
17101 IF ib_csr%ISOPEN THEN
17102 CLOSE ib_csr;
17103 END IF;
17104 IF l_line_rec_csr%ISOPEN THEN
17105 CLOSE l_line_rec_csr;
17106 END IF;
17107 IF l_rl_csr1%ISOPEN THEN
17108 CLOSE l_rl_csr1;
17109 END IF;
17110 IF strm_name_csr%ISOPEN THEN
17111 CLOSE strm_name_csr;
17112 END IF;
17113 IF l_rl_csr%ISOPEN THEN
17114 CLOSE l_rl_csr;
17115 END IF;
17116 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
17117 l_api_name,
17118 G_PKG_NAME,
17119 'OKL_API.G_RET_STS_ERROR',
17120 x_msg_count,
17121 x_msg_data,
17122 '_PVT');
17123 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
17124 IF l_hdr_csr%ISOPEN THEN
17125 CLOSE l_hdr_csr;
17126 END IF;
17127 IF ib_csr%ISOPEN THEN
17128 CLOSE ib_csr;
17129 END IF;
17130 IF l_line_rec_csr%ISOPEN THEN
17131 CLOSE l_line_rec_csr;
17132 END IF;
17133 IF l_rl_csr1%ISOPEN THEN
17134 CLOSE l_rl_csr1;
17135 END IF;
17136 IF strm_name_csr%ISOPEN THEN
17137 CLOSE strm_name_csr;
17138 END IF;
17139 IF l_rl_csr%ISOPEN THEN
17140 CLOSE l_rl_csr;
17141 END IF;
17142 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
17143 l_api_name,
17144 G_PKG_NAME,
17145 'OKL_API.G_RET_STS_UNEXP_ERROR',
17146 x_msg_count,
17147 x_msg_data,
17148 '_PVT');
17149 WHEN OTHERS then
17150 IF l_hdr_csr%ISOPEN THEN
17151 CLOSE l_hdr_csr;
17152 END IF;
17153 IF ib_csr%ISOPEN THEN
17154 CLOSE ib_csr;
17155 END IF;
17156 IF l_line_rec_csr%ISOPEN THEN
17157 CLOSE l_line_rec_csr;
17158 END IF;
17159 IF l_rl_csr1%ISOPEN THEN
17160 CLOSE l_rl_csr1;
17161 END IF;
17162 IF strm_name_csr%ISOPEN THEN
17163 CLOSE strm_name_csr;
17164 END IF;
17165 IF l_rl_csr%ISOPEN THEN
17166 CLOSE l_rl_csr;
17167 END IF;
17168 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
17169 l_api_name,
17170 G_PKG_NAME,
17171 'OTHERS',
17172 x_msg_count,
17173 x_msg_data,
17174 '_PVT');
17175 END extract_params_ppd_rebook;
17176
17177
17178 Procedure extract_params_loan(
17179 p_api_version IN NUMBER,
17180 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
17181 p_chr_id IN VARCHAR2,
17182 x_return_status OUT NOCOPY VARCHAR2,
17183 x_msg_count OUT NOCOPY NUMBER,
17184 x_msg_data OUT NOCOPY VARCHAR2,
17185 x_csm_loan_header OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
17186 x_csm_loan_lines_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
17187 x_csm_loan_levels_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type,
17188 x_csm_one_off_fee_tbl OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
17189 x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
17190 x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
17191 x_csm_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type) AS
17192
17193 --Added by kthiruva on 18-Apr-2006 for Bug 5161075
17194 --This cursor determines whether there have been any Paydowns on this Contract
17195 CURSOR is_ppd_available_csr(chrId NUMBER)
17196 IS
17197 SELECT count(crl.id)
17198 FROM okc_rule_groups_b crg,
17199 okc_rules_b crl,
17200 okl_strm_type_v sty
17201 WHERE crl.rgp_id = crg.id
17202 AND crg.rgd_code = 'LALEVL'
17203 AND crl.rule_information_category = 'LASLH'
17204 AND crg.dnz_chr_id = chrId
17205 AND crl.object1_id1 = sty.id
17206 AND sty.stream_type_purpose = 'UNSCHEDULED_PRINCIPAL_PAYMENT'
17207 ORDER BY crl.rule_information1;
17208
17209 --Added by kthiruva on 18-Apr-2006 for Bug 5161075
17210 l_ppd_cnt NUMBER := 0;
17211
17212 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_LOAN';
17213 l_api_version CONSTANT NUMBER := 1;
17214 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
17215
17216 Begin
17217
17218 --Added by kthiruva on 18-Apr-2006
17219 --If there is a PPD defined on the Contract, then make a call to extract_params_ppd_rebook
17220 --else call extract_params_loan
17221 --Bug 5161075- Start of Changes
17222 OPEN is_ppd_available_csr(p_chr_id);
17223 FETCH is_ppd_available_csr INTO l_ppd_cnt;
17224 CLOSE is_ppd_available_csr;
17225
17226 IF l_ppd_cnt > 0 THEN
17227
17228 extract_params_ppd_rebook(
17229 p_api_version,
17230 p_init_msg_list,
17231 p_chr_id,
17232 x_return_status,
17233 x_msg_count,
17234 x_msg_data,
17235 x_csm_loan_header,
17236 x_csm_loan_lines_tbl,
17237 x_csm_loan_levels_tbl,
17238 x_csm_one_off_fee_tbl,
17239 x_csm_periodic_expenses_tbl,
17240 x_csm_yields_tbl,
17241 x_csm_stream_types_tbl);
17242
17243 --Added by kthiruva for Debugging
17244 write_to_log('After the call to extract_params_ppd_rebook, the return status is :'||x_return_status);
17245 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
17246 okl_api.set_message(
17247 p_app_name => G_APP_NAME,
17248 p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
17249 raise OKL_API.G_EXCEPTION_ERROR;
17250 End If;
17251
17252 ELSE
17253 extract_params_loan_deal(
17254 p_api_version,
17255 p_init_msg_list,
17256 p_chr_id,
17257 NULL,
17258 x_return_status,
17259 x_msg_count,
17260 x_msg_data,
17261 x_csm_loan_header,
17262 x_csm_loan_lines_tbl,
17263 x_csm_loan_levels_tbl,
17264 x_csm_one_off_fee_tbl,
17265 x_csm_periodic_expenses_tbl,
17266 x_csm_yields_tbl,
17267 x_csm_stream_types_tbl);
17268
17269 --Added by kthiruva for Debugging
17270 write_to_log('After the call to extract_params_loan, the return status is :'||x_return_status);
17271 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
17272 okl_api.set_message(
17273 p_app_name => G_APP_NAME,
17274 p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
17275 raise OKL_API.G_EXCEPTION_ERROR;
17276 End If;
17277
17278 END IF;
17279 print( l_api_name, 'end', x_return_status);
17280 end extract_params_loan;
17281
17282 --Added by kthiruva for Bug 5161075
17283 Procedure extract_params_loan_reamort(
17284 p_api_version IN NUMBER,
17285 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
17286 p_chr_id IN VARCHAR2,
17287 x_return_status OUT NOCOPY VARCHAR2,
17288 x_msg_count OUT NOCOPY NUMBER,
17289 x_msg_data OUT NOCOPY VARCHAR2,
17290 x_csm_loan_header OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
17291 x_csm_loan_lines_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
17292 x_csm_loan_levels_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type,
17293 x_csm_one_off_fee_tbl OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
17294 x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
17295 x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
17296 x_csm_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type) AS
17297
17298 --Added by kthiruva on 18-Apr-2006 for Bug 5161075
17299 --This cursor determines whether there have been any Paydowns on this Contract
17300 CURSOR is_payment_available_csr(chrId NUMBER,
17301 strmPurpose VARCHAR2)
17302 IS
17303 SELECT count(crl.id)
17304 FROM okc_rule_groups_b crg,
17305 okc_rules_b crl,
17306 okl_strm_type_v sty
17307 WHERE crl.rgp_id = crg.id
17308 AND crg.rgd_code = 'LALEVL'
17309 AND crl.rule_information_category = 'LASLH'
17310 AND crg.dnz_chr_id = chrId
17311 AND crl.object1_id1 = sty.id
17312 AND sty.stream_type_purpose = strmPurpose
17313 ORDER BY crl.rule_information1;
17314
17315 --Added by kthiruva on 18-Apr-2006 for Bug 5161075
17316 l_prin_cnt NUMBER := 0;
17317 l_ppd_cnt NUMBER := 0;
17318
17319
17320 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_LOAN_REAMORT';
17321 l_api_version CONSTANT NUMBER := 1;
17322 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
17323
17324 Begin
17325
17326 --Added by kthiruva on 18-Apr-2006
17327 --If there is a PPD defined on the Contract, then make a call to extract_params_ppd_rebook
17328 --else call extract_params_loan
17329 --Bug 5161075- Start of Changes
17330 OPEN is_payment_available_csr(p_chr_id,
17331 'PRINCIPAL_PAYMENT');
17332 FETCH is_payment_available_csr INTO l_prin_cnt;
17333 CLOSE is_payment_available_csr;
17334
17335 --Added by kthiruva on 18-Apr-2006
17336 --If there is a PPD defined on the Contract, then make a call to extract_params_ppd_rebook
17337 --else call extract_params_loan
17338 --Bug 5161075- Start of Changes
17339 OPEN is_payment_available_csr(p_chr_id,
17340 'UNSCHEDULED_PRINCIPAL_PAYMENT');
17341 FETCH is_payment_available_csr INTO l_ppd_cnt;
17342 CLOSE is_payment_available_csr;
17343
17344 IF l_prin_cnt > 0 THEN
17345 extract_params_loan_deal(
17346 p_api_version,
17347 p_init_msg_list,
17348 p_chr_id,
17349 NULL,
17350 x_return_status,
17351 x_msg_count,
17352 x_msg_data,
17353 x_csm_loan_header,
17354 x_csm_loan_lines_tbl,
17355 x_csm_loan_levels_tbl,
17356 x_csm_one_off_fee_tbl,
17357 x_csm_periodic_expenses_tbl,
17358 x_csm_yields_tbl,
17359 x_csm_stream_types_tbl);
17360
17361 --Added by kthiruva for Debugging
17362 write_to_log('After the call to extract_params_loan_deal, the return status is :'||x_return_status);
17363 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
17364 okl_api.set_message(
17365 p_app_name => G_APP_NAME,
17366 p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
17367 raise OKL_API.G_EXCEPTION_ERROR;
17368 End If;
17369 ELSE
17370 --Payment type on the contract is Rent
17371 --IF there is a PPD on the contract then call extract_params_loan_deal
17372 --otherwise call extract_params_ppd_rebook
17373 IF l_ppd_cnt = 0 THEN
17374 extract_params_loan_deal(
17375 p_api_version,
17376 p_init_msg_list,
17377 p_chr_id,
17378 NULL,
17379 x_return_status,
17380 x_msg_count,
17381 x_msg_data,
17382 x_csm_loan_header,
17383 x_csm_loan_lines_tbl,
17384 x_csm_loan_levels_tbl,
17385 x_csm_one_off_fee_tbl,
17386 x_csm_periodic_expenses_tbl,
17387 x_csm_yields_tbl,
17388 x_csm_stream_types_tbl);
17389
17390 --Added by kthiruva for Debugging
17391 write_to_log('After the call to extract_params_loan_deal, the return status is :'||x_return_status);
17392 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
17393 okl_api.set_message(
17394 p_app_name => G_APP_NAME,
17395 p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
17396 raise OKL_API.G_EXCEPTION_ERROR;
17397 End If;
17398 ELSIF l_ppd_cnt > 0 THEN
17399
17400 --Payment on the contract is Rent. Therefore the PPD should also be incorporated
17401 --into the payment table that needs to be built to be sent to SuperTrump
17402 extract_params_ppd_rebook(
17403 p_api_version,
17404 p_init_msg_list,
17405 p_chr_id,
17406 x_return_status,
17407 x_msg_count,
17408 x_msg_data,
17409 x_csm_loan_header,
17410 x_csm_loan_lines_tbl,
17411 x_csm_loan_levels_tbl,
17412 x_csm_one_off_fee_tbl,
17413 x_csm_periodic_expenses_tbl,
17414 x_csm_yields_tbl,
17415 x_csm_stream_types_tbl);
17416
17417 --Added by kthiruva for Debugging
17418 write_to_log('After the call to extract_params_ppd_rebook, the return status is :'||x_return_status);
17419 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
17420 okl_api.set_message(
17421 p_app_name => G_APP_NAME,
17422 p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
17423 raise OKL_API.G_EXCEPTION_ERROR;
17424 End If;
17425 END IF;
17426 END IF;
17427 print( l_api_name, 'end', x_return_status);
17428 end extract_params_loan_reamort;
17429
17430 -- Start modification 11i10 bakuchib
17431 PROCEDURE extract_params_lease_deal(
17432 p_api_version IN NUMBER,
17433 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
17434 p_chr_id IN VARCHAR2,
17435 p_deal_type IN VARCHAR2,
17436 x_return_status OUT NOCOPY VARCHAR2,
17437 x_msg_count OUT NOCOPY NUMBER,
17438 x_msg_data OUT NOCOPY VARCHAR2,
17439 x_csm_lease_header OUT NOCOPY okl_create_streams_pub.csm_lease_rec_type,
17440 x_csm_one_off_fee_tbl OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
17441 x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
17442 x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
17443 x_req_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type,
17444 x_csm_line_details_tbl OUT NOCOPY okl_create_streams_pub.csm_line_details_tbl_type,
17445 x_rents_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type) AS
17446
17447 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_LEASE_DEAL';
17448 l_api_version CONSTANT NUMBER := 1;
17449 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
17450 lv_fed_only VARCHAR2(3) := 'N';
17451 ln_value NUMBER := 0;
17452 lv_fed_only_tax_book OKL_TXD_ASSETS_B.TAX_BOOK%TYPE := NULL;
17453 lv_mg_tax_yn VARCHAR2(3) := 'N';
17454 ln_org_id okc_k_headers_b.authoring_org_id%TYPE;
17455 lv_currency_code okc_k_headers_b.currency_code%TYPE;
17456 l_rnd_basis_percent NUMBER;
17457 l_level_type NUMBER;
17458 l_strm_name VARCHAR2(200);
17459 ln_fin_yn NUMBER := 0;
17460 i BINARY_INTEGER := 0;
17461 j BINARY_INTEGER := 0;
17462 k BINARY_INTEGER := 0;
17463 l BINARY_INTEGER := 0;
17464 m BINARY_INTEGER := 0;
17465 idx BINARY_INTEGER := 0;
17466 l_basis_percent NUMBER;
17467 styid NUMBER;
17468 l_salvage NUMBER;
17469 l_purchase_option VARCHAR2(256);
17470 l_deal_type VARCHAR2(256);
17471 l_purchase_option_amount NUMBER;
17472 l_msg_count Number;
17473 l_msg_data varchar2(2000);
17474 l_chr_id Number := TO_NUMBER(p_chr_id);
17475 l_cle_id Number;
17476 l_rgd_code Varchar2(30) := 'LAPSTH';
17477 l_rdf_code Varchar2(30) := 'LASTRM';
17478 l_rdf_name Varchar2(80) := 'xxx';
17479 l_id1 Varchar2(40);
17480 l_id2 Varchar2(200);
17481 l_name Varchar2(200);
17482 l_description Varchar2(2000);
17483 l_status Varchar2(1);
17484 l_start_date date;
17485 l_end_date date;
17486 l_org_id Number;
17487 l_inv_org_id Number;
17488 l_book_type_code Varchar2(15);
17489 l_select Varchar2(2000);
17490 l_msg_index_out Number;
17491 lv_diff_date VARCHAR2(3) := 'N';
17492 l_value OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
17493 l_tradein OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
17494 l_capreduc OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
17495 l_feecap OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
17496 l_capint OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
17497 l_discount OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
17498 l_corp_dep_cost OKL_TXL_ASSETS_B.DEPRECIATION_COST%TYPE := 0;
17499 l_tax_dep_cost OKL_TXD_ASSETS_B.COST%TYPE := 0;
17500 l_lease_tax_owner okc_rules_b.rule_information1%TYPE := NULL;
17501 lx_no_data_found BOOLEAN;
17502 -- l_sty_id NUMBER;
17503 l_sty_id strm_rec_type;
17504 l_down_payment_sty_id strm_rec_type;
17505 l_dummy_sty_id strm_rec_type;
17506 l_pricing_name VARCHAR2(40);
17507
17508 l_dependent_sty_id NUMBER;
17509 l_strm_type_id_tbl okl_strm_type_id_tbl_type;
17510 l_sub_amt OKL_K_LINES.AMOUNT%TYPE := 0;
17511 l_sub_override_amt OKL_K_LINES.SUBSIDY_OVERRIDE_AMOUNT%TYPE := 0;
17512
17513
17514 -- To check if the chr_id has Financed fee feetype defined
17515 CURSOR l_financed_type_csr (chrId NUMBER)
17516 IS
17517 SELECT 1
17518 FROM dual
17519 WHERE EXISTS (SELECT 1
17520 FROM okc_k_lines_b cle,
17521 okc_line_styles_b lse,
17522 okl_k_lines kle
17523 WHERE cle.dnz_chr_id = chrId
17524 AND cle.lse_id = lse.id
17525 AND lse.lty_code = 'FEE'
17526 AND cle.id = kle.id
17527 AND kle.fee_type in ('ROLLOVER', 'FINANCED'));
17528 -- get the currency_code and Authoring_org_id
17529 -- from okc_k_headers_b
17530 CURSOR get_org_id(p_chr_id okc_k_headers_b.id%TYPE)
17531 IS
17532 SELECT authoring_org_id,
17533 currency_code
17534 FROM okc_k_headers_b
17535 WHERE id = p_chr_id;
17536 -- get the Lease Contract Header info
17537 CURSOR l_hdr_csr_lease(chrId NUMBER)
17538 IS
17539 SELECT chr.orig_system_source_code,
17540 chr.start_date,
17541 chr.end_date,
17542 chr.template_yn,
17543 chr.authoring_org_id,
17544 khr.expected_delivery_date,
17545 chr.inv_organization_id,
17546 khr.deal_type,
17547 pdt.id pid,
17548 NVL(pdt.reporting_pdt_id, -1) report_pdt_id,
17549 chr.currency_code currency_code,
17550 khr.term_duration term
17551 FROM okc_k_headers_v chr,
17552 okl_k_headers khr,
17553 okl_products_v pdt
17554 WHERE khr.id = chr.id
17555 AND chr.id = chrId
17556 AND khr.pdt_id = pdt.id(+);
17557 -- get the Lease Header rule information
17558 CURSOR l_hdrrl_csr_lease(rgcode okc_rule_groups_b.rgd_code%TYPE,
17559 rlcat okc_rules_b.rule_information_category%TYPE,
17560 chrId NUMBER)
17561 IS
17562 SELECT crl.object1_id1,
17563 crl.rule_information1,
17564 crl.rule_information2,
17565 crl.rule_information3,
17566 crl.rule_information4,
17567 crl.rule_information5,
17568 crl.rule_information6,
17569 crl.rule_information10,
17570 crl.rule_information13,
17571 crl.rule_information11
17572 FROM okc_rule_groups_b crg,
17573 okc_rules_b crl
17574 WHERE crl.rgp_id = crg.id
17575 AND crg.rgd_code = rgcode
17576 AND crl.rule_information_category = rlcat
17577 AND crg.dnz_chr_id = chrId;
17578 -- get the Lease install based location
17579 CURSOR ib_csr_lease (chrId NUMBER)
17580 IS
17581 SELECT DISTINCT hl.country country
17582 FROM hz_locations hl,
17583 hz_party_sites hps,
17584 hz_party_site_uses hpsu,
17585 okl_txl_itm_insts iti,
17586 okc_line_styles_b lse_ib,
17587 okc_k_lines_b cle_ib
17588 WHERE cle_ib.dnz_chr_id = chrId
17589 AND cle_ib.lse_id = lse_ib.id
17590 AND lse_ib.lty_code = 'INST_ITEM'
17591 AND iti.kle_id = cle_ib.id
17592 AND iti.object_id1_new = hpsu.party_site_use_id
17593 AND iti.object_id2_new = '#'
17594 AND hpsu.party_site_id = hps.party_site_id
17595 AND hps.location_id = hl.location_id;
17596 -- Get the stream type id
17597 CURSOR l_strmid_csr_lease (strmName VARCHAR2)
17598 IS
17599 SELECT id styid
17600 FROM okl_strm_type_tl
17601 WHERE LANGUAGE = 'US'
17602 AND NAME = strmName;
17603 -- get the lease Contract line info
17604 -- Modified by kthiruva on 26-Aug-05
17605 -- Added trade-in amount and expected funding date to the Select clause of the
17606 -- cursor for Pricing Enhancements
17607 CURSOR l_line_rec_csr_lease(chrid NUMBER, lnetype VARCHAR2)
17608 IS
17609 SELECT kle.id,
17610 kle.oec,
17611 kle.residual_code,
17612 kle.capital_amount,
17613 kle.delivered_date,
17614 kle.date_funding_required,
17615 kle.residual_grnty_amount,
17616 kle.date_funding,
17617 kle.date_terminated,
17618 kle.residual_value,
17619 kle.date_delivery_expected,
17620 kle.orig_system_id1 old_line_id,
17621 kle.amount,
17622 kle.price_negotiated,
17623 kle.start_date,
17624 kle.end_date,
17625 kle.orig_system_id1,
17626 kle.fee_type,
17627 kle.initial_direct_cost,
17628 tl.item_description,
17629 tl.name,
17630 sts.ste_code,
17631 --Added for Pricing Enhancements
17632 kle.tradein_amount,
17633 kle.date_funding_expected,
17634 -- Added for Down Payment Enhancement
17635 kle.capital_reduction,
17636 kle.capitalize_down_payment_yn
17637 FROM okl_k_lines_full_v kle,
17638 okc_line_styles_b lse,
17639 okc_k_lines_tl tl,
17640 okc_statuses_b sts
17641 WHERE kle.lse_id = lse.id
17642 AND lse.lty_code = lnetype
17643 AND tl.id = kle.id
17644 AND tl.language = userenv('LANG')
17645 AND kle.dnz_chr_id = chrid
17646 AND sts.code = kle.sts_code
17647 AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
17648 -- get discount amount on the line
17649 CURSOR get_dis_amt_csr_lease(p_chr_id NUMBER, p_cle_id NUMBER)
17650 IS
17651 SELECT kle_sub.amount, kle_sub.SUBSIDY_OVERRIDE_AMOUNT
17652 FROM okl_subsidies_b subb,
17653 okc_k_lines_b cle_fin,
17654 okc_line_styles_b lse_fin,
17655 okc_k_lines_b cle_sub,
17656 okl_k_lines kle_sub,
17657 okc_line_styles_b lse_sub
17658 WHERE cle_fin.id = p_cle_id
17659 AND cle_fin.dnz_chr_id = p_chr_id
17660 AND cle_sub.id = kle_sub.id
17661 AND cle_sub.lse_id = lse_sub.id
17662 AND lse_sub.lty_code = 'SUBSIDY'
17663 AND subb.id = kle_sub.subsidy_id
17664 AND cle_fin.id = cle_sub.cle_id
17665 AND cle_fin.lse_id = lse_fin.id
17666 AND lse_fin.lty_code = 'FREE_FORM1'
17667 AND subb.accounting_method_code = 'NET';
17668 -- get the lease setup values for tax book and coporate book
17669 CURSOR l_txtrans_csr_lease (Book Varchar2)
17670 IS
17671 SELECT trns.value,
17672 books.book_type_code
17673 FROM okl_sgn_translations trns,
17674 fa_book_controls books
17675 WHERE trns.jtot_object1_code = 'FA_BOOK_CONTROLS'
17676 AND trns.object1_id1 = books.book_type_code
17677 AND books.book_type_code = Book
17678 AND trns.sgn_code = 'STMP';
17679 -- get the lease Line rule information
17680 CURSOR l_slh_csr_lease(rgcode okc_rule_groups_b.rgd_code%TYPE,
17681 rlcat okc_rules_b.rule_information_category%TYPE,
17682 chrId NUMBER,
17683 cleId NUMBER )
17684 IS
17685 SELECT crl.id slh_id,
17686 crl.object1_id1,
17687 crl.rule_information1,
17688 crl.rule_information2,
17689 crl.rule_information3,
17690 crl.rule_information5,
17691 crl.rule_information6,
17692 crl.rule_information7,
17693 crl.rule_information8,
17694 crl.rule_information13,
17695 crl.rule_information10
17696 FROM okc_rule_groups_b crg,
17697 okc_rules_b crl
17698 WHERE crl.rgp_id = crg.id
17699 AND crg.rgd_code = rgcode
17700 AND crl.rule_information_category = rlcat
17701 AND crg.dnz_chr_id = chrId
17702 AND crg.cle_id = cleId
17703 ORDER BY crl.rule_information1;
17704 -- get Stream name
17705 CURSOR strm_name_csr_lease (styid NUMBER)
17706 IS
17707 SELECT tl.name name,
17708 stm.stream_type_purpose stream_type_purpose,
17709 stm.stream_type_class stream_type_class,
17710 tl.description alloc_basis,
17711 stm.capitalize_yn capitalize_yn,
17712 stm.periodic_yn periodic_yn
17713 FROM okl_strm_type_b stm,
17714 okl_strm_type_tl tl
17715 WHERE tl.id = stm.id
17716 AND tl.language = 'US'
17717 AND stm.id = styid;
17718 -- get the self referencing Line based rule information
17719 CURSOR l_sll_csr_lease(rlgpId NUMBER,
17720 rgcode okc_rule_groups_b.rgd_code%TYPE,
17721 rlcat okc_rules_b.rule_information_category%TYPE,
17722 chrId NUMBER,
17723 cleId NUMBER )
17724 IS
17725 SELECT crl.object1_id1,
17726 crl.rule_information1,
17727 crl.rule_information2,
17728 crl.rule_information3,
17729 crl.rule_information5,
17730 crl.rule_information6,
17731 crl.rule_information7,
17732 crl.rule_information8,
17733 crl.rule_information13,
17734 crl.rule_information10
17735 FROM okc_rule_groups_b crg,
17736 okc_rules_b crl
17737 WHERE crl.rgp_id = crg.id
17738 AND crl.object2_id1 = rlgpId
17739 AND crg.rgd_code = rgcode
17740 AND crl.rule_information_category = rlcat
17741 AND crg.dnz_chr_id = chrId
17742 AND crg.cle_id = cleId
17743 ORDER BY FND_DATE.canonical_to_date(crl.rule_information2);
17744
17745 --mansrini : Code for VR build
17746 CURSOR get_day_conv_on_contrct
17747 IS
17748 SELECT
17749 --Added by srsreeni for bug6076113
17750 -- rate_params.days_in_a_year_code,
17751 -- DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
17752 DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
17753 rate_params.days_in_a_year_code
17754 --srsreeni bug6076113 ends
17755 FROM okl_k_rate_params rate_params
17756 WHERE khr_id = p_chr_id;
17757
17758 CURSOR get_day_conv_on_sgt
17759 IS
17760 SELECT DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
17761 gts.days_in_yr_code
17762 FROM
17763 okl_k_headers khr,
17764 okl_products_v pdt,
17765 okl_ae_tmpt_sets_v aes,
17766 OKL_ST_GEN_TMPT_SETS gts
17767 WHERE
17768 khr.pdt_id = pdt.id AND
17769 pdt.aes_id = aes.id AND
17770 aes.gts_id = gts.id AND
17771 khr.id = p_chr_id;
17772
17773
17774 -- Code added by HKPATEL for user defined streams
17775 -- Accrual Streams for Reporting product
17776
17777 --l_dependent_rep_sty_rec dependent_rep_sty_id_csr%ROWTYPE;
17778
17779 l_dependent_sty_name VARCHAR2(30);
17780
17781 -- nikshah -- Bug # 5484903 Fixed,
17782 -- Removed CURSOR primary_sty_id_csr definition
17783
17784
17785 --added by bkatraga for residual streams. Bug 4274539
17786 l_primary_sty_id OKL_ST_GEN_TMPT_LNS.PRIMARY_STY_ID%TYPE;
17787
17788 --To get the styid for primary stream purpose Residual Value
17789 CURSOR get_residual_primary_sty_id (l_pdt_id NUMBER, l_contract_start_date DATE)
17790 IS
17791 SELECT PRIMARY_STY_ID
17792 FROM OKL_STRM_TMPT_LINES_UV STL
17793 WHERE STL.PRIMARY_YN = 'Y'
17794 AND STL.PDT_ID = l_pdt_id
17795 AND (STL.START_DATE <= l_contract_start_date)
17796 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
17797 AND PRIMARY_STY_PURPOSE = 'RESIDUAL_VALUE';
17798 -- end bkatraga
17799
17800
17801 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
17802
17803 -- Added code ends here
17804
17805
17806 l_pdtv_rec pdtv_rec_type;
17807 lx_pdt_param_rec pdt_param_rec_type;
17808 l_ast_dtl_tbl ast_dtl_tbl_type;
17809 l_csm_lease_header okl_create_streams_pub.csm_lease_rec_type;
17810 l_csm_one_off_fee_tbl okl_create_streams_pub.csm_one_off_fee_tbl_type;
17811 l_csm_periodic_expenses_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
17812 l_csm_yields_tbl okl_create_streams_pub.csm_yields_tbl_type;
17813 l_csm_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
17814 l_req_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
17815 l_csm_line_details_tbl okl_create_streams_pub.csm_line_details_tbl_type;
17816 l_rents_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
17817 l_line_rec l_line_rec_csr_lease%ROWTYPE;
17818 l_hdr_rec l_hdr_csr_lease%ROWTYPE;
17819 l_rl_rec l_sll_csr_lease%ROWTYPE;
17820 l_hdrrl_rec l_hdrrl_csr_lease%ROWTYPE;
17821 l_rl_rec1 l_slh_csr_lease%ROWTYPE;
17822 l_txtrans_rec l_txtrans_csr_lease%ROWTYPE;
17823 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
17824 l_strm_name_rec strm_name_csr_lease%ROWTYPE;
17825 l_ib_rec ib_csr_lease%ROWTYPE;
17826 l_strmid_rec l_strmid_csr_lease%ROWTYPE;
17827 l_adrconv_rec l_adrconv_csr%ROWTYPE;
17828 l_days_in_month_code OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
17829 l_days_in_yr_code OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
17830
17831 -- Start fix for bug 6858487
17832 l_orig_chr_id OKC_K_HEADERS_B.ID%TYPE;
17833 l_orig_cle_id OKC_K_LINES_B.ID%TYPE;
17834
17835 -- Get Line ID in rebook copy that was copied from LINE the original contract
17836 -- cp_rbk_chr_id is the rebook copy contract
17837 -- cp_ole_id is original contract line ID
17838 CURSOR c_get_orig_line_id (cp_rbk_chr_id IN okc_k_headers_b.id%type
17839 , cp_ole_id IN OKC_K_LINES_B.ID%TYPE) is
17840 SELECT --cle.id new_cle_id
17841 cle.orig_system_id1
17842 FROM okc_k_lines_b cle
17843 ,okc_k_lines_b ole
17844 WHERE cle.dnz_chr_id=cp_rbk_chr_id
17845 and cle.id = cp_ole_id
17846 and ole.lse_id = cle.lse_id
17847 and ole.id=cle.orig_system_id1;
17848
17849 -- End fix for bug 6858487
17850
17851 BEGIN
17852 --Added by kthiruva for Debugging
17853 write_to_log('Inside procedure extract_params_lease_deal');
17854
17855 x_return_status := OKL_API.G_RET_STS_SUCCESS;
17856 -- Call start_activity to create savepoint, check compatibility
17857 -- and initialize message list
17858 x_return_status := OKL_API.START_ACTIVITY (
17859 l_api_name
17860 ,p_init_msg_list
17861 ,'_PVT'
17862 ,x_return_status);
17863 -- Check if activity started successfully
17864 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17865 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17866 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17867 RAISE OKL_API.G_EXCEPTION_ERROR;
17868 END IF;
17869 -- Validate the payments
17870 --Added by kthiruva for Debugging
17871 write_to_log('Prior to the call to validate_payments');
17872 validate_payments(p_api_version => p_api_version,
17873 p_init_msg_list => p_init_msg_list,
17874 x_return_status => x_return_status,
17875 x_msg_count => x_msg_count,
17876 x_msg_data => x_msg_data,
17877 p_khr_id => p_chr_id,
17878 p_paym_tbl => l_pay_tbl);
17879
17880 --Added by kthiruva for Debugging
17881 write_to_log('After the call to validate_payments, the return status is :'||x_return_status);
17882
17883 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17884 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17885 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17886 RAISE OKL_API.G_EXCEPTION_ERROR;
17887 END IF;
17888 i := 0; j := 0; k := 0; l := 0; m := 0;
17889
17890 OPEN l_hdr_pdt_csr(p_chr_id);
17891 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
17892 CLOSE l_hdr_pdt_csr;
17893
17894 --get day convention info : mansrini
17895 OPEN get_day_conv_on_contrct;
17896 FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
17897 CLOSE get_day_conv_on_contrct;
17898
17899 --Added by srsreeni for bug6076113
17900 -- IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
17901 IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
17902 --srsreeni bug6076113 ends
17903 THEN
17904 OPEN get_day_conv_on_sgt;
17905 FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
17906 CLOSE get_day_conv_on_sgt;
17907 END IF;
17908
17909
17910 -- get header info
17911 OPEN l_hdr_csr_lease(p_chr_id);
17912 FETCH l_hdr_csr_lease into l_hdr_rec;
17913 IF l_hdr_csr_lease%NOTFOUND THEN
17914 --Added by kthiruva for Debugging
17915 write_to_log('Cursor l_hdr_csr_lease not found');
17916 okl_api.set_message(p_app_name => G_APP_NAME,
17917 p_msg_name => G_LLA_NO_MATCHING_RECORD,
17918 p_token1 => G_COL_NAME_TOKEN,
17919 p_token1_value => 'Contract id');
17920 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17921 END IF;
17922 CLOSE l_hdr_csr_lease;
17923 -- get header rule info
17924 OPEN l_hdrrl_csr_lease('LATOWN', 'LATOWN', TO_NUMBER(p_chr_id));
17925 FETCH l_hdrrl_csr_lease into l_hdrrl_rec;
17926 IF l_hdrrl_csr_lease%NOTFOUND THEN
17927 --Added by kthiruva for Debugging
17928 write_to_log('Cursor l_hdrrl_csr_lease not found');
17929 okl_api.set_message(p_app_name => G_APP_NAME,
17930 p_msg_name => G_LLA_NO_MATCHING_RECORD,
17931 p_token1 => G_COL_NAME_TOKEN,
17932 p_token1_value => 'Contract id');
17933 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17934 END IF;
17935 CLOSE l_hdrrl_csr_lease;
17936 l_csm_lease_header.irs_tax_treatment_method := l_hdrrl_rec.RULE_INFORMATION1;
17937 l_lease_tax_owner := l_hdrrl_rec.RULE_INFORMATION1;
17938 IF p_deal_type IS NULL THEN
17939 l_deal_type := l_hdr_rec.deal_type;
17940 ELSE
17941 l_deal_type := p_deal_type;
17942 END IF;
17943 l_csm_lease_header.khr_id := p_chr_id;
17944 l_csm_lease_header.date_payments_commencement := l_hdr_rec.start_date;
17945 l_csm_lease_header.fasb_acct_treatment_method := l_deal_type;
17946 l_csm_lease_header.date_delivery := l_hdr_rec.expected_delivery_date;
17947 l_csm_lease_header.term := l_hdr_rec.term;
17948 l_csm_lease_header.pdt_id := l_hdr_rec.pid;
17949 -- to send the right sif code
17950 OPEN l_financed_type_csr (chrId => p_chr_id);
17951 FETCH l_financed_type_csr INTO ln_fin_yn;
17952 CLOSE l_financed_type_csr;
17953 IF ln_fin_yn = 1 THEN
17954 l_csm_lease_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_BOTH;
17955 ELSIF ln_fin_yn = 0 THEN
17956 l_csm_lease_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_LESSOR;
17957 END IF;
17958 -- to get the locatin of the asset
17959 OPEN ib_csr_lease(TO_NUMBER(p_chr_id));
17960 FETCH ib_csr_lease into l_ib_rec;
17961 IF ib_csr_lease%NOTFOUND THEN
17962 --Added by kthiruva for Debugging
17963 write_to_log('Cursor ib_csr_lease not found');
17964 okl_api.set_message(p_app_name => G_APP_NAME,
17965 p_msg_name => G_LLA_NO_MATCHING_RECORD,
17966 p_token1 => G_COL_NAME_TOKEN,
17967 p_token1_value => 'Contract id');
17968 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17969 END IF;
17970 CLOSE ib_csr_lease;
17971 l_csm_lease_header.country := l_ib_rec.country;
17972 l_csm_lease_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_BOOKING;
17973 l_csm_lease_header.rvi_yn := OKL_CREATE_STREAMS_PUB.G_FND_NO;
17974 -- get header rule info
17975 OPEN l_hdrrl_csr_lease('LARVIN', 'LARVAU', TO_NUMBER(p_chr_id));
17976 FETCH l_hdrrl_csr_lease into l_hdrrl_rec;
17977 CLOSE l_hdrrl_csr_lease;
17978 IF l_hdrrl_rec.RULE_INFORMATION1 = 'Y' THEN
17979 IF(g_rep_req_yn = 'Y') THEN
17980 get_primary_stream_type(
17981 p_khr_id =>p_chr_id,
17982 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
17983 p_primary_sty_purpose =>'RESIDUAL_VALUE_INSURANCE_PREMIUM',
17984 x_return_status => x_return_status,
17985 x_primary_sty_id =>l_sty_id );
17986 IF x_return_status = 'E' THEN
17987 x_return_status := 'S';
17988 END IF;
17989 ELSE
17990 get_primary_stream_type (
17991 p_khr_id => p_chr_id,
17992 p_primary_sty_purpose => 'RESIDUAL_VALUE_INSURANCE_PREMIUM',
17993 x_return_status => x_return_status,
17994 x_primary_sty_id =>l_sty_id
17995 );
17996 IF x_return_status = 'E' THEN
17997 x_return_status := 'S';
17998 END IF;
17999 END IF;
18000 IF (l_sty_id.id IS NOT NULL) THEN
18001 m := m + 1;
18002 --l_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
18003 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
18004 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
18005 END IF;
18006 l_csm_lease_header.rvi_yn := OKL_CREATE_STREAMS_PUB.G_FND_YES;
18007 -- get header rule info
18008 OPEN l_hdrrl_csr_lease('LARVIN', 'LARVAM', TO_NUMBER(p_chr_id));
18009 FETCH l_hdrrl_csr_lease into l_hdrrl_rec;
18010 CLOSE l_hdrrl_csr_lease;
18011 l_csm_lease_header.rvi_rate := TO_NUMBER(nvl(l_hdrrl_rec.RULE_INFORMATION4,'0'));
18012 END IF;
18013 -- Purchase option,
18014 OPEN l_hdrrl_csr_lease('AMTFOC', 'AMBPOC', TO_NUMBER(p_chr_id));
18015 FETCH l_hdrrl_csr_lease into l_hdrrl_rec;
18016 CLOSE l_hdrrl_csr_lease;
18017 l_purchase_option := l_hdrrl_rec.RULE_INFORMATION11;
18018 IF (l_hdrrl_rec.rule_information1 IS NOT NULL OR
18019 l_hdrrl_rec.rule_information1 <> okl_api.g_miss_char) AND
18020 LTRIM(RTRIM(l_hdrrl_rec.rule_information1)) = 'USE_FORMULA' AND
18021 (l_hdrrl_rec.rule_information3 IS NOT NULL OR
18022 l_hdrrl_rec.rule_information3 <> okl_api.g_miss_char) THEN
18023 -- Executing the formula defined
18024 --Added by kthiruva for Debugging
18025 write_to_log('Prior to the call to execute_formula');
18026 execute_formula(p_api_version => l_api_version,
18027 p_init_msg_list => p_init_msg_list,
18028 x_return_status => l_return_status,
18029 x_msg_count => x_msg_count,
18030 x_msg_data => x_msg_data,
18031 p_formula_name => LTRIM(RTRIM(l_hdrrl_rec.rule_information3)),
18032 p_contract_id => p_chr_id,
18033 p_line_id => NULL,
18034 x_value => l_purchase_option_amount);
18035 --Added by kthiruva for Debugging
18036 write_to_log('After the call to execute_formula, the return status is :'||l_return_status);
18037 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18038 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18039 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
18040 RAISE OKL_API.G_EXCEPTION_ERROR;
18041 END IF;
18042 ELSIF (l_hdrrl_rec.rule_information1 IS NOT NULL OR
18043 l_hdrrl_rec.rule_information1 <> okl_api.g_miss_char) AND
18044 LTRIM(RTRIM(l_hdrrl_rec.rule_information1)) = 'USE_FIXED_AMOUNT' AND
18045 (l_hdrrl_rec.rule_information2 IS NOT NULL OR
18046 l_hdrrl_rec.rule_information2 <> okl_api.g_miss_char) THEN
18047 l_purchase_option_amount := TO_NUMBER(l_hdrrl_rec.RULE_INFORMATION2);
18048 ELSE
18049 l_purchase_option := 'NONE';
18050 l_purchase_option_amount := NULL;
18051 END IF;
18052
18053 -- Added by bkatraga for bug 4194641
18054 IF(l_purchase_option IS NOT NULL AND l_purchase_option = 'FMV') THEN
18055 l_purchase_option_amount := NULL;
18056 END IF;
18057 -- end bkatraga
18058
18059 -- Added by kthiruva for Stream Performance
18060 -- This cursor was moved outside the loop to improve performance
18061 -- Get the org id
18062 --Bug 4346646 - Start of Changes
18063 OPEN get_org_id(p_chr_id => p_chr_id);
18064 FETCH get_org_id INTO ln_org_id,
18065 lv_currency_code;
18066 IF get_org_id%NOTFOUND THEN
18067 --Added by kthiruva for Debugging
18068 write_to_log('Cursor get_org_id not found');
18069 okl_api.set_message(p_app_name => G_APP_NAME,
18070 p_msg_name => G_LLA_NO_MATCHING_RECORD,
18071 p_token1 => G_COL_NAME_TOKEN,
18072 p_token1_value => 'Contract id');
18073 x_return_status := OKL_API.G_RET_STS_ERROR;
18074 END IF;
18075 CLOSE get_org_id;
18076 --Bug 4346646 - End of Changes
18077
18078 -- fetching the line record
18079 --Added by kthiruva for Debugging
18080 write_to_log('Fetching the line details for the contract ');
18081 FOR l_line_rec in l_line_rec_csr_lease ( p_chr_id , 'FREE_FORM1') LOOP
18082 i := i + 1;
18083 l_csm_line_details_tbl(i).kle_asset_id := l_line_rec.id;
18084 l_csm_line_details_tbl(i).state_depre_dmnshing_value_rt := 0; -- TBD
18085 l_csm_line_details_tbl(i).book_depre_dmnshing_value_rt := 0; -- TBD
18086 l_csm_line_details_tbl(i).residual_guarantee_method := l_line_rec.residual_code;
18087 l_csm_line_details_tbl(i).fed_depre_dmnshing_value_rate := 0; -- TBD
18088 l_csm_line_details_tbl(i).purchase_option := l_purchase_option;
18089 l_csm_line_details_tbl(i).purchase_option_amount := l_purchase_option_amount;
18090 IF l_line_rec.ste_code = 'TERMINATED' THEN
18091 l_csm_line_details_tbl(i).residual_date := l_line_rec.date_terminated;
18092 ELSE
18093 l_csm_line_details_tbl(i).residual_date := NULL;
18094 END IF;
18095 IF l_line_rec.residual_value IS NULL THEN
18096 l_csm_line_details_tbl(i).residual_amount := 0;
18097 END IF; -- Added by gboomina for BUG 4384784
18098 -- calling the asset mangement API
18099 -- to get the residual value of Terminated line
18100 -- Changed the ELSIF to IF by gboomina for BUG 4384784
18101 IF l_line_rec.ste_code = 'TERMINATED' THEN
18102 -- Start fix for bug 6858487
18103 retrive_orig_hdr_id(p_chr_id, l_orig_chr_id);
18104 IF l_orig_chr_id <> p_chr_id THEN
18105 OPEN c_get_orig_line_id(cp_rbk_chr_id => p_chr_id,
18106 cp_ole_id => l_line_rec.id);
18107 FETCH c_get_orig_line_id INTO l_orig_cle_id;
18108 CLOSE c_get_orig_line_id;
18109 ELSE
18110 l_orig_cle_id := l_line_rec.id;
18111 END IF;
18112 l_csm_line_details_tbl(i).residual_amount := okl_am_util_pvt.get_actual_asset_residual(p_khr_id => l_orig_chr_id,
18113 p_kle_id => l_orig_cle_id);
18114
18115 -- End fix for bug 6858487
18116 -- Changed the ELSE to ELSIF condition by gboomina for BUG 4384784
18117 ELSIF l_line_rec.residual_value IS NOT NULL THEN
18118 l_csm_line_details_tbl(i).residual_amount := l_line_rec.residual_value;
18119 END IF;
18120 IF l_line_rec.delivered_date IS NULL THEN
18121 l_csm_line_details_tbl(i).date_delivery := l_line_rec.start_date;
18122 ELSE
18123 l_csm_line_details_tbl(i).date_delivery := l_line_rec.delivered_date;
18124 END IF;
18125 l_csm_line_details_tbl(i).residual_guarantee_amount := l_line_rec.residual_grnty_amount;
18126 --Modified by kthiruva for Pricing Enhancements
18127 --Currently the funding date defaults to the start date for all asset lines
18128 --The funding date is now a user enterable value and hence date_funding should
18129 --obtain its value from the date_funding_expected column.
18130 l_csm_line_details_tbl(i).date_funding := NVL(l_line_rec.date_funding_expected,l_line_rec.start_date);
18131
18132 l_csm_line_details_tbl(i).description := l_line_rec.item_description;
18133
18134 -- we need to set the context since the records in
18135 -- OKL_SYS_ACCT_OPTS table are stored with regards to the context
18136 -- To calculate basis percent for Corp or tax book
18137 -- we need the Line capital amount.
18138 -- Now since new version of the pricing eng
18139 -- NET subsidies , amount of sudsidy is sent to
18140 -- pricing eng as percent so we exclude the discout as below
18141 -- Now we are fetching the line capital amount and not using the
18142 -- formulas.
18143 -- Get line Discount
18144 l_discount := 0;
18145 FOR l_subsidy_rec IN get_dis_amt_csr_lease(p_chr_id => p_chr_id, p_cle_id => l_line_rec.id) LOOP
18146 IF(l_subsidy_rec.SUBSIDY_OVERRIDE_AMOUNT IS NULL) THEN
18147 l_discount := l_discount + NVL(l_subsidy_rec.AMOUNT,0);
18148 ELSE
18149 l_discount := l_discount + l_subsidy_rec.SUBSIDY_OVERRIDE_AMOUNT;
18150 END IF;
18151 END LOOP;
18152
18153 l_value := l_line_rec.capital_amount;
18154 ln_value := l_value + NVL(l_discount,0);
18155
18156 --Made changes by bkatraga for bug 5243586
18157 --Commenting the code below as Trade-in amount is already deducted from the asset cost during authoring itself
18158 /*
18159 --Added by kthiruva for Pricing Enhancements
18160 --If a tradein_amount is defined on an asset, it needs to be deducted from
18161 --the asset cost
18162 IF l_line_rec.tradein_amount is not null THEN
18163 ln_value := ln_value - l_line_rec.tradein_amount;
18164 END IF;
18165 --End of Changes for Pricing Enhancements
18166 */
18167 --end changes by bkatraga
18168
18169 -- Modified by RGOOTY Bug 4629365: Start
18170 l_csm_line_details_tbl(i).capitalize_down_payment_yn := l_line_rec.capitalize_down_payment_yn;
18171 -- Modified by RGOOTY Bug 4629365: End
18172 --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
18173 --Bug 4738011 - Start of Changes
18174 IF l_line_rec.capitalize_down_payment_yn = 'Y' THEN
18175 l_csm_line_details_tbl(i).down_payment_amount := l_line_rec.capital_reduction;
18176 --If the Down Payment is capitalised then we fetch and request stream of Type Capital Reduction
18177 --vdamerla Bug6149951 starts
18178 IF l_line_rec.ste_code <> 'TERMINATED' THEN
18179
18180 get_primary_stream_type
18181 (
18182 p_khr_id => p_chr_id,
18183 p_primary_sty_purpose => 'CAPITAL_REDUCTION',
18184 x_return_status => x_return_status,
18185 x_primary_sty_id =>l_sty_id
18186 );
18187 IF x_return_status = 'E' THEN
18188 x_return_status := 'S';
18189 END IF;
18190
18191 IF (l_sty_id.id IS NOT NULL ) THEN
18192 m := m + 1;
18193 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
18194 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
18195 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
18196 END IF;
18197 END IF;
18198 --vdamerla Bug6149951 ends
18199 END IF;
18200
18201 --Modified by kthiruva for the Down Payment CR
18202 --Deducting the Capital Reduction is already being done by Authoring.Hence,commenting the code
18203 /*IF l_line_rec.capitalize_down_payment_yn = 'Y' AND l_line_rec.capital_reduction IS NOT NULL THEN
18204 l_csm_line_details_tbl(i).asset_cost := ln_value - l_line_rec.capital_reduction;
18205 ELSE
18206 l_csm_line_details_tbl(i).asset_cost := ln_value;
18207 END IF;*/
18208 l_csm_line_details_tbl(i).asset_cost := ln_value;
18209 --Bug 4738011 - End of Changes
18210
18211 -- Now we are dealing with corp book and building
18212 -- Book Depreciation Stream info
18213 l_ast_dtl_tbl.delete;
18214 --Added by kthiruva for Debugging
18215 write_To_log('Prior to the call to okl_activate_asset_pvt.get_pricing_parameters');
18216 okl_activate_asset_pvt.get_pricing_parameters(
18217 p_api_version => p_api_version,
18218 p_init_msg_list => p_init_msg_list,
18219 x_return_status => x_return_status,
18220 x_msg_count => x_msg_count,
18221 x_msg_data => x_msg_data,
18222 p_chr_id => p_chr_id,
18223 p_cle_id => l_line_rec.id,
18224 x_ast_dtl_tbl => l_ast_dtl_tbl);
18225 --Added by kthiruva for Debugging
18226 write_To_log('After the call to okl_activate_asset_pvt.get_pricing_parameters, return status is :'||x_return_status);
18227 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18228 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
18229 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
18230 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
18231 END IF;
18232 -- bug 4194673 fixed by HKPATEL
18233 IF l_ast_dtl_tbl.COUNT > 0 THEN
18234 l_book_type_code := NULL;
18235 FOR j IN l_ast_dtl_tbl.FIRST..l_ast_dtl_tbl.LAST LOOP
18236 IF l_ast_dtl_tbl(j).book_class = 'CORPORATE' THEN
18237 l_book_type_code := l_ast_dtl_tbl(j).book_type_code;
18238 END IF;
18239 END LOOP;
18240 END IF;
18241
18242 IF l_ast_dtl_tbl.COUNT > 0 THEN
18243 FOR j IN l_ast_dtl_tbl.FIRST..l_ast_dtl_tbl.LAST LOOP
18244 -- Thru this we will know if the there is reporting product or not
18245 -- and the g_rep_yn flag will let us know that there reporting streams
18246 -- requested so we try to generate the reporting dep streasm based on the
18247 -- the belwo condition.
18248 IF l_hdr_rec.report_pdt_id <> -1 AND
18249 g_rep_req_yn = 'Y' AND
18250 l_ast_dtl_tbl(j).book_class = 'TAX' THEN
18251 l_pdtv_rec.id := l_hdr_rec.report_pdt_id;
18252 --Added by kthiruva for Debugging
18253 write_to_log('Prior to the call to okl_setupproducts_pvt.getpdt_parameters');
18254 okl_setupproducts_pvt.getpdt_parameters(
18255 p_api_version => p_api_version,
18256 p_init_msg_list => p_init_msg_list,
18257 x_return_status => x_return_status,
18258 x_msg_count => x_msg_count,
18259 x_msg_data => x_msg_data,
18260 p_pdtv_rec => l_pdtv_rec,
18261 x_no_data_found => lx_no_data_found,
18262 p_pdt_parameter_rec => lx_pdt_param_rec);
18263
18264 --Added by kthiruva for Debugging
18265 write_to_log('After the call to okl_setupproducts_pvt.getpdt_parameters, the return status is :'||x_return_status);
18266 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18267 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
18268 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
18269 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
18270 END IF;
18271 -- bug 4194673 fixed by HKPATEL
18272 x_return_status := is_rep_pdt(--p_asset_number => l_line_rec.name,
18273 p_corp_book => l_book_type_code,
18274 x_mg_tax_yn => lv_mg_tax_yn);
18275 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18276 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
18277 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
18278 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
18279 END IF;
18280 -- If the reporting book is of deal type and if the
18281 -- if there is multi gaap tax book create in okl_txd_assets_b table
18282 -- then we go and generate the book dep streams for the Mg tax book
18283 -- else we do not generate stream for the Multi gaap
18284 IF lx_pdt_param_rec.deal_type = 'LEASEOP' AND
18285 lv_mg_tax_yn = 'Y' THEN
18286 -- Now we are determing the Basis percent for the corp book
18287 -- Basis percent = Depreciable Cost (for each asset defined corp book)
18288 -- / Total Asset Capital Cost
18289 l_basis_percent := 0;
18290 l_rnd_basis_percent := 0;
18291 l_salvage := 0;
18292 IF (l_ast_dtl_tbl(j).cost IS NULL OR
18293 l_ast_dtl_tbl(j).cost = 0 ) THEN
18294 l_basis_percent := 0;
18295 ELSE
18296 -- Now we are including Trade In, Capital Reduction, Capitalized Fee,
18297 -- Capitalized Interest and Discount for getting the corporate depreciation cost
18298 -- Now since new version of the pricing eng
18299 -- NET subsidies , amount of sudsidy is sent to
18300 -- pricing eng as percent so we exclude the discout as below
18301 -- l_tax_dep_cost := l_ast_dtl_tbl(j).cost - NVL(l_tradein,0) - NVL(l_capreduc,0) + NVL(l_feecap,0) + NVL(l_capint,0);
18302 --Commneted the above by virtue of Authoring API
18303 -- getting the Actual cost going into /in FA
18304 l_tax_dep_cost := l_ast_dtl_tbl(j).cost + NVL(l_discount,0);
18305 l_basis_percent := (NVL(l_tax_dep_cost,0)/ln_value) * 100;
18306 END IF;
18307 IF l_basis_percent <> 0 THEN
18308 -- Now we round the Basis Percent
18309 l_rnd_basis_percent := OKL_ACCOUNTING_UTIL.round_amount(p_currency_code => lv_currency_code,
18310 p_amount => l_basis_percent);
18311 ELSIF l_basis_percent = 0 THEN
18312 l_rnd_basis_percent := 0;
18313 END IF;
18314 -- Now we are determing the Salvage value
18315 l_salvage := NVL(l_ast_dtl_tbl(j).salvage_value,0);
18316 IF( l_salvage = 0) Then
18317 l_salvage := (NVL(l_ast_dtl_tbl(j).percent_salvage_value,0) * ln_value)/100;
18318 END IF;
18319 l_csm_line_details_tbl(i).book_adr_convention := l_ast_dtl_tbl(j).prorate_convention_code;
18320 l_csm_line_details_tbl(i).book_term := l_ast_dtl_tbl(j).life_in_months;
18321 l_csm_line_details_tbl(i).book_method := TO_CHAR(l_ast_dtl_tbl(j).deprn_method_id);
18322 l_csm_line_details_tbl(i).book_salvage := l_salvage;
18323 l_csm_line_details_tbl(i).date_book := l_ast_dtl_tbl(j).in_service_date;
18324 l_csm_line_details_tbl(i).book_basis_percent := l_rnd_basis_percent;
18325 -- AND condition added below by HKPATEL for bug 4194673
18326 IF l_lease_tax_owner = 'LESSOR' AND l_rnd_basis_percent <> 0 THEN
18327 IF(g_rep_req_yn = 'Y') THEN
18328 get_primary_stream_type
18329 (
18330 p_khr_id =>p_chr_id,
18331 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
18332 p_primary_sty_purpose =>'BOOK_DEPRECIATION',
18333 x_return_status => x_return_status,
18334 x_primary_sty_id =>l_sty_id
18335 );
18336 IF x_return_status = 'E' THEN
18337 x_return_status := 'S';
18338 END IF;
18339 ELSE
18340 get_primary_stream_type
18341 (
18342 p_khr_id => p_chr_id,
18343 p_primary_sty_purpose => 'BOOK_DEPRECIATION',
18344 x_return_status => x_return_status,
18345 x_primary_sty_id =>l_sty_id
18346 );
18347 IF x_return_status = 'E' THEN
18348 x_return_status := 'S';
18349 END IF;
18350 END IF;
18351 --vdamerla Bug6149951 starts
18352 IF l_line_rec.ste_code <> 'TERMINATED' THEN
18353 IF (l_sty_id.id IS NOT NULL ) THEN
18354 m := m + 1;
18355 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
18356 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
18357 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
18358 END IF;
18359 END IF;--srsreeni Bug6149951 ends
18360 END IF;
18361 END IF;
18362 ELSIF l_ast_dtl_tbl(j).book_class = 'CORPORATE' AND
18363 g_rep_req_yn = 'N' THEN
18364 -- Now we are determing the Basis percent for the corp book
18365 -- Basis percent = Depreciable Cost (for each asset defined corp book)
18366 -- / Total Asset Capital Cost
18367 IF (l_ast_dtl_tbl(j).cost IS NULL OR
18368 l_ast_dtl_tbl(j).cost = 0 ) THEN
18369 l_basis_percent := 0;
18370 ELSE
18371 -- Now we are including Trade In, Capital Reduction, Capitalized Fee,
18372 -- Capitalized Interest and Discount for getting the corporate depreciation cost
18373 -- Now since new version of the pricing eng
18374 -- NET subsidies , amount of sudsidy is sent to
18375 -- pricing eng as percent so we exclude the discout as below
18376 -- l_corp_dep_cost := l_ast_dtl_tbl(j).cost - NVL(l_tradein,0) - NVL(l_capreduc,0) + NVL(l_feecap,0) + NVL(l_capint,0);
18377 --Commneted the above by virtue of Authoring API
18378 -- getting the Actual cost going into /in FA
18379 l_corp_dep_cost := l_ast_dtl_tbl(j).cost + NVL(l_discount,0);
18380 l_basis_percent := (NVL(l_corp_dep_cost,0) / ln_value) * 100;
18381 END IF;
18382 IF l_basis_percent <> 0 THEN
18383 -- Now we round the Basis Percent
18384 l_rnd_basis_percent := OKL_ACCOUNTING_UTIL.round_amount(p_currency_code => lv_currency_code,
18385 p_amount => l_basis_percent);
18386 ELSIF l_basis_percent = 0 THEN
18387 l_rnd_basis_percent := 0;
18388 END IF;
18389 -- Now we are determing the Salvage value
18390 l_salvage := nvl(l_ast_dtl_tbl(j).salvage_value,0);
18391 IF( l_salvage = 0) Then
18392 l_salvage := (NVL(l_ast_dtl_tbl(j).percent_salvage_value,0) * ln_value)/100.00;
18393 END IF;
18394 l_csm_line_details_tbl(i).book_adr_convention := l_ast_dtl_tbl(j).prorate_convention_code;
18395 l_csm_line_details_tbl(i).book_term := l_ast_dtl_tbl(j).life_in_months;
18396 l_csm_line_details_tbl(i).book_method := TO_CHAR(l_ast_dtl_tbl(j).deprn_method_id);
18397 l_csm_line_details_tbl(i).book_salvage := l_salvage;
18398 l_csm_line_details_tbl(i).date_book := l_ast_dtl_tbl(j).in_service_date;
18399 l_csm_line_details_tbl(i).book_basis_percent := l_rnd_basis_percent;
18400 -- AND condition added below by HKPATEL for bug 4194673
18401 IF l_lease_tax_owner = 'LESSOR' AND l_rnd_basis_percent <> 0 THEN
18402 -- vdamerla Forward Port Bug6149951
18403 --vdamerla Bug6149951 starts
18404 IF l_line_rec.ste_code <> 'TERMINATED' THEN
18405
18406 IF(g_rep_req_yn = 'Y') THEN
18407 get_primary_stream_type
18408 (
18409 p_khr_id =>p_chr_id,
18410 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
18411 p_primary_sty_purpose =>'BOOK_DEPRECIATION',
18412 x_return_status => x_return_status,
18413 x_primary_sty_id =>l_sty_id
18414 );
18415 IF x_return_status = 'E' THEN
18416 x_return_status := 'S';
18417 END IF;
18418 ELSE
18419 get_primary_stream_type
18420 (
18421 p_khr_id => p_chr_id,
18422 p_primary_sty_purpose => 'BOOK_DEPRECIATION',
18423 x_return_status => x_return_status,
18424 x_primary_sty_id =>l_sty_id
18425 );
18426 IF x_return_status = 'E' THEN
18427 x_return_status := 'S';
18428 END IF;
18429 END IF;
18430 --l_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
18431 IF (l_sty_id.id IS NOT NULL ) THEN
18432 m := m + 1;
18433 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
18434 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
18435 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
18436 END IF;
18437 -- vdamerla Forward Port Bug6149951
18438 END IF;--vdamerla Bug6149951 ends
18439 END IF;
18440 ELSIF l_ast_dtl_tbl(j).book_class = 'TAX' AND
18441 g_rep_req_yn = 'N' THEN
18442 -- Now we are changing the approach for generating Tax book Depreciation streams
18443 -- by the virtue of Bug#3447917 so changes because of bug#3066346 is reverted.
18444 -- We need to validate tax book for a given asset number
18445 -- and also validate if there has been setups done for these
18446 -- tax books
18447 -- Now we are dealing with Tax book and building
18448 -- Federal/State Depreciation Stream info
18449 -- Since there could be more than one tax book we need to loop for each
18450 -- tax book
18451 -- Now we are determing the Basis percent for the Tax book
18452 -- Basis percent = Depreciable Cost (for each asset defined tax book)
18453 -- / Total Asset Capital Cost
18454 -- Intialize the variable
18455 l_basis_percent := 0;
18456 l_rnd_basis_percent := 0;
18457 l_salvage := 0;
18458 IF (l_ast_dtl_tbl(j).cost IS NULL OR
18459 l_ast_dtl_tbl(j).cost = 0) THEN
18460 l_basis_percent := 0;
18461 ELSE
18462 -- Now we are including Trade In, Capital Reduction, Capitalized Fee,
18463 -- Capitalized Interest and Discount for getting the Tax book cost
18464 -- Now since new version of the pricing eng
18465 -- NET subsidies , amount of sudsidy is sent to
18466 -- pricing eng as percent so we exclude the discout as below
18467 -- l_tax_dep_cost := l_ast_dtl_tbl(j).cost - NVL(l_tradein,0) - NVL(l_capreduc,0) + NVL(l_feecap,0) + NVL(l_capint,0);
18468 --Commneted the above by virtue of Authoring API
18469 -- getting the Actual cost going into /in FA
18470 l_tax_dep_cost := l_ast_dtl_tbl(j).cost + NVL(l_discount,0);
18471 l_basis_percent := (NVL(l_tax_dep_cost,0) / ln_value) * 100;
18472 END IF;
18473 IF l_basis_percent <> 0 THEN
18474 -- Now we round the Basis Percent
18475 l_rnd_basis_percent := OKL_ACCOUNTING_UTIL.round_amount(p_currency_code => lv_currency_code,
18476 p_amount => l_basis_percent);
18477 ELSIF l_basis_percent = 0 THEN
18478 l_rnd_basis_percent := 0;
18479 END IF;
18480 -- Now we are determing the Salvage value
18481 l_salvage := nvl(l_ast_dtl_tbl(j).salvage_value,0);
18482 IF( l_salvage = 0) Then
18483 l_salvage := (NVL(l_ast_dtl_tbl(j).percent_salvage_value,0) * ln_value)/100;
18484 END IF;
18485 -- we build both federal and state Depreciation Stream
18486 FOR l_txtrans_rec in l_txtrans_csr_lease (l_ast_dtl_tbl(j).book_type_code) LOOP
18487 IF l_txtrans_rec.value IS NOT NULL AND
18488 l_txtrans_rec.value = 'FEDERAL' THEN
18489 l_csm_line_details_tbl(i).fed_depre_adr_conve := l_ast_dtl_tbl(j).prorate_convention_code;
18490 l_csm_line_details_tbl(i).fed_depre_term := l_ast_dtl_tbl(j).life_in_months;
18491 l_csm_line_details_tbl(i).fed_depre_method := TO_CHAR(l_ast_dtl_tbl(j).deprn_method_id);
18492 l_csm_line_details_tbl(i).fed_depre_salvage := l_salvage;
18493 l_csm_line_details_tbl(i).date_fed_depre := l_ast_dtl_tbl(j).in_service_date;
18494 l_csm_line_details_tbl(i).fed_depre_basis_percent := l_rnd_basis_percent;
18495 IF l_lease_tax_owner = 'LESSOR' THEN
18496 -- vdamerla Forward Port Bug61130937
18497 --vdamerla Bug61130937 starts
18498 IF l_line_rec.ste_code <> 'TERMINATED' THEN
18499 IF(g_rep_req_yn = 'Y') THEN
18500 get_primary_stream_type
18501 (
18502 p_khr_id =>p_chr_id,
18503 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
18504 p_primary_sty_purpose =>'FEDERAL_DEPRECIATION',
18505 x_return_status => x_return_status,
18506 x_primary_sty_id =>l_sty_id
18507 );
18508 IF x_return_status = 'E' THEN
18509 x_return_status := 'S';
18510 END IF;
18511 ELSE
18512 get_primary_stream_type
18513 (
18514 p_khr_id => p_chr_id,
18515 p_primary_sty_purpose => 'FEDERAL_DEPRECIATION',
18516 x_return_status => x_return_status,
18517 x_primary_sty_id =>l_sty_id
18518 );
18519 IF x_return_status = 'E' THEN
18520 x_return_status := 'S';
18521 END IF;
18522 END IF;
18523 --l_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
18524 IF (l_sty_id.id IS NOT NULL ) THEN
18525 m := m + 1;
18526 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
18527 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
18528 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
18529 END IF;
18530 END IF; --vdamerla Bug6149951 ends
18531 END IF;
18532 ELSIF l_txtrans_rec.value IS NOT NULL AND
18533 l_txtrans_rec.value = 'STATE' THEN
18534 l_csm_line_details_tbl(i).state_depre_adr_convent := l_ast_dtl_tbl(j).prorate_convention_code;
18535 l_csm_line_details_tbl(i).state_depre_term := l_ast_dtl_tbl(j).life_in_months;
18536 l_csm_line_details_tbl(i).state_depre_method := TO_CHAR(l_ast_dtl_tbl(j).deprn_method_id);
18537 l_csm_line_details_tbl(i).state_depre_salvage := l_salvage;
18538 l_csm_line_details_tbl(i).date_state_depre := l_ast_dtl_tbl(j).in_service_date;
18539 l_csm_line_details_tbl(i).state_depre_basis_percent := l_rnd_basis_percent;
18540 IF l_lease_tax_owner = 'LESSOR' THEN
18541 --vdamerla Bug61130937 starts
18542 IF l_line_rec.ste_code <> 'TERMINATED' THEN
18543 IF(g_rep_req_yn = 'Y') THEN
18544 get_primary_stream_type
18545 (
18546 p_khr_id =>p_chr_id,
18547 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
18548 p_primary_sty_purpose =>'STATE_DEPRECIATION',
18549 x_return_status => x_return_status,
18550 x_primary_sty_id =>l_sty_id
18551 );
18552 IF x_return_status = 'E' THEN
18553 x_return_status := 'S';
18554 END IF;
18555 ELSE
18556 get_primary_stream_type
18557 (
18558 p_khr_id => p_chr_id,
18559 p_primary_sty_purpose => 'STATE_DEPRECIATION',
18560 x_return_status => x_return_status,
18561 x_primary_sty_id =>l_sty_id
18562 );
18563 IF x_return_status = 'E' THEN
18564 x_return_status := 'S';
18565 END IF;
18566 END IF;
18567 --l_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
18568 IF (l_sty_id.id IS NOT NULL ) THEN
18569 m := m + 1;
18570 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
18571 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
18572 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
18573 END IF;
18574 END IF;--vdamerla Bug6149951 ends
18575 END IF;
18576 END IF;
18577 END LOOP;
18578 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18579 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
18580 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
18581 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
18582 END IF;
18583 END IF;
18584 END LOOP;
18585 ELSE
18586 okl_api.set_message(p_app_name => G_APP_NAME,
18587 p_msg_name => G_LLA_NO_MATCHING_RECORD,
18588 p_token1 => G_COL_NAME_TOKEN,
18589 p_token1_value => 'Asset Number : '||l_line_rec.name);
18590 x_return_status := OKL_API.G_RET_STS_ERROR;
18591 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
18592 END IF;
18593
18594
18595 -- added by bkatraga for residual streams. Bug 4274539
18596 IF(l_line_rec.residual_value IS NOT NULL) THEN
18597 -- To get the primary stream purpose Residual Value id into l_primary_sty_id
18598 OPEN get_residual_primary_sty_id(l_hdr_rec.pid, l_hdr_rec.start_date);
18599 FETCH get_residual_primary_sty_id INTO l_primary_sty_id;
18600 CLOSE get_residual_primary_sty_id;
18601 -- To check if the product is reporting one or not
18602 --vdamerla Bug61130937 starts
18603 IF l_line_rec.ste_code <> 'TERMINATED' THEN
18604
18605 IF(g_rep_req_yn = 'Y') THEN
18606 -- To get the dependant stream types of purpose Residual Value which have pricing name defined
18607 get_dependent_stream_types
18608 (
18609 p_khr_id =>p_chr_id,
18610 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
18611 p_primary_sty_id =>l_primary_sty_id,
18612 x_return_status => x_return_status,
18613 x_dependent_sty_id =>l_strm_type_id_tbl
18614 );
18615 IF x_return_status = 'E' THEN
18616 x_return_status := 'S';
18617 END IF;
18618 ELSE
18619 get_dependent_stream_types
18620 (
18621 p_khr_id =>p_chr_id,
18622 p_primary_sty_id =>l_primary_sty_id,
18623 x_return_status => x_return_status,
18624 x_dependent_sty_id =>l_strm_type_id_tbl
18625 );
18626 IF x_return_status = 'E' THEN
18627 x_return_status := 'S';
18628 END IF;
18629 END IF;
18630 -- Populate the dependant stream types
18631 IF l_strm_type_id_tbl.COUNT > 0 THEN
18632 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
18633 m := m + 1;
18634 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
18635 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
18636 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
18637 END LOOP;
18638 END IF;
18639 END IF;--vdamerla Bug6149951 ends
18640 END IF;
18641 -- end bkatraga
18642 FOR l_rl_rec1 in l_slh_csr_lease ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
18643 l_level_type := l_rl_rec1.object1_id1;
18644 OPEN strm_name_csr_lease ( l_level_type );
18645 FETCH strm_name_csr_lease into l_strm_name_rec;
18646 IF strm_name_csr_lease%NOTFOUND THEN
18647 x_return_status := OKL_API.G_RET_STS_ERROR;
18648 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
18649 END IF;
18650 CLOSE strm_name_csr_lease;
18651 l_strm_name := l_strm_name_rec.stream_type_purpose;
18652 --Added by srsreeni for bug5841892
18653 -- m := m + 1;
18654 -- l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
18655 --bug5841892 end of changes
18656 --vdamerla Bug61130937 starts
18657 IF l_line_rec.ste_code <> 'TERMINATED' THEN
18658 get_primary_pricing_name
18659 (
18660 p_khr_id =>p_chr_id,
18661 p_sty_id =>l_level_type,
18662 x_return_status =>x_return_status,
18663 x_primary_pricing_name =>l_pricing_name
18664 );
18665 IF x_return_status = 'E' THEN
18666 x_return_status := 'S';
18667 END IF;
18668 --Added by srsreeni for bug5841892
18669 if l_pricing_name is not null then
18670 m := m + 1;
18671 l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
18672 l_csm_stream_types_tbl(m).pricing_name := l_pricing_name;
18673 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
18674 end if;
18675 --bug5841892 end of changes
18676 --Commented as we want to generate all the dependents of RENT streams
18677 IF(g_rep_req_yn = 'Y') THEN
18678 get_dependent_stream_types
18679 (
18680 p_khr_id =>p_chr_id,
18681 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
18682 p_primary_sty_id =>l_level_type,
18683 x_return_status => x_return_status,
18684 x_dependent_sty_id =>l_strm_type_id_tbl
18685 );
18686 IF x_return_status = 'E' THEN
18687 x_return_status := 'S';
18688 END IF;
18689 ELSE
18690 get_dependent_stream_types
18691 (
18692 p_khr_id =>p_chr_id,
18693 p_primary_sty_id =>l_level_type,
18694 x_return_status => x_return_status,
18695 x_dependent_sty_id =>l_strm_type_id_tbl
18696 );
18697 IF x_return_status = 'E' THEN
18698 x_return_status := 'S';
18699 END IF;
18700 END IF;
18701 IF l_strm_type_id_tbl.COUNT > 0 THEN
18702 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
18703 m := m + 1;
18704 l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
18705 l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
18706 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
18707 END LOOP;
18708 END IF;
18709 END IF;--vdamerla Bug6149951 ends
18710 lv_diff_date := 'N';
18711 idx := 0;
18712 IF( UPPER(TRIM(l_strm_name)) = 'RENT' ) THEN
18713 FOR l_rl_rec in l_sll_csr_lease ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
18714 -- Start of Bug#3401024 modification BAKUCHIB
18715 IF FND_DATE.canonical_to_date(l_rl_rec.rule_information2) <> l_hdr_rec.start_date AND
18716 lv_diff_date = 'N' AND
18717 idx = 0 THEN
18718 j := j + 1;
18719 idx := idx + 1;
18720 l_rents_tbl(j).level_index_number := idx;
18721 l_rents_tbl(j).amount := 0;
18722 l_rents_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
18723 l_rents_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
18724 l_rents_tbl(j).period := g_stub_rec.period;
18725 l_rents_tbl(j).description := l_strm_name;
18726 l_rents_tbl(j).kle_asset_id := l_line_rec.id;
18727 l_rents_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18728 l_rents_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18729 l_rents_tbl(j).days_in_month := l_days_in_month_code;
18730 l_rents_tbl(j).days_in_year := l_days_in_yr_code;
18731 -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: Start
18732 IF l_line_rec.capitalize_down_payment_yn = 'N' AND
18733 l_line_rec.capital_reduction IS NOT NULL
18734 THEN
18735 l_rents_tbl(j).down_payment_amount := l_line_rec.capital_reduction;
18736 END IF;
18737 -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: End
18738 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
18739 l_rents_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18740 END If;
18741 lv_diff_date := 'Y';
18742 l_rents_tbl(j).rate := l_rl_rec.rule_information13;
18743
18744 -- Added by kthiruva on 29-Dec-2005.
18745 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
18746 -- Bug 4915938 - Start of Changes
18747 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18748 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18749 ELSE
18750 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18751 END IF;
18752 -- Bug 4915938 - End of Changes
18753
18754 END IF;
18755 -- End of Bug#3401024 modification BAKUCHIB
18756 -- Start of Bug#2757289 modification
18757 IF (l_rl_rec.rule_information7 IS NOT NULL OR
18758 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
18759 (l_rl_rec.rule_information8 IS NOT NULL OR
18760 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
18761 j := j + 1;
18762 idx := idx + 1;
18763 l_rents_tbl(j).level_index_number := idx;
18764 l_rents_tbl(j).amount := TO_NUMBER(l_rl_rec.rule_information8);
18765 l_rents_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
18766 l_rents_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
18767 l_rents_tbl(j).period := g_stub_rec.period;
18768 l_rents_tbl(j).description := l_strm_name;
18769 l_rents_tbl(j).kle_asset_id := l_line_rec.id;
18770 l_rents_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18771 l_rents_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18772 l_rents_tbl(j).days_in_month := l_days_in_month_code;
18773 l_rents_tbl(j).days_in_year := l_days_in_yr_code;
18774 -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: Start
18775 IF l_line_rec.capitalize_down_payment_yn = 'N' AND
18776 l_line_rec.capital_reduction IS NOT NULL
18777 THEN
18778 l_rents_tbl(j).down_payment_amount := l_line_rec.capital_reduction;
18779 END IF;
18780 -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: End
18781 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
18782 l_rents_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18783 END If;
18784 l_rents_tbl(j).rate := l_rl_rec.rule_information13;
18785 -- End of Bug#2757289 modification
18786
18787 -- Added by kthiruva on 29-Dec-2005.
18788 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
18789 -- Bug 4915938 - Start of Changes
18790 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18791 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18792 ELSE
18793 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18794 END IF;
18795 -- Bug 4915938 - End of Changes
18796
18797 ELSIF (l_rl_rec.rule_information7 IS NULL OR
18798 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
18799 (l_rl_rec.rule_information8 IS NULL OR
18800 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
18801 j := j + 1;
18802 idx := idx + 1;
18803 l_rents_tbl(j).level_index_number := idx;
18804 l_rents_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18805 l_rents_tbl(j).description := l_strm_name;
18806 l_rents_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
18807 l_rents_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
18808 l_rents_tbl(j).period := l_rl_rec.object1_id1;
18809 l_rents_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18810 l_rents_tbl(j).kle_asset_id := l_line_rec.id;
18811 l_rents_tbl(j).days_in_month := l_days_in_month_code;
18812 l_rents_tbl(j).days_in_year := l_days_in_yr_code;
18813 -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: Start
18814 IF l_line_rec.capitalize_down_payment_yn = 'N' AND
18815 l_line_rec.capital_reduction IS NOT NULL
18816 THEN
18817 l_rents_tbl(j).down_payment_amount := l_line_rec.capital_reduction;
18818 END IF;
18819 -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: End
18820 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
18821 l_rents_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18822 END If;
18823 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18824 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18825 ELSE
18826 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18827 END IF;
18828 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
18829 l_rents_tbl(j).date_start := l_hdr_rec.start_date;
18830 ELSE
18831 l_rents_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
18832 END IF;
18833 l_rents_tbl(j).rate := l_rl_rec.rule_information13;
18834 END IF;
18835 END LOOP;
18836 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18837 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
18838 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
18839 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
18840 END IF;
18841 -- Code for Estimated Property Tax Starts Here
18842 ELSIF( UPPER(TRIM(l_strm_name)) = 'ESTIMATED_PROPERTY_TAX' ) THEN
18843 FOR l_rl_rec in l_sll_csr_lease (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
18844
18845 IF FND_DATE.canonical_to_date(l_rl_rec.rule_information2) <> l_hdr_rec.start_date AND
18846 lv_diff_date = 'N' AND
18847 idx = 0 THEN
18848 k := k + 1;
18849 idx := idx + 1;
18850 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
18851 l_csm_periodic_expenses_tbl(k).amount := 0;
18852 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
18853 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
18854 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
18855 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
18856 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
18857 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18858 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18859 l_csm_periodic_expenses_tbl(k).cash_effect_yn := 'N';
18860 l_csm_periodic_expenses_tbl(k).tax_effect_yn := 'N';
18861 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
18862 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
18863
18864 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
18865 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18866 END If;
18867 lv_diff_date := 'Y';
18868
18869 -- Added by kthiruva on 29-Dec-2005.
18870 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
18871 -- Bug 4915938 - Start of Changes
18872 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18873 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18874 ELSE
18875 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18876 END IF;
18877 -- Bug 4915938 - End of Changes
18878 END IF;
18879
18880
18881 IF (l_rl_rec.rule_information7 IS NOT NULL OR
18882 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
18883 (l_rl_rec.rule_information8 IS NOT NULL OR
18884 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
18885 k := k + 1;
18886 idx := idx + 1;
18887 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
18888 l_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
18889 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
18890 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
18891 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
18892 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18893 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18894 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
18895 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
18896 l_csm_periodic_expenses_tbl(k).cash_effect_yn := 'N';
18897 l_csm_periodic_expenses_tbl(k).tax_effect_yn := 'N';
18898 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
18899 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
18900
18901 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
18902 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18903 END If;
18904
18905 -- Added by kthiruva on 29-Dec-2005.
18906 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
18907 -- Bug 4915938 - Start of Changes
18908 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18909 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18910 ELSE
18911 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18912 END IF;
18913 -- Bug 4915938 - End of Changes
18914
18915 ELSIF (l_rl_rec.rule_information7 IS NULL OR
18916 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
18917 (l_rl_rec.rule_information8 IS NULL OR
18918 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
18919 k := k + 1;
18920 idx := idx + 1;
18921 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
18922 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18923 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
18924 l_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
18925 l_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
18926 l_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
18927 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
18928 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18929 l_csm_periodic_expenses_tbl(k).cash_effect_yn := 'N';
18930 l_csm_periodic_expenses_tbl(k).tax_effect_yn := 'N';
18931 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
18932 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
18933
18934 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
18935 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18936 END If;
18937 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18938 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18939 ELSE
18940 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18941 END IF;
18942 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
18943 l_csm_periodic_expenses_tbl(k).date_start := l_hdr_rec.start_date;
18944 ELSE
18945 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
18946 END IF;
18947 END IF;
18948 END LOOP;
18949 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18950 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
18951 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
18952 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
18953 END IF;
18954
18955 -- Code for Estimated Property Tax Ends Here
18956 ELSIF (((l_strm_name_rec.periodic_yn = 'Y' ) AND
18957 (UPPER(l_strm_name_rec.name) = 'FEE') AND
18958 (l_strm_name_rec.capitalize_yn = 'N') ) OR
18959 ((l_strm_name_rec.periodic_yn = 'Y' ) AND (UPPER(l_strm_name_rec.name) <> 'FEE'))) Then
18960 FOR l_rl_rec in l_sll_csr_lease (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
18961 -- Start of Bug#3401024 modification BAKUCHIB
18962 IF FND_DATE.canonical_to_date(l_rl_rec.rule_information2) <> l_hdr_rec.start_date AND
18963 lv_diff_date = 'N' AND
18964 idx = 0 THEN
18965 k := k + 1;
18966 idx := idx + 1;
18967 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
18968 l_csm_periodic_expenses_tbl(k).amount := 0;
18969 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
18970 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
18971 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
18972 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
18973 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
18974 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
18975 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18976 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
18977 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
18978
18979 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
18980 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18981 END If;
18982 lv_diff_date := 'Y';
18983
18984 -- Added by kthiruva on 29-Dec-2005.
18985 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
18986 -- Bug 4915938 - Start of Changes
18987 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18988 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18989 ELSE
18990 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18991 END IF;
18992 -- Bug 4915938 - End of Changes
18993
18994 END IF;
18995 -- End of Bug#3401024 modification BAKUCHIB
18996 -- Start of Bug#2757289 modification
18997 IF (l_rl_rec.rule_information7 IS NOT NULL OR
18998 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
18999 (l_rl_rec.rule_information8 IS NOT NULL OR
19000 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
19001 k := k + 1;
19002 idx := idx + 1;
19003 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
19004 l_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
19005 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
19006 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
19007 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
19008 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
19009 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
19010 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
19011 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
19012 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
19013 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
19014
19015 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
19016 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
19017 END If;
19018 -- End of Bug#2757289 modification
19019
19020 -- Added by kthiruva on 29-Dec-2005.
19021 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
19022 -- Bug 4915938 - Start of Changes
19023 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
19024 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
19025 ELSE
19026 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
19027 END IF;
19028 -- Bug 4915938 - End of Changes
19029
19030 ELSIF (l_rl_rec.rule_information7 IS NULL OR
19031 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
19032 (l_rl_rec.rule_information8 IS NULL OR
19033 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
19034 k := k + 1;
19035 idx := idx + 1;
19036 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
19037 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
19038 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
19039 l_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
19040 l_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
19041 l_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
19042 l_csm_periodic_expenses_tbl(k).kle_asset_id := l_line_rec.id;
19043 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
19044 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
19045 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
19046
19047 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
19048 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
19049 END If;
19050 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
19051 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
19052 ELSE
19053 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
19054 END IF;
19055 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
19056 l_csm_periodic_expenses_tbl(k).date_start := l_hdr_rec.start_date;
19057 ELSE
19058 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
19059 END IF;
19060 END IF;
19061 END LOOP;
19062 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19063 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
19064 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19065 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
19066 END IF;
19067 ELSIF ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' ) AND
19068 (UPPER(TRIM(l_strm_name)) <> 'DOWN_PAYMENT') ) THEN
19069 FOR l_rl_rec in l_sll_csr_lease (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
19070 l := l + 1;
19071 l_csm_one_off_fee_tbl(l).description := l_strm_name_rec.name;
19072 l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
19073 l_csm_one_off_fee_tbl(l).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
19074 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
19075 l_csm_one_off_fee_tbl(l).date_paid := l_hdr_rec.start_date;
19076 ELSE
19077 l_csm_one_off_fee_tbl(l).date_paid := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
19078 END IF;
19079 l_csm_one_off_fee_tbl(l).kle_asset_id := l_line_rec.id;
19080 END LOOP;
19081 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19082 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
19083 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19084 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
19085 END IF;
19086 END IF;
19087 END LOOP;
19088 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19089 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
19090 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19091 EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
19092 END IF;
19093 END LOOP;
19094 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19095 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19096 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19097 RAISE OKL_API.G_EXCEPTION_ERROR;
19098 END IF;
19099 --Added for Debugging
19100 write_to_log('Prior to the call to extract_fee_lines');
19101 g_rep_req_yn := 'N';
19102 -- Extract Fee lines
19103 extract_fee_lines( p_api_version => p_api_version,
19104 p_chr_id => TO_NUMBER(p_chr_id),
19105 p_deal_type => l_deal_type,
19106 p_init_msg_list => p_init_msg_list,
19107 x_return_status => x_return_status,
19108 x_msg_count => x_msg_count,
19109 x_msg_data => x_msg_data,
19110 px_csm_stream_types_tbl => l_csm_stream_types_tbl,
19111 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl,
19112 px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
19113 --Added for Debugging
19114 write_to_log('After the call to extract_fee_lines, the return status is :'|| x_return_status);
19115 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19116 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19117 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19118 RAISE OKL_API.G_EXCEPTION_ERROR;
19119 END IF;
19120 -- Check for mandatory stream for pricing eng
19121 check_for_mandatory_streams(
19122 p_api_version => p_api_version,
19123 p_init_msg_list => p_init_msg_list,
19124 x_msg_count => x_msg_count,
19125 x_msg_data => x_msg_data,
19126 x_return_status => x_return_status,
19127 p_chr_id => p_chr_id,
19128 p_deal_type => l_deal_type,
19129 p_stream_types_tbl => l_csm_stream_types_tbl,
19130 x_stream_types_tbl => l_req_stream_types_tbl);
19131 --Added for Debugging
19132 write_to_log('After the call to check_for_mandatory_streams, the return status is :'||x_return_status);
19133 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19134 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19135 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19136 RAISE OKL_API.G_EXCEPTION_ERROR;
19137 END IF;
19138 -- Requesting for yields
19139 x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
19140 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19141 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19142 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19143 RAISE OKL_API.G_EXCEPTION_ERROR;
19144 END IF;
19145 -- Extract Subsidy line
19146 extract_subsidized_lines(p_api_version => p_api_version,
19147 p_init_msg_list => p_init_msg_list,
19148 x_return_status => x_return_status,
19149 x_msg_count => x_msg_count,
19150 x_msg_data => x_msg_data,
19151 p_chr_id => TO_NUMBER(p_chr_id),
19152 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
19153 --Added by kthiruva for debugging
19154 write_to_log('After the call to extract_subsidized_lines, the return status is :'||x_return_status);
19155
19156 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19157 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19158 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19159 RAISE OKL_API.G_EXCEPTION_ERROR;
19160 END IF;
19161 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
19162 okl_api.set_message(p_app_name => G_APP_NAME,
19163 p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
19164 RAISE OKL_API.G_EXCEPTION_ERROR;
19165 END IF;
19166 x_csm_lease_header := l_csm_lease_header;
19167 x_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
19168 x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
19169 x_csm_yields_tbl := l_csm_yields_tbl;
19170 x_req_stream_types_tbl := l_req_stream_types_tbl;
19171 x_csm_line_details_tbl := l_csm_line_details_tbl;
19172 x_rents_tbl := l_rents_tbl;
19173 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
19174 x_msg_data => x_msg_data);
19175 EXCEPTION
19176 WHEN OKL_API.G_EXCEPTION_ERROR then
19177 IF l_hdr_csr_lease%ISOPEN THEN
19178 CLOSE l_hdr_csr_lease;
19179 END IF;
19180 IF l_line_rec_csr_lease%ISOPEN THEN
19181 CLOSE l_line_rec_csr_lease;
19182 END IF;
19183 IF l_hdrrl_csr_lease%ISOPEN THEN
19184 CLOSE l_hdrrl_csr_lease;
19185 END IF;
19186 IF l_financed_type_csr%ISOPEN THEN
19187 CLOSE l_financed_type_csr;
19188 END IF;
19189 IF ib_csr_lease%ISOPEN THEN
19190 CLOSE ib_csr_lease;
19191 END IF;
19192 IF get_org_id%ISOPEN THEN
19193 CLOSE get_org_id;
19194 END IF;
19195 IF l_strmid_csr_lease%ISOPEN THEN
19196 CLOSE l_strmid_csr_lease;
19197 END IF;
19198 IF strm_name_csr_lease%ISOPEN THEN
19199 CLOSE strm_name_csr_lease;
19200 END IF;
19201 IF l_slh_csr_lease%ISOPEN THEN
19202 CLOSE l_slh_csr_lease;
19203 END IF;
19204 IF l_sll_csr_lease%ISOPEN THEN
19205 CLOSE l_sll_csr_lease;
19206 END IF;
19207 IF get_dis_amt_csr_lease%ISOPEN THEN
19208 CLOSE get_dis_amt_csr_lease;
19209 END IF;
19210 IF l_txtrans_csr_lease%ISOPEN THEN
19211 CLOSE l_txtrans_csr_lease;
19212 END IF;
19213 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
19214 l_api_name,
19215 G_PKG_NAME,
19216 'OKL_API.G_RET_STS_ERROR',
19217 x_msg_count,
19218 x_msg_data,
19219 '_PVT');
19220 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
19221 IF l_hdr_csr_lease%ISOPEN THEN
19222 CLOSE l_hdr_csr_lease;
19223 END IF;
19224 IF l_line_rec_csr_lease%ISOPEN THEN
19225 CLOSE l_line_rec_csr_lease;
19226 END IF;
19227 IF l_hdrrl_csr_lease%ISOPEN THEN
19228 CLOSE l_hdrrl_csr_lease;
19229 END IF;
19230 IF l_financed_type_csr%ISOPEN THEN
19231 CLOSE l_financed_type_csr;
19232 END IF;
19233 IF ib_csr_lease%ISOPEN THEN
19234 CLOSE ib_csr_lease;
19235 END IF;
19236 IF get_org_id%ISOPEN THEN
19237 CLOSE get_org_id;
19238 END IF;
19239 IF l_strmid_csr_lease%ISOPEN THEN
19240 CLOSE l_strmid_csr_lease;
19241 END IF;
19242 IF strm_name_csr_lease%ISOPEN THEN
19243 CLOSE strm_name_csr_lease;
19244 END IF;
19245 IF l_slh_csr_lease%ISOPEN THEN
19246 CLOSE l_slh_csr_lease;
19247 END IF;
19248 IF l_sll_csr_lease%ISOPEN THEN
19249 CLOSE l_sll_csr_lease;
19250 END IF;
19251 IF get_dis_amt_csr_lease%ISOPEN THEN
19252 CLOSE get_dis_amt_csr_lease;
19253 END IF;
19254 IF l_txtrans_csr_lease%ISOPEN THEN
19255 CLOSE l_txtrans_csr_lease;
19256 END IF;
19257 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
19258 l_api_name,
19259 G_PKG_NAME,
19260 'OKL_API.G_RET_STS_UNEXP_ERROR',
19261 x_msg_count,
19262 x_msg_data,
19263 '_PVT');
19264 WHEN OTHERS then
19265 IF l_hdr_csr_lease%ISOPEN THEN
19266 CLOSE l_hdr_csr_lease;
19267 END IF;
19268 IF l_line_rec_csr_lease%ISOPEN THEN
19269 CLOSE l_line_rec_csr_lease;
19270 END IF;
19271 IF l_hdrrl_csr_lease%ISOPEN THEN
19272 CLOSE l_hdrrl_csr_lease;
19273 END IF;
19274 IF l_financed_type_csr%ISOPEN THEN
19275 CLOSE l_financed_type_csr;
19276 END IF;
19277 IF ib_csr_lease%ISOPEN THEN
19278 CLOSE ib_csr_lease;
19279 END IF;
19280 IF get_org_id%ISOPEN THEN
19281 CLOSE get_org_id;
19282 END IF;
19283 IF l_strmid_csr_lease%ISOPEN THEN
19284 CLOSE l_strmid_csr_lease;
19285 END IF;
19286 IF strm_name_csr_lease%ISOPEN THEN
19287 CLOSE strm_name_csr_lease;
19288 END IF;
19289 IF l_slh_csr_lease%ISOPEN THEN
19290 CLOSE l_slh_csr_lease;
19291 END IF;
19292 IF l_sll_csr_lease%ISOPEN THEN
19293 CLOSE l_sll_csr_lease;
19294 END IF;
19295 IF get_dis_amt_csr_lease%ISOPEN THEN
19296 CLOSE get_dis_amt_csr_lease;
19297 END IF;
19298 IF l_txtrans_csr_lease%ISOPEN THEN
19299 CLOSE l_txtrans_csr_lease;
19300 END IF;
19301 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
19302 l_api_name,
19303 G_PKG_NAME,
19304 'OTHERS',
19305 x_msg_count,
19306 x_msg_data,
19307 '_PVT');
19308 END extract_params_lease_deal;
19309 -- End modification 11i10 bakuchib
19310 Procedure extract_params_lease(
19311 p_api_version IN NUMBER,
19312 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
19313 p_chr_id IN VARCHAR2,
19314 x_return_status OUT NOCOPY VARCHAR2,
19315 x_msg_count OUT NOCOPY NUMBER,
19316 x_msg_data OUT NOCOPY VARCHAR2,
19317 x_csm_lease_header OUT NOCOPY okl_create_streams_pub.csm_lease_rec_type,
19318 x_csm_one_off_fee_tbl OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
19319 x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
19320 x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
19321 x_req_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type,
19322 x_csm_line_details_tbl OUT NOCOPY okl_create_streams_pub.csm_line_details_tbl_type,
19323 x_rents_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type) AS
19324
19325 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_LEASE';
19326 l_api_version CONSTANT NUMBER := 1;
19327 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
19328
19329 Begin
19330
19331 print( l_api_name, 'begin');
19332 extract_params_lease_deal(
19333 l_api_version,
19334 p_init_msg_list,
19335 p_chr_id,
19336 NULL,
19337 x_return_status,
19338 x_msg_count,
19339 x_msg_data,
19340 x_csm_lease_header,
19341 x_csm_one_off_fee_tbl,
19342 x_csm_periodic_expenses_tbl,
19343 x_csm_yields_tbl,
19344 x_req_stream_types_tbl,
19345 x_csm_line_details_tbl,
19346 x_rents_tbl);
19347 print( l_api_name, 'end', x_return_status);
19348 End extract_params_lease;
19349
19350 Procedure generate_reporting_streams(
19351 p_api_version IN NUMBER,
19352 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
19353 p_chr_id IN VARCHAR2,
19354 p_report_deal_type IN VARCHAR2,
19355 p_generation_context IN VARCHAR2,
19356 p_skip_prc_engine IN VARCHAR2,
19357 x_return_status OUT NOCOPY VARCHAR2,
19358 x_msg_count OUT NOCOPY NUMBER,
19359 x_msg_data OUT NOCOPY VARCHAR2,
19360 x_request_id IN OUT NOCOPY NUMBER,
19361 x_trans_status OUT NOCOPY VARCHAR2) AS
19362
19363 l_api_name CONSTANT VARCHAR2(30) := 'GEN_REPORT_STREAMS';
19364 l_api_version CONSTANT NUMBER := 1;
19365 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
19366 l_fnd_rec fnd_lookups_csr%ROWTYPE;
19367
19368 l_isStrmGenAllowed BOOLEAN := TRUE;
19369 l_passStatus VARCHAR2(256);
19370 l_failStatus VARCHAR2(256);
19371
19372 l_trxH_in_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
19373 l_trxH_out_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
19374
19375 l_lines_rec l_line_rec_csr%ROWTYPE;
19376 l_transaction_type VARCHAR2(256):= 'Miscellaneous';--'Generate Yields';
19377 l_request_id NUMBER;
19378
19379 cursor l_nullrl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
19380 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
19381 chrId NUMBER,
19382 cleId NUMBER ) IS
19383 select crl.id
19384 from OKC_RULE_GROUPS_B crg,
19385 OKC_RULES_B crl
19386 where crl.rgp_id = crg.id
19387 and crg.RGD_CODE = rgcode
19388 and crl.RULE_INFORMATION_CATEGORY = rlcat
19389 and crl.RULE_INFORMATION2 is null
19390 and crg.dnz_chr_id = chrId
19391 and crg.cle_id = cleId;
19392
19393 l_nullrl_rec l_nullrl_csr%ROWTYPE;
19394
19395 l_rulv_rec OKL_RULE_PUB.rulv_rec_type;
19396
19397 l_Trx_Type_rec Transaction_Type_csr%ROWTYPE;
19398 l_hdr_rec l_hdr_csr%ROWTYPE;
19399
19400 x_csm_lease_header okl_create_streams_pub.csm_lease_rec_type;
19401 x_csm_one_off_fee_tbl okl_create_streams_pub.csm_one_off_fee_tbl_type;
19402 x_csm_periodic_expenses_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
19403 x_csm_yields_tbl okl_create_streams_pub.csm_yields_tbl_type;
19404 x_csm_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
19405 x_req_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
19406 x_csm_line_details_tbl okl_create_streams_pub.csm_line_details_tbl_type;
19407 x_rents_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
19408
19409 x_csm_loan_header okl_create_streams_pvt.csm_loan_rec_type;
19410 x_csm_lines_details_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
19411 x_csm_loan_lines_tbl okl_create_streams_pvt.csm_loan_line_tbl_type;
19412 x_csm_loan_levels_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
19413
19414 BEGIN
19415
19416
19417 print( l_api_name, 'begin');
19418
19419 x_return_status := OKL_API.G_RET_STS_SUCCESS;
19420
19421 x_return_status := OKL_API.START_ACTIVITY(
19422 p_api_name => l_api_name,
19423 p_pkg_name => g_pkg_name,
19424 p_init_msg_list => p_init_msg_list,
19425 l_api_version => l_api_version,
19426 p_api_version => p_api_version,
19427 p_api_type => G_API_TYPE,
19428 x_return_status => x_return_status);
19429
19430 -- check if activity started successfully
19431 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19432 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19433 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19434 raise OKL_API.G_EXCEPTION_ERROR;
19435 End If;
19436
19437 print( l_api_name, 'Reporting Deal Type='||p_report_deal_type);
19438
19439 IF (INSTR( p_report_deal_type, 'LEASE') > 0) THEN
19440
19441 g_rep_req_yn:= 'Y';
19442 extract_params_lease_deal(
19443 p_api_version,
19444 p_init_msg_list,
19445 p_chr_id,
19446 p_report_deal_type,
19447 x_return_status,
19448 x_msg_count,
19449 x_msg_data,
19450 x_csm_lease_header,
19451 x_csm_one_off_fee_tbl,
19452 x_csm_periodic_expenses_tbl,
19453 x_csm_yields_tbl,
19454 x_req_stream_types_tbl,
19455 x_csm_line_details_tbl,
19456 x_rents_tbl);
19457
19458 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then -- Modified 06/14/2002. dedey
19459 okl_api.set_message(
19460 p_app_name => G_APP_NAME,
19461 p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
19462 raise OKL_API.G_EXCEPTION_ERROR;
19463 End If;
19464
19465 x_csm_lease_header.purpose_code := 'REPORT';
19466 x_csm_lease_header.sif_id := x_request_id;
19467
19468 okl_create_streams_pub.create_streams_lease_book(
19469 p_api_version,
19470 p_init_msg_list,
19471 p_skip_prc_engine,
19472 x_csm_lease_header,
19473 x_csm_one_off_fee_tbl,
19474 x_csm_periodic_expenses_tbl,
19475 x_csm_yields_tbl,
19476 x_req_stream_types_tbl,
19477 x_csm_line_details_tbl,
19478 x_rents_tbl,
19479 l_request_id,
19480 x_trans_status,
19481 x_return_status,
19482 x_msg_count,
19483 x_msg_data);
19484 -- rabhupat BUG#4259056 start
19485 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19486 -- rabhupat BUG#4259056 end
19487 okl_api.set_message(
19488 p_app_name => G_APP_NAME,
19489 p_msg_name => 'OKL_LLA_REPSTRMS_REQ_FLD');
19490 raise OKL_API.G_EXCEPTION_ERROR;
19491 End If;
19492
19493 ELSIF (INSTR(p_report_deal_type, 'LOAN') > 0) THEN
19494 -- Reporting loan streams were not getting generated- hkpatel- Bug 4734085
19495 g_rep_req_yn:= 'Y';
19496
19497
19498 extract_params_loan(
19499 p_api_version,
19500 p_init_msg_list,
19501 p_chr_id,
19502 x_return_status,
19503 x_msg_count,
19504 x_msg_data,
19505 x_csm_loan_header,
19506 x_csm_loan_lines_tbl,
19507 x_csm_loan_levels_tbl,
19508 x_csm_one_off_fee_tbl,
19509 x_csm_periodic_expenses_tbl,
19510 x_csm_yields_tbl,
19511 x_csm_stream_types_tbl);
19512
19513 --Added by kthiruva for Debugging
19514 write_to_log('After the call to extract_params_loan, the return status is :'||x_return_status);
19515 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19516 okl_api.set_message(
19517 p_app_name => G_APP_NAME,
19518 p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
19519 raise OKL_API.G_EXCEPTION_ERROR;
19520 End If;
19521
19522 x_csm_loan_header.purpose_code := 'REPORT';
19523 x_csm_loan_header.sif_id := x_request_id;
19524
19525 okl_create_streams_pub.create_streams_loan_book(
19526 p_api_version => p_api_version,
19527 p_init_msg_list => p_init_msg_list,
19528 p_skip_prc_engine => p_skip_prc_engine,
19529 p_csm_loan_header => x_csm_loan_header,
19530 p_csm_loan_lines_tbl => x_csm_loan_lines_tbl,
19531 p_csm_loan_levels_tbl => x_csm_loan_levels_tbl,
19532 p_csm_one_off_fee_tbl => x_csm_one_off_fee_tbl,
19533 p_csm_periodic_expenses_tbl => x_csm_periodic_expenses_tbl,
19534 p_csm_yields_tbl => x_csm_yields_tbl,
19535 p_csm_stream_types_tbl => x_csm_stream_types_tbl,
19536 x_trans_id => l_request_id,
19537 x_trans_status => x_trans_status,
19538 x_return_status => x_return_status,
19539 x_msg_count => x_msg_count,
19540 x_msg_data => x_msg_data);
19541
19542 -- rabhupat BUG#4259056 start
19543 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19544 -- rabhupat BUG#4259056 end
19545 okl_api.set_message(
19546 p_app_name => G_APP_NAME,
19547 p_msg_name => 'OKL_LLA_REPSTRMS_REQ_FLD');
19548 raise OKL_API.G_EXCEPTION_ERROR;
19549 End If;
19550 ELSE
19551 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19552 END IF;
19553
19554
19555 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19556 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19557 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19558 raise OKL_API.G_EXCEPTION_ERROR;
19559 End If;
19560
19561 print( l_api_name, 'end', x_return_status);
19562 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
19563
19564 Exception
19565 when OKL_API.G_EXCEPTION_ERROR then
19566 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
19567 p_api_name => l_api_name,
19568 p_pkg_name => g_pkg_name,
19569 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
19570 x_msg_count => x_msg_count,
19571 x_msg_data => x_msg_data,
19572 p_api_type => g_api_type);
19573
19574 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
19575 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
19576 p_api_name => l_api_name,
19577 p_pkg_name => g_pkg_name,
19578 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
19579 x_msg_count => x_msg_count,
19580 x_msg_data => x_msg_data,
19581 p_api_type => g_api_type);
19582
19583 when OTHERS then
19584 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
19585 p_api_name => l_api_name,
19586 p_pkg_name => g_pkg_name,
19587 p_exc_name => 'OTHERS',
19588 x_msg_count => x_msg_count,
19589 x_msg_data => x_msg_data,
19590 p_api_type => g_api_type);
19591
19592 END generate_reporting_streams;
19593
19594 Procedure generate_streams(
19595 p_api_version IN NUMBER,
19596 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
19597 p_chr_id IN VARCHAR2,
19598 p_generation_context IN VARCHAR2,
19599 p_skip_prc_engine IN VARCHAR2,
19600 x_return_status OUT NOCOPY VARCHAR2,
19601 x_msg_count OUT NOCOPY NUMBER,
19602 x_msg_data OUT NOCOPY VARCHAR2,
19603 x_request_id OUT NOCOPY NUMBER,
19604 x_trans_status OUT NOCOPY VARCHAR2) AS
19605
19606 l_api_name CONSTANT VARCHAR2(30) := 'MAP_AND_GEN_STREAMS';
19607 l_api_version CONSTANT NUMBER := 1;
19608 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
19609 l_fnd_rec fnd_lookups_csr%ROWTYPE;
19610 lv_stream VARCHAR2(200) := null;
19611
19612 l_isStrmGenAllowed BOOLEAN := TRUE;
19613 l_passStatus VARCHAR2(256);
19614 l_failStatus VARCHAR2(256);
19615
19616 l_trxH_in_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
19617 l_trxH_out_rec Okl_Trx_Contracts_Pvt.tcnv_rec_type;
19618
19619 l_stmv_tbl okl_streams_pub.stmv_tbl_type;
19620 x_stmv_tbl okl_streams_pub.stmv_tbl_type;
19621
19622 i NUMBER;
19623 l_lines_rec l_line_rec_csr%ROWTYPE;
19624 l_transaction_type VARCHAR2(256):= 'Miscellaneous';--'Generate Yields';
19625
19626 cursor l_nullrl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
19627 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
19628 chrId NUMBER ) IS
19629 select crl.id
19630 from OKC_RULE_GROUPS_B crg,
19631 OKC_RULES_B crl
19632 where crl.rgp_id = crg.id
19633 and crg.RGD_CODE = rgcode
19634 and crl.RULE_INFORMATION_CATEGORY = rlcat
19635 and nvl(crl.RULE_INFORMATION1, 'XXX' ) = 'XXX'
19636 and nvl(crl.RULE_INFORMATION2, 'XXX' ) = 'XXX'
19637 and nvl(crl.RULE_INFORMATION3, 'XXX' ) = 'XXX'
19638 and nvl(crl.RULE_INFORMATION6, 'XXX' ) = 'XXX'
19639 and crg.dnz_chr_id = chrId;
19640
19641
19642
19643 l_nullrl_rec l_nullrl_csr%ROWTYPE;
19644
19645 l_rulv_rec OKL_RULE_PUB.rulv_rec_type;
19646
19647 l_Trx_Type_rec Transaction_Type_csr%ROWTYPE;
19648 l_hdr_rec l_hdr_csr%ROWTYPE;
19649 l_strms_orig_rec strms_csr%ROWTYPE;
19650 l_strms_rep_rec strms_csr%ROWTYPE;
19651
19652 x_csm_lease_header okl_create_streams_pub.csm_lease_rec_type;
19653 x_csm_one_off_fee_tbl okl_create_streams_pub.csm_one_off_fee_tbl_type;
19654 x_csm_periodic_expenses_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
19655 x_csm_yields_tbl okl_create_streams_pub.csm_yields_tbl_type;
19656 x_csm_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
19657 x_req_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
19658 x_csm_line_details_tbl okl_create_streams_pub.csm_line_details_tbl_type;
19659 x_rents_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
19660
19661 x_csm_loan_header okl_create_streams_pvt.csm_loan_rec_type;
19662 x_csm_lines_details_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
19663 x_csm_loan_lines_tbl okl_create_streams_pvt.csm_loan_line_tbl_type;
19664 x_csm_loan_levels_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
19665
19666 p_pdtv_rec pdtv_rec_type;
19667 x_pdt_parameter_rec pdt_param_rec_type;
19668 x_no_data_found BOOLEAN;
19669
19670 BEGIN
19671 --Added by kthiruva for Debugging
19672 write_to_log('Inside the call to generate_streams');
19673
19674 x_return_status := OKL_API.G_RET_STS_SUCCESS;
19675 x_return_status := OKL_API.START_ACTIVITY(
19676 p_api_name => l_api_name,
19677 p_pkg_name => g_pkg_name,
19678 p_init_msg_list => p_init_msg_list,
19679 l_api_version => l_api_version,
19680 p_api_version => p_api_version,
19681 p_api_type => G_API_TYPE,
19682 x_return_status => x_return_status);
19683 -- check if activity started successfully
19684 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19685 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19686 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19687 raise OKL_API.G_EXCEPTION_ERROR;
19688 End If;
19689
19690 -- 2. type of contract lease/loan
19691 OPEN l_hdr_csr(p_chr_id);
19692 FETCH l_hdr_csr into l_hdr_rec;
19693 IF l_hdr_csr%NOTFOUND THEN
19694 CLOSE l_hdr_csr;
19695 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19696 END IF;
19697 CLOSE l_hdr_csr;
19698
19699 IF (l_hdr_rec.template_yn = 'Y') Then
19700 x_return_status := OKL_API.G_RET_STS_ERROR;
19701 OKL_API.set_message(
19702 p_app_name => G_APP_NAME,
19703 p_msg_name => 'OKL_LLA_NO_STRM_TMPLTC');
19704 return;
19705 END IF;
19706 okl_contract_status_pub.get_contract_status(l_api_version,
19707 p_init_msg_list,
19708 x_return_status,
19709 x_msg_count,
19710 x_msg_data,
19711 l_isStrmGenAllowed,
19712 l_passStatus,
19713 l_failStatus,
19714 OKL_CONTRACT_STATUS_PUB.G_K_STRMGEN,
19715 p_chr_id);
19716 If ( NOT (l_isStrmGenAllowed )) then
19717 x_return_status := OKL_API.G_RET_STS_ERROR;
19718 okl_api.set_message(
19719 p_app_name => G_APP_NAME,
19720 p_msg_name => OKL_CONTRACT_STATUS_PUB.G_CANNOT_GENSTRMS);
19721 return;
19722 ElsIf (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19723 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19724 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19725 raise OKL_API.G_EXCEPTION_ERROR;
19726 End If;
19727
19728 print( l_api_name, 'Contract Status Check', x_return_status);
19729 FOR l_nullrl_rec in l_nullrl_csr ( 'LALEVL', 'LASLL', p_chr_id )
19730 LOOP
19731
19732 l_rulv_rec.id := l_nullrl_rec.id;
19733
19734 OKL_RULE_PUB.delete_rule(
19735 p_api_version => l_api_version,
19736 p_init_msg_list => p_init_msg_list,
19737 x_return_status => x_return_status,
19738 x_msg_count => x_msg_count,
19739 x_msg_data => x_msg_data,
19740 p_rulv_rec => l_rulv_rec );
19741
19742
19743 -- check if activity started successfully
19744 If (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
19745 raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
19746 ElSIF (x_return_status = OKC_API.G_RET_STS_ERROR) then
19747 raise OKC_API.G_EXCEPTION_ERROR;
19748 End If;
19749
19750 END LOOP;
19751
19752 delete_working_streams(
19753 p_api_version => p_api_version,
19754 p_init_msg_list => p_init_msg_list,
19755 x_return_status => x_return_status,
19756 x_msg_count => x_msg_count,
19757 x_msg_data => x_msg_data,
19758 p_chr_id => p_chr_id);
19759
19760 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19761 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19762 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19763 raise OKL_API.G_EXCEPTION_ERROR;
19764 END IF;
19765
19766 IF (INSTR( l_hdr_rec.deal_type, 'LEASE') > 0) THEN
19767 --Added by kthiruva for Debugging
19768 write_to_log('Deal Type is Lease');
19769 write_to_log('Prior to the call to extract_params_lease');
19770
19771 extract_params_lease(
19772 p_api_version,
19773 p_init_msg_list,
19774 p_chr_id,
19775 x_return_status,
19776 x_msg_count,
19777 x_msg_data,
19778 x_csm_lease_header,
19779 x_csm_one_off_fee_tbl,
19780 x_csm_periodic_expenses_tbl,
19781 x_csm_yields_tbl,
19782 x_req_stream_types_tbl,
19783 x_csm_line_details_tbl,
19784 x_rents_tbl);
19785
19786 --Added by kthiruva for Debugging
19787 write_to_log('After the call to extract_params_lease, the return status is :'||x_return_status);
19788
19789 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then -- Modified 06/14/2002. dedey
19790 okl_api.set_message(
19791 p_app_name => G_APP_NAME,
19792 p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
19793 raise OKL_API.G_EXCEPTION_ERROR;
19794 End If;
19795
19796 -- FOR i in 1..x_req_stream_types_tbl.COUNT
19797 -- LOOP
19798 -- print( l_api_name, ' req strm ' || to_char(x_req_stream_types_tbl(i).stream_type_id) ||
19799 -- ' for fee ' || to_char(nvl( x_req_stream_types_tbl(i).kle_fee_id,-1)) );
19800 -- END LOOP;
19801
19802
19803 okl_create_streams_pub.create_streams_lease_book(
19804 p_api_version,
19805 p_init_msg_list,
19806 p_skip_prc_engine,
19807 x_csm_lease_header,
19808 x_csm_one_off_fee_tbl,
19809 x_csm_periodic_expenses_tbl,
19810 x_csm_yields_tbl,
19811 x_req_stream_types_tbl,
19812 x_csm_line_details_tbl,
19813 x_rents_tbl,
19814 x_request_id,
19815 x_trans_status,
19816 x_return_status,
19817 x_msg_count,
19818 x_msg_data);
19819
19820 --Added by kthiruva for Debugging
19821 write_to_log('After the call to create_streams_lease_book, the return status is '||x_return_status);
19822
19823 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19824 okl_api.set_message(
19825 p_app_name => G_APP_NAME,
19826 p_msg_name => OKL_CONTRACT_STATUS_PUB.G_GENSTRMS_REQ_FAILED);
19827 raise OKL_API.G_EXCEPTION_ERROR;
19828 End If;
19829
19830 ELSIF (INSTR(l_hdr_rec.deal_type, 'LOAN') > 0) THEN
19831
19832 --Added by kthiruva for Debugging
19833 write_to_log('Deal Type is Loan');
19834 write_to_log('Prior to the call to extract_params_loan');
19835 extract_params_loan(
19836 p_api_version,
19837 p_init_msg_list,
19838 p_chr_id,
19839 x_return_status,
19840 x_msg_count,
19841 x_msg_data,
19842 x_csm_loan_header,
19843 x_csm_loan_lines_tbl,
19844 x_csm_loan_levels_tbl,
19845 x_csm_one_off_fee_tbl,
19846 x_csm_periodic_expenses_tbl,
19847 x_csm_yields_tbl,
19848 x_csm_stream_types_tbl);
19849
19850 --Added by kthiruva for Debugging
19851 write_to_log('After the call to extract_params_loan, the return status is :'||x_return_status);
19852 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19853 okl_api.set_message(
19854 p_app_name => G_APP_NAME,
19855 p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
19856 raise OKL_API.G_EXCEPTION_ERROR;
19857 End If;
19858
19859 okl_create_streams_pub.create_streams_loan_book(
19860 p_api_version => p_api_version,
19861 p_init_msg_list => p_init_msg_list,
19862 p_skip_prc_engine => p_skip_prc_engine,
19863 p_csm_loan_header => x_csm_loan_header,
19864 p_csm_loan_lines_tbl => x_csm_loan_lines_tbl,
19865 p_csm_loan_levels_tbl => x_csm_loan_levels_tbl,
19866 p_csm_one_off_fee_tbl => x_csm_one_off_fee_tbl,
19867 p_csm_periodic_expenses_tbl => x_csm_periodic_expenses_tbl,
19868 p_csm_yields_tbl => x_csm_yields_tbl,
19869 p_csm_stream_types_tbl => x_csm_stream_types_tbl,
19870 x_trans_id => x_request_id,
19871 x_trans_status => x_trans_status,
19872 x_return_status => x_return_status,
19873 x_msg_count => x_msg_count,
19874 x_msg_data => x_msg_data);
19875
19876 --Added by kthiruva for Debugging
19877 write_to_log('After the call to create_streams_loan_book, the return status is '||x_return_status);
19878
19879 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19880 okl_api.set_message(
19881 p_app_name => G_APP_NAME,
19882 p_msg_name => OKL_CONTRACT_STATUS_PUB.G_GENSTRMS_REQ_FAILED);
19883 raise OKL_API.G_EXCEPTION_ERROR;
19884 End If;
19885 ELSE
19886 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19887 END IF;
19888 If ( l_hdr_rec.report_pdt_id <> -1 ) Then
19889
19890 --Added for Debugging
19891 write_to_log('Reporting Product is present');
19892 p_pdtv_rec.id := l_hdr_rec.report_pdt_id;
19893
19894 OKL_SETUPPRODUCTS_PVT.Getpdt_parameters(
19895 p_api_version => p_api_version,
19896 p_init_msg_list => p_init_msg_list,
19897 x_return_status => x_return_status,
19898 x_msg_count => x_msg_count,
19899 x_msg_data => x_msg_data,
19900 p_pdtv_rec => p_pdtv_rec,
19901 x_no_data_found => x_no_data_found,
19902 p_pdt_parameter_rec => x_pdt_parameter_rec);
19903 --Added by kthiruva for Debugging
19904 write_to_log('After the call to OKL_SETUPPRODUCTS_PVT.Getpdt_parameters, return status is :'||x_return_status);
19905
19906 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19907 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19908 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19909 RAISE OKL_API.G_EXCEPTION_ERROR;
19910 END IF;
19911
19912 --Added by kthiruva for Debugging
19913 write_to_log('Prior to the call to generate_reporting_streams');
19914
19915 generate_reporting_streams(
19916 p_api_version => p_api_version,
19917 p_init_msg_list => p_init_msg_list,
19918 p_chr_id => p_chr_id,
19919 p_report_deal_type => x_pdt_parameter_rec.deal_type,
19920 p_generation_context => p_generation_context,
19921 p_skip_prc_engine => p_skip_prc_engine,
19922 x_return_status => x_return_status,
19923 x_msg_count => x_msg_count,
19924 x_msg_data => x_msg_data,
19925 x_request_id => x_request_id,
19926 x_trans_status => x_trans_status);
19927
19928 --Added by kthiruva for Debugging
19929 write_to_log('After the call to generate_reporting_streams, return status is :'||x_return_status);
19930 If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19931
19932 okl_api.set_message(
19933 p_app_name => G_APP_NAME,
19934 p_msg_name => 'OKL_LLA_REPSTRMS_REQ_FAILED');
19935 raise OKL_API.G_EXCEPTION_ERROR;
19936
19937 End If;
19938
19939
19940 End If;
19941
19942 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19943 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19944 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19945 raise OKL_API.G_EXCEPTION_ERROR;
19946 End If;
19947
19948 print( l_api_name, 'end', x_return_status);
19949 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
19950
19951 Exception
19952 when OKL_API.G_EXCEPTION_ERROR then
19953 --srsreeni bug6011651 starts
19954 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
19955 p_api_version => p_api_version,
19956 p_init_msg_list => p_init_msg_list,
19957 x_return_status => x_return_status,
19958 x_msg_count => x_msg_count,
19959 x_msg_data => x_msg_data,
19960 p_khr_id => p_chr_id,
19961 p_prog_short_name => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
19962 p_progress_status => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_ERROR);
19963 --srsreeni bug6011651 ends
19964 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
19965 p_api_name => l_api_name,
19966 p_pkg_name => g_pkg_name,
19967 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
19968 x_msg_count => x_msg_count,
19969 x_msg_data => x_msg_data,
19970 p_api_type => g_api_type);
19971
19972 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
19973 --srsreeni bug6011651 starts
19974 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
19975 p_api_version => p_api_version,
19976 p_init_msg_list => p_init_msg_list,
19977 x_return_status => x_return_status,
19978 x_msg_count => x_msg_count,
19979 x_msg_data => x_msg_data,
19980 p_khr_id => p_chr_id,
19981 p_prog_short_name => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
19982 p_progress_status => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_ERROR);
19983 --srsreeni bug6011651 ends
19984 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
19985 p_api_name => l_api_name,
19986 p_pkg_name => g_pkg_name,
19987 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
19988 x_msg_count => x_msg_count,
19989 x_msg_data => x_msg_data,
19990 p_api_type => g_api_type);
19991
19992 when OTHERS then
19993 --srsreeni bug6011651 starts
19994 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
19995 p_api_version => p_api_version,
19996 p_init_msg_list => p_init_msg_list,
19997 x_return_status => x_return_status,
19998 x_msg_count => x_msg_count,
19999 x_msg_data => x_msg_data,
20000 p_khr_id => p_chr_id,
20001 p_prog_short_name => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
20002 p_progress_status => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_ERROR);
20003 --srsreeni bug6011651 ends
20004 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
20005 p_api_name => l_api_name,
20006 p_pkg_name => g_pkg_name,
20007 p_exc_name => 'OTHERS',
20008 x_msg_count => x_msg_count,
20009 x_msg_data => x_msg_data,
20010 p_api_type => g_api_type);
20011
20012
20013 END generate_streams;
20014
20015
20016 Procedure generate_internal_streams(
20017 p_api_version IN NUMBER,
20018 p_init_msg_list IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
20019 p_chr_id IN NUMBER,
20020 p_line_id IN NUMBER,
20021 x_return_status OUT NOCOPY VARCHAR2,
20022 x_msg_count OUT NOCOPY NUMBER,
20023 x_msg_data OUT NOCOPY VARCHAR2) IS
20024
20025 l_api_name CONSTANT VARCHAR2(30) := 'GEN_STREAMS';
20026 l_api_version CONSTANT NUMBER := 1.0;
20027 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
20028
20029 l_stmv_rec Okl_Streams_pub.stmv_rec_type;
20030 l_selv_tbl Okl_Streams_pub.selv_tbl_type;
20031 x_stmv_rec Okl_Streams_pub.stmv_rec_type;
20032 x_selv_tbl Okl_Streams_pub.selv_tbl_type;
20033
20034 cursor l_rl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
20035 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
20036 chrId NUMBER,
20037 cleId NUMBER ) IS
20038 select crl.object1_id1,
20039 crl.RULE_INFORMATION1,
20040 crl.RULE_INFORMATION2,
20041 crl.RULE_INFORMATION3,
20042 crl.RULE_INFORMATION5,
20043 crl.RULE_INFORMATION6,
20044 crl.RULE_INFORMATION10
20045 from OKC_RULE_GROUPS_B crg,
20046 OKC_RULES_B crl
20047 where crl.rgp_id = crg.id
20048 and crg.RGD_CODE = rgcode
20049 and crl.RULE_INFORMATION_CATEGORY = rlcat
20050 and crg.dnz_chr_id = chrId
20051 and crg.cle_id = cleId
20052 order by crl.RULE_INFORMATION1;
20053
20054 l_rl_rec l_rl_csr%ROWTYPE;
20055 l_rl_rec1 l_rl_csr%ROWTYPE;
20056 number_of_periods NUMBER;
20057 start_date DATE;
20058 amount NUMBER;
20059 i NUMBER;
20060 j NUMBER;
20061 k NUMBER;
20062 temp NUMBER;
20063
20064 cursor l_nullrl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
20065 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
20066 chrId NUMBER,
20067 cleId NUMBER ) IS
20068 select crl.id
20069 from OKC_RULE_GROUPS_B crg,
20070 OKC_RULES_B crl
20071 where crl.rgp_id = crg.id
20072 and crg.RGD_CODE = rgcode
20073 and crl.RULE_INFORMATION_CATEGORY = rlcat
20074 and nvl(crl.RULE_INFORMATION1, 'XXX' ) = 'XXX'
20075 and nvl(crl.RULE_INFORMATION2, 'XXX' ) = 'XXX'
20076 and nvl(crl.RULE_INFORMATION3, 'XXX' ) = 'XXX'
20077 and nvl(crl.RULE_INFORMATION6, 'XXX' ) = 'XXX'
20078 and crg.dnz_chr_id = chrId
20079 and nvl(crg.cle_id, -1) = cleId;
20080
20081 l_nullrl_rec l_nullrl_csr%ROWTYPE;
20082
20083 l_rulv_rec OKL_RULE_PUB.rulv_rec_type;
20084
20085 BEGIN
20086
20087 x_return_status := OKC_API.START_ACTIVITY(
20088 p_api_name => l_api_name,
20089 p_pkg_name => g_pkg_name,
20090 p_init_msg_list => p_init_msg_list,
20091 l_api_version => l_api_version,
20092 p_api_version => p_api_version,
20093 p_api_type => G_API_TYPE,
20094 x_return_status => x_return_status);
20095
20096 -- check if activity started successfully
20097 If (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
20098 raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
20099 ElSIF (x_return_status = OKC_API.G_RET_STS_ERROR) then
20100 raise OKC_API.G_EXCEPTION_ERROR;
20101 End If;
20102
20103
20104 FOR l_nullrl_rec in l_nullrl_csr ( 'LALEVL', 'LASLL', p_chr_id, p_line_id )
20105 LOOP
20106
20107 l_rulv_rec.id := l_nullrl_rec.id;
20108
20109 OKL_RULE_PUB.delete_rule(
20110 p_api_version => l_api_version,
20111 p_init_msg_list => p_init_msg_list,
20112 x_return_status => x_return_status,
20113 x_msg_count => x_msg_count,
20114 x_msg_data => x_msg_data,
20115 p_rulv_rec => l_rulv_rec );
20116
20117
20118 -- check if activity started successfully
20119 If (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
20120 raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
20121 ElSIF (x_return_status = OKC_API.G_RET_STS_ERROR) then
20122 raise OKC_API.G_EXCEPTION_ERROR;
20123 End If;
20124
20125 END LOOP;
20126
20127 FOR l_nullrl_rec in l_nullrl_csr ( 'LALEVL', 'LASLL', p_chr_id, -1 )
20128 LOOP
20129
20130 l_rulv_rec.id := l_nullrl_rec.id;
20131
20132 OKL_RULE_PUB.delete_rule(
20133 p_api_version => l_api_version,
20134 p_init_msg_list => p_init_msg_list,
20135 x_return_status => x_return_status,
20136 x_msg_count => x_msg_count,
20137 x_msg_data => x_msg_data,
20138 p_rulv_rec => l_rulv_rec );
20139
20140
20141 -- check if activity started successfully
20142 If (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
20143 raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
20144 ElSIF (x_return_status = OKC_API.G_RET_STS_ERROR) then
20145 raise OKC_API.G_EXCEPTION_ERROR;
20146 End If;
20147
20148 END LOOP;
20149
20150 OPEN l_rl_csr ( 'LALEVL', 'LASLH', p_chr_id, p_line_id );
20151 FETCH l_rl_csr INTO l_rl_rec1;
20152 If ( l_rl_csr%NOTFOUND ) Then
20153 raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
20154 End If;
20155 CLOSE l_rl_csr;
20156
20157 l_stmv_rec.sty_id := TO_NUMBER(l_rl_rec1.object1_id1);
20158 l_stmv_rec.khr_id := p_chr_id;
20159 l_stmv_rec.kle_id := p_line_id;
20160 l_stmv_rec.say_code := 'CURR';
20161 l_stmv_rec.active_yn := 'Y';
20162 l_stmv_rec.date_current := sysdate;
20163
20164 Select max(transaction_number)+1 into temp
20165 From okl_streams;
20166
20167 l_stmv_rec.transaction_number := temp;
20168 l_stmv_rec.sgn_code := 'MANL';
20169
20170 j := 0;
20171 FOR l_rl_rec in l_rl_csr ( 'LALEVL', 'LASLL', p_chr_id, p_line_id )
20172 LOOP
20173
20174 number_of_periods := TO_NUMBER(l_rl_rec.RULE_INFORMATION3);
20175 amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
20176 start_date := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
20177 k := 0;
20178 FOR i in 1..number_of_periods
20179 LOOP
20180 k := i;
20181 l_selv_tbl(i+j).amount := amount;
20182 l_selv_tbl(i+j).accrued_yn := 'Y';
20183 l_selv_tbl(i+j).stream_element_date := add_months(start_date,i-1);
20184 l_selv_tbl(i+j).date_billed := l_selv_tbl(i+j).stream_element_date;
20185 l_selv_tbl(i+j).se_line_number := i+j;
20186 l_selv_tbl(i+j).comments := 'Streams';
20187
20188 END LOOP;
20189 j := j + k;
20190
20191 END LOOP;
20192
20193 Okl_Streams_Pub.create_streams(
20194 p_api_version => l_api_version
20195 ,p_init_msg_list => p_init_msg_list
20196 ,x_return_status => l_return_status
20197 ,x_msg_count => x_msg_count
20198 ,x_msg_data => x_msg_data
20199 ,p_stmv_rec => l_stmv_rec
20200 ,p_selv_tbl => l_selv_tbl
20201 ,x_stmv_rec => x_stmv_rec
20202 ,x_selv_tbl => x_selv_tbl);
20203
20204 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20205 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20206 ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
20207 raise OKL_API.G_EXCEPTION_ERROR;
20208 End If;
20209
20210 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
20211
20212 Exception
20213 when OKC_API.G_EXCEPTION_ERROR then
20214 x_return_status := OKC_API.HANDLE_EXCEPTIONS(
20215 p_api_name => l_api_name,
20216 p_pkg_name => g_pkg_name,
20217 p_exc_name => 'OKC_API.G_RET_STS_ERROR',
20218 x_msg_count => x_msg_count,
20219 x_msg_data => x_msg_data,
20220 p_api_type => g_api_type);
20221
20222 when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
20223 x_return_status := OKC_API.HANDLE_EXCEPTIONS(
20224 p_api_name => l_api_name,
20225 p_pkg_name => g_pkg_name,
20226 p_exc_name => 'OKC_API.G_RET_STS_UNEXP_ERROR',
20227 x_msg_count => x_msg_count,
20228 x_msg_data => x_msg_data,
20229 p_api_type => g_api_type);
20230
20231 when OTHERS then
20232 x_return_status := OKC_API.HANDLE_EXCEPTIONS(
20233 p_api_name => l_api_name,
20234 p_pkg_name => g_pkg_name,
20235 p_exc_name => 'OTHERS',
20236 x_msg_count => x_msg_count,
20237 x_msg_data => x_msg_data,
20238 p_api_type => g_api_type);
20239
20240
20241 END generate_internal_streams;
20242
20243 Procedure generate_internal_streams(
20244 p_api_version IN NUMBER,
20245 p_init_msg_list IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
20246 p_chr_id IN NUMBER,
20247 x_return_status OUT NOCOPY VARCHAR2,
20248 x_msg_count OUT NOCOPY NUMBER,
20249 x_msg_data OUT NOCOPY VARCHAR2) IS
20250
20251 l_api_name CONSTANT VARCHAR2(30) := 'GEN_STREAMS';
20252 l_api_version CONSTANT NUMBER := 1.0;
20253 l_return_status VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
20254
20255 pl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
20256 pl_khrv_rec okl_contract_pvt.khrv_rec_type;
20257 xl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
20258 xl_khrv_rec okl_contract_pub.khrv_rec_type;
20259
20260 l_rents NUMBER;
20261 l_cap_amnt NUMBER;
20262 l_yield NUMBER;
20263
20264
20265 BEGIN
20266
20267 l_return_status := OKC_API.START_ACTIVITY(
20268 p_api_name => l_api_name,
20269 p_pkg_name => g_pkg_name,
20270 p_init_msg_list => p_init_msg_list,
20271 l_api_version => l_api_version,
20272 p_api_version => p_api_version,
20273 p_api_type => G_API_TYPE,
20274 x_return_status => l_return_status);
20275
20276 -- check if activity started successfully
20277 If (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
20278 raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
20279 ElSIF (l_return_status = OKC_API.G_RET_STS_ERROR) then
20280 raise OKC_API.G_EXCEPTION_ERROR;
20281 End If;
20282 okl_contract_status_pub.update_contract_status(
20283 l_api_version,
20284 p_init_msg_list,
20285 x_return_status,
20286 x_msg_count,
20287 x_msg_data,
20288 'COMPLETE',
20289 p_chr_id );
20290
20291 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20292 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20293 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20294 RAISE OKL_API.G_EXCEPTION_ERROR;
20295 END IF;
20296
20297 OKL_CONTRACT_STATUS_PVT.cascade_lease_status
20298 (p_api_version => p_api_version,
20299 p_init_msg_list => p_init_msg_list,
20300 x_return_status => x_return_status,
20301 x_msg_count => x_msg_count,
20302 x_msg_data => x_msg_data,
20303 p_chr_id => p_chr_id);
20304
20305 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20306 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20307 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20308 RAISE OKL_API.G_EXCEPTION_ERROR;
20309 END IF;
20310 ---
20311
20312 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
20313
20314 Exception
20315 when OKC_API.G_EXCEPTION_ERROR then
20316 x_return_status := OKC_API.HANDLE_EXCEPTIONS(
20317 p_api_name => l_api_name,
20318 p_pkg_name => g_pkg_name,
20319 p_exc_name => 'OKC_API.G_RET_STS_ERROR',
20320 x_msg_count => x_msg_count,
20321 x_msg_data => x_msg_data,
20322 p_api_type => g_api_type);
20323
20324 when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
20325 x_return_status := OKC_API.HANDLE_EXCEPTIONS(
20326 p_api_name => l_api_name,
20327 p_pkg_name => g_pkg_name,
20328 p_exc_name => 'OKC_API.G_RET_STS_UNEXP_ERROR',
20329 x_msg_count => x_msg_count,
20330 x_msg_data => x_msg_data,
20331 p_api_type => g_api_type);
20332
20333 when OTHERS then
20334 x_return_status := OKC_API.HANDLE_EXCEPTIONS(
20335 p_api_name => l_api_name,
20336 p_pkg_name => g_pkg_name,
20337 p_exc_name => 'OTHERS',
20338 x_msg_count => x_msg_count,
20339 x_msg_data => x_msg_data,
20340 p_api_type => g_api_type);
20341
20342
20343 END generate_internal_streams;
20344
20345 PROCEDURE GEN_INTR_EXTR_STREAM (
20346 p_api_version IN NUMBER,
20347 p_init_msg_list IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
20348 x_return_status OUT NOCOPY VARCHAR2,
20349 x_msg_count OUT NOCOPY NUMBER,
20350 x_msg_data OUT NOCOPY VARCHAR2,
20351 p_khr_id IN OKC_K_HEADERS_B.ID%TYPE,
20352 p_generation_ctx_code IN VARCHAR2,
20353 x_trx_number OUT NOCOPY NUMBER,
20354 x_trx_status OUT NOCOPY VARCHAR2
20355 ) AS
20356
20357 l_api_name VARCHAR2(35) := 'gen_intr_extr_stream';
20358 l_proc_name VARCHAR2(35) := 'GEN_INTR_EXTR_STREAM';
20359 l_api_version NUMBER := 1.0;
20360 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
20361
20362 l_pre_tax_irr NUMBER;
20363
20364 -- TYPE yields IS TABLE OF yields_rec_type INDEX BY BINARY_INTEGER;
20365 -- Start modification 11i10 bakuchib
20366 p_chr_yields yields_rec_type;
20367 -- end modification 11i10 bakuchib
20368 lx_contract_rates OKL_STREAM_GENERATOR_PVT.rate_rec_type;
20369
20370 l_hdr_rec l_hdr_csr%ROWTYPE;
20371 p_pdtv_rec pdtv_rec_type;
20372 x_pdt_parameter_rec pdt_param_rec_type;
20373 x_no_data_found BOOLEAN;
20374
20375 l_stmv_tbl okl_streams_pub.stmv_tbl_type;
20376 x_stmv_tbl okl_streams_pub.stmv_tbl_type;
20377 l_selv_tbl Okl_Streams_pub.selv_tbl_type;
20378 x_selv_tbl Okl_Streams_pub.selv_tbl_type;
20379 l_strms_orig_rec strms_csr%ROWTYPE;
20380 l_strms_rep_rec strms_csr%ROWTYPE;
20381 -- Code for bulk update -02/28/2004 - HKPATEL
20382 l_id_tbl okl_streams_util.NumberTabTyp;
20383 -- Code for bulk update ends here -02/28/2004 - HKPATEL
20384
20385
20386 i NUMBER;
20387 l_strms_rec strms_csr%ROWTYPE;
20388 l_pricing_engine okl_st_gen_tmpt_sets.pricing_engine%TYPE;
20389
20390 BEGIN
20391 --Added by kthiruva for Debugging
20392 L_DEBUG_ENABLED := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
20393 write_to_log('Start of Debug Logging for ESG');
20394 write_to_log ('=============================');
20395 print( l_api_name, 'begin');
20396 x_return_status := OKL_API.START_ACTIVITY(
20397 p_api_name => l_api_name,
20398 p_pkg_name => G_PKG_NAME,
20399 p_init_msg_list => p_init_msg_list,
20400 l_api_version => l_api_version,
20401 p_api_version => p_api_version,
20402 p_api_type => G_API_TYPE,
20403 x_return_status => x_return_status);
20404
20405 -- check if activity started successfully
20406 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20407 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20408 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
20409 raise OKL_API.G_EXCEPTION_ERROR;
20410 END IF;
20411
20412 print( l_api_name, 'deleting working streams');
20413 delete_working_streams(
20414 p_api_version => p_api_version,
20415 p_init_msg_list => p_init_msg_list,
20416 x_return_status => x_return_status,
20417 x_msg_count => x_msg_count,
20418 x_msg_data => x_msg_data,
20419 p_chr_id => p_khr_id);
20420
20421 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20422 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20423 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
20424 raise OKL_API.G_EXCEPTION_ERROR;
20425 END IF;
20426
20427 OPEN l_hdr_csr(p_khr_id);
20428 FETCH l_hdr_csr into l_hdr_rec;
20429 IF l_hdr_csr%NOTFOUND THEN
20430 CLOSE l_hdr_csr;
20431 print( l_api_name, 'header curosr unexpected error');
20432 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20433 END IF;
20434 CLOSE l_hdr_csr;
20435
20436 IF ( l_hdr_rec.deal_type = 'LOAN-REVOLVING') Then
20437
20438 --Added by kthiruva for Debugging
20439 write_to_log('The Deal Type is Loan Revolving');
20440 write_to_log('Prior to the call to OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE');
20441
20442 print( l_api_name, 'generating var int sched');
20443 OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE(
20444 p_api_version => p_api_version,
20445 p_init_msg_list => p_init_msg_list,
20446 p_khr_id => p_khr_id,
20447 p_purpose_code => NULL,
20448 x_return_status => x_return_status,
20449 x_msg_count => x_msg_count,
20450 x_msg_data => x_msg_data);
20451 --Added by kthiruva for Debugging
20452 write_to_log('After the call to OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE, return status is :'||x_return_status);
20453
20454 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20455 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20456 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
20457 raise OKL_API.G_EXCEPTION_ERROR;
20458 END IF;
20459
20460 I := 0;
20461 FOR l_strms_rec in strms_csr ( p_khr_id, 'WORK', 'ORIGIN')
20462 LOOP
20463
20464 i := i + 1;
20465 /* Commented code for Bulk update by HKPATEL -02/28/2005
20466 l_stmv_tbl(i).id := l_strms_rec.STRM_ID;
20467 l_stmv_tbl(i).say_code := 'CURR';
20468 l_stmv_tbl(i).active_yn := 'Y';
20469 l_stmv_tbl(i).date_current := sysdate;
20470 */
20471
20472 l_id_tbl(i) := l_strms_rec.STRM_ID;
20473
20474 END LOOP;
20475
20476 If ( l_id_tbl.COUNT > 0 ) Then
20477 BEGIN
20478 --Added by kthiruva for Debugging
20479 write_to_log('Updating the Work streams to CURR');
20480
20481 FORALL i IN l_id_tbl.FIRST..l_id_tbl.LAST
20482 UPDATE OKL_STREAMS
20483 SET say_code = 'CURR',
20484 active_yn = 'Y',
20485 date_current = sysdate
20486 WHERE ID = l_id_tbl(i);
20487
20488 --Added by kthiruva for Debugging
20489 write_to_log('Streams updated succesfully');
20490 write_to_log('Prior to the call to OKL_BILLING_CONTROLLER_PVT.track_next_bill_date');
20491 -- Added by mansrini for bug 4728636 (G bug 4520466 )
20492 OKL_BILLING_CONTROLLER_PVT.track_next_bill_date(p_khr_id);
20493 -- end changes
20494 write_to_log('Aftter the call to OKL_BILLING_CONTROLLER_PVT.track_next_bill_date');
20495
20496
20497 EXCEPTION
20498 WHEN OTHERS THEN
20499 okl_api.set_message (p_app_name => G_APP_NAME,
20500 p_msg_name => G_DB_ERROR,
20501 p_token1 => G_PROG_NAME_TOKEN,
20502 p_token1_value => l_api_name,
20503 p_token2 => G_SQLCODE_TOKEN,
20504 p_token2_value => sqlcode,
20505 p_token3 => G_SQLERRM_TOKEN,
20506 p_token3_value => sqlerrm);
20507 l_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
20508 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20509 END;
20510 /* Commented for Bulk update by HKPATEL -02/28/2004
20511 If ( l_stmv_tbl.COUNT > 0 ) Then
20512 Okl_Streams_pub.update_streams(
20513 p_api_version => p_api_version,
20514 p_init_msg_list => p_init_msg_list,
20515 x_return_status => x_return_status,
20516 x_msg_count => x_msg_count,
20517 x_msg_data => x_msg_data,
20518 p_stmv_tbl => l_stmv_tbl,
20519 x_stmv_tbl => x_stmv_tbl);
20520
20521 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20522 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20523 END IF;
20524 */
20525
20526 ENd If;
20527 --Added by kthiruva on 09-Oct-2007 for Bug 6476425
20528 --Updating the contract status to Complete
20529 okl_contract_status_pub.update_contract_status(
20530 l_api_version,
20531 p_init_msg_list,
20532 x_return_status,
20533 x_msg_count,
20534 x_msg_data,
20535 'COMPLETE',
20536 p_khr_id );
20537 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20538 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20539 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20540 RAISE OKL_API.G_EXCEPTION_ERROR;
20541 END IF;
20542 --Added by kthiruva for Debugging
20543 write_to_log('After the call to update_contract_status, return status is :'||x_return_status);
20544
20545 --call to cascade status on to lines
20546 OKL_CONTRACT_STATUS_PVT.cascade_lease_status(
20547 p_api_version => l_api_version,
20548 p_init_msg_list => p_init_msg_list,
20549 x_return_status => x_return_status,
20550 x_msg_count => x_msg_count,
20551 x_msg_data => x_msg_data,
20552 p_chr_id => p_khr_id);
20553 --Added by kthiruva for Debugging
20554 write_to_log('After the call to cascade_lease_status, return status is :'||x_return_status);
20555
20556 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20557 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20558 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20559 RAISE OKL_API.G_EXCEPTION_ERROR;
20560 END IF;
20561
20562 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
20563 p_api_version => l_api_version,
20564 p_init_msg_list => p_init_msg_list,
20565 x_return_status => x_return_status,
20566 x_msg_count => x_msg_count,
20567 x_msg_data => x_msg_data,
20568 p_khr_id => p_khr_id,
20569 p_prog_short_name => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
20570 p_progress_status => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_COMPLETE);
20571
20572 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20573 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20574 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20575 RAISE OKL_API.G_EXCEPTION_ERROR;
20576 END IF;
20577 --Bug 6476425 - End of Changes
20578
20579
20580 return;
20581
20582 End If;
20583
20584 OKL_STREAMS_UTIL.get_pricing_engine(
20585 p_khr_id => p_khr_id,
20586 x_pricing_engine => l_pricing_engine,
20587 x_return_status => x_return_status);
20588 --Added by kthiruva for Debugging
20589 write_to_log('The pricing engine is :'||l_pricing_engine);
20590 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20591 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20592 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
20593 raise OKL_API.G_EXCEPTION_ERROR;
20594 END IF;
20595
20596
20597 --IF ( fnd_profile.value('OKL_STREAMS_GEN_PATH') = 'EXTERNAL') THEN
20598 IF ( l_pricing_engine = 'EXTERNAL') THEN
20599
20600 --
20601 -- Call EXTERNAL Stream genration process
20602 --
20603
20604 OKL_GENERATE_STREAMS_PUB.GENERATE_STREAMS(
20605 p_api_version => p_api_version,
20606 p_init_msg_list => OKL_API.G_FALSE,
20607 p_khr_id => p_khr_id,
20608 p_generation_ctx_code => p_generation_ctx_code,
20609 x_trx_number => x_trx_number,
20610 x_trx_status => x_trx_status,
20611 x_return_status => x_return_status,
20612 x_msg_count => x_msg_count,
20613 x_msg_data => x_msg_data
20614 );
20615
20616 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20617 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20618 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
20619 raise OKL_API.G_EXCEPTION_ERROR;
20620 END IF;
20621
20622 --ELSE -- fnd_profile = INTERNAL or NONE
20623 ELSIF ( l_pricing_engine = 'INTERNAL') THEN
20624 --
20625 -- Call INTERNAL Stream genration process
20626 --
20627 print( l_api_name, 'generating streams');
20628 /*
20629 OKL_STREAM_GENERATOR_PUB.generate_streams(
20630 p_api_version => l_api_version,
20631 p_init_msg_list => p_init_msg_list,
20632 p_khr_id => p_khr_id,
20633 x_pre_tax_irr => l_pre_tax_irr,
20634 x_return_status => x_return_status,
20635 x_msg_count => x_msg_count,
20636 x_msg_data => x_msg_data
20637 );
20638 */
20639 OKL_STREAM_GENERATOR_PUB.generate_streams(
20640 p_api_version => l_api_version,
20641 p_init_msg_list => p_init_msg_list,
20642 x_return_status => x_return_status,
20643 x_msg_count => x_msg_count,
20644 x_msg_data => x_msg_data,
20645 p_khr_id => p_khr_id,
20646 x_contract_rates => lx_contract_rates) ;
20647 -- check if activity started successfully
20648 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20649 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20650 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
20651 raise OKL_API.G_EXCEPTION_ERROR;
20652 End If;
20653 p_chr_yields.pre_tax_yield := lx_contract_rates.pre_tax_yield;
20654 p_chr_yields.pre_tax_irr := lx_contract_rates.pre_tax_irr;
20655 p_chr_yields.implicit_interest_rate := lx_contract_rates.implicit_interest_rate;
20656 p_chr_yields.sub_impl_interest_rate := lx_contract_rates.sub_impl_interest_rate;
20657 p_chr_yields.sub_pre_tax_irr := lx_contract_rates.sub_pre_tax_irr;
20658
20659 -- Added by kthiruva on 10-Aug-2004
20660 -- Bug 3817222 - Start of Changes
20661 If ( l_hdr_rec.report_pdt_id <> -1 ) Then
20662 p_pdtv_rec.id := l_hdr_rec.report_pdt_id;
20663 OKL_SETUPPRODUCTS_PVT.Getpdt_parameters(
20664 p_api_version => p_api_version,
20665 p_init_msg_list => p_init_msg_list,
20666 x_return_status => x_return_status,
20667 x_msg_count => x_msg_count,
20668 x_msg_data => x_msg_data,
20669 p_pdtv_rec => p_pdtv_rec,
20670 x_no_data_found => x_no_data_found,
20671 p_pdt_parameter_rec => x_pdt_parameter_rec);
20672 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20673 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20674 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20675 RAISE OKL_API.G_EXCEPTION_ERROR;
20676 END IF;
20677 OKL_STREAM_GENERATOR_PUB.generate_streams(
20678 p_api_version => l_api_version,
20679 p_init_msg_list => p_init_msg_list,
20680 x_return_status => x_return_status,
20681 x_msg_count => x_msg_count,
20682 x_msg_data => x_msg_data,
20683 p_khr_id => p_khr_id,
20684 p_reporting_book_class => x_pdt_parameter_rec.deal_type,
20685 x_contract_rates => lx_contract_rates) ;
20686 -- check if activity started successfully
20687 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20688 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20689 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
20690 raise OKL_API.G_EXCEPTION_ERROR;
20691 End If;
20692 -- p_chr_yields(1).PRE_TAX_IRR := l_pre_tax_irr; -- Not updated though !!! (ssiruvol - 06-FEB-2003)
20693 -- Start modification 11i10 bakuchib
20694 /* Commented by HKPATEL for bug 4040722 - 01-DEC-2004
20695 p_chr_yields.pre_tax_yield := lx_contract_rates.pre_tax_yield;
20696 p_chr_yields.pre_tax_irr := lx_contract_rates.pre_tax_irr;
20697 p_chr_yields.implicit_interest_rate := lx_contract_rates.implicit_interest_rate;
20698 p_chr_yields.sub_impl_interest_rate := lx_contract_rates.sub_impl_interest_rate;
20699 p_chr_yields.sub_pre_tax_irr := lx_contract_rates.sub_pre_tax_irr;
20700 Bug 4040722*/
20701 -- End modification 11i10 bakuchib
20702
20703 x_trx_number := -1;
20704 x_trx_status := NULL;
20705 End If;
20706 -- Bug 3817222 - End of Changes
20707
20708 print( l_api_name, 'process streams');
20709 process_streams(
20710 p_api_version => l_api_version,
20711 p_init_msg_list => OKL_API.G_FALSE,
20712 x_return_status => x_return_status,
20713 x_msg_count => x_msg_count,
20714 x_msg_data => x_msg_data,
20715 p_chr_id => p_khr_id,
20716 p_process_yn => OKL_API.G_TRUE,
20717 p_chr_yields => p_chr_yields,
20718 p_source_call => 'ISG');
20719 -- check if activity started successfully
20720 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20721 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20722 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
20723 raise OKL_API.G_EXCEPTION_ERROR;
20724 End If;
20725
20726 END IF; -- fnd_profile
20727
20728 print( l_api_name, 'end', x_return_status);
20729 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
20730 x_msg_data => x_msg_data);
20731
20732 RETURN;
20733
20734 EXCEPTION
20735 when OKL_API.G_EXCEPTION_ERROR then
20736 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
20737 p_api_name => l_api_name,
20738 p_pkg_name => G_PKG_NAME,
20739 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
20740 x_msg_count => x_msg_count,
20741 x_msg_data => x_msg_data,
20742 p_api_type => G_API_TYPE);
20743
20744 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
20745 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
20746 p_api_name => l_api_name,
20747 p_pkg_name => G_PKG_NAME,
20748 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
20749 x_msg_count => x_msg_count,
20750 x_msg_data => x_msg_data,
20751 p_api_type => G_API_TYPE);
20752
20753 when OTHERS then
20754 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
20755 p_api_name => l_api_name,
20756 p_pkg_name => G_PKG_NAME,
20757 p_exc_name => 'OTHERS',
20758 x_msg_count => x_msg_count,
20759 x_msg_data => x_msg_data,
20760 p_api_type => G_API_TYPE);
20761
20762 END GEN_INTR_EXTR_STREAM;
20763 -- Start modification 11i10 bakuchib
20764 -------------------------------------------------------------------------------------------------
20765 -- Start of Commnets
20766 -- Badrinath Kuchibholta
20767 -- Procedure Name : validate_payments
20768 -- Description : validate sll payments
20769 -- Business Rules :
20770 -- Parameters : Standard Parameters with Payment table
20771 -- Version :
20772 -- End of Commnets
20773 -------------------------------------------------------------------------------------------------
20774 PROCEDURE validate_payments(p_api_version IN NUMBER,
20775 p_init_msg_list IN VARCHAR2,
20776 x_return_status OUT NOCOPY VARCHAR2,
20777 x_msg_count OUT NOCOPY NUMBER,
20778 x_msg_data OUT NOCOPY VARCHAR2,
20779 p_khr_id IN OKC_K_HEADERS_B.ID%TYPE,
20780 p_paym_tbl IN OKL_STREAM_GENERATOR_PVT.payment_tbl_type)
20781 IS
20782 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_PAYMENTS';
20783 G_APP_NAME VARCHAR2(30) := 'OKL';
20784 l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
20785 G_RGD_CODE okc_rule_groups_b.rgd_code%TYPE := 'LALEVL';
20786 G_RUL_SLH_CODE okc_rules_b.rule_information_category%TYPE := 'LASLH';
20787 G_RUL_SLL_CODE okc_rules_b.rule_information_category%TYPE := 'LASLL';
20788 G_FEE_TYPE okl_k_lines.fee_type%TYPE := 'PASSTHROUGH';
20789 -- Messages
20790 G_PAYMENT_OVERLAP_ERROR VARCHAR2(200) := 'OKL_PAYMENT_OVERLAP_ERROR';
20791 G_PAYMENT_GAP_ERROR VARCHAR2(200) := 'OKL_PAYMENT_GAP_ERROR';
20792 G_PSTH_PAYMENT_ERROR VARCHAR2(200) := 'OKL_PSTH_PAYMENT_ERROR';
20793 -- Messages
20794 ln_pasth_cnt NUMBER := 0;
20795 ln_dummy NUMBER := 0;
20796 i NUMBER := 0;
20797 j NUMBER := 0;
20798 ln_cnt_amt_null NUMBER := 0;
20799 ln_cnt_amt_not_null NUMBER := 0;
20800 ln_cnt_rte_null NUMBER := 0;
20801 ln_cnt_rte_not_null NUMBER := 0;
20802 ln_tot_cnt NUMBER := 0;
20803 l_freq VARCHAR2(1);
20804 -- Get Passthrough Fee Lines
20805 CURSOR c_get_psth_csr(p_khr_id okl_k_headers.id%TYPE)
20806 IS
20807 SELECT cle.id
20808 FROM okc_k_lines_b cle,
20809 okl_k_lines kle,
20810 okc_line_styles_b lse
20811 WHERE cle.dnz_chr_id = p_khr_id
20812 AND cle.lse_id = lse.id
20813 AND cle.sts_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED')
20814 AND lse.lty_code = 'FEE'
20815 AND cle.id = kle.id
20816 AND kle.fee_type = G_FEE_TYPE;
20817 -- Get number of SLH payments for Passthrough fee type
20818 CURSOR c_get_pay_psth_csr(p_khr_id okl_k_headers.id%TYPE,
20819 p_kle_id okl_k_headers.id%TYPE)
20820 IS
20821 SELECT COUNT(*)
20822 FROM okc_rules_b slh,
20823 okc_rule_groups_b rgp,
20824 okl_k_lines kle
20825 WHERE rgp.dnz_chr_id = p_khr_id
20826 AND kle.id = p_kle_id
20827 AND rgp.rgd_code= G_RGD_CODE
20828 AND rgp.id = slh.rgp_id
20829 AND kle.id = rgp.cle_id
20830 AND kle.fee_type = G_FEE_TYPE
20831 AND slh.rule_information_category = G_RUL_SLH_CODE;
20832
20833 -- Get all the Top lines for p_khr_id
20834 CURSOR c_get_all_lines_csr(p_khr_id okl_k_headers.id%TYPE)
20835 IS
20836 SELECT cle.id line_id
20837 FROM okc_k_lines_b cle,
20838 okc_line_styles_b lse
20839 WHERE cle.dnz_chr_id = p_khr_id
20840 AND cle.lse_id = lse.id
20841 AND cle.sts_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED')
20842 AND lse.lty_code IN ('FREE_FORM1','FEE','SOLD_SERVICE');
20843
20844 -- Get all the SLH payment lines for Each Khr_id and Line Id
20845 CURSOR c_get_slh_lines_csr(p_khr_id okl_k_headers.id%TYPE,
20846 p_cle_id okl_k_lines.id%TYPE)
20847 IS
20848 SELECT rul.id slh_id
20849 FROM okc_rule_groups_b rgp,
20850 okc_rules_b rul
20851 WHERE rul.rgp_id = rgp.id
20852 AND rgp.rgd_code = G_RGD_CODE
20853 AND rul.rule_information_category = G_RUL_SLH_CODE
20854 AND rgp.dnz_chr_id = p_khr_id
20855 AND rgp.cle_id = p_cle_id;
20856
20857 -- Get all the SLL payment lines for Each Khr_id,SLH id and Line Id
20858 CURSOR c_get_sll_lines_csr(p_khr_id okl_k_headers.id%TYPE,
20859 p_cle_id okl_k_lines.id%TYPE,
20860 p_slh_id okc_rules_b.id%TYPE)
20861 IS
20862 SELECT FND_DATE.canonical_to_date(sll.rule_information2) start_date,
20863 /* DECODE(SLL.rule_information7,
20864 NULL,(ADD_MONTHS(FND_DATE.canonical_to_date(sll.rule_information2),to_number(SLL.rule_information3)*DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12))-1),
20865 TO_NUMBER(SLL.rule_information7),FND_DATE.canonical_to_date(sll.rule_information2)+SLL.rule_information7-1,
20866 (ADD_MONTHS(FND_DATE.canonical_to_date(sll.rule_information2),to_number(SLL.rule_information3)*DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12))-1)) end_date,
20867 */
20868 -- Bug 5362566: Start
20869 OKL_LA_PAYMENTS_PVT.get_display_end_date(
20870 sll.RULE_INFORMATION2, sll.RULE_INFORMATION7, sll.OBJECT1_ID1, sll.RULE_INFORMATION3,
20871 okl_la_payments_pvt.get_start_day( sll.id,sll.dnz_chr_id,sll.rgp_id,sll.object2_id1,sll.RULE_INFORMATION2)
20872 ,(SELECT end_date FROM okc_k_headers_b WHERE id = rgp.dnz_chr_id ) --Bug#5441811
20873 )
20874 END_DATE,
20875 -- Bug 5362566: End
20876 -- Start of BAKUCHIB modification bug#3121708
20877 FND_NUMBER.canonical_to_number(NVL(sll.rule_information6,sll.rule_information8)) amount,
20878 -- End of BAKUCHIB modification bug#3121708
20879 sll.rule_information13 rate,
20880 nvl(sll.rule_information10,'Y') arrears_yn,
20881 sll.rule_information5 structure
20882 FROM okc_rules_b sll,
20883 okc_rules_b slh,
20884 okc_rule_groups_b rgp
20885 WHERE rgp.dnz_chr_id = p_khr_id
20886 AND rgp.cle_id = p_cle_id
20887 AND slh.id = p_slh_id
20888 AND rgp.rgd_code = G_RGD_CODE
20889 AND rgp.id = slh.rgp_id
20890 AND slh.rule_information_category = G_RUL_SLH_CODE
20891 AND TO_CHAR(slh.id) = sll.object2_id1
20892 AND sll.rule_information_category = G_RUL_SLL_CODE
20893 --Added by kthiruva for Bug 5130703
20894 AND slh.JTOT_OBJECT1_CODE = 'OKL_STRMTYP'
20895 ORDER BY FND_DATE.canonical_to_date(sll.rule_information2);
20896
20897 CURSOR c_valid_khr_csr(p_khr_id OKC_K_HEADERS_B.ID%TYPE)
20898 IS
20899 SELECT 1
20900 FROM DUAL
20901 WHERE EXISTS (SELECT 1
20902 FROM okc_k_headers_b
20903 WHERE id = p_khr_id);
20904 TYPE sll_date_rec_type IS RECORD (
20905 start_date okc_rules_b.last_update_date%TYPE := okl_api.G_MISS_DATE,
20906 end_date okc_rules_b.last_update_date%TYPE := okl_api.G_MISS_DATE);
20907 TYPE sll_date_tbl_type IS TABLE OF sll_date_rec_type
20908 INDEX BY BINARY_INTEGER;
20909 lt_sll_date_tbl_type sll_date_tbl_type;
20910 l_paym_tbl OKL_STREAM_GENERATOR_PVT.payment_tbl_type := p_paym_tbl;
20911 BEGIN
20912 l_return_status := OKL_API.START_ACTIVITY (
20913 l_api_name
20914 ,p_init_msg_list
20915 ,'_PVT'
20916 ,l_return_status);
20917 -- Check if activity started successfully
20918 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20919 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20920 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
20921 RAISE OKL_API.G_EXCEPTION_ERROR;
20922 END IF;
20923 IF (p_khr_id = OKL_API.G_MISS_NUM OR
20924 p_khr_id IS NULL) AND
20925 p_paym_tbl.COUNT = 0 THEN
20926 OKL_API.set_message(p_app_name => G_APP_NAME,
20927 p_msg_name => G_REQUIRED_VALUE,
20928 p_token1 => G_COL_NAME_TOKEN,
20929 p_token1_value => 'khr_id/Payment table');
20930 RAISE OKL_API.G_EXCEPTION_ERROR;
20931 ELSIF p_khr_id <> OKL_API.G_MISS_NUM OR
20932 p_khr_id IS NOT NULL THEN
20933 -- Validating the khr_id
20934 OPEN c_valid_khr_csr(p_khr_id => p_khr_id);
20935 FETCH c_valid_khr_csr INTO ln_dummy;
20936 IF c_valid_khr_csr%NOTFOUND THEN
20937 OKL_API.set_message(p_app_name => G_APP_NAME,
20938 p_msg_name => G_REQUIRED_VALUE,
20939 p_token1 => G_COL_NAME_TOKEN,
20940 p_token1_value => 'khr_id');
20941 RAISE OKL_API.G_EXCEPTION_ERROR;
20942 END IF;
20943 CLOSE c_valid_khr_csr;
20944 IF ln_dummy <> 1 THEN
20945 OKL_API.set_message(p_app_name => G_APP_NAME,
20946 p_msg_name => G_INVALID_VALUE,
20947 p_token1 => G_COL_NAME_TOKEN,
20948 p_token1_value => 'khr_id');
20949 RAISE OKL_API.G_EXCEPTION_ERROR;
20950 END IF;
20951 -- Checking for Passthrough
20952 FOR r_get_psth_rec IN c_get_psth_csr (p_khr_id => p_khr_id) LOOP
20953 OPEN c_get_pay_psth_csr(p_khr_id => p_khr_id,
20954 p_kle_id => r_get_psth_rec.id);
20955 FETCH c_get_pay_psth_csr INTO ln_pasth_cnt;
20956 CLOSE c_get_pay_psth_csr;
20957 IF ln_pasth_cnt > 1 THEN
20958 OKL_API.set_message(p_app_name => G_APP_NAME,
20959 p_msg_name => G_PSTH_PAYMENT_ERROR,
20960 p_token1 => 'FEE_TYPE',
20961 p_token1_value => G_FEE_TYPE);
20962 l_return_status := OKL_API.G_RET_STS_ERROR;
20963 EXIT WHEN (l_return_status = OKL_API.G_RET_STS_ERROR);
20964 END IF;
20965 END LOOP;
20966 -- Check if activity started successfully
20967 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20968 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20969 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
20970 RAISE OKL_API.G_EXCEPTION_ERROR;
20971 END IF;
20972 -- Get all the lines
20973 FOR r_get_all_lines_rec IN c_get_all_lines_csr(p_khr_id => p_khr_id) LOOP
20974 -- Get all the SLH payment lines for khr_id and each line_id
20975 FOR r_get_slh_lines_rec IN c_get_slh_lines_csr(p_khr_id => p_khr_id,
20976 p_cle_id => r_get_all_lines_rec.line_id) LOOP
20977 -- Get all the SLL payment lines for Khr_id,line_id and each slh_id
20978 FOR r_get_sll_lines_rec IN c_get_sll_lines_csr(p_khr_id => p_khr_id,
20979 p_cle_id => r_get_all_lines_rec.line_id,
20980 p_slh_id => r_get_slh_lines_rec.slh_id) LOOP
20981 lt_sll_date_tbl_type(i).start_date := r_get_sll_lines_rec.start_date;
20982 lt_sll_date_tbl_type(i).end_date := r_get_sll_lines_rec.end_date;
20983 IF r_get_sll_lines_rec.amount IS NULL THEN
20984 ln_cnt_amt_null := ln_cnt_amt_null + 1;
20985 ELSIF r_get_sll_lines_rec.amount IS NOT NULL THEN
20986 ln_cnt_amt_not_null := ln_cnt_amt_not_null + 1;
20987 END IF;
20988 -- Collecting amount and rate info to validate further
20989 IF r_get_sll_lines_rec.rate IS NULL THEN
20990 ln_cnt_rte_null := ln_cnt_rte_null + 1;
20991 ELSIF r_get_sll_lines_rec.rate IS NOT NULL THEN
20992 ln_cnt_rte_not_null := ln_cnt_rte_not_null + 1;
20993 END IF;
20994 IF r_get_sll_lines_rec.arrears_yn IS NULL OR
20995 r_get_sll_lines_rec.arrears_yn = OKL_API.G_MISS_CHAR THEN
20996 l_return_status := OKL_API.G_RET_STS_ERROR;
20997 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
20998 OKL_API.set_message(p_app_name => G_APP_NAME,
20999 p_msg_name => G_INVALID_VALUE,
21000 p_token1 => G_COL_NAME_TOKEN,
21001 p_token1_value => 'Arrear');
21002 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21003 END IF;
21004 ELSIF (r_get_sll_lines_rec.arrears_yn IS NOT NULL OR
21005 r_get_sll_lines_rec.arrears_yn <> OKL_API.G_MISS_CHAR) AND
21006 r_get_sll_lines_rec.arrears_yn = 'N' THEN
21007 IF r_get_sll_lines_rec.STRUCTURE IS NULL OR
21008 r_get_sll_lines_rec.STRUCTURE = OKL_API.G_MISS_CHAR THEN
21009 l_return_status := OKL_API.G_RET_STS_ERROR;
21010 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21011 OKL_API.set_message(p_app_name => G_APP_NAME,
21012 p_msg_name => G_INVALID_VALUE,
21013 p_token1 => G_COL_NAME_TOKEN,
21014 p_token1_value => 'Structure');
21015 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21016 END IF;
21017 END IF;
21018 END IF;
21019 i := i + 1;
21020 ln_tot_cnt := ln_tot_cnt + 1;
21021 END LOOP;
21022 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21023 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21024 END IF;
21025 -- Validating amounts and rates values
21026 IF ln_cnt_rte_not_null = ln_tot_cnt AND
21027 ln_cnt_amt_null < ln_tot_cnt AND
21028 ln_cnt_amt_null > 1 THEN
21029 l_return_status := OKL_API.G_RET_STS_ERROR;
21030 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21031 OKL_API.set_message(p_app_name => G_APP_NAME,
21032 p_msg_name => G_INVALID_VALUE,
21033 p_token1 => G_COL_NAME_TOKEN,
21034 p_token1_value => 'payment amounts');
21035 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21036 END IF;
21037 END IF;
21038 IF ln_cnt_amt_not_null = ln_tot_cnt THEN
21039 IF ln_cnt_rte_not_null < ln_tot_cnt AND
21040 ln_cnt_rte_not_null > 0 THEN
21041 l_return_status := OKL_API.G_RET_STS_ERROR;
21042 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21043 OKL_API.set_message(p_app_name => G_APP_NAME,
21044 p_msg_name => G_INVALID_VALUE,
21045 p_token1 => G_COL_NAME_TOKEN,
21046 p_token1_value => 'payment rates');
21047 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21048 END IF;
21049 END IF;
21050 END IF;
21051 IF ln_cnt_rte_null = ln_tot_cnt AND
21052 ln_cnt_amt_null = ln_tot_cnt THEN
21053 l_return_status := OKL_API.G_RET_STS_ERROR;
21054 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21055 OKL_API.set_message(p_app_name => G_APP_NAME,
21056 p_msg_name => G_REQUIRED_VALUE,
21057 p_token1 => G_COL_NAME_TOKEN,
21058 p_token1_value => 'payment rate and payment amount');
21059 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21060 END IF;
21061 END IF;
21062 IF ln_cnt_rte_not_null <> ln_tot_cnt AND
21063 ln_cnt_amt_not_null <> ln_tot_cnt THEN
21064 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21065 OKL_API.set_message(p_app_name => G_APP_NAME,
21066 p_msg_name => G_INVALID_VALUE,
21067 p_token1 => G_COL_NAME_TOKEN,
21068 p_token1_value => 'payment rates and payment amounts');
21069 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21070 END IF;
21071 END IF;
21072 ln_cnt_amt_null := 0;
21073 ln_cnt_amt_not_null := 0;
21074 ln_cnt_rte_null := 0;
21075 ln_cnt_rte_not_null := 0;
21076 -- Validate dates either overlapping or having gap
21077 IF lt_sll_date_tbl_type.COUNT > 0 THEN
21078 IF lt_sll_date_tbl_type.LAST > 1 THEN
21079 FOR k IN lt_sll_date_tbl_type.FIRST..lt_sll_date_tbl_type.LAST LOOP
21080 EXIT WHEN(k = lt_sll_date_tbl_type.LAST);
21081 IF lt_sll_date_tbl_type(k+1).start_date >= lt_sll_date_tbl_type(k).start_date AND
21082 lt_sll_date_tbl_type(k+1).start_date <= lt_sll_date_tbl_type(k).end_date THEN
21083 OKL_API.set_message(p_app_name => G_APP_NAME,
21084 p_msg_name => G_PAYMENT_OVERLAP_ERROR);
21085 l_return_status := OKL_API.G_RET_STS_ERROR;
21086 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21087 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21088 END IF;
21089 ELSIF lt_sll_date_tbl_type(k+1).start_date > lt_sll_date_tbl_type(k).end_date + 1 THEN
21090 OKL_API.set_message(p_app_name => G_APP_NAME,
21091 p_msg_name => G_PAYMENT_GAP_ERROR);
21092 l_return_status := OKL_API.G_RET_STS_ERROR;
21093 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21094 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21095 END IF;
21096 END IF;
21097 END LOOP;
21098 END IF;
21099 ELSE
21100 OKL_API.set_message(p_app_name => G_APP_NAME,
21101 p_msg_name => G_REQUIRED_VALUE,
21102 p_token1 => G_COL_NAME_TOKEN,
21103 p_token1_value => 'Payment Line Record');
21104 l_return_status := OKL_API.G_RET_STS_ERROR;
21105 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21106 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21107 END IF;
21108 END IF;
21109 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21110 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21111 END IF;
21112 lt_sll_date_tbl_type.DELETE;
21113 i := 0;
21114 END LOOP;
21115 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21116 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21117 END IF;
21118 END LOOP;
21119 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21120 RAISE OKL_API.G_EXCEPTION_ERROR;
21121 END IF;
21122 ELSIF l_paym_tbl.COUNT > 0 THEN
21123 i := l_paym_tbl.FIRST;
21124 LOOP
21125 IF (l_paym_tbl(i).START_DATE IS NULL OR
21126 l_paym_tbl(i).START_DATE = OKL_API.G_MISS_DATE) OR
21127 (l_paym_tbl(i).frequency IS NULL OR
21128 l_paym_tbl(i).frequency = OKL_API.G_MISS_CHAR) OR
21129 l_paym_tbl(i).frequency NOT IN ('A','S','Q','M') THEN
21130 OKL_API.set_message(p_app_name => G_APP_NAME,
21131 p_msg_name => G_REQUIRED_VALUE,
21132 p_token1 => G_COL_NAME_TOKEN,
21133 p_token1_value => 'Start date, Frequency');
21134 l_return_status := OKL_API.G_RET_STS_ERROR;
21135 EXIT WHEN (l_return_status = OKL_API.G_RET_STS_ERROR);
21136 END IF;
21137 IF l_paym_tbl(i).frequency = 'A' THEN
21138 l_freq := 12;
21139 ELSIF l_paym_tbl(i).frequency = 'S' THEN
21140 l_freq := 6;
21141 ELSIF l_paym_tbl(i).frequency = 'Q' THEN
21142 l_freq := 3;
21143 ELSIF l_paym_tbl(i).frequency = 'M' THEN
21144 l_freq := 1;
21145 END IF;
21146 IF (l_paym_tbl(i).stub_days IS NULL OR
21147 l_paym_tbl(i).stub_days = OKL_API.G_MISS_NUM) AND
21148 (l_paym_tbl(i).periods IS NOT NULL OR
21149 l_paym_tbl(i).periods <> OKL_API.G_MISS_NUM) THEN
21150 lt_sll_date_tbl_type(j).START_DATE := l_paym_tbl(i).START_DATE;
21151 lt_sll_date_tbl_type(j).end_date := ADD_MONTHS(l_paym_tbl(i).START_DATE,(l_paym_tbl(i).periods*l_freq))-1;
21152 ELSIF (l_paym_tbl(i).stub_days IS NOT NULL OR
21153 l_paym_tbl(i).stub_days <> OKL_API.G_MISS_NUM) AND
21154 (l_paym_tbl(i).periods IS NULL OR
21155 l_paym_tbl(i).periods = OKL_API.G_MISS_NUM) THEN
21156 lt_sll_date_tbl_type(j).START_DATE := l_paym_tbl(i).START_DATE;
21157 lt_sll_date_tbl_type(j).end_date := (l_paym_tbl(i).START_DATE+l_paym_tbl(i).stub_days)-1;
21158 ELSIF (l_paym_tbl(i).periods IS NULL OR
21159 l_paym_tbl(i).periods = OKL_API.G_MISS_NUM) AND
21160 (l_paym_tbl(i).stub_days IS NULL OR
21161 l_paym_tbl(i).stub_days = OKL_API.G_MISS_NUM) THEN
21162 OKL_API.set_message(p_app_name => G_APP_NAME,
21163 p_msg_name => G_REQUIRED_VALUE,
21164 p_token1 => G_COL_NAME_TOKEN,
21165 p_token1_value => 'Stub days, Periods');
21166 l_return_status := OKL_API.G_RET_STS_ERROR;
21167 EXIT WHEN (l_return_status = OKL_API.G_RET_STS_ERROR);
21168 END IF;
21169 j := j + 1;
21170 -- Collecting amount and rate info to validate further
21171 IF l_paym_tbl(i).amount IS NULL THEN
21172 ln_cnt_amt_null := ln_cnt_amt_null + 1;
21173 ELSIF l_paym_tbl(i).amount IS NOT NULL THEN
21174 ln_cnt_amt_not_null := ln_cnt_amt_not_null + 1;
21175 END IF;
21176 -- Collecting amount and rate info to validate further
21177 IF l_paym_tbl(i).rate IS NULL THEN
21178 ln_cnt_rte_null := ln_cnt_rte_null + 1;
21179 ELSIF l_paym_tbl(i).rate IS NOT NULL THEN
21180 ln_cnt_rte_not_null := ln_cnt_rte_not_null + 1;
21181 END IF;
21182 l_paym_tbl(i).arrears_yn := nvl(l_paym_tbl(i).arrears_yn,'Y');
21183 IF l_paym_tbl(i).arrears_yn IS NULL OR
21184 l_paym_tbl(i).arrears_yn = OKL_API.G_MISS_CHAR THEN
21185 l_return_status := OKL_API.G_RET_STS_ERROR;
21186 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21187 OKL_API.set_message(p_app_name => G_APP_NAME,
21188 p_msg_name => G_INVALID_VALUE,
21189 p_token1 => G_COL_NAME_TOKEN,
21190 p_token1_value => 'Arrear');
21191 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21192 END IF;
21193 ELSIF (l_paym_tbl(i).arrears_yn IS NOT NULL OR
21194 l_paym_tbl(i).arrears_yn <> OKL_API.G_MISS_CHAR) AND
21195 l_paym_tbl(i).arrears_yn = 'N' THEN
21196 IF l_paym_tbl(i).STRUCTURE IS NULL OR
21197 l_paym_tbl(i).STRUCTURE = OKL_API.G_MISS_CHAR THEN
21198 l_return_status := OKL_API.G_RET_STS_ERROR;
21199 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21200 OKL_API.set_message(p_app_name => G_APP_NAME,
21201 p_msg_name => G_INVALID_VALUE,
21202 p_token1 => G_COL_NAME_TOKEN,
21203 p_token1_value => 'Structure');
21204 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21205 END IF;
21206 END IF;
21207 END IF;
21208 EXIT WHEN (i = l_paym_tbl.LAST);
21209 i := l_paym_tbl.NEXT(i);
21210 END LOOP;
21211 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21212 RAISE OKL_API.G_EXCEPTION_ERROR;
21213 END IF;
21214 -- Validating amounts and rates values
21215 IF ln_cnt_rte_not_null = l_paym_tbl.COUNT AND
21216 ln_cnt_amt_null < l_paym_tbl.COUNT AND
21217 ln_cnt_amt_null > 1 THEN
21218 OKL_API.set_message(p_app_name => G_APP_NAME,
21219 p_msg_name => G_INVALID_VALUE,
21220 p_token1 => G_COL_NAME_TOKEN,
21221 p_token1_value => 'payment amounts');
21222 RAISE OKL_API.G_EXCEPTION_ERROR;
21223 END IF;
21224 IF ln_cnt_amt_not_null = l_paym_tbl.COUNT THEN
21225 IF ln_cnt_rte_not_null < l_paym_tbl.COUNT AND
21226 ln_cnt_rte_not_null > 0 THEN
21227 OKL_API.set_message(p_app_name => G_APP_NAME,
21228 p_msg_name => G_INVALID_VALUE,
21229 p_token1 => G_COL_NAME_TOKEN,
21230 p_token1_value => 'payment rates');
21231 RAISE OKL_API.G_EXCEPTION_ERROR;
21232 END IF;
21233 END IF;
21234 IF ln_cnt_rte_null = l_paym_tbl.COUNT AND
21235 ln_cnt_amt_null = l_paym_tbl.COUNT THEN
21236 OKL_API.set_message(p_app_name => G_APP_NAME,
21237 p_msg_name => G_REQUIRED_VALUE,
21238 p_token1 => G_COL_NAME_TOKEN,
21239 p_token1_value => 'payment rate and payment amount');
21240 RAISE OKL_API.G_EXCEPTION_ERROR;
21241 END IF;
21242 IF ln_cnt_rte_not_null <> l_paym_tbl.COUNT AND
21243 ln_cnt_amt_not_null <> l_paym_tbl.COUNT THEN
21244 OKL_API.set_message(p_app_name => G_APP_NAME,
21245 p_msg_name => G_INVALID_VALUE,
21246 p_token1 => G_COL_NAME_TOKEN,
21247 p_token1_value => 'payment rates and payment amounts');
21248 RAISE OKL_API.G_EXCEPTION_ERROR;
21249 END IF;
21250 ln_cnt_amt_null := 0;
21251 ln_cnt_amt_not_null := 0;
21252 ln_cnt_rte_null := 0;
21253 ln_cnt_rte_not_null := 0;
21254 -- Validate dates either overlapping or having gap
21255 IF lt_sll_date_tbl_type.COUNT > 0 THEN
21256 IF lt_sll_date_tbl_type.LAST > 1 THEN
21257 FOR k IN lt_sll_date_tbl_type.FIRST..lt_sll_date_tbl_type.LAST LOOP
21258 EXIT WHEN(k = lt_sll_date_tbl_type.LAST);
21259 IF lt_sll_date_tbl_type(k+1).start_date >= lt_sll_date_tbl_type(k).start_date AND
21260 lt_sll_date_tbl_type(k+1).start_date <= lt_sll_date_tbl_type(k).end_date THEN
21261 OKL_API.set_message(p_app_name => G_APP_NAME,
21262 p_msg_name => G_PAYMENT_OVERLAP_ERROR);
21263 l_return_status := OKL_API.G_RET_STS_ERROR;
21264 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21265 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21266 END IF;
21267 ELSIF lt_sll_date_tbl_type(k+1).start_date > lt_sll_date_tbl_type(k).end_date + 1 THEN
21268 OKL_API.set_message(p_app_name => G_APP_NAME,
21269 p_msg_name => G_PAYMENT_GAP_ERROR);
21270 l_return_status := OKL_API.G_RET_STS_ERROR;
21271 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21272 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21273 END IF;
21274 END IF;
21275 END LOOP;
21276 END IF;
21277 END IF;
21278 ELSE
21279 OKL_API.set_message(p_app_name => G_APP_NAME,
21280 p_msg_name => G_REQUIRED_VALUE,
21281 p_token1 => G_COL_NAME_TOKEN,
21282 p_token1_value => 'Payment Line Record');
21283 l_return_status := OKL_API.G_RET_STS_ERROR;
21284 END IF;
21285 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21286 RAISE OKL_API.G_EXCEPTION_ERROR;
21287 END IF;
21288 x_return_status := l_return_status;
21289 OKL_API.END_ACTIVITY (x_msg_count,
21290 x_msg_data );
21291 EXCEPTION
21292 WHEN OKL_API.G_EXCEPTION_ERROR THEN
21293 IF c_get_sll_lines_csr%ISOPEN THEN
21294 CLOSE c_get_sll_lines_csr;
21295 END IF;
21296 IF c_get_slh_lines_csr%ISOPEN THEN
21297 CLOSE c_get_slh_lines_csr;
21298 END IF;
21299 IF c_get_all_lines_csr%ISOPEN THEN
21300 CLOSE c_get_all_lines_csr;
21301 END IF;
21302 IF c_get_pay_psth_csr%ISOPEN THEN
21303 CLOSE c_get_pay_psth_csr;
21304 END IF;
21305 IF c_valid_khr_csr%ISOPEN THEN
21306 CLOSE c_valid_khr_csr;
21307 END IF;
21308 IF c_get_psth_csr%ISOPEN THEN
21309 CLOSE c_get_psth_csr;
21310 END IF;
21311 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
21312 l_api_name,
21313 G_PKG_NAME,
21314 'OKL_API.G_RET_STS_ERROR',
21315 x_msg_count,
21316 x_msg_data,
21317 '_PVT');
21318 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
21319 IF c_get_sll_lines_csr%ISOPEN THEN
21320 CLOSE c_get_sll_lines_csr;
21321 END IF;
21322 IF c_get_slh_lines_csr%ISOPEN THEN
21323 CLOSE c_get_slh_lines_csr;
21324 END IF;
21325 IF c_get_all_lines_csr%ISOPEN THEN
21326 CLOSE c_get_all_lines_csr;
21327 END IF;
21328 IF c_get_pay_psth_csr%ISOPEN THEN
21329 CLOSE c_get_pay_psth_csr;
21330 END IF;
21331 IF c_valid_khr_csr%ISOPEN THEN
21332 CLOSE c_valid_khr_csr;
21333 END IF;
21334 IF c_get_psth_csr%ISOPEN THEN
21335 CLOSE c_get_psth_csr;
21336 END IF;
21337 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
21338 l_api_name,
21339 G_PKG_NAME,
21340 'OKL_API.G_RET_STS_UNEXP_ERROR',
21341 x_msg_count,
21342 x_msg_data,
21343 '_PVT');
21344 WHEN OTHERS THEN
21345 IF c_get_sll_lines_csr%ISOPEN THEN
21346 CLOSE c_get_sll_lines_csr;
21347 END IF;
21348 IF c_get_slh_lines_csr%ISOPEN THEN
21349 CLOSE c_get_slh_lines_csr;
21350 END IF;
21351 IF c_get_all_lines_csr%ISOPEN THEN
21352 CLOSE c_get_all_lines_csr;
21353 END IF;
21354 IF c_get_pay_psth_csr%ISOPEN THEN
21355 CLOSE c_get_pay_psth_csr;
21356 END IF;
21357 IF c_valid_khr_csr%ISOPEN THEN
21358 CLOSE c_valid_khr_csr;
21359 END IF;
21360 IF c_get_psth_csr%ISOPEN THEN
21361 CLOSE c_get_psth_csr;
21362 END IF;
21363 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
21364 l_api_name,
21365 G_PKG_NAME,
21366 'OTHERS',
21367 x_msg_count,
21368 x_msg_data,
21369 '_PVT');
21370 END validate_payments;
21371
21372 -------------------------------------------------------------------------------------------------
21373 -- Start of Commnets
21374 -- Badrinath Kuchibholta
21375 -- Procedure Name : get_so_asset_oec1
21376 -- Description : get_so_asset_oec1
21377 -- Business Rules :
21378 -- Parameters : Standard Parameters with p_khr_id, p_kle_id and p_subside_yn
21379 -- Version :
21380 -- End of Commnets
21381 -------------------------------------------------------------------------------------------------
21382 PROCEDURE get_so_asset_oec1(p_khr_id IN NUMBER,
21383 p_kle_id IN NUMBER,
21384 p_subside_yn IN VARCHAR2,
21385 x_return_status OUT NOCOPY VARCHAR2,
21386 x_asset_oec OUT NOCOPY NUMBER,
21387 x_start_date OUT NOCOPY DATE)
21388 IS
21389 l_return_status VARCHAR2(3):= OKL_API.G_RET_STS_SUCCESS;
21390 l_msg_count NUMBER;
21391 l_msg_data VARCHAR2(32767);
21392 G_FORMULA_DIS OKL_FORMULAE_V.NAME%TYPE := 'LINE_DISCOUNT';
21393 G_AMT_TOKEN CONSTANT VARCHAR2(200) := 'AMOUNT';
21394 G_CALC_AMOUNT CONSTANT VARCHAR2(200) := 'OKL_SEC_INVALID_INV_AMOUNT';
21395 l_api_version NUMBER := 0;
21396 l_dis_amt NUMBER := 0;
21397 l_tot_oec_amt NUMBER := 0;
21398 CURSOR get_oec_csr (p_khr_id NUMBER,
21399 p_kle_id NUMBER)
21400 IS
21401 SELECT kle_rv.id asset_line_id,
21402 kle_rv.oec oec,
21403 cle_so.START_DATE
21404 FROM okc_k_headers_b chr_rv,
21405 okc_line_styles_b lse_rv,
21406 okl_k_lines kle_rv,
21407 okc_k_lines_b cle_rv,
21408 okc_rules_b rul_rv,
21409 okc_rule_groups_b rgp_rv,
21410 okc_line_styles_b lse_so,
21411 okc_k_lines_b cle_so,
21412 okc_rules_b rul_so,
21413 okc_rule_groups_b rgp_so
21414 WHERE rgp_so.cle_id = p_kle_id
21415 AND rgp_so.dnz_chr_id = p_khr_id
21416 AND rgp_so.rgd_code = 'SOPYSC'
21417 AND rgp_so.dnz_chr_id = rul_so.dnz_chr_id
21418 AND rgp_so.id = rul_so.rgp_id
21419 AND rul_so.rule_information_category = 'SOPMSC'
21420 AND rgp_so.cle_id = cle_so.id
21421 AND cle_so.dnz_chr_id = rul_so.dnz_chr_id
21422 AND cle_so.lse_id = lse_so.id
21423 AND lse_so.lty_code = 'SO_PAYMENT'
21424 AND rul_rv.object1_id1 = to_char(rul_so.id)
21425 AND rul_rv.dnz_chr_id = rul_so.dnz_chr_id
21426 AND rul_rv.rgp_id = rgp_rv.id
21427 AND rgp_rv.rgd_code = 'SOPSAD'
21428 AND rgp_rv.dnz_chr_id = rul_so.dnz_chr_id
21429 AND rgp_rv.cle_id = cle_rv.id
21430 AND cle_rv.lse_id = lse_rv.id
21431 AND lse_rv.lty_code = 'FREE_FORM1'
21432 AND rgp_rv.dnz_chr_id = chr_rv.id
21433 AND chr_rv.START_DATE = cle_rv.START_DATE
21434 AND cle_rv.id = kle_rv.id;
21435 BEGIN
21436 IF p_subside_yn NOT IN ('Y','N') THEN
21437 OKL_API.set_message(p_app_name => G_APP_NAME,
21438 p_msg_name => G_INVALID_VALUE,
21439 p_token1 => G_COL_NAME_TOKEN,
21440 p_token1_value => 'p_subside_yn');
21441 RAISE OKL_API.G_EXCEPTION_ERROR;
21442 END IF;
21443 FOR get_oec_rec IN get_oec_csr(p_khr_id => p_khr_id,
21444 p_kle_id => p_kle_id) LOOP
21445 IF p_subside_yn = 'Y' THEN
21446 execute_formula(p_api_version => l_api_version,
21447 p_init_msg_list => OKL_API.G_TRUE,
21448 x_return_status => l_return_status,
21449 x_msg_count => l_msg_count,
21450 x_msg_data => l_msg_data,
21451 p_formula_name => G_FORMULA_DIS,
21452 p_contract_id => p_khr_id,
21453 p_line_id => get_oec_rec.asset_line_id,
21454 x_value => l_dis_amt);
21455 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21456 OKL_API.set_message(p_app_name => G_APP_NAME,
21457 p_msg_name => G_CALC_AMOUNT);
21458 EXIT WHEN(l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
21459 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
21460 OKL_API.set_message(p_app_name => G_APP_NAME,
21461 p_msg_name => G_CALC_AMOUNT);
21462 EXIT WHEN(l_return_status = OKL_API.G_RET_STS_ERROR);
21463 END IF;
21464 l_tot_oec_amt := l_tot_oec_amt + (get_oec_rec.oec - nvl(l_dis_amt,0));
21465 ELSE
21466 l_tot_oec_amt := l_tot_oec_amt + get_oec_rec.oec;
21467 END IF;
21468 x_start_date := get_oec_rec.START_DATE;
21469 END LOOP;
21470 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21471 RAISE OKL_API.G_EXCEPTION_ERROR;
21472 END IF;
21473 x_asset_oec := l_tot_oec_amt;
21474 IF NVL(x_asset_oec,0) = 0 THEN
21475 OKL_API.set_message(p_app_name => G_APP_NAME,
21476 p_msg_name => G_CALC_AMOUNT);
21477 RAISE OKL_API.G_EXCEPTION_ERROR;
21478 END IF;
21479 x_return_status := l_return_status;
21480 EXCEPTION
21481 WHEN OKL_API.G_EXCEPTION_ERROR THEN
21482 IF get_oec_csr%ISOPEN THEN
21483 CLOSE get_oec_csr;
21484 END IF;
21485 x_return_status := OKL_API.G_RET_STS_ERROR;
21486 WHEN OTHERS THEN
21487 IF get_oec_csr%ISOPEN THEN
21488 CLOSE get_oec_csr;
21489 END IF;
21490 x_return_status := OKL_API.G_RET_STS_ERROR;
21491 END get_so_asset_oec1;
21492 -------------------------------------------------------------------------------------------------
21493 -- Start of Commnets
21494 -- Badrinath Kuchibholta
21495 -- Procedure Name : get_so_residual_value1
21496 -- Description : get_so_residual_value1
21497 -- Business Rules :
21498 -- Parameters : Standard Parameters with p_khr_id, p_kle_id and p_subside_yn
21499 -- Version :
21500 -- End of Commnets
21501 -------------------------------------------------------------------------------------------------
21502 PROCEDURE get_so_residual_value1(p_khr_id IN NUMBER,
21503 p_kle_id IN NUMBER,
21504 p_subside_yn IN VARCHAR2,
21505 x_return_status OUT NOCOPY VARCHAR2,
21506 x_residual_value OUT NOCOPY NUMBER,
21507 x_start_date OUT NOCOPY DATE)
21508 IS
21509 l_return_status VARCHAR2(3):= OKL_API.G_RET_STS_SUCCESS;
21510 l_msg_count NUMBER;
21511 l_msg_data VARCHAR2(32767);
21512 G_FORMULA_DIS OKL_FORMULAE_V.NAME%TYPE := 'LINE_DISCOUNT';
21513 G_AMT_TOKEN CONSTANT VARCHAR2(200) := 'AMOUNT';
21514 G_CALC_AMOUNT CONSTANT VARCHAR2(200) := 'OKL_SEC_INVALID_INV_AMOUNT';
21515 l_api_version NUMBER := 0;
21516 l_dis_amt NUMBER := 0;
21517 l_res_val NUMBER := 0;
21518 l_tot_res_val NUMBER := 0;
21519 --start changed by abhsaxen for Bug#6174484
21520 CURSOR get_rvs_csr (p_khr_id NUMBER,
21521 p_kle_id NUMBER)
21522 IS
21523 SELECT kle_rv.id asset_line_id,
21524 kle_rv.oec oec,
21525 kle_rv.residual_percentage residual_percent,
21526 cle_so.start_date
21527 FROM okc_k_headers_b chr_rv,
21528 okc_line_styles_b lse_rv,
21529 okl_k_lines kle_rv,
21530 okc_k_lines_b cle_rv,
21531 okc_rules_b rul_rv,
21532 okc_rule_groups_b rgp_rv,
21533 okc_line_styles_b lse_so,
21534 okc_k_lines_b cle_so,
21535 okc_rules_b rul_so,
21536 okc_rule_groups_b rgp_so
21537 WHERE rgp_so.cle_id = p_kle_id
21538 AND rgp_so.dnz_chr_id = p_khr_id
21539 AND rgp_so.rgd_code = 'SOPYSC'
21540 AND rgp_so.dnz_chr_id = rul_so.dnz_chr_id
21541 AND rgp_so.id = rul_so.rgp_id
21542 AND rul_so.rule_information_category = 'SOPMSC'
21543 AND rgp_so.cle_id = cle_so.id
21544 AND cle_so.dnz_chr_id = rul_so.dnz_chr_id
21545 AND cle_so.lse_id = lse_so.id
21546 AND lse_so.lty_code = 'SO_PAYMENT'
21547 AND rul_rv.object1_id1 = to_char(rul_so.id)
21548 AND rul_rv.dnz_chr_id = rul_so.dnz_chr_id
21549 AND rul_rv.rgp_id = rgp_rv.id
21550 AND rgp_rv.rgd_code = 'SOPSAD'
21551 AND rgp_rv.dnz_chr_id = cle_rv.dnz_chr_id
21552 AND rgp_rv.cle_id = cle_rv.id
21553 AND cle_rv.lse_id = lse_rv.id
21554 AND lse_rv.lty_code = 'FREE_FORM1'
21555 AND rgp_rv.dnz_chr_id = chr_rv.id
21556 AND chr_rv.start_date = cle_rv.start_date
21557 AND cle_rv.id = kle_rv.id;
21558 --end changed by abhsaxen for Bug#6174484
21559 BEGIN
21560 IF p_subside_yn NOT IN ('Y','N') THEN
21561 OKL_API.set_message(p_app_name => G_APP_NAME,
21562 p_msg_name => G_INVALID_VALUE,
21563 p_token1 => G_COL_NAME_TOKEN,
21564 p_token1_value => 'p_subside_yn');
21565 RAISE OKL_API.G_EXCEPTION_ERROR;
21566 END IF;
21567
21568 FOR get_rvs_rec IN get_rvs_csr(p_khr_id => p_khr_id,
21569 p_kle_id => p_kle_id) LOOP
21570 IF p_subside_yn = 'Y' THEN
21571 execute_formula(p_api_version => l_api_version,
21572 p_init_msg_list => OKL_API.G_TRUE,
21573 x_return_status => l_return_status,
21574 x_msg_count => l_msg_count,
21575 x_msg_data => l_msg_data,
21576 p_formula_name => G_FORMULA_DIS,
21577 p_contract_id => p_khr_id,
21578 p_line_id => get_rvs_rec.asset_line_id,
21579 x_value => l_dis_amt);
21580 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21581 OKL_API.set_message(p_app_name => G_APP_NAME,
21582 p_msg_name => G_CALC_AMOUNT);
21583 EXIT WHEN(l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
21584 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
21585 OKL_API.set_message(p_app_name => G_APP_NAME,
21586 p_msg_name => G_CALC_AMOUNT);
21587 EXIT WHEN(l_return_status = OKL_API.G_RET_STS_ERROR);
21588 END IF;
21589 IF get_rvs_rec.residual_percent IS NOT NULL THEN
21590 l_res_val := get_rvs_rec.residual_percent * (get_rvs_rec.oec - nvl(l_dis_amt,0)) /100;
21591 l_tot_res_val := l_tot_res_val + l_res_val;
21592 ELSE
21593 l_tot_res_val := 0;
21594 EXIT;
21595 END IF;
21596 ELSE
21597 IF get_rvs_rec.residual_percent IS NOT NULL THEN
21598 l_res_val := get_rvs_rec.residual_percent * get_rvs_rec.oec /100;
21599 l_tot_res_val := l_tot_res_val + l_res_val;
21600 ELSE
21601 l_tot_res_val := 0;
21602 EXIT;
21603 END IF;
21604 END IF;
21605 x_start_date := get_rvs_rec.START_DATE;
21606 END LOOP;
21607 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21608 RAISE OKL_API.G_EXCEPTION_ERROR;
21609 END IF;
21610 x_residual_value := l_tot_res_val;
21611 IF (x_residual_value IS NULL) THEN -- bug# 3381546.
21612 OKL_API.set_message(p_app_name => G_APP_NAME,
21613 p_msg_name => G_INVALID_VALUE,
21614 p_token1 => G_COL_NAME_TOKEN,
21615 p_token1_value => 'Residual Value');
21616 RAISE OKL_API.G_EXCEPTION_ERROR;
21617 END IF;
21618 x_return_status := l_return_status;
21619 EXCEPTION
21620 WHEN OKL_API.G_EXCEPTION_ERROR THEN
21621 IF get_rvs_csr%ISOPEN THEN
21622 CLOSE get_rvs_csr;
21623 END IF;
21624 x_return_status := OKL_API.G_RET_STS_ERROR;
21625 WHEN OTHERS THEN
21626 IF get_rvs_csr%ISOPEN THEN
21627 CLOSE get_rvs_csr;
21628 END IF;
21629 x_return_status := OKL_API.G_RET_STS_ERROR;
21630 END get_so_residual_value1;
21631
21632 -------------------------------------------------------------------------------------------------
21633 -- Start of Commnets
21634 -- Santhosh Siruvole
21635 -- Procedure Name : get_so_asset_oec
21636 -- Description : get_so_asset_oec
21637 -- Business Rules :
21638 -- Parameters : Standard Parameters with p_khr_id, p_kle_id and p_subside_yn
21639 -- Version :
21640 -- End of Commnets
21641 -------------------------------------------------------------------------------------------------
21642 PROCEDURE get_so_residual_value(p_khr_id IN NUMBER,
21643 p_kle_id IN NUMBER,
21644 p_subside_yn IN VARCHAR2,
21645 x_return_status OUT NOCOPY VARCHAR2,
21646 x_residual_value OUT NOCOPY NUMBER,
21647 x_start_date OUT NOCOPY DATE)
21648 IS
21649 l_return_status VARCHAR2(3):= OKL_API.G_RET_STS_SUCCESS;
21650 l_msg_count NUMBER;
21651 l_msg_data VARCHAR2(32767);
21652 G_FORMULA_DIS OKL_FORMULAE_V.NAME%TYPE := 'LINE_CAP_AMNT';
21653 G_AMT_TOKEN CONSTANT VARCHAR2(200) := 'AMOUNT';
21654 G_CALC_AMOUNT CONSTANT VARCHAR2(200) := 'OKL_SEC_INVALID_INV_AMOUNT';
21655 l_api_version NUMBER := 0;
21656
21657 Cursor khr_type_csr IS
21658 Select SCS_CODE,
21659 START_DATE
21660 From okc_K_headers_b chr
21661 Where chr.id = p_khr_id;
21662
21663 khr_type_rec khr_type_csr%ROWTYPE;
21664
21665 Begin
21666
21667 OPEN khr_type_csr;
21668 FETCH khr_type_csr INTO khr_type_rec;
21669 CLOSE khr_type_csr;
21670
21671 IF (INSTR( khr_type_rec.scs_code, 'LEASE') > 0) THEN
21672 execute_formula(p_api_version => 1.0,
21673 p_init_msg_list => OKL_API.G_TRUE,
21674 x_return_status => l_return_status,
21675 x_msg_count => l_msg_count,
21676 x_msg_data => l_msg_data,
21677 p_formula_name => 'LINE_RESIDUAL_VALUE',
21678 p_contract_id => p_khr_id,
21679 p_line_id => p_kle_id,
21680 x_value => x_residual_value);
21681 IF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
21682 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
21683 ELSIF l_return_status = OKL_API.G_RET_STS_ERROR THEN
21684 RAISE OKL_API.G_EXCEPTION_ERROR;
21685 END IF;
21686
21687 x_start_date := khr_type_rec.start_date;
21688
21689 Else
21690
21691 get_so_residual_value1(p_khr_id => p_khr_id,
21692 p_kle_id => p_kle_id,
21693 p_subside_yn => p_subside_yn,
21694 x_return_status => x_return_status,
21695 x_residual_value => x_residual_value,
21696 x_start_date => x_start_date);
21697
21698 End If;
21699
21700 EXCEPTION
21701 WHEN OKL_API.G_EXCEPTION_ERROR THEN
21702 IF khr_type_csr%ISOPEN THEN
21703 CLOSE khr_type_csr;
21704 END IF;
21705 x_return_status := OKL_API.G_RET_STS_ERROR;
21706 WHEN OTHERS THEN
21707 IF khr_type_csr%ISOPEN THEN
21708 CLOSE khr_type_csr;
21709 END IF;
21710 x_return_status := OKL_API.G_RET_STS_ERROR;
21711
21712 End get_so_residual_value;
21713
21714 -------------------------------------------------------------------------------------------------
21715 -- Start of Commnets
21716 -- Santhosh Siruvole
21717 -- Procedure Name : get_so_asset_oec
21718 -- Description : get_so_asset_oec
21719 -- Business Rules :
21720 -- Parameters : Standard Parameters with p_khr_id, p_kle_id and p_subside_yn
21721 -- Version :
21722 -- End of Commnets
21723 -------------------------------------------------------------------------------------------------
21724 PROCEDURE get_so_asset_oec(p_khr_id IN NUMBER,
21725 p_kle_id IN NUMBER,
21726 p_subside_yn IN VARCHAR2,
21727 x_return_status OUT NOCOPY VARCHAR2,
21728 x_asset_oec OUT NOCOPY NUMBER,
21729 x_start_date OUT NOCOPY DATE)
21730 IS
21731 l_return_status VARCHAR2(3):= OKL_API.G_RET_STS_SUCCESS;
21732 l_msg_count NUMBER;
21733 l_msg_data VARCHAR2(32767);
21734 G_FORMULA_DIS OKL_FORMULAE_V.NAME%TYPE := 'LINE_CAP_AMNT';
21735 G_AMT_TOKEN CONSTANT VARCHAR2(200) := 'AMOUNT';
21736 G_CALC_AMOUNT CONSTANT VARCHAR2(200) := 'OKL_SEC_INVALID_INV_AMOUNT';
21737 l_api_version NUMBER := 0;
21738
21739 Cursor khr_type_csr IS
21740 Select SCS_CODE,
21741 START_DATE
21742 From okc_K_headers_b chr
21743 Where chr.id = p_khr_id;
21744
21745 khr_type_rec khr_type_csr%ROWTYPE;
21746
21747 Begin
21748
21749 OPEN khr_type_csr;
21750 FETCH khr_type_csr INTO khr_type_rec;
21751 CLOSE khr_type_csr;
21752
21753 IF (INSTR( khr_type_rec.scs_code, 'LEASE') > 0) THEN
21754 execute_formula(p_api_version => 1.0,
21755 p_init_msg_list => OKL_API.G_TRUE,
21756 x_return_status => l_return_status,
21757 x_msg_count => l_msg_count,
21758 x_msg_data => l_msg_data,
21759 p_formula_name => 'LINE_CAP_AMNT',
21760 p_contract_id => p_khr_id,
21761 p_line_id => p_kle_id,
21762 x_value => x_asset_oec);
21763 IF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
21764 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
21765 ELSIF l_return_status = OKL_API.G_RET_STS_ERROR THEN
21766 RAISE OKL_API.G_EXCEPTION_ERROR;
21767 END IF;
21768
21769 x_start_date := khr_type_rec.start_date;
21770
21771 Else
21772
21773 get_so_asset_oec1(p_khr_id => p_khr_id,
21774 p_kle_id => p_kle_id,
21775 p_subside_yn => p_subside_yn,
21776 x_return_status => x_return_status,
21777 x_asset_oec => x_asset_oec,
21778 x_start_date => x_start_date);
21779
21780 End If;
21781
21782 EXCEPTION
21783 WHEN OKL_API.G_EXCEPTION_ERROR THEN
21784 IF khr_type_csr%ISOPEN THEN
21785 CLOSE khr_type_csr;
21786 END IF;
21787 x_return_status := OKL_API.G_RET_STS_ERROR;
21788 WHEN OTHERS THEN
21789 IF khr_type_csr%ISOPEN THEN
21790 CLOSE khr_type_csr;
21791 END IF;
21792 x_return_status := OKL_API.G_RET_STS_ERROR;
21793
21794 End get_so_asset_oec;
21795
21796 -------------------------------------------------------------------------------------------------
21797 -- Start of Commnets
21798 -- Badrinath Kuchibholta
21799 -- Procedure Name : extract_params_so
21800 -- Description : extract_params_so
21801 -- Business Rules :
21802 -- Parameters : Standard Parameters with p_khr_id, p_kle_id and p_subside_yn
21803 -- Version :
21804 -- End of Commnets
21805 -------------------------------------------------------------------------------------------------
21806 PROCEDURE extract_params_so(
21807 p_api_version IN NUMBER,
21808 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
21809 p_chr_id IN OKC_K_HEADERS_B.ID%TYPE,
21810 p_cle_id IN OKC_K_LINES_B.ID%TYPE,
21811 x_return_status OUT NOCOPY VARCHAR2,
21812 x_msg_count OUT NOCOPY NUMBER,
21813 x_msg_data OUT NOCOPY VARCHAR2,
21814 x_csm_lease_header OUT NOCOPY okl_create_streams_pub.csm_lease_rec_type,
21815 x_csm_one_off_fee_tbl OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
21816 x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
21817 x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
21818 x_req_stream_types_tbl OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type,
21819 x_csm_line_details_tbl OUT NOCOPY okl_create_streams_pub.csm_line_details_tbl_type,
21820 x_rents_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
21821 x_csm_loan_header OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
21822 x_csm_loan_lines_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
21823 x_csm_loan_levels_tbl OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type)
21824 IS
21825 l_api_name CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_SO';
21826 lv_fed_only VARCHAR2(3) := 'N';
21827 ln_value NUMBER := 0;
21828 -- Start of BAKUCHIB modification bug#3121708
21829 ln_diff_days NUMBER := 0;
21830 ld_last_start_date okc_k_headers_b.start_date%TYPE;
21831 ld_last_end_date okc_k_headers_b.start_date%TYPE;
21832 ld_chr_end_date okc_k_headers_b.end_date%TYPE;
21833 -- End of BAKUCHIB modification bug#3121708
21834 lv_fed_only_tax_book OKL_TXD_ASSETS_B.TAX_BOOK%TYPE := NULL;
21835 ln_org_id okc_k_headers_b.authoring_org_id%TYPE;
21836 lv_currency_code okc_k_headers_b.currency_code%TYPE;
21837 l_rnd_basis_percent NUMBER;
21838 l_level_type NUMBER;
21839 l_strm_name VARCHAR2(200);
21840 ln_fin_yn NUMBER := 0;
21841 i BINARY_INTEGER := 0;
21842 j BINARY_INTEGER := 0;
21843 k BINARY_INTEGER := 0;
21844 l BINARY_INTEGER := 0;
21845 m BINARY_INTEGER := 0;
21846 idx BINARY_INTEGER := 0;
21847 l_basis_percent NUMBER;
21848 styid NUMBER;
21849 --l_sty_id NUMBER;
21850 l_sty_id strm_rec_type;
21851 l_salvage NUMBER;
21852 l_purchase_option VARCHAR2(256);
21853 l_deal_type VARCHAR2(256) := NULL;
21854 l_purchase_option_amount NUMBER;
21855 l_value OKL_K_LINES.CAPITAL_AMOUNT%TYPE;
21856 ld_asset_start_date DATE;
21857 l_tot_asset_oec NUMBER := 0;
21858 l_asset_oec NUMBER := 0;
21859 l_cap_fee_amt NUMBER := 0;
21860 l_total_lending NUMBER := 0;
21861 l_lending NUMBER := 0;
21862 l_lne_tot_lend NUMBER := 0;
21863 l_tradein OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
21864 l_capreduc OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
21865 l_feecap OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
21866 l_capint OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
21867 l_discount OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
21868 l_corp_dep_cost OKL_TXL_ASSETS_B.DEPRECIATION_COST%TYPE := 0;
21869 l_tax_dep_cost OKL_TXD_ASSETS_B.COST%TYPE := 0;
21870 l_lease_tax_owner okc_rules_b.rule_information1%TYPE := NULL;
21871 -- get the Contract Header info
21872 CURSOR l_hdr_csr(chrId NUMBER)
21873 IS
21874 SELECT chr.orig_system_source_code,
21875 chr.start_date,
21876 chr.end_date,
21877 chr.template_yn,
21878 chr.authoring_org_id,
21879 chr.inv_organization_id,
21880 khr.deal_type,
21881 pdt.id pid,
21882 NVL(pdt.reporting_pdt_id, -1) report_pdt_id,
21883 chr.currency_code currency_code,
21884 khr.term_duration term
21885 FROM okc_k_headers_v chr,
21886 okl_k_headers khr,
21887 okl_products_v pdt
21888 WHERE khr.id = chr.id
21889 AND chr.id = chrId
21890 AND khr.pdt_id = pdt.id(+);
21891 -- get the Header rule information
21892 CURSOR l_hdrrl_csr(rgcode okc_rule_groups_b.rgd_code%TYPE,
21893 rlcat okc_rules_b.rule_information_category%TYPE,
21894 chrId NUMBER)
21895 IS
21896 SELECT crl.object1_id1,
21897 crl.rule_information1,
21898 crl.rule_information2,
21899 crl.rule_information3,
21900 crl.rule_information4,
21901 crl.rule_information5,
21902 crl.rule_information6,
21903 crl.rule_information10,
21904 crl.rule_information13,
21905 crl.rule_information11
21906 FROM okc_rule_groups_b crg,
21907 okc_rules_b crl
21908 WHERE crl.rgp_id = crg.id
21909 AND crg.rgd_code = rgcode
21910 AND crl.rule_information_category = rlcat
21911 AND crg.dnz_chr_id = chrId;
21912 -- get the install based location
21913 CURSOR ib_csr (chrId NUMBER)
21914 IS
21915 SELECT DISTINCT hl.country country
21916 FROM hz_locations hl,
21917 hz_party_sites hps,
21918 hz_party_site_uses hpsu,
21919 okl_txl_itm_insts iti,
21920 okc_line_styles_b lse_ib,
21921 okc_k_lines_b cle_ib
21922 WHERE cle_ib.dnz_chr_id = chrId
21923 AND cle_ib.lse_id = lse_ib.id
21924 AND lse_ib.lty_code = 'INST_ITEM'
21925 AND iti.kle_id = cle_ib.id
21926 AND iti.object_id1_new = hpsu.party_site_use_id
21927 AND iti.object_id2_new = '#'
21928 AND hpsu.party_site_id = hps.party_site_id
21929 AND hps.location_id = hl.location_id;
21930 -- get the Contract line info
21931 CURSOR l_line_rec_csr(chrid NUMBER, lnetype VARCHAR2)
21932 IS
21933 SELECT kle.id,
21934 kle.oec,
21935 kle.residual_code,
21936 kle.capital_amount,
21937 kle.delivered_date,
21938 kle.date_funding_required,
21939 kle.residual_grnty_amount,
21940 kle.residual_code guarantee_type,
21941 kle.date_funding,
21942 kle.residual_value,
21943 kle.amount,
21944 kle.price_negotiated,
21945 kle.start_date,
21946 kle.end_date,
21947 kle.orig_system_id1,
21948 kle.fee_type,
21949 kle.initial_direct_cost,
21950 tl.item_description,
21951 tl.name
21952 FROM okl_k_lines_full_v kle,
21953 okc_line_styles_b lse,
21954 okc_k_lines_tl tl,
21955 okc_statuses_b sts
21956 WHERE kle.lse_id = lse.id
21957 AND lse.lty_code = lnetype
21958 AND tl.id = kle.id
21959 AND tl.language = userenv('LANG')
21960 AND kle.dnz_chr_id = chrid
21961 AND sts.code = kle.sts_code
21962 --Start of bug#3121708 modification BAKUCHIB
21963 AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
21964 --End of bug#3121708 modification BAKUCHIB
21965
21966 -- get the Contract line info
21967 CURSOR l_so_line_rec_csr(p_chr_id NUMBER, p_cle_id NUMBER)
21968 IS
21969 SELECT kle.id,
21970 kle.oec,
21971 kle.residual_code,
21972 kle.capital_amount,
21973 kle.delivered_date,
21974 kle.date_funding_required,
21975 kle.residual_grnty_amount,
21976 kle.date_funding,
21977 kle.residual_value,
21978 kle.amount,
21979 kle.price_negotiated,
21980 kle.start_date,
21981 kle.end_date,
21982 kle.orig_system_id1,
21983 kle.fee_type,
21984 kle.initial_direct_cost,
21985 tl.item_description,
21986 tl.name
21987 FROM okl_k_lines_full_v kle,
21988 okc_line_styles_b lse,
21989 okc_k_lines_tl tl,
21990 okc_statuses_b sts
21991 WHERE kle.lse_id = lse.id
21992 AND lse.lty_code = 'SO_PAYMENT'
21993 AND kle.id = p_cle_id
21994 AND tl.id = kle.id
21995 AND tl.language = userenv('LANG')
21996 AND kle.dnz_chr_id = p_chr_id
21997 AND sts.code = kle.sts_code
21998 --Start of bug#3121708 modification BAKUCHIB
21999 AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
22000 --End of bug#3121708 modification BAKUCHIB
22001
22002 -- get the txl transaction information
22003 CURSOR l_tx_csr(ass VARCHAR2)
22004 IS
22005 SELECT txl.life_in_months,
22006 txl.corporate_book,
22007 txl.deprn_method,
22008 txl.in_service_date,
22009 txl.salvage_value,
22010 txl.percent_salvage_value,
22011 txl.depreciation_cost,
22012 mth.id1,
22013 ct.prorate_convention_code
22014 FROM okl_txl_assets_b txl,
22015 okx_asst_dep_methods_v mth,
22016 okx_ast_ct_bk_dfs_v ct
22017 WHERE mth.method_code = txl.deprn_method
22018 AND mth.life_in_months = txl.life_in_months
22019 AND ct.category_id = txl.depreciation_id
22020 AND ct.book_type_code = txl.corporate_book
22021 AND txl.asset_number = ass
22022 -- Start of Bug#3388812 Modification - BAKUCHIB
22023 AND txl.in_service_date BETWEEN ct.start_dpis AND NVL(ct.end_dpis,txl.in_service_date);
22024 -- End of Bug#3388812 Modification - BAKUCHIB
22025 -- get the txd transaction information
22026 CURSOR l_txd_csr(ass VARCHAR2)
22027 IS
22028 SELECT txd.cost,
22029 txd.deprn_method_tax,
22030 txd.life_in_months_tax,
22031 txd.salvage_value,
22032 txd.tax_book,
22033 mth.id1
22034 FROM okl_txd_assets_v txd,
22035 okx_asst_dep_methods_v mth
22036 WHERE mth.method_code = txd.deprn_method_tax
22037 AND mth.life_in_months = txd.life_in_months_tax
22038 AND txd.asset_number = ass;
22039 -- get the setup values for tax book and coporate book
22040 CURSOR l_txtrans_csr (Book Varchar2)
22041 IS
22042 SELECT trns.value,
22043 books.book_type_code
22044 FROM okl_sgn_translations trns,
22045 fa_book_controls books
22046 WHERE trns.jtot_object1_code = 'FA_BOOK_CONTROLS'
22047 AND trns.object1_id1 = books.book_type_code
22048 AND trns.sgn_code = 'STMP'
22049 AND books.book_type_code = Book;
22050 -- Get the stream type id
22051 CURSOR l_strmid_csr (strmName VARCHAR2)
22052 IS
22053 SELECT id styid
22054 FROM okl_strm_type_tl
22055 WHERE LANGUAGE = 'US'
22056 AND NAME = strmName;
22057 -- get Stream name
22058 CURSOR strm_name_csr (styid NUMBER)
22059 IS
22060 SELECT tl.name name,
22061 stm.stream_type_class stream_type_class,
22062 stm.stream_type_purpose,
22063 tl.description alloc_basis,
22064 stm.capitalize_yn capitalize_yn,
22065 stm.periodic_yn periodic_yn
22066 FROM okl_strm_type_b stm,
22067 okl_strm_type_tl tl
22068 WHERE tl.id = stm.id
22069 AND tl.language = 'US'
22070 AND stm.id = styid;
22071 -- get the LASLH self referencing Line based rule information
22072 CURSOR l_rl_csr1(rgcode okc_rule_groups_b.rgd_code%TYPE,
22073 rlcat okc_rules_b.rule_information_category%TYPE,
22074 chrId NUMBER,
22075 cleId NUMBER )
22076 IS
22077 SELECT crl.id slh_id,
22078 crl.object1_id1,
22079 crl.rule_information1,
22080 crl.rule_information2,
22081 crl.rule_information3,
22082 crl.rule_information5,
22083 crl.rule_information6,
22084 crl.rule_information7,
22085 crl.rule_information8,
22086 crl.rule_information13,
22087 crl.rule_information10
22088 FROM okc_rule_groups_b crg,
22089 okc_rules_b crl
22090 WHERE crl.rgp_id = crg.id
22091 AND crg.rgd_code = rgcode
22092 AND crl.rule_information_category = rlcat
22093 AND crg.dnz_chr_id = chrId
22094 AND crg.cle_id = cleId
22095 ORDER BY crl.rule_information1;
22096 -- get the LASLL self referencing Line based rule information
22097 CURSOR l_rl_csr(rlgpId NUMBER,
22098 rgcode okc_rule_groups_b.rgd_code%TYPE,
22099 rlcat okc_rules_b.rule_information_category%TYPE,
22100 chrId NUMBER,
22101 cleId NUMBER )
22102 IS
22103 SELECT crl.object1_id1,
22104 crl.rule_information1,
22105 crl.rule_information2,
22106 crl.rule_information3,
22107 crl.rule_information5,
22108 crl.rule_information6,
22109 crl.rule_information7,
22110 crl.rule_information8,
22111 crl.rule_information13,
22112 crl.rule_information10
22113 FROM okc_rule_groups_b crg,
22114 okc_rules_b crl
22115 WHERE crl.rgp_id = crg.id
22116 AND crl.object2_id1 = rlgpId
22117 AND crg.rgd_code = rgcode
22118 AND crl.rule_information_category = rlcat
22119 AND crg.dnz_chr_id = chrId
22120 AND crg.cle_id = cleId
22121 ORDER BY FND_DATE.canonical_to_date(crl.rule_information2);
22122 -- Get Structure
22123 CURSOR l_struct_csr(chrId NUMBER)
22124 IS
22125 SELECT DISTINCT(nvl(crl.rule_information5,-1)) structure
22126 FROM okc_rule_groups_b crg,
22127 okc_rules_b crl
22128 WHERE crl.rgp_id = crg.id
22129 AND crg.rgd_code = 'LALEVL'
22130 AND crl.rule_information_category = 'LASLL'
22131 AND crg.dnz_chr_id = chrId;
22132 -- To check if the chr_id has Financed fee feetype defined
22133 CURSOR l_financed_type_csr (chrId NUMBER)
22134 IS
22135 SELECT 1
22136 FROM dual
22137 WHERE EXISTS (SELECT 1
22138 FROM okc_k_lines_b cle,
22139 okc_line_styles_b lse,
22140 okl_k_lines kle
22141 WHERE cle.dnz_chr_id = chrId
22142 AND cle.lse_id = lse.id
22143 AND lse.lty_code = 'FEE'
22144 AND cle.id = kle.id
22145 AND kle.fee_type in ('ROLLOVER', 'FINANCED'));
22146 -- get the currency_code and Authoring_org_id
22147 -- from okc_k_headers_b
22148 CURSOR get_org_id(p_chr_id okc_k_headers_b.id%TYPE)
22149 IS
22150 SELECT authoring_org_id,
22151 currency_code
22152 FROM okc_k_headers_b
22153 WHERE id = p_chr_id;
22154 -- Get Capitalized fees amount for a contract
22155 CURSOR get_cap_fee_amt(p_chr_id okc_k_headers_b.id%TYPE)
22156 IS
22157 SELECT NVL(kle.amount, 0) total_cap_fee
22158 FROM okl_k_lines kle,
22159 okc_k_lines_b cle,
22160 okc_k_items cim,
22161 okl_strm_type_b sty
22162 WHERE cle.dnz_chr_id = p_chr_id
22163 AND cle.id = kle.id
22164 AND cle.id = cim.cle_id
22165 AND cim.jtot_object1_code = 'OKL_STRMTYP'
22166 AND cim.object1_id1 = to_char(sty.id)
22167 AND sty.capitalize_yn = 'Y';
22168 -- get line oec
22169 -- nikshah -- Bug # 5484903 Fixed,
22170 -- Removed CURSOR get_oec_csr
22171
22172 -- Start of BAKUCHIB modification bug#3121708
22173 -- Get diff in days between contract end_date
22174 -- and max payment leve(LASLL) end_date
22175 CURSOR c_diff_days_csr(p_chr_id okc_k_headers_b.id%TYPE,
22176 p_cle_id okc_k_lines_b.id%TYPE,
22177 p_slh_id okc_rule_groups_b.id%TYPE)
22178 IS
22179 SELECT chrv.end_date chr_end_date,
22180 MAX(FND_DATE.canonical_to_date(sll.rule_information2)) pay_start_date,
22181 MAX(DECODE(SLL.rule_information7,
22182 NULL,(ADD_MONTHS(FND_DATE.canonical_to_date(sll.rule_information2),to_number(SLL.rule_information3)*DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12))-1),
22183 TO_NUMBER(SLL.rule_information7),FND_DATE.canonical_to_date(sll.rule_information2)+SLL.rule_information7-1,
22184 (ADD_MONTHS(FND_DATE.canonical_to_date(sll.rule_information2),to_number(SLL.rule_information3)*DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12))-1))) pay_end_date
22185 FROM okc_rules_b sll,
22186 okc_rules_b slh,
22187 okc_rule_groups_b rgp,
22188 okc_k_headers_b chrv
22189 WHERE rgp.dnz_chr_id = p_chr_id
22190 AND rgp.cle_id = p_cle_id
22191 AND slh.id = p_slh_id
22192 AND rgp.rgd_code = 'LALEVL'
22193 AND rgp.id = slh.rgp_id
22194 AND slh.rule_information_category = 'LASLH'
22195 AND TO_CHAR(slh.id) = sll.object2_id1
22196 AND sll.rule_information_category = 'LASLL'
22197 AND chrv.id = rgp.dnz_chr_id
22198 GROUP BY chrv.end_date;
22199 -- End of BAKUCHIB modification bug#3121708
22200 l_line_rec l_line_rec_csr%ROWTYPE;
22201 l_hdr_rec l_hdr_csr%ROWTYPE;
22202 l_rl_rec l_rl_csr%ROWTYPE;
22203 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
22204 l_rl_rec1 l_rl_csr1%ROWTYPE;
22205 l_tx_rec l_tx_csr%ROWTYPE;
22206 l_txd_rec l_txd_csr%ROWTYPE;
22207 l_txtrans_rec l_txtrans_csr%ROWTYPE;
22208 l_strm_name_rec strm_name_csr%ROWTYPE;
22209 l_ib_rec ib_csr%ROWTYPE;
22210 l_strmid_rec l_strmid_csr%ROWTYPE;
22211 l_csm_lease_header okl_create_streams_pub.csm_lease_rec_type;
22212 l_csm_line_details_tbl okl_create_streams_pub.csm_line_details_tbl_type;
22213 l_rents_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
22214 l_csm_periodic_expenses_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
22215 l_csm_one_off_fee_tbl okl_create_streams_pub.csm_one_off_fee_tbl_type;
22216 l_csm_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
22217 l_req_stream_types_tbl okl_create_streams_pub.csm_stream_types_tbl_type;
22218 l_csm_yields_tbl okl_create_streams_pub.csm_yields_tbl_type;
22219 l_csm_loan_header okl_create_streams_pvt.csm_loan_rec_type;
22220 l_csm_loan_details_tbl okl_create_streams_pvt.csm_loan_line_tbl_type;
22221 l_csm_loan_levels_tbl okl_create_streams_pvt.csm_loan_level_tbl_type;
22222
22223 l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
22224
22225 --mansrini : Code for VR build
22226 CURSOR get_day_conv_on_contrct
22227 IS
22228 SELECT
22229 --Added by srsreeni for bug6076113
22230 -- rate_params.days_in_a_year_code,
22231 -- DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
22232 DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
22233 rate_params.days_in_a_year_code
22234 --srsreeni bug6076113 ends
22235 FROM okl_k_rate_params rate_params
22236 WHERE khr_id = p_chr_id;
22237
22238 CURSOR get_day_conv_on_sgt
22239 IS
22240 SELECT DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
22241 gts.days_in_yr_code
22242 FROM
22243 okl_k_headers khr,
22244 okl_products_v pdt,
22245 okl_ae_tmpt_sets_v aes,
22246 OKL_ST_GEN_TMPT_SETS gts
22247 WHERE
22248 khr.pdt_id = pdt.id AND
22249 pdt.aes_id = aes.id AND
22250 aes.gts_id = gts.id AND
22251 khr.id = p_chr_id;
22252
22253 l_days_in_month_code OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
22254 l_days_in_yr_code OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
22255
22256 BEGIN
22257 x_return_status := OKL_API.G_RET_STS_SUCCESS;
22258 -- Call start_activity to create savepoint, check compatibility
22259 -- and initialize message list
22260 x_return_status := OKL_API.START_ACTIVITY (
22261 l_api_name
22262 ,p_init_msg_list
22263 ,'_PVT'
22264 ,x_return_status);
22265 -- Check if activity started successfully
22266 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
22267 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22268 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
22269 RAISE OKL_API.G_EXCEPTION_ERROR;
22270 END IF;
22271 -- To get product id
22272 OPEN l_hdr_pdt_csr(p_chr_id);
22273 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
22274 CLOSE l_hdr_pdt_csr;
22275
22276 -- get Header info
22277 OPEN l_hdr_csr(p_chr_id);
22278 FETCH l_hdr_csr INTO l_hdr_rec;
22279 IF l_hdr_csr%NOTFOUND THEN
22280 okl_api.set_message(p_app_name => G_APP_NAME,
22281 p_msg_name => G_LLA_NO_MATCHING_RECORD,
22282 p_token1 => G_COL_NAME_TOKEN,
22283 p_token1_value => 'Contract id');
22284 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22285 END IF;
22286 CLOSE l_hdr_csr;
22287
22288 --get day convention info : mansrini
22289 OPEN get_day_conv_on_contrct;
22290 FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
22291 CLOSE get_day_conv_on_contrct;
22292
22293 --Added by srsreeni for bug6076113
22294 -- IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
22295 IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
22296 --srsreeni bug6076113 ends
22297 THEN
22298 OPEN get_day_conv_on_sgt;
22299 FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
22300 CLOSE get_day_conv_on_sgt;
22301 END IF;
22302
22303 -- Validating the Deal type
22304 IF l_hdr_rec.deal_type IS NOT NULL OR
22305 l_hdr_rec.deal_type <> OKL_API.G_MISS_CHAR THEN
22306 l_deal_type := l_hdr_rec.deal_type;
22307 ELSE
22308 okl_api.set_message(p_app_name => G_APP_NAME,
22309 p_msg_name => G_REQUIRED_VALUE,
22310 p_token1 => G_COL_NAME_TOKEN,
22311 p_token1_value => 'Deal_type');
22312 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22313 END IF;
22314 IF l_deal_type IN ('LEASEDF','LEASEOP','LEASEST') THEN
22315 -- Get the Lease owner info
22316 OPEN l_hdrrl_csr('LATOWN', 'LATOWN',p_chr_id);
22317 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
22318 IF(l_hdrrl_csr%NOTFOUND) THEN
22319 okl_api.set_message(p_app_name => G_APP_NAME,
22320 p_msg_name => G_LLA_NO_MATCHING_RECORD,
22321 p_token1 => G_COL_NAME_TOKEN,
22322 p_token1_value => 'Contract id');
22323 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22324 ELSIF l_hdrrl_csr%FOUND THEN
22325 l_csm_lease_header.irs_tax_treatment_method := l_hdrrl_rec.RULE_INFORMATION1;
22326 -- Start of Bug#3388812 modification - BAKUCHIB
22327 l_lease_tax_owner := l_hdrrl_rec.RULE_INFORMATION1;
22328 -- End of Bug#3388812 modification - BAKUCHIB
22329 END IF;
22330 CLOSE l_hdrrl_csr;
22331 -- Validating the Deal type
22332 IF l_hdr_rec.deal_type IS NOT NULL OR
22333 l_hdr_rec.deal_type <> OKL_API.G_MISS_CHAR THEN
22334 l_deal_type := l_hdr_rec.deal_type;
22335 ELSE
22336 l_csm_lease_header.irs_tax_treatment_method := 'LESSOR';
22337 END IF;
22338 l_csm_lease_header.khr_id := p_chr_id;
22339 l_csm_lease_header.date_payments_commencement := l_hdr_rec.start_date;
22340 l_csm_lease_header.fasb_acct_treatment_method := l_deal_type;
22341 l_csm_lease_header.date_delivery := l_hdr_rec.start_date;
22342 l_csm_lease_header.term := l_hdr_rec.term;
22343 l_csm_lease_header.pdt_id := l_hdr_rec.pid;
22344 -- Checking if the chr_id is having a financed fee to set
22345 -- the sif_code accordingly
22346 OPEN l_financed_type_csr (chrId => p_chr_id);
22347 FETCH l_financed_type_csr INTO ln_fin_yn;
22348 CLOSE l_financed_type_csr;
22349 IF ln_fin_yn = 1 THEN
22350 l_csm_lease_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_BOTH;
22351 ELSIF ln_fin_yn = 0 THEN
22352 l_csm_lease_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_LESSOR;
22353 END IF;
22354 -- Getting the install base location
22355 OPEN ib_csr(p_chr_id);
22356 FETCH ib_csr INTO l_ib_rec;
22357 IF ib_csr%NOTFOUND THEN
22358 okl_api.set_message(p_app_name => G_APP_NAME,
22359 p_msg_name => G_LLA_NO_MATCHING_RECORD,
22360 p_token1 => G_COL_NAME_TOKEN,
22361 p_token1_value => 'Contract id');
22362 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22363 END IF;
22364 CLOSE ib_csr;
22365 l_csm_lease_header.country := l_ib_rec.country;
22366 l_csm_lease_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_BOOKING;
22367 l_csm_lease_header.rvi_yn := OKL_CREATE_STREAMS_PUB.G_FND_NO;
22368 -- Fetching the Header rule for Residual value insurance premium
22369 OPEN l_hdrrl_csr('LARVIN', 'LARVAU', TO_NUMBER(p_chr_id));
22370 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
22371 CLOSE l_hdrrl_csr;
22372 IF l_hdrrl_rec.rule_information1 = 'Y' THEN
22373 -- Added and commented by HKPATEL
22374 IF(g_rep_req_yn = 'Y') THEN
22375
22376 get_primary_stream_type
22377 (
22378 p_khr_id =>p_chr_id,
22379 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
22380 p_primary_sty_purpose =>'RESIDUAL_VALUE_INSURANCE_PREMIUM',
22381 x_return_status => x_return_status,
22382 x_primary_sty_id =>l_sty_id
22383 );
22384
22385 ELSE
22386
22387 get_primary_stream_type
22388 (
22389 p_khr_id => p_chr_id,
22390 p_primary_sty_purpose => 'RESIDUAL_VALUE_INSURANCE_PREMIUM',
22391 x_return_status => x_return_status,
22392 x_primary_sty_id =>l_sty_id
22393 );
22394
22395 END IF;
22396 /*
22397 SELECT nvl(id,-1)
22398 INTO styid
22399 FROM okl_strm_type_tl
22400 WHERE LANGUAGE = 'US'
22401 AND name = 'RESIDUAL VALUE INSURANCE PREMIUM';
22402 IF styid = -1 THEN
22403 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22404 END IF;
22405 */
22406 m := m + 1;
22407 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
22408 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
22409 l_csm_lease_header.rvi_yn := OKL_CREATE_STREAMS_PUB.G_FND_YES;
22410 OPEN l_hdrrl_csr('LARVIN', 'LARVAM', p_chr_id);
22411 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
22412 CLOSE l_hdrrl_csr;
22413 l_csm_lease_header.rvi_rate := TO_NUMBER(nvl(l_hdrrl_rec.RULE_INFORMATION4,'0'));
22414 END IF;
22415 -- Purchase option,
22416 OPEN l_hdrrl_csr('AMTFOC', 'AMBPOC', p_chr_id);
22417 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
22418 CLOSE l_hdrrl_csr;
22419 l_purchase_option := l_hdrrl_rec.rule_information11;
22420 IF l_hdrrl_rec.rule_information2 IS NOT NULL THEN
22421 l_purchase_option_amount := TO_NUMBER(nvl(l_hdrrl_rec.rule_information2,'0'));
22422 ELSE
22423 l_purchase_option := 'NONE';
22424 END IF;
22425
22426 --Modified by kthiruva for Streams Performance
22427 --This cursor was moved outside the loop to increase performance
22428 --Bug 4346646 - Start of Changes
22429 --Fetching the org_id
22430 OPEN get_org_id(p_chr_id => p_chr_id);
22431 FETCH get_org_id INTO ln_org_id,
22432 lv_currency_code;
22433 IF get_org_id%NOTFOUND THEN
22434 okl_api.set_message(p_app_name => G_APP_NAME,
22435 p_msg_name => G_LLA_NO_MATCHING_RECORD,
22436 p_token1 => G_COL_NAME_TOKEN,
22437 p_token1_value => 'Contract id');
22438 x_return_status := OKL_API.G_RET_STS_ERROR;
22439 END IF;
22440 CLOSE get_org_id;
22441 --Bug 4346646 - End of Changes
22442
22443 -- now get record for a asset line
22444 FOR l_line_rec IN l_line_rec_csr (p_chr_id,'FREE_FORM1') LOOP
22445 i := i + 1;
22446 l_csm_line_details_tbl(i).kle_asset_id := l_line_rec.id;
22447 l_csm_line_details_tbl(i).state_depre_dmnshing_value_rt := 0;
22448 l_csm_line_details_tbl(i).book_depre_dmnshing_value_rt := 0;
22449 l_csm_line_details_tbl(i).residual_guarantee_method := l_line_rec.residual_code;
22450 l_csm_line_details_tbl(i).fed_depre_dmnshing_value_rate := 0;
22451 l_csm_line_details_tbl(i).purchase_option := l_purchase_option;
22452 l_csm_line_details_tbl(i).purchase_option_amount := l_purchase_option_amount;
22453
22454 execute_formula(p_api_version => p_api_version,
22455 p_init_msg_list => p_init_msg_list,
22456 x_return_status => x_return_status,
22457 x_msg_count => x_msg_count,
22458 x_msg_data => x_msg_data,
22459 p_formula_name => 'LINE_CAP_AMNT',
22460 p_contract_id => p_chr_id,
22461 p_line_id => l_line_rec.id,
22462 x_value => l_value);
22463 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
22464 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
22465 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
22466 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22467 END IF;
22468 -- Get line Trade in
22469 execute_formula(p_api_version => p_api_version,
22470 p_init_msg_list => p_init_msg_list,
22471 x_return_status => x_return_status,
22472 x_msg_count => x_msg_count,
22473 x_msg_data => x_msg_data,
22474 p_formula_name => 'LINE_TRADEIN',
22475 p_contract_id => p_chr_id,
22476 p_line_id => l_line_rec.id,
22477 x_value => l_tradein);
22478 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
22479 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
22480 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
22481 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22482 END IF;
22483 -- Get line cap Reduction
22484 execute_formula(p_api_version => p_api_version,
22485 p_init_msg_list => p_init_msg_list,
22486 x_return_status => x_return_status,
22487 x_msg_count => x_msg_count,
22488 x_msg_data => x_msg_data,
22489 p_formula_name => 'LINE_CAPREDUCTION',
22490 p_contract_id => p_chr_id,
22491 p_line_id => l_line_rec.id,
22492 x_value => l_capreduc);
22493 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
22494 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
22495 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
22496 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22497 END IF;
22498 -- Get line Fee Capilitized
22499 execute_formula(p_api_version => p_api_version,
22500 p_init_msg_list => p_init_msg_list,
22501 x_return_status => x_return_status,
22502 x_msg_count => x_msg_count,
22503 x_msg_data => x_msg_data,
22504 p_formula_name => 'LINE_FEESCAPITALIZED',
22505 p_contract_id => p_chr_id,
22506 p_line_id => l_line_rec.id,
22507 x_value => l_feecap);
22508 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
22509 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
22510 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
22511 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22512 END IF;
22513 -- Get line Capitalized Interest
22514 execute_formula(p_api_version => p_api_version,
22515 p_init_msg_list => p_init_msg_list,
22516 x_return_status => x_return_status,
22517 x_msg_count => x_msg_count,
22518 x_msg_data => x_msg_data,
22519 p_formula_name => 'LINE_CAPITALIZED_INTEREST',
22520 p_contract_id => p_chr_id,
22521 p_line_id => l_line_rec.id,
22522 x_value => l_capint);
22523 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
22524 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
22525 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
22526 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22527 END IF;
22528 -- Get line Discount
22529 execute_formula(p_api_version => p_api_version,
22530 p_init_msg_list => p_init_msg_list,
22531 x_return_status => x_return_status,
22532 x_msg_count => x_msg_count,
22533 x_msg_data => x_msg_data,
22534 p_formula_name => 'LINE_DISCOUNT',
22535 p_contract_id => p_chr_id,
22536 p_line_id => l_line_rec.id,
22537 x_value => l_discount);
22538 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
22539 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
22540 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
22541 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22542 END IF;
22543 IF l_line_rec.residual_value IS NULL THEN
22544 l_csm_line_details_tbl(i).residual_amount := 0;
22545 ELSE
22546 l_csm_line_details_tbl(i).residual_amount := l_line_rec.residual_value;
22547 END IF;
22548 IF l_line_rec.delivered_date IS NULL THEN
22549 l_csm_line_details_tbl(i).date_delivery := l_line_rec.start_date;
22550 ELSE
22551 l_csm_line_details_tbl(i).date_delivery := l_line_rec.delivered_date;
22552 END IF;
22553 l_csm_line_details_tbl(i).residual_guarantee_amount := l_line_rec.residual_grnty_amount;
22554 IF l_line_rec.residual_grnty_amount IS NOT NULL OR
22555 l_line_rec.residual_grnty_amount <> OKL_API.G_MISS_NUM THEN
22556 l_csm_line_details_tbl(i).guarantee_type := l_line_rec.guarantee_type;
22557 END IF;
22558 --smahapat changed 03/13/04
22559 --cannot support until field populated by authoring since field mandatory
22560 --l_csm_line_details_tbl(i).date_funding := l_line_rec.date_funding;
22561 l_csm_line_details_tbl(i).date_funding := NVL(l_line_rec.date_funding,l_line_rec.start_date);
22562 --smahapat end change 03/13/04
22563 l_csm_line_details_tbl(i).description := l_line_rec.item_description;
22564 -- we need to set the context since the records in
22565 -- OKL_SYS_ACCT_OPTS table are stored with regards to the context
22566 -- To calculate basis percent for Corp or tax book
22567 -- we need the Line capital amount.
22568 -- Now since new version of the pricing eng
22569 -- NET subsidies , amount of sudsidy is sent to
22570 -- pricing eng as percent so we exclude the discout as below
22571 ln_value := l_value + NVL(l_discount,0);
22572 l_csm_line_details_tbl(i).asset_cost := ln_value;
22573 -- Now we are dealing with corp book and building
22574 -- Book Depreciation Stream info
22575 OPEN l_tx_csr(l_line_rec.name );
22576 FETCH l_tx_csr into l_tx_rec;
22577 IF l_tx_csr%NOTFOUND THEN
22578 OKL_API.set_message(p_app_name => G_APP_NAME,
22579 p_msg_name => G_LLA_NO_MATCHING_RECORD,
22580 p_token1 => G_COL_NAME_TOKEN,
22581 p_token1_value => l_line_rec.name);
22582 x_return_status := OKL_API.G_RET_STS_ERROR;
22583 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22584 END IF;
22585 CLOSE l_tx_csr;
22586 -- Now we are determing the Basis percent for the corp book
22587 -- Basis percent = Depreciable Cost (for each asset defined corp book)
22588 -- / Total Asset Capital Cost
22589 IF (l_tx_rec.depreciation_cost IS NULL OR
22590 TO_NUMBER(l_tx_rec.depreciation_cost) = 0 ) THEN
22591 l_basis_percent := 0;
22592 ELSE
22593 -- Start for bug#3388812 modification - BAKUCHIB
22594 -- Now since new version of the pricing eng
22595 -- NET subsidies , amount of sudsidy is sent to
22596 -- pricing eng as percent so we exclude the discout as below
22597 l_corp_dep_cost := l_tx_rec.depreciation_cost - NVL(l_tradein,0) - NVL(l_capreduc,0) +
22598 NVL(l_feecap,0) + NVL(l_capint,0);
22599 -- End for bug#3388812 modification - BAKUCHIB
22600 l_basis_percent := TO_NUMBER(nvl(l_corp_dep_cost,'0')) / TO_NUMBER(ln_value );
22601 -- Start for bug#3388812 modification - BAKUCHIB
22602 l_basis_percent := l_basis_percent * 100;
22603 -- End for bug#3388812 modification - BAKUCHIB
22604 END IF;
22605 IF l_basis_percent <> 0 THEN
22606 -- Now we round the Basis Percent
22607 l_rnd_basis_percent := OKL_ACCOUNTING_UTIL.round_amount(p_currency_code => lv_currency_code,
22608 p_amount => l_basis_percent);
22609 END IF;
22610 -- Now we are determing the Salvage value
22611 l_salvage := nvl(l_tx_rec.salvage_value,0);
22612 IF l_salvage = 0 THEN
22613 l_salvage := (nvl(l_tx_rec.percent_salvage_value,0) * l_line_rec.oec)/100.00;
22614 END IF;
22615 l_csm_line_details_tbl(i).book_adr_convention := l_tx_rec.prorate_convention_code;
22616 l_csm_line_details_tbl(i).book_term := l_tx_rec.life_in_months;
22617 l_csm_line_details_tbl(i).book_method := to_char(l_tx_rec.id1);
22618 l_csm_line_details_tbl(i).book_salvage := l_salvage;
22619 l_csm_line_details_tbl(i).date_book := l_tx_rec.in_service_date;
22620 l_csm_line_details_tbl(i).book_basis_percent := l_rnd_basis_percent;
22621
22622 -- Start of Bug#3388812 modification - BAKUCHIB
22623 IF l_lease_tax_owner = 'LESSOR' THEN
22624 m := m + 1;
22625 -- End of Bug#3388812 modification - BAKUCHIB
22626 -- Code added and commented by HKPATEL
22627 IF(g_rep_req_yn = 'Y') THEN
22628 get_primary_stream_type
22629 (
22630 p_khr_id =>p_chr_id,
22631 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
22632 p_primary_sty_purpose =>'BOOK_DEPRECIATION',
22633 x_return_status => x_return_status,
22634 x_primary_sty_id =>l_sty_id
22635 );
22636
22637 ELSE
22638
22639 get_primary_stream_type
22640 (
22641 p_khr_id => p_chr_id,
22642 p_primary_sty_purpose => 'BOOK_DEPRECIATION',
22643 x_return_status => x_return_status,
22644 x_primary_sty_id =>l_sty_id
22645 );
22646
22647 END IF;
22648
22649 /*
22650 OPEN l_strmid_csr('BOOK DEPRECIATION');
22651 FETCH l_strmid_csr into l_strmid_rec;
22652 IF l_strmid_csr%NOTFOUND THEN
22653 OKL_API.set_message(p_app_name => G_APP_NAME,
22654 p_msg_name => G_LLA_NO_MATCHING_RECORD,
22655 p_token1 => G_COL_NAME_TOKEN,
22656 p_token1_value => 'BOOK DEPRECIATION');
22657 x_return_status := OKL_API.G_RET_STS_ERROR;
22658 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22659 END IF;
22660 CLOSE l_strmid_csr;
22661 */
22662 -- Added code ends here - HKPATEL
22663 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
22664 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
22665 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
22666 END IF;
22667 -- Start modification Bug#3447917
22668 -- Now we are changing the approach for generating Tax book Depreciation streams
22669 -- by the virtue of Bug#3447917 so changes because of bug#3066346 is reverted.
22670 -- Start modification Bug#3066346
22671 -- We need to validate tax book for a given asset number
22672 -- and also validate if there has been setups done for these
22673 -- tax books
22674 -- Now we are dealing with Tax book and building
22675 -- Federal/State Depreciation Stream info
22676 -- Since there could be more than one tax book we need to loop for each
22677 -- tax book
22678 -- End modification Bug#3066346
22679 -- End modification Bug#3447917
22680 FOR l_txd_rec IN l_txd_csr(l_line_rec.name) LOOP
22681 -- Now we are determing the Basis percent for the Tax book
22682 -- Basis percent = Depreciable Cost (for each asset defined tax book)
22683 -- / Total Asset Capital Cost
22684 -- Intialize the variable
22685 l_basis_percent := 0;
22686 l_rnd_basis_percent := 0;
22687 IF (l_txd_rec.cost IS NULL OR
22688 TO_NUMBER(l_txd_rec.cost) = 0) THEN
22689 l_basis_percent := 0;
22690 ELSE
22691 -- Start for bug#3388812 modification - BAKUCHIB
22692 -- Now since new version of the pricing eng
22693 -- NET subsidies , amount of sudsidy is sent to
22694 -- pricing eng as percent so we exclude the discout as below
22695 l_tax_dep_cost := l_txd_rec.cost - NVL(l_tradein,0) - NVL(l_capreduc,0) +
22696 NVL(l_feecap,0) + NVL(l_capint,0);
22697 -- End for bug#3388812 modification - BAKUCHIB
22698 l_basis_percent := TO_NUMBER(nvl(l_tax_dep_cost,'0')) / TO_NUMBER(ln_value );
22699 l_basis_percent := l_basis_percent * 100.00;
22700 END IF;
22701 IF l_basis_percent <> 0 THEN
22702 -- Now we round the Basis Percent
22703 l_rnd_basis_percent := OKL_ACCOUNTING_UTIL.round_amount(p_currency_code => lv_currency_code,
22704 p_amount => l_basis_percent);
22705 END IF;
22706 -- Start modification Bug#3447917
22707 -- Start modification Bug#3066346
22708 -- If we find only setup for one tax book only then
22709 -- we build only federal Depreciation Stream
22710 -- we build both federal and state Depreciation Stream
22711 FOR l_txtrans_rec in l_txtrans_csr (l_txd_rec.tax_book) LOOP
22712 IF l_txtrans_rec.value IS NOT NULL AND
22713 l_txtrans_rec.value = 'FEDERAL' THEN
22714 l_csm_line_details_tbl(i).fed_depre_adr_conve := l_tx_rec.prorate_convention_code;
22715 l_csm_line_details_tbl(i).fed_depre_term := l_txd_rec.life_in_months_tax;
22716 l_csm_line_details_tbl(i).fed_depre_method := to_char(l_txd_rec.id1);
22717 l_csm_line_details_tbl(i).fed_depre_salvage := l_txd_rec.salvage_value;
22718 l_csm_line_details_tbl(i).date_fed_depre := l_tx_rec.in_service_date;
22719 l_csm_line_details_tbl(i).fed_depre_basis_percent := l_rnd_basis_percent;
22720
22721 -- Start of Bug#3388812 modification - BAKUCHIB
22722 IF l_lease_tax_owner = 'LESSOR' THEN
22723 -- End of Bug#3388812 modification - BAKUCHIB
22724 m := m + 1;
22725 -- Added code by HKPATEL
22726 IF(g_rep_req_yn = 'Y') THEN
22727
22728 get_primary_stream_type
22729 (
22730 p_khr_id =>p_chr_id,
22731 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
22732 p_primary_sty_purpose =>'FEDERAL_DEPRECIATION',
22733 x_return_status => x_return_status,
22734 x_primary_sty_id =>l_sty_id
22735 );
22736
22737 ELSE
22738
22739 get_primary_stream_type
22740 (
22741 p_khr_id => p_chr_id,
22742 p_primary_sty_purpose => 'FEDERAL_DEPRECIATION',
22743 x_return_status => x_return_status,
22744 x_primary_sty_id =>l_sty_id
22745 );
22746
22747 END IF;
22748 /*
22749 OPEN l_strmid_csr('FEDERAL DEPRECIATION');
22750 FETCH l_strmid_csr into l_strmid_rec;
22751 IF l_strmid_csr%NOTFOUND THEN
22752 OKL_API.set_message(p_app_name => G_APP_NAME,
22753 p_msg_name => G_LLA_NO_MATCHING_RECORD,
22754 p_token1 => G_COL_NAME_TOKEN,
22755 p_token1_value => 'FEDERAL DEPRECIATION');
22756 x_return_status := OKL_API.G_RET_STS_ERROR;
22757 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22758 END IF;
22759 CLOSE l_strmid_csr;
22760 */
22761 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
22762 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
22763 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
22764 END IF;
22765 ELSIF l_txtrans_rec.value IS NOT NULL AND
22766 l_txtrans_rec.value = 'STATE' THEN
22767 l_csm_line_details_tbl(i).state_depre_adr_convent := l_tx_rec.prorate_convention_code;
22768 l_csm_line_details_tbl(i).state_depre_term := l_txd_rec.life_in_months_tax;
22769 l_csm_line_details_tbl(i).state_depre_method := to_char(l_txd_rec.id1);
22770 l_csm_line_details_tbl(i).state_depre_salvage := l_txd_rec.salvage_value;
22771 l_csm_line_details_tbl(i).date_state_depre := l_tx_rec.in_service_date;
22772 l_csm_line_details_tbl(i).state_depre_basis_percent := l_rnd_basis_percent;
22773
22774 -- Start of Bug#3388812 modification - BAKUCHIB
22775 IF l_lease_tax_owner = 'LESSOR' THEN
22776 -- End of Bug#3388812 modification - BAKUCHIB
22777 m := m + 1;
22778 -- Added code by HKPATEL
22779 IF(g_rep_req_yn = 'Y') THEN
22780
22781 get_primary_stream_type
22782 (
22783 p_khr_id =>p_chr_id,
22784 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
22785 p_primary_sty_purpose =>'STATE_DEPRECIATION',
22786 x_return_status => x_return_status,
22787 x_primary_sty_id =>l_sty_id
22788 );
22789
22790 ELSE
22791
22792 get_primary_stream_type
22793 (
22794 p_khr_id => p_chr_id,
22795 p_primary_sty_purpose => 'STATE_DEPRECIATION',
22796 x_return_status => x_return_status,
22797 x_primary_sty_id =>l_sty_id
22798 );
22799
22800 END IF;
22801 /*
22802 OPEN l_strmid_csr('STATE DEPRECIATION');
22803 FETCH l_strmid_csr into l_strmid_rec;
22804 IF l_strmid_csr%NOTFOUND THEN
22805 OKL_API.set_message(p_app_name => G_APP_NAME,
22806 p_msg_name => G_LLA_NO_MATCHING_RECORD,
22807 p_token1 => G_COL_NAME_TOKEN,
22808 p_token1_value => 'STATE DEPRECIATION');
22809 x_return_status := OKL_API.G_RET_STS_ERROR;
22810 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22811 END IF;
22812 CLOSE l_strmid_csr;
22813 */
22814 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
22815 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
22816 l_csm_stream_types_tbl(m).kle_asset_id := l_line_rec.id;
22817 END IF;
22818 END IF;
22819 END LOOP;
22820 IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
22821 EXIT WHEN(x_return_status <> OKL_API.G_RET_STS_SUCCESS);
22822 END IF;
22823 END LOOP;
22824 IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
22825 EXIT WHEN(x_return_status <> OKL_API.G_RET_STS_SUCCESS);
22826 END IF;
22827 END LOOP;
22828 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
22829 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22830 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
22831 RAISE OKL_API.G_EXCEPTION_ERROR;
22832 END IF;
22833 -- WE should deal with so Payment line differently
22834 -- Getting the payment information of the asset
22835 FOR l_so_line_rec IN l_so_line_rec_csr (p_chr_id,p_cle_id) LOOP
22836 FOR l_rl_rec1 IN l_rl_csr1 ( 'LALEVL', 'LASLH',p_chr_id, l_so_line_rec.id ) LOOP
22837 l_level_type := l_rl_rec1.object1_id1;
22838 OPEN strm_name_csr ( l_level_type );
22839 FETCH strm_name_csr into l_strm_name_rec;
22840 IF strm_name_csr%NOTFOUND THEN
22841 OKL_API.set_message(p_app_name => G_APP_NAME,
22842 p_msg_name => G_LLA_NO_MATCHING_RECORD,
22843 p_token1 => G_COL_NAME_TOKEN,
22844 p_token1_value => 'Stream Id');
22845 x_return_status := OKL_API.G_RET_STS_ERROR;
22846 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22847 END IF;
22848 CLOSE strm_name_csr;
22849 l_strm_name := l_strm_name_rec.stream_type_purpose;
22850 m := m + 1;
22851 l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
22852 l_csm_stream_types_tbl(m).kle_asset_id := l_so_line_rec.id;
22853 idx := 0;
22854 IF( UPPER(TRIM(l_strm_name)) = 'RENT' ) THEN
22855 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_so_line_rec.id ) LOOP
22856 IF (l_rl_rec.rule_information7 IS NOT NULL OR
22857 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
22858 (l_rl_rec.rule_information8 IS NOT NULL OR
22859 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
22860 j := j + 1;
22861 idx := idx + 1;
22862 l_rents_tbl(j).level_index_number := idx;
22863 l_rents_tbl(j).amount := TO_NUMBER(l_rl_rec.rule_information8);
22864 l_rents_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
22865 l_rents_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
22866 l_rents_tbl(j).period := g_stub_rec.period;
22867 l_rents_tbl(j).description := l_strm_name;
22868 -- l_rents_tbl(j).kle_asset_id := l_so_line_rec.id;
22869 l_rents_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
22870 l_rents_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
22871 l_rents_tbl(j).days_in_month := l_days_in_month_code;
22872 l_rents_tbl(j).days_in_year := l_days_in_yr_code;
22873 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
22874 l_rents_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
22875 END If;
22876 l_rents_tbl(j).rate := l_rl_rec.rule_information13;
22877
22878 -- Added by kthiruva on 29-Dec-2005.
22879 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
22880 -- Bug 4915938 - Start of Changes
22881 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
22882 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
22883 ELSE
22884 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
22885 END IF;
22886 -- Bug 4915938 - End of Changes
22887
22888 ELSIF (l_rl_rec.rule_information7 IS NULL OR
22889 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
22890 (l_rl_rec.rule_information8 IS NULL OR
22891 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
22892 j := j + 1;
22893 idx := idx + 1;
22894 l_rents_tbl(j).level_index_number := idx;
22895 l_rents_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
22896 l_rents_tbl(j).description := l_strm_name;
22897 l_rents_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
22898 l_rents_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
22899 l_rents_tbl(j).period := l_rl_rec.object1_id1;
22900 l_rents_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
22901 -- l_rents_tbl(j).kle_asset_id := l_so_line_rec.id;
22902 l_rents_tbl(j).days_in_month := l_days_in_month_code;
22903 l_rents_tbl(j).days_in_year := l_days_in_yr_code;
22904 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
22905 l_rents_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
22906 END If;
22907 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
22908 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
22909 ELSE
22910 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
22911 END IF;
22912 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
22913 l_rents_tbl(j).date_start := l_hdr_rec.start_date;
22914 ELSE
22915 l_rents_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
22916 END IF;
22917 l_rents_tbl(j).rate := l_rl_rec.rule_information13;
22918 END IF;
22919 -- Now we get difference in days between contract end_date and last payment end_date
22920 -- Start of BAKUCHIB modification bug#3121708
22921 OPEN c_diff_days_csr(p_chr_id => p_chr_id,
22922 p_cle_id => l_so_line_rec.id,
22923 p_slh_id => l_rl_rec1.slh_id);
22924 FETCH c_diff_days_csr INTO ld_chr_end_date,
22925 ld_last_start_date,
22926 ld_last_end_date;
22927 IF c_diff_days_csr%FOUND THEN
22928 ln_diff_days := ld_chr_end_date - ld_last_end_date;
22929 END IF;
22930 CLOSE c_diff_days_csr;
22931 IF SIGN(ln_diff_days) = -1 THEN
22932 OKL_API.set_message(p_app_name => G_APP_NAME,
22933 p_msg_name => G_INVALID_VALUE,
22934 p_token1 => G_COL_NAME_TOKEN,
22935 p_token1_value => 'Diffrence End date');
22936 x_return_status := OKL_API.G_RET_STS_ERROR;
22937 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22938 END IF;
22939 -- If there is diff in days then an empty stub will be appended
22940 IF ln_diff_days > 0 AND
22941 ld_last_start_date = FND_DATE.canonical_to_date(l_rl_rec.rule_information2) THEN
22942 j := j + 1;
22943 idx := idx + 1;
22944 l_rents_tbl(j).level_index_number := idx;
22945 l_rents_tbl(j).amount := 0;
22946 l_rents_tbl(j).date_start := (ld_last_end_date + 1) + ln_diff_days;
22947 l_rents_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
22948 l_rents_tbl(j).period := g_stub_rec.period;
22949 l_rents_tbl(j).description := l_strm_name;
22950 l_rents_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
22951 l_rents_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
22952 l_rents_tbl(j).days_in_month := l_days_in_month_code;
22953 l_rents_tbl(j).days_in_year := l_days_in_yr_code;
22954
22955 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
22956 l_rents_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
22957 END If;
22958
22959 -- Added by kthiruva on 29-Dec-2005.
22960 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
22961 -- Bug 4915938 - Start of Changes
22962 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
22963 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
22964 ELSE
22965 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
22966 END IF;
22967 -- Bug 4915938 - End of Changes
22968 END IF;
22969 -- End of BAKUCHIB modification bug#3121708
22970 END LOOP;
22971 ELSIF (((l_strm_name_rec.periodic_yn = 'Y' ) AND
22972 (UPPER(l_strm_name_rec.name) = 'FEE') AND
22973 (l_strm_name_rec.capitalize_yn = 'N') ) OR
22974 ((l_strm_name_rec.periodic_yn = 'Y' ) AND
22975 (UPPER(l_strm_name_rec.name) <> 'FEE'))) THEN
22976 FOR l_rl_rec IN l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_so_line_rec.id) LOOP
22977 IF (l_rl_rec.rule_information7 IS NOT NULL OR
22978 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
22979 (l_rl_rec.rule_information8 IS NOT NULL OR
22980 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
22981 k := k + 1;
22982 idx := idx + 1;
22983 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
22984 l_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
22985 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
22986 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
22987 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
22988 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
22989 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
22990 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
22991 -- l_csm_periodic_expenses_tbl(k).kle_asset_id := l_so_line_rec.id;
22992 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
22993 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
22994
22995 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
22996 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
22997 END If;
22998
22999 -- Added by kthiruva on 29-Dec-2005.
23000 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
23001 -- Bug 4915938 - Start of Changes
23002 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
23003 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
23004 ELSE
23005 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
23006 END IF;
23007 -- Bug 4915938 - End of Changes
23008
23009 ELSIF (l_rl_rec.rule_information7 IS NULL OR
23010 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
23011 (l_rl_rec.rule_information8 IS NULL OR
23012 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
23013 k := k + 1;
23014 idx := idx + 1;
23015 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
23016 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
23017 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
23018 l_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
23019 l_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
23020 l_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
23021 -- l_csm_periodic_expenses_tbl(k).kle_asset_id := l_so_line_rec.id;
23022 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
23023 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
23024 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
23025
23026 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
23027 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
23028 END If;
23029 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
23030 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
23031 ELSE
23032 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
23033 END IF;
23034 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
23035 l_csm_periodic_expenses_tbl(k).date_start := l_hdr_rec.start_date;
23036 ELSE
23037 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
23038 END IF;
23039 END IF;
23040 END LOOP;
23041 ELSIF ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' )) THEN
23042 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL',p_chr_id, l_so_line_rec.id ) LOOP
23043 l := l + 1;
23044 l_csm_one_off_fee_tbl(l).description := l_strm_name_rec.name;
23045 l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
23046 l_csm_one_off_fee_tbl(l).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
23047 IF (l_rl_rec.RULE_INFORMATION2 IS NULL OR l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
23048 l_csm_one_off_fee_tbl(l).date_paid := l_hdr_rec.start_date;
23049 ELSE
23050 l_csm_one_off_fee_tbl(l).date_paid := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
23051 END IF;
23052 -- l_csm_one_off_fee_tbl(l).kle_asset_id := l_so_line_rec.id;
23053 END LOOP;
23054 END IF;
23055 END LOOP;
23056 END LOOP;
23057 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23058 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23059 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23060 RAISE OKL_API.G_EXCEPTION_ERROR;
23061 END IF;
23062 -- Extracting the fee lines
23063 extract_fee_lines( p_api_version => p_api_version,
23064 p_chr_id => p_chr_id,
23065 p_deal_type => l_deal_type,
23066 p_init_msg_list => p_init_msg_list,
23067 x_return_status => x_return_status,
23068 x_msg_count => x_msg_count,
23069 x_msg_data => x_msg_data,
23070 px_csm_stream_types_tbl => l_csm_stream_types_tbl,
23071 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl,
23072 px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
23073 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23074 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23075 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23076 RAISE OKL_API.G_EXCEPTION_ERROR;
23077 END IF;
23078 -- Check for Mandatory streams
23079 check_for_mandatory_streams(
23080 p_api_version => p_api_version,
23081 p_init_msg_list => p_init_msg_list,
23082 x_msg_count => x_msg_count,
23083 x_msg_data => x_msg_data,
23084 x_return_status => x_return_status,
23085 p_chr_id => p_chr_id,
23086 p_deal_type => l_deal_type,
23087 p_stream_types_tbl => l_csm_stream_types_tbl,
23088 x_stream_types_tbl => l_req_stream_types_tbl);
23089 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23090 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23091 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23092 RAISE OKL_API.G_EXCEPTION_ERROR;
23093 END IF;
23094 -- Requesting for yields
23095 x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
23096 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23097 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23098 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23099 RAISE OKL_API.G_EXCEPTION_ERROR;
23100 END IF;
23101 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
23102 okl_api.set_message(p_app_name => G_APP_NAME,
23103 p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
23104 RAISE OKL_API.G_EXCEPTION_ERROR;
23105 END IF;
23106 -- Call to extraction SUBSIDY line API
23107 extract_subsidized_lines(p_api_version => p_api_version,
23108 p_init_msg_list => p_init_msg_list,
23109 x_return_status => x_return_status,
23110 x_msg_count => x_msg_count,
23111 x_msg_data => x_msg_data,
23112 p_chr_id => p_chr_id,
23113 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
23114 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23115 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23116 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23117 RAISE OKL_API.G_EXCEPTION_ERROR;
23118 END IF;
23119 x_csm_lease_header := l_csm_lease_header;
23120 x_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
23121 x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
23122 x_csm_yields_tbl := l_csm_yields_tbl;
23123 x_req_stream_types_tbl := l_req_stream_types_tbl;
23124 x_csm_line_details_tbl := l_csm_line_details_tbl;
23125 x_rents_tbl := l_rents_tbl;
23126 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
23127 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23128 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
23129 RAISE OKL_API.G_EXCEPTION_ERROR;
23130 END IF;
23131 ELSIF l_deal_type = 'LOAN' THEN
23132 FOR l_line_rec in l_line_rec_csr ( p_chr_id ,'FREE_FORM1') LOOP
23133 l_tot_asset_oec := l_tot_asset_oec + l_line_rec.oec;
23134 END LOOP;
23135 OPEN get_cap_fee_amt(p_chr_id => p_chr_id);
23136 FETCH get_cap_fee_amt INTO l_cap_fee_amt;
23137 CLOSE get_cap_fee_amt;
23138 l_total_lending := l_tot_asset_oec + l_cap_fee_amt;
23139
23140 -- Getting the install base location
23141 OPEN ib_csr(p_chr_id);
23142 FETCH ib_csr INTO l_ib_rec;
23143 IF ib_csr%NOTFOUND THEN
23144 okl_api.set_message(p_app_name => G_APP_NAME,
23145 p_msg_name => G_LLA_NO_MATCHING_RECORD,
23146 p_token1 => G_COL_NAME_TOKEN,
23147 p_token1_value => 'Contract id');
23148 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23149 END IF;
23150 CLOSE ib_csr;
23151 l_csm_loan_header.khr_id := p_chr_id;
23152 l_csm_loan_header.date_payments_commencement := l_hdr_rec.start_date;
23153 l_csm_loan_header.date_start := l_hdr_rec.start_date;
23154 l_csm_loan_header.pdt_id := l_hdr_rec.pid;
23155 l_csm_loan_header.country := l_ib_rec.country;
23156 l_csm_loan_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_BOOKING;
23157 l_csm_loan_header.total_lending := l_total_lending;
23158 l_csm_loan_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_LENDER;
23159 FOR l_line_rec in l_line_rec_csr ( p_chr_id , 'FREE_FORM1') LOOP
23160 i := i + 1;
23161 l_csm_loan_details_tbl(i).kle_loan_id := l_line_rec.id;
23162 END LOOP;
23163 FOR l_so_line_rec IN l_so_line_rec_csr (p_chr_id,p_cle_id) LOOP
23164 FOR l_rl_rec1 in l_rl_csr1 ( 'LALEVL', 'LASLH', p_chr_id, l_so_line_rec.id ) LOOP
23165 l_level_type := l_rl_rec1.object1_id1;
23166 OPEN strm_name_csr ( l_level_type );
23167 FETCH strm_name_csr into l_strm_name_rec;
23168 IF strm_name_csr%NOTFOUND THEN
23169 OKL_API.set_message(p_app_name => G_APP_NAME,
23170 p_msg_name => G_LLA_NO_MATCHING_RECORD,
23171 p_token1 => G_COL_NAME_TOKEN,
23172 p_token1_value => 'Stream Id');
23173 x_return_status := OKL_API.G_RET_STS_ERROR;
23174 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
23175 END IF;
23176 CLOSE strm_name_csr;
23177 l_strm_name := l_strm_name_rec.stream_type_purpose;
23178 IF(UPPER(TRIM(l_strm_name)) <> 'RENT') THEN
23179 m := m + 1;
23180 l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
23181 l_csm_stream_types_tbl(m).kle_asset_id := l_so_line_rec.id;
23182 END IF;
23183 idx := 0;
23184 IF( UPPER(TRIM(l_strm_name)) = 'RENT') THEN
23185 j := j + 1;
23186 idx := idx + 1;
23187 -- smahapat l_csm_loan_levels_tbl(j).kle_loan_id := l_so_line_rec.id;
23188 l_csm_loan_levels_tbl(j).description := 'Funding';
23189 l_csm_loan_levels_tbl(j).amount := l_total_lending;
23190 l_csm_loan_levels_tbl(j).date_start := l_hdr_rec.start_date;
23191 l_csm_loan_levels_tbl(j).level_index_number := idx;
23192 l_csm_loan_levels_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
23193 l_csm_loan_levels_tbl(j).days_in_month := l_days_in_month_code;
23194 l_csm_loan_levels_tbl(j).days_in_year := l_days_in_yr_code;
23195
23196 FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_so_line_rec.id ) LOOP
23197 IF (l_rl_rec.rule_information7 IS NOT NULL OR
23198 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
23199 (l_rl_rec.rule_information8 IS NOT NULL OR
23200 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
23201 j := j + 1;
23202 idx := idx + 1;
23203 l_csm_loan_levels_tbl(j).level_index_number := idx;
23204 l_csm_loan_levels_tbl(j).amount := TO_NUMBER(l_rl_rec.rule_information8);
23205 l_csm_loan_levels_tbl(j).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
23206 l_csm_loan_levels_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
23207 l_csm_loan_levels_tbl(j).period := g_stub_rec.period;
23208 l_csm_loan_levels_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
23209 l_csm_loan_levels_tbl(j).days_in_month := l_days_in_month_code;
23210 l_csm_loan_levels_tbl(j).days_in_year := l_days_in_yr_code;
23211
23212 --smahapat l_csm_loan_levels_tbl(j).kle_loan_id := l_so_line_rec.id;
23213 l_csm_loan_levels_tbl(j).description := l_strm_name;
23214 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
23215 l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
23216 ELSE
23217 l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
23218 END IF;
23219 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
23220 l_csm_loan_levels_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
23221 END IF;
23222
23223 -- Added by kthiruva on 29-Dec-2005.
23224 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
23225 -- Bug 4915938 - Start of Changes
23226 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
23227 l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
23228 ELSE
23229 l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
23230 END IF;
23231 -- Bug 4915938 - End of Changes
23232
23233 ELSIF (l_rl_rec.rule_information7 IS NULL OR
23234 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
23235 (l_rl_rec.rule_information8 IS NULL OR
23236 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
23237 j := j + 1;
23238 idx := idx + 1;
23239 --smahapat l_csm_loan_levels_tbl(j).kle_loan_id := l_so_line_rec.id;
23240 l_csm_loan_levels_tbl(j).description := l_strm_name;
23241 l_csm_loan_levels_tbl(j).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
23242 l_csm_loan_levels_tbl(j).date_start := l_hdr_rec.start_date;
23243 l_csm_loan_levels_tbl(j).level_index_number := idx;
23244 l_csm_loan_levels_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
23245 l_csm_loan_levels_tbl(j).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
23246 l_csm_loan_levels_tbl(j).period := l_rl_rec.object1_id1;
23247 l_csm_loan_levels_tbl(j).days_in_month := l_days_in_month_code;
23248 l_csm_loan_levels_tbl(j).days_in_year := l_days_in_yr_code;
23249
23250 IF(l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
23251 l_csm_loan_levels_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
23252 END IF;
23253 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
23254 l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
23255 ELSE
23256 l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
23257 END IF;
23258 IF(l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
23259 l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
23260 ELSE
23261 l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
23262 END IF;
23263 END IF;
23264 -- Now we get difference in days between contract end_date and last payment end_date
23265 -- Start of BAKUCHIB modification bug#3121708
23266 OPEN c_diff_days_csr(p_chr_id => p_chr_id,
23267 p_cle_id => l_so_line_rec.id,
23268 p_slh_id => l_rl_rec1.slh_id);
23269 FETCH c_diff_days_csr INTO ld_chr_end_date,
23270 ld_last_start_date,
23271 ld_last_end_date;
23272 IF c_diff_days_csr%FOUND THEN
23273 ln_diff_days := ld_chr_end_date - ld_last_end_date;
23274 END IF;
23275 CLOSE c_diff_days_csr;
23276 IF SIGN(ln_diff_days) = -1 THEN
23277 OKL_API.set_message(p_app_name => G_APP_NAME,
23278 p_msg_name => G_INVALID_VALUE,
23279 p_token1 => G_COL_NAME_TOKEN,
23280 p_token1_value => 'Diffrence End date');
23281 x_return_status := OKL_API.G_RET_STS_ERROR;
23282 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
23283 END IF;
23284 -- If there is diff in days then an empty stub will be appended
23285 IF ln_diff_days > 0 AND
23286 ld_last_start_date = FND_DATE.canonical_to_date(l_rl_rec.rule_information2) THEN
23287 j := j + 1;
23288 idx := idx + 1;
23289 l_csm_loan_levels_tbl(j).level_index_number := idx;
23290 l_csm_loan_levels_tbl(j).amount := 0;
23291 l_csm_loan_levels_tbl(j).date_start := (ld_last_end_date + 1) + ln_diff_days;
23292 l_csm_loan_levels_tbl(j).number_of_periods := g_stub_rec.number_of_periods;
23293 l_csm_loan_levels_tbl(j).period := g_stub_rec.period;
23294 l_csm_loan_levels_tbl(j).description := l_strm_name;
23295 l_csm_loan_levels_tbl(j).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
23296 l_csm_loan_levels_tbl(j).days_in_month := l_days_in_month_code;
23297 l_csm_loan_levels_tbl(j).days_in_year := l_days_in_yr_code;
23298
23299 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
23300 l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
23301 ELSE
23302 l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
23303 END IF;
23304 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
23305 l_csm_loan_levels_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
23306 END IF;
23307
23308 -- Added by kthiruva on 29-Dec-2005.
23309 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
23310 -- Bug 4915938 - Start of Changes
23311 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
23312 l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
23313 ELSE
23314 l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
23315 END IF;
23316 -- Bug 4915938 - End of Changes
23317
23318 END IF;
23319 -- End of BAKUCHIB modification bug#3121708
23320 END LOOP;
23321 ELSIF (((l_strm_name_rec.periodic_yn = 'Y' ) AND
23322 (UPPER(l_strm_name_rec.name) = 'FEE') AND
23323 (l_strm_name_rec.capitalize_yn = 'N')) OR
23324 ((l_strm_name_rec.periodic_yn = 'Y' ) AND
23325 (UPPER(l_strm_name_rec.name) <> 'FEE'))) THEN
23326 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_so_line_rec.id ) LOOP
23327 IF (l_rl_rec.rule_information7 IS NOT NULL OR
23328 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
23329 (l_rl_rec.rule_information8 IS NOT NULL OR
23330 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
23331 k := k + 1;
23332 idx := idx + 1;
23333 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
23334 l_csm_periodic_expenses_tbl(k).amount := TO_NUMBER(l_rl_rec.rule_information8);
23335 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+l_rl_rec.rule_information7;
23336 l_csm_periodic_expenses_tbl(k).number_of_periods := g_stub_rec.number_of_periods;
23337 l_csm_periodic_expenses_tbl(k).period := g_stub_rec.period;
23338 -- l_csm_periodic_expenses_tbl(k).kle_asset_id := l_so_line_rec.id;
23339 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
23340 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
23341 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
23342
23343 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
23344 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
23345 END IF;
23346 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
23347 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
23348 ELSE
23349 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
23350 END IF;
23351 IF (UPPER(l_strm_name_rec.name) = 'INTEREST_PAYMENT') THEN
23352 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
23353 ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL_PAYMENT' ) THEN
23354 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
23355 ELSE
23356 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
23357 END If;
23358
23359 --Added by kthiruva on 29-Dec-2005.
23360 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
23361 -- Bug 4915938 - Start of Changes
23362 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
23363 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
23364 ELSE
23365 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
23366 END IF;
23367 -- Bug 4915938 - End of Changes
23368
23369 ELSIF (l_rl_rec.rule_information7 IS NULL OR
23370 l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
23371 (l_rl_rec.rule_information8 IS NULL OR
23372 l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
23373 k := k + 1;
23374 idx := idx + 1;
23375 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
23376 l_csm_periodic_expenses_tbl(k).description := l_strm_name;
23377 l_csm_periodic_expenses_tbl(k).period := l_rl_rec.object1_id1;
23378 l_csm_periodic_expenses_tbl(k).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
23379 l_csm_periodic_expenses_tbl(k).number_of_periods := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
23380 -- l_csm_periodic_expenses_tbl(k).kle_asset_id := l_so_line_rec.id;
23381 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
23382 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
23383
23384 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
23385 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
23386 END IF;
23387 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
23388 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
23389 ELSE
23390 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
23391 END IF;
23392 IF (l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
23393 l_csm_periodic_expenses_tbl(k).date_start := l_hdr_rec.start_date;
23394 ELSE
23395 l_csm_periodic_expenses_tbl(k).date_start := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
23396 END IF;
23397 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
23398 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
23399 ELSE
23400 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
23401 END IF;
23402 IF ( UPPER(l_strm_name_rec.name) = 'INTEREST_PAYMENT' ) THEN
23403 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
23404 ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL_PAYMENT' ) Then
23405 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
23406 ELSE
23407 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
23408 END If;
23409 END IF;
23410 END LOOP;
23411 ELSIF ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' )) THEN
23412 FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_so_line_rec.id ) LOOP
23413 l := l + 1;
23414 l_csm_one_off_fee_tbl(l).description := l_strm_name_rec.name;
23415 l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
23416 l_csm_one_off_fee_tbl(l).amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
23417 IF (l_rl_rec.RULE_INFORMATION2 IS NULL OR
23418 l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
23419 l_csm_one_off_fee_tbl(l).date_paid := l_hdr_rec.start_date;
23420 ELSE
23421 l_csm_one_off_fee_tbl(l).date_paid := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
23422 END IF;
23423 -- l_csm_one_off_fee_tbl(l).kle_asset_id := l_so_line_rec.id;
23424 END LOOP;
23425 END IF;
23426 END LOOP;
23427 END LOOP;
23428 extract_fee_lines( p_api_version => p_api_version,
23429 p_chr_id => p_chr_id,
23430 p_deal_type => l_deal_type,
23431 p_init_msg_list => p_init_msg_list,
23432 x_msg_count => x_msg_count,
23433 x_msg_data => x_msg_data,
23434 x_return_status => x_return_status,
23435 px_csm_stream_types_tbl => l_csm_stream_types_tbl,
23436 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl,
23437 px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
23438 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
23439 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23440 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
23441 RAISE OKL_API.G_EXCEPTION_ERROR;
23442 END IF;
23443 extract_subsidized_lines(p_api_version => p_api_version,
23444 p_init_msg_list => p_init_msg_list,
23445 x_return_status => x_return_status,
23446 x_msg_count => x_msg_count,
23447 x_msg_data => x_msg_data,
23448 p_chr_id => TO_NUMBER(p_chr_id),
23449 px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
23450 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
23451 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23452 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
23453 RAISE OKL_API.G_EXCEPTION_ERROR;
23454 END IF;
23455 check_for_mandatory_streams(
23456 p_api_version => p_api_version,
23457 p_init_msg_list => p_init_msg_list,
23458 x_msg_count => x_msg_count,
23459 x_msg_data => x_msg_data,
23460 x_return_status => x_return_status,
23461 p_chr_id => p_chr_id,
23462 p_deal_type => l_deal_type,
23463 p_stream_types_tbl => l_csm_stream_types_tbl,
23464 x_stream_types_tbl => l_req_stream_types_tbl);
23465 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
23466 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23467 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
23468 RAISE OKL_API.G_EXCEPTION_ERROR;
23469 END IF;
23470 -- Requesting for yields
23471 x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
23472 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23473 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23474 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23475 RAISE OKL_API.G_EXCEPTION_ERROR;
23476 END IF;
23477 IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
23478 okl_api.set_message(
23479 p_app_name => G_APP_NAME,
23480 p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
23481 RAISE OKL_API.G_EXCEPTION_ERROR;
23482 End If;
23483 x_csm_loan_header := l_csm_loan_header;
23484 x_csm_loan_lines_tbl := l_csm_loan_details_tbl;
23485 x_csm_loan_levels_tbl := l_csm_loan_levels_tbl;
23486 x_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
23487 x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
23488 x_csm_yields_tbl := l_csm_yields_tbl;
23489 x_req_stream_types_tbl := l_req_stream_types_tbl;
23490 ELSE
23491 okl_api.set_message(p_app_name => G_APP_NAME,
23492 p_msg_name => G_INVALID_VALUE,
23493 p_token1 => G_COL_NAME_TOKEN,
23494 p_token1_value => 'Deal_type');
23495 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23496 END IF;
23497 OKL_API.END_ACTIVITY (x_msg_count,
23498 x_msg_data );
23499 EXCEPTION
23500 WHEN OKL_API.G_EXCEPTION_ERROR THEN
23501 IF l_hdr_csr%ISOPEN THEN
23502 CLOSE l_hdr_csr;
23503 END IF;
23504 IF l_hdrrl_csr%ISOPEN THEN
23505 CLOSE l_hdrrl_csr;
23506 END IF;
23507 IF l_financed_type_csr%ISOPEN THEN
23508 CLOSE l_financed_type_csr;
23509 END IF;
23510 IF ib_csr%ISOPEN THEN
23511 CLOSE ib_csr;
23512 END IF;
23513 IF l_line_rec_csr%ISOPEN THEN
23514 CLOSE l_line_rec_csr;
23515 END IF;
23516 IF get_org_id%ISOPEN THEN
23517 CLOSE get_org_id;
23518 END IF;
23519 IF l_tx_csr%ISOPEN THEN
23520 CLOSE l_tx_csr;
23521 END IF;
23522 IF l_strmid_csr%ISOPEN THEN
23523 CLOSE l_strmid_csr;
23524 END IF;
23525 IF l_txd_csr%ISOPEN THEN
23526 CLOSE l_txd_csr;
23527 END IF;
23528 IF l_txtrans_csr%ISOPEN THEN
23529 CLOSE l_txtrans_csr;
23530 END IF;
23531 IF strm_name_csr%ISOPEN THEN
23532 CLOSE strm_name_csr;
23533 END IF;
23534 IF l_rl_csr%ISOPEN THEN
23535 CLOSE l_rl_csr;
23536 END IF;
23537 IF l_rl_csr1%ISOPEN THEN
23538 CLOSE l_rl_csr1;
23539 END IF;
23540 IF l_so_line_rec_csr%ISOPEN THEN
23541 CLOSE l_so_line_rec_csr;
23542 END IF;
23543 IF get_cap_fee_amt%ISOPEN THEN
23544 CLOSE get_cap_fee_amt;
23545 END IF;
23546 IF c_diff_days_csr%ISOPEN THEN
23547 CLOSE c_diff_days_csr;
23548 END IF;
23549 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
23550 l_api_name,
23551 G_PKG_NAME,
23552 'OKL_API.G_RET_STS_ERROR',
23553 x_msg_count,
23554 x_msg_data,
23555 '_PVT');
23556 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
23557 IF l_hdr_csr%ISOPEN THEN
23558 CLOSE l_hdr_csr;
23559 END IF;
23560 IF l_hdrrl_csr%ISOPEN THEN
23561 CLOSE l_hdrrl_csr;
23562 END IF;
23563 IF l_financed_type_csr%ISOPEN THEN
23564 CLOSE l_financed_type_csr;
23565 END IF;
23566 IF ib_csr%ISOPEN THEN
23567 CLOSE ib_csr;
23568 END IF;
23569 IF l_line_rec_csr%ISOPEN THEN
23570 CLOSE l_line_rec_csr;
23571 END IF;
23572 IF get_org_id%ISOPEN THEN
23573 CLOSE get_org_id;
23574 END IF;
23575 IF l_tx_csr%ISOPEN THEN
23576 CLOSE l_tx_csr;
23577 END IF;
23578 IF l_strmid_csr%ISOPEN THEN
23579 CLOSE l_strmid_csr;
23580 END IF;
23581 IF l_txd_csr%ISOPEN THEN
23582 CLOSE l_txd_csr;
23583 END IF;
23584 IF l_txtrans_csr%ISOPEN THEN
23585 CLOSE l_txtrans_csr;
23586 END IF;
23587 IF strm_name_csr%ISOPEN THEN
23588 CLOSE strm_name_csr;
23589 END IF;
23590 IF l_rl_csr%ISOPEN THEN
23591 CLOSE l_rl_csr;
23592 END IF;
23593 IF l_rl_csr1%ISOPEN THEN
23594 CLOSE l_rl_csr1;
23595 END IF;
23596 IF l_so_line_rec_csr%ISOPEN THEN
23597 CLOSE l_so_line_rec_csr;
23598 END IF;
23599 IF get_cap_fee_amt%ISOPEN THEN
23600 CLOSE get_cap_fee_amt;
23601 END IF;
23602 IF c_diff_days_csr%ISOPEN THEN
23603 CLOSE c_diff_days_csr;
23604 END IF;
23605 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
23606 l_api_name,
23607 G_PKG_NAME,
23608 'OKL_API.G_RET_STS_UNEXP_ERROR',
23609 x_msg_count,
23610 x_msg_data,
23611 '_PVT');
23612 WHEN OTHERS THEN
23613 IF l_hdr_csr%ISOPEN THEN
23614 CLOSE l_hdr_csr;
23615 END IF;
23616 IF l_hdrrl_csr%ISOPEN THEN
23617 CLOSE l_hdrrl_csr;
23618 END IF;
23619 IF l_financed_type_csr%ISOPEN THEN
23620 CLOSE l_financed_type_csr;
23621 END IF;
23622 IF ib_csr%ISOPEN THEN
23623 CLOSE ib_csr;
23624 END IF;
23625 IF l_line_rec_csr%ISOPEN THEN
23626 CLOSE l_line_rec_csr;
23627 END IF;
23628 IF get_org_id%ISOPEN THEN
23629 CLOSE get_org_id;
23630 END IF;
23631 IF l_tx_csr%ISOPEN THEN
23632 CLOSE l_tx_csr;
23633 END IF;
23634 IF l_strmid_csr%ISOPEN THEN
23635 CLOSE l_strmid_csr;
23636 END IF;
23637 IF l_txd_csr%ISOPEN THEN
23638 CLOSE l_txd_csr;
23639 END IF;
23640 IF l_txtrans_csr%ISOPEN THEN
23641 CLOSE l_txtrans_csr;
23642 END IF;
23643 IF strm_name_csr%ISOPEN THEN
23644 CLOSE strm_name_csr;
23645 END IF;
23646 IF l_rl_csr%ISOPEN THEN
23647 CLOSE l_rl_csr;
23648 END IF;
23649 IF l_rl_csr1%ISOPEN THEN
23650 CLOSE l_rl_csr1;
23651 END IF;
23652 IF l_so_line_rec_csr%ISOPEN THEN
23653 CLOSE l_so_line_rec_csr;
23654 END IF;
23655 IF get_cap_fee_amt%ISOPEN THEN
23656 CLOSE get_cap_fee_amt;
23657 END IF;
23658 IF c_diff_days_csr%ISOPEN THEN
23659 CLOSE c_diff_days_csr;
23660 END IF;
23661 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
23662 l_api_name,
23663 G_PKG_NAME,
23664 'OTHERS',
23665 x_msg_count,
23666 x_msg_data,
23667 '_PVT');
23668 END extract_params_so;
23669
23670 -- End modification 11i10 bakuchib
23671 End OKL_LA_STREAM_PVT;