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