[Home] [Help]
PACKAGE BODY: APPS.OKL_PAYMENT_SPLIT_PVT
Source
1 PACKAGE BODY OKL_PAYMENT_SPLIT_PVT AS
2 /* $Header: OKLRPMSB.pls 120.4.12010000.2 2008/11/25 09:26:53 nikshah ship $*/
3
4 G_MODULE VARCHAR2(255) := 'okl.stream.esg.okl_esg_transport_pvt';
5 G_DEBUG_ENABLED CONSTANT VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
6 G_IS_DEBUG_STATEMENT_ON BOOLEAN;
7
8 -- Global Variables
9 G_INIT_NUMBER NUMBER := -9999;
10 G_PKG_NAME CONSTANT VARCHAR2(200) := 'OKL_PAYMENT_SPLIT_PVT';
11 G_APP_NAME CONSTANT VARCHAR2(3) := OKL_API.G_APP_NAME;
12 G_API_TYPE CONSTANT VARCHAR2(4) := '_PVT';
13
14
15 subtype rgpv_rec_type IS OKL_RULE_PUB.rgpv_rec_type;
16 subtype rulv_rec_type IS OKL_RULE_PUB.rulv_rec_type;
17 subtype rgpv_tbl_type IS OKL_RULE_PUB.rgpv_tbl_type;
18 subtype rulv_tbl_type IS OKL_RULE_PUB.rulv_tbl_type;
19
20 ------------------------------------------------------------------------------
21
22 ------------------------------------------------------------------------------
23 -- PROCEDURE Report_Error
24 -- It is a generalized routine to display error on Concurrent Manager Log file
25 -- Calls:
26 -- Called by:
27 ------------------------------------------------------------------------------
28
29 PROCEDURE Report_Error(
30 x_msg_count OUT NOCOPY NUMBER,
31 x_msg_data OUT NOCOPY VARCHAR2
32 ) IS
33
34 x_msg_index_out NUMBER;
35 x_msg_out VARCHAR2(2000);
36
37 BEGIN
38
39 okl_api.end_activity(
40 X_msg_count => x_msg_count,
41 X_msg_data => x_msg_data
42 );
43
44 FOR i in 1..x_msg_count
45 LOOP
46 FND_MSG_PUB.GET(
47 p_msg_index => i,
48 p_encoded => FND_API.G_FALSE,
49 p_data => x_msg_data,
50 p_msg_index_out => x_msg_index_out
51 );
52
53 END LOOP;
54 return;
55 EXCEPTION
56 WHEN OTHERS THEN
57 NULL;
58 END Report_Error;
59
60 ------------------------------------------------------------------------------
61 -- PROCEDURE get_fee_subline_cap_amount
62 --
63 -- This procedure returns Capital Amount from FEE Sub line corresponding
64 -- to Financial Asset Line, passed as parameter
65 --
66 -- Calls:
67 -- Called By:
68 ------------------------------------------------------------------------------
69 PROCEDURE get_fee_subline_cap_amount(
70 x_return_status OUT NOCOPY VARCHAR2,
71 x_msg_count OUT NOCOPY NUMBER,
72 x_msg_data OUT NOCOPY VARCHAR2,
73 p_fin_line_id IN NUMBER,
74 x_fee_cap_amt OUT NOCOPY NUMBER
75 ) IS
76
77 l_proc_name VARCHAR2(35) := 'GET_FEE_SUBLINE_CAP_AMOUNT';
78 l_cap_amount NUMBER;
79
80 CURSOR cap_csr (p_fin_line_id NUMBER) IS
81 SELECT SUM(NVL(okl1.capital_amount,0))
82 FROM okl_k_lines_full_v okl1, -- fee sub line
83 okl_k_lines_full_v okl2, -- fee top line
84 okc_k_items_v item1,
85 okc_k_items_v item2,
86 okl_strmtyp_source_v stream
87 WHERE item1.object1_id1 = TO_CHAR(p_fin_line_id) -- Bug 3830454
88 AND item1.jtot_object1_code = 'OKX_COVASST' -- Bug 3830454
89 AND stream.capitalize_yn = 'Y'
90 AND okl1.id = item1.cle_id
91 AND okl2.id = okl1.cle_id
92 AND okl2.id = item2.cle_id
93 AND item2.object1_id1 = stream.id1;
94
95 BEGIN
96 IF (G_DEBUG_ENABLED = 'Y') THEN
97 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
98 END IF;
99 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
100 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
101 END IF;
102 x_return_status := OKC_API.G_RET_STS_SUCCESS;
103
104 l_cap_amount := 0;
105 OPEN cap_csr(p_fin_line_id);
106 FETCH cap_csr INTO l_cap_amount;
107 IF cap_csr%NOTFOUND THEN
108
109 l_cap_amount := 0;
110 END IF;
111
112 CLOSE cap_csr;
113
114 x_fee_cap_amt := l_cap_amount;
115
116 RETURN;
117 END get_fee_subline_cap_amount;
118
119 ------------------------------------------------------------------------------
120 -- PROCEDURE get_currency_precision
121 --
122 -- This procedure returns Precision for a currency attached at header level
123 --
124 -- Calls:
125 -- Called By:
126 ------------------------------------------------------------------------------
127 PROCEDURE get_currency_precision (
128 x_return_status OUT NOCOPY VARCHAR2,
129 p_chr_id IN OKC_K_HEADERS_V.ID%TYPE,
130 x_precision OUT NOCOPY FND_CURRENCIES.PRECISION%TYPE
131 ) IS
132 CURSOR chr_csr (p_chr_id NUMBER) IS
133 SELECT currency_code
134 FROM okc_k_headers_v
135 WHERE id = p_chr_id;
136
137 CURSOR curr_csr (p_curr_code VARCHAR2) IS
138 SELECT precision
139 FROM fnd_currencies
140 WHERE currency_code = p_curr_code;
141
142 curr_failed EXCEPTION;
143 l_currency_code FND_CURRENCIES.CURRENCY_CODE%TYPE;
144 l_precision FND_CURRENCIES.PRECISION%TYPE;
145
146 BEGIN
147
148 x_return_status := OKC_API.G_RET_STS_SUCCESS;
149 OPEN chr_csr(p_chr_id);
150 FETCH chr_csr INTO l_currency_code;
151 IF chr_csr%NOTFOUND THEN
152 okl_api.set_message(
153 G_APP_NAME,
154 G_LLA_CHR_ID
155 );
156 RAISE curr_failed;
157 END IF;
158
159 CLOSE chr_csr;
160
161 OPEN curr_csr(l_currency_code);
162 FETCH curr_csr INTO l_precision;
163 IF curr_csr%NOTFOUND THEN
164 okl_api.set_message(
165 G_APP_NAME,
166 G_INVALID_VALUE,
167 'COL_NAME',
168 'CURRENCY CODE'
169 );
170 RAISE curr_failed;
171 END IF;
172 CLOSE curr_csr;
173
174 x_precision := l_precision;
175 RETURN;
176
177 EXCEPTION
178 WHEN curr_failed THEN
179 x_return_status := OKC_API.G_RET_STS_ERROR;
180 END get_currency_precision;
181
182 ------------------------------------------------------------------------------
183 -- PROCEDURE gen_line_rule
184 --
185 -- This procedure generates line rule (SLH, SLL) after applying the payment
186 -- amount. Calculation = (Rule Payment Amount * Line Capital Amount) /
187 -- Total Capital Amount
188 -- It returns line level rule information in x_strm_tbl table
189 -- Calls:
190 -- Called By:
191 ------------------------------------------------------------------------------
192 PROCEDURE gen_line_rule(
193 x_return_status OUT NOCOPY VARCHAR2,
194 x_msg_count OUT NOCOPY NUMBER,
195 x_msg_data OUT NOCOPY VARCHAR2,
196 p_chr_id IN OKC_K_HEADERS_V.ID%TYPE,
197 p_cle_id IN NUMBER,
198 p_fin_line_capital_amount IN NUMBER,
199 p_tot_capital_amount IN NUMBER,
200 p_precision IN FND_CURRENCIES.PRECISION%TYPE,
201 p_payment_type IN VARCHAR2,
202 p_amount IN NUMBER,
203 p_period IN NUMBER,
204 p_start_date IN DATE,
205 p_frequency IN VARCHAR2,
206 p_strm_count IN NUMBER,
207 x_strm_tbl OUT NOCOPY okl_mass_rebook_pub.strm_lalevl_tbl_type
208 ) IS
209 l_proc_name VARCHAR2(35) := 'GEN_LINE_RULE';
210
211 CURSOR strm_csr (p_strm_code VARCHAR2) IS
212 SELECT ID1
213 FROM okl_strmtyp_source_v
214 WHERE code = p_strm_code;
215
216 -- _new indicates the rules that got created under Line as part of payment applications
217 x_new_rgpv_rec rgpv_rec_type;
218 x_new_slh_rulv_rec rulv_rec_type;
219
220 x_slh_rulv_tbl rulv_tbl_type;
221 x_slh_rule_count NUMBER;
222
223 x_sll_rulv_tbl rulv_tbl_type;
224 x_sll_rule_count NUMBER;
225
226 x_rulv_rec rulv_rec_type;
227
228 l_rgpv_rec rgpv_rec_type;
229 l_slh_rulv_rec rulv_rec_type;
230 l_sll_rulv_rec rulv_rec_type;
231 l_fee_line_capital_amount NUMBER;
232 l_line_capital_amount NUMBER;
233 l_rgp_id NUMBER;
234
235 l_strm_count NUMBER := 0;
236 l_strm_id NUMBER;
237 rule_failed EXCEPTION;
238
239 BEGIN
240 IF (G_DEBUG_ENABLED = 'Y') THEN
241 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
242 END IF;
243 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
244 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
245 END IF;
246
247 x_return_status := OKC_API.G_RET_STS_SUCCESS;
248
249 l_strm_count := p_strm_count + 1;
250
251 --debug_message('gen, srtm_count 1 :'||l_strm_count);
252
253 l_strm_id := NULL;
254 OPEN strm_csr (p_payment_type);
255 FETCH strm_csr INTO l_strm_id;
256 CLOSE strm_csr;
257
258 IF (l_strm_id IS NULL) THEN
259 RAISE rule_failed;
260 END IF;
261
262 -- Populate SLH for this line
263 x_strm_tbl(l_strm_count).chr_id := p_chr_id;
264 x_strm_tbl(l_strm_count).cle_id := p_cle_id;
265
266 x_strm_tbl(l_strm_count).rule_information_category := 'LASLH';
267 x_strm_tbl(l_strm_count).object1_id1 := l_strm_id;
268 x_strm_tbl(l_strm_count).jtot_object1_code := 'OKL_STRMTYP';
269
270 -- Now populate SLL for the same line
271 l_strm_count := l_strm_count + 1;
272
273 x_strm_tbl(l_strm_count).chr_id := p_chr_id;
274 x_strm_tbl(l_strm_count).cle_id := p_cle_id;
275
276 x_strm_tbl(l_strm_count).rule_information_category := 'LASLL';
277 x_strm_tbl(l_strm_count).object1_id1 := p_frequency; --'M'; -- ???
278 x_strm_tbl(l_strm_count).object1_id2 := '#';
279 --nikshah 25-Nov-2008 bug # 6697542
280 x_strm_tbl(l_strm_count).object2_id2 := '#';
281 --nikshah 25-Nov-2008 bug # 6697542
282 x_strm_tbl(l_strm_count).jtot_object1_code := 'OKL_TUOM';
283 x_strm_tbl(l_strm_count).jtot_object2_code := 'OKL_STRMHDR';
284
285 x_strm_tbl(l_strm_count).rule_information1 := 10;
286 x_strm_tbl(l_strm_count).rule_information2 := fnd_date.date_to_canonical(p_start_date);
287 x_strm_tbl(l_strm_count).rule_information3 := p_period;
288
289
290 --
291 -- Line Capital Amount :=
292 -- Capital amount of this Line +
293 -- Capital amount of corresponding LINK_ASSET_LINE (under FEE LINE)
294 --
295 get_fee_subline_cap_amount(
296 x_return_status => x_return_status,
297 x_msg_count => x_msg_count,
298 x_msg_data => x_msg_data,
299 p_fin_line_id => p_cle_id,
300 x_fee_cap_amt => l_fee_line_capital_amount
301 );
302 IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
303 x_return_status := OKC_API.G_RET_STS_ERROR;
304 raise rule_failed;
305 END IF;
306
307 l_line_capital_amount := NVL(p_fin_line_capital_amount,0) +
308 NVL(l_fee_line_capital_amount,0);
309
310 x_strm_tbl(l_strm_count).rule_information6 :=
311 ROUND(((p_amount * l_line_capital_amount) /
312 p_tot_capital_amount),p_precision);
313
314
315 --debug_message('Tot line: '||l_strm_count);
316 --debug_message('gen, srtm_count 2 :'||l_strm_count);
317
318 RETURN;
319
320 EXCEPTION
321 WHEN rule_failed THEN
322 x_return_status := OKC_API.G_RET_STS_ERROR;
323 WHEN OTHERS THEN
324 okl_api.set_message(
325 G_APP_NAME,
326 G_UNEXPECTED_ERROR,
327 'OKL_SQLCODE',
328 SQLCODE,
329 'OKL_SQLERRM',
330 SQLERRM || ': '||G_PKG_NAME||'.'||l_proc_name
331 );
332 x_return_status := OKC_API.G_RET_STS_ERROR;
333 END gen_line_rule;
334
335 ------------------------------------------------------------------------------
336 -- PROCEDURE get_total_capital_amount
337 --
338 -- This procedure return total capital amount for Financial Asset
339 -- and Fee Top Line
340 --
341 -- Calls:
342 -- Called By:
343 ------------------------------------------------------------------------------
344 PROCEDURE get_total_capital_amount(
345 x_return_status OUT NOCOPY VARCHAR2,
346 x_msg_count OUT NOCOPY NUMBER,
347 x_msg_data OUT NOCOPY VARCHAR2,
348 p_chr_id IN OKC_K_HEADERS_V.ID%TYPE,
349 x_tot_capital_amount OUT NOCOPY NUMBER
350 ) IS
351 l_proc_name VARCHAR2(35) := 'GET_TOTAL_CAPITAL_AMOUNT';
352
353 -- Total Capital amount from Financial Asset Top line
354 CURSOR fin_cap_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
355 SELECT SUM(NVL(line.capital_amount,0))
356 FROM okl_k_lines_full_v line
357 WHERE line.dnz_chr_id = p_chr_id
358 AND EXISTS ( SELECT 'Y'
359 FROM okc_line_styles_v style
360 WHERE line.lse_id = style.id
361 AND style.lty_code = 'FREE_FORM1'
362 )
363 -- added to handle abandon line
364 AND NOT EXISTS (
365 SELECT 'Y'
366 FROM okc_statuses_v okcsts
367 WHERE okcsts.code = line.sts_code
368 AND okcsts.ste_code IN ('EXPIRED','HOLD','CANCELLED','TERMINATED'));
369
370 -- Total Capital amount from FEE Top Line
371 CURSOR fee_cap_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
372 SELECT SUM(NVL(line.capital_amount,0))
373 FROM okl_k_lines_full_v line,
374 okc_line_styles_v style,
375 okc_k_items_v item,
376 okl_strmtyp_source_v stream
377 WHERE style.lty_code = 'FEE'
378 AND line.dnz_chr_id = p_chr_id
379 AND stream.capitalize_yn = 'Y'
380 AND line.lse_id = style.id
381 AND line.id = item.cle_id
382 AND item.object1_id1 = stream.id1
383 -- added to handle abandon line
384 AND NOT EXISTS (
385 SELECT 'Y'
386 FROM okc_statuses_v okcsts
387 WHERE okcsts.code = line.sts_code
388 AND okcsts.ste_code IN ('EXPIRED','HOLD','CANCELLED','TERMINATED'));
389
390 l_fin_amount NUMBER;
391 l_fee_amount NUMBER;
392 cap_failed EXCEPTION;
393
394 BEGIN
395 IF (G_DEBUG_ENABLED = 'Y') THEN
396 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
397 END IF;
398 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
399 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
400 END IF;
401 x_return_status := OKC_API.G_RET_STS_SUCCESS;
402
403 OPEN fin_cap_csr(p_chr_id);
404 FETCH fin_cap_csr INTO l_fin_amount;
405 IF fin_cap_csr%NOTFOUND THEN
406 RAISE cap_failed;
407 END IF;
408 CLOSE fin_cap_csr;
409
410 OPEN fee_cap_csr(p_chr_id);
411 FETCH fee_cap_csr INTO l_fee_amount;
412 IF fee_cap_csr%NOTFOUND THEN
413 l_fee_amount := 0;
414 END IF;
415 CLOSE fee_cap_csr;
416
417 x_tot_capital_amount := NVL(l_fin_amount,0) + NVL(l_fee_amount,0);
418
419 IF (x_tot_capital_amount = 0) THEN
420 RAISE cap_failed;
421 END IF;
422
423 RETURN;
424
425 EXCEPTION
426 WHEN cap_failed THEN
427 IF fin_cap_csr%ISOPEN THEN
428 CLOSE fin_cap_csr;
429 END IF;
430 IF fee_cap_csr%ISOPEN THEN
431 CLOSE fee_cap_csr;
432 END IF;
433 x_return_status := OKC_API.G_RET_STS_ERROR;
434
435 WHEN OTHERS THEN
436 okl_api.set_message(
437 G_APP_NAME,
438 G_UNEXPECTED_ERROR,
439 'OKL_SQLCODE',
440 SQLCODE,
441 'OKL_SQLERRM',
442 SQLERRM || ': '||G_PKG_NAME||'.'||l_proc_name
443 );
444 x_return_status := OKC_API.G_RET_STS_ERROR;
445 END get_total_capital_amount;
446
447 ------------------------------------------------------------------------------
448 -- PROCEDURE generate_line_payments
449 --
450 -- This procedure proportion-ed the payments accross Financial Asset Top Line
451 -- and Fee Top Line. It returns the information in a table. It does not
452 -- create any payment to the contract
453 --
454 -- Calls:
455 -- Called By:
456 ------------------------------------------------------------------------------
457 PROCEDURE generate_line_payments(
458 p_api_version IN NUMBER,
459 p_init_msg_list IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
460 x_return_status OUT NOCOPY VARCHAR2,
461 x_msg_count OUT NOCOPY NUMBER,
462 x_msg_data OUT NOCOPY VARCHAR2,
463 p_chr_id IN OKC_K_HEADERS_V.ID%TYPE,
464 p_payment_type IN VARCHAR2,
465 p_amount IN NUMBER,
466 p_start_date IN DATE,
467 p_period IN NUMBER,
468 p_frequency IN VARCHAR2,
469 x_strm_tbl OUT NOCOPY okl_mass_rebook_pub.strm_lalevl_tbl_type
470 ) IS
471
472 l_api_name VARCHAR2(35) := 'generate_line_payments';
473 l_proc_name VARCHAR2(35) := 'generate_line_payments';
474 l_api_version CONSTANT NUMBER := 1;
475 l_precision FND_CURRENCIES.PRECISION%TYPE;
476
477 CURSOR line_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
478 SELECT okl.*
479 FROM okl_k_lines_full_v okl,
480 okc_line_styles_b ols
481 WHERE okl.dnz_chr_id = p_chr_id
482 AND okl.lse_id = ols.id
483 AND ols.lty_code = 'FREE_FORM1'
484 -- added to handle abandon line
485 AND NOT EXISTS (
486 SELECT 'Y'
487 FROM okc_statuses_b okcsts
488 WHERE okcsts.code = okl.sts_code
489 AND okcsts.ste_code IN ('EXPIRED','HOLD','CANCELLED','TERMINATED'));
490
491 CURSOR payment_csr (p_strm_code VARCHAR2) IS
492 SELECT 'Y'
493 FROM okl_strmtyp_source_v
494 WHERE code = p_strm_code;
495
496 CURSOR freq_csr (p_freq_code VARCHAR2) IS
497 SELECT 'Y'
498 FROM okl_time_units_v
499 WHERE id1 = p_freq_code;
500
501
502 l_del_yn VARCHAR2(1) := 'N';
503 l_rgpv_tbl OKL_RULE_PUB.rgpv_tbl_type;
504 l_slh_rulv_tbl OKL_RULE_PUB.rulv_tbl_type;
505 l_sll_rulv_tbl OKL_RULE_PUB.rulv_tbl_type;
506
507 l_rg_count NUMBER := 0;
508 l_slh_rule_count NUMBER := 0;
509 l_sll_rule_count NUMBER := 0;
510
511 l_rgpv_del_rec rgpv_rec_type;
512 x_slh_rulv_tbl_out rulv_tbl_type;
513 x_sll_rulv_tbl_out rulv_tbl_type;
514
515 x_slh_count NUMBER;
516 x_sll_count NUMBER;
517
518 l_slh_rulv_del_tbl rulv_tbl_type;
519 l_sll_rulv_del_tbl rulv_tbl_type;
520
521 l_tot_capital_amount NUMBER := 0;
522 l_rule_present VARCHAR2(1);
523
524 l_strm_count NUMBER := 0;
525 l_strm_tbl okl_mass_rebook_pub.strm_lalevl_tbl_type;
526 l_out_strm_tbl okl_mass_rebook_pub.strm_lalevl_tbl_type;
527 l_index NUMBER := 0;
528
529 l_exists VARCHAR2(1) := 'N';
530
531 BEGIN -- main process begins here
532 IF (G_DEBUG_ENABLED = 'Y') THEN
533 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
534 END IF;
535
536 x_return_status := OKC_API.G_RET_STS_SUCCESS;
537 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
538 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
539 END IF;
540 -- call START_ACTIVITY to create savepoint, check compatibility
541 -- and initialize message list
542 x_return_status := OKC_API.START_ACTIVITY(
543 p_api_name => l_api_name,
544 p_pkg_name => G_PKG_NAME,
545 p_init_msg_list => p_init_msg_list,
546 l_api_version => l_api_version,
547 p_api_version => p_api_version,
548 p_api_type => G_API_TYPE,
549 x_return_status => x_return_status);
550
551 -- check if activity started successfully
552 IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
553 raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
554 ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) then
555 raise OKC_API.G_EXCEPTION_ERROR;
556 END IF;
557
558 --
559 -- Validate input
560 --
561 IF (p_chr_id IS NULL) THEN
562 okl_api.set_message(
563 G_APP_NAME,
564 G_INVALID_VALUE,
565 'COL_NAME',
566 'Contract Header ID'
567 );
568 RAISE OKC_API.G_EXCEPTION_ERROR;
569 END IF;
570
571 l_exists := 'N';
572 OPEN payment_csr(p_payment_type);
573 FETCH payment_csr INTO l_exists;
574 IF payment_csr%NOTFOUND THEN
575 okl_api.set_message(
576 G_APP_NAME,
577 G_INVALID_VALUE,
578 'COL_NAME',
579 'Contract Header ID'
580 );
581 CLOSE payment_csr;
582 RAISE OKC_API.G_EXCEPTION_ERROR;
583 END IF;
584 CLOSE payment_csr;
585
586 l_exists := 'N';
587 OPEN freq_csr(p_frequency);
588 FETCH freq_csr INTO l_exists;
589 IF freq_csr%NOTFOUND THEN
590 okl_api.set_message(
591 G_APP_NAME,
592 G_INVALID_VALUE,
593 'COL_NAME',
594 'Payment frequency'
595 );
596 CLOSE freq_csr;
597 RAISE OKC_API.G_EXCEPTION_ERROR;
598 END IF;
599 CLOSE freq_csr;
600
601 IF (p_amount IS NULL) THEN
602 okl_api.set_message(
603 G_APP_NAME,
604 G_INVALID_VALUE,
605 'COL_NAME',
606 'Payment amount'
607 );
608 RAISE OKC_API.G_EXCEPTION_ERROR;
609 END IF;
610
611 IF (p_start_date IS NULL) THEN
612 okl_api.set_message(
613 G_APP_NAME,
614 G_INVALID_VALUE,
615 'COL_NAME',
616 'Payment start date'
617 );
618 RAISE OKC_API.G_EXCEPTION_ERROR;
619 END IF;
620
621 IF (p_period IS NULL) THEN
622 okl_api.set_message(
623 G_APP_NAME,
624 G_INVALID_VALUE,
625 'COL_NAME',
626 'Payment period'
627 );
628 RAISE OKC_API.G_EXCEPTION_ERROR;
629 END IF;
630
631
632 get_total_capital_amount(
633 x_return_status => x_return_status,
634 x_msg_count => x_msg_count,
635 x_msg_data => x_msg_data,
636 p_chr_id => p_chr_id,
637 x_tot_capital_amount => l_tot_capital_amount
638 );
639
640 IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
641 okl_api.set_message(
642 G_APP_NAME,
643 G_CAPITAL_AMT_ERROR
644 );
645 RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
646 END IF;
647
648 get_currency_precision(
649 x_return_status => x_return_status,
650 p_chr_id => p_chr_id,
651 x_precision => l_precision
652 );
653 IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
654 RAISE OKC_API.G_EXCEPTION_ERROR;
655 END IF;
656
657 --debug_message('CAP :'||l_tot_capital_amount);
658 FOR line_rec IN line_csr(p_chr_id)
659 LOOP
660 -- Apply Payment across Lines (Fin Asset and Fee Top Line)
661
662 l_strm_count := x_strm_tbl.COUNT;
663
664 gen_line_rule(
665 x_return_status => x_return_status,
666 x_msg_count => x_msg_count,
667 x_msg_data => x_msg_data,
668 p_chr_id => p_chr_id,
669 p_cle_id => line_rec.id,
670 p_fin_line_capital_amount => line_rec.capital_amount,
671 p_tot_capital_amount => l_tot_capital_amount,
672 p_precision => l_precision,
673 p_payment_type => p_payment_type,
674 p_amount => p_amount,
675 p_period => p_period,
676 p_start_date => p_start_date,
677 p_frequency => p_frequency,
678 p_strm_count => l_strm_count,
679 x_strm_tbl => l_strm_tbl
680 );
681 IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
682 RAISE OKC_API.G_EXCEPTION_ERROR;
683 END IF;
684
685 -- Populate output steam table
686 l_index := NVL(l_out_strm_tbl.LAST,0); -- get the last record
687
688 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
689 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'x_strm_count: '||l_index);
690 END IF;
691
692 FOR i IN 1..l_strm_tbl.COUNT
693 LOOP
694 l_index := l_index + 1;
695 l_out_strm_tbl(l_index) := l_strm_tbl(i);
696 END LOOP;
697 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
698 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'OK after assignment...');
699 END IF;
700
701 END LOOP;
702
703 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
704 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'x_strm_count after : '||x_strm_tbl.COUNT);
705 END IF;
706
707 FOR i IN 1..l_out_strm_tbl.COUNT
708 LOOP
709 x_strm_tbl(i) := l_out_strm_tbl(i);
710 END LOOP;
711
712 --Call End Activity
713 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
714 x_msg_data => x_msg_data);
715
716 EXCEPTION
717
718 when OKC_API.G_EXCEPTION_ERROR then
719 x_return_status := OKC_API.HANDLE_EXCEPTIONS(
720 p_api_name => l_api_name,
721 p_pkg_name => G_PKG_NAME,
722 p_exc_name => 'OKC_API.G_RET_STS_ERROR',
723 x_msg_count => x_msg_count,
724 x_msg_data => x_msg_data,
725 p_api_type => G_API_TYPE);
726
727 when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
728 x_return_status := OKC_API.HANDLE_EXCEPTIONS(
729 p_api_name => l_api_name,
730 p_pkg_name => G_PKG_NAME,
731 p_exc_name => 'OKC_API.G_RET_STS_UNEXP_ERROR',
732 x_msg_count => x_msg_count,
733 x_msg_data => x_msg_data,
734 p_api_type => G_API_TYPE);
735
736 when OTHERS then
737 x_return_status := OKC_API.HANDLE_EXCEPTIONS(
738 p_api_name => l_api_name,
739 p_pkg_name => G_PKG_NAME,
740 p_exc_name => 'OTHERS',
741 x_msg_count => x_msg_count,
742 x_msg_data => x_msg_data,
743 p_api_type => G_API_TYPE);
744
745 END generate_line_payments;
746
747 END OKL_PAYMENT_SPLIT_PVT;