[Home] [Help]
PACKAGE BODY: APPS.OKL_QA_DATA_INTEGRITY
Source
1 PACKAGE BODY Okl_Qa_Data_Integrity AS
2 /* $Header: OKLRQADB.pls 120.182.12020000.10 2013/04/18 18:36:47 rpillay 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 --rviriyal Bug#5982201
8 -- sjalasut, added global message constants as part of subsidy pools enhancement. START
9 G_SUB_POOL_NOT_ACTIVE CONSTANT fnd_new_messages.message_name%TYPE DEFAULT 'OKL_SUB_POOL_NOT_ACTIVE';
10 G_SUB_POOL_BALANCE_INVALID CONSTANT fnd_new_messages.message_name%TYPE DEFAULT 'OKL_SUB_POOL_INVALID_BAL';
11 G_SUB_POOL_ASSET_DATES_GAP CONSTANT fnd_new_messages.message_name%TYPE DEFAULT 'OKL_SUB_POOL_ASSET_DATES';
12 -- sjalasut, added global message constants as part of subsidy pools enhancement. END
13 G_PROD_PARAMS_NOT_FOUND CONSTANT VARCHAR2(200) := 'OKL_LLA_PDT_PARAM_NOT_FOUND';
14 G_PROD_NAME_TOKEN CONSTANT VARCHAR2(200) := 'PRODUCT_NAME';
15
16 -- bug 6760186 start
17 G_IB_LINE_LTY_ID NUMBER := 45;
18 G_TSU_CODE_ENTERED Varchar2(30) := 'ENTERED';
19 G_TRX_LINE_TYPE_BOOK Varchar2(30) := 'CFA';
20 -- bug 6760186 end
21
22
23 -- Start of comments
24 --
25 -- Procedure Name : check_evergreen_allowed
26 -- Description : Bug#4917116 For LOAN and LOAN-REVOLVING evergreen
27 -- eligible should not be set.
28 -- Business Rules :
29 -- Parameters :
30 -- Version : 1.0
31 -- End of comments
32
33 PROCEDURE check_evergreen_allowed(
34 x_return_status OUT NOCOPY VARCHAR2,
35 p_chr_id IN NUMBER
36 ) IS
37
38 l_eg_eligible OKC_RULES_B.RULE_INFORMATION1%TYPE;
39
40 --Cursor to get the deal type of the contract
41 CURSOR deal_type_csr (p_chr_id IN NUMBER) IS
42 SELECT DEAL_TYPE
43 FROM OKL_K_HEADERS
44 WHERE ID = p_chr_id;
45
46 --Cursor to get the Evergreen eligible flag
47 CURSOR eligible_csr (p_chr_id IN NUMBER) IS
48 SELECT RULE_INFORMATION1
49 FROM OKC_RULES_B
50 WHERE RULE_INFORMATION_CATEGORY = 'LAEVEL'
51 AND DNZ_CHR_ID = p_chr_id;
52
53 l_deal_type OKL_K_HEADERS.DEAL_TYPE%TYPE;
54
55 BEGIN
56
57 -- initialize return status
58 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
59
60 OPEN eligible_csr (p_chr_id);
61 FETCH eligible_csr INTO l_eg_eligible;
62 CLOSE eligible_csr;
63
64 IF (NVL(l_eg_eligible,'N') = 'Y') THEN
65 OPEN deal_type_csr(p_chr_id);
66 FETCH deal_type_csr INTO l_deal_type;
67 CLOSE deal_type_csr;
68
69 IF (NVL(l_deal_type,'X') IN ('LOAN', 'LOAN-REVOLVING')) THEN
70
71 Okl_Api.set_message(
72 p_app_name => G_APP_NAME,
73 p_msg_name => 'OKL_EVERGREEN_NOT_ALLOWED',
74 p_token1 => 'DEAL_TYPE',
75 p_token1_value => l_deal_type);
76
77 x_return_status := Okl_Api.G_RET_STS_ERROR;
78
79 END IF;
80 END IF;
81
82 EXCEPTION
83 WHEN OTHERS THEN
84 -- store SQL error message on message stack
85 Okl_Api.SET_MESSAGE(
86 p_app_name => G_APP_NAME,
87 p_msg_name => G_UNEXPECTED_ERROR,
88 p_token1 => G_SQLCODE_TOKEN,
89 p_token1_value => SQLCODE,
90 p_token2 => G_SQLERRM_TOKEN,
91 p_token2_value => SQLERRM);
92 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
93
94 IF eligible_csr%ISOPEN THEN
95 CLOSE eligible_csr;
96 END IF;
97
98 IF deal_type_csr%ISOPEN THEN
99 CLOSE deal_type_csr;
100 END IF;
101
102 END check_evergreen_allowed;
103
104 -- Start of comments
105 --
106 -- Procedure Name : check_evergreen_pth
107 -- Description : Bug#4872437 ramurt. Check the fields Evergreen Passthrough Vendor
108 -- and Evergreen Passthrough Vendor Site for mandatory if
109 -- the Evergreen Eligible flag is checked in T and C
110 -- Business Rules :
111 -- Parameters :
112 -- Version : 1.0
113 -- End of comments
114
115 PROCEDURE check_evergreen_pth(
116 x_return_status OUT NOCOPY VARCHAR2,
117 p_chr_id IN NUMBER
118 ) IS
119
120 l_eg_eligible OKC_RULES_B.RULE_INFORMATION1%TYPE;
121 l_eg_passthru_vendor OKC_RULES_B.OBJECT1_ID1%TYPE;
122 l_eg_passthru_vendor_site OKC_RULES_B.OBJECT2_ID1%TYPE;
123
124 --Cursor to get the Evergreen eligible flag
125 CURSOR eligible_csr (p_chr_id IN NUMBER) IS
126 SELECT RULE_INFORMATION1
127 FROM OKC_RULES_B
128 WHERE RULE_INFORMATION_CATEGORY = 'LAEVEL'
129 AND DNZ_CHR_ID = p_chr_id;
130
131 --Cursor to get the values of Evergreen Passthrough Vendor and Evergreen Passthrough Vendor Site
132 CURSOR evergreen_passthru_csr (p_chr_id IN NUMBER) IS
133 SELECT OBJECT1_ID1,OBJECT2_ID1
134 FROM OKC_RULES_B
135 WHERE RULE_INFORMATION_CATEGORY = 'LAEVPT'
136 AND DNZ_CHR_ID = p_chr_id;
137
138 --Cursor to get the deal type of the contract
139 CURSOR deal_type_csr (p_chr_id IN NUMBER) IS
140 SELECT DEAL_TYPE
141 FROM OKL_K_HEADERS
142 WHERE ID = p_chr_id;
143
144 l_deal_type OKL_K_HEADERS.DEAL_TYPE%TYPE;
145 BEGIN
146
147 -- initialize return status
148 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
149
150 OPEN eligible_csr (p_chr_id);
151 FETCH eligible_csr INTO l_eg_eligible;
152 CLOSE eligible_csr;
153
154 OPEN deal_type_csr(p_chr_id);
155 FETCH deal_type_csr INTO l_deal_type;
156 CLOSE deal_type_csr;
157
158 IF (l_eg_eligible = 'Y') THEN
159 IF (NVL(l_deal_type,'X') NOT IN ('LOAN', 'LOAN-REVOLVING')) THEN
160
161 OPEN evergreen_passthru_csr (p_chr_id);
162 FETCH evergreen_passthru_csr INTO l_eg_passthru_vendor, l_eg_passthru_vendor_site;
163 CLOSE evergreen_passthru_csr;
164
165 IF (l_eg_passthru_vendor IS NULL OR l_eg_passthru_vendor_site IS NULL) THEN
166
167 Okl_Api.set_message(
168 p_app_name => G_APP_NAME,
169 p_msg_name => 'OKL_REQ_EVERGREEN_PTH');
170
171 x_return_status := Okl_Api.G_RET_STS_ERROR;
172 END IF;
173 END IF;
174 END IF;
175
176 EXCEPTION
177 WHEN OTHERS THEN
178 -- store SQL error message on message stack
179 Okl_Api.SET_MESSAGE(
180 p_app_name => G_APP_NAME,
181 p_msg_name => G_UNEXPECTED_ERROR,
182 p_token1 => G_SQLCODE_TOKEN,
183 p_token1_value => SQLCODE,
184 p_token2 => G_SQLERRM_TOKEN,
185 p_token2_value => SQLERRM);
186 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
187
188 IF eligible_csr%ISOPEN THEN
189 CLOSE eligible_csr;
190 END IF;
191
192 IF deal_type_csr%ISOPEN THEN
193 CLOSE deal_type_csr;
194 END IF;
195
196 IF evergreen_passthru_csr%ISOPEN THEN
197 CLOSE evergreen_passthru_csr;
198 END IF;
199
200 END check_evergreen_pth;
201
202 ------------------------------------------------------------------------------
203 -- PROCEDURE get_bill_to
204 --
205 -- This procedure returns bill to id from contract header
206 --
207 -- Calls:
208 -- Called By:
209 ------------------------------------------------------------------------------
210 PROCEDURE get_bill_to(
211 x_return_status OUT NOCOPY VARCHAR2,
212 p_chr_id IN OKC_K_HEADERS_B.ID%TYPE,
213 x_bill_to_id OUT NOCOPY OKC_K_HEADERS_B.BILL_TO_SITE_USE_ID%TYPE
214 ) IS
215
216 l_proc_name VARCHAR2(35) := 'GET_BILL_TO';
217
218 CURSOR bill_to_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
219 SELECT bill_to_site_use_id
220 FROM okc_k_headers_b
221 WHERE id = p_chr_id;
222
223 bill_to_failed EXCEPTION;
224
225 BEGIN
226 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
227
228 x_bill_to_id := NULL;
229 OPEN bill_to_csr (p_chr_id);
230 FETCH bill_to_csr INTO x_bill_to_id;
231 IF bill_to_csr%NOTFOUND THEN
232 RAISE bill_to_failed;
233 END IF;
234 CLOSE bill_to_csr;
235
236 IF (x_bill_to_id IS NULL) THEN
237 RAISE bill_to_failed;
238 END IF;
239
240 RETURN;
241
242 EXCEPTION
243
244 WHEN bill_to_failed THEN
245 IF bill_to_csr%ISOPEN THEN
246 CLOSE bill_to_csr;
247 END IF;
248
249 x_return_status := Okl_Api.G_RET_STS_ERROR;
250
251 WHEN OTHERS THEN
252 x_return_status := Okc_Api.G_RET_STS_ERROR;
253
254 END get_bill_to;
255
256 ------------------------------------------------------------------------------
257 -- PROCEDURE get_cust_account
258 --
259 -- This procedure returns bill to id from contract header
260 --
261 -- Calls:
262 -- Called By:
263 ------------------------------------------------------------------------------
264 PROCEDURE get_cust_account(
265 x_return_status OUT NOCOPY VARCHAR2,
266 p_chr_id IN OKC_K_HEADERS_B.ID%TYPE,
267 x_cust_acc_id OUT NOCOPY OKC_K_HEADERS_B.CUST_ACCT_ID%TYPE
268 ) IS
269
270 l_proc_name VARCHAR2(35) := 'GET_CUST_ACCOUNT';
271
272 CURSOR cust_acc_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
273 SELECT cust_acct_id
274 FROM okc_k_headers_b
275 WHERE id = p_chr_id;
276
277 cust_acc_failed EXCEPTION;
278
279 BEGIN
280 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
281
282 x_cust_acc_id := NULL;
283 OPEN cust_acc_csr (p_chr_id);
284 FETCH cust_acc_csr INTO x_cust_acc_id;
285 IF cust_acc_csr%NOTFOUND THEN
286 RAISE cust_acc_failed;
287 END IF;
288 CLOSE cust_acc_csr;
289
290 IF (x_cust_acc_id IS NULL) THEN
291 RAISE cust_acc_failed;
292 END IF;
293
294 RETURN;
295
296 EXCEPTION
297
298 WHEN cust_acc_failed THEN
299 IF cust_acc_csr%ISOPEN THEN
300 CLOSE cust_acc_csr;
301 END IF;
302
303 x_return_status := Okl_Api.G_RET_STS_ERROR;
304
305 WHEN OTHERS THEN
306 x_return_status := Okc_Api.G_RET_STS_ERROR;
307
308 END get_cust_account;
309
310 --Bug# 2833653
311 -- Start of comments
312 --
313 -- Procedure Name : Are_Assets_Inactive
314 -- Description : Local function to determine if all the assets on contract are Not active
315 -- Business Rules :
316 -- Parameters :
317 -- Version : 1.0
318 -- End of comments
319 -- Start of comments
320 --
321 FUNCTION Are_Assets_Inactive (p_chr_id IN NUMBER) RETURN VARCHAR2 IS
322
323 --Bug# 4928841 :Modified cursor definition
324 --Bug# 16681373: Commented out cursor
325 /*
326 CURSOR inactive_assets_csr(chrId IN NUMBER) IS
327 SELECT 'Y'
328 FROM DUAL
329 WHERE EXISTS
330 (
331 SELECT 1
332 FROM OKC_K_LINES_B fa_cle,
333 OKC_LINE_STYLES_B fa_lse,
334 OKC_STATUSES_B fa_sts,
335 OKC_K_ITEMS fa_cim,
336 FA_ADDITIONS_B FAB
337 WHERE fa_cim.cle_id = fa_cle.id
338 AND fa_cim.dnz_chr_id = fa_cle.dnz_chr_id
339 AND fa_cle.dnz_chr_id = chrId
340 AND fa_cle.lse_id = fa_lse.id
341 AND fa_lse.lty_code = 'FIXED_ASSET'
342 AND fa_cle.sts_code = fa_sts.code
343 AND fa_sts.ste_code NOT IN ('CANCELLED','TERMINATED','HOLD','EXPIRED')
344 AND FAB.Asset_id(+) = fa_cim.object1_id1
345 AND FAB.Asset_id is null
346 );
347 */
348 --End Bug# 4928841 :Modified cursor definition
349
350 l_inactive_assets VARCHAR2(1) DEFAULT 'N';
351 --cursor to check if there are any lines on the contract
352 CURSOR l_lines_exist_csr(chrid NUMBER) IS
353 SELECT 'Y'
354 FROM okc_k_headers_b chrb
355 WHERE chrb.id = chrid
356 AND EXISTS (SELECT '1'
357 FROM okc_k_lines_b cleb
358 WHERE cleb.chr_id = chrb.id
359 AND cleb.dnz_chr_id = chrb.id);
360 l_lines_exist VARCHAR2(1) DEFAULT 'N';
361 l_halt_process EXCEPTION;
362
363 --Bug# 16681373: Added cursor to check for Mass rebook in progress
364 CURSOR l_chk_mass_rbk_csr(p_chr_id IN NUMBER)
365 IS
366 SELECT 'Y'
367 FROM okc_k_headers_b chrb,
368 okl_trx_contracts ktrx
369 WHERE chrb.id = p_chr_id
370 AND ktrx.khr_id = chrb.id
371 AND ktrx.tsu_code = 'ENTERED'
372 AND ktrx.rbr_code IS NOT NULL
373 AND ktrx.tcn_type = 'TRBK'
374 AND ktrx.representation_type = 'PRIMARY'
375 AND EXISTS (SELECT '1'
376 FROM okl_rbk_selected_contract rbk_khr
377 WHERE rbk_khr.khr_id = chrb.id
378 AND rbk_khr.status <> 'PROCESSED');
379
380 l_mass_rbk_yn VARCHAR2(1);
381
382 BEGIN
383 l_inactive_assets := 'N';
384 l_lines_exist := 'N';
385 OPEN l_lines_exist_csr(chrid => p_chr_id);
386 FETCH l_lines_exist_csr INTO l_lines_exist;
387 IF l_lines_exist_csr%NOTFOUND THEN
388 NULL;
389 END IF;
390 CLOSE l_lines_exist_csr;
391
392 IF l_lines_exist = 'N' THEN
393 l_inactive_assets := 'Y';
394 RAISE l_halt_process;
395 END IF;
396
397 --Bug# 16681373: Check if Mass Rebook is in progress instead of checking for assets in FA
398 -- to ensure that check_func_constrs_4new and check_rule_constrs_4new
399 -- will get evaluated during booking of new and re-lease asset contracts
400 -- but will not get evaluated for QA validation during Mass Rebook
401 /*
402 OPEN inactive_assets_csr(chrid => p_chr_id);
403 FETCH inactive_assets_csr INTO l_inactive_assets;
404 IF inactive_assets_csr%NOTFOUND THEN
405 NULL;
406 END IF;
407 CLOSE inactive_assets_csr;
408 */
409 l_mass_rbk_yn := 'N';
410 OPEN l_chk_mass_rbk_csr(p_chr_id => p_chr_id);
411 FETCH l_chk_mass_rbk_csr INTO l_mass_rbk_yn;
412 CLOSE l_chk_mass_rbk_csr;
413
414 -- Bug# 16681373: If Mass Rebook is in progress contract is treated as contract with active assets
415 IF l_mass_rbk_yn = 'Y' THEN
416 l_inactive_assets := 'N';
417 ELSE
418 l_inactive_assets := 'Y';
419 END IF;
420
421 RETURN(l_inactive_assets);
422 EXCEPTION
423 WHEN l_halt_process THEN
424 RETURN(l_inactive_assets);
425 WHEN OTHERS THEN
426 IF l_lines_exist_csr%ISOPEN THEN
427 CLOSE l_lines_exist_csr;
428 END IF;
429 RETURN('Y');
430 END are_assets_Inactive;
431 --Bug# 2833653
432
433 -- Procedure Name : check_service_line_hdr
434 -- Description :
435 -- Business Rules :
436 -- Parameters :
437 -- Version : 1.0
438 -- End of comments
439
440 PROCEDURE check_service_line_hdr(
441 x_return_status OUT NOCOPY VARCHAR2,
442 p_chr_id IN NUMBER
443 ) IS
444
445 x_msg_count NUMBER;
446 x_msg_data VARCHAR2(256);
447 x_link_line_tbl Okl_Service_Integration_Pub.LINK_LINE_TBL_TYPE;
448 x_service_contract_id NUMBER;
449
450 i NUMBER;
451
452 l_hdr_rec1 l_hdr_csr%ROWTYPE;
453 l_hdr_rec2 l_hdr_csr%ROWTYPE;
454
455 cust_rec1 cust_csr%ROWTYPE;
456 cust_rec2 cust_csr%ROWTYPE;
457
458 l_oksrl_rec l_oksrl_csr%ROWTYPE;
459 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
460
461 l_okl_bill_to_id OKC_K_HEADERS_B.BILL_TO_SITE_USE_ID%TYPE;
462 l_oks_bill_to_id OKC_K_HEADERS_B.BILL_TO_SITE_USE_ID%TYPE;
463
464 BEGIN
465
466 -- initialize return status
467 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
468
469 Okl_Service_Integration_Pub.get_service_link_line (
470 p_api_version => 1.0,
471 p_init_msg_list => Okl_Api.G_FALSE,
472 x_return_status => x_return_status,
473 x_msg_count => x_msg_count,
474 x_msg_data => x_msg_data,
475 p_lease_contract_id => p_chr_id,
476 x_link_line_tbl => x_link_line_tbl,
477 x_service_contract_id => x_service_contract_id);
478
479 IF x_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
480 RAISE G_EXCEPTION_HALT_VALIDATION;
481 END IF;
482
483 IF ( NVL(x_service_contract_id, -1 ) = -1 ) THEN
484 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
485 Okl_Api.set_message(
486 p_app_name => G_APP_NAME,
487 p_msg_name => G_QA_SUCCESS);
488 RETURN;
489 END IF;
490
491 OPEN l_hdr_csr( p_chr_id );
492 FETCH l_hdr_csr INTO l_hdr_rec1;
493 CLOSE l_hdr_csr;
494
495 OPEN l_hdr_csr( x_service_contract_id );
496 FETCH l_hdr_csr INTO l_hdr_rec2;
497 CLOSE l_hdr_csr;
498
499 IF ( l_hdr_rec1.CURRENCY_CODE <> l_hdr_rec2.CURRENCY_CODE ) THEN
500 Okl_Api.set_message(
501 p_app_name => G_APP_NAME,
502 p_msg_name => 'OKL_QA_OKL_OKS_CURR');
503 x_return_status := Okl_Api.G_RET_STS_ERROR;
504 END IF;
505
506 OPEN cust_csr('LESSEE', p_chr_id );
507 FETCH cust_csr INTO cust_rec1;
508 CLOSE cust_csr;
509
510 OPEN cust_csr('CUSTOMER', x_service_contract_id );
511 FETCH cust_csr INTO cust_rec2;
512 CLOSE cust_csr;
513
514 IF ( cust_rec1.Object1_id1 <> cust_rec2.Object1_id1 ) THEN
515 Okl_Api.set_message(
516 p_app_name => G_APP_NAME,
517 p_msg_name => 'OKL_QA_OKL_OKS_CUST');
518 x_return_status := Okl_Api.G_RET_STS_ERROR;
519 END IF;
520
521 /* Rule migration
522
523 OPEN l_hdrrl_csr('LABILL', 'BTO', TO_NUMBER(p_chr_id));
524 FETCH l_hdrrl_csr into l_hdrrl_rec;
525 CLOSE l_hdrrl_csr;
526 */
527 get_bill_to(
528 x_return_status => x_return_status,
529 p_chr_id => p_chr_id,
530 x_bill_to_id => l_okl_bill_to_id
531 );
532
533 /* Rule migration
534 OPEN l_oksrl_csr('BTO', x_service_contract_id, -1);
535 FETCH l_oksrl_csr into l_oksrl_rec;
536 CLOSE l_oksrl_csr;
537 */
538
539 get_bill_to(
540 x_return_status => x_return_status,
541 p_chr_id => x_service_contract_id,
542 x_bill_to_id => l_oks_bill_to_id
543 );
544
545 --If( l_hdrrl_rec.object1_id1 <> l_oksrl_rec.object1_id1 ) Then
546 IF( l_okl_bill_to_id <> l_oks_bill_to_id) THEN
547 Okl_Api.set_message(
548 p_app_name => G_APP_NAME,
549 p_msg_name => 'OKL_QA_OKL_OKS_BTO');
550 -- notify caller of an error
551 x_return_status := Okl_Api.G_RET_STS_ERROR;
552 END IF;
553
554 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
555 Okl_Api.set_message(
556 p_app_name => G_APP_NAME,
557 p_msg_name => G_QA_SUCCESS);
558 END IF;
559
560 EXCEPTION
561
562 WHEN G_EXCEPTION_HALT_VALIDATION THEN
563 NULL;
564 -- no processing necessary; validation can continue with next column
565 WHEN OTHERS THEN
566 -- store SQL error message on message stack
567 Okl_Api.SET_MESSAGE(
568 p_app_name => G_APP_NAME,
569 p_msg_name => G_UNEXPECTED_ERROR,
570 p_token1 => G_SQLCODE_TOKEN,
571 p_token1_value => SQLCODE,
572 p_token2 => G_SQLERRM_TOKEN,
573 p_token2_value => SQLERRM);
574
575 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
576
577 END check_service_line_hdr;
578
579
580 -- Start of comments
581 --
582 -- Procedure Name : check_cov_service_lines
583 -- Description :
584 -- Business Rules :
585 -- Parameters :
586 -- Version : 1.0
587 -- End of comments
588
589 PROCEDURE check_cov_service_lines(
590 x_return_status OUT NOCOPY VARCHAR2,
591 p_chr_id IN NUMBER
592 ) IS
593
594 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
595
596 x_msg_count NUMBER;
597 x_msg_data VARCHAR2(256);
598 x_link_line_tbl Okl_Service_Integration_Pub.LINK_LINE_TBL_TYPE;
599 x_service_contract_id NUMBER;
600
601 l_svclne l_svclne_csr%ROWTYPE;
602
603 i NUMBER;
604 n NUMBER;
605
606 BEGIN
607
608 -- initialize return status
609 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
610
611 Okl_Service_Integration_Pub.get_service_link_line (
612 p_api_version => 1.0,
613 p_init_msg_list => Okl_Api.G_FALSE,
614 x_return_status => x_return_status,
615 x_msg_count => x_msg_count,
616 x_msg_data => x_msg_data,
617 p_lease_contract_id => p_chr_id,
618 x_link_line_tbl => x_link_line_tbl,
619 x_service_contract_id => x_service_contract_id);
620
621 IF x_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
622 RAISE G_EXCEPTION_HALT_VALIDATION;
623 END IF;
624
625 IF ( NVL(x_service_contract_id, -1 ) = -1 ) THEN
626 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
627 Okl_Api.set_message(
628 p_app_name => G_APP_NAME,
629 p_msg_name => G_QA_SUCCESS);
630 RETURN;
631 END IF;
632
633 n := 0;
634 FOR l_svclne IN l_svclne_csr( 'COVER_PROD', x_service_contract_id )
635 LOOP
636 n := n+1;
637 END LOOP;
638
639 IF ( n > x_link_line_tbl.COUNT ) THEN
640 Okl_Api.set_message(
641 p_app_name => G_APP_NAME,
642 p_msg_name => 'OKL_QA_OKL_OKS_COV');
643 x_return_status := Okl_Api.G_RET_STS_ERROR;
644 END IF;
645
646
647 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
648 Okl_Api.set_message(
649 p_app_name => G_APP_NAME,
650 p_msg_name => G_QA_SUCCESS);
651 END IF;
652
653 EXCEPTION
654
655 WHEN G_EXCEPTION_HALT_VALIDATION THEN
656 NULL;
657 -- no processing necessary; validation can continue with next column
658 WHEN OTHERS THEN
659 -- store SQL error message on message stack
660 Okl_Api.SET_MESSAGE(
661 p_app_name => G_APP_NAME,
662 p_msg_name => G_UNEXPECTED_ERROR,
663 p_token1 => G_SQLCODE_TOKEN,
664 p_token1_value => SQLCODE,
665 p_token2 => G_SQLERRM_TOKEN,
666 p_token2_value => SQLERRM);
667
668 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
669
670 END check_cov_service_lines;
671
672 -- Start of comments
673 --
674 -- Procedure Name : check_service_lines
675 -- Description :
676 -- Business Rules :
677 -- Parameters :
678 -- Version : 1.0
679 -- End of comments
680
681 PROCEDURE check_service_lines(
682 x_return_status OUT NOCOPY VARCHAR2,
683 p_chr_id IN NUMBER
684 ) IS
685
686 x_msg_count NUMBER;
687 x_msg_data VARCHAR2(256);
688 x_link_line_tbl Okl_Service_Integration_Pub.LINK_LINE_TBL_TYPE;
689 x_service_contract_id NUMBER;
690
691 CURSOR srv_csr (p_serv_top_line_id NUMBER) IS
692 SELECT item_id inventory_item_id,
693 SUM(service_item_qty) quantity
694 FROM okl_la_cov_asset_uv
695 WHERE serv_top_line_id = p_serv_top_line_id
696 GROUP BY item_id;
697
698 l_lne l_lne_csr%ROWTYPE;
699 l_sublne l_subline_csr%ROWTYPE;
700 --l_svclne l_svcline_csr%ROWTYPE;
701 l_svclne srv_csr%ROWTYPE;
702
703 l_toplne l_toplne_csr%ROWTYPE;
704 l_topsvclne l_topsvclne_csr%ROWTYPE;
705 l_rl_rec1 l_rl_csr1%ROWTYPE;
706
707 i NUMBER;
708 j NUMBER;
709
710 BEGIN
711
712 -- initialize return status
713 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
714
715 Okl_Service_Integration_Pub.get_service_link_line (
716 p_api_version => 1.0,
717 p_init_msg_list => Okl_Api.G_FALSE,
718 x_return_status => x_return_status,
719 x_msg_count => x_msg_count,
720 x_msg_data => x_msg_data,
721 p_lease_contract_id => p_chr_id,
722 x_link_line_tbl => x_link_line_tbl,
723 x_service_contract_id => x_service_contract_id);
724
725 IF x_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
726 RAISE G_EXCEPTION_HALT_VALIDATION;
727 END IF;
728
729 IF ( NVL(x_service_contract_id, -1 ) = -1 ) THEN
730 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
731 Okl_Api.set_message(
732 p_app_name => G_APP_NAME,
733 p_msg_name => G_QA_SUCCESS);
734 RETURN;
735 END IF;
736
737 FOR l_svclne IN l_svclne_csr( 'SERVICE', x_service_contract_id )
738 LOOP
739 j := -1;
740 FOR i IN 1..x_link_line_tbl.COUNT
741 LOOP
742
743 OPEN l_topsvclne_csr( 'SERVICE', x_service_contract_id, x_link_line_tbl(i).oks_service_line_id );
744 FETCH l_topsvclne_csr INTO l_topsvclne;
745 CLOSE l_topsvclne_csr;
746
747 IF( l_svclne.id = l_topsvclne.id ) THEN
748 j := 0;
749 EXIT;
750 END IF;
751 END LOOP;
752
753 IF ( j = -1 ) THEN
754 Okl_Api.set_message(
755 p_app_name => G_APP_NAME,
756 p_msg_name => 'OKL_QA_OKL_OKS_LNK');
757 x_return_status := Okl_Api.G_RET_STS_ERROR;
758 EXIT;
759 END IF;
760 END LOOP;
761
762 FOR i IN 1..x_link_line_tbl.COUNT
763 LOOP
764
765
766 OPEN l_subline_csr( x_link_line_tbl(i).okl_service_line_id);
767 FETCH l_subline_csr INTO l_sublne;
768 CLOSE l_subline_csr;
769
770 /* removed bug 3257597
771 OPEN l_svcline_csr( x_link_line_tbl(i).oks_service_line_id);
772 FETCH l_svcline_csr INTO l_svclne;
773 CLOSE l_svcline_csr;
774 */
775 OPEN srv_csr (x_link_line_tbl(i).okl_service_line_id);
776 FETCH srv_csr INTO l_svclne;
777 CLOSE srv_csr;
778
779 IF ( l_svclne.inventory_item_id <> l_sublne.object1_id1 ) THEN
780
781 Okl_Api.set_message(
782 p_app_name => G_APP_NAME,
783 p_msg_name => 'OKL_QA_OKL_OKS_ITMS',
784 p_token1 => 'line',
785 p_token1_value => l_sublne.name);
786 x_return_status := Okl_Api.G_RET_STS_ERROR;
787
788 END IF;
789
790 IF ( l_svclne.quantity <> l_sublne.number_of_items ) THEN
791
792 Okl_Api.set_message(
793 p_app_name => G_APP_NAME,
794 p_msg_name => 'OKL_QA_OKL_OKS_NITMS',
795 p_token1 => 'line',
796 p_token1_value => l_sublne.name);
797
798 x_return_status := Okl_Api.G_RET_STS_ERROR;
799
800 END IF;
801
802
803 OPEN l_toplne_csr( 'SOLD_SERVICE', p_chr_id, x_link_line_tbl(i).okl_service_line_id );
804 FETCH l_toplne_csr INTO l_toplne;
805 CLOSE l_toplne_csr;
806
807 OPEN l_rl_csr1( 'LALEVL', 'LASLL', p_chr_id, l_toplne.id);
808 FETCH l_rl_csr1 INTO l_rl_rec1;
809 IF ( l_rl_csr1%FOUND ) THEN
810 Okl_Api.set_message(
811 p_app_name => G_APP_NAME,
812 p_msg_name => 'OKL_QA_OKL_OKS_PYMNTS',
813 p_token1 => 'line',
814 p_token1_value => l_toplne.name);
815 x_return_status := Okl_Api.G_RET_STS_ERROR;
816 END IF;
817 CLOSE l_rl_csr1;
818
819 END LOOP;
820
821 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
822 Okl_Api.set_message(
823 p_app_name => G_APP_NAME,
824 p_msg_name => G_QA_SUCCESS);
825 END IF;
826
827 EXCEPTION
828
829 WHEN G_EXCEPTION_HALT_VALIDATION THEN
830 IF ( l_toplne_csr%ISOPEN ) THEN
831 CLOSE l_toplne_csr;
832 END IF;
833 -- no processing necessary; validation can continue with next column
834 WHEN OTHERS THEN
835 -- store SQL error message on message stack
836 Okl_Api.SET_MESSAGE(
837 p_app_name => G_APP_NAME,
838 p_msg_name => G_UNEXPECTED_ERROR,
839 p_token1 => G_SQLCODE_TOKEN,
840 p_token1_value => SQLCODE,
841 p_token2 => G_SQLERRM_TOKEN,
842 p_token2_value => SQLERRM);
843
844 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
845
846 IF ( l_toplne_csr%ISOPEN ) THEN
847 CLOSE l_toplne_csr;
848 END IF;
849
850 END check_service_lines;
851
852 -- Start of comments
853 --
854 -- Procedure Name : check_srvc_amnt
855 -- Description :
856 -- Business Rules :
857 -- Parameters :
858 -- Version : 1.0
859 -- End of comments
860
861 PROCEDURE check_srvc_amnt(
862 x_return_status OUT NOCOPY VARCHAR2,
863 p_chr_id IN NUMBER
864 ) IS
865
866 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
867
868 x_msg_count NUMBER;
869 x_msg_data VARCHAR2(256);
870 x_link_line_tbl Okl_Service_Integration_Pub.LINK_LINE_TBL_TYPE;
871 x_service_contract_id NUMBER;
872
873 CURSOR srv_amt_csr (p_serv_top_line_id NUMBER) IS
874 SELECT item_id inventory_item_id,
875 SUM(NVL(price_negotiated,0)) amount
876 FROM okl_la_cov_asset_uv
877 WHERE serv_top_line_id = p_serv_top_line_id
878 GROUP BY item_id;
879
880 l_lne l_toplne_csr%ROWTYPE;
881 --l_svclne l_topsvclne_csr%ROWTYPE;
882 l_svclne srv_amt_csr%ROWTYPE;
883
884 amount1 okl_k_lines.AMOUNT%TYPE;
885 amount2 okl_k_lines.AMOUNT%TYPE;
886
887 i NUMBER;
888
889 BEGIN
890
891 -- initialize return status
892 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
893
894 Okl_Service_Integration_Pub.get_service_link_line (
895 p_api_version => 1.0,
896 p_init_msg_list => Okl_Api.G_FALSE,
897 x_return_status => x_return_status,
898 x_msg_count => x_msg_count,
899 x_msg_data => x_msg_data,
900 p_lease_contract_id => p_chr_id,
901 x_link_line_tbl => x_link_line_tbl,
902 x_service_contract_id => x_service_contract_id);
903
904 IF x_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
905 RAISE G_EXCEPTION_HALT_VALIDATION;
906 END IF;
907
908 IF ( NVL(x_service_contract_id, -1 ) = -1 ) THEN
909 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
910 Okl_Api.set_message(
911 p_app_name => G_APP_NAME,
912 p_msg_name => G_QA_SUCCESS);
913 RETURN;
914 END IF;
915
916 FOR i IN 1..x_link_line_tbl.COUNT
917 LOOP
918
919 /* removed bug# 3257597
920 OPEN l_topsvclne_csr( 'SERVICE', x_service_contract_id, x_link_line_tbl(i).oks_service_line_id );
921 FETCH l_topsvclne_csr INTO l_svclne;
922 amount1 := nvl(l_svclne.amount, -1);
923 CLOSE l_topsvclne_csr;
924 */
925
926
927 OPEN l_toplne_csr( 'SOLD_SERVICE', p_chr_id, x_link_line_tbl(i).okl_service_line_id );
928 FETCH l_toplne_csr INTO l_lne;
929 amount2 := NVL(l_lne.amount,-1);
930 CLOSE l_toplne_csr;
931
932
933 OPEN srv_amt_csr (l_lne.id); -- pass okl service top line id
934 FETCH srv_amt_csr INTO l_svclne;
935 amount1 := NVL(l_svclne.amount, -1);
936 CLOSE srv_amt_csr;
937
938 IF ( amount1 <> amount2 ) THEN
939 Okl_Api.set_message(
940 p_app_name => G_APP_NAME,
941 p_msg_name => 'OKL_QA_OKL_OKS_AMNTS',
942 p_token1 => 'line',
943 p_token1_value => l_lne.line_number);
944 x_return_status := Okl_Api.G_RET_STS_ERROR;
945 END IF;
946
947 END LOOP;
948
949 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
950 Okl_Api.set_message(
951 p_app_name => G_APP_NAME,
952 p_msg_name => G_QA_SUCCESS);
953 END IF;
954
955 EXCEPTION
956
957 WHEN G_EXCEPTION_HALT_VALIDATION THEN
958 IF ( l_toplne_csr%ISOPEN ) THEN
959 CLOSE l_toplne_csr;
960 END IF;
961 -- no processing necessary; validation can continue with next column
962 WHEN OTHERS THEN
963 -- store SQL error message on message stack
964 Okl_Api.SET_MESSAGE(
965 p_app_name => G_APP_NAME,
966 p_msg_name => G_UNEXPECTED_ERROR,
967 p_token1 => G_SQLCODE_TOKEN,
968 p_token1_value => SQLCODE,
969 p_token2 => G_SQLERRM_TOKEN,
970 p_token2_value => SQLERRM);
971
972 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
973
974 IF ( l_toplne_csr%ISOPEN ) THEN
975 CLOSE l_toplne_csr;
976 END IF;
977
978 END check_srvc_amnt;
979
980 -- Start of comments
981 --
982 -- Procedure Name : check_acceptance_date
983 -- Description :
984 -- Business Rules :
985 -- Parameters :
986 -- Version : 1.0
987 -- End of comments
988
989 PROCEDURE check_acceptance_date(
990 x_return_status OUT NOCOPY VARCHAR2,
991 p_chr_id IN NUMBER
992 ) IS
993
994 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
995
996 l_hdr_rec l_hdr_csr%ROWTYPE;
997
998 BEGIN
999
1000 -- initialize return status
1001 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1002
1003 OPEN l_hdr_csr( p_chr_id );
1004 FETCH l_hdr_csr INTO l_hdr_rec;
1005 CLOSE l_hdr_csr;
1006
1007 IF ( l_hdr_rec.accepted_date IS NULL) THEN
1008 Okl_Api.set_message(
1009 p_app_name => G_APP_NAME,
1010 p_msg_name => 'OKL_QA_NO_ACCPTD_DATE');
1011 x_return_status := Okl_Api.G_RET_STS_ERROR;
1012 END IF;
1013
1014 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
1015 Okl_Api.set_message(
1016 p_app_name => G_APP_NAME,
1017 p_msg_name => G_QA_SUCCESS);
1018 END IF;
1019
1020 EXCEPTION
1021
1022 WHEN G_EXCEPTION_HALT_VALIDATION THEN
1023 IF l_hdr_csr%ISOPEN THEN
1024 CLOSE l_hdr_csr;
1025 END IF;
1026 -- no processing necessary; validation can continue with next column
1027 WHEN OTHERS THEN
1028 -- store SQL error message on message stack
1029 Okl_Api.SET_MESSAGE(
1030 p_app_name => G_APP_NAME,
1031 p_msg_name => G_UNEXPECTED_ERROR,
1032 p_token1 => G_SQLCODE_TOKEN,
1033 p_token1_value => SQLCODE,
1034 p_token2 => G_SQLERRM_TOKEN,
1035 p_token2_value => SQLERRM);
1036 -- notify caller of an error as UNEXPETED error
1037 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1038 -- verify that cursor was closed
1039 IF l_hdr_csr%ISOPEN THEN
1040 CLOSE l_hdr_csr;
1041 END IF;
1042
1043 END check_acceptance_date;
1044
1045 -- Bug 4865431
1046 PROCEDURE check_payment_schedule(
1047 x_return_status OUT NOCOPY VARCHAR2,
1048 p_chr_id IN NUMBER,
1049 p_stream_purpose_code IN VARCHAR2,
1050 p_message_name IN VARCHAR2) IS
1051
1052 TYPE l_payment_details_rec IS RECORD (
1053 start_date DATE := NULL,
1054 number_of_periods NUMBER := NULL,
1055 stub_days NUMBER := NULL,
1056 stub_amount NUMBER := NULL,
1057 advance_or_arrears VARCHAR2(1) := NULL
1058 );
1059 TYPE l_payment_details_tbl IS TABLE OF l_payment_details_rec INDEX BY BINARY_INTEGER;
1060 TYPE l_tbl_rec IS RECORD (
1061 kle_id NUMBER,
1062 l_payment_details l_payment_details_tbl
1063 );
1064 TYPE l_tbl_type IS TABLE OF l_tbl_rec INDEX BY BINARY_INTEGER;
1065
1066 l_pmnt_tab l_tbl_type;
1067 l_pmnt_tab_counter NUMBER;
1068 l_payment_details_counter NUMBER;
1069
1070 CURSOR l_payment_lines_csr IS
1071 SELECT
1072 rgpb.cle_id kle_id,
1073 rulb2.RULE_INFORMATION2 start_date,
1074 rulb2.RULE_INFORMATION3 level_periods,
1075 rulb2.RULE_INFORMATION7 stub_days,
1076 rulb2.RULE_INFORMATION8 stub_amount,
1077 rulb2.RULE_INFORMATION10 arrear_yn
1078 FROM okc_k_lines_b cleb,
1079 okc_rule_groups_b rgpb,
1080 okc_rules_b rulb,
1081 okc_rules_b rulb2,
1082 okl_strm_type_b styb
1083 WHERE rgpb.chr_id IS NULL
1084 AND rgpb.dnz_chr_id = cleb.dnz_chr_id
1085 AND rgpb.cle_id = cleb.id
1086 AND cleb.dnz_chr_id = p_chr_id
1087 AND rgpb.rgd_code = 'LALEVL'
1088 AND rulb.rgp_id = rgpb.id
1089 AND rulb.rule_information_category = 'LASLH'
1090 AND TO_CHAR(styb.id) = rulb.object1_id1
1091 AND rulb2.object2_id1 = TO_CHAR(rulb.id)
1092 AND rulb2.rgp_id = rgpb.id
1093 AND rulb2.rule_information_category = 'LASLL'
1094 AND styb.STREAM_TYPE_PURPOSE = p_stream_purpose_code
1095 --Bug 14570222
1096 AND cleb.sts_code NOT IN ('ABANDONED','TERMINATED')
1097 ORDER BY kle_id, start_date, level_periods;
1098
1099 TYPE payment_rec_type IS RECORD (kle_id NUMBER,
1100 start_date VARCHAR2(450),
1101 number_of_periods VARCHAR2(450),
1102 stub_days VARCHAR2(450),
1103 stub_amount VARCHAR2(450),
1104 advance_or_arrears VARCHAR2(450)
1105 );
1106
1107 TYPE payment_table IS TABLE OF payment_rec_type INDEX BY BINARY_INTEGER;
1108
1109 l_payment_table payment_table;
1110 l_payment_table2 payment_table;
1111 l_payment_table_counter NUMBER;
1112 l_limit NUMBER := 10000;
1113 l_prev_kle_id NUMBER;
1114 l_num_schedules NUMBER;
1115 schedule_mismatch EXCEPTION;
1116 l_start_date DATE;
1117 l_number_of_periods NUMBER;
1118 l_stub_days NUMBER;
1119 l_advance_or_arrears VARCHAR2(30);
1120
1121 PROCEDURE print_tab(p_table IN l_tbl_type) IS
1122 BEGIN
1123 NULL;
1124 FOR i IN p_table.first..p_table.last
1125 LOOP
1126 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1127 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'i='||i || '->kle_id='|| p_table(i).kle_id);
1128 END IF;
1129 FOR j IN p_table(i).l_payment_details.first..p_table(i).l_payment_details.last
1130 LOOP
1131 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1132 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'-->j=' || j );
1133 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'------>start_date=' || p_table(i).l_payment_details(j).start_date);
1134 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'------>number_of_periods=' || p_table(i).l_payment_details(j).number_of_periods);
1135 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'------>stub_days=' || p_table(i).l_payment_details(j).stub_days);
1136 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'------>stub_amount=' || p_table(i).l_payment_details(j).stub_amount);
1137 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'------>advance_or_arrears=' || p_table(i).l_payment_details(j).advance_or_arrears);
1138 END IF;
1139 END LOOP;
1140 END LOOP;
1141 END;
1142
1143 PROCEDURE print_payment_orig_table(p_table IN payment_table) IS
1144 BEGIN
1145 NULL;
1146 IF (p_table.COUNT > 0) THEN
1147 FOR i IN p_table.first..p_table.last
1148 LOOP
1149 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1150 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'i='||i || '->kle_id='|| p_table(i).kle_id);
1151 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'start_date=' || p_table(i).start_date);
1152 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'number_of_periods=' || p_table(i).number_of_periods);
1153 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'stub_days=' || p_table(i).stub_days);
1154 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'stub_amount=' || p_table(i).stub_amount);
1155 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'advance_or_arrears=' || p_table(i).advance_or_arrears);
1156 END IF;
1157 END LOOP;
1158 END IF;
1159 END;
1160
1161 BEGIN
1162 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1163 l_payment_table_counter := 1;
1164 OPEN l_payment_lines_csr;
1165 LOOP
1166 FETCH l_payment_lines_csr BULK COLLECT INTO l_payment_table2 LIMIT l_limit;
1167 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1168 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_payment_table2.count=' || l_payment_table2.COUNT);
1169 END IF;
1170 IF (l_payment_table2.COUNT > 0) THEN
1171 FOR i IN l_payment_table2.FIRST..l_payment_table2.LAST
1172 LOOP
1173 l_payment_table(l_payment_table_counter) := l_payment_table2(i);
1174 l_payment_table_counter := l_payment_table_counter + 1;
1175 END LOOP;
1176 ELSE
1177 EXIT;
1178 END IF;
1179 END LOOP;
1180 CLOSE l_payment_lines_csr;
1181 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1182 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_payment_table_counter=' || l_payment_table_counter);
1183 END IF;
1184 print_payment_orig_table(l_payment_table);
1185
1186 IF (l_payment_table.COUNT > 0) THEN
1187 -- Prepare formatted table from l_payment_table
1188 l_pmnt_tab_counter := 0;
1189 l_payment_details_counter := 1;
1190 l_prev_kle_id := 0;
1191
1192 FOR i IN l_payment_table.first..l_payment_table.last
1193 LOOP
1194 IF (l_prev_kle_id <> l_payment_table(i).kle_id) THEN
1195 l_pmnt_tab_counter := l_pmnt_tab_counter + 1;
1196 l_payment_details_counter := 1;
1197 l_pmnt_tab(l_pmnt_tab_counter).kle_id := l_payment_table(i).kle_id;
1198
1199 l_pmnt_tab(l_pmnt_tab_counter).l_payment_details(l_payment_details_counter).start_date := Fnd_Date.canonical_to_date(l_payment_table(i).start_date);
1200 l_pmnt_tab(l_pmnt_tab_counter).l_payment_details(l_payment_details_counter).number_of_periods := l_payment_table(i).number_of_periods;
1201 l_pmnt_tab(l_pmnt_tab_counter).l_payment_details(l_payment_details_counter).stub_days := l_payment_table(i).stub_days;
1202 l_pmnt_tab(l_pmnt_tab_counter).l_payment_details(l_payment_details_counter).stub_amount := l_payment_table(i).stub_amount;
1203 l_pmnt_tab(l_pmnt_tab_counter).l_payment_details(l_payment_details_counter).advance_or_arrears := l_payment_table(i).advance_or_arrears;
1204
1205 l_prev_kle_id := l_payment_table(i).kle_id;
1206 l_payment_details_counter := l_payment_details_counter + 1;
1207 ELSE
1208 l_pmnt_tab(l_pmnt_tab_counter).l_payment_details(l_payment_details_counter).start_date := Fnd_Date.canonical_to_date(l_payment_table(i).start_date);
1209 l_pmnt_tab(l_pmnt_tab_counter).l_payment_details(l_payment_details_counter).number_of_periods := l_payment_table(i).number_of_periods;
1210 l_pmnt_tab(l_pmnt_tab_counter).l_payment_details(l_payment_details_counter).stub_days := l_payment_table(i).stub_days;
1211 l_pmnt_tab(l_pmnt_tab_counter).l_payment_details(l_payment_details_counter).stub_amount := l_payment_table(i).stub_amount;
1212 l_pmnt_tab(l_pmnt_tab_counter).l_payment_details(l_payment_details_counter).advance_or_arrears := l_payment_table(i).advance_or_arrears;
1213
1214 l_prev_kle_id := l_payment_table(i).kle_id;
1215 l_payment_details_counter := l_payment_details_counter + 1;
1216 END IF;
1217 END LOOP;
1218
1219 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1220 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Now Printing l_pmnt_tab...');
1221 END IF;
1222 print_tab(l_pmnt_tab);
1223
1224 -- Check only if there are at least two asset lines
1225 IF (l_pmnt_tab.COUNT > 1) THEN
1226
1227 l_num_schedules := l_pmnt_tab(1).l_payment_details.COUNT;
1228 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1229 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_num_schedules=' || l_num_schedules);
1230 END IF;
1231 FOR i IN 2..l_pmnt_tab.LAST
1232 LOOP
1233 IF (l_num_schedules <> l_pmnt_tab(i).l_payment_details.COUNT) THEN
1234 RAISE schedule_mismatch;
1235 END IF;
1236 END LOOP;
1237
1238
1239 FOR j IN l_pmnt_tab(1).l_payment_details.first..l_pmnt_tab(1).l_payment_details.last
1240 LOOP
1241 l_start_date := l_pmnt_tab(1).l_payment_details(j).start_date;
1242 l_number_of_periods := l_pmnt_tab(1).l_payment_details(j).number_of_periods;
1243 l_stub_days := l_pmnt_tab(1).l_payment_details(j).stub_days;
1244 l_advance_or_arrears := l_pmnt_tab(1).l_payment_details(j).advance_or_arrears;
1245 FOR i IN 2..l_pmnt_tab.LAST
1246 LOOP
1247 IF (Fnd_Date.canonical_to_date(l_start_date) <> Fnd_Date.canonical_to_date(l_pmnt_tab(i).l_payment_details(j).start_date)) OR
1248 (NVL(l_number_of_periods,0) <> NVL(l_pmnt_tab(i).l_payment_details(j).number_of_periods,0)) OR
1249 (NVL(l_stub_days,0) <> NVL(l_pmnt_tab(i).l_payment_details(j).stub_days,0)) OR
1250 (NVL(l_advance_or_arrears,'N') <> NVL(l_pmnt_tab(i).l_payment_details(j).advance_or_arrears,'N')) THEN
1251
1252 RAISE schedule_mismatch;
1253 END IF;
1254 END LOOP; -- i
1255 END LOOP; -- j
1256 END IF;
1257
1258 END IF;
1259
1260 EXCEPTION
1261 WHEN schedule_mismatch
1262 THEN
1263 x_return_status := Okl_Api.G_RET_STS_ERROR;
1264 Okl_Api.set_message(
1265 p_app_name => G_APP_NAME,
1266 p_msg_name => p_message_name);
1267 WHEN OTHERS
1268 THEN
1269 x_return_status := Okl_Api.G_RET_STS_ERROR;
1270 Okl_Api.set_message(
1271 p_app_name => G_APP_NAME,
1272 p_msg_name => p_message_name);
1273
1274 END;
1275
1276
1277
1278 -- Start of comments
1279 --
1280 -- Procedure Name : check_payment_type
1281 -- Description :
1282 -- Business Rules :
1283 -- Parameters :
1284 -- Version : 1.0
1285 -- End of comments
1286
1287 /* AKP -- Commented out for OKL.H: drop0. */
1288 PROCEDURE check_payment_type(
1289 x_return_status OUT NOCOPY VARCHAR2,
1290 p_chr_id IN NUMBER
1291 ) IS
1292
1293 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
1294 l_dummy VARCHAR2(1) := '?';
1295 l_count NUMBER := 0;
1296 l_row_notfound BOOLEAN;
1297 l_token VARCHAR2(2000);
1298 x_msg_count NUMBER;
1299 x_msg_data VARCHAR2(2000);
1300 x_pdt_parameter_rec Okl_Setupproducts_Pub.pdt_parameters_rec_type;
1301
1302
1303 -- gboomina modified for Bug 6329395 - Start
1304 CURSOR c_contract_name ( p_id VARCHAR2 ) IS
1305 SELECT contract_number
1306 FROM okc_k_headers_v WHERE id = p_id;
1307 l_contract_number OKC_K_HEADERS_ALL_B.CONTRACT_NUMBER%TYPE;
1308 -- gboomina modified for Bug 6329395 - End
1309
1310 --Added end_date by bkatraga for bug 13478101
1311 -- Bug 5114815
1312 CURSOR contract_start_date_csr(p_id NUMBER) IS
1313 SELECT start_date,
1314 end_date
1315 FROM okc_k_headers_b
1316 WHERE id = p_id;
1317 l_contract_start_date DATE;
1318
1319 l_hdr l_hdr_csr%ROWTYPE;
1320 l_txl l_txl_csr%ROWTYPE;
1321 l_txd l_txd_csr%ROWTYPE;
1322 l_itm l_itms_csr%ROWTYPE;
1323 l_struct_rec l_struct_csr%ROWTYPE;
1324 l_structure NUMBER;
1325 l_rl_rec1 l_rl_csr1%ROWTYPE;
1326 i NUMBER;
1327
1328
1329 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
1330 l_supp_rec supp_csr%ROWTYPE;
1331 l_lne l_lne_csr%ROWTYPE;
1332 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
1333 l_strm_name_rec strm_name_csr%ROWTYPE;
1334
1335 l_inflow_defined_yn VARCHAR2(1);
1336 l_outflow_defined_yn VARCHAR2(1);
1337
1338 l_deal_type VARCHAR2(30);
1339 l_interest_calculation_basis VARCHAR2(30);
1340 l_revenue_recognition_method VARCHAR2(30);
1341 l_rent_payment_found BOOLEAN := FALSE;
1342 l_principal_payment_found BOOLEAN := FALSE;
1343 l_pricing_engine VARCHAR2(30);
1344 l_payment_in_advance BOOLEAN := FALSE;
1345 l_rent_payment_in_advance BOOLEAN := FALSE;
1346 l_prin_payment_in_advance BOOLEAN := FALSE;
1347 l_int_payment_in_advance BOOLEAN := FALSE;
1348 l_loan_start_date DATE := NULL;
1349 l_variable_start_date DATE := NULL;
1350 l_loan_periods NUMBER := NULL;
1351 l_variable_periods NUMBER := NULL;
1352 l_payment_date DATE;
1353 l_payment_date2 DATE;
1354 l_line_ind NUMBER;
1355 l_base_rate_defined BOOLEAN := FALSE;
1356 l_var_int_schedule_defined BOOLEAN := FALSE;
1357
1358 --Added by bkatraga for bug 14111538
1359 l_var_int_amount_non_zero BOOLEAN := FALSE;
1360 l_stream_type_name OKL_STRM_TYPE_V.NAME%TYPE := NULL;
1361
1362 --Added OKL_STRM_TYPE_V and stty.name by bkatraga for bug 13478101
1363 CURSOR l_pmnt_strm_hdr(
1364 rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
1365 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
1366 chrId NUMBER) IS
1367 SELECT crg.cle_id,
1368 crl.id,
1369 stty.stream_type_purpose,
1370 crl.object1_id1,
1371 crl.RULE_INFORMATION1,
1372 crl.RULE_INFORMATION2,
1373 crl.RULE_INFORMATION3,
1374 crl.RULE_INFORMATION4,
1375 crl.RULE_INFORMATION5,
1376 crl.RULE_INFORMATION6,
1377 crl.RULE_INFORMATION10,
1378 crl.RULE_INFORMATION11,
1379 stty.name
1380 FROM OKC_RULE_GROUPS_B crg,
1381 OKC_RULES_B crl,
1382 OKL_STRM_TYPE_V stty
1383 WHERE stty.id = crl.object1_id1
1384 AND stty.stream_type_purpose IN (
1385 'RENT', 'PRINCIPAL_PAYMENT', 'VARIABLE_INTEREST_SCHEDULE',
1386 'LOAN_PAYMENT'
1387 )
1388 AND crl.rgp_id = crg.id
1389 AND crg.RGD_CODE = rgcode
1390 AND crl.RULE_INFORMATION_CATEGORY = rlcat
1391 AND crg.dnz_chr_id = chrId;
1392
1393 l_pmnt_strm_hdr_rec l_pmnt_strm_hdr%ROWTYPE;
1394
1395 CURSOR l_pmnt_strm_check(
1396 rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
1397 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
1398 pmnt_strm_purpose OKL_STRM_TYPE_B.STREAM_TYPE_PURPOSE%TYPE,
1399 chrId NUMBER) IS
1400 SELECT crg.cle_id,
1401 crl.id,
1402 crl.object1_id1,
1403 crl.RULE_INFORMATION1,
1404 crl.RULE_INFORMATION2,
1405 crl.RULE_INFORMATION3,
1406 crl.RULE_INFORMATION4,
1407 crl.RULE_INFORMATION5,
1408 crl.RULE_INFORMATION6,
1409 crl.RULE_INFORMATION10,
1410 crl.RULE_INFORMATION11
1411 FROM OKC_RULE_GROUPS_B crg,
1412 OKC_RULES_B crl,
1413 OKL_STRM_TYPE_B stty
1414 WHERE stty.id = crl.object1_id1
1415 AND stty.stream_type_purpose = pmnt_strm_purpose
1416 AND crl.rgp_id = crg.id
1417 AND crg.RGD_CODE = rgcode
1418 AND crl.RULE_INFORMATION_CATEGORY = rlcat
1419 AND crg.dnz_chr_id = chrId;
1420
1421 CURSOR l_pmnt_strm_check2(
1422 rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
1423 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
1424 pmnt_strm_purpose OKL_STRM_TYPE_B.STREAM_TYPE_PURPOSE%TYPE,
1425 chrId NUMBER) IS
1426 SELECT crg.cle_id,
1427 crl.id,
1428 crl.object1_id1,
1429 crl.RULE_INFORMATION1,
1430 crl.RULE_INFORMATION2,
1431 crl.RULE_INFORMATION3,
1432 crl.RULE_INFORMATION4,
1433 crl.RULE_INFORMATION5,
1434 crl.RULE_INFORMATION6,
1435 crl.RULE_INFORMATION10,
1436 crl.RULE_INFORMATION11
1437 FROM OKC_RULE_GROUPS_B crg,
1438 OKC_RULES_B crl,
1439 OKL_STRM_TYPE_B stty
1440 WHERE stty.id = crl.object1_id1
1441 AND stty.stream_type_purpose = pmnt_strm_purpose
1442 AND crl.rgp_id = crg.id
1443 AND crg.RGD_CODE = rgcode
1444 AND crl.RULE_INFORMATION_CATEGORY = rlcat
1445 AND crg.dnz_chr_id = chrId;
1446
1447 l_pmnt_strm_check_rec l_pmnt_strm_check%ROWTYPE;
1448 l_pmnt_strm_check_rec2 l_pmnt_strm_check2%ROWTYPE;
1449
1450 --Added by bkatraga for bug 13478101
1451 l_pymnt_start_date DATE := NULL;
1452 l_start_day NUMBER := NULL;
1453 l_var_stub_days OKC_RULES_B.rule_information7%TYPE := NULL;
1454 l_frequency OKC_RULES_B.OBJECT1_ID1%TYPE;
1455 l_factor NUMBER := 0;
1456 l_pymnt_end_date DATE := NULL;
1457 l_rent_amt_zero BOOLEAN := FALSE;
1458 l_rent_strm_name OKL_STRM_TYPE_V.NAME%TYPE;
1459 l_principal_basis OKL_K_RATE_PARAMS.PRINCIPAL_BASIS_CODE%TYPE;
1460 l_contract_end_date DATE;
1461 l_var_int_strm_name OKL_STRM_TYPE_V.NAME%TYPE;
1462
1463 CURSOR get_principal_basis(p_khr_id NUMBER) IS
1464 SELECT PRINCIPAL_BASIS_CODE
1465 FROM OKL_K_RATE_PARAMS
1466 WHERE KHR_ID = p_khr_id;
1467 --end bkatraga
1468
1469 CURSOR l_pmnt_lns_in_hdr(p_id OKC_RULES_B.ID%TYPE, chrId NUMBER) IS
1470 SELECT
1471 crl2.object1_id1,
1472 crl2.object1_id2,
1473 crl2.rule_information2,
1474 NVL(crl2.rule_information3,0) rule_information3,
1475 crl2.rule_information4,
1476 crl2.rule_information5,
1477 crl2.rule_information6,
1478 crl2.rule_information7,
1479 crl2.rule_information8,
1480 crl2.rule_information10
1481 FROM OKC_RULES_B crl1, OKC_RULES_B crl2
1482 WHERE TO_CHAR(crl1.id) = crl2.object2_id1
1483 AND crl1.id = p_id
1484 AND crl2.RULE_INFORMATION_CATEGORY = 'LASLL'
1485 AND crl1.RULE_INFORMATION_CATEGORY = 'LASLH'
1486 AND crl1.dnz_chr_id = chrId
1487 AND crl2.dnz_chr_id = chrId
1488 ORDER BY crl2.rule_information2 ASC;
1489
1490 CURSOR l_pmnt_lns_in_hdr2(p_id OKC_RULES_B.ID%TYPE, chrId NUMBER) IS
1491 SELECT
1492 crl2.object1_id1,
1493 crl2.object1_id2,
1494 crl2.rule_information2,
1495 NVL(crl2.rule_information3,0) rule_information3,
1496 crl2.rule_information4,
1497 crl2.rule_information5,
1498 crl2.rule_information6,
1499 crl2.rule_information7,
1500 crl2.rule_information8,
1501 crl2.rule_information10
1502 FROM OKC_RULES_B crl1, OKC_RULES_B crl2
1503 WHERE TO_CHAR(crl1.id) = crl2.object2_id1
1504 AND crl1.id = p_id
1505 AND crl2.RULE_INFORMATION_CATEGORY = 'LASLL'
1506 AND crl1.RULE_INFORMATION_CATEGORY = 'LASLH'
1507 AND crl1.dnz_chr_id = chrId
1508 AND crl2.dnz_chr_id = chrId
1509 ORDER BY crl2.rule_information2 ASC;
1510
1511 l_pmnt_lns_in_hdr_rec l_pmnt_lns_in_hdr%ROWTYPE;
1512 l_pmnt_lns_in_hdr_rec2 l_pmnt_lns_in_hdr2%ROWTYPE;
1513
1514 CURSOR cust_print_lead_days_csr(p_id NUMBER) IS
1515 SELECT term.printing_lead_days
1516 FROM okc_k_headers_b khr
1517 ,hz_customer_profiles cp
1518 ,ra_terms_b term
1519 WHERE khr.id = p_id
1520 AND khr.bill_to_site_use_id = cp.site_use_id
1521 AND cp.standard_terms = term.term_id;
1522 l_cust_print_lead_days NUMBER := null;
1523
1524 CURSOR rate_delay_csr(p_id NUMBER) IS
1525 SELECT TO_NUMBER(RULE_INFORMATION3)
1526 FROM OKC_RULES_B RULE,
1527 OKC_RULE_GROUPS_B RGP
1528 WHERE RGP.ID = RULE.RGP_ID
1529 AND RGP.DNZ_CHR_ID = p_id
1530 AND RGD_CODE = 'LABILL'
1531 AND RULE_INFORMATION_CATEGORY = 'LAINVD';
1532
1533 -- Fix for bug 7131756: Added columns captital_reduction,
1534 -- capitalize_down_payment_yn,
1535 -- capital_reduction_percent, OEC
1536 CURSOR oec_csr (p_id NUMBER) IS
1537 SELECT a.capital_amount capital_amount,
1538 b.name asset_number,
1539 capital_reduction,
1540 NVL(capitalize_down_payment_yn,'N') capitalize_down_payment_yn,
1541 capital_reduction_percent,
1542 oec,
1543 e.ste_code ste_code -- 5264170
1544 FROM OKL_K_LINES a,
1545 OKC_K_LINES_TL b,
1546 OKC_LINE_STYLES_V C,
1547 OKC_K_LINES_B d,
1548 OKC_STATUSES_B e
1549 WHERE a.ID = p_id
1550 AND a.ID = b.ID
1551 AND b.LANGUAGE = USERENV('LANG')
1552 AND c.lty_code ='FREE_FORM1'
1553 AND d.ID = p_ID
1554 AND d.lse_id = c.id
1555 AND d.sts_code = e.code;
1556
1557 --Bug# 13146882
1558 CURSOR l_rbk_csr(p_chr_id NUMBER)
1559 IS
1560 SELECT ktrx.date_transaction_occurred
1561 FROM okc_k_headers_b chrb,
1562 okl_trx_contracts ktrx
1563 WHERE chrb.ID = p_chr_id
1564 AND ktrx.khr_id = chrb.id
1565 AND ktrx.tsu_code = 'ENTERED'
1566 AND ktrx.rbr_code IS NOT NULL
1567 AND ktrx.tcn_type = 'TRBK'
1568 AND ktrx.representation_type = 'PRIMARY';
1569
1570 l_rbk_rec l_rbk_csr%ROWTYPE;
1571 --Bug# 13146882
1572
1573 l_rate_delay NUMBER := null;
1574 l_rent_start_date DATE;
1575 l_rent_periods NUMBER;
1576 l_principal_start_date DATE;
1577 l_principal_periods NUMBER;
1578 l_curr_cle_id NUMBER;
1579 l_tot_principal_payment NUMBER;
1580 l_capital_amount OKL_K_LINES.CAPITAL_AMOUNT%TYPE;
1581 l_oec_amount OKL_K_LINES.OEC%TYPE;
1582 l_capital_reduction OKL_K_LINES.CAPITAL_REDUCTION%TYPE;
1583 l_capital_reduction_percent OKL_K_LINES.CAPITAL_REDUCTION_PERCENT%TYPE;
1584 l_capitalize_down_payment_yn OKL_K_LINES.CAPITALIZE_DOWN_PAYMENT_YN%TYPE;
1585 l_asset_number OKC_K_LINES_TL.NAME%TYPE;
1586 l_ste_code OKC_STATUSES_B.STE_CODE%TYPE;
1587
1588 line_ind NUMBER;
1589 ind NUMBER;
1590 l_global_total_periods NUMBER;
1591 l_line_total_periods NUMBER;
1592 l_pmnt_lns_in_hdr_rec_comp l_pmnt_lns_in_hdr%ROWTYPE;
1593 l_pmnt_lns_in_hdr_rec l_pmnt_lns_in_hdr%ROWTYPE;
1594 l_min_start_date DATE;
1595 l_mismatch_exception EXCEPTION;
1596 l_global_min_start_date DATE;
1597 l_loop_counter NUMBER;
1598 l_pmnt_type VARCHAR2(200);
1599
1600 l_tot_unsched_prin_payment NUMBER;
1601 -- gboomina Bug 6401848 - Start
1602 l_net_subsidy_amount NUMBER;
1603 -- gboomina Bug 6401848 - End
1604 l_non_cap_down_payment_amount NUMBER;
1605
1606 FUNCTION tot_unsched_prin_payment(
1607 x_return_status OUT NOCOPY VARCHAR2,
1608 p_chr_id IN NUMBER,
1609 p_kle_id IN NUMBER) RETURN NUMBER IS
1610 l_tot_amount NUMBER := 0;
1611 BEGIN
1612 IF (G_DEBUG_ENABLED = 'Y') THEN
1613 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1614 END IF;
1615 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1616 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1617 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In tot_unsched_prin_payment: 0...');
1618 END IF;
1619 --print('In tot_unsched_prin_payment: p_chr_id= ' || p_chr_id || ' p_kle_id=' || p_kle_id);
1620 FOR l_pmnt_strm_check_rec2 IN l_pmnt_strm_check2('LALEVL','LASLH','UNSCHEDULED_PRINCIPAL_PAYMENT', p_chr_id)
1621 LOOP
1622 --print('In tot_unsched_prin_payment: 1...');
1623 IF (l_pmnt_strm_check_rec2.cle_id = p_kle_id) THEN
1624 --print('In tot_unsched_prin_payment: 2...');
1625 FOR l_pmnt_lns_in_hdr_rec2 IN l_pmnt_lns_in_hdr2(l_pmnt_strm_check_rec2.id ,p_chr_id)
1626 LOOP
1627 --print('In tot_unsched_prin_payment: 3...');
1628 l_tot_amount := l_tot_amount + NVL(l_pmnt_lns_in_hdr_rec2.rule_information8,0);
1629 END LOOP;
1630 END IF;
1631 END LOOP;
1632 --print('Out of main FOR LOOP...');
1633 RETURN(l_tot_amount);
1634
1635 EXCEPTION WHEN OTHERS THEN
1636 --print('Exception In tot_unsched_prin_payment...sqlcode=' || sqlcode || ' sqlerrm=' || sqlerrm);
1637 x_return_status := Okl_Api.G_RET_STS_ERROR;
1638 RETURN(0);
1639 END; -- tot_unsched_prin_payment
1640
1641 BEGIN
1642
1643 -- initialize return status
1644 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1645
1646 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1647 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Check Payment Type...');
1648 END IF;
1649
1650 Okl_K_Rate_Params_Pvt.get_product(
1651 p_api_version => 1,
1652 p_init_msg_list => Okc_Api.G_FALSE,
1653 x_return_status => x_return_status,
1654 x_msg_count => x_msg_count,
1655 x_msg_data => x_msg_data,
1656 p_khr_id => p_chr_id,
1657 x_pdt_parameter_rec => x_pdt_parameter_rec);
1658
1659 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1660 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Check Payment Type:After get_product...x_return_status='||x_return_status);
1661 END IF;
1662 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
1663 Okc_Api.set_message(
1664 p_app_name => G_APP_NAME,
1665 p_msg_name => G_PROD_PARAMS_NOT_FOUND,
1666 p_token1 => G_PROD_NAME_TOKEN ,
1667 p_token1_value => l_deal_type);
1668 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1669 END IF;
1670
1671 l_deal_type := x_pdt_parameter_rec.deal_type;
1672 l_interest_calculation_basis := x_pdt_parameter_rec.interest_calculation_basis;
1673 l_revenue_recognition_method := x_pdt_parameter_rec.revenue_recognition_method;
1674
1675 --Bug# 13146882
1676 FOR l_cnt_start_date IN contract_start_date_csr(p_chr_id)
1677 LOOP
1678 l_contract_start_date := l_cnt_start_date.start_date;
1679 --Added by bkatraga for bug 13478101
1680 l_contract_end_date := l_cnt_start_date.end_date;
1681 END LOOP;
1682
1683 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1684 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Check Payment Type:Before l_pmnt_strm_hdr_rec...x_return_status='||x_return_status);
1685 END IF;
1686 FOR l_pmnt_strm_hdr_rec IN l_pmnt_strm_hdr ( 'LALEVL', 'LASLH', p_chr_id )
1687 LOOP
1688
1689 FOR l_pmnt_lns_in_hdr_rec IN l_pmnt_lns_in_hdr(l_pmnt_strm_hdr_rec.id ,p_chr_id)
1690 LOOP
1691 IF ( l_pmnt_strm_hdr_rec.stream_type_purpose = 'RENT' ) THEN
1692 l_rent_payment_found := TRUE;
1693 IF (NVL(l_pmnt_lns_in_hdr_rec.rule_information10,'N') = 'N') THEN
1694 l_payment_in_advance := TRUE;
1695 l_rent_payment_in_advance := TRUE;
1696 --Added by bkatraga for bug 14111538
1697 l_stream_type_name := l_pmnt_strm_hdr_rec.name;
1698 END IF;
1699 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1700 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before assigning l_rent_start_date....');
1701 END IF;
1702 l_rent_start_date := Fnd_Date.canonical_to_date(l_pmnt_lns_in_hdr_rec.rule_information2);
1703 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1704 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rent_start_date=' || l_rent_start_date);
1705 END IF;
1706 l_rent_periods := l_pmnt_lns_in_hdr_rec.rule_information3;
1707 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1708 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_rent_periods=' || l_rent_periods);
1709 END IF;
1710
1711 --Added by bkatraga for bug 13478101
1712 IF(l_pmnt_lns_in_hdr_rec.rule_information6 = 0 OR l_pmnt_lns_in_hdr_rec.rule_information8 = 0) THEN
1713 l_rent_amt_zero := TRUE;
1714 l_rent_strm_name := l_pmnt_strm_hdr_rec.name;
1715 END IF;
1716 --end bkatraga
1717
1718 ELSIF ( l_pmnt_strm_hdr_rec.stream_type_purpose = 'PRINCIPAL_PAYMENT' ) THEN
1719 l_principal_payment_found := TRUE;
1720 IF (NVL(l_pmnt_lns_in_hdr_rec.rule_information10,'N') = 'N') THEN
1721 l_payment_in_advance := TRUE;
1722 l_prin_payment_in_advance := TRUE;
1723 --Added by bkatraga for bug 14111538
1724 l_stream_type_name := l_pmnt_strm_hdr_rec.name;
1725 END IF;
1726 l_principal_start_date := Fnd_Date.canonical_to_date(l_pmnt_lns_in_hdr_rec.rule_information2);
1727 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1728 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_principal_start_date=' || l_principal_start_date);
1729 END IF;
1730 l_principal_periods := l_pmnt_lns_in_hdr_rec.rule_information3;
1731 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1732 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_principal_periods=' || l_principal_periods);
1733 END IF;
1734 ELSIF ( l_pmnt_strm_hdr_rec.stream_type_purpose = 'LOAN_PAYMENT' ) THEN
1735 l_loan_start_date := Fnd_Date.canonical_to_date(l_pmnt_lns_in_hdr_rec.rule_information2);
1736 l_loan_periods := l_hdrrl_rec.rule_information3;
1737 ELSIF ( l_pmnt_strm_hdr_rec.stream_type_purpose = 'VARIABLE_INTEREST_SCHEDULE' ) THEN
1738 l_var_int_schedule_defined := TRUE;
1739 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1740 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before assigning l_variable_start_date....');
1741 END IF;
1742
1743 --Added IF clause by bkatraga for bug 13478101
1744 IF(l_variable_start_date IS NULL) THEN
1745 l_variable_start_date := Fnd_Date.canonical_to_date(l_pmnt_lns_in_hdr_rec.rule_information2);
1746 END IF;
1747
1748 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1749 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_variable_start_date = ' || l_variable_start_date);
1750 END IF;
1751 l_variable_periods := l_pmnt_lns_in_hdr_rec.rule_information3;
1752 IF (NVL(l_pmnt_lns_in_hdr_rec.rule_information10,'N') = 'N') THEN
1753 l_payment_in_advance := TRUE;
1754 l_int_payment_in_advance := TRUE;
1755 --Added by bkatraga for bug 14111538
1756 l_stream_type_name := l_pmnt_strm_hdr_rec.name;
1757 END IF;
1758
1759 --Added by bkatraga for bug 13478101
1760 l_pymnt_start_date := Fnd_Date.canonical_to_date(l_pmnt_lns_in_hdr_rec.rule_information2);
1761 IF(l_start_day IS NULL OR
1762 (l_var_stub_days IS NOT NULL AND l_var_stub_days <> OKL_API.G_MISS_CHAR)) THEN
1763 l_start_day := TO_CHAR(l_pymnt_start_date,'DD');
1764 END IF;
1765 l_var_stub_days := l_pmnt_lns_in_hdr_rec.rule_information7;
1766 l_frequency := l_pmnt_lns_in_hdr_rec.OBJECT1_ID1;
1767 l_var_int_strm_name := l_pmnt_strm_hdr_rec.name;
1768 --end bkatraga
1769
1770 --Added by bkatraga for bug 14111538
1771 IF (NVL(l_pmnt_lns_in_hdr_rec.rule_information8,'0') <> '0' OR
1772 NVL(l_pmnt_lns_in_hdr_rec.rule_information6,'0') <> '0') THEN
1773 l_var_int_amount_non_zero := TRUE;
1774 END IF;
1775 --end bkatraga
1776
1777 END IF;
1778
1779 -- Bug 4547537 Begin
1780 IF ( l_pmnt_strm_hdr_rec.stream_type_purpose IN
1781 ( 'RENT', 'LOAN_PAYMENT', 'PRINCIPAL_PAYMENT' ) ) THEN
1782 IF ( TRUNC(NVL(l_pmnt_lns_in_hdr_rec.rule_information5,'-1')) <> '0')
1783 THEN
1784 -- non Level
1785 IF (l_pmnt_lns_in_hdr_rec.rule_information7 IS NOT NULL AND
1786 l_pmnt_lns_in_hdr_rec.rule_information8 IS NOT NULL ) THEN
1787
1788 Okl_Api.set_message(
1789 p_app_name => G_APP_NAME,
1790 p_msg_name => 'OKL_QA_PAYMENT_STUB_NA');
1791 x_return_status := Okl_Api.G_RET_STS_ERROR;
1792 END IF;
1793 END IF;
1794 END IF;
1795 -- Bug 4547537 End
1796
1797 END LOOP;
1798 END LOOP;
1799
1800 --Added by bkatraga for bug 13478101
1801 IF(l_interest_calculation_basis = 'FLOAT') THEN
1802 OPEN get_principal_basis(p_chr_id);
1803 FETCH get_principal_basis INTO l_principal_basis;
1804 CLOSE get_principal_basis;
1805
1806 IF(l_rent_amt_zero = TRUE AND l_principal_basis = 'SCHEDULED') THEN
1807 Okl_Api.set_message(
1808 p_app_name => G_APP_NAME,
1809 p_msg_name => 'OKL_LA_RENT_PAYMENT_ZERO',
1810 p_token1 => 'STRM_TYPE',
1811 p_token1_value => l_rent_strm_name);
1812 x_return_status := Okl_Api.G_RET_STS_ERROR;
1813 END IF;
1814 END IF;
1815
1816 IF (l_var_int_schedule_defined) THEN
1817 IF(l_var_stub_days IS NOT NULL AND l_var_stub_days <> OKL_API.G_MISS_CHAR) THEN
1818 l_pymnt_end_date := l_pymnt_start_date + to_number(l_var_stub_days) - 1;
1819 ELSE
1820 IF(l_frequency = 'M') THEN
1821 l_factor := 1;
1822 ELSIF(l_frequency = 'Q') THEN
1823 l_factor := 3;
1824 ELSIF(l_frequency = 'S') THEN
1825 l_factor := 6;
1826 ELSIF(l_frequency = 'A') THEN
1827 l_factor := 12;
1828 END IF;
1829 l_pymnt_end_date := Okl_Lla_Util_Pvt.calculate_end_date(p_start_date => l_pymnt_start_date,
1830 p_months => l_factor * NVL(l_variable_periods,0),
1831 p_start_day => l_start_day);
1832 END IF;
1833
1834 IF(l_pymnt_end_date > l_contract_end_date) THEN
1835 Okl_Api.set_message(
1836 p_app_name => G_APP_NAME,
1837 p_msg_name => 'OKL_LA_PAYMENT_END_DATE',
1838 p_token1 => 'STRM_TYPE',
1839 p_token1_value => l_var_int_strm_name);
1840 x_return_status := Okl_Api.G_RET_STS_ERROR;
1841 END IF;
1842
1843 --Added by bkatraga for bug 14111538
1844 IF(l_var_int_amount_non_zero) THEN
1845 Okl_Api.set_message(
1846 p_app_name => G_APP_NAME,
1847 p_msg_name => 'OKL_VAR_INT_AMOUNT_ZERO');
1848 x_return_status := Okl_Api.G_RET_STS_ERROR;
1849 END IF;
1850 END IF;
1851 --end bkatraga
1852
1853 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1854 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Check Payment Type:Before first check...x_return_status='||x_return_status);
1855 END IF;
1856 -- Both RENT and PRINCIPAL_PAYMENT not allowed
1857 IF (l_rent_payment_found AND l_principal_payment_found) THEN
1858 Okl_Api.set_message(
1859 p_app_name => G_APP_NAME,
1860 p_msg_name => 'OKL_LA_VAR_RATE_PAYMENT');
1861 x_return_status := Okl_Api.G_RET_STS_ERROR;
1862 END IF;
1863 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1864 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Check Payment Type:Before second check...x_return_status='||x_return_status);
1865 END IF;
1866 -- If payment in advance, check rate delays > print lead days
1867 IF (l_payment_in_advance) THEN
1868 NULL; -- Todo: AKP
1869 IF (l_deal_type = 'LOAN' AND
1870 l_interest_calculation_basis = 'FLOAT' AND
1871 l_revenue_recognition_method IN ('ESTIMATED_AND_BILLED', 'ACTUAL')) THEN
1872 --Modified the message by bkatraga for bug 14111538
1873 Okl_Api.set_message(
1874 p_app_name => G_APP_NAME,
1875 p_msg_name => 'OKL_ADVANCE_PMNT_NOT_ALLOWED',
1876 p_token1 => 'STRM_TYPE',
1877 p_token1_value => l_stream_type_name);
1878 x_return_status := Okl_Api.G_RET_STS_ERROR;
1879 END IF;
1880
1881 -- 4918119: For REAMORT contracts, advance payment is not allowed
1882 -- Disable this QA check: 5114544
1883 IF (l_interest_calculation_basis = 'REAMORT') THEN
1884 IF (l_deal_type IN ('LEASEOP', 'LEASEST', 'LEASEDF') ) THEN
1885 NULL;
1886 ELSE
1887 Okl_Api.set_message(
1888 p_app_name => G_APP_NAME,
1889 p_msg_name => 'OKL_LA_VAR_RATE_ADVANCE',
1890 p_token1 => 'DEAL_TYPE',
1891 p_token1_value => l_deal_type,
1892 p_token2 => 'ICB',
1893 p_token2_value => l_interest_calculation_basis);
1894 x_return_status := Okl_Api.G_RET_STS_ERROR;
1895 END IF;
1896 END IF;
1897 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1898 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Check Payment Type:Before rate_delay_csr...');
1899 END IF;
1900 -- get rate delay (rule group/rule)
1901 OPEN rate_delay_csr(p_chr_id);
1902 FETCH rate_delay_csr INTO l_rate_delay;
1903 CLOSE rate_delay_csr;
1904
1905 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1906 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Check Payment Type:Before print_lead_csr...');
1907 END IF;
1908 -- get cust print lead days
1909 OPEN cust_print_lead_days_csr(p_chr_id);
1910 FETCH cust_print_lead_days_csr INTO l_cust_print_lead_days;
1911 CLOSE cust_print_lead_days_csr;
1912
1913 -- gboomina modified for Bug 6329395 - Start
1914 OPEN c_contract_name(p_chr_id);
1915 FETCH c_contract_name INTO l_contract_number;
1916 CLOSE c_contract_name;
1917 -- gboomina modified for Bug 6329395 - End
1918
1919 -- udhenuko bug#6786775
1920 -- Added an if condition in OKL_QA_DATA_INTEGRITY.check_payment_type to throw the error message
1921 --for contracts having Interest Calculation Method NOT EQUAL TO Fixed and Revenue Recognition Method NOT EQUAL TO
1922 --'STREAMS' for cases where print lead day value used in payment terms is greater than Rate delay.
1923 IF l_interest_calculation_basis <> 'FIXED'
1924 AND l_revenue_recognition_method <> 'STREAMS'
1925 THEN
1926 IF ((l_rate_delay IS NOT NULL AND l_cust_print_lead_days IS NOT NULL) AND
1927 (l_rate_delay <= l_cust_print_lead_days)) THEN
1928 Okl_Api.set_message(
1929 p_app_name => G_APP_NAME,
1930 p_msg_name => 'OKL_LLA_VAR_RATE_RATE_DELAY',
1931 p_token1 => 'CONT_ID',
1932 p_token1_value => l_contract_number);
1933 x_return_status := Okl_Api.G_RET_STS_ERROR;
1934 END IF;
1935 END IF;
1936 END IF;
1937 -- udhenuko End bug#6786775
1938
1939 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1940 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Check Payment Type:Before third check...x_return_status='||x_return_status);
1941 END IF;
1942 -- If Principal payment is defined, check if base_rate defined
1943 IF (l_principal_payment_found) THEN
1944 --print('Yes, Principal payment found: Checking base rate...');
1945 Okl_K_Rate_Params_Pvt.check_base_rate(
1946 p_khr_id => p_chr_id,
1947 x_base_rate_defined => l_base_rate_defined,
1948 x_return_status => l_return_status);
1949
1950 --print('l_return_status=' || l_return_status);
1951 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
1952 x_return_status := l_return_status;
1953 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1954 END IF;
1955
1956 IF NOT(l_base_rate_defined) THEN
1957 -- 4907390
1958 Okl_Api.set_message(Okc_Api.G_APP_NAME, G_REQUIRED_VALUE,
1959 G_COL_NAME_TOKEN, 'Base Rate');
1960 /*OKL_API.set_message(
1961 p_app_name => G_APP_NAME,
1962 p_msg_name => 'OKL_LLA_VAR_RATE_BASE_MISSING',
1963 p_token1 => 'CONT_ID',
1964 p_token1_value => p_chr_id); */
1965 x_return_status := Okl_Api.G_RET_STS_ERROR;
1966 --ELSE
1967 --print('base_rate defined...');
1968 END IF;
1969 END IF;
1970
1971 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1972 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Check Payment Type:Before fourth check...x_return_status='||x_return_status);
1973 END IF;
1974 -- Bug 4674139
1975 -- Check if variable interest schedule is defined for LOAN FLOAT
1976 IF (l_deal_type = 'LOAN' AND
1977 l_interest_calculation_basis = 'FLOAT' ) OR
1978 -- Bug 4742650 (do it for LOAN-REVOLVING also)
1979 (l_deal_type = 'LOAN-REVOLVING' AND
1980 l_interest_calculation_basis = 'FLOAT' ) THEN
1981 IF NOT(l_var_int_schedule_defined) THEN
1982 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1983 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Var Int Schedule Not Defined...');
1984 END IF;
1985 Okl_Api.set_message(
1986 p_app_name => G_APP_NAME,
1987 p_msg_name => 'OKL_LA_VAR_SCHEDULED_ALLOWED');
1988 x_return_status := Okl_Api.G_RET_STS_ERROR;
1989 ELSE
1990 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1991 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Var Int Schedule Defined...');
1992 END IF;
1993 END IF;
1994 ELSE -- Bug 4742650 (Do not allow var int sched for other type of contracts)
1995 IF (l_var_int_schedule_defined) THEN
1996 Okl_Api.set_message(
1997 p_app_name => G_APP_NAME,
1998 p_msg_name => 'OKL_LLA_VAR_RATE_SCHEDULE_NA');
1999 x_return_status := Okl_Api.G_RET_STS_ERROR;
2000 END IF;
2001 END IF;
2002
2003 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2004 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Check Payment Type:Before fifth check...x_return_status='||x_return_status);
2005 END IF;
2006 -- Bug 4886871
2007 -- Check if variable interest schedule is same as loan payment schedule
2008 /*
2009 IF (l_deal_type = 'LOAN' AND
2010 l_interest_calculation_basis = 'FLOAT' AND
2011 l_revenue_recognition_method = 'ACTUAL') THEN
2012 NULL;
2013 print('l_variable_start_date=' || l_variable_start_date);
2014 print('l_rent_start_date=' || l_rent_start_date);
2015 print('l_principal_start_date=' || l_principal_start_date);
2016 print('l_variable_periods=' || l_variable_periods);
2017 print('l_rent_periods=' || l_rent_periods);
2018 print('l_principal_periods=' || l_principal_periods);
2019 IF ((l_rent_start_date = l_variable_start_date AND
2020 l_rent_periods = l_variable_periods ) OR
2021 (l_principal_start_date = l_variable_start_date AND
2022 l_principal_periods = l_variable_periods )) THEN
2023 NULL;
2024 ELSE
2025 OKL_API.set_message(
2026 p_app_name => G_APP_NAME,
2027 p_msg_name => 'OKL_LLA_VAR_RATE_SCHEDULE',
2028 p_token1 => 'CONT_ID',
2029 p_token1_value => p_chr_id);
2030 x_return_status := OKL_API.G_RET_STS_ERROR;
2031 END IF;
2032 END IF;
2033 */
2034
2035 -- Bug 5114815
2036 IF (l_deal_type = 'LOAN' AND
2037 l_interest_calculation_basis = 'FLOAT' ) OR
2038 (l_deal_type = 'LOAN-REVOLVING' AND
2039 l_interest_calculation_basis = 'FLOAT' ) THEN
2040 --Bug# 13146882
2041 -- Moved this to the beginning of this procedure
2042 /*
2043 FOR l_cnt_start_date IN contract_start_date_csr(p_chr_id)
2044 LOOP
2045 l_contract_start_date := l_cnt_start_date.start_date;
2046 END LOOP;
2047 */
2048 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2049 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_contract_start_date=' || l_contract_start_date);
2050 END IF;
2051 IF (l_variable_start_date <> l_contract_start_date) THEN
2052 OKL_API.set_message(
2053 p_app_name => G_APP_NAME,
2054 p_msg_name => 'OKL_LLA_VAR_RATE_SCHEDULE2');
2055 x_return_status := OKL_API.G_RET_STS_ERROR;
2056 END IF;
2057 END IF;
2058
2059 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2060 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Check Payment Type:Before sixth check...x_return_status='||x_return_status);
2061 END IF;
2062 -- Check same payment date for all assets (RENT currently)
2063 -- Commented this check from here and copied from check_variable_rate_old
2064 /*
2065 IF (l_deal_type = 'LOAN' AND
2066 l_interest_calculation_basis = 'REAMORT') THEN
2067
2068 FOR l_pmnt_strm_check_rec IN l_pmnt_strm_check('LALEVL','LASLH','RENT',p_chr_id)
2069 LOOP
2070 l_line_ind := 0;
2071 FOR l_pmnt_lns_in_hdr_rec IN l_pmnt_lns_in_hdr(l_pmnt_strm_check_rec.id ,p_chr_id)
2072 Loop
2073 If ( l_line_ind = 0 ) Then
2074 l_payment_date := FND_DATE.canonical_to_date(l_pmnt_lns_in_hdr_rec.rule_information2);
2075 print('l_payment_date=' || l_payment_date);
2076 l_line_ind := 1;
2077 ELSE
2078 l_payment_date2 := FND_DATE.canonical_to_date(l_pmnt_lns_in_hdr_rec.rule_information2);
2079 print('l_payment_date2=' || l_payment_date2);
2080 IF (l_payment_date <> l_payment_date2) THEN
2081 OKL_API.set_message(
2082 p_app_name => G_APP_NAME,
2083 p_msg_name => 'OKL_LLA_VAR_RATE_PAYMENT_DATE',
2084 p_token1 => 'CONT_ID',
2085 p_token1_value => p_chr_id,
2086 p_token2 => 'PAYMENT_TYPE',
2087 p_token2_value => 'RENT');
2088 x_return_status := OKL_API.G_RET_STS_ERROR;
2089 END IF;
2090 End If;
2091 END Loop;
2092 END LOOP;
2093 END IF;
2094 */
2095
2096 /*
2097 -- Bug 4865431
2098 -------------------------------------------------------------
2099 --Reamort Rent stream processing start for Variable rate Contracts.
2100 -------------------------------------------------------------
2101 IF (l_deal_type = 'LOAN' AND
2102 l_interest_calculation_basis = 'REAMORT') THEN
2103
2104 FOR l_loop_counter IN 1..2
2105 LOOP
2106
2107 IF (l_loop_counter = 1) THEN
2108 l_pmnt_type := 'RENT';
2109 ELSE
2110 l_pmnt_type := 'PRINCIPAL_PAYMENT';
2111 END IF;
2112
2113 ind := 0;
2114 l_global_total_periods := 0;
2115 l_line_total_periods := 0;
2116 --FOR l_pmnt_strm_check_rec IN l_pmnt_strm_check('LALEVL','LASLH','RENT',p_chr_id)
2117 FOR l_pmnt_strm_check_rec IN l_pmnt_strm_check('LALEVL','LASLH',l_pmnt_type,p_chr_id)
2118 LOOP
2119 BEGIN
2120 line_ind := 0;
2121 FOR l_pmnt_lns_in_hdr_rec IN l_pmnt_lns_in_hdr(l_pmnt_strm_check_rec.id ,p_chr_id)
2122 Loop
2123 If ( ind = 0 ) Then
2124 ind := 1;
2125 l_pmnt_lns_in_hdr_rec_comp := l_pmnt_lns_in_hdr_rec;
2126 -- global min start date is start date for first payment line for that SLH
2127 l_global_min_start_date := FND_DATE.canonical_to_date(l_pmnt_lns_in_hdr_rec.rule_information2);
2128 print('l_global_min_start_date=' || l_global_min_start_date);
2129 End If;
2130 If (line_ind = 0) Then
2131 l_min_start_date := FND_DATE.canonical_to_date(l_pmnt_lns_in_hdr_rec.rule_information2);
2132 print('l_min_start_date=' || l_min_start_date);
2133 line_ind := 1;
2134 l_line_total_periods := l_pmnt_lns_in_hdr_rec.rule_information3;
2135 Else
2136 l_line_total_periods := l_line_total_periods + l_pmnt_lns_in_hdr_rec.rule_information3;
2137 End If;
2138 print('l_line_total_periods=' || l_line_total_periods);
2139 If( l_pmnt_lns_in_hdr_rec.rule_information7 IS NULL
2140 AND l_pmnt_lns_in_hdr_rec.rule_information8 IS NULL) Then
2141 If( nvl(l_pmnt_lns_in_hdr_rec.rule_information10,'N') <> 'Y') Then
2142 RAISE l_mismatch_exception;
2143 End If;
2144 If (ind = 0) Then
2145 null;--dont compare two records as we are at first record now.
2146 Else
2147 If ( l_global_min_start_date
2148 <> l_min_start_date
2149 OR l_pmnt_lns_in_hdr_rec_comp.rule_information4
2150 <> l_pmnt_lns_in_hdr_rec.rule_information4
2151 OR l_pmnt_lns_in_hdr_rec_comp.object1_id1
2152 <> l_pmnt_lns_in_hdr_rec.object1_id1
2153 OR l_pmnt_lns_in_hdr_rec_comp.object1_id2
2154 <> l_pmnt_lns_in_hdr_rec.object1_id2 ) Then
2155 x_return_status := OKL_API.G_RET_STS_ERROR;
2156 RAISE l_mismatch_exception;
2157 End If;
2158 End If;
2159 End If;
2160 End Loop;
2161 -- the sum of all SLL periods across all SLH's should match.
2162 If (l_global_total_periods = 0 ) Then
2163 l_global_total_periods := l_line_total_periods;
2164 Elsif(l_global_total_periods <> l_line_total_periods) Then
2165 RAISE l_mismatch_exception;
2166 END IF;
2167 EXCEPTION WHEN l_mismatch_exception Then
2168 x_return_status := OKL_API.G_RET_STS_ERROR;
2169 --message
2170 OKL_API.set_message(
2171 p_app_name => G_APP_NAME,
2172 p_msg_name => 'OKL_QA_VARINT_SLL_MISMATCH');
2173 END;
2174 END LOOP;
2175 IF l_pmnt_lns_in_hdr%ISOPEN THEN
2176 CLOSE l_pmnt_lns_in_hdr;
2177 END IF;
2178 IF l_pmnt_strm_check%ISOPEN THEN
2179 CLOSE l_pmnt_strm_check;
2180 END IF;
2181 END LOOP;
2182 END IF;
2183 -------------------------------------------------------------
2184 --End REAMORT processing for rent streams for variable rate contracts.
2185 -------------------------------------------------------------
2186 */
2187
2188 -- Bug 4865431
2189 --Removed deal type check by bkatraga for bug 13693187
2190 -------------------------------------------------------------
2191 --Reamort Rent stream processing start for Variable rate Contracts.
2192 -------------------------------------------------------------
2193 IF (l_interest_calculation_basis = 'REAMORT') THEN
2194 check_payment_schedule(
2195 x_return_status => l_return_status, -- 4907390
2196 p_chr_id => p_chr_id,
2197 p_stream_purpose_code => 'RENT',
2198 p_message_name => 'OKL_QA_VARINT_SLL_MISMATCH');
2199 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN -- 4907390
2200 x_return_status := l_return_status;
2201 END IF;
2202
2203 --veramach bug 6389295 start
2204 IF (l_revenue_recognition_method <> 'STREAMS') then
2205 --veramach bug 6389295 end
2206 check_payment_schedule(
2207 x_return_status => l_return_status, -- 4907390
2208 p_chr_id => p_chr_id,
2209 p_stream_purpose_code => 'PRINCIPAL_PAYMENT',
2210 p_message_name => 'OKL_QA_VARINT_SLL_MISMATCH');
2211 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN -- 4907390
2212 x_return_status := l_return_status;
2213 END IF;
2214 --veramach bug 6389295 start
2215 END IF;
2216 --veramach bug 6389295 end
2217
2218 END IF;
2219
2220
2221 -- Check same payment date for all assets (PRINCIPAL_PAYMENT currently)
2222 -- FoR LOAN and REAMORT only
2223 -- Also check if principal amount is same as asset capital amount
2224 /*IF (l_deal_type = 'LOAN' AND
2225 l_interest_calculation_basis = 'REAMORT') THEN */
2226
2227 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2228 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Check Payment Type:Before seventh check...x_return_status='||x_return_status);
2229 END IF;
2230 --FOR l_pmnt_strm_check_rec IN l_pmnt_strm_check('LALEVL','LASLH','PRINCIPAL_PAYMENT',p_chr_id)
2231 FOR l_pmnt_strm_check_rec IN l_pmnt_strm_check('LALEVL','LASLH','PRINCIPAL_PAYMENT', p_chr_id)
2232 LOOP
2233 l_line_ind := 0;
2234 l_tot_principal_payment := 0;
2235 l_curr_cle_id := l_pmnt_strm_check_rec.cle_id;
2236 FOR l_pmnt_lns_in_hdr_rec IN l_pmnt_lns_in_hdr(l_pmnt_strm_check_rec.id ,p_chr_id)
2237 LOOP
2238 -- Check same payment date for LOAN REAMORT only
2239 /*
2240 IF (l_deal_type = 'LOAN' AND
2241 l_interest_calculation_basis = 'REAMORT') THEN
2242 If ( l_line_ind = 0 ) Then
2243 l_payment_date := FND_DATE.canonical_to_date(l_pmnt_lns_in_hdr_rec.rule_information2);
2244 l_line_ind := 1;
2245 ELSE
2246 l_payment_date2 := FND_DATE.canonical_to_date(l_pmnt_lns_in_hdr_rec.rule_information2);
2247 IF (l_payment_date <> l_payment_date2) THEN
2248 OKL_API.set_message(
2249 p_app_name => G_APP_NAME,
2250 p_msg_name => 'OKL_LLA_VAR_RATE_PAYMENT_DATE',
2251 p_token1 => 'CONT_ID',
2252 p_token1_value => p_chr_id,
2253 p_token2 => 'PAYMENT_TYPE',
2254 p_token2_value => 'PRINCIPAL_PAYMENT');
2255 x_return_status := OKL_API.G_RET_STS_ERROR;
2256 END IF;
2257 END IF;
2258 END IF; */
2259
2260 -- Now get the running principal amount
2261
2262 l_tot_principal_payment := l_tot_principal_payment +
2263 NVL(l_pmnt_lns_in_hdr_rec.rule_information3,0) * NVL(l_pmnt_lns_in_hdr_rec.rule_information6, 0) +
2264 NVL(l_pmnt_lns_in_hdr_rec.rule_information8, 0);
2265 --print('Inside: rule_information3=' || l_pmnt_lns_in_hdr_rec.rule_information3);
2266 --print('Inside: rule_information6=' || l_pmnt_lns_in_hdr_rec.rule_information6);
2267 --print('Inside: rule_information8=' || l_pmnt_lns_in_hdr_rec.rule_information8);
2268 --print('Inside: l_tot_principal_payment=' || l_tot_principal_payment);
2269
2270 END LOOP;
2271
2272 FOR r IN oec_csr(l_curr_cle_id)
2273 LOOP
2274 l_capital_amount := r.capital_amount;
2275 l_asset_number := r.asset_number;
2276 l_ste_code := r.ste_code; -- 5264170
2277 -- Fix for bug 7131756
2278 l_oec_amount := r.oec;
2279 l_capital_reduction := r.capital_reduction;
2280 l_capital_reduction_percent := r.capital_reduction_percent;
2281 l_capitalize_down_payment_yn := r.capitalize_down_payment_yn;
2282 END LOOP;
2283
2284 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2285 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_asset_number=' || l_asset_number || ' l_capital_amount=' || l_capital_amount);
2286 END IF;
2287 -- 5264170
2288 IF l_ste_code NOT IN ('CANCELLED','TERMINATED','HOLD','EXPIRED') THEN
2289 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2290 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tot_principal_payment=' || l_tot_principal_payment);
2291 END IF;
2292 -- Now get total unscheduled principal payment for this line, if any
2293 -- 4887014
2294 l_tot_unsched_prin_payment :=
2295 tot_unsched_prin_payment(l_return_status, -- 4907390
2296 p_chr_id, l_curr_cle_id);
2297 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2298 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_tot_unsched_prin_payment=' || l_tot_unsched_prin_payment);
2299 END IF;
2300
2301 -- gboomina Bug 6401848 - Start
2302 -- 4898747
2303 Okl_Subsidy_Process_Pvt.get_asset_subsidy_amount(
2304 p_api_version => 1.0,
2305 p_init_msg_list => Okl_Api.G_FALSE,
2306 x_return_status => l_return_status,
2307 x_msg_count => x_msg_count,
2308 x_msg_data => x_msg_data,
2309 p_asset_cle_id => l_curr_cle_id,
2310 p_accounting_method => 'NET',
2311 x_subsidy_amount => l_net_subsidy_amount);
2312
2313 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2314 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_net_subsidy_amount=' || l_net_subsidy_amount);
2315 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_return_status=' || l_return_status);
2316 END IF;
2317 -- Fix for Bug 7131756
2318 l_non_cap_down_payment_amount := 0;
2319 IF (l_capitalize_down_payment_yn = 'N') THEN
2320 IF (l_capital_reduction IS NOT NULL) THEN
2321 l_non_cap_down_payment_amount := l_capital_reduction;
2322 ELSIF (l_capital_reduction_percent IS NOT NULL) THEN
2323 l_non_cap_down_payment_amount := l_capital_reduction_percent/100*l_oec_amount;
2324 END IF;
2325 END IF;
2326 /* IF (ABS(l_capital_amount - l_net_subsidy_amount - -- 4898747
2327 (l_tot_principal_payment+l_tot_unsched_prin_payment)) > 0.01) OR
2328 (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN -- 4907390 */
2329 IF (ABS(l_capital_amount - l_non_cap_down_payment_amount - -- 7131756
2330 (l_tot_principal_payment+l_tot_unsched_prin_payment)) > 0.01) THEN
2331 Okl_Api.set_message(
2332 p_app_name => G_APP_NAME,
2333 p_msg_name => 'OKL_QA_PRIN_MISMATCH');
2334 x_return_status := Okl_Api.G_RET_STS_ERROR;
2335 END IF;
2336 -- gboomina Bug 6401848 - End
2337 END IF;
2338 l_tot_principal_payment := 0;
2339
2340 END LOOP;
2341
2342 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2343 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before get_pricing_engine...x_return_status='||x_return_status);
2344 END IF;
2345 Okl_Streams_Util.get_pricing_engine(p_khr_id => p_chr_id,
2346 x_pricing_engine => l_pricing_engine,
2347 x_return_status => l_return_status);
2348 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
2349 x_return_status := l_return_status;
2350 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2351 END IF;
2352
2353 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2354 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Check Payment Type:Before eighth check...x_return_status='||x_return_status);
2355 END IF;
2356 IF (l_deal_type IN ('LEASEOP', 'LEASEST', 'LEASEDF') ) AND
2357 (l_interest_Calculation_basis IN ('FIXED', 'REAMORT', 'FLOAT_FACTORS'))
2358 THEN
2359 IF NOT(l_rent_payment_found) THEN
2360 Okl_Api.set_message(
2361 p_app_name => G_APP_NAME,
2362 p_msg_name => 'OKL_LLA_VAR_RATE_RENT_MISSING');
2363 x_return_status := Okl_Api.G_RET_STS_ERROR;
2364 --return;
2365 ELSE -- RENT defined
2366 -- Bug 4748524
2367 IF (l_interest_calculation_basis = 'FLOAT_FACTORS') AND
2368 (l_rent_payment_in_advance) THEN
2369 Okl_Api.set_message(
2370 p_app_name => G_APP_NAME,
2371 p_msg_name => 'OKL_LLA_VAR_RATE_ARREARS_1');
2372 x_return_status := Okl_Api.G_RET_STS_ERROR;
2373 END IF;
2374 END IF;
2375 IF (l_principal_payment_found) THEN
2376 Okl_Api.set_message(
2377 p_app_name => G_APP_NAME,
2378 p_msg_name => 'OKL_LLA_VAR_RATE_PRIN_ERROR');
2379 x_return_status := Okl_Api.G_RET_STS_ERROR;
2380 --return;
2381 END IF;
2382 END IF;
2383
2384 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2385 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Check Payment Type:Before ninth check...x_return_status='||x_return_status);
2386 END IF;
2387 IF (((l_deal_type = 'LOAN') AND
2388 (l_interest_Calculation_basis IN
2389 ('FIXED', 'FLOAT', 'CATCHUP/CLEANUP'))) OR
2390 ((l_deal_type = 'LOAN') AND
2391 (l_interest_Calculation_basis = 'REAMORT')))
2392 THEN
2393 IF NOT(l_rent_payment_found) THEN
2394 IF (l_principal_payment_found) THEN
2395 IF (l_pricing_engine <> 'EXTERNAL') THEN
2396 Okl_Api.set_message(
2397 p_app_name => G_APP_NAME,
2398 --p_msg_name => 'OKL_LLA_VAR_RATE_PRIN_MISSING');
2399 p_msg_name => 'OKL_LLA_VAR_RATE_PRIN_ISG');
2400 x_return_status := Okl_Api.G_RET_STS_ERROR;
2401 --return;
2402 END IF;
2403 ELSE
2404 Okl_Api.set_message(
2405 p_app_name => G_APP_NAME,
2406 p_msg_name => 'OKL_LLA_VAR_RATE_RENT_MISSING');
2407 x_return_status := Okl_Api.G_RET_STS_ERROR;
2408 --return;
2409 END IF;
2410 END IF;
2411 /*IF (l_principal_payment_found) THEN
2412 IF (l_pricing_engine <> 'EXTERNAL') THEN
2413 OKL_API.set_message(
2414 p_app_name => G_APP_NAME,
2415 --p_msg_name => 'OKL_LLA_VAR_RATE_PRIN_MISSING');
2416 p_msg_name => 'OKL_LLA_VAR_RATE_PRIN_ISG');
2417 x_return_status := OKL_API.G_RET_STS_ERROR;
2418 return;
2419 END IF;*/
2420 /*ELSE
2421 IF (l_pricing_engine = 'INTERNAL') THEN
2422 OKL_API.set_message(
2423 p_app_name => G_APP_NAME,
2424 p_msg_name => 'OKL_LLA_VAR_RATE_PRIN_ISG');
2425 x_return_status := OKL_API.G_RET_STS_ERROR;
2426 return;
2427 END IF;*/
2428 /*END IF;*/
2429 END IF;
2430
2431 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2432 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Check Payment Type:Before tenth check...x_return_status='||x_return_status);
2433 END IF;
2434 IF ((l_deal_type = 'LOAN-REVONVING' ) AND
2435 (l_interest_Calculation_basis = 'FLOAT'))
2436 THEN
2437 IF (l_rent_payment_found) THEN
2438 Okl_Api.set_message(
2439 p_app_name => G_APP_NAME,
2440 p_msg_name => 'OKL_LLA_VAR_RATE_RENT_ERROR');
2441 x_return_status := Okl_Api.G_RET_STS_ERROR;
2442 --return;
2443 END IF;
2444 IF (l_principal_payment_found) THEN
2445 Okl_Api.set_message(
2446 p_app_name => G_APP_NAME,
2447 p_msg_name => 'OKL_LLA_VAR_RATE_PRIN_ERROR');
2448 x_return_status := Okl_Api.G_RET_STS_ERROR;
2449 --RETURN;
2450 END IF;
2451 END IF;
2452
2453 --Bug# 13146882
2454 -- Check that Accounting Templates are setup correctly for Rebook transaction type
2455 -- for Reamort contracts
2456 IF l_interest_Calculation_basis = 'REAMORT' THEN
2457 OPEN l_rbk_csr(p_chr_id);
2458 FETCH l_rbk_csr INTO l_rbk_rec;
2459 CLOSE l_rbk_csr;
2460
2461 --Added l_return_status by bkatraga for bug 13693187
2462 OKL_VARIABLE_INT_UTIL_PVT.check_accounting_setups(
2463 p_chr_id => p_chr_id,
2464 p_transaction_type => 'Rebook',
2465 p_transaction_date => NVL(l_rbk_rec.date_transaction_occurred,l_contract_start_date),
2466 x_return_status => l_return_status);
2467 --Added by bkatraga for bug 13693187
2468 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
2469 x_return_status := l_return_status;
2470 END IF;
2471 END IF;
2472
2473 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2474 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before exitting: x_return_status=' || x_return_status);
2475 END IF;
2476
2477 --Bug# 13002041: Moved this to check_variable_rate procedure
2478 /* IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
2479 Okl_Api.set_message(
2480 p_app_name => G_APP_NAME,
2481 p_msg_name => G_QA_SUCCESS);
2482 END IF; */
2483
2484
2485 EXCEPTION
2486
2487 WHEN G_EXCEPTION_HALT_VALIDATION THEN
2488 -- no processing necessary; validation can continue with next column
2489 IF l_rl_csr1%ISOPEN THEN
2490 CLOSE l_rl_csr1;
2491 END IF;
2492 WHEN OTHERS THEN
2493 -- store SQL error message on message stack
2494 Okl_Api.SET_MESSAGE(
2495 p_app_name => G_APP_NAME,
2496 p_msg_name => G_UNEXPECTED_ERROR,
2497 p_token1 => G_SQLCODE_TOKEN,
2498 p_token1_value => SQLCODE,
2499 p_token2 => G_SQLERRM_TOKEN,
2500 p_token2_value => SQLERRM);
2501 -- notify caller of an error as UNEXPETED error
2502 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
2503 -- verify that cursor was closed
2504 IF l_lne_csr%ISOPEN THEN
2505 CLOSE l_lne_csr;
2506 END IF;
2507 IF l_hdr_csr%ISOPEN THEN
2508 CLOSE l_hdr_csr;
2509 END IF;
2510 IF l_txl_csr%ISOPEN THEN
2511 CLOSE l_txl_csr;
2512 END IF;
2513
2514 END check_payment_type;
2515
2516 -- Start of comments
2517 --
2518 -- Procedure Name : check_variable_rate
2519 -- Description :
2520 -- Business Rules :
2521 -- Parameters :
2522 -- Version : 1.0
2523 -- End of comments
2524
2525 PROCEDURE check_variable_rate(
2526 x_return_status OUT NOCOPY VARCHAR2,
2527 p_chr_id IN NUMBER
2528 ) IS
2529 x_msg_count NUMBER;
2530 x_msg_data VARCHAR2(2000);
2531 l_return_status VARCHAR2(1);
2532
2533 BEGIN
2534 IF (G_DEBUG_ENABLED = 'Y') THEN
2535 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
2536 END IF;
2537 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
2538
2539 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2540 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before calling validate_k_rate_params...');
2541 END IF;
2542 Okl_K_Rate_Params_Pvt.validate_k_rate_params(
2543 p_api_version => 1,
2544 p_init_msg_list => Okl_Api.G_FALSE,
2545 x_return_status => x_return_status,
2546 x_msg_count => x_msg_count,
2547 x_msg_data => x_msg_data,
2548 p_khr_id => p_chr_id,
2549 p_validate_flag => 'F');
2550
2551 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2552 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After validate_k_rate_params x_return_status=' || x_return_status);
2553 END IF;
2554 IF (x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
2555 --RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2556 --RAISE OKL_API.G_EXCEPTION_HALT_VALIDATION;
2557 x_return_status := Okl_Api.G_RET_STS_ERROR;
2558 END IF;
2559
2560 l_return_status := Okl_Api.G_RET_STS_SUCCESS;
2561 check_payment_type(
2562 x_return_status => l_return_status,
2563 p_chr_id => p_chr_id);
2564 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2565 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After check_payment_type l_return_status=' || l_return_status);
2566 END IF;
2567
2568 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
2569 --RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2570 RAISE G_EXCEPTION_HALT_VALIDATION;
2571 END IF;
2572
2573 --Bug# 13002041: Set success message only when all variable rate validations are done successfully
2574 IF (x_return_status = Okl_Api.G_RET_STS_SUCCESS AND l_return_status = Okl_Api.G_RET_STS_SUCCESS) THEN
2575 Okl_Api.set_message(
2576 p_app_name => G_APP_NAME,
2577 p_msg_name => G_QA_SUCCESS);
2578 END IF;
2579
2580 EXCEPTION
2581
2582 WHEN G_EXCEPTION_HALT_VALIDATION THEN
2583 NULL;
2584 x_return_status := Okl_Api.G_RET_STS_ERROR;
2585 -- Close cursors if still open
2586 WHEN OTHERS THEN
2587 -- store SQL error message on message stack
2588 Okl_Api.SET_MESSAGE(
2589 p_app_name => G_APP_NAME,
2590 p_msg_name => G_UNEXPECTED_ERROR,
2591 p_token1 => G_SQLCODE_TOKEN,
2592 p_token1_value => SQLCODE,
2593 p_token2 => G_SQLERRM_TOKEN,
2594 p_token2_value => SQLERRM);
2595 -- notify caller of an error as UNEXPETED error
2596 --x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2597 x_return_status := Okl_Api.G_RET_STS_ERROR;
2598 -- verify that cursor was closed
2599
2600 END check_variable_rate;
2601
2602 /* -- AKP: Commented out for OKL.H drop0. */
2603
2604 -- Start of comments
2605 --
2606 -- Procedure Name : check_variable_rate_old
2607 -- Description :
2608 -- Business Rules :
2609 -- Parameters :
2610 -- Version : 1.0
2611 -- End of comments
2612
2613 PROCEDURE check_variable_rate_old(
2614 x_return_status OUT NOCOPY VARCHAR2,
2615 p_chr_id IN NUMBER
2616 ) IS
2617
2618 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
2619
2620 l_hdr_rec l_hdr_csr%ROWTYPE;
2621 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
2622 index_rec index_csr%ROWTYPE;
2623 index_date DATE;
2624 index_name VARCHAR2(256);
2625 var_meth VARCHAR2(256);
2626 calc_meth VARCHAR2(256);
2627 l_deal_type VARCHAR2(256);
2628
2629 --Bug#3931587
2630 CURSOR l_pmnt_strm_check(rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
2631 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
2632 --pmnt_strm_name OKL_STRMTYP_SOURCE_V.NAME%TYPE,
2633 pmnt_strm_purpose OKL_STRM_TYPE_B.STREAM_TYPE_PURPOSE%TYPE,
2634 chrId NUMBER) IS
2635 SELECT crg.cle_id,
2636 crl.id,
2637 crl.object1_id1,
2638 crl.RULE_INFORMATION1,
2639 crl.RULE_INFORMATION2,
2640 crl.RULE_INFORMATION3,
2641 crl.RULE_INFORMATION4,
2642 crl.RULE_INFORMATION5,
2643 crl.RULE_INFORMATION6,
2644 crl.RULE_INFORMATION10,
2645 crl.RULE_INFORMATION11
2646 FROM OKC_RULE_GROUPS_B crg,
2647 OKC_RULES_B crl,
2648 OKL_STRM_TYPE_B stty
2649 WHERE stty.id = crl.object1_id1
2650 --and stty.code = pmnt_strm_name
2651 AND stty.stream_type_purpose = pmnt_strm_purpose
2652 AND crl.rgp_id = crg.id
2653 AND crg.RGD_CODE = rgcode
2654 AND crl.RULE_INFORMATION_CATEGORY = rlcat
2655 AND crg.dnz_chr_id = chrId;
2656 l_pmnt_strm_check_rec l_pmnt_strm_check%ROWTYPE;
2657 CURSOR l_pmnt_lns_in_hdr(p_id OKC_RULES_B.ID%TYPE, chrId NUMBER) IS
2658 SELECT
2659 crl2.object1_id1,
2660 crl2.object1_id2,
2661 crl2.rule_information2,
2662 NVL(crl2.rule_information3,0) rule_information3,
2663 crl2.rule_information4,
2664 crl2.rule_information5,
2665 crl2.rule_information6,
2666 crl2.rule_information7,
2667 crl2.rule_information8,
2668 crl2.rule_information10
2669 FROM OKC_RULES_B crl1, OKC_RULES_B crl2
2670 WHERE crl1.id = crl2.object2_id1
2671 AND crl1.id = p_id
2672 AND crl2.RULE_INFORMATION_CATEGORY = 'LASLL'
2673 AND crl1.RULE_INFORMATION_CATEGORY = 'LASLH'
2674 AND crl1.dnz_chr_id = chrId
2675 AND crl2.dnz_chr_id = chrId
2676 ORDER BY crl2.rule_information2 ASC;
2677
2678 l_pmnt_lns_in_hdr_rec l_pmnt_lns_in_hdr%ROWTYPE;
2679 -- this record is required to compare the different records in cursor loop
2680 l_pmnt_lns_in_hdr_rec_comp l_pmnt_lns_in_hdr%ROWTYPE;
2681 variable_int_yn VARCHAR2(256);
2682 ind NUMBER;
2683 l_no_pmnt_lns_found NUMBER;
2684 line_ind NUMBER;
2685 l_global_min_start_date DATE;
2686 l_min_start_date DATE;
2687 l_global_total_periods NUMBER;
2688 l_line_total_periods NUMBER;
2689 l_mismatch_exception EXCEPTION;
2690 l_variable_int_yn BOOLEAN;
2691 l_var_rate_reamort_exception EXCEPTION;
2692 l_invalid_combination EXCEPTION;
2693 l_loan_rev_var_rate EXCEPTION;
2694 l_process_formula_exception EXCEPTION;
2695
2696 --Bug#3877032
2697 CURSOR l_hdr_csr1(chrid OKL_K_HEADERS.KHR_ID%TYPE) IS
2698 SELECT CHR.SCS_CODE,
2699 CHR.START_DATE,
2700 CHR.END_DATE,
2701 CHR.DATE_SIGNED,
2702 CHR.CURRENCY_CODE,
2703 CHR.TEMPLATE_YN,
2704 CHR.contract_number,
2705 khr.accepted_date,
2706 khr.syndicatable_yn,
2707 khr.DEAL_TYPE,
2708 khr.term_duration term,
2709 NVL(pdt.reporting_pdt_id, -1) report_pdt_id
2710 FROM OKC_K_HEADERS_B CHR,
2711 OKL_K_HEADERS khr,
2712 OKL_PRODUCTS_V pdt
2713 WHERE CHR.id = chrid
2714 AND CHR.id = khr.id
2715 --AND khr.pdt_id = pdt.id(+);
2716 AND khr.pdt_id = pdt.id;
2717
2718 l_hdr_rec1 l_hdr_csr1%ROWTYPE;
2719 lx_return_status VARCHAR2(1);
2720
2721 PROCEDURE l_formula_processing(x_return_status OUT NOCOPY VARCHAR2,
2722 p_chr_id IN OKC_K_HEADERS_B.ID%TYPE) IS
2723 BEGIN
2724 -- initialize return status
2725 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
2726 ind := 0;
2727 --Bug#3931587
2728 --FOR l_pmnt_strm_check_rec IN l_pmnt_strm_check('LALEVL','LASLH','VARIABLE INTEREST SCHEDULE',p_chr_id)
2729 --FOR l_pmnt_strm_check_rec IN l_pmnt_strm_check('LALEVL','LASLH','VARIABLE_INTEREST',p_chr_id)
2730 FOR l_pmnt_strm_check_rec IN l_pmnt_strm_check('LALEVL','LASLH','VARIABLE_INTEREST_SCHEDULE',p_chr_id)
2731 LOOP
2732 ind := ind + 1;
2733 IF (l_pmnt_strm_check_rec.cle_id IS NOT NULL) THEN
2734 x_return_status := Okl_Api.G_RET_STS_ERROR;
2735 --message
2736 Okl_Api.set_message(
2737 p_app_name => G_APP_NAME,
2738 p_msg_name => 'OKL_QA_VARINT_LINE_LEVEL');
2739 END IF;
2740 l_no_pmnt_lns_found := 0;
2741 FOR l_pmnt_lns_in_hdr_rec IN l_pmnt_lns_in_hdr(l_pmnt_strm_check_rec.id, p_chr_id)
2742 LOOP
2743 l_no_pmnt_lns_found := l_no_pmnt_lns_found + 1 ;
2744 EXIT WHEN l_pmnt_lns_in_hdr%NOTFOUND;
2745 IF ( l_pmnt_lns_in_hdr_rec.rule_information6 <> 0 ) THEN
2746 x_return_status := Okl_Api.G_RET_STS_ERROR;
2747 --message
2748 Okl_Api.set_message(
2749 p_app_name => G_APP_NAME,
2750 p_msg_name => 'OKL_QA_VARINT_SLL_AMOUNT');
2751 END IF;
2752 IF ( ( l_hdr_rec.deal_type = 'LOAN' OR l_hdr_rec.deal_type = 'LOAN-REVOLVING')
2753 AND
2754 ( NVL(l_pmnt_lns_in_hdr_rec.rule_information10,'N') = 'N' ) ) THEN
2755 x_return_status := Okl_Api.G_RET_STS_ERROR;
2756 --message
2757 Okl_Api.set_message(
2758 p_app_name => G_APP_NAME,
2759 p_msg_name => 'OKL_QA_VARINT_ADV');
2760 END IF;
2761 END LOOP;
2762 IF(l_no_pmnt_lns_found = 0) THEN
2763 x_return_status := Okl_Api.G_RET_STS_ERROR;
2764 --message
2765 Okl_Api.set_message(
2766 p_app_name => G_APP_NAME,
2767 p_msg_name => 'OKL_QA_VARINT_NO_SLL');
2768 END IF;
2769 END LOOP;
2770 IF (ind = 0) THEN
2771 x_return_status := Okl_Api.G_RET_STS_ERROR;
2772 --message
2773 Okl_Api.set_message(
2774 p_app_name => G_APP_NAME,
2775 p_msg_name => 'OKL_QA_VARINT_NOT_DEFINED');
2776 END IF;
2777
2778 --IF x_return_status = OKL_API.G_RET_STS_SUCCESS THEN
2779 -- OKL_API.set_message(
2780 -- p_app_name => G_APP_NAME,
2781 -- p_msg_name => G_QA_SUCCESS);
2782 --END IF;
2783
2784 IF l_pmnt_lns_in_hdr%ISOPEN THEN
2785 CLOSE l_pmnt_lns_in_hdr;
2786 END IF;
2787 IF l_pmnt_strm_check%ISOPEN THEN
2788 CLOSE l_pmnt_strm_check;
2789 END IF;
2790
2791 EXCEPTION WHEN OTHERS THEN
2792 IF l_pmnt_lns_in_hdr%ISOPEN THEN
2793 CLOSE l_pmnt_lns_in_hdr;
2794 END IF;
2795 IF l_pmnt_strm_check%ISOPEN THEN
2796 CLOSE l_pmnt_strm_check;
2797 END IF;
2798 END l_formula_processing;
2799
2800 BEGIN
2801
2802 -- initialize return status
2803 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
2804
2805 OPEN l_hdr_csr( p_chr_id );
2806 FETCH l_hdr_csr INTO l_hdr_rec;
2807 CLOSE l_hdr_csr;
2808
2809 OPEN l_hdrrl_csr( 'LAIIND', 'LAINTP', p_chr_id );
2810 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
2811 -- boolean variable to check if interest rate rule exists and if variable rate is Y
2812 l_variable_int_yn := l_hdrrl_csr%FOUND AND (l_hdrrl_rec.rule_information1 = 'Y');
2813 l_deal_type := l_hdr_rec.deal_type;
2814 CLOSE l_hdrrl_csr;
2815
2816 OPEN l_hdrrl_csr( 'LAIIND', 'LAIVAR', p_chr_id );
2817 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
2818 IF (l_variable_int_yn) THEN -- dedey
2819 IF ( l_hdrrl_csr%NOTFOUND ) OR
2820 ( l_hdrrl_rec.rule_information1 IS NULL ) OR
2821 ( l_hdrrl_rec.rule_information2 IS NULL ) THEN
2822 Okl_Api.set_message(
2823 p_app_name => G_APP_NAME,
2824 p_msg_name => 'OKL_QA_NO_VARMETH');
2825 x_return_status := Okl_Api.G_RET_STS_ERROR;
2826 END IF;
2827 END IF;
2828 CLOSE l_hdrrl_csr;
2829 var_meth := l_hdrrl_rec.rule_information1;
2830
2831 OPEN l_hdrrl_csr( 'LAIIND', 'LAICLC', p_chr_id );
2832 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
2833 CLOSE l_hdrrl_csr;
2834 calc_meth := l_hdrrl_rec.rule_information5;
2835
2836 -------------------------------------------------------------
2837 --Bug#4018298
2838 --Start variable interest processing based on Product.
2839 -------------------------------------------------------------
2840 BEGIN
2841 IF (l_deal_type = 'LOAN') THEN
2842 IF (l_variable_int_yn ) THEN
2843 IF (var_meth = 'FLOAT' AND calc_meth = 'FORMULA') THEN
2844 l_formula_processing(x_return_status => lx_return_status, p_chr_id => p_chr_id) ;
2845 IF (lx_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
2846 x_return_status := lx_return_status;
2847 END IF;
2848 ELSIF (var_meth = 'FIXEDADJUST' AND calc_meth = 'REAMORT') THEN
2849 -- variable interest schedule payments not allowed for reamort.
2850 RAISE l_var_rate_reamort_exception;
2851 ELSE
2852 RAISE l_invalid_combination;
2853 END IF;
2854 ELSIF (NOT l_variable_int_yn ) THEN
2855 --return success
2856 Okl_Api.set_message(
2857 p_app_name => G_APP_NAME,
2858 p_msg_name => G_QA_SUCCESS);
2859 RETURN;
2860 END IF;
2861 ELSIF(l_deal_type = 'LOAN-REVOLVING') THEN
2862 IF (l_variable_int_yn) THEN
2863 IF (var_meth = 'FLOAT' AND calc_meth = 'FORMULA') THEN
2864 l_formula_processing(x_return_status => lx_return_status, p_chr_id => p_chr_id) ;
2865 IF (lx_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
2866 x_return_status := lx_return_status;
2867 END IF;
2868 ELSE
2869 RAISE l_invalid_combination;
2870 END IF;
2871 ELSIF (NOT l_variable_int_yn ) THEN
2872 RAISE l_loan_rev_var_rate;
2873 END IF;
2874 ELSE -- operating, direct finance, sales type leases
2875 IF (l_variable_int_yn ) THEN
2876 IF (var_meth = 'FIXEDADJUST' AND calc_meth = 'REAMORT') THEN
2877 -- variable interest schedule payments not allowed for reamort.
2878 RAISE l_var_rate_reamort_exception;
2879 ELSE
2880 RAISE l_invalid_combination;
2881 END IF;
2882 ELSIF (NOT l_variable_int_yn ) THEN
2883 --return success
2884 Okl_Api.set_message(
2885 p_app_name => G_APP_NAME,
2886 p_msg_name => G_QA_SUCCESS);
2887 RETURN;
2888 END IF;
2889 END IF;
2890 -----------------------------------------------
2891 EXCEPTION
2892 -----------------------------------------------
2893 WHEN l_invalid_combination THEN
2894 x_return_status := Okl_Api.G_RET_STS_ERROR;
2895 Okl_Api.set_message(
2896 p_app_name => G_APP_NAME,
2897 p_msg_name => 'OKL_QA_VARIABLE_INV_COMB',
2898 p_token1 => 'VAR_METHOD',
2899 p_token1_value => var_meth,
2900 p_token2 => 'CALC_METHOD',
2901 p_token2_value => calc_meth);
2902 WHEN l_loan_rev_var_rate THEN
2903 x_return_status := Okl_Api.G_RET_STS_ERROR;
2904 Okl_Api.set_message(
2905 p_app_name => G_APP_NAME,
2906 p_msg_name => 'OKL_QA_LV_VARINT');
2907 WHEN l_var_rate_reamort_exception THEN
2908 --Bug#3365616
2909 --Bug#3554026 checking for scs_code instead of deal_type
2910 IF (l_hdr_rec.scs_code = 'LEASE') THEN
2911 --Bug#3931587
2912 --OPEN l_pmnt_strm_check('LALEVL','LASLH','VARIABLE INTEREST SCHEDULE',p_chr_id);
2913 --OPEN l_pmnt_strm_check('LALEVL','LASLH','VARIABLE_INTEREST',p_chr_id);
2914 OPEN l_pmnt_strm_check('LALEVL','LASLH','VARIABLE_INTEREST_SCHEDULE',p_chr_id);
2915 FETCH l_pmnt_strm_check INTO l_pmnt_strm_check_rec;
2916 IF( l_pmnt_strm_check%FOUND) THEN
2917 Okl_Api.set_message(
2918 p_app_name => G_APP_NAME,
2919 p_msg_name => 'OKL_QA_LN_VARINT_REAMORT');
2920 x_return_status := Okl_Api.G_RET_STS_ERROR;
2921 END IF;
2922 CLOSE l_pmnt_strm_check;
2923 END IF;
2924 END;
2925 -------------------------------------------------------------
2926 --End variable interest processing based on Product.
2927 -------------------------------------------------------------
2928
2929 IF l_pmnt_lns_in_hdr%ISOPEN THEN
2930 CLOSE l_pmnt_lns_in_hdr;
2931 END IF;
2932 IF l_pmnt_strm_check%ISOPEN THEN
2933 CLOSE l_pmnt_strm_check;
2934 END IF;
2935
2936 -------------------------------------------------------------
2937 --Reamort Rent stream processing start for Variable rate Contracts.
2938 -------------------------------------------------------------
2939 IF (l_variable_int_yn) THEN
2940 IF ( calc_meth = 'REAMORT' ) THEN
2941
2942 /*
2943 *--Bug#3369032
2944 *If (l_hdr_rec.deal_type = 'LOAN-REVOLVING') Then
2945 * OKL_API.set_message(
2946 * p_app_name => G_APP_NAME,
2947 * p_msg_name => 'OKL_QA_LN_REV_REAMORT');
2948 * x_return_status := OKL_API.G_RET_STS_ERROR;
2949 *End If;
2950 */
2951
2952 ind := 0;
2953 l_global_total_periods := 0;
2954 l_line_total_periods := 0;
2955 FOR l_pmnt_strm_check_rec IN l_pmnt_strm_check('LALEVL','LASLH','RENT',p_chr_id)
2956 LOOP
2957 BEGIN
2958 line_ind := 0;
2959 FOR l_pmnt_lns_in_hdr_rec IN l_pmnt_lns_in_hdr(l_pmnt_strm_check_rec.id ,p_chr_id)
2960 LOOP
2961 IF ( ind = 0 ) THEN
2962 ind := 1;
2963 l_pmnt_lns_in_hdr_rec_comp := l_pmnt_lns_in_hdr_rec;
2964 -- global min start date is start date for first payment line for that SLH
2965 l_global_min_start_date := Fnd_Date.canonical_to_date(l_pmnt_lns_in_hdr_rec.rule_information2);
2966 END IF;
2967 IF (line_ind = 0) THEN
2968 l_min_start_date := Fnd_Date.canonical_to_date(l_pmnt_lns_in_hdr_rec.rule_information2);
2969 line_ind := 1;
2970 l_line_total_periods := l_pmnt_lns_in_hdr_rec.rule_information3;
2971 ELSE
2972 l_line_total_periods := l_line_total_periods + l_pmnt_lns_in_hdr_rec.rule_information3;
2973 END IF;
2974 IF( l_pmnt_lns_in_hdr_rec.rule_information7 IS NULL
2975 AND l_pmnt_lns_in_hdr_rec.rule_information8 IS NULL) THEN
2976 IF( NVL(l_pmnt_lns_in_hdr_rec.rule_information10,'N') <> 'Y') THEN
2977 RAISE l_mismatch_exception;
2978 END IF;
2979 IF (ind = 0) THEN
2980 NULL;--dont compare two records as we are at first record now.
2981 ELSE
2982 IF ( l_global_min_start_date
2983 <> l_min_start_date
2984 OR l_pmnt_lns_in_hdr_rec_comp.rule_information4
2985 <> l_pmnt_lns_in_hdr_rec.rule_information4
2986 OR l_pmnt_lns_in_hdr_rec_comp.object1_id1
2987 <> l_pmnt_lns_in_hdr_rec.object1_id1
2988 OR l_pmnt_lns_in_hdr_rec_comp.object1_id2
2989 <> l_pmnt_lns_in_hdr_rec.object1_id2 ) THEN
2990 x_return_status := Okl_Api.G_RET_STS_ERROR;
2991 RAISE l_mismatch_exception;
2992 END IF;
2993 END IF;
2994 END IF;
2995 END LOOP;
2996 -- the sum of all SLL periods across all SLH's should match.
2997 IF (l_global_total_periods = 0 ) THEN
2998 l_global_total_periods := l_line_total_periods;
2999 ELSIF(l_global_total_periods <> l_line_total_periods) THEN
3000 RAISE l_mismatch_exception;
3001 END IF;
3002 EXCEPTION WHEN l_mismatch_exception THEN
3003 x_return_status := Okl_Api.G_RET_STS_ERROR;
3004 --message
3005 Okl_Api.set_message(
3006 p_app_name => G_APP_NAME,
3007 p_msg_name => 'OKL_QA_VARINT_SLL_MISMATCH');
3008 END;
3009 END LOOP;
3010 IF l_pmnt_lns_in_hdr%ISOPEN THEN
3011 CLOSE l_pmnt_lns_in_hdr;
3012 END IF;
3013 IF l_pmnt_strm_check%ISOPEN THEN
3014 CLOSE l_pmnt_strm_check;
3015 END IF;
3016 END IF;
3017 END IF;
3018 -------------------------------------------------------------
3019 --End REAMORT processing for rent streams for variable rate contracts.
3020 -------------------------------------------------------------
3021
3022 /*
3023 OPEN l_hdrrl_csr( 'LAIIND', 'LAINTP', p_chr_id );
3024 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
3025 If ( l_hdrrl_csr%NOTFOUND ) OR
3026 ( nvl(l_hdrrl_rec.rule_information1, 'N') = 'N' )Then
3027 CLOSE l_hdrrl_csr;
3028 OKL_API.set_message(
3029 p_app_name => G_APP_NAME,
3030 p_msg_name => G_QA_SUCCESS);
3031 return;
3032 End If;
3033
3034 If (l_hdrrl_rec.RULE_INFORMATION1 = 'Y') AND
3035 (INSTR(l_hdr_rec.deal_type,'LOAN') < 1) Then
3036 OKL_API.set_message(
3037 p_app_name => G_APP_NAME,
3038 p_msg_name => 'OKL_QA_VAR_RATE_LN');
3039 x_return_status := OKL_API.G_RET_STS_ERROR;
3040 RAISE G_EXCEPTION_HALT_VALIDATION;
3041 End If;
3042 CLOSE l_hdrrl_csr;
3043 */
3044
3045 OPEN l_hdrrl_csr( 'LAIIND', 'LAIVAR', p_chr_id );
3046 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
3047 CLOSE l_hdrrl_csr;
3048
3049 var_meth := l_hdrrl_rec.rule_information1;
3050
3051 FOR index_rec IN index_csr( TO_NUMBER(l_hdrrl_rec.rule_information2) )
3052 LOOP
3053 index_date := NVL(index_rec.datetime_valid, SYSDATE);
3054 index_name := index_rec.name;
3055 EXIT;
3056 END LOOP;
3057
3058 IF ( TRUNC(l_hdr_rec.start_date) < TRUNC(index_date) ) THEN
3059 Okl_Api.set_message(
3060 p_app_name => G_APP_NAME,
3061 p_msg_name => 'OKL_QA_INDEXDATE');
3062 x_return_status := Okl_Api.G_RET_STS_ERROR;
3063 END IF;
3064
3065 OPEN l_hdrrl_csr( 'LAIIND', 'LAICLC', p_chr_id );
3066 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
3067 IF ( l_hdrrl_csr%NOTFOUND ) OR
3068 ( l_hdrrl_rec.rule_information4 IS NULL ) OR
3069 ( l_hdrrl_rec.rule_information5 IS NULL ) THEN
3070 Okl_Api.set_message(
3071 p_app_name => G_APP_NAME,
3072 p_msg_name => 'OKL_QA_NO_VARCLC');
3073 x_return_status := Okl_Api.G_RET_STS_ERROR;
3074 END IF;
3075 CLOSE l_hdrrl_csr;
3076
3077 calc_meth := l_hdrrl_rec.rule_information5;
3078
3079 OPEN l_hdr_csr1( p_chr_id );
3080 FETCH l_hdr_csr1 INTO l_hdr_rec1;
3081 CLOSE l_hdr_csr1;
3082
3083 IF ( TRUNC(l_hdr_rec1.start_date)
3084 > TRUNC(Fnd_Date.canonical_to_date(l_hdrrl_rec.rule_information4)) )
3085 OR
3086 ( TRUNC(l_hdr_rec1.end_date)
3087 < TRUNC(Fnd_Date.canonical_to_date(l_hdrrl_rec.rule_information4)) ) THEN
3088 Okl_Api.set_message(
3089 p_app_name => G_APP_NAME,
3090 p_msg_name => 'OKL_QA_INT_START_DATE_EFF');
3091 x_return_status := Okl_Api.G_RET_STS_ERROR;
3092 END IF;
3093
3094 /*If ( l_hdr_rec.start_date < FND_DATE.canonical_to_date(l_hdrrl_rec.rule_information4) ) Then
3095 OKL_API.set_message(
3096 p_app_name => G_APP_NAME,
3097 p_msg_name => 'OKL_QA_CLCDATE');
3098 x_return_status := OKL_API.G_RET_STS_ERROR;
3099 End If;
3100 */
3101
3102 /*
3103 *If ( var_meth = 'FLOAT' ) AND
3104 * ( calc_meth <> 'FORMULA') Then
3105 * OKL_API.set_message(
3106 * p_app_name => G_APP_NAME,
3107 * p_msg_name => 'OKL_QA_VARFLOAT');
3108 * x_return_status := OKL_API.G_RET_STS_ERROR;
3109 *End If;
3110 */
3111
3112 /*
3113 If ( var_meth = 'FLOAT' ) AND
3114 ( calc_meth = 'FORMULA' ) Then
3115
3116 OPEN l_hdrrl_csr( 'LAIIND', 'LAFORM', p_chr_id );
3117 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
3118 If ( l_hdrrl_csr%NOTFOUND ) OR
3119 ( l_hdrrl_rec.rule_information1 IS NULL ) Then
3120 OKL_API.set_message(
3121 p_app_name => G_APP_NAME,
3122 p_msg_name => 'OKL_QA_VARNOFORM');
3123 x_return_status := OKL_API.G_RET_STS_ERROR;
3124 RAISE G_EXCEPTION_HALT_VALIDATION;
3125 End If;
3126 CLOSE l_hdrrl_csr;
3127
3128 End If;
3129
3130 */
3131
3132 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
3133 Okl_Api.set_message(
3134 p_app_name => G_APP_NAME,
3135 p_msg_name => G_QA_SUCCESS);
3136 END IF;
3137
3138 EXCEPTION
3139
3140 WHEN G_EXCEPTION_HALT_VALIDATION THEN
3141 IF l_hdr_csr%ISOPEN THEN
3142 CLOSE l_hdr_csr;
3143 END IF;
3144 IF l_hdrrl_csr%ISOPEN THEN
3145 CLOSE l_hdrrl_csr;
3146 END IF;
3147 -- no processing necessary; validation can continue with next column
3148 WHEN OTHERS THEN
3149 -- store SQL error message on message stack
3150 Okl_Api.SET_MESSAGE(
3151 p_app_name => G_APP_NAME,
3152 p_msg_name => G_UNEXPECTED_ERROR,
3153 p_token1 => G_SQLCODE_TOKEN,
3154 p_token1_value => SQLCODE,
3155 p_token2 => G_SQLERRM_TOKEN,
3156 p_token2_value => SQLERRM);
3157 -- notify caller of an error as UNEXPETED error
3158 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
3159 -- verify that cursor was closed
3160 IF l_hdr_csr%ISOPEN THEN
3161 CLOSE l_hdr_csr;
3162 END IF;
3163 IF l_hdrrl_csr%ISOPEN THEN
3164 CLOSE l_hdrrl_csr;
3165 END IF;
3166
3167 END check_variable_rate_old;
3168
3169 -- Start of comments
3170 --
3171 -- Procedure Name : check_prefunding_status
3172 -- Description :
3173 -- Business Rules :
3174 -- Parameters :
3175 -- Version : 1.0
3176 -- End of comments
3177
3178 PROCEDURE check_prefunding_status(
3179 x_return_status OUT NOCOPY VARCHAR2,
3180 p_chr_id IN NUMBER
3181 ) IS
3182
3183 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
3184 l_dummy VARCHAR2(1) := '?';
3185 l_count NUMBER := 0;
3186 l_row_notfound BOOLEAN;
3187 l_token VARCHAR2(2000);
3188
3189 -- sjalasut, modified the cursor to refer khr_id from okl_txl_ap_inv_lns_all_b
3190 -- instead of okl_trx_ap_invoices_b. changes made as part of OKLR12B
3191 -- disbursements project
3192 CURSOR l_prefund_csr( chrId NUMBER ) IS
3193 SELECT 'Y'
3194 FROM okl_trx_ap_invoices_b hdr
3195 ,okl_txl_ap_inv_lns_all_b tpl
3196 WHERE hdr.funding_type_code = 'PREFUNDING'
3197 AND hdr.trx_status_code NOT IN ('APPROVED', 'PROCESSED', 'ERROR')
3198 AND hdr.id = tpl.tap_id
3199 AND tpl.khr_id = chrId;
3200
3201 l_prefund_yn VARCHAR2(1);
3202
3203 BEGIN
3204
3205 -- initialize return status
3206 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
3207
3208 OPEN l_prefund_csr( p_chr_id );
3209 FETCH l_prefund_csr INTO l_prefund_yn;
3210 IF ( l_prefund_csr%FOUND AND (l_prefund_yn = 'Y')) THEN
3211 Okl_Api.set_message(
3212 p_app_name => G_APP_NAME,
3213 p_msg_name => 'OKL_QA_PREFUND_MIN');
3214 x_return_status := Okl_Api.G_RET_STS_ERROR;
3215 END IF;
3216 CLOSE l_prefund_csr;
3217
3218 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
3219 Okl_Api.set_message(
3220 p_app_name => G_APP_NAME,
3221 p_msg_name => G_QA_SUCCESS);
3222 END IF;
3223
3224
3225 EXCEPTION
3226
3227 WHEN G_EXCEPTION_HALT_VALIDATION THEN
3228 IF l_prefund_csr%ISOPEN THEN
3229 CLOSE l_prefund_csr;
3230 END IF;
3231 -- no processing necessary; validation can continue with next column
3232 WHEN OTHERS THEN
3233 -- store SQL error message on message stack
3234 Okl_Api.SET_MESSAGE(
3235 p_app_name => G_APP_NAME,
3236 p_msg_name => G_UNEXPECTED_ERROR,
3237 p_token1 => G_SQLCODE_TOKEN,
3238 p_token1_value => SQLCODE,
3239 p_token2 => G_SQLERRM_TOKEN,
3240 p_token2_value => SQLERRM);
3241 -- notify caller of an error as UNEXPETED error
3242 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
3243 -- verify that cursor was closed
3244 IF l_prefund_csr%ISOPEN THEN
3245 CLOSE l_prefund_csr;
3246 END IF;
3247
3248 END check_prefunding_status;
3249
3250 -- Bug# 4350255
3251 -- Added Validations for Asset Line Passthrough
3252 -- Start of comments
3253 --
3254 -- Procedure Name : check_fee_service_ast_pth
3255 -- Description : Check Passthorugh stream type in ASSET, FEE and SERVICE line.
3256 -- If it is null, raise error
3257 -- Business Rules :
3258 -- Parameters :
3259 -- Version : 1.0
3260 -- End of comments
3261
3262 PROCEDURE check_fee_service_ast_pth(
3263 x_return_status OUT NOCOPY VARCHAR2,
3264 p_chr_id IN NUMBER
3265 ) IS
3266
3267 --Bug 4917691 fmiao start-----------------------------
3268 --1. If evg hdr is defined, vendor params detail is required
3269 --Find out whether contract evg hdr is existing --
3270 CURSOR evg_hdr_csr (p_chr_id IN NUMBER) IS
3271 SELECT '1'
3272 FROM okl_party_payment_hdr
3273 WHERE dnz_chr_id = p_chr_id
3274 AND cle_id IS NULL;
3275
3276 l_evg_hdr_exist VARCHAR2(1);
3277
3278 --Find out all the vendors for the contract
3279 CURSOR chr_vendor_csr (p_chr_id IN NUMBER) IS
3280 SELECT object1_id1, po.vendor_name
3281 FROM okc_k_party_roles_b, po_vendors po
3282 WHERE chr_id = p_chr_id
3283 AND rle_code = 'OKL_VENDOR'
3284 AND po.vendor_id = object1_id1;
3285
3286 -- Find out whether vendor evg pt params exists
3287 CURSOR evg_dtls_csr (p_vendor_id IN NUMBER, p_chr_id IN NUMBER) IS
3288 SELECT '1'
3289 FROM okl_party_payment_dtls ppy, okl_party_payment_hdr pph
3290 WHERE ppy.vendor_id = p_vendor_id
3291 AND ppy.payment_hdr_id = pph.id
3292 AND pph.dnz_chr_id = p_chr_id
3293 AND pph.cle_id IS NULL;
3294
3295 l_evg_dtls_exist VARCHAR2(1);
3296
3297 --2. Check the disb amt not exceed line payment amt --
3298 -- Find out lines for a contract
3299 CURSOR lines_csr(p_chr_id IN NUMBER) IS
3300 SELECT cle.id,cle.name,lse.lty_code
3301 FROM okl_k_lines_full_v cle, okc_line_styles_v lse
3302 WHERE cle.dnz_chr_id = p_chr_id
3303 AND cle.lse_id = lse.id
3304 AND lse.lty_code IN ('FREE_FORM1','FEE','SOLD_SERVICE');
3305
3306 -- Find out the disb fixed amt for each line for all vendors--
3307 CURSOR disb_amt_csr (p_chr_id IN NUMBER, p_cle_id IN NUMBER,
3308 p_term IN okl_party_payment_hdr.PASSTHRU_TERM%TYPE) IS
3309 SELECT SUM(ppy.disbursement_fixed_amount)
3310 FROM okl_party_payment_dtls ppy, okl_party_payment_hdr pph
3311 WHERE pph.dnz_chr_id = p_chr_id
3312 AND NVL(pph.cle_id, -9999) = p_cle_id
3313 AND pph.id = ppy.payment_hdr_id
3314 AND pph.passthru_term = p_term
3315 GROUP BY ppy.payment_hdr_id;
3316
3317 -- Find out the disb fixed amt for all vendors on the contract--
3318 CURSOR disb_amt_csr1 (p_chr_id IN NUMBER) IS
3319 SELECT SUM(ppy.disbursement_fixed_amount), pph.passthru_term, pph.payout_basis
3320 FROM okl_party_payment_dtls ppy, okl_party_payment_hdr pph
3321 WHERE pph.dnz_chr_id = p_chr_id
3322 AND pph.cle_id IS NULL
3323 AND pph.id = ppy.payment_hdr_id
3324 GROUP BY ppy.payment_hdr_id,pph.passthru_term, pph.payout_basis;
3325
3326 -- Bug#8399461 - RGOOTY
3327 --Cursor to get the Passthrough Disbursement information
3328 CURSOR c_pass(khrId NUMBER, cleId NUMBER) IS
3329 SELECT vDtls.DISBURSEMENT_BASIS,
3330 vDtls.DISBURSEMENT_FIXED_AMOUNT,
3331 vDtls.DISBURSEMENT_PERCENT,
3332 vDtls.PROCESSING_FEE_BASIS,
3333 vDtls.PROCESSING_FEE_FIXED_AMOUNT,
3334 vDtls.PROCESSING_FEE_PERCENT,
3335 vDtls.PAYMENT_START_DATE,
3336 vDtls.PAYMENT_FREQUENCY,
3337 chr.END_DATE CONTRACT_END_DATE
3338 FROM okl_party_payment_hdr vHdr,
3339 okl_party_payment_dtls vDtls,
3340 okc_k_headers_b chr
3341 WHERE vDtls.payment_hdr_id = vHdr.id
3342 AND vHdr.CLE_ID = cleId
3343 AND vHdr.DNZ_CHR_ID = khrId
3344 AND vHdr.PASSTHRU_TERM = 'BASE'
3345 AND vHdr.DNZ_CHR_ID = chr.id;
3346
3347 --Cursor to get the number of disbursements
3348 CURSOR c_num_of_disb(p_contract_end_date DATE, p_payout_date DATE, p_frequency VARCHAR2)
3349 IS
3350 SELECT CEIL(Months_between(p_contract_end_date, p_payout_date)/
3351 DECODE(p_frequency,'A',12,'S',6,'Q',3,1))
3352 FROM DUAL;
3353
3354 l_fixed_amt okl_party_payment_dtls.disbursement_fixed_amount%TYPE;
3355 l_payout_basis okl_party_payment_hdr.payout_basis%TYPE;
3356 l_passthru_term okl_party_payment_hdr.passthru_term%TYPE;
3357
3358 --Found out payout basis
3359 CURSOR payout_basis_csr (p_chr_id IN NUMBER,p_cle_id IN NUMBER )IS
3360 SELECT pph.passthru_term, pph.payout_basis
3361 FROM okl_party_payment_hdr pph
3362 WHERE pph.dnz_chr_id = p_chr_id
3363 AND pph.cle_id = p_cle_id;
3364
3365 --Find out the payment info for contract line
3366 CURSOR pymnt_amt_csr (p_chr_id IN NUMBER, p_cle_id IN NUMBER) IS
3367 SELECT Fnd_Date.canonical_to_date(sll.rule_information2) start_date,
3368 DECODE(sll.rule_information7, NULL,
3369 (ADD_MONTHS(Fnd_Date.canonical_to_date(sll.rule_information2),
3370 NVL(TO_NUMBER(sll.rule_information3),1) *
3371 DECODE(sll.object1_id1, 'M',1,'Q',3,'S',6,'A',12)) - 1),
3372 Fnd_Date.canonical_to_date(sll.rule_information2) +
3373 TO_NUMBER(sll.rule_information7) - 1) end_date,
3374 TO_NUMBER(sll.rule_information6) amount
3375 FROM okc_rules_b sll,
3376 okc_rules_b slh,
3377 okc_rule_groups_b rgp
3378 WHERE rgp.dnz_chr_id = p_chr_id
3379 AND rgp.cle_id = p_cle_id
3380 AND rgp.rgd_code = 'LALEVL'
3381 AND slh.rgp_id = rgp.id
3382 AND slh.rule_information_category = 'LASLH'
3383 AND sll.object2_id1 = slh.id
3384 AND sll.rule_information_category = 'LASLL'
3385 AND sll.rgp_id = rgp.id
3386 AND NVL(sll.rule_information6,0) <> 0
3387 ORDER BY start_date, end_date;
3388
3389 TYPE amt_type IS TABLE OF okc_rules_b.rule_information6%TYPE;
3390 pymnt_amt amt_type;
3391 TYPE sdate_type IS TABLE OF okc_rules_b.rule_information2%TYPE;
3392 start_date sdate_type;
3393 TYPE edate_type IS TABLE OF okc_rules_b.rule_information2%TYPE;
3394 end_date edate_type;
3395 l_payment_amt okc_rules_b.rule_information6%TYPE;
3396
3397 --3. Disb basis for all vendors should be same
3398 CURSOR disb_basis_csr (p_chr_id IN NUMBER, p_cle_id IN NUMBER) IS
3399 SELECT ppy.disbursement_basis, po.vendor_name
3400 FROM okl_party_payment_dtls ppy, okl_party_payment_hdr pph, okc_k_party_roles_b rle, po_vendors po
3401 WHERE pph.dnz_chr_id = p_chr_id
3402 AND pph.cle_id = p_cle_id
3403 AND pph.id = ppy.payment_hdr_id
3404 AND ppy.cpl_id = rle.id
3405 AND rle.rle_code = 'OKL_VENDOR'
3406 AND rle.object1_id1 = po.vendor_id;
3407
3408 l_disb_basis okl_party_payment_dtls.disbursement_basis%TYPE;
3409
3410 --4. Total process fee fixed amt not exceed line amt
3411 CURSOR proc_fee_amt_csr (p_chr_id IN NUMBER, p_cle_id IN NUMBER) IS
3412 SELECT SUM(ppy.processing_fee_fixed_amount)
3413 FROM okl_party_payment_dtls ppy, okl_party_payment_hdr pph
3414 WHERE pph.dnz_chr_id = p_chr_id
3415 AND pph.cle_id = p_cle_id
3416 AND pph.id = ppy.payment_hdr_id;
3417
3418 l_proc_fee_amt okl_party_payment_dtls.processing_fee_fixed_amount%TYPE;
3419
3420 CURSOR pth_amount_csr(p_chr_id IN NUMBER, p_cle_id IN NUMBER) IS
3421 SELECT SUM(ppy.disbursement_fixed_amount)
3422 FROM okl_party_payment_dtls ppy, okl_party_payment_hdr pph
3423 WHERE pph.dnz_chr_id = p_chr_id
3424 AND pph.cle_id = p_cle_id
3425 AND pph.id = ppy.payment_hdr_id;
3426
3427 l_pth_amt okl_party_payment_dtls.disbursement_fixed_amount%TYPE;
3428
3429 --Bug 4917691 fmiao end ------------------------------------
3430
3431
3432 CURSOR con_type_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
3433 SELECT 'Y'
3434 FROM okc_k_headers_b
3435 WHERE orig_system_source_code = 'OKL_REBOOK'
3436 AND id = p_chr_id;
3437
3438 --------------
3439 --Bug# 4350255
3440 --------------
3441 CURSOR pth_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
3442 SELECT line.id,
3443 DECODE(style.lty_code,'SOLD_SERVICE','SERVICE',style.lty_code) line_type,
3444 NVL(line.name,line.item_description) name,
3445 line.fee_type,
3446 style.name line_style,
3447 line.amount amount,
3448 line.start_date,
3449 line.end_date,
3450 pph.id payment_hdr_id,
3451 pph.passthru_start_date,
3452 pph.passthru_term,
3453 pph.passthru_stream_type_id
3454 FROM okl_k_lines_full_v line,
3455 okc_line_styles_v style,
3456 okc_statuses_v sts,
3457 okl_party_payment_hdr pph
3458 WHERE line.lse_id = style.id
3459 AND line.sts_code = sts.code
3460 AND sts.ste_code NOT IN ( 'HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED')
3461 AND style.lty_code IN ('SOLD_SERVICE','FEE','FREE_FORM1')
3462 AND line.dnz_chr_id = p_chr_id
3463 AND pph.cle_id = line.id
3464 AND pph.dnz_chr_id = p_chr_id;
3465
3466 CURSOR pth_dtl_csr(p_payment_hdr_id IN NUMBER) IS
3467 SELECT disbursement_basis,
3468 disbursement_fixed_amount,
3469 disbursement_percent,
3470 payment_start_date,
3471 vendor_id
3472 FROM okl_party_payment_dtls
3473 WHERE payment_hdr_id = p_payment_hdr_id;
3474
3475 CURSOR vendor_csr(p_vendor_id IN NUMBER) IS
3476 SELECT vendor_name
3477 FROM po_vendors
3478 WHERE vendor_id = p_vendor_id;
3479
3480 l_vendor_name po_vendors.vendor_name%TYPE;
3481 l_pct_sum NUMBER;
3482 l_pth_dtl_present_yn VARCHAR2(1);
3483
3484 --Bug#3877032
3485 /*CURSOR pth_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
3486 SELECT line.id,
3487 decode(style.lty_code,'SOLD_SERVICE','SERVICE',style.lty_code) line_type,
3488 nvl(line.name,line.item_description) name,
3489 line.fee_type,
3490 rule.object1_id1,
3491 style.name line_style
3492 FROM okl_k_lines_full_v line,
3493 okc_line_styles_v style,
3494 okc_statuses_v sts,
3495 okc_rule_groups_b rgp,
3496 okc_rules_b rule
3497 WHERE rgp.id = rule.rgp_id
3498 AND line.id = rgp.cle_id
3499 AND line.lse_id = style.id
3500 AND line.sts_code = sts.code
3501 AND sts.ste_code NOT IN ( 'HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED')
3502 AND style.lty_code IN ('SOLD_SERVICE','FEE')
3503 AND rgp.rgd_code = 'LAPSTH'
3504 AND rule.rule_information_category = 'LASTRM'
3505 AND line.dnz_chr_id = p_chr_id
3506 AND rgp.dnz_chr_id = p_chr_id;*/
3507
3508
3509 -- Added cursor - bug# 8399461
3510 --Cursor to get the fee payment frequency
3511 CURSOR c_feepayment_freq(khrId NUMBER, cleId NUMBER) IS
3512 SELECT rul.object1_id1 frequency
3513 FROM okc_rule_groups_b rgp,
3514 okc_rules_b rul
3515 WHERE rgp.dnz_chr_id = khrId
3516 AND rgp.cle_id = cleId
3517 AND rgp.RGD_CODE = 'LALEVL'
3518 AND rgp.id = rul.rgp_id
3519 AND rul.RULE_INFORMATION_CATEGORY = 'LASLL'
3520 AND ROWNUM < 2;
3521
3522 --------------
3523 --Bug# 4350255
3524 --------------
3525
3526 --Added by bkatraga for bug 9962314
3527 CURSOR l_sub_line_csr(p_chr_id IN NUMBER,
3528 p_cle_id IN NUMBER) IS
3529 SELECT cleb.id
3530 FROM okc_k_lines_b cleb
3531 WHERE cleb.cle_id = p_cle_id
3532 AND cleb.dnz_chr_id = p_chr_id
3533 AND cleb.sts_code <> 'ABANDONED';
3534
3535 l_type VARCHAR2(1);
3536 l_present_yn VARCHAR2(1);
3537 l_strm_name_rec strm_name_csr%ROWTYPE;
3538
3539 i NUMBER := 1;
3540 l_found NUMBER := 0; -- Added for bug 5201664
3541
3542
3543 -- Added variables for bug# 8399461
3544 l_pymnt_frequency VARCHAR2(1);
3545 l_frequency VARCHAR2(1);
3546 l_months_factor NUMBER;
3547 l_num_of_disb NUMBER;
3548 l_last_payout_date DATE;
3549 l_bill_amount NUMBER;
3550
3551
3552 BEGIN
3553
3554 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
3555
3556 --Bug 4917691 fmiao start ---------------------------------------
3557
3558 --1.If evg hdr is defined, all the vendors should have evg pt params defined
3559 l_evg_hdr_exist := NULL;
3560 OPEN evg_hdr_csr (p_chr_id);
3561 FETCH evg_hdr_csr INTO l_evg_hdr_exist;
3562 CLOSE evg_hdr_csr;
3563
3564 IF (l_evg_hdr_exist IS NOT NULL) THEN
3565 FOR chr_vendor_rec IN chr_vendor_csr (p_chr_id)
3566 LOOP
3567 OPEN evg_dtls_csr (chr_vendor_rec.object1_id1, p_chr_id);
3568 FETCH evg_dtls_csr INTO l_evg_dtls_exist;
3569 CLOSE evg_dtls_csr;
3570 -- changed below condition for bug 5201664
3571 IF (l_evg_dtls_exist IS NOT NULL) THEN
3572 l_found := 1;
3573 EXIT;
3574 END IF;
3575 l_evg_dtls_exist := NULL;
3576 END LOOP;
3577
3578 IF (l_found = 0) THEN
3579
3580 Okl_Api.set_message(
3581 p_app_name => G_APP_NAME,
3582 p_msg_name => 'OKL_QA_EVG_PT_NO_DTLS');
3583 x_return_status := Okl_Api.G_RET_STS_ERROR;
3584 END IF;
3585 -- end bug 5201664
3586 END IF;
3587
3588 -- 2.Check the disb amt of all vendors for a line not exceed line pymnt amt
3589
3590 FOR lines_rec IN lines_csr (p_chr_id)
3591 LOOP
3592
3593 IF (lines_rec.lty_code = 'FREE_FORM1') THEN
3594
3595 FOR payout_basis_rec IN payout_basis_csr (p_chr_id, lines_rec.id)
3596 LOOP
3597
3598
3599 IF (payout_basis_rec.passthru_term IS NULL) THEN
3600 OPEN disb_amt_csr1 (p_chr_id);
3601 FETCH disb_amt_csr1 INTO l_fixed_amt,l_passthru_term, l_payout_basis;
3602 CLOSE disb_amt_csr1;
3603 ELSE
3604 OPEN disb_amt_csr (p_chr_id, lines_rec.id,payout_basis_rec.passthru_term);
3605 FETCH disb_amt_csr INTO l_fixed_amt;
3606 CLOSE disb_amt_csr;
3607 END IF;
3608
3609 IF (l_fixed_amt IS NOT NULL) THEN
3610 OPEN pymnt_amt_csr (p_chr_id, lines_rec.id);
3611 FETCH pymnt_amt_csr BULK COLLECT INTO start_date, end_date, pymnt_amt;
3612 CLOSE pymnt_amt_csr;
3613
3614 IF (payout_basis_rec.passthru_term = 'EVERGREEN' AND
3615 payout_basis_rec.payout_basis IN ('BILLING','FULL_RECEIPT','PARTIAL_RECEIPT')) THEN
3616 FOR i IN pymnt_amt.first..pymnt_amt.last
3617 LOOP
3618 l_payment_amt := pymnt_amt(i);
3619 END LOOP;
3620 IF (l_fixed_amt > l_payment_amt) THEN
3621 Okl_Api.set_message(
3622 p_app_name => G_APP_NAME,
3623 p_msg_name => 'OKL_QA_FIXED_AMT_EXC_PYMNT_AMT',
3624 p_token1 => 'DISB_AMOUNT',
3625 p_token1_value => l_fixed_amt,
3626 p_token2 => 'TERM',
3627 p_token2_value => payout_basis_rec.passthru_term,
3628 p_token3 => 'PYMNT_AMT',
3629 p_token3_value => l_payment_amt,
3630 p_token4 => 'LINE',
3631 p_token4_value => lines_rec.name);
3632 x_return_status := Okl_Api.G_RET_STS_ERROR;
3633 END IF;
3634 END IF;
3635 END IF;
3636 END LOOP;
3637 ELSE -- 'FEE' 'SOLD_SERVICE'
3638
3639 FOR payout_basis_rec IN payout_basis_csr (p_chr_id, lines_rec.id)
3640 LOOP
3641
3642 OPEN disb_amt_csr (p_chr_id, lines_rec.id, payout_basis_rec.passthru_term);
3643 FETCH disb_amt_csr INTO l_fixed_amt;
3644 CLOSE disb_amt_csr;
3645
3646 -- Bug# 8399461 - Commented so that validation considers percentage in calculation of disbursement amount
3647 --IF (l_fixed_amt IS NOT NULL) THEN
3648 OPEN pymnt_amt_csr (p_chr_id, lines_rec.id);
3649 FETCH pymnt_amt_csr BULK COLLECT INTO start_date, end_date, pymnt_amt;
3650 CLOSE pymnt_amt_csr;
3651
3652 IF (payout_basis_rec.passthru_term = 'EVERGREEN' AND
3653 payout_basis_rec.payout_basis IN ('BILLING','FULL_RECEIPT','PARTIAL_RECEIPT')) THEN
3654 FOR i IN pymnt_amt.first..pymnt_amt.last
3655 LOOP
3656 l_payment_amt := pymnt_amt(i);
3657 END LOOP;
3658
3659 IF (l_fixed_amt > l_payment_amt) THEN
3660 Okl_Api.set_message(
3661 p_app_name => G_APP_NAME,
3662 p_msg_name => 'OKL_QA_FIXED_AMT_EXC_PYMNT_AMT',
3663 p_token1 => 'DISB_AMOUNT',
3664 p_token1_value => l_fixed_amt,
3665 p_token2 => 'TERM',
3666 p_token2_value => payout_basis_rec.passthru_term,
3667 p_token3 => 'PYMNT_AMT',
3668 p_token3_value => l_payment_amt,
3669 p_token4 => 'LINE',
3670 p_token4_value => lines_rec.name);
3671 x_return_status := Okl_Api.G_RET_STS_ERROR;
3672 END IF;
3673 END IF ;
3674
3675 IF (payout_basis_rec.passthru_term = 'BASE' AND
3676 payout_basis_rec.payout_basis IN ('BILLING','DUE_DATE','FULL_RECEIPT','PARTIAL_RECEIPT')) THEN
3677
3678
3679 -- Bug#8399461 - RGOOTY - Added logic to calculate total payment amount
3680 -- Get the total payment amount defined for the passthrough fee
3681 l_payment_amt := 0;
3682 FOR l_rl_rec1 IN l_rl_csr1( 'LALEVL', 'LASLL', p_chr_id, lines_rec.id )
3683 LOOP
3684 IF (l_rl_rec1.rule_information8 IS NOT NULL) THEN
3685 l_payment_amt := l_payment_amt + TO_NUMBER(NVL(l_rl_rec1.rule_information8,'0'));
3686 ELSE
3687 l_payment_amt := l_payment_amt + ( TO_NUMBER(NVL(l_rl_rec1.rule_information6,'0')) *
3688 TO_NUMBER(NVL(l_rl_rec1.rule_information3,'1')) );
3689 END IF;
3690 END LOOP;
3691
3692 --Added by bkatraga for bug 9962314
3693 --Payments may be defined at Service Line - Covered Asset level
3694 FOR l_sub_line_rec IN l_sub_line_csr(p_chr_id, lines_rec.id)
3695 LOOP
3696 FOR l_rl_rec1 IN l_rl_csr1( 'LALEVL', 'LASLL', p_chr_id, l_sub_line_rec.id )
3697 LOOP
3698 IF (l_rl_rec1.rule_information8 IS NOT NULL) THEN
3699 l_payment_amt := l_payment_amt + TO_NUMBER(NVL(l_rl_rec1.rule_information8,'0'));
3700 ELSE
3701 l_payment_amt := l_payment_amt + ( TO_NUMBER(NVL(l_rl_rec1.rule_information6,'0')) *
3702 TO_NUMBER(NVL(l_rl_rec1.rule_information3,'1')) );
3703 END IF;
3704 END LOOP;
3705 END LOOP;
3706 --end bkatraga for bug 9962314
3707
3708 -- Bug# 8399461 Calculate the total passthrough disbursement amount
3709 --If disbursement frequency is null then take the fee payment frequency
3710 OPEN c_feepayment_freq(p_chr_id, lines_rec.id);
3711 FETCH c_feepayment_freq INTO l_pymnt_frequency;
3712 CLOSE c_feepayment_freq;
3713
3714 l_fixed_amt := 0;
3715 -- loop through the passthrough vendors for this passthrough fee
3716 FOR r_pass IN c_pass(p_chr_id,lines_rec.id)
3717 LOOP
3718 -- get disbursement frequency for this vendor. In case disbursement
3719 -- frequency is not defined, then fee payment frequency is considered
3720 l_frequency := NVL(r_pass.PAYMENT_FREQUENCY,l_pymnt_frequency);
3721
3722 -- Calculate the factor of period in terms of months
3723 -- ex. If period is quarterly - factor = 3, annual - factor =12
3724 l_months_factor := OKL_STREAM_GENERATOR_PVT.get_months_factor(
3725 p_frequency => l_frequency,
3726 x_return_status => x_return_status);
3727 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
3728 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3729 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
3730 RAISE OKL_API.G_EXCEPTION_ERROR;
3731 END IF;
3732
3733 -- determine the number of disbursements
3734 OPEN c_num_of_disb(r_pass.CONTRACT_END_DATE, r_pass.PAYMENT_START_DATE, l_frequency);
3735 FETCH c_num_of_disb INTO l_num_of_disb;
3736 CLOSE c_num_of_disb;
3737
3738 -- if disbursement basis is fixed
3739 IF (r_pass.disbursement_basis = 'AMOUNT' ) THEN
3740 l_fixed_amt := l_fixed_amt + NVL(l_num_of_disb * r_pass.disbursement_fixed_amount,0);
3741 -- elseif disbursement basis is percentage
3742 ELSIF (r_pass.disbursement_basis = 'PERCENT' ) THEN
3743 l_last_payout_date := ADD_MONTHS(r_pass.PAYMENT_START_DATE, (l_num_of_disb-1)*l_months_factor);
3744 OKL_LA_STREAM_PVT.get_pth_fee_due_amount(p_chr_id => p_chr_id,
3745 p_kle_id => lines_rec.id,
3746 p_prev_payout_date => NULL,
3747 p_payout_date => l_last_payout_date,
3748 x_bill_amount => l_bill_amount,
3749 x_return_status => x_return_status);
3750 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
3751 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3752 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
3753 RAISE OKL_API.G_EXCEPTION_ERROR;
3754 END IF;
3755
3756 l_fixed_amt := l_fixed_amt + NVL((l_bill_amount * r_pass.DISBURSEMENT_PERCENT)/100,0);
3757 END IF;
3758
3759 -- if processing fee basis is fixed
3760 IF (r_pass.PROCESSING_FEE_BASIS = 'AMOUNT' ) THEN
3761 l_fixed_amt := l_fixed_amt + NVL(l_num_of_disb * r_pass.PROCESSING_FEE_FIXED_AMOUNT,0);
3762 -- elseif processing fee basis is percentage
3763 ELSIF (r_pass.PROCESSING_FEE_BASIS = 'PERCENT' ) THEN
3764 l_last_payout_date := ADD_MONTHS(r_pass.PAYMENT_START_DATE, (l_num_of_disb-1)*l_months_factor);
3765 OKL_LA_STREAM_PVT.get_pth_fee_due_amount(p_chr_id => p_chr_id,
3766 p_kle_id => lines_rec.id,
3767 p_prev_payout_date => NULL,
3768 p_payout_date => l_last_payout_date,
3769 x_bill_amount => l_bill_amount,
3770 x_return_status => x_return_status);
3771 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
3772 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3773 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
3774 RAISE OKL_API.G_EXCEPTION_ERROR;
3775 END IF;
3776 l_fixed_amt := l_fixed_amt + NVL((l_bill_amount * r_pass.PROCESSING_FEE_PERCENT)/100,0);
3777 END IF;
3778 END LOOP;
3779 -- Bug#8399461 - RGOOTY: End
3780
3781 --IF (pymnt_amt.COUNT > 0) THEN -- 5207361
3782 --l_payment_amt := pymnt_amt(1);
3783 --ELSE
3784 --l_payment_amt := NULL;
3785 --END IF;
3786
3787 IF (l_fixed_amt > l_payment_amt) THEN
3788 Okl_Api.set_message(
3789 p_app_name => G_APP_NAME,
3790 p_msg_name => 'OKL_QA_FIXED_AMT_EXC_PYMNT_AMT',
3791 p_token1 => 'DISB_AMOUNT',
3792 p_token1_value => l_fixed_amt,
3793 p_token2 => 'TERM',
3794 p_token2_value => payout_basis_rec.passthru_term,
3795 p_token3 => 'PYMNT_AMT',
3796 p_token3_value => l_payment_amt,
3797 p_token4 => 'LINE',
3798 p_token4_value => lines_rec.name);
3799 x_return_status := Okl_Api.G_RET_STS_ERROR;
3800 END IF;
3801 END IF;
3802 --END IF;
3803 END LOOP;
3804 END IF;
3805
3806 --3.Validate all vendors for 1 line should have the same disb basis
3807
3808 l_disb_basis := NULL;
3809 FOR disb_basis_rec IN disb_basis_csr (p_chr_id, lines_rec.id)
3810 LOOP
3811
3812 IF (l_disb_basis IS NOT NULL AND
3813 l_disb_basis <> disb_basis_rec.disbursement_basis) THEN
3814
3815 Okl_Api.set_message(
3816 p_app_name => G_APP_NAME,
3817 p_msg_name => 'OKL_QA_INVALID_VEND_DISB_BASIS',
3818 p_token1 => 'BASIS',
3819 p_token1_value => disb_basis_rec.disbursement_basis,
3820 p_token2 => 'VENDOR',
3821 p_token2_value => disb_basis_rec.vendor_name,
3822 p_token3 => 'LINE',
3823 p_token3_value => lines_rec.name);
3824 x_return_status := Okl_Api.G_RET_STS_ERROR;
3825 END IF;
3826 l_disb_basis := disb_basis_rec.disbursement_basis;
3827
3828 END LOOP;
3829
3830 --4.Validate processing fee amt no greater than line amt
3831 OPEN proc_fee_amt_csr (p_chr_id, lines_rec.id);
3832 FETCH proc_fee_amt_csr INTO l_proc_fee_amt;
3833 CLOSE proc_fee_amt_csr;
3834
3835 OPEN pth_amount_csr (p_chr_id, lines_rec.id);
3836 FETCH pth_amount_csr INTO l_pth_amt;
3837 CLOSE pth_amount_csr;
3838
3839 IF (l_proc_fee_amt IS NOT NULL AND l_pth_amt IS NOT NULL AND
3840 l_proc_fee_amt > l_pth_amt) THEN
3841 Okl_Api.set_message(
3842 p_app_name => G_APP_NAME,
3843 p_msg_name => 'OKL_QA_PROC_FEE_GT_LINE_AMT',
3844 p_token1 => 'PROC_AMT',
3845 p_token1_value => l_proc_fee_amt,
3846 p_token2 => 'PTH_AMT',
3847 p_token2_value => l_pth_amt,
3848 p_token3 => 'LINE',
3849 p_token3_value => lines_rec.name);
3850 x_return_status := Okl_Api.G_RET_STS_ERROR;
3851 END IF;
3852 END LOOP;
3853
3854 --Bug 4917691 fmiao end
3855
3856
3857 -- Bug# 4350255
3858 /*l_type := '?';
3859 OPEN con_type_csr (p_chr_id);
3860 FETCH con_type_csr INTO l_type;
3861 IF con_type_csr%NOTFOUND THEN
3862 l_type := 'N';
3863 END IF;
3864 CLOSE con_type_csr;*/
3865
3866 --
3867 -- Do not check for rebook copy contracts
3868 --
3869 -- Bug# 4350255: Checks are needed for rebook copy contracts
3870 -- as Passthrough parameters can be modified on Rebook
3871 --IF (l_type <> 'Y') THEN
3872 FOR pth_rec IN pth_csr (p_chr_id)
3873 LOOP
3874
3875 -- Bug# 4350255: start
3876 -- Passthru Stream Type is mandatory for Base term
3877 IF (pth_rec.passthru_term = 'BASE') THEN
3878 IF (pth_rec.passthru_stream_type_id IS NULL) THEN
3879 Okl_Api.set_message(
3880 G_APP_NAME,
3881 'OKL_QA_PASTH_STRM',
3882 'LINE_TYPE',
3883 pth_rec.line_style,
3884 'STRM_TYPE',
3885 pth_rec.name
3886 );
3887 x_return_status := Okl_Api.G_RET_STS_ERROR;
3888 END IF;
3889
3890 IF (pth_rec.passthru_start_date
3891 NOT BETWEEN pth_rec.start_date AND pth_rec.end_date) THEN
3892 Okl_Api.set_message(p_app_name => G_APP_NAME,
3893 p_msg_name => 'OKL_QA_PTH_STRT_DATE',
3894 p_token1 => 'LINE',
3895 p_token1_value => pth_rec.line_style||'/'||pth_rec.name);
3896 x_return_status := Okl_Api.G_RET_STS_ERROR;
3897 END IF;
3898 END IF;
3899
3900 -- Passthru Stream Type should be valid for the contract's
3901 -- Stream Generation Template
3902 IF (pth_rec.passthru_stream_type_id IS NOT NULL) THEN
3903 --Bug# 3931587
3904 l_present_yn := Okl_Streams_Util.strm_tmpt_contains_strm_type
3905 (p_khr_id => p_chr_id,
3906 p_sty_id => pth_rec.passthru_stream_type_id);
3907
3908 IF (l_present_yn = 'N') THEN
3909
3910 OPEN strm_name_csr ( TO_NUMBER(pth_rec.passthru_stream_type_id) );
3911 FETCH strm_name_csr INTO l_strm_name_rec;
3912 IF strm_name_csr%NOTFOUND THEN
3913 CLOSE strm_name_csr;
3914 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3915 END IF;
3916 CLOSE strm_name_csr;
3917
3918 Okl_Api.set_message(
3919 p_app_name => G_APP_NAME,
3920 p_msg_name => 'LLA_QA_PTH_STRM_TMPL',
3921 p_token1 => 'STRM_NAME',
3922 p_token1_value => l_strm_name_rec.name,
3923 p_token2 => 'LINE_TYPE',
3924 p_token2_value => pth_rec.line_style||'/'||pth_rec.name
3925 );
3926 x_return_status := Okl_Api.G_RET_STS_ERROR;
3927 END IF;
3928 END IF;
3929
3930 l_pct_sum := 0;
3931 l_pth_dtl_present_yn := 'N';
3932 FOR pth_dtl_rec IN pth_dtl_csr(p_payment_hdr_id => pth_rec.payment_hdr_id)
3933 LOOP
3934
3935 l_pth_dtl_present_yn := 'Y';
3936
3937 IF (pth_dtl_rec.disbursement_basis = 'PERCENT') THEN
3938 l_pct_sum := l_pct_sum + NVL(pth_dtl_rec.disbursement_percent,0);
3939 END IF;
3940
3941 IF (pth_rec.passthru_term = 'BASE') THEN
3942 IF (pth_dtl_rec.payment_start_date IS NOT NULL AND
3943 pth_dtl_rec.payment_start_date NOT BETWEEN pth_rec.start_date AND pth_rec.end_date) THEN
3944
3945 OPEN vendor_csr(p_vendor_id => pth_dtl_rec.vendor_id);
3946 FETCH vendor_csr INTO l_vendor_name;
3947 CLOSE vendor_csr;
3948
3949 Okl_Api.set_message(p_app_name => G_APP_NAME,
3950 p_msg_name => 'OKL_QA_PYMT_STRT_DATE',
3951 p_token1 => 'LINE',
3952 p_token1_value => pth_rec.line_style||'/'||pth_rec.name,
3953 p_token2 => 'VENDOR',
3954 p_token2_value => l_vendor_name);
3955 x_return_status := Okl_Api.G_RET_STS_ERROR;
3956 END IF;
3957 END IF;
3958
3959 END LOOP;
3960
3961 IF (l_pth_dtl_present_yn = 'N') THEN
3962
3963 IF (pth_rec.passthru_term = 'BASE') THEN
3964 Okl_Api.set_message(
3965 p_app_name => G_APP_NAME,
3966 p_msg_name => 'OKL_QA_PTH_BASE_NO_DTL',
3967 p_token1 => 'LINE',
3968 p_token1_value => pth_rec.line_style||'/'||pth_rec.name
3969 );
3970 x_return_status := Okl_Api.G_RET_STS_ERROR;
3971
3972 ELSIF (pth_rec.passthru_term = 'EVERGREEN') THEN
3973 Okl_Api.set_message(
3974 p_app_name => G_APP_NAME,
3975 p_msg_name => 'OKL_QA_PTH_EVGN_NO_DTL',
3976 p_token1 => 'LINE',
3977 p_token1_value => pth_rec.line_style||'/'||pth_rec.name
3978 );
3979 x_return_status := Okl_Api.G_RET_STS_ERROR;
3980 END IF;
3981
3982 END IF;
3983
3984 IF (l_pct_sum > 100) THEN
3985
3986 IF (pth_rec.passthru_term = 'BASE') THEN
3987 Okl_Api.set_message(
3988 p_app_name => G_APP_NAME,
3989 p_msg_name => 'OKL_QA_BASE_PERCENT_SUM',
3990 p_token1 => 'LINE',
3991 p_token1_value => pth_rec.line_style||'/'||pth_rec.name
3992 );
3993 x_return_status := Okl_Api.G_RET_STS_ERROR;
3994
3995 ELSIF (pth_rec.passthru_term = 'EVERGREEN') THEN
3996 Okl_Api.set_message(
3997 p_app_name => G_APP_NAME,
3998 p_msg_name => 'OKL_QA_EVGN_PERCENT_SUM',
3999 p_token1 => 'LINE',
4000 p_token1_value => pth_rec.line_style||'/'||pth_rec.name
4001 );
4002 x_return_status := Okl_Api.G_RET_STS_ERROR;
4003 END IF;
4004
4005 END IF;
4006 -- Bug# 4350255: end
4007
4008 END LOOP;
4009 --END IF;
4010
4011 EXCEPTION
4012
4013 WHEN OTHERS THEN
4014 -- store SQL error message on message stack
4015 Okl_Api.SET_MESSAGE(
4016 p_app_name => G_APP_NAME,
4017 p_msg_name => G_UNEXPECTED_ERROR,
4018 p_token1 => G_SQLCODE_TOKEN,
4019 p_token1_value => SQLCODE,
4020 p_token2 => G_SQLERRM_TOKEN,
4021 p_token2_value => SQLERRM);
4022 -- notify caller of an error as UNEXPETED error
4023
4024 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
4025
4026 END check_fee_service_ast_pth;
4027
4028
4029 -- Start of comments
4030 --
4031 -- Procedure Name : check_advance_rentals
4032 -- Description :
4033 -- Business Rules :
4034 -- Parameters :
4035 -- Version : 1.0
4036 -- End of comments
4037
4038 PROCEDURE check_advanced_rentals(
4039 x_return_status OUT NOCOPY VARCHAR2,
4040 p_chr_id IN NUMBER
4041 ) IS
4042
4043 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
4044 l_dummy VARCHAR2(1) := '?';
4045 l_count NUMBER := 0;
4046 l_row_notfound BOOLEAN;
4047 l_token VARCHAR2(2000);
4048
4049
4050 CURSOR l_contract_name ( n VARCHAR2 ) IS
4051 SELECT COUNT(*) cnt
4052 FROM okc_k_headers_v WHERE contract_number = n;
4053 l_cn l_contract_name%ROWTYPE;
4054
4055
4056 l_hdr l_hdr_csr%ROWTYPE;
4057 l_txl l_txl_csr%ROWTYPE;
4058 l_txd l_txd_csr%ROWTYPE;
4059 l_itm l_itms_csr%ROWTYPE;
4060 l_struct_rec l_struct_csr%ROWTYPE;
4061 l_structure NUMBER;
4062 l_rl_rec1 l_rl_csr1%ROWTYPE;
4063 i NUMBER;
4064
4065
4066 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
4067 l_supp_rec supp_csr%ROWTYPE;
4068 l_lne l_lne_csr%ROWTYPE;
4069 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
4070 l_strm_name_rec strm_name_csr%ROWTYPE;
4071
4072 l_inflow_defined_yn VARCHAR2(1);
4073 l_outflow_defined_yn VARCHAR2(1);
4074
4075 BEGIN
4076
4077 -- initialize return status
4078 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
4079
4080 FOR l_hdrrl_rec IN l_hdrrl_csr ( 'LALEVL', 'LASLH', p_chr_id )
4081 LOOP
4082
4083 OPEN strm_name_csr ( l_hdrrl_rec.object1_id1 );
4084 FETCH strm_name_csr INTO l_strm_name_rec;
4085 IF strm_name_csr%NOTFOUND THEN
4086 CLOSE strm_name_csr;
4087 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
4088 END IF;
4089 CLOSE strm_name_csr;
4090
4091 --Bug#3931587
4092 --If ( l_strm_name_rec.name = 'ADVANCED RENTALS' ) Then
4093 IF ( l_strm_name_rec.stream_type_purpose = 'ADVANCE_RENT' ) THEN
4094
4095 Okl_Api.set_message(
4096 p_app_name => G_APP_NAME,
4097 p_msg_name => 'OKL_QA_NOSUP_ADVRENTS',
4098 p_token1 => 'line',
4099 p_token1_value => l_lne.name);
4100 x_return_status := Okl_Api.G_RET_STS_ERROR;
4101 RETURN;
4102
4103 END IF;
4104
4105 END LOOP;
4106
4107 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
4108 Okl_Api.set_message(
4109 p_app_name => G_APP_NAME,
4110 p_msg_name => G_QA_SUCCESS);
4111 END IF;
4112
4113
4114 EXCEPTION
4115
4116 WHEN G_EXCEPTION_HALT_VALIDATION THEN
4117 -- no processing necessary; validation can continue with next column
4118 IF l_rl_csr1%ISOPEN THEN
4119 CLOSE l_rl_csr1;
4120 END IF;
4121 WHEN OTHERS THEN
4122 -- store SQL error message on message stack
4123 Okl_Api.SET_MESSAGE(
4124 p_app_name => G_APP_NAME,
4125 p_msg_name => G_UNEXPECTED_ERROR,
4126 p_token1 => G_SQLCODE_TOKEN,
4127 p_token1_value => SQLCODE,
4128 p_token2 => G_SQLERRM_TOKEN,
4129 p_token2_value => SQLERRM);
4130 -- notify caller of an error as UNEXPETED error
4131 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
4132 -- verify that cursor was closed
4133 IF l_lne_csr%ISOPEN THEN
4134 CLOSE l_lne_csr;
4135 END IF;
4136 IF l_hdr_csr%ISOPEN THEN
4137 CLOSE l_hdr_csr;
4138 END IF;
4139 IF l_txl_csr%ISOPEN THEN
4140 CLOSE l_txl_csr;
4141 END IF;
4142
4143 END check_advanced_rentals;
4144
4145 -- Start of comments
4146 --
4147 -- Procedure Name : check_est_prop_tax
4148 -- Description : Check LASLH record for each asset line and raise error
4149 -- based on existence of payment streams of purpose code
4150 -- 'ESTIMATED_PROPERTY_TAX'
4151 -- Business Rules :
4152 -- Parameters :
4153 -- Version : 1.0
4154 -- End of comments
4155
4156 PROCEDURE check_est_prop_tax(
4157 x_return_status OUT NOCOPY VARCHAR2,
4158 p_chr_id IN NUMBER
4159 ) IS
4160
4161 CURSOR l_lne_csr(ltycode VARCHAR2, chrid OKL_K_HEADERS.KHR_ID%TYPE) IS
4162 SELECT kle.id,
4163 kle.name
4164 FROM OKC_K_LINES_V kle,
4165 OKC_LINE_STYLES_B ls,
4166 OKC_STATUSES_B sts
4167 WHERE kle.lse_id = ls.id
4168 AND ls.lty_code = ltycode
4169 AND kle.dnz_chr_id = chrid
4170 AND sts.code = kle.sts_code
4171 AND sts.ste_code NOT IN ( 'HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
4172
4173 CURSOR l_assetrl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
4174 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
4175 chrId NUMBER,
4176 cleId NUMBER) IS
4177 SELECT crl.RULE_INFORMATION1,
4178 crl.RULE_INFORMATION3
4179 FROM OKC_RULE_GROUPS_B crg,
4180 OKC_RULES_B crl
4181 WHERE crl.rgp_id = crg.id
4182 AND crg.RGD_CODE = rgcode
4183 AND crl.RULE_INFORMATION_CATEGORY = rlcat
4184 AND crg.dnz_chr_id = chrId
4185 AND crg.cle_id = cleId;
4186
4187 CURSOR l_strm_asset_csr(rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
4188 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
4189 pmnt_strm_purpose OKL_STRM_TYPE_B.STREAM_TYPE_PURPOSE%TYPE,
4190 chrId NUMBER,
4191 cleId NUMBER) IS
4192 SELECT crl.id,
4193 crl.object1_id1
4194 FROM OKC_RULE_GROUPS_B crg,
4195 OKC_RULES_B crl,
4196 OKL_STRM_TYPE_B stty
4197 WHERE stty.id = TO_NUMBER(crl.object1_id1)
4198 AND stty.stream_type_purpose = pmnt_strm_purpose
4199 AND crl.rgp_id = crg.id
4200 AND crg.RGD_CODE = rgcode
4201 AND crl.RULE_INFORMATION_CATEGORY = rlcat
4202 AND crg.cle_id = cleId
4203 AND crg.dnz_chr_id = chrId;
4204
4205 CURSOR est_head_csr (p_chr_id NUMBER) IS
4206 SELECT 'Y'
4207 FROM okc_rule_groups_b rgp,
4208 okc_rules_b rule,
4209 okl_strm_type_b stty
4210 WHERE rgp.id = rule.rgp_id
4211 AND stty.id = TO_NUMBER(rule.object1_id1)
4212 AND rgp.rgd_code = 'LALEVL'
4213 AND rule.rule_information_category = 'LASLH'
4214 AND rgp.cle_id IS NULL
4215 AND stty.stream_type_purpose = 'ESTIMATED_PROPERTY_TAX'
4216 AND rgp.dnz_chr_id = p_chr_id;
4217
4218 l_est_head VARCHAR2(1);
4219
4220 l_assetrl_rec l_assetrl_csr%ROWTYPE;
4221 l_strm_asset_rec l_strm_asset_csr%ROWTYPE;
4222 l_rule_not_found BOOLEAN;
4223 l_fnd_rec fnd_csr%ROWTYPE;
4224 l_fnd_meaning FND_LOOKUPS.MEANING%TYPE;
4225 l_billtx_method FND_LOOKUPS.MEANING%TYPE;
4226
4227 BEGIN
4228
4229 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
4230
4231 OPEN fnd_csr('OKL_STREAM_TYPE_PURPOSE','ESTIMATED_PROPERTY_TAX');
4232 FETCH fnd_csr INTO l_fnd_rec;
4233 CLOSE fnd_csr;
4234 l_fnd_meaning := l_fnd_rec.meaning;
4235
4236 -- Fix Bug 4088346
4237 l_est_head := '?';
4238 OPEN est_head_csr(p_chr_id);
4239 FETCH est_head_csr INTO l_est_head;
4240 CLOSE est_head_csr;
4241
4242 IF (l_est_head = 'Y') THEN
4243 Okl_Api.set_message(
4244 p_app_name => G_APP_NAME,
4245 p_msg_name => 'OKL_QA_EST_HEAD',
4246 p_token1 => 'PURPOSE_DESC',
4247 p_token1_value => l_fnd_meaning);
4248 x_return_status := Okl_Api.G_RET_STS_ERROR;
4249 END IF;
4250 -- Fix Bug 4088346
4251
4252 FOR l_lne_rec IN l_lne_csr('FREE_FORM1', p_chr_id)
4253 LOOP
4254
4255 l_assetrl_rec := NULL;
4256 OPEN l_assetrl_csr('LAASTX','LAPRTX', p_chr_id, l_lne_rec.id);
4257 FETCH l_assetrl_csr INTO l_assetrl_rec;
4258 l_rule_not_found := l_assetrl_csr%NOTFOUND;
4259 CLOSE l_assetrl_csr;
4260
4261 IF (l_assetrl_rec.RULE_INFORMATION1 = 'Y'
4262 AND (l_assetrl_rec.RULE_INFORMATION3 = 'ESTIMATED'
4263 OR l_assetrl_rec.RULE_INFORMATION3 = 'ESTIMATED_AND_ACTUAL') ) THEN
4264 OPEN l_strm_asset_csr('LALEVL','LASLH','ESTIMATED_PROPERTY_TAX',p_chr_id, l_lne_rec.id);
4265 FETCH l_strm_asset_csr INTO l_strm_asset_rec;
4266 IF (l_strm_asset_csr%NOTFOUND) THEN
4267 Okl_Api.set_message(
4268 p_app_name => G_APP_NAME,
4269 p_msg_name => 'OKL_QA_EST_PROPTAX1',
4270 p_token1 => 'ASSET_NUM',
4271 p_token1_value => l_lne_rec.name,
4272 p_token2 => 'PURPOSE_DESC',
4273 p_token2_value => l_fnd_meaning);
4274 x_return_status := Okl_Api.G_RET_STS_ERROR;
4275 END IF;
4276 CLOSE l_strm_asset_csr;
4277 ELSIF (l_rule_not_found OR l_assetrl_rec.RULE_INFORMATION1 = 'N') THEN
4278 OPEN l_strm_asset_csr('LALEVL','LASLH','ESTIMATED_PROPERTY_TAX',p_chr_id, l_lne_rec.id);
4279 FETCH l_strm_asset_csr INTO l_strm_asset_rec;
4280 IF (l_strm_asset_csr%FOUND) THEN
4281 Okl_Api.set_message(
4282 p_app_name => G_APP_NAME,
4283 p_msg_name => 'OKL_QA_EST_PROPTAX2',
4284 p_token1 => 'ASSET_NUM',
4285 p_token1_value => l_lne_rec.name,
4286 p_token2 => 'PURPOSE_DESC',
4287 p_token2_value => l_fnd_meaning);
4288 x_return_status := Okl_Api.G_RET_STS_ERROR;
4289 END IF;
4290 CLOSE l_strm_asset_csr;
4291 ELSIF ( l_assetrl_rec.RULE_INFORMATION1 = 'Y'
4292 AND (l_assetrl_rec.RULE_INFORMATION3 IS NULL OR
4293 l_assetrl_rec.RULE_INFORMATION3 = 'ACTUAL' OR
4294 l_assetrl_rec.RULE_INFORMATION3 = 'NONE') ) THEN
4295 OPEN l_strm_asset_csr('LALEVL','LASLH','ESTIMATED_PROPERTY_TAX',p_chr_id, l_lne_rec.id);
4296 FETCH l_strm_asset_csr INTO l_strm_asset_rec;
4297 IF (l_strm_asset_csr%FOUND) THEN
4298 IF ( l_assetrl_rec.RULE_INFORMATION3 IS NOT NULL) THEN
4299 OPEN fnd_csr('OKL_PROP_TAX_BILL_METHOD',l_assetrl_rec.RULE_INFORMATION3);
4300 FETCH fnd_csr INTO l_fnd_rec;
4301 CLOSE fnd_csr;
4302 l_billtx_method := l_fnd_rec.meaning;
4303 ELSE
4304 l_billtx_method := ' ';
4305 END IF;
4306 Okl_Api.set_message(
4307 p_app_name => G_APP_NAME,
4308 p_msg_name => 'OKL_QA_EST_PROPTAX3',
4309 p_token1 => 'ASSET_NUM',
4310 p_token1_value => l_lne_rec.name,
4311 p_token2 => 'PURPOSE_DESC',
4312 p_token2_value => l_fnd_meaning,
4313 p_token3 => 'BILL_TAX',
4314 p_token3_value => l_billtx_method);
4315 x_return_status := Okl_Api.G_RET_STS_ERROR;
4316 END IF;
4317 CLOSE l_strm_asset_csr;
4318 END IF;
4319
4320 END LOOP;
4321
4322 EXCEPTION
4323
4324 WHEN OTHERS THEN
4325 -- store SQL error message on message stack
4326 Okl_Api.SET_MESSAGE(
4327 p_app_name => G_APP_NAME,
4328 p_msg_name => G_UNEXPECTED_ERROR,
4329 p_token1 => G_SQLCODE_TOKEN,
4330 p_token1_value => SQLCODE,
4331 p_token2 => G_SQLERRM_TOKEN,
4332 p_token2_value => SQLERRM);
4333 -- notify caller of an error as UNEXPETED error
4334
4335 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
4336
4337 -- verify that cursor was closed
4338 IF l_lne_csr%ISOPEN THEN
4339 CLOSE l_lne_csr;
4340 END IF;
4341 IF l_assetrl_csr%ISOPEN THEN
4342 CLOSE l_assetrl_csr;
4343 END IF;
4344 IF l_strm_asset_csr%ISOPEN THEN
4345 CLOSE l_strm_asset_csr;
4346 END IF;
4347
4348 END check_est_prop_tax;
4349
4350 -- Start of comments
4351 --
4352 -- Procedure Name : check_stub_payment
4353 -- Description : Check LASLL records and raise error if it only contains
4354 -- Stub. There must be atleast one actual payment defined.
4355 -- Business Rules :
4356 -- Parameters :
4357 -- Version : 1.0
4358 -- End of comments
4359
4360 PROCEDURE check_stub_payment(
4361 x_return_status OUT NOCOPY VARCHAR2,
4362 p_chr_id IN NUMBER
4363 ) IS
4364
4365 --Bug#3931587
4366 CURSOR stream_csr (p_slh_id VARCHAR2) IS
4367 SELECT strm.stream_type_purpose
4368 --SELECT strm.name
4369 FROM okl_strm_type_v strm,
4370 okc_rules_b rule
4371 WHERE rule.id = p_slh_id
4372 AND rule.rule_information_category = 'LASLH'
4373 AND rule.object1_id1 = strm.id;
4374
4375 CURSOR hdr_stub_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
4376 SELECT
4377 'Y' only_stub,
4378 rule.object2_id1
4379 FROM okc_rules_b rule,
4380 okc_rule_groups_b rgp
4381 WHERE rgp.id = rule.rgp_id
4382 AND rgp.rgd_code = 'LALEVL'
4383 AND rgp.chr_id = p_chr_id
4384 AND rgp.dnz_chr_id = rgp.chr_id
4385 AND rgp.cle_id IS NULL
4386 AND rule.rule_information7 IS NOT NULL
4387 AND NOT EXISTS (
4388 SELECT 'Y'
4389 FROM okc_rules_b rule2
4390 WHERE rule2.rule_information3 IS NOT NULL
4391 AND rule2.rgp_id = rgp.id
4392 AND rule2.object2_id1 = rule.object2_id1
4393 );
4394
4395 --Bug#3877032
4396 CURSOR line_stub_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
4397 SELECT style.lty_code,
4398 style.name,
4399 rule.object2_id1,
4400 'Y' stub_only
4401 FROM okc_rules_b rule,
4402 okc_rule_groups_b rgp,
4403 okc_k_lines_b line,
4404 okc_line_styles_v style,
4405 okc_statuses_b sts
4406 WHERE rgp.id = rule.rgp_id
4407 AND rgp.rgd_code = 'LALEVL'
4408 AND rgp.dnz_chr_id = p_chr_id
4409 AND rgp.cle_id = line.id
4410 AND line.lse_id = style.id
4411 AND line.sts_code = sts.code
4412 AND sts.ste_code NOT IN ( 'HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED')
4413 AND rule.rule_information7 IS NOT NULL
4414 AND NOT EXISTS (
4415 SELECT 'Y'
4416 FROM okc_rules_b rule2
4417 WHERE rule2.rule_information3 IS NOT NULL
4418 AND rule2.rgp_id = rgp.id
4419 AND rule2.object2_id1 = rule.object2_id1
4420 );
4421
4422 l_strm_type okl_strm_type_v.name%TYPE;
4423
4424 BEGIN
4425
4426 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
4427 FOR hdr_stub_rec IN hdr_stub_csr (p_chr_id)
4428 LOOP
4429 IF (hdr_stub_rec.only_stub = 'Y') THEN
4430
4431 OPEN stream_csr (hdr_stub_rec.object2_id1);
4432 FETCH stream_csr INTO l_strm_type;
4433 CLOSE stream_csr;
4434
4435 --Bug#3931587
4436 --Bug#3925464
4437 --IF (l_strm_type <> 'UNSCHEDULED_PRINCIPAL_PAYMENT') Then
4438 -- Bug 4887014
4439 IF (l_strm_type NOT IN ( 'UNSCHEDULED_PRINCIPAL_PAYMENT',
4440 'UNSCHEDULED_LOAN_PAYMENT' ) ) THEN
4441 Okl_Api.set_message(
4442 p_app_name => G_APP_NAME,
4443 p_msg_name => 'OKL_QA_HDR_STUB_ONLY',
4444 p_token1 => 'STREAM_TYPE',
4445 p_token1_value => l_strm_type);
4446 x_return_status := Okl_Api.G_RET_STS_ERROR;
4447 END IF;
4448 END IF;
4449
4450 END LOOP;
4451
4452 -- Now check line
4453 FOR line_stub_rec IN line_stub_csr(p_chr_id)
4454 LOOP
4455 IF (line_stub_rec.stub_only = 'Y') THEN
4456 OPEN stream_csr (line_stub_rec.object2_id1);
4457 FETCH stream_csr INTO l_strm_type;
4458 CLOSE stream_csr;
4459
4460 --Bug#3931587
4461 --Bug#3925464
4462 --IF (l_strm_type <> 'UNSCHEDULED_PRINCIPAL_PAYMENT') Then
4463 -- Bug 4887014
4464 IF (l_strm_type NOT IN ( 'UNSCHEDULED_PRINCIPAL_PAYMENT',
4465 'UNSCHEDULED_LOAN_PAYMENT' ) ) THEN
4466 Okl_Api.set_message(
4467 p_app_name => G_APP_NAME,
4468 p_msg_name => 'OKL_QA_LINE_STUB_ONLY',
4469 p_token1 => 'LINE_TYPE',
4470 p_token1_value => line_stub_rec.name,
4471 p_token2 => 'STREAM_TYPE',
4472 p_token2_value => l_strm_type);
4473 x_return_status := Okl_Api.G_RET_STS_ERROR;
4474 END IF;
4475
4476 END IF;
4477
4478 END LOOP;
4479
4480 EXCEPTION
4481
4482 WHEN OTHERS THEN
4483 -- store SQL error message on message stack
4484 Okl_Api.SET_MESSAGE(
4485 p_app_name => G_APP_NAME,
4486 p_msg_name => G_UNEXPECTED_ERROR,
4487 p_token1 => G_SQLCODE_TOKEN,
4488 p_token1_value => SQLCODE,
4489 p_token2 => G_SQLERRM_TOKEN,
4490 p_token2_value => SQLERRM);
4491 -- notify caller of an error as UNEXPETED error
4492
4493 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
4494
4495 END check_stub_payment;
4496
4497 -- Start of comments
4498 --
4499 -- Procedure Name : check_serial_asset
4500 -- Description : Check for serialized item attached to asset
4501 -- Item qty must match the total serial numbers
4502 -- Business Rules :
4503 -- Parameters :
4504 -- Version : 1.0
4505 -- End of comments
4506
4507 PROCEDURE check_serial_asset(
4508 x_return_status OUT NOCOPY VARCHAR2,
4509 p_chr_id IN NUMBER
4510 ) IS
4511
4512 --Bug#3877032
4513 CURSOR serial_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
4514 SELECT top.name,
4515 top.id top_id,
4516 item.id item_id,
4517 kitem.object1_id1,
4518 kitem.number_of_items,
4519 mtl.description,
4520 mtl.serial_number_control_code,
4521 --Bug# 16098797
4522 top.orig_system_id1,
4523 --Bug# 16681373
4524 NVL(top_kle.re_lease_yn,'N') re_lease_yn
4525 FROM okc_k_lines_v top,
4526 okl_k_lines top_kle,
4527 okc_k_lines_b item,
4528 okc_line_styles_b item_style,
4529 okc_line_styles_b top_style,
4530 okc_k_items kitem,
4531 mtl_system_items mtl
4532 WHERE top.dnz_chr_id = p_chr_id
4533 AND top.lse_id = top_style.id
4534 AND top_style.lty_code = 'FREE_FORM1'
4535 AND top.id = item.cle_id
4536 AND item.id = kitem.cle_id
4537 AND item.dnz_chr_id = top.dnz_chr_id
4538 AND item.dnz_chr_id = kitem.dnz_chr_id
4539 AND kitem.jtot_object1_code = 'OKX_SYSITEM'
4540 AND mtl.inventory_item_id = kitem.object1_id1
4541 AND TO_CHAR(mtl.organization_id) = kitem.object1_id2
4542 AND item.lse_id = item_style.id
4543 AND item_style.lty_code = 'ITEM'
4544 --Bug# 16098797
4545 AND top.sts_code <> 'ABANDONED'
4546 AND top_kle.id = top.id;
4547
4548 --Bug#3877032
4549 CURSOR ib_csr (p_top_cle_id OKC_K_LINES_B.ID%TYPE) IS
4550 SELECT COUNT(inst.serial_number) no_srl
4551 FROM okc_k_lines_b ib,
4552 okc_k_lines_b f2,
4553 okc_line_styles_b style,
4554 okl_txl_itm_insts inst
4555 WHERE f2.cle_id = p_top_cle_id
4556 AND f2.lse_id = style.id
4557 AND f2.dnz_chr_id = p_chr_id
4558 AND ib.dnz_chr_id = p_chr_id
4559 AND style.lty_code = 'FREE_FORM2'
4560 AND f2.id = ib.cle_id
4561 AND ib.id = inst.kle_id
4562 --Bug# 16098797
4563 AND f2.sts_code <> 'ABANDONED';
4564
4565 --Bug# 16098797
4566 CURSOR new_ib_srl_csr (p_top_cle_id OKC_K_LINES_B.ID%TYPE) IS
4567 SELECT inst.serial_number
4568 FROM okc_k_lines_b ib,
4569 okc_k_lines_b f2,
4570 okc_line_styles_b style,
4571 okl_txl_itm_insts inst
4572 WHERE f2.cle_id = p_top_cle_id
4573 AND f2.lse_id = style.id
4574 AND f2.dnz_chr_id = p_chr_id
4575 AND ib.dnz_chr_id = p_chr_id
4576 AND style.lty_code = 'FREE_FORM2'
4577 AND f2.id = ib.cle_id
4578 AND ib.id = inst.kle_id
4579 AND f2.sts_code <> 'ABANDONED';
4580
4581 CURSOR srl_num_csr (p_serial_num IN VARCHAR2) IS
4582 SELECT serial_number
4583 FROM csi_item_instances
4584 WHERE serial_number = p_serial_num;
4585
4586 l_csi_srl_number csi_item_instances.serial_number%TYPE;
4587 l_chk_rebook_chr VARCHAR2(1);
4588 l_chk_new_chr VARCHAR2(1);
4589 --Bug# 16098797
4590
4591 BEGIN
4592 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
4593
4594 --Bug# 16098797
4595 l_chk_rebook_chr := OKL_LLA_UTIL_PVT.check_rebook_contract(p_chr_id => p_chr_id);
4596 l_chk_new_chr := OKL_LLA_UTIL_PVT.check_new_contract(p_chr_id => p_chr_id);
4597
4598 FOR serial_rec IN serial_csr (p_chr_id)
4599 LOOP
4600 IF (serial_rec.serial_number_control_code <> 1) THEN -- serialized item
4601 FOR ib_rec IN ib_csr (serial_rec.top_id)
4602 LOOP
4603 IF (ib_rec.no_srl <> serial_rec.number_of_items) THEN
4604 --Modified by bkatraga for bug 9770391
4605 Okl_Api.set_message(
4606 G_APP_NAME,
4607 'OKL_QA_SRL_ITEM_ERROR',
4608 'ASSET_NUM',
4609 serial_rec.name
4610 );
4611 x_return_status := Okl_Api.G_RET_STS_ERROR;
4612 END IF;
4613 END LOOP;
4614
4615 --Bug# 16098797: Check Serial Number for New contracts or New assets added during online rebook
4616 --Bug# 16681373: Do not validate Serial Numbers for Re-lease assets on new or rebook contracts
4617 IF ((NVL(l_chk_rebook_chr,OKL_API.G_MISS_CHAR) = OKL_API.G_TRUE AND serial_rec.orig_system_id1 IS NULL)
4618 OR
4619 (NVL(l_chk_new_chr,OKL_API.G_MISS_CHAR) = OKL_API.G_TRUE)
4620 )
4621 AND (serial_rec.re_lease_yn = 'N') THEN
4622
4623 FOR new_ib_srl_rec IN new_ib_srl_csr (serial_rec.top_id)
4624 LOOP
4625 l_csi_srl_number := NULL;
4626 OPEN srl_num_csr (p_serial_num => new_ib_srl_rec.serial_number);
4627 FETCH srl_num_csr INTO l_csi_srl_number;
4628 CLOSE srl_num_csr;
4629
4630 IF l_csi_srl_number IS NOT NULL AND l_csi_srl_number = new_ib_srl_rec.serial_number THEN
4631 OKL_API.Set_Message(p_app_name => G_APP_NAME,
4632 p_msg_name => 'OKL_LLA_SERIAL_NUM_DUP',
4633 p_token1 => OKL_API.G_COL_NAME_TOKEN,
4634 p_token1_value => l_csi_srl_number);
4635 x_return_status := OKL_API.G_RET_STS_ERROR;
4636 END IF;
4637 END LOOP;
4638
4639 END IF;
4640 --Bug# 16098797
4641
4642 END IF;
4643 END LOOP;
4644
4645 EXCEPTION
4646 WHEN OTHERS THEN
4647 -- store SQL error message on message stack
4648 Okl_Api.SET_MESSAGE(
4649 p_app_name => G_APP_NAME,
4650 p_msg_name => G_UNEXPECTED_ERROR,
4651 p_token1 => G_SQLCODE_TOKEN,
4652 p_token1_value => SQLCODE,
4653 p_token2 => G_SQLERRM_TOKEN,
4654 p_token2_value => SQLERRM);
4655 -- notify caller of an error as UNEXPETED error
4656
4657 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
4658
4659 END check_serial_asset;
4660
4661
4662 -- Start of comments
4663 -- Added by Durga Janaswamy, bug 6760186
4664 -- Procedure Name : check_ib_location
4665 -- Description : Match whether the install location in OLM is same as
4666 -- that of Install Base Instance for a given serial number of
4667 -- an asset and inventory item id.
4668 -- Business Rules :
4669 -- Parameters :
4670 -- Version : 1.0
4671 -- End of comments
4672 -- start
4673
4674
4675 PROCEDURE check_ib_location (
4676 x_return_status OUT NOCOPY VARCHAR2,
4677 p_chr_id IN NUMBER
4678 ) IS
4679
4680 CURSOR ib_line_csr(p_chr_id NUMBER) IS
4681 SELECT cle.id,
4682 cle.cle_id
4683 FROM okc_k_lines_b cle,
4684 okc_statuses_b sts
4685 WHERE cle.lse_id = G_IB_LINE_LTY_ID
4686 AND cle.dnz_chr_id = p_chr_id
4687 AND cle.sts_code = sts.code
4688 AND sts.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED');
4689
4690
4691 CURSOR okl_cimv_csr (p_cle_id NUMBER) IS
4692 SELECT
4693 cim.id,
4694 cim.object1_id1,
4695 cim.object1_id2,
4696 cim.jtot_object1_code,
4697 cim.number_of_items
4698 FROM okc_k_items_v cim
4699 WHERE cle_id = p_cle_id;
4700
4701
4702 CURSOR okl_iipv_csr (p_kle_id NUMBER) IS
4703 SELECT id,
4704 kle_id,
4705 tal_type,
4706 instance_number_ib,
4707 object_id1_new, -- party_site_use_id
4708 object_id2_new,
4709 jtot_object_code_new,
4710 inventory_org_id,
4711 serial_number,
4712 mfg_serial_number_yn,
4713 inventory_item_id,
4714 inv_master_org_id
4715 FROM okl_txl_itm_insts iti
4716 WHERE iti.kle_id = p_kle_id
4717 AND iti.tal_type = G_TRX_LINE_TYPE_BOOK
4718 AND EXISTS (SELECT '1' FROM okl_trx_assets
4719 WHERE okl_trx_assets.tas_type = G_TRX_LINE_TYPE_BOOK
4720 AND okl_trx_assets.tsu_code = G_TSU_CODE_ENTERED
4721 AND okl_trx_assets.id = iti.tas_id);
4722
4723
4724 CURSOR serialized_csr (p_inv_item_id NUMBER, p_inventory_org_id NUMBER) IS
4725 SELECT 'X'
4726 FROM mtl_system_items mtl
4727 WHERE mtl.inventory_item_id = p_inv_item_id
4728 AND mtl.organization_id = p_inventory_org_id
4729 AND mtl.serial_number_control_code in (2,5,6);
4730
4731
4732 CURSOR okl_csi_ib_csr (p_serial_number VARCHAR2, p_inventory_item_id NUMBER,
4733 p_inv_master_organization_id NUMBER, p_contract_start_date DATE) IS
4734 SELECT instance_id,
4735 install_location_id,
4736 install_location_type_code
4737 FROM csi_item_instances inst,
4738 csi_instance_statuses stat
4739 WHERE inst.serial_number like p_serial_number -- nullable col
4740 AND inst.inventory_item_id = p_inventory_item_id
4741 AND inst.inv_master_organization_id = p_inv_master_organization_id
4742 AND NVL (inst.active_end_date, (p_contract_start_date + 1)) > p_contract_start_date
4743 AND stat.instance_status_id = inst.instance_status_id
4744 AND NVL(stat.terminated_flag, 'N') <> 'Y';
4745
4746
4747 -- bug 6795295 changed name of cursor
4748 --CURSOR intall_location_csr (p_party_site_use_id NUMBER) IS
4749 CURSOR party_site_id_csr (p_party_site_use_id NUMBER) IS
4750 SELECT party_site_id
4751 FROM hz_party_site_uses
4752 WHERE party_site_use_id = p_party_site_use_id;
4753
4754 -- bug 6795295 changed name of cursor
4755 -- CURSOR location_csr (p_party_site_id NUMBER) IS
4756 CURSOR location_id_csr (p_party_site_id NUMBER) IS
4757 SELECT location_id
4758 FROM hz_party_sites
4759 WHERE PARTY_SITE_ID = p_party_site_id;
4760
4761
4762 CURSOR asset_num_csr(p_cle_id NUMBER) IS
4763 SELECT name
4764 FROM okc_k_lines_b cle1,
4765 okc_k_lines_tl cle_tl,
4766 okc_k_lines_b cle2
4767 WHERE cle_tl.id = cle2.id
4768 AND cle1.id = p_cle_id
4769 AND cle2.id = cle1.cle_id
4770 AND cle_tl.language = USERENV('LANG');
4771
4772
4773 CURSOR location_name_csr (p_location_id NUMBER) IS
4774 SELECT
4775 substr(arp_addr_label_pkg.format_address(null,l.address1,l.address2,l.address3,l.address4,l.city,l.county,
4776 l.state,l.province,l.postal_code,null,l.country,null,null,null,null,null,null,null,'n','n',80,1,1),1,80)
4777 FROM hz_locations l
4778 WHERE l.location_id = p_location_id;
4779
4780 CURSOR location_for_party_csr (p_party_site_id NUMBER) IS
4781 SELECT
4782 substr(arp_addr_label_pkg.format_address(null,l.address1,l.address2,l.address3,l.address4,l.city,l.county,
4783 l.state,l.province,l.postal_code,null,l.country,null,null,null,null,null,null,null,'n','n',80,1,1),1,80)
4784 FROM hz_locations l,
4785 hz_party_sites site
4786 WHERE site.party_site_id = p_party_site_id
4787 AND l.location_id = site.location_id;
4788
4789 CURSOR header_details_csr (p_chr_id NUMBER) IS
4790 SELECT h.start_date, mtl.master_organization_id
4791 FROM okc_k_headers_b h,
4792 mtl_parameters mtl
4793 WHERE h.id = p_chr_id
4794 AND mtl.organization_id = h.inv_organization_id;
4795
4796
4797 l_instance_id csi_item_instances.instance_id%TYPE;
4798 l_install_location_id csi_item_instances.install_location_id%TYPE;
4799 l_install_location_type_code csi_item_instances.install_location_type_code%TYPE;
4800 l_location_id hz_party_sites.location_id%TYPE;
4801 l_serial_number_control_code VARCHAR2(3);
4802 l_trx_line_type_book VARCHAR2(10);
4803 l_party_site_id hz_party_site_uses.party_site_id%TYPE;
4804 l_asset_num okc_k_lines_tl.name%TYPE;
4805 l_okl_location_name VARCHAR2(160);
4806 l_ib_location_name VARCHAR2(160);
4807 l_contract_start_date okc_k_headers_b.start_date%TYPE;
4808 l_inv_organization_id okc_k_headers_b.inv_organization_id%TYPE;
4809
4810
4811 BEGIN
4812
4813 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
4814
4815 l_contract_start_date:= NULL;
4816 l_inv_organization_id := NULL;
4817
4818 OPEN header_details_csr (p_chr_id);
4819 FETCH header_details_csr INTO l_contract_start_date, l_inv_organization_id;
4820 CLOSE header_details_csr;
4821
4822
4823 FOR ib_line_rec IN ib_line_csr (p_chr_id)
4824 LOOP
4825
4826 FOR okl_cimv_rec IN okl_cimv_csr (ib_line_rec.id)
4827 LOOP
4828
4829 IF (okl_cimv_rec.jtot_object1_code IS NOT NULL) AND
4830 (okl_cimv_rec.object1_id1) IS NOT NULL THEN
4831 --ib instance is already plugged in (do nothing)
4832 NULL;
4833
4834 ELSIF (okl_cimv_csr%NOTFOUND) OR
4835 (okl_cimv_rec.jtot_object1_code IS NULL OR
4836 okl_cimv_rec.object1_id1 IS NULL) THEN
4837 -- Call get_iipv_rec
4838
4839 FOR okl_iipv_rec IN okl_iipv_csr (ib_line_rec.id)
4840 LOOP
4841 l_serial_number_control_code := NULL;
4842
4843 OPEN serialized_csr (okl_iipv_rec.inventory_item_id, okl_iipv_rec.inventory_org_id);
4844 FETCH serialized_csr INTO l_serial_number_control_code;
4845 CLOSE serialized_csr;
4846
4847 IF l_serial_number_control_code <> 'X' THEN
4848 NULL; -- not serialized
4849
4850 ELSIF ( okl_iipv_rec.serial_number IS NULL) THEN
4851 NULL; -- no serial_number is entered
4852
4853 ELSIF (okl_iipv_rec.object_id1_new IS NULL) THEN
4854 NULL; -- no install location is entered
4855
4856 ELSE
4857 l_instance_id := NULL;
4858 l_install_location_id := NULL;
4859 l_install_location_type_code := NULL;
4860
4861 OPEN okl_csi_ib_csr (okl_iipv_rec.serial_number,
4862 okl_iipv_rec.inventory_item_id,
4863 l_inv_organization_id,
4864 l_contract_start_date );
4865 FETCH okl_csi_ib_csr INTO l_instance_id,
4866 l_install_location_id, l_install_location_type_code;
4867 CLOSE okl_csi_ib_csr;
4868
4869 IF (l_instance_id IS NULL) THEN
4870 NULL; -- no ib instance
4871
4872 ELSIF l_install_location_type_code = 'HZ_PARTY_SITES' THEN
4873 l_party_site_id := NULL;
4874 OPEN party_site_id_csr (okl_iipv_rec.object_id1_new);
4875 FETCH party_site_id_csr INTO l_party_site_id;
4876 CLOSE party_site_id_csr;
4877
4878 IF l_install_location_id <> l_party_site_id THEN
4879 l_asset_num := NULL;
4880 OPEN asset_num_csr (ib_line_rec.cle_id);
4881 FETCH asset_num_csr into l_asset_num;
4882 CLOSE asset_num_csr;
4883
4884 l_okl_location_name := NULL;
4885 l_ib_location_name := NULL;
4886 OPEN location_for_party_csr (l_party_site_id);
4887 FETCH location_for_party_csr INTO l_okl_location_name;
4888 CLOSE location_for_party_csr;
4889
4890 OPEN location_for_party_csr (l_install_location_id);
4891 FETCH location_for_party_csr INTO l_ib_location_name;
4892 CLOSE location_for_party_csr;
4893
4894 Okl_Api.set_message(
4895 p_app_name => G_APP_NAME,
4896 p_msg_name => 'OKL_QA_IB_LOCATION_ERROR',
4897 p_token1 => 'ASSET_NUM',
4898 p_token1_value => l_asset_num,
4899 p_token2 => 'SERIAL_NUM',
4900 p_token2_value => okl_iipv_rec.serial_number,
4901 p_token3 => 'OKL_INSTALL_SITE',
4902 p_token3_value => l_okl_location_name,
4903 p_token4 => 'IB_INSTALL_SITE',
4904 p_token4_value => l_ib_location_name
4905 );
4906 x_return_status := Okl_Api.G_RET_STS_ERROR;
4907 END IF;
4908
4909 ELSIF l_install_location_type_code = 'HZ_LOCATIONS' THEN
4910 l_party_site_id := NULL;
4911 l_location_id := NULL;
4912 OPEN party_site_id_csr (okl_iipv_rec.object_id1_new);
4913 FETCH party_site_id_csr INTO l_party_site_id;
4914 CLOSE party_site_id_csr;
4915
4916 OPEN location_id_csr (l_party_site_id);
4917 FETCH location_id_csr INTO l_location_id;
4918 CLOSE location_id_csr;
4919
4920 IF l_install_location_id <> l_location_id THEN
4921 l_asset_num := NULL;
4922 OPEN asset_num_csr (ib_line_rec.cle_id);
4923 FETCH asset_num_csr into l_asset_num;
4924 CLOSE asset_num_csr;
4925
4926 l_okl_location_name := NULL;
4927 l_ib_location_name := NULL;
4928 OPEN location_name_csr (l_location_id);
4929 FETCH location_name_csr INTO l_okl_location_name;
4930 CLOSE location_name_csr;
4931
4932 OPEN location_name_csr (l_install_location_id);
4933 FETCH location_name_csr INTO l_ib_location_name;
4934 CLOSE location_name_csr;
4935
4936 Okl_Api.set_message(
4937 p_app_name => G_APP_NAME,
4938 p_msg_name => 'OKL_QA_IB_LOCATION_ERROR',
4939 p_token1 => 'ASSET_NUM',
4940 p_token1_value => l_asset_num,
4941 p_token2 => 'SERIAL_NUM',
4942 p_token2_value => okl_iipv_rec.serial_number,
4943 p_token3 => 'OKL_INSTALL_SITE',
4944 p_token3_value => l_okl_location_name,
4945 p_token4 => 'IB_INSTALL_SITE',
4946 p_token4_value => l_ib_location_name
4947 );
4948 x_return_status := Okl_Api.G_RET_STS_ERROR;
4949 END IF;
4950 END IF;
4951 END IF;
4952
4953 END LOOP;
4954 END IF;
4955 END LOOP;
4956 END LOOP;
4957
4958
4959 EXCEPTION
4960 WHEN OTHERS THEN
4961
4962 IF ib_line_csr%ISOPEN THEN
4963 CLOSE ib_line_csr;
4964 END IF;
4965
4966 IF okl_cimv_csr%ISOPEN THEN
4967 CLOSE okl_cimv_csr;
4968 END IF;
4969
4970
4971 IF okl_iipv_csr%ISOPEN THEN
4972 CLOSE okl_iipv_csr;
4973 END IF;
4974
4975
4976 IF serialized_csr%ISOPEN THEN
4977 CLOSE serialized_csr;
4978 END IF;
4979
4980
4981 IF okl_csi_ib_csr%ISOPEN THEN
4982 CLOSE okl_csi_ib_csr;
4983 END IF;
4984
4985
4986 IF party_site_id_csr%ISOPEN THEN
4987 CLOSE party_site_id_csr;
4988 END IF;
4989
4990
4991 IF location_id_csr%ISOPEN THEN
4992 CLOSE location_id_csr;
4993 END IF;
4994
4995 IF asset_num_csr%ISOPEN THEN
4996 CLOSE asset_num_csr;
4997 END IF;
4998
4999 IF location_name_csr%ISOPEN THEN
5000 CLOSE location_name_csr;
5001 END IF;
5002
5003 IF location_for_party_csr%ISOPEN THEN
5004 CLOSE location_for_party_csr;
5005 END IF;
5006
5007 IF header_details_csr%ISOPEN THEN
5008 CLOSE header_details_csr;
5009 END IF;
5010
5011 -- store SQL error message on message stack
5012 Okl_Api.SET_MESSAGE(
5013 p_app_name => G_APP_NAME,
5014 p_msg_name => G_UNEXPECTED_ERROR,
5015 p_token1 => G_SQLCODE_TOKEN,
5016 p_token1_value => SQLCODE,
5017 p_token2 => G_SQLERRM_TOKEN,
5018 p_token2_value => SQLERRM);
5019 -- notify caller of an error as UNEXPETED error
5020
5021 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
5022
5023 END check_ib_location;
5024 -- end
5025
5026 -- Start of comments
5027 --
5028 -- Procedure Name : check_lessee_as_vendor
5029 -- Description : Check the presence of lessee vendor mapping for
5030 -- LOAN-REVOLVING contracts only
5031 -- Business Rules :
5032 -- Parameters :
5033 -- Version : 1.0
5034 -- End of comments
5035
5036 PROCEDURE check_lessee_as_vendor(
5037 x_return_status OUT NOCOPY VARCHAR2,
5038 p_chr_id IN NUMBER
5039 ) IS
5040
5041 --Bug#3877032
5042 CURSOR con_type_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
5043 SELECT NVL(okc.orig_system_source_code,'X') orig_system_source_code,
5044 NVL(okl.deal_type,'X') deal_type
5045 --FROM okl_k_headers_full_v
5046 FROM okc_k_headers_b okc,
5047 okl_k_headers okl
5048 WHERE okc.id = p_chr_id
5049 AND okc.id = okl.id;
5050
5051 CURSOR check_vendor_csr (p_chr_id IN NUMBER) IS
5052 SELECT 'Y'
5053 FROM okl_lessee_as_vendors_uv
5054 WHERE dnz_chr_id = p_chr_id;
5055
5056 l_type OKL_K_HEADERS_FULL_V.DEAL_TYPE%TYPE;
5057 l_source OKL_K_HEADERS_FULL_V.ORIG_SYSTEM_SOURCE_CODE%TYPE;
5058 l_loan_yn VARCHAR2(1) := 'N';
5059 l_vendor_present VARCHAR2(1) := 'N';
5060
5061 BEGIN
5062 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
5063
5064 l_type := 'X';
5065 l_source := 'X';
5066 OPEN con_type_csr (p_chr_id);
5067 FETCH con_type_csr INTO l_source,
5068 l_type;
5069 CLOSE con_type_csr;
5070
5071 IF (l_type = 'LOAN-REVOLVING'
5072 AND
5073 l_source <> 'OKL_REBOOK') THEN
5074
5075 l_vendor_present := 'N';
5076 OPEN check_vendor_csr (p_chr_id);
5077 FETCH check_vendor_csr INTO l_vendor_present;
5078 CLOSE check_vendor_csr;
5079
5080 IF (l_vendor_present = 'N') THEN
5081 Okl_Api.set_message(
5082 p_app_name => G_APP_NAME,
5083 p_msg_name => 'OKL_QA_LESSEE_VENDOR'
5084 );
5085 x_return_status := Okl_Api.G_RET_STS_ERROR;
5086 END IF;
5087
5088 IF (NVL(Okl_Funding_Pvt.get_total_funded(p_chr_id), 0) <> 0) THEN
5089 Okl_Api.set_message(
5090 p_app_name => G_APP_NAME,
5091 p_msg_name => 'OKL_LA_OVERFUND_CHK_4RL'
5092 );
5093 x_return_status := Okl_Api.G_RET_STS_ERROR;
5094 END IF;
5095
5096 END IF; -- loan_yn
5097
5098 EXCEPTION
5099
5100 WHEN OTHERS THEN
5101 -- store SQL error message on message stack
5102 Okl_Api.SET_MESSAGE(
5103 p_app_name => G_APP_NAME,
5104 p_msg_name => G_UNEXPECTED_ERROR,
5105 p_token1 => G_SQLCODE_TOKEN,
5106 p_token1_value => SQLCODE,
5107 p_token2 => G_SQLERRM_TOKEN,
5108 p_token2_value => SQLERRM);
5109 -- notify caller of an error as UNEXPETED error
5110
5111 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
5112
5113 END check_lessee_as_vendor;
5114 -- Start of comments
5115 --
5116 -- Procedure Name : check_payment_period
5117 -- Description : Check payment periods for Financial Asset and Fee lines
5118 -- Consider lines which is not In-activated, terminated etc.
5119 -- Business Rules :
5120 -- Parameters :
5121 -- Version : 1.0
5122 -- End of comments
5123
5124 PROCEDURE check_payment_period(
5125 x_return_status OUT NOCOPY VARCHAR2,
5126 p_chr_id IN NUMBER
5127 ) IS
5128
5129 /*
5130 *CURSOR strm_profile_csr IS
5131 *SELECT fnd_profile.VALUE('OKL_STREAMS_GEN_PATH')
5132 *FROM dual;
5133 */
5134
5135 l_strm_profile VARCHAR2(50);
5136 lx_return_status VARCHAR2(1);
5137
5138 CURSOR c_fin_fee (p_khr_id OKC_K_HEADERS_B.ID%TYPE) IS
5139 SELECT cle.id,
5140 DECODE (lse.lty_code, 'FREE_FORM1', 'ASSET', 'FEE', 'FEE',
5141 'SOLD_SERVICE','SERVICE') line_type
5142 FROM okc_k_lines_b cle,
5143 okc_line_styles_b lse,
5144 okc_statuses_b sts
5145 WHERE cle.chr_id = p_khr_id
5146 AND cle.lse_id = lse.id
5147 AND cle.sts_code = sts.code
5148 AND sts.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED')
5149 AND lse.lty_code IN ('FREE_FORM1', 'FEE', 'SOLD_SERVICE');
5150
5151 CURSOR c_strm_sll (p_khr_id OKC_K_HEADERS_B.ID%TYPE,
5152 p_kle_id OKC_K_LINES_B.ID%TYPE) IS
5153 SELECT sll.rule_information2 start_date,
5154 SLL.rule_information3 periods,
5155 DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12) mpp,
5156 ( select STYT.NAME from OKL_STRM_TYPE_B STY ,OKL_STRM_TYPE_TL STYT where STY.ID = STYT.ID AND STYT.LANGUAGE = USERENV ( 'LANG' )
5157 AND to_number(SLH.OBJECT1_ID1) = STY.ID ) STREAM_TYPE
5158 --styt.name stream_type
5159 FROM okc_rules_b sll,
5160 okc_rules_b slh,
5161 okc_rule_groups_b rgp
5162 --okl_strm_type_b sty,
5163 --okl_strm_type_tl styt
5164 WHERE rgp.dnz_chr_id = p_khr_id
5165 AND rgp.cle_id = p_kle_id
5166 AND rgp.rgd_code = 'LALEVL'
5167 AND rgp.id = slh.rgp_id
5168 AND slh.rule_information_category = 'LASLH'
5169 AND rgp.id = sll.rgp_id
5170 --AND slh.object1_id1 = TO_CHAR(sty.id) 4929573
5171 --AND styt.LANGUAGE = USERENV('LANG')
5172 --AND sty.id = styt.id
5173 AND TO_CHAR(slh.id) = sll.object2_id1
5174 AND sll.rule_information_category = 'LASLL';
5175 --ORDER BY fnd_date.canonical_to_date(sll.rule_information2);
5176
5177 /*
5178 CURSOR c_strm_sll_ext (p_khr_id OKC_K_HEADERS_B.ID%TYPE,
5179 p_kle_id OKC_K_LINES_B.ID%TYPE) IS
5180 SELECT
5181 SUM(NVL(TO_NUMBER(SLL.rule_information3),0)) periods,
5182 DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12) mpp,
5183 styt.name stream_type
5184 FROM okc_rules_b sll,
5185 okc_rules_b slh,
5186 okc_rule_groups_b rgp,
5187 okl_strm_type_b sty,
5188 okl_strm_type_tl styt
5189 WHERE rgp.dnz_chr_id = p_khr_id
5190 AND rgp.cle_id = p_kle_id
5191 AND rgp.rgd_code = 'LALEVL'
5192 AND rgp.id = slh.rgp_id
5193 AND slh.rule_information_category = 'LASLH'
5194 AND slh.object1_id1 = TO_CHAR(sty.id)
5195 AND styt.language = USERENV('LANG')
5196 AND sty.id = styt.id
5197 AND TO_CHAR(slh.id) = sll.object2_id1
5198 AND sll.rule_information_category = 'LASLL'
5199 GROUP BY DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12),
5200 styt.name;
5201 */
5202
5203 --Bug#3877032
5204 CURSOR c_strm_slh_ext (p_khr_id OKC_K_HEADERS_B.ID%TYPE,
5205 p_kle_id OKC_K_LINES_B.ID%TYPE) IS
5206 SELECT (select STYT.NAME from OKL_STRM_TYPE_B STY ,OKL_STRM_TYPE_TL STYT
5207 where STY.ID = STYT.ID AND STYT.LANGUAGE = USERENV ( 'LANG' )
5208 AND to_number(RULE.OBJECT1_ID1) = STY.ID ) STREAM_TYPE,
5209 rule.id rule_id,
5210 rgp.id rgp_id
5211 FROM okc_rules_b rule,
5212 okc_rule_groups_b rgp
5213 --okl_strm_type_b sty, Bug 4929573
5214 --okl_strm_type_tl styt
5215 WHERE rgp.cle_id = p_kle_id
5216 AND rgp.dnz_chr_id = p_khr_id
5217 AND rgp.rgd_code = 'LALEVL'
5218 AND rgp.id = rule.rgp_id
5219 AND rule.rule_information_category = 'LASLH' ;
5220 --AND rule.object1_id1 = TO_CHAR(sty.id)
5221 --AND styt.LANGUAGE = USERENV('LANG')
5222 --AND sty.id = styt.id;
5223
5224 CURSOR c_strm_sll_ext (p_rule_id OKC_RULES_B.ID%TYPE,
5225 p_rgp_id OKC_RULE_GROUPS_B.ID%TYPE) IS
5226 SELECT sll.rule_information2 start_date,
5227 sll.rule_information3 periods,
5228 sll.rule_information7 stub_day,
5229 DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12) mpp
5230 FROM okc_rules_b sll
5231 WHERE sll.rgp_id = p_rgp_id
5232 AND sll.object2_id1 = TO_CHAR(p_rule_id)
5233 AND sll.rule_information_category = 'LASLL'
5234 -- cklee/mvasudev,06-02-2005,Bug#4392051/okl.h 4437938
5235 ORDER BY sll.rule_information2 ;
5236
5237
5238 CURSOR contract_csr (p_khr_id OKC_K_HEADERS_B.ID%TYPE) IS
5239 SELECT start_date,
5240 end_date
5241 FROM OKC_K_HEADERS_B
5242 WHERE ID = p_khr_id;
5243
5244 l_start_date OKC_K_HEADERS_B.START_DATE%TYPE;
5245 l_end_date OKC_K_HEADERS_B.END_DATE%TYPE;
5246
5247 l_strm_sll_start_date DATE;
5248 l_strm_sll_periods NUMBER;
5249
5250 l_strm_sll_ext_periods NUMBER;
5251 l_strm_sll_ext_stub_day NUMBER;
5252 l_strm_sll_ext_mpp NUMBER;
5253 l_strm_sll_ext_stream_type VARCHAR2(100);
5254 l_pmnt_end_date DATE;
5255
5256 -- START: cklee/mvasudev,06-02-2005,Bug#4392051/okl.h 4437938
5257 CURSOR c_strm_sll_count (p_khr_id OKC_K_HEADERS_B.ID%TYPE,
5258 p_kle_id OKC_K_LINES_B.ID%TYPE) IS
5259 SELECT COUNT(sll.id)
5260 FROM okc_rules_b sll,
5261 okc_rules_b slh,
5262 okc_rule_groups_b rgp,
5263 okl_strm_type_b sty,
5264 okl_strm_type_tl styt
5265 WHERE rgp.dnz_chr_id = p_khr_id
5266 AND rgp.cle_id = p_kle_id
5267 AND rgp.rgd_code = 'LALEVL'
5268 AND rgp.id = slh.rgp_id
5269 AND slh.rule_information_category = 'LASLH' --| 17-Jan-06 cklee Fixed bug#4956483 |
5270 AND slh.object1_id1 = TO_CHAR(sty.id)
5271 AND styt.LANGUAGE = USERENV('LANG')
5272 AND sty.id = styt.id
5273 AND TO_CHAR(slh.id) = sll.object2_id1
5274 AND sll.rule_information_category = 'LASLL'; --| 17-Jan-06 cklee Fixed bug#4956483 |
5275
5276 CURSOR c_strm_sll_ext_count (p_rule_id OKC_RULES_B.ID%TYPE,
5277 p_rgp_id OKC_RULE_GROUPS_B.ID%TYPE) IS
5278 SELECT COUNT(sll.id)
5279 FROM okc_rules_b sll
5280 WHERE sll.rgp_id = p_rgp_id
5281 AND sll.object2_id1 = TO_CHAR(p_rule_id)
5282 AND sll.rule_information_category = 'LASLL'; --| 17-Jan-06 cklee Fixed bug#4956483 |
5283
5284 l_start_day NUMBER;
5285 l_sll_count NUMBER := 0;
5286 -- END: cklee/mvasudev,06-02-2005,Bug#4392051/okl.h 4437938
5287 payment_end_date_invalid EXCEPTION; -- 5189866
5288
5289
5290 BEGIN
5291
5292 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
5293
5294 --l_strm_profile := 'NONE';
5295 Okl_Streams_Util.get_pricing_engine(p_khr_id => p_chr_id,
5296 x_pricing_engine => l_strm_profile,
5297 x_return_status => lx_return_status);
5298 IF (lx_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
5299 x_return_status := lx_return_status;
5300 END IF;
5301
5302 /*
5303 *OPEN strm_profile_csr;
5304 *FETCH strm_profile_csr INTO l_strm_profile;
5305 *CLOSE strm_profile_csr;
5306 */
5307
5308 OPEN contract_csr (p_chr_id);
5309 FETCH contract_csr INTO l_start_date,
5310 l_end_date;
5311 CLOSE contract_csr;
5312
5313 --IF (l_strm_profile IN ('INTERNAL', 'NONE')) THEN
5314 IF (l_strm_profile = 'INTERNAL') THEN
5315
5316 FOR l_fin_fee IN c_fin_fee(p_chr_id)
5317 LOOP
5318
5319 -- START: cklee/mvasudev,06-02-2005,Bug#4392051/okl.h 4437938
5320 l_start_day := NULL; --vthiruva Bug#4392051.16-jun..resetting for each asset
5321 -- mvasudev,06-02-2005,Bug#4392051
5322 OPEN c_strm_sll_count(p_chr_id,l_fin_fee.id);
5323 FETCH c_strm_sll_count INTO l_sll_count;
5324 CLOSE c_strm_sll_count;
5325
5326
5327 IF l_sll_count > 1 THEN
5328 l_start_day := TO_CHAR(l_start_date,'DD');
5329 END IF;
5330 -- END: cklee/mvasudev,06-02-2005,Bug#4392051/okl.h 4437938
5331
5332
5333 FOR l_strm_sll IN c_strm_sll(p_chr_id,
5334 l_fin_fee.id)
5335 LOOP
5336
5337 l_strm_sll_start_date := Fnd_Date.canonical_to_date(l_strm_sll.start_date);
5338 l_strm_sll_periods := TO_NUMBER(l_strm_sll.periods);
5339
5340 IF(l_strm_sll_start_date IS NULL) THEN
5341
5342 Okl_Api.set_message(
5343 G_APP_NAME,
5344 'OKL_NO_SLL_SDATE'
5345 );
5346 x_return_status := Okl_Api.G_RET_STS_ERROR;
5347
5348 ELSE
5349 -- START: cklee/mvasudev,06-02-2005,Bug#4392051/okl. 4437938
5350 --IF (TRUNC(ADD_MONTHS(l_strm_sll_start_date, l_strm_sll_periods*l_strm_sll.mpp) - 1))
5351 IF (TRUNC(Okl_Lla_Util_Pvt.calculate_end_date(l_strm_sll_start_date, l_strm_sll_periods*l_strm_sll.mpp,l_start_day, l_end_date ))) --Bug#5441811
5352 --IF (TRUNC(Okl_Lla_Util_Pvt.calculate_end_date(l_strm_sll_start_date, l_strm_sll_periods*l_strm_sll.mpp,l_start_day)))
5353 -- END: cklee/mvasudev,06-02-2005,Bug#4392051/okl. 4437938
5354 > (TRUNC(l_end_date)) THEN
5355 Okl_Api.set_message(
5356 G_APP_NAME,
5357 'OKL_QA_INVALID_STRM_END_DATE',
5358 'STRM_TYPE',
5359 l_strm_sll.stream_type,
5360 'LINE_TYPE',
5361 l_fin_fee.line_type
5362 );
5363 x_return_status := Okl_Api.G_RET_STS_ERROR;
5364 exit;
5365 --raise payment_end_date_invalid; --5189866
5366
5367 END IF;
5368 /* already there, check_pmnt_start_dt()
5369
5370 IF (l_strm_sll_start_date < l_start_date) THEN
5371 OKL_API.set_message(
5372 G_APP_NAME,
5373 'OKL_QA_INVALID_STRM_START_DATE',
5374 'STRM_TYPE',
5375 l_strm_sll.stream_type,
5376 'LINE_TYPE',
5377 l_fin_fee.line_type
5378 );
5379 x_return_status := OKL_API.G_RET_STS_ERROR;
5380 END IF;
5381
5382 */
5383 END IF;
5384
5385 END LOOP;
5386
5387 END LOOP;
5388
5389 --ELSE -- EXTERNAL stream generation
5390 ELSIF (l_strm_profile = 'EXTERNAL') THEN
5391
5392 FOR l_fin_fee IN c_fin_fee(p_chr_id)
5393 LOOP
5394
5395 FOR l_strm_slh_ext IN c_strm_slh_ext (p_chr_id,
5396 l_fin_fee.id)
5397 LOOP
5398 l_strm_sll_ext_periods := 0;
5399 l_strm_sll_ext_stub_day := 0;
5400
5401 -- START: cklee/mvasudev,06-02-2005,Bug#4392051/okl. 4437938
5402 l_pmnt_end_date := l_start_date;
5403
5404 OPEN c_strm_sll_ext_count(l_strm_slh_ext.rule_id,
5405 l_strm_slh_ext.rgp_id);
5406 FETCH c_strm_sll_ext_count INTO l_sll_count;
5407 CLOSE c_strm_sll_ext_count;
5408
5409
5410 IF l_sll_count > 1 THEN
5411 l_start_day := TO_CHAR(l_start_date,'DD');
5412 END IF;
5413 -- END: cklee/mvasudev,06-02-2005,Bug#4392051/okl. 4437938
5414
5415
5416 FOR l_strm_sll_ext IN c_strm_sll_ext(l_strm_slh_ext.rule_id,
5417 l_strm_slh_ext.rgp_id)
5418 LOOP
5419 -- START: cklee/mvasudev, 05/11/2006, Bug#4364266/okl.h 4437938
5420 /*
5421 l_strm_sll_ext_periods := TO_NUMBER(NVL(l_strm_sll_ext.periods, 0)) + l_strm_sll_ext_periods;
5422 l_strm_sll_ext_mpp := l_strm_sll_ext.mpp;
5423 l_strm_sll_ext_stub_day := TO_NUMBER(NVL(l_strm_sll_ext.stub_day,0)) + l_strm_sll_ext_stub_day;
5424 */
5425 -- 5189866
5426 l_pmnt_end_date := Fnd_Date.canonical_to_date(l_strm_sll_ext.start_date);
5427 IF l_sll_count > 1 THEN
5428 l_start_day := TO_CHAR(l_pmnt_end_date,'DD');
5429 END IF;
5430
5431 IF l_strm_sll_ext.stub_day IS NOT NULL THEN
5432 l_pmnt_end_date := l_pmnt_end_date + TO_NUMBER(NVL(l_strm_sll_ext.stub_day,0));
5433
5434 --vthiruva Bug#4392051..16-jun start..commented
5435 /*IF l_sll_count > 1 THEN
5436 l_start_day := TO_CHAR(l_pmnt_end_date,'DD');
5437 END IF;*/
5438 --vthiruva 16-jun end..commented
5439
5440 ELSIF l_strm_sll_ext.periods IS NOT NULL THEN
5441 --vthiruva Bug#4392051..16-jun start..including l_start_day if l_sll_count > 1
5442 IF l_sll_count > 1 THEN
5443 l_pmnt_end_date := Okl_Lla_Util_Pvt.calculate_end_date(l_pmnt_end_date, TO_NUMBER(NVL(l_strm_sll_ext.periods,0)) * l_strm_sll_ext.mpp,l_start_day, l_end_date) + 1; --Bug#5441811
5444 --l_pmnt_end_date := Okl_Lla_Util_Pvt.calculate_end_date(l_pmnt_end_date, TO_NUMBER(NVL(l_strm_sll_ext.periods,0)) * l_strm_sll_ext.mpp,l_start_day) + 1;
5445 ELSE
5446 l_pmnt_end_date := Okl_Lla_Util_Pvt.calculate_end_date(l_pmnt_end_date, TO_NUMBER(NVL(l_strm_sll_ext.periods,0)) * l_strm_sll_ext.mpp) + 1;
5447 END IF;
5448 --vthiruva 16-jun end..including l_start_day
5449 END IF;
5450
5451 -- 5189866
5452 l_pmnt_end_date := l_pmnt_end_date - 1;
5453 IF ( TRUNC(l_pmnt_end_date) > TRUNC(l_end_date)) THEN
5454
5455 Okl_Api.set_message(
5456 G_APP_NAME,
5457 'OKL_QA_INVALID_STRM_END_DATE',
5458 'STRM_TYPE',
5459 l_strm_slh_ext.stream_type,
5460 'LINE_TYPE',
5461 l_fin_fee.line_type
5462 );
5463 x_return_status := Okl_Api.G_RET_STS_ERROR;
5464 --raise payment_end_date_invalid;
5465 exit;
5466 END IF;
5467
5468 END LOOP;
5469
5470 --l_pmnt_end_date := l_pmnt_end_date - 1; -- 5189866
5471
5472 /*
5473 l_pmnt_end_date := ADD_MONTHS(l_start_date, l_strm_sll_ext_periods * l_strm_sll_ext_mpp) - 1;
5474 IF (l_strm_sll_ext_stub_day <> 0) THEN
5475 l_pmnt_end_date := l_pmnt_end_date + l_strm_sll_ext_stub_day;
5476 END IF;
5477 */
5478 -- END: cklee/mvasudev, 05/11/2006, Bug#4364266/okl.h 4437938
5479
5480 --5189866
5481 /*IF ( TRUNC(l_pmnt_end_date) > TRUNC(l_end_date)) THEN
5482
5483 Okl_Api.set_message(
5484 G_APP_NAME,
5485 'OKL_QA_INVALID_STRM_END_DATE',
5486 'STRM_TYPE',
5487 l_strm_slh_ext.stream_type,
5488 'LINE_TYPE',
5489 l_fin_fee.line_type
5490 );
5491 x_return_status := Okl_Api.G_RET_STS_ERROR;
5492 END IF;*/
5493
5494 END LOOP;
5495
5496 END LOOP;
5497 END IF; -- Stream profile
5498
5499 EXCEPTION
5500
5501 WHEN payment_end_date_invalid THEN -- 5189866
5502 NULL;
5503 WHEN OTHERS THEN
5504 -- store SQL error message on message stack
5505 Okl_Api.SET_MESSAGE(
5506 p_app_name => G_APP_NAME,
5507 p_msg_name => G_UNEXPECTED_ERROR,
5508 p_token1 => G_SQLCODE_TOKEN,
5509 p_token1_value => SQLCODE,
5510 p_token2 => G_SQLERRM_TOKEN,
5511 p_token2_value => SQLERRM);
5512 -- notify caller of an error as UNEXPETED error
5513
5514 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
5515
5516 -- verify that cursor was closed
5517 /*
5518 *IF strm_profile_csr%ISOPEN THEN
5519 * CLOSE strm_profile_csr;
5520 *END IF;
5521 */
5522
5523 IF contract_csr%ISOPEN THEN
5524 CLOSE contract_csr;
5525 END IF;
5526
5527 END check_payment_period;
5528
5529
5530 -- Start of comments
5531 --
5532 -- Procedure Name : check_fee_lines
5533 -- Description :
5534 -- Business Rules :
5535 -- Parameters :
5536 -- Version : 1.0
5537 -- End of comments
5538
5539 /*
5540 PROCEDURE check_fee_lines(
5541 x_return_status OUT NOCOPY VARCHAR2,
5542 p_chr_id IN NUMBER
5543 ) IS
5544
5545 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5546 l_dummy VARCHAR2(1) := '?';
5547 l_count NUMBER := 0;
5548 l_row_notfound BOOLEAN;
5549 l_token VARCHAR2(2000);
5550
5551
5552 CURSOR l_contract_name ( n VARCHAR2 ) IS
5553 Select count(*) cnt
5554 From okc_k_headers_v where contract_number = n;
5555 l_cn l_contract_name%ROWTYPE;
5556
5557
5558 l_hdr l_hdr_csr%ROWTYPE;
5559 l_txl l_txl_csr%ROWTYPE;
5560 l_txd l_txd_csr%ROWTYPE;
5561 l_lne l_lne_csr%ROWTYPE;
5562 l_itm l_itms_csr%ROWTYPE;
5563 l_struct_rec l_struct_csr%ROWTYPE;
5564 l_structure NUMBER;
5565 l_rl_rec1 l_rl_csr1%ROWTYPE;
5566 i NUMBER;
5567
5568
5569 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
5570 l_supp_rec supp_csr%ROWTYPE;
5571 l_lne l_lne_csr%ROWTYPE;
5572 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
5573 l_strm_name_rec strm_name_csr%ROWTYPE;
5574
5575 l_inflow_defined_yn VARCHAR2(1);
5576 l_outflow_defined_yn VARCHAR2(1);
5577
5578 n NUMBER := 0;
5579
5580 BEGIN
5581
5582 -- initialize return status
5583 x_return_status := OKL_API.G_RET_STS_SUCCESS;
5584
5585 FOR l_lne IN l_lne_csr('FEE', p_chr_id)
5586 LOOP
5587
5588 l_inflow_defined_yn := 'N';
5589 l_outflow_defined_yn := 'N';
5590
5591 OPEN fee_strm_type_csr ( l_lne.id, 'FEE' );
5592 FETCH fee_strm_type_csr into l_fee_strm_type_rec;
5593 CLOSE fee_strm_type_csr;
5594
5595 If ( l_fee_strm_type_rec.strm_name <> 'SECURITY DEPOSIT') Then
5596
5597 OPEN l_rl_csr1( 'LAFEXP', 'LAFEXP', TO_NUMBER(p_chr_id), l_lne.id );
5598 FETCH l_rl_csr1 into l_rl_rec1;
5599 IF l_rl_csr1%FOUND THEN
5600 l_outflow_defined_yn := 'Y';
5601 END IF;
5602 CLOSE l_rl_csr1;
5603
5604 n := 0;
5605 FOR l_rl_rec1 in l_rl_csr1( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne.id )
5606 LOOP
5607 n := n + 1;
5608 END LOOP;
5609
5610 If ( n > 1 ) Then
5611
5612 OKL_API.set_message(
5613 p_app_name => G_APP_NAME,
5614 p_msg_name => 'OKL_QA_ONLY_1PAY',
5615 p_token1 => 'line',
5616 p_token1_value => l_fee_strm_type_rec.strm_name);
5617 x_return_status := OKL_API.G_RET_STS_ERROR;
5618 RAISE G_EXCEPTION_HALT_VALIDATION;
5619
5620 End If;
5621
5622 OPEN l_rl_csr1( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne.id );
5623 FETCH l_rl_csr1 into l_rl_rec1;
5624 IF l_rl_csr1%FOUND THEN
5625 l_inflow_defined_yn := 'Y';
5626 END IF;
5627 CLOSE l_rl_csr1;
5628
5629 If ( l_inflow_defined_yn = 'Y' ) Then
5630
5631 OPEN strm_name_csr ( l_rl_rec1.object1_id1 );
5632 FETCH strm_name_csr into l_strm_name_rec;
5633 IF strm_name_csr%NOTFOUND THEN
5634 CLOSE strm_name_csr;
5635 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5636 END IF;
5637 CLOSE strm_name_csr;
5638
5639 If ( l_strm_name_rec.name <> l_fee_strm_type_rec.strm_name ) Then
5640
5641 OKL_API.set_message(
5642 p_app_name => G_APP_NAME,
5643 p_msg_name => 'OKL_QA_STRM_DONT_MATCH',
5644 p_token1 => 'line',
5645 p_token1_value => l_fee_strm_type_rec.strm_name);
5646 x_return_status := OKL_API.G_RET_STS_ERROR;
5647 RAISE G_EXCEPTION_HALT_VALIDATION;
5648
5649 End If;
5650
5651 End If;
5652
5653 If ( ( l_fee_strm_type_rec.capitalize_yn = 'Y' ) AND
5654 ( l_outflow_defined_yn = 'Y' OR l_inflow_defined_yn = 'Y' ) ) Then
5655
5656 OKL_API.set_message(
5657 p_app_name => G_APP_NAME,
5658 p_msg_name => 'OKL_QA_NO_FLOWS_CAPFEE',
5659 p_token1 => 'line',
5660 p_token1_value => l_fee_strm_type_rec.strm_name);
5661 x_return_status := OKL_API.G_RET_STS_ERROR;
5662 RAISE G_EXCEPTION_HALT_VALIDATION;
5663
5664 End If;
5665
5666 If ( l_fee_strm_type_rec.stream_type_class <> 'EXPENSE' AND l_outflow_defined_yn = 'Y' ) Then
5667
5668 OKL_API.set_message(
5669 p_app_name => G_APP_NAME,
5670 p_msg_name => 'OKL_QA_NO_OUTFLOWS_EXPENSE',
5671 p_token1 => 'line',
5672 p_token1_value => l_fee_strm_type_rec.strm_name);
5673 x_return_status := OKL_API.G_RET_STS_ERROR;
5674
5675 End If;
5676
5677 If ( l_outflow_defined_yn = 'Y' AND l_inflow_defined_yn = 'Y' ) Then
5678 OKL_API.set_message(
5679 p_app_name => G_APP_NAME,
5680 p_msg_name => 'OKL_QA_NO_INOUT_FLOWS',
5681 p_token1 => 'line',
5682 p_token1_value => l_fee_strm_type_rec.strm_name);
5683 x_return_status := OKL_API.G_RET_STS_ERROR;
5684 End If;
5685
5686 End If;
5687
5688 END LOOP;
5689
5690 IF x_return_status = OKL_API.G_RET_STS_SUCCESS THEN
5691 OKL_API.set_message(
5692 p_app_name => G_APP_NAME,
5693 p_msg_name => G_QA_SUCCESS);
5694 END IF;
5695
5696
5697 EXCEPTION
5698
5699 WHEN G_EXCEPTION_HALT_VALIDATION THEN
5700 -- no processing necessary; validation can continue with next column
5701 IF l_rl_csr1%ISOPEN THEN
5702 CLOSE l_rl_csr1;
5703 END IF;
5704 WHEN OTHERS THEN
5705 -- store SQL error message on message stack
5706 OKL_API.SET_MESSAGE(
5707 p_app_name => G_APP_NAME,
5708 p_msg_name => G_UNEXPECTED_ERROR,
5709 p_token1 => G_SQLCODE_TOKEN,
5710 p_token1_value => SQLCODE,
5711 p_token2 => G_SQLERRM_TOKEN,
5712 p_token2_value => SQLERRM);
5713 -- notify caller of an error as UNEXPETED error
5714 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
5715 -- verify that cursor was closed
5716 IF l_lne_csr%ISOPEN THEN
5717 CLOSE l_lne_csr;
5718 END IF;
5719 IF l_hdr_csr%ISOPEN THEN
5720 CLOSE l_hdr_csr;
5721 END IF;
5722 IF l_txl_csr%ISOPEN THEN
5723 CLOSE l_txl_csr;
5724 END IF;
5725
5726 End check_fee_lines;
5727 */
5728
5729 -- Added for bug 5115701 -- start
5730
5731 FUNCTION Are_assets_associated (p_chr_id IN NUMBER, p_kle_id in number) RETURN VARCHAR2 IS
5732
5733
5734 CURSOR l_assets_asso_csr(chrId IN NUMBER, kleId in NUMBER) IS
5735 SELECT cleb.id
5736 FROM okc_k_lines_b cleb
5737
5738 WHERE cleb.dnz_chr_id = chrId
5739 AND cleb.chr_id = chrId
5740 AND CLEB.ID =kleId
5741 and exists
5742 ( SELECT '1'
5743 FROM okc_k_lines_b cleb1,
5744 okc_statuses_b okcsts1
5745 WHERE cleb1.dnz_chr_id = cleb.chr_id
5746 AND cleb1.cle_id = cleb.id
5747 AND okcsts1.code = cleb1.sts_code
5748 AND okcsts1.ste_code NOT IN ('EXPIRED','HOLD','CANCELLED','TERMINATED'));
5749
5750 l_assets_associated VARCHAR2(1) DEFAULT 'N';
5751
5752 BEGIN
5753 l_assets_associated := 'N';
5754
5755
5756 OPEN l_assets_asso_csr(chrid => p_chr_id, kleId => p_kle_id);
5757 FETCH l_assets_asso_csr INTO l_assets_associated;
5758 IF l_assets_asso_csr%NOTFOUND THEN
5759 NULL;
5760 END IF;
5761 CLOSE l_assets_asso_csr;
5762 RETURN(l_assets_associated);
5763 EXCEPTION
5764
5765 WHEN OTHERS THEN
5766 IF l_assets_asso_csr%ISOPEN THEN
5767 CLOSE l_assets_asso_csr;
5768 END IF;
5769 RETURN('Y');
5770 END Are_assets_associated;
5771 -- Added for bug 5115701 -- End
5772
5773
5774 PROCEDURE check_fee_lines(
5775 x_return_status OUT NOCOPY VARCHAR2,
5776 p_chr_id IN NUMBER
5777 ) IS
5778 CURSOR fee_line_csr (p_chrId OKC_K_HEADERS_V.ID%TYPE) IS
5779 SELECT l.id,
5780 l.line_number,
5781 l.start_date,
5782 l.end_date,
5783 l.name,
5784 l.amount,
5785 l.capital_amount,
5786 l.fee_type
5787 FROM okl_k_lines_full_v l,
5788 okc_line_styles_v sty,
5789 okc_statuses_v sts
5790 WHERE l.lse_id = sty.id
5791 AND l.sts_code = sts.code
5792 AND sts.ste_code NOT IN ( 'HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED')
5793 AND sty.lty_code = 'FEE'
5794 AND l.dnz_chr_id = p_chrId;
5795
5796 CURSOR fee_meaning_csr (p_fee_type_code FND_LOOKUPS.LOOKUP_CODE%TYPE) IS
5797 SELECT meaning
5798 FROM fnd_lookups
5799 WHERE lookup_code = p_fee_type_code
5800 AND lookup_type = 'OKL_FEE_TYPES';
5801
5802 --------------
5803 --Bug# 4350255
5804 --------------
5805
5806 CURSOR pth_hdr_csr(p_chr_id IN NUMBER,
5807 p_cle_id IN NUMBER) IS
5808 SELECT 1
5809 FROM okl_party_payment_hdr pph
5810 WHERE cle_id = p_cle_id
5811 AND dnz_chr_id = p_chr_id
5812 AND passthru_term = 'BASE';
5813
5814 --------------
5815 --Bug# 4350255
5816 --------------
5817
5818 l_fee_type FND_LOOKUPS.MEANING%TYPE;
5819 l_pmnt_amount NUMBER;
5820
5821 l_tot_pmnt NUMBER := 0;
5822 l_exp_present VARCHAR2(1) := 'N';
5823 l_pth_present VARCHAR2(1) := 'N';
5824 l_tot_secdep NUMBER := 0;
5825
5826 l_exp_period NUMBER;
5827 l_exp_amount NUMBER;
5828 l_exp_freq VARCHAR2(20);
5829 l_mult_factor NUMBER;
5830
5831 BEGIN
5832
5833 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
5834
5835 l_tot_secdep := 0;
5836 FOR fee_line_rec IN fee_line_csr (p_chr_id)
5837 LOOP
5838
5839
5840 -- Get Fee type meaning
5841 FOR fee_meaning_rec IN fee_meaning_csr (fee_line_rec.fee_type)
5842 LOOP
5843 l_fee_type := fee_meaning_rec.meaning;
5844 END LOOP;
5845
5846 -- gk added
5847 IF fee_line_rec.fee_type NOT IN ('FINANCED','ROLLOVER','CAPITALIZED') THEN
5848
5849 IF Are_assets_associated(p_chr_id => p_chr_id, p_kle_id => fee_line_rec.ID ) = 'Y' THEN
5850 Okl_Api.set_message(
5851 p_app_name => G_APP_NAME,
5852 p_msg_name => 'OKL_QA_ASSET_CANT_ASSOC',
5853 p_token1 => 'fee_type',
5854 p_token1_value => l_fee_type,
5855 p_token2 => 'line',
5856 p_token2_value => fee_line_rec.name
5857
5858 );
5859
5860 x_return_status := Okl_Api.G_RET_STS_ERROR;
5861 END IF;
5862 END IF;
5863 -- gk added
5864
5865 --
5866 -- 1. FEE line should have only 1 payment defined
5867 --
5868 l_tot_pmnt := 0;
5869 FOR l_rl_rec1 IN l_rl_csr1( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), fee_line_rec.id )
5870 LOOP
5871 l_tot_pmnt := l_tot_pmnt + 1;
5872 END LOOP;
5873
5874 IF ( l_tot_pmnt > 1 ) THEN
5875
5876 Okl_Api.set_message(
5877 p_app_name => G_APP_NAME,
5878 p_msg_name => 'OKL_QA_ONLY_1PAY',
5879 p_token1 => 'line',
5880 p_token1_value => fee_line_rec.name
5881 );
5882
5883 x_return_status := Okl_Api.G_RET_STS_ERROR;
5884
5885 END IF;
5886
5887 --
5888 -- 2. For FEE_TYPE = Miscellaneous, Security Deposit, Pass through, Financed, Income
5889 -- Payments must be defined
5890 --
5891 --Bug# 4996899: Financed fee payments will be validated separately by check_financed_fees procedure
5892 --IF (fee_line_rec.fee_type IN ('MISCELLANEOUS', 'SECDEPOSIT', 'PASSTHROUGH', 'FINANCED','INCOME')) THEN
5893 IF (fee_line_rec.fee_type IN ('MISCELLANEOUS', 'SECDEPOSIT', 'PASSTHROUGH', 'INCOME')) THEN
5894 l_tot_pmnt := 0;
5895 FOR l_rl_rec1 IN l_rl_csr1( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), fee_line_rec.id )
5896 LOOP
5897 l_tot_pmnt := l_tot_pmnt + 1;
5898 END LOOP;
5899
5900 IF (l_tot_pmnt = 0) THEN
5901 Okl_Api.set_message(
5902 p_app_name => G_APP_NAME,
5903 p_msg_name => 'OKL_QA_NO_PMNT',
5904 p_token1 => 'FEE_TYPE',
5905 p_token1_value => l_fee_type,
5906 p_token2 => 'STRM_TYPE',
5907 p_token2_value => fee_line_rec.name
5908 );
5909
5910 x_return_status := Okl_Api.G_RET_STS_ERROR;
5911 END IF;
5912
5913 END IF; -- check 2
5914
5915 --
5916 -- 3. For FEE_TYPE = Miscellaneous, Expense, Absorbed, Financed
5917 -- Expense must be defined, expense must be within fee effectivity
5918 -- Also expense amount must be equal to Fee line amount
5919 --
5920 -- Absorbed Fee Type has been removed from financed expense check
5921 -- as per Bug# 3316775
5922 --
5923 IF (fee_line_rec.fee_type IN ('MISCELLANEOUS', 'EXPENSE', 'FINANCED')) THEN
5924
5925 l_exp_present := '?';
5926 FOR l_rl_rec1 IN l_rl_csr1( 'LAFEXP', 'LAFEXP', TO_NUMBER(p_chr_id), fee_line_rec.id )
5927 LOOP
5928 l_exp_present := 'Y';
5929 l_exp_period := TO_NUMBER(l_rl_rec1.rule_information1);
5930 l_exp_amount := TO_NUMBER(l_rl_rec1.rule_information2);
5931 END LOOP;
5932
5933 FOR l_rl_rec1 IN l_rl_csr1( 'LAFEXP', 'LAFREQ', TO_NUMBER(p_chr_id), fee_line_rec.id )
5934 LOOP
5935 l_exp_freq := l_rl_rec1.object1_id1;
5936 END LOOP;
5937
5938 IF (l_exp_present <> 'Y') THEN
5939 Okl_Api.set_message(
5940 p_app_name => G_APP_NAME,
5941 p_msg_name => 'OKL_QA_NO_EXP',
5942 p_token1 => 'FEE_TYPE',
5943 p_token1_value => l_fee_type,
5944 p_token2 => 'STRM_TYPE',
5945 p_token2_value => fee_line_rec.name
5946 );
5947
5948 x_return_status := Okl_Api.G_RET_STS_ERROR;
5949
5950 ELSE
5951
5952 --
5953 -- Expense period between contract effectivity
5954 --
5955 l_mult_factor := 1;
5956 IF (l_exp_freq = 'M') THEN
5957 l_mult_factor := 1;
5958 ELSIF (l_exp_freq = 'Q') THEN
5959 l_mult_factor := 3;
5960 ELSIF (l_exp_freq = 'S') THEN
5961 l_mult_factor := 6;
5962 ELSIF (l_exp_freq = 'A') THEN
5963 l_mult_factor := 12;
5964 END IF;
5965
5966 IF (TRUNC(fee_line_rec.end_date) < (TRUNC(ADD_MONTHS(fee_line_rec.start_date, l_exp_period * l_mult_factor)-1))) THEN
5967 Okl_Api.set_message(
5968 G_APP_NAME,
5969 'OKL_QA_RECUR_PERIOD',
5970 'STRM_TYPE',
5971 fee_line_rec.name
5972 );
5973 x_return_status := Okl_Api.G_RET_STS_ERROR;
5974 END IF;
5975
5976 l_exp_amount := l_exp_amount * l_exp_period;
5977 --l_exp_amount := l_exp_amount * l_exp_period * l_mult_factor;
5978
5979 IF (fee_line_rec.amount <> l_exp_amount) THEN
5980 Okl_Api.set_message(
5981 G_APP_NAME,
5982 'OKL_QA_EXP_AMT_MISMATCH',
5983 'FEE_TYPE',
5984 l_fee_type,
5985 'STRM_TYPE',
5986 fee_line_rec.name
5987 );
5988 x_return_status := Okl_Api.G_RET_STS_ERROR;
5989 END IF;
5990
5991 END IF; -- expense
5992
5993 END IF; -- check 3
5994
5995 --
5996 -- 4. For FEE_TYPE = Passthrough and Expense
5997 -- Passthrough must be defined
5998 --
5999 IF (fee_line_rec.fee_type = 'PASSTHROUGH') THEN
6000
6001 -- Bug# 4350255
6002 l_pth_present := '?';
6003 FOR pth_hdr_rec IN pth_hdr_csr( p_chr_id => TO_NUMBER(p_chr_id),
6004 p_cle_id => fee_line_rec.id )
6005 LOOP
6006 l_pth_present := 'Y';
6007 END LOOP;
6008
6009 IF (l_pth_present <> 'Y') THEN
6010 Okl_Api.set_message(
6011 p_app_name => G_APP_NAME,
6012 p_msg_name => 'OKL_QA_NO_PTH',
6013 p_token1 => 'STRM_TYPE',
6014 p_token1_value => fee_line_rec.name
6015 );
6016
6017 x_return_status := Okl_Api.G_RET_STS_ERROR;
6018 END IF;
6019
6020 END IF; -- check 4
6021
6022 --
6023 -- 5. Only one Security Deposite in a contract
6024 --
6025 IF (fee_line_rec.fee_type = 'SECDEPOSIT') THEN
6026 l_tot_secdep := l_tot_secdep + 1;
6027 END IF;
6028
6029 --
6030 -- 6. No GENERAL Fee type should be there on a contract
6031 --
6032 IF (fee_line_rec.fee_type = 'GENERAL') THEN
6033 Okl_Api.set_message(
6034 p_app_name => G_APP_NAME,
6035 p_msg_name => 'OKL_QA_GEN_NOTALLOW'
6036 );
6037
6038 x_return_status := Okl_Api.G_RET_STS_ERROR;
6039 --GOTO check_next_line;
6040 END IF;
6041
6042 --
6043 -- 7. Payment amount for Security Deposite,Passthrough, Income
6044 -- must be equal to Fee line amount
6045 --
6046 IF (fee_line_rec.fee_type IN ('SECDEPOSIT','PASSTHROUGH', 'INCOME') ) THEN
6047
6048 l_pmnt_amount := 0;
6049 FOR l_rl_rec1 IN l_rl_csr1( 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), fee_line_rec.id )
6050 LOOP
6051
6052 IF (l_rl_rec1.rule_information8 IS NOT NULL) THEN
6053 l_pmnt_amount := l_pmnt_amount + TO_NUMBER(NVL(l_rl_rec1.rule_information8,'0'));
6054 ELSE
6055 l_pmnt_amount := l_pmnt_amount + ( TO_NUMBER(NVL(l_rl_rec1.rule_information6,'0')) *
6056 TO_NUMBER(NVL(l_rl_rec1.rule_information3,'1')) );
6057 END IF;
6058
6059 IF (fee_line_rec.fee_type = 'SECDEPOSIT'
6060 AND
6061 l_rl_rec1.rule_information7 IS NOT NULL) THEN
6062 Okl_Api.set_message(
6063 G_APP_NAME,
6064 'OKL_QA_SECR_STUB',
6065 'STRM_TYPE',
6066 fee_line_rec.name
6067 );
6068 x_return_status := Okl_Api.G_RET_STS_ERROR;
6069 END IF;
6070 END LOOP;
6071
6072 IF (l_pmnt_amount <> fee_line_rec.amount) THEN
6073 Okl_Api.set_message(
6074 G_APP_NAME,
6075 'OKL_QA_SECR_PAYMENT',
6076 'FEE_TYPE',
6077 l_fee_type,
6078 'STRM_TYPE',
6079 fee_line_rec.name
6080 );
6081 x_return_status := Okl_Api.G_RET_STS_ERROR;
6082 END IF;
6083
6084 END IF; --7
6085
6086 END LOOP; -- fee_line_csr
6087
6088 -- check 5 cont.
6089 IF (l_tot_secdep > 1) THEN
6090 Okl_Api.set_message(
6091 p_app_name => G_APP_NAME,
6092 p_msg_name => 'OKL_QA_SECDEP_MORE1'
6093 );
6094
6095 x_return_status := Okl_Api.G_RET_STS_ERROR;
6096 END IF;
6097
6098 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
6099 Okl_Api.set_message(
6100 p_app_name => G_APP_NAME,
6101 p_msg_name => G_QA_SUCCESS);
6102 END IF;
6103
6104 EXCEPTION
6105
6106 WHEN OTHERS THEN
6107 NULL;
6108 END check_fee_lines;
6109
6110
6111
6112
6113 ----------------------------------------------------------------------------
6114 --start of comments
6115 --API Name : check_rolloverQuotes
6116 --Description : API called to validate the rollover quote on a contract.
6117 -- Check if the Rollover fee amount is equal to Rollover
6118 -- qupte amount.
6119 --Parameters : IN - p_chr_id - Contract Number
6120 -- OUT - x_return_status - Return Status
6121 --History : 23-Aug-2004 Manu Created
6122 --
6123 --
6124 --end of comments
6125 -----------------------------------------------------------------------------
6126
6127 PROCEDURE check_rolloverQuotes(
6128 x_return_status OUT NOCOPY VARCHAR2,
6129 p_chr_id IN NUMBER) IS
6130
6131
6132 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
6133 l_api_version CONSTANT NUMBER := 1.0;
6134 l_init_msg_list VARCHAR2(1) DEFAULT Okc_Api.G_FALSE;
6135 l_msg_count NUMBER;
6136 l_msg_data VARCHAR2(1000);
6137 l_api_name CONSTANT VARCHAR2(30) := 'CHECK_ROLLOVERQUOTES';
6138
6139 l_not_found BOOLEAN := FALSE;
6140 l_amt NUMBER;
6141 l_found VARCHAR2(1);
6142
6143
6144 /* Cursor to get the top fee line and the rollover quote
6145 for top fee line of a given contract. */
6146
6147 CURSOR l_rq_top_fee_ln_csr ( chrID IN OKC_K_HEADERS_B.ID%TYPE ) IS
6148 SELECT kle.id, kle.qte_id, kle.amount, cleb.name
6149 FROM okc_k_lines_v cleb,
6150 okl_k_lines kle
6151 WHERE cleb.dnz_chr_id = chrID
6152 AND kle.ID = cleb.ID
6153 AND kle.fee_type = 'ROLLOVER'
6154 -- AND cleb.sts_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED', 'ABANDONED');
6155 AND NOT EXISTS (
6156 SELECT 'Y'
6157 FROM okc_statuses_v okcsts
6158 WHERE okcsts.code = cleb.sts_code
6159 AND okcsts.ste_code IN ('EXPIRED','HOLD','CANCELLED','TERMINATED', 'ABANDONED'));
6160
6161
6162 /* Cursor to get the top fee line and the rollover quote
6163 for top fee line of a given contract. */
6164
6165 CURSOR l_rq_top_fee_ln_csr1 ( chrID IN OKC_K_HEADERS_B.ID%TYPE ) IS
6166 SELECT kle.qte_id
6167 FROM okc_k_lines_b cleb,
6168 okl_k_lines kle
6169 WHERE cleb.dnz_chr_id = chrID
6170 AND kle.ID = cleb.ID
6171 AND kle.fee_type = 'ROLLOVER'
6172 -- AND cleb.sts_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED', 'ABANDONED');
6173 AND NOT EXISTS (
6174 SELECT 'Y'
6175 FROM okc_statuses_v okcsts
6176 WHERE okcsts.code = cleb.sts_code
6177 AND okcsts.ste_code IN ('EXPIRED','HOLD','CANCELLED','TERMINATED', 'ABANDONED'));
6178
6179
6180 /* Cursor to get the rollover quote fee sub-lines (applied to assets) for a
6181 given contract. */
6182
6183 CURSOR l_rq_sub_ln_fee_csr ( chrID IN OKC_K_HEADERS_B.ID%TYPE,
6184 feeTopLine IN OKL_K_LINES.ID%TYPE) IS
6185 SELECT kle.id, kle.amount, cleb.end_date
6186 FROM okc_k_lines_b cleb,
6187 okl_k_lines kle
6188 WHERE cleb.dnz_chr_id = chrID
6189 AND kle.ID = cleb.ID
6190 AND cleb.CLE_ID = feeTopLine
6191 -- AND cleb.sts_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED', 'ABANDONED');
6192 AND NOT EXISTS (
6193 SELECT 'Y'
6194 FROM okc_statuses_v okcsts
6195 WHERE okcsts.code = cleb.sts_code
6196 --Bug# 4959361: Include Terminated lines when fetching sub-line amount
6197 --AND okcsts.ste_code IN ('EXPIRED','HOLD','CANCELLED','TERMINATED', 'ABANDONED'));
6198 AND okcsts.ste_code IN ('EXPIRED','HOLD','CANCELLED','ABANDONED'));
6199
6200
6201 /* Cursor to get the Quote Number. */
6202
6203 CURSOR l_qte_number_csr ( qteID IN OKL_TRX_QUOTES_V.ID%TYPE ) IS
6204 SELECT quote_number
6205 FROM okl_trx_quotes_v
6206 WHERE id = qteID;
6207
6208
6209 /* Cursor to get the rollover quote fee top/sub-line payments for a
6210 given contract. */
6211
6212 CURSOR l_rq_fee_pmt_csr ( chrID IN OKC_K_HEADERS_B.ID%TYPE,
6213 feeLine IN OKL_K_LINES.ID%TYPE) IS
6214
6215 SELECT sll.rule_information2 start_date,
6216 SLL.rule_information3 periods,
6217 DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12) mpp,
6218 TRUNC(ADD_MONTHS(Fnd_Date.canonical_to_date(sll.rule_information2),
6219 TO_NUMBER(SLL.rule_information3)*DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12)) - 1) end_date,
6220 styt.name stream_type
6221 FROM okc_rules_b sll,
6222 okc_rules_b slh,
6223 okc_rule_groups_b rgp,
6224 okl_strm_type_b sty,
6225 okl_strm_type_tl styt
6226 WHERE rgp.dnz_chr_id = chrID
6227 AND rgp.cle_id = feeLine
6228 AND rgp.rgd_code = 'LALEVL'
6229 AND rgp.id = slh.rgp_id
6230 AND slh.rule_information_category = 'LASLH'
6231 AND slh.object1_id1 = TO_CHAR(sty.id)
6232 AND styt.LANGUAGE = USERENV('LANG')
6233 AND sty.id = styt.id
6234 AND TO_CHAR(slh.id) = sll.object2_id1
6235 AND sll.rule_information_category = 'LASLL';
6236
6237
6238 /* Cursor to get the rollover quote fee top/sub-line payments HEADER for a
6239 given contract. */
6240
6241 CURSOR l_rq_fee_pmtH_csr ( chrID IN OKC_K_HEADERS_B.ID%TYPE,
6242 feeLine IN OKL_K_LINES.ID%TYPE) IS
6243
6244 SELECT slh.id
6245 FROM okc_rules_b slh,
6246 okc_rule_groups_b rgp,
6247 okl_strm_type_b sty,
6248 okl_strm_type_tl styt
6249 WHERE rgp.dnz_chr_id = chrID
6250 AND rgp.cle_id = feeLine
6251 AND rgp.rgd_code = 'LALEVL'
6252 AND rgp.id = slh.rgp_id
6253 AND slh.rule_information_category = 'LASLH'
6254 AND slh.object1_id1 = TO_CHAR(sty.id)
6255 AND styt.LANGUAGE = USERENV('LANG')
6256 AND sty.id = styt.id;
6257
6258 l_top_fee_ln_id OKL_K_LINES.ID%TYPE;
6259 l_top_fee_ln_name OKC_K_LINES_V.NAME%TYPE;
6260 l_sub_fee_ln_id OKL_K_LINES.ID%TYPE;
6261 l_qte_id OKL_K_LINES.QTE_ID%TYPE;
6262 l_qte_num OKL_TRX_QUOTES_V.QUOTE_NUMBER%TYPE;
6263 p_term_tbl Okl_Trx_Quotes_Pub.qtev_tbl_type;
6264 x_term_tbl Okl_Trx_Quotes_Pub.qtev_tbl_type;
6265 x_err_msg VARCHAR2(1000);
6266
6267 l_tq_rec_count NUMBER := 0; -- Rollover fee line count on a contract
6268 l_rq_sub_ln_fee_cnt NUMBER := 0;
6269 l_rq_dup_trm_qt_cnt NUMBER := 0;
6270 l_pmt_dup_sub_ln_cnt NUMBER := 0; -- Counter for duplicate payments for a sub-line.
6271 l_payment_top_ln_cnt NUMBER := 0; -- Counter for rollover payments top lines
6272 l_payment_sub_ln_cnt NUMBER := 0; -- Counter for rollover payments sub-lines
6273 l_rq_top_ln_fee_amt NUMBER := 0; -- Rollover top line total fee amount.
6274 l_rq_sub_ln_fee_amt NUMBER := 0; -- Rollover sum of sub-line fee amount.
6275 l_top_ln_pmt_exist BOOLEAN := FALSE;
6276 l_rq_sln_fee_amt_chk BOOLEAN := FALSE; -- If there are sub-lines payments exists.
6277
6278 BEGIN
6279 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
6280
6281 -- OPEN l_rq_top_fee_ln_csr ( chrID => p_chr_id );
6282 FOR l_rq_top_fee_ln IN l_rq_top_fee_ln_csr ( chrID => p_chr_id )
6283 LOOP
6284 --FETCH l_rq_top_fee_ln_csr INTO l_top_fee_ln_id, l_qte_id;
6285 --IF( l_rq_top_fee_ln_csr%FOUND ) THEN
6286
6287 /* Store the amount for rollover fee top line */
6288 l_rq_top_ln_fee_amt := l_rq_top_fee_ln.amount;
6289
6290 /* Store the Top Fee Line Name */
6291 l_top_fee_ln_name := l_rq_top_fee_ln.name;
6292
6293 /* Call the API to validate the rollover termination quotes
6294 for a given contract. This API is also called before
6295 activating the contract. */
6296
6297 l_return_status := x_return_status;
6298 Okl_Maintain_Fee_Pvt.validate_rollover_feeLine(
6299 p_api_version => l_api_version,
6300 p_init_msg_list => l_init_msg_list,
6301 x_return_status => l_return_status,
6302 x_msg_count => l_msg_count,
6303 x_msg_data => l_msg_data,
6304 p_chr_id => p_chr_id,
6305 p_qte_id => l_rq_top_fee_ln.qte_id,
6306 p_for_qa_check => TRUE);
6307
6308 -- dedey 01/21/05 Bug 4134571
6309 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6310 x_return_status := Okl_Api.G_RET_STS_ERROR;
6311 END IF;
6312
6313 /* Check Payments for the top fee line if they exist. If there are multiple
6314 payments for the top line error out.
6315 CHECK FOR PAYMENT HEADER. */
6316 FOR l_rq_fee_pmtH IN l_rq_fee_pmtH_csr ( chrID => p_chr_id, feeLine => l_rq_top_fee_ln.id )
6317 LOOP
6318 l_top_ln_pmt_exist := TRUE;
6319 l_payment_top_ln_cnt := l_payment_top_ln_cnt + 1;
6320
6321
6322 /* ALREADY CHECKED. Please enter only one payment type per fee line.
6323 (line=SERVICE AND MAINTENANCE)
6324 IF (l_payment_top_ln_cnt > 1) THEN
6325 OPEN l_qte_number_csr(qteID => l_rq_top_fee_ln.qte_id);
6326 FETCH l_qte_number_csr INTO l_qte_num;
6327 CLOSE l_qte_number_csr;
6328 x_return_status := OKL_API.G_RET_STS_ERROR;
6329 OKL_API.set_message(
6330 p_app_name => G_APP_NAME,
6331 p_msg_name => 'OKL_QA_RQ_MLTP_PMTS_TOP_LN',
6332 p_token1 => 'quoteNum',
6333 p_token1_value => l_qte_num);
6334 END IF;
6335 ********************************/
6336 END LOOP;
6337 l_payment_top_ln_cnt := 0;
6338
6339 /* Check for any given contract, each rollover fee line must
6340 point to a different termination quote. */
6341
6342 l_rq_dup_trm_qt_cnt := 0;
6343 FOR l_rq_top_fee_ln1 IN l_rq_top_fee_ln_csr1 ( chrID => p_chr_id )
6344 LOOP
6345 IF (l_rq_top_fee_ln1.qte_id = l_rq_top_fee_ln.qte_id) THEN
6346 l_rq_dup_trm_qt_cnt := l_rq_dup_trm_qt_cnt + 1;
6347 IF ( l_rq_dup_trm_qt_cnt > 1 ) THEN
6348 OPEN l_qte_number_csr(qteID => l_rq_top_fee_ln.qte_id);
6349 FETCH l_qte_number_csr INTO l_qte_num;
6350 CLOSE l_qte_number_csr;
6351 x_return_status := Okl_Api.G_RET_STS_ERROR;
6352 Okl_Api.set_message(
6353 p_app_name => G_APP_NAME,
6354 p_msg_name => 'OKL_QA_DUP_TERM_QUOTE');
6355 END IF;
6356 END IF;
6357 END LOOP;
6358 l_rq_dup_trm_qt_cnt := 0;
6359
6360 /* Check payments for rollover quote fee sub-line, if it exist both for top
6361 line and sub-line error out. If there are multiple payments for sub-line
6362 error out. If payment end date is past fee line end date error out. */
6363
6364 FOR l_rq_sub_ln_fee IN l_rq_sub_ln_fee_csr( chrID => p_chr_id, feeTopLine => l_rq_top_fee_ln.id )
6365 LOOP
6366
6367 l_rq_sub_ln_fee_cnt := l_rq_sub_ln_fee_cnt + 1;
6368
6369 /* Store the sum of for rollover fee sub-line amount. */
6370 l_rq_sub_ln_fee_amt := l_rq_sub_ln_fee_amt + l_rq_sub_ln_fee.amount;
6371
6372 /* Sub-line fees exists. */
6373 l_rq_sln_fee_amt_chk := TRUE;
6374
6375 OPEN l_qte_number_csr(qteID => l_rq_top_fee_ln.qte_id);
6376 FETCH l_qte_number_csr INTO l_qte_num;
6377 CLOSE l_qte_number_csr;
6378
6379 /* Check Payments for the rollovr quote fee sub-line if they exist. If there are multiple
6380 payments for the sub-line error out.
6381 CHECK FOR PAYMENT HEADER. */
6382
6383 FOR l_rq_fee_pmtH IN l_rq_fee_pmtH_csr ( chrID => p_chr_id, feeLine => l_rq_sub_ln_fee.id )
6384 LOOP
6385 IF (l_top_ln_pmt_exist) THEN
6386 x_return_status := Okl_Api.G_RET_STS_ERROR;
6387 Okl_Api.set_message(
6388 p_app_name => G_APP_NAME,
6389 p_msg_name => 'OKL_QA_RQ_PMTS_TOP_SUB_EXIST',
6390 p_token1 => 'QUOTE_NUMBER',
6391 p_token1_value => l_qte_num);
6392 END IF;
6393
6394
6395 l_payment_sub_ln_cnt := l_payment_sub_ln_cnt + 1;
6396
6397
6398 /**************
6399 l_pmt_dup_sub_ln_cnt := 0;
6400
6401 FOR l_rq_fee_pmt1 IN l_rq_fee_pmt_csr ( chrID => p_chr_id, feeLine => l_rq_sub_ln_fee.id )
6402 LOOP
6403 IF ( l_rq_fee_pmt.id = l_rq_fee_pmt1.id ) THEN
6404 l_pmt_dup_sub_ln_cnt := l_pmt_dup_sub_ln_cnt + 1;
6405 END IF;
6406 END LOOP;
6407 *****************/
6408
6409 /* Check if the there are multiple payments for the rollover quote
6410 fee sub-line, if so error out.
6411
6412 IF (l_pmt_dup_sub_ln_cnt > 1) THEN
6413 x_return_status := OKL_API.G_RET_STS_ERROR;
6414 OKL_API.set_message(
6415 p_app_name => G_APP_NAME,
6416 p_msg_name => 'OKL_QA_RQ_MLTP_PMTS_SLN',
6417 p_token1 => 'quoteNum',
6418 p_token1_value => l_qte_num);
6419 END IF;
6420
6421 l_pmt_dup_sub_ln_cnt := 0;
6422 ******************/
6423 END LOOP;
6424
6425 FOR l_rq_fee_pmt IN l_rq_fee_pmt_csr ( chrID => p_chr_id, feeLine => l_rq_sub_ln_fee.id )
6426 LOOP
6427 /* Check if the payment end date is within in the rollover quote
6428 fee sub-line's end date, if not error out. */
6429
6430 IF ( TRUNC(l_rq_fee_pmt.end_date) > TRUNC(l_rq_sub_ln_fee.end_date) ) THEN
6431 x_return_status := Okl_Api.G_RET_STS_ERROR;
6432 Okl_Api.set_message(
6433 p_app_name => G_APP_NAME,
6434 p_msg_name => 'OKL_QA_RQ_SLN_PMT_ED',
6435 p_token1 => 'QUOTE_NUMBER',
6436 p_token1_value => l_qte_num);
6437 END IF;
6438
6439 END LOOP;
6440
6441 END LOOP;
6442
6443 /* Check if a rollover top line fee amount is not equal to sub-line fee amount,
6444 if exists, if not error out. */
6445
6446 IF ( (l_rq_sln_fee_amt_chk) AND (l_rq_top_ln_fee_amt <> l_rq_sub_ln_fee_amt) ) THEN
6447 x_return_status := Okl_Api.G_RET_STS_ERROR;
6448 Okl_Api.set_message(
6449 p_app_name => G_APP_NAME,
6450 p_msg_name => 'OKL_QA_RQ_FEE_AMT_NEQ',
6451 p_token1 => 'QUOTE_NUMBER',
6452 p_token1_value => l_qte_num);
6453 END IF;
6454 l_rq_top_ln_fee_amt := 0;
6455 l_rq_sub_ln_fee_amt := 0;
6456
6457 /* If no payments are defiend for the fee line then error out. */
6458
6459 IF ((NOT l_top_ln_pmt_exist) AND (NOT l_rq_sln_fee_amt_chk)) THEN
6460 x_return_status := Okl_Api.G_RET_STS_ERROR;
6461 Okl_Api.set_message(
6462 p_app_name => G_APP_NAME,
6463 p_msg_name => 'OKL_QA_RQ_NO_PMTS',
6464 p_token1 => 'FEE_LINE',
6465 p_token1_value => l_top_fee_ln_name);
6466
6467 END IF;
6468
6469
6470 /* Check if a payment is defined for EACH of the rollover quote fee sub-lines HEADER,
6471 if not error out. If there are multiple payments defiend for a rollover quote
6472 fee sub-line HEADER error out. */
6473
6474 IF ((NOT l_top_ln_pmt_exist) AND (l_rq_sub_ln_fee_cnt > l_payment_sub_ln_cnt)) THEN
6475 x_return_status := Okl_Api.G_RET_STS_ERROR;
6476 Okl_Api.set_message(
6477 p_app_name => G_APP_NAME,
6478 p_msg_name => 'OKL_QA_RQ_PMTS_MISS_SLN',
6479 p_token1 => 'QUOTE_NUMBER',
6480 p_token1_value => l_qte_num);
6481 ELSIF ((NOT l_top_ln_pmt_exist) AND (l_rq_sub_ln_fee_cnt < l_payment_sub_ln_cnt)) THEN
6482 x_return_status := Okl_Api.G_RET_STS_ERROR;
6483 Okl_Api.set_message(
6484 p_app_name => G_APP_NAME,
6485 p_msg_name => 'OKL_QA_RQ_MUL_SLN_PMTS',
6486 p_token1 => 'QUOTE_NUMBER',
6487 p_token1_value => l_qte_num);
6488 END IF;
6489 l_rq_sub_ln_fee_cnt := 0;
6490 l_payment_sub_ln_cnt := 0;
6491 -- Bug 3987419
6492 l_top_ln_pmt_exist := FALSE; -- Setting back to FALSE to check for next fee line.
6493
6494 -- Bug 4094336
6495 l_rq_sln_fee_amt_chk := FALSE; -- Setting back to FALSE.
6496
6497 END LOOP;
6498
6499 --TURN_ON_THE_FUNC_CONSTRAINTS;
6500
6501 EXCEPTION
6502
6503 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
6504 x_return_status := Okl_Api.G_RET_STS_ERROR;
6505
6506 IF l_rq_top_fee_ln_csr%ISOPEN THEN
6507 CLOSE l_rq_top_fee_ln_csr;
6508 END IF;
6509
6510 IF l_rq_top_fee_ln_csr1%ISOPEN THEN
6511 CLOSE l_rq_top_fee_ln_csr1;
6512 END IF;
6513
6514 IF l_rq_sub_ln_fee_csr%ISOPEN THEN
6515 CLOSE l_rq_sub_ln_fee_csr;
6516 END IF;
6517
6518 IF l_qte_number_csr%ISOPEN THEN
6519 CLOSE l_qte_number_csr;
6520 END IF;
6521
6522 IF l_rq_fee_pmt_csr%ISOPEN THEN
6523 CLOSE l_rq_fee_pmt_csr;
6524 END IF;
6525
6526 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
6527 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
6528
6529 IF l_rq_top_fee_ln_csr%ISOPEN THEN
6530 CLOSE l_rq_top_fee_ln_csr;
6531 END IF;
6532
6533 IF l_rq_top_fee_ln_csr1%ISOPEN THEN
6534 CLOSE l_rq_top_fee_ln_csr1;
6535 END IF;
6536
6537 IF l_rq_sub_ln_fee_csr%ISOPEN THEN
6538 CLOSE l_rq_sub_ln_fee_csr;
6539 END IF;
6540
6541 IF l_qte_number_csr%ISOPEN THEN
6542 CLOSE l_qte_number_csr;
6543 END IF;
6544
6545 IF l_rq_fee_pmt_csr%ISOPEN THEN
6546 CLOSE l_rq_fee_pmt_csr;
6547 END IF;
6548
6549 WHEN OTHERS THEN
6550 x_return_status := Okl_Api.G_RET_STS_ERROR;
6551
6552 IF l_rq_top_fee_ln_csr%ISOPEN THEN
6553 CLOSE l_rq_top_fee_ln_csr;
6554 END IF;
6555
6556 IF l_rq_top_fee_ln_csr1%ISOPEN THEN
6557 CLOSE l_rq_top_fee_ln_csr1;
6558 END IF;
6559
6560 IF l_rq_sub_ln_fee_csr%ISOPEN THEN
6561 CLOSE l_rq_sub_ln_fee_csr;
6562 END IF;
6563
6564 IF l_qte_number_csr%ISOPEN THEN
6565 CLOSE l_qte_number_csr;
6566 END IF;
6567
6568 IF l_rq_fee_pmt_csr%ISOPEN THEN
6569 CLOSE l_rq_fee_pmt_csr;
6570 END IF;
6571
6572 /*
6573
6574 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6575 p_api_name => l_api_name,
6576 p_pkg_name => g_pkg_name,
6577 p_exc_name => 'OTHERS',
6578 x_msg_count => l_msg_count,
6579 x_msg_data => l_msg_data,
6580 p_api_type => g_api_type);
6581 */
6582
6583 END check_rolloverQuotes;
6584
6585 --Bug# 4996899
6586 ----------------------------------------------------------------------------
6587 --start of comments
6588 --API Name : check_financed_fees
6589 --Description : API called to validate the financed fees on a contract.
6590 --Parameters : IN - p_chr_id - Contract Number
6591 -- OUT - x_return_status - Return Status
6592 --History : 03-Mar-2006 rpillay Created
6593 --
6594 --
6595 --end of comments
6596 -----------------------------------------------------------------------------
6597
6598 PROCEDURE check_financed_fees(
6599 x_return_status OUT NOCOPY VARCHAR2,
6600 p_chr_id IN NUMBER) IS
6601
6602
6603 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
6604 l_api_version CONSTANT NUMBER := 1.0;
6605 l_init_msg_list VARCHAR2(1) DEFAULT Okc_Api.G_FALSE;
6606 l_msg_count NUMBER;
6607 l_msg_data VARCHAR2(1000);
6608 l_api_name CONSTANT VARCHAR2(30) := 'CHECK_FINANCED_FEES';
6609
6610 l_not_found BOOLEAN := FALSE;
6611 l_amt NUMBER;
6612 l_found VARCHAR2(1);
6613
6614
6615 /* Cursor to get the top fee line for financed fees of a given contract. */
6616
6617 -- R12B Authoring OA Migration
6618 -- Validation of Sales Tax Financed Fee will be done
6619 -- after the Calculate Upfront Tax process
6620 CURSOR l_fn_top_fee_ln_csr ( chrID IN OKC_K_HEADERS_B.ID%TYPE ) IS
6621 SELECT kle.id, kle.amount, cleb.name
6622 FROM okc_k_lines_v cleb,
6623 okl_k_lines kle,
6624 okc_statuses_b okcsts
6625 WHERE cleb.dnz_chr_id = chrID
6626 AND cleb.chr_id = chrID
6627 AND kle.ID = cleb.ID
6628 AND kle.fee_type = 'FINANCED'
6629 AND okcsts.code = cleb.sts_code
6630 AND okcsts.ste_code NOT IN ('EXPIRED','HOLD','CANCELLED','TERMINATED', 'ABANDONED')
6631 AND NVL(kle.fee_purpose_code,'XXX') <> 'SALESTAX';
6632
6633
6634 /* Cursor to get the financed fee sub-lines (applied to assets) for a
6635 given contract. */
6636
6637 CURSOR l_fn_sub_ln_fee_csr ( chrID IN OKC_K_HEADERS_B.ID%TYPE,
6638 feeTopLine IN OKL_K_LINES.ID%TYPE) IS
6639 SELECT kle.id, kle.amount, cleb.end_date
6640 ,cleb.start_date -- added for bug 5115701
6641 FROM okc_k_lines_b cleb,
6642 okl_k_lines kle,
6643 okc_statuses_b okcsts
6644 WHERE cleb.dnz_chr_id = chrID
6645 AND kle.ID = cleb.ID
6646 AND cleb.CLE_ID = feeTopLine
6647 AND okcsts.code = cleb.sts_code
6648 --Bug# 4959361: Include Terminated lines when fetching sub-line amount
6649 AND okcsts.ste_code NOT IN ('EXPIRED','HOLD','CANCELLED','ABANDONED');
6650
6651
6652 /* Cursor to get the financed fee top/sub-line payments for a
6653 given contract. */
6654
6655 CURSOR l_fn_fee_pmt_csr ( chrID IN OKC_K_HEADERS_B.ID%TYPE,
6656 feeLine IN OKL_K_LINES.ID%TYPE) IS
6657
6658 SELECT Fnd_Date.canonical_to_date(sll.rule_information2) start_date, -- formated for bug 5115701,
6659 SLL.rule_information3 periods,
6660 DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12) mpp,
6661 TRUNC(ADD_MONTHS(Fnd_Date.canonical_to_date(sll.rule_information2),
6662 TO_NUMBER(SLL.rule_information3)*DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12)) - 1) end_date,
6663 styt.name stream_type
6664 FROM okc_rules_b sll,
6665 okc_rules_b slh,
6666 okc_rule_groups_b rgp,
6667 okl_strm_type_b sty,
6668 okl_strm_type_tl styt
6669 WHERE rgp.dnz_chr_id = chrID
6670 AND rgp.cle_id = feeLine
6671 AND rgp.rgd_code = 'LALEVL'
6672 AND rgp.id = slh.rgp_id
6673 AND slh.rule_information_category = 'LASLH'
6674 AND slh.object1_id1 = TO_CHAR(sty.id)
6675 AND styt.LANGUAGE = USERENV('LANG')
6676 AND sty.id = styt.id
6677 AND TO_CHAR(slh.id) = sll.object2_id1
6678 AND sll.rule_information_category = 'LASLL';
6679
6680
6681 /* Cursor to get the financed fee top/sub-line payments HEADER for a
6682 given contract. */
6683
6684 CURSOR l_fn_fee_pmtH_csr ( chrID IN OKC_K_HEADERS_B.ID%TYPE,
6685 feeLine IN OKL_K_LINES.ID%TYPE) IS
6686
6687 SELECT slh.id
6688 FROM okc_rules_b slh,
6689 okc_rule_groups_b rgp,
6690 okl_strm_type_b sty,
6691 okl_strm_type_tl styt
6692 WHERE rgp.dnz_chr_id = chrID
6693 AND rgp.cle_id = feeLine
6694 AND rgp.rgd_code = 'LALEVL'
6695 AND rgp.id = slh.rgp_id
6696 AND slh.rule_information_category = 'LASLH'
6697 AND slh.object1_id1 = TO_CHAR(sty.id)
6698 AND styt.LANGUAGE = USERENV('LANG')
6699 AND sty.id = styt.id;
6700
6701 l_top_fee_ln_id OKL_K_LINES.ID%TYPE;
6702 l_top_fee_ln_name OKC_K_LINES_V.NAME%TYPE;
6703 l_sub_fee_ln_id OKL_K_LINES.ID%TYPE;
6704 x_err_msg VARCHAR2(1000);
6705
6706 l_fn_sub_ln_fee_cnt NUMBER := 0;
6707 l_pmt_dup_sub_ln_cnt NUMBER := 0; -- Counter for duplicate payments for a sub-line.
6708 l_payment_top_ln_cnt NUMBER := 0; -- Counter for financed payments top lines
6709 l_payment_sub_ln_cnt NUMBER := 0; -- Counter for financed payments sub-lines
6710 l_fn_top_ln_fee_amt NUMBER := 0; -- Financed top line total fee amount.
6711 l_fn_sub_ln_fee_amt NUMBER := 0; -- Financed sum of sub-line fee amount.
6712 l_top_ln_pmt_exist BOOLEAN := FALSE;
6713 l_fn_sln_fee_amt_chk BOOLEAN := FALSE; -- If there are sub-lines payments exists.
6714
6715 BEGIN
6716 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
6717
6718 FOR l_fn_top_fee_ln IN l_fn_top_fee_ln_csr ( chrID => p_chr_id )
6719 LOOP
6720
6721 /* Store the amount for financed fee top line */
6722 l_fn_top_ln_fee_amt := l_fn_top_fee_ln.amount;
6723
6724 /* Store the Top Fee Line Name */
6725 l_top_fee_ln_name := l_fn_top_fee_ln.name;
6726
6727 /* Check Payments for the top fee line if they exist. */
6728 FOR l_fn_fee_pmtH IN l_fn_fee_pmtH_csr ( chrID => p_chr_id, feeLine => l_fn_top_fee_ln.id )
6729 LOOP
6730 l_top_ln_pmt_exist := TRUE;
6731 END LOOP;
6732
6733 /* Check payments for financed fee sub-line, if it exist both for top
6734 line and sub-line error out. If payment end date is past fee line end date error out. */
6735
6736 FOR l_fn_sub_ln_fee IN l_fn_sub_ln_fee_csr( chrID => p_chr_id, feeTopLine => l_fn_top_fee_ln.id )
6737 LOOP
6738
6739 l_fn_sub_ln_fee_cnt := l_fn_sub_ln_fee_cnt + 1;
6740
6741 /* Store the sum of financed fee sub-line amount. */
6742 l_fn_sub_ln_fee_amt := l_fn_sub_ln_fee_amt + l_fn_sub_ln_fee.amount;
6743
6744 /* Sub-line fees exists. */
6745 l_fn_sln_fee_amt_chk := TRUE;
6746
6747 /* Check Payments for the financed fee sub-line if they exist. */
6748
6749 FOR l_fn_fee_pmtH IN l_fn_fee_pmtH_csr ( chrID => p_chr_id, feeLine => l_fn_sub_ln_fee.id )
6750 LOOP
6751 IF (l_top_ln_pmt_exist) THEN
6752 x_return_status := Okl_Api.G_RET_STS_ERROR;
6753 Okl_Api.set_message(
6754 p_app_name => G_APP_NAME,
6755 p_msg_name => 'OKL_QA_FN_PMTS_TOP_SUB_EXIST',
6756 p_token1 => 'FEE_LINE',
6757 p_token1_value => l_top_fee_ln_name);
6758 END IF;
6759
6760 l_payment_sub_ln_cnt := l_payment_sub_ln_cnt + 1;
6761
6762 END LOOP;
6763
6764 FOR l_fn_fee_pmt IN l_fn_fee_pmt_csr ( chrID => p_chr_id, feeLine => l_fn_sub_ln_fee.id )
6765 LOOP
6766 /* Check if the payment end date is within in the financed
6767 fee sub-line's end date, if not error out. */
6768
6769 -- added for bug 5115701 - start
6770
6771 IF ( TRUNC(l_fn_fee_pmt.start_date) < TRUNC(l_fn_sub_ln_fee.start_date) ) THEN
6772
6773 x_return_status := Okl_Api.G_RET_STS_ERROR;
6774 Okl_Api.set_message(
6775 p_app_name => G_APP_NAME,
6776 p_msg_name => 'OKL_QA_FN_SLN_PMT_SD',
6777 p_token1 => 'FEE_LINE',
6778 p_token1_value => l_top_fee_ln_name);
6779 END IF;
6780
6781 -- added for bug 5115701 - end
6782
6783 IF ( TRUNC(l_fn_fee_pmt.end_date) > TRUNC(l_fn_sub_ln_fee.end_date) ) THEN
6784 x_return_status := Okl_Api.G_RET_STS_ERROR;
6785 Okl_Api.set_message(
6786 p_app_name => G_APP_NAME,
6787 p_msg_name => 'OKL_QA_FN_SLN_PMT_ED',
6788 p_token1 => 'FEE_LINE',
6789 p_token1_value => l_top_fee_ln_name);
6790 END IF;
6791
6792 END LOOP;
6793 END LOOP;
6794
6795 /* Check if a financed top line fee amount is not equal to sub-line fee amount,
6796 if exists, if not error out. */
6797
6798 IF ( (l_fn_sln_fee_amt_chk) AND (l_fn_top_ln_fee_amt <> l_fn_sub_ln_fee_amt) ) THEN
6799 x_return_status := Okl_Api.G_RET_STS_ERROR;
6800 Okl_Api.set_message(
6801 p_app_name => G_APP_NAME,
6802 p_msg_name => 'OKL_QA_FN_FEE_AMT_NEQ',
6803 p_token1 => 'FEE_LINE',
6804 p_token1_value => l_top_fee_ln_name);
6805 END IF;
6806 l_fn_top_ln_fee_amt := 0;
6807 l_fn_sub_ln_fee_amt := 0;
6808
6809 /* If no payments are defiend for the fee line then error out. */
6810
6811 IF ((NOT l_top_ln_pmt_exist) AND (NOT l_fn_sln_fee_amt_chk)) THEN
6812 x_return_status := Okl_Api.G_RET_STS_ERROR;
6813 Okl_Api.set_message(
6814 p_app_name => G_APP_NAME,
6815 p_msg_name => 'OKL_QA_RQ_NO_PMTS',
6816 p_token1 => 'FEE_LINE',
6817 p_token1_value => l_top_fee_ln_name);
6818
6819 END IF;
6820
6821
6822 /* Check if a payment is defined for EACH of the financed fee sub-lines HEADER,
6823 if not error out. If there are multiple payments defiend for a financed
6824 fee sub-line HEADER error out. */
6825
6826 IF ((NOT l_top_ln_pmt_exist) AND (l_fn_sub_ln_fee_cnt > l_payment_sub_ln_cnt)) THEN
6827 x_return_status := Okl_Api.G_RET_STS_ERROR;
6828 Okl_Api.set_message(
6829 p_app_name => G_APP_NAME,
6830 p_msg_name => 'OKL_QA_FN_PMTS_MISS_SLN',
6831 p_token1 => 'FEE_LINE',
6832 p_token1_value => l_top_fee_ln_name);
6833 ELSIF ((NOT l_top_ln_pmt_exist) AND (l_fn_sub_ln_fee_cnt < l_payment_sub_ln_cnt)) THEN
6834 x_return_status := Okl_Api.G_RET_STS_ERROR;
6835 Okl_Api.set_message(
6836 p_app_name => G_APP_NAME,
6837 p_msg_name => 'OKL_QA_FN_MUL_SLN_PMTS',
6838 p_token1 => 'FEE_LINE',
6839 p_token1_value => l_top_fee_ln_name);
6840 END IF;
6841 l_fn_sub_ln_fee_cnt := 0;
6842 l_payment_sub_ln_cnt := 0;
6843 -- Bug 3987419
6844 l_top_ln_pmt_exist := FALSE; -- Setting back to FALSE to check for next fee line.
6845
6846 -- Bug 4094336
6847 l_fn_sln_fee_amt_chk := FALSE; -- Setting back to FALSE.
6848
6849 END LOOP;
6850
6851 EXCEPTION
6852
6853 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
6854 x_return_status := Okl_Api.G_RET_STS_ERROR;
6855
6856 IF l_fn_top_fee_ln_csr%ISOPEN THEN
6857 CLOSE l_fn_top_fee_ln_csr;
6858 END IF;
6859
6860 IF l_fn_sub_ln_fee_csr%ISOPEN THEN
6861 CLOSE l_fn_sub_ln_fee_csr;
6862 END IF;
6863
6864 IF l_fn_fee_pmt_csr%ISOPEN THEN
6865 CLOSE l_fn_fee_pmt_csr;
6866 END IF;
6867
6868 WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
6869 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
6870
6871 IF l_fn_top_fee_ln_csr%ISOPEN THEN
6872 CLOSE l_fn_top_fee_ln_csr;
6873 END IF;
6874
6875 IF l_fn_sub_ln_fee_csr%ISOPEN THEN
6876 CLOSE l_fn_sub_ln_fee_csr;
6877 END IF;
6878
6879 IF l_fn_fee_pmt_csr%ISOPEN THEN
6880 CLOSE l_fn_fee_pmt_csr;
6881 END IF;
6882
6883 WHEN OTHERS THEN
6884 x_return_status := Okl_Api.G_RET_STS_ERROR;
6885
6886 IF l_fn_top_fee_ln_csr%ISOPEN THEN
6887 CLOSE l_fn_top_fee_ln_csr;
6888 END IF;
6889
6890 IF l_fn_sub_ln_fee_csr%ISOPEN THEN
6891 CLOSE l_fn_sub_ln_fee_csr;
6892 END IF;
6893
6894 IF l_fn_fee_pmt_csr%ISOPEN THEN
6895 CLOSE l_fn_fee_pmt_csr;
6896 END IF;
6897
6898 END check_financed_fees;
6899 --Bug# 4996899
6900
6901 ----------------------------------------------------------------------------
6902 --start of comments
6903 --API Name : check_rollover_lines
6904 --Description : API called to give warning in QA checker if the contract
6905 -- has a rollover fee and it's start date is a future date
6906 -- (greater than sysdate).
6907 --Parameters : IN - p_chr_id - Contract Number
6908 -- OUT - x_return_status - Return Status
6909 --History : 17-Nov-2004 Manu Created
6910 --
6911 --
6912 --end of comments
6913 -----------------------------------------------------------------------------
6914 PROCEDURE check_rollover_lines(
6915 x_return_status OUT NOCOPY VARCHAR2,
6916 p_chr_id IN NUMBER) IS
6917
6918 --p_api_version VARCHAR2(4000) := '1.0';
6919 p_init_msg_list VARCHAR2(4000) DEFAULT Okl_Api.G_FALSE;
6920
6921 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
6922 l_in_future BOOLEAN := FALSE;
6923 l_found VARCHAR2(1);
6924 x_msg_count NUMBER;
6925 x_msg_data VARCHAR2(256);
6926
6927 /* Cursor to if the contract start date is not in the future
6928 (less than or equal to SYSDATE). */
6929
6930 CURSOR l_k_std_csr ( chrID OKC_K_HEADERS_B.ID%TYPE ) IS
6931 SELECT 1
6932 FROM okc_k_lines_b cleb,
6933 okl_k_lines kle,
6934 okc_k_headers_b khr
6935 WHERE khr.id = chrID
6936 AND cleb.dnz_chr_id = khr.id
6937 AND kle.ID = cleb.ID
6938 AND kle.fee_type = 'ROLLOVER'
6939 AND TRUNC(khr.start_date) > SYSDATE
6940 AND NOT EXISTS (
6941 SELECT 'Y'
6942 FROM okc_statuses_b okcsts
6943 WHERE okcsts.code = cleb.sts_code
6944 AND okcsts.ste_code IN ('EXPIRED','HOLD','CANCELLED','TERMINATED', 'ABANDONED'));
6945
6946 BEGIN
6947 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
6948
6949 /* Check if the if the contract has a rollover fee and it's start date
6950 is not in the future date (less than or equal sysdate). */
6951
6952 OPEN l_k_std_csr ( p_chr_id );
6953 FETCH l_k_std_csr INTO l_found;
6954 l_in_future := l_k_std_csr%FOUND; -- IN future
6955 CLOSE l_k_std_csr;
6956
6957 IF( l_in_future ) THEN -- Contract Start date in future
6958 x_return_status := Okl_Api.G_RET_STS_ERROR;
6959 l_in_future := NULL;
6960 l_found := NULL;
6961 Okl_Api.set_message(
6962 p_app_name => G_APP_NAME,
6963 p_msg_name => 'OKL_LLA_RQ_SD_IN_FUTURE');
6964 RAISE Okl_Api.G_EXCEPTION_ERROR;
6965 END IF;
6966
6967 EXCEPTION
6968
6969 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
6970 x_return_status := Okl_Api.G_RET_STS_ERROR;
6971
6972 IF l_k_std_csr%ISOPEN THEN
6973 CLOSE l_k_std_csr;
6974 END IF;
6975
6976 WHEN G_EXCEPTION_HALT_VALIDATION THEN
6977 NULL; -- no processing necessary; validation can continue with next column
6978
6979 IF l_k_std_csr%ISOPEN THEN
6980 CLOSE l_k_std_csr;
6981 END IF;
6982
6983 WHEN OTHERS THEN
6984 -- store SQL error message on message stack
6985 Okl_Api.SET_MESSAGE(
6986 p_app_name => G_APP_NAME,
6987 p_msg_name => G_UNEXPECTED_ERROR,
6988 p_token1 => G_SQLCODE_TOKEN,
6989 p_token1_value => SQLCODE,
6990 p_token2 => G_SQLERRM_TOKEN,
6991 p_token2_value => SQLERRM);
6992
6993 IF l_k_std_csr%ISOPEN THEN
6994 CLOSE l_k_std_csr;
6995 END IF;
6996
6997 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
6998
6999 END check_rollover_lines;
7000
7001 -- Start of comments
7002 --
7003 -- Procedure Name : check_stream_template
7004 -- Description : Bug#3931587 Validating if streams are defined
7005 -- : in contract product template.
7006 -- Business Rules :
7007 -- Parameters :
7008 -- Version : 1.0
7009 -- End of comments
7010
7011 PROCEDURE check_stream_template(
7012 x_return_status OUT NOCOPY VARCHAR2,
7013 p_chr_id IN NUMBER
7014 ) IS
7015
7016 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
7017
7018 CURSOR l_lne_pmnt_csr(chrid OKL_K_HEADERS.KHR_ID%TYPE) IS
7019 SELECT ls.lty_code,
7020 ls.name line_type,
7021 kle.id,
7022 kle.name
7023 FROM OKL_K_LINES_FULL_V kle,
7024 OKC_LINE_STYLES_V ls,
7025 OKC_STATUSES_B sts
7026 WHERE kle.lse_id = ls.id
7027 AND ls.lty_code IN ('FREE_FORM1', 'FEE', 'SOLD_SERVICE')
7028 AND kle.dnz_chr_id = chrid
7029 AND sts.code = kle.sts_code
7030 AND sts.ste_code NOT IN ( 'HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
7031
7032 CURSOR l_fee_strm_csr (chrid OKL_K_HEADERS.KHR_ID%TYPE,
7033 lineid OKC_K_LINES_B.ID%TYPE) IS
7034 SELECT itm.object1_id1
7035 FROM okc_k_items itm
7036 WHERE cle_id = lineid
7037 AND dnz_chr_id = chrid
7038 AND jtot_object1_code = 'OKL_STRMTYP';
7039
7040 CURSOR l_hdr_pmnt_csr (chrid OKL_K_HEADERS.KHR_ID%TYPE) IS
7041 SELECT rule.object1_id1
7042 FROM okc_rule_groups_v rgp,
7043 okc_rules_v rule
7044 WHERE rgp.id = rule.rgp_id
7045 AND rgp.cle_id IS NULL
7046 AND rgp.dnz_chr_id = chrid
7047 AND rgp.rgd_code = 'LALEVL'
7048 AND rule.rule_information_category = 'LASLH';
7049
7050 l_present_yn VARCHAR(1);
7051
7052 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
7053 l_strm_name_rec strm_name_csr%ROWTYPE;
7054
7055 BEGIN
7056
7057 -- initialize return status
7058 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
7059
7060 -- check for header payment
7061 FOR l_hdr_pmnt_rec IN l_hdr_pmnt_csr (p_chr_id)
7062 LOOP
7063
7064 l_present_yn := Okl_Streams_Util.strm_tmpt_contains_strm_type
7065 (p_khr_id => p_chr_id,
7066 p_sty_id => TO_NUMBER(l_hdr_pmnt_rec.object1_id1));
7067
7068 IF (l_present_yn = 'N') THEN
7069 OPEN strm_name_csr ( TO_NUMBER(l_hdr_pmnt_rec.object1_id1) );
7070 FETCH strm_name_csr INTO l_strm_name_rec;
7071 IF strm_name_csr%NOTFOUND THEN
7072 CLOSE strm_name_csr;
7073 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
7074 END IF;
7075 CLOSE strm_name_csr;
7076
7077 Okl_Api.set_message(
7078 p_app_name => G_APP_NAME,
7079 p_msg_name => 'LLA_QA_HDRPMNT_STRMTMPL',
7080 p_token1 => 'STRM_NAME',
7081 p_token1_value => l_strm_name_rec.name
7082 );
7083 x_return_status := Okl_Api.G_RET_STS_ERROR;
7084 END IF;
7085
7086 END LOOP;
7087
7088 FOR l_lne_pmnt IN l_lne_pmnt_csr(p_chr_id)
7089 LOOP
7090
7091 FOR l_rl_rec1 IN l_rl_csr1 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne_pmnt.id )
7092 LOOP
7093
7094 --murthy
7095
7096 l_present_yn := Okl_Streams_Util.strm_tmpt_contains_strm_type
7097 (p_khr_id => p_chr_id,
7098 p_sty_id => TO_NUMBER(l_rl_rec1.object1_id1));
7099
7100 IF (l_present_yn = 'N') THEN
7101
7102 OPEN strm_name_csr ( TO_NUMBER(l_rl_rec1.object1_id1) );
7103 FETCH strm_name_csr INTO l_strm_name_rec;
7104 IF strm_name_csr%NOTFOUND THEN
7105 CLOSE strm_name_csr;
7106 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
7107 END IF;
7108 CLOSE strm_name_csr;
7109
7110 Okl_Api.set_message(
7111 p_app_name => G_APP_NAME,
7112 p_msg_name => 'LLA_QA_PMNT_STRM_TMPL',
7113 p_token1 => 'STRM_NAME',
7114 p_token1_value => l_strm_name_rec.name,
7115 p_token2 => 'LINE_TYPE',
7116 p_token2_value => l_lne_pmnt.line_type||'/'||l_lne_pmnt.name
7117 );
7118 x_return_status := Okl_Api.G_RET_STS_ERROR;
7119 END IF;
7120
7121 END LOOP;
7122
7123 -- Check FEE line stream
7124 IF (l_lne_pmnt.lty_code = 'FEE') THEN
7125
7126 FOR l_fee_strm_rec IN l_fee_strm_csr (p_chr_id,
7127 l_lne_pmnt.id)
7128 LOOP
7129 l_present_yn := Okl_Streams_Util.strm_tmpt_contains_strm_type
7130 (p_khr_id => p_chr_id,
7131 p_sty_id => TO_NUMBER(l_fee_strm_rec.object1_id1));
7132
7133 IF (l_present_yn = 'N') THEN
7134
7135 OPEN strm_name_csr ( l_fee_strm_rec.object1_id1 );
7136 FETCH strm_name_csr INTO l_strm_name_rec;
7137 IF strm_name_csr%NOTFOUND THEN
7138 CLOSE strm_name_csr;
7139 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
7140 END IF;
7141 CLOSE strm_name_csr;
7142
7143 Okl_Api.set_message(
7144 p_app_name => G_APP_NAME,
7145 p_msg_name => 'LLA_QA_FEE_STRM_TMPL',
7146 p_token1 => 'STRM_NAME',
7147 p_token1_value => l_strm_name_rec.name,
7148 p_token2 => 'LINE_TYPE',
7149 p_token2_value => l_lne_pmnt.line_type||'/'||l_lne_pmnt.name
7150 );
7151 x_return_status := Okl_Api.G_RET_STS_ERROR;
7152 END IF;
7153 END LOOP;
7154 END IF; -- Fee Line
7155
7156 END LOOP;
7157
7158 EXCEPTION
7159
7160 WHEN G_EXCEPTION_HALT_VALIDATION THEN
7161 x_return_status := Okl_Api.G_RET_STS_ERROR;
7162 IF l_hdr_csr%ISOPEN THEN
7163 CLOSE l_hdr_csr;
7164 END IF;
7165 -- no processing necessary; validation can continue with next column
7166 WHEN OTHERS THEN
7167 -- store SQL error message on message stack
7168 Okl_Api.SET_MESSAGE(
7169 p_app_name => G_APP_NAME,
7170 p_msg_name => G_UNEXPECTED_ERROR,
7171 p_token1 => G_SQLCODE_TOKEN,
7172 p_token1_value => SQLCODE,
7173 p_token2 => G_SQLERRM_TOKEN,
7174 p_token2_value => SQLERRM);
7175 -- notify caller of an error as UNEXPETED error
7176 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
7177 -- verify that cursor was closed
7178 IF l_hdr_csr%ISOPEN THEN
7179 CLOSE l_hdr_csr;
7180 END IF;
7181
7182 END check_stream_template;
7183
7184 -- Start of comments
7185 --
7186 -- Procedure Name : check_residual_value
7187 -- Description : Bug#4186455
7188 -- : Throws a message if asset residual value is less than 20%
7189 -- : and tax owner for the contract is LESSOR. The message
7190 -- : is conifgurable to error or warning.
7191 -- Business Rules :
7192 -- Parameters :
7193 -- Version : 1.0
7194 -- End of comments
7195
7196 PROCEDURE check_residual_value(
7197 x_return_status OUT NOCOPY VARCHAR2,
7198 p_chr_id IN NUMBER
7199 ) IS
7200
7201 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
7202 l_tax_owner VARCHAR2(100);
7203
7204 --Bug# 4631549
7205 l_release_contract_yn VARCHAR2(1);
7206 l_oec NUMBER;
7207
7208 BEGIN
7209 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
7210 OPEN l_hdrrl_csr('LATOWN', 'LATOWN', TO_NUMBER(p_chr_id));
7211 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
7212 CLOSE l_hdrrl_csr;
7213 l_tax_owner := l_hdrrl_rec.RULE_INFORMATION1;
7214
7215 --Bug# 4631549
7216 l_release_contract_yn := okl_api.g_false;
7217 l_release_contract_yn := okl_lla_util_pvt.check_release_contract(p_chr_id => p_chr_id);
7218
7219 FOR l_lne IN l_lne_csr('FREE_FORM1', p_chr_id)
7220 LOOP
7221
7222 --Bug# 4631549
7223 If l_release_contract_yn = okl_api.g_true then
7224 l_oec := l_lne.expected_asset_cost;
7225 else
7226 l_oec := l_lne.oec;
7227 end if;
7228
7229 --Bug# 4631549
7230 IF (( nvl(l_lne.residual_value,0) < (0.2 * l_OEC)) AND (l_tax_owner = 'LESSOR')) THEN
7231 --IF (( NVL(l_lne.residual_value,0) < (0.2 * l_lne.OEC)) AND (l_tax_owner = 'LESSOR')) THEN
7232 Okl_Api.set_message(
7233 p_app_name => G_APP_NAME,
7234 p_msg_name => 'OKL_QA_RV_OEC_TOWN',
7235 p_token1 => 'line',
7236 p_token1_value => l_lne.name);
7237 x_return_status := Okl_Api.G_RET_STS_ERROR;
7238 END IF;
7239
7240 END LOOP;
7241
7242 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
7243 Okl_Api.set_message(
7244 p_app_name => G_APP_NAME,
7245 p_msg_name => G_QA_SUCCESS);
7246 END IF;
7247
7248 EXCEPTION
7249 WHEN OTHERS THEN
7250 -- store SQL error message on message stack
7251 Okl_Api.SET_MESSAGE(
7252 p_app_name => G_APP_NAME,
7253 p_msg_name => G_UNEXPECTED_ERROR,
7254 p_token1 => G_SQLCODE_TOKEN,
7255 p_token1_value => SQLCODE,
7256 p_token2 => G_SQLERRM_TOKEN,
7257 p_token2_value => SQLERRM);
7258 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
7259 IF l_hdrrl_csr%ISOPEN THEN
7260 CLOSE l_hdrrl_csr;
7261 END IF;
7262
7263 END check_residual_value;
7264
7265 -- Start of comments
7266 --
7267 -- Procedure Name : check_product_status
7268 -- Description : Bug#4622438 checking product status
7269 -- Business Rules :
7270 -- Parameters :
7271 -- Version : 1.0
7272 -- End of comments
7273
7274 PROCEDURE check_product_status(
7275 x_return_status OUT NOCOPY VARCHAR2,
7276 p_chr_id IN NUMBER
7277 ) IS
7278
7279 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
7280
7281 CURSOR chk_product_status (p_chr_id IN NUMBER) IS
7282 SELECT
7283 pdt.name
7284 ,pdt.PRODUCT_STATUS_CODE
7285 FROM okl_products_v pdt
7286 ,okl_k_headers_v khr
7287 ,okc_k_headers_b CHR
7288 WHERE 1=1
7289 AND khr.id = p_chr_id
7290 AND pdt_id = pdt.id
7291 AND khr.id = CHR.id;
7292
7293 l_product_status_code okl_products_v.PRODUCT_STATUS_CODE%TYPE;
7294 l_product_name okl_products_v.NAME%TYPE;
7295 BEGIN
7296
7297 -- initialize return status
7298 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
7299
7300 -- check for header payment
7301 OPEN chk_product_status (p_chr_id => TO_NUMBER(p_chr_id));
7302 FETCH chk_product_status INTO l_product_name,l_product_status_code;
7303 CLOSE chk_product_status;
7304
7305 IF (l_product_status_code = 'INVALID') THEN
7306 -- x_return_status := OKL_API.G_RET_STS_SUCCESS;
7307
7308 Okl_Api.set_message(
7309 p_app_name => G_APP_NAME,
7310 p_msg_name => 'OKL_LLA_INVALID_PRODUCT',
7311 p_token1 => 'PRODUCT_NAME',
7312 p_token1_value => l_product_name);
7313 x_return_status := Okl_Api.G_RET_STS_ERROR;
7314
7315 END IF;
7316 /*IF x_return_status = OKL_API.G_RET_STS_SUCCESS THEN
7317 OKL_API.set_message(
7318 p_app_name => G_APP_NAME,
7319 p_msg_name => G_QA_SUCCESS);
7320 END IF;*/
7321
7322
7323
7324 EXCEPTION
7325
7326 WHEN G_EXCEPTION_HALT_VALIDATION THEN
7327 NULL; -- error reported, just exit from this process
7328 WHEN OTHERS THEN
7329 -- store SQL error message on message stack
7330 Okl_Api.SET_MESSAGE(
7331 p_app_name => G_APP_NAME,
7332 p_msg_name => G_UNEXPECTED_ERROR,
7333 p_token1 => G_SQLCODE_TOKEN,
7334 p_token1_value => SQLCODE,
7335 p_token2 => G_SQLERRM_TOKEN,
7336 p_token2_value => SQLERRM);
7337
7338 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
7339
7340 IF chk_product_status%ISOPEN THEN
7341 CLOSE chk_product_status;
7342 END IF;
7343
7344
7345 END check_product_status;
7346
7347 -- Start of comments
7348 --
7349 -- Procedure Name : check_loan_payment
7350 -- Description : Bug#7271259 checking loan payment
7351 -- Business Rules :
7352 -- Parameters :
7353 -- Version : 1.0
7354 -- End of comments
7355
7356 PROCEDURE check_loan_payment(
7357 x_return_status OUT NOCOPY VARCHAR2,
7358 p_chr_id IN NUMBER
7359 ) IS
7360
7361 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
7362
7363 CURSOR chk_deal_type (p_chr_id IN NUMBER) IS
7364 select 'Y'
7365 from okl_k_headers
7366 where id = p_chr_id
7367 and deal_type = 'LOAN';
7368
7369 CURSOR get_payment_lns (p_chr_id IN NUMBER) IS
7370 SELECT rgp.id,rgp.cle_id
7371 FROM OKC_RULE_GROUPS_B rgp,
7372 OKC_RULES_B crl2,
7373 okc_k_lines_b cleb,
7374 OKL_STRM_TYPE_B stty
7375 WHERE stty.id = crl2.object1_id1
7376 AND stty.stream_type_purpose = 'RENT'
7377 AND rgp.id = crl2.rgp_id
7378 AND crl2.RULE_INFORMATION_CATEGORY = 'LASLH'
7379 AND rgp.rgd_code = 'LALEVL'
7380 and rgp.dnz_chr_id = cleb.dnz_chr_id
7381 AND cleb.dnz_chr_id = p_chr_id
7382 AND cleb.id = rgp.cle_id
7383 AND rgp.cle_id is not null
7384 AND cleb.lse_id = 33
7385 AND NOT EXISTS (
7386 SELECT 'Y'
7387 FROM okc_statuses_v okcsts
7388 WHERE okcsts.code = cleb.sts_code
7389 AND okcsts.ste_code IN ('EXPIRED','HOLD','CANCELLED','TERMINATED', 'ABANDONED'));
7390
7391 CURSOR get_line_amt (p_id IN NUMBER) IS
7392 SELECT nvl(capital_amount,0) capital_amount, kle.name name
7393 FROM okl_k_lines_full_v kle
7394 WHERE kle.id = p_id;
7395
7396 CURSOR get_payment_line_amt (p_rgp_id IN NUMBER, p_chr_id IN NUMBER) IS
7397 select nvl(sum(tot_amt),0)
7398 from(
7399 SELECT to_number((NVL(crl2.rule_information3,0) * NVL(crl2.rule_information6,0))) tot_amt
7400 FROM OKC_RULES_B crl1,
7401 OKC_RULES_B crl2
7402 WHERE crl1.id = crl2.object2_id1
7403 AND crl2.RULE_INFORMATION_CATEGORY = 'LASLL'
7404 AND crl1.RULE_INFORMATION_CATEGORY = 'LASLH'
7405 AND crl1.dnz_chr_id = p_chr_id
7406 AND crl2.dnz_chr_id = p_chr_id
7407 AND crl1.rgp_id = p_rgp_id
7408 AND crl2.rgp_id = p_rgp_id
7409 union all
7410 SELECT
7411 to_number(nvl(crl2.rule_information8,0)) tot_amt
7412 FROM OKC_RULES_B crl1,
7413 OKC_RULES_B crl2
7414 WHERE crl1.id = crl2.object2_id1
7415 AND crl2.RULE_INFORMATION_CATEGORY = 'LASLL'
7416 AND crl1.RULE_INFORMATION_CATEGORY = 'LASLH'
7417 AND crl1.dnz_chr_id = p_chr_id
7418 AND crl2.dnz_chr_id = p_chr_id
7419 AND crl1.rgp_id = p_rgp_id
7420 AND crl2.rgp_id = p_rgp_id
7421 );
7422
7423 l_cle_id NUMBER;
7424 l_chr_id NUMBER;
7425 l_capital_amount okl_k_lines.capital_amount%type;
7426 l_ast_name okl_k_lines_full_v.name%type := null;
7427 l_payment_amount okl_k_lines.capital_amount%type;
7428 l_deal_type_yn varchar2(1) := 'N';
7429 BEGIN
7430 -- initialize return status
7431 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
7432
7433 --chk_deal_type for loan contract
7434 OPEN chk_deal_type (p_chr_id);
7435 FETCH chk_deal_type INTO l_deal_type_yn;
7436 CLOSE chk_deal_type;
7437
7438 IF (l_deal_type_yn = 'Y') THEN
7439
7440 FOR l_lne IN get_payment_lns(p_chr_id)
7441 LOOP
7442
7443 -- check for line payment
7444 OPEN get_line_amt (l_lne.cle_id);
7445 FETCH get_line_amt INTO l_capital_amount,l_ast_name;
7446 CLOSE get_line_amt;
7447
7448 -- check for payment line payment
7449 OPEN get_payment_line_amt (l_lne.id, p_chr_id);
7450 FETCH get_payment_line_amt INTO l_payment_amount;
7451 CLOSE get_payment_line_amt;
7452
7453 IF(l_payment_amount < l_capital_amount) THEN
7454 Okl_Api.set_message(
7455 p_app_name => G_APP_NAME,
7456 p_msg_name => 'OKL_LLA_INVALID_PAYMNT_AMT',
7457 p_token1 => 'AST_NUMBER',
7458 p_token1_value => l_ast_name);
7459 x_return_status := Okl_Api.G_RET_STS_ERROR;
7460 END IF;
7461
7462 END LOOP;
7463
7464 END IF;
7465
7466 --Bug# 9690217
7467 IF x_return_status = OKL_API.G_RET_STS_SUCCESS THEN
7468 OKL_API.set_message(
7469 p_app_name => G_APP_NAME,
7470 p_msg_name => G_QA_SUCCESS);
7471 END IF;
7472
7473 EXCEPTION
7474
7475 WHEN G_EXCEPTION_HALT_VALIDATION THEN
7476 NULL; -- error reported, just exit from this process
7477 WHEN OTHERS THEN
7478 -- store SQL error message on message stack
7479 Okl_Api.SET_MESSAGE(
7480 p_app_name => G_APP_NAME,
7481 p_msg_name => G_UNEXPECTED_ERROR,
7482 p_token1 => G_SQLCODE_TOKEN,
7483 p_token1_value => SQLCODE,
7484 p_token2 => G_SQLERRM_TOKEN,
7485 p_token2_value => SQLERRM);
7486
7487 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
7488
7489 END check_loan_payment;
7490
7491 --akrangan bug 5362977 start
7492 -- Start of comments
7493 --
7494 -- Procedure Name : check_service_contracts
7495 -- Description : Displays a error message if the IB instance that is
7496 -- going to be expired during Rebook has Service
7497 -- contracts associated to it.
7498 -- Business Rules :
7499 -- Parameters :
7500 -- Version : 1.0
7501 -- End of comments
7502
7503 PROCEDURE check_service_contracts(
7504 x_return_status OUT NOCOPY VARCHAR2,
7505 p_chr_id IN NUMBER
7506 ) IS
7507
7508 --cursor to check if the contract is undergoing on-line rebook
7509 cursor l_chk_rbk_csr(p_chr_id IN NUMBER) is
7510 SELECT '!',
7511 orig_system_id1
7512 FROM okc_k_headers_b CHR,
7513 okl_trx_contracts ktrx
7514 WHERE ktrx.khr_id_new = chr.id
7515 AND ktrx.tsu_code = 'ENTERED'
7516 AND ktrx.rbr_code is NOT NULL
7517 AND ktrx.tcn_type = 'TRBK'
7518 --rkuttiya added for 12.1.1 Multi GAAP
7519 AND ktrx.representation_type = 'PRIMARY'
7520 --
7521 AND chr.id = p_chr_id
7522 AND chr.orig_system_source_code = 'OKL_REBOOK';
7523
7524 l_rbk_khr VARCHAR2(1) DEFAULT '?';
7525 l_orig_chr_id NUMBER;
7526
7527 CURSOR l_line_csr (p_chr_id IN NUMBER) IS
7528 SELECT model_cle.id rbk_model_cle_id,
7529 model_cle.orig_system_id1 orig_model_cle_id,
7530 fin_ast_cle.id rbk_fin_ast_cle_id,
7531 fin_ast_cle.orig_system_id1 orig_fin_ast_cle_id,
7532 fin_ast_cle.name asset_number
7533 FROM okc_k_lines_b model_cle,
7534 okc_k_lines_v fin_ast_cle,
7535 okc_statuses_b sts
7536 WHERE fin_ast_cle.chr_id = p_chr_id
7537 AND fin_ast_cle.dnz_chr_id = p_chr_id
7538 AND fin_ast_cle.lse_id = 33 -- Financial Asset Line
7539 AND model_cle.dnz_chr_id = p_chr_id
7540 AND model_cle.cle_id = fin_ast_cle.id
7541 AND model_cle.lse_id = 34 --Model Line
7542 and sts.code = fin_ast_cle.sts_code
7543 and sts.ste_code NOT IN ('HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
7544
7545 CURSOR l_ib_line_csr (p_chr_id IN NUMBER,
7546 p_fin_ast_cle_id IN NUMBER
7547 ) IS
7548 SELECT ib_cim.object1_id1 instance_id
7549 FROM okc_k_lines_b ib_cle,
7550 okc_k_lines_b inst_cle,
7551 okc_statuses_b sts,
7552 okc_k_items ib_cim
7553 WHERE inst_cle.dnz_chr_id = p_chr_id
7554 AND inst_cle.cle_id = p_fin_ast_cle_id
7555 AND inst_cle.lse_id = 43 -- FREE_FORM2 Line
7556 AND ib_cle.dnz_chr_id = p_chr_id
7557 AND ib_cle.cle_id = inst_cle.id
7558 AND ib_cle.lse_id = 45 --IB Line
7559 AND ib_cim.cle_id = ib_cle.id
7560 AND ib_cim.dnz_chr_id = p_chr_id
7561 AND sts.code = ib_cle.sts_code
7562 AND sts.ste_code NOT IN ('HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
7563
7564 CURSOR l_item_csr(p_chr_id IN NUMBER,
7565 p_cle_id IN NUMBER) IS
7566 SELECT cim.object1_id1,
7567 cim.object1_id2,
7568 cim.number_of_items
7569 FROM okc_k_items cim
7570 WHERE cim.cle_id = p_cle_id
7571 AND cim.dnz_chr_id = p_chr_id;
7572
7573 l_rbk_item_rec l_item_csr%ROWTYPE;
7574 l_orig_item_rec l_item_csr%ROWTYPE;
7575
7576 CURSOR srl_num_to_exp_csr(p_orig_fin_ast_cle_id IN NUMBER,
7577 p_rbk_fin_ast_cle_id IN NUMBER,
7578 p_orig_chr_id IN NUMBER,
7579 p_rbk_chr_id IN NUMBER) IS
7580 SELECT orig_ib_cim.object1_id1 instance_id
7581 FROM okc_k_items orig_ib_cim,
7582 okc_k_lines_b orig_ib_cle,
7583 okc_k_lines_b orig_inst_cle,
7584 okc_statuses_b inst_sts
7585 WHERE orig_inst_cle.dnz_chr_id = p_orig_chr_id
7586 AND orig_inst_cle.cle_id = p_orig_fin_ast_cle_id
7587 AND orig_inst_cle.lse_id = 43
7588 AND orig_ib_cle.cle_id = orig_inst_cle.id
7589 AND orig_ib_cle.dnz_chr_id = p_orig_chr_id
7590 AND orig_ib_cle.lse_id = 45
7591 AND orig_ib_cim.cle_id = orig_ib_cle.id
7592 AND orig_ib_cim.dnz_chr_id = p_orig_chr_id
7593 AND orig_ib_cim.object1_id1 IS NOT NULL
7594 AND inst_sts.code = orig_ib_cle.sts_code
7595 AND inst_sts.ste_code NOT IN ('HOLD', 'EXPIRED', 'TERMINATED', 'CANCELLED')
7596 AND NOT EXISTS (
7597 SELECT 1
7598 FROM okc_k_lines_b rbk_inst_cle,
7599 okc_statuses_b rbk_inst_sts
7600 WHERE rbk_inst_cle.orig_system_id1 = orig_inst_cle.id
7601 AND rbk_inst_cle.lse_id = 43
7602 AND rbk_inst_cle.dnz_chr_id = p_rbk_chr_id
7603 AND rbk_inst_cle.cle_id = p_rbk_fin_ast_cle_id
7604 AND rbk_inst_sts.code = rbk_inst_cle.sts_code
7605 AND rbk_inst_sts.ste_code NOT IN ('HOLD', 'EXPIRED', 'TERMINATED', 'CANCELLED'));
7606
7607 CURSOR check_svc_chr(p_object1_id1 IN VARCHAR2,
7608 p_jtot_object_code IN VARCHAR2) IS
7609 SELECT svc_cle.dnz_chr_id
7610 FROM okc_k_lines_b svc_cle,
7611 okc_k_items svc_item,
7612 okc_statuses_b sts,
7613 okc_k_headers_b svc_chr
7614 WHERE svc_item.object1_id1 = p_object1_id1
7615 AND svc_item.jtot_object1_code = p_jtot_object_code
7616 AND svc_cle.id = svc_item.cle_id
7617 AND svc_cle.dnz_chr_id = svc_item.dnz_chr_id
7618 AND svc_cle.sts_code = sts.code
7619 AND sts.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED','TERMINATED')
7620 AND svc_chr.id = svc_cle.dnz_chr_id
7621 AND svc_chr.scs_code = 'SERVICE';
7622
7623 CURSOR check_usage_svc_chr(p_instance_id IN NUMBER,
7624 p_jtot_object_code IN VARCHAR2,
7625 p_source_object_code IN VARCHAR2) IS
7626 SELECT svc_cle.dnz_chr_id
7627 FROM okc_k_lines_b svc_cle,
7628 okc_k_items svc_item,
7629 okc_statuses_b sts,
7630 okc_k_headers_b svc_chr,
7631 cs_counter_groups csg,
7632 cs_counters cc
7633 WHERE svc_item.object1_id1 = TO_CHAR(cc.counter_id)
7634 AND svc_item.jtot_object1_code = p_jtot_object_code
7635 AND svc_cle.id = svc_item.cle_id
7636 AND svc_cle.dnz_chr_id = svc_item.dnz_chr_id
7637 AND svc_cle.sts_code = sts.code
7638 AND sts.ste_code NOT IN ('HOLD','EXPIRED','CANCELLED','TERMINATED')
7639 AND svc_chr.id = svc_cle.dnz_chr_id
7640 AND svc_chr.scs_code = 'SERVICE'
7641 AND csg.source_object_id = p_instance_id
7642 AND csg.source_object_code = p_source_object_code
7643 AND csg.counter_group_id = cc.counter_group_id;
7644
7645 i NUMBER;
7646 TYPE l_instance_tbl_type IS TABLE OF VARCHAR(40) INDEX BY BINARY_INTEGER;
7647 l_instance_tbl l_instance_tbl_type;
7648
7649 l_svc_chr_id NUMBER;
7650 l_svc_chr_exists VARCHAR2(1);
7651 BEGIN
7652
7653 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7654
7655 --check for rebook contract
7656 l_rbk_khr := '?';
7657 OPEN l_chk_rbk_csr (p_chr_id => p_chr_id);
7658 FETCH l_chk_rbk_csr INTO l_rbk_khr,l_orig_chr_id;
7659 CLOSE l_chk_rbk_csr;
7660
7661 If l_rbk_khr = '!' Then
7662
7663 l_svc_chr_exists := 'N';
7664
7665 For l_line_rec In l_line_csr(p_chr_id => p_chr_id)
7666 Loop
7667
7668 OPEN l_item_csr (p_chr_id => p_chr_id,
7669 p_cle_id => l_line_rec.rbk_model_cle_id);
7670 FETCH l_item_csr INTO l_rbk_item_rec;
7671 CLOSE l_item_csr;
7672
7673 OPEN l_item_csr (p_chr_id => l_orig_chr_id,
7674 p_cle_id => l_line_rec.orig_model_cle_id);
7675 FETCH l_item_csr INTO l_orig_item_rec;
7676 CLOSE l_item_csr;
7677
7678 -- Check for associated service contracts if:
7679 -- 1. the Inventory Item has changed
7680 -- 2. the Item is serialized and IB lines have been removed.
7681 IF (l_orig_item_rec.object1_id1 <> l_rbk_item_rec.object1_id1) THEN
7682
7683 i := 1;
7684 FOR l_ib_line_rec in l_ib_line_csr(p_chr_id => l_orig_chr_id,
7685 p_fin_ast_cle_id => l_line_rec.orig_fin_ast_cle_id)
7686 LOOP
7687 l_instance_tbl(i) := l_ib_line_rec.instance_id;
7688 i := i + 1;
7689 END LOOP;
7690
7691 ELSE
7692 i := 1;
7693 FOR srl_num_to_exp_rec IN
7694 srl_num_to_exp_csr(p_orig_fin_ast_cle_id => l_line_rec.orig_fin_ast_cle_id,
7695 p_rbk_fin_ast_cle_id => l_line_rec.rbk_fin_ast_cle_id,
7696 p_orig_chr_id => l_orig_chr_id,
7697 p_rbk_chr_id => p_chr_id) LOOP
7698
7699 l_instance_tbl(i) := srl_num_to_exp_rec.instance_id;
7700 i := i + 1;
7701
7702 END LOOP;
7703 END IF;
7704
7705 IF l_instance_tbl.COUNT > 0 THEN
7706 FOR i IN l_instance_tbl.FIRST .. l_instance_tbl.LAST LOOP
7707
7708 l_svc_chr_id := NULL;
7709 -- Check for Service Contracts
7710 OPEN check_svc_chr(p_object1_id1 => l_instance_tbl(i)
7711 ,p_jtot_object_code => 'OKX_CUSTPROD');
7712 FETCH check_svc_chr INTO l_svc_chr_id;
7713 CLOSE check_svc_chr;
7714
7715 IF l_svc_chr_id IS NULL THEN
7716 -- Check for Usage based Service Contracts
7717 OPEN check_usage_svc_chr(p_instance_id => TO_NUMBER(l_instance_tbl(i))
7718 ,p_jtot_object_code => 'OKX_COUNTER'
7719 ,p_source_object_code => 'CP');
7720 FETCH check_usage_svc_chr INTO l_svc_chr_id;
7721 CLOSE check_usage_svc_chr;
7722 END IF;
7723
7724 IF l_svc_chr_id IS NOT NULL THEN
7725 l_svc_chr_exists := 'Y';
7726 EXIT;
7727 END IF;
7728
7729 END LOOP;
7730 END IF;
7731
7732 IF l_svc_chr_exists = 'Y' THEN
7733 OKL_API.set_message(
7734 p_app_name => G_APP_NAME,
7735 p_msg_name => 'OKL_QA_CANNOT_DEL_IB_INST',
7736 p_token1 => 'ASSET_NUMBER',
7737 p_token1_value => l_line_rec.asset_number);
7738 x_return_status := OKL_API.G_RET_STS_ERROR;
7739 EXIT;
7740 END IF;
7741
7742 End Loop;
7743 End If;
7744
7745 EXCEPTION
7746 WHEN OTHERS THEN
7747 -- store SQL error message on message stack
7748 OKL_API.SET_MESSAGE(
7749 p_app_name => G_APP_NAME,
7750 p_msg_name => G_UNEXPECTED_ERROR,
7751 p_token1 => G_SQLCODE_TOKEN,
7752 p_token1_value => SQLCODE,
7753 p_token2 => G_SQLERRM_TOKEN,
7754 p_token2_value => SQLERRM);
7755
7756 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
7757
7758 END check_service_contracts;
7759 --akrangan bug 5362977 end
7760
7761 -- Start of comments
7762 --
7763 -- Procedure Name : check_sales_quote
7764 -- Description : Bug#4419339 sales quote validations
7765 -- Business Rules :
7766 -- Parameters :
7767 -- Version : 1.0
7768 -- End of comments
7769
7770 PROCEDURE check_sales_quote(
7771 x_return_status OUT NOCOPY VARCHAR2,
7772 p_chr_id IN NUMBER
7773 ) IS
7774 CURSOR l_hdr_csr IS
7775 SELECT tradein_amount
7776 FROM okl_k_headers_v
7777 WHERE id = p_chr_id;
7778 l_hdr_rec l_hdr_csr%ROWTYPE;
7779
7780 CURSOR l_line_csr IS
7781 SELECT cle.id,
7782 cle.name,
7783 kle.tradein_amount,
7784 capital_reduction,
7785 capitalize_down_payment_yn,
7786 -- Bug 6417667 Start
7787 kle.capital_reduction_percent,
7788 kle.oec
7789 -- Bug 6417667 End
7790 --down_payment_yes_no
7791 FROM
7792 okl_k_lines kle,
7793 okc_k_lines_v cle,
7794 okc_line_styles_b sty,
7795 okc_statuses_b sts
7796 WHERE cle.id = kle.id
7797 AND dnz_chr_id = p_chr_id
7798 AND cle.lse_id = sty.id
7799 AND sty.lty_code = 'FREE_FORM1'
7800 AND cle.sts_code = sts.code
7801 AND sts.ste_code NOT IN ( 'HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
7802
7803 CURSOR l_down_pmnt_check_csr(p_cle_id OKC_K_LINES_B.ID%TYPE) IS
7804 SELECT crg.cle_id,
7805 crl.id,
7806 crl.object1_id1,
7807 crl.RULE_INFORMATION6
7808 FROM OKC_RULE_GROUPS_B crg,
7809 OKC_RULES_B crl,
7810 OKL_STRM_TYPE_B stty
7811 WHERE stty.id = crl.object1_id1
7812 AND stty.stream_type_purpose = 'DOWN_PAYMENT'
7813 AND crl.rgp_id = crg.id
7814 AND crg.RGD_CODE = 'LALEVL'
7815 AND crl.RULE_INFORMATION_CATEGORY = 'LASLH'
7816 AND crg.cle_id = p_cle_id
7817 AND crg.dnz_chr_id = p_chr_id;
7818 l_down_pmnt_check_rec l_down_pmnt_check_csr%ROWTYPE;
7819
7820 CURSOR l_down_pmnt_line_csr(p_id OKC_RULES_B.ID%TYPE, p_cle_id OKC_K_LINES_B.ID%TYPE) IS
7821 SELECT crl2.object1_id1,
7822 crl2.object1_id2,
7823 crl2.rule_information2,
7824 NVL(crl2.rule_information3,0) rule_information3,
7825 NVL(crl2.rule_information6,0) rule_information6
7826 FROM OKC_RULES_B crl1, OKC_RULES_B crl2, OKC_RULE_GROUPS_B rgp
7827 WHERE crl1.id = crl2.object2_id1
7828 AND crl1.id = p_id
7829 AND rgp.cle_id = p_cle_id
7830 AND rgp.id = crl1.rgp_id
7831 AND crl2.RULE_INFORMATION_CATEGORY = 'LASLL'
7832 AND crl1.RULE_INFORMATION_CATEGORY = 'LASLH'
7833 AND crl1.dnz_chr_id = p_chr_id
7834 AND crl2.dnz_chr_id = p_chr_id;
7835
7836 --Bug# 11738752: Added cursor to include Terminated lines
7837 -- when fetching Tradein amount
7838 CURSOR l_line_tradein_csr IS
7839 SELECT kle.tradein_amount
7840 FROM okl_k_lines kle,
7841 okc_k_lines_b cle,
7842 okc_line_styles_b lse,
7843 okc_statuses_b sts
7844 WHERE cle.id = kle.id
7845 AND cle.dnz_chr_id = p_chr_id
7846 AND cle.chr_id = p_chr_id
7847 AND cle.lse_id = lse.id
7848 AND lse.lty_code = 'FREE_FORM1'
7849 AND cle.sts_code = sts.code
7850 AND sts.ste_code NOT IN ( 'HOLD', 'EXPIRED', 'CANCELLED');
7851
7852 l_asset_tradein_yes BOOLEAN;
7853 l_exists BOOLEAN;
7854 l_asset_tradein_amt NUMBER;
7855 l_hdr_tradein_amt NUMBER;
7856 l_num_pmnt_lines NUMBER;
7857 -- Start fix for bug 7131895
7858 l_pricing_engine VARCHAR2(30);
7859 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
7860 l_tax_owner VARCHAR2(100);
7861 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
7862 -- End fix for bug 7131895
7863
7864 BEGIN
7865
7866 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
7867 l_asset_tradein_yes := FALSE;
7868 l_asset_tradein_amt := 0;
7869
7870 l_hdr_tradein_amt := NULL;
7871 OPEN l_hdr_csr;
7872 FETCH l_hdr_csr INTO l_hdr_rec;
7873 l_hdr_tradein_amt := l_hdr_rec.tradein_amount;
7874 CLOSE l_hdr_csr;
7875 -- Start fix for bug 7131895
7876 OPEN l_hdrrl_csr('LATOWN', 'LATOWN', TO_NUMBER(p_chr_id));
7877 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
7878 CLOSE l_hdrrl_csr;
7879 l_tax_owner := l_hdrrl_rec.RULE_INFORMATION1;
7880 -- End fix for bug 7131895
7881
7882 IF (l_hdr_tradein_amt IS NULL) THEN
7883 l_asset_tradein_yes := TRUE;
7884 END IF;
7885
7886 FOR l_line_rec IN l_line_csr
7887 LOOP
7888
7889 --Bug 6417667 Start
7890 IF (l_line_rec.capital_reduction IS NOT NULL
7891 OR l_line_rec.capital_reduction_percent IS NOT NULL) THEN -- Added for bug 5473440
7892 --Bug 6417667 End
7893 IF (l_line_rec.capitalize_down_payment_yn = 'N') THEN
7894
7895 --check payment line existence with one period having the entire capital_reduction
7896 --in that payment. that is the amounts must be equal.
7897 OPEN l_down_pmnt_check_csr(l_line_rec.id);
7898 FETCH l_down_pmnt_check_csr INTO l_down_pmnt_check_rec;
7899 l_exists := l_down_pmnt_check_csr%FOUND;
7900 CLOSE l_down_pmnt_check_csr;
7901
7902 IF (NOT l_exists) THEN
7903 --RAISE ERROR no down payments exist.
7904 Okl_Api.set_message(
7905 p_app_name => G_APP_NAME,
7906 p_msg_name => 'OKL_QA_SQ_NO_DOWN_PMNT');
7907 x_return_status := Okl_Api.G_RET_STS_ERROR;
7908
7909 END IF;
7910
7911 IF ( l_down_pmnt_check_rec.cle_id IS NULL) THEN
7912 --RAISE ERROR cannot define at contract header level.
7913 Okl_Api.set_message(
7914 p_app_name => G_APP_NAME,
7915 p_msg_name => 'OKL_QA_SQ_DOWN_PMNT_HDR');
7916 x_return_status := Okl_Api.G_RET_STS_ERROR;
7917 END IF;
7918
7919 l_num_pmnt_lines := 0;
7920
7921 FOR l_down_pmnt_line_rec IN l_down_pmnt_line_csr(l_down_pmnt_check_rec.id, l_line_rec.id)
7922 LOOP
7923 --check for number of payments also.
7924
7925 l_num_pmnt_lines := l_num_pmnt_lines + 1;
7926 IF(l_down_pmnt_line_rec.rule_information3 <> 1) THEN
7927 Okl_Api.set_message(
7928 p_app_name => G_APP_NAME,
7929 p_msg_name => 'OKL_QA_SQ_PERIOD_MISMATCH');
7930 x_return_status := Okl_Api.G_RET_STS_ERROR;
7931 END IF;
7932
7933 --Bug 6417667 Start
7934 --Bug# 8652738: Added ROUND() for forward port of Bug 7601328
7935 -- Not using NVL function because Down payment amount or percent value can be zero.
7936 IF((l_line_rec.capital_reduction IS NOT NULL AND l_line_rec.capital_reduction <> l_down_pmnt_line_rec.rule_information6)
7937 OR (l_line_rec.capital_reduction_percent IS NOT NULL AND ROUND(((l_line_rec.capital_reduction_percent/100)*l_line_rec.oec),2) <> l_down_pmnt_line_rec.rule_information6)) THEN
7938 --Bug 6417667 End
7939 Okl_Api.set_message(
7940 p_app_name => G_APP_NAME,
7941 p_msg_name => 'OKL_QA_SQ_DOWN_PMNT_MISMATCH');
7942 x_return_status := Okl_Api.G_RET_STS_ERROR;
7943 END IF;
7944
7945 END LOOP;
7946
7947 IF (l_num_pmnt_lines > 1) THEN
7948 --RAISE ERROR cannot have more than one down payment line.
7949 Okl_Api.set_message(
7950 p_app_name => G_APP_NAME,
7951 p_msg_name => 'OKL_QA_SQ_DOWN_PMNT_LN_GT1');
7952 x_return_status := Okl_Api.G_RET_STS_ERROR;
7953 END IF;
7954
7955 ELSE -- Capitalize Flag = 'Y', Start fix for bug 7131895
7956 Okl_Streams_Util.get_pricing_engine(p_khr_id => p_chr_id,
7957 x_pricing_engine => l_pricing_engine,
7958 x_return_status => l_return_status);
7959 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
7960 x_return_status := l_return_status;
7961 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
7962 END IF;
7963
7964 --RAISE ERROR if pricing engine is 'EXTERNAL' and tax owner='LESSOR'
7965 IF ((l_pricing_engine = 'EXTERNAL') AND (l_tax_owner ='LESSOR')) THEN
7966 Okl_Api.set_message(
7967 p_app_name => G_APP_NAME,
7968 p_msg_name => 'OKL_QA_SQ_DOWN_PMNT_TAXOWNER');
7969 x_return_status := Okl_Api.G_RET_STS_ERROR;
7970 END IF;
7971 -- End fix for bug 7131895
7972 --if payment existence throw error
7973 OPEN l_down_pmnt_check_csr(l_line_rec.id);
7974 FETCH l_down_pmnt_check_csr INTO l_down_pmnt_check_rec;
7975 l_exists := l_down_pmnt_check_csr%FOUND;
7976 CLOSE l_down_pmnt_check_csr;
7977
7978 IF (l_exists) THEN
7979 --RAISE ERROR no payment required for non capitalized assets.
7980 Okl_Api.set_message(
7981 p_app_name => G_APP_NAME,
7982 p_msg_name => 'OKL_QA_SQ_CAPITALIZED_AST');
7983 x_return_status := Okl_Api.G_RET_STS_ERROR;
7984
7985 END IF;
7986
7987 END IF;
7988
7989 END IF; --Added for bug#5473440
7990
7991 END LOOP;
7992
7993 IF(l_hdr_tradein_amt IS NOT NULL) THEN
7994
7995 --Bug# 11738752: Fetch tradein amounts for Terminated lines also
7996 FOR l_line_tradein_rec IN l_line_tradein_csr
7997 LOOP
7998 IF (l_line_tradein_rec.tradein_amount IS NOT NULL) THEN
7999 l_asset_tradein_yes := TRUE;
8000 l_asset_tradein_amt := l_asset_tradein_amt + l_line_tradein_rec.tradein_amount;
8001 END IF;
8002 END LOOP;
8003
8004 IF (l_asset_tradein_amt <> l_hdr_tradein_amt) THEN
8005 Okl_Api.set_message(
8006 p_app_name => G_APP_NAME,
8007 p_msg_name => 'OKL_QA_SQ_TRADEIN_AMT');
8008 x_return_status := Okl_Api.G_RET_STS_ERROR;
8009 END IF;
8010 END IF;
8011
8012 IF (NOT l_asset_tradein_yes) THEN
8013 Okl_Api.set_message(
8014 p_app_name => G_APP_NAME,
8015 p_msg_name => 'OKL_QA_SQ_TRADEIN_ASSOC');
8016 x_return_status := Okl_Api.G_RET_STS_ERROR;
8017 END IF;
8018
8019 EXCEPTION
8020
8021 WHEN G_EXCEPTION_HALT_VALIDATION THEN
8022 -- no processing necessary; validation can continue with next column
8023 NULL;
8024 WHEN OTHERS THEN
8025 -- store SQL error message on message stack
8026 Okl_Api.SET_MESSAGE(
8027 p_app_name => G_APP_NAME,
8028 p_msg_name => G_UNEXPECTED_ERROR,
8029 p_token1 => G_SQLCODE_TOKEN,
8030 p_token1_value => SQLCODE,
8031 p_token2 => G_SQLERRM_TOKEN,
8032 p_token2_value => SQLERRM);
8033 -- notify caller of an error as UNEXPETED error
8034 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
8035 -- verify that cursor was closed
8036 IF l_hdr_csr%ISOPEN THEN
8037 CLOSE l_hdr_csr;
8038 END IF;
8039 IF l_line_csr%ISOPEN THEN
8040 CLOSE l_line_csr;
8041 END IF;
8042
8043 END check_sales_quote;
8044
8045 -- Start of comments
8046 --
8047 -- Procedure Name : check_functional_constraints
8048 -- Description :
8049 -- Business Rules :
8050 -- Parameters :
8051 -- Version : 1.0
8052 -- End of comments
8053
8054 PROCEDURE check_func_constrs_4new(
8055 x_return_status OUT NOCOPY VARCHAR2,
8056 p_chr_id IN NUMBER
8057 ) IS
8058
8059 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
8060 l_dummy VARCHAR2(1) := '?';
8061 l_count NUMBER := 0;
8062 l_row_notfound BOOLEAN;
8063 l_token VARCHAR2(2000);
8064
8065
8066 --Bug#3877032
8067 CURSOR l_contract_name ( n VARCHAR2 ) IS
8068 SELECT 'Y'
8069 --Select count(*) cnt
8070 FROM okc_k_headers_b WHERE contract_number = n;
8071 l_cn l_contract_name%ROWTYPE;
8072
8073
8074 l_hdr l_hdr_csr%ROWTYPE;
8075 l_txl l_txl_csr%ROWTYPE;
8076 l_txd l_txd_csr%ROWTYPE;
8077 l_lne l_lne_csr%ROWTYPE;
8078 l_itm l_itms_csr%ROWTYPE;
8079 l_struct_rec l_struct_csr%ROWTYPE;
8080 l_structure NUMBER;
8081 l_rl_rec1 l_rl_csr1%ROWTYPE;
8082 i NUMBER;
8083
8084
8085 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
8086 l_supp_rec supp_csr%ROWTYPE;
8087
8088 l_asst asst_qty_csr%ROWTYPE;
8089 l_ib_qty NUMBER;
8090
8091 --Bug#3877032
8092 CURSOR l_rpt_csr( bk VARCHAR2, dat DATE ) IS
8093 SELECT 'Y'
8094 FROM fa_book_controls
8095 WHERE book_class = 'TAX'
8096 --and nvl(initial_date,dat) <= dat Bug#3636801
8097 AND NVL(date_ineffective,dat+1) > dat
8098 AND book_type_code = bk;
8099
8100 l_rpt_rec l_rpt_csr%ROWTYPE;
8101 l_report_tax_book VARCHAR2(256);
8102
8103 CURSOR party_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE,
8104 p_cle_id OKC_K_LINES_B.ID%TYPE) IS
8105 SELECT object1_id1
8106 FROM okc_k_party_roles_b
8107 WHERE dnz_chr_id = p_chr_id
8108 AND cle_id = p_cle_id
8109 AND jtot_object1_code = 'OKX_VENDOR';
8110
8111 CURSOR passthru_site_csr (p_vendor_id OKX_VENDOR_SITES_V.VENDOR_ID%TYPE,
8112 p_site_id OKX_VENDOR_SITES_V.ID1%TYPE) IS
8113 SELECT 'Y'
8114 FROM okx_vendor_sites_v
8115 WHERE id1 = p_site_id
8116 AND vendor_id = p_vendor_id
8117 AND status = 'A'
8118 AND TRUNC(SYSDATE) >= NVL(TRUNC(start_date_active), TRUNC(SYSDATE));
8119
8120 CURSOR line_amt_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE,
8121 p_lty_code OKC_LINE_STYLES_V.LTY_CODE%TYPE) IS
8122 SELECT line.id,
8123 line.line_number,
8124 line.amount
8125 FROM okl_k_lines_full_v line,
8126 okc_line_styles_v style,
8127 okc_statuses_b sts
8128 WHERE line.lse_id = style.id
8129 AND style.lty_code = p_lty_code
8130 AND sts.code = line.sts_code
8131 AND sts.ste_code NOT IN ('HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED')
8132 AND line.dnz_chr_id = p_chr_id;
8133
8134 CURSOR sub_line_amt_csr (p_line_id OKC_K_LINES_B.ID%TYPE) IS
8135 SELECT SUM(NVL(capital_amount,0))
8136 FROM okl_k_lines_full_v line
8137 WHERE line.cle_id = p_line_id;
8138
8139 CURSOR txd_csr1 (Kleid NUMBER) IS
8140 SELECT
8141 sgn.value book_type,
8142 COUNT(*) book_count
8143 FROM Okl_txd_assets_v txd,
8144 okl_txl_assets_b txl,
8145 okl_sgn_translations sgn
8146 WHERE txd.tal_id = txl.id
8147 AND txl.kle_id = Kleid
8148 AND sgn.jtot_object1_code = 'FA_BOOK_CONTROLS'
8149 AND sgn.object1_id1 = txd.tax_book
8150 AND sgn.sgn_code = 'STMP' -- Bug# 3533552
8151 GROUP BY sgn.value;
8152
8153 l_tot_sub_line_amt NUMBER;
8154
8155 l_passthru_site_id OKC_RULES_B.OBJECT1_ID1%TYPE;
8156 l_passthru_vendor_id OKC_K_PARTY_ROLES_B.OBJECT1_ID1%TYPE;
8157 l_site_valid VARCHAR2(1) := '?';
8158 l_passthru_present VARCHAR2(1) := 'N';
8159
8160 lx_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
8161 x_msg_count NUMBER;
8162 x_msg_data VARCHAR2(1000);
8163 --l_tax_owner VARCHAR2(100);
8164
8165 --------------
8166 --Bug# 4103361
8167 --------------
8168 -- cursor to check valid combination of asset book and category
8169 CURSOR l_bk_cat_csr(p_cat_id IN NUMBER,
8170 p_book_type_code IN VARCHAR2) IS
8171 SELECT 'Y'
8172 FROM OKX_AST_CAT_BKS_V
8173 WHERE category_id = p_cat_id
8174 AND book_type_code = p_book_type_code;
8175
8176 l_valid_bk_cat VARCHAR2(1);
8177
8178 --------------
8179 --Bug# 7131806
8180 --------------
8181 -- cursor to check valid corporate book tied to the ledger
8182 CURSOR l_corpbook_csr(p_book_type_code IN VARCHAR2) IS
8183 SELECT 'Y'
8184 FROM FA_BOOK_CONTROLS fa,
8185 OKL_SYS_ACCT_OPTS sys
8186 WHERE book_class='CORPORATE'
8187 AND fa.set_of_books_id = sys.set_of_books_id
8188 AND book_type_code = p_book_type_code;
8189
8190 l_valid_corpbook VARCHAR2(1);
8191
8192 --cursor to fetch category name for message token
8193 CURSOR l_fa_cat_csr(p_cat_id IN NUMBER) IS
8194 SELECT name
8195 FROM okx_asst_catgrs_v
8196 WHERE category_id = p_cat_id;
8197
8198 l_fa_cat_name okx_asst_catgrs_v.name%TYPE;
8199
8200 --------------
8201 --Bug# 4103361
8202 --------------
8203
8204 --------------
8205 --Bug# 4350255
8206 --------------
8207 CURSOR pth_hdr_csr(p_chr_id IN NUMBER,
8208 p_cle_id IN NUMBER) IS
8209 SELECT 1
8210 FROM okl_party_payment_hdr pph
8211 WHERE cle_id = p_cle_id
8212 AND dnz_chr_id = p_chr_id;
8213
8214 l_pth_present VARCHAR2(1);
8215
8216 CURSOR pth_dtl_csr(p_chr_id IN NUMBER,
8217 p_cle_id IN NUMBER) IS
8218 SELECT ppd.vendor_id,
8219 ppd.pay_site_id,
8220 pph.passthru_term
8221 FROM okl_party_payment_hdr pph,
8222 okl_party_payment_dtls ppd
8223 WHERE pph.cle_id = p_cle_id
8224 AND pph.dnz_chr_id = p_chr_id
8225 AND ppd.payment_hdr_id = pph.id;
8226
8227 l_vendor_id OKC_K_PARTY_ROLES_B.OBJECT1_ID1%TYPE;
8228
8229 CURSOR vendor_csr(p_vendor_id IN NUMBER) IS
8230 SELECT vendor_name
8231 FROM po_vendors
8232 WHERE vendor_id = p_vendor_id;
8233
8234 l_vendor_name po_vendors.vendor_name%TYPE;
8235
8236
8237 CURSOR l_kle_csr(ltycode VARCHAR2, chrid OKL_K_HEADERS.KHR_ID%TYPE) IS
8238 SELECT NVL(kle.name,kle.item_description) name,
8239 kle.id,
8240 ls.name line_style
8241 FROM OKL_K_LINES_FULL_V kle,
8242 OKC_LINE_STYLES_v ls,
8243 OKC_STATUSES_B sts
8244 WHERE kle.lse_id = ls.id
8245 AND ls.lty_code = ltycode
8246 AND kle.dnz_chr_id = chrid
8247 AND sts.code = kle.sts_code
8248 AND sts.ste_code NOT IN ( 'HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
8249
8250 --------------
8251 --Bug# 4350255
8252 --------------
8253
8254 --Bug# 4631549
8255 l_release_contract_yn varchar2(1);
8256 l_oec number;
8257
8258 -- Bug 5216135 : kbbhavsa : 29-May-06 : start
8259 -- cursor to fecth link line id for top line id
8260 CURSOR l_kle_link_csr(ltycode VARCHAR2, chrid OKL_K_HEADERS.KHR_ID%TYPE, cleid OKL_K_LINES_FULL_V.CLE_ID%TYPE) IS
8261 SELECT kle.id
8262 FROM OKL_K_LINES_FULL_V kle,
8263 OKC_LINE_STYLES_v ls,
8264 OKC_STATUSES_B sts
8265 WHERE kle.lse_id = ls.id
8266 AND ls.lty_code = ltycode
8267 AND kle.dnz_chr_id = chrid
8268 AND sts.code = kle.sts_code
8269 AND sts.ste_code NOT IN ( 'HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED')
8270 and kle.cle_id = cleid;
8271
8272 l_link_cle_id OKL_K_LINES_FULL_V.ID%TYPE;
8273 -- Bug 5216135 : kbbhavsa : 29-May-06 : End
8274
8275 CURSOR system_corp_book_csr(p_chr_id NUMBER) IS
8276 SELECT A.ASST_ADD_BOOK_TYPE_CODE,
8277 C.secondary_rep_method secondary_rep_method
8278 FROM okl_system_params_all a,
8279 okc_k_headers_all_b b,
8280 okl_sys_acct_opts_all c
8281 WHERE b.id = p_chr_id
8282 AND b.authoring_org_id = a.org_id
8283 AND c.org_id = a.org_id;
8284
8285 l_system_corp_book okl_system_params_all.ASST_ADD_BOOK_TYPE_CODE%TYPE;
8286 l_secondary_rep_method okl_sys_acct_opts_all.secondary_rep_method%TYPE;
8287
8288 CURSOR chk_rpt_prod_id (p_chr_id IN NUMBER) IS
8289 SELECT
8290 pdt.reporting_pdt_id
8291 FROM okl_products_v pdt
8292 ,okl_k_headers_v khr
8293 ,okc_k_headers_b CHR
8294 WHERE 1=1
8295 AND khr.id = p_chr_id
8296 AND pdt_id = pdt.id
8297 AND khr.id = CHR.id;
8298
8299 l_reporting_pdt_id okl_products_v.reporting_pdt_id%TYPE;
8300
8301
8302 BEGIN
8303
8304 -- initialize return status
8305 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
8306
8307 /*Bug#4186455
8308 *--Bug#3877032
8309 *OPEN l_hdrrl_csr('LATOWN', 'LATOWN', TO_NUMBER(p_chr_id));
8310 *FETCH l_hdrrl_csr into l_hdrrl_rec;
8311 *CLOSE l_hdrrl_csr;
8312 *l_tax_owner := l_hdrrl_rec.RULE_INFORMATION1;
8313 */
8314
8315 OPEN l_hdr_csr(p_chr_id);
8316 FETCH l_hdr_csr INTO l_hdr;
8317 IF l_hdr_csr%NOTFOUND THEN
8318 CLOSE l_hdr_csr;
8319 RAISE G_EXCEPTION_HALT_VALIDATION;
8320 END IF;
8321 CLOSE l_hdr_csr;
8322
8323 --MGAAP 7263041
8324 OPEN system_corp_book_csr(p_chr_id);
8325 FETCH system_corp_book_csr INTO l_system_corp_book,l_secondary_rep_method;
8326 IF system_corp_book_csr%NOTFOUND THEN
8327 CLOSE system_corp_book_csr;
8328 RAISE G_EXCEPTION_HALT_VALIDATION;
8329 END IF;
8330 CLOSE system_corp_book_csr;
8331
8332 OPEN chk_rpt_prod_id (p_chr_id);
8333 FETCH chk_rpt_prod_id INTO l_reporting_pdt_id;
8334 IF chk_rpt_prod_id%NOTFOUND THEN
8335 CLOSE chk_rpt_prod_id;
8336 RAISE G_EXCEPTION_HALT_VALIDATION;
8337 END IF;
8338 CLOSE chk_rpt_prod_id;
8339
8340 IF (NVL(l_secondary_rep_method, '?') = 'NOT_APPLICABLE') THEN
8341 IF (l_reporting_pdt_id IS NOT NULL AND
8342 l_reporting_pdt_id <> OKL_API.G_MISS_NUM) THEN
8343 Okl_Api.set_message(
8344 p_app_name => G_APP_NAME,
8345 p_msg_name => 'OKL_QA_RPT_MISMATCH'); -- MGAAP 7263041
8346 x_return_status := Okl_Api.G_RET_STS_ERROR;
8347 RAISE G_EXCEPTION_HALT_VALIDATION;
8348 END IF;
8349 END IF;
8350
8351 /*Bug# 3670104
8352 *If( l_hdr.DATE_SIGNED >= l_hdr.START_DATE) Then
8353 * OKL_API.set_message(
8354 * p_app_name => G_APP_NAME,
8355 * p_msg_name => 'OKL_QA_DATESIGNED_LT_START');
8356 * -- notify caller of an error
8357 * x_return_status := OKL_API.G_RET_STS_ERROR;
8358 *End If;
8359 */
8360
8361 OPEN l_contract_name(l_hdr.contract_number);
8362 FETCH l_contract_name INTO l_cn;
8363 IF l_contract_name%NOTFOUND THEN
8364 CLOSE l_contract_name;
8365 RAISE G_EXCEPTION_HALT_VALIDATION;
8366 END IF;
8367 CLOSE l_contract_name;
8368
8369 /*
8370 *If( l_cn.cnt > 1) Then
8371 * OKL_API.set_message(
8372 * p_app_name => G_APP_NAME,
8373 * p_msg_name => 'OKL_QA_CN_NOTUNQ');
8374 * -- notify caller of an error
8375 * x_return_status := OKL_API.G_RET_STS_ERROR;
8376 *End If;
8377 */
8378
8379
8380 FOR l_struct_rec IN l_struct_csr ( TO_NUMBER(p_chr_id) )
8381 LOOP
8382
8383 IF ( l_struct_rec.structure <> -1 ) THEN
8384 l_structure := TO_NUMBER(l_struct_rec.structure);
8385 END IF;
8386
8387 END LOOP;
8388
8389 IF( ( l_structure > 3) AND (l_hdr.DEAL_TYPE <> 'LOAN-REVOLVING')) THEN
8390 Okl_Api.set_message(
8391 p_app_name => G_APP_NAME,
8392 p_msg_name => 'OKL_QA_STRUCTURE_NA');
8393 -- notify caller of an error
8394 x_return_status := Okl_Api.G_RET_STS_ERROR;
8395 END IF;
8396
8397 --bug# 2753114
8398 IF( l_hdr.report_pdt_id <> -1 ) THEN
8399
8400 l_report_tax_book := OKL_SYSTEM_PARAMS_ALL_PUB.get_system_param_value(OKL_SYSTEM_PARAMS_ALL_PUB.G_RPT_PROD_BOOK_TYPE_CODE);
8401
8402 OPEN l_rpt_csr( l_report_tax_book, l_hdr.start_date );
8403 FETCH l_rpt_csr INTO l_rpt_rec;
8404 --Bug#3877032
8405 IF ( l_rpt_csr%NOTFOUND ) THEN
8406 --IF ( nvl(l_rpt_rec.isThere, 'N' ) = 'N' ) THEN
8407 Okl_Api.set_message(
8408 p_app_name => G_APP_NAME,
8409 p_msg_name => 'OKL_QA_NO_REPTXBK');
8410 -- notify caller of an error
8411 x_return_status := Okl_Api.G_RET_STS_ERROR;
8412 END IF;
8413 CLOSE l_rpt_csr;
8414
8415 END IF;
8416
8417 OPEN l_lne_csr('FREE_FORM1', p_chr_id);
8418 FETCH l_lne_csr INTO l_lne;
8419 IF( (l_hdr.DEAL_TYPE = 'LOAN-REVOLVING') AND l_lne_csr%FOUND AND (l_hdr.report_pdt_id = -1) ) THEN
8420 Okl_Api.set_message(
8421 p_app_name => G_APP_NAME,
8422 p_msg_name => 'OKL_QA_ASST_LNR');
8423 -- notify caller of an error
8424 x_return_status := Okl_Api.G_RET_STS_ERROR;
8425 CLOSE l_lne_csr;
8426 RAISE G_EXCEPTION_HALT_VALIDATION;
8427 ELSIF( (l_hdr.DEAL_TYPE <> 'LOAN-REVOLVING') AND l_lne_csr%NOTFOUND ) THEN
8428 Okl_Api.set_message(
8429 p_app_name => G_APP_NAME,
8430 p_msg_name => 'OKL_QA_NO_ASSETS');
8431 -- notify caller of an error
8432 x_return_status := Okl_Api.G_RET_STS_ERROR;
8433 END IF;
8434 CLOSE l_lne_csr;
8435
8436 --Bug# 4631549
8437 l_release_contract_yn := okl_api.g_false;
8438 l_release_contract_yn := okl_lla_util_pvt.check_release_contract(p_chr_id => p_chr_id);
8439
8440 FOR l_lne IN l_lne_csr('FREE_FORM1', p_chr_id)
8441 LOOP
8442
8443 /* -- not checking for asset number uniquesness. Re-Book !!!
8444 OPEN l_line_name(l_lne.name);
8445 FETCH l_line_name into l_ln;
8446 IF l_line_name%NOTFOUND THEN
8447 RAISE G_EXCEPTION_HALT_VALIDATION;
8448 END IF;
8449 CLOSE l_line_name;
8450
8451 If( l_ln.cnt > 1) Then
8452 OKL_API.set_message(
8453 p_app_name => G_APP_NAME,
8454 p_msg_name => 'OKL_QA_AN_NOTUNQ');
8455 -- notify caller of an error
8456 x_return_status := OKL_API.G_RET_STS_ERROR;
8457 End If;
8458
8459 */
8460
8461 --Bug# 4631549
8462 If l_release_contract_yn = okl_api.g_true then
8463 l_oec := l_lne.expected_asset_cost;
8464 else
8465 l_oec := l_lne.oec;
8466 end if;
8467
8468 --Bug# 4631549
8469 IF ( l_lne.RESIDUAL_VALUE > l_OEC ) Then
8470 --IF ( l_lne.RESIDUAL_VALUE > l_lne.OEC ) THEN
8471 Okl_Api.set_message(
8472 p_app_name => G_APP_NAME,
8473 p_msg_name => 'OKL_QA_RES_GT_OEC',
8474 p_token1 => 'line',
8475 p_token1_value => l_lne.name);
8476 -- notify caller of an error
8477 x_return_status := Okl_Api.G_RET_STS_ERROR;
8478 END IF;
8479
8480 --Bug# 4631549
8481 If ( l_lne.CAPITAL_REDUCTION > l_OEC) Then
8482 --IF ( l_lne.CAPITAL_REDUCTION > l_lne.OEC) THEN
8483 Okl_Api.set_message(
8484 p_app_name => G_APP_NAME,
8485 p_msg_name => 'OKL_QA_CAPRED_LT_OEC',
8486 p_token1 => 'line',
8487 p_token1_value => l_lne.name);
8488 -- notify caller of an error
8489 x_return_status := Okl_Api.G_RET_STS_ERROR;
8490 END IF;
8491 --Bug# 4631549
8492 If ( l_lne.TRADEIN_AMOUNT > l_OEC) Then
8493 --IF ( l_lne.TRADEIN_AMOUNT > l_lne.OEC) THEN
8494 Okl_Api.set_message(
8495 p_app_name => G_APP_NAME,
8496 p_msg_name => 'OKL_QA_TRADN_LT_CAP',
8497 p_token1 => 'line',
8498 p_token1_value => l_lne.name);
8499 x_return_status := Okl_Api.G_RET_STS_ERROR;
8500 END IF;
8501
8502 IF (( UPPER(l_lne.residual_code) = 'NONE') AND (l_lne.residual_grnty_amount IS NOT NULL)) THEN
8503 Okl_Api.set_message(
8504 p_app_name => G_APP_NAME,
8505 p_msg_name => 'OKL_QA_NO_RESIDUAL_GRNTY',
8506 p_token1 => 'line',
8507 p_token1_value => l_lne.name);
8508 x_return_status := Okl_Api.G_RET_STS_ERROR;
8509 END IF;
8510
8511 IF ((INSTR( l_hdr.DEAL_TYPE, 'OP' )>0) AND ( l_lne.RVI_PREMIUM IS NOT NULL)) THEN
8512 Okl_Api.set_message(
8513 p_app_name => G_APP_NAME,
8514 p_msg_name => 'OKL_QA_OP_NORVINSU',
8515 p_token1 => 'line',
8516 p_token1_value => l_lne.name);
8517 x_return_status := Okl_Api.G_RET_STS_ERROR;
8518 END IF;
8519
8520 i := 0;
8521 IF ( l_structure > 0 ) THEN
8522 FOR l_rl_rec1 IN l_rl_csr1 ( 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_lne.id )
8523 LOOP
8524 IF( l_rl_rec1.rule_information2 IS NOT NULL) THEN
8525 i := i + 1;
8526 END IF;
8527 END LOOP;
8528 IF (i > 1) THEN
8529 Okl_Api.set_message(
8530 p_app_name => G_APP_NAME,
8531 p_msg_name => 'OKL_QA_GT_ONE_PMT',
8532 p_token1 => 'line',
8533 p_token1_value => l_lne.name);
8534 x_return_status := Okl_Api.G_RET_STS_ERROR;
8535 END IF;
8536 END IF;
8537
8538 OPEN asst_qty_csr(FinAsstId => l_lne.id);
8539 FETCH asst_qty_csr INTO l_asst;
8540 CLOSE asst_qty_csr;
8541
8542 IF ((INSTR( l_hdr.DEAL_TYPE, 'OP' )>0) OR
8543 (INSTR( l_hdr.DEAL_TYPE, 'DF' )>0)) OR
8544 (l_hdr.DEAL_TYPE = 'LEASEST') THEN
8545
8546 OPEN l_txl_csr(l_asst.fa_id);
8547 FETCH l_txl_csr INTO l_txl;
8548 IF l_txl_csr%NOTFOUND THEN
8549 CLOSE l_txl_csr;
8550 Okl_Api.set_message(
8551 p_app_name => G_APP_NAME,
8552 p_msg_name => 'OKL_QA_NO_DEPRECIATION',
8553 p_token1 => 'line',
8554 p_token1_value => l_lne.name);
8555 x_return_status := Okl_Api.G_RET_STS_ERROR;
8556 RAISE G_EXCEPTION_HALT_VALIDATION;
8557 END IF;
8558 CLOSE l_txl_csr;
8559
8560 IF( l_txl.fa_location_id IS NULL ) THEN
8561 Okl_Api.set_message(
8562 p_app_name => G_APP_NAME,
8563 p_msg_name => 'OKL_QA_NO_FA_LOCATION',
8564 p_token1 => 'line',
8565 p_token1_value => l_lne.name);
8566 x_return_status := Okl_Api.G_RET_STS_ERROR;
8567 END IF;
8568
8569 OPEN l_txd_csr(l_asst.fa_id);
8570 FETCH l_txd_csr INTO l_txd;
8571 IF l_txd_csr%NOTFOUND THEN
8572 CLOSE l_txd_csr;
8573 Okl_Api.set_message(
8574 p_app_name => G_APP_NAME,
8575 p_msg_name => 'OKL_QA_NO_TAX',
8576 p_token1 => 'line',
8577 p_token1_value => l_lne.name);
8578 x_return_status := Okl_Api.G_RET_STS_ERROR;
8579 RAISE G_EXCEPTION_HALT_VALIDATION;
8580 END IF;
8581 CLOSE l_txd_csr;
8582
8583 --|start 28-Oct-2008 cklee Fixed Bug 7492324 |
8584
8585 IF((l_txl.life_in_months IS NULL AND l_txl.deprn_rate IS NULL)OR
8586 (l_txl.deprn_method IS NULL)OR(l_txl.in_service_date IS NULL)OR
8587 ((nvl(l_txl.salvage_value,0) IS NULL)AND(nvl(l_txl.percent_salvage_value,0) IS NULL))OR(l_txl.depreciation_cost IS NULL))THEN
8588 --|end 28-Oct-2008 cklee Fixed Bug 7492324 |
8589
8590 Okl_Api.set_message(
8591 p_app_name => G_APP_NAME,
8592 p_msg_name => 'OKL_QA_NO_DEPRECIATION',
8593 p_token1 => 'line',
8594 p_token1_value => l_lne.name);
8595 x_return_status := Okl_Api.G_RET_STS_ERROR;
8596 ELSIF((l_txd.cost IS NULL)OR(l_txd.deprn_method_tax IS NULL))THEN
8597 Okl_Api.set_message(
8598 p_app_name => G_APP_NAME,
8599 p_msg_name => 'OKL_QA_NO_TAX',
8600 p_token1 => 'line',
8601 p_token1_value => l_lne.name);
8602 x_return_status := Okl_Api.G_RET_STS_ERROR;
8603
8604 /* made a separate process check_tax_book_cost()
8605
8606 ElsIf(l_txd.cost < l_txl.depreciation_cost)Then
8607 OKL_API.set_message(
8608 p_app_name => G_APP_NAME,
8609 p_msg_name => 'OKL_QA_BASISPCNT_GT_100',
8610 p_token1 => 'line',
8611 p_token1_value => l_lne.name);
8612 x_return_status := OKL_API.G_RET_STS_ERROR;
8613 */
8614 IF(l_hdr.term > ( 0.75*l_txl.life_in_months))THEN
8615 Okl_Api.set_message(
8616 p_app_name => G_APP_NAME,
8617 p_msg_name => 'OKL_QA_OP_TERM_LIM',
8618 p_token1 => 'line',
8619 p_token1_value => l_lne.name);
8620 x_return_status := Okl_Api.G_RET_STS_ERROR;
8621 END IF;
8622 END IF;
8623
8624 --
8625 -- Check for Tax Book of same type Bug# 3066346
8626 --
8627 FOR l_txd_rec1 IN txd_csr1 (l_asst.fa_id)
8628 LOOP
8629 IF (l_txd_rec1.book_count > 1) THEN
8630 Okl_Api.set_message(
8631 p_app_name => G_APP_NAME,
8632 p_msg_name => 'OKL_QA_MULTI_TAX_BOOK',
8633 p_token1 => 'ASSET_NUM',
8634 p_token1_value => l_lne.name,
8635 p_token2 => 'BOOK_TYPE',
8636 p_token2_value => l_txd_rec1.book_type);
8637 x_return_status := Okl_Api.G_RET_STS_ERROR;
8638
8639 END IF;
8640 END LOOP;
8641
8642 --------------
8643 --Bug# 7131806
8644 --------------
8645 l_valid_corpbook := '?';
8646 OPEN l_corpbook_csr(p_book_type_code => l_txl.corporate_book);
8647 FETCH l_corpbook_csr INTO l_valid_corpbook;
8648 CLOSE l_corpbook_csr;
8649
8650 IF l_valid_corpbook = '?' THEN
8651 Okl_Api.set_message(
8652 p_app_name => G_APP_NAME,
8653 p_msg_name => 'OKL_QA_INVALID_CORP_BOOK',
8654 p_token1 => 'ASSET_NUMBER',
8655 p_token1_value => l_lne.name);
8656 x_return_status := Okl_Api.G_RET_STS_ERROR;
8657 END IF;
8658
8659 IF (l_txl.corporate_book <> l_system_corp_book) THEN
8660 Okl_Api.set_message(
8661 p_app_name => G_APP_NAME,
8662 p_msg_name => 'OKL_QA_CORP_MISMATCH'); -- MGAAP 7263041
8663 x_return_status := Okl_Api.G_RET_STS_ERROR;
8664 END IF;
8665
8666 --------------
8667 --Bug# 4103361
8668 --------------
8669 --check asset category book combination for corporate book
8670 l_valid_bk_cat := '?';
8671 OPEN l_bk_cat_csr(p_cat_id => l_txl.depreciation_id,
8672 p_book_type_code => l_txl.corporate_book);
8673 FETCH l_bk_cat_csr INTO l_valid_bk_cat;
8674 IF l_bk_cat_csr%NOTFOUND THEN
8675 NULL;
8676 END IF;
8677 CLOSE l_bk_cat_csr;
8678
8679 IF l_valid_bk_cat = '?' THEN
8680 --get asset category name
8681 OPEN l_fa_cat_csr(p_cat_id => l_txl.depreciation_id);
8682 FETCH l_fa_cat_csr INTO l_fa_cat_name;
8683 IF l_fa_cat_csr%NOTFOUND THEN
8684 NULL;
8685 END IF;
8686 CLOSE l_fa_cat_csr;
8687
8688 Okl_Api.set_message(
8689 p_app_name => G_APP_NAME,
8690 p_msg_name => 'OKL_QA_INVALID_FA_BOOK_CAT',
8691 p_token1 => 'FA_CATEGORY',
8692 p_token1_value => l_fa_cat_name,
8693 p_token2 => 'FA_BOOK',
8694 p_token2_value => l_txl.corporate_book,
8695 p_token3 => 'line',
8696 p_token3_value => l_lne.name);
8697 x_return_status := Okl_Api.G_RET_STS_ERROR;
8698 END IF;
8699
8700 --check asset category-book combination for tax books
8701 FOR l_txd_rec IN l_txd_csr(kleid => l_asst.fa_id)
8702 LOOP
8703 l_valid_bk_cat := '?';
8704 OPEN l_bk_cat_csr(p_cat_id => l_txl.depreciation_id,
8705 p_book_type_code => l_txd_rec.tax_book);
8706 FETCH l_bk_cat_csr INTO l_valid_bk_cat;
8707 IF l_bk_cat_csr%NOTFOUND THEN
8708 NULL;
8709 END IF;
8710 CLOSE l_bk_cat_csr;
8711
8712 IF l_valid_bk_cat = '?' THEN
8713 --get asset category name
8714 OPEN l_fa_cat_csr(p_cat_id => l_txl.depreciation_id);
8715 FETCH l_fa_cat_csr INTO l_fa_cat_name;
8716 IF l_fa_cat_csr%NOTFOUND THEN
8717 NULL;
8718 END IF;
8719 CLOSE l_fa_cat_csr;
8720
8721 Okl_Api.set_message(
8722 p_app_name => G_APP_NAME,
8723 p_msg_name => 'OKL_QA_INVALID_FA_BOOK_CAT',
8724 p_token1 => 'FA_CATEGORY',
8725 p_token1_value => l_fa_cat_name,
8726 p_token2 => 'FA_BOOK',
8727 p_token2_value => l_txd_rec.tax_book,
8728 p_token3 => 'line',
8729 p_token3_value => l_lne.name);
8730 x_return_status := Okl_Api.G_RET_STS_ERROR;
8731 END IF;
8732 END LOOP;
8733 --------------
8734 --Bug# 4103361
8735 --------------
8736
8737 END IF;
8738
8739
8740
8741 IF((INSTR( l_hdr.DEAL_TYPE, 'LOAN' )>0) AND (l_hdr.report_pdt_id = -1)) THEN
8742
8743 OPEN l_txl_csr(l_asst.fa_id);
8744 FETCH l_txl_csr INTO l_txl;
8745 CLOSE l_txl_csr;
8746
8747 IF((l_lne.RESIDUAL_VALUE > 0)OR
8748 (l_txl.salvage_value > 0)OR
8749 (l_txl.percent_salvage_value > 0)) THEN
8750
8751 Okl_Api.set_message(
8752 p_app_name => G_APP_NAME,
8753 p_msg_name => 'OKL_QA_LNCTRT_NORVSV',
8754 p_token1 => 'line',
8755 p_token1_value => l_lne.name);
8756 x_return_status := Okl_Api.G_RET_STS_ERROR;
8757
8758 END IF;
8759
8760 IF( l_txl.fa_location_id IS NOT NULL ) THEN
8761 Okl_Api.set_message(
8762 p_app_name => G_APP_NAME,
8763 p_msg_name => 'OKL_QA_LOAN_FA_LOCATION',
8764 p_token1 => 'line',
8765 p_token1_value => l_lne.name);
8766 x_return_status := Okl_Api.G_RET_STS_ERROR;
8767 END IF;
8768
8769 END IF;
8770
8771 OPEN supp_csr(l_asst.fa_id);
8772 FETCH supp_csr INTO l_supp_rec;
8773 IF supp_csr%NOTFOUND THEN
8774 NULL;
8775 -- bug 5034519. changed from contract start date to asset start date
8776 -- also changed message from OKL_QA_VNDRDATES_GT_STARTDATE
8777 --ELSIF( l_supp_rec.date_invoiced > l_hdr.start_date ) THEN
8778 ELSIF( l_supp_rec.date_invoiced > l_lne.start_date ) THEN
8779 Okl_Api.set_message(
8780 p_app_name => G_APP_NAME,
8781 --p_msg_name => 'OKL_QA_VNDRDATES_GT_STARTDATE',
8782 p_msg_name => 'OKL_QA_INV_SUPPDATE',
8783 p_token1 => 'line',
8784 p_token1_value => l_lne.name);
8785 x_return_status := Okl_Api.G_RET_STS_ERROR;
8786 END IF;
8787 CLOSE supp_csr;
8788
8789 /*Bug#3877032
8790 *OPEN l_hdrrl_csr('LATOWN', 'LATOWN', TO_NUMBER(p_chr_id));
8791 *FETCH l_hdrrl_csr into l_hdrrl_rec;
8792 *CLOSE l_hdrrl_csr;
8793 */
8794
8795 /*Bug#4186455
8796 *If (( l_lne.residual_value < (0.2 * l_lne.OEC)) AND (l_tax_owner = 'LESSOR')) then
8797 *--If (( l_lne.residual_value < (0.2 * l_lne.OEC)) AND (l_hdrrl_rec.RULE_INFORMATION1 = 'LESSOR')) then
8798 * OKL_API.set_message(
8799 * p_app_name => G_APP_NAME,
8800 * p_msg_name => 'OKL_QA_RV_OEC_TOWN',
8801 * p_token1 => 'line',
8802 * p_token1_value => l_lne.name);
8803 * x_return_status := OKL_API.G_RET_STS_ERROR;
8804 *END IF;
8805 */
8806
8807 OPEN l_rl_csr1( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne.id );
8808 FETCH l_rl_csr1 INTO l_rl_rec1;
8809 IF l_rl_csr1%NOTFOUND THEN
8810 Okl_Api.set_message(
8811 p_app_name => G_APP_NAME,
8812 p_msg_name => 'OKL_QA_NO_PAYMENTS',
8813 p_token1 => 'line',
8814 p_token1_value => l_lne.name);
8815 x_return_status := Okl_Api.G_RET_STS_ERROR;
8816 END IF;
8817 CLOSE l_rl_csr1;
8818
8819
8820 END LOOP;
8821
8822 FOR l_lne IN l_lne_csr('USAGE', p_chr_id)
8823 LOOP
8824
8825 i := 0;
8826 l_ib_qty := 0;
8827 FOR l_itm IN l_itms_csr('LINK_USAGE_ASSET', l_lne.id, p_chr_id)
8828 LOOP
8829 OPEN asst_qty_csr(FinAsstId => l_itm.FinAssetId);
8830 FETCH asst_qty_csr INTO l_asst;
8831 IF asst_qty_csr%NOTFOUND THEN
8832 CLOSE asst_qty_csr;
8833 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8834 ELSE
8835 OPEN ib_qty_csr(FinAsstId => l_itm.FinAssetId);
8836 FETCH ib_qty_csr INTO l_ib_qty;
8837 IF ib_qty_csr%NOTFOUND THEN
8838 CLOSE ib_qty_csr;
8839 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8840 END IF;
8841 CLOSE ib_qty_csr;
8842 END IF;
8843 CLOSE asst_qty_csr;
8844 i := i + 1;
8845
8846 IF l_asst.number_of_items <> l_ib_qty THEN
8847 Okl_Api.set_message(
8848 p_app_name => G_APP_NAME,
8849 p_msg_name => 'OKL_QA_USAGE_1ITM',
8850 p_token1 => 'usage line',
8851 p_token1_value => TO_CHAR(i));
8852 x_return_status := Okl_Api.G_RET_STS_ERROR;
8853 END IF;
8854
8855 END LOOP;
8856
8857
8858 IF ( i = 0 ) THEN
8859 Okl_Api.set_message(
8860 p_app_name => G_APP_NAME,
8861 p_msg_name => 'OKL_QA_UBB_1ASSET');
8862 x_return_status := Okl_Api.G_RET_STS_ERROR;
8863 END IF;
8864
8865 END LOOP;
8866
8867
8868 --
8869 -- Passthrough validation for FEE and Service line
8870 -- Bug# dedey
8871 --
8872 FOR l_lne IN l_kle_csr('FEE', p_chr_id)
8873 LOOP
8874
8875 -- Bug# 4350255
8876 FOR pth_dtl_rec IN pth_dtl_csr(p_chr_id => p_chr_id,
8877 p_cle_id => l_lne.id)
8878 LOOP
8879
8880 l_site_valid := '?';
8881 OPEN passthru_site_csr (pth_dtl_rec.vendor_id,
8882 pth_dtl_rec.pay_site_id);
8883 FETCH passthru_site_csr INTO l_site_valid;
8884 CLOSE passthru_site_csr;
8885
8886 IF (l_site_valid <> 'Y') THEN
8887
8888 OPEN vendor_csr(p_vendor_id => pth_dtl_rec.vendor_id);
8889 FETCH vendor_csr INTO l_vendor_name;
8890 CLOSE vendor_csr;
8891
8892 IF (pth_dtl_rec.passthru_term = 'BASE') THEN
8893
8894 Okl_Api.set_message(
8895 p_app_name => G_APP_NAME,
8896 p_msg_name => 'OKL_QA_INVLD_BASE_PTH_SITE',
8897 p_token1 => 'LINE',
8898 p_token1_value => l_lne.line_style||'/'||l_lne.name,
8899 p_token2 => 'VENDOR',
8900 p_token2_value => l_vendor_name);
8901 x_return_status := Okl_Api.G_RET_STS_ERROR;
8902
8903 ELSIF (pth_dtl_rec.passthru_term = 'EVERGREEN') THEN
8904
8905 Okl_Api.set_message(
8906 p_app_name => G_APP_NAME,
8907 p_msg_name => 'OKL_QA_INVLD_EVGN_PTH_SITE',
8908 p_token1 => 'LINE',
8909 p_token1_value => l_lne.line_style||'/'||l_lne.name,
8910 p_token2 => 'VENDOR',
8911 p_token2_value => l_vendor_name);
8912 x_return_status := Okl_Api.G_RET_STS_ERROR;
8913
8914 END IF;
8915 END IF;
8916 END LOOP;
8917
8918 END LOOP; -- FEE line
8919
8920 FOR l_lne IN l_kle_csr('SOLD_SERVICE', p_chr_id)
8921 LOOP
8922
8923 -- Bug# 4350255
8924 -- Vendor must be defined for Service line
8925 l_vendor_id := NULL;
8926 OPEN party_csr (p_chr_id,
8927 l_lne.id);
8928 FETCH party_csr INTO l_vendor_id;
8929 CLOSE party_csr;
8930
8931 IF (l_vendor_id IS NULL) THEN
8932 Okl_Api.set_message(
8933 G_APP_NAME,
8934 'OKL_QA_SERVICE_VENDOR',
8935 'LINE',
8936 l_lne.name
8937 );
8938 x_return_status := Okl_Api.G_RET_STS_ERROR;
8939 END IF;
8940
8941 -- Payments are mandatory for Service Line if
8942 -- Passthrough has been defined
8943 l_pth_present := '?';
8944 FOR pth_hdr_rec IN pth_hdr_csr( p_chr_id => TO_NUMBER(p_chr_id),
8945 p_cle_id => l_lne.id)
8946 LOOP
8947 l_pth_present := 'Y';
8948 END LOOP;
8949
8950 IF (l_pth_present = 'Y') THEN
8951
8952 -- Bug 5216135 : kbbhavsa : 29-May-06 : start
8953 OPEN l_kle_link_csr( 'LINK_SERV_ASSET', p_chr_id, l_lne.id );
8954 FETCH l_kle_link_csr INTO l_link_cle_id;
8955 -- check if service line is linked to Aseet or not
8956 -- if linked then check payment for linked service asset sub line
8957 -- and if not linked then check payment at service top line
8958 IF l_kle_link_csr%FOUND THEN
8959 OPEN l_rl_csr1( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_link_cle_id );
8960 ELSE
8961 OPEN l_rl_csr1( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne.id );
8962 END IF;
8963 CLOSE l_kle_link_csr;
8964 -- Bug 5216135 : kbbhavsa : 29-May-06 : end
8965
8966 FETCH l_rl_csr1 INTO l_rl_rec1;
8967
8968 IF l_rl_csr1%NOTFOUND THEN
8969 -- Bug 5216135 : kbbhavsa : 29-May-06 : start
8970 IF l_link_cle_id IS NULL THEN
8971 -- service not linked to asset, and payment not found at top service line
8972 Okl_Api.set_message(
8973 p_app_name => G_APP_NAME,
8974 p_msg_name => 'OKL_QA_PTH_NO_PAYMENTS',
8975 p_token1 => 'LINE',
8976 p_token1_value => l_lne.name);
8977 x_return_status := Okl_Api.G_RET_STS_ERROR;
8978 ELSE
8979 -- service linked to asset, and payment not found at linked service asset sub line
8980 IF l_rl_csr1%ISOPEN THEN
8981 CLOSE l_rl_csr1;
8982 END IF;
8983 -- service linked to asset, now checking payment at top service line
8984 OPEN l_rl_csr1( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne.id );
8985 FETCH l_rl_csr1 INTO l_rl_rec1;
8986 IF l_rl_csr1%NOTFOUND THEN
8987 -- service linked to asset, and payment not found at top service line
8988 Okl_Api.set_message(
8989 p_app_name => G_APP_NAME,
8990 p_msg_name => 'OKL_QA_PTH_NO_PAYMENTS',
8991 p_token1 => 'LINE',
8992 p_token1_value => l_lne.name);
8993 x_return_status := Okl_Api.G_RET_STS_ERROR;
8994 END IF;
8995 END IF;
8996 -- Bug 5216135 : kbbhavsa : 29-May-06 : end
8997 END IF;
8998 CLOSE l_rl_csr1;
8999 END IF;
9000
9001 -- Bug# 4350255
9002 FOR pth_dtl_rec IN pth_dtl_csr(p_chr_id => p_chr_id,
9003 p_cle_id => l_lne.id)
9004 LOOP
9005
9006 l_site_valid := '?';
9007 OPEN passthru_site_csr (pth_dtl_rec.vendor_id,
9008 pth_dtl_rec.pay_site_id);
9009 FETCH passthru_site_csr INTO l_site_valid;
9010 CLOSE passthru_site_csr;
9011
9012 IF (l_site_valid <> 'Y') THEN
9013 OPEN vendor_csr(p_vendor_id => pth_dtl_rec.vendor_id);
9014 FETCH vendor_csr INTO l_vendor_name;
9015 CLOSE vendor_csr;
9016
9017 IF (pth_dtl_rec.passthru_term = 'BASE') THEN
9018
9019 Okl_Api.set_message(
9020 p_app_name => G_APP_NAME,
9021 p_msg_name => 'OKL_QA_INVLD_BASE_PTH_SITE',
9022 p_token1 => 'LINE',
9023 p_token1_value => l_lne.line_style||'/'||l_lne.name,
9024 p_token2 => 'VENDOR',
9025 p_token2_value => l_vendor_name);
9026 x_return_status := Okl_Api.G_RET_STS_ERROR;
9027
9028 ELSIF (pth_dtl_rec.passthru_term = 'EVERGREEN') THEN
9029
9030 Okl_Api.set_message(
9031 p_app_name => G_APP_NAME,
9032 p_msg_name => 'OKL_QA_INVLD_EVGN_PTH_SITE',
9033 p_token1 => 'LINE',
9034 p_token1_value => l_lne.line_style||'/'||l_lne.name,
9035 p_token2 => 'VENDOR',
9036 p_token2_value => l_vendor_name);
9037 x_return_status := Okl_Api.G_RET_STS_ERROR;
9038
9039 END IF;
9040 END IF;
9041 END LOOP;
9042
9043 END LOOP; -- SERVICE line
9044
9045 --
9046 -- Passthrough validation for ASSET line
9047 -- Bug# 4350255
9048 --
9049 FOR l_lne IN l_kle_csr('FREE_FORM1', p_chr_id)
9050 LOOP
9051
9052 -- Bug# 4350255
9053 FOR pth_dtl_rec IN pth_dtl_csr(p_chr_id => p_chr_id,
9054 p_cle_id => l_lne.id)
9055 LOOP
9056
9057 l_site_valid := '?';
9058 OPEN passthru_site_csr (pth_dtl_rec.vendor_id,
9059 pth_dtl_rec.pay_site_id);
9060 FETCH passthru_site_csr INTO l_site_valid;
9061 CLOSE passthru_site_csr;
9062
9063 IF (l_site_valid <> 'Y') THEN
9064 OPEN vendor_csr(p_vendor_id => pth_dtl_rec.vendor_id);
9065 FETCH vendor_csr INTO l_vendor_name;
9066 CLOSE vendor_csr;
9067
9068 IF (pth_dtl_rec.passthru_term = 'BASE') THEN
9069
9070 Okl_Api.set_message(
9071 p_app_name => G_APP_NAME,
9072 p_msg_name => 'OKL_QA_INVLD_BASE_PTH_SITE',
9073 p_token1 => 'LINE',
9074 p_token1_value => l_lne.line_style||'/'||l_lne.name,
9075 p_token2 => 'VENDOR',
9076 p_token2_value => l_vendor_name);
9077 x_return_status := Okl_Api.G_RET_STS_ERROR;
9078
9079 ELSIF (pth_dtl_rec.passthru_term = 'EVERGREEN') THEN
9080
9081 Okl_Api.set_message(
9082 p_app_name => G_APP_NAME,
9083 p_msg_name => 'OKL_QA_INVLD_EVGN_PTH_SITE',
9084 p_token1 => 'LINE',
9085 p_token1_value => l_lne.line_style||'/'||l_lne.name,
9086 p_token2 => 'VENDOR',
9087 p_token2_value => l_vendor_name);
9088 x_return_status := Okl_Api.G_RET_STS_ERROR;
9089
9090 END IF;
9091 END IF;
9092 END LOOP;
9093
9094 END LOOP; -- ASSET line
9095
9096 -- Bug# 3064121
9097 FOR line_amt_rec IN line_amt_csr (p_chr_id,
9098 'SOLD_SERVICE')
9099 LOOP
9100 l_tot_sub_line_amt := 0;
9101 OPEN sub_line_amt_csr (line_amt_rec.id);
9102 FETCH sub_line_amt_csr INTO l_tot_sub_line_amt;
9103 CLOSE sub_line_amt_csr;
9104
9105 IF (l_tot_sub_line_amt <> line_amt_rec.amount) THEN
9106 Okl_Api.set_message(
9107 G_APP_NAME,
9108 'OKL_QA_SRV_AMT_MISMATCH',
9109 'LINE_TYPE',
9110 'SERVICE',
9111 'LINE_NUMBER',
9112 line_amt_rec.line_number
9113 );
9114 x_return_status := Okl_Api.G_RET_STS_ERROR;
9115 END IF;
9116
9117 END LOOP;
9118 -- Bug# 3064121
9119
9120 --
9121 -- Check payment start and end date
9122 --
9123
9124 check_payment_period(
9125 p_chr_id => p_chr_id,
9126 x_return_status => lx_return_status
9127 );
9128
9129 IF (lx_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9130 x_return_status := lx_return_status;
9131 END IF;
9132
9133 --
9134 -- Bug# 2901495
9135 -- Check credit lines
9136 --
9137 Okl_La_Validation_Util_Pvt.validate_crdtln_err (
9138 p_api_version => 1.0,
9139 p_init_msg_list => Okl_Api.G_FALSE,
9140 x_return_status => lx_return_status,
9141 x_msg_count => x_msg_count,
9142 x_msg_data => x_msg_data,
9143 p_chr_id => p_chr_id
9144 );
9145
9146 IF (lx_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9147 x_return_status := lx_return_status;
9148 END IF;
9149
9150 -- Bug# 4350255
9151 -- Modified the procedure check_fee_service_pth to
9152 -- include validations for Asset line Passthrough
9153 --
9154 -- Check FEE, SERVICE, ASSET passthrough rule
9155 --
9156 check_fee_service_ast_pth(
9157 p_chr_id => p_chr_id,
9158 x_return_status => lx_return_status
9159 );
9160
9161 IF (lx_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9162 x_return_status := lx_return_status;
9163 END IF;
9164
9165 --
9166 -- Check LASLL for stub and actual payments
9167 --
9168 check_stub_payment(
9169 p_chr_id => p_chr_id,
9170 x_return_status => lx_return_status
9171 );
9172
9173 IF (lx_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9174 x_return_status := lx_return_status;
9175 END IF;
9176
9177 --
9178 -- Check for loan revolving contract
9179 --
9180 check_lessee_as_vendor(
9181 p_chr_id => p_chr_id,
9182 x_return_status => lx_return_status
9183 );
9184
9185 IF (lx_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9186 x_return_status := lx_return_status;
9187 END IF;
9188
9189 --
9190 -- Check for serialized item
9191 --
9192
9193 check_serial_asset(
9194 p_chr_id => p_chr_id,
9195 x_return_status => lx_return_status
9196 );
9197
9198 IF (lx_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9199 x_return_status := lx_return_status;
9200 END IF;
9201
9202 -- bug 6760186 start
9203 -- Check for ib_location
9204 --
9205
9206 check_ib_location (
9207 p_chr_id => p_chr_id,
9208 x_return_status => lx_return_status
9209 );
9210
9211 IF (lx_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9212 x_return_status := lx_return_status;
9213 END IF;
9214 -- bug 6760186 end
9215
9216 /* Manu 30-Aug-2004 START
9217 Call to Rollover Quotes QA Validation checks. */
9218
9219 check_rolloverQuotes(
9220 p_chr_id => p_chr_id,
9221 x_return_status => lx_return_status
9222 );
9223
9224 IF (lx_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9225 x_return_status := lx_return_status;
9226 END IF;
9227
9228 /* Manu 30-Aug-2004 END */
9229
9230 --Bug# 4996899
9231 check_financed_fees(
9232 p_chr_id => p_chr_id,
9233 x_return_status => lx_return_status
9234 );
9235
9236 IF (lx_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9237 x_return_status := lx_return_status;
9238 END IF;
9239 --Bug# 4996899
9240
9241 check_stream_template(
9242 p_chr_id => p_chr_id,
9243 x_return_status => lx_return_status
9244 );
9245
9246 IF (lx_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9247 x_return_status := lx_return_status;
9248 END IF;
9249
9250 --Bug#4622438
9251 check_product_status(
9252 p_chr_id => p_chr_id,
9253 x_return_status => lx_return_status
9254 );
9255
9256 IF (lx_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9257 x_return_status := lx_return_status;
9258 END IF;
9259
9260 --Bug#4373029
9261 Okl_La_Sales_Tax_Pvt.check_sales_tax(
9262 p_chr_id => p_chr_id,
9263 x_return_status => lx_return_status
9264 );
9265 IF (lx_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9266 x_return_status := lx_return_status;
9267 END IF;
9268
9269 --akrangan bug 5362977 starts
9270 check_service_contracts(
9271 p_chr_id => p_chr_id,
9272 x_return_status => lx_return_status
9273 );
9274
9275 IF (lx_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
9276 x_return_status := lx_return_status;
9277 END IF;
9278 --akrangan bug 5362977 ends
9279
9280 --Murthy
9281 check_sales_quote(
9282 p_chr_id => p_chr_id,
9283 x_return_status => lx_return_status
9284 );
9285 IF (lx_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9286 x_return_status := lx_return_status;
9287 END IF;
9288
9289 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
9290 Okl_Api.set_message(
9291 p_app_name => G_APP_NAME,
9292 p_msg_name => G_QA_SUCCESS);
9293 END IF;
9294
9295 --Bug# 9690217
9296 -- Reduced severity of this check to a QA Warning
9297 /*
9298 --Smereddy Bug#7271259
9299 check_loan_payment(
9300 p_chr_id => p_chr_id,
9301 x_return_status => lx_return_status
9302 );
9303 IF (lx_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9304 x_return_status := lx_return_status;
9305 END IF;
9306 */
9307
9308 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
9309 Okl_Api.set_message(
9310 p_app_name => G_APP_NAME,
9311 p_msg_name => G_QA_SUCCESS);
9312 END IF;
9313
9314 EXCEPTION
9315
9316 WHEN G_EXCEPTION_HALT_VALIDATION THEN
9317 -- no processing necessary; validation can continue with next column
9318 IF l_lne_csr%ISOPEN THEN
9319 CLOSE l_lne_csr;
9320 END IF;
9321 IF l_hdr_csr%ISOPEN THEN
9322 CLOSE l_hdr_csr;
9323 END IF;
9324 IF l_txl_csr%ISOPEN THEN
9325 CLOSE l_txl_csr;
9326 END IF;
9327 NULL;
9328 WHEN OTHERS THEN
9329 -- store SQL error message on message stack
9330 Okl_Api.SET_MESSAGE(
9331 p_app_name => G_APP_NAME,
9332 p_msg_name => G_UNEXPECTED_ERROR,
9333 p_token1 => G_SQLCODE_TOKEN,
9334 p_token1_value => SQLCODE,
9335 p_token2 => G_SQLERRM_TOKEN,
9336 p_token2_value => SQLERRM);
9337 -- notify caller of an error as UNEXPETED error
9338 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
9339 -- verify that cursor was closed
9340 IF l_lne_csr%ISOPEN THEN
9341 CLOSE l_lne_csr;
9342 END IF;
9343 IF l_hdr_csr%ISOPEN THEN
9344 CLOSE l_hdr_csr;
9345 END IF;
9346 IF l_txl_csr%ISOPEN THEN
9347 CLOSE l_txl_csr;
9348 END IF;
9349
9350 END check_func_constrs_4new;
9351
9352 -- Start of comments
9353 --
9354 -- Procedure Name : check_purchase_option
9355 -- Description : Generates warning for validation of automatically process fixed
9356 -- purchase option.
9357 -- Business Rules :
9358 -- Parameters :
9359 -- Version : 1.0
9360 -- End of comments
9361
9362 PROCEDURE check_purchase_option(
9363 x_return_status OUT NOCOPY VARCHAR2,
9364 p_chr_id IN NUMBER
9365 ) IS
9366
9367 --l_hdr l_hdr_csr%ROWTYPE;
9368 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
9369 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
9370 l_tax_owner okc_rules_b.RULE_INFORMATION1%TYPE;
9371 l_purchase_opt_type okc_rules_b.RULE_INFORMATION11%TYPE;
9372 l_contract_residual_value NUMBER;
9373 l_msg_count NUMBER;
9374 l_msg_data VARCHAR2(2000);
9375
9376 CURSOR l_asset_csr IS
9377 SELECT cle.id,
9378 name,
9379 kle.residual_value
9380 FROM okc_k_lines_v cle,
9381 okl_k_lines kle,
9382 okc_line_styles_b sty,
9383 okc_statuses_b sts
9384 WHERE cle.lse_id = sty.id
9385 AND cle.dnz_chr_id = p_chr_id
9386 AND cle.id = kle.id
9387 AND lty_code = 'FREE_FORM1'
9388 AND cle.sts_code = sts.code
9389 AND sts.ste_code NOT IN ( 'HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
9390
9391 BEGIN
9392
9393 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
9394
9395 /*
9396 OPEN l_hdr_csr(p_chr_id);
9397 FETCH l_hdr_csr into l_hdr;
9398 IF l_hdr_csr%NOTFOUND THEN
9399 CLOSE l_hdr_csr;
9400 RAISE G_EXCEPTION_HALT_VALIDATION;
9401 END IF;
9402 CLOSE l_hdr_csr;
9403 */
9404
9405 OPEN l_hdrrl_csr('LATOWN', 'LATOWN', TO_NUMBER(p_chr_id));
9406 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
9407 l_tax_owner := l_hdrrl_rec.RULE_INFORMATION1;
9408 CLOSE l_hdrrl_csr;
9409
9410 -- Bug 5000754: Moved the code later so that RV check is properly done
9411 -- on end of term purchase
9412 /*
9413 OPEN l_hdrrl_csr('AMTFOC', 'AMBPOC', TO_NUMBER(p_chr_id));
9414 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
9415 IF((l_hdrrl_csr%FOUND) AND (l_hdrrl_rec.RULE_INFORMATION11 IS NOT NULL)) THEN
9416 l_purchase_opt_type := l_hdrrl_rec.RULE_INFORMATION11;
9417 END IF;
9418 CLOSE l_hdrrl_csr;
9419
9420 IF ((l_purchase_opt_type = '$1BO') AND (l_tax_owner = 'LESSOR')) THEN
9421 Okl_Api.set_message(
9422 p_app_name => G_APP_NAME,
9423 p_msg_name => 'OKL_QA_NO_TOWN_1DBO');
9424 x_return_status := Okl_Api.G_RET_STS_ERROR;
9425 END IF;
9426 */
9427
9428 --Bug#4778020 Tax owner warning message for early termination.
9429 OPEN l_hdrrl_csr('AMTEOC', 'AMBPOC', TO_NUMBER(p_chr_id));
9430 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
9431 IF((l_hdrrl_csr%FOUND) AND (l_hdrrl_rec.RULE_INFORMATION11 IS NOT NULL)) THEN
9432 l_purchase_opt_type := l_hdrrl_rec.RULE_INFORMATION11;
9433 END IF;
9434 CLOSE l_hdrrl_csr;
9435 IF ((l_purchase_opt_type = '$1BO') AND (l_tax_owner = 'LESSOR')) THEN
9436 Okl_Api.set_message(
9437 p_app_name => G_APP_NAME,
9438 p_msg_name => 'OKL_QA_NO_TOWN_1DBO');
9439 x_return_status := Okl_Api.G_RET_STS_ERROR;
9440 END IF;
9441
9442 -- Bug 5000754 : End of term purchase
9443 OPEN l_hdrrl_csr('AMTFOC', 'AMBPOC', TO_NUMBER(p_chr_id));
9444 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
9445 IF((l_hdrrl_csr%FOUND) AND (l_hdrrl_rec.RULE_INFORMATION11 IS NOT NULL)) THEN
9446 l_purchase_opt_type := l_hdrrl_rec.RULE_INFORMATION11;
9447 END IF;
9448 CLOSE l_hdrrl_csr;
9449
9450 IF ((l_purchase_opt_type = '$1BO') AND (l_tax_owner = 'LESSOR')) THEN
9451 Okl_Api.set_message(
9452 p_app_name => G_APP_NAME,
9453 p_msg_name => 'OKL_QA_NO_TOWN_1DBO');
9454 x_return_status := Okl_Api.G_RET_STS_ERROR;
9455 END IF;
9456
9457 /*OKL_EXECUTE_FORMULA_PUB.EXECUTE(p_api_version =>1.0
9458 ,p_init_msg_list => 'F'
9459 ,x_return_status =>l_return_status
9460 ,x_msg_count =>l_msg_count
9461 ,x_msg_data =>l_msg_data
9462 ,p_formula_name =>'CONTRACT_RESIDUAL_VALUE'
9463 ,p_contract_id =>p_chr_id
9464 ,x_value =>l_contract_residual_value);
9465
9466 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
9467 x_return_status := l_return_status;
9468 END IF;
9469 */
9470
9471 FOR l_asset_rec IN l_asset_csr
9472 LOOP
9473 IF (l_purchase_opt_type = '$1BO' AND l_asset_rec.residual_value> 1.0) THEN
9474 Okl_Api.set_message(
9475 p_app_name => G_APP_NAME,
9476 p_msg_name => 'OKL_QA_CNTRCT_RES_VAL_GT1',
9477 p_token1 => 'ASSET_NUM',
9478 p_token1_value => l_asset_rec.name);
9479 x_return_status := Okl_Api.G_RET_STS_ERROR;
9480 END IF;
9481 END LOOP;
9482
9483 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
9484 Okl_Api.set_message(
9485 p_app_name => G_APP_NAME,
9486 p_msg_name => G_QA_SUCCESS);
9487 END IF;
9488
9489 EXCEPTION
9490 WHEN OTHERS THEN
9491 -- store SQL error message on message stack
9492 Okl_Api.SET_MESSAGE(
9493 p_app_name => G_APP_NAME,
9494 p_msg_name => G_UNEXPECTED_ERROR,
9495 p_token1 => G_SQLCODE_TOKEN,
9496 p_token1_value => SQLCODE,
9497 p_token2 => G_SQLERRM_TOKEN,
9498 p_token2_value => SQLERRM);
9499
9500 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
9501
9502 IF l_hdr_csr%ISOPEN THEN
9503 CLOSE l_hdr_csr;
9504 END IF;
9505
9506 IF l_hdrrl_csr%ISOPEN THEN
9507 CLOSE l_hdrrl_csr;
9508 END IF;
9509
9510 END check_purchase_option;
9511
9512 -- Start of comments
9513 --
9514 -- Procedure Name : check_rule_constraints
9515 -- Description :
9516 -- Business Rules :
9517 -- Parameters :
9518 -- Version : 1.0
9519 -- End of comments
9520
9521 PROCEDURE check_rule_constrs_4new(
9522 x_return_status OUT NOCOPY VARCHAR2,
9523 p_chr_id IN NUMBER
9524 ) IS
9525
9526 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
9527 l_dummy VARCHAR2(1) := '?';
9528 l_count NUMBER := 0;
9529 l_row_notfound BOOLEAN;
9530 l_token VARCHAR2(2000);
9531 l_quote_eff_days NUMBER;
9532 l_quote_eff_max_days NUMBER;
9533 l_eot_tolerance_days NUMBER;
9534
9535 /* Bug 3825314
9536 *
9537 * Cursor l_synd_csr ( chrId NUMBER ) IS
9538 * select kl.dnz_chr_id syndId
9539 * from OKC_K_ITEMS_V ITM,
9540 * OKC_K_LINES_V KL,
9541 * OKL_K_HEADERS_FULL_V KHR,
9542 * OKC_LINE_STYLES_B lse
9543 * where KL.LSE_ID=lse.id
9544 * and lse.lty_code='SHARED'
9545 * AND KL.CHR_ID =KL.DNZ_CHR_ID
9546 * AND KL.DNZ_CHR_ID = ITM.DNZ_CHR_ID
9547 * AND ITM.CLE_ID = KL.ID
9548 * AND to_char(KHR.ID) = ITM.OBJECT1_ID1
9549 * and khr.id = chrId;
9550 *
9551 * l_synd_rec l_synd_csr%ROWTYPE;
9552 *
9553 */
9554 CURSOR l_rl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
9555 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
9556 chrId OKC_RULE_GROUPS_B.DNZ_CHR_ID%TYPE ) IS
9557 SELECT crl.RULE_INFORMATION1, crl.RULE_INFORMATION2
9558 FROM OKC_RULE_GROUPS_B crg, OKC_RULES_B crl
9559 WHERE crl.rgp_id = crg.id
9560 AND crg.RGD_CODE = rgcode
9561 AND crl.RULE_INFORMATION_CATEGORY = rlcat
9562 AND crg.dnz_chr_id = chrId;
9563
9564 l_hdr l_hdr_csr%ROWTYPE;
9565
9566 l_rl l_rl_csr%ROWTYPE;
9567
9568 TYPE options_rec_type IS RECORD (
9569 purchase_option VARCHAR2(256),
9570 purchase_option_type VARCHAR2(256),
9571 formula_name VARCHAR2(256),
9572 purchase_option_amount NUMBER
9573 );
9574
9575 TYPE options_tbl_type IS TABLE OF options_rec_type INDEX BY BINARY_INTEGER;
9576
9577 l_options options_tbl_type;
9578
9579 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
9580
9581 cust_site_rec cust_site_csr%ROWTYPE;
9582 cust_rec cust_csr%ROWTYPE;
9583
9584 CURSOR l_inst_csr( chrId NUMBER ) IS
9585 SELECT inst.object_id1_new
9586 FROM OKL_TXL_ITM_INSTS inst,
9587 OKL_K_LINES_FULL_V kle,
9588 OKC_LINE_STYLES_B lse
9589 WHERE inst.kle_id = kle.id
9590 AND lse.id = kle.lse_id
9591 AND lse.lty_code = 'INST_ITEM'
9592 AND kle.dnz_chr_id = chrId;
9593
9594 l_inst_rec l_inst_csr%ROWTYPE;
9595
9596 CURSOR l_shipto_csr( chrId NUMBER ) IS
9597 SELECT inv.shipping_address_id1
9598 FROM OKL_SUPP_INVOICE_DTLS inv,
9599 OKL_K_LINES_FULL_V kle,
9600 OKC_LINE_STYLES_B lse
9601 WHERE inv.cle_id = kle.id
9602 AND lse.id = kle.lse_id
9603 AND lse.lty_code = 'ITEM'
9604 AND kle.dnz_chr_id = chrId;
9605
9606 l_shipto_rec l_shipto_csr%ROWTYPE;
9607
9608 CURSOR l_party_uses_csr ( instId NUMBER, ptyId NUMBER, rleCode VARCHAR2 ) IS
9609 SELECT 'Y' isThere
9610 FROM dual
9611 WHERE EXISTS(
9612 SELECT A.party_site_use_id
9613 FROM HZ_PARTY_SITE_USES A,
9614 HZ_PARTY_SITES B
9615 WHERE b.party_site_id = a.party_site_id
9616 AND a.party_site_use_id = instId
9617 AND a.site_use_type = rleCode
9618 AND b.party_id = ptyId);
9619
9620 l_party_uses_rec l_party_uses_csr%ROWTYPE;
9621
9622 l_bto_site_use_id NUMBER;
9623 l_cust_acct_id NUMBER;
9624 l_party_site_id NUMBER;
9625 l_inst_site_id NUMBER;
9626 l_shipto_id NUMBER;
9627
9628 l_rl1 l_rl_csr1%ROWTYPE;
9629
9630 i NUMBER;
9631
9632 fnd_rec fnd_csr%ROWTYPE;
9633
9634 l_auto_fixed_pur_opt_yn okc_rules_b.RULE_INFORMATION1%TYPE;
9635 l_evergreen_flag okc_rules_b.RULE_INFORMATION1%TYPE;
9636 l_purchase_opt_type okc_rules_b.RULE_INFORMATION11%TYPE;
9637
9638 l_late_charge_policy OKC_RULES_B.RULE_INFORMATION1%TYPE; -- Bug 4925675
9639 l_rl2 l_rl_csr%ROWTYPE;
9640 /*
9641 CURSOR bill_to_csr (p_cust_acct okx_cust_site_uses_v.cust_account_id%TYPE,
9642 p_bill_to okx_cust_site_uses_v.id1%TYPE
9643 ) IS
9644 SELECT 'Y'
9645 FROM okx_cust_site_uses_v
9646 WHERE id1 = p_bill_to
9647 AND cust_account_id = p_cust_acct
9648 AND site_use_code = 'BILL_TO'
9649 AND b_status = 'A'
9650 AND cust_acct_site_status = 'A';
9651 --AND NVL(ORG_ID, -99) = SYS_CONTEXT('OKC_CONTEXT','ORG_ID');
9652
9653 --l_cust_acct okc_rules_b.object1_id1%TYPE;
9654 l_cust_acct OKC_K_HEADERS_B.CUST_ACCT_ID%TYPE;
9655
9656 l_bill_to okc_rules_b.object1_id1%TYPE;
9657 l_bill_to_valid VARCHAR2(1) := 'N';
9658 */
9659
9660 -- Bug# 8219011
9661 CURSOR pymt_method_csr(p_cust_acct_id IN NUMBER,
9662 p_bill_to_id IN NUMBER,
9663 p_pymt_method_id IN NUMBER) IS
9664 SELECT 'Y'
9665 FROM OKX_RECEIPT_METHODS_V
9666 WHERE customer_id = p_cust_acct_id
9667 --For bug 8325912 AND site_use_id = p_bill_to_id
9668 AND id1 = p_pymt_method_id;
9669
9670 l_pymt_method_valid_yn VARCHAR2(1);
9671
9672 CURSOR bank_acct_csr(p_cust_acct_id IN NUMBER,
9673 p_bill_to_id IN NUMBER,
9674 p_bank_acct_id IN NUMBER) IS
9675 SELECT 'Y'
9676 FROM okx_rcpt_method_accounts_v okx_custbkac
9677 WHERE SYSDATE < NVL(end_date_active,SYSDATE+1)
9678 AND customer_id = p_cust_acct_id
9679 --For bug 8325912 AND customer_site_use_id = p_bill_to_id
9680 AND id1 = p_bank_acct_id;
9681
9682 l_bank_acct_valid_yn VARCHAR2(1);
9683 -- Bug# 8219011
9684
9685 BEGIN
9686
9687 -- initialize return status
9688 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
9689
9690 OPEN l_hdr_csr(p_chr_id);
9691 FETCH l_hdr_csr INTO l_hdr;
9692 IF l_hdr_csr%NOTFOUND THEN
9693 CLOSE l_hdr_csr;
9694 RAISE G_EXCEPTION_HALT_VALIDATION;
9695 END IF;
9696 CLOSE l_hdr_csr;
9697
9698 get_bill_to(
9699 x_return_status => x_return_status,
9700 p_chr_id => TO_NUMBER(p_chr_id),
9701 x_bill_to_id => l_bto_site_use_id
9702 );
9703
9704 --If( l_hdrrl_csr%NOTFOUND ) Then
9705 IF( l_bto_site_use_id IS NULL) THEN
9706 Okl_Api.set_message(
9707 p_app_name => G_APP_NAME,
9708 p_msg_name => 'OKL_QA_NOBTO');
9709 -- notify caller of an error
9710 x_return_status := Okl_Api.G_RET_STS_ERROR;
9711 ELSE
9712
9713 get_cust_account(
9714 x_return_status => x_return_status,
9715 p_chr_id => TO_NUMBER(p_chr_id),
9716 x_cust_acc_id => l_cust_acct_id
9717 );
9718
9719
9720 OPEN cust_site_csr(l_bto_site_use_id, l_cust_acct_id, 'BILL_TO');
9721 FETCH cust_site_csr INTO cust_site_rec;
9722 CLOSE cust_site_csr;
9723 IF ( NVL(cust_site_rec.isThere, 'N') = 'N' ) THEN
9724 Okl_Api.set_message(
9725 p_app_name => G_APP_NAME,
9726 p_msg_name => 'OKL_QA_BILLTO_ACCNT');
9727 -- notify caller of an error
9728 x_return_status := Okl_Api.G_RET_STS_ERROR;
9729 END IF;
9730
9731 OPEN cust_csr('LESSEE', TO_NUMBER(p_chr_id));
9732 FETCH cust_csr INTO cust_rec;
9733 CLOSE cust_csr;
9734 l_party_site_id := NVL( TO_NUMBER(cust_rec.object1_id1), -1);
9735
9736 FOR l_inst_rec IN l_inst_csr ( TO_NUMBER(p_chr_id) )
9737 LOOP
9738
9739 l_inst_site_id := NVL( TO_NUMBER(l_inst_rec.object_id1_new), -1);
9740
9741 OPEN l_party_uses_csr(l_inst_site_id, l_party_site_id, 'INSTALL_AT');
9742 FETCH l_party_uses_csr INTO l_party_uses_rec;
9743 CLOSE l_party_uses_csr;
9744 IF ( NVL(l_party_uses_rec.isThere, 'N') = 'N' ) THEN
9745 Okl_Api.set_message(
9746 p_app_name => G_APP_NAME,
9747 p_msg_name => 'OKL_QA_INST_ACCN');
9748 -- notify caller of an error
9749 x_return_status := Okl_Api.G_RET_STS_ERROR;
9750 END IF;
9751
9752 END LOOP;
9753
9754 FOR l_shipto_rec IN l_shipto_csr( TO_NUMBER(p_chr_id) )
9755 LOOP
9756
9757 l_shipto_id := NVL( TO_NUMBER(l_shipto_rec.shipping_address_id1), -1);
9758
9759 IF( l_shipto_id <> -1 ) THEN
9760
9761 OPEN cust_site_csr(l_bto_site_use_id, l_shipto_id, 'SHIP_TO');
9762 FETCH cust_site_csr INTO cust_site_rec;
9763 CLOSE cust_site_csr;
9764 IF ( NVL(cust_site_rec.isThere, 'N') = 'N' ) THEN
9765 Okl_Api.set_message(
9766 p_app_name => G_APP_NAME,
9767 p_msg_name => 'OKL_QA_BTO_SHIPTO');
9768 -- notify caller of an error
9769 x_return_status := Okl_Api.G_RET_STS_ERROR;
9770 END IF;
9771
9772 END IF;
9773
9774 END LOOP;
9775
9776 --Bug# 8219011
9777 l_hdrrl_rec := NULL;
9778 OPEN l_hdrrl_csr('LABILL', 'LAPMTH', TO_NUMBER(p_chr_id));
9779 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
9780 CLOSE l_hdrrl_csr;
9781
9782 IF (l_hdrrl_rec.object1_id1 IS NOT NULL) THEN
9783
9784 l_pymt_method_valid_yn := 'N';
9785 OPEN pymt_method_csr(p_cust_acct_id => l_cust_acct_id,
9786 p_bill_to_id => l_bto_site_use_id,
9787 p_pymt_method_id => l_hdrrl_rec.object1_id1);
9788 FETCH pymt_method_csr INTO l_pymt_method_valid_yn;
9789 CLOSE pymt_method_csr;
9790
9791 IF (l_pymt_method_valid_yn = 'N') THEN
9792 Okl_Api.set_message(
9793 p_app_name => G_APP_NAME,
9794 p_msg_name => 'OKL_QA_PYMT_METHOD_INVALID');
9795 x_return_status := Okl_Api.G_RET_STS_ERROR;
9796 END IF;
9797 END IF;
9798
9799 l_hdrrl_rec := NULL;
9800 OPEN l_hdrrl_csr('LABILL', 'LABACC', TO_NUMBER(p_chr_id));
9801 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
9802 CLOSE l_hdrrl_csr;
9803
9804 IF (l_hdrrl_rec.object1_id1 IS NOT NULL) THEN
9805
9806 l_bank_acct_valid_yn := 'N';
9807 OPEN bank_acct_csr(p_cust_acct_id => l_cust_acct_id,
9808 p_bill_to_id => l_bto_site_use_id,
9809 p_bank_acct_id => l_hdrrl_rec.object1_id1);
9810 FETCH bank_acct_csr INTO l_bank_acct_valid_yn;
9811 CLOSE bank_acct_csr;
9812
9813 IF (l_bank_acct_valid_yn = 'N') THEN
9814 Okl_Api.set_message(
9815 p_app_name => G_APP_NAME,
9816 p_msg_name => 'OKL_QA_BANK_ACCT_INVALID');
9817 x_return_status := Okl_Api.G_RET_STS_ERROR;
9818 END IF;
9819 END IF;
9820 --Bug# 8219011
9821
9822 END IF;
9823 IF (l_hdrrl_csr%ISOPEN) THEN
9824 CLOSE l_hdrrl_csr;
9825 END IF;
9826
9827 --Bug#3947959
9828 check_est_prop_tax(
9829 p_chr_id => p_chr_id,
9830 x_return_status => l_return_status
9831 );
9832
9833 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
9834 x_return_status := l_return_status;
9835 END IF;
9836
9837 -- Bug 4915341 (redundant check commented out)
9838 /*
9839 -- Bug#4872437 ramurt
9840 check_evergreen_pth(l_return_status, p_chr_id);
9841
9842 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
9843 x_return_status := l_return_status;
9844 END IF;
9845 -- Bug#4872437 changes end
9846 */
9847
9848 /* commented out for bug 5032883
9849 OPEN l_hdrrl_csr('LALCGR', 'LAHUDT', TO_NUMBER(p_chr_id));
9850 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
9851
9852 IF(( l_hdrrl_csr%FOUND ) AND
9853 (l_hdrrl_rec.RULE_INFORMATION1 IS NOT NULL) AND
9854 ( TRUNC(Fnd_Date.canonical_to_date(l_hdrrl_rec.RULE_INFORMATION1)) < TRUNC(l_hdr.START_DATE) )) THEN
9855 Okl_Api.set_message(
9856 p_app_name => G_APP_NAME,
9857 p_msg_name => 'OKL_QA_LATE_CH_DATE');
9858 -- notify caller of an error
9859 x_return_status := Okl_Api.G_RET_STS_ERROR;
9860 END IF;
9861 CLOSE l_hdrrl_csr;
9862 */
9863 /* commented out for bug 5032883
9864 OPEN l_hdrrl_csr('LALIGR', 'LAHUDT', TO_NUMBER(p_chr_id));
9865 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
9866
9867 IF(( l_hdrrl_csr%FOUND ) AND
9868 (l_hdrrl_rec.RULE_INFORMATION1 IS NOT NULL) AND
9869 (TRUNC( Fnd_Date.canonical_to_date(l_hdrrl_rec.RULE_INFORMATION1)) < TRUNC(l_hdr.START_DATE) )) THEN
9870 Okl_Api.set_message(
9871 p_app_name => G_APP_NAME,
9872 p_msg_name => 'OKL_QA_LATE_INT_DATE');
9873 -- notify caller of an error
9874 x_return_status := Okl_Api.G_RET_STS_ERROR;
9875 END IF;
9876 CLOSE l_hdrrl_csr;
9877 */
9878 OPEN l_hdrrl_csr('LAREBL', 'LAREBL', TO_NUMBER(p_chr_id));
9879 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
9880
9881 IF((l_hdrrl_csr%FOUND)AND
9882 (l_hdrrl_rec.RULE_INFORMATION1 IS NOT NULL) AND
9883 (TRUNC( Fnd_Date.canonical_to_date(l_hdrrl_rec.RULE_INFORMATION1)) < TRUNC(l_hdr.START_DATE))) THEN
9884 Okl_Api.set_message(
9885 p_app_name => G_APP_NAME,
9886 p_msg_name => 'OKL_QA_REBOOK_LMT_DATE');
9887 -- notify caller of an error
9888 x_return_status := Okl_Api.G_RET_STS_ERROR;
9889 END IF;
9890 CLOSE l_hdrrl_csr;
9891
9892 OPEN l_hdrrl_csr('AMTEOC', 'AMBPOC', TO_NUMBER(p_chr_id));
9893 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
9894
9895 IF( l_hdrrl_csr%NOTFOUND ) THEN
9896 l_options(1).purchase_option_type := NULL;
9897 ELSE
9898 l_options(1).purchase_option_type := l_hdrrl_rec.RULE_INFORMATION11;
9899 l_options(1).purchase_option := l_hdrrl_rec.RULE_INFORMATION1;
9900 IF (NVL(l_hdrrl_rec.RULE_INFORMATION2,-1) <> -1) THEN
9901 l_options(1).purchase_option_amount := TO_NUMBER(l_hdrrl_rec.RULE_INFORMATION2);
9902 END IF;
9903 l_options(1).formula_name := l_hdrrl_rec.RULE_INFORMATION3;
9904 END IF;
9905 CLOSE l_hdrrl_csr;
9906
9907 OPEN l_hdrrl_csr('AMTFOC', 'AMBPOC', TO_NUMBER(p_chr_id));
9908 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
9909
9910 IF( l_hdrrl_csr%NOTFOUND ) THEN
9911 l_options(2).purchase_option_type := NULL;
9912 ELSE
9913 l_options(2).purchase_option_type := l_hdrrl_rec.RULE_INFORMATION11;
9914 l_options(2).purchase_option := l_hdrrl_rec.RULE_INFORMATION1;
9915 IF (NVL(l_hdrrl_rec.RULE_INFORMATION2,-1) <> -1) THEN
9916 l_options(2).purchase_option_amount := TO_NUMBER(l_hdrrl_rec.RULE_INFORMATION2);
9917 END IF;
9918 l_options(2).formula_name := l_hdrrl_rec.RULE_INFORMATION3;
9919 END IF;
9920 CLOSE l_hdrrl_csr;
9921
9922 IF(( (INSTR( l_hdr.DEAL_TYPE, 'LOAN' )<1) OR (l_hdr.report_pdt_id <> -1)) AND
9923 (l_options(1).purchase_option_type IS NULL ) AND
9924 (l_options(2).purchase_option_type IS NULL)) THEN
9925 Okl_Api.set_message(
9926 p_app_name => G_APP_NAME,
9927 p_msg_name => 'OKL_QA_NO_PURCHASE_OPTNS');
9928 -- notify caller of an error
9929 x_return_status := Okl_Api.G_RET_STS_ERROR;
9930 END IF;
9931
9932
9933 IF( INSTR( l_hdr.DEAL_TYPE, 'LOAN' )<1) THEN
9934
9935 FOR i IN 1..l_options.COUNT
9936 LOOP
9937
9938 IF((l_options(i).formula_name IS NULL)AND(l_options(i).purchase_option = 'USE_FORMULA')) THEN
9939 Okl_Api.set_message(
9940 p_app_name => G_APP_NAME,
9941 p_msg_name => 'OKL_QA_NO_FORMULA');
9942 -- notify caller of an error
9943 x_return_status := Okl_Api.G_RET_STS_ERROR;
9944 END IF;
9945
9946 IF((INSTR( l_hdr.DEAL_TYPE, 'LOAN' )>0)AND(l_options(i).purchase_option_type <> 'NONE')) THEN
9947 --FND Lookup change from NONE.
9948 Okl_Api.set_message(
9949 p_app_name => G_APP_NAME,
9950 p_msg_name => 'OKL_QA_LNCTRT_NOFMV');
9951 -- notify caller of an error
9952 x_return_status := Okl_Api.G_RET_STS_ERROR;
9953 END IF;
9954
9955
9956 IF((l_options(i).purchase_option_type = 'FMV')AND(l_options(i).purchase_option_amount IS NOT NULL)) THEN
9957 Okl_Api.set_message(
9958 p_app_name => G_APP_NAME,
9959 p_msg_name => 'OKL_QA_FMV_NO_FLD');
9960 -- notify caller of an error
9961 x_return_status := Okl_Api.G_RET_STS_ERROR;
9962 END IF;
9963
9964 IF((l_options(i).purchase_option_type = 'FRV')AND(l_options(i).purchase_option_amount IS NOT NULL)) THEN
9965 Okl_Api.set_message(
9966 p_app_name => G_APP_NAME,
9967 p_msg_name => 'OKL_QA_FRV_NO_FLD');
9968 -- notify caller of an error
9969 x_return_status := Okl_Api.G_RET_STS_ERROR;
9970 END IF;
9971
9972
9973
9974 IF ((INSTR( l_hdr.DEAL_TYPE,'OP') > 0 ) AND (l_options(i).purchase_option_type = '$1BO')) THEN
9975 Okl_Api.set_message(
9976 p_app_name => G_APP_NAME,
9977 p_msg_name => 'OKL_QA_NO_OP_1DBO');
9978 -- notify caller of an error
9979 x_return_status := Okl_Api.G_RET_STS_ERROR;
9980 END IF;
9981
9982 END LOOP;
9983
9984
9985
9986 -- End of term.
9987 IF((l_options(2).purchase_option_type IS NOT NULL)AND(l_options(2).purchase_option_type <> 'FMV')AND
9988 (l_hdrrl_rec.RULE_INFORMATION1 IS NULL )AND(l_options(2).purchase_option_amount IS NULL)) THEN
9989 Okl_Api.set_message(
9990 p_app_name => G_APP_NAME,
9991 p_msg_name => 'OKL_QA_EOTOPTIONS_NOTSET');
9992 -- notify caller of an error
9993 x_return_status := Okl_Api.G_RET_STS_ERROR;
9994 END IF;
9995
9996 END IF;
9997
9998 OPEN l_hdrrl_csr('LATOWN', 'LATOWN', TO_NUMBER(p_chr_id));
9999 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
10000 CLOSE l_hdrrl_csr;
10001
10002
10003 IF ((INSTR( l_hdr.DEAL_TYPE,'OP') > 0 ) AND (l_hdrrl_rec.RULE_INFORMATION1 <> 'LESSOR')) THEN
10004 Okl_Api.set_message(
10005 p_app_name => G_APP_NAME,
10006 p_msg_name => 'OKL_QA_OP_LESSOR');
10007 -- notify caller of an error
10008 x_return_status := Okl_Api.G_RET_STS_ERROR;
10009 END IF;
10010
10011 /*If ((INSTR( l_hdr.DEAL_TYPE,'ST') > 0 ) AND (l_hdrrl_rec.RULE_INFORMATION1 <> 'LESSEE')) then
10012 OKL_API.set_message(
10013 p_app_name => G_APP_NAME,
10014 p_msg_name => 'OKL_QA_ST_LESSEE');
10015 -- notify caller of an error
10016 x_return_status := OKL_API.G_RET_STS_ERROR;
10017 End If;*/
10018
10019 IF ((l_hdr.DEAL_TYPE = 'LOAN') AND (l_hdrrl_rec.RULE_INFORMATION1 <> 'LESSEE')) THEN
10020 Okl_Api.set_message(
10021 p_app_name => G_APP_NAME,
10022 p_msg_name => 'OKL_QA_LOAN_LESSEE');
10023 -- notify caller of an error
10024 x_return_status := Okl_Api.G_RET_STS_ERROR;
10025 END IF;
10026
10027 /* Bug#4778020 tax owner message for early termination also moved to procedure check_purchase_option.
10028 If( INSTR( l_hdr.DEAL_TYPE, 'LOAN' )<1) Then
10029 --Lessor and $1buyout check: error thrown only for early termination(AMTEOC).
10030 --message for end of terms check(AMTFOC) moved to check_purchase_option which is
10031 --user configurable to warning.
10032 --FOR i in 1..l_options.COUNT
10033 --LOOP
10034 -- If ((l_options(i).purchase_option_type = '$1BO') AND (l_hdrrl_rec.RULE_INFORMATION1 = 'LESSOR')) then
10035 If ((l_options(1).purchase_option_type = '$1BO') AND (l_hdrrl_rec.RULE_INFORMATION1 = 'LESSOR')) then
10036 OKL_API.set_message(
10037 p_app_name => G_APP_NAME,
10038 p_msg_name => 'OKL_QA_NO_TOWN_1DBO');
10039 -- notify caller of an error
10040 x_return_status := OKL_API.G_RET_STS_ERROR;
10041 End If;
10042
10043 --END LOOP;
10044 End If;
10045 */
10046
10047 --$1Buyout changes Begin
10048 OPEN l_hdrrl_csr('AMTFOC', 'AMTINV', TO_NUMBER(p_chr_id));
10049 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
10050 IF((l_hdrrl_csr%FOUND) AND (l_hdrrl_rec.RULE_INFORMATION1 IS NOT NULL)) THEN
10051 l_auto_fixed_pur_opt_yn := l_hdrrl_rec.RULE_INFORMATION1;
10052 END IF;
10053 CLOSE l_hdrrl_csr;
10054
10055 OPEN l_hdrrl_csr('AMTFOC', 'AMBPOC', TO_NUMBER(p_chr_id));
10056 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
10057 IF((l_hdrrl_csr%FOUND) AND (l_hdrrl_rec.RULE_INFORMATION11 IS NOT NULL)) THEN
10058 l_purchase_opt_type := l_hdrrl_rec.RULE_INFORMATION11;
10059 END IF;
10060 CLOSE l_hdrrl_csr;
10061 IF (NVL(l_auto_fixed_pur_opt_yn,'N') = 'Y'
10062 AND NVL(l_purchase_opt_type,'XXX') NOT IN ('FPO','$1BO')) THEN
10063 --error message
10064 Okl_Api.set_message(
10065 p_app_name => G_APP_NAME,
10066 p_msg_name => 'OKL_QA_AUTO_PUR_OPT_TYPE');
10067 x_return_status := Okl_Api.G_RET_STS_ERROR;
10068 END IF;
10069
10070 OPEN l_hdrrl_csr('LAEVEL', 'LAEVEL', TO_NUMBER(p_chr_id));
10071 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
10072 IF((l_hdrrl_csr%FOUND) AND (l_hdrrl_rec.RULE_INFORMATION1 IS NOT NULL)) THEN
10073 l_evergreen_flag := l_hdrrl_rec.RULE_INFORMATION1;
10074 END IF;
10075 CLOSE l_hdrrl_csr;
10076
10077 IF (NVL(l_evergreen_flag,'N') = 'Y' AND NVL(l_auto_fixed_pur_opt_yn,'N') = 'Y') THEN
10078 --error message
10079 Okl_Api.set_message(
10080 p_app_name => G_APP_NAME,
10081 p_msg_name => 'OKL_QA_EVG_AUTO_FIXED_PUR_OPT');
10082 x_return_status := Okl_Api.G_RET_STS_ERROR;
10083 END IF;
10084 --$1Buyout changes End
10085
10086 OPEN l_hdrrl_csr('LARVIN', 'LARVAU', TO_NUMBER(p_chr_id));
10087 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
10088 IF( l_hdrrl_csr%FOUND AND (NVL(l_hdrrl_rec.RULE_INFORMATION1,'N') = 'Y')) THEN
10089
10090 CLOSE l_hdrrl_csr;
10091 OPEN l_hdrrl_csr('LARVIN', 'LARVAM', TO_NUMBER(p_chr_id));
10092 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
10093
10094 IF ( l_hdrrl_csr%NOTFOUND OR l_hdrrl_rec.RULE_INFORMATION4 IS NULL) THEN
10095 Okl_Api.set_message(
10096 p_app_name => G_APP_NAME,
10097 p_msg_name => 'OKL_QA_RVI_RATE');
10098 x_return_status := Okl_Api.G_RET_STS_ERROR;
10099 ELSIF(TO_NUMBER(l_hdrrl_rec.RULE_INFORMATION4) > 100) THEN
10100 Okl_Api.set_message(
10101 p_app_name => G_APP_NAME,
10102 p_msg_name => 'OKL_QA_RVI_GT_100');
10103 -- notify caller of an error
10104 x_return_status := Okl_Api.G_RET_STS_ERROR;
10105 END IF;
10106
10107 END IF;
10108 CLOSE l_hdrrl_csr;
10109
10110 OPEN l_rl_csr('LARNOP', 'LAEOTR', p_chr_id);
10111 FETCH l_rl_csr INTO l_rl;
10112 IF ((l_rl_csr%FOUND)AND(INSTR(l_hdr.DEAL_TYPE,'DF') > 0) AND (l_rl.RULE_INFORMATION1 = 'FMV')) THEN
10113 Okl_Api.set_message(
10114 p_app_name => G_APP_NAME,
10115 p_msg_name => 'OKL_QA_CTRTDF_NOFMV');
10116 -- notify caller of an error
10117 x_return_status := Okl_Api.G_RET_STS_ERROR;
10118 END IF;
10119 CLOSE l_rl_csr;
10120
10121 OPEN l_rl_csr('LARNOP', 'LAMITR', p_chr_id);
10122 FETCH l_rl_csr INTO l_rl;
10123 IF ((l_rl_csr%FOUND)AND(INSTR( l_hdr.DEAL_TYPE,'DF') > 0) AND (l_rl.RULE_INFORMATION1 = 'FMV')) THEN
10124 Okl_Api.set_message(
10125 p_app_name => G_APP_NAME,
10126 p_msg_name => 'OKL_QA_CTRTDF_NOFMV');
10127 -- notify caller of an error
10128 x_return_status := Okl_Api.G_RET_STS_ERROR;
10129 END IF;
10130 CLOSE l_rl_csr;
10131
10132 OPEN l_rl_csr('LAASTX', 'LAASTX', p_chr_id);
10133 FETCH l_rl_csr INTO l_rl;
10134 IF ((l_rl_csr%FOUND)AND(l_rl.RULE_INFORMATION1 = 'Y') AND (l_rl.RULE_INFORMATION2 IS NULL)) THEN
10135 Okl_Api.set_message(
10136 p_app_name => G_APP_NAME,
10137 p_msg_name => 'OKL_QA_EXEMPT');
10138 -- notify caller of an error
10139 x_return_status := Okl_Api.G_RET_STS_ERROR;
10140 END IF;
10141 CLOSE l_rl_csr;
10142
10143 OPEN l_rl_csr('LAASTX', 'LAAVTX', p_chr_id);
10144 FETCH l_rl_csr INTO l_rl;
10145 IF ((l_rl_csr%FOUND)AND(l_rl.RULE_INFORMATION1 = 'Y') AND (l_rl.RULE_INFORMATION2 IS NULL)) THEN
10146 Okl_Api.set_message(
10147 p_app_name => G_APP_NAME,
10148 p_msg_name => 'OKL_QA_EXEMPT');
10149 -- notify caller of an error
10150 x_return_status := Okl_Api.G_RET_STS_ERROR;
10151 END IF;
10152 CLOSE l_rl_csr;
10153
10154 OPEN l_rl_csr('LAGRNP', 'LAGRNP', p_chr_id);
10155 FETCH l_rl_csr INTO l_rl;
10156 IF ((l_rl_csr%FOUND)AND(l_rl.RULE_INFORMATION1 = 'Y') AND (l_rl.RULE_INFORMATION2 IS NULL)) THEN
10157 Okl_Api.set_message(
10158 p_app_name => G_APP_NAME,
10159 p_msg_name => 'OKL_QA_GUARANTEE');
10160 x_return_status := Okl_Api.G_RET_STS_ERROR;
10161 END IF;
10162 CLOSE l_rl_csr;
10163
10164 OPEN l_rl_csr('LARNOP', 'LAREND', p_chr_id);
10165 FETCH l_rl_csr INTO l_rl;
10166 IF ((l_rl_csr%FOUND)AND(l_rl.RULE_INFORMATION1 = 'Y') AND (l_rl.RULE_INFORMATION2 IS NULL)) THEN
10167 Okl_Api.set_message(
10168 p_app_name => G_APP_NAME,
10169 p_msg_name => 'OKL_QA_RENEWAL_NOTICE');
10170 x_return_status := Okl_Api.G_RET_STS_ERROR;
10171 END IF;
10172 CLOSE l_rl_csr;
10173
10174 /* Bug 3825314
10175 *
10176 * OPEN l_synd_csr(p_chr_id);
10177 * FETCH l_synd_csr INTO l_synd_rec;
10178 * IF(nvl(l_hdr.syndicatable_yn,'N') = 'Y' AND l_synd_csr%FOUND) THEN
10179 *
10180 * OPEN l_rl_csr('LASYND', 'LASYST', l_synd_rec.syndId);
10181 * FETCH l_rl_csr INTO l_rl;
10182 * IF(l_rl_csr%FOUND)AND(to_number(nvl(l_rl.RULE_INFORMATION2,-1)) > 100) THEN
10183 * OKL_API.set_message(
10184 * p_app_name => G_APP_NAME,
10185 * p_msg_name => 'OKL_QA_SYND_STAKE');
10186 * x_return_status := OKL_API.G_RET_STS_ERROR;
10187 * END IF;
10188 * CLOSE l_rl_csr;
10189 *
10190 * END IF;
10191 * CLOSE l_synd_csr;
10192 *
10193 */
10194
10195 OPEN l_rl_csr('LAEVEL', 'LAEOTR', p_chr_id);
10196 FETCH l_rl_csr INTO l_rl;
10197 IF ((l_rl_csr%FOUND)AND(l_rl.RULE_INFORMATION1 = 'FMV') AND (l_rl.RULE_INFORMATION2 IS NOT NULL)) THEN
10198 Okl_Api.set_message(
10199 p_app_name => G_APP_NAME,
10200 p_msg_name => 'OKL_QA_EVERGREEN');
10201 x_return_status := Okl_Api.G_RET_STS_ERROR;
10202 END IF;
10203 CLOSE l_rl_csr;
10204
10205 --Check for Termination Quote Rules
10206 l_row_notfound := FALSE;
10207 OPEN l_rl_csr('AMTQPR', 'AMQTEF', p_chr_id);
10208 FETCH l_rl_csr INTO l_rl;
10209 IF (l_rl_csr%NOTFOUND) THEN
10210 l_row_notfound := l_rl_csr%NOTFOUND;
10211 END IF;
10212 CLOSE l_rl_csr;
10213 l_quote_eff_days := l_rl.RULE_INFORMATION1;
10214 l_quote_eff_max_days := l_rl.RULE_INFORMATION2;
10215
10216 OPEN l_rl_csr('AMTQPR', 'AMTSET', p_chr_id);
10217 FETCH l_rl_csr INTO l_rl;
10218 IF (l_rl_csr%NOTFOUND) THEN
10219 l_row_notfound := l_rl_csr%NOTFOUND;
10220 END IF;
10221 CLOSE l_rl_csr;
10222 l_eot_tolerance_days := l_rl.RULE_INFORMATION1;
10223
10224 IF (l_row_notfound OR l_quote_eff_days IS NULL OR l_quote_eff_max_days IS NULL
10225 OR l_eot_tolerance_days IS NULL ) THEN
10226 Okl_Api.set_message(
10227 p_app_name => G_APP_NAME,
10228 p_msg_name => 'OKL_QA_TERMINATION_QUOTE');
10229 x_return_status := Okl_Api.G_RET_STS_ERROR;
10230 END IF;
10231
10232
10233 i := 0;
10234 FOR l_lne IN l_lne_csr('USAGE', p_chr_id)
10235 LOOP
10236
10237 i := i + 1;
10238
10239 FOR l_rl1 IN l_rl_csr1('LAUSBB', 'LAUSBB', p_chr_id, l_lne.id)
10240 LOOP
10241
10242 IF (( NVL(l_rl1.RULE_INFORMATION6, 'XXX') = 'VRT' ) OR ( NVL(l_rl1.RULE_INFORMATION6, 'XXX') = 'QTY' )) AND
10243 (( l_rl1.RULE_INFORMATION2 IS NULL ) OR ( l_rl1.RULE_INFORMATION5 IS NULL )) THEN
10244
10245 OPEN fnd_csr('OKS_USAGE_TYPE', l_rl1.RULE_INFORMATION6);
10246 FETCH fnd_csr INTO fnd_rec;
10247 CLOSE fnd_csr;
10248
10249 Okl_Api.set_message(
10250 p_app_name => G_APP_NAME,
10251 p_msg_name => 'OKL_QA_USAGE_CHECK',
10252 p_token1 => 'LINE_NUM',
10253 p_token1_value => TO_CHAR(i),
10254 p_token2 => 'USAGE_TYPE',
10255 p_token2_value => fnd_rec.meaning);
10256
10257 x_return_status := Okl_Api.G_RET_STS_ERROR;
10258
10259 ELSIF (( NVL(l_rl1.RULE_INFORMATION6, 'XXX') = 'FRT' ) AND ( l_rl1.RULE_INFORMATION7 IS NULL )) THEN
10260
10261 OPEN fnd_csr('OKS_USAGE_TYPE', l_rl1.RULE_INFORMATION6);
10262 FETCH fnd_csr INTO fnd_rec;
10263 CLOSE fnd_csr;
10264
10265 Okl_Api.set_message(
10266 p_app_name => G_APP_NAME,
10267 p_msg_name => 'OKL_QA_FIXED_USAGE',
10268 p_token1 => 'LINE_NUM',
10269 p_token1_value => TO_CHAR(i),
10270 p_token2 => 'USAGE_TYPE',
10271 p_token2_value => fnd_rec.meaning);
10272
10273 x_return_status := Okl_Api.G_RET_STS_ERROR;
10274
10275 END IF;
10276
10277 END LOOP;
10278
10279 END LOOP;
10280
10281 -- Bug 4865510
10282 OPEN l_rl_csr('LARVIN', 'LARVAU', p_chr_id);
10283 FETCH l_rl_csr INTO l_rl;
10284 IF (l_rl_csr%FOUND) THEN
10285 IF (nvl(l_rl.RULE_INFORMATION1,'N') = 'Y') THEN
10286 IF (INSTR( l_hdr.DEAL_TYPE,'DF') > 0) THEN
10287 NULL;
10288 ELSE
10289 Okl_Api.set_message(
10290 p_app_name => G_APP_NAME,
10291 p_msg_name => 'OKL_QA_RVI_NA',
10292 p_token1 => 'BOOK_CLASS',
10293 p_token1_value => l_hdr.deal_type);
10294 x_return_status := Okl_Api.G_RET_STS_ERROR;
10295 END IF;
10296 END IF; -- If 'Y'
10297 END IF; -- IF found
10298 CLOSE l_rl_csr;
10299
10300 -- Bug 4925675
10301 OPEN l_rl_csr('LALCGR', 'LALCPR', p_chr_id);
10302 FETCH l_rl_csr INTO l_rl;
10303
10304 IF (l_rl_csr%FOUND) THEN
10305 l_late_charge_policy := l_rl.rule_information1;
10306 CLOSE l_rl_csr;
10307
10308 OPEN l_rl_csr('LALCGR', 'LALCEX', p_chr_id);
10309 FETCH l_rl_csr INTO l_rl2;
10310 IF (l_rl_csr%FOUND) THEN
10311 CLOSE l_rl_csr;
10312 IF (l_late_charge_policy IS NOT NULL AND
10313 l_rl2.rule_information1 = 'Y') THEN
10314 Okl_Api.set_message(
10315 p_app_name => G_APP_NAME,
10316 p_msg_name => 'OKL_QA_LATE_CHARGE_ERROR');
10317 x_return_status := Okl_Api.G_RET_STS_ERROR;
10318 END IF;
10319 ELSE
10320 CLOSE l_rl_csr;
10321 END IF;
10322 ELSE
10323 CLOSE l_rl_csr;
10324 END IF;
10325
10326
10327 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
10328 Okl_Api.set_message(
10329 p_app_name => G_APP_NAME,
10330 p_msg_name => G_QA_SUCCESS);
10331 END IF;
10332
10333 EXCEPTION
10334 WHEN G_EXCEPTION_HALT_VALIDATION THEN
10335 -- no processing necessary; validation can continue with next column
10336 IF l_rl_csr%ISOPEN THEN
10337 CLOSE l_rl_csr;
10338 END IF;
10339 IF l_hdr_csr%ISOPEN THEN
10340 CLOSE l_hdr_csr;
10341 END IF;
10342 IF fnd_csr%ISOPEN THEN
10343 CLOSE fnd_csr;
10344 END IF;
10345 WHEN OTHERS THEN
10346 -- store SQL error message on message stack
10347 Okl_Api.SET_MESSAGE(
10348 p_app_name => G_APP_NAME,
10349 p_msg_name => G_UNEXPECTED_ERROR,
10350 p_token1 => G_SQLCODE_TOKEN,
10351 p_token1_value => SQLCODE,
10352 p_token2 => G_SQLERRM_TOKEN,
10353 p_token2_value => SQLERRM);
10354 -- notify caller of an error as UNEXPETED error
10355 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
10356 -- verify that cursor was closed
10357 IF l_rl_csr%ISOPEN THEN
10358 CLOSE l_rl_csr;
10359 END IF;
10360 IF l_hdr_csr%ISOPEN THEN
10361 CLOSE l_hdr_csr;
10362 END IF;
10363 IF fnd_csr%ISOPEN THEN
10364 CLOSE fnd_csr;
10365 END IF;
10366 END check_rule_constrs_4new;
10367
10368 PROCEDURE check_rule_4new_lnrev(
10369 x_return_status OUT NOCOPY VARCHAR2,
10370 p_chr_id IN NUMBER
10371 ) IS
10372
10373 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
10374 l_dummy VARCHAR2(1) := '?';
10375 l_count NUMBER := 0;
10376 l_row_notfound BOOLEAN;
10377 l_token VARCHAR2(2000);
10378
10379 CURSOR l_rl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
10380 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
10381 chrid OKC_RULE_GROUPS_B.DNZ_CHR_ID%TYPE ) IS
10382 SELECT crl.RULE_INFORMATION1, crl.RULE_INFORMATION2
10383 FROM OKC_RULE_GROUPS_B crg, OKC_RULES_B crl
10384 WHERE crl.rgp_id = crg.id
10385 AND crg.RGD_CODE = rgcode
10386 AND crl.RULE_INFORMATION_CATEGORY = rlcat
10387 AND crg.dnz_chr_id = chrid;
10388
10389 l_hdr l_hdr_csr%ROWTYPE;
10390
10391 l_rl l_rl_csr%ROWTYPE;
10392
10393 TYPE options_rec_type IS RECORD (
10394 purchase_option VARCHAR2(256),
10395 purchase_option_type VARCHAR2(256),
10396 formula_name VARCHAR2(256),
10397 purchase_option_amount NUMBER
10398 );
10399
10400 TYPE options_tbl_type IS TABLE OF options_rec_type INDEX BY BINARY_INTEGER;
10401
10402 l_options options_tbl_type;
10403
10404 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
10405 i NUMBER;
10406 l_okl_bill_to_id OKC_K_HEADERS_B.BILL_TO_SITE_USE_ID%TYPE;
10407
10408 -- Bug# 8219011
10409 l_cust_acct_id NUMBER;
10410 CURSOR pymt_method_csr(p_cust_acct_id IN NUMBER,
10411 p_bill_to_id IN NUMBER,
10412 p_pymt_method_id IN NUMBER) IS
10413 SELECT 'Y'
10414 FROM OKX_RECEIPT_METHODS_V
10415 WHERE customer_id = p_cust_acct_id
10416 --For bug 8325912 AND site_use_id = p_bill_to_id
10417 AND id1 = p_pymt_method_id;
10418
10419 l_pymt_method_valid_yn VARCHAR2(1);
10420
10421 CURSOR bank_acct_csr(p_cust_acct_id IN NUMBER,
10422 p_bill_to_id IN NUMBER,
10423 p_bank_acct_id IN NUMBER) IS
10424 SELECT 'Y'
10425 FROM okx_rcpt_method_accounts_v okx_custbkac
10426 WHERE SYSDATE < NVL(end_date_active,SYSDATE+1)
10427 AND customer_id = p_cust_acct_id
10428 --For bug 8325912 AND customer_site_use_id = p_bill_to_id
10429 AND id1 = p_bank_acct_id;
10430
10431 l_bank_acct_valid_yn VARCHAR2(1);
10432 -- Bug# 8219011
10433
10434 BEGIN
10435
10436 -- initialize return status
10437 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
10438
10439 OPEN l_hdr_csr(p_chr_id);
10440 FETCH l_hdr_csr INTO l_hdr;
10441 IF l_hdr_csr%NOTFOUND THEN
10442 CLOSE l_hdr_csr;
10443 RAISE G_EXCEPTION_HALT_VALIDATION;
10444 END IF;
10445 CLOSE l_hdr_csr;
10446
10447 /* Rule migration
10448 OPEN l_hdrrl_csr('LABILL', 'BTO', TO_NUMBER(p_chr_id));
10449 FETCH l_hdrrl_csr into l_hdrrl_rec;
10450 */
10451 get_bill_to(
10452 x_return_status => x_return_status,
10453 p_chr_id => p_chr_id,
10454 x_bill_to_id => l_okl_bill_to_id
10455 );
10456
10457 --If( l_hdrrl_csr%NOTFOUND ) Then
10458 IF( l_okl_bill_to_id IS NULL ) THEN
10459 Okl_Api.set_message(
10460 p_app_name => G_APP_NAME,
10461 p_msg_name => 'OKL_QA_NOBTO');
10462 -- notify caller of an error
10463 x_return_status := Okl_Api.G_RET_STS_ERROR;
10464 END IF;
10465 --CLOSE l_hdrrl_csr;
10466
10467 --Bug# 8219011
10468 IF (l_okl_bill_to_id IS NOT NULL) THEN
10469
10470
10471 get_cust_account(
10472 x_return_status => x_return_status,
10473 p_chr_id => TO_NUMBER(p_chr_id),
10474 x_cust_acc_id => l_cust_acct_id
10475 );
10476
10477 l_hdrrl_rec := NULL;
10478 OPEN l_hdrrl_csr('LABILL', 'LAPMTH', TO_NUMBER(p_chr_id));
10479 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
10480 CLOSE l_hdrrl_csr;
10481
10482 IF (l_hdrrl_rec.object1_id1 IS NOT NULL) THEN
10483
10484 l_pymt_method_valid_yn := 'N';
10485 OPEN pymt_method_csr(p_cust_acct_id => l_cust_acct_id,
10486 p_bill_to_id => l_okl_bill_to_id,
10487 p_pymt_method_id => l_hdrrl_rec.object1_id1);
10488 FETCH pymt_method_csr INTO l_pymt_method_valid_yn;
10489 CLOSE pymt_method_csr;
10490
10491 IF (l_pymt_method_valid_yn = 'N') THEN
10492 Okl_Api.set_message(
10493 p_app_name => G_APP_NAME,
10494 p_msg_name => 'OKL_QA_PYMT_METHOD_INVALID');
10495 END IF;
10496 END IF;
10497
10498 l_hdrrl_rec := NULL;
10499 OPEN l_hdrrl_csr('LABILL', 'LABACC', TO_NUMBER(p_chr_id));
10500 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
10501 CLOSE l_hdrrl_csr;
10502
10503 IF (l_hdrrl_rec.object1_id1 IS NOT NULL) THEN
10504
10505 l_bank_acct_valid_yn := 'N';
10506 OPEN bank_acct_csr(p_cust_acct_id => l_cust_acct_id,
10507 p_bill_to_id => l_okl_bill_to_id,
10508 p_bank_acct_id => l_hdrrl_rec.object1_id1);
10509 FETCH bank_acct_csr INTO l_bank_acct_valid_yn;
10510 CLOSE bank_acct_csr;
10511
10512 IF (l_bank_acct_valid_yn = 'N') THEN
10513 Okl_Api.set_message(
10514 p_app_name => G_APP_NAME,
10515 p_msg_name => 'OKL_QA_BANK_ACCT_INVALID');
10516 END IF;
10517 END IF;
10518 END IF;
10519 --Bug# 8219011
10520
10521 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
10522 Okl_Api.set_message(
10523 p_app_name => G_APP_NAME,
10524 p_msg_name => G_QA_SUCCESS);
10525 END IF;
10526
10527 EXCEPTION
10528 WHEN G_EXCEPTION_HALT_VALIDATION THEN
10529 -- no processing necessary; validation can continue with next column
10530 NULL;
10531 WHEN OTHERS THEN
10532 -- store SQL error message on message stack
10533 Okl_Api.SET_MESSAGE(
10534 p_app_name => G_APP_NAME,
10535 p_msg_name => G_UNEXPECTED_ERROR,
10536 p_token1 => G_SQLCODE_TOKEN,
10537 p_token1_value => SQLCODE,
10538 p_token2 => G_SQLERRM_TOKEN,
10539 p_token2_value => SQLERRM);
10540 -- notify caller of an error as UNEXPETED error
10541 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
10542 -- verify that cursor was closed
10543 IF l_rl_csr%ISOPEN THEN
10544 CLOSE l_rl_csr;
10545 END IF;
10546 IF l_hdr_csr%ISOPEN THEN
10547 CLOSE l_hdr_csr;
10548 END IF;
10549 END check_rule_4new_lnrev;
10550
10551 PROCEDURE check_rule_constraints(
10552 x_return_status OUT NOCOPY VARCHAR2,
10553 p_chr_id IN NUMBER
10554 ) IS
10555
10556 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
10557 l_dummy VARCHAR2(1) := '?';
10558 l_count NUMBER := 0;
10559 l_row_notfound BOOLEAN;
10560 l_token VARCHAR2(2000);
10561
10562 CURSOR Product_csr (p_contract_id IN okl_products_v.id%TYPE ) IS
10563 SELECT pdt.id product_id
10564 ,pdt.name product_name
10565 ,CHR.sts_code contract_status
10566 ,khr.deal_type deal_type
10567 FROM okl_products_v pdt
10568 ,okl_k_headers_v khr
10569 ,okc_k_headers_b CHR
10570 WHERE 1=1
10571 AND khr.id = p_contract_id
10572 AND pdt_id = pdt.id
10573 AND khr.id = CHR.id;
10574
10575 l_pdt_rec Product_csr%ROWTYPE;
10576 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
10577
10578 BEGIN
10579
10580 -- initialize return status
10581 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
10582
10583 OPEN Product_csr(p_chr_id);
10584 FETCH Product_csr INTO l_pdt_rec;
10585 IF Product_csr%NOTFOUND THEN
10586 CLOSE Product_csr;
10587 RAISE G_EXCEPTION_HALT_VALIDATION;
10588 END IF;
10589 CLOSE Product_csr;
10590
10591 IF ( l_pdt_rec.deal_type <> 'LOAN-REVOLVING' ) THEN
10592 --Bug# 2833653
10593 IF Are_Assets_Inactive(p_chr_id => p_chr_id) = 'Y' THEN
10594 check_rule_constrs_4new(x_return_status, p_chr_id);
10595 END IF;
10596 ELSE
10597 check_rule_4new_lnrev(x_return_status, p_chr_id);
10598 END IF;
10599
10600 IF (x_return_status = Okl_Api.G_RET_STS_ERROR ) THEN
10601 RAISE G_EXCEPTION_HALT_VALIDATION;
10602 END IF;
10603
10604 -- Bug 4917116
10605 check_evergreen_allowed(x_return_status, p_chr_id);
10606 IF (x_return_status = Okl_Api.G_RET_STS_ERROR ) THEN
10607 RAISE G_EXCEPTION_HALT_VALIDATION;
10608 END IF;
10609
10610 EXCEPTION
10611 WHEN G_EXCEPTION_HALT_VALIDATION THEN
10612 -- no processing necessary; validation can continue with next column
10613 NULL;
10614 WHEN OTHERS THEN
10615 -- store SQL error message on message stack
10616 Okl_Api.SET_MESSAGE(
10617 p_app_name => G_APP_NAME,
10618 p_msg_name => G_UNEXPECTED_ERROR,
10619 p_token1 => G_SQLCODE_TOKEN,
10620 p_token1_value => SQLCODE,
10621 p_token2 => G_SQLERRM_TOKEN,
10622 p_token2_value => SQLERRM);
10623 -- notify caller of an error as UNEXPETED error
10624 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
10625 -- verify that cursor was closed
10626 IF Product_csr%ISOPEN THEN
10627 CLOSE Product_csr;
10628 END IF;
10629
10630 END check_rule_constraints;
10631
10632 PROCEDURE check_functional_constraints(
10633 x_return_status OUT NOCOPY VARCHAR2,
10634 p_chr_id IN NUMBER
10635 ) IS
10636
10637 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
10638 l_dummy VARCHAR2(1) := '?';
10639 l_count NUMBER := 0;
10640 l_row_notfound BOOLEAN;
10641 l_token VARCHAR2(2000);
10642 --Added by dpsingh for LE Uptake
10643 l_diff NUMBER;
10644
10645 CURSOR con_le_roll_qt_le_csr(p_contract_id IN NUMBER) IS
10646 SELECT 1 FROM
10647 OKC_K_HEADERS_B chr,
10648 OKL_K_HEADERS khr,
10649 OKL_K_LINES kle,
10650 OKC_K_LINES_B cle,
10651 OKL_TRX_QUOTES_B qte,
10652 OKC_LINE_STYLES_B cls
10653 WHERE cle.id = kle.id
10654 AND chr.id = p_contract_id
10655 AND chr.id = cle.chr_id
10656 AND chr.id = cle.dnz_chr_id
10657 AND cls.lty_code = 'FEE'
10658 AND cle.lse_id = cls.id
10659 AND kle.qte_id = qte.id
10660 AND chr.id = khr.id
10661 AND khr.legal_entity_id <> qte.legal_entity_id;
10662
10663 --Bug# 16681373: Removed kle.re_lease_yn from select clause and EXISTS from WHERE clause
10664 CURSOR Product_csr (p_contract_id IN NUMBER ) IS
10665 SELECT pdt.id product_id
10666 ,pdt.name product_name
10667 ,CHR.sts_code contract_status
10668 --Bug# 4869443
10669 ,chr.start_date start_date
10670 ,chr.orig_system_source_code orig_system_source_code
10671 FROM okl_products_v pdt
10672 ,okl_k_headers khr
10673 ,okc_k_headers_b CHR
10674 WHERE khr.id = p_chr_id
10675 AND khr.pdt_id = pdt.id
10676 AND khr.id = CHR.id;
10677
10678 l_pdt_rec Product_csr%ROWTYPE;
10679
10680 -------------------
10681 --Bug# 4869443
10682 ------------------
10683 --Bug# 16681373: Added kle.re_lease_yn = 'Y' in WHERE clause
10684 Cursor l_orig_ast_csr (p_chr_id in number) is
10685 select --trunc(orig_cleb.date_terminated) date_terminated,
10686 trunc(decode(sign(orig_cleb.end_date - orig_cleb.date_terminated),-1,orig_cleb.end_date,orig_cleb.date_terminated)) date_terminated,
10687 orig_clet.name asset_number
10688 from okc_k_lines_b orig_cleb,
10689 okc_k_lines_tl orig_clet,
10690 okc_k_lines_b cleb,
10691 okl_k_lines kle
10692 where orig_clet.id = orig_cleb.id
10693 and orig_clet.language = userenv('LANG')
10694 and orig_cleb.id = cleb.orig_system_id1
10695 and cleb.chr_id = p_chr_id
10696 and cleb.dnz_chr_id = p_chr_id
10697 and cleb.sts_code <> 'ABANDONED'
10698 and cleb.lse_id = 33 --for financial asset line
10699 and kle.id = cleb.id
10700 and NVL(kle.re_lease_yn,'N') = 'Y';
10701
10702 l_orig_ast_rec l_orig_ast_csr%ROWTYPE;
10703 l_termination_date varchar2(240);
10704 l_k_start_date varchar2(240);
10705 l_icx_date_format varchar2(240);
10706 -------------------
10707 --Bug# 4869443
10708 ------------------
10709 --start:| 23-May-2008 cklee fixed bug: 6781324 |
10710 cursor l_salvage_csr(p_chr_id in number) is
10711 select txl.id,
10712 txl.asset_number,
10713 txl.original_cost,
10714 txl.salvage_value,
10715 txl.percent_salvage_value
10716 from okl_txl_assets_b txl
10717 where txl.dnz_khr_id = p_chr_id;
10718
10719 ln_comp_prn_oec NUMBER := 0;
10720 ln_comp_prn_salv NUMBER := 0;
10721 --end:| 23-May-2008 cklee fixed bug: 6781324 |
10722
10723 BEGIN
10724
10725 -- initialize return status
10726 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
10727
10728 --start:| 23-May-2008 cklee fixed bug: 6781324 |
10729 For l_salvage_rec In l_salvage_csr(p_chr_id => p_chr_id)
10730 Loop
10731
10732 IF (l_salvage_rec.original_cost IS NOT NULL AND
10733 l_salvage_rec.salvage_value IS NOT NULL OR
10734 l_salvage_rec.percent_salvage_value IS NOT NULL) THEN
10735 ln_comp_prn_oec := (l_salvage_rec.original_cost/100);
10736 --Bug# 3950089
10737 IF(nvl(l_salvage_rec.salvage_value,0) > l_salvage_rec.original_cost) THEN
10738 --IF(p_talv_rec.salvage_value > p_talv_rec.original_cost) THEN
10739 -- original cost is greater than salvage value
10740 -- halt validation as the above statments are true
10741 -- RAISE G_EXCEPTION_HALT_VALIDATION;
10742 OKC_API.set_message(p_app_name => G_APP_NAME,
10743 p_msg_name => 'OKL_VALIDATE_SALVAGE_VALUE',
10744 p_token1 => G_COL_NAME_TOKEN,
10745 p_token1_value => l_salvage_rec.asset_number);
10746
10747
10748 --Bug# 3950089
10749 ELSIF (l_salvage_rec.percent_salvage_value > 100) THEN
10750 --ELSIF (p_talv_rec.percent_salvage_value > ln_comp_prn_oec) THEN
10751 -- To Check if computed original_cost is greater than percent_salvage_value
10752 -- halt validation as the above statments are true
10753 -- RAISE G_EXCEPTION_HALT_VALIDATION;
10754 OKC_API.set_message(p_app_name => G_APP_NAME,
10755 p_msg_name => 'OKL_VALIDATE_SALVAGE_VALUE',
10756 p_token1 => G_COL_NAME_TOKEN,
10757 p_token1_value => l_salvage_rec.asset_number);
10758 END IF;
10759 ELSIF (l_salvage_rec.original_cost IS NOT NULL
10760 AND l_salvage_rec.salvage_value IS NOT NULL
10761 AND l_salvage_rec.percent_salvage_value IS NOT NULL) THEN
10762 ln_comp_prn_oec := (l_salvage_rec.original_cost/100);
10763 ln_comp_prn_salv := (l_salvage_rec.salvage_value/100);
10764 IF (l_salvage_rec.salvage_value > l_salvage_rec.original_cost) AND
10765 (l_salvage_rec.percent_salvage_value > ln_comp_prn_oec) THEN
10766 -- To Check if computed original_cost is greater than percent_salvage_value
10767 -- And original cost is greater than salvage value
10768 -- halt validation as the above statments are true
10769 -- RAISE G_EXCEPTION_HALT_VALIDATION;
10770 OKC_API.set_message(p_app_name => G_APP_NAME,
10771 p_msg_name => 'OKL_VALIDATE_SALVAGE_VALUE',
10772 p_token1 => G_COL_NAME_TOKEN,
10773 p_token1_value => l_salvage_rec.asset_number);
10774 ELSIF (l_salvage_rec.salvage_value > l_salvage_rec.original_cost) OR
10775 (l_salvage_rec.percent_salvage_value > ln_comp_prn_oec) OR
10776 (ln_comp_prn_salv <> l_salvage_rec.percent_salvage_value) THEN
10777 -- To Check if computed original_cost is greater than percent_salvage_value
10778 -- or original cost is greater than salvage value
10779 -- or the computed salvage value is not equal to percentage salvage value
10780 -- halt validation as the above statments are true
10781 -- RAISE G_EXCEPTION_HALT_VALIDATION;
10782 OKC_API.set_message(p_app_name => G_APP_NAME,
10783 p_msg_name => 'OKL_VALIDATE_SALVAGE_VALUE',
10784 p_token1 => G_COL_NAME_TOKEN,
10785 p_token1_value => l_salvage_rec.asset_number);
10786 END IF;
10787 END IF;
10788 End Loop;
10789 --end:| 23-May-2008 cklee fixed bug: 6781324 |
10790
10791 OPEN Product_csr(p_chr_id);
10792 FETCH Product_csr INTO l_pdt_rec;
10793 IF Product_csr%NOTFOUND THEN
10794 CLOSE Product_csr;
10795 RAISE G_EXCEPTION_HALT_VALIDATION;
10796 END IF;
10797 CLOSE Product_csr;
10798
10799 --Bug# 4869443
10800 --Bug# 16681373: Removed Check for Re-lease asset from IF condition as the check will be done
10801 -- at line level in cursor l_orig_ast_csr
10802 If (nvl(l_pdt_rec.orig_system_source_code,OKL_API.G_MISS_CHAR) <> 'OKL_RELEASE') then
10803 Open l_orig_ast_csr(p_chr_id => p_chr_id);
10804 Loop
10805 Fetch l_orig_ast_csr into l_orig_ast_rec;
10806 Exit when l_orig_ast_csr%NOTFOUND;
10807 If l_pdt_rec.start_date <= l_orig_ast_rec.date_terminated Then
10808 -- Raise Error: start date of the contract should not be less than or equal to termination
10809 -- date of the asset.
10810 l_icx_date_format := nvl(fnd_profile.value('ICX_DATE_FORMAT_MASK'),'DD-MON-RRRR');
10811
10812 l_termination_date := to_char(l_orig_ast_rec.date_terminated,l_icx_date_format);
10813 l_k_start_date := to_char(l_pdt_rec.start_date,l_icx_date_format);
10814
10815 OKL_API.set_message(p_app_name => G_APP_NAME,
10816 p_msg_name => 'OKL_LA_RELEASE_AST_TRMN_DATE',
10817 p_token1 => 'TERMINATION_DATE',
10818 p_token1_value => l_termination_date,
10819 p_token2 => 'ASSET_NUMBER',
10820 p_token2_value => l_orig_ast_rec.asset_number,
10821 p_token3 => 'CONTRACT_START_DATE',
10822 p_token3_value => l_k_start_date);
10823 x_return_status := OKL_API.G_RET_STS_ERROR;
10824 End If;
10825 End Loop;
10826 Close l_orig_ast_csr;
10827
10828 IF (x_return_status = OKL_API.G_RET_STS_ERROR ) THEN
10829 RAISE G_EXCEPTION_HALT_VALIDATION;
10830 END IF;
10831 End If;
10832 --End Bug# 4869443
10833
10834 --Added by dpsingh for LE Uptake
10835 OPEN con_le_roll_qt_le_csr(p_chr_id);
10836 FETCH con_le_roll_qt_le_csr INTO l_diff;
10837 CLOSE con_le_roll_qt_le_csr;
10838 IF l_diff = 1 THEN
10839 x_return_status := OKL_API.G_RET_STS_ERROR;
10840 OKL_API.set_message(p_app_name => G_APP_NAME,
10841 p_msg_name => 'OKL_LA_ROLLOVER_QUOTE_CONTRACT');
10842 RAISE G_EXCEPTION_HALT_VALIDATION;
10843 END IF;
10844
10845 --Bug# 2833653
10846 IF Are_Assets_Inactive(p_chr_id => p_chr_id) = 'Y' THEN
10847 check_func_constrs_4new(x_return_status, p_chr_id);
10848 END IF;
10849
10850 IF (x_return_status = Okl_Api.G_RET_STS_ERROR ) THEN
10851 RAISE G_EXCEPTION_HALT_VALIDATION;
10852 END IF;
10853
10854 EXCEPTION
10855 WHEN G_EXCEPTION_HALT_VALIDATION THEN
10856 -- no processing necessary; validation can continue with next column
10857 NULL;
10858 WHEN OTHERS THEN
10859 -- store SQL error message on message stack
10860 Okl_Api.SET_MESSAGE(
10861 p_app_name => G_APP_NAME,
10862 p_msg_name => G_UNEXPECTED_ERROR,
10863 p_token1 => G_SQLCODE_TOKEN,
10864 p_token1_value => SQLCODE,
10865 p_token2 => G_SQLERRM_TOKEN,
10866 p_token2_value => SQLERRM);
10867 -- notify caller of an error as UNEXPETED error
10868 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
10869 -- verify that cursor was closed
10870 IF Product_csr%ISOPEN THEN
10871 CLOSE Product_csr;
10872 END IF;
10873 --Bug# 4869443
10874 IF l_orig_ast_csr%ISOPEN THEN
10875 CLOSE l_orig_Ast_csr;
10876 END IF;
10877
10878 END check_functional_constraints;
10879
10880 -- Start of comments
10881 --
10882 -- Procedure Name : check_tax_book_cost
10883 -- Description : This process checks asset cost at TAX book for OP and DF lease.
10884 -- If asset cost at TAX book is less than asset cost
10885 -- at CORPORATE book, raise error
10886 -- It is a configurable process
10887 -- Business Rules :
10888 -- Parameters :
10889 -- Version : 1.0, dedey
10890 -- End of comments
10891
10892 PROCEDURE check_tax_book_cost(
10893 x_return_status OUT NOCOPY VARCHAR2,
10894 p_chr_id IN NUMBER
10895 ) IS
10896
10897 l_hdr l_hdr_csr%ROWTYPE;
10898 l_txl l_txl_csr%ROWTYPE;
10899 l_asst asst_qty_csr%ROWTYPE;
10900
10901 --Bug#3877032
10902 CURSOR txd_csr( kleid NUMBER ) IS
10903 SELECT txd.cost,
10904 txd.deprn_method_tax,
10905 txd.tax_book
10906 FROM okl_txd_assets_b txd,
10907 okl_txl_assets_b txl
10908 WHERE txd.tal_id = txl.id
10909 AND txl.kle_id = kleid;
10910
10911 BEGIN
10912
10913 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
10914
10915 OPEN l_hdr_csr(p_chr_id);
10916 FETCH l_hdr_csr INTO l_hdr;
10917 IF l_hdr_csr%NOTFOUND THEN
10918 CLOSE l_hdr_csr;
10919 RAISE G_EXCEPTION_HALT_VALIDATION;
10920 END IF;
10921 CLOSE l_hdr_csr;
10922
10923 IF ((INSTR( l_hdr.DEAL_TYPE, 'OP' )>0) OR
10924 (INSTR( l_hdr.DEAL_TYPE, 'DF' )>0)) THEN
10925
10926 FOR l_lne IN l_lne_csr('FREE_FORM1', p_chr_id)
10927 LOOP
10928
10929 OPEN asst_qty_csr(FinAsstId => l_lne.id);
10930 FETCH asst_qty_csr INTO l_asst;
10931 CLOSE asst_qty_csr;
10932
10933 OPEN l_txl_csr(l_asst.fa_id);
10934 FETCH l_txl_csr INTO l_txl;
10935 IF l_txl_csr%NOTFOUND THEN
10936 CLOSE l_txl_csr;
10937 RAISE G_EXCEPTION_HALT_VALIDATION; -- checking done on func. constraints
10938 END IF;
10939 CLOSE l_txl_csr;
10940
10941 FOR l_txd_rec IN txd_csr (l_asst.fa_id)
10942 LOOP
10943 IF (l_txd_rec.cost < l_txl.depreciation_cost) THEN
10944 Okl_Api.set_message(
10945 p_app_name => G_APP_NAME,
10946 p_msg_name => 'OKL_QA_BASISPCNT_GT_100',
10947 p_token1 => 'Line',
10948 p_token1_value => l_lne.name,
10949 p_token2 => 'Tax Book',
10950 p_token2_value => l_txd_rec.tax_book);
10951
10952 x_return_status := Okl_Api.G_RET_STS_ERROR;
10953 END IF;
10954 END LOOP;
10955
10956 END LOOP; -- l_lne_csr
10957
10958 END IF; -- OP and DF lease
10959
10960
10961 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
10962 Okl_Api.set_message(
10963 p_app_name => G_APP_NAME,
10964 p_msg_name => G_QA_SUCCESS);
10965 END IF;
10966
10967 EXCEPTION
10968
10969 WHEN G_EXCEPTION_HALT_VALIDATION THEN
10970
10971 NULL; -- Do not do anything
10972
10973 WHEN OTHERS THEN
10974 -- store SQL error message on message stack
10975 Okl_Api.SET_MESSAGE(
10976 p_app_name => G_APP_NAME,
10977 p_msg_name => G_UNEXPECTED_ERROR,
10978 p_token1 => G_SQLCODE_TOKEN,
10979 p_token1_value => SQLCODE,
10980 p_token2 => G_SQLERRM_TOKEN,
10981 p_token2_value => SQLERRM);
10982
10983 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
10984
10985 IF l_hdr_csr%ISOPEN THEN
10986 CLOSE l_hdr_csr;
10987 END IF;
10988
10989 IF asst_qty_csr%ISOPEN THEN
10990 CLOSE asst_qty_csr;
10991 END IF;
10992
10993 IF l_txl_csr%ISOPEN THEN
10994 CLOSE l_txl_csr;
10995 END IF;
10996
10997 IF l_txd_csr%ISOPEN THEN
10998 CLOSE l_txd_csr;
10999 END IF;
11000
11001 END check_tax_book_cost;
11002 -- Start of comments
11003 --
11004 -- Procedure Name : check_capital_fee
11005 -- Description : This process checks FEE lines with Capitalized Fee type
11006 -- Validations include:
11007 -- 1. If fee line type stream type is capitalized and fee
11008 -- line has no sub lines then 'ERROR'
11009 -- 2. Sum of capital_amount on capitalized fee sublines should be
11010 -- equal to capital_amount on capitalized fee top line, else 'ERROR'.
11011 -- Business Rules :
11012 -- Parameters :
11013 -- Version : 1.0, dedey
11014 -- End of comments
11015
11016 PROCEDURE check_capital_fee(
11017 x_return_status OUT NOCOPY VARCHAR2,
11018 p_chr_id IN NUMBER
11019 ) IS
11020
11021 CURSOR contract_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
11022 SELECT start_date
11023 FROM okc_k_headers_b
11024 WHERE id = p_chr_id;
11025
11026 CURSOR fee_topline_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
11027 SELECT line.id,
11028 NVL(line.capital_amount,0) capital_amount,
11029 line.start_date,
11030 strm.code strm_type
11031 FROM okl_k_lines_full_v line,
11032 okc_k_items item,
11033 okl_strmtyp_source_v strm,
11034 okc_line_styles_v style,
11035 okc_statuses_b sts
11036 WHERE line.dnz_chr_id = p_chr_id
11037 AND line.lse_id = style.id
11038 AND line.sts_code = sts.code
11039 AND line.id = item.cle_id
11040 AND item.object1_id1 = strm.id1
11041 AND item.jtot_object1_code = 'OKL_STRMTYP'
11042 AND NVL(strm.capitalize_yn,'N') = 'Y'
11043 AND sts.ste_code NOT IN ( 'HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED')
11044 AND style.lty_code = 'FEE'
11045 -- Bug 6497111 Start Udhenuko Added.
11046 AND NVL(line.fee_purpose_code,'XXX') <> 'SALESTAX';
11047 -- Bug 6497111 End
11048
11049 CURSOR fee_subline_csr (p_cle_id OKC_K_LINES_V.ID%TYPE) IS
11050 SELECT id,
11051 NVL(capital_amount,0) capital_amount
11052 FROM okl_k_lines_full_v line,
11053 okc_statuses_b sts
11054 WHERE line.cle_id = p_cle_id
11055 AND line.sts_code = sts.code
11056 --Bug# 4959361: Include Terminated lines when fetching sub-line amount
11057 --AND sts.ste_code not in ( 'HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
11058 AND sts.ste_code not in ( 'HOLD', 'EXPIRED', 'CANCELLED');
11059
11060 --Bug#3877032
11061 CURSOR link_asset_csr (p_line_id OKC_K_LINES_B.ID%TYPE) IS
11062 SELECT line.start_date
11063 FROM okc_k_lines_b line,
11064 okc_k_items item
11065 WHERE item.cle_id = p_line_id
11066 AND item.object1_id1 = line.id
11067 AND item.object1_id2 = '#'
11068 AND line.dnz_chr_id = p_chr_id
11069 AND item.dnz_chr_id = p_chr_id
11070 AND item.jtot_object1_code = 'OKX_COVASST';
11071
11072 l_subline_present VARCHAR2(1);
11073 l_contract_start_date DATE;
11074 l_asset_start_date DATE;
11075 l_sub_cap_amt NUMBER;
11076
11077 BEGIN
11078
11079 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
11080
11081 /*
11082 OPEN contract_csr (p_chr_id);
11083 FETCH contract_csr INTO l_contract_start_date;
11084 CLOSE contract_csr;
11085 */
11086
11087 FOR fee_topline_rec IN fee_topline_csr(p_chr_id)
11088 LOOP
11089
11090 /* Checked against linked asset line
11091 IF (l_contract_start_date <> fee_topline_rec.start_date) THEN
11092 OKL_API.set_message(
11093 p_app_name => G_APP_NAME,
11094 p_msg_name => 'OKL_QA_CAP_FEE_ST_DATE',
11095 p_token1 => 'FEE_TYPE',
11096 p_token1_value => fee_topline_rec.strm_type
11097 );
11098
11099 x_return_status := OKL_API.G_RET_STS_ERROR;
11100 END IF;
11101 */
11102 l_subline_present := 'N';
11103 l_sub_cap_amt := 0;
11104
11105 FOR fee_subline_rec IN fee_subline_csr (fee_topline_rec.id)
11106 LOOP
11107 l_subline_present := 'Y';
11108 l_sub_cap_amt := l_sub_cap_amt + fee_subline_rec.capital_amount;
11109
11110 /* removed for rebook change control
11111 OPEN link_asset_csr (fee_subline_rec.id);
11112 FETCH link_asset_csr INTO l_asset_start_date;
11113 CLOSE link_asset_csr;
11114
11115 IF (l_asset_start_date <> fee_topline_rec.start_date) THEN
11116 OKL_API.set_message(
11117 p_app_name => G_APP_NAME,
11118 p_msg_name => 'OKL_QA_CAP_FEE_ST_DATE',
11119 p_token1 => 'FEE_TYPE',
11120 p_token1_value => fee_topline_rec.strm_type
11121 );
11122
11123 x_return_status := OKL_API.G_RET_STS_ERROR;
11124 END IF;
11125 */
11126 END LOOP;
11127
11128 IF (l_subline_present = 'N') THEN
11129 Okl_Api.set_message(
11130 p_app_name => G_APP_NAME,
11131 p_msg_name => 'OKL_QA_CAP_FEE_NO_SUBLINE',
11132 p_token1 => 'FEE_TYPE',
11133 p_token1_value => fee_topline_rec.strm_type
11134 );
11135
11136 x_return_status := Okl_Api.G_RET_STS_ERROR;
11137
11138 ELSIF (fee_topline_rec.capital_amount <> l_sub_cap_amt) THEN
11139 Okl_Api.set_message(
11140 p_app_name => G_APP_NAME,
11141 p_msg_name => 'OKL_QA_CAP_FEE_AMT_ERROR',
11142 p_token1 => 'FEE_TYPE',
11143 p_token1_value => fee_topline_rec.strm_type
11144 );
11145
11146 x_return_status := Okl_Api.G_RET_STS_ERROR;
11147 END IF;
11148
11149 END LOOP;
11150
11151 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
11152 Okl_Api.set_message(
11153 p_app_name => G_APP_NAME,
11154 p_msg_name => G_QA_SUCCESS);
11155 END IF;
11156
11157 EXCEPTION
11158 WHEN OTHERS THEN
11159 -- store SQL error message on message stack
11160 Okl_Api.SET_MESSAGE(
11161 p_app_name => G_APP_NAME,
11162 p_msg_name => G_UNEXPECTED_ERROR,
11163 p_token1 => G_SQLCODE_TOKEN,
11164 p_token1_value => SQLCODE,
11165 p_token2 => G_SQLERRM_TOKEN,
11166 p_token2_value => SQLERRM);
11167
11168 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
11169
11170 END check_capital_fee;
11171
11172 -- Start of comments
11173 --
11174 -- Procedure Name : check_fee_service_payment
11175 -- Description : This process checks for payment type RENT
11176 -- attached at FEE or SERVICE line level.
11177 -- In case RENT is defined at FEE and SERVICE line
11178 -- raise error during QA check
11179 -- Business Rules :
11180 -- Parameters :
11181 -- Version : 1.0, dedey
11182 -- End of comments
11183
11184 PROCEDURE check_fee_service_payment(
11185 x_return_status OUT NOCOPY VARCHAR2,
11186 p_chr_id IN NUMBER
11187 ) IS
11188
11189 --Bug#3931587
11190 CURSOR pmnt_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE,
11191 p_line_type OKC_LINE_STYLES_B.LTY_CODE%TYPE) IS
11192 SELECT COUNT(1)
11193 FROM okc_rules_b rule,
11194 okc_rule_groups_b rgp,
11195 okc_k_lines_b line,
11196 okc_line_styles_b style,
11197 okl_strm_type_b strm
11198 WHERE rgp.dnz_chr_id = p_chr_id
11199 AND rgp.cle_id IS NOT NULL
11200 AND rgp.cle_id = line.id
11201 AND line.lse_id = style.id
11202 AND style.lty_code = p_line_type
11203 AND rgp.id = rule.rgp_id
11204 AND rule.rule_information_category = 'LASLH'
11205 AND rule.jtot_object1_code = 'OKL_STRMTYP'
11206 AND rule.object1_id1 = strm.id
11207 --AND strm.code = 'RENT';
11208 AND strm.stream_type_purpose = 'RENT';
11209
11210 l_count NUMBER := 0;
11211
11212 BEGIN
11213 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
11214
11215 -- Check for RENT on FEE line
11216
11217 l_count := 0;
11218 OPEN pmnt_csr (p_chr_id,
11219 'FEE');
11220 FETCH pmnt_csr INTO l_count;
11221 CLOSE pmnt_csr;
11222
11223 IF (l_count <> 0) THEN
11224 Okl_Api.set_message(
11225 G_APP_NAME,
11226 'OKL_QA_INVALID_PMNT_TYPE',
11227 'LINE_TYPE',
11228 'FEE'
11229 );
11230 x_return_status := Okl_Api.G_RET_STS_ERROR;
11231 END IF;
11232
11233 -- Check for RENT on SERVICE line
11234 l_count := 0;
11235 OPEN pmnt_csr (p_chr_id,
11236 'SOLD_SERVICE');
11237 FETCH pmnt_csr INTO l_count;
11238 CLOSE pmnt_csr;
11239
11240 IF (l_count <> 0) THEN
11241 Okl_Api.set_message(
11242 G_APP_NAME,
11243 'OKL_QA_INVALID_PMNT_TYPE',
11244 'LINE_TYPE',
11245 'SERVICE'
11246 );
11247 x_return_status := Okl_Api.G_RET_STS_ERROR;
11248 END IF;
11249
11250 END check_fee_service_payment;
11251
11252 -- Start of comments
11253 --
11254 -- Procedure Name : check_pmnt_start_dt
11255 -- Description :
11256 -- Business Rules :
11257 -- Parameters :
11258 -- Version : 1.0
11259 -- End of comments
11260
11261 PROCEDURE check_pmnt_start_dt(
11262 x_return_status OUT NOCOPY VARCHAR2,
11263 p_chr_id IN NUMBER
11264 ) IS
11265
11266 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
11267
11268 CURSOR l_lne_pmnt_csr(ltycode VARCHAR2, chrid OKL_K_HEADERS.KHR_ID%TYPE) IS
11269 SELECT kle.name,
11270 kle.CURRENCY_CODE,
11271 kle.id,
11272 kle.RESIDUAL_VALUE,
11273 kle.TRACKED_RESIDUAL,
11274 kle.CAPITAL_REDUCTION,
11275 kle.TRADEIN_AMOUNT,
11276 kle.RVI_PREMIUM,
11277 kle.OEC,
11278 kle.residual_code,
11279 kle.residual_grnty_amount,
11280 kle.start_date,
11281 kle.end_date
11282 FROM OKL_K_LINES_FULL_V kle,
11283 OKC_LINE_STYLES_B ls,
11284 OKC_STATUSES_B sts
11285 WHERE kle.lse_id = ls.id
11286 AND ls.lty_code = ltycode
11287 AND kle.dnz_chr_id = chrid
11288 AND sts.code = kle.sts_code
11289 AND sts.ste_code NOT IN ( 'HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
11290
11291 l_hdr_rec l_hdr_csr%ROWTYPE;
11292 --l_lne l_lne_csr%ROWTYPE;
11293 l_rl_rec1 l_rl_csr1%ROWTYPE;
11294 l_rl_rec l_rl_csr%ROWTYPE;
11295
11296 l_fee_strm_type_rec fee_strm_type_csr%ROWTYPE;
11297 l_strm_name_rec strm_name_csr%ROWTYPE;
11298 BEGIN
11299
11300 -- initialize return status
11301 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
11302
11303 OPEN l_hdr_csr( p_chr_id );
11304 FETCH l_hdr_csr INTO l_hdr_rec;
11305 CLOSE l_hdr_csr;
11306
11307 FOR l_lne_pmnt IN l_lne_pmnt_csr('FREE_FORM1', p_chr_id)
11308 LOOP
11309
11310 FOR l_rl_rec1 IN l_rl_csr1 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne_pmnt.id )
11311 LOOP
11312
11313 OPEN strm_name_csr ( l_rl_rec1.object1_id1 );
11314 FETCH strm_name_csr INTO l_strm_name_rec;
11315 IF strm_name_csr%NOTFOUND THEN
11316 CLOSE strm_name_csr;
11317 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11318 END IF;
11319 CLOSE strm_name_csr;
11320
11321 FOR l_rl_rec IN l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_lne_pmnt.id )
11322 LOOP
11323 IF(( l_rl_rec.rule_information2 IS NOT NULL) AND
11324 (TRUNC( Fnd_Date.canonical_to_date(l_rl_rec.rule_information2)) < TRUNC(l_lne_pmnt.start_date)))THEN
11325
11326 Okl_Api.set_message(
11327 p_app_name => G_APP_NAME,
11328 p_msg_name => 'OKL_QA_PMNT_LN_START_DT',
11329 p_token1 => 'line',
11330 p_token1_value => l_lne_pmnt.name,
11331 p_token2 => 'payment type',
11332 p_token2_value => l_strm_name_rec.name);
11333 x_return_status := Okl_Api.G_RET_STS_ERROR;
11334 END IF;
11335 END LOOP;
11336 END LOOP;
11337 END LOOP;
11338
11339 FOR l_lne_pmnt IN l_lne_pmnt_csr('FEE', p_chr_id)
11340 LOOP
11341 FOR l_rl_rec1 IN l_rl_csr1 ( 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_lne_pmnt.id )
11342 LOOP
11343 IF(( l_rl_rec1.rule_information2 IS NOT NULL) AND
11344 (TRUNC( Fnd_Date.canonical_to_date(l_rl_rec1.rule_information2)) < TRUNC(l_lne_pmnt.start_date)))THEN
11345 --( FND_DATE.canonical_to_date(l_rl_rec1.rule_information2) < l_hdr_rec.start_date))Then
11346
11347 OPEN fee_strm_type_csr ( l_lne_pmnt.id, 'FEE' );
11348 FETCH fee_strm_type_csr INTO l_fee_strm_type_rec;
11349 CLOSE fee_strm_type_csr;
11350
11351 Okl_Api.set_message(
11352 p_app_name => G_APP_NAME,
11353 p_msg_name => 'OKL_QA_PMNT_LN_START_DT',
11354 p_token1 => 'line',
11355 p_token1_value => l_fee_strm_type_rec.strm_name);
11356 x_return_status := Okl_Api.G_RET_STS_ERROR;
11357 END IF;
11358 END LOOP;
11359 END LOOP;
11360
11361
11362 FOR l_lne_pmnt IN l_lne_pmnt_csr('SOLD_SERVICE', p_chr_id)
11363 LOOP
11364 FOR l_rl_rec1 IN l_rl_csr1 ( 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_lne_pmnt.id )
11365 LOOP
11366 IF(( l_rl_rec1.rule_information2 IS NOT NULL) AND
11367 ( TRUNC(Fnd_Date.canonical_to_date(l_rl_rec1.rule_information2)) < TRUNC(l_lne_pmnt.start_date)))THEN
11368 Okl_Api.set_message(
11369 p_app_name => G_APP_NAME,
11370 p_msg_name => 'OKL_QA_PMNT_LN_START_DT',
11371 p_token1 => 'line',
11372 p_token1_value => l_lne_pmnt.name);
11373 x_return_status := Okl_Api.G_RET_STS_ERROR;
11374 END IF;
11375 END LOOP;
11376 END LOOP;
11377
11378 FOR l_rl_rec1 IN l_rl_csr1 ( 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), -1 )
11379 LOOP
11380 IF(( l_rl_rec1.rule_information2 IS NOT NULL) AND
11381 ( TRUNC(Fnd_Date.canonical_to_date(l_rl_rec1.rule_information2)) < TRUNC(l_hdr_rec.start_date)))THEN
11382 Okl_Api.set_message(
11383 p_app_name => G_APP_NAME,
11384 p_msg_name => 'OKL_QA_PMNT_START_DT');
11385 x_return_status := Okl_Api.G_RET_STS_ERROR;
11386 END IF;
11387 END LOOP;
11388
11389 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
11390 Okl_Api.set_message(
11391 p_app_name => G_APP_NAME,
11392 p_msg_name => G_QA_SUCCESS);
11393 END IF;
11394
11395 EXCEPTION
11396
11397 WHEN G_EXCEPTION_HALT_VALIDATION THEN
11398 IF l_hdr_csr%ISOPEN THEN
11399 CLOSE l_hdr_csr;
11400 END IF;
11401 -- no processing necessary; validation can continue with next column
11402 WHEN OTHERS THEN
11403 -- store SQL error message on message stack
11404 Okl_Api.SET_MESSAGE(
11405 p_app_name => G_APP_NAME,
11406 p_msg_name => G_UNEXPECTED_ERROR,
11407 p_token1 => G_SQLCODE_TOKEN,
11408 p_token1_value => SQLCODE,
11409 p_token2 => G_SQLERRM_TOKEN,
11410 p_token2_value => SQLERRM);
11411 -- notify caller of an error as UNEXPETED error
11412 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
11413 -- verify that cursor was closed
11414 IF l_hdr_csr%ISOPEN THEN
11415 CLOSE l_hdr_csr;
11416 END IF;
11417
11418 END check_pmnt_start_dt;
11419
11420 -- Start of comments
11421 --
11422 -- Procedure Name : check_asset_tax
11423 -- Description : This process checks tax rules attached to Asset.
11424 -- 1. If Tax status = Override, Override rate must be present
11425 -- 2. If Tax status = Exempt, Exempt number must be present
11426 -- 3. If Tax status = NULL, both override and exempt must be null
11427 -- 4. If both override and exempt are not null raise error
11428 -- Business Rules :
11429 -- Parameters :
11430 -- Version : 1.0, dedey
11431 -- End of comments
11432
11433 PROCEDURE check_asset_tax(
11434 x_return_status OUT NOCOPY VARCHAR2,
11435 p_chr_id IN NUMBER
11436 ) IS
11437
11438 CURSOR asset_line_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
11439 SELECT line.id,
11440 line.name
11441 FROM okl_k_lines_full_v line,
11442 okc_line_styles_v style,
11443 okc_statuses_b sts
11444 WHERE line. dnz_chr_id = p_chr_id
11445 AND line.lse_id = style.id
11446 AND style.lty_code = 'FREE_FORM1'
11447 AND line.sts_code = sts.code
11448 AND sts.ste_code NOT IN ( 'HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
11449
11450 CURSOR tax_rule_csr (rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
11451 rlcat OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
11452 chrId NUMBER,
11453 cleId NUMBER) IS
11454 SELECT crl.id slh_id,
11455 crl.object1_id1,
11456 crl.RULE_INFORMATION1,
11457 crl.RULE_INFORMATION2,
11458 crl.RULE_INFORMATION3,
11459 crl.RULE_INFORMATION4,
11460 crl.RULE_INFORMATION5,
11461 crl.RULE_INFORMATION6,
11462 crl.RULE_INFORMATION7,
11463 crl.RULE_INFORMATION10
11464 FROM OKC_RULE_GROUPS_B crg,
11465 OKC_RULES_B crl
11466 WHERE crl.rgp_id = crg.id
11467 AND crg.RGD_CODE = rgcode
11468 AND crl.RULE_INFORMATION_CATEGORY = rlcat
11469 AND crg.cle_id = cleId;
11470
11471 tax_failed EXCEPTION;
11472
11473 BEGIN
11474
11475 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
11476
11477 FOR asset_line_rec IN asset_line_csr (p_chr_id)
11478 LOOP
11479 FOR tax_rule_rec IN tax_rule_csr ('LAASTX',
11480 'LAASTX',
11481 p_chr_id,
11482 asset_line_rec.id)
11483 LOOP
11484
11485 IF (tax_rule_rec.rule_information1 = 'E' -- Exempt
11486 AND
11487 tax_rule_rec.rule_information2 IS NULL) THEN
11488 Okl_Api.set_message(
11489 G_APP_NAME,
11490 'OKL_QA_EXEMPT_ERROR',
11491 'ASSET_NUM',
11492 asset_line_rec.name);
11493 x_return_status := Okl_Api.G_RET_STS_ERROR;
11494 --RAISE tax_failed;
11495 ELSIF (tax_rule_rec.rule_information1 IS NULL -- Null
11496 AND
11497 tax_rule_rec.rule_information2 IS NOT NULL) THEN
11498 Okl_Api.set_message(
11499 G_APP_NAME,
11500 'OKL_QA_TAX_NULL',
11501 'ASSET_NUM',
11502 asset_line_rec.name);
11503 x_return_status := Okl_Api.G_RET_STS_ERROR;
11504 --RAISE tax_failed;
11505 END IF;
11506 END LOOP;
11507
11508 END LOOP;
11509
11510 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
11511 Okl_Api.set_message(
11512 p_app_name => G_APP_NAME,
11513 p_msg_name => G_QA_SUCCESS);
11514 END IF;
11515
11516 EXCEPTION
11517
11518 WHEN tax_failed THEN
11519 NULL; -- error reported, just exit from this process
11520 WHEN OTHERS THEN
11521 -- store SQL error message on message stack
11522 Okl_Api.SET_MESSAGE(
11523 p_app_name => G_APP_NAME,
11524 p_msg_name => G_UNEXPECTED_ERROR,
11525 p_token1 => G_SQLCODE_TOKEN,
11526 p_token1_value => SQLCODE,
11527 p_token2 => G_SQLERRM_TOKEN,
11528 p_token2_value => SQLERRM);
11529
11530 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
11531
11532 END check_asset_tax;
11533
11534
11535 PROCEDURE check_subsidies_errors(
11536 x_return_status OUT NOCOPY VARCHAR2,
11537 p_chr_id IN NUMBER) IS
11538
11539 --p_api_version VARCHAR2(4000) := '1.0';
11540 p_init_msg_list VARCHAR2(4000) DEFAULT Okl_Api.G_FALSE;
11541 x_msg_count NUMBER;
11542 x_msg_data VARCHAR2(256);
11543 subsidy_applicable_yn VARCHAR2(10);
11544 l_subsidy_id NUMBER;
11545 l_asset_id NUMBER;
11546 x_subsidized VARCHAR2(1);
11547
11548 CURSOR get_subsidy_for_asset(p_chr_id NUMBER) IS
11549 SELECT kle.subsidy_id subsidy_id,
11550 cleb.cle_id asset_cle_id,
11551 clet.name subsidy_name,
11552 clet_asst.name asset_number,
11553 cleb.id subsidy_cle_id,
11554 cleb_asst.start_date asset_start_date,
11555 kle.amount,
11556 kle.subsidy_override_amount
11557 FROM okl_k_lines kle,
11558 okc_k_lines_tl clet,
11559 okc_k_lines_b cleb,
11560 okc_line_styles_b lseb,
11561 okc_k_lines_tl clet_asst,
11562 okc_k_lines_b cleb_asst,
11563 okc_line_styles_b lseb_asst
11564 WHERE kle.id = cleb.id
11565 AND clet.id = cleb.id
11566 AND clet.LANGUAGE = USERENV('LANG')
11567 AND cleb.cle_id = cleb_asst.id
11568 AND cleb.dnz_chr_id = cleb_asst.dnz_chr_id
11569 AND cleb.sts_code <> 'ABANDONED'
11570 AND lseb.id = cleb.lse_id
11571 AND lseb.lty_code = 'SUBSIDY'
11572 AND clet_asst.id = cleb_asst.id
11573 AND clet_asst.LANGUAGE = USERENV('LANG')
11574 AND lseb_asst.id = cleb_asst.lse_id
11575 AND lseb_asst.lty_code = 'FREE_FORM1'
11576 AND cleb_asst.sts_code <> 'ABANDONED'
11577 AND cleb_asst.dnz_chr_id = p_chr_id
11578 AND cleb_asst.chr_id = p_chr_id ;
11579 get_subsidy_for_asset_rec get_subsidy_for_asset%ROWTYPE;
11580
11581 CURSOR check_subsidy_recourse(p_subsidy_id NUMBER) IS
11582 SELECT recourse_yn
11583 FROM okl_subsidies_b
11584 WHERE id = p_subsidy_id;
11585
11586 recourse_yn VARCHAR2(1);
11587
11588 CURSOR check_refund_details(p_subsidy_cle_id NUMBER) IS
11589 SELECT pyd.vendor_id
11590 FROM okl_party_payment_dtls pyd,
11591 okc_k_party_roles_b cplb,
11592 okc_k_lines_b cleb
11593 WHERE pyd.cpl_id = cplb.id
11594 AND cplb.cle_id = cleb.id
11595 AND cplb.chr_id IS NULL
11596 AND cplb.RLE_CODE = 'OKL_VENDOR'
11597 AND cleb.id = p_subsidy_cle_id;
11598
11599 check_refund_details_rec check_refund_details%ROWTYPE;
11600
11601 lv_subsidy_pool_applicable_yn VARCHAR2(10);
11602 lx_subsidy_pool_id okl_subsidy_pools_b.id%TYPE;
11603 lx_sub_pool_curr_code okl_subsidy_pools_b.currency_code%TYPE;
11604 lx_pool_status okl_subsidy_pools_b.decision_status_code%TYPE;
11605 lx_pool_balance okl_subsidy_pools_b.total_subsidy_amount%TYPE;
11606 lv_subsidy_amount okl_k_lines.subsidy_override_amount%TYPE;
11607 -- sjalasut, added local variables to support logging
11608 l_module CONSTANT fnd_log_messages.MODULE%TYPE := 'okl.plsql.OKL_QA_DATA_INTEGRITY.CHECK_SUBSIDIES_ERRORS';
11609 l_debug_enabled VARCHAR2(10);
11610 is_debug_statement_on BOOLEAN;
11611
11612
11613 BEGIN
11614 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
11615
11616 -- check if debug is enabled
11617 l_debug_enabled := Okl_Debug_Pub.check_log_enabled;
11618 -- check for logging on STATEMENT level
11619 is_debug_statement_on := Okl_Debug_Pub.check_log_on(l_module,Fnd_Log.LEVEL_STATEMENT);
11620
11621 Okl_Subsidy_Process_Pvt.is_contract_subsidized(
11622 p_api_version => 1.0,
11623 p_init_msg_list => p_init_msg_list,
11624 x_return_status => x_return_status,
11625 x_msg_count => x_msg_count,
11626 x_msg_data => x_msg_data,
11627 p_chr_id => p_chr_id,
11628 x_subsidized => x_subsidized);
11629
11630 IF x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR THEN
11631 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11632 ELSIF x_return_status = Okl_Api.G_RET_STS_ERROR THEN
11633 RAISE Okl_Api.G_EXCEPTION_ERROR;
11634 END IF;
11635
11636 IF (x_subsidized = Okl_Api.G_FALSE) THEN
11637 Okl_Api.set_message(
11638 p_app_name => G_APP_NAME,
11639 p_msg_name => G_QA_SUCCESS);
11640 RETURN;
11641 END IF;
11642
11643 FOR get_subsidy_for_asset_rec IN get_subsidy_for_asset(p_chr_id)
11644 LOOP
11645 l_subsidy_id := get_subsidy_for_asset_rec.subsidy_id;
11646 l_asset_id := get_subsidy_for_asset_rec.asset_cle_id;
11647
11648 /*
11649 * sjalasut, Feb 18, 2005: Modified the call to include new parameter p_qa_checker_call and pass it as 'Y'
11650 * this parameter bypasses the subsidy pool check in the validate_subsidy_applicability procedure
11651 * as the same is being called here to pinpoint exact nature of failure in the subsidy / subsidy pool configuration.
11652 * Modification introduced as part of subsidy pools enhancement
11653 * START code changes
11654 */
11655 subsidy_applicable_yn := Okl_Asset_Subsidy_Pvt.validate_subsidy_applicability(p_subsidy_id => l_subsidy_id
11656 ,p_asset_cle_id => l_asset_id
11657 ,p_qa_checker_call => 'Y');
11658 /*
11659 * END code changes
11660 */
11661
11662 IF (subsidy_applicable_yn = 'N') THEN
11663 Okl_Api.set_message(
11664 p_app_name => G_APP_NAME,
11665 p_msg_name => 'OKL_SUBSIDY_CRITERIA_MATCH',
11666 p_token1 => 'SUBSIDY_NAME',
11667 p_token1_value => get_subsidy_for_asset_rec.subsidy_name,
11668 p_token2 => 'ASSET_NUMBER',
11669 p_token2_value => get_subsidy_for_asset_rec.asset_number);
11670 x_return_status := Okl_Api.G_RET_STS_ERROR;
11671 RAISE G_EXCEPTION_HALT_VALIDATION;
11672 END IF;
11673
11674 OPEN check_subsidy_recourse(get_subsidy_for_asset_rec.subsidy_id);
11675 FETCH check_subsidy_recourse INTO recourse_yn;
11676 CLOSE check_subsidy_recourse;
11677 IF (recourse_yn = 'Y') THEN
11678 OPEN check_refund_details(get_subsidy_for_asset_rec.subsidy_cle_id);
11679 FETCH check_refund_details INTO check_refund_details_rec;
11680 IF (check_refund_details%NOTFOUND) THEN
11681 x_return_status := Okl_Api.G_RET_STS_ERROR;
11682 Okl_Api.set_message(
11683 p_app_name => G_APP_NAME,
11684 p_msg_name => 'OKL_LA_SUBSIDY_PARTY_PYMT',
11685 p_token1 => 'SUBSIDY_NAME',
11686 p_token1_value => get_subsidy_for_asset_rec.subsidy_name ,
11687 p_token2 => 'ASSET_NUMBER',
11688 p_token2_value => get_subsidy_for_asset_rec.asset_number);
11689 END IF;
11690 CLOSE check_refund_details;
11691 END IF;
11692
11693 /*
11694 * sjalasut, Feb 18, 2005: added code to check for applicability of subsidy pool if the subsidy in context is attached with a subsidy pool.
11695 * code added as part of subsidy pools enhancement START
11696 */
11697 lv_subsidy_pool_applicable_yn := 'N'; -- need to reset this var as this is being used in a loop. the last usage should not be compared
11698 -- check if the subsidy has been associated with a subsidy pool, further pool validation depends only if the
11699 -- subsidy has an association with the pool
11700 lv_subsidy_pool_applicable_yn := Okl_Asset_Subsidy_Pvt.is_sub_assoc_with_pool(p_subsidy_id => l_subsidy_id
11701 ,x_subsidy_pool_id => lx_subsidy_pool_id
11702 ,x_sub_pool_curr_code => lx_sub_pool_curr_code);
11703 IF(lv_subsidy_pool_applicable_yn = 'Y')THEN
11704 -- write to log
11705 IF(NVL(l_debug_enabled,'N')='Y' AND is_debug_statement_on) THEN
11706 Okl_Debug_Pub.log_debug(Fnd_Log.LEVEL_STATEMENT,
11707 l_module,
11708 'subsidy '|| l_subsidy_id || ' is attached to subsidy pool '|| lx_subsidy_pool_id
11709 );
11710 END IF; -- end of NVL(l_debug_enabled,'N')='Y' AND is_debug_statement_on
11711
11712 -- is active by code is called first as reading from a column is more economical than comparing date values
11713 -- if the pool status code is not ACTIVE then no date comparision would be done.
11714 lv_subsidy_pool_applicable_yn := Okl_Asset_Subsidy_Pvt.is_sub_pool_active(p_subsidy_pool_id => lx_subsidy_pool_id
11715 ,x_pool_status => lx_pool_status );
11716 IF(lv_subsidy_pool_applicable_yn <> 'Y')THEN
11717 x_return_status := Okl_Api.G_RET_STS_ERROR;
11718 Okl_Api.set_message(
11719 p_app_name => G_APP_NAME,
11720 p_msg_name => G_SUB_POOL_NOT_ACTIVE,
11721 p_token1 => 'SUBSIDY_NAME',
11722 p_token1_value => get_subsidy_for_asset_rec.subsidy_name ,
11723 p_token2 => 'ASSET_NUMBER',
11724 p_token2_value => get_subsidy_for_asset_rec.asset_number);
11725 RAISE G_EXCEPTION_HALT_VALIDATION;
11726 END IF;
11727 -- validate if the asset start date lies between the effective dates of the subsidy pool
11728 lv_subsidy_pool_applicable_yn := Okl_Asset_Subsidy_Pvt.is_sub_pool_active_by_date(p_subsidy_pool_id => lx_subsidy_pool_id
11729 ,p_asset_date => get_subsidy_for_asset_rec.asset_start_date );
11730 IF(lv_subsidy_pool_applicable_yn <> 'Y')THEN
11731 x_return_status := Okl_Api.G_RET_STS_ERROR;
11732 Okl_Api.set_message(
11733 p_app_name => G_APP_NAME,
11734 p_msg_name => G_SUB_POOL_ASSET_DATES_GAP,
11735 p_token1 => 'SUBSIDY_NAME',
11736 p_token1_value => get_subsidy_for_asset_rec.subsidy_name ,
11737 p_token2 => 'ASSET_NUMBER',
11738 p_token2_value => get_subsidy_for_asset_rec.asset_number);
11739 RAISE G_EXCEPTION_HALT_VALIDATION;
11740 END IF;
11741
11742 lx_pool_balance := 0;
11743 lv_subsidy_pool_applicable_yn := Okl_Asset_Subsidy_Pvt.is_balance_valid_before_add(p_subsidy_pool_id => lx_subsidy_pool_id
11744 ,x_pool_balance => lx_pool_balance);
11745 IF(lv_subsidy_pool_applicable_yn <> 'Y')THEN
11746 x_return_status := Okl_Api.G_RET_STS_ERROR;
11747 Okl_Api.set_message(
11748 p_app_name => G_APP_NAME,
11749 p_msg_name => G_SUB_POOL_BALANCE_INVALID,
11750 p_token1 => 'SUBSIDY_NAME',
11751 p_token1_value => get_subsidy_for_asset_rec.subsidy_name ,
11752 p_token2 => 'ASSET_NUMBER',
11753 p_token2_value => get_subsidy_for_asset_rec.asset_number);
11754 RAISE G_EXCEPTION_HALT_VALIDATION;
11755 END IF;
11756 -- the check of subsidy pool balance is valid after addition of the subsidy amount is being written in separate PL/SQL
11757 -- block as we dont stop processing if error occurs here. all the assets should be processed
11758 BEGIN
11759 lv_subsidy_amount := 0;
11760 lv_subsidy_amount := NVL(get_subsidy_for_asset_rec.subsidy_override_amount,NVL(get_subsidy_for_asset_rec.amount,0));
11761 Okl_Asset_Subsidy_Pvt.is_balance_valid_after_add (p_subsidy_id => l_subsidy_id
11762 ,p_asset_id => l_asset_id
11763 ,p_subsidy_amount => lv_subsidy_amount
11764 ,p_subsidy_name => get_subsidy_for_asset_rec.subsidy_name
11765 ,x_return_status => x_return_status
11766 ,x_msg_count => x_msg_count
11767 ,x_msg_data => x_msg_data);
11768 -- write to log
11769 IF(NVL(l_debug_enabled,'N')='Y' AND is_debug_statement_on) THEN
11770 Okl_Debug_Pub.log_debug(Fnd_Log.LEVEL_STATEMENT,
11771 l_module,
11772 'okl_asset_subsidy_pvt.is_balance_valid_after_add returned with '|| x_return_status||' x_msg_data '||x_msg_data
11773 );
11774 END IF; -- end of NVL(l_debug_enabled,'N')='Y' AND is_debug_statement_on
11775 EXCEPTION WHEN OTHERS THEN
11776 x_return_status := Okl_Api.G_RET_STS_ERROR;
11777 /*comment out to avoid duplicated error: cklee 09/12/2005
11778 OKL_API.set_message(
11779 p_app_name => G_APP_NAME,
11780 p_msg_name => G_SUB_POOL_BALANCE_INVALID,
11781 p_token1 => 'SUBSIDY_NAME',
11782 p_token1_value => get_subsidy_for_asset_rec.subsidy_name ,
11783 p_token2 => 'ASSET_NUMBER',
11784 p_token2_value => get_subsidy_for_asset_rec.asset_number);
11785 */
11786 RAISE G_EXCEPTION_HALT_VALIDATION;
11787 END;
11788 END IF; -- end of lv_subsidy_pool_applicable_yn = 'Y'
11789
11790 /*
11791 * sjalasut, Feb 18, 2005: added code to check for applicability of subsidy pool if the subsidy in context is attached with a subsidy pool.
11792 * code added as part of subsidy pools enhancement
11793 * END
11794 */
11795 END LOOP;
11796
11797 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
11798 Okl_Api.set_message(
11799 p_app_name => G_APP_NAME,
11800 p_msg_name => G_QA_SUCCESS);
11801 END IF;
11802
11803 EXCEPTION
11804
11805 WHEN G_EXCEPTION_HALT_VALIDATION THEN
11806 NULL; -- error reported, just exit from this process
11807 WHEN OTHERS THEN
11808 -- store SQL error message on message stack
11809 Okl_Api.SET_MESSAGE(
11810 p_app_name => G_APP_NAME,
11811 p_msg_name => G_UNEXPECTED_ERROR,
11812 p_token1 => G_SQLCODE_TOKEN,
11813 p_token1_value => SQLCODE,
11814 p_token2 => G_SQLERRM_TOKEN,
11815 p_token2_value => SQLERRM);
11816
11817 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
11818
11819 IF check_subsidy_recourse%ISOPEN THEN
11820 CLOSE check_subsidy_recourse;
11821 END IF;
11822
11823 IF check_refund_details%ISOPEN THEN
11824 CLOSE check_refund_details;
11825 END IF;
11826
11827 END check_subsidies_errors;
11828
11829 PROCEDURE check_subsidies(
11830 x_return_status OUT NOCOPY VARCHAR2,
11831 p_chr_id IN NUMBER) IS
11832
11833 --p_api_version VARCHAR2(4000) := '1.0';
11834 p_init_msg_list VARCHAR2(4000) DEFAULT Okl_Api.G_FALSE;
11835 stored_subsidy_amount NUMBER;
11836 calc_subsidy_amount NUMBER;
11837 x_subsidy_amount NUMBER;
11838 x_msg_count NUMBER;
11839 x_msg_data VARCHAR2(256);
11840 x_subsidized VARCHAR2(1);
11841
11842 BEGIN
11843 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
11844
11845 Okl_Subsidy_Process_Pvt.is_contract_subsidized(
11846 p_api_version => 1.0,
11847 p_init_msg_list => p_init_msg_list,
11848 x_return_status => x_return_status,
11849 x_msg_count => x_msg_count,
11850 x_msg_data => x_msg_data,
11851 p_chr_id => p_chr_id,
11852 x_subsidized => x_subsidized);
11853
11854 IF x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR THEN
11855 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11856 ELSIF x_return_status = Okl_Api.G_RET_STS_ERROR THEN
11857 RAISE Okl_Api.G_EXCEPTION_ERROR;
11858 END IF;
11859
11860 IF (x_subsidized = Okl_Api.G_FALSE) THEN
11861 Okl_Api.set_message(
11862 p_app_name => G_APP_NAME,
11863 p_msg_name => G_QA_SUCCESS);
11864 RETURN;
11865 END IF;
11866
11867 Okl_Subsidy_Process_Pvt.get_contract_subsidy_amount(p_api_version => 1.0,
11868 p_init_msg_list => Okl_Api.G_FALSE,
11869 x_return_status => x_return_status,
11870 x_msg_count => x_msg_count,
11871 x_msg_data => x_msg_data,
11872 p_chr_id => p_chr_id,
11873 x_subsidy_amount => x_subsidy_amount);
11874 IF x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR THEN
11875 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11876 ELSIF x_return_status = Okl_Api.G_RET_STS_ERROR THEN
11877 RAISE Okl_Api.G_EXCEPTION_ERROR;
11878 END IF;
11879
11880 stored_subsidy_amount := x_subsidy_amount;
11881 Okl_Subsidy_Process_Pvt.calculate_contract_subsidy(p_api_version => 1.0,
11882 p_init_msg_list => Okl_Api.G_FALSE,
11883 x_return_status => x_return_status,
11884 x_msg_count => x_msg_count,
11885 x_msg_data => x_msg_data,
11886 p_chr_id => p_chr_id,
11887 x_subsidy_amount => x_subsidy_amount);
11888
11889 IF x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR THEN
11890 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
11891 ELSIF x_return_status = Okl_Api.G_RET_STS_ERROR THEN
11892 RAISE Okl_Api.G_EXCEPTION_ERROR;
11893 END IF;
11894
11895 calc_subsidy_amount := x_subsidy_amount;
11896 IF (stored_subsidy_amount <> calc_subsidy_amount) THEN
11897 Okl_Api.set_message(
11898 p_app_name => G_APP_NAME,
11899 p_msg_name => 'OKL_SUBSIDY_AMOUNT_MATCH');
11900 x_return_status := Okl_Api.G_RET_STS_ERROR;
11901 RAISE G_EXCEPTION_HALT_VALIDATION;
11902 END IF;
11903
11904 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
11905 Okl_Api.set_message(
11906 p_app_name => G_APP_NAME,
11907 p_msg_name => G_QA_SUCCESS);
11908 END IF;
11909
11910 EXCEPTION
11911
11912 WHEN G_EXCEPTION_HALT_VALIDATION THEN
11913 NULL; -- error reported, just exit from this process
11914 WHEN OTHERS THEN
11915 -- store SQL error message on message stack
11916 Okl_Api.SET_MESSAGE(
11917 p_app_name => G_APP_NAME,
11918 p_msg_name => G_UNEXPECTED_ERROR,
11919 p_token1 => G_SQLCODE_TOKEN,
11920 p_token1_value => SQLCODE,
11921 p_token2 => G_SQLERRM_TOKEN,
11922 p_token2_value => SQLERRM);
11923
11924 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
11925
11926 END;
11927
11928 -- Start of comments
11929 --
11930 -- Procedure Name : check_credit_line
11931 -- Description :
11932 -- Business Rules :
11933 -- Parameters :
11934 -- Version : 1.0
11935 -- End of comments
11936
11937 PROCEDURE check_credit_line(
11938 x_return_status OUT NOCOPY VARCHAR2,
11939 p_chr_id IN NUMBER
11940 ) IS
11941
11942 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
11943 x_msg_count NUMBER;
11944 x_msg_data VARCHAR2(1000);
11945
11946 BEGIN
11947 --
11948 -- Check credit lines
11949 --
11950 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
11951
11952 Okl_La_Validation_Util_Pvt.validate_crdtln_wrng (
11953 p_api_version => 1.0,
11954 p_init_msg_list => Okl_Api.G_FALSE,
11955 x_return_status => l_return_status,
11956 x_msg_count => x_msg_count,
11957 x_msg_data => x_msg_data,
11958 p_chr_id => p_chr_id
11959 );
11960
11961 IF (l_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
11962 x_return_status := l_return_status;
11963 END IF;
11964
11965 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
11966 Okl_Api.set_message(
11967 p_app_name => G_APP_NAME,
11968 p_msg_name => G_QA_SUCCESS);
11969 END IF;
11970
11971 END check_credit_line;
11972
11973 -- Start of comments
11974 --
11975 -- Procedure Name : check_invoice_format
11976 -- Description :
11977 -- Business Rules :
11978 -- Parameters :
11979 -- Version : 1.0
11980 -- End of comments
11981
11982 PROCEDURE check_invoice_format(
11983 x_return_status OUT NOCOPY VARCHAR2,
11984 p_chr_id IN NUMBER
11985 ) IS
11986
11987 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
11988 x_msg_count NUMBER;
11989 x_msg_data VARCHAR2(1000);
11990 l_invoice_format OKC_RULES_B.RULE_INFORMATION1%TYPE;
11991
11992 --Bug#3877032
11993 CURSOR l_invoice_format_csr IS
11994 SELECT rule.rule_information1
11995 FROM okc_rules_b rule,
11996 okc_rule_groups_b rgp
11997 WHERE rule.rgp_id = rgp.id
11998 AND rgp.dnz_chr_id = p_chr_id
11999 AND rgp.chr_id = p_chr_id
12000 AND rgp.rgd_code = 'LABILL'
12001 AND rule.rule_information_category = 'LAINVD';
12002
12003 BEGIN
12004 --
12005 -- Check invoice format
12006 --
12007 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
12008
12009 OPEN l_invoice_format_csr;
12010 FETCH l_invoice_format_csr INTO l_invoice_format;
12011 IF (l_invoice_format_csr%NOTFOUND OR l_invoice_format IS NULL) THEN
12012 x_return_status := Okl_Api.G_RET_STS_ERROR;
12013 Okl_Api.set_message(
12014 p_app_name => G_APP_NAME,
12015 p_msg_name => 'OKL_QA_NO_INV_FORMAT');
12016 END IF;
12017 CLOSE l_invoice_format_csr;
12018
12019
12020 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
12021 Okl_Api.set_message(
12022 p_app_name => G_APP_NAME,
12023 p_msg_name => G_QA_SUCCESS);
12024 END IF;
12025
12026 END check_invoice_format;
12027
12028 -- Start of comments
12029 --
12030 -- Procedure Name : check_tax_book_mapping
12031 -- Description : Checks if tax book mapping exists for the tax book
12032 -- to identify it as 'FEDERAL' or 'STATE'.
12033 -- Business Rules :
12034 -- Parameters :
12035 -- Version : 1.0
12036 -- End of comments
12037
12038 PROCEDURE check_tax_book_mapping(
12039 x_return_status OUT NOCOPY VARCHAR2,
12040 p_chr_id IN NUMBER
12041 ) IS
12042
12043 CURSOR l_assets_txl_lines IS
12044 SELECT txl.asset_number asset_num,
12045 fa.id fa_id,
12046 txd.tax_book
12047 FROM okc_k_items cim,
12048 okc_k_lines_V fa,
12049 okc_line_styles_b fa_lse,
12050 OKL_TRX_ASSETS trx,
12051 okl_txl_assets_b txl,
12052 okl_txd_assets_v txd,
12053 okc_statuses_b sts
12054 WHERE cim.cle_id = fa.id
12055 AND cim.dnz_chr_id = p_chr_id
12056 AND fa.lse_id = fa_lse.id
12057 AND txd.tal_id = txl.id
12058 AND txl.kle_id = fa.id
12059 AND txl.tas_id = trx.id
12060 AND fa_lse.lty_code = 'FIXED_ASSET'
12061 AND fa.dnz_chr_id = cim.dnz_chr_id
12062 AND sts.code = fa.sts_code
12063 AND sts.ste_code NOT IN ('HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED')
12064 AND trx.tsu_code = 'ENTERED'
12065 AND txl.tal_type = 'CFA';
12066
12067 --Bug#3877032
12068 CURSOR l_check_tax_map_for_asset(p_tax_book VARCHAR2 ) IS
12069 SELECT 'Y'
12070 FROM okl_sgn_translations sgn
12071 WHERE sgn.jtot_object1_code = 'FA_BOOK_CONTROLS'
12072 AND sgn.object1_id1 = p_tax_book
12073 AND sgn.sgn_code = 'STMP';
12074
12075 l_assets_txl_lines_rec l_assets_txl_lines%ROWTYPE;
12076 l_tax_mapping_found VARCHAR2(1) DEFAULT 'N';
12077 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
12078
12079 BEGIN
12080
12081 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
12082
12083 FOR l_assets_txl_lines_rec IN l_assets_txl_lines
12084 LOOP
12085 l_tax_mapping_found := 'N';
12086 OPEN l_check_tax_map_for_asset(l_assets_txl_lines_rec.tax_book);
12087 FETCH l_check_tax_map_for_asset INTO l_tax_mapping_found;
12088 IF (l_check_tax_map_for_asset%NOTFOUND) THEN
12089 Okl_Api.set_message(
12090 p_app_name => G_APP_NAME,
12091 p_msg_name => 'OKL_QA_NO_TAX_MAP',
12092 p_token1 => 'TAX_BOOK',
12093 p_token1_value => l_assets_txl_lines_rec.tax_book,
12094 p_token2 => 'ASSET_NUM',
12095 p_token2_value => l_assets_txl_lines_rec.asset_num);
12096 x_return_status := Okl_Api.G_RET_STS_ERROR;
12097 END IF;
12098 CLOSE l_check_tax_map_for_asset;
12099 END LOOP;
12100
12101 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
12102 Okl_Api.set_message(
12103 p_app_name => G_APP_NAME,
12104 p_msg_name => G_QA_SUCCESS);
12105 END IF;
12106
12107 EXCEPTION
12108 WHEN OTHERS THEN
12109 -- store SQL error message on message stack
12110 Okl_Api.SET_MESSAGE(
12111 p_app_name => G_APP_NAME,
12112 p_msg_name => G_UNEXPECTED_ERROR,
12113 p_token1 => G_SQLCODE_TOKEN,
12114 p_token1_value => SQLCODE,
12115 p_token2 => G_SQLERRM_TOKEN,
12116 p_token2_value => SQLERRM);
12117
12118 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
12119
12120 IF l_check_tax_map_for_asset%ISOPEN THEN
12121 CLOSE l_check_tax_map_for_asset;
12122 END IF;
12123
12124 END check_tax_book_mapping;
12125
12126 --Bug# 3504680
12127 -- Start of comments
12128 --
12129 -- Procedure Name : check_sales_type_lease
12130 -- Description : Generates warning if the deal type is sales and the tax owner
12131 -- is Lessee.
12132 -- Business Rules :
12133 -- Parameters :
12134 -- Version : 1.0
12135 -- End of comments
12136
12137 PROCEDURE check_sales_type_lease(
12138 x_return_status OUT NOCOPY VARCHAR2,
12139 p_chr_id IN NUMBER
12140 ) IS
12141
12142 l_hdr l_hdr_csr%ROWTYPE;
12143 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
12144 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
12145
12146 BEGIN
12147
12148 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
12149
12150 OPEN l_hdr_csr(p_chr_id);
12151 FETCH l_hdr_csr INTO l_hdr;
12152 IF l_hdr_csr%NOTFOUND THEN
12153 CLOSE l_hdr_csr;
12154 RAISE G_EXCEPTION_HALT_VALIDATION;
12155 END IF;
12156 CLOSE l_hdr_csr;
12157
12158 OPEN l_hdrrl_csr('LATOWN', 'LATOWN', TO_NUMBER(p_chr_id));
12159 FETCH l_hdrrl_csr INTO l_hdrrl_rec;
12160 CLOSE l_hdrrl_csr;
12161
12162 IF ((INSTR( l_hdr.DEAL_TYPE,'ST') > 0 ) AND (l_hdrrl_rec.RULE_INFORMATION1 <> 'LESSEE')) THEN
12163 Okl_Api.set_message(
12164 p_app_name => G_APP_NAME,
12165 p_msg_name => 'OKL_QA_ST_LESSEE');
12166 -- notify caller of an error
12167 x_return_status := Okl_Api.G_RET_STS_ERROR;
12168 END IF;
12169
12170 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
12171 Okl_Api.set_message(
12172 p_app_name => G_APP_NAME,
12173 p_msg_name => G_QA_SUCCESS);
12174 END IF;
12175
12176 EXCEPTION
12177 WHEN OTHERS THEN
12178 -- store SQL error message on message stack
12179 Okl_Api.SET_MESSAGE(
12180 p_app_name => G_APP_NAME,
12181 p_msg_name => G_UNEXPECTED_ERROR,
12182 p_token1 => G_SQLCODE_TOKEN,
12183 p_token1_value => SQLCODE,
12184 p_token2 => G_SQLERRM_TOKEN,
12185 p_token2_value => SQLERRM);
12186
12187 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
12188
12189 IF l_hdr_csr%ISOPEN THEN
12190 CLOSE l_hdr_csr;
12191 END IF;
12192
12193 IF l_hdrrl_csr%ISOPEN THEN
12194 CLOSE l_hdrrl_csr;
12195 END IF;
12196
12197 END check_sales_type_lease;
12198
12199 -- Start of comments
12200 --
12201 -- Procedure Name : check_payment_struct
12202 -- Description : Bug 3325126,
12203 -- Check for same payment amount in 2 consiqutive
12204 -- payment line for LOAN, LOAN-REVOLVING contracts
12205 -- and for contracts having financed fee line
12206 -- Business Rules :
12207 -- Parameters :
12208 -- Version : 1.0
12209 -- End of comments
12210
12211 PROCEDURE check_payment_struct (
12212 x_return_status OUT NOCOPY VARCHAR2,
12213 p_chr_id IN NUMBER
12214 ) IS
12215
12216 l_return_status VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
12217 x_msg_count NUMBER;
12218 x_msg_data VARCHAR2(1000);
12219 l_invoice_format OKC_RULES_B.RULE_INFORMATION1%TYPE;
12220
12221 CURSOR l_chr_csr (p_chr_id NUMBER) IS
12222 SELECT khr.id,
12223 khr.deal_type
12224 FROM OKL_K_HEADERS khr
12225 WHERE khr.id = p_chr_id;
12226
12227 CURSOR l_lne_csr (p_chr_id NUMBER) IS
12228 SELECT lne.id id,
12229 style.name line_type
12230 FROM okc_k_lines_b lne,
12231 okc_line_styles_v style
12232 WHERE dnz_chr_id = p_chr_id
12233 AND style.id = lne.lse_id;
12234
12235 -- R12B Authoring OA Migration
12236 -- Validation of Sales Tax Financed Fee will be done
12237 -- after the Calculate Upfront Tax process
12238
12239 CURSOR l_financed_csr (p_chr_id NUMBER) IS
12240 SELECT cle.id,
12241 style.name line_type
12242 FROM okl_k_lines kle,
12243 okc_k_lines_b cle,
12244 okc_line_styles_v style
12245 WHERE cle.dnz_chr_id = p_chr_id
12246 AND cle.id = kle.id
12247 AND cle.lse_id = style.id
12248 AND kle.fee_type = 'FINANCED'
12249 AND NVL(kle.fee_purpose_code,'XXX') <> 'SALESTAX';
12250
12251 --Bug#3877032
12252 CURSOR l_strm_slh_csr (p_khr_id OKC_K_HEADERS_B.ID%TYPE,
12253 p_kle_id OKC_K_LINES_B.ID%TYPE) IS
12254 SELECT styt.name stream_type,
12255 rule.id rule_id,
12256 rgp.id rgp_id
12257 FROM okc_rules_b rule,
12258 okc_rule_groups_b rgp,
12259 okl_strm_type_b sty,
12260 okl_strm_type_tl styt
12261 WHERE NVL(rgp.cle_id, -1) = p_kle_id
12262 AND rgp.dnz_chr_id = p_khr_id
12263 AND rgp.rgd_code = 'LALEVL'
12264 AND rgp.id = rule.rgp_id
12265 AND rule.rule_information_category = 'LASLH'
12266 AND TO_NUMBER(rule.object1_id1) = sty.id
12267 AND styt.LANGUAGE = USERENV('LANG')
12268 AND sty.id = styt.id;
12269
12270 CURSOR l_strm_sll_csr (p_rule_id OKC_RULES_B.ID%TYPE,
12271 p_rgp_id OKC_RULE_GROUPS_B.ID%TYPE) IS
12272 SELECT Fnd_Date.canonical_to_date(sll.rule_information2) start_date,
12273 sll.rule_information1 seq,
12274 sll.rule_information6 amt,
12275 sll.rule_information7 stub_day,
12276 sll.rule_information13 rate
12277 FROM okc_rules_b sll
12278 WHERE sll.rgp_id = p_rgp_id
12279 AND sll.object2_id1 = TO_CHAR(p_rule_id)
12280 AND sll.rule_information_category = 'LASLL'
12281 ORDER BY 1,2;
12282
12283 l_prev_pmnt NUMBER;
12284 l_prev_rate NUMBER; -- Bug 4766555
12285 BEGIN
12286 --
12287 -- Check payment lines for similar structure
12288 -- No 2 consecutive payment lines have same amount
12289 --
12290 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
12291
12292 FOR l_chr_rec IN l_chr_csr (p_chr_id)
12293 LOOP
12294 IF (l_chr_rec.deal_type IN ('LOAN','LOAN-REVOLVING')) THEN
12295 FOR l_lne_rec IN l_lne_csr (p_chr_id)
12296 LOOP
12297 FOR l_strm_slh_rec IN l_strm_slh_csr (p_chr_id,
12298 l_lne_rec.id)
12299 LOOP
12300 l_prev_pmnt := NULL;
12301 l_prev_rate := NULL; -- Bug 4766555
12302 FOR l_strm_sll_rec IN l_strm_sll_csr (l_strm_slh_rec.rule_id,
12303 l_strm_slh_rec.rgp_id)
12304 LOOP
12305 IF (l_strm_sll_rec.stub_day IS NOT NULL) THEN -- do not check
12306 l_prev_pmnt := NULL; -- reset
12307 l_prev_rate := NULL; -- reset
12308 ELSE
12309 -- Check payment amount here
12310 IF (l_prev_pmnt = TO_NUMBER(NVL(l_strm_sll_rec.amt,'0')))
12311 AND -- Bug 4766555
12312 (TO_NUMBER(NVL(l_prev_rate,0)) = TO_NUMBER(NVL(l_strm_sll_rec.rate,'0')))
12313 THEN
12314 -- Error
12315 Okl_Api.set_message(
12316 G_APP_NAME,
12317 'OKL_QA_INVALID_PMNT',
12318 'LINE_TYPE',
12319 l_lne_rec.line_type,
12320 'PMNT_TYPE',
12321 l_strm_slh_rec.stream_type
12322 );
12323 x_return_status := Okl_Api.G_RET_STS_ERROR;
12324 ELSE
12325 l_prev_pmnt := TO_NUMBER(NVL(l_strm_sll_rec.amt,'0'));
12326 l_prev_rate := TO_NUMBER(NVL(l_strm_sll_rec.rate,'0'));
12327 END IF; --check
12328
12329 END IF; --stub
12330 END LOOP; --l_strm_sll_csr
12331
12332 END LOOP; --l_strm_slh_csr
12333
12334 END LOOP; --l_lne_csr
12335
12336 -- Check the same for header payment, if any
12337 FOR l_strm_slh_rec IN l_strm_slh_csr (p_chr_id,
12338 -1)
12339 LOOP
12340 l_prev_pmnt := NULL;
12341 FOR l_strm_sll_rec IN l_strm_sll_csr (l_strm_slh_rec.rule_id,
12342 l_strm_slh_rec.rgp_id)
12343 LOOP
12344 IF (l_strm_sll_rec.stub_day IS NOT NULL) THEN -- do not check
12345 l_prev_pmnt := NULL; -- reset
12346 ELSE
12347 -- Check payment amount here
12348 IF (l_prev_pmnt = TO_NUMBER(NVL(l_strm_sll_rec.amt,'0'))) THEN
12349 -- Error
12350 Okl_Api.set_message(
12351 G_APP_NAME,
12352 'OKL_QA_INVALID_PMNT_HDR',
12353 'PMNT_TYPE',
12354 l_strm_slh_rec.stream_type
12355 );
12356 x_return_status := Okl_Api.G_RET_STS_ERROR;
12357 ELSE
12358 l_prev_pmnt := TO_NUMBER(NVL(l_strm_sll_rec.amt,'0'));
12359 END IF; --check
12360
12361 END IF; --stub
12362 END LOOP; --l_strm_sll_csr
12363
12364 END LOOP; --l_strm_slh_csr
12365 ELSE
12366
12367 -- check for Financed Fee only
12368 FOR l_financed_rec IN l_financed_csr (p_chr_id)
12369 LOOP
12370 FOR l_strm_slh_rec IN l_strm_slh_csr (p_chr_id,
12371 l_financed_rec.id)
12372 LOOP
12373 l_prev_pmnt := NULL;
12374 FOR l_strm_sll_rec IN l_strm_sll_csr (l_strm_slh_rec.rule_id,
12375 l_strm_slh_rec.rgp_id)
12376 LOOP
12377 IF (l_strm_sll_rec.stub_day IS NOT NULL) THEN -- do not check
12378 l_prev_pmnt := NULL; -- reset
12379 ELSE
12380 -- Check payment amount here
12381 IF (l_prev_pmnt = TO_NUMBER(NVL(l_strm_sll_rec.amt,'0'))) THEN
12382 -- Error
12383 Okl_Api.set_message(
12384 G_APP_NAME,
12385 'OKL_QA_INVALID_PMNT',
12386 'LINE_TYPE',
12387 l_financed_rec.line_type,
12388 'PMNT_TYPE',
12389 l_strm_slh_rec.stream_type
12390 );
12391 x_return_status := Okl_Api.G_RET_STS_ERROR;
12392 ELSE
12393 l_prev_pmnt := TO_NUMBER(NVL(l_strm_sll_rec.amt,'0'));
12394 END IF; --check
12395
12396 END IF; --stub
12397 END LOOP; --l_strm_sll_csr
12398
12399 END LOOP; --l_strm_slh_csr
12400 END LOOP; --l_financed_csr
12401
12402 END IF;-- deal_type
12403 END LOOP; --l_chr_csr;
12404
12405 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
12406 Okl_Api.set_message(
12407 p_app_name => G_APP_NAME,
12408 p_msg_name => G_QA_SUCCESS);
12409 END IF;
12410
12411 EXCEPTION
12412 WHEN OTHERS THEN
12413 -- store SQL error message on message stack
12414 Okl_Api.SET_MESSAGE(
12415 p_app_name => G_APP_NAME,
12416 p_msg_name => G_UNEXPECTED_ERROR,
12417 p_token1 => G_SQLCODE_TOKEN,
12418 p_token1_value => SQLCODE,
12419 p_token2 => G_SQLERRM_TOKEN,
12420 p_token2_value => SQLERRM);
12421
12422 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
12423
12424 END check_payment_struct;
12425
12426 -- Start of comments
12427 --
12428 -- Procedure Name : check_contract_dt_signed
12429 -- Description : Bug 3670104,
12430 -- Raise warning if contract signed date is not earlier than
12431 -- contract start date.
12432 -- Business Rules :
12433 -- Parameters :
12434 -- Version : 1.0
12435 -- End of comments
12436
12437 PROCEDURE check_contract_dt_signed(
12438 x_return_status OUT NOCOPY VARCHAR2,
12439 p_chr_id IN NUMBER) IS
12440
12441 l_hdr l_hdr_csr%ROWTYPE;
12442
12443 BEGIN
12444 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
12445
12446 OPEN l_hdr_csr(p_chr_id);
12447 FETCH l_hdr_csr INTO l_hdr;
12448 IF l_hdr_csr%NOTFOUND THEN
12449 CLOSE l_hdr_csr;
12450 RAISE G_EXCEPTION_HALT_VALIDATION;
12451 END IF;
12452 CLOSE l_hdr_csr;
12453
12454 IF( l_hdr.DATE_SIGNED >= l_hdr.START_DATE) THEN
12455 Okl_Api.set_message(
12456 p_app_name => G_APP_NAME,
12457 p_msg_name => 'OKL_QA_DATESIGNED_LT_START');
12458 -- notify caller of an error
12459 x_return_status := Okl_Api.G_RET_STS_ERROR;
12460 END IF;
12461
12462 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
12463 Okl_Api.set_message(
12464 p_app_name => G_APP_NAME,
12465 p_msg_name => G_QA_SUCCESS);
12466 END IF;
12467
12468 EXCEPTION
12469
12470 WHEN G_EXCEPTION_HALT_VALIDATION THEN
12471 NULL; -- error reported, just exit from this process
12472 WHEN OTHERS THEN
12473 -- store SQL error message on message stack
12474 Okl_Api.SET_MESSAGE(
12475 p_app_name => G_APP_NAME,
12476 p_msg_name => G_UNEXPECTED_ERROR,
12477 p_token1 => G_SQLCODE_TOKEN,
12478 p_token1_value => SQLCODE,
12479 p_token2 => G_SQLERRM_TOKEN,
12480 p_token2_value => SQLERRM);
12481
12482 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
12483
12484 IF l_hdr_csr%ISOPEN THEN
12485 CLOSE l_hdr_csr;
12486 END IF;
12487
12488 END check_contract_dt_signed;
12489
12490 --Bug# 4899328: Start
12491 -- Start of comments
12492 --
12493 -- Procedure Name : check_asset_deprn_cost
12494 -- Description : Displays a warning message if there is a difference
12495 -- between the current depreciable cost in FA and the
12496 -- depreciable cost updated/calculated during online rebook.
12497 -- Business Rules :
12498 -- Parameters :
12499 -- Version : 1.0
12500 -- End of comments
12501
12502 PROCEDURE check_asset_deprn_cost(
12503 x_return_status OUT NOCOPY VARCHAR2,
12504 p_chr_id IN NUMBER
12505 ) IS
12506
12507 --cursor to check if the contract is undergoing on-line rebook
12508 cursor l_chk_rbk_csr(p_chr_id IN NUMBER) is
12509 SELECT '!'
12510 FROM okc_k_headers_b CHR,
12511 okl_trx_contracts ktrx
12512 WHERE ktrx.khr_id_new = chr.id
12513 AND ktrx.tsu_code = 'ENTERED'
12514 AND ktrx.rbr_code is NOT NULL
12515 AND ktrx.tcn_type = 'TRBK'
12516 --rkuttiya added for 12.1.1 Multi GAAP
12517 AND ktrx.representation_type = 'PRIMARY'
12518 --
12519 AND chr.id = p_chr_id
12520 AND chr.orig_system_source_code = 'OKL_REBOOK';
12521
12522 l_rbk_khr VARCHAR2(1) DEFAULT '?';
12523
12524 cursor l_corp_book_csr(p_chr_id in number) is
12525 select txl.id tal_id ,
12526 txl.asset_number asset_number,
12527 fab.cost original_cost,
12528 txl.depreciation_cost new_cost
12529 from okl_trx_assets trx,
12530 okl_txl_assets_b txl,
12531 okc_k_lines_b cleb,
12532 okc_statuses_b sts,
12533 fa_books fab,
12534 fa_additions fa
12535 where trx.id = txl.tas_id
12536 and trx.tsu_code = 'ENTERED'
12537 and trx.tas_type = 'CRB'
12538 and txl.kle_id = cleb.id
12539 and txl.tal_type = 'CRB'
12540 and cleb.dnz_chr_id = p_chr_id
12541 and cleb.lse_id = 42
12542 and sts.code = cleb.sts_code
12543 and sts.ste_code NOT IN ('HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED')
12544 and fab.book_type_code = txl.corporate_book
12545 and fab.asset_id = fa.asset_id
12546 and fa.asset_number = txl.asset_number
12547 and fab.transaction_header_id_out is null;
12548
12549 cursor l_tax_book_csr(p_tal_id in number) is
12550 select txd.asset_number,
12551 txd.tax_book,
12552 txd.cost new_cost,
12553 fab.cost original_cost
12554 from okl_txd_assets_b txd,
12555 fa_books fab,
12556 fa_additions fa
12557 where txd.tal_id = p_tal_id
12558 and fab.book_type_code = txd.tax_book
12559 and fab.asset_id = fa.asset_id
12560 and fa.asset_number = txd.asset_number
12561 and fab.transaction_header_id_out is null;
12562
12563 BEGIN
12564
12565 x_return_status := OKL_API.G_RET_STS_SUCCESS;
12566
12567 --check for rebook contract
12568 l_rbk_khr := '?';
12569 OPEN l_chk_rbk_csr (p_chr_id => p_chr_id);
12570 FETCH l_chk_rbk_csr INTO l_rbk_khr;
12571 CLOSE l_chk_rbk_csr;
12572
12573 If l_rbk_khr = '!' Then
12574
12575 For l_corp_book_rec In l_corp_book_csr(p_chr_id => p_chr_id)
12576 Loop
12577
12578 If NVL(l_corp_book_rec.original_cost,0) <> NVL(l_corp_book_rec.new_cost,0) Then
12579
12580 OKL_API.set_message(
12581 p_app_name => G_APP_NAME,
12582 p_msg_name => 'OKL_LA_DEPRN_COST_CHG',
12583 p_token1 => 'ASSET_NUMBER',
12584 p_token1_value => l_corp_book_rec.asset_number);
12585 x_return_status := OKL_API.G_RET_STS_ERROR;
12586
12587 Else
12588
12589 For l_tax_book_rec In l_tax_book_csr(p_tal_id => l_corp_book_rec.tal_id)
12590 Loop
12591
12592 If NVL(l_tax_book_rec.original_cost,0) <> NVL(l_tax_book_rec.new_cost,0) Then
12593 OKL_API.set_message(
12594 p_app_name => G_APP_NAME,
12595 p_msg_name => 'OKL_LA_DEPRN_COST_CHG',
12596 p_token1 => 'ASSET_NUMBER',
12597 p_token1_value => l_tax_book_rec.asset_number);
12598 x_return_status := OKL_API.G_RET_STS_ERROR;
12599
12600 Exit;
12601 End If;
12602
12603 End Loop;
12604 End If;
12605 End Loop;
12606 End If;
12607
12608 IF x_return_status = OKL_API.G_RET_STS_SUCCESS THEN
12609 OKL_API.set_message(
12610 p_app_name => G_APP_NAME,
12611 p_msg_name => G_QA_SUCCESS);
12612 END IF;
12613
12614 EXCEPTION
12615 WHEN OTHERS THEN
12616 -- store SQL error message on message stack
12617 OKL_API.SET_MESSAGE(
12618 p_app_name => G_APP_NAME,
12619 p_msg_name => G_UNEXPECTED_ERROR,
12620 p_token1 => G_SQLCODE_TOKEN,
12621 p_token1_value => SQLCODE,
12622 p_token2 => G_SQLERRM_TOKEN,
12623 p_token2_value => SQLERRM);
12624
12625 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
12626
12627 END check_asset_deprn_cost;
12628 --Bug# 4899328: End
12629
12630 --Bug# 5032883: Start
12631 -- Start of comments
12632 --
12633 -- Procedure Name : check_late_int_date
12634 -- Description : Displays a warning message if the late interest date
12635 -- : is earlier than contract start date
12636 -- Business Rules :
12637 -- Parameters :
12638 -- Version : 1.0
12639 -- End of comments
12640
12641 PROCEDURE check_late_int_date(
12642 x_return_status OUT NOCOPY VARCHAR2,
12643 p_chr_id IN NUMBER
12644 ) IS
12645 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
12646 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
12647 l_hdr l_hdr_csr%ROWTYPE;
12648 BEGIN
12649
12650 x_return_status := OKL_API.G_RET_STS_SUCCESS;
12651
12652 OPEN l_hdr_csr(p_chr_id);
12653 FETCH l_hdr_csr into l_hdr;
12654 IF l_hdr_csr%NOTFOUND THEN
12655 CLOSE l_hdr_csr;
12656 RAISE G_EXCEPTION_HALT_VALIDATION;
12657 END IF;
12658 CLOSE l_hdr_csr;
12659
12660
12661 OPEN l_hdrrl_csr('LALIGR', 'LAHUDT', TO_NUMBER(p_chr_id));
12662 FETCH l_hdrrl_csr into l_hdrrl_rec;
12663
12664 If(( l_hdrrl_csr%FOUND ) AND
12665 (l_hdrrl_rec.RULE_INFORMATION1 IS NOT NULL) AND
12666 (TRUNC( FND_DATE.canonical_to_date(l_hdrrl_rec.RULE_INFORMATION1)) < TRUNC(l_hdr.START_DATE) )) Then
12667 OKL_API.set_message(
12668 p_app_name => G_APP_NAME,
12669 p_msg_name => 'OKL_QA_LATE_INT_DATE');
12670 -- notify caller of an error
12671 x_return_status := OKL_API.G_RET_STS_ERROR;
12672 End If;
12673 CLOSE l_hdrrl_csr;
12674
12675 IF x_return_status = OKL_API.G_RET_STS_SUCCESS THEN
12676 OKL_API.set_message(
12677 p_app_name => G_APP_NAME,
12678 p_msg_name => G_QA_SUCCESS);
12679 END IF;
12680
12681 EXCEPTION
12682 WHEN OTHERS THEN
12683 -- store SQL error message on message stack
12684 OKL_API.SET_MESSAGE(
12685 p_app_name => G_APP_NAME,
12686 p_msg_name => G_UNEXPECTED_ERROR,
12687 p_token1 => G_SQLCODE_TOKEN,
12688 p_token1_value => SQLCODE,
12689 p_token2 => G_SQLERRM_TOKEN,
12690 p_token2_value => SQLERRM);
12691
12692 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
12693
12694 END check_late_int_date;
12695 -- bug 5032883 end;
12696
12697 --Bug# 5032883: Start
12698 -- Start of comments
12699 --
12700 -- Procedure Name : check_late_charge_date
12701 -- Description : Displays a warning message if the late interest date
12702 -- : is earlier than contract start date
12703 -- Business Rules :
12704 -- Parameters :
12705 -- Version : 1.0
12706 -- End of comments
12707
12708 PROCEDURE check_late_charge_date(
12709 x_return_status OUT NOCOPY VARCHAR2,
12710 p_chr_id IN NUMBER
12711 ) IS
12712 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
12713 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
12714 l_hdr l_hdr_csr%ROWTYPE;
12715 BEGIN
12716
12717 x_return_status := OKL_API.G_RET_STS_SUCCESS;
12718
12719 OPEN l_hdr_csr(p_chr_id);
12720 FETCH l_hdr_csr into l_hdr;
12721 IF l_hdr_csr%NOTFOUND THEN
12722 CLOSE l_hdr_csr;
12723 RAISE G_EXCEPTION_HALT_VALIDATION;
12724 END IF;
12725 CLOSE l_hdr_csr;
12726
12727
12728 OPEN l_hdrrl_csr('LALCGR', 'LAHUDT', TO_NUMBER(p_chr_id));
12729 FETCH l_hdrrl_csr into l_hdrrl_rec;
12730
12731 If(( l_hdrrl_csr%FOUND ) AND
12732 (l_hdrrl_rec.RULE_INFORMATION1 IS NOT NULL) AND
12733 ( TRUNC(FND_DATE.canonical_to_date(l_hdrrl_rec.RULE_INFORMATION1)) < TRUNC(l_hdr.START_DATE) )) Then
12734 OKL_API.set_message(
12735 p_app_name => G_APP_NAME,
12736 p_msg_name => 'OKL_QA_LATE_CH_DATE');
12737 -- notify caller of an error
12738 x_return_status := OKL_API.G_RET_STS_ERROR;
12739 End If;
12740 CLOSE l_hdrrl_csr;
12741
12742 IF x_return_status = OKL_API.G_RET_STS_SUCCESS THEN
12743 OKL_API.set_message(
12744 p_app_name => G_APP_NAME,
12745 p_msg_name => G_QA_SUCCESS);
12746 END IF;
12747
12748 EXCEPTION
12749 WHEN OTHERS THEN
12750 -- store SQL error message on message stack
12751 OKL_API.SET_MESSAGE(
12752 p_app_name => G_APP_NAME,
12753 p_msg_name => G_UNEXPECTED_ERROR,
12754 p_token1 => G_SQLCODE_TOKEN,
12755 p_token1_value => SQLCODE,
12756 p_token2 => G_SQLERRM_TOKEN,
12757 p_token2_value => SQLERRM);
12758
12759 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
12760
12761 END check_late_charge_date;
12762 -- bug 5032883 end;
12763
12764 -- Bug 5716089 rkuttiya start
12765 -- Start of comments
12766 --
12767 -- Procedure Name : check_reporting_pdt_strm
12768 -- Description : ensure that all stream types selected in the
12769 -- : contract exist as well in the reporting product
12770 -- Business Rules :
12771 -- Parameters :
12772 -- Version : 1.0
12773 -- End of comments
12774
12775 PROCEDURE check_reporting_pdt_strm (
12776 x_return_status OUT NOCOPY VARCHAR2,
12777 p_chr_id IN NUMBER
12778 )
12779 IS
12780 l_return_status VARCHAR2 (1) := OKL_API.G_RET_STS_SUCCESS;
12781 l_product_rec l_product_csr%ROWTYPE;
12782 l_rep_strm_rec l_rep_strm_csr%ROWTYPE;
12783
12784 -- bug 14082267: new var added
12785 l_sty_primary_purpose VARCHAR2(30);
12786
12787 cursor l_prin_pymt_csr(rep_pdt_id number,
12788 styid number,
12789 primary_purpose varchar2,
12790 contract_start_date date ) IS
12791 SELECT primary_sty_id
12792 FROM okl_strm_tmpt_lines_uv stl
12793 WHERE stl.primary_yn = 'N'
12794 AND stl.pdt_id = rep_pdt_id
12795 AND (stl.start_date <= contract_start_date)
12796 AND (stl.end_date >= contract_start_date OR stl.end_date IS NULL)
12797 AND primary_sty_purpose = primary_purpose
12798 AND dependent_sty_id = styid;
12799
12800 BEGIN
12801 x_return_status :=l_return_status;
12802
12803 OPEN l_product_csr (p_chr_id => p_chr_id);
12804 FETCH l_product_csr INTO l_product_rec;
12805
12806 IF l_product_rec.reporting_pdt_id is null
12807 THEN
12808 CLOSE l_product_csr;
12809 RETURN;
12810 END IF;
12811
12812 CLOSE l_product_csr;
12813
12814 FOR l_payment_strm_rec IN l_payment_strm_csr (p_chr_id => p_chr_id)
12815 LOOP
12816 -- bug 14082267: if the stream purpose is 'PRINCIPAL_PAYMENT', treat
12817 -- it seperately. PRINCIPAL_PAYMENT though is a dependent stream purpose
12818 -- it can be used on a payment, and is an only exception.
12819 -- If that stream purpose needs to be checked on the reporting product,
12820 -- check if it is associated to the primary purpose of 'RENT'.
12821
12822 if l_payment_strm_rec.stream_type_purpose = 'PRINCIPAL_PAYMENT' then
12823 l_sty_primary_purpose := 'RENT';
12824
12825 OPEN l_prin_pymt_csr (rep_pdt_id => l_product_rec.reporting_pdt_id,
12826 styid => l_payment_strm_rec.sty_id,
12827 primary_purpose => l_sty_primary_purpose,
12828 contract_start_date => l_product_rec.start_date
12829 );
12830 FETCH l_prin_pymt_csr INTO l_rep_strm_rec;
12831
12832 else
12833
12834 OPEN l_rep_strm_csr (rep_pdt_id => l_product_rec.reporting_pdt_id,
12835 styid => l_payment_strm_rec.sty_id,
12836 primary_sty_purpose => l_payment_strm_rec.stream_type_purpose,
12837 contract_start_date => l_product_rec.start_date
12838 );
12839 FETCH l_rep_strm_csr INTO l_rep_strm_rec;
12840 end if;
12841
12842
12843 IF ((l_rep_strm_csr%ISOPEN and l_rep_strm_csr%NOTFOUND) OR
12844 (l_prin_pymt_csr%ISOPEN and l_prin_pymt_csr%NOTFOUND))
12845 THEN
12846 if l_rep_strm_csr%ISOPEN then
12847 CLOSE l_rep_strm_csr;
12848 elsif l_prin_pymt_csr%ISOPEN then
12849 CLOSE l_prin_pymt_csr;
12850 end if;
12851
12852 OKL_API.set_message (p_app_name => G_APP_NAME,
12853 p_msg_name => 'OKL_QA_CHK_REP_PDT_STRM',
12854 p_token1 => 'STREAM_TYPE',
12855 p_token1_value => l_payment_strm_rec.stream_name
12856 );
12857
12858 -- notify caller of an error
12859 x_return_status := OKL_API.G_RET_STS_ERROR;
12860 Return;
12861 END IF;
12862
12863 if l_rep_strm_csr%ISOPEN then
12864 CLOSE l_rep_strm_csr;
12865 elsif l_prin_pymt_csr%ISOPEN then
12866 CLOSE l_prin_pymt_csr;
12867 end if;
12868 END LOOP;
12869
12870 IF x_return_status = OKL_API.G_RET_STS_SUCCESS THEN
12871 OKL_API.set_message(
12872 p_app_name => G_APP_NAME,
12873 p_msg_name => G_QA_SUCCESS);
12874 END IF;
12875
12876 EXCEPTION
12877 WHEN OTHERS THEN
12878 -- store SQL error message on message stack
12879 OKL_API.SET_MESSAGE(
12880 p_app_name => G_APP_NAME,
12881 p_msg_name => G_UNEXPECTED_ERROR,
12882 p_token1 => G_SQLCODE_TOKEN,
12883 p_token1_value => SQLCODE,
12884 p_token2 => G_SQLERRM_TOKEN,
12885 p_token2_value => SQLERRM);
12886
12887 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
12888
12889 END;
12890
12891 -- Bug 5716089 rkuttiya end
12892
12893 --akrangan bug 5362977 starts
12894 -- Start of comments
12895 --
12896 -- Procedure Name : check_asset_category
12897 -- Description : Displays a warning message if the inventory item has
12898 -- changed during rebook and the asset category is not
12899 -- the default for the newly selected item.
12900 -- Business Rules :
12901 -- Parameters :
12902 -- Version : 1.0
12903 -- End of comments
12904
12905 PROCEDURE check_asset_category(
12906 x_return_status OUT NOCOPY VARCHAR2,
12907 p_chr_id IN NUMBER
12908 ) IS
12909
12910 --cursor to check if the contract is undergoing on-line rebook
12911 cursor l_chk_rbk_csr(p_chr_id IN NUMBER) is
12912 SELECT '!',
12913 chr.orig_system_id1
12914 FROM okc_k_headers_b CHR,
12915 okl_trx_contracts ktrx
12916 WHERE ktrx.khr_id_new = chr.id
12917 AND ktrx.tsu_code = 'ENTERED'
12918 AND ktrx.rbr_code is NOT NULL
12919 AND ktrx.tcn_type = 'TRBK'
12920 --rkuttiya added for 12.1.1 Multi GAAP
12921 and ktrx.representation_type = 'PRIMARY'
12922 --
12923 AND chr.id = p_chr_id
12924 AND chr.orig_system_source_code = 'OKL_REBOOK';
12925
12926 l_rbk_khr VARCHAR2(1) DEFAULT '?';
12927 l_orig_chr_id okc_k_headers_b.id%TYPE;
12928
12929 CURSOR l_fin_ast_cle_csr (p_chr_id IN NUMBER) IS
12930 SELECT cle.id,
12931 cle.orig_system_id1
12932 FROM okc_k_lines_b cle,
12933 okc_statuses_b sts
12934 WHERE cle.chr_id = p_chr_id
12935 AND cle.lse_id = 33 --Financial Asset Line
12936 and sts.code = cle.sts_code
12937 and sts.ste_code NOT IN ('HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
12938
12939 CURSOR l_sub_line_csr(p_chr_id IN NUMBER
12940 ,p_lty_code IN VARCHAR2
12941 ,p_cle_id IN NUMBER) IS
12942 SELECT cle.id,
12943 cim.object1_id1,
12944 cim.object1_id2
12945 FROM okc_k_lines_b cle,
12946 okc_k_items cim,
12947 okc_line_styles_b lse,
12948 okc_statuses_b sts
12949 WHERE cle.dnz_chr_id = p_chr_id
12950 AND cle.cle_id = p_cle_id
12951 AND cle.lse_id = lse.id
12952 AND lse.lty_code = p_lty_code
12953 AND cim.cle_id = cle.id
12954 AND cim.dnz_chr_id = cle.dnz_chr_id
12955 AND sts.code = cle.sts_code
12956 AND sts.ste_code NOT IN ('HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
12957
12958 l_orig_model_line_rec l_sub_line_csr%ROWTYPE;
12959 l_rbk_model_line_rec l_sub_line_csr%ROWTYPE;
12960 l_fa_line_rec l_sub_line_csr%ROWTYPE;
12961
12962 CURSOR l_inv_item_csr(p_inv_item_id IN NUMBER,
12963 p_org_id IN NUMBER) IS
12964 SELECT asset_category_id
12965 FROM mtl_system_items
12966 WHERE inventory_item_id = p_inv_item_id
12967 AND organization_id = p_org_id;
12968
12969 l_inv_item_rec l_inv_item_csr%ROWTYPE;
12970
12971 CURSOR l_fa_csr(p_asset_id IN NUMBER) IS
12972 SELECT asset_category_id,
12973 asset_number
12974 FROM fa_additions
12975 WHERE asset_id = p_asset_id;
12976
12977 l_fa_rec l_fa_csr%ROWTYPE;
12978
12979 BEGIN
12980
12981 x_return_status := OKL_API.G_RET_STS_SUCCESS;
12982
12983 --check for rebook contract
12984 l_rbk_khr := '?';
12985 OPEN l_chk_rbk_csr (p_chr_id => p_chr_id);
12986 FETCH l_chk_rbk_csr INTO l_rbk_khr,l_orig_chr_id;
12987 CLOSE l_chk_rbk_csr;
12988
12989 If l_rbk_khr = '!' Then
12990
12991 For l_fin_ast_cle_rec In l_fin_ast_cle_csr(p_chr_id => p_chr_id)
12992 Loop
12993
12994 OPEN l_sub_line_csr(p_chr_id => p_chr_id,
12995 p_lty_code => 'ITEM',
12996 p_cle_id => l_fin_ast_cle_rec.id);
12997 FETCH l_sub_line_csr INTO l_rbk_model_line_rec;
12998 CLOSE l_sub_line_csr;
12999
13000 OPEN l_sub_line_csr(p_chr_id => l_orig_chr_id,
13001 p_lty_code => 'ITEM',
13002 p_cle_id => l_fin_ast_cle_rec.orig_system_id1);
13003 FETCH l_sub_line_csr INTO l_orig_model_line_rec;
13004 CLOSE l_sub_line_csr;
13005
13006 -- Inventory Item has been changed during Rebook
13007 IF (l_orig_model_line_rec.object1_id1 <> l_rbk_model_line_rec.object1_id1) THEN
13008
13009 OPEN l_sub_line_csr(p_chr_id => l_orig_chr_id,
13010 p_lty_code => 'FIXED_ASSET',
13011 p_cle_id => l_fin_ast_cle_rec.orig_system_id1);
13012 FETCH l_sub_line_csr INTO l_fa_line_rec;
13013 CLOSE l_sub_line_csr;
13014
13015 OPEN l_inv_item_csr(p_inv_item_id => TO_NUMBER(l_rbk_model_line_rec.object1_id1),
13016 p_org_id => TO_NUMBER(l_rbk_model_line_rec.object1_id2));
13017 FETCH l_inv_item_csr INTO l_inv_item_rec;
13018 CLOSE l_inv_item_csr;
13019
13020 OPEN l_fa_csr(p_asset_id => TO_NUMBER(l_fa_line_rec.object1_id1));
13021 FETCH l_fa_csr INTO l_fa_rec;
13022 CLOSE l_fa_csr;
13023
13024 -- Existing Asset Category is different from the Default Asset Category
13025 -- for the new Inventory Item.
13026 IF (l_inv_item_rec.asset_category_id IS NOT NULL AND
13027 l_inv_item_rec.asset_category_id <> l_fa_rec.asset_category_id) THEN
13028
13029 OKL_API.set_message(
13030 p_app_name => G_APP_NAME,
13031 p_msg_name => 'OKL_QA_DFLT_ASSET_CATEGORY',
13032 p_token1 => 'ASSET_NUMBER',
13033 p_token1_value => l_fa_rec.asset_number);
13034 x_return_status := OKL_API.G_RET_STS_ERROR;
13035
13036 END IF;
13037 END IF;
13038 End Loop;
13039 End If;
13040
13041 IF x_return_status = OKL_API.G_RET_STS_SUCCESS THEN
13042 OKL_API.set_message(
13043 p_app_name => G_APP_NAME,
13044 p_msg_name => G_QA_SUCCESS);
13045 END IF;
13046
13047 EXCEPTION
13048 WHEN OTHERS THEN
13049 -- store SQL error message on message stack
13050 OKL_API.SET_MESSAGE(
13051 p_app_name => G_APP_NAME,
13052 p_msg_name => G_UNEXPECTED_ERROR,
13053 p_token1 => G_SQLCODE_TOKEN,
13054 p_token1_value => SQLCODE,
13055 p_token2 => G_SQLERRM_TOKEN,
13056 p_token2_value => SQLERRM);
13057
13058 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
13059
13060 END check_asset_category;
13061
13062 --akrangan bug 5362977 ends
13063
13064 -- rviriyal Bug# 5982201 Start
13065 -- Start of comments
13066 --
13067 -- Procedure Name : check_vendor_active
13068 -- Description : Displays an error message if the vendor on the contract is
13069 -- not active on start date of the contract
13070 -- Business Rules :
13071 -- Parameters :
13072 -- Version : 1.0
13073 -- End of comments
13074 procedure check_vendor_active(
13075 x_return_status OUT NOCOPY VARCHAR2,
13076 p_chr_id IN NUMBER) AS
13077
13078 cnt_start_date DATE;
13079 cnt_end_date DATE;
13080 vend_start_date DATE;
13081 vend_end_date DATE;
13082 vend_name varchar(240);
13083
13084 begin
13085 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
13086
13087 open contract_dtls(p_chr_id);
13088 fetch contract_dtls into cnt_start_date, cnt_end_date;
13089 close contract_dtls;
13090
13091 for vendor_rec in party_id_csr('OKL_VENDOR', p_chr_id)
13092 loop
13093 open vend_dtls(vendor_rec.OBJECT1_ID1);
13094 fetch vend_dtls into vend_start_date, vend_end_date, vend_name;
13095 close vend_dtls;
13096
13097 --bug 7213709 start
13098 If vend_end_date is not null then
13099 if (trunc(vend_end_date)>=trunc(cnt_start_date)
13100 and trunc(vend_end_date)<=trunc(cnt_end_date) )
13101 or (trunc(vend_end_date)<trunc(cnt_start_date)) then
13102 Okl_Api.set_message(
13103 p_app_name => G_APP_NAME,
13104 p_msg_name => 'OKL_QA_VNDR_START_DT',
13105 p_token1 => 'NAME',
13106 p_token1_value => vend_name);
13107 x_return_status := Okl_Api.G_RET_STS_ERROR;
13108 end if;
13109 end if;
13110
13111 /*
13112 if( trunc(cnt_start_date) < trunc(vend_start_date) OR
13113 (trunc(cnt_start_date) >= trunc(vend_start_date) AND
13114 trunc(cnt_start_date) > trunc(vend_end_date))
13115 )THEN
13116 Okl_Api.set_message(
13117 p_app_name => G_APP_NAME,
13118 p_msg_name => 'OKL_QA_VNDR_START_DT',
13119 p_token1 => 'NAME',
13120 p_token1_value => vend_name);
13121 x_return_status := Okl_Api.G_RET_STS_ERROR;
13122 end if;
13123 */
13124 --bug 7213709 end
13125
13126 end loop;
13127
13128 IF x_return_status = OKL_API.G_RET_STS_SUCCESS THEN
13129 OKL_API.set_message(
13130 p_app_name => G_APP_NAME,
13131 p_msg_name => G_QA_SUCCESS);
13132 END IF;
13133
13134 EXCEPTION
13135 WHEN OTHERS THEN
13136 -- store SQL error message on message stack
13137 OKL_API.SET_MESSAGE(
13138 p_app_name => G_APP_NAME,
13139 p_msg_name => G_UNEXPECTED_ERROR,
13140 p_token1 => G_SQLCODE_TOKEN,
13141 p_token1_value => SQLCODE,
13142 p_token2 => G_SQLERRM_TOKEN,
13143 p_token2_value => SQLERRM);
13144
13145 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
13146 End check_vendor_active;
13147
13148 -- Start of comments
13149 --
13150 -- Procedure Name : check_vendor_end_date
13151 -- Description : Displays a warning message if the vendor on the contract
13152 -- becomes inactive before the end date of the contract
13153 -- Business Rules :
13154 -- Parameters :
13155 -- Version : 1.0
13156 -- End of comments
13157 procedure check_vendor_end_date(
13158 x_return_status OUT NOCOPY VARCHAR2,
13159 p_chr_id IN NUMBER) AS
13160
13161 cnt_start_date DATE;
13162 cnt_end_date DATE;
13163 vend_start_date DATE;
13164 vend_end_date DATE;
13165 vend_name varchar(240);
13166
13167 begin
13168
13169 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
13170 open contract_dtls(p_chr_id);
13171 fetch contract_dtls into cnt_start_date, cnt_end_date;
13172 close contract_dtls;
13173
13174 for vendor_rec in party_id_csr('OKL_VENDOR', p_chr_id)
13175 loop
13176 open vend_dtls(vendor_rec.OBJECT1_ID1);
13177 fetch vend_dtls into vend_start_date, vend_end_date, vend_name;
13178 close vend_dtls;
13179
13180 if( trunc(cnt_start_date) >= trunc(vend_start_date) AND
13181 trunc(cnt_start_date) <= trunc(vend_end_date) AND
13182 trunc(cnt_end_date) > trunc(vend_end_date)
13183 )THEN
13184
13185 Okl_Api.set_message(
13186 p_app_name => G_APP_NAME,
13187 p_msg_name => 'OKL_QA_VNDR_END_DT',
13188 p_token1 => 'NAME',
13189 p_token1_value => vend_name,
13190 p_token2 => 'VNDR_END_DT',
13191 p_token2_value => to_char(vend_end_date));
13192 x_return_status := Okl_Api.G_RET_STS_ERROR;
13193
13194
13195 end if;
13196
13197 end loop;
13198
13199 IF x_return_status = OKL_API.G_RET_STS_SUCCESS THEN
13200 OKL_API.set_message(
13201 p_app_name => G_APP_NAME,
13202 p_msg_name => G_QA_SUCCESS);
13203 END IF;
13204
13205 EXCEPTION
13206 WHEN OTHERS THEN
13207 -- store SQL error message on message stack
13208 OKL_API.SET_MESSAGE(
13209 p_app_name => G_APP_NAME,
13210 p_msg_name => G_UNEXPECTED_ERROR,
13211 p_token1 => G_SQLCODE_TOKEN,
13212 p_token1_value => SQLCODE,
13213 p_token2 => G_SQLERRM_TOKEN,
13214 p_token2_value => SQLERRM);
13215
13216 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
13217 End check_vendor_end_date;
13218
13219 -- Start of comments
13220 --
13221 -- Procedure Name : check_cust_active
13222 -- Description : Displays an error message if customer and/or customer account
13223 -- selected on the contract are inactive.
13224 -- Business Rules :
13225 -- Parameters :
13226 -- Version : 1.0
13227 -- End of comments
13228 procedure check_cust_active(
13229 x_return_status OUT NOCOPY VARCHAR2,
13230 p_chr_id IN NUMBER) AS
13231
13232 cursor cust_dtls(OBJECT1_ID1 NUMBER) is
13233 select STATUS, name
13234 from OKX_PARTIES_V
13235 where Id1 = OBJECT1_ID1;
13236
13237 cust_status varchar(1);
13238 cust_name varchar(240);
13239
13240 cursor cust_acct_dtls(p_chr_id NUMBER) is
13241 select STATUS, DESCRIPTION
13242 from OKX_CUSTOMER_ACCOUNTS_V
13243 where Id1 = (select cust_acct_id from okc_k_headers_b where id =p_chr_id);
13244
13245 cust_acct_status varchar(1);
13246 cust_acct_desc varchar(30);
13247
13248 begin
13249 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
13250
13251 for party_rec in party_id_csr('LESSEE', p_chr_id)
13252 loop
13253 open cust_dtls(party_rec.OBJECT1_ID1);
13254 fetch cust_dtls into cust_status, cust_name;
13255 close cust_dtls;
13256
13257 if( cust_status is not null AND cust_status <> 'A')THEN
13258 Okl_Api.set_message(
13259 p_app_name => G_APP_NAME,
13260 p_msg_name => 'OKL_QA_CUST_NOT_ACTIVE'
13261 );
13262 x_return_status := Okl_Api.G_RET_STS_ERROR;
13263
13264 end if;
13265
13266 end loop;
13267 IF x_return_status = OKL_API.G_RET_STS_SUCCESS THEN
13268 open cust_acct_dtls(p_chr_id);
13269 fetch cust_acct_dtls into cust_acct_status, cust_acct_desc;
13270 close cust_acct_dtls;
13271
13272 if(cust_acct_status is not null and cust_acct_status <> 'A')THEN
13273
13274 Okl_Api.set_message(
13275 p_app_name => G_APP_NAME,
13276 p_msg_name => 'OKL_QA_CUST_ACCT_INACTIVE',
13277 p_token1 => 'ACCT',
13278 p_token1_value => cust_acct_desc
13279 );
13280 x_return_status := Okl_Api.G_RET_STS_ERROR;
13281
13282
13283 end if;
13284 END IF;
13285
13286 IF x_return_status = OKL_API.G_RET_STS_SUCCESS THEN
13287 OKL_API.set_message(
13288 p_app_name => G_APP_NAME,
13289 p_msg_name => G_QA_SUCCESS);
13290 END IF;
13291
13292 EXCEPTION
13293 WHEN OTHERS THEN
13294 -- store SQL error message on message stack
13295 OKL_API.SET_MESSAGE(
13296 p_app_name => G_APP_NAME,
13297 p_msg_name => G_UNEXPECTED_ERROR,
13298 p_token1 => G_SQLCODE_TOKEN,
13299 p_token1_value => SQLCODE,
13300 p_token2 => G_SQLERRM_TOKEN,
13301 p_token2_value => SQLERRM);
13302
13303 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
13304 End check_cust_active;
13305 --rviriyal Bug# 5982201 End
13306 -- Start of comments
13307 --
13308 -- Procedure Name : check_book_class_cmptblty
13309 -- Description : Bug 6711559 ,
13310 -- Raise Warning Message if the Present Value of rent is
13311 -- the same or higher than the Asset Comparison amount.
13312 -- The message should read "Present Value of Rent is 90% or
13313 -- higher than Fair Value of Assets. This is inconsistent
13314 -- with Operating Lease Product ZZZ".
13315 -- Business Rules :
13316 -- Parameters :
13317 -- Version : 1.0
13318 -- End of comments
13319
13320 PROCEDURE check_book_class_cmptblty(
13321 x_return_status OUT NOCOPY VARCHAR2,
13322 p_chr_id IN NUMBER) IS
13323
13324 l_hdr l_hdr_csr%ROWTYPE;
13325 x_msg_count NUMBER;
13326 x_msg_data VARCHAR2(1000);
13327 x_total_pv_rent NUMBER;
13328 x_fair_value_assets NUMBER;
13329
13330
13331 CURSOR chk_product_status (p_chr_id IN NUMBER) IS
13332 SELECT
13333 pdt.name
13334 FROM okl_products_v pdt
13335 ,okl_k_headers_v khr
13336 ,okc_k_headers_b CHR
13337 WHERE 1=1
13338 AND khr.id = p_chr_id
13339 AND pdt_id = pdt.id
13340 AND khr.id = CHR.id;
13341
13342 l_product_name okl_products_v.NAME%TYPE;
13343 l_lne l_lne_csr%ROWTYPE;
13344
13345 BEGIN
13346 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
13347
13348 OPEN l_hdr_csr(p_chr_id);
13349 FETCH l_hdr_csr INTO l_hdr;
13350 IF l_hdr_csr%NOTFOUND THEN
13351 CLOSE l_hdr_csr;
13352 RAISE G_EXCEPTION_HALT_VALIDATION;
13353 END IF;
13354 CLOSE l_hdr_csr;
13355
13356 --Bug# 13002041: Perform checks only for Leases
13357 IF (l_hdr.DEAL_TYPE IN ('LEASEOP','LEASEDF','LEASEST')) THEN
13358
13359 OPEN chk_product_status (p_chr_id);
13360 FETCH chk_product_status INTO l_product_name;
13361 CLOSE chk_product_status;
13362
13363 OPEN l_lne_csr('FREE_FORM1', p_chr_id);
13364 FETCH l_lne_csr INTO l_lne;
13365 IF ( l_lne_csr%NOTFOUND ) THEN
13366 Okl_Api.set_message(
13367 p_app_name => G_APP_NAME,
13368 p_msg_name => 'OKL_QA_NO_ASSETS');
13369 -- notify caller of an error
13370 x_return_status := Okl_Api.G_RET_STS_ERROR;
13371
13372 ELSE
13373
13374 OKL_GENERATE_PV_RENT_PVT.generate_total_pv_rent
13375 (p_api_version => 1.0
13376 ,p_init_msg_list => Okl_Api.G_FALSE
13377 ,p_khr_id => p_chr_id
13378 ,x_total_pv_rent => x_total_pv_rent
13379 ,x_return_status => x_return_status
13380 ,x_msg_count => x_msg_count
13381 ,x_msg_data => x_msg_data
13382 );
13383
13384 IF x_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
13385 RAISE G_EXCEPTION_HALT_VALIDATION;
13386 END IF;
13387
13388 OKL_EXECUTE_FORMULA_PUB.EXECUTE(p_api_version =>1.0
13389 ,p_init_msg_list => Okl_Api.G_FALSE
13390 ,x_return_status =>x_return_status
13391 ,x_msg_count =>x_msg_count
13392 ,x_msg_data =>x_msg_data
13393 ,p_formula_name =>'FAIR_VALUE_ASSETS'
13394 ,p_contract_id =>p_chr_id
13395 ,x_value =>x_fair_value_assets);
13396
13397 IF x_return_status <> Okl_Api.G_RET_STS_SUCCESS THEN
13398 RAISE G_EXCEPTION_HALT_VALIDATION;
13399 END IF;
13400
13401 x_fair_value_assets := x_fair_value_assets * 0.9;
13402 IF (l_hdr.DEAL_TYPE = 'LEASEOP') THEN
13403 IF (x_total_pv_rent >= x_fair_value_assets) THEN
13404 Okl_Api.set_message(
13405 p_app_name => G_APP_NAME,
13406 p_msg_name => 'OKL_QA_OP_FASB_MSG',
13407 p_token1 => 'PRODUCT_NAME',
13408 p_token1_value => l_product_name);
13409
13410 x_return_status := Okl_Api.G_RET_STS_ERROR;
13411
13412 END IF;
13413 ELSIF (l_hdr.DEAL_TYPE IN ('LEASEDF','LEASEST')) THEN
13414 IF (x_total_pv_rent < x_fair_value_assets) THEN
13415
13416 Okl_Api.set_message(
13417 p_app_name => G_APP_NAME,
13418 p_msg_name => 'OKL_QA_DF_FASB_MSG',
13419 p_token1 => 'PRODUCT_NAME',
13420 p_token1_value => l_product_name);
13421
13422 x_return_status := Okl_Api.G_RET_STS_ERROR;
13423
13424 END IF;
13425 END IF;
13426 END IF;
13427 CLOSE l_lne_csr;
13428
13429 END IF;
13430 --Bug# 13002041
13431
13432 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
13433 Okl_Api.set_message(
13434 p_app_name => G_APP_NAME,
13435 p_msg_name => G_QA_SUCCESS);
13436 END IF;
13437
13438 EXCEPTION
13439
13440 WHEN G_EXCEPTION_HALT_VALIDATION THEN
13441 x_return_status := Okl_Api.G_RET_STS_ERROR;
13442 IF l_hdr_csr%ISOPEN THEN
13443 CLOSE l_hdr_csr;
13444 END IF;
13445 IF l_lne_csr%ISOPEN THEN
13446 CLOSE l_lne_csr;
13447 END IF;
13448 IF chk_product_status%ISOPEN THEN
13449 CLOSE chk_product_status;
13450 END IF;
13451
13452 -- error reported, just exit from this process
13453 WHEN OTHERS THEN
13454 -- store SQL error message on message stack
13455 Okl_Api.SET_MESSAGE(
13456 p_app_name => G_APP_NAME,
13457 p_msg_name => G_UNEXPECTED_ERROR,
13458 p_token1 => G_SQLCODE_TOKEN,
13459 p_token1_value => SQLCODE,
13460 p_token2 => G_SQLERRM_TOKEN,
13461 p_token2_value => SQLERRM);
13462
13463 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
13464
13465 IF l_hdr_csr%ISOPEN THEN
13466 CLOSE l_hdr_csr;
13467 END IF;
13468 IF l_lne_csr%ISOPEN THEN
13469 CLOSE l_lne_csr;
13470 END IF;
13471 IF chk_product_status%ISOPEN THEN
13472 CLOSE chk_product_status;
13473 END IF;
13474
13475
13476 END check_book_class_cmptblty;
13477
13478 --Bug# 8652738: Start
13479 -- Start of comments
13480 --
13481 -- Procedure Name : check_exp_delivery_date
13482 -- Description : Displays a warning message if there is a difference
13483 -- between the expected delivery date and in service date
13484 -- for an asset.
13485 -- Business Rules :
13486 -- Parameters :
13487 -- Version : 1.0
13488 -- End of comments
13489
13490 PROCEDURE check_exp_delivery_date(
13491 x_return_status OUT NOCOPY VARCHAR2,
13492 p_chr_id IN NUMBER
13493 ) IS
13494
13495 CURSOR l_chr_csr(p_chr_id IN NUMBER) IS
13496 SELECT khr.expected_delivery_date
13497 FROM okl_k_headers khr
13498 WHERE khr.id = p_chr_id;
13499
13500 l_chr_rec l_chr_csr%ROWTYPE;
13501 /*Commented as part of Bug# 15992711
13502 CURSOR l_larles_csr(p_chr_id IN NUMBER) IS
13503 SELECT rul.rule_information1 release_asset_yn
13504 FROM okc_rules_b rul
13505 WHERE rul.dnz_chr_id = p_chr_id
13506 AND rul.rule_information_category = 'LARLES';*/
13507
13508 --Bug# 16681373: Added check to exclude re-lease assets from this validation
13509 CURSOR l_corp_book_csr(p_chr_id in number) is
13510 SELECT txl.id tal_id,
13511 txl.asset_number asset_number,
13512 txl.in_service_date in_service_date
13513 FROM okl_trx_assets trx,
13514 okl_txl_assets_b txl,
13515 okc_k_lines_b cleb_fa,
13516 okc_statuses_b sts,
13517 okc_k_lines_b cleb_fin,
13518 okl_k_lines kle_fin
13519 WHERE trx.id = txl.tas_id
13520 AND trx.tsu_code = 'ENTERED'
13521 AND trx.tas_type IN ('CFA','CRB')
13522 AND txl.kle_id = cleb_fa.id
13523 AND txl.tal_type IN ('CFA','CRB')
13524 AND cleb_fa.dnz_chr_id = p_chr_id
13525 AND cleb_fa.lse_id = 42
13526 AND sts.code = cleb_fa.sts_code
13527 AND sts.ste_code NOT IN ('HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED')
13528 AND cleb_fin.id = cleb_fa.cle_id
13529 AND kle_fin.id = cleb_fin.id
13530 AND NVL(kle_fin.re_lease_yn,'N') = 'N';
13531
13532 BEGIN
13533
13534 x_return_status := OKL_API.G_RET_STS_SUCCESS;
13535
13536 OPEN l_chr_csr(p_chr_id => p_chr_id);
13537 FETCH l_chr_csr INTO l_chr_rec;
13538 CLOSE l_chr_csr;
13539 /*Commented as part of Bug# 15992711
13540 OPEN l_larles_csr(p_chr_id => p_chr_id);
13541 FETCH l_larles_csr INTO l_larles_rec;
13542 CLOSE l_larles_csr;*/
13543
13544 --Bug# 16681373: Removed check for Re-lease assets as it will be done
13545 -- at line level in cursor l_corp_book_csr
13546 IF ( l_chr_rec.expected_delivery_date is NOT NULL ) THEN
13547
13548 FOR l_corp_book_rec In l_corp_book_csr(p_chr_id => p_chr_id)
13549 LOOP
13550
13551 IF (l_corp_book_rec.in_service_date IS NOT NULL AND
13552 l_chr_rec.expected_delivery_date <> l_corp_book_rec.in_service_date) THEN
13553
13554 OKL_API.set_message(
13555 p_app_name => G_APP_NAME,
13556 p_msg_name => 'OKL_QA_EXP_DELIVERY_DATE_WRN',
13557 p_token1 => 'ASSET_NUMBER',
13558 p_token1_value => l_corp_book_rec.asset_number);
13559
13560 x_return_status := OKL_API.G_RET_STS_ERROR;
13561
13562 END IF;
13563 END LOOP;
13564
13565 IF x_return_status = OKL_API.G_RET_STS_SUCCESS THEN
13566 OKL_API.set_message(
13567 p_app_name => G_APP_NAME,
13568 p_msg_name => G_QA_SUCCESS);
13569 END IF;
13570
13571 END IF;
13572
13573 EXCEPTION
13574 WHEN OTHERS THEN
13575 -- store SQL error message on message stack
13576 OKL_API.SET_MESSAGE(
13577 p_app_name => G_APP_NAME,
13578 p_msg_name => G_UNEXPECTED_ERROR,
13579 p_token1 => G_SQLCODE_TOKEN,
13580 p_token1_value => SQLCODE,
13581 p_token2 => G_SQLERRM_TOKEN,
13582 p_token2_value => SQLERRM);
13583
13584 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
13585
13586 END check_exp_delivery_date;
13587 --Bug# 8652738: End
13588
13589 --Bug# 5690875: Start
13590 -- Start of comments
13591 --
13592 -- Procedure Name : check_pre_funding
13593 -- Description : Displays a warning message if pre-funding amounts
13594 -- have not been allocated to assets and/or expenses
13595 -- Business Rules :
13596 -- Parameters :
13597 -- Version : 1.0
13598 -- End of comments
13599
13600 PROCEDURE check_pre_funding(
13601 x_return_status OUT NOCOPY VARCHAR2,
13602 p_chr_id IN NUMBER
13603 ) IS
13604
13605
13606 CURSOR l_pre_funding_csr(p_chr_id NUMBER)
13607 IS
13608 select NVL(SUM(trx.amount),0) amount
13609 from okl_trx_ap_invoices_b trx
13610 ,okl_txl_ap_inv_lns_all_b txl
13611 where trx.id = txl.tap_id
13612 and trx.funding_type_code = 'PREFUNDING'
13613 and trx.trx_status_code in ('APPROVED', 'PROCESSED')
13614 and txl.khr_id = p_chr_id;
13615
13616 l_pre_funding_rec l_pre_funding_csr%ROWTYPE;
13617
13618 BEGIN
13619
13620 x_return_status := OKL_API.G_RET_STS_SUCCESS;
13621
13622 OPEN l_pre_funding_csr(p_chr_id => p_chr_id);
13623 FETCH l_pre_funding_csr INTO l_pre_funding_rec;
13624 CLOSE l_pre_funding_csr;
13625
13626 IF (l_pre_funding_rec.amount <> 0) THEN
13627
13628 OKL_API.set_message(
13629 p_app_name => G_APP_NAME,
13630 p_msg_name => 'OKL_QA_PRE_FUNDING_WRN');
13631
13632 x_return_status := OKL_API.G_RET_STS_ERROR;
13633
13634 END IF;
13635
13636 IF x_return_status = OKL_API.G_RET_STS_SUCCESS THEN
13637 OKL_API.set_message(
13638 p_app_name => G_APP_NAME,
13639 p_msg_name => G_QA_SUCCESS);
13640 END IF;
13641
13642 EXCEPTION
13643 WHEN OTHERS THEN
13644 -- store SQL error message on message stack
13645 OKL_API.SET_MESSAGE(
13646 p_app_name => G_APP_NAME,
13647 p_msg_name => G_UNEXPECTED_ERROR,
13648 p_token1 => G_SQLCODE_TOKEN,
13649 p_token1_value => SQLCODE,
13650 p_token2 => G_SQLERRM_TOKEN,
13651 p_token2_value => SQLERRM);
13652
13653 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
13654
13655 END check_pre_funding;
13656 --Bug# 5690875: End
13657
13658 --Bug# 11787205: Start
13659 PROCEDURE check_fee_evergreen_bill(
13660 x_return_status OUT NOCOPY VARCHAR2,
13661 p_chr_id IN NUMBER
13662 ) IS
13663
13664 l_gen_streams VARCHAR2(1);
13665 l_return_status VARCHAR2(1);
13666 BEGIN
13667
13668 x_return_status := OKL_API.G_RET_STS_SUCCESS;
13669
13670 OKL_EVERGREEN_BILLING_PVT.CHECK_FEE_EVERGREEN_BILL(
13671 x_return_status => l_return_status,
13672 p_chr_id => p_chr_id,
13673 x_gen_streams => l_gen_streams);
13674
13675 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
13676 /*
13677 OKL_API.set_message(
13678 p_app_name => G_APP_NAME,
13679 p_msg_name => 'OKL_QA_BILL_EVG_WRN',
13680 p_token1 => 'FEE_LINE_NAME',
13681 p_token1_value => );
13682 */
13683 x_return_status := OKL_API.G_RET_STS_ERROR;
13684
13685 END IF;
13686
13687 IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
13688 x_return_status := OKL_API.G_RET_STS_SUCCESS;
13689 OKL_API.set_message(
13690 p_app_name => G_APP_NAME,
13691 p_msg_name => G_QA_SUCCESS);
13692 END IF;
13693
13694 EXCEPTION
13695 WHEN OTHERS THEN
13696 -- store SQL error message on message stack
13697 OKL_API.SET_MESSAGE(
13698 p_app_name => G_APP_NAME,
13699 p_msg_name => G_UNEXPECTED_ERROR,
13700 p_token1 => G_SQLCODE_TOKEN,
13701 p_token1_value => SQLCODE,
13702 p_token2 => G_SQLERRM_TOKEN,
13703 p_token2_value => SQLERRM);
13704
13705 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
13706 END CHECK_FEE_EVERGREEN_BILL;
13707
13708 --Bug# 11787205: End
13709
13710 --Bug# 12807203: Start
13711 -- Start of comments
13712 --
13713 -- Procedure Name : check_rbk_financed_cost
13714 -- Description : Displays an error message if financed cost changes
13715 -- during rebook and the rebook effective date is not
13716 -- equal to the contract line start date.
13717 -- Business Rules :
13718 -- Parameters :
13719 -- Version : 1.0
13720 -- End of comments
13721
13722 PROCEDURE check_rbk_financed_cost(
13723 x_return_status OUT NOCOPY VARCHAR2,
13724 p_chr_id IN NUMBER,
13725 p_upfront_tax_fee_yn IN VARCHAR2 DEFAULT 'N'
13726 ) IS
13727
13728 CURSOR l_chk_rbk_csr(p_chr_id IN NUMBER) is
13729 SELECT date_transaction_occurred
13730 FROM okc_k_headers_b chr,
13731 okl_trx_contracts ktrx
13732 WHERE ktrx.khr_id_new = chr.id
13733 AND ktrx.tsu_code = 'ENTERED'
13734 AND ktrx.rbr_code is NOT NULL
13735 AND ktrx.tcn_type = 'TRBK'
13736 AND ktrx.representation_type = 'PRIMARY'
13737 AND chr.id = p_chr_id
13738 AND chr.orig_system_source_code = 'OKL_REBOOK';
13739
13740 l_chk_rbk_rec l_chk_rbk_csr%ROWTYPE;
13741
13742 CURSOR l_sys_acct_opts_csr IS
13743 SELECT NVL(amort_inc_adj_rev_dt_yn,'N') amort_inc_adj_rev_dt_yn
13744 FROM okl_sys_acct_opts;
13745
13746 l_sys_acct_opts_rec l_sys_acct_opts_csr%ROWTYPE;
13747
13748 CURSOR l_fin_asset_csr(p_chr_id in number) is
13749 SELECT cleb_rbk.id,
13750 clet_rbk.name,
13751 cleb_rbk.start_date,
13752 kle_rbk.capital_amount new_capital_amount,
13753 kle_orig.capital_amount orig_capital_amount
13754 FROM okc_k_lines_b cleb_rbk,
13755 okc_k_lines_tl clet_rbk,
13756 okl_k_lines kle_rbk,
13757 okl_k_lines kle_orig,
13758 okc_statuses_b sts
13759 WHERE cleb_rbk.chr_id = p_chr_id
13760 AND cleb_rbk.dnz_chr_id = p_chr_id
13761 AND cleb_rbk.lse_id = 33
13762 AND kle_rbk.id = cleb_rbk.id
13763 AND clet_rbk.id = cleb_rbk.id
13764 AND clet_rbk.language = USERENV('LANG')
13765 AND kle_orig.id = cleb_rbk.orig_system_id1
13766 AND sts.code = cleb_rbk.sts_code
13767 AND sts.ste_code NOT IN ('HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
13768
13769 CURSOR l_fin_fee_csr(p_chr_id in number) is
13770 SELECT cleb_rbk.id,
13771 clet_rbk.name,
13772 cleb_rbk.start_date,
13773 kle_rbk.amount new_amount,
13774 kle_orig.amount orig_amount
13775 FROM okc_k_lines_b cleb_rbk,
13776 okc_k_lines_tl clet_rbk,
13777 okl_k_lines kle_rbk,
13778 okl_k_lines kle_orig,
13779 okc_statuses_b sts
13780 WHERE cleb_rbk.chr_id = p_chr_id
13781 AND cleb_rbk.dnz_chr_id = p_chr_id
13782 AND cleb_rbk.lse_id = 52
13783 AND kle_rbk.id = cleb_rbk.id
13784 AND kle_rbk.fee_type = 'FINANCED'
13785 AND clet_rbk.id = cleb_rbk.id
13786 AND clet_rbk.language = USERENV('LANG')
13787 AND kle_orig.id = cleb_rbk.orig_system_id1
13788 AND sts.code = cleb_rbk.sts_code
13789 AND sts.ste_code NOT IN ('HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED')
13790 UNION
13791 SELECT cleb_sub_rbk.id,
13792 clet_rbk.name,
13793 cleb_sub_rbk.start_date,
13794 kle_sub_rbk.amount new_amount,
13795 kle_sub_orig.amount orig_amount
13796 FROM okc_k_lines_b cleb_rbk,
13797 okc_k_lines_tl clet_rbk,
13798 okl_k_lines kle_rbk,
13799 okc_k_lines_b cleb_sub_rbk,
13800 okl_k_lines kle_sub_rbk,
13801 okl_k_lines kle_sub_orig,
13802 okc_statuses_b sts
13803 WHERE cleb_rbk.chr_id = p_chr_id
13804 AND cleb_rbk.dnz_chr_id = p_chr_id
13805 AND cleb_rbk.lse_id = 52
13806 AND kle_rbk.id = cleb_rbk.id
13807 AND kle_rbk.fee_type = 'FINANCED'
13808 AND clet_rbk.id = cleb_rbk.id
13809 AND clet_rbk.language = USERENV('LANG')
13810 AND cleb_sub_rbk.cle_id = cleb_rbk.id
13811 AND cleb_sub_rbk.dnz_chr_id = cleb_rbk.dnz_chr_id
13812 AND kle_sub_rbk.id = cleb_sub_rbk.id
13813 AND kle_sub_orig.id = cleb_sub_rbk.orig_system_id1
13814 AND sts.code = cleb_sub_rbk.sts_code
13815 AND sts.ste_code NOT IN ('HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
13816
13817 BEGIN
13818
13819 x_return_status := OKL_API.G_RET_STS_SUCCESS;
13820
13821 -- Check if contract is undergoing online rebook and fetch rebook effective date
13822 l_chk_rbk_rec := NULL;
13823 OPEN l_chk_rbk_csr(p_chr_id => p_chr_id);
13824 FETCH l_chk_rbk_csr INTO l_chk_rbk_rec;
13825 CLOSE l_chk_rbk_csr;
13826
13827 IF l_chk_rbk_rec.date_transaction_occurred IS NOT NULL THEN
13828
13829 -- Check if Effective Dated Rebook system option is turned on
13830 l_sys_acct_opts_rec := NULL;
13831 OPEN l_sys_acct_opts_csr;
13832 FETCH l_sys_acct_opts_csr INTO l_sys_acct_opts_rec;
13833 CLOSE l_sys_acct_opts_csr;
13834
13835 IF NVL(l_sys_acct_opts_rec.amort_inc_adj_rev_dt_yn,'N') = 'Y' THEN
13836
13837 FOR l_fin_asset_rec IN l_fin_asset_csr(p_chr_id => p_chr_id) LOOP
13838
13839 IF ( l_fin_asset_rec.new_capital_amount <> l_fin_asset_rec.orig_capital_amount )
13840 AND ( l_chk_rbk_rec.date_transaction_occurred <> l_fin_asset_rec.start_date ) THEN
13841
13842 OKL_API.set_message(
13843 p_app_name => G_APP_NAME,
13844 p_msg_name => 'OKL_QA_FIN_COST_ERR',
13845 p_token1 => 'NAME',
13846 p_token1_value => l_fin_asset_rec.name);
13847
13848 x_return_status := OKL_API.G_RET_STS_ERROR;
13849
13850 END IF;
13851 END LOOP;
13852
13853 FOR l_fin_fee_rec IN l_fin_fee_csr(p_chr_id => p_chr_id) LOOP
13854
13855 IF ( l_fin_fee_rec.new_amount <> l_fin_fee_rec.orig_amount )
13856 AND ( l_chk_rbk_rec.date_transaction_occurred <> l_fin_fee_rec.start_date ) THEN
13857
13858 OKL_API.set_message(
13859 p_app_name => G_APP_NAME,
13860 p_msg_name => 'OKL_QA_FIN_COST_ERR',
13861 p_token1 => 'NAME',
13862 p_token1_value => l_fin_fee_rec.name);
13863
13864 x_return_status := OKL_API.G_RET_STS_ERROR;
13865
13866 END IF;
13867 END LOOP;
13868
13869 END IF; -- Check Effective Dated Rebook
13870
13871 END IF; -- Check Online Rebook
13872
13873 IF (x_return_status = OKL_API.G_RET_STS_SUCCESS AND p_upfront_tax_fee_yn = 'N') THEN
13874 OKL_API.set_message(
13875 p_app_name => G_APP_NAME,
13876 p_msg_name => G_QA_SUCCESS);
13877 END IF;
13878
13879 EXCEPTION
13880 WHEN OTHERS THEN
13881 -- store SQL error message on message stack
13882 OKL_API.SET_MESSAGE(
13883 p_app_name => G_APP_NAME,
13884 p_msg_name => G_UNEXPECTED_ERROR,
13885 p_token1 => G_SQLCODE_TOKEN,
13886 p_token1_value => SQLCODE,
13887 p_token2 => G_SQLERRM_TOKEN,
13888 p_token2_value => SQLERRM);
13889
13890 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
13891
13892 END check_rbk_financed_cost;
13893 --Bug# 12807203: End
13894
13895 --Bug# 12807203: Start
13896 -- Start of comments
13897 --
13898 -- Procedure Name : check_rbk_pymt_structure
13899 -- Description : Displays an error message if payment frequency,
13900 -- structure, Advance/Arrears changes during
13901 -- rebook and the rebook effective date is not
13902 -- equal to the contract line start date.
13903 -- Business Rules :
13904 -- Parameters :
13905 -- Version : 1.0
13906 -- End of comments
13907
13908 PROCEDURE check_rbk_pymt_structure(
13909 x_return_status OUT NOCOPY VARCHAR2,
13910 p_chr_id IN NUMBER,
13911 p_upfront_tax_fee_yn IN VARCHAR2 DEFAULT 'N'
13912 ) IS
13913
13914 CURSOR l_chk_rbk_csr(p_chr_id IN NUMBER) is
13915 SELECT date_transaction_occurred,
13916 chr.orig_system_id1 orig_chr_id
13917 FROM okc_k_headers_b chr,
13918 okl_trx_contracts ktrx
13919 WHERE ktrx.khr_id_new = chr.id
13920 AND ktrx.tsu_code = 'ENTERED'
13921 AND ktrx.rbr_code is NOT NULL
13922 AND ktrx.tcn_type = 'TRBK'
13923 AND ktrx.representation_type = 'PRIMARY'
13924 AND chr.id = p_chr_id
13925 AND chr.orig_system_source_code = 'OKL_REBOOK';
13926
13927 l_chk_rbk_rec l_chk_rbk_csr%ROWTYPE;
13928
13929 CURSOR l_sys_acct_opts_csr IS
13930 SELECT NVL(amort_inc_adj_rev_dt_yn,'N') amort_inc_adj_rev_dt_yn
13931 FROM okl_sys_acct_opts;
13932
13933 l_sys_acct_opts_rec l_sys_acct_opts_csr%ROWTYPE;
13934
13935 CURSOR l_payment_hdr_csr
13936 (p_rbk_chr_id IN NUMBER,
13937 p_orig_chr_id IN NUMBER,
13938 p_orig_cle_id IN NUMBER,
13939 p_rbk_cle_id IN NUMBER) IS
13940 SELECT slh_rbk.id rbk_slh_id,
13941 rgp_rbk.id rbk_rgp_id,
13942 slh_orig.id orig_slh_id,
13943 rgp_orig.id orig_rgp_id
13944 FROM okc_rules_b slh_rbk,
13945 okc_rule_groups_b rgp_rbk,
13946 okc_rules_b slh_orig,
13947 okc_rule_groups_b rgp_orig
13948 WHERE rgp_rbk.dnz_chr_id = p_rbk_chr_id
13949 AND rgp_rbk.cle_id = p_rbk_cle_id
13950 AND rgp_rbk.rgd_code = 'LALEVL'
13951 AND slh_rbk.rgp_id = rgp_rbk.id
13952 AND slh_rbk.rule_information_category = 'LASLH'
13953 AND rgp_orig.dnz_chr_id = p_orig_chr_id
13954 AND rgp_orig.cle_id = p_orig_cle_id
13955 AND rgp_orig.rgd_code = 'LALEVL'
13956 AND slh_orig.rgp_id = rgp_orig.id
13957 AND slh_orig.rule_information_category = 'LASLH'
13958 AND slh_rbk.object1_id1 = slh_orig.object1_id1;
13959
13960 CURSOR l_payment_dtl_csr
13961 (p_rgp_id IN NUMBER,
13962 p_slh_id IN NUMBER) IS
13963 SELECT sll.object1_id1 frequency,
13964 NVL(sll.rule_information10,'N') arrears_yn,
13965 sll.rule_information5 structure
13966 FROM okc_rules_b sll
13967 WHERE sll.rgp_id = p_rgp_id
13968 AND sll.object2_id1 = p_slh_id
13969 AND sll.rule_information_category = 'LASLL'
13970 AND ROWNUM = 1;
13971
13972 l_rbk_payment_dtl_rec l_payment_dtl_csr%ROWTYPE;
13973 l_orig_payment_dtl_rec l_payment_dtl_csr%ROWTYPE;
13974
13975 CURSOR l_fin_asset_csr(p_chr_id in number) is
13976 SELECT cleb_rbk.id rbk_cle_id,
13977 cleb_rbk.orig_system_id1 orig_cle_id,
13978 clet_rbk.name,
13979 cleb_rbk.start_date
13980 FROM okc_k_lines_b cleb_rbk,
13981 okc_k_lines_tl clet_rbk,
13982 okc_statuses_b sts
13983 WHERE cleb_rbk.chr_id = p_chr_id
13984 AND cleb_rbk.dnz_chr_id = p_chr_id
13985 AND cleb_rbk.lse_id = 33
13986 AND clet_rbk.id = cleb_rbk.id
13987 AND clet_rbk.language = USERENV('LANG')
13988 AND cleb_rbk.orig_system_id1 IS NOT NULL
13989 AND sts.code = cleb_rbk.sts_code
13990 AND sts.ste_code NOT IN ('HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
13991
13992 CURSOR l_fin_roll_fee_csr(p_chr_id in number) is
13993 SELECT cleb_rbk.id rbk_cle_id,
13994 cleb_rbk.orig_system_id1 orig_cle_id,
13995 clet_rbk.name,
13996 cleb_rbk.start_date
13997 FROM okc_k_lines_b cleb_rbk,
13998 okc_k_lines_tl clet_rbk,
13999 okl_k_lines kle_rbk,
14000 okc_statuses_b sts
14001 WHERE cleb_rbk.chr_id = p_chr_id
14002 AND cleb_rbk.dnz_chr_id = p_chr_id
14003 AND cleb_rbk.lse_id = 52
14004 AND kle_rbk.id = cleb_rbk.id
14005 AND kle_rbk.fee_type IN ('FINANCED','ROLLOVER')
14006 AND clet_rbk.id = cleb_rbk.id
14007 AND clet_rbk.language = USERENV('LANG')
14008 AND cleb_rbk.orig_system_id1 IS NOT NULL
14009 AND sts.code = cleb_rbk.sts_code
14010 AND sts.ste_code NOT IN ('HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED')
14011 UNION
14012 SELECT cleb_sub_rbk.id rbk_cle_id,
14013 cleb_sub_rbk.orig_system_id1 orig_cle_id,
14014 clet_rbk.name,
14015 cleb_sub_rbk.start_date
14016 FROM okc_k_lines_b cleb_rbk,
14017 okc_k_lines_tl clet_rbk,
14018 okl_k_lines kle_rbk,
14019 okc_k_lines_b cleb_sub_rbk,
14020 okc_statuses_b sts
14021 WHERE cleb_rbk.chr_id = p_chr_id
14022 AND cleb_rbk.dnz_chr_id = p_chr_id
14023 AND cleb_rbk.lse_id = 52
14024 AND kle_rbk.id = cleb_rbk.id
14025 AND kle_rbk.fee_type IN ('FINANCED','ROLLOVER')
14026 AND clet_rbk.id = cleb_rbk.id
14027 AND clet_rbk.language = USERENV('LANG')
14028 AND cleb_sub_rbk.cle_id = cleb_rbk.id
14029 AND cleb_sub_rbk.dnz_chr_id = cleb_rbk.dnz_chr_id
14030 AND cleb_sub_rbk.orig_system_id1 IS NOT NULL
14031 AND sts.code = cleb_sub_rbk.sts_code
14032 AND sts.ste_code NOT IN ('HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
14033
14034 BEGIN
14035
14036 x_return_status := OKL_API.G_RET_STS_SUCCESS;
14037
14038 -- Check if contract is undergoing online rebook and fetch rebook effective date
14039 l_chk_rbk_rec := NULL;
14040 OPEN l_chk_rbk_csr(p_chr_id => p_chr_id);
14041 FETCH l_chk_rbk_csr INTO l_chk_rbk_rec;
14042 CLOSE l_chk_rbk_csr;
14043
14044 IF l_chk_rbk_rec.date_transaction_occurred IS NOT NULL THEN
14045
14046 -- Check if Effective Dated Rebook system option is turned on
14047 l_sys_acct_opts_rec.amort_inc_adj_rev_dt_yn := NULL;
14048 OPEN l_sys_acct_opts_csr;
14049 FETCH l_sys_acct_opts_csr INTO l_sys_acct_opts_rec;
14050 CLOSE l_sys_acct_opts_csr;
14051
14052 IF NVL(l_sys_acct_opts_rec.amort_inc_adj_rev_dt_yn,'N') = 'Y' THEN
14053
14054 FOR l_fin_asset_rec IN l_fin_asset_csr(p_chr_id => p_chr_id) LOOP
14055
14056 FOR l_payment_hdr_rec IN l_payment_hdr_csr(p_rbk_chr_id => p_chr_id,
14057 p_orig_chr_id => l_chk_rbk_rec.orig_chr_id,
14058 p_orig_cle_id => l_fin_asset_rec.orig_cle_id,
14059 p_rbk_cle_id => l_fin_asset_rec.rbk_cle_id) LOOP
14060
14061 l_orig_payment_dtl_rec := NULL;
14062 OPEN l_payment_dtl_csr(p_rgp_id => l_payment_hdr_rec.orig_rgp_id,
14063 p_slh_id => l_payment_hdr_rec.orig_slh_id);
14064 FETCH l_payment_dtl_csr INTO l_orig_payment_dtl_rec;
14065 CLOSE l_payment_dtl_csr;
14066
14067 l_rbk_payment_dtl_rec := NULL;
14068 OPEN l_payment_dtl_csr(p_rgp_id => l_payment_hdr_rec.rbk_rgp_id,
14069 p_slh_id => l_payment_hdr_rec.rbk_slh_id);
14070 FETCH l_payment_dtl_csr INTO l_rbk_payment_dtl_rec;
14071 CLOSE l_payment_dtl_csr;
14072
14073 IF (( l_orig_payment_dtl_rec.frequency <> l_rbk_payment_dtl_rec.frequency )
14074 OR ( l_orig_payment_dtl_rec.arrears_yn <> l_rbk_payment_dtl_rec.arrears_yn )
14075 OR ( l_orig_payment_dtl_rec.structure <> l_rbk_payment_dtl_rec.structure ))
14076 AND ( l_chk_rbk_rec.date_transaction_occurred <> l_fin_asset_rec.start_date ) THEN
14077
14078 OKL_API.set_message(
14079 p_app_name => G_APP_NAME,
14080 p_msg_name => 'OKL_QA_RBK_PYMT_STRUC_ERR',
14081 p_token1 => 'NAME',
14082 p_token1_value => l_fin_asset_rec.name);
14083
14084 x_return_status := OKL_API.G_RET_STS_ERROR;
14085
14086 END IF;
14087 END LOOP;
14088
14089 END LOOP;
14090
14091 FOR l_fin_roll_fee_rec IN l_fin_roll_fee_csr(p_chr_id => p_chr_id) LOOP
14092
14093 FOR l_payment_hdr_rec IN l_payment_hdr_csr(p_rbk_chr_id => p_chr_id,
14094 p_orig_chr_id => l_chk_rbk_rec.orig_chr_id,
14095 p_orig_cle_id => l_fin_roll_fee_rec.orig_cle_id,
14096 p_rbk_cle_id => l_fin_roll_fee_rec.rbk_cle_id) LOOP
14097
14098 l_orig_payment_dtl_rec := NULL;
14099 OPEN l_payment_dtl_csr(p_rgp_id => l_payment_hdr_rec.orig_rgp_id,
14100 p_slh_id => l_payment_hdr_rec.orig_slh_id);
14101 FETCH l_payment_dtl_csr INTO l_orig_payment_dtl_rec;
14102 CLOSE l_payment_dtl_csr;
14103
14104 l_rbk_payment_dtl_rec := NULL;
14105 OPEN l_payment_dtl_csr(p_rgp_id => l_payment_hdr_rec.rbk_rgp_id,
14106 p_slh_id => l_payment_hdr_rec.rbk_slh_id);
14107 FETCH l_payment_dtl_csr INTO l_rbk_payment_dtl_rec;
14108 CLOSE l_payment_dtl_csr;
14109
14110 IF (( l_orig_payment_dtl_rec.frequency <> l_rbk_payment_dtl_rec.frequency )
14111 OR ( l_orig_payment_dtl_rec.arrears_yn <> l_rbk_payment_dtl_rec.arrears_yn )
14112 OR ( l_orig_payment_dtl_rec.structure <> l_rbk_payment_dtl_rec.structure ))
14113 AND ( l_chk_rbk_rec.date_transaction_occurred <> l_fin_roll_fee_rec.start_date ) THEN
14114
14115 OKL_API.set_message(
14116 p_app_name => G_APP_NAME,
14117 p_msg_name => 'OKL_QA_RBK_PYMT_STRUC_ERR',
14118 p_token1 => 'NAME',
14119 p_token1_value => l_fin_roll_fee_rec.name);
14120
14121 x_return_status := OKL_API.G_RET_STS_ERROR;
14122
14123 END IF;
14124 END LOOP;
14125
14126 END LOOP;
14127
14128 END IF; -- Check Effective Dated Rebook
14129
14130 END IF; -- Check Online Rebook
14131
14132 IF (x_return_status = OKL_API.G_RET_STS_SUCCESS AND p_upfront_tax_fee_yn = 'N') THEN
14133 OKL_API.set_message(
14134 p_app_name => G_APP_NAME,
14135 p_msg_name => G_QA_SUCCESS);
14136 END IF;
14137
14138 EXCEPTION
14139 WHEN OTHERS THEN
14140 -- store SQL error message on message stack
14141 OKL_API.SET_MESSAGE(
14142 p_app_name => G_APP_NAME,
14143 p_msg_name => G_UNEXPECTED_ERROR,
14144 p_token1 => G_SQLCODE_TOKEN,
14145 p_token1_value => SQLCODE,
14146 p_token2 => G_SQLERRM_TOKEN,
14147 p_token2_value => SQLERRM);
14148
14149 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
14150
14151 END check_rbk_pymt_structure;
14152 --Bug# 12807203: End
14153
14154 --Bug# 12807203: Start
14155 -- Start of comments
14156 --
14157 -- Procedure Name : check_exp_dlvry_fund_date
14158 -- Description : Displays an error message if Expected
14159 -- Delivery Date or Expected Funding Date
14160 -- occurs after the contract line start date.
14161 -- Business Rules :
14162 -- Parameters :
14163 -- Version : 1.0
14164 -- End of comments
14165
14166 PROCEDURE check_exp_dlvry_fund_date(
14167 x_return_status OUT NOCOPY VARCHAR2,
14168 p_chr_id IN NUMBER
14169 ) IS
14170
14171 CURSOR l_fin_asset_csr(p_chr_id in number) is
14172 SELECT cleb.id,
14173 clet.name,
14174 cleb.start_date,
14175 kle.date_delivery_expected,
14176 kle.date_funding_expected
14177 FROM okc_k_lines_b cleb,
14178 okc_k_lines_tl clet,
14179 okl_k_lines kle,
14180 okc_statuses_b sts
14181 WHERE cleb.chr_id = p_chr_id
14182 AND cleb.dnz_chr_id = p_chr_id
14183 AND cleb.lse_id = 33
14184 AND kle.id = cleb.id
14185 AND clet.id = cleb.id
14186 AND clet.language = USERENV('LANG')
14187 AND sts.code = cleb.sts_code
14188 AND sts.ste_code NOT IN ('HOLD', 'TERMINATED', 'EXPIRED', 'CANCELLED');
14189
14190 BEGIN
14191
14192 x_return_status := OKL_API.G_RET_STS_SUCCESS;
14193
14194 FOR l_fin_asset_rec IN l_fin_asset_csr(p_chr_id => p_chr_id) LOOP
14195
14196 IF ( l_fin_asset_rec.date_delivery_expected IS NOT NULL AND
14197 l_fin_asset_rec.date_delivery_expected > l_fin_asset_rec.start_date )
14198 OR ( l_fin_asset_rec.date_funding_expected IS NOT NULL AND
14199 l_fin_asset_rec.date_funding_expected > l_fin_asset_rec.start_date ) THEN
14200
14201 OKL_API.set_message(
14202 p_app_name => G_APP_NAME,
14203 p_msg_name => 'OKL_QA_DEL_FUND_DT_ERR',
14204 p_token1 => 'NAME',
14205 p_token1_value => l_fin_asset_rec.name);
14206
14207 x_return_status := OKL_API.G_RET_STS_ERROR;
14208
14209 END IF;
14210 END LOOP;
14211
14212 IF x_return_status = OKL_API.G_RET_STS_SUCCESS THEN
14213 OKL_API.set_message(
14214 p_app_name => G_APP_NAME,
14215 p_msg_name => G_QA_SUCCESS);
14216 END IF;
14217
14218 EXCEPTION
14219 WHEN OTHERS THEN
14220 -- store SQL error message on message stack
14221 OKL_API.SET_MESSAGE(
14222 p_app_name => G_APP_NAME,
14223 p_msg_name => G_UNEXPECTED_ERROR,
14224 p_token1 => G_SQLCODE_TOKEN,
14225 p_token1_value => SQLCODE,
14226 p_token2 => G_SQLERRM_TOKEN,
14227 p_token2_value => SQLERRM);
14228
14229 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
14230
14231 END check_exp_dlvry_fund_date;
14232 --Bug# 12807203: End
14233
14234 -- Start of comments
14235 --
14236 -- Procedure Name : check_zero_asset_cost
14237 -- Description : Bug # 13243190
14238 -- : Throws a message if asset cost is ZERO. The message
14239 -- : is conifgurable to error or warning.
14240 -- Business Rules :
14241 -- Parameters :
14242 -- Version : 1.0
14243 -- Author : RGOOTY
14244 -- End of comments
14245 PROCEDURE check_zero_asset_cost(
14246 x_return_status OUT NOCOPY VARCHAR2,
14247 p_chr_id IN NUMBER
14248 ) IS
14249
14250 l_release_contract_yn VARCHAR2(1);
14251 l_oec NUMBER;
14252 BEGIN
14253 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
14254 l_release_contract_yn := okl_api.g_false;
14255 l_release_contract_yn := okl_lla_util_pvt.check_release_contract(p_chr_id => p_chr_id);
14256
14257 FOR l_lne IN l_lne_csr('FREE_FORM1', p_chr_id)
14258 LOOP
14259 IF l_release_contract_yn = OKL_API.G_TRUE
14260 THEN
14261 l_oec := l_lne.expected_asset_cost;
14262 ELSE
14263 l_oec := l_lne.oec;
14264 END IF;
14265 -- Check if Asset Cost is ZERO or not, if ZERO, then throw the error
14266 IF ( l_oec = 0 )
14267 THEN
14268 Okl_Api.set_message(
14269 p_app_name => G_APP_NAME,
14270 p_msg_name => 'OKL_QA_ZERO_ASSET_COST',
14271 p_token1 => 'ASSET_NUM',
14272 p_token1_value => l_lne.name);
14273 x_return_status := Okl_Api.G_RET_STS_ERROR;
14274 END IF;
14275 END LOOP;
14276
14277 IF x_return_status = Okl_Api.G_RET_STS_SUCCESS THEN
14278 Okl_Api.set_message(
14279 p_app_name => G_APP_NAME,
14280 p_msg_name => G_QA_SUCCESS);
14281 END IF;
14282
14283 EXCEPTION
14284 WHEN OTHERS
14285 THEN
14286 Okl_Api.SET_MESSAGE(
14287 p_app_name => G_APP_NAME,
14288 p_msg_name => G_UNEXPECTED_ERROR,
14289 p_token1 => G_SQLCODE_TOKEN,
14290 p_token1_value => SQLCODE,
14291 p_token2 => G_SQLERRM_TOKEN,
14292 p_token2_value => SQLERRM);
14293 x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
14294 END check_zero_asset_cost;
14295 -- Bug # 13243190 : End
14296
14297 --Bug# 13478101: Start
14298 -- Start of comments
14299 --
14300 -- Procedure Name : check_interest_start_date
14301 -- Description : Displays a warning message if Interest
14302 -- Start Date is not equal to the Contract
14303 -- Start Date.
14304 -- Business Rules :
14305 -- Parameters :
14306 -- Version : 1.0
14307 -- End of comments
14308
14309 PROCEDURE check_interest_start_date(
14310 x_return_status OUT NOCOPY VARCHAR2,
14311 p_chr_id IN NUMBER
14312 ) IS
14313
14314 CURSOR chr_csr(p_chr_id IN NUMBER) IS
14315 SELECT start_date
14316 FROM okc_k_headers_b
14317 WHERE id = p_chr_id;
14318
14319 l_chr_rec chr_csr%ROWTYPE;
14320
14321 CURSOR vir_params_csr(p_chr_id IN NUMBER) IS
14322 SELECT interest_start_date
14323 FROM okl_k_rate_params
14324 WHERE khr_id = p_chr_id
14325 AND parameter_type_code = 'ACTUAL'
14326 AND effective_to_date IS NULL;
14327
14328 l_vir_params_rec vir_params_csr%ROWTYPE;
14329
14330 BEGIN
14331
14332 x_return_status := OKL_API.G_RET_STS_SUCCESS;
14333
14334 OPEN chr_csr(p_chr_id => p_chr_id);
14335 FETCH chr_csr INTO l_chr_rec;
14336 CLOSE chr_csr;
14337
14338 OPEN vir_params_csr(p_chr_id => p_chr_id);
14339 FETCH vir_params_csr INTO l_vir_params_rec;
14340 CLOSE vir_params_csr;
14341
14342 IF (l_vir_params_rec.interest_start_date IS NOT NULL AND
14343 l_vir_params_rec.interest_start_date <> l_chr_rec.start_date) THEN
14344
14345 OKL_API.set_message(
14346 p_app_name => G_APP_NAME,
14347 p_msg_name => 'OKL_QA_INT_START_DT_WRN');
14348
14349 x_return_status := OKL_API.G_RET_STS_ERROR;
14350
14351 END IF;
14352
14353 IF x_return_status = OKL_API.G_RET_STS_SUCCESS THEN
14354 OKL_API.set_message(
14355 p_app_name => G_APP_NAME,
14356 p_msg_name => G_QA_SUCCESS);
14357 END IF;
14358
14359 EXCEPTION
14360 WHEN OTHERS THEN
14361 -- store SQL error message on message stack
14362 OKL_API.SET_MESSAGE(
14363 p_app_name => G_APP_NAME,
14364 p_msg_name => G_UNEXPECTED_ERROR,
14365 p_token1 => G_SQLCODE_TOKEN,
14366 p_token1_value => SQLCODE,
14367 p_token2 => G_SQLERRM_TOKEN,
14368 p_token2_value => SQLERRM);
14369
14370 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
14371
14372 END check_interest_start_date;
14373 --Bug# 13478101: End
14374
14375 END Okl_Qa_Data_Integrity;