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