[Home] [Help]
PACKAGE BODY: APPS.OKL_RELEASE_PVT
Source
1 Package body okl_release_pvt as
2 /* $Header: OKLRREKB.pls 120.36.12010000.4 2008/11/25 09:46:23 nikshah ship $ */
3 -------------------------------------------------------------------------------------------------
4 -- GLOBAL MESSAGE CONSTANTS
5 -------------------------------------------------------------------------------------------------
6 G_NO_MATCHING_RECORD CONSTANT VARCHAR2(200) := 'OKL_LLA_NO_MATCHING_RECORD';
7 G_COPY_HEADER CONSTANT VARCHAR2(200) := 'OKL_LLA_COPY_HEADER';
8 G_COPY_LINE CONSTANT VARCHAR2(200) := 'OKL_LLA_COPY_LINE';
9 G_FND_APP CONSTANT VARCHAR2(200) := OKL_API.G_FND_APP;
10 G_FORM_UNABLE_TO_RESERVE_REC CONSTANT VARCHAR2(200) := OKL_API.G_FORM_UNABLE_TO_RESERVE_REC;
11 G_FORM_RECORD_DELETED CONSTANT VARCHAR2(200) := OKL_API.G_FORM_RECORD_DELETED;
12 G_FORM_RECORD_CHANGED CONSTANT VARCHAR2(200) := OKL_API.G_FORM_RECORD_CHANGED;
13 G_RECORD_LOGICALLY_DELETED CONSTANT VARCHAR2(200) := OKL_API.G_RECORD_LOGICALLY_DELETED;
14 G_REQUIRED_VALUE CONSTANT VARCHAR2(200) := OKL_API.G_REQUIRED_VALUE;
15 G_INVALID_VALUE CONSTANT VARCHAR2(200) := OKL_API.G_INVALID_VALUE;
16 G_COL_NAME_TOKEN CONSTANT VARCHAR2(200) := OKL_API.G_COL_NAME_TOKEN;
17 G_PARENT_TABLE_TOKEN CONSTANT VARCHAR2(200) := OKL_API.G_PARENT_TABLE_TOKEN;
18 G_CHILD_TABLE_TOKEN CONSTANT VARCHAR2(200) := OKL_API.G_CHILD_TABLE_TOKEN;
19 G_UNEXPECTED_ERROR CONSTANT VARCHAR2(200) := 'OKC_CONTRACTS_UNEXP_ERROR';
20 G_SQLERRM_TOKEN CONSTANT VARCHAR2(200) := 'SQLerrm';
21 G_SQLCODE_TOKEN CONSTANT VARCHAR2(200) := 'SQLcode';
22 G_UPPERCASE_REQUIRED CONSTANT VARCHAR2(200) := 'OKL_CONTRACTS_UPPERCASE_REQ';
23 G_FETCHING_INFO CONSTANT VARCHAR2(200) := 'OKL_LLA_FETCHING_INFO';
24 G_LINE_RECORD CONSTANT VARCHAR2(200) := 'OKL_LLA_LINE_RECORD';
25 -------------------------------------------------------------------------------------------------
26 -- GLOBAL EXCEPTION
27 -------------------------------------------------------------------------------------------------
28 G_EXCEPTION_HALT_VALIDATION EXCEPTION;
29 G_EXCEPTION_STOP_VALIDATION EXCEPTION;
30 G_API_TYPE CONSTANT VARCHAR2(4) := '_PVT';
31 G_API_VERSION CONSTANT NUMBER := 1.0;
32 G_SCOPE CONSTANT VARCHAR2(4) := '_PVT';
33 -------------------------------------------------------------------------------------------------
34 -- GLOBAL VARIABLES
35 -------------------------------------------------------------------------------------------------
36 G_PKG_NAME CONSTANT VARCHAR2(200) := 'OKL_RELEASE_PVT';
37 G_APP_NAME CONSTANT VARCHAR2(3) := OKL_API.G_APP_NAME;
38 G_FIN_LINE_LTY_CODE OKC_LINE_STYLES_V.LTY_CODE%TYPE := 'FREE_FORM1';
39 G_FA_LINE_LTY_CODE OKC_LINE_STYLES_V.LTY_CODE%TYPE := 'FIXED_ASSET';
40 G_INST_LINE_LTY_CODE OKC_LINE_STYLES_V.LTY_CODE%TYPE := 'FREE_FORM2';
41 G_IB_LINE_LTY_CODE OKC_LINE_STYLES_V.LTY_CODE%TYPE := 'INST_ITEM';
42 G_ERROR CONSTANT VARCHAR2(200) := 'OKL_COPY_ASSET_LINES';
43 G_CREATION_ERROR CONSTANT VARCHAR2(200) := 'Error Occurred in Creation';
44 G_ID2 CONSTANT VARCHAR2(200) := '#';
45 G_TRY_NAME OKL_TRX_TYPES_V.NAME%TYPE := 'CREATE ASSET LINES';
46 G_TRY_TYPE OKL_TRX_TYPES_V.TRY_TYPE%TYPE := 'TIE';
47 G_TLS_TYPE OKC_LINE_STYLES_V.LSE_TYPE%TYPE := 'TLS';
48 G_SLS_TYPE OKC_LINE_STYLES_V.LSE_TYPE%TYPE := 'SLS';
49 G_YN_ERROR CONSTANT VARCHAR2(200) := 'Invalid Value for ';
50 -------------------------------------------------------------------------------------------------
51 -- GLOBAL COMPOSITE TYPE VARIABLES
52 -------------------------------------------------------------------------------------------------
53 TYPE g_top_line_tbl IS TABLE OF OKC_K_LINES_V.ID%TYPE
54 INDEX BY BINARY_INTEGER;
55 TYPE g_asset_num_tbl IS TABLE OF OKL_TXL_ASSETS_V.ASSET_NUMBER%TYPE
56 INDEX BY BINARY_INTEGER;
57 subtype clev_rec_type is OKL_OKC_MIGRATION_PVT.CLEV_REC_TYPE;
58 subtype klev_tbl_type is OKL_CONTRACT_PUB.klev_tbl_type;
59 subtype cimv_rec_type is OKL_OKC_MIGRATION_PVT.cimv_rec_type;
60 subtype trxv_rec_type is OKL_TRX_ASSETS_PUB.thpv_rec_type;
61 -------------------------------------------------------------------------------------------------
62 ------------------------------------------------------------------------------
63 --Start of comments
64 --
65 --Procedure Name : create_ubb_contract
66 --Purpose : Check if Release Contract has usage line
67 -- If true then create a usage contract only in case
68 -- of full TnA
69 -- - used internally
70 --Modification History :
71 --09-jan-2008 rajnisku Created : Bug 6657564
72 ------------------------------------------------------------------------------
73
74 PROCEDURE create_ubb_contract(p_api_version IN NUMBER,
75 p_init_msg_list IN VARCHAR2,
76 x_return_status OUT NOCOPY VARCHAR2,
77 x_msg_count OUT NOCOPY NUMBER,
78 x_msg_data OUT NOCOPY VARCHAR2,
79 p_chr_id IN NUMBER,
80 p_source_trx_id IN NUMBER
81 ) IS
82
83 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
84 l_api_name CONSTANT VARCHAR2(30) := 'create_ubb_contract';
85 l_api_version CONSTANT NUMBER := 1.0;
86
87 --cursor to check if usage line exists on the contract
88 CURSOR l_chk_usage_csr (p_chr_id IN Number) IS
89 SELECT '!'
90 FROM dual
91 where exists (SELECT 1
92 FROM OKC_LINE_STYLES_B lse,
93 OKC_K_LINES_B cle,
94 okc_statuses_b sts
95 WHERE lse.id = cle.lse_id
96 AND lse.lty_code = 'USAGE'
97 AND cle.dnz_chr_id = p_chr_id
98 AND sts.code =cle.sts_code
99 AND sts.ste_code NOT IN ('EXPIRED','HOLD','CANCELLED','TERMINATED')
100 );
101
102 CURSOR taa_request_csr(p_source_trx_id IN NUMBER)
103 IS
104 SELECT tsu_code,
105 complete_transfer_yn,
106 date_transaction_occurred
107 FROM okl_trx_contracts
108 where id = p_source_trx_id;
109
110 taa_request_rec taa_request_csr%ROWTYPE;
111
112 l_usage_khr varchar2(1);
113 l_usage_create_yn VARCHAR2(1):='N';
114 l_service_chr_id NUMBER;
115
116 begin
117 --check if usage line is there on the contract
118 l_usage_khr := '?';
119 OPEN l_chk_usage_csr (p_chr_id => p_chr_id);
120 FETCH l_chk_usage_csr INTO l_usage_khr;
121 IF l_chk_usage_csr%NOTFOUND THEN
122 NULL;
123 END IF;
124 CLOSE l_chk_usage_csr;
125
126 IF l_usage_khr = '!' THEN
127 --check whether partial/full T n A request
128 --create a usage contract only in case of full TnA
129 l_usage_create_yn:='N';
130
131 IF p_source_trx_id IS NOT NULL THEN
132 open taa_request_csr(p_source_trx_id => p_source_trx_id );
133 fetch taa_request_csr into taa_request_rec;
134 close taa_request_csr;
135
136 IF NVL(taa_request_rec.complete_transfer_yn,'X') = 'Y' THEN
137 l_usage_create_yn:='Y';
138 END IF;
139 ELSE -- source id null.
140 l_usage_create_yn:='Y';
141 END IF;
142
143 IF l_usage_create_yn='Y' THEN
144 --call ubb api for service contracts creation
145 okl_ubb_integration_pub.create_ubb_contract(
146 p_api_version => p_api_version,
147 p_init_msg_list => p_init_msg_list,
148 x_return_status => x_return_status,
149 x_msg_count => x_msg_count,
150 x_msg_data => x_msg_data,
151 p_chr_id => p_chr_id,
152 x_chr_id => l_service_chr_id
153 );
154 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
155 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
156 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
157 RAISE Okl_Api.G_EXCEPTION_ERROR;
158 END IF;
159 END IF;
160
161 End If;
162
163 EXCEPTION
164 when OKL_API.G_EXCEPTION_ERROR then
165
166 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
167 p_api_name => l_api_name,
168 p_pkg_name => G_PKG_NAME,
169 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
170 x_msg_count => x_msg_count,
171 x_msg_data => x_msg_data,
172 p_api_type => G_API_TYPE);
173
174 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
175
176 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
177 p_api_name => l_api_name,
178 p_pkg_name => G_PKG_NAME,
179 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
180 x_msg_count => x_msg_count,
181 x_msg_data => x_msg_data,
182 p_api_type => G_API_TYPE);
183
184 when OTHERS then
185
186 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
187 p_api_name => l_api_name,
188 p_pkg_name => G_PKG_NAME,
189 p_exc_name => 'OTHERS',
190 x_msg_count => x_msg_count,
191 x_msg_data => x_msg_data,
192 p_api_type => G_API_TYPE);
193 end create_ubb_contract;
194
195
196
197 ------------------------------------------------------------------------------
198 --Start of comments
199 --
200 --Procedure Name : adjust_usage_lines
201 --Purpose : Update/Delete usage line on Release contract
202 --
203 --
204 -- - used internally
205 --Modification History :
206 --09-Jan-2008 rirawat Created : Bug 6657564
207 ------------------------------------------------------------------------------
208
209 PROCEDURE adjust_usage_lines(p_api_version IN NUMBER,
210 p_init_msg_list IN VARCHAR2,
211 x_return_status OUT NOCOPY VARCHAR2,
212 x_msg_count OUT NOCOPY NUMBER,
213 x_msg_data OUT NOCOPY VARCHAR2,
214 p_chr_id IN NUMBER,
215 p_release_date IN DATE) IS
216
217 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
218 l_api_name CONSTANT VARCHAR2(30) := 'ADJUST_USAGE_LINES';
219 l_api_version CONSTANT NUMBER := 1.0;
220
221 --This cursor find usage lines in the release contract which are not
222 -- linked to any asset
223
224 CURSOR non_linked_usage_csr (p_chr_id NUMBER) IS
225 SELECT cle.id usage_line_id
226 FROM okc_line_styles_b lse,
227 okc_k_lines_b cle,
228 okc_statuses_v okcsts
229 WHERE cle.dnz_chr_id = p_chr_id
230 AND cle.lse_id = lse.id
231 AND lse.lse_parent_id is null
232 AND lse.lty_code ='USAGE'
233 and okcsts.code = cle.sts_code
234 AND okcsts.ste_code NOT IN ('EXPIRED','HOLD','CANCELLED','TERMINATED')
235 AND NOT EXISTS (
236 SELECT 1
237 FROM okc_k_lines_b line,
238 okc_line_styles_b lse,
239 okc_statuses_b sts
240 WHERE line.dnz_chr_id = p_chr_id
241 AND line.cle_id = cle.id
242 AND line.lse_id = lse.id
243 AND lse.lty_code ='LINK_USAGE_ASSET'
244 AND sts.code = line.sts_code
245 AND sts.ste_code NOT IN ('EXPIRED','HOLD','CANCELLED','TERMINATED')
246 );
247
248
249 CURSOR usage_csr (p_chr_id NUMBER) IS
250 SELECT cle.id usage_line_id
251 FROM okc_line_styles_b lse,
252 okc_k_lines_b cle,okc_statuses_v okcsts
253 WHERE cle.dnz_chr_id = p_chr_id
254 AND cle.lse_id = lse.id
255 AND lse.lse_parent_id is null
256 AND lse.lty_code ='USAGE'
257 and okcsts.code = cle.sts_code
258 AND okcsts.ste_code NOT IN ('EXPIRED','HOLD','CANCELLED','TERMINATED');
259
260
261 CURSOR link_asset_csr (p_chr_id NUMBER,
262 p_usage_line_id NUMBER) IS
263 SELECT line.id
264 FROM okc_k_lines_b line,
265 okc_line_styles_b lse,
266 okc_statuses_b okcsts
267 WHERE line.dnz_chr_id = p_chr_id
268 AND line.cle_id = p_usage_line_id
269 AND line.lse_id = lse.id
270 AND lse.lty_code ='LINK_USAGE_ASSET'
271 AND okcsts.code = line.sts_code
272 AND okcsts.ste_code NOT IN ('EXPIRED','HOLD','CANCELLED','TERMINATED');
273
274 lp_klev_rec okl_kle_pvt.klev_rec_type;
275 lp_clev_rec okl_okc_migration_pvt.clev_rec_type;
276 lp_clev_temp_rec okl_okc_migration_pvt.clev_rec_type;
277 lp_klev_temp_rec okl_kle_pvt.klev_rec_type;
278 lx_klev_rec okl_kle_pvt.klev_rec_type;
279 lx_clev_rec okl_okc_migration_pvt.clev_rec_type;
280
281 begin
282
283 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
284 -- Call start_activity to create savepoint, check compatibility
285 -- and initialize message list
286 l_return_status := Okl_Api.START_ACTIVITY(
287 p_api_name => l_api_name,
288 p_pkg_name => g_pkg_name,
289 p_init_msg_list => p_init_msg_list,
290 l_api_version => l_api_version,
291 p_api_version => p_api_version,
292 p_api_type => '_PVT',
293 x_return_status => x_return_status);
294 -- Check if activity started successfully
295 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
296 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
297 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
298 RAISE Okl_Api.G_EXCEPTION_ERROR;
299 END IF;
300
301 --Remove all the usage lines without any assets associated with it.
302 FOR non_linked_usage_rec In non_linked_usage_csr(p_chr_id) LOOP
303
304 OKL_CONTRACT_PUB.delete_contract_line(
305 p_api_version =>p_api_version,
306 p_init_msg_list => p_init_msg_list,
307 x_return_status => x_return_status,
308 x_msg_count => x_msg_count,
309 x_msg_data => x_msg_data,
310 p_line_id => non_linked_usage_rec.usage_line_id
311 );
312
313 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
314 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
315 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
316 RAISE OKL_API.G_EXCEPTION_ERROR;
317 END IF;
318
319 END LOOP;
320
321 --update the start date of the usage and linked asset lines with the
322 -- release date
323
324 FOR usage_rec IN usage_csr (p_chr_id)
325 LOOP
326 lp_clev_rec := lp_clev_temp_rec;
327 lp_klev_rec := lp_klev_temp_rec;
328 lp_clev_rec.id := usage_rec.usage_line_id;
329 lp_clev_rec.start_date := p_release_date;
330 lp_klev_rec.id := usage_rec.usage_line_id;
331
332 OKL_CONTRACT_PUB.update_contract_line(
333 p_api_version => p_api_version,
334 p_init_msg_list => p_init_msg_list,
335 x_return_status => x_return_status,
336 x_msg_count => x_msg_count,
337 x_msg_data => x_msg_data,
338 p_clev_rec => lp_clev_rec,
339 p_klev_rec => lp_klev_rec,
340 x_clev_rec => lx_clev_rec,
341 x_klev_rec => lx_klev_rec
342 );
343 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
344 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
345 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
346 RAISE OKL_API.G_EXCEPTION_ERROR;
347 END IF;
348
349 FOR link_asset_rec IN link_asset_csr (p_chr_id,usage_rec.usage_line_id)
350 LOOP
351 lp_clev_rec := lp_clev_temp_rec;
352 lp_klev_rec := lp_klev_temp_rec;
353
354 lp_clev_rec.id := link_asset_rec.id;
355 lp_clev_rec.start_date := p_release_date;
356 lp_klev_rec.id := link_asset_rec.id;
357
358 OKL_CONTRACT_PUB.update_contract_line(
359 p_api_version => p_api_version,
360 p_init_msg_list => p_init_msg_list,
361 x_return_status => x_return_status,
362 x_msg_count => x_msg_count,
363 x_msg_data => x_msg_data,
364 p_clev_rec => lp_clev_rec,
365 p_klev_rec => lp_klev_rec,
366 x_clev_rec => lx_clev_rec,
367 x_klev_rec => lx_klev_rec
368 );
369 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
370 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
371 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
372 RAISE OKL_API.G_EXCEPTION_ERROR;
373 END IF;
374 END LOOP;
375
376 END LOOP;
377 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
378 x_msg_data => x_msg_data);
379 EXCEPTION
380 when OKL_API.G_EXCEPTION_ERROR then
381
382 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
383 p_api_name => l_api_name,
384 p_pkg_name => G_PKG_NAME,
385 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
386 x_msg_count => x_msg_count,
387 x_msg_data => x_msg_data,
388 p_api_type => G_API_TYPE);
389
390 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
391
392 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
393 p_api_name => l_api_name,
394 p_pkg_name => G_PKG_NAME,
395 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
396 x_msg_count => x_msg_count,
397 x_msg_data => x_msg_data,
398 p_api_type => G_API_TYPE);
399
400 when OTHERS then
401
402 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
403 p_api_name => l_api_name,
404 p_pkg_name => G_PKG_NAME,
405 p_exc_name => 'OTHERS',
406 x_msg_count => x_msg_count,
407 x_msg_data => x_msg_data,
408 p_api_type => G_API_TYPE);
409
410
411 end adjust_usage_lines;
412 -- Start of Commnets
413 -- Badrinath Kuchibholta
414 -- Function Name : get_tasv_rec
415 -- Description : Get Transaction Header Record
416 -- Business Rules :
417 -- Parameters :
418 -- Version :
419 -- End of Commnets
420 FUNCTION get_tasv_rec(p_tas_id IN NUMBER,
421 x_trxv_rec OUT NOCOPY trxv_rec_type)
422 RETURN VARCHAR2
423 IS
424 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
425 CURSOR c_trxv_rec(p_tas_id NUMBER)
426 IS
427 SELECT ID,
428 OBJECT_VERSION_NUMBER,
429 ICA_ID,
430 ATTRIBUTE_CATEGORY,
431 ATTRIBUTE1,
432 ATTRIBUTE2,
433 ATTRIBUTE3,
434 ATTRIBUTE4,
435 ATTRIBUTE5,
436 ATTRIBUTE6,
437 ATTRIBUTE7,
438 ATTRIBUTE8,
439 ATTRIBUTE9,
440 ATTRIBUTE10,
441 ATTRIBUTE11,
442 ATTRIBUTE12,
443 ATTRIBUTE13,
444 ATTRIBUTE14,
445 ATTRIBUTE15,
446 TAS_TYPE,
447 CREATED_BY,
448 CREATION_DATE,
449 LAST_UPDATED_BY,
450 LAST_UPDATE_DATE,
451 LAST_UPDATE_LOGIN,
452 TSU_CODE,
453 TRY_ID,
454 DATE_TRANS_OCCURRED,
455 TRANS_NUMBER,
456 COMMENTS,
457 REQ_ASSET_ID,
458 TOTAL_MATCH_AMOUNT
459 FROM OKL_TRX_ASSETS
460 WHERE id = p_tas_id;
461 BEGIN
462 OPEN c_trxv_rec(p_tas_id);
463 FETCH c_trxv_rec INTO
464 x_trxv_rec.ID,
465 x_trxv_rec.OBJECT_VERSION_NUMBER,
466 x_trxv_rec.ICA_ID,
467 x_trxv_rec.ATTRIBUTE_CATEGORY,
468 x_trxv_rec.ATTRIBUTE1,
469 x_trxv_rec.ATTRIBUTE2,
470 x_trxv_rec.ATTRIBUTE3,
471 x_trxv_rec.ATTRIBUTE4,
472 x_trxv_rec.ATTRIBUTE5,
473 x_trxv_rec.ATTRIBUTE6,
474 x_trxv_rec.ATTRIBUTE7,
475 x_trxv_rec.ATTRIBUTE8,
476 x_trxv_rec.ATTRIBUTE9,
477 x_trxv_rec.ATTRIBUTE10,
478 x_trxv_rec.ATTRIBUTE11,
479 x_trxv_rec.ATTRIBUTE12,
480 x_trxv_rec.ATTRIBUTE13,
481 x_trxv_rec.ATTRIBUTE14,
482 x_trxv_rec.ATTRIBUTE15,
483 x_trxv_rec.TAS_TYPE,
484 x_trxv_rec.CREATED_BY,
485 x_trxv_rec.CREATION_DATE,
486 x_trxv_rec.LAST_UPDATED_BY,
487 x_trxv_rec.LAST_UPDATE_DATE,
488 x_trxv_rec.LAST_UPDATE_LOGIN,
489 x_trxv_rec.TSU_CODE,
490 x_trxv_rec.TRY_ID,
491 x_trxv_rec.DATE_TRANS_OCCURRED,
492 x_trxv_rec.TRANS_NUMBER,
493 x_trxv_rec.COMMENTS,
494 x_trxv_rec.REQ_ASSET_ID,
495 x_trxv_rec.TOTAL_MATCH_AMOUNT;
496 IF c_trxv_rec%NOTFOUND THEN
497 x_return_status := OKL_API.G_RET_STS_ERROR;
498 END IF;
499 CLOSE c_trxv_rec;
500 RETURN(x_return_status);
501 EXCEPTION
502 WHEN OTHERS THEN
503 -- store SQL error message on message stack for caller
504 OKL_API.set_message(
505 G_APP_NAME,
506 G_UNEXPECTED_ERROR,
507 G_SQLCODE_TOKEN,
508 SQLCODE,
509 G_SQLERRM_TOKEN,
510 SQLERRM);
511 IF c_trxv_rec%ISOPEN THEN
512 CLOSE c_trxv_rec;
513 END IF;
514 -- notify caller of an UNEXPECTED error
515 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
516 RETURN(x_return_status);
517 END get_tasv_rec;
518 -------------------------------------------------------------------------------------------------
519 FUNCTION get_rec_chrv (p_id IN OKC_K_HEADERS_V.ID%TYPE,
520 x_chrv_rec OUT NOCOPY chrv_rec_type)
521 RETURN VARCHAR2 IS
522 CURSOR okc_chrv_pk_csr(p_id OKC_K_HEADERS_V.ID%TYPE) IS
523 SELECT ID,
524 OBJECT_VERSION_NUMBER,
525 SFWT_FLAG,
526 CHR_ID_RESPONSE,
527 CHR_ID_AWARD,
528 INV_ORGANIZATION_ID,
529 STS_CODE,
530 QCL_ID,
531 SCS_CODE,
532 CONTRACT_NUMBER,
533 CURRENCY_CODE,
534 CONTRACT_NUMBER_MODIFIER,
535 ARCHIVED_YN,
536 DELETED_YN,
537 CUST_PO_NUMBER_REQ_YN,
538 PRE_PAY_REQ_YN,
539 CUST_PO_NUMBER,
540 SHORT_DESCRIPTION,
541 COMMENTS,
542 DESCRIPTION,
543 DPAS_RATING,
544 COGNOMEN,
545 TEMPLATE_YN,
546 TEMPLATE_USED,
547 DATE_APPROVED,
548 DATETIME_CANCELLED,
549 AUTO_RENEW_DAYS,
550 DATE_ISSUED,
551 DATETIME_RESPONDED,
552 NON_RESPONSE_REASON,
553 NON_RESPONSE_EXPLAIN,
554 RFP_TYPE,
555 CHR_TYPE,
556 KEEP_ON_MAIL_LIST,
557 SET_ASIDE_REASON,
558 SET_ASIDE_PERCENT,
559 RESPONSE_COPIES_REQ,
560 DATE_CLOSE_PROJECTED,
561 DATETIME_PROPOSED,
562 DATE_SIGNED,
563 DATE_TERMINATED,
564 DATE_RENEWED,
565 TRN_CODE,
566 START_DATE,
567 END_DATE,
568 AUTHORING_ORG_ID,
569 BUY_OR_SELL,
570 ISSUE_OR_RECEIVE,
571 ESTIMATED_AMOUNT,
572 ESTIMATED_AMOUNT_RENEWED,
573 CURRENCY_CODE_RENEWED,
574 UPG_ORIG_SYSTEM_REF,
575 UPG_ORIG_SYSTEM_REF_ID,
576 APPLICATION_ID,
577 ORIG_SYSTEM_SOURCE_CODE,
578 ORIG_SYSTEM_ID1,
579 ORIG_SYSTEM_REFERENCE1,
580 ATTRIBUTE_CATEGORY,
581 ATTRIBUTE1,
582 ATTRIBUTE2,
583 ATTRIBUTE3,
584 ATTRIBUTE4,
585 ATTRIBUTE5,
586 ATTRIBUTE6,
587 ATTRIBUTE7,
588 ATTRIBUTE8,
589 ATTRIBUTE9,
590 ATTRIBUTE10,
591 ATTRIBUTE11,
592 ATTRIBUTE12,
593 ATTRIBUTE13,
594 ATTRIBUTE14,
595 ATTRIBUTE15,
596 CREATED_BY,
597 CREATION_DATE,
598 LAST_UPDATED_BY,
599 LAST_UPDATE_DATE,
600 LAST_UPDATE_LOGIN
601 FROM okc_k_headers_v chrv
602 WHERE chrv.id = p_id;
603 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
604 BEGIN
605 OPEN okc_chrv_pk_csr (p_id);
606 FETCH okc_chrv_pk_csr INTO
607 x_chrv_rec.ID,
608 x_chrv_rec.OBJECT_VERSION_NUMBER,
609 x_chrv_rec.SFWT_FLAG,
610 x_chrv_rec.CHR_ID_RESPONSE,
611 x_chrv_rec.CHR_ID_AWARD,
612 x_chrv_rec.INV_ORGANIZATION_ID,
613 x_chrv_rec.STS_CODE,
614 x_chrv_rec.QCL_ID,
615 x_chrv_rec.SCS_CODE,
616 x_chrv_rec.CONTRACT_NUMBER,
617 x_chrv_rec.CURRENCY_CODE,
618 x_chrv_rec.CONTRACT_NUMBER_MODIFIER,
619 x_chrv_rec.ARCHIVED_YN,
620 x_chrv_rec.DELETED_YN,
621 x_chrv_rec.CUST_PO_NUMBER_REQ_YN,
622 x_chrv_rec.PRE_PAY_REQ_YN,
623 x_chrv_rec.CUST_PO_NUMBER,
624 x_chrv_rec.SHORT_DESCRIPTION,
625 x_chrv_rec.COMMENTS,
626 x_chrv_rec.DESCRIPTION,
627 x_chrv_rec.DPAS_RATING,
628 x_chrv_rec.COGNOMEN,
629 x_chrv_rec.TEMPLATE_YN,
630 x_chrv_rec.TEMPLATE_USED,
631 x_chrv_rec.DATE_APPROVED,
632 x_chrv_rec.DATETIME_CANCELLED,
633 x_chrv_rec.AUTO_RENEW_DAYS,
634 x_chrv_rec.DATE_ISSUED,
635 x_chrv_rec.DATETIME_RESPONDED,
636 x_chrv_rec.NON_RESPONSE_REASON,
637 x_chrv_rec.NON_RESPONSE_EXPLAIN,
638 x_chrv_rec.RFP_TYPE,
639 x_chrv_rec.CHR_TYPE,
640 x_chrv_rec.KEEP_ON_MAIL_LIST,
641 x_chrv_rec.SET_ASIDE_REASON,
642 x_chrv_rec.SET_ASIDE_PERCENT,
643 x_chrv_rec.RESPONSE_COPIES_REQ,
644 x_chrv_rec.DATE_CLOSE_PROJECTED,
645 x_chrv_rec.DATETIME_PROPOSED,
646 x_chrv_rec.DATE_SIGNED,
647 x_chrv_rec.DATE_TERMINATED,
648 x_chrv_rec.DATE_RENEWED,
649 x_chrv_rec.TRN_CODE,
650 x_chrv_rec.START_DATE,
651 x_chrv_rec.END_DATE,
652 x_chrv_rec.AUTHORING_ORG_ID,
653 x_chrv_rec.BUY_OR_SELL,
654 x_chrv_rec.ISSUE_OR_RECEIVE,
655 x_chrv_rec.ESTIMATED_AMOUNT,
656 x_chrv_rec.ESTIMATED_AMOUNT_RENEWED,
657 x_chrv_rec.CURRENCY_CODE_RENEWED,
658 x_chrv_rec.UPG_ORIG_SYSTEM_REF,
659 x_chrv_rec.UPG_ORIG_SYSTEM_REF_ID,
660 x_chrv_rec.APPLICATION_ID,
661 x_chrv_rec.ORIG_SYSTEM_SOURCE_CODE,
662 x_chrv_rec.ORIG_SYSTEM_ID1,
663 x_chrv_rec.ORIG_SYSTEM_REFERENCE1,
664 x_chrv_rec.ATTRIBUTE_CATEGORY,
665 x_chrv_rec.ATTRIBUTE1,
666 x_chrv_rec.ATTRIBUTE2,
667 x_chrv_rec.ATTRIBUTE3,
668 x_chrv_rec.ATTRIBUTE4,
669 x_chrv_rec.ATTRIBUTE5,
670 x_chrv_rec.ATTRIBUTE6,
671 x_chrv_rec.ATTRIBUTE7,
672 x_chrv_rec.ATTRIBUTE8,
673 x_chrv_rec.ATTRIBUTE9,
674 x_chrv_rec.ATTRIBUTE10,
675 x_chrv_rec.ATTRIBUTE11,
676 x_chrv_rec.ATTRIBUTE12,
677 x_chrv_rec.ATTRIBUTE13,
678 x_chrv_rec.ATTRIBUTE14,
679 x_chrv_rec.ATTRIBUTE15,
680 x_chrv_rec.CREATED_BY,
681 x_chrv_rec.CREATION_DATE,
682 x_chrv_rec.LAST_UPDATED_BY,
683 x_chrv_rec.LAST_UPDATE_DATE,
684 x_chrv_rec.LAST_UPDATE_LOGIN;
685 IF okc_chrv_pk_csr%NOTFOUND THEN
686 x_return_status := OKL_API.G_RET_STS_ERROR;
687 END IF;
688 CLOSE okc_chrv_pk_csr;
689 RETURN(x_return_status);
690 EXCEPTION
691 WHEN OTHERS THEN
692 -- store SQL error message on message stack for caller
693 OKL_API.set_message(
694 G_APP_NAME,
695 G_UNEXPECTED_ERROR,
696 G_SQLCODE_TOKEN,
697 SQLCODE,
698 G_SQLERRM_TOKEN,
699 SQLERRM);
700 -- notify caller of an UNEXPECTED error
701 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
702 -- if the cursor is open
703 IF okc_chrv_pk_csr%ISOPEN THEN
704 CLOSE okc_chrv_pk_csr;
705 END IF;
706 RETURN(x_return_status);
707 END get_rec_chrv;
708 ----------------------------------------------------------------------------
709 -- FUNCTION get_rec for: OKC_K_ITEMS_V
710 ---------------------------------------------------------------------------
711 FUNCTION get_rec_cimv(p_cle_id IN OKC_K_ITEMS_V.CLE_ID%TYPE,
712 p_dnz_chr_id IN OKC_K_ITEMS_V.DNZ_CHR_ID%TYPE,
713 x_cimv_rec OUT NOCOPY cimv_rec_type)
714 RETURN VARCHAR2 IS
715 CURSOR okc_cimv_pk_csr(p_cle_id OKC_K_ITEMS_V.CLE_ID%TYPE,
716 p_dnz_chr_id OKC_K_ITEMS_V.DNZ_CHR_ID%TYPE) IS
717 SELECT CIM.ID,
718 CIM.OBJECT_VERSION_NUMBER,
719 CIM.CLE_ID,
720 CIM.CHR_ID,
721 CIM.CLE_ID_FOR,
722 CIM.DNZ_CHR_ID,
723 CIM.OBJECT1_ID1,
724 CIM.OBJECT1_ID2,
725 CIM.JTOT_OBJECT1_CODE,
726 CIM.UOM_CODE,
727 CIM.EXCEPTION_YN,
728 CIM.NUMBER_OF_ITEMS,
729 CIM.UPG_ORIG_SYSTEM_REF,
730 CIM.UPG_ORIG_SYSTEM_REF_ID,
731 CIM.PRICED_ITEM_YN,
732 CIM.CREATED_BY,
733 CIM.CREATION_DATE,
734 CIM.LAST_UPDATED_BY,
735 CIM.LAST_UPDATE_DATE,
736 CIM.LAST_UPDATE_LOGIN
737 FROM okc_k_items_v cim
738 WHERE cim.dnz_chr_id = p_dnz_chr_id
739 AND cim.cle_id = p_cle_id;
740 l_okc_cimv_pk okc_cimv_pk_csr%ROWTYPE;
741 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
742 BEGIN
743 OPEN okc_cimv_pk_csr(p_cle_id,
744 p_dnz_chr_id);
745 FETCH okc_cimv_pk_csr INTO
746 x_cimv_rec.ID,
747 x_cimv_rec.OBJECT_VERSION_NUMBER,
748 x_cimv_rec.CLE_ID,
749 x_cimv_rec.CHR_ID,
750 x_cimv_rec.CLE_ID_FOR,
751 x_cimv_rec.DNZ_CHR_ID,
752 x_cimv_rec.OBJECT1_ID1,
753 x_cimv_rec.OBJECT1_ID2,
754 x_cimv_rec.JTOT_OBJECT1_CODE,
755 x_cimv_rec.UOM_CODE,
756 x_cimv_rec.EXCEPTION_YN,
757 x_cimv_rec.NUMBER_OF_ITEMS,
758 x_cimv_rec.UPG_ORIG_SYSTEM_REF,
759 x_cimv_rec.UPG_ORIG_SYSTEM_REF_ID,
760 x_cimv_rec.PRICED_ITEM_YN,
761 x_cimv_rec.CREATED_BY,
762 x_cimv_rec.CREATION_DATE,
763 x_cimv_rec.LAST_UPDATED_BY,
764 x_cimv_rec.LAST_UPDATE_DATE,
765 x_cimv_rec.LAST_UPDATE_LOGIN;
766 IF okc_cimv_pk_csr%NOTFOUND THEN
767 x_return_status := OKL_API.G_RET_STS_ERROR;
768 END IF;
769 IF (okc_cimv_pk_csr%ROWCOUNT > 1) THEN
770 x_return_status := OKL_API.G_RET_STS_ERROR;
771 END IF;
772 CLOSE okc_cimv_pk_csr;
773 RETURN(x_return_status);
774 EXCEPTION
775 WHEN OTHERS THEN
776 -- store SQL error message on message stack for caller
777 OKL_API.set_message(
778 G_APP_NAME,
779 G_UNEXPECTED_ERROR,
780 G_SQLCODE_TOKEN,
781 SQLCODE,
782 G_SQLERRM_TOKEN,
783 SQLERRM);
784 -- notify caller of an UNEXPECTED error
785 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
786 -- if the cursor is open
787 IF okc_cimv_pk_csr%ISOPEN THEN
788 CLOSE okc_cimv_pk_csr;
789 END IF;
790 RETURN(x_return_status);
791 END get_rec_cimv;
792 --Bug# 4631549 : validate_release_date to be called from validate_release_contract
793 ------------------------------------------------------------------------------
794 --Start of comments
795 --
796 --Procedure Name : validate_release_date
797 --Purpose : Check if Release Contract Start Date
798 -- falls within the current open FA period
799 -- - used internally
800 --Modification History :
801 --08-Jul-2004 rpillay Created
802 ------------------------------------------------------------------------------
803 PROCEDURE validate_release_date
804 (p_api_version IN NUMBER,
805 p_init_msg_list IN VARCHAR2,
806 x_return_status OUT NOCOPY VARCHAR2,
807 x_msg_count OUT NOCOPY NUMBER,
808 x_msg_data OUT NOCOPY VARCHAR2,
809 p_book_type_code IN VARCHAR2,
810 p_release_date IN DATE) IS
811
812 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
813 l_api_name CONSTANT VARCHAR2(30) := 'validate_release_date';
814 l_api_version CONSTANT NUMBER := 1.0;
815
816 CURSOR open_period_cur(p_book_type_code IN VARCHAR2) IS
817 select period_name,
818 calendar_period_open_date,
819 calendar_period_close_date
820 from fa_deprn_periods
821 where book_type_code = p_book_type_code
822 and period_close_date is null;
823
824 open_period_rec open_period_cur%rowtype;
825 l_current_open_period varchar2(240) default null;
826
827 l_icx_date_format varchar2(240);
828 BEGIN
829
830 open open_period_cur(p_book_type_code);
831 fetch open_period_cur into open_period_rec;
832 close open_period_cur;
833
834 IF NOT ( p_release_date BETWEEN open_period_rec.calendar_period_open_date AND
835 open_period_rec.calendar_period_close_date ) THEN
836
837 l_icx_date_format := nvl(fnd_profile.value('ICX_DATE_FORMAT_MASK'),'DD-MON-RRRR');
838
839 l_current_open_period := open_period_rec.period_name||' ('||
840 to_char(open_period_rec.calendar_period_open_date,l_icx_date_format)
841 ||' - '||to_char(open_period_rec.calendar_period_close_date,l_icx_date_format)||')';
842 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
843 p_msg_name => 'OKL_LLA_RELEASE_DATE_INVALID',
844 p_token1 => 'BOOK_TYPE_CODE',
845 p_token1_value => p_book_type_code,
846 p_token2 => 'OPEN_PERIOD',
847 p_token2_value => l_current_open_period
848 );
849 RAISE OKL_API.G_EXCEPTION_ERROR;
850 END IF;
851
852 EXCEPTION
853 WHEN OKL_API.G_EXCEPTION_ERROR Then
854 x_return_status := OKL_API.G_RET_STS_ERROR;
855
856 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
857 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
858
859 WHEN OTHERS THEN
860 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
861
862 END validate_release_date;
863
864 ----------------------------------------------------------------------------
865 -- Start of Commnets
866 -- Badrinath Kuchibholta
867 -- Procedure Name : l_update_contract_header
868 -- Description : Update Contract Header
869 -- Business Rules :
870 -- Parameters :
871 -- Version :
872 -- End of Commnets
873 PROCEDURE l_update_contract_header(p_api_version IN NUMBER,
874 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
875 x_return_status OUT NOCOPY VARCHAR2,
876 x_msg_count OUT NOCOPY NUMBER,
877 x_msg_data OUT NOCOPY VARCHAR2,
878 p_restricted_update IN VARCHAR2 DEFAULT 'F',
879 p_chrv_rec IN chrv_rec_type,
880 p_khrv_rec IN khrv_rec_type,
881 x_chrv_rec OUT NOCOPY chrv_rec_type,
882 x_khrv_rec OUT NOCOPY khrv_rec_type) IS
883 l_api_name CONSTANT VARCHAR2(30) := 'L_UPDATE_CONTRACT_HEADER';
884
885 -- Added below for bug 5769216 - Start
886 -- Cursor to get top line id
887 Cursor top_cle_csr (p_chr_id IN NUMBER) is
888 SELECT cle.id
889 From okc_k_lines_b cle,
890 okc_statuses_b sts
891 where cle.dnz_chr_id = cle.chr_id
892 and cle.chr_id = p_chr_id
893 and sts.code = cle.sts_code;
894
895
896 l_top_cle_id OKC_K_LINES_B.ID%TYPE;
897 l_chr_id OKC_K_HEADERS_B.ID%TYPE;
898 l_cle_id OKC_K_LINES_B.ID%TYPE;
899 l_cle_start_date OKC_K_LINES_B.START_DATE%TYPE;
900 l_cle_end_date OKC_K_LINES_B.END_DATE%TYPE;
901 l_clev_rec OKL_OKC_MIGRATION_PVT.clev_rec_type;
902 lx_clev_rec OKL_OKC_MIGRATION_PVT.clev_rec_type;
903 l_parent_cle_id OKC_K_LINES_B.orig_system_id1%TYPE;
904
905 --Cursor to check if lease chr has lines to change effectivity
906
907 Cursor cle_csr(p_cle_id IN NUMBER) is
908 SELECT cle.id,
909 cle.start_date,
910 cle.end_date
911 From okc_k_lines_b cle
912 connect by prior cle.id = cle.cle_id
913 start with cle.id = p_cle_id
914 and exists (select 1
915 from okc_statuses_b sts
916 where sts.code = cle.sts_code);
917 -- bug 5769216 - End
918
919 BEGIN
920 x_return_status := OKL_API.G_RET_STS_SUCCESS;
921 -- Call start_activity to create savepoint, check compatibility
922 -- and initialize message list
923 x_return_status := OKL_API.START_ACTIVITY (
924 l_api_name
925 ,p_init_msg_list
926 ,'_PVT'
927 ,x_return_status);
928 -- Check if activity started successfully
929 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
930 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
931 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
932 RAISE OKL_API.G_EXCEPTION_ERROR;
933 END IF;
934
935 -- Bug 5769216 -- Start
936 Open top_cle_csr(p_chr_id => p_chrv_rec.id);
937 Loop
938 Fetch top_cle_csr into l_top_cle_id;
939 Exit when top_cle_csr%NOTFOUND;
940 Open cle_csr (p_cle_id => l_top_cle_id);
941 Loop
942 Fetch Cle_Csr into l_cle_id,
943 l_cle_start_date,
944 l_cle_end_date;
945 Exit When Cle_Csr%NOTFOUND;
946
947 l_clev_rec.id := l_cle_id;
948 l_clev_rec.start_date := p_khrv_rec.date_deal_transferred;
949
950 okl_okc_migration_pvt.update_contract_line(
951 p_api_version => p_api_version,
952 p_init_msg_list => p_init_msg_list,
953 x_return_status => x_return_status,
954 x_msg_count => x_msg_count,
955 x_msg_data => x_msg_data,
956 p_clev_rec => l_clev_rec,
957 x_clev_rec => lx_clev_rec);
958 -- check return status
959 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
960 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
961 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
962 RAISE OKL_API.G_EXCEPTION_ERROR;
963 END IF;
964 End Loop;
965 Close Cle_Csr;
966 End Loop;
967 Close top_cle_csr;
968 -- Bug 5769216 - End
969
970 OKL_OKC_MIGRATION_PVT.update_contract_header(
971 p_api_version => p_api_version,
972 p_init_msg_list => p_init_msg_list,
973 x_return_status => x_return_status,
974 x_msg_count => x_msg_count,
975 x_msg_data => x_msg_data,
976 p_restricted_update => p_restricted_update,
977 p_chrv_rec => p_chrv_rec,
978 x_chrv_rec => x_chrv_rec);
979
980 -- check return status
981 If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
982 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
983 Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
984 raise OKL_API.G_EXCEPTION_ERROR;
985 End If;
986
987 OKL_KHR_PVT.Update_Row(
988 p_api_version => p_api_version,
989 p_init_msg_list => p_init_msg_list,
990 x_return_status => x_return_status,
991 x_msg_count => x_msg_count,
992 x_msg_data => x_msg_data,
993 p_khrv_rec => p_khrv_rec,
994 x_khrv_rec => x_khrv_rec);
995
996 If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
997 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
998 Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
999 raise OKL_API.G_EXCEPTION_ERROR;
1000 End If;
1001
1002 OKL_API.END_ACTIVITY (x_msg_count,
1003 x_msg_data );
1004 EXCEPTION
1005 WHEN OKL_API.G_EXCEPTION_ERROR THEN
1006 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1007 l_api_name,
1008 G_PKG_NAME,
1009 'OKL_API.G_RET_STS_ERROR',
1010 x_msg_count,
1011 x_msg_data,
1012 '_PVT');
1013 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1014 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1015 l_api_name,
1016 G_PKG_NAME,
1017 'OKL_API.G_RET_STS_UNEXP_ERROR',
1018 x_msg_count,
1019 x_msg_data,
1020 '_PVT');
1021 WHEN OTHERS THEN
1022 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1023 l_api_name,
1024 G_PKG_NAME,
1025 'OTHERS',
1026 x_msg_count,
1027 x_msg_data,
1028 '_PVT');
1029 END l_update_contract_header;
1030 -------------------------------------------------------------------------------------------------
1031 -- Start of Commnets
1032 -- Badrinath Kuchibholta
1033 -- Procedure Name : l_copy_contract
1034 -- Description : Copy of the contract
1035 -- Business Rules :
1036 -- Parameters :
1037 -- Version :
1038 -- End of Commnets
1039 PROCEDURE l_copy_contract(p_api_version IN NUMBER,
1040 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
1041 x_return_status OUT NOCOPY VARCHAR2,
1042 x_msg_count OUT NOCOPY NUMBER,
1043 x_msg_data OUT NOCOPY VARCHAR2,
1044 p_commit IN VARCHAR2 DEFAULT 'F',
1045 p_old_chr_id IN NUMBER,
1046 p_new_contract_number IN VARCHAR2,
1047 p_release_date IN DATE,
1048 p_term_duration IN NUMBER,
1049 x_new_chrv_rec OUT NOCOPY chrv_rec_type,
1050 x_new_khrv_rec OUT NOCOPY khrv_rec_type) IS
1051 l_api_name CONSTANT VARCHAR2(30) := 'LOCAL_COPY_CONTRACT';
1052 l_chrv_rec chrv_rec_type;
1053 l_khrv_rec khrv_rec_type;
1054 ln_new_chr_id OKC_K_HEADERS_V.ID%TYPE;
1055 ln_new_cle_id OKC_K_LINES_V.ID%TYPE;
1056 lt_klev_tbl_type klev_tbl_type;
1057 ltx_klev_tbl_type klev_tbl_type;
1058 i number := 0;
1059
1060 CURSOR c_get_old_k_top_line(p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE) IS
1061 SELECT cle.id top_line
1062 FROM okc_subclass_top_line stl,
1063 okc_line_styles_b lse,
1064 okc_k_lines_b cle
1065 WHERE cle.dnz_chr_id = p_dnz_chr_id
1066 AND cle.lse_id = lse.id
1067 AND lse.lty_code = G_FIN_LINE_LTY_CODE
1068 AND lse.lse_parent_id is null
1069 AND lse.lse_type = G_TLS_TYPE
1070 AND lse.id = stl.lse_Id
1071 AND stl.scs_code = 'LEASE';
1072
1073 CURSOR larles_csr(p_chr_id IN NUMBER) IS
1074 select rul.id rul_id,
1075 rgp.id rgp_id,
1076 rul.rule_information1
1077 from okc_rule_groups_b rgp,
1078 okc_rules_b rul
1079 where rgp.id = rul.rgp_id
1080 and rgp.rgd_code = 'LARLES'
1081 and rul.rule_information_category = 'LARLES'
1082 and rgp.dnz_chr_id = p_chr_id
1083 and rgp.chr_id = p_chr_id
1084 and rul.dnz_chr_id = p_chr_id;
1085
1086 larles_rec larles_csr%ROWTYPE;
1087 lp_larles_rgpv_rec OKL_OKC_MIGRATION_PVT.rgpv_rec_type;
1088 lx_larles_rgpv_rec OKL_OKC_MIGRATION_PVT.rgpv_rec_type;
1089 lp_larles_rulv_rec Okl_Rule_Pub.rulv_rec_type;
1090 lx_larles_rulv_rec Okl_Rule_Pub.rulv_rec_type;
1091
1092 BEGIN
1093 x_return_status := OKL_API.G_RET_STS_SUCCESS;
1094 -- Call start_activity to create savepoint, check compatibility
1095 -- and initialize message list
1096 x_return_status := OKL_API.START_ACTIVITY (
1097 l_api_name
1098 ,p_init_msg_list
1099 ,'_PVT'
1100 ,x_return_status);
1101 -- Check if activity started successfully
1102 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1103 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1104 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1105 RAISE OKL_API.G_EXCEPTION_ERROR;
1106 END IF;
1107 -- TO copy the Copy the contract first
1108 OKL_COPY_CONTRACT_PUB.copy_lease_contract_new(
1109 p_api_version => p_api_version,
1110 p_init_msg_list => p_init_msg_list,
1111 x_return_status => x_return_status,
1112 x_msg_count => x_msg_count,
1113 x_msg_data => x_msg_data,
1114 p_commit => OKL_API.G_FALSE,
1115 p_chr_id => p_old_chr_id,
1116 p_contract_number => p_new_contract_number,
1117 p_contract_number_modifier => null,
1118 p_to_template_yn => 'N',
1119 p_renew_ref_yn => 'N',
1120 p_copy_lines_yn => 'Y',
1121 p_override_org => 'N',
1122 p_trans_type => 'CRL',
1123 x_chr_id => ln_new_chr_id);
1124 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1125 OKL_API.set_message(p_app_name => G_APP_NAME,
1126 p_msg_name => G_COPY_HEADER);
1127 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1128 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1129 OKL_API.set_message(p_app_name => G_APP_NAME,
1130 p_msg_name => G_COPY_HEADER);
1131 RAISE OKL_API.G_EXCEPTION_ERROR;
1132 END IF;
1133
1134 okc_context.set_okc_org_context(p_chr_id => ln_new_chr_id);
1135
1136 -- Update Contract Header Start Date to Release Date
1137 -- Update Term Duration to new contract duration
1138 l_chrv_rec.id := ln_new_chr_id;
1139 l_chrv_rec.start_date := p_release_date;
1140 l_chrv_rec.orig_system_source_code := 'OKL_RELEASE';
1141
1142 l_khrv_rec.id := ln_new_chr_id;
1143 l_khrv_rec.term_duration := p_term_duration;
1144 l_khrv_rec.date_deal_transferred := p_release_date;
1145
1146 l_update_contract_header(p_api_version => p_api_version,
1147 p_init_msg_list => p_init_msg_list,
1148 x_return_status => x_return_status,
1149 x_msg_count => x_msg_count,
1150 x_msg_data => x_msg_data,
1151 p_restricted_update => OKL_API.G_FALSE,
1152 p_chrv_rec => l_chrv_rec,
1153 p_khrv_rec => l_khrv_rec,
1154 x_chrv_rec => x_new_chrv_rec,
1155 x_khrv_rec => x_new_khrv_rec);
1156 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1157 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1158 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1159 RAISE OKL_API.G_EXCEPTION_ERROR;
1160 END IF;
1161
1162 -- Set Re-lease Asset flag to 'Y'
1163 open larles_csr(p_chr_id => x_new_chrv_rec.id);
1164 fetch larles_csr into larles_rec;
1165 if larles_csr%NOTFOUND then
1166
1167 lp_larles_rgpv_rec.id := null;
1168 lp_larles_rgpv_rec.rgd_code := 'LARLES';
1169 lp_larles_rgpv_rec.dnz_chr_id := x_new_chrv_rec.id;
1170 lp_larles_rgpv_rec.chr_id := x_new_chrv_rec.id;
1171 lp_larles_rgpv_rec.rgp_type := 'KRG';
1172
1173 OKL_RULE_PUB.create_rule_group(
1174 p_api_version => p_api_version,
1175 p_init_msg_list => p_init_msg_list,
1176 x_return_status => x_return_status,
1177 x_msg_count => x_msg_count,
1178 x_msg_data => x_msg_data,
1179 p_rgpv_rec => lp_larles_rgpv_rec,
1180 x_rgpv_rec => lx_larles_rgpv_rec);
1181
1182 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
1183 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1184 Elsif (x_return_status = OKL_API.G_RET_STS_ERROR) then
1185 raise OKL_API.G_EXCEPTION_ERROR;
1186 End If;
1187
1188 lp_larles_rulv_rec.id := null;
1189 lp_larles_rulv_rec.rgp_id := lx_larles_rgpv_rec.id;
1190 lp_larles_rulv_rec.rule_information_category := 'LARLES';
1191 lp_larles_rulv_rec.dnz_chr_id := x_new_chrv_rec.id;
1192 lp_larles_rulv_rec.rule_information1 := 'Y';
1193 lp_larles_rulv_rec.WARN_YN := 'N';
1194 lp_larles_rulv_rec.STD_TEMPLATE_YN := 'N';
1195
1196 OKL_RULE_PUB.create_rule(
1197 p_api_version => p_api_version,
1198 p_init_msg_list => p_init_msg_list,
1199 x_return_status => x_return_status,
1200 x_msg_count => x_msg_count,
1201 x_msg_data => x_msg_data,
1202 p_rulv_rec => lp_larles_rulv_rec,
1203 x_rulv_rec => lx_larles_rulv_rec);
1204
1205 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
1206 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1207 Elsif (x_return_status = OKL_API.G_RET_STS_ERROR) then
1208 raise OKL_API.G_EXCEPTION_ERROR;
1209 End If;
1210
1211 else
1212 if larles_rec.rule_information1 <> 'Y' then
1213
1214 lp_larles_rulv_rec.id := larles_rec.rul_id;
1215 lp_larles_rulv_rec.rgp_id := larles_rec.rgp_id;
1216 lp_larles_rulv_rec.rule_information_category := 'LARLES';
1217 lp_larles_rulv_rec.dnz_chr_id := x_new_chrv_rec.id;
1218 lp_larles_rulv_rec.rule_information1 := 'Y';
1219 lp_larles_rulv_rec.WARN_YN := 'N';
1220 lp_larles_rulv_rec.STD_TEMPLATE_YN := 'N';
1221
1222 OKL_RULE_PUB.update_rule(
1223 p_api_version => p_api_version,
1224 p_init_msg_list => p_init_msg_list,
1225 x_return_status => x_return_status,
1226 x_msg_count => x_msg_count,
1227 x_msg_data => x_msg_data,
1228 p_rulv_rec => lp_larles_rulv_rec,
1229 x_rulv_rec => lx_larles_rulv_rec);
1230
1231 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
1232 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1233 Elsif (x_return_status = OKL_API.G_RET_STS_ERROR) then
1234 raise OKL_API.G_EXCEPTION_ERROR;
1235 End If;
1236 end if;
1237 end if;
1238
1239 OKL_API.END_ACTIVITY (x_msg_count,
1240 x_msg_data );
1241 EXCEPTION
1242 WHEN OKL_API.G_EXCEPTION_ERROR THEN
1243 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1244 l_api_name,
1245 G_PKG_NAME,
1246 'OKL_API.G_RET_STS_ERROR',
1247 x_msg_count,
1248 x_msg_data,
1249 '_PVT');
1250 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1251 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1252 l_api_name,
1253 G_PKG_NAME,
1254 'OKL_API.G_RET_STS_UNEXP_ERROR',
1255 x_msg_count,
1256 x_msg_data,
1257 '_PVT');
1258 WHEN OTHERS THEN
1259 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1260 l_api_name,
1261 G_PKG_NAME,
1262 'OTHERS',
1263 x_msg_count,
1264 x_msg_data,
1265 '_PVT');
1266 END l_copy_contract;
1267 -----------------------------------------------------------------------------------------------------------------------
1268 FUNCTION get_k_tls_asset(p_dnz_chr_id IN OKC_K_LINES_B.DNZ_CHR_ID%TYPE DEFAULT OKL_API.G_MISS_NUM,
1269 x_top_line_tbl OUT NOCOPY g_top_line_tbl,
1270 x_asset_num_tbl OUT NOCOPY g_asset_num_tbl)
1271 RETURN VARCHAR2 IS
1272 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
1273 i NUMBER := 0;
1274 j NUMBER := 0;
1275
1276 CURSOR c_get_old_k_top_line(p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE) IS
1277 SELECT cle.id top_line
1278 FROM okc_subclass_top_line stl,
1279 okc_line_styles_b lse,
1280 okc_k_lines_b cle
1281 WHERE cle.dnz_chr_id = p_dnz_chr_id
1282 AND cle.lse_id = lse.id
1283 AND lse.lty_code = G_FIN_LINE_LTY_CODE
1284 AND lse.lse_parent_id is null
1285 AND lse.lse_type = G_TLS_TYPE
1286 AND lse.id = stl.lse_Id
1287 AND stl.scs_code = 'LEASE';
1288
1289 CURSOR c_get_old_k_asset(p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE) IS
1290 SELECT av.asset_number asset_number
1291 FROM okc_subclass_top_line stl,
1292 okc_line_styles_b lse2,
1293 okc_line_styles_b lse1,
1294 okx_assets_v av,
1295 okc_k_items cim,
1296 okc_k_lines_b cle
1297 WHERE cle.dnz_chr_id = p_dnz_chr_id
1298 AND cle.id = cim.cle_id
1299 AND cim.dnz_chr_id = cle.dnz_chr_id
1300 AND cim.object1_id1 = av.id1
1301 AND cim.object1_id2 = av.id2
1302 AND cle.lse_id = lse1.id
1303 AND lse1.lty_code = G_FA_LINE_LTY_CODE
1304 AND lse1.lse_type = G_SLS_TYPE
1305 AND lse1.lse_parent_id = lse2.id
1306 AND lse2.lty_code = G_FIN_LINE_LTY_CODE
1307 AND lse2.id = stl.lse_Id
1308 AND stl.scs_code = 'LEASE';
1309
1310 BEGIN
1311 -- Getting the TOP Line STS CODE
1312 IF (p_dnz_chr_id IS NOT NULL OR
1313 p_dnz_chr_id <> OKL_API.G_MISS_NUM) THEN
1314 -- Getting the all the top lines
1315 FOR r_get_old_k_top_line IN c_get_old_k_top_line(p_dnz_chr_id) LOOP
1316 x_top_line_tbl(i) := r_get_old_k_top_line.top_line;
1317 IF c_get_old_k_top_line%NOTFOUND THEN
1318 -- store SQL error message on message stack
1319 OKL_API.set_message(p_app_name => G_APP_NAME,
1320 p_msg_name => G_NO_MATCHING_RECORD,
1321 p_token1 => G_COL_NAME_TOKEN,
1322 p_token1_value => 'dnz_chr_id');
1323 x_return_status := OKL_API.G_RET_STS_ERROR;
1324 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
1325 END IF;
1326 i := i + 1;
1327 END LOOP;
1328 IF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1329 RAISE G_EXCEPTION_HALT_VALIDATION;
1330 END IF;
1331 -- Getting the all the asset number
1332 FOR r_get_old_k_asset IN c_get_old_k_asset(p_dnz_chr_id) LOOP
1333 x_asset_num_tbl(j) := r_get_old_k_asset.asset_number;
1334 IF c_get_old_k_asset%NOTFOUND THEN
1335 -- store SQL error message on message stack
1336 OKL_API.set_message(p_app_name => G_APP_NAME,
1337 p_msg_name => G_NO_MATCHING_RECORD,
1338 p_token1 => G_COL_NAME_TOKEN,
1339 p_token1_value => 'Asset Number');
1340 x_return_status := OKL_API.G_RET_STS_ERROR;
1341 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
1342 END IF;
1343 j := j + 1;
1344 END LOOP;
1345 IF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1346 RAISE G_EXCEPTION_HALT_VALIDATION;
1347 END IF;
1348 -- Check we got any record
1349 IF x_top_line_tbl.count = 0 THEN
1350 -- store SQL error message on message stack
1351 OKL_API.set_message(p_app_name => G_APP_NAME,
1352 p_msg_name => G_NO_MATCHING_RECORD,
1353 p_token1 => G_COL_NAME_TOKEN,
1354 p_token1_value => 'Top Line id');
1355 RAISE G_EXCEPTION_HALT_VALIDATION;
1356 END IF;
1357 IF x_asset_num_tbl.count = 0 THEN
1358 -- store SQL error message on message stack
1359 OKL_API.set_message(p_app_name => G_APP_NAME,
1360 p_msg_name => G_NO_MATCHING_RECORD,
1361 p_token1 => G_COL_NAME_TOKEN,
1362 p_token1_value => 'Asset Number');
1363 RAISE G_EXCEPTION_HALT_VALIDATION;
1364 END IF;
1365 ELSE
1366 -- store SQL error message on message stack
1367 -- Notify Error
1368 OKL_API.set_message(p_app_name => G_APP_NAME,
1369 p_msg_name => G_REQUIRED_VALUE,
1370 p_token1 => G_COL_NAME_TOKEN,
1371 p_token1_value => 'Dnz_chr_id');
1372 RAISE G_EXCEPTION_STOP_VALIDATION;
1373 END IF;
1374 RETURN x_return_status;
1375 EXCEPTION
1376 WHEN G_EXCEPTION_HALT_VALIDATION then
1377 -- We are here b'cause we have no parent record
1378 -- If the cursor is open then it has to be closed
1379 IF c_get_old_k_top_line%ISOPEN THEN
1380 CLOSE c_get_old_k_top_line;
1381 END IF;
1382 -- if the cursor is open
1383 IF c_get_old_k_asset%ISOPEN THEN
1384 CLOSE c_get_old_k_asset;
1385 END IF;
1386 -- notify caller of an error
1387 x_return_status := OKL_API.G_RET_STS_ERROR;
1388 RETURN(x_return_status);
1389 WHEN OTHERS THEN
1390 -- store SQL error message on message stack for caller
1391 OKL_API.set_message(
1392 G_APP_NAME,
1393 G_UNEXPECTED_ERROR,
1394 G_SQLCODE_TOKEN,
1395 SQLCODE,
1396 G_SQLERRM_TOKEN,
1397 SQLERRM);
1398 -- notify caller of an UNEXPECTED error
1399 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1400 IF c_get_old_k_top_line%ISOPEN THEN
1401 CLOSE c_get_old_k_top_line;
1402 END IF;
1403 -- if the cursor is open
1404 IF c_get_old_k_asset%ISOPEN THEN
1405 CLOSE c_get_old_k_asset;
1406 END IF;
1407 RETURN(x_return_status);
1408 END get_k_tls_asset;
1409 -----------------------------------------------------------------------------------------------
1410 -- Start of Commnets
1411 -- Badrinath Kuchibholta
1412 -- Procedure Name : Validate_offlease_asset
1413 -- Description : validation with OKX_ASSET_LINES_V and OKL_ASSET_RETURNS_V
1414 -- Business Rules : We first need to get the parent line id and
1415 -- Asset number of the old contract number.
1416 -- And Now the check the top_line_id present in OKL_ASSET_RETURNS_V
1417 -- which significe that the asset are off lease and ready for release
1418 --
1419 -- Again we now check Asset number against OKX_ASSET_LINES_V to make sure
1420 -- asset number are not in lease with any other conract by looking for
1421 -- status of that line as TERMINATED , EXPIRED etc....
1422 -- Parameters : 1.P_dnz_chr_id Old Contract id
1423 -- Version : 1.0
1424 -- End of Commnets
1425 FUNCTION validate_assets_offlease(p_dnz_chr_id IN OKC_K_LINES_B.DNZ_CHR_ID%TYPE)
1426 RETURN VARCHAR2 IS
1427 lt_top_line_tbl g_top_line_tbl;
1428 lt_asset_num_tbl g_asset_num_tbl;
1429 i NUMBER := 0;
1430 j NUMBER := 0;
1431 ln_top_present NUMBER := 0;
1432 ln_asset_present NUMBER := 0;
1433 x_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
1434 CURSOR c_validate_top_line(p_cle_id OKC_K_LINES_V.ID%TYPE) IS
1435 SELECT 1
1436 FROM DUAL
1437 WHERE EXISTS (SELECT '1'
1438 FROM OKL_ASSET_RETURNS_B
1439 WHERE kle_id = p_cle_id
1440 AND ars_code = 'RE_LEASE');
1441
1442 CURSOR c_validate_asset_number(p_asset_number OKL_TXL_ASSETS_B.ASSET_NUMBER%TYPE)
1443 IS
1444 SELECT 1
1445 FROM dual
1446 WHERE EXISTS (SELECT '1'
1447 FROM okx_asset_lines_v
1448 WHERE asset_number = p_asset_number
1449 AND line_status not in ('EXPIRED','TERMINATED','ABANDONED'));
1450
1451 BEGIN
1452 -- data is required
1453 IF (p_dnz_chr_id = OKL_API.G_MISS_NUM) OR
1454 (p_dnz_chr_id IS NULL) THEN
1455 -- halt validation
1456 RAISE G_EXCEPTION_HALT_VALIDATION;
1457 END IF;
1458 x_return_status := get_k_tls_asset(p_dnz_chr_id => p_dnz_chr_id,
1459 x_top_line_tbl => lt_top_line_tbl,
1460 x_asset_num_tbl => lt_asset_num_tbl);
1461 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1462 RAISE G_EXCEPTION_HALT_VALIDATION;
1463 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1464 RAISE G_EXCEPTION_HALT_VALIDATION;
1465 END IF;
1466 IF (lt_top_line_tbl.COUNT > 0) THEN
1467 i := lt_top_line_tbl.FIRST;
1468 LOOP
1469 OPEN c_validate_top_line(lt_top_line_tbl(i));
1470 IF c_validate_top_line%NOTFOUND THEN
1471 OKL_API.set_message(p_app_name => G_APP_NAME,
1472 p_msg_name => G_NO_MATCHING_RECORD,
1473 p_token1 => G_COL_NAME_TOKEN,
1474 p_token1_value => 'Top Line for Contract Number');
1475 x_return_status := OKL_API.G_RET_STS_ERROR;
1476 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
1477 END IF;
1478 FETCH c_validate_top_line INTO ln_top_present;
1479 CLOSE c_validate_top_line;
1480 EXIT WHEN (ln_top_present = null);
1481 EXIT WHEN (i = lt_top_line_tbl.LAST);
1482 i := lt_top_line_tbl.NEXT(i);
1483 END LOOP;
1484 END IF;
1485 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1486 RAISE G_EXCEPTION_HALT_VALIDATION;
1487 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1488 RAISE G_EXCEPTION_HALT_VALIDATION;
1489 END IF;
1490
1491 IF (lt_asset_num_tbl.COUNT > 0) THEN
1492 j := lt_asset_num_tbl.FIRST;
1493 LOOP
1494 OPEN c_validate_asset_number(lt_asset_num_tbl(j));
1495 IF c_validate_asset_number%NOTFOUND THEN
1496 OKL_API.set_message(p_app_name => G_APP_NAME,
1497 p_msg_name => G_NO_MATCHING_RECORD,
1498 p_token1 => G_COL_NAME_TOKEN,
1499 p_token1_value => 'Asset Number');
1500 x_return_status := OKL_API.G_RET_STS_ERROR;
1501 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
1502 END IF;
1503 FETCH c_validate_asset_number INTO ln_asset_present;
1504 CLOSE c_validate_asset_number;
1505 EXIT WHEN (ln_asset_present <> null);
1506 EXIT WHEN (j = lt_asset_num_tbl.LAST);
1507 j := lt_asset_num_tbl.NEXT(j);
1508 END LOOP;
1509 END IF;
1510 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1511 RAISE G_EXCEPTION_HALT_VALIDATION;
1512 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1513 RAISE G_EXCEPTION_HALT_VALIDATION;
1514 END IF;
1515 IF ln_asset_present IS NOT NULL AND
1516 ln_top_present IS NULL THEN
1517 RAISE G_EXCEPTION_HALT_VALIDATION;
1518 ELSIF ln_asset_present IS NOT NULL OR
1519 ln_top_present IS NULL THEN
1520 RAISE G_EXCEPTION_HALT_VALIDATION;
1521 END IF;
1522 RETURN(x_return_status);
1523 EXCEPTION
1524 WHEN G_EXCEPTION_HALT_VALIDATION then
1525 -- We are here b'cause we have no parent record
1526 -- store SQL error message on message stack
1527 OKL_API.set_message(p_app_name => G_APP_NAME,
1528 p_msg_name => G_NO_MATCHING_RECORD,
1529 p_token1 => G_COL_NAME_TOKEN,
1530 p_token1_value => 'Cle_id');
1531 -- If the cursor is open then it has to be closed
1532 IF c_validate_asset_number%ISOPEN THEN
1533 CLOSE c_validate_asset_number;
1534 END IF;
1535 IF c_validate_top_line%ISOPEN THEN
1536 CLOSE c_validate_top_line;
1537 END IF;
1538 -- notify caller of an error
1539 x_return_status := OKL_API.G_RET_STS_ERROR;
1540 RETURN(x_return_status);
1541 WHEN OTHERS THEN
1542 -- store SQL error message on message stack
1543 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
1544 p_msg_name => G_UNEXPECTED_ERROR,
1545 p_token1 => G_SQLCODE_TOKEN,
1546 p_token1_value => SQLCODE,
1547 p_token2 => G_SQLERRM_TOKEN,
1548 p_token2_value => SQLERRM);
1549 -- If the cursor is open then it has to be closed
1550 IF c_validate_asset_number%ISOPEN THEN
1551 CLOSE c_validate_asset_number;
1552 END IF;
1553 IF c_validate_top_line%ISOPEN THEN
1554 CLOSE c_validate_top_line;
1555 END IF;
1556 -- notify caller of an error as UNEXPETED error
1557 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1558 RETURN(x_return_status);
1559 END validate_assets_offlease;
1560
1561 -----------------------------------------------------------------------------------------------
1562 -- Start of Comments
1563 -- Rekha Pillay
1564 -- Procedure Name : Create_Release_Transaction
1565 -- Description : Create Re-lease Transaction
1566 -- Business Rules :
1567 --
1568 --
1569 --
1570 --
1571 --
1572 --
1573 --
1574 -- Parameters :
1575 -- Version : 1.0
1576 -- End of Commments
1577 PROCEDURE create_release_transaction
1578 (p_api_version IN NUMBER,
1579 p_init_msg_list IN VARCHAR2,
1580 x_return_status OUT NOCOPY VARCHAR2,
1581 x_msg_count OUT NOCOPY NUMBER,
1582 x_msg_data OUT NOCOPY VARCHAR2,
1583 p_chr_id IN OKC_K_HEADERS_B.ID%TYPE,
1584 p_new_chr_id IN OKC_K_HEADERS_B.ID%TYPE,
1585 p_reason_code IN VARCHAR2,
1586 p_description IN VARCHAR2,
1587 p_trx_date IN DATE,
1588 p_source_trx_id IN NUMBER,
1589 p_source_trx_type IN VARCHAR2,
1590 x_tcnv_rec OUT NOCOPY tcnv_rec_type) IS
1591
1592 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1593 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_RELEASE_TRANSACTION';
1594 l_api_version CONSTANT NUMBER := 1.0;
1595
1596 CURSOR con_header_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
1597 SELECT currency_code,
1598 authoring_org_id
1599 FROM okc_k_headers_b
1600 WHERE id = p_chr_id;
1601
1602 CURSOR try_csr(p_trx_type_name VARCHAR2) IS
1603 SELECT id
1604 FROM okl_trx_types_tl
1605 WHERE language = 'US'
1606 AND name = p_trx_type_name;
1607
1608 l_dummy VARCHAR2(1);
1609 l_try_id NUMBER;
1610 l_tcnv_rec tcnv_rec_type;
1611 l_out_tcnv_rec tcnv_rec_type;
1612 l_currency_code okc_k_headers_b.currency_code%TYPE;
1613 l_org_id okc_k_headers_b.authoring_org_id%TYPE;
1614
1615 --Added by dpsingh for LE uptake
1616 CURSOR contract_num_csr (p_ctr_id1 NUMBER) IS
1617 SELECT contract_number
1618 FROM OKC_K_HEADERS_B
1619 WHERE id = p_ctr_id1;
1620
1621 l_cntrct_number OKC_K_HEADERS_B.CONTRACT_NUMBER%TYPE;
1622 l_legal_entity_id NUMBER;
1623
1624 BEGIN
1625 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1626 -- Call start_activity to create savepoint, check compatibility
1627 -- and initialize message list
1628 l_return_status := Okl_Api.START_ACTIVITY(
1629 p_api_name => l_api_name,
1630 p_pkg_name => g_pkg_name,
1631 p_init_msg_list => p_init_msg_list,
1632 l_api_version => l_api_version,
1633 p_api_version => p_api_version,
1634 p_api_type => '_PVT',
1635 x_return_status => x_return_status);
1636 -- Check if activity started successfully
1637 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1638 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1639 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1640 RAISE Okl_Api.G_EXCEPTION_ERROR;
1641 END IF;
1642
1643 -- Validate Re-lease Reason Code
1644 IF p_reason_code NOT IN ('CUSTOMER_CHANGE','PRODUCT_CHANGE') THEN
1645 OKL_API.SET_MESSAGE(G_APP_NAME,
1646 'OKL_LA_REV_RELCODE');
1647 RAISE OKL_API.G_EXCEPTION_ERROR;
1648 END IF;
1649
1650 OPEN con_header_csr(p_chr_id);
1651 FETCH con_header_csr INTO l_currency_code,
1652 l_org_id;
1653 CLOSE con_header_csr;
1654
1655 -- Validate Re-lease Transaction Type
1656 OPEN try_csr (p_trx_type_name => 'Release');
1657 FETCH try_csr INTO l_try_id;
1658 IF try_csr%NOTFOUND THEN
1659 CLOSE try_csr;
1660 OKL_API.SET_MESSAGE(G_APP_NAME,
1661 'OKL_LA_NO_TRY',
1662 'TRX_TYPE',
1663 'Release'
1664 );
1665 RAISE OKL_API.G_EXCEPTION_ERROR;
1666 END IF;
1667 CLOSE try_csr;
1668
1669 l_tcnv_rec.try_id := l_try_id;
1670 l_tcnv_rec.tsu_code := 'ENTERED';
1671 l_tcnv_rec.rbr_code := p_reason_code;
1672 l_tcnv_rec.description := p_description;
1673 l_tcnv_rec.tcn_type := 'MAE';
1674 l_tcnv_rec.khr_id := p_chr_id;
1675 l_tcnv_rec.khr_id_old := p_chr_id;
1676 l_tcnv_rec.khr_id_new := p_new_chr_id;
1677 l_tcnv_rec.currency_code := l_currency_code;
1678 l_tcnv_rec.date_transaction_occurred := p_trx_date;
1679 l_tcnv_rec.org_id := l_org_id;
1680
1681 if (p_source_trx_id is not null and p_source_trx_type is not null )then
1682 l_tcnv_rec.source_trx_id := p_source_trx_id;
1683 l_tcnv_rec.source_trx_type := p_source_trx_type;
1684 end if;
1685 --Added by dpsingh for LE Uptake
1686 l_legal_entity_id := OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(p_chr_id) ;
1687 IF l_legal_entity_id IS NOT NULL THEN
1688 l_tcnv_rec.legal_entity_id := l_legal_entity_id;
1689 ELSE
1690 -- get the contract number
1691 OPEN contract_num_csr(p_chr_id);
1692 FETCH contract_num_csr INTO l_cntrct_number;
1693 CLOSE contract_num_csr;
1694 Okl_Api.set_message(p_app_name => g_app_name,
1695 p_msg_name => 'OKL_LE_NOT_EXIST_CNTRCT',
1696 p_token1 => 'CONTRACT_NUMBER',
1697 p_token1_value => l_cntrct_number);
1698 RAISE OKL_API.G_EXCEPTION_ERROR;
1699 END IF;
1700 okl_trx_contracts_pub.create_trx_contracts
1701 (p_api_version => p_api_version,
1702 p_init_msg_list => p_init_msg_list,
1703 x_return_status => x_return_status,
1704 x_msg_count => x_msg_count,
1705 x_msg_data => x_msg_data,
1706 p_tcnv_rec => l_tcnv_rec,
1707 x_tcnv_rec => l_out_tcnv_rec
1708 );
1709
1710 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1711 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1712 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1713 RAISE OKL_API.G_EXCEPTION_ERROR;
1714 END IF;
1715
1716 x_tcnv_rec := l_out_tcnv_rec;
1717
1718 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
1719 x_msg_data => x_msg_data);
1720
1721 EXCEPTION
1722 when OKL_API.G_EXCEPTION_ERROR then
1723
1724 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1725 p_api_name => l_api_name,
1726 p_pkg_name => G_PKG_NAME,
1727 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
1728 x_msg_count => x_msg_count,
1729 x_msg_data => x_msg_data,
1730 p_api_type => G_API_TYPE);
1731
1732 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
1733
1734 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1735 p_api_name => l_api_name,
1736 p_pkg_name => G_PKG_NAME,
1737 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
1738 x_msg_count => x_msg_count,
1739 x_msg_data => x_msg_data,
1740 p_api_type => G_API_TYPE);
1741
1742 when OTHERS then
1743
1744 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1745 p_api_name => l_api_name,
1746 p_pkg_name => G_PKG_NAME,
1747 p_exc_name => 'OTHERS',
1748 x_msg_count => x_msg_count,
1749 x_msg_data => x_msg_data,
1750 p_api_type => G_API_TYPE);
1751 END create_release_transaction;
1752
1753 --Bug# 5005869
1754 -----------------------------------------------------------------------------------------------
1755 -- Start of Comments
1756 -- Rekha Pillay
1757 -- Procedure Name : Validate_Taa_Request_Info
1758 -- Description : Validations for the information entered in the
1759 -- Transfer and Assumption Request from Customer Service
1760 --
1761 -- Business Rules :
1762 --
1763 --
1764 --
1765 --
1766 --
1767 --
1768 --
1769 -- Parameters :
1770 -- Version : 1.0
1771 -- End of Commments
1772 PROCEDURE validate_taa_request_info(p_api_version IN NUMBER,
1773 p_init_msg_list IN VARCHAR2,
1774 x_return_status OUT NOCOPY VARCHAR2,
1775 x_msg_count OUT NOCOPY NUMBER,
1776 x_msg_data OUT NOCOPY VARCHAR2,
1777 p_chr_id IN NUMBER,
1778 p_release_date IN DATE,
1779 p_source_trx_id IN NUMBER,
1780 p_currency_code IN VARCHAR2) IS
1781
1782 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1783 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_TAA_REQUEST_INFO';
1784 l_api_version CONSTANT NUMBER := 1.0;
1785
1786 CURSOR taa_party_info_csr(p_taa_trx_id IN NUMBER) IS
1787 SELECT party_rel_id2_new,
1788 trx_number
1789 FROM okl_trx_contracts
1790 WHERE id = p_taa_trx_id;
1791
1792 taa_party_info_rec taa_party_info_csr%ROWTYPE;
1793
1794 CURSOR taa_chr_hdr_dtl_csr(p_taa_trx_id IN NUMBER) IS
1795 SELECT bill_to_site_id,
1796 cust_acct_id,
1797 bank_acct_id,
1798 invoice_format_id,
1799 payment_mthd_id,
1800 mla_id,
1801 credit_line_id,
1802 --Bug# 4191851
1803 insurance_yn,
1804 lease_policy_yn,
1805 ipy_type,
1806 policy_number,
1807 covered_amt,
1808 deductible_amt,
1809 effective_to_date,
1810 effective_from_date,
1811 proof_provided_date,
1812 proof_required_date,
1813 lessor_insured_yn,
1814 lessor_payee_yn,
1815 int_id,
1816 isu_id,
1817 agency_site_id,
1818 agent_site_id,
1819 territory_code
1820 FROM okl_taa_request_details_b
1821 WHERE tcn_id = p_taa_trx_id;
1822
1823 taa_chr_hdr_dtl_rec taa_chr_hdr_dtl_csr%ROWTYPE;
1824
1825 CURSOR taa_lines_csr(p_chr_id IN NUMBER,
1826 p_taa_trx_id IN NUMBER) IS
1827 SELECT cle.id,
1828 cle.name,
1829 tcl.source_column_1,
1830 tcl.source_value_1,
1831 tcl.source_column_2,
1832 tcl.source_value_2,
1833 tcl.source_column_3,
1834 tcl.source_value_3
1835 FROM okc_k_lines_v cle,
1836 okc_line_styles_b lse,
1837 okl_txl_cntrct_lns tcl
1838 WHERE cle.chr_id = p_chr_id
1839 AND cle.dnz_chr_id = p_chr_id
1840 AND lse.lty_code = 'FREE_FORM1'
1841 AND cle.lse_id = lse.id
1842 AND tcl.tcn_id = p_taa_trx_id
1843 AND tcl.kle_id = cle.id
1844 AND tcl.before_transfer_yn = 'N';
1845
1846 CURSOR chk_party_csr(p_party_id IN NUMBER) IS
1847 SELECT 'Y'
1848 FROM hz_parties prt
1849 WHERE prt.party_id = p_party_id
1850 AND prt.party_type IN ('PERSON','ORGANIZATION');
1851
1852 CURSOR chk_cust_acc_csr(p_cust_acc_id IN NUMBER,
1853 p_party_id IN NUMBER) is
1854 SELECT 'Y'
1855 FROM hz_cust_accounts cas
1856 WHERE cas.party_id = p_party_id
1857 AND cas.cust_account_id = p_cust_acc_id;
1858
1859 CURSOR chk_bill_to_csr(p_bill_to_site_id IN NUMBER,
1860 p_cust_acc_id IN NUMBER,
1861 p_party_id IN NUMBER,
1862 p_chr_id IN NUMBER) is
1863 SELECT 'Y'
1864 FROM okx_cust_site_uses_v site_use,
1865 hz_cust_acct_sites_all site,
1866 okc_k_headers_b chr
1867 WHERE chr.id = p_chr_id
1868 AND site.cust_acct_site_id = site_use.cust_acct_site_id
1869 AND site_use.party_id = p_party_id
1870 AND site_use.id1 = p_bill_to_site_id
1871 AND site_use.cust_account_id = p_cust_acc_id
1872 AND site_use.site_use_code = 'BILL_TO'
1873 AND site_use.b_status = 'A'
1874 AND site.status = 'A'
1875 AND site_use.org_id = chr.authoring_org_id
1876 AND site.org_id = chr.authoring_org_id;
1877
1878 CURSOR chk_bank_acc_csr(p_bank_acc_id IN NUMBER,
1879 p_bill_to_site_id IN NUMBER,
1880 p_cust_acc_id IN NUMBER,
1881 p_chr_id IN NUMBER) is
1882 SELECT 'Y'
1883 FROM okx_rcpt_method_accounts_v rma,
1884 okc_k_headers_b chr
1885 WHERE chr.id = p_chr_id
1886 AND rma.id1 = p_bank_acc_id
1887 AND rma.customer_id = p_cust_acc_id
1888 AND rma.org_id = chr.authoring_org_id
1889 AND TRUNC(SYSDATE) between NVL(rma.start_date_active, TRUNC(SYSDATE))
1890 AND NVL(rma.end_date_active,TRUNC(SYSDATE));
1891
1892 CURSOR chk_pymt_mthd_csr(p_payment_mthd_id IN NUMBER,
1893 p_bill_to_site_id IN NUMBER,
1894 p_cust_acc_id IN NUMBER) IS
1895 SELECT 'Y'
1896 FROM okx_receipt_methods_v
1897 WHERE id1 = p_payment_mthd_id
1898 AND customer_id = p_cust_acc_id
1899 AND site_use_id = p_bill_to_site_id
1900 AND TRUNC(SYSDATE) between NVL(start_date_active, TRUNC(SYSDATE))
1901 AND NVL(end_date_active,TRUNC(SYSDATE));
1902
1903
1904 CURSOR chk_inv_format_csr(p_invoice_format_id IN NUMBER) IS
1905 SELECT 'Y'
1906 FROM okl_invoice_formats_v
1907 WHERE id = p_invoice_format_id
1908 AND TRUNC(SYSDATE) between NVL(start_date, TRUNC(SYSDATE))
1909 AND NVL(end_date,TRUNC(SYSDATE));
1910
1911 CURSOR chk_mla_csr(p_mla_id IN NUMBER) is
1912 SELECT 'Y'
1913 FROM okc_k_headers_b chr
1914 WHERE chr.id = p_mla_id
1915 AND chr.scs_code = 'MASTER_LEASE'
1916 AND chr.sts_code = 'ACTIVE'
1917 AND chr.template_yn = 'N'
1918 AND chr.buy_or_sell = 'S';
1919
1920 CURSOR chk_credit_line_csr(p_credit_line_id IN NUMBER,
1921 p_cust_id IN NUMBER,
1922 p_cust_acct_id IN NUMBER,
1923 p_currency_code IN VARCHAR2) is
1924 SELECT 'Y'
1925 FROM okl_k_hdr_crdtln_uv crd,
1926 okc_k_headers_b chr
1927 WHERE crd.id = p_credit_line_id
1928 AND chr.id = crd.id
1929 AND crd.end_date >= p_release_date
1930 AND crd.cust_object1_id1 = p_cust_id
1931 AND crd.currency_code = p_currency_code
1932 AND chr.cust_acct_id = p_cust_acct_id;
1933
1934 CURSOR chk_install_site_csr(p_install_site_id IN NUMBER,
1935 p_cust_id IN NUMBER) is
1936 SELECT 'Y'
1937 FROM okx_party_site_uses_v
1938 WHERE id1 = p_install_site_id
1939 AND site_use_type = 'INSTALL_AT'
1940 AND party_id = p_cust_id
1941 AND status = 'A';
1942
1943 CURSOR chk_fa_loc_csr(p_location_id IN NUMBER) IS
1944 SELECT 'Y'
1945 FROM okx_ast_locs_v
1946 WHERE id1= p_location_id
1947 AND NVL(enabled_flag,'Y') = 'Y'
1948 AND TRUNC(SYSDATE) BETWEEN NVL(start_date_active, TRUNC(SYSDATE))
1949 AND NVL(end_date_active, TRUNC(SYSDATE));
1950
1951 l_found VARCHAR2(1);
1952
1953 BEGIN
1954 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1955 -- Call start_activity to create savepoint, check compatibility
1956 -- and initialize message list
1957 l_return_status := Okl_Api.START_ACTIVITY(
1958 p_api_name => l_api_name,
1959 p_pkg_name => g_pkg_name,
1960 p_init_msg_list => p_init_msg_list,
1961 l_api_version => l_api_version,
1962 p_api_version => p_api_version,
1963 p_api_type => '_PVT',
1964 x_return_status => x_return_status);
1965 -- Check if activity started successfully
1966 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1967 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1968 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1969 RAISE Okl_Api.G_EXCEPTION_ERROR;
1970 END IF;
1971
1972 OPEN taa_party_info_csr(p_taa_trx_id => p_source_trx_id);
1973 FETCH taa_party_info_csr INTO taa_party_info_rec;
1974 CLOSE taa_party_info_csr;
1975
1976 OPEN taa_chr_hdr_dtl_csr(p_taa_trx_id => p_source_trx_id);
1977 FETCH taa_chr_hdr_dtl_csr INTO taa_chr_hdr_dtl_rec;
1978 CLOSE taa_chr_hdr_dtl_csr;
1979
1980 -- Validate Lessee
1981 IF (taa_party_info_rec.party_rel_id2_new IS NOT NULL) THEN
1982 l_found := 'N';
1983 OPEN chk_party_csr(p_party_id => taa_party_info_rec.party_rel_id2_new);
1984 FETCH chk_party_csr INTO l_found;
1985 CLOSE chk_party_csr;
1986
1987 IF l_found = 'N' THEN
1988 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
1989 p_msg_name => 'OKL_LLA_REL_INVALID_CUST',
1990 p_token1 => 'REQ_NUM',
1991 p_token1_value => taa_party_info_rec.trx_number);
1992 RAISE OKL_API.G_EXCEPTION_ERROR;
1993 END IF;
1994 END IF;
1995
1996 -- Validate Customer Account
1997 IF (taa_chr_hdr_dtl_rec.cust_acct_id IS NOT NULL) THEN
1998 l_found := 'N';
1999 OPEN chk_cust_acc_csr(p_party_id => taa_party_info_rec.party_rel_id2_new,
2000 p_cust_acc_id => taa_chr_hdr_dtl_rec.cust_acct_id);
2001 FETCH chk_cust_acc_csr INTO l_found;
2002 CLOSE chk_cust_acc_csr;
2003
2004 IF l_found = 'N' THEN
2005 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2006 p_msg_name => 'OKL_LLA_REL_INVALID_CUST_ACC',
2007 p_token1 => 'REQ_NUM',
2008 p_token1_value => taa_party_info_rec.trx_number);
2009 RAISE OKL_API.G_EXCEPTION_ERROR;
2010 END IF;
2011 END IF;
2012
2013 -- Validate Bill-To-Site
2014 IF (taa_chr_hdr_dtl_rec.bill_to_site_id IS NOT NULL) THEN
2015 l_found := 'N';
2016 OPEN chk_bill_to_csr(p_chr_id => p_chr_id,
2017 p_bill_to_site_id => taa_chr_hdr_dtl_rec.bill_to_site_id,
2018 p_party_id => taa_party_info_rec.party_rel_id2_new,
2019 p_cust_acc_id => taa_chr_hdr_dtl_rec.cust_acct_id);
2020 FETCH chk_bill_to_csr INTO l_found;
2021 CLOSE chk_bill_to_csr;
2022
2023 IF l_found = 'N' THEN
2024 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2025 p_msg_name => 'OKL_LLA_REL_INVALID_BILL_TO',
2026 p_token1 => 'REQ_NUM',
2027 p_token1_value => taa_party_info_rec.trx_number);
2028 RAISE OKL_API.G_EXCEPTION_ERROR;
2029 END IF;
2030 END IF;
2031
2032 -- Validate Bank Account
2033 IF (taa_chr_hdr_dtl_rec.bank_acct_id IS NOT NULL) THEN
2034 l_found := 'N';
2035 OPEN chk_bank_acc_csr(p_chr_id => p_chr_id,
2036 p_bank_acc_id => taa_chr_hdr_dtl_rec.bank_acct_id,
2037 p_bill_to_site_id => taa_chr_hdr_dtl_rec.bill_to_site_id,
2038 p_cust_acc_id => taa_chr_hdr_dtl_rec.cust_acct_id);
2039 FETCH chk_bank_acc_csr INTO l_found;
2040 CLOSE chk_bank_acc_csr;
2041
2042 IF l_found = 'N' THEN
2043 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2044 p_msg_name => 'OKL_LLA_REL_INVALID_BANK_ACC',
2045 p_token1 => 'REQ_NUM',
2046 p_token1_value => taa_party_info_rec.trx_number);
2047 RAISE OKL_API.G_EXCEPTION_ERROR;
2048 END IF;
2049 END IF;
2050
2051 -- Validate Payment Method
2052 IF (taa_chr_hdr_dtl_rec.payment_mthd_id IS NOT NULL) THEN
2053 l_found := 'N';
2054 OPEN chk_pymt_mthd_csr(p_payment_mthd_id => taa_chr_hdr_dtl_rec.payment_mthd_id,
2055 p_bill_to_site_id => taa_chr_hdr_dtl_rec.bill_to_site_id,
2056 p_cust_acc_id => taa_chr_hdr_dtl_rec.cust_acct_id);
2057 FETCH chk_pymt_mthd_csr INTO l_found;
2058 CLOSE chk_pymt_mthd_csr;
2059
2060 IF l_found = 'N' THEN
2061 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2062 p_msg_name => 'OKL_LLA_REL_INVALID_PYMT_MTHD',
2063 p_token1 => 'REQ_NUM',
2064 p_token1_value => taa_party_info_rec.trx_number);
2065 RAISE OKL_API.G_EXCEPTION_ERROR;
2066 END IF;
2067 END IF;
2068
2069 -- Validate Invoice Format
2070 IF (taa_chr_hdr_dtl_rec.invoice_format_id IS NOT NULL) THEN
2071 l_found := 'N';
2072 OPEN chk_inv_format_csr(p_invoice_format_id => taa_chr_hdr_dtl_rec.invoice_format_id);
2073 FETCH chk_inv_format_csr INTO l_found;
2074 CLOSE chk_inv_format_csr;
2075
2076 IF l_found = 'N' THEN
2077 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2078 p_msg_name => 'OKL_LLA_REL_INVALID_INV_FMT',
2079 p_token1 => 'REQ_NUM',
2080 p_token1_value => taa_party_info_rec.trx_number);
2081 RAISE OKL_API.G_EXCEPTION_ERROR;
2082 END IF;
2083
2084 END IF;
2085
2086 -- Validate MLA
2087 IF (taa_chr_hdr_dtl_rec.mla_id IS NOT NULL) THEN
2088 l_found := 'N';
2089 OPEN chk_mla_csr(p_mla_id => taa_chr_hdr_dtl_rec.mla_id);
2090 FETCH chk_mla_csr INTO l_found;
2091 CLOSE chk_mla_csr;
2092
2093 IF l_found = 'N' THEN
2094 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2095 p_msg_name => 'OKL_LLA_REL_INVALID_MLA',
2096 p_token1 => 'REQ_NUM',
2097 p_token1_value => taa_party_info_rec.trx_number);
2098 RAISE OKL_API.G_EXCEPTION_ERROR;
2099 END IF;
2100 END IF;
2101
2102 -- Validate Credit Line
2103 IF (taa_chr_hdr_dtl_rec.credit_line_id IS NOT NULL) THEN
2104 l_found := 'N';
2105 OPEN chk_credit_line_csr(p_credit_line_id => taa_chr_hdr_dtl_rec.credit_line_id,
2106 p_cust_id => taa_party_info_rec.party_rel_id2_new,
2107 p_cust_acct_id => taa_chr_hdr_dtl_rec.cust_acct_id,
2108 p_currency_code => p_currency_code);
2109 FETCH chk_credit_line_csr INTO l_found;
2110 CLOSE chk_credit_line_csr;
2111
2112 IF l_found = 'N' THEN
2113 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2114 p_msg_name => 'OKL_LLA_REL_INVALID_CL',
2115 p_token1 => 'REQ_NUM',
2116 p_token1_value => taa_party_info_rec.trx_number);
2117 RAISE OKL_API.G_EXCEPTION_ERROR;
2118 END IF;
2119 END IF;
2120
2121
2122 FOR taa_lines_rec IN taa_lines_csr(p_chr_id => p_chr_id,
2123 p_taa_trx_id => p_source_trx_id)
2124 LOOP
2125
2126 -- Asset Line level Install At Location
2127 IF (taa_lines_rec.source_column_1 = 'INSTALL_SITE_ID'
2128 AND taa_lines_rec.source_value_1 IS NOT NULL) THEN
2129 l_found := 'N';
2130 OPEN chk_install_site_csr(p_install_site_id => taa_lines_rec.source_value_1,
2131 p_cust_id => taa_party_info_rec.party_rel_id2_new);
2132 FETCH chk_install_site_csr INTO l_found;
2133 CLOSE chk_install_site_csr;
2134
2135 IF l_found = 'N' THEN
2136 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2137 p_msg_name => 'OKL_LLA_REL_INVALID_INS_SITE',
2138 p_token1 => 'REQ_NUM',
2139 p_token1_value => taa_party_info_rec.trx_number,
2140 p_token2 => 'ASSET_NUM',
2141 p_token2_value => taa_lines_rec.name);
2142 RAISE OKL_API.G_EXCEPTION_ERROR;
2143 END IF;
2144 END IF;
2145
2146 -- Asset Line level Fixed asset location
2147 IF (taa_lines_rec.source_column_2 = 'FA_LOC_ID'
2148 AND taa_lines_rec.source_value_2 IS NOT NULL) THEN
2149 l_found := 'N';
2150 OPEN chk_fa_loc_csr(p_location_id => taa_lines_rec.source_value_2);
2151 FETCH chk_fa_loc_csr INTO l_found;
2152 CLOSE chk_fa_loc_csr;
2153
2154 IF l_found = 'N' THEN
2155 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2156 p_msg_name => 'OKL_LLA_REL_INVALID_FA_LOC',
2157 p_token1 => 'REQ_NUM',
2158 p_token1_value => taa_party_info_rec.trx_number,
2159 p_token2 => 'ASSET_NUM',
2160 p_token2_value => taa_lines_rec.name);
2161 RAISE OKL_API.G_EXCEPTION_ERROR;
2162 END IF;
2163 END IF;
2164
2165 -- Asset Line level Bill-To-Site
2166 IF (taa_lines_rec.source_column_3 = 'BILL_TO_SITE_ID'
2167 AND taa_lines_rec.source_value_3 IS NOT NULL) THEN
2168 l_found := 'N';
2169 OPEN chk_bill_to_csr(p_chr_id => p_chr_id,
2170 p_bill_to_site_id => taa_lines_rec.source_value_3,
2171 p_party_id => taa_party_info_rec.party_rel_id2_new,
2172 p_cust_acc_id => taa_chr_hdr_dtl_rec.cust_acct_id);
2173 FETCH chk_bill_to_csr INTO l_found;
2174 CLOSE chk_bill_to_csr;
2175
2176 IF l_found = 'N' THEN
2177 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2178 p_msg_name => 'OKL_LLA_REL_INVALID_AST_BILL',
2179 p_token1 => 'REQ_NUM',
2180 p_token1_value => taa_party_info_rec.trx_number,
2181 p_token2 => 'ASSET_NUM',
2182 p_token2_value => taa_lines_rec.name);
2183 RAISE OKL_API.G_EXCEPTION_ERROR;
2184 END IF;
2185 END IF;
2186
2187 END LOOP;
2188
2189 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
2190 x_msg_data => x_msg_data);
2191
2192 EXCEPTION
2193 when OKL_API.G_EXCEPTION_ERROR then
2194
2195 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2196 p_api_name => l_api_name,
2197 p_pkg_name => G_PKG_NAME,
2198 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
2199 x_msg_count => x_msg_count,
2200 x_msg_data => x_msg_data,
2201 p_api_type => G_API_TYPE);
2202
2203 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
2204
2205 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2206 p_api_name => l_api_name,
2207 p_pkg_name => G_PKG_NAME,
2208 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
2209 x_msg_count => x_msg_count,
2210 x_msg_data => x_msg_data,
2211 p_api_type => G_API_TYPE);
2212
2213 when OTHERS then
2214
2215 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2216 p_api_name => l_api_name,
2217 p_pkg_name => G_PKG_NAME,
2218 p_exc_name => 'OTHERS',
2219 x_msg_count => x_msg_count,
2220 x_msg_data => x_msg_data,
2221 p_api_type => G_API_TYPE);
2222 END validate_taa_request_info;
2223 --Bug# 5005869
2224 -----------------------------------------------------------------------------------------------
2225 -- Start of Comments
2226 -- Furong Miao 19-NOV-2004
2227 -- Procedure Name : Validate_Release_Contract
2228 -- Description : Validations upon creation and activation of
2229 -- re-leased contract
2230 --
2231 -- Business Rules : This procedure will be overloaded with one more
2232 -- parameter p_call_program which indicates from where
2233 -- this procedure is being called. It can be 'RELEASE' or
2234 -- 'ACTIVATE'
2235 --
2236 -- Parameters :
2237 -- Version : 1.0
2238 -- End of Commments
2239 PROCEDURE validate_release_contract(p_api_version IN NUMBER,
2240 p_init_msg_list IN VARCHAR2,
2241 x_return_status OUT NOCOPY VARCHAR2,
2242 x_msg_count OUT NOCOPY NUMBER,
2243 x_msg_data OUT NOCOPY VARCHAR2,
2244 p_chr_id IN NUMBER,
2245 p_release_date IN DATE,
2246 p_source_trx_id IN NUMBER,
2247 p_call_program IN VARCHAR2) IS
2248
2249 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2250 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_REL_CONTRACT';
2251 l_api_version CONSTANT NUMBER := 1.0;
2252
2253 CURSOR chr_csr(p_chr_id IN NUMBER) IS
2254 SELECT chr.start_date,
2255 chr.end_date,
2256 chr.contract_number,
2257 khr.deal_type,
2258 sts_code,
2259 chr.cust_acct_id,
2260 --Bug# 4173345
2261 chr.orig_system_source_code,
2262 --Bug# 4631549
2263 chr.currency_code
2264 FROM okc_k_headers_b chr,
2265 okl_k_headers khr
2266 WHERE chr.id = p_chr_id
2267 AND chr.id = khr.id;
2268
2269 chr_rec chr_csr%ROWTYPE;
2270
2271 -- Called at activation to exclude the current contract --
2272 CURSOR pending_trx_act_csr(p_chr_id IN NUMBER)
2273 IS
2274 SELECT 'Y'
2275 FROM okl_trx_contracts tcn
2276 WHERE tcn.khr_id = p_chr_id
2277 AND tcn.tsu_code IN ('ENTERED','WORKING','WAITING','SUBMITTED')
2278 --rkuttiya added for 12.1.1 Multi GAAP
2279 AND tcn.representation_type = 'PRIMARY'
2280 --
2281 AND (tcn.tcn_type IN ('TRBK','RVS','SPLC'));
2282
2283 CURSOR taa_request_csr(p_source_trx_id IN NUMBER)
2284 IS
2285 SELECT tsu_code,
2286 complete_transfer_yn,
2287 trx_number
2288 FROM okl_trx_contracts
2289 where id = p_source_trx_id;
2290
2291 taa_request_rec taa_request_csr%ROWTYPE;
2292
2293 CURSOR chk_chr_accept_term_qte_csr
2294 (p_orig_chr_id IN NUMBER)
2295 IS
2296 SELECT fin_ast_cle.id,
2297 fin_ast_cle.name
2298 FROM okc_k_lines_v fin_ast_cle,
2299 okc_k_headers_b chr,
2300 okc_line_styles_b fin_ast_lse,
2301 okl_trx_quotes_b qte,
2302 okl_txl_quote_lines_b tql
2303 WHERE chr.id = p_orig_chr_id
2304 AND fin_ast_cle.chr_id = chr.id
2305 AND fin_ast_cle.dnz_chr_id = chr.id
2306 AND fin_ast_cle.sts_code = chr.sts_code
2307 AND fin_ast_cle.lse_id = fin_ast_lse.id
2308 AND fin_ast_lse.lty_code = 'FREE_FORM1'
2309 AND tql.kle_id = fin_ast_cle.id
2310 AND tql.qte_id = qte.id
2311 AND tql.qlt_code = 'AMCFIA'
2312 AND NVL(qte.accepted_yn,'N') = 'Y'
2313 AND NVL(qte.consolidated_yn,'N') = 'N';
2314
2315 CURSOR chk_taa_accept_term_qte_csr
2316 (p_orig_chr_id IN NUMBER
2317 ,p_source_trx_id IN NUMBER)
2318 IS
2319 SELECT fin_ast_cle.id,
2320 fin_ast_cle.name
2321 FROM okl_txl_cntrct_lns tcl,
2322 okc_k_lines_v fin_ast_cle,
2323 okl_trx_quotes_b qte,
2324 okl_txl_quote_lines_b tql
2325 WHERE tcl.tcn_id = p_source_trx_id
2326 AND tcl.before_transfer_yn = 'N'
2327 AND fin_ast_cle.chr_id = p_orig_chr_id
2328 AND fin_ast_cle.dnz_chr_id = p_orig_chr_id
2329 AND fin_ast_cle.id = tcl.kle_id
2330 AND tql.kle_id = fin_ast_cle.id
2331 AND tql.qte_id = qte.id
2332 AND tql.qlt_code = 'AMCFIA'
2333 AND NVL(qte.accepted_yn,'N') = 'Y'
2334 AND NVL(qte.consolidated_yn,'N') = 'N';
2335
2336 CURSOR chk_chr_equip_exch_req_csr
2337 (p_orig_chr_id IN NUMBER)
2338 IS
2339 SELECT fin_ast_cle.id,
2340 fin_ast_cle.name
2341 FROM okc_k_lines_v fin_ast_cle,
2342 okc_k_headers_b chr,
2343 okc_line_styles_b fin_ast_lse,
2344 okl_trx_assets ota,
2345 okl_txl_assets_b otl
2346 WHERE chr.id = p_orig_chr_id
2347 AND fin_ast_cle.chr_id = chr.id
2348 AND fin_ast_cle.dnz_chr_id = chr.id
2349 AND fin_ast_cle.sts_code = chr.sts_code
2350 AND fin_ast_cle.lse_id = fin_ast_lse.id
2351 AND fin_ast_lse.lty_code = 'FREE_FORM1'
2352 AND otl.kle_id = fin_ast_cle.id
2353 AND ota.tas_type IN ('LLT','LLP','NLP')
2354 AND ota.id = otl.tas_id
2355 AND otl.tal_type = 'OAS'
2356 AND ota.tsu_code = 'PROCESSED';
2357
2358 CURSOR chk_taa_equip_exch_req_csr
2359 (p_orig_chr_id IN NUMBER
2360 ,p_source_trx_id IN NUMBER)
2361 IS
2362 SELECT fin_ast_cle.id,
2363 fin_ast_cle.name
2364 FROM okl_txl_cntrct_lns tcl,
2365 okc_k_lines_v fin_ast_cle,
2366 okl_trx_assets ota,
2367 okl_txl_assets_b otl
2368 WHERE tcl.tcn_id = p_source_trx_id
2369 AND tcl.before_transfer_yn = 'N'
2370 AND fin_ast_cle.chr_id = p_orig_chr_id
2371 AND fin_ast_cle.dnz_chr_id = p_orig_chr_id
2372 AND fin_ast_cle.id = tcl.kle_id
2373 AND otl.kle_id = fin_ast_cle.id
2374 AND ota.tas_type IN ('LLT','LLP','NLP')
2375 AND ota.id = otl.tas_id
2376 AND otl.tal_type = 'OAS'
2377 AND ota.tsu_code = 'PROCESSED';
2378
2379 CURSOR chk_linked_serv_chr_csr(p_chr_id IN NUMBER)
2380 IS
2381 SELECT 'Y'
2382 FROM okc_k_rel_objs_v
2383 WHERE chr_id = p_chr_id
2384 AND jtot_object1_code = 'OKL_SERVICE'
2385 -- AND rty_code IN ('OKLUBB','OKLSRV')
2386 AND rty_code = 'OKLSRV';
2387 --rajnisku: Bug 6657564 : End
2388
2389 l_found VARCHAR2(30);
2390 l_icx_date_format VARCHAR2(240);
2391 l_funding_remaining NUMBER;
2392 l_term_duration NUMBER;
2393 l_asset_num_token VARCHAR2(2000);
2394 l_receipt_date DATE;
2395 l_acceptance_date DATE;
2396 l_invoice_date DATE;
2397
2398 --Cursor for obtaining the last receipt date
2399 /*--Bug# 4061058
2400 CURSOR last_receipt_date_csr(p_cust_acct_number IN VARCHAR2) IS
2401 SELECT max(receipt_date)
2402 FROM okl_ext_csh_rcpts_b
2403 WHERE customer_number = p_cust_acct_number;*/
2404
2405 --Cusor for obtaining the last accepted termination quote date.
2406 CURSOR last_trq_date_csr(p_contract_id IN NUMBER) IS
2407 SELECT max(date_accepted)
2408 FROM okl_trx_quotes_b
2409 WHERE khr_id = p_contract_id
2410 AND QST_CODE = 'ACCEPTED';
2411
2412 -- Cursor for obtaining the last credit memo date
2413 CURSOR last_credit_date_csr(p_contract_id IN NUMBER) IS
2414 SELECT max(date_invoiced)
2415 FROM okl_trx_ar_invoices_b tar,
2416 okl_trx_types_b typ
2417 WHERE tar.khr_id = p_contract_id
2418 AND tar.amount<0
2419 AND tar.try_id = typ.id
2420 AND typ.aep_code = 'CREDIT_MEMO';
2421
2422 --Bug# 4151222
2423 l_fully_funded_flag BOOLEAN;
2424
2425 --Bug# 4631549
2426 --cusror to fetch all lines expected_asset_cost
2427 Cursor l_exp_cost_csr(p_chr_id IN NUMBER) is
2428 Select kle.expected_Asset_Cost,
2429 cleb.orig_system_id1 orig_cle_id,
2430 chrb.id new_chr_id,
2431 cleb.id new_cle_id
2432 From
2433 okc_k_lines_b cleb,
2434 okl_k_lines kle,
2435 okc_k_headers_b chrb
2436 where kle.id = cleb.id
2437 and cleb.dnz_chr_id = chrb.id
2438 and cleb.lse_id = 33 --financial asset line
2439 and cleb.sts_code = 'APPROVED'
2440 and cleb.orig_system_id1 is NOT NULL
2441 and chrb.orig_system_id1 = p_chr_id
2442 and chrb.orig_system_source_code = 'OKL_RELEASE'
2443 and chrb.sts_code = 'APPROVED';
2444
2445 l_exp_cost_rec l_exp_cost_csr%ROWTYPE;
2446
2447 --cusror to fetch fixed asset details
2448 cursor l_fa_csr (p_cle_id in number,
2449 p_chr_id in number) is
2450 select fb.asset_id,
2451 fb.book_type_code
2452 from fa_books fb,
2453 fa_book_controls fbc,
2454 okc_k_items cim,
2455 okc_k_lines_b cleb_fa
2456 where fb.asset_id = cim.object1_id1
2457 and fb.book_type_code = fbc.book_type_code
2458 and fbc.book_class = 'CORPORATE'
2459 and fb.transaction_header_id_out is NULL
2460 and cim.jtot_object1_code = 'OKX_ASSET'
2461 and cim.object1_id2 = '#'
2462 and cim.dnz_chr_id = cleb_fa.dnz_chr_id
2463 and cim.cle_id = cleb_fa.id
2464 and cleb_fa.cle_id = p_cle_id
2465 and cleb_fa.dnz_chr_id = p_chr_id
2466 and cleb_fa.lse_id = 42; -- fixed asset
2467
2468 l_fa_rec l_fa_csr%ROWTYPE;
2469
2470 --cursor to fetch number of units of the asset
2471 cursor l_units_csr (p_cle_id in number,
2472 p_chr_id in number) is
2473 select cleb_model.id model_cle_id,
2474 cim_model.number_of_items
2475 from okc_k_lines_b cleb_model,
2476 okc_k_items cim_model
2477 where cim_model.cle_id = cleb_model.id
2478 and cim_model.dnz_chr_id = p_chr_id
2479 and cleb_model.cle_id = p_cle_id
2480 and cleb_model.dnz_chr_id = p_chr_id
2481 and cleb_model.lse_id = 34; --model line
2482
2483 l_units_rec l_units_csr%ROWTYPE;
2484
2485
2486 --cursor to fetch asset number
2487 cursor l_asset_num_csr(p_asset_id in number) is
2488 select asset_number
2489 from fa_additions_b
2490 where asset_id = p_Asset_id;
2491
2492 l_asset_num_rec l_asset_num_csr%ROWTYPE;
2493
2494 l_corp_net_book_value NUMBER;
2495 l_expected_cost NUMBER;
2496 l_exp_cost_mismatch_yn VARCHAR2(1);
2497 l_capital_amount NUMBER;
2498 l_capitalized_interest NUMBER;
2499
2500 l_model_clev_rec okc_contract_pub.clev_rec_type;
2501 lx_model_clev_rec okc_contract_pub.clev_rec_type;
2502 l_finast_clev_rec okl_okc_migration_pvt.clev_rec_type;
2503 lx_finast_clev_rec okl_okc_migration_pvt.clev_rec_type;
2504 l_finast_klev_rec okl_contract_pub.klev_rec_type;
2505 lx_finast_klev_rec okl_contract_pub.klev_rec_type;
2506 l_finast_clev_rec2 okl_okc_migration_pvt.clev_rec_type;
2507 lx_finast_clev_rec2 okl_okc_migration_pvt.clev_rec_type;
2508 l_finast_klev_rec2 okl_contract_pub.klev_rec_type;
2509 lx_finast_klev_rec2 okl_contract_pub.klev_rec_type;
2510
2511 --cursor to fetch new contract currency
2512 cursor l_new_chr_hdr_csr (p_chr_id in number) is
2513 select currency_code
2514 from okc_k_headers_b
2515 where id = p_chr_id;
2516
2517 l_new_chr_hdr_rec l_new_chr_hdr_csr%ROWTYPE;
2518 --End Bug# 4631549
2519 --rajnisku: Bug 6657564
2520 --cursor to check whether the TNA request contains asset
2521 --associated to a Usage line
2522 cursor l_chk_link_usage_csr (p_source_trx_id NUMBER) IS
2523 select '!' from dual
2524 where exists (
2525 select 1
2526 from okc_k_items UITEM ,
2527 OKC_K_LINES_B USAGE,
2528 OKC_K_LINES_B USUB_LINE,
2529 okc_k_items LINK_ITEM,
2530 okc_k_lines_b top_line,
2531 okl_txl_cntrct_lns tcl
2532 where UITEM.dnz_chr_id=tcl.khr_id
2533 and UITEM.JTOT_OBJECT1_CODE = 'OKL_USAGE'
2534 and UITEM.OBJECT1_ID2='#'
2535 and USAGE.id=UITEM.cle_id
2536 and USUB_LINE.cle_id=USAGE.id
2537 and USUB_LINE.lse_id=(select id from okc_line_styles_v where lty_code = 'LINK_USAGE_ASSET')
2538 and LINK_ITEM.cle_id=USUB_LINE.id
2539 and LINK_ITEM.OBJECT1_ID1=top_line.id
2540 and LINK_ITEM.OBJECT1_ID2='#'
2541 and top_line.lse_id=(select id from okc_line_styles_v where lty_code = 'FREE_FORM1')
2542 and top_line.id = tcl.kle_id
2543 and tcl.tcn_id = p_source_trx_id
2544 AND tcl.before_transfer_yn = 'N'
2545 );
2546
2547 cursor l_ubb_contract_csr(p_orig_chr_id number) IS
2548 SELECT oks.date_terminated,sts.ste_code
2549 FROM okc_k_rel_objs_v krelobj ,
2550 okc_k_headers_b oks,
2551 okc_statuses_b sts
2552 WHERE krelobj.JTOT_OBJECT1_CODE = 'OKL_SERVICE'
2553 AND krelobj.RTY_CODE = 'OKLUBB'
2554 and krelobj.OBJECT1_ID1 = oks.id
2555 and krelobj.OBJECT1_ID2='#'
2556 and krelobj.CHR_ID = p_orig_chr_id --original contract id
2557 and sts.code=oks.sts_code;
2558
2559 l_ubb_contract_rec l_ubb_contract_csr%ROWTYPE;
2560 l_link_usage varchar2(1);
2561 l_chk_ubb_terminated_yn varchar2(1):='N';
2562 --rajnisku: Bug 6657564 :End
2563
2564 BEGIN
2565 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
2566 -- Call start_activity to create savepoint, check compatibility
2567 -- and initialize message list
2568 l_return_status := Okl_Api.START_ACTIVITY(
2569 p_api_name => l_api_name,
2570 p_pkg_name => g_pkg_name,
2571 p_init_msg_list => p_init_msg_list,
2572 l_api_version => l_api_version,
2573 p_api_version => p_api_version,
2574 p_api_type => '_PVT',
2575 x_return_status => x_return_status);
2576 -- Check if activity started successfully
2577 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2578 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2579 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2580 RAISE Okl_Api.G_EXCEPTION_ERROR;
2581 END IF;
2582
2583 open chr_csr(p_chr_id => p_chr_id);
2584 fetch chr_csr into chr_rec;
2585 close chr_csr;
2586
2587 if (p_call_program in ('RELEASE','ACTIVATE') ) then
2588
2589 -- Validate that Contract status is valid
2590 if chr_rec.sts_code NOT IN ('BOOKED','EVERGREEN','BANKRUPTCY_HOLD',
2591 'LITIGATION_HOLD') then
2592 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2593 p_msg_name => 'OKL_LLA_REL_INVALID_STATUS',
2594 p_token1 => 'CONTRACT_NUM',
2595 p_token1_value => chr_rec.contract_number);
2596 RAISE OKL_API.G_EXCEPTION_ERROR;
2597 end if;
2598
2599 -- Validate if Linked Service Contract exists
2600 l_found := 'N';
2601 open chk_linked_serv_chr_csr(p_chr_id => p_chr_id);
2602 fetch chk_linked_serv_chr_csr into l_found;
2603 close chk_linked_serv_chr_csr;
2604 if (l_found = 'Y') then
2605 OKL_API.SET_MESSAGE(G_APP_NAME,
2606 'OKL_LLA_REL_LINK_SERV_CNTRCT');
2607 RAISE OKL_API.G_EXCEPTION_ERROR;
2608 end if;
2609
2610 -- T and A Validations
2611 -- Validate that T and A request is Approved
2612 IF p_source_trx_id IS NOT NULL THEN
2613
2614 open taa_request_csr(p_source_trx_id => p_source_trx_id);
2615 fetch taa_request_csr into taa_request_rec;
2616 close taa_request_csr;
2617 if taa_request_rec.tsu_code <> 'APPROVED' then
2618 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2619 p_msg_name => 'OKL_LLA_REL_TAA_REQ_NO_APPRVD',
2620 p_token1 => 'REQ_NUM',
2621 p_token1_value => taa_request_rec.trx_number);
2622 RAISE OKL_API.G_EXCEPTION_ERROR;
2623 end if;
2624 END IF;
2625
2626 -- Validations that assets are not a part of any
2627 -- Accepted Termination quote or
2628 -- Processed Equipment Exchange
2629
2630 -- T and A transaction
2631 if (p_source_trx_id IS NOT NULL) then
2632
2633 l_found := 'N';
2634 l_asset_num_token := null;
2635 for chk_taa_accept_term_qte_rec in
2636 chk_taa_accept_term_qte_csr
2637 (p_orig_chr_id => p_chr_id
2638 ,p_source_trx_id => p_source_trx_id) loop
2639
2640 l_found := 'Y';
2641 if l_asset_num_token is null then
2642 l_asset_num_token := l_asset_num_token ||chk_taa_accept_term_qte_rec.name;
2643 else
2644 l_asset_num_token := l_asset_num_token ||', '||chk_taa_accept_term_qte_rec.name;
2645 end if;
2646 end loop;
2647
2648 if l_found = 'Y' then
2649 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2650 p_msg_name => 'OKL_LLA_REL_NO_ACCEPT_TQ',
2651 p_token1 => 'ASST_NUM',
2652 p_token1_value => l_asset_num_token);
2653 RAISE OKL_API.G_EXCEPTION_ERROR;
2654 end if;
2655
2656 l_found := 'N';
2657 l_asset_num_token := null;
2658 for chk_taa_equip_exch_req_rec in
2659 chk_taa_equip_exch_req_csr
2660 (p_orig_chr_id => p_chr_id
2661 ,p_source_trx_id => p_source_trx_id) loop
2662
2663 l_found := 'Y';
2664 if l_asset_num_token is null then
2665 l_asset_num_token := l_asset_num_token ||chk_taa_equip_exch_req_rec.name;
2666 else
2667 l_asset_num_token := l_asset_num_token ||', '||chk_taa_equip_exch_req_rec.name;
2668 end if;
2669 end loop;
2670
2671 if l_found = 'Y' then
2672 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2673 p_msg_name => 'OKL_LLA_REL_NO_PROCESSED_EQ',
2674 p_token1 => 'ASSET_NUM',
2675 p_token1_value => l_asset_num_token);
2676 RAISE OKL_API.G_EXCEPTION_ERROR;
2677 end if;
2678
2679 -- Re-lease contract
2680 else
2681 l_found := 'N';
2682 l_asset_num_token := null;
2683 for chk_chr_accept_term_qte_rec in
2684 chk_chr_accept_term_qte_csr
2685 (p_orig_chr_id => p_chr_id) loop
2686
2687 l_found := 'Y';
2688 if l_asset_num_token is null then
2689 l_asset_num_token := l_asset_num_token ||chk_chr_accept_term_qte_rec.name;
2690 else
2691 l_asset_num_token := l_asset_num_token ||', '||chk_chr_accept_term_qte_rec.name;
2692 end if;
2693 end loop;
2694
2695 if l_found = 'Y' then
2696 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2697 p_msg_name => 'OKL_LLA_REL_NO_ACCEPT_TQ',
2698 p_token1 => 'ASST_NUM',
2699 p_token1_value => l_asset_num_token);
2700 RAISE OKL_API.G_EXCEPTION_ERROR;
2701 end if;
2702
2703 l_found := 'N';
2704 l_asset_num_token := null;
2705 for chk_chr_equip_exch_req_rec in
2706 chk_chr_equip_exch_req_csr
2707 (p_orig_chr_id => p_chr_id) loop
2708
2709 l_found := 'Y';
2710 if l_asset_num_token is null then
2711 l_asset_num_token := l_asset_num_token ||chk_chr_equip_exch_req_rec.name;
2712 else
2713 l_asset_num_token := l_asset_num_token ||', '||chk_chr_equip_exch_req_rec.name;
2714 end if;
2715 end loop;
2716
2717 if l_found = 'Y' then
2718 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2719 p_msg_name => 'OKL_LLA_REL_NO_PROCESSED_EQ',
2720 p_token1 => 'ASSET_NUM',
2721 p_token1_value => l_asset_num_token);
2722 RAISE OKL_API.G_EXCEPTION_ERROR;
2723 end if;
2724 end if;
2725
2726 -- Validate that the Contract is fully funded
2727 /* Bug# 4151222: Funding validation api call changed
2728 l_funding_remaining :=
2729 OKL_FUNDING_PVT.get_chr_canbe_funded_rem(p_contract_id => p_chr_id);
2730 --Bug# 4080102 - Changed to check for Funding remaining > 0
2731 if (l_funding_remaining > 0) then
2732 OKL_API.SET_MESSAGE(G_APP_NAME,
2733 'OKL_LLA_REL_NOT_FULLY_FUNDED');
2734 RAISE OKL_API.G_EXCEPTION_ERROR;
2735 end if;*/
2736
2737 --Bug# 4151222
2738 l_fully_funded_flag := false;
2739
2740 --Bug# 4173345
2741 -- Re-leased contracts should be treated as fully funded
2742 if NVL(chr_rec.orig_system_source_code,OKL_API.G_MISS_CHAR) = 'OKL_RELEASE' then
2743 l_fully_funded_flag := true;
2744 else
2745 OKL_FUNDING_PVT.is_contract_fully_funded(
2746 p_api_version => p_api_version
2747 ,p_init_msg_list => p_init_msg_list
2748 ,x_return_status => x_return_status
2749 ,x_msg_count => x_msg_count
2750 ,x_msg_data => x_msg_data
2751 ,x_value => l_fully_funded_flag
2752 ,p_contract_id => p_chr_id);
2753
2754 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2755 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2756 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2757 RAISE Okl_Api.G_EXCEPTION_ERROR;
2758 END IF;
2759 end if;
2760 --Bug# 4173345
2761
2762 if (l_fully_funded_flag = false) then
2763 OKL_API.SET_MESSAGE(G_APP_NAME,
2764 'OKL_LLA_REL_NOT_FULLY_FUNDED');
2765 RAISE OKL_API.G_EXCEPTION_ERROR;
2766 end if;
2767
2768 -- Validate whether the release date is after
2769 -- last Receipt Date, last Credit Memo Date and
2770 -- last accepted Termination Quote date.
2771
2772 /* ankushar R12 billing enhancement
2773 replaced the call to cursor with the billing API call
2774 start changes
2775 */
2776 OKL_BILLING_UTIL_PVT.LAST_INVOICE_DATE(
2777 p_api_version => p_api_version
2778 ,p_init_msg_list => p_init_msg_list
2779 ,x_return_status => x_return_status
2780 ,x_msg_count => x_msg_count
2781 ,x_msg_data => x_msg_data
2782 ,p_contract_id => p_chr_id
2783 ,x_invoice_date => l_receipt_date);
2784
2785 /* ankushar R12 billing enhancement end changes */
2786
2787 open last_trq_date_csr (p_contract_id => p_chr_id);
2788 fetch last_trq_date_csr into l_acceptance_date;
2789 close last_trq_date_csr;
2790
2791 open last_credit_date_csr (p_contract_id => p_chr_id);
2792 fetch last_credit_date_csr into l_invoice_date;
2793 close last_credit_date_csr;
2794
2795 -- Bug# 4072796
2796 if (l_receipt_date IS NOT NULL) and (p_release_date <= l_receipt_date ) then
2797 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2798 p_msg_name => 'OKL_CS_TF_RECEIPT_DATE',
2799 p_token1 => 'INVOICE_DATE',
2800 p_token1_value => l_receipt_date);
2801 RAISE OKL_API.G_EXCEPTION_ERROR;
2802 elsif (l_acceptance_date IS NOT NULL) and (p_release_date <= l_acceptance_date ) then
2803 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2804 p_msg_name => 'OKL_CS_TF_QUOTE_DATE',
2805 p_token1 => 'QUOTE_DATE',
2806 p_token1_value => l_acceptance_date);
2807 RAISE OKL_API.G_EXCEPTION_ERROR;
2808 elsif (l_invoice_date IS NOT NULL) and (p_release_date <= l_invoice_date) then
2809 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
2810 p_msg_name => 'OKL_CS_TF_CREDITMEMO_DATE',
2811 p_token1 => 'CREDIT_MEMO',
2812 p_token1_value => l_invoice_date);
2813 RAISE OKL_API.G_EXCEPTION_ERROR;
2814 end if;
2815 end if;
2816 -- T and A Validations
2817 --rajnisku: Bug 6657564 : Added validation to block TNA
2818 --if the transferred asset is associated to a Usage line
2819 --or if service contract is not terminated
2820
2821 IF p_source_trx_id IS NOT NULL THEN
2822 l_link_usage := '?';
2823 l_chk_ubb_terminated_yn:='N';
2824 --check any transferred asset line is associated to a usage line
2825 OPEN l_chk_link_usage_csr (p_source_trx_id => p_source_trx_id);
2826 FETCH l_chk_link_usage_csr INTO l_link_usage;
2827 IF l_chk_link_usage_csr%NOTFOUND THEN
2828 NULL;
2829 END IF;
2830 CLOSE l_chk_link_usage_csr;
2831
2832 IF l_link_usage = '!'
2833 AND NVL(taa_request_rec.complete_transfer_yn,'X')='N' THEN
2834 --set message
2835 --The transfer is not permitted because one of the transferred
2836 --asset is associated to a usage line.
2837 OKL_API.SET_MESSAGE(G_APP_NAME,
2838 'OKL_CS_TA_ASSET_WITH_UBB_NA');
2839 RAISE OKL_API.G_EXCEPTION_ERROR;
2840 END IF;
2841
2842 IF l_link_usage = '!' AND
2843 NVL(taa_request_rec.complete_transfer_yn,'X')='Y' THEN
2844 l_chk_ubb_terminated_yn:='Y';
2845 END IF;
2846
2847 ELSE -- p_source_trx_id is null
2848 --full TnA performed from html screen without TnA request
2849 l_chk_ubb_terminated_yn:='Y';
2850 END IF;
2851
2852 --check whether the associated usage contract is terminated
2853 IF l_chk_ubb_terminated_yn='Y' THEN
2854
2855 OPEN l_ubb_contract_csr (p_orig_chr_id => p_chr_id);
2856 FETCH l_ubb_contract_csr INTO l_ubb_contract_rec;
2857 IF l_ubb_contract_csr%NOTFOUND THEN
2858 NULL;
2859 ELSE
2860 IF NVL(l_ubb_contract_rec.ste_code,'X')<>'TERMINATED' THEN
2861 --set message
2862 --You must terminate the associated service contract before
2863 --release is permitted.
2864 OKL_API.SET_MESSAGE(G_APP_NAME,
2865 'OKL_LLA_REL_TERM_SERV_CNTRCT');
2866 RAISE OKL_API.G_EXCEPTION_ERROR;
2867 END IF;
2868 END IF;
2869 CLOSE l_ubb_contract_csr;
2870 END IF; --check
2871 --rajnisku: Bug 6657564 :End
2872
2873 -- Validation at activation --
2874 -- Bug# 4072796
2875 if (p_call_program = 'ACTIVATE') then
2876 if (p_release_date > TRUNC(sysdate)) then
2877 OKL_API.SET_MESSAGE(G_APP_NAME,
2878 'OKL_CS_NO_TF_FUTURE_DATE');
2879 RAISE OKL_API.G_EXCEPTION_ERROR;
2880 end if;
2881
2882 -- Validate if Contract is undergoing Revision
2883 l_found := 'N';
2884 open pending_trx_act_csr(p_chr_id => p_chr_id);
2885 fetch pending_trx_act_csr into l_found;
2886 close pending_trx_act_csr;
2887 if (l_found = 'Y') then
2888 OKL_API.SET_MESSAGE(G_APP_NAME,
2889 'OKL_LLA_REV_IN_PROGRESS');
2890 RAISE OKL_API.G_EXCEPTION_ERROR;
2891 end if;
2892 end if;
2893
2894 --Bug# 4631549
2895 --Validate if the expected asset value has changed since the time the asset was authored
2896 If (p_call_program = 'ACTIVATE') then
2897 l_exp_cost_mismatch_yn := 'N';
2898 Open l_exp_cost_csr(p_chr_id => p_chr_id);
2899 loop
2900 fetch l_exp_cost_csr into l_exp_cost_rec;
2901 Exit when l_exp_cost_csr%NOTFOUND;
2902 open l_fa_csr(p_cle_id => l_exp_cost_rec.orig_cle_id,
2903 p_chr_id => p_chr_id);
2904 fetch l_fa_csr into l_fa_rec;
2905 If l_fa_csr%NOTFOUND Then
2906 NULL;
2907 End If;
2908 close l_fa_csr;
2909
2910 --Bug# 4631549 : Date validation removed to fix GE bug# 4873420
2911 -- Release contract start date should fall in the current
2912 -- open period in FA
2913 --validate_release_date
2914 --(p_api_version => p_api_version,
2915 --p_init_msg_list => p_init_msg_list,
2916 --x_return_status => x_return_status,
2917 --x_msg_count => x_msg_count,
2918 --x_msg_data => x_msg_data,
2919 --p_book_type_code => l_fa_rec.book_type_code,
2920 --p_release_date => p_release_date);
2921
2922 --IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2923 --RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2924 --ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2925 --RAISE OKL_API.G_EXCEPTION_ERROR;
2926 --END IF;
2927
2928 -- Calculate Expected asset cost (cost of the asset expected after re-lease)
2929 Calculate_Expected_Cost
2930 (p_api_version => p_api_version,
2931 p_init_msg_list => p_init_msg_list,
2932 x_return_status => x_return_status,
2933 x_msg_count => x_msg_count,
2934 x_msg_data => x_msg_data,
2935 p_new_chr_id => l_exp_cost_rec.new_chr_id,
2936 p_orig_chr_id => p_chr_id,
2937 p_orig_cle_id => l_exp_cost_rec.orig_cle_id,
2938 p_asset_id => l_fa_rec.asset_id,
2939 p_book_type_code => l_fa_rec.book_type_code,
2940 p_release_date => p_release_date,
2941 p_nbv => l_corp_net_book_value,
2942 x_expected_cost => l_expected_cost);
2943
2944 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2945 RAISE OKL_API.G_EXCEPTION_ERROR;
2946 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2947 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2948 END IF;
2949
2950 If nvl(l_expected_cost,0) <> nvl(l_exp_cost_rec.expected_Asset_cost,0) then
2951 l_exp_cost_mismatch_yn := 'Y';
2952 open l_asset_num_csr(p_asset_id => l_fa_rec.asset_id);
2953 fetch l_asset_num_csr into l_asset_num_rec;
2954 close l_asset_num_csr;
2955 OKL_API.set_message(p_app_name => G_APP_NAME,
2956 p_msg_name => 'OKL_LA_EXPECTED_ASSET_COST_MOD',
2957 p_token1 => 'ASSET_NUMBER',
2958 p_token1_value => l_asset_num_rec.asset_number);
2959 Elsif nvl(l_expected_cost,0) = nvl(l_exp_cost_rec.expected_asset_cost,0) then
2960 open l_units_csr(p_cle_id => l_exp_cost_rec.new_cle_id,
2961 p_chr_id => l_exp_cost_rec.new_chr_id
2962 );
2963 fetch l_units_csr into l_units_rec;
2964 If l_units_csr%NOTFOUND then
2965 Null;
2966 End If;
2967 close l_units_csr;
2968
2969 If nvl(l_units_rec.number_of_items,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM then
2970 --modify the model line
2971 l_model_clev_rec.id := l_units_rec.model_cle_id;
2972 l_model_clev_rec.price_unit := (l_expected_cost/l_units_rec.number_of_items);
2973
2974 open l_new_chr_hdr_csr (p_chr_id => l_exp_cost_rec.new_chr_id);
2975 fetch l_new_chr_hdr_csr into l_new_chr_hdr_rec;
2976 close l_new_chr_hdr_csr;
2977
2978 l_model_clev_rec.price_unit := OKL_ACCOUNTING_UTIL.cross_currency_round_amount
2979 (p_amount => l_model_clev_rec.price_unit,
2980 p_currency_code => l_new_chr_hdr_rec.currency_code);
2981
2982
2983 OKC_CONTRACT_PUB.update_contract_line
2984 (p_api_version => p_api_version,
2985 p_init_msg_list => p_init_msg_list,
2986 x_return_status => x_return_status,
2987 x_msg_count => x_msg_count,
2988 x_msg_data => x_msg_data,
2989 p_clev_rec => l_model_clev_rec,
2990 x_clev_rec => lx_model_clev_rec
2991 );
2992 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2993 RAISE OKL_API.G_EXCEPTION_ERROR;
2994 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2995 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2996 END IF;
2997 --modify the OEC on financial asset line
2998
2999 l_finast_clev_rec.id := l_exp_cost_rec.new_cle_id;
3000 l_finast_klev_rec.id := l_exp_cost_rec.new_cle_id;
3001 l_finast_klev_rec.oec := l_expected_cost;
3002
3003 OKL_CONTRACT_PUB.update_contract_line
3004 (p_api_version => p_api_version,
3005 p_init_msg_list => p_init_msg_list,
3006 x_return_status => x_return_status,
3007 x_msg_count => x_msg_count,
3008 x_msg_data => x_msg_data,
3009 p_clev_rec => l_finast_clev_rec,
3010 p_klev_rec => l_finast_klev_rec,
3011 p_edit_mode => 'N',
3012 x_clev_rec => lx_finast_clev_rec,
3013 x_klev_rec => lx_finast_klev_rec);
3014
3015 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3016 RAISE OKL_API.G_EXCEPTION_ERROR;
3017 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3018 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3019 END IF;
3020
3021 --modify the capital amount on financial assrt line
3022 OKL_EXECUTE_FORMULA_PUB.EXECUTE(p_api_version => p_api_version,
3023 p_init_msg_list => p_init_msg_list,
3024 x_return_status => x_return_status,
3025 x_msg_count => x_msg_count,
3026 x_msg_data => x_msg_data,
3027 p_formula_name => 'LINE_CAP_AMNT',
3028 p_contract_id => l_exp_cost_rec.new_chr_id,
3029 p_line_id => l_exp_cost_rec.new_cle_id,
3030 x_value => l_capital_amount);
3031
3032 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3033 RAISE OKL_API.G_EXCEPTION_ERROR;
3034 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3035 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3036 END IF;
3037
3038 OKL_EXECUTE_FORMULA_PUB.EXECUTE(p_api_version => p_api_version,
3039 p_init_msg_list => p_init_msg_list,
3040 x_return_status => x_return_status,
3041 x_msg_count => x_msg_count,
3042 x_msg_data => x_msg_data,
3043 p_formula_name => 'LINE_CAPITALIZED_INTEREST',
3044 p_contract_id => l_exp_cost_rec.new_chr_id,
3045 p_line_id => l_exp_cost_rec.new_cle_id,
3046 x_value => l_capitalized_interest);
3047
3048 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3049 RAISE OKL_API.G_EXCEPTION_ERROR;
3050 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3051 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3052 END IF;
3053
3054 l_finast_klev_rec2.capital_amount := (l_capital_amount - l_capitalized_interest);
3055 l_finast_klev_rec2.id := l_exp_cost_rec.new_cle_id;
3056 l_finast_clev_rec2.id := l_exp_cost_rec.new_cle_id;
3057
3058 OKL_CONTRACT_PUB.update_contract_line
3059 (p_api_version => p_api_version,
3060 p_init_msg_list => p_init_msg_list,
3061 x_return_status => x_return_status,
3062 x_msg_count => x_msg_count,
3063 x_msg_data => x_msg_data,
3064 p_clev_rec => l_finast_clev_rec2,
3065 p_klev_rec => l_finast_klev_rec2,
3066 p_edit_mode => 'N',
3067 x_clev_rec => lx_finast_clev_rec2,
3068 x_klev_rec => lx_finast_klev_rec2);
3069
3070 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3071 RAISE OKL_API.G_EXCEPTION_ERROR;
3072 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3073 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3074 END IF;
3075
3076 End If;
3077 End If;
3078 End Loop;
3079 Close l_exp_cost_csr;
3080 If l_exp_cost_mismatch_yn = 'Y' then
3081 OKL_API.set_message(p_app_name => G_APP_NAME,
3082 p_msg_name => 'OKL_LA_UPDATE_ASSET');
3083 RAISE OKL_API.G_EXCEPTION_ERROR;
3084 End If;
3085 End If;
3086 --End Bug# 4631549
3087
3088
3089
3090 --End Bug# 4631549
3091
3092 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
3093 x_msg_data => x_msg_data);
3094
3095 EXCEPTION
3096 when OKL_API.G_EXCEPTION_ERROR then
3097
3098 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3099 p_api_name => l_api_name,
3100 p_pkg_name => G_PKG_NAME,
3101 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
3102 x_msg_count => x_msg_count,
3103 x_msg_data => x_msg_data,
3104 p_api_type => G_API_TYPE);
3105
3106 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
3107
3108 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3109 p_api_name => l_api_name,
3110 p_pkg_name => G_PKG_NAME,
3111 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
3112 x_msg_count => x_msg_count,
3113 x_msg_data => x_msg_data,
3114 p_api_type => G_API_TYPE);
3115
3116 when OTHERS then
3117
3118 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3119 p_api_name => l_api_name,
3120 p_pkg_name => G_PKG_NAME,
3121 p_exc_name => 'OTHERS',
3122 x_msg_count => x_msg_count,
3123 x_msg_data => x_msg_data,
3124 p_api_type => G_API_TYPE);
3125 END validate_release_contract;
3126
3127 -----------------------------------------------------------------------------------------------
3128 -- Start of Comments
3129 -- Rekha Pillay
3130 -- Procedure Name : Validate_Release_Contract
3131 -- Description : Validations for the Re-lease contract
3132 --
3133 -- Business Rules :
3134 --
3135 --
3136 --
3137 --
3138 --
3139 --
3140 --
3141 -- Parameters :
3142 -- Version : 1.0
3143 -- End of Commments
3144 PROCEDURE validate_release_contract(p_api_version IN NUMBER,
3145 p_init_msg_list IN VARCHAR2,
3146 x_return_status OUT NOCOPY VARCHAR2,
3147 x_msg_count OUT NOCOPY NUMBER,
3148 x_msg_data OUT NOCOPY VARCHAR2,
3149 p_chr_id IN NUMBER,
3150 p_release_date IN DATE,
3151 p_source_trx_id IN NUMBER,
3152 p_release_reason_code IN VARCHAR2) IS
3153
3154 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3155 l_api_name CONSTANT VARCHAR2(30) := 'VALIDATE_RELEASE_CONTRACT';
3156 l_api_version CONSTANT NUMBER := 1.0;
3157
3158 CURSOR chr_csr(p_chr_id IN NUMBER) IS
3159 SELECT chr.start_date,
3160 chr.end_date,
3161 chr.contract_number,
3162 khr.deal_type,
3163 sts_code,
3164 --Bug# 5005869
3165 chr.currency_code
3166 FROM okc_k_headers_b chr,
3167 okl_k_headers khr
3168 WHERE chr.id = p_chr_id
3169 AND chr.id = khr.id;
3170
3171 chr_rec chr_csr%ROWTYPE;
3172
3173 CURSOR rul_csr(p_chr_id IN NUMBER,
3174 p_rgd_code IN VARCHAR2,
3175 p_rul_cat IN VARCHAR2
3176 ) IS
3177 SELECT crl.rule_information1
3178 FROM okc_rule_groups_b crg,
3179 okc_rules_b crl
3180 WHERE crl.rgp_id = crg.id
3181 AND crg.rgd_code = p_rgd_code
3182 AND crl.rule_information_category = p_rul_cat
3183 AND crg.dnz_chr_id = p_chr_id;
3184
3185 rul_rec rul_csr%ROWTYPE;
3186
3187 CURSOR chk_usage_csr(p_chr_id OKC_K_HEADERS_B.ID%TYPE)
3188 IS
3189 SELECT 'Y'
3190 FROM okc_k_lines_b cle,
3191 okc_line_styles_b lse
3192 WHERE cle.chr_id = p_chr_id
3193 AND cle.dnz_chr_id = p_chr_id
3194 AND lse.id = cle.lse_id
3195 AND lse.lty_code = 'USAGE'
3196 AND rownum = 1;
3197
3198 -- Bug# 4072796
3199 -- Called at release --
3200 CURSOR pending_trx_csr(p_chr_id IN NUMBER)
3201 IS
3202 SELECT 'Y'
3203 FROM okl_trx_contracts tcn
3204 WHERE tcn.khr_id = p_chr_id
3205 AND tcn.tsu_code IN ('ENTERED','WORKING','WAITING','SUBMITTED')
3206 --rkuttiya added for 12.1.1 Multi GAAP
3207 AND tcn.representation_type = 'PRIMARY'
3208 AND (tcn.tcn_type IN ('TRBK','RVS','SPLC')
3209 --
3210 OR (tcn.tcn_type = 'MAE' AND tcn.try_id IN (SELECT try.id
3211 FROM okl_trx_types_tl try
3212 WHERE try.name = 'Release'
3213 AND try.language= 'US')));
3214
3215 --Bug# 4905732
3216 CURSOR chk_chr_asset_pymt_csr
3217 (p_orig_chr_id IN NUMBER)
3218 IS
3219 SELECT fin_ast_cle.id,
3220 fin_ast_cle.name
3221 FROM okc_k_lines_v fin_ast_cle,
3222 okc_k_headers_b chr,
3223 okc_line_styles_b fin_ast_lse
3224 WHERE chr.id = p_orig_chr_id
3225 AND fin_ast_cle.chr_id = chr.id
3226 AND fin_ast_cle.dnz_chr_id = chr.id
3227 AND fin_ast_cle.sts_code = chr.sts_code
3228 AND fin_ast_cle.lse_id = fin_ast_lse.id
3229 AND fin_ast_lse.lty_code = 'FREE_FORM1';
3230
3231 CURSOR chk_taa_asset_pymt_csr
3232 (p_orig_chr_id IN NUMBER
3233 ,p_source_trx_id IN NUMBER)
3234 IS
3235 SELECT fin_ast_cle.id,
3236 fin_ast_cle.name
3237 FROM okl_txl_cntrct_lns tcl,
3238 okc_k_lines_v fin_ast_cle
3239 WHERE tcl.tcn_id = p_source_trx_id
3240 AND tcl.before_transfer_yn = 'N'
3241 AND fin_ast_cle.chr_id = p_orig_chr_id
3242 AND fin_ast_cle.dnz_chr_id = p_orig_chr_id
3243 AND fin_ast_cle.id = tcl.kle_id;
3244
3245 CURSOR chk_payment_csr
3246 (p_chr_id IN NUMBER,
3247 p_cle_id IN NUMBER) IS
3248 SELECT FND_DATE.canonical_to_date(sll.rule_information2) start_date,
3249 DECODE(sll.rule_information7, NULL,
3250 (ADD_MONTHS(FND_DATE.canonical_to_date(sll.rule_information2),
3251 NVL(TO_NUMBER(sll.rule_information3),1) *
3252 DECODE(sll.object1_id1, 'M',1,'Q',3,'S',6,'A',12)) - 1),
3253 FND_DATE.canonical_to_date(sll.rule_information2) +
3254 TO_NUMBER(sll.rule_information7) - 1) end_date
3255 FROM okc_rules_b sll,
3256 okc_rules_b slh,
3257 okc_rule_groups_b rgp,
3258 okl_strm_type_b sty
3259 WHERE rgp.dnz_chr_id = p_chr_id
3260 AND rgp.cle_id = p_cle_id
3261 AND rgp.rgd_code = 'LALEVL'
3262 AND slh.rgp_id = rgp.id
3263 AND slh.rule_information_category = 'LASLH'
3264 AND sll.object2_id1 = slh.id
3265 AND sll.rule_information_category = 'LASLL'
3266 AND sll.rgp_id = rgp.id
3267 AND sty.id = TO_NUMBER(slh.object1_id1)
3268 AND sty.stream_type_purpose = 'RENT';
3269
3270 l_payment_exists VARCHAR2(1);
3271 --Bug# 4905732
3272
3273 l_found VARCHAR2(30);
3274 l_icx_date_format VARCHAR2(240);
3275 l_funding_remaining NUMBER;
3276 l_term_duration NUMBER;
3277 l_asset_num_token VARCHAR2(2000);
3278
3279 BEGIN
3280 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
3281 -- Call start_activity to create savepoint, check compatibility
3282 -- and initialize message list
3283 l_return_status := Okl_Api.START_ACTIVITY(
3284 p_api_name => l_api_name,
3285 p_pkg_name => g_pkg_name,
3286 p_init_msg_list => p_init_msg_list,
3287 l_api_version => l_api_version,
3288 p_api_version => p_api_version,
3289 p_api_type => '_PVT',
3290 x_return_status => x_return_status);
3291 -- Check if activity started successfully
3292 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3293 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3294 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3295 RAISE Okl_Api.G_EXCEPTION_ERROR;
3296 END IF;
3297
3298 -- Revision date is mandatory
3299 if (p_release_date IS NULL) then
3300 OKL_API.SET_MESSAGE(G_APP_NAME,
3301 'OKL_LLA_MISSING_TRX_DATE');
3302 RAISE OKL_API.G_EXCEPTION_ERROR;
3303 end if;
3304
3305 -- Revision Date should be between Contract Start and End dates
3306 open chr_csr(p_chr_id => p_chr_id);
3307 fetch chr_csr into chr_rec;
3308 close chr_csr;
3309 -- Bug# 4072796
3310 if NOT (p_release_date BETWEEN (chr_rec.start_date + 1) AND chr_rec.end_date) then
3311 l_icx_date_format := nvl(fnd_profile.value('ICX_DATE_FORMAT_MASK'),'DD-MON-RRRR');
3312
3313 OKL_API.SET_MESSAGE(G_APP_NAME,
3314 'OKL_LLA_WRONG_TRX_DATE',
3315 'START_DATE',
3316 TO_CHAR(chr_rec.start_date,l_icx_date_format),
3317 'END_DATE',
3318 TO_CHAR(chr_rec.end_date,l_icx_date_format)
3319 );
3320 RAISE OKL_API.G_EXCEPTION_ERROR;
3321 end if;
3322
3323 -- The new Term duration (Re-lease Date to Contract end date)
3324 -- must be a whole number of months
3325 l_term_duration := MONTHS_BETWEEN(chr_rec.end_date + 1,p_release_date);
3326 if (MOD(l_term_duration,1) <> 0) then
3327 OKL_API.SET_MESSAGE(G_APP_NAME,
3328 'OKL_LLA_REL_INVALID_DURATION');
3329 RAISE OKL_API.G_EXCEPTION_ERROR;
3330 end if;
3331
3332 -- Validate if Deal Type is Loan or Revolving Loan
3333 if chr_rec.deal_type IN ('LOAN','LOAN-REVOLVING') then
3334 OKL_API.SET_MESSAGE(G_APP_NAME,
3335 'OKL_LLA_REL_NOT_ALLOW_LOAN');
3336 RAISE OKL_API.G_EXCEPTION_ERROR;
3337 end if;
3338
3339 -- Validate if Contract has Variable Interest Rate
3340 open rul_csr(p_chr_id => p_chr_id
3341 ,p_rgd_code => 'LAIIND'
3342 ,p_rul_cat => 'LAINTP');
3343 fetch rul_csr into rul_rec;
3344 close rul_csr;
3345
3346 if (rul_rec.rule_information1 = 'Y') then
3347 OKL_API.SET_MESSAGE(G_APP_NAME,
3348 'OKL_LLA_REL_NOT_ALLOW_VAR_RT');
3349 RAISE OKL_API.G_EXCEPTION_ERROR;
3350 end if;
3351 --rajnisku: Bug 6657564
3352 --added if condition to allow TnA for contract with Usage line
3353 if NVL(p_release_reason_code,'X') <> 'CUSTOMER_CHANGE' THEN
3354 -- Validate if Usage Line exists
3355 l_found := 'N';
3356 open chk_usage_csr(p_chr_id => p_chr_id);
3357 fetch chk_usage_csr into l_found;
3358 close chk_usage_csr;
3359 if (l_found = 'Y') then
3360 OKL_API.SET_MESSAGE(G_APP_NAME,
3361 'OKL_LLA_REL_NO_USAGE_LINES');
3362 RAISE OKL_API.G_EXCEPTION_ERROR;
3363 end if;
3364 end if;
3365 --rajnisku: Bug 6657564 : end
3366
3367 -- Bug# 4072796
3368 -- Validate if Contract is undergoing Revision
3369 l_found := 'N';
3370 open pending_trx_csr(p_chr_id => p_chr_id);
3371 fetch pending_trx_csr into l_found;
3372 close pending_trx_csr;
3373 if (l_found = 'Y') then
3374 OKL_API.SET_MESSAGE(G_APP_NAME,
3375 'OKL_LLA_REV_IN_PROGRESS');
3376 RAISE OKL_API.G_EXCEPTION_ERROR;
3377 end if;
3378
3379 --Bug# 4905732
3380 -- Validation that assets selected for Re-lease
3381 -- have incomplete Payments
3382
3383 -- T and A transaction
3384 if (p_source_trx_id IS NOT NULL) then
3385
3386 l_asset_num_token := null;
3387 for chk_taa_asset_pymt_rec in
3388 chk_taa_asset_pymt_csr
3389 (p_orig_chr_id => p_chr_id
3390 ,p_source_trx_id => p_source_trx_id) loop
3391
3392 l_payment_exists := 'N';
3393 for chk_payment_rec in chk_payment_csr
3394 (p_chr_id => p_chr_id,
3395 p_cle_id => chk_taa_asset_pymt_rec.id) loop
3396 if (chk_payment_rec.end_date >= p_release_date) then
3397 l_payment_exists := 'Y';
3398 exit;
3399 end if;
3400 end loop;
3401
3402 if l_payment_exists = 'N' then
3403 if l_asset_num_token is null then
3404 l_asset_num_token := l_asset_num_token ||chk_taa_asset_pymt_rec.name;
3405 else
3406 l_asset_num_token := l_asset_num_token ||', '||chk_taa_asset_pymt_rec.name;
3407 end if;
3408 end if;
3409 end loop;
3410
3411 if l_asset_num_token IS NOT NULL then
3412 l_icx_date_format := nvl(fnd_profile.value('ICX_DATE_FORMAT_MASK'),'DD-MON-RRRR');
3413 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
3414 p_msg_name => 'OKL_LLA_REL_ASSET_NO_PYMT',
3415 p_token1 => 'ASSET_NUMBER',
3416 p_token1_value => l_asset_num_token,
3417 p_token2 => 'RELEASE_DATE',
3418 p_token2_value => to_char(p_release_date,l_icx_date_format));
3419 RAISE OKL_API.G_EXCEPTION_ERROR;
3420 end if;
3421
3422 -- Re-lease contract
3423 else
3424
3425 l_asset_num_token := null;
3426 for chk_chr_asset_pymt_rec in
3427 chk_chr_asset_pymt_csr
3428 (p_orig_chr_id => p_chr_id) loop
3429
3430 l_payment_exists := 'N';
3431 for chk_payment_rec in chk_payment_csr
3432 (p_chr_id => p_chr_id,
3433 p_cle_id => chk_chr_asset_pymt_rec.id) loop
3434 if (chk_payment_rec.end_date >= p_release_date) then
3435 l_payment_exists := 'Y';
3436 exit;
3437 end if;
3438 end loop;
3439
3440 if l_payment_exists = 'N' then
3441 if l_asset_num_token is null then
3442 l_asset_num_token := l_asset_num_token ||chk_chr_asset_pymt_rec.name;
3443 else
3444 l_asset_num_token := l_asset_num_token ||', '||chk_chr_asset_pymt_rec.name;
3445 end if;
3446 end if;
3447 end loop;
3448
3449 if l_asset_num_token IS NOT NULL then
3450 l_icx_date_format := nvl(fnd_profile.value('ICX_DATE_FORMAT_MASK'),'DD-MON-RRRR');
3451 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
3452 p_msg_name => 'OKL_LLA_REL_ASSET_NO_PYMT',
3453 p_token1 => 'ASSET_NUMBER',
3454 p_token1_value => l_asset_num_token,
3455 p_token2 => 'RELEASE_DATE',
3456 p_token2_value => to_char(p_release_date,l_icx_date_format));
3457 RAISE OKL_API.G_EXCEPTION_ERROR;
3458 end if;
3459
3460 end if;
3461 --Bug# 4905732
3462
3463 --Bug# 5005869
3464 -- Validate information from the
3465 -- Transfer and Assumption request
3466 if (p_source_trx_id IS NOT NULL) then
3467
3468 validate_taa_request_info
3469 (p_api_version => p_api_version,
3470 p_init_msg_list => p_init_msg_list,
3471 x_return_status => x_return_status,
3472 x_msg_count => x_msg_count,
3473 x_msg_data => x_msg_data,
3474 p_chr_id => p_chr_id,
3475 p_release_date => p_release_date,
3476 p_source_trx_id => p_source_trx_id,
3477 p_currency_code => chr_rec.currency_code);
3478
3479 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3480 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3481 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3482 RAISE OKL_API.G_EXCEPTION_ERROR;
3483 END IF;
3484
3485 end if;
3486 --Bug# 5005869
3487
3488 -- Start change fmiao 19-NOV-04 for release date check --
3489 -- Perform the shared validations
3490 validate_release_contract(p_api_version => p_api_version,
3491 p_init_msg_list => p_init_msg_list,
3492 x_return_status => x_return_status,
3493 x_msg_count => x_msg_count,
3494 x_msg_data => x_msg_data,
3495 p_chr_id => p_chr_id,
3496 p_release_date => p_release_date,
3497 p_source_trx_id => p_source_trx_id,
3498 p_call_program => 'RELEASE');
3499 -- End change fmiao 19-NOV-04 for release date check --
3500
3501 -- Bug# 4072796
3502 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3503 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3504 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3505 RAISE OKL_API.G_EXCEPTION_ERROR;
3506 END IF;
3507
3508 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
3509 x_msg_data => x_msg_data);
3510
3511 EXCEPTION
3512 when OKL_API.G_EXCEPTION_ERROR then
3513
3514 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3515 p_api_name => l_api_name,
3516 p_pkg_name => G_PKG_NAME,
3517 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
3518 x_msg_count => x_msg_count,
3519 x_msg_data => x_msg_data,
3520 p_api_type => G_API_TYPE);
3521
3522 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
3523
3524 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3525 p_api_name => l_api_name,
3526 p_pkg_name => G_PKG_NAME,
3527 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
3528 x_msg_count => x_msg_count,
3529 x_msg_data => x_msg_data,
3530 p_api_type => G_API_TYPE);
3531
3532 when OTHERS then
3533
3534 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3535 p_api_name => l_api_name,
3536 p_pkg_name => G_PKG_NAME,
3537 p_exc_name => 'OTHERS',
3538 x_msg_count => x_msg_count,
3539 x_msg_data => x_msg_data,
3540 p_api_type => G_API_TYPE);
3541 END validate_release_contract;
3542
3543 -----------------------------------------------------------------------------------------------
3544 -- Start of Comments
3545 -- Rekha Pillay
3546 -- Procedure Name : Adjust_Payment_Lines
3547 -- Description : Adjust Payment lines on the Re-lease contract
3548 -- Business Rules :
3549 --
3550 --
3551 --
3552 --
3553 --
3554 --
3555 --
3556 -- Parameters :
3557 -- Version : 1.0
3558 -- End of Commments
3559 PROCEDURE adjust_payment_lines(p_api_version IN NUMBER,
3560 p_init_msg_list IN VARCHAR2,
3561 x_return_status OUT NOCOPY VARCHAR2,
3562 x_msg_count OUT NOCOPY NUMBER,
3563 x_msg_data OUT NOCOPY VARCHAR2,
3564 p_chr_id IN NUMBER,
3565 p_release_date IN DATE) IS
3566
3567 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3568 l_api_name CONSTANT VARCHAR2(30) := 'ADJUST_PAYMENT_LINES';
3569 l_api_version CONSTANT NUMBER := 1.0;
3570
3571 CURSOR contract_payment_csr
3572 (p_chr_id IN NUMBER,
3573 p_release_date IN DATE) IS
3574 SELECT FND_DATE.canonical_to_date(sll.rule_information2) start_date,
3575 DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12)factor,
3576 TO_NUMBER(sll.rule_information3) periods,
3577 DECODE(sll.rule_information7, NULL,
3578 (ADD_MONTHS(FND_DATE.canonical_to_date(sll.rule_information2),
3579 NVL(TO_NUMBER(sll.rule_information3),1) *
3580 DECODE(sll.object1_id1, 'M',1,'Q',3,'S',6,'A',12)) - 1),
3581 FND_DATE.canonical_to_date(sll.rule_information2) +
3582 TO_NUMBER(sll.rule_information7) - 1) end_date,
3583 sll.rule_information10 arrears_yn,
3584 TO_NUMBER(sll.rule_information6) amount,
3585 TO_NUMBER(sll.rule_information8) stub_amount,
3586 sll.rule_information5,
3587 sll.rgp_id,
3588 sll.object1_id1,
3589 sll.object1_id2,
3590 sll.jtot_object1_code,
3591 sll.object2_id1,
3592 sll.object2_id2,
3593 sll.jtot_object2_code,
3594 sll.id sll_id
3595 FROM okc_rules_b sll,
3596 okc_rules_b slh,
3597 okc_rule_groups_b rgp
3598 WHERE rgp.dnz_chr_id = p_chr_id
3599 AND rgp.rgd_code = 'LALEVL'
3600 AND slh.rgp_id = rgp.id
3601 AND slh.rule_information_category = 'LASLH'
3602 AND sll.object2_id1 = slh.id
3603 AND sll.rule_information_category = 'LASLL'
3604 AND sll.rgp_id = rgp.id
3605 AND FND_DATE.canonical_to_date(sll.rule_information2) < p_release_date;
3606
3607 CURSOR slh_csr(p_chr_id IN NUMBER) IS
3608 SELECT slh.id slh_id
3609 FROM okc_rules_b slh
3610 WHERE slh.dnz_chr_id = p_chr_id
3611 AND slh.rule_information_category = 'LASLH'
3612 AND NOT EXISTS (SELECT NULL FROM okc_rules_b sll
3613 WHERE sll.object2_id1 = slh.id
3614 AND sll.rule_information_category = 'LASLL'
3615 AND sll.dnz_chr_id = slh.dnz_chr_id);
3616
3617 CURSOR rgp_csr(p_chr_id IN NUMBER) IS
3618 SELECT rgp.id rgp_id
3619 FROM okc_rule_groups_b rgp
3620 WHERE rgp.dnz_chr_id = p_chr_id
3621 AND rgp.rgd_code = 'LALEVL'
3622 AND NOT EXISTS (SELECT NULL FROM okc_rules_b slh
3623 WHERE slh.rgp_id = rgp.id
3624 AND slh.rule_information_category = 'LASLH');
3625
3626 l_rulv_rec OKL_RULE_PUB.rulv_rec_type;
3627 lx_rulv_rec OKL_RULE_PUB.rulv_rec_type;
3628 l_rgpv_rec OKL_RULE_PUB.rgpv_rec_type;
3629
3630 l_rulv_temp_rec OKL_RULE_PUB.rulv_rec_type;
3631 l_rgpv_temp_rec OKL_RULE_PUB.rgpv_rec_type;
3632
3633 l_no_of_periods NUMBER;
3634 l_periods_to_skip NUMBER;
3635 l_new_start_date DATE;
3636 l_stub_amount NUMBER;
3637 l_stub_days NUMBER;
3638 BEGIN
3639 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
3640 -- Call start_activity to create savepoint, check compatibility
3641 -- and initialize message list
3642 l_return_status := Okl_Api.START_ACTIVITY(
3643 p_api_name => l_api_name,
3644 p_pkg_name => g_pkg_name,
3645 p_init_msg_list => p_init_msg_list,
3646 l_api_version => l_api_version,
3647 p_api_version => p_api_version,
3648 p_api_type => '_PVT',
3649 x_return_status => x_return_status);
3650 -- Check if activity started successfully
3651 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3652 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3653 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3654 RAISE Okl_Api.G_EXCEPTION_ERROR;
3655 END IF;
3656
3657 for contract_payment_rec in contract_payment_csr
3658 (p_chr_id => p_chr_id,
3659 p_release_date => p_release_date) loop
3660
3661 l_rulv_rec := l_rulv_temp_rec;
3662
3663 -- Delete SLL where End Date is earlier than Re-lease date
3664 if (contract_payment_rec.end_date < p_release_date) then
3665 l_rulv_rec.id := contract_payment_rec.sll_id; -- SLL Rule ID
3666 okl_rule_pub.delete_rule(
3667 p_api_version => p_api_version,
3668 p_init_msg_list => p_init_msg_list,
3669 x_return_status => x_return_status,
3670 x_msg_count => x_msg_count,
3671 x_msg_data => x_msg_data,
3672 p_rulv_rec => l_rulv_rec
3673 );
3674 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3675 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3676 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3677 RAISE OKL_API.G_EXCEPTION_ERROR;
3678 END IF;
3679
3680 -- Update SLL Start Date, Periods and Amount where End Date is greater than
3681 -- or equal to Re-lease date and Start Date is less than Re-lease date
3682 elsif (contract_payment_rec.end_date >= p_release_date) then
3683
3684 -- Convert Payment line to a Stub starting on Re-lease date
3685 -- if there is only 1 period or if it is a stub payment
3686 if NVL(contract_payment_rec.periods,1) = 1 then
3687
3688 l_rulv_rec.id := contract_payment_rec.sll_id; -- SLL Rule ID
3689
3690 l_stub_days := contract_payment_rec.end_date - p_release_date + 1;
3691
3692 -- Payment in Arrears
3693 if (contract_payment_rec.arrears_yn = 'Y') then
3694 l_stub_amount := NVL(contract_payment_rec.amount,contract_payment_rec.stub_amount);
3695
3696 -- Payment in Advance
3697 else
3698 l_stub_amount := 0;
3699 end if;
3700
3701 l_rulv_rec.rule_information2 := FND_DATE.date_to_canonical(p_release_date);
3702 l_rulv_rec.rule_information3 := NULL;
3703 l_rulv_rec.rule_information6 := NULL;
3704 l_rulv_rec.rule_information7 := TO_CHAR(l_stub_days);
3705 l_rulv_rec.rule_information8 := TO_CHAR(l_stub_amount);
3706
3707 OKL_RULE_PUB.update_rule(
3708 p_api_version => p_api_version,
3709 p_init_msg_list => p_init_msg_list,
3710 x_return_status => x_return_status,
3711 x_msg_count => x_msg_count,
3712 x_msg_data => x_msg_data,
3713 p_rulv_rec => l_rulv_rec,
3714 x_rulv_rec => lx_rulv_rec);
3715
3716 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3717 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3718 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3719 RAISE OKL_API.G_EXCEPTION_ERROR;
3720 END IF;
3721
3722 elsif (contract_payment_rec.periods > 1) then
3723
3724 if (contract_payment_rec.factor IS NOT NULL and contract_payment_rec.factor > 0 ) then
3725
3726 l_rulv_rec.id := contract_payment_rec.sll_id; -- SLL Rule ID
3727
3728 l_periods_to_skip :=
3729 CEIL(CEIL(MONTHS_BETWEEN(p_release_date,contract_payment_rec.start_date))/contract_payment_rec.factor);
3730
3731 l_new_start_date := ADD_MONTHS(contract_payment_rec.start_date,
3732 l_periods_to_skip * contract_payment_rec.factor);
3733
3734 if (l_new_start_date > contract_payment_rec.end_date) then
3735
3736 -- No periodic payment, only stub payment needed
3737 OKL_RULE_PUB.delete_rule(
3738 p_api_version => p_api_version,
3739 p_init_msg_list => p_init_msg_list,
3740 x_return_status => x_return_status,
3741 x_msg_count => x_msg_count,
3742 x_msg_data => x_msg_data,
3743 p_rulv_rec => l_rulv_rec
3744 );
3745 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3746 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3747 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3748 RAISE OKL_API.G_EXCEPTION_ERROR;
3749 END IF;
3750
3751 else
3752
3753 l_rulv_rec.rule_information2 := FND_DATE.date_to_canonical(l_new_start_date);
3754
3755 l_no_of_periods := MONTHS_BETWEEN((contract_payment_rec.end_date + 1),l_new_start_date)/contract_payment_rec.factor;
3756 l_rulv_rec.rule_information3 := TO_CHAR(l_no_of_periods);
3757
3758 OKL_RULE_PUB.update_rule(
3759 p_api_version => p_api_version,
3760 p_init_msg_list => p_init_msg_list,
3761 x_return_status => x_return_status,
3762 x_msg_count => x_msg_count,
3763 x_msg_data => x_msg_data,
3764 p_rulv_rec => l_rulv_rec,
3765 x_rulv_rec => lx_rulv_rec);
3766
3767 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3768 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3769 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3770 RAISE OKL_API.G_EXCEPTION_ERROR;
3771 END IF;
3772 end if;
3773
3774 -- Create Stub payment line for 1st payment
3775 l_rulv_rec := l_rulv_temp_rec;
3776
3777 l_stub_days := l_new_start_date - p_release_date;
3778 if (l_stub_days > 0) then
3779
3780 -- Payment in Arrears
3781 if (contract_payment_rec.arrears_yn = 'Y') then
3782 l_stub_amount := contract_payment_rec.amount;
3783
3784 -- Payment in Advance
3785 else
3786 l_stub_amount := 0;
3787 end if;
3788
3789 l_rulv_rec.dnz_chr_id := p_chr_id;
3790 l_rulv_rec.rgp_id := contract_payment_rec.rgp_id;
3791 l_rulv_rec.object1_id1 := contract_payment_rec.object1_id1;
3792 l_rulv_rec.object1_id2 := contract_payment_rec.object1_id2;
3793 l_rulv_rec.jtot_object1_code := contract_payment_rec.jtot_object1_code;
3794 l_rulv_rec.object2_id1 := contract_payment_rec.object2_id1;
3795 -- nikshah 25-Nov-08 bug # 6697542
3796 l_rulv_rec.object2_id2 := '#'; --contract_payment_rec.object2_id2;
3797 -- nikshah 25-Nov-08 bug # 6697542
3798 l_rulv_rec.jtot_object2_code := contract_payment_rec.jtot_object2_code;
3799 l_rulv_rec.std_template_yn := 'N';
3800 l_rulv_rec.warn_yn := 'N';
3801 l_rulv_rec.template_yn := 'N';
3802 l_rulv_rec.sfwt_flag := 'N';
3803 l_rulv_rec.rule_information_category := 'LASLL';
3804 l_rulv_rec.rule_information2 := FND_DATE.date_to_canonical(p_release_date);
3805 l_rulv_rec.rule_information5 := contract_payment_rec.rule_information5;
3806 l_rulv_rec.rule_information7 := TO_CHAR(l_stub_days);
3807 l_rulv_rec.rule_information8 := TO_CHAR(l_stub_amount);
3808 l_rulv_rec.rule_information10 := contract_payment_rec.arrears_yn;
3809
3810 OKL_RULE_PUB.create_rule(
3811 p_api_version => p_api_version,
3812 p_init_msg_list => p_init_msg_list,
3813 x_return_status => x_return_status,
3814 x_msg_count => x_msg_count,
3815 x_msg_data => x_msg_data,
3816 p_rulv_rec => l_rulv_rec,
3817 x_rulv_rec => lx_rulv_rec);
3818
3819 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3820 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3821 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3822 RAISE OKL_API.G_EXCEPTION_ERROR;
3823 END IF;
3824 end if; --Stub days greater than 0
3825 end if; --Factor is not null
3826 end if; --Periods equal/greater than 1
3827 end if; --End date less/greater than Release date
3828 end loop;
3829
3830 for slh_rec in slh_csr(p_chr_id => p_chr_id) loop
3831 l_rulv_rec := l_rulv_temp_rec;
3832
3833 l_rulv_rec.id := slh_rec.slh_id; -- SLH Rule ID
3834 okl_rule_pub.delete_rule(
3835 p_api_version => p_api_version,
3836 p_init_msg_list => p_init_msg_list,
3837 x_return_status => x_return_status,
3838 x_msg_count => x_msg_count,
3839 x_msg_data => x_msg_data,
3840 p_rulv_rec => l_rulv_rec
3841 );
3842 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3843 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3844 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3845 RAISE OKL_API.G_EXCEPTION_ERROR;
3846 END IF;
3847 end loop;
3848
3849 for rgp_rec in rgp_csr(p_chr_id => p_chr_id) loop
3850 l_rgpv_rec := l_rgpv_temp_rec;
3851
3852 l_rgpv_rec.id := rgp_rec.rgp_id; -- Rule Group ID
3853 okl_rule_pub.delete_rule_group(
3854 p_api_version => p_api_version,
3855 p_init_msg_list => p_init_msg_list,
3856 x_return_status => x_return_status,
3857 x_msg_count => x_msg_count,
3858 x_msg_data => x_msg_data,
3859 p_rgpv_rec => l_rgpv_rec
3860 );
3861 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3862 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3863 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3864 RAISE OKL_API.G_EXCEPTION_ERROR;
3865 END IF;
3866 end loop;
3867
3868 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
3869 x_msg_data => x_msg_data);
3870
3871 EXCEPTION
3872 when OKL_API.G_EXCEPTION_ERROR then
3873
3874 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3875 p_api_name => l_api_name,
3876 p_pkg_name => G_PKG_NAME,
3877 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
3878 x_msg_count => x_msg_count,
3879 x_msg_data => x_msg_data,
3880 p_api_type => G_API_TYPE);
3881
3882 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
3883
3884 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3885 p_api_name => l_api_name,
3886 p_pkg_name => G_PKG_NAME,
3887 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
3888 x_msg_count => x_msg_count,
3889 x_msg_data => x_msg_data,
3890 p_api_type => G_API_TYPE);
3891
3892 when OTHERS then
3893
3894 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3895 p_api_name => l_api_name,
3896 p_pkg_name => G_PKG_NAME,
3897 p_exc_name => 'OTHERS',
3898 x_msg_count => x_msg_count,
3899 x_msg_data => x_msg_data,
3900 p_api_type => G_API_TYPE);
3901 END adjust_payment_lines;
3902
3903 -----------------------------------------------------------------------------------------------
3904 -- Start of Comments
3905 -- Rekha Pillay
3906 -- Procedure Name : Get_Principal_bal
3907 -- Description : Get prinicipal balance amount
3908 -- Business Rules :
3909 --
3910 --
3911 --
3912 --
3913 --
3914 --
3915 --
3916 -- Parameters :
3917 -- Version : 1.0
3918 -- End of Commments
3919 PROCEDURE get_principal_bal(p_api_version IN NUMBER,
3920 p_init_msg_list IN VARCHAR2,
3921 p_pymt_sty_id IN NUMBER,
3922 p_orig_chr_id IN NUMBER,
3923 p_orig_cle_id IN NUMBER,
3924 p_release_date IN DATE,
3925 x_principal_balance OUT NOCOPY NUMBER,
3926 x_accumulated_int OUT NOCOPY NUMBER,
3927 x_return_status OUT NOCOPY VARCHAR2,
3928 x_msg_count OUT NOCOPY NUMBER,
3929 x_msg_data OUT NOCOPY VARCHAR2) IS
3930
3931 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3932 l_api_name CONSTANT VARCHAR2(30) := 'Get_Principal_Bal';
3933 l_api_version CONSTANT NUMBER := 1.0;
3934
3935 CURSOR streams_csr(p_chr_id IN NUMBER,
3936 p_cle_id IN NUMBER,
3937 p_sty_id IN NUMBER)
3938 IS
3939 SELECT stm.id
3940 FROM okl_streams stm
3941 WHERE stm.khr_id = p_chr_id
3942 AND stm.kle_id = p_cle_id
3943 AND stm.sty_id = p_sty_id
3944 AND stm.active_yn = 'Y'
3945 AND stm.say_code = 'CURR';
3946
3947 streams_rec streams_csr%ROWTYPE;
3948
3949 CURSOR principal_bal_csr(p_stm_id IN NUMBER,
3950 p_release_date IN DATE)
3951 IS
3952 SELECT stream_element_date,
3953 amount
3954 FROM okl_strm_elements_v sel
3955 WHERE sel.stm_id = p_stm_id
3956 AND stream_element_date < p_release_date
3957 ORDER BY stream_element_date DESC;
3958
3959 principal_bal_rec principal_bal_csr%ROWTYPE;
3960 l_principal_bal NUMBER;
3961 l_principal_bal_sty_id NUMBER;
3962
3963 BEGIN
3964 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
3965 -- Call start_activity to create savepoint, check compatibility
3966 -- and initialize message list
3967 l_return_status := Okl_Api.START_ACTIVITY(
3968 p_api_name => l_api_name,
3969 p_pkg_name => g_pkg_name,
3970 p_init_msg_list => p_init_msg_list,
3971 l_api_version => l_api_version,
3972 p_api_version => p_api_version,
3973 p_api_type => '_PVT',
3974 x_return_status => x_return_status);
3975 -- Check if activity started successfully
3976 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3977 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3978 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3979 RAISE Okl_Api.G_EXCEPTION_ERROR;
3980 END IF;
3981
3982 -- Fetch Stream information from Original Contract
3983 l_principal_bal_sty_id := null;
3984 OKL_STREAMS_UTIL.get_dependent_stream_type
3985 (p_khr_id => p_orig_chr_id,
3986 p_primary_sty_id => p_pymt_sty_id,
3987 p_dependent_sty_purpose => 'PRINCIPAL_BALANCE',
3988 x_return_status => x_return_status,
3989 x_dependent_sty_id => l_principal_bal_sty_id);
3990
3991 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3992 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3993 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3994 RAISE OKL_API.G_EXCEPTION_ERROR;
3995 END IF;
3996
3997 l_principal_bal := 0;
3998 if (l_principal_bal_sty_id IS NOT NULL) then
3999 open streams_csr(p_chr_id => p_orig_chr_id,
4000 p_cle_id => p_orig_cle_id,
4001 p_sty_id => l_principal_bal_sty_id);
4002 fetch streams_csr into streams_rec;
4003 close streams_csr;
4004
4005 if (streams_rec.id IS NOT NULL) then
4006
4007 open principal_bal_csr(p_stm_id => streams_rec.id,
4008 p_release_date => p_release_date);
4009 fetch principal_bal_csr into principal_bal_rec;
4010 close principal_bal_csr;
4011
4012 l_principal_bal := principal_bal_rec.amount;
4013
4014 end if; --Fee Payment Stream Id is not null
4015 end if; --Fee Payment Stream Type Id is not null
4016
4017 x_principal_balance := l_principal_bal;
4018 x_accumulated_int := 0;
4019
4020 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
4021 x_msg_data => x_msg_data);
4022
4023 EXCEPTION
4024 when OKL_API.G_EXCEPTION_ERROR then
4025
4026 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4027 p_api_name => l_api_name,
4028 p_pkg_name => G_PKG_NAME,
4029 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
4030 x_msg_count => x_msg_count,
4031 x_msg_data => x_msg_data,
4032 p_api_type => G_API_TYPE);
4033
4034 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
4035
4036 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4037 p_api_name => l_api_name,
4038 p_pkg_name => G_PKG_NAME,
4039 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
4040 x_msg_count => x_msg_count,
4041 x_msg_data => x_msg_data,
4042 p_api_type => G_API_TYPE);
4043
4044 when OTHERS then
4045
4046 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4047 p_api_name => l_api_name,
4048 p_pkg_name => G_PKG_NAME,
4049 p_exc_name => 'OTHERS',
4050 x_msg_count => x_msg_count,
4051 x_msg_data => x_msg_data,
4052 p_api_type => G_API_TYPE);
4053 END get_principal_bal;
4054
4055 -----------------------------------------------------------------------------------------------
4056 -- Start of Comments
4057 -- Rekha Pillay
4058 -- Procedure Name : Adjust_Fee_Lines
4059 -- Description : Adjust Fee lines on the Re-lease contract
4060 -- Business Rules :
4061 --
4062 --
4063 --
4064 --
4065 --
4066 --
4067 --
4068 -- Parameters :
4069 -- Version : 1.0
4070 -- End of Commments
4071 PROCEDURE adjust_fee_lines(p_api_version IN NUMBER,
4072 p_init_msg_list IN VARCHAR2,
4073 x_return_status OUT NOCOPY VARCHAR2,
4074 x_msg_count OUT NOCOPY NUMBER,
4075 x_msg_data OUT NOCOPY VARCHAR2,
4076 p_chr_id IN NUMBER,
4077 p_orig_chr_id IN NUMBER,
4078 p_release_date IN DATE) IS
4079
4080 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4081 l_api_name CONSTANT VARCHAR2(30) := 'ADJUST_FEE_LINES';
4082 l_api_version CONSTANT NUMBER := 1.0;
4083
4084 CURSOR contract_fee_csr
4085 (p_chr_id IN NUMBER) IS
4086 SELECT cle.id,
4087 cle.start_date,
4088 cle.end_date,
4089 kle.amount,
4090 kle.initial_direct_cost,
4091 kle.fee_type,
4092 cle.chr_id,
4093 cle.dnz_chr_id,
4094 cle.cle_id,
4095 sts.ste_code,
4096 cle.orig_system_id1
4097 FROM okc_k_lines_b cle,
4098 okl_k_lines kle,
4099 okc_line_styles_b lse,
4100 okc_statuses_b sts
4101 WHERE cle.dnz_chr_id = p_chr_id
4102 AND cle.chr_id = p_chr_id
4103 AND kle.id = cle.id
4104 AND cle.lse_id = lse.id
4105 AND lse.lty_code = 'FEE'
4106 AND cle.sts_code = sts.code;
4107
4108 CURSOR orig_cle_sts_csr(p_cle_id IN NUMBER)
4109 IS
4110 SELECT sts.ste_code
4111 FROM okc_k_lines_b cle,
4112 okc_statuses_b sts
4113 WHERE cle.id = p_cle_id
4114 AND cle.sts_code = sts.code;
4115
4116 orig_cle_sts_rec orig_cle_sts_csr%ROWTYPE;
4117
4118 CURSOR fee_expense_csr
4119 (p_chr_id IN NUMBER,
4120 p_cle_id IN NUMBER) IS
4121 SELECT DECODE(rul_lafreq.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12)factor,
4122 TO_NUMBER(rul_lafexp.rule_information1) periods,
4123 TO_NUMBER(rul_lafexp.rule_information2) amount,
4124 rul_lafexp.id rul_lafexp_id,
4125 rul_lafreq.id rul_lafreq_id,
4126 rgp.id rgp_id
4127 FROM okc_rules_b rul_lafexp,
4128 okc_rules_b rul_lafreq,
4129 okc_rule_groups_b rgp
4130 WHERE rgp.dnz_chr_id = p_chr_id
4131 AND rgp.cle_id = p_cle_id
4132 AND rgp.rgd_code = 'LAFEXP'
4133 AND rul_lafreq.rgp_id = rgp.id
4134 AND rul_lafreq.rule_information_category = 'LAFREQ'
4135 AND rul_lafexp.rgp_id = rgp.id
4136 AND rul_lafexp.rule_information_category = 'LAFEXP';
4137
4138 fee_expense_rec fee_expense_csr%ROWTYPE;
4139
4140 CURSOR fee_subline_csr (p_cle_id IN NUMBER,
4141 p_chr_id IN NUMBER) IS
4142 SELECT cle.id,
4143 NVL(kle.capital_amount,0) capital_amount,
4144 NVL(kle.amount,0) amount,
4145 cle.chr_id,
4146 cle.dnz_chr_id,
4147 cle.cle_id,
4148 --avsingh
4149 cle.orig_system_id1
4150 FROM okc_k_lines_b cle,
4151 okl_k_lines kle
4152 WHERE cle.cle_id = p_cle_id
4153 AND cle.dnz_chr_id = p_chr_id
4154 AND cle.id = kle.id;
4155
4156 CURSOR check_pymts_csr(p_chr_id IN NUMBER,
4157 p_cle_id IN NUMBER) IS
4158 SELECT 'Y' pymt_exists,
4159 rgp.id
4160 FROM okc_rule_groups_b rgp
4161 WHERE rgp.cle_id = p_cle_id
4162 AND rgp.dnz_chr_id = p_chr_id
4163 AND rgp.rgd_code = 'LALEVL';
4164
4165 l_pymt_exists VARCHAR2(30);
4166 l_rgp_id okc_rule_groups_b.id%TYPE;
4167
4168 CURSOR fee_item_csr(p_chr_id IN NUMBER,
4169 p_cle_id IN NUMBER) IS
4170 SELECT fee_cim.id,
4171 fee_cim.object1_id1
4172 FROM okc_k_items fee_cim
4173 WHERE fee_cim.cle_id = p_cle_id
4174 AND fee_cim.dnz_chr_id = p_chr_id
4175 AND fee_cim.jtot_object1_code = 'OKL_STRMTYP';
4176
4177 fee_item_rec fee_item_csr%ROWTYPE;
4178
4179 CURSOR pymt_details_csr(p_chr_id IN NUMBER,
4180 p_rgp_id IN NUMBER,
4181 p_rul_cat IN VARCHAR2) IS
4182 SELECT crl.object1_id1,
4183 crl.rule_information3,
4184 crl.rule_information6,
4185 crl.rule_information8
4186 FROM okc_rules_b crl
4187 WHERE crl.rgp_id = p_rgp_id
4188 AND crl.dnz_chr_id = p_chr_id
4189 AND crl.rule_information_category = p_rul_cat;
4190
4191 pymt_details_rec pymt_details_csr%ROWTYPE;
4192
4193 l_pymt_amount NUMBER;
4194
4195 l_rulv_rec OKL_RULE_PUB.rulv_rec_type;
4196 lx_rulv_rec OKL_RULE_PUB.rulv_rec_type;
4197
4198 l_rgpv_rec OKL_RULE_PUB.rgpv_rec_type;
4199
4200 l_periods_bef_release NUMBER;
4201 l_orig_no_of_periods NUMBER;
4202 l_new_no_of_periods NUMBER;
4203 l_new_fee_amount NUMBER;
4204 l_new_idc_amount NUMBER;
4205
4206 lp_klev_rec okl_kle_pvt.klev_rec_type;
4207 lp_clev_rec okl_okc_migration_pvt.clev_rec_type;
4208
4209 lx_klev_rec okl_kle_pvt.klev_rec_type;
4210 lx_clev_rec okl_okc_migration_pvt.clev_rec_type;
4211
4212 lp_sub_clev_tbl okl_okc_migration_pvt.clev_tbl_type;
4213 lx_sub_clev_tbl okl_okc_migration_pvt.clev_tbl_type;
4214 lp_sub_clev_rec okl_okc_migration_pvt.clev_rec_type;
4215
4216 lp_sub_klev_tbl okl_kle_pvt.klev_tbl_type;
4217 lx_sub_klev_tbl okl_kle_pvt.klev_tbl_type;
4218 lp_sub_klev_rec okl_kle_pvt.klev_rec_type;
4219
4220 lp_cimv_rec okl_okc_migration_pvt.cimv_rec_type;
4221 lx_cimv_rec okl_okc_migration_pvt.cimv_rec_type;
4222
4223 lp_clev_temp_tbl okl_okc_migration_pvt.clev_tbl_type;
4224 lp_clev_temp_rec okl_okc_migration_pvt.clev_rec_type;
4225 lp_klev_temp_tbl okl_kle_pvt.klev_tbl_type;
4226 lp_klev_temp_rec okl_kle_pvt.klev_rec_type;
4227 lp_cimv_temp_rec okl_okc_migration_pvt.cimv_rec_type;
4228 l_rulv_temp_rec okl_rule_pub.rulv_rec_type;
4229
4230 l_subline_present VARCHAR2(1);
4231 l_sub_cap_amt NUMBER;
4232 i NUMBER;
4233 l_idc_sty_id NUMBER;
4234 l_fin_fee_pymt_sty_id NUMBER;
4235 l_rlvr_fee_pymt_sty_id NUMBER;
4236
4237 CURSOR streams_csr(p_chr_id IN NUMBER,
4238 p_cle_id IN NUMBER,
4239 p_sty_id IN NUMBER)
4240 IS
4241 SELECT stm.id
4242 FROM okl_streams stm
4243 WHERE stm.khr_id = p_chr_id
4244 AND stm.kle_id = p_cle_id
4245 AND stm.sty_id = p_sty_id
4246 AND stm.active_yn = 'Y'
4247 AND stm.say_code = 'CURR';
4248
4249 streams_rec streams_csr%ROWTYPE;
4250
4251 CURSOR unamort_idc_exp_csr(p_stm_id IN NUMBER,
4252 p_release_date IN DATE)
4253 IS
4254 SELECT SUM(amount) amount
4255 FROM okl_strm_elements_v sel
4256 WHERE sel.stm_id = p_stm_id
4257 AND stream_element_date >= p_release_date;
4258
4259 unamort_idc_exp_rec unamort_idc_exp_csr%ROWTYPE;
4260
4261 CURSOR principal_bal_csr(p_stm_id IN NUMBER,
4262 p_release_date IN DATE)
4263 IS
4264 SELECT stream_element_date,
4265 amount
4266 FROM okl_strm_elements_v sel
4267 WHERE sel.stm_id = p_stm_id
4268 AND stream_element_date < p_release_date
4269 ORDER BY stream_element_date DESC;
4270
4271 principal_bal_rec principal_bal_csr%ROWTYPE;
4272
4273 l_rlvr_sub_amt NUMBER;
4274 l_rlvr_sub_total NUMBER;
4275 l_sum NUMBER;
4276
4277 CURSOR curr_hdr_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
4278 SELECT currency_code
4279 FROM okc_k_headers_b
4280 WHERE id = p_chr_id;
4281
4282 l_currency_code OKC_K_LINES_B.CURRENCY_CODE%TYPE;
4283
4284 l_principal_bal NUMBER;
4285 l_accumulated_int NUMBER;
4286
4287 -- Start change for rollover by fmiao on 12-NOV-2004--
4288 CURSOR fee_type_csr (p_line_id NUMBER) IS
4289 SELECT fee_type
4290 FROM okl_k_lines
4291 WHERE id = p_line_id;
4292
4293 l_fee_type okl_k_lines.fee_type%TYPE;
4294 -- End change for rollover by fmiao on 12-NOV-2004--
4295
4296 BEGIN
4297 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
4298 -- Call start_activity to create savepoint, check compatibility
4299 -- and initialize message list
4300 l_return_status := Okl_Api.START_ACTIVITY(
4301 p_api_name => l_api_name,
4302 p_pkg_name => g_pkg_name,
4303 p_init_msg_list => p_init_msg_list,
4304 l_api_version => l_api_version,
4305 p_api_version => p_api_version,
4306 p_api_type => '_PVT',
4307 x_return_status => x_return_status);
4308 -- Check if activity started successfully
4309 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4310 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
4311 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
4312 RAISE Okl_Api.G_EXCEPTION_ERROR;
4313 END IF;
4314
4315 l_currency_code := '?';
4316 open curr_hdr_csr (p_chr_id);
4317 fetch curr_hdr_csr into l_currency_code;
4318 close curr_hdr_csr;
4319
4320 if (l_currency_code = '?') then
4321
4322 OKL_API.set_message(p_app_name => G_APP_NAME,
4323 p_msg_name => G_REQUIRED_VALUE,
4324 p_token1 => G_COL_NAME_TOKEN,
4325 p_token1_value => 'Currency Code');
4326 RAISE OKL_API.G_EXCEPTION_ERROR;
4327 end if;
4328
4329 for contract_fee_rec in contract_fee_csr
4330 (p_chr_id => p_chr_id) loop
4331
4332 l_rulv_rec := l_rulv_temp_rec;
4333 lp_clev_rec := lp_clev_temp_rec;
4334 lp_klev_rec := lp_klev_temp_rec;
4335 lp_sub_clev_rec := lp_clev_temp_rec;
4336 lp_sub_clev_tbl := lp_clev_temp_tbl;
4337 lp_sub_klev_rec := lp_klev_temp_rec;
4338 lp_sub_klev_tbl := lp_klev_temp_tbl;
4339 lp_cimv_rec := lp_cimv_temp_rec;
4340
4341 -- Delete Fee Lines where End Date is earlier than Re-lease date
4342 -- or Fee Type = Security Deposit
4343 -- or Line Status is not Active
4344
4345 -- Fetch Status of the Line in original contract
4346 open orig_cle_sts_csr(p_cle_id => contract_fee_rec.orig_system_id1);
4347 fetch orig_cle_sts_csr into orig_cle_sts_rec;
4348 close orig_cle_sts_csr;
4349
4350 if (contract_fee_rec.end_date < p_release_date) or
4351 (contract_fee_rec.ste_code IN ('TERMINATED', 'EXPIRED', 'CANCELLED')) or
4352 (orig_cle_sts_rec.ste_code IN ('TERMINATED', 'EXPIRED', 'CANCELLED')) then
4353
4354 OKL_CONTRACT_PUB.delete_contract_line(
4355 p_api_version => p_api_version,
4356 p_init_msg_list => p_init_msg_list,
4357 x_return_status => x_return_status,
4358 x_msg_count => x_msg_count,
4359 x_msg_data => x_msg_data,
4360 p_line_id => contract_fee_rec.id
4361 );
4362
4363 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4364 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4365 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4366 RAISE OKL_API.G_EXCEPTION_ERROR;
4367 END IF;
4368
4369 -- If Fee Line Start date is greater than or equal to Re-lease Date
4370 -- make updates for Covered assets not moved over
4371 elsif (contract_fee_rec.start_date >= p_release_date) then
4372
4373 -- Update Capitalized Fee Amount to Sum of Covered Asset amounts
4374 -- if they are not equal
4375 if (contract_fee_rec.fee_type = 'CAPITALIZED') then
4376
4377 l_subline_present := 'N';
4378 l_sub_cap_amt := 0;
4379
4380 i := 0;
4381 for fee_subline_rec in fee_subline_csr
4382 (p_cle_id => contract_fee_rec.id,
4383 p_chr_id => p_chr_id)
4384 loop
4385 i := i + 1;
4386 l_subline_present := 'Y';
4387 l_sub_cap_amt := l_sub_cap_amt + fee_subline_rec.capital_amount;
4388 end loop;
4389
4390 -- No Covered assets associated with Fee
4391 if (l_subline_present = 'N') then
4392
4393 -- Delete Capitalized Fee line if no Covered Assets are present
4394 OKL_CONTRACT_PUB.delete_contract_line(
4395 p_api_version => p_api_version,
4396 p_init_msg_list => p_init_msg_list,
4397 x_return_status => x_return_status,
4398 x_msg_count => x_msg_count,
4399 x_msg_data => x_msg_data,
4400 p_line_id => contract_fee_rec.id
4401 );
4402
4403 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4404 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4405 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4406 RAISE OKL_API.G_EXCEPTION_ERROR;
4407 END IF;
4408
4409 -- Covered assets associated with Fee
4410 else
4411
4412 -- Set the capital_amount on capitalized fee top line equal
4413 -- to the sum of capital_amount on capitalized fee sublines
4414 if (contract_fee_rec.amount <> l_sub_cap_amt) then
4415
4416 lp_clev_rec.id := contract_fee_rec.id;
4417
4418 lp_klev_rec.id := contract_fee_rec.id;
4419 lp_klev_rec.amount :=l_sub_cap_amt;
4420 lp_klev_rec.capital_amount := l_sub_cap_amt;
4421
4422 OKL_CONTRACT_PUB.update_contract_line(
4423 p_api_version => p_api_version,
4424 p_init_msg_list => p_init_msg_list,
4425 x_return_status => x_return_status,
4426 x_msg_count => x_msg_count,
4427 x_msg_data => x_msg_data,
4428 p_clev_rec => lp_clev_rec,
4429 p_klev_rec => lp_klev_rec,
4430 x_clev_rec => lx_clev_rec,
4431 x_klev_rec => lx_klev_rec
4432 );
4433
4434 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4435 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4436 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4437 RAISE OKL_API.G_EXCEPTION_ERROR;
4438 END IF;
4439 end if;
4440
4441 end if; --Subline Present Y/N
4442
4443 -- Update Rollover Fee Amount to Sum of Covered Asset amounts
4444 -- if they are not equal
4445 elsif (contract_fee_rec.fee_type = 'ROLLOVER') then
4446
4447 l_subline_present := 'N';
4448 l_rlvr_sub_total := 0;
4449
4450 i := 0;
4451 for fee_subline_rec in fee_subline_csr
4452 (p_cle_id => contract_fee_rec.id,
4453 p_chr_id => p_chr_id)
4454 loop
4455 i := i + 1;
4456 l_subline_present := 'Y';
4457 l_rlvr_sub_total := l_rlvr_sub_total + fee_subline_rec.amount;
4458
4459 end loop;
4460
4461 if ((l_subline_present = 'Y') and (contract_fee_rec.amount <> l_rlvr_sub_total)) then
4462
4463 lp_clev_rec.id := contract_fee_rec.id;
4464
4465 lp_klev_rec.id := contract_fee_rec.id;
4466 lp_klev_rec.amount :=l_rlvr_sub_total;
4467
4468 OKL_CONTRACT_PUB.update_contract_line(
4469 p_api_version => p_api_version,
4470 p_init_msg_list => p_init_msg_list,
4471 x_return_status => x_return_status,
4472 x_msg_count => x_msg_count,
4473 x_msg_data => x_msg_data,
4474 p_clev_rec => lp_clev_rec,
4475 p_klev_rec => lp_klev_rec,
4476 x_clev_rec => lx_clev_rec,
4477 x_klev_rec => lx_klev_rec
4478 );
4479
4480 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4481 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4482 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4483 RAISE OKL_API.G_EXCEPTION_ERROR;
4484 END IF;
4485 end if; -- Subline exists and Fee Amount <> Sum of Covered asset amounts
4486
4487 end if; --Capitalized Fee / Rollover fee
4488
4489 -- Update Fee Line Start Date and Amount where End Date is greater than
4490 -- or equal to Re-lease date and Start Date is less than Re-lease date
4491 elsif (contract_fee_rec.start_date < p_release_date) then
4492
4493 open fee_expense_csr(p_chr_id => p_chr_id,
4494 p_cle_id => contract_fee_rec.id);
4495 fetch fee_expense_csr into fee_expense_rec;
4496
4497 -- No Expense associated with Fee
4498 if fee_expense_csr%NOTFOUND THEN
4499 close fee_expense_csr;
4500
4501 if (contract_fee_rec.fee_type = 'CAPITALIZED') then
4502
4503 l_subline_present := 'N';
4504 l_sub_cap_amt := 0;
4505
4506 i := 0;
4507 for fee_subline_rec in fee_subline_csr
4508 (p_cle_id => contract_fee_rec.id,
4509 p_chr_id => p_chr_id)
4510 loop
4511 i := i + 1;
4512 l_subline_present := 'Y';
4513 l_sub_cap_amt := l_sub_cap_amt + fee_subline_rec.capital_amount;
4514
4515 lp_sub_clev_rec.id := fee_subline_rec.id;
4516 lp_sub_clev_rec.start_date := p_release_date;
4517
4518 lp_sub_clev_tbl(i) := lp_sub_clev_rec;
4519 lp_sub_klev_tbl(i) := lp_klev_temp_rec;
4520 end loop;
4521
4522 -- No Covered assets associated with Fee
4523 if (l_subline_present = 'N') then
4524
4525 -- Delete Capitalized Fee line if no Covered Assets are present
4526 OKL_CONTRACT_PUB.delete_contract_line(
4527 p_api_version => p_api_version,
4528 p_init_msg_list => p_init_msg_list,
4529 x_return_status => x_return_status,
4530 x_msg_count => x_msg_count,
4531 x_msg_data => x_msg_data,
4532 p_line_id => contract_fee_rec.id
4533 );
4534
4535 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4536 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4537 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4538 RAISE OKL_API.G_EXCEPTION_ERROR;
4539 END IF;
4540
4541 -- Covered assets associated with Fee
4542 else
4543
4544 -- Set Fee line Start Date equal to Release Date
4545 lp_clev_rec.id := contract_fee_rec.id;
4546 lp_clev_rec.start_date := p_release_date;
4547
4548 -- Set the capital_amount on capitalized fee top line equal
4549 -- to the sum of capital_amount on capitalized fee sublines
4550 if (contract_fee_rec.amount <> l_sub_cap_amt) then
4551 lp_klev_rec.id := contract_fee_rec.id;
4552 lp_klev_rec.amount :=l_sub_cap_amt;
4553 lp_klev_rec.capital_amount := l_sub_cap_amt;
4554 end if;
4555
4556 -- Set Fee Top Line Start Date equal to Release Date
4557 -- and Amount equal to sum of capital_amounts
4558 OKL_CONTRACT_PUB.update_contract_line(
4559 p_api_version => p_api_version,
4560 p_init_msg_list => p_init_msg_list,
4561 x_return_status => x_return_status,
4562 x_msg_count => x_msg_count,
4563 x_msg_data => x_msg_data,
4564 p_clev_rec => lp_clev_rec,
4565 p_klev_rec => lp_klev_rec,
4566 x_clev_rec => lx_clev_rec,
4567 x_klev_rec => lx_klev_rec
4568 );
4569
4570 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4571 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4572 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4573 RAISE OKL_API.G_EXCEPTION_ERROR;
4574 END IF;
4575
4576 -- Set Covered Asset line Start Dates equal to Release Date
4577 OKL_CONTRACT_PUB.update_contract_line(
4578 p_api_version => p_api_version,
4579 p_init_msg_list => p_init_msg_list,
4580 x_return_status => x_return_status,
4581 x_msg_count => x_msg_count,
4582 x_msg_data => x_msg_data,
4583 p_clev_tbl => lp_sub_clev_tbl,
4584 p_klev_tbl => lp_sub_klev_tbl,
4585 x_clev_tbl => lx_sub_clev_tbl,
4586 x_klev_tbl => lx_sub_klev_tbl
4587 );
4588
4589 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4590 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4591 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4592 RAISE OKL_API.G_EXCEPTION_ERROR;
4593 END IF;
4594
4595 end if; --Subline Present Y/N
4596
4597 -- Fee type is not 'CAPITALIZED'
4598 else
4599
4600 l_pymt_exists := 'N';
4601 open check_pymts_csr(p_chr_id => p_chr_id
4602 ,p_cle_id => contract_fee_rec.id);
4603 fetch check_pymts_csr into l_pymt_exists,l_rgp_id;
4604 close check_pymts_csr;
4605
4606 if ( l_pymt_exists = 'N') then
4607 -- Start change for rollover by fmiao on 12-OCT-2004--
4608 OPEN fee_type_csr (contract_fee_rec.id);
4609 FETCH fee_type_csr INTO l_fee_type;
4610 CLOSE fee_type_csr;
4611
4612 if (l_fee_type <> 'ROLLOVER') then
4613
4614 -- Delete Fee line if no Payments or Expenses are present
4615 OKL_CONTRACT_PUB.delete_contract_line(
4616 p_api_version => p_api_version,
4617 p_init_msg_list => p_init_msg_list,
4618 x_return_status => x_return_status,
4619 x_msg_count => x_msg_count,
4620 x_msg_data => x_msg_data,
4621 p_line_id => contract_fee_rec.id
4622 );
4623
4624 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4625 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4626 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4627 RAISE OKL_API.G_EXCEPTION_ERROR;
4628 END IF;
4629
4630 --avsingh : payment may exist at the sub-line level
4631 elsif (l_fee_type = 'ROLLOVER') then
4632
4633 l_subline_present := 'N';
4634 l_rlvr_sub_total := 0;
4635
4636 i := 0;
4637 for fee_subline_rec in fee_subline_csr
4638 (p_cle_id => contract_fee_rec.id,
4639 p_chr_id => p_chr_id)
4640 loop
4641 i := i + 1;
4642 l_subline_present := 'Y';
4643
4644 l_principal_bal := 0;
4645 l_accumulated_int := 0;
4646 okl_stream_generator_pvt.get_sched_principal_bal(
4647 p_api_version => p_api_version,
4648 p_init_msg_list => p_init_msg_list,
4649 p_khr_id => p_orig_chr_id,
4650 p_kle_id => fee_subline_rec.orig_system_id1,
4651 p_date => p_release_date,
4652 x_principal_balance => l_principal_bal,
4653 x_accumulated_int => l_accumulated_int,
4654 x_return_status => x_return_status,
4655 x_msg_count => x_msg_count,
4656 x_msg_data => x_msg_data);
4657
4658
4659 lp_sub_clev_rec.id := fee_subline_rec.id;
4660 lp_sub_clev_rec.start_date := p_release_date;
4661
4662 lp_sub_klev_rec.id := fee_subline_rec.id;
4663 lp_sub_klev_rec.amount :=l_principal_bal + l_accumulated_int;
4664
4665 --Bug# 4080102 - Round Rollover Fee subline amount
4666 lp_sub_klev_rec.amount :=
4667 OKL_ACCOUNTING_UTIL.cross_currency_round_amount
4668 (p_amount => lp_sub_klev_rec.amount,
4669 p_currency_code => l_currency_code);
4670
4671 l_rlvr_sub_total := l_rlvr_sub_total + lp_sub_klev_rec.amount;
4672
4673 lp_sub_clev_tbl(i) := lp_sub_clev_rec;
4674 lp_sub_klev_tbl(i) := lp_sub_klev_rec;
4675 end loop;
4676
4677 l_new_fee_amount :=
4678 OKL_ACCOUNTING_UTIL.cross_currency_round_amount
4679 (p_amount => l_rlvr_sub_total,
4680 p_currency_code => l_currency_code);
4681
4682 if (l_subline_present = 'Y') then
4683 -- Set Covered Asset line Start Dates equal to Release Date
4684 -- and Amount proportionate to the new fee amount
4685 OKL_CONTRACT_PUB.update_contract_line(
4686 p_api_version => p_api_version,
4687 p_init_msg_list => p_init_msg_list,
4688 x_return_status => x_return_status,
4689 x_msg_count => x_msg_count,
4690 x_msg_data => x_msg_data,
4691 p_clev_tbl => lp_sub_clev_tbl,
4692 p_klev_tbl => lp_sub_klev_tbl,
4693 x_clev_tbl => lx_sub_clev_tbl,
4694 x_klev_tbl => lx_sub_klev_tbl
4695 );
4696
4697 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4698 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4699 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4700 RAISE OKL_API.G_EXCEPTION_ERROR;
4701 END IF;
4702
4703 lp_clev_rec.id := contract_fee_rec.id;
4704 lp_clev_rec.start_date := p_release_date;
4705 lp_klev_rec.id := contract_fee_rec.id;
4706 lp_klev_rec.amount := l_new_fee_amount;
4707 lp_klev_rec.initial_direct_cost := l_new_idc_amount;
4708
4709 -- Set Fee Top Line Start Date equal to Release Date
4710 -- Retain Fee Amount equal to the amount from original contract
4711 -- Set IDC to Null, as no Expenses present
4712 OKL_CONTRACT_PUB.update_contract_line(
4713 p_api_version => p_api_version,
4714 p_init_msg_list => p_init_msg_list,
4715 x_return_status => x_return_status,
4716 x_msg_count => x_msg_count,
4717 x_msg_data => x_msg_data,
4718 p_clev_rec => lp_clev_rec,
4719 p_klev_rec => lp_klev_rec,
4720 x_clev_rec => lx_clev_rec,
4721 x_klev_rec => lx_klev_rec
4722 );
4723
4724 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4725 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4726 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4727 RAISE OKL_API.G_EXCEPTION_ERROR;
4728 END IF;
4729
4730 else --sublines not found
4731
4732 -- Delete Fee line if no Payments or Expenses are present
4733 OKL_CONTRACT_PUB.delete_contract_line(
4734 p_api_version => p_api_version,
4735 p_init_msg_list => p_init_msg_list,
4736 x_return_status => x_return_status,
4737 x_msg_count => x_msg_count,
4738 x_msg_data => x_msg_data,
4739 p_line_id => contract_fee_rec.id
4740 );
4741
4742 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4743 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4744 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4745 RAISE OKL_API.G_EXCEPTION_ERROR;
4746 END IF;
4747
4748 end if; -- Subline exists
4749 --avsingh : payment may exist at sub-line level
4750 end if;
4751 -- End change for rollover by fmiao on 12-OCT-2004--
4752
4753 elsif (l_pymt_exists = 'Y') then
4754
4755 -- Retain Fee Amount equal to the amount from original contract
4756 -- Set IDC to Null, as no Expenses present
4757
4758 l_new_fee_amount := contract_fee_rec.amount;
4759 l_new_idc_amount := null;
4760
4761 -- For Income and Passthrough Fee, set the fee line amount
4762 -- equal to the total of the payments
4763 if (contract_fee_rec.fee_type IN ('PASSTHROUGH', 'INCOME')) then
4764
4765 l_pymt_amount := 0;
4766 for pymt_details_rec in pymt_details_csr(p_chr_id => p_chr_id,
4767 p_rgp_id => l_rgp_id,
4768 p_rul_cat => 'LASLL')
4769 loop
4770 if (pymt_details_rec.rule_information8 IS NOT NULL) THEN
4771 l_pymt_amount := l_pymt_amount +
4772 TO_NUMBER(pymt_details_rec.rule_information8);
4773 else
4774 l_pymt_amount := l_pymt_amount +
4775 (TO_NUMBER(NVL(pymt_details_rec.rule_information6,'0')) *
4776 TO_NUMBER(NVL(pymt_details_rec.rule_information3,'1')) );
4777 end if;
4778 end loop;
4779
4780 l_new_fee_amount := l_pymt_amount;
4781
4782 -- For Rollover Fee, if Payment Incomplete then set Fee Amount
4783 -- equal to Closing Principal Balance prior to the Re-lease Date and
4784 -- update covered asset amount for each covered asset
4785 -- proportionate to the new Fee Amount
4786
4787 elsif (contract_fee_rec.fee_type = 'ROLLOVER') then
4788
4789 -- Fetch Primary Stream Type Id for Fee Payment
4790 pymt_details_rec := null;
4791 open pymt_details_csr(p_chr_id => p_chr_id,
4792 p_rgp_id => l_rgp_id,
4793 p_rul_cat => 'LASLH');
4794 fetch pymt_details_csr into pymt_details_rec;
4795 close pymt_details_csr;
4796
4797 l_principal_bal := 0;
4798 l_accumulated_int := 0;
4799 -- Start change for accrued interest by fmiao 09-NOV-04--
4800 okl_stream_generator_pvt.get_sched_principal_bal(
4801 p_api_version => p_api_version,
4802 p_init_msg_list => p_init_msg_list,
4803 p_khr_id => p_orig_chr_id,
4804 p_kle_id => contract_fee_rec.orig_system_id1,
4805 p_date => p_release_date,
4806 x_principal_balance => l_principal_bal,
4807 x_accumulated_int => l_accumulated_int,
4808 x_return_status => x_return_status,
4809 x_msg_count => x_msg_count,
4810 x_msg_data => x_msg_data);
4811
4812 -- End change for accrued interest by fmiao 09-NOV-04--
4813
4814 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4815 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4816 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4817 RAISE OKL_API.G_EXCEPTION_ERROR;
4818 END IF;
4819
4820 l_new_fee_amount := l_principal_bal + l_accumulated_int;
4821
4822 l_subline_present := 'N';
4823 l_rlvr_sub_total := 0;
4824
4825 i := 0;
4826 for fee_subline_rec in fee_subline_csr
4827 (p_cle_id => contract_fee_rec.id,
4828 p_chr_id => p_chr_id)
4829 loop
4830 i := i + 1;
4831 l_subline_present := 'Y';
4832 l_rlvr_sub_total := l_rlvr_sub_total + fee_subline_rec.amount;
4833
4834 lp_sub_clev_rec.id := fee_subline_rec.id;
4835 lp_sub_clev_rec.start_date := p_release_date;
4836
4837 lp_sub_klev_rec.id := fee_subline_rec.id;
4838 lp_sub_klev_rec.amount := fee_subline_rec.amount;
4839
4840 lp_sub_clev_tbl(i) := lp_sub_clev_rec;
4841 lp_sub_klev_tbl(i) := lp_sub_klev_rec;
4842 end loop;
4843
4844 -- If not all covered assets have moved over then adjust
4845 -- New Fee amount proportionate to the Covered assets
4846 -- moved over
4847 if (contract_fee_rec.amount <> l_rlvr_sub_total) then
4848 l_new_fee_amount := l_new_fee_amount * (l_rlvr_sub_total/contract_fee_rec.amount);
4849
4850 l_new_fee_amount :=
4851 OKL_ACCOUNTING_UTIL.cross_currency_round_amount
4852 (p_amount => l_new_fee_amount,
4853 p_currency_code => l_currency_code);
4854 end if;
4855
4856 -- Set Sub-line amount proportionate to the new fee amount
4857 l_sum := 0;
4858 for i in 1..lp_sub_klev_tbl.COUNT loop
4859
4860 if (i = lp_sub_klev_tbl.COUNT) then
4861 lp_sub_klev_tbl(i).amount := l_new_fee_amount - l_sum;
4862
4863 else
4864
4865 l_rlvr_sub_amt := l_new_fee_amount *
4866 lp_sub_klev_tbl(i).amount / l_rlvr_sub_total;
4867
4868 lp_sub_klev_tbl(i).amount :=
4869 OKL_ACCOUNTING_UTIL.cross_currency_round_amount
4870 (p_amount => l_rlvr_sub_amt,
4871 p_currency_code => l_currency_code);
4872
4873 l_sum := l_sum + lp_sub_klev_tbl(i).amount;
4874
4875 end if;
4876 end loop;
4877
4878 if (l_subline_present = 'Y') then
4879 -- Set Covered Asset line Start Dates equal to Release Date
4880 -- and Amount proportionate to the new fee amount
4881 OKL_CONTRACT_PUB.update_contract_line(
4882 p_api_version => p_api_version,
4883 p_init_msg_list => p_init_msg_list,
4884 x_return_status => x_return_status,
4885 x_msg_count => x_msg_count,
4886 x_msg_data => x_msg_data,
4887 p_clev_tbl => lp_sub_clev_tbl,
4888 p_klev_tbl => lp_sub_klev_tbl,
4889 x_clev_tbl => lx_sub_clev_tbl,
4890 x_klev_tbl => lx_sub_klev_tbl
4891 );
4892
4893 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4894 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4895 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4896 RAISE OKL_API.G_EXCEPTION_ERROR;
4897 END IF;
4898 end if; -- Subline exists
4899 end if; -- Fee Type - Income / Passthrough /Rollover
4900
4901 lp_clev_rec.id := contract_fee_rec.id;
4902 lp_clev_rec.start_date := p_release_date;
4903
4904 lp_klev_rec.id := contract_fee_rec.id;
4905 lp_klev_rec.amount := l_new_fee_amount;
4906 lp_klev_rec.initial_direct_cost := l_new_idc_amount;
4907
4908 -- Set Fee Top Line Start Date equal to Release Date
4909 -- Retain Fee Amount equal to the amount from original contract
4910 -- Set IDC to Null, as no Expenses present
4911 OKL_CONTRACT_PUB.update_contract_line(
4912 p_api_version => p_api_version,
4913 p_init_msg_list => p_init_msg_list,
4914 x_return_status => x_return_status,
4915 x_msg_count => x_msg_count,
4916 x_msg_data => x_msg_data,
4917 p_clev_rec => lp_clev_rec,
4918 p_klev_rec => lp_klev_rec,
4919 x_clev_rec => lx_clev_rec,
4920 x_klev_rec => lx_klev_rec
4921 );
4922
4923 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4924 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4925 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4926 RAISE OKL_API.G_EXCEPTION_ERROR;
4927 END IF;
4928
4929 end if; --Payment exists Y/N
4930 end if; --Capitalized Fee Y/N
4931
4932 -- Expense associated with Fee
4933 else
4934 close fee_expense_csr;
4935
4936 l_periods_bef_release :=
4937 CEIL(CEIL(MONTHS_BETWEEN(p_release_date,contract_fee_rec.start_date))/fee_expense_rec.factor);
4938
4939 l_new_no_of_periods := fee_expense_rec.periods - l_periods_bef_release;
4940
4941 if (l_new_no_of_periods > 0) then
4942
4943 l_new_fee_amount := fee_expense_rec.amount * l_new_no_of_periods;
4944
4945 -- New IDC Expense is equal to
4946 -- Total of Unpaid Recurring Expenses * (Original IDC / Original Fee Amount)
4947 -- Less Total Unamortized IDC Exp
4948
4949 l_new_idc_amount := null;
4950 if (contract_fee_rec.initial_direct_cost IS NOT NULL) then
4951
4952 l_new_idc_amount := l_new_fee_amount *
4953 (contract_fee_rec.initial_direct_cost/contract_fee_rec.amount);
4954
4955 /* Old Formula - Uncomment if required
4956 -- Fetch Primary Stream Type Id for Fee Expense
4957 open fee_item_csr(p_chr_id => p_chr_id,
4958 p_cle_id => contract_fee_rec.id);
4959 fetch fee_item_csr into fee_item_rec;
4960 close fee_item_csr;
4961
4962 -- Fetch Stream information from Original Contract
4963 l_idc_sty_id := null;
4964 OKL_STREAMS_UTIL.get_dependent_stream_type
4965 (p_khr_id => p_orig_chr_id,
4966 p_primary_sty_id => fee_item_rec.object1_id1,
4967 p_dependent_sty_purpose => 'AMORTIZED_FEE_EXPENSE',
4968 x_return_status => x_return_status,
4969 x_dependent_sty_id => l_idc_sty_id);
4970
4971 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4972 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4973 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4974 RAISE OKL_API.G_EXCEPTION_ERROR;
4975 END IF;
4976
4977 if (l_idc_sty_id IS NOT NULL) then
4978
4979 open streams_csr(p_chr_id => p_orig_chr_id,
4980 p_cle_id => contract_fee_rec.orig_system_id1,
4981 p_sty_id => l_idc_sty_id);
4982 fetch streams_csr into streams_rec;
4983 close streams_csr;
4984
4985 if (streams_rec.id IS NOT NULL) then
4986
4987 open unamort_idc_exp_csr(p_stm_id => streams_rec.id,
4988 p_release_date => p_release_date);
4989 fetch unamort_idc_exp_csr into unamort_idc_exp_rec;
4990 close unamort_idc_exp_csr;
4991
4992 l_new_idc_amount :=
4993 (l_new_fee_amount * (contract_fee_rec.initial_direct_cost/contract_fee_rec.amount))
4994 - NVL(unamort_idc_exp_rec.amount,0);
4995
4996 end if; --IDC Stream Id is not null
4997 end if; -- IDC Stream Type Id is not null
4998 */
4999
5000 end if; -- IDC is not null
5001
5002 l_rulv_rec.id := fee_expense_rec.rul_lafexp_id;
5003 l_rulv_rec.rule_information1 := TO_CHAR(l_new_no_of_periods);
5004
5005 -- Set Expense periods equal to New No. of periods
5006 OKL_RULE_PUB.update_rule(
5007 p_api_version => p_api_version,
5008 p_init_msg_list => p_init_msg_list,
5009 x_return_status => x_return_status,
5010 x_msg_count => x_msg_count,
5011 x_msg_data => x_msg_data,
5012 p_rulv_rec => l_rulv_rec,
5013 x_rulv_rec => lx_rulv_rec);
5014
5015 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5016 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5017 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5018 RAISE OKL_API.G_EXCEPTION_ERROR;
5019 END IF;
5020
5021 lp_clev_rec.id := contract_fee_rec.id;
5022 lp_clev_rec.start_date := p_release_date;
5023
5024 lp_klev_rec.id := contract_fee_rec.id;
5025 lp_klev_rec.amount := l_new_fee_amount;
5026 lp_klev_rec.initial_direct_cost := l_new_idc_amount;
5027
5028 -- For Misellaneous Fee, if Expense Incomplete and Payment Complete
5029 -- then change Fee Type to EXPENSE
5030 if (contract_fee_rec.fee_type = 'MISCELLANEOUS') then
5031
5032 l_pymt_exists := 'N';
5033 open check_pymts_csr(p_chr_id => p_chr_id
5034 ,p_cle_id => contract_fee_rec.id);
5035 fetch check_pymts_csr into l_pymt_exists, l_rgp_id;
5036 close check_pymts_csr;
5037
5038 if (l_pymt_exists = 'N') then
5039 lp_klev_rec.fee_type := 'EXPENSE';
5040 end if; -- Payment does not exist
5041 end if; -- Miscellaneous Fee
5042
5043 -- Set Fee Top Line Start Date equal to Release Date
5044 -- and Amount equal to Expense per period Amount * New No. of periods
5045 OKL_CONTRACT_PUB.update_contract_line(
5046 p_api_version => p_api_version,
5047 p_init_msg_list => p_init_msg_list,
5048 x_return_status => x_return_status,
5049 x_msg_count => x_msg_count,
5050 x_msg_data => x_msg_data,
5051 p_clev_rec => lp_clev_rec,
5052 p_klev_rec => lp_klev_rec,
5053 x_clev_rec => lx_clev_rec,
5054 x_klev_rec => lx_klev_rec
5055 );
5056
5057 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5058 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5059 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5060 RAISE OKL_API.G_EXCEPTION_ERROR;
5061 END IF;
5062
5063 -- No. of periods <= 0
5064 else
5065
5066 l_pymt_exists := 'N';
5067 open check_pymts_csr(p_chr_id => p_chr_id
5068 ,p_cle_id => contract_fee_rec.id);
5069 fetch check_pymts_csr into l_pymt_exists, l_rgp_id;
5070 close check_pymts_csr;
5071
5072 if ( l_pymt_exists = 'N') then
5073
5074 -- Delete Fee line if Expenses are complete
5075 -- and no Payments present
5076 OKL_CONTRACT_PUB.delete_contract_line(
5077 p_api_version => p_api_version,
5078 p_init_msg_list => p_init_msg_list,
5079 x_return_status => x_return_status,
5080 x_msg_count => x_msg_count,
5081 x_msg_data => x_msg_data,
5082 p_line_id => contract_fee_rec.id
5083 );
5084
5085 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5086 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5087 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5088 RAISE OKL_API.G_EXCEPTION_ERROR;
5089 END IF;
5090
5091 elsif (l_pymt_exists = 'Y') then
5092
5093 -- Retain Fee Amount equal to the amount from original contract
5094 -- Set IDC to Null, as no Expenses present
5095 -- Delete Expense Rules as No. of periods <= 0
5096
5097 l_new_fee_amount := contract_fee_rec.amount;
5098 l_new_idc_amount := null;
5099
5100 lp_clev_rec.id := contract_fee_rec.id;
5101 lp_clev_rec.start_date := p_release_date;
5102
5103 lp_klev_rec.id := contract_fee_rec.id;
5104 lp_klev_rec.amount := l_new_fee_amount;
5105 lp_klev_rec.initial_direct_cost := l_new_idc_amount;
5106
5107 -- For Misellaneous Fee, if Expense Complete and Payment Incomplete
5108 -- then Change Fee Type to INCOME
5109 -- Set Fee Line Amount equal to total of the Payments
5110 -- Set Stream Type on the Fee to the Stream associated with Payments
5111 if (contract_fee_rec.fee_type = 'MISCELLANEOUS') then
5112
5113 lp_klev_rec.fee_type := 'INCOME';
5114
5115 -- Update Fee line Amount to total of the Payments
5116 l_pymt_amount := 0;
5117 for pymt_details_rec in pymt_details_csr(p_chr_id => p_chr_id,
5118 p_rgp_id => l_rgp_id,
5119 p_rul_cat => 'LASLL')
5120 loop
5121 if (pymt_details_rec.rule_information8 IS NOT NULL) THEN
5122 l_pymt_amount := l_pymt_amount +
5123 TO_NUMBER(pymt_details_rec.rule_information8);
5124 else
5125 l_pymt_amount := l_pymt_amount +
5126 (TO_NUMBER(NVL(pymt_details_rec.rule_information6,'0')) *
5127 TO_NUMBER(NVL(pymt_details_rec.rule_information3,'1')) );
5128 end if;
5129 end loop;
5130 lp_klev_rec.amount := l_pymt_amount;
5131
5132 -- Update Stream Type on the Fee to Stream associated with
5133 -- Payments
5134 pymt_details_rec := null;
5135 open pymt_details_csr(p_chr_id => p_chr_id,
5136 p_rgp_id => l_rgp_id,
5137 p_rul_cat => 'LASLH');
5138 fetch pymt_details_csr into pymt_details_rec;
5139 close pymt_details_csr;
5140
5141 if (pymt_details_rec.object1_id1 IS NOT NULL) then
5142 open fee_item_csr(p_chr_id => p_chr_id,
5143 p_cle_id => contract_fee_rec.id);
5144 fetch fee_item_csr into fee_item_rec;
5145 close fee_item_csr;
5146
5147 if (fee_item_rec.id IS NOT NULL) then
5148 lp_cimv_rec.id := fee_item_rec.id;
5149 lp_cimv_rec.object1_id1 := pymt_details_rec.object1_id1;
5150
5151 OKL_OKC_MIGRATION_PVT.update_contract_item
5152 (p_api_version => p_api_version,
5153 p_init_msg_list => p_init_msg_list,
5154 x_return_status => x_return_status,
5155 x_msg_count => x_msg_count,
5156 x_msg_data => x_msg_data,
5157 p_cimv_rec => lp_cimv_rec,
5158 x_cimv_rec => lx_cimv_rec);
5159 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5160 RAISE OKL_API.G_EXCEPTION_ERROR;
5161 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5162 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5163 END IF;
5164
5165 end if; --Fee item exists
5166 end if; -- Payment Stream Type exists
5167
5168
5169 -- For Financed Fee, if Expense Complete and Payment Incomplete
5170 -- then set Fee and Expense Amount equal to Closing Principal
5171 -- Balance prior to the Re-lease Date and
5172 -- Expense periods equal to 1
5173 elsif (contract_fee_rec.fee_type = 'FINANCED') then
5174
5175 -- Fetch Primary Stream Type Id for Fee Payment
5176 pymt_details_rec := null;
5177 open pymt_details_csr(p_chr_id => p_chr_id,
5178 p_rgp_id => l_rgp_id,
5179 p_rul_cat => 'LASLH');
5180 fetch pymt_details_csr into pymt_details_rec;
5181 close pymt_details_csr;
5182
5183 l_principal_bal := 0;
5184 l_accumulated_int := 0;
5185 -- Start change for accrued interest by fmiao 09-NOV-04--
5186 okl_stream_generator_pvt.get_sched_principal_bal(
5187 p_api_version => p_api_version,
5188 p_init_msg_list => p_init_msg_list,
5189 p_khr_id => p_orig_chr_id,
5190 p_kle_id => contract_fee_rec.orig_system_id1,
5191 p_date => p_release_date,
5192 x_principal_balance => l_principal_bal,
5193 x_accumulated_int => l_accumulated_int,
5194 x_return_status => x_return_status,
5195 x_msg_count => x_msg_count,
5196 x_msg_data => x_msg_data);
5197 -- End change for accrued interest by fmiao 09-NOV-04--
5198
5199 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5200 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5201 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5202 RAISE OKL_API.G_EXCEPTION_ERROR;
5203 END IF;
5204
5205 lp_klev_rec.amount := l_principal_bal + l_accumulated_int;
5206
5207 --Bug# 4080102 - Round Financed Fee amount
5208 lp_klev_rec.amount :=
5209 OKL_ACCOUNTING_UTIL.cross_currency_round_amount
5210 (p_amount => lp_klev_rec.amount,
5211 p_currency_code => l_currency_code);
5212
5213 l_rulv_rec.id := fee_expense_rec.rul_lafexp_id;
5214 l_rulv_rec.rule_information1 := '1';
5215 l_rulv_rec.rule_information2 := TO_CHAR(lp_klev_rec.amount);
5216
5217 -- Set Expense periods equal to 1 and
5218 -- Amount equal to Closing principal balance
5219 OKL_RULE_PUB.update_rule(
5220 p_api_version => p_api_version,
5221 p_init_msg_list => p_init_msg_list,
5222 x_return_status => x_return_status,
5223 x_msg_count => x_msg_count,
5224 x_msg_data => x_msg_data,
5225 p_rulv_rec => l_rulv_rec,
5226 x_rulv_rec => lx_rulv_rec);
5227
5228 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5229 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5230 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5231 RAISE OKL_API.G_EXCEPTION_ERROR;
5232 END IF;
5233
5234 end if; -- Fee Type - Miscellaneous / Financed
5235
5236 -- Set Fee Top Line Start Date equal to Release Date
5237 -- Retain Amount equal to the amount from original contract
5238 OKL_CONTRACT_PUB.update_contract_line(
5239 p_api_version => p_api_version,
5240 p_init_msg_list => p_init_msg_list,
5241 x_return_status => x_return_status,
5242 x_msg_count => x_msg_count,
5243 x_msg_data => x_msg_data,
5244 p_clev_rec => lp_clev_rec,
5245 p_klev_rec => lp_klev_rec,
5246 x_clev_rec => lx_clev_rec,
5247 x_klev_rec => lx_klev_rec
5248 );
5249
5250 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5251 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5252 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5253 RAISE OKL_API.G_EXCEPTION_ERROR;
5254 END IF;
5255
5256 if (contract_fee_rec.fee_type <> 'FINANCED') then
5257 -- Delete Expense Rules as No. of periods is <= 0
5258 l_rgpv_rec.id := fee_expense_rec.rgp_id; -- LAFEXP Rule Group ID
5259 OKL_RULE_PUB.delete_rule_group(
5260 p_api_version => p_api_version,
5261 p_init_msg_list => p_init_msg_list,
5262 x_return_status => x_return_status,
5263 x_msg_count => x_msg_count,
5264 x_msg_data => x_msg_data,
5265 p_rgpv_rec => l_rgpv_rec
5266 );
5267 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5268 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5269 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5270 RAISE OKL_API.G_EXCEPTION_ERROR;
5271 END IF;
5272 end if;
5273
5274 end if; --Payment exists Y/N
5275 end if; --New No. of periods > 0
5276 end if; --Expense associated with Fee
5277
5278 end if; --Fee line End Date >= Release Date
5279 end loop;
5280
5281 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
5282 x_msg_data => x_msg_data);
5283
5284 EXCEPTION
5285 when OKL_API.G_EXCEPTION_ERROR then
5286
5287 IF fee_expense_csr%ISOPEN THEN
5288 close fee_expense_csr;
5289 END IF;
5290
5291 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5292 p_api_name => l_api_name,
5293 p_pkg_name => G_PKG_NAME,
5294 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
5295 x_msg_count => x_msg_count,
5296 x_msg_data => x_msg_data,
5297 p_api_type => G_API_TYPE);
5298
5299 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5300
5301 IF fee_expense_csr%ISOPEN THEN
5302 close fee_expense_csr;
5303 END IF;
5304
5305 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5306 p_api_name => l_api_name,
5307 p_pkg_name => G_PKG_NAME,
5308 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5309 x_msg_count => x_msg_count,
5310 x_msg_data => x_msg_data,
5311 p_api_type => G_API_TYPE);
5312
5313 when OTHERS then
5314
5315 IF fee_expense_csr%ISOPEN THEN
5316 close fee_expense_csr;
5317 END IF;
5318
5319 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5320 p_api_name => l_api_name,
5321 p_pkg_name => G_PKG_NAME,
5322 p_exc_name => 'OTHERS',
5323 x_msg_count => x_msg_count,
5324 x_msg_data => x_msg_data,
5325 p_api_type => G_API_TYPE);
5326 END adjust_fee_lines;
5327
5328 -----------------------------------------------------------------------------------------------
5329 -- Start of Comments
5330 -- Rekha Pillay
5331 -- Procedure Name : Adjust_Service_Lines
5332 -- Description : Adjust Service lines on the Re-lease contract
5333 -- Business Rules :
5334 --
5335 --
5336 --
5337 --
5338 --
5339 --
5340 --
5341 -- Parameters :
5342 -- Version : 1.0
5343 -- End of Commments
5344 PROCEDURE adjust_service_lines(p_api_version IN NUMBER,
5345 p_init_msg_list IN VARCHAR2,
5346 x_return_status OUT NOCOPY VARCHAR2,
5347 x_msg_count OUT NOCOPY NUMBER,
5348 x_msg_data OUT NOCOPY VARCHAR2,
5349 p_chr_id IN NUMBER,
5350 p_orig_chr_id IN NUMBER,
5351 p_release_date IN DATE) IS
5352
5353 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5354 l_api_name CONSTANT VARCHAR2(30) := 'ADJUST_SERVICE_LINES';
5355 l_api_version CONSTANT NUMBER := 1.0;
5356
5357 CURSOR contract_service_csr
5358 (p_chr_id IN NUMBER) IS
5359 SELECT cle.id,
5360 cle.start_date,
5361 cle.end_date,
5362 kle.amount,
5363 cle.chr_id,
5364 cle.dnz_chr_id,
5365 cle.cle_id,
5366 cle.orig_system_id1,
5367 sts.ste_code
5368 FROM okc_k_lines_b cle,
5369 okl_k_lines kle,
5370 okc_line_styles_b lse,
5371 okc_statuses_b sts
5372 WHERE cle.dnz_chr_id = p_chr_id
5373 AND cle.chr_id = p_chr_id
5374 AND kle.id = cle.id
5375 AND cle.lse_id = lse.id
5376 AND lse.lty_code = 'SOLD_SERVICE'
5377 AND cle.sts_code = sts.code;
5378
5379 CURSOR orig_cle_sts_csr(p_cle_id IN NUMBER)
5380 IS
5381 SELECT sts.ste_code
5382 FROM okc_k_lines_b cle,
5383 okc_statuses_b sts
5384 WHERE cle.id = p_cle_id
5385 AND cle.sts_code = sts.code;
5386
5387 orig_cle_sts_rec orig_cle_sts_csr%ROWTYPE;
5388
5389 CURSOR service_expense_csr
5390 (p_chr_id IN NUMBER,
5391 p_cle_id IN NUMBER) IS
5392 SELECT DECODE(rul_lafreq.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12)factor,
5393 TO_NUMBER(rul_lafexp.rule_information1) periods,
5394 TO_NUMBER(rul_lafexp.rule_information2) amount,
5395 rul_lafexp.id rul_lafexp_id,
5396 rul_lafreq.id rul_lafreq_id,
5397 rgp.id rgp_id
5398 FROM okc_rules_b rul_lafexp,
5399 okc_rules_b rul_lafreq,
5400 okc_rule_groups_b rgp
5401 WHERE rgp.dnz_chr_id = p_chr_id
5402 AND rgp.cle_id = p_cle_id
5403 AND rgp.rgd_code = 'LAFEXP'
5404 AND rul_lafreq.rgp_id = rgp.id
5405 AND rul_lafreq.rule_information_category = 'LAFREQ'
5406 AND rul_lafexp.rgp_id = rgp.id
5407 AND rul_lafexp.rule_information_category = 'LAFEXP';
5408
5409 service_expense_rec service_expense_csr%ROWTYPE;
5410
5411 CURSOR service_subline_csr (p_chr_id IN NUMBER,
5412 p_cle_id IN NUMBER) IS
5413 SELECT cle.id,
5414 NVL(kle.capital_amount,0) capital_amount,
5415 cle.chr_id,
5416 cle.dnz_chr_id,
5417 cle.cle_id
5418 FROM okc_k_lines_b cle,
5419 okl_k_lines kle
5420 WHERE cle.cle_id = p_cle_id
5421 AND cle.dnz_chr_id = p_chr_id
5422 AND cle.id = kle.id;
5423
5424 CURSOR curr_hdr_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
5425 SELECT currency_code
5426 FROM okc_k_headers_b
5427 WHERE id = p_chr_id;
5428
5429 l_currency_code OKC_K_LINES_B.CURRENCY_CODE%TYPE;
5430
5431 CURSOR check_pymts_csr(p_chr_id IN NUMBER,
5432 p_cle_id IN NUMBER) IS
5433 SELECT 'Y' pymt_exists
5434 FROM okc_rule_groups_b rgp
5435 WHERE rgp.cle_id = p_cle_id
5436 AND rgp.dnz_chr_id = p_chr_id
5437 AND rgp.rgd_code = 'LALEVL';
5438
5439 l_pymt_exists VARCHAR2(30);
5440
5441 l_rulv_rec OKL_RULE_PUB.rulv_rec_type;
5442 lx_rulv_rec OKL_RULE_PUB.rulv_rec_type;
5443
5444 l_rgpv_rec OKL_RULE_PUB.rgpv_rec_type;
5445
5446 l_periods_bef_release NUMBER;
5447 l_orig_no_of_periods NUMBER;
5448 l_new_no_of_periods NUMBER;
5449 l_new_service_amount NUMBER;
5450 l_per_period_amount NUMBER;
5451
5452 lp_klev_rec okl_kle_pvt.klev_rec_type;
5453 lp_clev_rec okl_okc_migration_pvt.clev_rec_type;
5454
5455 lx_klev_rec okl_kle_pvt.klev_rec_type;
5456 lx_clev_rec okl_okc_migration_pvt.clev_rec_type;
5457
5458 lp_sub_clev_tbl okl_okc_migration_pvt.clev_tbl_type;
5459 lx_sub_clev_tbl okl_okc_migration_pvt.clev_tbl_type;
5460 lp_sub_clev_rec okl_okc_migration_pvt.clev_rec_type;
5461
5462 lp_sub_klev_tbl okl_kle_pvt.klev_tbl_type;
5463 lx_sub_klev_tbl okl_kle_pvt.klev_tbl_type;
5464 lp_sub_klev_rec okl_kle_pvt.klev_rec_type;
5465
5466 lp_clev_temp_tbl okl_okc_migration_pvt.clev_tbl_type;
5467 lp_clev_temp_rec okl_okc_migration_pvt.clev_rec_type;
5468 lp_klev_temp_tbl okl_kle_pvt.klev_tbl_type;
5469 lp_klev_temp_rec okl_kle_pvt.klev_rec_type;
5470 l_rulv_temp_rec okl_rule_pub.rulv_rec_type;
5471 l_rgpv_temp_rec okl_rule_pub.rgpv_rec_type;
5472
5473 l_subline_present VARCHAR2(1);
5474 l_sub_cap_amt NUMBER;
5475 l_capital_amount NUMBER;
5476 l_sum NUMBER;
5477 i NUMBER;
5478
5479 BEGIN
5480 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
5481 -- Call start_activity to create savepoint, check compatibility
5482 -- and initialize message list
5483 l_return_status := Okl_Api.START_ACTIVITY(
5484 p_api_name => l_api_name,
5485 p_pkg_name => g_pkg_name,
5486 p_init_msg_list => p_init_msg_list,
5487 l_api_version => l_api_version,
5488 p_api_version => p_api_version,
5489 p_api_type => '_PVT',
5490 x_return_status => x_return_status);
5491 -- Check if activity started successfully
5492 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
5493 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
5494 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
5495 RAISE Okl_Api.G_EXCEPTION_ERROR;
5496 END IF;
5497
5498 l_currency_code := '?';
5499 open curr_hdr_csr (p_chr_id);
5500 fetch curr_hdr_csr into l_currency_code;
5501 close curr_hdr_csr;
5502
5503 if (l_currency_code = '?') then
5504
5505 OKL_API.set_message(p_app_name => G_APP_NAME,
5506 p_msg_name => G_REQUIRED_VALUE,
5507 p_token1 => G_COL_NAME_TOKEN,
5508 p_token1_value => 'Currency Code');
5509 RAISE OKL_API.G_EXCEPTION_ERROR;
5510 end if;
5511
5512 for contract_service_rec in contract_service_csr
5513 (p_chr_id => p_chr_id) loop
5514
5515 l_rulv_rec := l_rulv_temp_rec;
5516 l_rgpv_rec := l_rgpv_temp_rec;
5517 lp_clev_rec := lp_clev_temp_rec;
5518 lp_klev_rec := lp_klev_temp_rec;
5519 lp_sub_clev_rec := lp_clev_temp_rec;
5520 lp_sub_clev_tbl := lp_clev_temp_tbl;
5521 lp_sub_klev_rec := lp_klev_temp_rec;
5522 lp_sub_klev_tbl := lp_klev_temp_tbl;
5523
5524 -- Delete Service Lines where End Date is earlier than Re-lease date
5525 -- or Line status is not Active
5526
5527 -- Fetch Status of the Line in original contract
5528 open orig_cle_sts_csr(p_cle_id => contract_service_rec.orig_system_id1);
5529 fetch orig_cle_sts_csr into orig_cle_sts_rec;
5530 close orig_cle_sts_csr;
5531
5532 if (contract_service_rec.end_date < p_release_date) or
5533 (contract_service_rec.ste_code IN ('TERMINATED','EXPIRED','CANCELLED')) or
5534 (orig_cle_sts_rec.ste_code IN ('TERMINATED', 'EXPIRED', 'CANCELLED')) then
5535
5536 OKL_CONTRACT_PUB.delete_contract_line(
5537 p_api_version => p_api_version,
5538 p_init_msg_list => p_init_msg_list,
5539 x_return_status => x_return_status,
5540 x_msg_count => x_msg_count,
5541 x_msg_data => x_msg_data,
5542 p_line_id => contract_service_rec.id
5543 );
5544
5545 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5546 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5547 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5548 RAISE OKL_API.G_EXCEPTION_ERROR;
5549 END IF;
5550
5551 -- If Service Line Start Date is greater than or equal to Re-lease date
5552 -- Update Service Top line Amount equal to sum of covered assets
5553 -- if its not equal
5554 -- Update Expense Per Period amount as New Service Amount / Periods
5555 elsif (contract_service_rec.start_date >= p_release_date) then
5556
5557 l_subline_present := 'N';
5558
5559 i := 0;
5560 l_sub_cap_amt := 0;
5561 for service_subline_rec in service_subline_csr
5562 (p_chr_id => p_chr_id,
5563 p_cle_id => contract_service_rec.id)
5564 loop
5565 i := i + 1;
5566 l_subline_present := 'Y';
5567 l_sub_cap_amt := l_sub_cap_amt + service_subline_rec.capital_amount;
5568 end loop;
5569
5570 -- Covered assets associated with Service
5571 if ((l_subline_present = 'Y') and (contract_service_rec.amount <> l_sub_cap_amt)) then
5572
5573 l_new_service_amount := l_sub_cap_amt;
5574
5575 open service_expense_csr(p_chr_id => p_chr_id,
5576 p_cle_id => contract_service_rec.id);
5577 fetch service_expense_csr into service_expense_rec;
5578
5579 -- Expense associated with Service
5580 if service_expense_csr%FOUND THEN
5581 close service_expense_csr;
5582
5583 if (service_expense_rec.periods > 0) then
5584 l_per_period_amount := l_new_service_amount / service_expense_rec.periods;
5585
5586 l_per_period_amount :=
5587 OKL_ACCOUNTING_UTIL.cross_currency_round_amount
5588 (p_amount => l_per_period_amount,
5589 p_currency_code => l_currency_code);
5590
5591 l_rulv_rec.id := service_expense_rec.rul_lafexp_id;
5592 l_rulv_rec.rule_information2 := TO_CHAR(l_per_period_amount);
5593
5594 -- Set Per period Amount equal to Rounded value of
5595 -- (Sum of Covered Asset Capital Amounts / No. of periods)
5596 OKL_RULE_PUB.update_rule(
5597 p_api_version => p_api_version,
5598 p_init_msg_list => p_init_msg_list,
5599 x_return_status => x_return_status,
5600 x_msg_count => x_msg_count,
5601 x_msg_data => x_msg_data,
5602 p_rulv_rec => l_rulv_rec,
5603 x_rulv_rec => lx_rulv_rec);
5604
5605 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5606 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5607 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5608 RAISE OKL_API.G_EXCEPTION_ERROR;
5609 END IF;
5610 end if; --Periods > 0
5611
5612 -- No Expenses associated with service
5613 else
5614 close service_expense_csr;
5615 end if;
5616
5617 lp_clev_rec.id := contract_service_rec.id;
5618
5619 lp_klev_rec.id := contract_service_rec.id;
5620 lp_klev_rec.amount := l_new_service_amount;
5621
5622 -- Set Service Top Line Amount equal to sum of capital_amounts
5623 OKL_CONTRACT_PUB.update_contract_line(
5624 p_api_version => p_api_version,
5625 p_init_msg_list => p_init_msg_list,
5626 x_return_status => x_return_status,
5627 x_msg_count => x_msg_count,
5628 x_msg_data => x_msg_data,
5629 p_clev_rec => lp_clev_rec,
5630 p_klev_rec => lp_klev_rec,
5631 x_clev_rec => lx_clev_rec,
5632 x_klev_rec => lx_klev_rec
5633 );
5634
5635 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5636 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5637 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5638 RAISE OKL_API.G_EXCEPTION_ERROR;
5639 END IF;
5640
5641 end if; --Subline present = 'Y'
5642
5643 -- Update Service Line Start Date and Amount where End Date is greater than
5644 -- or equal to Re-lease date and Start Date is less than Re-lease date
5645 elsif (contract_service_rec.start_date < p_release_date) then
5646
5647 l_subline_present := 'N';
5648
5649 i := 0;
5650 l_sub_cap_amt := 0;
5651 for service_subline_rec in service_subline_csr
5652 (p_chr_id => p_chr_id,
5653 p_cle_id => contract_service_rec.id)
5654 loop
5655 i := i + 1;
5656 l_subline_present := 'Y';
5657 l_sub_cap_amt := l_sub_cap_amt + service_subline_rec.capital_amount;
5658
5659 lp_sub_clev_rec.id := service_subline_rec.id;
5660 lp_sub_clev_rec.start_date := p_release_date;
5661
5662 lp_sub_klev_rec.id := service_subline_rec.id;
5663 lp_sub_klev_rec.capital_amount := service_subline_rec.capital_amount;
5664
5665 lp_sub_clev_tbl(i) := lp_sub_clev_rec;
5666 lp_sub_klev_tbl(i) := lp_sub_klev_rec;
5667 end loop;
5668
5669 -- Covered assets associated with Service
5670 if (l_subline_present = 'Y') then
5671
5672 open service_expense_csr(p_chr_id => p_chr_id,
5673 p_cle_id => contract_service_rec.id);
5674 fetch service_expense_csr into service_expense_rec;
5675
5676 -- Expense associated with Service
5677 if service_expense_csr%FOUND THEN
5678 close service_expense_csr;
5679
5680 l_periods_bef_release :=
5681 CEIL(CEIL(MONTHS_BETWEEN(p_release_date,contract_service_rec.start_date))/service_expense_rec.factor);
5682 l_new_no_of_periods := service_expense_rec.periods - l_periods_bef_release;
5683
5684 if (l_new_no_of_periods > 0) then
5685
5686 l_per_period_amount := service_expense_rec.amount * l_sub_cap_amt / contract_service_rec.amount;
5687
5688 l_per_period_amount :=
5689 OKL_ACCOUNTING_UTIL.cross_currency_round_amount
5690 (p_amount => l_per_period_amount,
5691 p_currency_code => l_currency_code);
5692
5693 l_new_service_amount := l_per_period_amount * l_new_no_of_periods;
5694
5695 l_sum := 0;
5696 for i in 1..lp_sub_klev_tbl.COUNT loop
5697
5698 if (i = lp_sub_klev_tbl.COUNT) then
5699 lp_sub_klev_tbl(i).capital_amount := l_new_service_amount - l_sum;
5700
5701 else
5702
5703 l_capital_amount := lp_sub_klev_tbl(i).capital_amount *
5704 l_new_no_of_periods / service_expense_rec.periods;
5705
5706 lp_sub_klev_tbl(i).capital_amount :=
5707 OKL_ACCOUNTING_UTIL.cross_currency_round_amount
5708 (p_amount => l_capital_amount,
5709 p_currency_code => l_currency_code);
5710
5711 l_sum := l_sum + lp_sub_klev_tbl(i).capital_amount;
5712
5713 end if;
5714 end loop;
5715
5716 l_rulv_rec.id := service_expense_rec.rul_lafexp_id;
5717 l_rulv_rec.rule_information1 := TO_CHAR(l_new_no_of_periods);
5718 l_rulv_rec.rule_information2 := TO_CHAR(l_per_period_amount);
5719
5720 -- Set Expense periods equal to New No. of periods and
5721 -- per period Amount equal to Rounded value of
5722 -- (Sum of Covered Asset Capital Amounts / New No. of periods)
5723 OKL_RULE_PUB.update_rule(
5724 p_api_version => p_api_version,
5725 p_init_msg_list => p_init_msg_list,
5726 x_return_status => x_return_status,
5727 x_msg_count => x_msg_count,
5728 x_msg_data => x_msg_data,
5729 p_rulv_rec => l_rulv_rec,
5730 x_rulv_rec => lx_rulv_rec);
5731
5732 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5733 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5734 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5735 RAISE OKL_API.G_EXCEPTION_ERROR;
5736 END IF;
5737
5738 --New No. of periods <= 0
5739 else
5740
5741 l_new_service_amount := l_sub_cap_amt;
5742
5743 -- Delete Expense Rules as No. of periods is <= 0
5744 l_rgpv_rec.id := service_expense_rec.rgp_id; -- LAFEXP Rule Group ID
5745 OKL_RULE_PUB.delete_rule_group(
5746 p_api_version => p_api_version,
5747 p_init_msg_list => p_init_msg_list,
5748 x_return_status => x_return_status,
5749 x_msg_count => x_msg_count,
5750 x_msg_data => x_msg_data,
5751 p_rgpv_rec => l_rgpv_rec
5752 );
5753 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5754 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5755 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5756 RAISE OKL_API.G_EXCEPTION_ERROR;
5757 END IF;
5758 end if;
5759
5760 -- No Expense associated with Service
5761 else
5762
5763 l_new_service_amount := l_sub_cap_amt;
5764 close service_expense_csr;
5765 end if;
5766
5767 -- Set Service line Start Date equal to Release Date
5768 lp_clev_rec.id := contract_service_rec.id;
5769 lp_clev_rec.start_date := p_release_date;
5770
5771 lp_klev_rec.id := contract_service_rec.id;
5772 lp_klev_rec.amount := l_new_service_amount;
5773
5774 -- Set Service Top Line Start Date equal to Release Date
5775 -- and Amount equal to sum of capital_amounts
5776 OKL_CONTRACT_PUB.update_contract_line(
5777 p_api_version => p_api_version,
5778 p_init_msg_list => p_init_msg_list,
5779 x_return_status => x_return_status,
5780 x_msg_count => x_msg_count,
5781 x_msg_data => x_msg_data,
5782 p_clev_rec => lp_clev_rec,
5783 p_klev_rec => lp_klev_rec,
5784 x_clev_rec => lx_clev_rec,
5785 x_klev_rec => lx_klev_rec
5786 );
5787
5788 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5789 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5790 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5791 RAISE OKL_API.G_EXCEPTION_ERROR;
5792 END IF;
5793
5794 -- Set Covered Asset line Start Dates equal to Release Date
5795 OKL_CONTRACT_PUB.update_contract_line(
5796 p_api_version => p_api_version,
5797 p_init_msg_list => p_init_msg_list,
5798 x_return_status => x_return_status,
5799 x_msg_count => x_msg_count,
5800 x_msg_data => x_msg_data,
5801 p_clev_tbl => lp_sub_clev_tbl,
5802 p_klev_tbl => lp_sub_klev_tbl,
5803 x_clev_tbl => lx_sub_clev_tbl,
5804 x_klev_tbl => lx_sub_klev_tbl
5805 );
5806
5807 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5808 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5809 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5810 RAISE OKL_API.G_EXCEPTION_ERROR;
5811 END IF;
5812
5813 -- No Covered asset associated with Service
5814 else
5815
5816 open service_expense_csr(p_chr_id => p_chr_id,
5817 p_cle_id => contract_service_rec.id);
5818 fetch service_expense_csr into service_expense_rec;
5819
5820 -- No Expense associated with Service
5821 if service_expense_csr%NOTFOUND THEN
5822 close service_expense_csr;
5823
5824 lp_clev_rec.id := contract_service_rec.id;
5825 lp_clev_rec.start_date := p_release_date;
5826
5827 lp_klev_rec.id := contract_service_rec.id;
5828
5829 -- Set Service Top Line Start Date equal to Release Date
5830 -- and retain Amount equal to the Amount from original contract
5831 OKL_CONTRACT_PUB.update_contract_line(
5832 p_api_version => p_api_version,
5833 p_init_msg_list => p_init_msg_list,
5834 x_return_status => x_return_status,
5835 x_msg_count => x_msg_count,
5836 x_msg_data => x_msg_data,
5837 p_clev_rec => lp_clev_rec,
5838 p_klev_rec => lp_klev_rec,
5839 x_clev_rec => lx_clev_rec,
5840 x_klev_rec => lx_klev_rec
5841 );
5842
5843 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5844 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5845 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5846 RAISE OKL_API.G_EXCEPTION_ERROR;
5847 END IF;
5848
5849 -- Expense is associated with Service
5850 else
5851 close service_expense_csr;
5852 l_periods_bef_release :=
5853 CEIL(CEIL(MONTHS_BETWEEN(p_release_date,contract_service_rec.start_date))/service_expense_rec.factor);
5854
5855 l_new_no_of_periods := service_expense_rec.periods - l_periods_bef_release;
5856
5857 if (l_new_no_of_periods > 0) then
5858
5859 l_new_service_amount := service_expense_rec.amount * l_new_no_of_periods;
5860
5861 l_rulv_rec.id := service_expense_rec.rul_lafexp_id;
5862 l_rulv_rec.rule_information1 := TO_CHAR(l_new_no_of_periods);
5863
5864 -- Set Expense periods equal to New No. of periods
5865 OKL_RULE_PUB.update_rule(
5866 p_api_version => p_api_version,
5867 p_init_msg_list => p_init_msg_list,
5868 x_return_status => x_return_status,
5869 x_msg_count => x_msg_count,
5870 x_msg_data => x_msg_data,
5871 p_rulv_rec => l_rulv_rec,
5872 x_rulv_rec => lx_rulv_rec);
5873
5874 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5875 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5876 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5877 RAISE OKL_API.G_EXCEPTION_ERROR;
5878 END IF;
5879
5880 lp_clev_rec.id := contract_service_rec.id;
5881 lp_clev_rec.start_date := p_release_date;
5882
5883 lp_klev_rec.id := contract_service_rec.id;
5884 lp_klev_rec.amount := l_new_service_amount;
5885
5886 -- Set Service Top Line Start Date equal to Release Date
5887 -- and Amount equal to Expense per period Amount * New No. of periods
5888 OKL_CONTRACT_PUB.update_contract_line(
5889 p_api_version => p_api_version,
5890 p_init_msg_list => p_init_msg_list,
5891 x_return_status => x_return_status,
5892 x_msg_count => x_msg_count,
5893 x_msg_data => x_msg_data,
5894 p_clev_rec => lp_clev_rec,
5895 p_klev_rec => lp_klev_rec,
5896 x_clev_rec => lx_clev_rec,
5897 x_klev_rec => lx_klev_rec
5898 );
5899
5900 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5901 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5902 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5903 RAISE OKL_API.G_EXCEPTION_ERROR;
5904 END IF;
5905
5906 -- No. of periods <= 0
5907 else
5908
5909 -- Retain Service Amount equal to the amount from original contract
5910 -- Delete Expense Rules as No. of periods <= 0
5911
5912 lp_clev_rec.id := contract_service_rec.id;
5913 lp_clev_rec.start_date := p_release_date;
5914
5915 lp_klev_rec.id := contract_service_rec.id;
5916
5917 -- Set Service Top Line Start Date equal to Release Date
5918 -- and retin Amount equal to the Amount from original contract
5919 OKL_CONTRACT_PUB.update_contract_line(
5920 p_api_version => p_api_version,
5921 p_init_msg_list => p_init_msg_list,
5922 x_return_status => x_return_status,
5923 x_msg_count => x_msg_count,
5924 x_msg_data => x_msg_data,
5925 p_clev_rec => lp_clev_rec,
5926 p_klev_rec => lp_klev_rec,
5927 x_clev_rec => lx_clev_rec,
5928 x_klev_rec => lx_klev_rec
5929 );
5930
5931 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5932 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5933 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5934 RAISE OKL_API.G_EXCEPTION_ERROR;
5935 END IF;
5936
5937 -- Delete Expense Rules as No. of periods is <= 0
5938 l_rgpv_rec.id := service_expense_rec.rgp_id; -- LAFEXP Rule Group ID
5939 OKL_RULE_PUB.delete_rule_group(
5940 p_api_version => p_api_version,
5941 p_init_msg_list => p_init_msg_list,
5942 x_return_status => x_return_status,
5943 x_msg_count => x_msg_count,
5944 x_msg_data => x_msg_data,
5945 p_rgpv_rec => l_rgpv_rec
5946 );
5947 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5948 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5949 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5950 RAISE OKL_API.G_EXCEPTION_ERROR;
5951 END IF;
5952
5953 end if; --New No. of periods > 0
5954 end if; --Expense associated with Service
5955 end if; --Asset associated with Service
5956 end if; --Service line End Date >= Release Date
5957 end loop;
5958
5959 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
5960 x_msg_data => x_msg_data);
5961
5962 EXCEPTION
5963 when OKL_API.G_EXCEPTION_ERROR then
5964
5965 IF service_expense_csr%ISOPEN THEN
5966 close service_expense_csr;
5967 END IF;
5968
5969 IF service_subline_csr%ISOPEN THEN
5970 close service_subline_csr;
5971 END IF;
5972
5973 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5974 p_api_name => l_api_name,
5975 p_pkg_name => G_PKG_NAME,
5976 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
5977 x_msg_count => x_msg_count,
5978 x_msg_data => x_msg_data,
5979 p_api_type => G_API_TYPE);
5980
5981 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5982
5983 IF service_expense_csr%ISOPEN THEN
5984 close service_expense_csr;
5985 END IF;
5986
5987 IF service_subline_csr%ISOPEN THEN
5988 close service_subline_csr;
5989 END IF;
5990
5991 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5992 p_api_name => l_api_name,
5993 p_pkg_name => G_PKG_NAME,
5994 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5995 x_msg_count => x_msg_count,
5996 x_msg_data => x_msg_data,
5997 p_api_type => G_API_TYPE);
5998
5999 when OTHERS then
6000
6001 IF service_expense_csr%ISOPEN THEN
6002 close service_expense_csr;
6003 END IF;
6004
6005 IF service_subline_csr%ISOPEN THEN
6006 close service_subline_csr;
6007 END IF;
6008
6009 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6010 p_api_name => l_api_name,
6011 p_pkg_name => G_PKG_NAME,
6012 p_exc_name => 'OTHERS',
6013 x_msg_count => x_msg_count,
6014 x_msg_data => x_msg_data,
6015 p_api_type => G_API_TYPE);
6016 END adjust_service_lines;
6017
6018
6019 -----------------------------------------------------------------------------------------------
6020 -- Start of Comments
6021 -- Rekha Pillay
6022 -- Procedure Name : Adjust_Partial_Taa_Pymt
6023 -- Description : Adjust Payment lines on the Re-lease contract for Partial TA
6024 -- when Service and Rollover fee payments are defined at Top line level
6025 -- and not all Covered assets move over to the new contract
6026 -- Business Rules :
6027 --
6028 --
6029 --
6030 --
6031 --
6032 --
6033 --
6034 -- Parameters :
6035 -- Version : 1.0
6036 -- End of Commments
6037 PROCEDURE adjust_partial_taa_pymt(p_api_version IN NUMBER,
6038 p_init_msg_list IN VARCHAR2,
6039 x_return_status OUT NOCOPY VARCHAR2,
6040 x_msg_count OUT NOCOPY NUMBER,
6041 x_msg_data OUT NOCOPY VARCHAR2,
6042 p_chr_id IN NUMBER) IS
6043
6044 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6045 l_api_name CONSTANT VARCHAR2(30) := 'ADJUST_PARTIAL_TAA_PYMT';
6046 l_api_version CONSTANT NUMBER := 1.0;
6047
6048 CURSOR fee_serv_csr(p_chr_id IN NUMBER)
6049 IS
6050 SELECT cle.id,
6051 kle.amount
6052 FROM okc_k_lines_b cle,
6053 okc_line_styles_b lse,
6054 okl_k_lines kle
6055 WHERE cle.chr_id = p_chr_id
6056 AND cle.dnz_chr_id = p_chr_id
6057 AND lse.lty_code IN ('FEE','SOLD_SERVICE')
6058 AND cle.lse_id = lse.id
6059 AND kle.id = cle.id
6060 AND NVL(kle.fee_type,'XXXX') <> 'CAPITALIZED';
6061
6062 CURSOR subline_csr (p_chr_id IN NUMBER,
6063 p_cle_id IN NUMBER) IS
6064 SELECT SUM(NVL(kle.capital_amount,kle.amount)) sum_amount
6065 FROM okc_k_lines_b cle,
6066 okl_k_lines kle
6067 WHERE cle.cle_id = p_cle_id
6068 AND cle.dnz_chr_id = p_chr_id
6069 AND kle.id = cle.id;
6070
6071 CURSOR contract_payment_csr
6072 (p_chr_id IN NUMBER,
6073 p_cle_id IN NUMBER) IS
6074 SELECT TO_NUMBER(sll.rule_information6) amount,
6075 TO_NUMBER(sll.rule_information8) stub_amount,
6076 sll.id sll_id
6077 FROM okc_rules_b sll,
6078 okc_rule_groups_b rgp
6079 WHERE rgp.dnz_chr_id = p_chr_id
6080 AND rgp.cle_id = p_cle_id
6081 AND rgp.rgd_code = 'LALEVL'
6082 AND sll.rule_information_category = 'LASLL'
6083 AND sll.rgp_id = rgp.id;
6084
6085 CURSOR curr_hdr_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
6086 SELECT currency_code
6087 FROM okc_k_headers_b
6088 WHERE id = p_chr_id;
6089
6090 l_currency_code OKC_K_LINES_B.CURRENCY_CODE%TYPE;
6091
6092 l_rulv_rec OKL_RULE_PUB.rulv_rec_type;
6093 lx_rulv_rec OKL_RULE_PUB.rulv_rec_type;
6094
6095 l_rulv_temp_rec OKL_RULE_PUB.rulv_rec_type;
6096
6097 l_amount NUMBER;
6098
6099 BEGIN
6100 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
6101 -- Call start_activity to create savepoint, check compatibility
6102 -- and initialize message list
6103 l_return_status := Okl_Api.START_ACTIVITY(
6104 p_api_name => l_api_name,
6105 p_pkg_name => g_pkg_name,
6106 p_init_msg_list => p_init_msg_list,
6107 l_api_version => l_api_version,
6108 p_api_version => p_api_version,
6109 p_api_type => '_PVT',
6110 x_return_status => x_return_status);
6111 -- Check if activity started successfully
6112 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6113 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6114 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6115 RAISE Okl_Api.G_EXCEPTION_ERROR;
6116 END IF;
6117
6118 l_currency_code := '?';
6119 open curr_hdr_csr (p_chr_id);
6120 fetch curr_hdr_csr into l_currency_code;
6121 close curr_hdr_csr;
6122
6123 if (l_currency_code = '?') then
6124
6125 OKL_API.set_message(p_app_name => G_APP_NAME,
6126 p_msg_name => G_REQUIRED_VALUE,
6127 p_token1 => G_COL_NAME_TOKEN,
6128 p_token1_value => 'Currency Code');
6129 RAISE OKL_API.G_EXCEPTION_ERROR;
6130 end if;
6131
6132 for fee_serv_rec in fee_serv_csr(p_chr_id => p_chr_id)loop
6133
6134 for subline_rec in subline_csr(p_chr_id => p_chr_id,
6135 p_cle_id => fee_serv_rec.id) loop
6136
6137 if (fee_serv_rec.amount <> subline_rec.sum_amount) then
6138
6139 for contract_payment_rec in contract_payment_csr
6140 (p_chr_id => p_chr_id,
6141 p_cle_id => fee_serv_rec.id) loop
6142
6143 l_rulv_rec := l_rulv_temp_rec;
6144
6145 l_rulv_rec.id := contract_payment_rec.sll_id; -- SLL Rule ID
6146
6147 l_amount := NVL(contract_payment_rec.amount,contract_payment_rec.stub_amount)
6148 * (subline_rec.sum_amount/fee_serv_rec.amount);
6149
6150 l_amount := OKL_ACCOUNTING_UTIL.cross_currency_round_amount
6151 (p_amount => l_amount,
6152 p_currency_code => l_currency_code);
6153
6154 if (contract_payment_rec.amount IS NOT NULL) then
6155 l_rulv_rec.rule_information6 := TO_CHAR(l_amount);
6156 else
6157 l_rulv_rec.rule_information8 := TO_CHAR(l_amount);
6158 end if;
6159
6160 OKL_RULE_PUB.update_rule(
6161 p_api_version => p_api_version,
6162 p_init_msg_list => p_init_msg_list,
6163 x_return_status => x_return_status,
6164 x_msg_count => x_msg_count,
6165 x_msg_data => x_msg_data,
6166 p_rulv_rec => l_rulv_rec,
6167 x_rulv_rec => lx_rulv_rec);
6168
6169 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6170 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6171 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6172 RAISE OKL_API.G_EXCEPTION_ERROR;
6173 END IF;
6174
6175 end loop;
6176 end if;
6177 end loop;
6178 end loop;
6179
6180 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
6181 x_msg_data => x_msg_data);
6182
6183 EXCEPTION
6184 when OKL_API.G_EXCEPTION_ERROR then
6185
6186 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6187 p_api_name => l_api_name,
6188 p_pkg_name => G_PKG_NAME,
6189 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
6190 x_msg_count => x_msg_count,
6191 x_msg_data => x_msg_data,
6192 p_api_type => G_API_TYPE);
6193
6194 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
6195
6196 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6197 p_api_name => l_api_name,
6198 p_pkg_name => G_PKG_NAME,
6199 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
6200 x_msg_count => x_msg_count,
6201 x_msg_data => x_msg_data,
6202 p_api_type => G_API_TYPE);
6203
6204 when OTHERS then
6205
6206 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6207 p_api_name => l_api_name,
6208 p_pkg_name => G_PKG_NAME,
6209 p_exc_name => 'OTHERS',
6210 x_msg_count => x_msg_count,
6211 x_msg_data => x_msg_data,
6212 p_api_type => G_API_TYPE);
6213 END adjust_partial_taa_pymt;
6214
6215 ------------------------------------------------------------------------------
6216 --Start of comments
6217 --
6218 --Procedure Name : get_nbv
6219 --Purpose : Get Net Book Value- used internally
6220 --Modification History :
6221 --13-Oct-2004 rpillay Created
6222 ------------------------------------------------------------------------------
6223 PROCEDURE get_nbv(p_api_version IN NUMBER,
6224 p_init_msg_list IN VARCHAR2,
6225 x_return_status OUT NOCOPY VARCHAR2,
6226 x_msg_count OUT NOCOPY NUMBER,
6227 x_msg_data OUT NOCOPY VARCHAR2,
6228 p_asset_id IN NUMBER,
6229 p_book_type_code IN VARCHAR2,
6230 p_chr_id IN NUMBER,
6231 p_release_date IN DATE,
6232 x_nbv OUT NOCOPY Number) IS
6233
6234 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6235 l_api_name CONSTANT VARCHAR2(30) := 'GET_NBV';
6236 l_api_version CONSTANT NUMBER := 1.0;
6237
6238 l_asset_hdr_rec FA_API_TYPES.asset_hdr_rec_type;
6239 l_asset_fin_rec FA_API_TYPES.asset_fin_rec_type;
6240 l_asset_deprn_rec FA_API_TYPES.asset_deprn_rec_type;
6241
6242 l_nbv NUMBER;
6243 l_converted_amount NUMBER;
6244 l_contract_currency OKL_K_HEADERS_FULL_V.currency_code%TYPE;
6245 l_currency_conversion_type OKL_K_HEADERS_FULL_V.currency_conversion_type%TYPE;
6246 l_currency_conversion_rate OKL_K_HEADERS_FULL_V.currency_conversion_rate%TYPE;
6247 l_currency_conversion_date OKL_K_HEADERS_FULL_V.currency_conversion_date%TYPE;
6248
6249 BEGIN
6250 --call start activity to set savepoint
6251 l_return_status := OKL_API.START_ACTIVITY( substr(l_api_name,1,26),
6252 p_init_msg_list,
6253 '_PVT',
6254 x_return_status);
6255 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6256 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6257 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
6258 RAISE OKL_API.G_EXCEPTION_ERROR;
6259 END IF;
6260
6261 l_asset_hdr_rec.asset_id := p_asset_id;
6262 l_asset_hdr_rec.book_type_code := p_book_type_code;
6263
6264 if NOT fa_cache_pkg.fazcbc(x_book => l_asset_hdr_rec.book_type_code) then
6265 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
6266 p_msg_name => 'OKL_LLA_FA_CACHE_ERROR'
6267 );
6268 Raise OKL_API.G_EXCEPTION_ERROR;
6269 end if;
6270
6271 -- To fetch Asset Current Cost
6272 if not FA_UTIL_PVT.get_asset_fin_rec
6273 (p_asset_hdr_rec => l_asset_hdr_rec,
6274 px_asset_fin_rec => l_asset_fin_rec,
6275 p_transaction_header_id => NULL,
6276 p_mrc_sob_type_code => 'P'
6277 ) then
6278
6279 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
6280 p_msg_name => 'OKL_LLA_FA_ASSET_FIN_REC_ERROR'
6281 );
6282 Raise OKL_API.G_EXCEPTION_ERROR;
6283 end if;
6284
6285 -- To fetch Depreciation Reserve
6286 if not FA_UTIL_PVT.get_asset_deprn_rec
6287 (p_asset_hdr_rec => l_asset_hdr_rec ,
6288 px_asset_deprn_rec => l_asset_deprn_rec,
6289 p_period_counter => NULL,
6290 p_mrc_sob_type_code => 'P'
6291 ) then
6292 OKL_API.SET_MESSAGE(p_app_name => g_app_name,
6293 p_msg_name => 'OKL_LLA_FA_DEPRN_REC_ERROR'
6294 );
6295 Raise OKL_API.G_EXCEPTION_ERROR;
6296 end if;
6297
6298 l_nbv := l_asset_fin_rec.cost - l_asset_deprn_rec.deprn_reserve;
6299
6300 l_converted_amount := 0;
6301 OKL_ACCOUNTING_UTIL.CONVERT_TO_CONTRACT_CURRENCY(
6302 p_khr_id => p_chr_id,
6303 p_from_currency => NULL,
6304 p_transaction_date => p_release_date,
6305 p_amount => l_nbv,
6306 x_return_status => x_return_status,
6307 x_contract_currency => l_contract_currency,
6308 x_currency_conversion_type => l_currency_conversion_type,
6309 x_currency_conversion_rate => l_currency_conversion_rate,
6310 x_currency_conversion_date => l_currency_conversion_date,
6311 x_converted_amount => l_converted_amount);
6312
6313 IF(x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6314 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
6315 p_msg_name => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
6316 RAISE Okl_Api.G_EXCEPTION_ERROR;
6317 END IF;
6318
6319 x_nbv := l_converted_amount;
6320
6321 --Call end Activity
6322 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
6323 EXCEPTION
6324 WHEN OKL_API.G_EXCEPTION_ERROR Then
6325 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6326 (
6327 l_api_name,
6328 G_PKG_NAME,
6329 'OKL_API.G_RET_STS_ERROR',
6330 x_msg_count,
6331 x_msg_data,
6332 '_PVT'
6333 );
6334 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6335 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6336 (
6337 l_api_name,
6338 G_PKG_NAME,
6339 'OKL_API.G_RET_STS_UNEXP_ERROR',
6340 x_msg_count,
6341 x_msg_data,
6342 '_PVT'
6343 );
6344 WHEN OTHERS THEN
6345 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6346 (
6347 l_api_name,
6348 G_PKG_NAME,
6349 'OTHERS',
6350 x_msg_count,
6351 x_msg_data,
6352 '_PVT'
6353 );
6354 END get_nbv;
6355
6356 -------------
6357 --Bug# 4631549
6358 --------------
6359 -----------------------------------------------------------------------------------------------
6360 -- Start of Comments
6361 -- avsingh
6362 -- Procedure Name : Calculate_Expected_Cost
6363 -- Description : Calculate Expected Asset Cost based on the same formula used by offlease
6364 -- Business Rules :
6365 --
6366 --
6367 --
6368 --
6369 --
6370 --
6371 --
6372 -- Parameters :
6373 -- Version : 1.0
6374 -- End of Commments
6375 PROCEDURE Calculate_expected_cost
6376 (p_api_version IN NUMBER,
6377 p_init_msg_list IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
6378 x_return_status OUT NOCOPY VARCHAR2,
6379 x_msg_count OUT NOCOPY NUMBER,
6380 x_msg_data OUT NOCOPY VARCHAR2,
6381 p_new_chr_id IN NUMBER,
6382 p_orig_chr_id IN NUMBER,
6383 p_orig_cle_id IN NUMBER,
6384 p_asset_id IN NUMBER,
6385 p_book_type_code IN VARCHAR2,
6386 p_nbv IN NUMBER,
6387 p_release_date IN DATE,
6388 x_expected_cost OUT NOCOPY NUMBER) IS
6389
6390 l_return_status VARCHAR2(1) DEFAULT Okl_Api.G_RET_STS_SUCCESS;
6391 l_api_name CONSTANT VARCHAR2(30) := 'CALCULATE EXPECTED COST';
6392 l_api_version CONSTANT NUMBER := 1.0;
6393
6394
6395 --cursor to fetch deal type and taxowner
6396 Cursor l_book_class_csr (p_chr_id IN NUMBER) is
6397 select khr.deal_type deal_type,
6398 rulb.rule_information1 tax_owner
6399 from okl_k_headers khr,
6400 okc_rules_b rulb
6401 where rulb.dnz_chr_id = p_chr_id
6402 and rulb.rule_information_category = 'LATOWN'
6403 and khr.id = p_chr_id;
6404
6405 l_book_class_rec l_book_class_csr%ROWTYPE;
6406 l_additional_parameters okl_execute_formula_pub.ctxt_val_tbl_type;
6407 l_expected_cost NUMBER;
6408
6409 l_converted_amount NUMBER;
6410 l_contract_currency OKL_K_HEADERS_FULL_V.currency_code%TYPE;
6411 l_currency_conversion_type OKL_K_HEADERS_FULL_V.currency_conversion_type%TYPE;
6412 l_currency_conversion_rate OKL_K_HEADERS_FULL_V.currency_conversion_rate%TYPE;
6413 l_currency_conversion_date OKL_K_HEADERS_FULL_V.currency_conversion_date%TYPE;
6414
6415 BEGIN
6416 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
6417 -- Call start_activity to create savepoint, check compatibility
6418 -- and initialize message list
6419 l_return_status := Okl_Api.START_ACTIVITY(
6420 p_api_name => l_api_name,
6421 p_pkg_name => g_pkg_name,
6422 p_init_msg_list => p_init_msg_list,
6423 l_api_version => l_api_version,
6424 p_api_version => p_api_version,
6425 p_api_type => '_PVT',
6426 x_return_status => x_return_status);
6427 -- Check if activity started successfully
6428 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6429 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6430 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6431 RAISE Okl_Api.G_EXCEPTION_ERROR;
6432 END IF;
6433
6434 Open l_book_class_csr(p_chr_id => p_orig_chr_id);
6435 fetch l_book_class_csr into l_book_class_rec;
6436 Close l_book_class_csr;
6437
6438 IF l_book_class_rec.deal_type = 'LEASEOP' then
6439
6440 IF nvl(p_nbv,0) = 0 Then
6441 -- Fetch NBV for Corporate Book
6442 l_expected_cost := 0;
6443 get_nbv(p_api_version => p_api_version,
6444 p_init_msg_list => p_init_msg_list,
6445 x_return_status => x_return_status,
6446 x_msg_count => x_msg_count,
6447 x_msg_data => x_msg_data,
6448 p_asset_id => p_asset_id,
6449 p_book_type_code => p_book_type_code,
6450 p_chr_id => p_new_chr_id,
6451 p_release_date => p_release_date,
6452 x_nbv => l_expected_cost);
6453
6454 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6455 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6456 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6457 RAISE OKL_API.G_EXCEPTION_ERROR;
6458 END IF;
6459
6460
6461 ElsIf nvl(p_nbv,0) <> 0 then
6462 l_expected_cost := p_nbv;
6463 END IF;
6464
6465 ELSIF l_book_class_rec.deal_type in ('LEASEDF','LEASEST') then
6466
6467 l_additional_parameters(1).name := 'quote_effective_from_date';
6468 l_additional_parameters(1).value := to_char(p_release_date - 1,'MM/DD/YYYY');
6469
6470 okl_execute_formula_pub.execute (
6471 p_api_version => p_api_version,
6472 p_init_msg_list => p_init_msg_list,
6473 x_return_status => x_return_status,
6474 x_msg_count => x_msg_count,
6475 x_msg_data => x_msg_data,
6476 --bug# 4631549
6477 p_formula_name => 'LINE_EXPECTED_ASSET_COST',
6478 --p_formula_name => 'LINE_ASSET_NET_INVESTMENT',
6479 p_contract_id => p_orig_chr_id,
6480 p_line_id => p_orig_cle_id,
6481 p_additional_parameters => l_additional_parameters,
6482 x_value => l_expected_cost);
6483
6484 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6485 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6486 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
6487 RAISE OKL_API.G_EXCEPTION_ERROR;
6488 END IF;
6489
6490 l_converted_amount := 0;
6491 OKL_ACCOUNTING_UTIL.CONVERT_TO_CONTRACT_CURRENCY(
6492 p_khr_id => p_new_chr_id,
6493 p_from_currency => NULL,
6494 p_transaction_date => p_release_date,
6495 p_amount => l_expected_cost,
6496 x_return_status => x_return_status,
6497 x_contract_currency => l_contract_currency,
6498 x_currency_conversion_type => l_currency_conversion_type,
6499 x_currency_conversion_rate => l_currency_conversion_rate,
6500 x_currency_conversion_date => l_currency_conversion_date,
6501 x_converted_amount => l_converted_amount);
6502
6503 IF(x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6504 Okl_Api.Set_Message(p_app_name => Okl_Api.G_APP_NAME,
6505 p_msg_name => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
6506 RAISE Okl_Api.G_EXCEPTION_ERROR;
6507 l_expected_cost := l_converted_Amount;
6508 END IF;
6509 END IF;
6510 x_expected_cost := l_expected_cost;
6511
6512 --Call end Activity
6513 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
6514 EXCEPTION
6515 WHEN OKL_API.G_EXCEPTION_ERROR Then
6516 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6517 (
6518 l_api_name,
6519 G_PKG_NAME,
6520 'OKL_API.G_RET_STS_ERROR',
6521 x_msg_count,
6522 x_msg_data,
6523 '_PVT'
6524 );
6525 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6526 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6527 (
6528 l_api_name,
6529 G_PKG_NAME,
6530 'OKL_API.G_RET_STS_UNEXP_ERROR',
6531 x_msg_count,
6532 x_msg_data,
6533 '_PVT'
6534 );
6535 WHEN OTHERS THEN
6536 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6537 (
6538 l_api_name,
6539 G_PKG_NAME,
6540 'OTHERS',
6541 x_msg_count,
6542 x_msg_data,
6543 '_PVT'
6544 );
6545 END Calculate_expected_cost;
6546 -----------------------------------------------------------------------------------------------
6547 -- Start of Comments
6548 -- Rekha Pillay
6549 -- Procedure Name : Adjust_Asset_Lines
6550 -- Description : Adjust Asset lines on the Re-lease contract
6551 -- Business Rules :
6552 --
6553 --
6554 --
6555 --
6556 --
6557 --
6558 --
6559 -- Parameters :
6560 -- Version : 1.0
6561 -- End of Commments
6562 PROCEDURE adjust_asset_lines(p_api_version IN NUMBER,
6563 p_init_msg_list IN VARCHAR2,
6564 x_return_status OUT NOCOPY VARCHAR2,
6565 x_msg_count OUT NOCOPY NUMBER,
6566 x_msg_data OUT NOCOPY VARCHAR2,
6567 p_chr_id IN NUMBER,
6568 p_release_date IN DATE) IS
6569
6570 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6571 l_api_name CONSTANT VARCHAR2(30) := 'ADJUST_ASSET_LINES';
6572 l_api_version CONSTANT NUMBER := 1.0;
6573
6574 CURSOR contract_fin_asset_csr
6575 (p_chr_id IN NUMBER) IS
6576 SELECT cle.id,
6577 cle.start_date,
6578 sts.ste_code,
6579 cle.orig_system_id1
6580 FROM okc_k_lines_b cle,
6581 okc_line_styles_b lse,
6582 okc_statuses_b sts
6583 WHERE cle.dnz_chr_id = p_chr_id
6584 AND cle.chr_id = p_chr_id
6585 AND cle.lse_id = lse.id
6586 AND lse.lty_code = 'FREE_FORM1'
6587 AND cle.sts_code = sts.code;
6588
6589 CURSOR orig_cle_sts_csr(p_cle_id IN NUMBER)
6590 IS
6591 SELECT sts.ste_code,
6592 --Bug# 4670760
6593 cle.dnz_chr_id
6594 FROM okc_k_lines_b cle,
6595 okc_statuses_b sts
6596 WHERE cle.id = p_cle_id
6597 AND cle.sts_code = sts.code;
6598
6599 orig_cle_sts_rec orig_cle_sts_csr%ROWTYPE;
6600
6601 CURSOR cle_csr(p_cle_id IN NUMBER) IS
6602 SELECT id,
6603 dnz_chr_id,
6604 chr_id,
6605 cle_id,
6606 lse_id,
6607 start_date
6608 FROM okc_k_lines_b
6609 CONNECT BY PRIOR id = cle_id
6610 START WITH id = p_cle_id;
6611
6612 CURSOR lse_csr(p_lse_id IN NUMBER) IS
6613 SELECT lty_code
6614 FROM okc_line_styles_b
6615 WHERE id = p_lse_id;
6616
6617 lse_rec lse_csr%ROWTYPE;
6618
6619 CURSOR asset_number_csr(p_cle_id IN NUMBER) IS
6620 SELECT name asset_number
6621 FROM okc_k_lines_v
6622 WHERE id = p_cle_id;
6623
6624 asset_number_rec asset_number_csr%ROWTYPE;
6625
6626 CURSOR fa_asset_csr(p_asset_number IN VARCHAR2)
6627 IS
6628 SELECT fab.asset_id,
6629 fab.book_type_code
6630 FROM fa_additions fad,
6631 fa_book_controls fbc,
6632 fa_books fab
6633 WHERE fad.asset_number = p_asset_number
6634 AND fab.asset_id = fad.asset_id
6635 AND fab.book_type_code = fbc.book_type_code
6636 AND fab.transaction_header_id_out IS NULL
6637 AND fbc.book_class = 'CORPORATE';
6638
6639 fa_asset_rec fa_asset_csr%ROWTYPE;
6640
6641 CURSOR txl_asset_csr (p_chr_id IN NUMBER,
6642 p_cle_id IN NUMBER) IS
6643 SELECT txlb.depreciation_cost,
6644 txlb.current_units,
6645 txlb.salvage_value,
6646 txlb.percent_salvage_value,
6647 txlb.id
6648 FROM okl_txl_assets_b txlb,
6649 okl_trx_assets trx,
6650 okc_k_lines_b fa_cleb,
6651 okc_line_styles_b fa_lseb
6652 WHERE txlb.kle_id = fa_cleb.id
6653 AND txlb.tal_type = 'CRL'
6654 AND trx.id = txlb.tas_id
6655 AND trx.tsu_code <> 'PROCESSED'
6656 AND trx.tas_type = 'CRL'
6657 AND fa_cleb.cle_id = p_cle_id
6658 AND fa_cleb.dnz_chr_id = p_chr_id
6659 AND fa_cleb.lse_id = fa_lseb.id
6660 AND fa_lseb.lty_code = 'FIXED_ASSET';
6661
6662 txl_asset_rec txl_asset_csr%ROWTYPE;
6663
6664 CURSOR modelline_csr(p_chr_id IN NUMBER,
6665 p_model_cle_id IN NUMBER) IS
6666 SELECT model_cim.id model_cim_id
6667 FROM okc_k_items model_cim
6668 WHERE model_cim.cle_id = p_model_cle_id
6669 AND model_cim.dnz_chr_id = p_chr_id;
6670
6671 modelline_rec modelline_csr%ROWTYPE;
6672
6673 CURSOR txd_asset_csr(p_tal_id in number) is
6674 SELECT txdb.tax_book,
6675 txdb.id
6676 FROM okl_txd_assets_b txdb
6677 WHERE txdb.tal_id = p_tal_id;
6678
6679 l_corp_net_book_value NUMBER;
6680 l_tax_net_book_value NUMBER;
6681
6682 l_talv_rec okl_txl_assets_pub.tlpv_rec_type;
6683 lx_talv_rec okl_txl_assets_pub.tlpv_rec_type;
6684 l_txdv_rec okl_txd_assets_pub.adpv_rec_type;
6685 lx_txdv_rec okl_txd_assets_pub.adpv_rec_type;
6686
6687 lp_cimv_rec okl_okc_migration_pvt.cimv_rec_type;
6688 lx_cimv_rec okl_okc_migration_pvt.cimv_rec_type;
6689
6690 lp_klev_rec okl_kle_pvt.klev_rec_type;
6691 lp_clev_rec okl_okc_migration_pvt.clev_rec_type;
6692
6693 lx_klev_rec okl_kle_pvt.klev_rec_type;
6694 lx_clev_rec okl_okc_migration_pvt.clev_rec_type;
6695
6696 lp_cimv_temp_rec okl_okc_migration_pvt.cimv_rec_type;
6697 lp_klev_temp_rec okl_kle_pvt.klev_rec_type;
6698 lp_clev_temp_rec okl_okc_migration_pvt.clev_rec_type;
6699
6700 --Bug# 3950089
6701 CURSOR curr_hdr_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
6702 SELECT currency_code
6703 FROM okc_k_headers_b
6704 WHERE id = p_chr_id;
6705
6706 l_currency_code OKC_K_LINES_B.CURRENCY_CODE%TYPE;
6707
6708 --bug# 4670760
6709 l_orig_chr_id NUMBER;
6710 l_orig_cle_id NUMBER;
6711 l_expected_cost NUMBER;
6712
6713 BEGIN
6714 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
6715 -- Call start_activity to create savepoint, check compatibility
6716 -- and initialize message list
6717 l_return_status := Okl_Api.START_ACTIVITY(
6718 p_api_name => l_api_name,
6719 p_pkg_name => g_pkg_name,
6720 p_init_msg_list => p_init_msg_list,
6721 l_api_version => l_api_version,
6722 p_api_version => p_api_version,
6723 p_api_type => '_PVT',
6724 x_return_status => x_return_status);
6725 -- Check if activity started successfully
6726 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6727 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6728 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6729 RAISE Okl_Api.G_EXCEPTION_ERROR;
6730 END IF;
6731
6732 --Bug# 3950089
6733 l_currency_code := '?';
6734 open curr_hdr_csr (p_chr_id);
6735 fetch curr_hdr_csr into l_currency_code;
6736 close curr_hdr_csr;
6737
6738 if (l_currency_code = '?') then
6739
6740 OKL_API.set_message(p_app_name => G_APP_NAME,
6741 p_msg_name => G_REQUIRED_VALUE,
6742 p_token1 => G_COL_NAME_TOKEN,
6743 p_token1_value => 'Currency Code');
6744 RAISE OKL_API.G_EXCEPTION_ERROR;
6745 end if;
6746
6747 -- Fetch Financial Asset Top line
6748 for contract_fin_asset_rec in contract_fin_asset_csr
6749 (p_chr_id => p_chr_id) loop
6750
6751 -- Fetch Status of the Line in original contract
6752 open orig_cle_sts_csr(p_cle_id => contract_fin_asset_rec.orig_system_id1);
6753 fetch orig_cle_sts_csr into orig_cle_sts_rec;
6754 close orig_cle_sts_csr;
6755
6756 if (contract_fin_asset_rec.ste_code IN ('TERMINATED', 'EXPIRED', 'CANCELLED'))
6757 or ( orig_cle_sts_rec.ste_code IN ('TERMINATED', 'EXPIRED', 'CANCELLED')) then
6758
6759 -- Delete Lines which are not Active
6760 OKL_CONTRACT_PUB.delete_contract_line(
6761 p_api_version => p_api_version,
6762 p_init_msg_list => p_init_msg_list,
6763 x_return_status => x_return_status,
6764 x_msg_count => x_msg_count,
6765 x_msg_data => x_msg_data,
6766 p_line_id => contract_fin_asset_rec.id
6767 );
6768
6769 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6770 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6771 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6772 RAISE OKL_API.G_EXCEPTION_ERROR;
6773 END IF;
6774
6775 else
6776
6777 open asset_number_csr(p_cle_id => contract_fin_asset_rec.id);
6778 fetch asset_number_csr into asset_number_rec;
6779 close asset_number_csr;
6780
6781 open fa_asset_csr(p_asset_number => asset_number_rec.asset_number);
6782 fetch fa_asset_csr into fa_asset_rec;
6783 close fa_asset_csr;
6784
6785 -- Fetch NBV for Corporate Book
6786 l_corp_net_book_value := 0;
6787 get_nbv(p_api_version => p_api_version,
6788 p_init_msg_list => p_init_msg_list,
6789 x_return_status => x_return_status,
6790 x_msg_count => x_msg_count,
6791 x_msg_data => x_msg_data,
6792 p_asset_id => fa_asset_rec.asset_id,
6793 p_book_type_code => fa_asset_rec.book_type_code,
6794 p_chr_id => p_chr_id,
6795 p_release_date => p_release_date,
6796 x_nbv => l_corp_net_book_value);
6797
6798 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6799 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6800 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6801 RAISE OKL_API.G_EXCEPTION_ERROR;
6802 END IF;
6803
6804 --Bug# 4670760
6805 --Get expected asset Cost
6806 l_orig_chr_id := orig_cle_sts_rec.dnz_chr_id;
6807 l_orig_cle_id := contract_fin_Asset_rec.orig_system_id1;
6808
6809 -- Calculate Expected asset cost (cost of the asset expected after re-lease)
6810 Calculate_Expected_Cost(p_api_version => p_api_version,
6811 p_init_msg_list => p_init_msg_list,
6812 x_return_status => x_return_status,
6813 x_msg_count => x_msg_count,
6814 x_msg_data => x_msg_data,
6815 p_new_chr_id => p_chr_id,
6816 p_orig_chr_id => l_orig_chr_id,
6817 p_orig_cle_id => l_orig_cle_id,
6818 p_asset_id => fa_asset_rec.asset_id,
6819 p_book_type_code => fa_asset_rec.book_type_code,
6820 p_release_date => p_release_date,
6821 p_nbv => l_corp_net_book_value,
6822 x_expected_cost => l_expected_cost);
6823
6824 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6825 RAISE OKL_API.G_EXCEPTION_ERROR;
6826 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6827 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6828 END IF;
6829 --End Bug# 4670760
6830
6831 open txl_asset_csr(p_chr_id => p_chr_id
6832 ,p_cle_id => contract_fin_asset_rec.id);
6833 fetch txl_asset_csr into txl_asset_rec;
6834 close txl_asset_csr;
6835
6836 if l_corp_net_book_value IS NOT NULL then
6837
6838 --Update Okl_Txl_Assets for Depreciation cost and
6839 --Original cost
6840 l_talv_rec.id := txl_asset_rec.id;
6841 l_talv_rec.depreciation_cost := l_corp_net_book_value;
6842 l_talv_rec.original_cost := l_corp_net_book_value;
6843
6844 OKL_TXL_ASSETS_PUB.update_txl_asset_def(
6845 p_api_version => p_api_version,
6846 p_init_msg_list => p_init_msg_list,
6847 x_return_status => x_return_status,
6848 x_msg_count => x_msg_count,
6849 x_msg_data => x_msg_data,
6850 p_tlpv_rec => l_talv_rec,
6851 x_tlpv_rec => lx_talv_rec);
6852
6853 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6854 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6855 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6856 RAISE OKL_API.G_EXCEPTION_ERROR;
6857 END IF;
6858 end if;
6859
6860 for txd_asset_rec in txd_asset_csr(p_tal_id => txl_asset_rec.id) loop
6861
6862 -- Fetch NBV for Tax Book
6863 l_tax_net_book_value := 0;
6864 get_nbv(p_api_version => p_api_version,
6865 p_init_msg_list => p_init_msg_list,
6866 x_return_status => x_return_status,
6867 x_msg_count => x_msg_count,
6868 x_msg_data => x_msg_data,
6869 p_asset_id => fa_asset_rec.asset_id,
6870 p_book_type_code => txd_asset_rec.tax_book,
6871 p_chr_id => p_chr_id,
6872 p_release_date => p_release_date,
6873 x_nbv => l_tax_net_book_value);
6874
6875 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6876 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6877 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6878 RAISE OKL_API.G_EXCEPTION_ERROR;
6879 END IF;
6880
6881 if l_tax_net_book_value IS NOT NULL then
6882
6883 --Update Okl_Txd_Assets for Cost
6884 l_txdv_rec.id := txd_asset_rec.id;
6885 l_txdv_rec.cost := l_tax_net_book_value;
6886
6887 OKL_TXD_ASSETS_PUB.UPDATE_TXD_ASSET_DEF
6888 (p_api_version => p_api_version,
6889 p_init_msg_list => p_init_msg_list,
6890 x_return_status => x_return_status,
6891 x_msg_count => x_msg_count,
6892 x_msg_data => x_msg_data,
6893 p_adpv_rec => l_txdv_rec,
6894 x_adpv_rec => lx_txdv_rec);
6895
6896 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6897 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6898 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6899 RAISE OKL_API.G_EXCEPTION_ERROR;
6900 END IF;
6901 end if;
6902 end loop;
6903
6904 -- Loop through Financial asset line and all its children
6905 -- for making updates
6906 for cle_rec in cle_csr(p_cle_id => contract_fin_asset_rec.id) loop
6907
6908 lp_clev_rec := lp_clev_temp_rec;
6909 lp_klev_rec := lp_klev_temp_rec;
6910 lp_cimv_rec := lp_cimv_temp_rec;
6911
6912 open lse_csr(p_lse_id => cle_rec.lse_id);
6913 fetch lse_csr into lse_rec;
6914 close lse_csr;
6915
6916 -- Subsidy Line
6917 if lse_rec.lty_code = 'SUBSIDY' then
6918
6919 -- Delete Subsidy Lines
6920 OKL_CONTRACT_PUB.delete_contract_line(
6921 p_api_version => p_api_version,
6922 p_init_msg_list => p_init_msg_list,
6923 x_return_status => x_return_status,
6924 x_msg_count => x_msg_count,
6925 x_msg_data => x_msg_data,
6926 p_line_id => cle_rec.id
6927 );
6928
6929 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6930 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6931 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6932 RAISE OKL_API.G_EXCEPTION_ERROR;
6933 END IF;
6934
6935 -- Financial Asset line
6936 elsif lse_rec.lty_code = 'FREE_FORM1' then
6937
6938 --Update Financial asset line for OEC and Residual value
6939 lp_clev_rec.id := cle_rec.id;
6940
6941 if cle_rec.start_date < p_release_date then
6942 lp_clev_rec.start_date := p_release_date;
6943 end if;
6944
6945 lp_klev_rec.id := cle_rec.id;
6946 -- l_clev_rec.price_unit := OKL_API.G_MISS_NUM;
6947 --Bug# 4631549: Take residual percent and residual value from the previous contract
6948 --lp_klev_rec.residual_percentage := txl_asset_rec.percent_salvage_value;
6949 --lp_klev_rec.residual_value := txl_asset_rec.salvage_value;
6950 lp_klev_rec.oec := NVL(l_corp_net_book_value,0);
6951
6952 --Bug# 4631549: Not required to sync residual value and percent as they
6953 -- are now getting copied from previous contract
6954 /*
6955 --Bug# 3950089: Sync Residual value and percent
6956 if (lp_klev_rec.residual_value IS NOT NULL) then
6957
6958 if (lp_klev_rec.residual_value = 0 or lp_klev_rec.oec = 0) then
6959 lp_klev_rec.residual_percentage := 0;
6960 else
6961 lp_klev_rec.residual_percentage := ROUND(lp_klev_rec.residual_value * 100/lp_klev_rec.oec,2);
6962 end if;
6963
6964 elsif (lp_klev_rec.residual_percentage IS NOT NULL) then
6965 lp_klev_rec.residual_value := (lp_klev_rec.residual_percentage/100 * lp_klev_rec.oec);
6966
6967 lp_klev_rec.residual_value :=
6968 OKL_ACCOUNTING_UTIL.cross_currency_round_amount
6969 (p_amount => lp_klev_rec.residual_value,
6970 p_currency_code => l_currency_code);
6971 end if;
6972 */
6973
6974 --Bug# 4631549 : Update Expected asset cost (cost of the asset expected after re-lease)
6975 lp_klev_rec.expected_asset_cost := l_expected_cost;
6976
6977 OKL_CONTRACT_PUB.update_contract_line
6978 (p_api_version => p_api_version,
6979 p_init_msg_list => p_init_msg_list,
6980 x_return_status => x_return_status,
6981 x_msg_count => x_msg_count,
6982 x_msg_data => x_msg_data,
6983 p_clev_rec => lp_clev_rec,
6984 p_klev_rec => lp_klev_rec,
6985 x_clev_rec => lx_clev_rec,
6986 x_klev_rec => lx_klev_rec);
6987 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6988 RAISE OKL_API.G_EXCEPTION_ERROR;
6989 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6990 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6991 END IF;
6992 --End Bug# 4631549
6993
6994 -- Model line
6995 elsif lse_rec.lty_code = 'ITEM' then
6996
6997 --Update Model line for Unit Price and No. of items
6998 lp_clev_rec.id := cle_rec.id;
6999
7000 if cle_rec.start_date < p_release_date then
7001 lp_clev_rec.start_date := p_release_date;
7002 end if;
7003
7004 lp_klev_rec.id := cle_rec.id;
7005
7006 if l_corp_net_book_value IS NULL then
7007 lp_clev_rec.price_unit :=
7008 (txl_asset_rec.depreciation_cost/txl_asset_rec.current_units);
7009 elsif l_corp_net_book_value IS NOT NULL then
7010 lp_clev_rec.price_unit := (l_corp_net_book_value/txl_asset_rec.current_units);
7011 end if;
7012
7013 open modelline_csr(p_chr_id => p_chr_id
7014 ,p_model_cle_id => cle_rec.id);
7015 fetch modelline_csr into modelline_rec;
7016 close modelline_csr;
7017
7018 lp_cimv_rec.id := modelline_rec.model_cim_id;
7019 lp_cimv_rec.number_of_items := txl_asset_rec.current_units;
7020
7021 OKL_CONTRACT_PUB.update_contract_line
7022 (p_api_version => p_api_version,
7023 p_init_msg_list => p_init_msg_list,
7024 x_return_status => x_return_status,
7025 x_msg_count => x_msg_count,
7026 x_msg_data => x_msg_data,
7027 p_clev_rec => lp_clev_rec,
7028 p_klev_rec => lp_klev_rec,
7029 x_clev_rec => lx_clev_rec,
7030 x_klev_rec => lx_klev_rec);
7031 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7032 RAISE OKL_API.G_EXCEPTION_ERROR;
7033 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7034 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7035 END IF;
7036
7037 OKL_OKC_MIGRATION_PVT.update_contract_item
7038 (p_api_version => p_api_version,
7039 p_init_msg_list => p_init_msg_list,
7040 x_return_status => x_return_status,
7041 x_msg_count => x_msg_count,
7042 x_msg_data => x_msg_data,
7043 p_cimv_rec => lp_cimv_rec,
7044 x_cimv_rec => lx_cimv_rec);
7045 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7046 RAISE OKL_API.G_EXCEPTION_ERROR;
7047 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7048 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7049 END IF;
7050
7051 -- For all other lines update Start Date to Re-lease date
7052 else
7053
7054 lp_clev_rec.id := cle_rec.id;
7055
7056 if cle_rec.start_date < p_release_date then
7057 lp_clev_rec.start_date := p_release_date;
7058 end if;
7059
7060 -- Set Line Start Date equal to Release Date
7061 OKL_CONTRACT_PUB.update_contract_line(
7062 p_api_version => p_api_version,
7063 p_init_msg_list => p_init_msg_list,
7064 x_return_status => x_return_status,
7065 x_msg_count => x_msg_count,
7066 x_msg_data => x_msg_data,
7067 p_clev_rec => lp_clev_rec,
7068 p_klev_rec => lp_klev_rec,
7069 x_clev_rec => lx_clev_rec,
7070 x_klev_rec => lx_klev_rec
7071 );
7072
7073 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7074 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7075 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7076 RAISE OKL_API.G_EXCEPTION_ERROR;
7077 END IF;
7078 end if;
7079 end loop;
7080
7081 end if;
7082 end loop;
7083
7084 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
7085 x_msg_data => x_msg_data);
7086
7087 EXCEPTION
7088 when OKL_API.G_EXCEPTION_ERROR then
7089
7090 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7091 p_api_name => l_api_name,
7092 p_pkg_name => G_PKG_NAME,
7093 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
7094 x_msg_count => x_msg_count,
7095 x_msg_data => x_msg_data,
7096 p_api_type => G_API_TYPE);
7097
7098 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
7099
7100 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7101 p_api_name => l_api_name,
7102 p_pkg_name => G_PKG_NAME,
7103 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
7104 x_msg_count => x_msg_count,
7105 x_msg_data => x_msg_data,
7106 p_api_type => G_API_TYPE);
7107
7108 when OTHERS then
7109
7110 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7111 p_api_name => l_api_name,
7112 p_pkg_name => G_PKG_NAME,
7113 p_exc_name => 'OTHERS',
7114 x_msg_count => x_msg_count,
7115 x_msg_data => x_msg_data,
7116 p_api_type => G_API_TYPE);
7117 END adjust_asset_lines;
7118
7119 -----------------------------------------------------------------------------------------------
7120 -- Start of Comments
7121 -- Rekha Pillay
7122 -- Procedure Name : Update_Taa_Request_Info
7123 -- Description : Update the Re-lease contract with contract related
7124 -- information entered in the Transfer and Assumption
7125 -- Request
7126 -- Business Rules :
7127 --
7128 --
7129 --
7130 --
7131 --
7132 --
7133 --
7134 -- Parameters :
7135 -- Version : 1.0
7136 -- End of Commments
7137 PROCEDURE update_taa_request_info(p_api_version IN NUMBER,
7138 p_init_msg_list IN VARCHAR2,
7139 x_return_status OUT NOCOPY VARCHAR2,
7140 x_msg_count OUT NOCOPY NUMBER,
7141 x_msg_data OUT NOCOPY VARCHAR2,
7142 p_chr_id IN NUMBER,
7143 p_taa_trx_id IN NUMBER,
7144 p_org_id IN NUMBER) IS
7145
7146 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
7147 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_TAA_REQUEST_INFO';
7148 l_api_version CONSTANT NUMBER := 1.0;
7149
7150 CURSOR taa_party_info_csr(p_taa_trx_id IN NUMBER) IS
7151 SELECT party_rel_id2_new
7152 FROM okl_trx_contracts
7153 WHERE id = p_taa_trx_id;
7154
7155 taa_party_info_rec taa_party_info_csr%ROWTYPE;
7156
7157 CURSOR taa_chr_hdr_dtl_csr(p_taa_trx_id IN NUMBER) IS
7158 SELECT bill_to_site_id,
7159 cust_acct_id,
7160 bank_acct_id,
7161 invoice_format_id,
7162 payment_mthd_id,
7163 mla_id,
7164 credit_line_id,
7165 --Bug# 4191851
7166 insurance_yn,
7167 lease_policy_yn,
7168 ipy_type,
7169 policy_number,
7170 covered_amt,
7171 deductible_amt,
7172 effective_to_date,
7173 effective_from_date,
7174 proof_provided_date,
7175 proof_required_date,
7176 lessor_insured_yn,
7177 lessor_payee_yn,
7178 int_id,
7179 isu_id,
7180 agency_site_id,
7181 agent_site_id,
7182 territory_code
7183 FROM okl_taa_request_details_b
7184 WHERE tcn_id = p_taa_trx_id;
7185
7186 taa_chr_hdr_dtl_rec taa_chr_hdr_dtl_csr%ROWTYPE;
7187
7188 CURSOR party_role_csr(p_chr_id IN NUMBER) IS
7189 SELECT id
7190 FROM okc_k_party_roles_b
7191 WHERE chr_id = p_chr_id
7192 AND rle_code = 'LESSEE';
7193
7194 party_role_rec party_role_csr%ROWTYPE;
7195 lp_cplv_rec okl_okc_migration_pvt.cplv_rec_type;
7196 lx_cplv_rec okl_okc_migration_pvt.cplv_rec_type;
7197
7198 l_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
7199 lx_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
7200
7201 CURSOR hdr_rules_csr(p_chr_id IN NUMBER,
7202 p_rgd_code IN VARCHAR2,
7203 p_rul_cat IN VARCHAR2) IS
7204 select rul.id rul_id,
7205 rgp.id rgp_id
7206 from okc_rule_groups_b rgp,
7207 okc_rules_b rul
7208 where rgp.id = rul.rgp_id
7209 and rgp.rgd_code = p_rgd_code
7210 and rul.rule_information_category = p_rul_cat
7211 and rgp.dnz_chr_id = p_chr_id
7212 and rgp.chr_id = p_chr_id
7213 and rul.dnz_chr_id = p_chr_id;
7214
7215 hdr_rules_rec hdr_rules_csr%ROWTYPE;
7216 lp_rulv_rec Okl_Rule_Pub.rulv_rec_type;
7217 lx_rulv_rec Okl_Rule_Pub.rulv_rec_type;
7218 lp_rulv_temp_rec Okl_Rule_Pub.rulv_rec_type;
7219
7220 CURSOR invoice_format_csr(p_invoice_format_id IN NUMBER) IS
7221 SELECT name
7222 FROM okl_invoice_formats_v
7223 WHERE ID = p_invoice_format_id;
7224
7225 invoice_format_rec invoice_format_csr%ROWTYPE;
7226
7227 CURSOR governance_csr(p_chr_id IN NUMBER,
7228 p_scs_code IN VARCHAR2) IS
7229 SELECT id
7230 FROM okc_governances gve
7231 WHERE chr_id = p_chr_id
7232 AND dnz_chr_id = p_chr_id
7233 AND EXISTS (SELECT 1
7234 FROM okc_k_headers_b chr
7235 WHERE chr.id = gve.chr_id_referred
7236 AND chr.scs_code = p_scs_code);
7237
7238 governance_rec governance_csr%ROWTYPE;
7239 lp_gvev_rec okl_okc_migration_pvt.gvev_rec_type;
7240 lx_gvev_rec okl_okc_migration_pvt.gvev_rec_type;
7241 lp_gvev_temp_rec okl_okc_migration_pvt.gvev_rec_type;
7242
7243 CURSOR taa_lines_csr(p_chr_id IN NUMBER,
7244 p_taa_trx_id IN NUMBER) IS
7245 SELECT cle.id,
7246 tcl.source_column_1,
7247 tcl.source_value_1,
7248 tcl.source_column_2,
7249 tcl.source_value_2,
7250 tcl.source_column_3,
7251 tcl.source_value_3
7252 FROM okc_k_lines_b cle,
7253 okc_line_styles_b lse,
7254 okl_txl_cntrct_lns tcl
7255 WHERE cle.chr_id = p_chr_id
7256 AND cle.dnz_chr_id = p_chr_id
7257 AND lse.lty_code = 'FREE_FORM1'
7258 AND cle.lse_id = lse.id
7259 AND tcl.tcn_id = p_taa_trx_id
7260 AND tcl.kle_id = cle.orig_system_id1
7261 AND tcl.before_transfer_yn = 'N';
7262
7263 lp_klev_rec okl_kle_pvt.klev_rec_type;
7264 lp_clev_rec okl_okc_migration_pvt.clev_rec_type;
7265
7266 lx_klev_rec okl_kle_pvt.klev_rec_type;
7267 lx_clev_rec okl_okc_migration_pvt.clev_rec_type;
7268
7269 CURSOR txl_asset_csr(p_chr_id IN NUMBER,
7270 p_cle_id IN NUMBER) IS
7271 SELECT txlb.id
7272 FROM okl_txl_assets_b txlb,
7273 okl_trx_assets trx,
7274 okc_k_lines_b fa_cleb,
7275 okc_line_styles_b fa_lseb
7276 WHERE txlb.kle_id = fa_cleb.id
7277 AND txlb.tal_type = 'CRL'
7278 AND trx.id = txlb.tas_id
7279 AND trx.tsu_code <> 'PROCESSED'
7280 AND trx.tas_type = 'CRL'
7281 AND fa_cleb.cle_id = p_cle_id
7282 AND fa_cleb.dnz_chr_id = p_chr_id
7283 AND fa_cleb.lse_id = fa_lseb.id
7284 AND fa_lseb.lty_code = 'FIXED_ASSET';
7285
7286 txl_asset_rec txl_asset_csr%ROWTYPE;
7287
7288 l_talv_rec okl_txl_assets_pub.tlpv_rec_type;
7289 lx_talv_rec okl_txl_assets_pub.tlpv_rec_type;
7290
7291 CURSOR txl_ib_csr (p_chr_id IN NUMBER,
7292 p_cle_id IN NUMBER) is
7293 SELECT iti.id,
7294 iti.object_id1_new,
7295 iti.object_id2_new,
7296 iti.jtot_object_code_new
7297 FROM okl_trx_assets trx,
7298 okl_txl_itm_insts iti,
7299 okc_k_lines_b cleb_ib,
7300 okc_line_styles_b lseb_ib,
7301 okc_k_lines_b cleb_inst,
7302 okc_line_styles_b lseb_inst
7303 WHERE trx.id = iti.tas_id
7304 AND trx.tsu_code <> 'PROCESSED'
7305 AND trx.tas_type = 'CRL'
7306 AND iti.kle_id = cleb_ib.id
7307 AND iti.tal_type = 'CRL'
7308 AND cleb_ib.cle_id = cleb_inst.id
7309 AND cleb_ib.dnz_chr_id = cleb_inst.dnz_chr_id
7310 AND cleb_ib.lse_id = lseb_ib.id
7311 AND lseb_ib.lty_code = 'INST_ITEM'
7312 AND cleb_inst.cle_id = p_cle_id
7313 AND cleb_inst.dnz_chr_id = p_chr_id
7314 AND cleb_inst.lse_id = lseb_inst.id
7315 AND lseb_inst.lty_code = 'FREE_FORM2';
7316
7317 l_itiv_ib_tbl OKL_TXL_ITM_INSTS_PUB.iipv_tbl_type;
7318 lx_itiv_ib_tbl OKL_TXL_ITM_INSTS_PUB.iipv_tbl_type;
7319 i NUMBER;
7320
7321 --Bug# 4191851
7322 l_ipyv_rec OKL_IPY_PVT.ipyv_rec_type;
7323 lx_ipyv_rec OKL_IPY_PVT.ipyv_rec_type;
7324
7325 --Bug# 4558486
7326 lp_kplv_rec OKL_K_PARTY_ROLES_PVT.kplv_rec_type;
7327 lx_kplv_rec OKL_K_PARTY_ROLES_PVT.kplv_rec_type;
7328
7329 BEGIN
7330 x_return_status := Okl_Api.G_RET_STS_SUCCESS;
7331 -- Call start_activity to create savepoint, check compatibility
7332 -- and initialize message list
7333 l_return_status := Okl_Api.START_ACTIVITY(
7334 p_api_name => l_api_name,
7335 p_pkg_name => g_pkg_name,
7336 p_init_msg_list => p_init_msg_list,
7337 l_api_version => l_api_version,
7338 p_api_version => p_api_version,
7339 p_api_type => '_PVT',
7340 x_return_status => x_return_status);
7341 -- Check if activity started successfully
7342 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
7343 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
7344 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
7345 RAISE Okl_Api.G_EXCEPTION_ERROR;
7346 END IF;
7347
7348 OPEN taa_party_info_csr(p_taa_trx_id => p_taa_trx_id);
7349 FETCH taa_party_info_csr INTO taa_party_info_rec;
7350 CLOSE taa_party_info_csr;
7351
7352 OPEN taa_chr_hdr_dtl_csr(p_taa_trx_id => p_taa_trx_id);
7353 FETCH taa_chr_hdr_dtl_csr INTO taa_chr_hdr_dtl_rec;
7354 CLOSE taa_chr_hdr_dtl_csr;
7355
7356 -- Update Lessee
7357 IF (taa_party_info_rec.party_rel_id2_new IS NOT NULL) THEN
7358
7359 party_role_rec.id := NULL;
7360 OPEN party_role_csr(p_chr_id => p_chr_id);
7361 FETCH party_role_csr INTO party_role_rec;
7362 CLOSE party_role_csr;
7363
7364 IF (party_role_rec.id IS NOT NULL) THEN
7365
7366 lp_cplv_rec.id := party_role_rec.id;
7367 lp_cplv_rec.object1_id1 := taa_party_info_rec.party_rel_id2_new;
7368 lp_cplv_rec.object1_id2 := '#';
7369
7370 --Bug# 4558486: Changed call to okl_k_party_roles_pvt api
7371 -- to update records in tables
7372 -- okc_k_party_roles_b and okl_k_party_roles
7373 /*
7374 OKL_OKC_MIGRATION_PVT.update_k_party_role
7375 (p_api_version => p_api_version,
7376 p_init_msg_list => p_init_msg_list,
7377 x_return_status => x_return_status,
7378 x_msg_count => x_msg_count,
7379 x_msg_data => x_msg_data,
7380 p_cplv_rec => lp_cplv_rec,
7381 x_cplv_rec => lx_cplv_rec);
7382 */
7383
7384 lp_kplv_rec.id := lp_cplv_rec.id;
7385 OKL_K_PARTY_ROLES_PVT.update_k_party_role
7386 (p_api_version => p_api_version,
7387 p_init_msg_list => p_init_msg_list,
7388 x_return_status => x_return_status,
7389 x_msg_count => x_msg_count,
7390 x_msg_data => x_msg_data,
7391 p_cplv_rec => lp_cplv_rec,
7392 x_cplv_rec => lx_cplv_rec,
7393 p_kplv_rec => lp_kplv_rec,
7394 x_kplv_rec => lx_kplv_rec);
7395
7396 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7397 RAISE OKL_API.G_EXCEPTION_ERROR;
7398 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7399 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7400 END IF;
7401 END IF;
7402 END IF;
7403
7404 -- Update Customer Account and Header level Bill-To-Site
7405 IF (taa_chr_hdr_dtl_rec.cust_acct_id IS NOT NULL) THEN
7406
7407 l_chrv_rec.id := p_chr_id;
7408 l_chrv_rec.cust_acct_id := taa_chr_hdr_dtl_rec.cust_acct_id;
7409
7410 IF (taa_chr_hdr_dtl_rec.bill_to_site_id IS NOT NULL) THEN
7411 l_chrv_rec.bill_to_site_use_id := taa_chr_hdr_dtl_rec.bill_to_site_id;
7412 END IF;
7413
7414 OKL_OKC_MIGRATION_PVT.update_contract_header(
7415 p_api_version => p_api_version,
7416 p_init_msg_list => p_init_msg_list,
7417 x_return_status => x_return_status,
7418 x_msg_count => x_msg_count,
7419 x_msg_data => x_msg_data,
7420 p_restricted_update => OKL_API.G_FALSE,
7421 p_chrv_rec => l_chrv_rec,
7422 x_chrv_rec => lx_chrv_rec);
7423
7424 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7425 RAISE OKL_API.G_EXCEPTION_ERROR;
7426 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7427 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7428 END IF;
7429 END IF;
7430
7431 -- Update Header level Bank Account
7432 lp_rulv_rec := lp_rulv_temp_rec;
7433 IF (taa_chr_hdr_dtl_rec.bank_acct_id IS NOT NULL) THEN
7434
7435 hdr_rules_rec.rul_id := NULL;
7436 hdr_rules_rec.rgp_id := NULL;
7437 OPEN hdr_rules_csr(p_chr_id => p_chr_id,
7438 p_rgd_code => 'LABILL',
7439 p_rul_cat => 'LABACC');
7440 FETCH hdr_rules_csr INTO hdr_rules_rec;
7441 CLOSE hdr_rules_csr;
7442
7443 IF (hdr_rules_rec.rul_id IS NOT NULL) THEN
7444 lp_rulv_rec.id := hdr_rules_rec.rul_id;
7445 lp_rulv_rec.rgp_id := hdr_rules_rec.rgp_id;
7446 lp_rulv_rec.rule_information_category := 'LABACC';
7447 lp_rulv_rec.dnz_chr_id := p_chr_id;
7448 lp_rulv_rec.object1_id1 := taa_chr_hdr_dtl_rec.bank_acct_id;
7449 lp_rulv_rec.object1_id2 := '#';
7450 lp_rulv_rec.jtot_object1_code := 'OKX_CUSTBKAC';
7451 lp_rulv_rec.warn_yn := 'N';
7452 lp_rulv_rec.std_template_yn := 'N';
7453
7454 OKL_RULE_PUB.update_rule(
7455 p_api_version => p_api_version,
7456 p_init_msg_list => p_init_msg_list,
7457 x_return_status => x_return_status,
7458 x_msg_count => x_msg_count,
7459 x_msg_data => x_msg_data,
7460 p_rulv_rec => lp_rulv_rec,
7461 x_rulv_rec => lx_rulv_rec);
7462
7463 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7464 RAISE OKL_API.G_EXCEPTION_ERROR;
7465 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7466 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7467 END IF;
7468 END IF;
7469 END IF;
7470
7471 -- Update Header level Payment Method
7472 lp_rulv_rec := lp_rulv_temp_rec;
7473 IF (taa_chr_hdr_dtl_rec.payment_mthd_id IS NOT NULL) THEN
7474
7475 hdr_rules_rec.rul_id := NULL;
7476 hdr_rules_rec.rgp_id := NULL;
7477 OPEN hdr_rules_csr(p_chr_id => p_chr_id,
7478 p_rgd_code => 'LABILL',
7479 p_rul_cat => 'LAPMTH');
7480 FETCH hdr_rules_csr INTO hdr_rules_rec;
7481 CLOSE hdr_rules_csr;
7482
7483 IF (hdr_rules_rec.rul_id IS NOT NULL) THEN
7484 lp_rulv_rec.id := hdr_rules_rec.rul_id;
7485 lp_rulv_rec.rgp_id := hdr_rules_rec.rgp_id;
7486 lp_rulv_rec.rule_information_category := 'LAPMTH';
7487 lp_rulv_rec.dnz_chr_id := p_chr_id;
7488 lp_rulv_rec.object1_id1 := taa_chr_hdr_dtl_rec.payment_mthd_id;
7489 lp_rulv_rec.object1_id2 := '#';
7490 lp_rulv_rec.jtot_object1_code := 'OKX_RCPTMTH';
7491 lp_rulv_rec.warn_yn := 'N';
7492 lp_rulv_rec.std_template_yn := 'N';
7493
7494 OKL_RULE_PUB.update_rule(
7495 p_api_version => p_api_version,
7496 p_init_msg_list => p_init_msg_list,
7497 x_return_status => x_return_status,
7498 x_msg_count => x_msg_count,
7499 x_msg_data => x_msg_data,
7500 p_rulv_rec => lp_rulv_rec,
7501 x_rulv_rec => lx_rulv_rec);
7502
7503 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7504 RAISE OKL_API.G_EXCEPTION_ERROR;
7505 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7506 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7507 END IF;
7508 END IF;
7509 END IF;
7510
7511 -- Update Header level Invoice Format
7512 lp_rulv_rec := lp_rulv_temp_rec;
7513 IF (taa_chr_hdr_dtl_rec.invoice_format_id IS NOT NULL) THEN
7514
7515 hdr_rules_rec.rul_id := NULL;
7516 hdr_rules_rec.rgp_id := NULL;
7517 OPEN hdr_rules_csr(p_chr_id => p_chr_id,
7518 p_rgd_code => 'LABILL',
7519 p_rul_cat => 'LAINVD');
7520 FETCH hdr_rules_csr INTO hdr_rules_rec;
7521 CLOSE hdr_rules_csr;
7522
7523 IF (hdr_rules_rec.rul_id IS NOT NULL) THEN
7524
7525 OPEN invoice_format_csr
7526 (p_invoice_format_id => taa_chr_hdr_dtl_rec.invoice_format_id);
7527 FETCH invoice_format_csr INTO invoice_format_rec;
7528 CLOSE invoice_format_csr;
7529
7530 lp_rulv_rec.id := hdr_rules_rec.rul_id;
7531 lp_rulv_rec.rgp_id := hdr_rules_rec.rgp_id;
7532 lp_rulv_rec.rule_information_category := 'LAINVD';
7533 lp_rulv_rec.dnz_chr_id := p_chr_id;
7534 lp_rulv_rec.rule_information1 := invoice_format_rec.name;
7535 lp_rulv_rec.warn_yn := 'N';
7536 lp_rulv_rec.std_template_yn := 'N';
7537
7538 OKL_RULE_PUB.update_rule(
7539 p_api_version => p_api_version,
7540 p_init_msg_list => p_init_msg_list,
7541 x_return_status => x_return_status,
7542 x_msg_count => x_msg_count,
7543 x_msg_data => x_msg_data,
7544 p_rulv_rec => lp_rulv_rec,
7545 x_rulv_rec => lx_rulv_rec);
7546
7547 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7548 RAISE OKL_API.G_EXCEPTION_ERROR;
7549 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7550 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7551 END IF;
7552 END IF;
7553 END IF;
7554
7555 -- Update Master Lease Agreement
7556 lp_gvev_rec := lp_gvev_temp_rec;
7557 IF (taa_chr_hdr_dtl_rec.mla_id IS NOT NULL) THEN
7558
7559 governance_rec.id := NULL;
7560 OPEN governance_csr(p_chr_id => p_chr_id,
7561 p_scs_code => 'MASTER_LEASE');
7562 FETCH governance_csr INTO governance_rec;
7563 CLOSE governance_csr;
7564
7565 lp_gvev_rec.chr_id := p_chr_id;
7566 lp_gvev_rec.dnz_chr_id := p_chr_id;
7567 lp_gvev_rec.chr_id_referred := taa_chr_hdr_dtl_rec.mla_id;
7568 lp_gvev_rec.copied_only_yn := 'N';
7569
7570 IF (governance_rec.id IS NULL) THEN
7571 lp_gvev_rec.id := NULL;
7572
7573 OKL_OKC_MIGRATION_PVT.create_governance
7574 (p_api_version => p_api_version,
7575 p_init_msg_list => p_init_msg_list,
7576 x_return_status => x_return_status,
7577 x_msg_count => x_msg_count,
7578 x_msg_data => x_msg_data,
7579 p_gvev_rec => lp_gvev_rec,
7580 x_gvev_rec => lx_gvev_rec);
7581
7582 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7583 RAISE OKL_API.G_EXCEPTION_ERROR;
7584 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7585 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7586 END IF;
7587
7588 ELSE
7589
7590 lp_gvev_rec.id := governance_rec.id;
7591
7592 OKL_OKC_MIGRATION_PVT.update_governance
7593 (p_api_version => p_api_version,
7594 p_init_msg_list => p_init_msg_list,
7595 x_return_status => x_return_status,
7596 x_msg_count => x_msg_count,
7597 x_msg_data => x_msg_data,
7598 p_gvev_rec => lp_gvev_rec,
7599 x_gvev_rec => lx_gvev_rec);
7600
7601 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7602 RAISE OKL_API.G_EXCEPTION_ERROR;
7603 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7604 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7605 END IF;
7606
7607 END IF;
7608 END IF;
7609
7610 -- Update Credit Line
7611 lp_gvev_rec := lp_gvev_temp_rec;
7612 IF (taa_chr_hdr_dtl_rec.credit_line_id IS NOT NULL) THEN
7613
7614 governance_rec.id := NULL;
7615 OPEN governance_csr(p_chr_id => p_chr_id,
7616 p_scs_code => 'CREDITLINE_CONTRACT');
7617 FETCH governance_csr INTO governance_rec;
7618 CLOSE governance_csr;
7619
7620 lp_gvev_rec.chr_id := p_chr_id;
7621 lp_gvev_rec.dnz_chr_id := p_chr_id;
7622 lp_gvev_rec.chr_id_referred := taa_chr_hdr_dtl_rec.credit_line_id;
7623 lp_gvev_rec.copied_only_yn := 'N';
7624
7625 IF (governance_rec.id IS NULL) THEN
7626 lp_gvev_rec.id := NULL;
7627
7628 OKL_OKC_MIGRATION_PVT.create_governance
7629 (p_api_version => p_api_version,
7630 p_init_msg_list => p_init_msg_list,
7631 x_return_status => x_return_status,
7632 x_msg_count => x_msg_count,
7633 x_msg_data => x_msg_data,
7634 p_gvev_rec => lp_gvev_rec,
7635 x_gvev_rec => lx_gvev_rec);
7636
7637 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7638 RAISE OKL_API.G_EXCEPTION_ERROR;
7639 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7640 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7641 END IF;
7642
7643 ELSE
7644
7645 lp_gvev_rec.id := governance_rec.id;
7646
7647 OKL_OKC_MIGRATION_PVT.update_governance
7648 (p_api_version => p_api_version,
7649 p_init_msg_list => p_init_msg_list,
7650 x_return_status => x_return_status,
7651 x_msg_count => x_msg_count,
7652 x_msg_data => x_msg_data,
7653 p_gvev_rec => lp_gvev_rec,
7654 x_gvev_rec => lx_gvev_rec);
7655
7656 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7657 RAISE OKL_API.G_EXCEPTION_ERROR;
7658 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7659 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7660 END IF;
7661
7662 END IF;
7663 END IF;
7664
7665 -- Update Asset Line Details
7666 FOR taa_lines_rec IN taa_lines_csr(p_chr_id => p_chr_id,
7667 p_taa_trx_id => p_taa_trx_id)
7668 LOOP
7669
7670 -- Asset Line level Install At Location
7671 IF (taa_lines_rec.source_column_1 = 'INSTALL_SITE_ID'
7672 AND taa_lines_rec.source_value_1 IS NOT NULL) THEN
7673
7674 i := 0;
7675 l_itiv_ib_tbl.DELETE;
7676 FOR txl_ib_rec IN txl_ib_csr(p_chr_id => p_chr_id,
7677 p_cle_id => taa_lines_rec.id)
7678 LOOP
7679
7680 i := i + 1;
7681 l_itiv_ib_tbl(i).id := txl_ib_rec.id;
7682 l_itiv_ib_tbl(i).object_id1_old := txl_ib_rec.object_id1_new;
7683 l_itiv_ib_tbl(i).object_id2_old := txl_ib_rec.object_id2_new;
7684 l_itiv_ib_tbl(i).jtot_object_code_old := txl_ib_rec.jtot_object_code_new;
7685
7686 l_itiv_ib_tbl(i).object_id1_new := taa_lines_rec.source_value_1;
7687 l_itiv_ib_tbl(i).object_id2_new := '#';
7688
7689 END LOOP;
7690
7691 IF (i > 0) THEN
7692
7693 OKL_TXL_ITM_INSTS_PUB.update_txl_itm_insts
7694 (p_api_version => p_api_version,
7695 p_init_msg_list => p_init_msg_list,
7696 x_return_status => x_return_status,
7697 x_msg_count => x_msg_count,
7698 x_msg_data => x_msg_data,
7699 p_iipv_tbl => l_itiv_ib_tbl,
7700 x_iipv_tbl => lx_itiv_ib_tbl);
7701
7702 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
7703 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
7704 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
7705 RAISE Okl_Api.G_EXCEPTION_ERROR;
7706 END IF;
7707 END IF;
7708 END IF;
7709
7710 -- Asset Line level Fixed asset location
7711 IF (taa_lines_rec.source_column_2 = 'FA_LOC_ID'
7712 AND taa_lines_rec.source_value_2 IS NOT NULL) THEN
7713
7714 OPEN txl_asset_csr(p_chr_id => p_chr_id,
7715 p_cle_id => taa_lines_rec.id);
7716 FETCH txl_asset_csr INTO txl_asset_rec;
7717 CLOSE txl_asset_csr;
7718
7719 l_talv_rec.id := txl_asset_rec.id;
7720 l_talv_rec.fa_location_id := taa_lines_rec.source_value_2;
7721
7722 OKL_TXL_ASSETS_PUB.update_txl_asset_def(
7723 p_api_version => p_api_version,
7724 p_init_msg_list => p_init_msg_list,
7725 x_return_status => x_return_status,
7726 x_msg_count => x_msg_count,
7727 x_msg_data => x_msg_data,
7728 p_tlpv_rec => l_talv_rec,
7729 x_tlpv_rec => lx_talv_rec);
7730
7731 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7732 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7733 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7734 RAISE OKL_API.G_EXCEPTION_ERROR;
7735 END IF;
7736 END IF;
7737
7738 -- Asset Line level Bill-To-Site
7739 IF (taa_lines_rec.source_column_3 = 'BILL_TO_SITE_ID'
7740 AND taa_lines_rec.source_value_3 IS NOT NULL) THEN
7741
7742 lp_clev_rec.id := taa_lines_rec.id;
7743 lp_clev_rec.bill_to_site_use_id := taa_lines_rec.source_value_3;
7744
7745 lp_klev_rec.id := taa_lines_rec.id;
7746
7747 OKL_CONTRACT_PUB.update_contract_line(
7748 p_api_version => p_api_version,
7749 p_init_msg_list => p_init_msg_list,
7750 x_return_status => x_return_status,
7751 x_msg_count => x_msg_count,
7752 x_msg_data => x_msg_data,
7753 p_clev_rec => lp_clev_rec,
7754 p_klev_rec => lp_klev_rec,
7755 x_clev_rec => lx_clev_rec,
7756 x_klev_rec => lx_klev_rec
7757 );
7758
7759 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7760 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7761 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7762 RAISE OKL_API.G_EXCEPTION_ERROR;
7763 END IF;
7764 END IF;
7765
7766 END LOOP;
7767
7768 --Bug# 4191851
7769 -- Create Third Party Insurance
7770 IF (taa_chr_hdr_dtl_rec.insurance_yn = 'Y' AND
7771 taa_chr_hdr_dtl_rec.lease_policy_yn = 'N' AND
7772 taa_chr_hdr_dtl_rec.policy_number IS NOT NULL) THEN
7773
7774 l_ipyv_rec.ipy_type := taa_chr_hdr_dtl_rec.ipy_type;
7775 l_ipyv_rec.sfwt_flag := 'T';
7776 l_ipyv_rec.policy_number := taa_chr_hdr_dtl_rec.policy_number;
7777 l_ipyv_rec.covered_amount := taa_chr_hdr_dtl_rec.covered_amt;
7778 l_ipyv_rec.deductible := taa_chr_hdr_dtl_rec.deductible_amt;
7779 l_ipyv_rec.date_to := taa_chr_hdr_dtl_rec.effective_to_date;
7780 l_ipyv_rec.date_from := taa_chr_hdr_dtl_rec.effective_from_date;
7781 l_ipyv_rec.date_proof_provided := taa_chr_hdr_dtl_rec.proof_provided_date;
7782 l_ipyv_rec.date_proof_required := taa_chr_hdr_dtl_rec.proof_required_date;
7783 l_ipyv_rec.quote_yn := 'N';
7784 l_ipyv_rec.lessor_insured_yn := taa_chr_hdr_dtl_rec.lessor_insured_yn;
7785 l_ipyv_rec.lessor_payee_yn := taa_chr_hdr_dtl_rec.lessor_payee_yn;
7786 l_ipyv_rec.khr_id := p_chr_id;
7787 l_ipyv_rec.int_id := taa_chr_hdr_dtl_rec.int_id;
7788 l_ipyv_rec.isu_id := taa_chr_hdr_dtl_rec.isu_id;
7789 l_ipyv_rec.agency_site_id := taa_chr_hdr_dtl_rec.agency_site_id;
7790 l_ipyv_rec.agent_site_id := taa_chr_hdr_dtl_rec.agent_site_id;
7791 l_ipyv_rec.territory_code := taa_chr_hdr_dtl_rec.territory_code;
7792 l_ipyv_rec.org_id := p_org_id;
7793
7794 OKL_INS_QUOTE_PUB.create_third_prt_ins(
7795 p_api_version => p_api_version,
7796 p_init_msg_list => p_init_msg_list,
7797 x_return_status => x_return_status,
7798 x_msg_count => x_msg_count,
7799 x_msg_data => x_msg_data,
7800 p_ipyv_rec => l_ipyv_rec,
7801 x_ipyv_rec => lx_ipyv_rec);
7802
7803 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7804 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7805 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7806 RAISE OKL_API.G_EXCEPTION_ERROR;
7807 END IF;
7808 END IF;
7809
7810 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
7811 x_msg_data => x_msg_data);
7812
7813 EXCEPTION
7814 when OKL_API.G_EXCEPTION_ERROR then
7815
7816 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7817 p_api_name => l_api_name,
7818 p_pkg_name => G_PKG_NAME,
7819 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
7820 x_msg_count => x_msg_count,
7821 x_msg_data => x_msg_data,
7822 p_api_type => G_API_TYPE);
7823
7824 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
7825
7826 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7827 p_api_name => l_api_name,
7828 p_pkg_name => G_PKG_NAME,
7829 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
7830 x_msg_count => x_msg_count,
7831 x_msg_data => x_msg_data,
7832 p_api_type => G_API_TYPE);
7833
7834 when OTHERS then
7835
7836 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7837 p_api_name => l_api_name,
7838 p_pkg_name => G_PKG_NAME,
7839 p_exc_name => 'OTHERS',
7840 x_msg_count => x_msg_count,
7841 x_msg_data => x_msg_data,
7842 p_api_type => G_API_TYPE);
7843 END update_taa_request_info;
7844
7845 -----------------------------------------------------------------------------------------------
7846 -------------------------- Main Process for Re-Lease of Contract ------------------------------
7847 -----------------------------------------------------------------------------------------------
7848 Procedure create_release_contract(
7849 p_api_version IN NUMBER,
7850 p_init_msg_list IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
7851 x_return_status OUT NOCOPY VARCHAR2,
7852 x_msg_count OUT NOCOPY NUMBER,
7853 x_msg_data OUT NOCOPY VARCHAR2,
7854 p_chr_id IN OKC_K_HEADERS_B.ID%TYPE,
7855 p_release_reason_code IN VARCHAR2,
7856 p_release_description IN VARCHAR2,
7857 p_trx_date IN DATE,
7858 p_source_trx_id IN NUMBER,
7859 p_source_trx_type IN VARCHAR2,
7860 x_tcnv_rec OUT NOCOPY tcnv_rec_type,
7861 x_release_chr_id OUT NOCOPY OKC_K_HEADERS_B.ID%TYPE)
7862 IS
7863 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_RELEASE_CONTRACT';
7864 l_chrv_rec chrv_rec_type;
7865 l_khrv_rec khrv_rec_type;
7866 ln_old_chr_id OKC_K_HEADERS_V.ID%TYPE;
7867 ln_new_chr_id OKC_K_HEADERS_V.ID%TYPE;
7868 lv_old_sts_code OKC_K_HEADERS_V.STS_CODE%TYPE;
7869 lv_old_contract_number OKC_K_HEADERS_V.CONTRACT_NUMBER%TYPE;
7870 ld_old_end_date OKC_K_HEADERS_V.END_DATE%TYPE;
7871 ln_old_authoring_org_id OKC_K_HEADERS_V.AUTHORING_ORG_ID%TYPE;
7872 lt_top_line_tbl g_top_line_tbl;
7873 lt_asset_num_tbl g_asset_num_tbl;
7874 l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
7875
7876 CURSOR c_fetch_header_line_id(p_chr_id OKC_K_HEADERS_B.ID%TYPE)
7877 IS
7878 SELECT chr.id,
7879 chr.contract_number,
7880 chr.end_date,
7881 st.ste_code sts_code,
7882 chr.authoring_org_id
7883 FROM OKC_K_HEADERS_B chr,
7884 okc_statuses_b st
7885 WHERE chr.id = p_chr_id
7886 and st.code = chr.sts_code;
7887
7888 l_new_contract_number okc_k_headers_b.contract_number%TYPE;
7889 x_new_chrv_rec chrv_rec_type;
7890 x_new_khrv_rec khrv_rec_type;
7891
7892 CURSOR taa_request_dtl_csr(p_source_trx_id IN NUMBER)
7893 IS
7894 SELECT new_contract_number
7895 FROM okl_taa_request_details_b
7896 WHERE tcn_id = p_source_trx_id;
7897
7898 taa_request_dtl_rec taa_request_dtl_csr%ROWTYPE;
7899
7900
7901 CURSOR taa_lines_csr(p_new_chr_id IN NUMBER,
7902 p_source_trx_id IN NUMBER)
7903 IS
7904 SELECT cle.id
7905 FROM okc_k_lines_b cle,
7906 okc_line_styles_b lse
7907 WHERE cle.chr_id = p_new_chr_id
7908 AND cle.dnz_chr_id = p_new_chr_id
7909 AND lse.lty_code = 'FREE_FORM1'
7910 AND cle.lse_id = lse.id
7911 AND NOT EXISTS (SELECT 1
7912 FROM okl_txl_cntrct_lns tcl
7913 WHERE tcl.tcn_id = p_source_trx_id
7914 AND tcl.kle_id = cle.orig_system_id1
7915 AND tcl.before_transfer_yn = 'N');
7916
7917 CURSOR taa_fee_serv_csr(p_new_chr_id IN NUMBER)
7918 IS
7919 SELECT cle.id
7920 FROM okc_k_lines_b cle,
7921 okc_line_styles_b lse
7922 WHERE cle.chr_id = p_new_chr_id
7923 AND cle.dnz_chr_id = p_new_chr_id
7924 AND lse.lty_code IN ('FEE','SOLD_SERVICE')
7925 AND cle.lse_id = lse.id
7926 AND NOT EXISTS (SELECT 1
7927 FROM okc_k_lines_b sub_cle
7928 WHERE sub_cle.cle_id = cle.id);
7929
7930 CURSOR taa_request_csr(p_source_trx_id IN NUMBER)
7931 IS
7932 SELECT tsu_code,
7933 complete_transfer_yn,
7934 --Bug# 4198413
7935 date_transaction_occurred
7936 FROM okl_trx_contracts
7937 where id = p_source_trx_id;
7938
7939 taa_request_rec taa_request_csr%ROWTYPE;
7940
7941 l_seq_no NUMBER;
7942 l_term_duration NUMBER;
7943
7944 l_release_date DATE;
7945
7946 --Bug# 4631549
7947 --cursor to get all finasset lines
7948 cursor l_finast_csr (p_chr_id in number) is
7949 select cleb.id
7950 from okc_k_lines_b cleb
7951 where cleb.chr_id = p_chr_id
7952 and cleb.dnz_chr_id = p_chr_id
7953 and cleb.lse_id = 33; --financial asset line id
7954
7955 l_finast_rec l_finast_csr%ROWTYPE;
7956 l_fin_clev_rec okl_okc_migration_pvt.clev_rec_type;
7957 l_fin_klev_rec okl_contract_pub.klev_rec_type;
7958 lx_fin_clev_rec okl_okc_migration_pvt.clev_rec_type;
7959 lx_fin_klev_rec okl_contract_pub.klev_rec_type;
7960 --End Bug# 4631549
7961
7962 BEGIN
7963 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7964 -- Call start_activity to create savepoint, check compatibility
7965 -- and initialize message list
7966 x_return_status := OKL_API.START_ACTIVITY (
7967 l_api_name
7968 ,p_init_msg_list
7969 ,'_PVT'
7970 ,l_return_status);
7971 -- Check if activity started successfully
7972 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7973 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7974 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7975 RAISE OKL_API.G_EXCEPTION_ERROR;
7976 END IF;
7977
7978 l_release_date := TRUNC(p_trx_date);
7979
7980 --Bug# 4198413: Set Revision Date equal to TNA Transfer Effective
7981 -- Date, if the user does not enter Revision date.
7982 if (l_release_date IS NULL and p_source_trx_id IS NOT NULL) then
7983 open taa_request_csr(p_source_trx_id => p_source_trx_id);
7984 fetch taa_request_csr into taa_request_rec;
7985 close taa_request_csr;
7986
7987 l_release_date := TRUNC(taa_request_rec.date_transaction_occurred);
7988 end if;
7989
7990 -- Validate Re-lease contract
7991 validate_release_contract(p_api_version => p_api_version,
7992 p_init_msg_list => p_init_msg_list,
7993 x_return_status => x_return_status,
7994 x_msg_count => x_msg_count,
7995 x_msg_data => x_msg_data,
7996 p_chr_id => p_chr_id,
7997 p_release_date => l_release_date,
7998 p_source_trx_id => p_source_trx_id,
7999 p_release_reason_code=>p_release_reason_code);
8000
8001 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8002 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8003 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8004 RAISE OKL_API.G_EXCEPTION_ERROR;
8005 END IF;
8006
8007 -- Fetch the old contract header id and sts_code
8008 OPEN c_fetch_header_line_id(p_chr_id);
8009 IF c_fetch_header_line_id%NOTFOUND THEN
8010 OKL_API.set_message(p_app_name => G_APP_NAME,
8011 p_msg_name => G_NO_MATCHING_RECORD,
8012 p_token1 => G_COL_NAME_TOKEN,
8013 p_token1_value => 'OKC_K_HEADERS_V.ID');
8014
8015 RAISE OKL_API.G_EXCEPTION_ERROR;
8016 END IF;
8017 FETCH c_fetch_header_line_id INTO ln_old_chr_id,
8018 lv_old_contract_number,
8019 ld_old_end_date,
8020 lv_old_sts_code,
8021 ln_old_authoring_org_id;
8022 CLOSE c_fetch_header_line_id;
8023
8024 -- T and A Request
8025 IF p_source_trx_id IS NOT NULL THEN
8026
8027 OPEN taa_request_dtl_csr(p_source_trx_id);
8028 FETCH taa_request_dtl_csr INTO taa_request_dtl_rec;
8029 CLOSE taa_request_dtl_csr;
8030
8031 l_new_contract_number := taa_request_dtl_rec.new_contract_number;
8032 END IF;
8033
8034 IF l_new_contract_number IS NULL THEN
8035
8036 -- Get Sequence Number to generate Contract Number
8037 SELECT okl_rbk_seq.NEXTVAL
8038 INTO l_seq_no
8039 FROM DUAL;
8040
8041 l_new_contract_number := lv_old_contract_number||'-REL'||l_seq_no;
8042 END IF;
8043
8044 l_term_duration := TRUNC(MONTHS_BETWEEN(ld_old_end_date + 1,l_release_date));
8045
8046 -- Depending on the status of the contract we have to copy the contract
8047 -- or else validate the assets of the contract
8048 IF (lv_old_sts_code IS NOT NULL OR
8049 lv_old_sts_code <> OKL_API.G_MISS_CHAR) AND
8050 lv_old_sts_code IN ('ACTIVE','HOLD') THEN
8051 l_copy_contract(p_api_version => p_api_version,
8052 p_init_msg_list => p_init_msg_list,
8053 x_return_status => x_return_status,
8054 x_msg_count => x_msg_count,
8055 x_msg_data => x_msg_data,
8056 p_commit => OKL_API.G_FALSE,
8057 p_old_chr_id => ln_old_chr_id,
8058 p_new_contract_number => l_new_contract_number,
8059 p_release_date => l_release_date,
8060 p_term_duration => l_term_duration,
8061 x_new_chrv_rec => x_new_chrv_rec,
8062 x_new_khrv_rec => x_new_khrv_rec);
8063 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8064 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8065 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8066 RAISE OKL_API.G_EXCEPTION_ERROR;
8067 END IF;
8068 ELSIF (lv_old_sts_code IS NOT NULL OR
8069 lv_old_sts_code <> OKL_API.G_MISS_CHAR) AND
8070 lv_old_sts_code = 'TERMINATED' THEN
8071 -- Since we got the new contract in form of x_chr_id
8072 x_return_status := validate_assets_offlease(p_dnz_chr_id => ln_old_chr_id);
8073 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8074 OKL_API.set_message(p_app_name => G_APP_NAME,
8075 p_msg_name => 'OKL_LLA_CHR_ID');
8076 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8077 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8078 OKL_API.set_message(p_app_name => G_APP_NAME,
8079 p_msg_name => 'OKL_LLA_CHR_ID');
8080 RAISE OKL_API.G_EXCEPTION_ERROR;
8081 END IF;
8082 l_copy_contract(p_api_version => p_api_version,
8083 p_init_msg_list => p_init_msg_list,
8084 x_return_status => x_return_status,
8085 x_msg_count => x_msg_count,
8086 x_msg_data => x_msg_data,
8087 p_commit => OKL_API.G_FALSE,
8088 p_old_chr_id => ln_old_chr_id,
8089 p_new_contract_number => l_new_contract_number,
8090 p_release_date => l_release_date,
8091 p_term_duration => l_term_duration,
8092 x_new_chrv_rec => x_new_chrv_rec,
8093 x_new_khrv_rec => x_new_khrv_rec);
8094 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8095 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8096 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8097 RAISE OKL_API.G_EXCEPTION_ERROR;
8098 END IF;
8099 ELSE
8100 OKL_API.set_message(p_app_name => G_APP_NAME,
8101 p_msg_name => 'OKL_LLA_CHR_ID');
8102 RAISE OKL_API.G_EXCEPTION_ERROR;
8103 END IF;
8104
8105 -- Create Re-lease contract transaction
8106 create_release_transaction
8107 (p_api_version => p_api_version,
8108 p_init_msg_list => p_init_msg_list,
8109 x_return_status => x_return_status,
8110 x_msg_count => x_msg_count,
8111 x_msg_data => x_msg_data,
8112 p_chr_id => p_chr_id,
8113 p_new_chr_id => x_new_chrv_rec.id,
8114 p_reason_code => p_release_reason_code,
8115 p_description => p_release_description,
8116 p_trx_date => l_release_date,
8117 p_source_trx_id => p_source_trx_id,
8118 p_source_trx_type => p_source_trx_type,
8119 x_tcnv_rec => x_tcnv_rec);
8120
8121 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8122 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8123 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8124 RAISE OKL_API.G_EXCEPTION_ERROR;
8125 END IF;
8126
8127 -- Delete contract lines which are not transferred
8128 -- if the source transaction is Partial T and A
8129 if (p_source_trx_id IS NOT NULL ) then
8130
8131 open taa_request_csr(p_source_trx_id => p_source_trx_id);
8132 fetch taa_request_csr into taa_request_rec;
8133 close taa_request_csr;
8134
8135 if (taa_request_rec.complete_transfer_yn = 'N') then
8136
8137 -- Delete Financial Asset lines not transferred
8138 for taa_lines_rec in taa_lines_csr
8139 (p_new_chr_id => x_new_chrv_rec.id,
8140 p_source_trx_id => p_source_trx_id)
8141 loop
8142 OKL_CONTRACT_PUB.delete_contract_line(
8143 p_api_version => p_api_version,
8144 p_init_msg_list => p_init_msg_list,
8145 x_return_status => x_return_status,
8146 x_msg_count => x_msg_count,
8147 x_msg_data => x_msg_data,
8148 p_line_id => taa_lines_rec.id
8149 );
8150
8151 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8152 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8153 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8154 RAISE OKL_API.G_EXCEPTION_ERROR;
8155 END IF;
8156 end loop;
8157
8158 -- Delete Fee and Service lines not having Covered Assets
8159 for taa_fee_serv_rec in taa_fee_serv_csr
8160 (p_new_chr_id => x_new_chrv_rec.id)
8161 loop
8162 OKL_CONTRACT_PUB.delete_contract_line(
8163 p_api_version => p_api_version,
8164 p_init_msg_list => p_init_msg_list,
8165 x_return_status => x_return_status,
8166 x_msg_count => x_msg_count,
8167 x_msg_data => x_msg_data,
8168 p_line_id => taa_fee_serv_rec.id
8169 );
8170
8171 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8172 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8173 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8174 RAISE OKL_API.G_EXCEPTION_ERROR;
8175 END IF;
8176 end loop;
8177
8178 -- Adjust Top line payments for Service and Rollover Fees
8179 -- where Covered assets are defined and not all Covered
8180 -- assets move over
8181 adjust_partial_taa_pymt
8182 (p_api_version => p_api_version,
8183 p_init_msg_list => p_init_msg_list,
8184 x_return_status => x_return_status,
8185 x_msg_count => x_msg_count,
8186 x_msg_data => x_msg_data,
8187 p_chr_id => x_new_chrv_rec.id);
8188
8189 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8190 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8191 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8192 RAISE OKL_API.G_EXCEPTION_ERROR;
8193 END IF;
8194
8195 end if;
8196 end if;
8197
8198 --Bug# 4155405
8199 -- Update Re-lease contract with information from the
8200 -- Transfer and Assumption request
8201 if (p_source_trx_id IS NOT NULL) then
8202
8203 update_taa_request_info
8204 (p_api_version => p_api_version,
8205 p_init_msg_list => p_init_msg_list,
8206 x_return_status => x_return_status,
8207 x_msg_count => x_msg_count,
8208 x_msg_data => x_msg_data,
8209 p_chr_id => x_new_chrv_rec.id,
8210 p_taa_trx_id => p_source_trx_id,
8211 p_org_id => ln_old_authoring_org_id);
8212
8213 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8214 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8215 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8216 RAISE OKL_API.G_EXCEPTION_ERROR;
8217 END IF;
8218
8219 end if;
8220
8221 adjust_asset_lines(p_api_version => p_api_version,
8222 p_init_msg_list => p_init_msg_list,
8223 x_return_status => x_return_status,
8224 x_msg_count => x_msg_count,
8225 x_msg_data => x_msg_data,
8226 p_chr_id => x_new_chrv_rec.id,
8227 p_release_date => l_release_date);
8228
8229 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8230 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8231 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8232 RAISE OKL_API.G_EXCEPTION_ERROR;
8233 END IF;
8234
8235 adjust_payment_lines(p_api_version => p_api_version,
8236 p_init_msg_list => p_init_msg_list,
8237 x_return_status => x_return_status,
8238 x_msg_count => x_msg_count,
8239 x_msg_data => x_msg_data,
8240 p_chr_id => x_new_chrv_rec.id,
8241 p_release_date => l_release_date);
8242
8243 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8244 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8245 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8246 RAISE OKL_API.G_EXCEPTION_ERROR;
8247 END IF;
8248
8249 adjust_fee_lines(p_api_version => p_api_version,
8250 p_init_msg_list => p_init_msg_list,
8251 x_return_status => x_return_status,
8252 x_msg_count => x_msg_count,
8253 x_msg_data => x_msg_data,
8254 p_chr_id => x_new_chrv_rec.id,
8255 p_orig_chr_id => p_chr_id,
8256 p_release_date => l_release_date);
8257
8258 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8259 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8260 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8261 RAISE OKL_API.G_EXCEPTION_ERROR;
8262 END IF;
8263
8264 adjust_service_lines(p_api_version => p_api_version,
8265 p_init_msg_list => p_init_msg_list,
8266 x_return_status => x_return_status,
8267 x_msg_count => x_msg_count,
8268 x_msg_data => x_msg_data,
8269 p_chr_id => x_new_chrv_rec.id,
8270 p_orig_chr_id => p_chr_id,
8271 p_release_date => l_release_date);
8272
8273 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8274 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8275 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8276 RAISE OKL_API.G_EXCEPTION_ERROR;
8277 END IF;
8278 --Added by rajnisku Bug 6657564
8279 adjust_usage_lines(p_api_version => p_api_version,
8280 p_init_msg_list => p_init_msg_list,
8281 x_return_status => x_return_status,
8282 x_msg_count => x_msg_count,
8283 x_msg_data => x_msg_data,
8284 p_chr_id => x_new_chrv_rec.id,
8285 p_release_date => l_release_date);
8286
8287 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8288 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8289 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8290 RAISE OKL_API.G_EXCEPTION_ERROR;
8291 END IF;
8292 --Added by rajnisku Bug 6657564 : End
8293 --Bug# 4631549 : Update line Capital Amounts
8294 open l_finast_csr (p_chr_id => x_new_chrv_rec.id);
8295 Loop
8296 Fetch l_finast_csr into l_finast_rec;
8297 Exit when l_finast_csr%NOTFOUND;
8298 OKL_EXECUTE_FORMULA_PUB.EXECUTE(p_api_version => p_api_version,
8299 p_init_msg_list => p_init_msg_list,
8300 x_return_status => x_return_status,
8301 x_msg_count => x_msg_count,
8302 x_msg_data => x_msg_data,
8303 p_formula_name => 'LINE_CAP_AMNT',
8304 p_contract_id => x_new_chrv_rec.id,
8305 p_line_id => l_finast_rec.id,
8306 x_value => l_fin_klev_rec.capital_amount);
8307
8308 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8309 RAISE OKL_API.G_EXCEPTION_ERROR;
8310 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8311 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8312 END IF;
8313
8314 l_fin_clev_rec.id := l_finast_rec.id;
8315 l_fin_klev_rec.id := l_finast_rec.id;
8316
8317 OKL_CONTRACT_PUB.update_contract_line
8318 (p_api_version => p_api_version,
8319 p_init_msg_list => p_init_msg_list,
8320 x_return_status => x_return_status,
8321 x_msg_count => x_msg_count,
8322 x_msg_data => x_msg_data,
8323 p_clev_rec => l_fin_clev_rec,
8324 p_klev_rec => l_fin_klev_rec,
8325 x_clev_rec => lx_fin_clev_rec,
8326 x_klev_rec => lx_fin_klev_rec);
8327
8328 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8329 RAISE OKL_API.G_EXCEPTION_ERROR;
8330 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8331 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8332 END IF;
8333 End Loop;
8334 Close l_finast_csr;
8335 --End Bug# 4631549
8336
8337 -- R12B Authoring OA Migration
8338 x_release_chr_id := x_new_chrv_rec.id;
8339
8340 OKL_API.END_ACTIVITY (x_msg_count => x_msg_count,
8341 x_msg_data => x_msg_data);
8342
8343 EXCEPTION
8344 WHEN OKL_API.G_EXCEPTION_ERROR THEN
8345 IF c_fetch_header_line_id%ISOPEN THEN
8346 CLOSE c_fetch_header_line_id;
8347 END IF;
8348 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
8349 l_api_name,
8350 G_PKG_NAME,
8351 'OKL_API.G_RET_STS_ERROR',
8352 x_msg_count,
8353 x_msg_data,
8354 '_PVT');
8355 x_return_status := l_return_status;
8356 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
8357 l_return_status :=OKL_API.HANDLE_EXCEPTIONS(
8358 l_api_name,
8359 G_PKG_NAME,
8360 'OKL_API.G_RET_STS_UNEXP_ERROR',
8361 x_msg_count,
8362 x_msg_data,
8363 '_PVT');
8364 x_return_status := l_return_status;
8365 WHEN OTHERS THEN
8366 IF c_fetch_header_line_id%ISOPEN THEN
8367 CLOSE c_fetch_header_line_id;
8368 END IF;
8369 l_return_status :=OKL_API.HANDLE_EXCEPTIONS(
8370 l_api_name,
8371 G_PKG_NAME,
8372 'OTHERS',
8373 x_msg_count,
8374 x_msg_data,
8375 '_PVT');
8376 x_return_status := l_return_status;
8377 END create_release_contract;
8378 -----------------------------------------------------------------------------------------------
8379 --------------------------------- Activate Release Contract ----------------------------------
8380 -----------------------------------------------------------------------------------------------
8381 PROCEDURE activate_release_contract(
8382 p_api_version IN NUMBER,
8383 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
8384 x_return_status OUT NOCOPY VARCHAR2,
8385 x_msg_count OUT NOCOPY NUMBER,
8386 x_msg_data OUT NOCOPY VARCHAR2,
8387 p_chr_id IN OKC_K_HEADERS_B.ID%TYPE) IS
8388 l_api_name VARCHAR2(35) := 'ACTIVATE_RELEASE_CONTRACT';
8389 l_proc_name VARCHAR2(35) := 'ACTIVATE_RELEASE_CONTRACT';
8390 ln_orig_system_source_code OKC_K_HEADERS_B.ORIG_SYSTEM_SOURCE_CODE%TYPE;
8391 ln_orig_system_id1 OKC_K_HEADERS_B.ORIG_SYSTEM_ID1%TYPE;
8392 ln_orig_contract_number OKC_K_HEADERS_B.CONTRACT_NUMBER%TYPE;
8393 l_cimv_rec cimv_rec_type;
8394 lx_cimv_rec cimv_rec_type;
8395 l_trxv_rec trxv_rec_type;
8396 lx_trxv_rec trxv_rec_type;
8397 --Bug# 4072796
8398 ln_new_contract_number OKC_K_HEADERS_B.CONTRACT_NUMBER%TYPE;
8399
8400 -- To get the orig system id for p_chr_id
8401 CURSOR get_orig_sys_code(p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
8402 SELECT chr_new.orig_system_source_code,
8403 chr_new.orig_system_id1,
8404 chr_old.contract_number,
8405 --Bug# 4072796
8406 chr_new.contract_number
8407 FROM okc_k_headers_b chr_new,
8408 okc_k_headers_b chr_old
8409 WHERE chr_new.id = p_chr_id
8410 AND chr_old.id = chr_new.orig_system_id1;
8411
8412 -- To get the orig system id for Fixed Asset lines of p_chr_id
8413 CURSOR get_orig_fa(p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
8414 SELECT cle.orig_system_id1 orig_cle_fa,
8415 cle.id id
8416 FROM OKC_K_LINES_B cle,
8417 OKC_LINE_STYLES_B lse
8418 WHERE cle.dnz_chr_id = p_chr_id
8419 AND cle.lse_id = lse.id
8420 AND lse.lty_code = 'FIXED_ASSET';
8421
8422 -- To get the orig system id for Install Base lines of p_chr_id
8423 CURSOR get_orig_ib(p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
8424 SELECT cle.orig_system_id1 orig_cle_ib,
8425 cle.id id
8426 FROM OKC_K_LINES_B cle,
8427 OKC_LINE_STYLES_B lse
8428 WHERE cle.dnz_chr_id = p_chr_id
8429 AND cle.lse_id = lse.id
8430 AND lse.lty_code = 'INST_ITEM';
8431
8432 -- To get the item information from original line id and original contract id
8433 CURSOR get_item_info(p_orig_chr_id OKC_K_HEADERS_B.ID%TYPE,
8434 p_orig_cle_id OKC_K_LINES_B.ID%TYPE) IS
8435 SELECT object1_id1,
8436 object1_id2
8437 FROM okc_k_items
8438 WHERE cle_id = p_orig_cle_id
8439 AND dnz_chr_Id = p_orig_chr_id;
8440
8441 Cursor l_asr_csr(p_rel_chr_id IN NUMBER) IS
8442 SELECT cle.cle_id finasst_id,
8443 cim.object1_id1 asset_id,
8444 cle_orig.cle_id orig_finasst_id,
8445 asr.id asset_return_id
8446 FROM OKL_ASSET_RETURNS_B asr,
8447 OKC_K_LINES_B cle_orig,
8448 OKC_LINE_STYLES_B lse_orig,
8449 OKC_K_ITEMS cim_orig,
8450 OKC_K_ITEMS cim,
8451 OKC_K_LINES_B cle,
8452 OKC_LINE_STYLES_B lse,
8453 OKC_STATUSES_B sts,
8454 OKL_TXL_ASSETS_B txl
8455 WHERE asr.kle_id = cle_orig.cle_id
8456 AND asr.ars_code = 'RELEASE_IN_PROCESS'
8457 AND cim.object1_id1 = cim_orig.object1_id1
8458 AND cim.object1_id2 = cim_orig.object1_id2
8459 AND cim.jtot_object1_code = cim_orig.jtot_object1_code
8460 AND cim.id <> cim_orig.id
8461 AND cle_orig.id = cim_orig.cle_id
8462 AND cle_orig.dnz_chr_id = cim_orig.dnz_chr_id
8463 AND cle_orig.lse_id = lse_orig.id
8464 AND lse_orig.lty_code = 'FIXED_ASSET'
8465 AND cim.cle_id = cle.id
8466 AND cim.dnz_chr_id = cle.dnz_chr_id
8467 AND cle.id = txl.kle_id
8468 AND cle.dnz_chr_id = p_rel_chr_id
8469 AND cle.lse_id = lse.id
8470 AND lse.lty_code = 'FIXED_ASSET'
8471 AND cle.sts_code = sts.code
8472 AND sts.ste_code not in ('EXPIRED','TERMINATED','CANCELLED')
8473 AND txl.tal_type = 'CRL';
8474
8475 l_asr_rec l_asr_csr%ROWTYPE;
8476
8477 l_artv_rec okl_asset_returns_pub.artv_rec_type;
8478 lx_artv_rec okl_asset_returns_pub.artv_rec_type;
8479
8480 CURSOR taa_trx_csr(p_orig_chr_id IN NUMBER
8481 ,p_new_chr_id IN NUMBER)
8482 IS
8483 SELECT tcn.id,
8484 tcn.source_trx_id ,
8485 --Bug 6657564- Added
8486 RBR_CODE
8487 --Bug 6657564 - End
8488 FROM okl_trx_contracts tcn,
8489 okl_trx_types_tl try
8490 WHERE tcn.khr_id_old = p_orig_chr_id
8491 AND tcn.khr_id_new = p_new_chr_id
8492 AND tcn_type = 'MAE'
8493 AND tcn.tsu_code <> 'PROCESSED'
8494 AND tcn.try_id = try.id
8495 --rkuttiya added for 12.1.1 Multi GAAP
8496 AND tcn.representation_type = 'PRIMARY'
8497 --
8498 AND try.name = 'Release'
8499 AND try.language= 'US';
8500
8501 taa_trx_rec taa_trx_csr%ROWTYPE;
8502
8503 l_tcnv_rec tcnv_rec_type;
8504 l_out_tcnv_rec tcnv_rec_type;
8505
8506 --Bug# 4072796
8507 CURSOR taa_request_dtl_csr(p_source_trx_id IN NUMBER)
8508 IS
8509 SELECT id,
8510 tcn_id
8511 FROM okl_taa_request_details_b
8512 WHERE tcn_id = p_source_trx_id;
8513
8514 taa_request_dtl_rec taa_request_dtl_csr%ROWTYPE;
8515
8516 l_taav_rec okl_taa_pvt.taav_rec_type;
8517 l_out_taav_rec okl_taa_pvt.taav_rec_type;
8518
8519 BEGIN
8520 x_return_status := OKL_API.G_RET_STS_SUCCESS;
8521 -- Call start_activity to create savepoint, check compatibility
8522 -- and initialize message list
8523 x_return_status := OKL_API.START_ACTIVITY (
8524 l_api_name
8525 ,p_init_msg_list
8526 ,'_PVT'
8527 ,x_return_status);
8528 -- Check if activity started successfully
8529 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8530 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8531 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8532 RAISE OKL_API.G_EXCEPTION_ERROR;
8533 END IF;
8534
8535 -- To get the orig system id for
8536 OPEN get_orig_sys_code(p_chr_id => p_chr_id);
8537 FETCH get_orig_sys_code INTO ln_orig_system_source_code,
8538 ln_orig_system_id1,
8539 ln_orig_contract_number,
8540 ln_new_contract_number; --Bug# 4072796
8541 IF get_orig_sys_code%NOTFOUND THEN
8542 OKL_API.set_message(p_app_name => G_APP_NAME,
8543 p_msg_name => G_NO_MATCHING_RECORD,
8544 p_token1 => G_COL_NAME_TOKEN,
8545 p_token1_value => 'OKC_K_HEADERS_V.ID');
8546 RAISE OKL_API.G_EXCEPTION_ERROR;
8547 END IF;
8548 CLOSE get_orig_sys_code;
8549 IF ln_orig_system_source_code = 'OKL_RELEASE' THEN
8550
8551 -- To get all the assets for the p_chr_id
8552 FOR r_get_orig_fa IN get_orig_fa(p_chr_id => p_chr_id) LOOP
8553
8554 -- to get all the new line item information
8555 x_return_status := get_rec_cimv(r_get_orig_fa.id,
8556 p_chr_id,
8557 l_cimv_rec);
8558 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8559 OKL_API.set_message(p_app_name => G_APP_NAME,
8560 p_msg_name => G_NO_MATCHING_RECORD,
8561 p_token1 => G_COL_NAME_TOKEN,
8562 p_token1_value => 'OKC_K_ITEMS_V record');
8563 x_return_status := OKL_API.G_RET_STS_ERROR;
8564 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8565 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8566 OKL_API.set_message(p_app_name => G_APP_NAME,
8567 p_msg_name => G_NO_MATCHING_RECORD,
8568 p_token1 => G_COL_NAME_TOKEN,
8569 p_token1_value => 'OKC_K_ITEMS_V record');
8570 x_return_status := OKL_API.G_RET_STS_ERROR;
8571 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8572 END IF;
8573 -- To get the old information of the old asset
8574 OPEN get_item_info(p_orig_chr_id => ln_orig_system_id1,
8575 p_orig_cle_id => r_get_orig_fa.orig_cle_fa);
8576 FETCH get_item_info INTO l_cimv_rec.object1_id1,
8577 l_cimv_rec.object1_id2;
8578 IF get_item_info%NOTFOUND THEN
8579 x_return_status := OKL_API.G_RET_STS_ERROR;
8580 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8581 END IF;
8582 CLOSE get_item_info;
8583 OKL_OKC_MIGRATION_PVT.update_contract_item(p_api_version => p_api_version,
8584 p_init_msg_list => p_init_msg_list,
8585 x_return_status => x_return_status,
8586 x_msg_count => x_msg_count,
8587 x_msg_data => x_msg_data,
8588 p_cimv_rec => l_cimv_rec,
8589 x_cimv_rec => lx_cimv_rec);
8590 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8591 x_return_status := OKL_API.G_RET_STS_ERROR;
8592 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8593 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8594 x_return_status := OKL_API.G_RET_STS_ERROR;
8595 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8596 END IF;
8597 END LOOP;
8598 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8599 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8600 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8601 RAISE OKL_API.G_EXCEPTION_ERROR;
8602 END IF;
8603
8604 -- To get the Install Base information for the p_chr_id
8605 FOR r_get_orig_ib IN get_orig_ib(p_chr_id => p_chr_id) LOOP
8606 -- to get all the new line item information
8607 x_return_status := get_rec_cimv(r_get_orig_ib.id,
8608 p_chr_id,
8609 l_cimv_rec);
8610 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8611 OKL_API.set_message(p_app_name => G_APP_NAME,
8612 p_msg_name => G_NO_MATCHING_RECORD,
8613 p_token1 => G_COL_NAME_TOKEN,
8614 p_token1_value => 'OKC_K_ITEMS_V record');
8615 x_return_status := OKL_API.G_RET_STS_ERROR;
8616 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8617 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8618 OKL_API.set_message(p_app_name => G_APP_NAME,
8619 p_msg_name => G_NO_MATCHING_RECORD,
8620 p_token1 => G_COL_NAME_TOKEN,
8621 p_token1_value => 'OKC_K_ITEMS_V record');
8622 x_return_status := OKL_API.G_RET_STS_ERROR;
8623 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8624 END IF;
8625 -- To get the old information of the old asset
8626 OPEN get_item_info(p_orig_chr_id => ln_orig_system_id1,
8627 p_orig_cle_id => r_get_orig_ib.orig_cle_ib);
8628 FETCH get_item_info INTO l_cimv_rec.object1_id1,
8629 l_cimv_rec.object1_id2;
8630 IF get_item_info%NOTFOUND THEN
8631 x_return_status := OKL_API.G_RET_STS_ERROR;
8632 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8633 END IF;
8634 CLOSE get_item_info;
8635 OKL_OKC_MIGRATION_PVT.update_contract_item(p_api_version => p_api_version,
8636 p_init_msg_list => p_init_msg_list,
8637 x_return_status => x_return_status,
8638 x_msg_count => x_msg_count,
8639 x_msg_data => x_msg_data,
8640 p_cimv_rec => l_cimv_rec,
8641 x_cimv_rec => lx_cimv_rec);
8642 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8643 x_return_status := OKL_API.G_RET_STS_ERROR;
8644 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8645 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8646 x_return_status := OKL_API.G_RET_STS_ERROR;
8647 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8648 END IF;
8649 END LOOP;
8650 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8651 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8652 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8653 RAISE OKL_API.G_EXCEPTION_ERROR;
8654 END IF;
8655
8656 -- call the asset release api
8657 okl_activate_asset_pub.RELEASE_ASSET
8658 (p_api_version => p_api_version,
8659 p_init_msg_list => p_init_msg_list,
8660 x_return_status => x_return_status,
8661 x_msg_count => x_msg_count,
8662 x_msg_data => x_msg_data,
8663 p_rel_chr_id => p_chr_id);
8664
8665 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8666 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8667 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8668 RAISE Okl_Api.G_EXCEPTION_ERROR;
8669 END IF;
8670
8671 --call the install base instance re_lease API
8672 okl_activate_ib_pvt.RELEASE_IB_INSTANCE
8673 (p_api_version => p_api_version,
8674 p_init_msg_list => p_init_msg_list,
8675 x_return_status => x_return_status,
8676 x_msg_count => x_msg_count,
8677 x_msg_data => x_msg_data,
8678 p_rel_chr_id => p_chr_id);
8679
8680 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8681 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8682 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8683 RAISE Okl_Api.G_EXCEPTION_ERROR;
8684 END IF;
8685
8686 --code added to update status in OKL_ASSET_RETURNS_B
8687 --after the release asset transaction has been processed
8688 OPEN l_asr_csr(p_chr_id);
8689 LOOP
8690 FETCH l_asr_csr into l_asr_rec;
8691 EXIT When l_asr_csr%NOTFOUND;
8692 l_artv_rec.id := l_asr_rec.asset_return_id;
8693 l_artv_rec.ars_code := 'CANCELLED';
8694 l_artv_rec.like_kind_yn := 'N';
8695 --call to change the release asset status to 'CANCELLED' in asset return
8696 okl_asset_returns_pub.update_asset_returns(
8697 p_api_version => p_api_version
8698 ,p_init_msg_list => p_init_msg_list
8699 ,x_return_status => x_return_status
8700 ,x_msg_count => x_msg_count
8701 ,x_msg_data => x_msg_data
8702 ,p_artv_rec => l_artv_rec
8703 ,x_artv_rec => lx_artv_rec);
8704
8705 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8706 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8707 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8708 RAISE Okl_Api.G_EXCEPTION_ERROR;
8709 END IF;
8710 END LOOP;
8711 CLOSE l_asr_csr;
8712
8713 -- Update Credit line
8714 OKL_TRANSFER_ASSUMPTION_PVT.update_full_tna_creditline(
8715 p_api_version => p_api_version
8716 ,p_init_msg_list => p_init_msg_list
8717 ,x_return_status => x_return_status
8718 ,x_msg_count => x_msg_count
8719 ,x_msg_data => x_msg_data
8720 ,p_chr_id => p_chr_id);
8721
8722 IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8723 RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8724 ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8725 RAISE Okl_Api.G_EXCEPTION_ERROR;
8726 END IF;
8727
8728 -- We need to change the status of the contract
8729 OKL_CONTRACT_STATUS_PUB.update_contract_status(
8730 p_api_version => p_api_version,
8731 p_init_msg_list => p_init_msg_list,
8732 x_return_status => x_return_status,
8733 x_msg_count => x_msg_count,
8734 x_msg_data => x_msg_data,
8735 p_khr_status => 'BOOKED',
8736 p_chr_id => p_chr_id);
8737 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8738 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8739 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8740 RAISE OKL_API.G_EXCEPTION_ERROR;
8741 END IF;
8742 -- We need to change the status of the Lines for the contract
8743 OKL_CONTRACT_STATUS_PUB.cascade_lease_status(
8744 p_api_version => p_api_version,
8745 p_init_msg_list => p_init_msg_list,
8746 x_return_status => x_return_status,
8747 x_msg_count => x_msg_count,
8748 x_msg_data => x_msg_data,
8749 p_chr_id => p_chr_id);
8750 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8751 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8752 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8753 RAISE OKL_API.G_EXCEPTION_ERROR;
8754 END IF;
8755
8756 -- Set Re-lease Transaction status to 'PROCESSED'
8757 open taa_trx_csr(p_orig_chr_id => ln_orig_system_id1
8758 ,p_new_chr_id => p_chr_id);
8759 fetch taa_trx_csr into taa_trx_rec;
8760 close taa_trx_csr;
8761
8762 if (taa_trx_rec.id IS NOT NULL) then
8763 l_tcnv_rec.id := taa_trx_rec.id;
8764 l_tcnv_rec.tsu_code := 'PROCESSED';
8765
8766 OKL_TRX_CONTRACTS_PUB.update_trx_contracts
8767 (p_api_version => p_api_version,
8768 p_init_msg_list => p_init_msg_list,
8769 x_return_status => x_return_status,
8770 x_msg_count => x_msg_count,
8771 x_msg_data => x_msg_data,
8772 p_tcnv_rec => l_tcnv_rec,
8773 x_tcnv_rec => l_out_tcnv_rec
8774 );
8775
8776 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8777 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8778 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8779 RAISE OKL_API.G_EXCEPTION_ERROR;
8780 END IF;
8781 end if;
8782
8783 --Bug# 4072796
8784 -- Update new contract number on Transfer and Assumption request
8785 -- Set status of Transfer and Assumption request to Processed
8786 if (taa_trx_rec.source_trx_id IS NOT NULL) then
8787
8788 OPEN taa_request_dtl_csr(p_source_trx_id => taa_trx_rec.source_trx_id);
8789 FETCH taa_request_dtl_csr INTO taa_request_dtl_rec;
8790 CLOSE taa_request_dtl_csr;
8791
8792 if (taa_request_dtl_rec.id is not null) then
8793 l_taav_rec.id := taa_request_dtl_rec.id;
8794 l_taav_rec.tcn_id := taa_request_dtl_rec.tcn_id;
8795 l_taav_rec.new_contract_number := ln_new_contract_number;
8796
8797 OKL_TAA_PVT.update_row
8798 (p_api_version => p_api_version,
8799 p_init_msg_list => p_init_msg_list,
8800 x_return_status => x_return_status,
8801 x_msg_count => x_msg_count,
8802 x_msg_data => x_msg_data,
8803 p_taav_rec => l_taav_rec,
8804 x_taav_rec => l_out_taav_rec);
8805
8806 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8807 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8808 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8809 RAISE OKL_API.G_EXCEPTION_ERROR;
8810 END IF;
8811 end if;
8812
8813 l_tcnv_rec.id := taa_trx_rec.source_trx_id;
8814 l_tcnv_rec.tsu_code := 'PROCESSED';
8815 l_tcnv_rec.khr_id_new := p_chr_id;
8816
8817 OKL_TRX_CONTRACTS_PUB.update_trx_contracts
8818 (p_api_version => p_api_version,
8819 p_init_msg_list => p_init_msg_list,
8820 x_return_status => x_return_status,
8821 x_msg_count => x_msg_count,
8822 x_msg_data => x_msg_data,
8823 p_tcnv_rec => l_tcnv_rec,
8824 x_tcnv_rec => l_out_tcnv_rec
8825 );
8826
8827 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8828 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8829 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8830 RAISE OKL_API.G_EXCEPTION_ERROR;
8831 END IF;
8832 end if;
8833 --rajnisku Bug 6657564 : Added a call to create usage line
8834
8835 IF NVL(taa_trx_rec.RBR_CODE,'X')='CUSTOMER_CHANGE' THEN
8836 create_ubb_contract(p_api_version =>p_api_version,
8837 p_init_msg_list =>p_init_msg_list,
8838 x_return_status =>x_return_status,
8839 x_msg_count =>x_msg_count,
8840 x_msg_data =>x_msg_data,
8841 p_chr_id =>p_chr_id,
8842 p_source_trx_id => taa_trx_rec.source_trx_id
8843 ) ;
8844
8845
8846 END IF;
8847 --rajnisku:End
8848
8849 ELSE
8850 OKL_API.set_message(p_app_name => G_APP_NAME,
8851 p_msg_name => 'This Contract is not a Re-Lease Contract');
8852 RAISE OKL_API.G_EXCEPTION_ERROR;
8853 END IF;
8854 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
8855 x_msg_data => x_msg_data);
8856
8857 EXCEPTION
8858 when OKL_API.G_EXCEPTION_ERROR then
8859 IF get_orig_sys_code%ISOPEN THEN
8860 close get_orig_sys_code;
8861 END IF;
8862 IF get_orig_fa%ISOPEN THEN
8863 close get_orig_fa;
8864 END IF;
8865 IF get_orig_ib%ISOPEN THEN
8866 close get_orig_ib;
8867 END IF;
8868 IF get_item_info%ISOPEN THEN
8869 close get_item_info;
8870 END IF;
8871 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8872 p_api_name => l_api_name,
8873 p_pkg_name => G_PKG_NAME,
8874 p_exc_name => 'OKL_API.G_RET_STS_ERROR',
8875 x_msg_count => x_msg_count,
8876 x_msg_data => x_msg_data,
8877 p_api_type => G_API_TYPE);
8878
8879 when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
8880 IF get_orig_sys_code%ISOPEN THEN
8881 close get_orig_sys_code;
8882 END IF;
8883 IF get_orig_fa%ISOPEN THEN
8884 close get_orig_fa;
8885 END IF;
8886 IF get_orig_ib%ISOPEN THEN
8887 close get_orig_ib;
8888 END IF;
8889 IF get_item_info%ISOPEN THEN
8890 close get_item_info;
8891 END IF;
8892 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8893 p_api_name => l_api_name,
8894 p_pkg_name => G_PKG_NAME,
8895 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
8896 x_msg_count => x_msg_count,
8897 x_msg_data => x_msg_data,
8898 p_api_type => G_API_TYPE);
8899
8900 when OTHERS then
8901 IF get_orig_sys_code%ISOPEN THEN
8902 close get_orig_sys_code;
8903 END IF;
8904 IF get_orig_fa%ISOPEN THEN
8905 close get_orig_fa;
8906 END IF;
8907 IF get_orig_ib%ISOPEN THEN
8908 close get_orig_ib;
8909 END IF;
8910 IF get_item_info%ISOPEN THEN
8911 close get_item_info;
8912 END IF;
8913 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8914 p_api_name => l_api_name,
8915 p_pkg_name => G_PKG_NAME,
8916 p_exc_name => 'OTHERS',
8917 x_msg_count => x_msg_count,
8918 x_msg_data => x_msg_data,
8919 p_api_type => G_API_TYPE);
8920 END activate_release_contract;
8921
8922 End okl_release_pvt;