[Home] [Help]
PACKAGE BODY: APPS.OKL_AM_LEASE_LOAN_TRMNT_PVT
Source
1 PACKAGE BODY OKL_AM_LEASE_LOAN_TRMNT_PVT AS
2 /* $Header: OKLRLLTB.pls 120.42.12010000.3 2008/10/20 18:37:23 apaul ship $ */
3
4 -- GLOBAL VARIABLES
5 G_LEVEL_PROCEDURE CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
6 G_LEVEL_EXCEPTION CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
7 G_LEVEL_STATEMENT CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
8 G_MODULE_NAME CONSTANT VARCHAR2(500) := 'okl.am.plsql.okl_am_lease_loan_trmnt_pvt.';
9
10 -- Start of comments
11 --
12 -- Function Name : check_int_calc_done.
13 -- Description : Returns 'Y' if last int calc was after last scheduled calculation
14 -- Business Rules : Called from OKL_AM_CREATE_QUOTE_PVT, OKL_AM_TERMNT_QUOTE_PVT and OKL_AM_LEASE_TRMNT_PVT
15 -- Parameters :
16 -- Version : 1.0
17 -- History : RMUNJULU LOANS_ENHACEMENT
18 -- : SECHAWLA 20-JAN-06 4970009 : Added the interest calculation check for lease contracts
19 -- with int calc basis ('FLOAT_FACTORS','REAMORT')
20 -- SECHAWLA 24-JAN-05 4970009 : Modified check_int_calc_done to compare last_int_calc_till_date
21 -- with termination date instead of last_sch_int_calc_date, to determine if
22 -- variable rate processing has been done completely
23 -- RMUNJULU 20-FEB-06 5050158 : Modified the check based on contract end date
24 --
25 -- End of comments
26 FUNCTION check_int_calc_done(
27 p_contract_id IN NUMBER,
28 p_contract_number IN VARCHAR2,
29 p_quote_number IN NUMBER DEFAULT NULL,
30 p_source IN VARCHAR2,
31 p_trn_date IN DATE) RETURN VARCHAR2 IS
32
33 -- rmunjulu BUG 5050158
34 CURSOR get_contract_end_date_csr (p_contract_id IN NUMBER ) IS
35 SELECT end_date
36 FROM okc_k_headers_b
37 WHERE id = p_contract_id;
38
39 l_last_int_calc_till_date DATE;
40 l_last_sch_int_calc_date DATE;
41 l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
42 l_deal_type VARCHAR2(300);
43 l_rev_rec_method VARCHAR2(300);
44 l_int_cal_basis VARCHAR2(300);
45 l_tax_owner VARCHAR2(300);
46 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_int_calc_done';
47 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
48 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
49 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
50
51 -- rmunjulu BUG 5050158
52 l_contract_end_date DATE;
53
54 BEGIN
55 IF (is_debug_procedure_on) THEN
56 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
57 END IF;
58 IF (is_debug_statement_on) THEN
59 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_id: '|| p_contract_id);
60 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_number: '|| p_contract_number);
61 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_quote_number: '|| p_quote_number);
62 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_source: '|| p_source);
63 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_trn_date: '|| p_trn_date);
64 END IF;
65
66 IF (is_debug_statement_on) THEN
67 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_contract_product_details');
68 END IF;
69 -- Get the contract product details
70 OKL_AM_UTIL_PVT.get_contract_product_details(
71 p_khr_id => p_contract_id,
72 x_deal_type => l_deal_type,
73 x_rev_rec_method => l_rev_rec_method,
74 x_int_cal_basis => l_int_cal_basis,
75 x_tax_owner => l_tax_owner,
76 x_return_status => l_return_status);
77 IF (is_debug_statement_on) THEN
78 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.get_contract_product_details , return status: ' || l_return_status);
79 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_deal_type: ' || l_deal_type);
80 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_rev_rec_method: ' || l_rev_rec_method);
81 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_int_cal_basis: ' || l_int_cal_basis);
82 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_tax_owner: ' || l_tax_owner);
83 END IF;
84
85 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
86 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
87 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
88 RAISE OKL_API.G_EXCEPTION_ERROR;
89 END IF;
90
91 -- only for loans check int calc
92 -- rmunjulu LOANS_ENHANCEMENT added condition to check for only some cases
93 IF ( (l_deal_type LIKE 'LOAN%' AND l_int_cal_basis IN ('FLOAT','REAMORT','CATCHUP/CLEANUP'))
94 OR --SECHAWLA 20-JAN-06 4970009 :Added the following condition to cover certain type of leases
95 (l_deal_type LIKE 'LEASE%' AND l_int_cal_basis IN ('FLOAT_FACTORS','REAMORT') ) -- SECHAWLA 20-JAN-06 4970009 : added
96 ) THEN
97
98 IF (is_debug_statement_on) THEN
99 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_VARIABLE_INT_UTIL_PVT.get_last_interim_int_calc_date');
100 END IF;
101 -- get last interest calculation till date
102 l_last_int_calc_till_date := OKL_VARIABLE_INT_UTIL_PVT.get_last_interim_int_calc_date(
103 x_return_status => l_return_status,
104 p_khr_id => p_contract_id);
105 IF (is_debug_statement_on) THEN
106 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_VARIABLE_INT_UTIL_PVT.get_last_interim_int_calc_date , return status: ' || l_return_status);
107 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_last_int_calc_till_date: ' || l_last_int_calc_till_date);
108 END IF;
109
110 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
111 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
112 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
113 RAISE OKL_API.G_EXCEPTION_ERROR;
114 END IF;
115
116 -- SECHAWLA 24-JAN-05 4970009 : comparing l_last_int_calc_till_date with
117 -- l_last_sch_int_calc_date won't work. e.g K1 (15-Jul-04 - 14-Oct-04)
118 -- ran variable rate procesing. It runs for 1 month at a time, starting from
119 -- the begining/last run date.
120 -- At the end of 1st run, l_last_int_calc_till_date = 15-AUG-04, l_last_sch_int_calc_date = 15-SEP-04
121 -- ran variable rate procesing 2nd time
122 -- At the end of 2nd run, l_last_int_calc_till_date = 15-SEP-04, l_last_sch_int_calc_date = 15-SEP-04
123 -- So our check ( l_last_int_calc_till_date < l_last_sch_int_calc_date) will fail and we will
124 -- allow termination. This is wrong. Variable rate processing needs to run for 1 more month (till the
125 -- contract end date). So we should compare l_last_int_calc_till_date with p_trn_date
126 -- Run variable rate processing for the 3rd time.
127 -- At the end of 3rd run, l_last_int_calc_till_date = 15-OCT-04, l_last_sch_int_calc_date = 15-SEP-04
128 -- Now l_last_int_calc_till_date > p_trn_date (termination date) and it is ok to terminate at this point
129
130 -- rmunjulu BUG 5050158 WE NEED THE CHECK FOR LAST SCHEDULED INTEREST CALCULATION OR ELSE
131 -- IF USER TRIES TO DO TERMINATION ON 20-AUG, AND SCHEDULED IS 15-AUG, IT ERRORS.
132
133 -- get last scheduled interest calculation date before termination date
134
135 IF (is_debug_statement_on) THEN
136 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_VARIABLE_INT_UTIL_PVT.get_last_sch_int_calc_date');
137 END IF;
138 l_last_sch_int_calc_date := OKL_VARIABLE_INT_UTIL_PVT.get_last_sch_int_calc_date(
139 x_return_status => l_return_status,
140 p_khr_id => p_contract_id,
141 p_effective_date => p_trn_date);
142 IF (is_debug_statement_on) THEN
143 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_VARIABLE_INT_UTIL_PVT.get_last_sch_int_calc_date , return status: ' || l_return_status);
144 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_last_sch_int_calc_date: ' || l_last_sch_int_calc_date);
145 END IF;
146
147 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
148 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
149 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
150 RAISE OKL_API.G_EXCEPTION_ERROR;
151 END IF;
152
153 -- rmunjulu BUG 5050158 derive contract end date
154 --OPEN get_contract_end_date_csr (p_contract_id);
155 --FETCH get_contract_end_date_csr INTO l_contract_end_date;
156 --CLOSE get_contract_end_date_csr;
157
158 -- rmunjulu BUG 5050158 Final logic
159 -- If last int calc till date is NULL or last int calc till date < last scheduled int calc then
160 -- throw error
161
162 -- rmunjulu BUG 5050158
163 --IF trunc(l_contract_end_date) < trunc(p_trn_date) THEN -- rmunjulu BUG 5050158 termination after contract end date
164
165 -- if last int calc date is less than last scheduled int calculation then throw error
166 IF l_last_int_calc_till_date IS NULL
167 OR (trunc(l_last_int_calc_till_date) < trunc(l_last_sch_int_calc_date)) THEN --SECHAWLA 24-JAN-05 4970009
168 --OR (trunc(l_last_int_calc_till_date) < trunc(p_trn_date) --SECHAWLA 24-JAN-05 4970009
169 --AND trunc(l_last_int_calc_till_date) < trunc(l_contract_end_date)) THEN -- rmunjulu BUG 5050158 Add condition to catch last calc
170
171 -- If quote_number passed then give quote message
172 IF p_source = 'CREATE' THEN
173
174 -- Termination quote cannot be created. Please process interest calculation
175 -- for contract CONTRACT_NUMBER up to the quote effective from date.
176 OKL_API.set_message (
177 p_app_name => 'OKL',
178 p_msg_name => 'OKL_AM_CREATE_TQ_RUN_INT_CALC',
179 p_token1 => 'CONTRACT_NUMBER',
180 p_token1_value => p_contract_number);
181
182 RETURN 'N';
183
184 ELSIF p_quote_number IS NOT NULL AND p_source = 'UPDATE' THEN
185
186 -- Quote QUOTE_NUMBER can not be accepted. Please process interest calculation
187 -- for contract CONTRACT_NUMBER up to the quote effective from date.
188 OKL_API.set_message (
189 p_app_name => 'OKL',
190 p_msg_name => 'OKL_AM_UPD_TQ_RUN_INT_CALC',
191 p_token1 => 'QUOTE_NUMBER',
192 p_token1_value => p_quote_number,
193 p_token2 => 'CONTRACT_NUMBER',
194 p_token2_value => p_contract_number);
195
196 RETURN 'N';
197
198 ELSIF p_source = 'TERMINATE' THEN
199
200 -- Contract CONTRACT_NUMBER can not be terminated. Please process Regular Stream Billing
201 -- for contract up to the termination date TERMINATION_DATE.
202 OKL_API.set_message (
203 p_app_name => 'OKL',
204 p_msg_name => 'OKL_AM_TERMT_RUN_INT_CALC',
205 p_token1 => 'CONTRACT_NUMBER',
206 p_token1_value => p_contract_number,
207 p_token2 => 'TERMINATION_DATE',
208 p_token2_value => p_trn_date);
209
210 RETURN 'N';
211
212 END IF;
213 END IF;
214 /*
215 ELSE -- rmunjulu BUG 5050158 termination before contract end date (use old logic)
216
217 -- if last int calc date is less than last scheduled int calculation then throw error
218 IF l_last_int_calc_till_date IS NULL
219 OR trunc(l_last_int_calc_till_date) < trunc(l_last_sch_int_calc_date) THEN
220
221 -- If quote_number passed then give quote message
222 IF p_source = 'CREATE' THEN
223
224 -- Termination quote cannot be created. Please process interest calculation
225 -- for contract CONTRACT_NUMBER up to the quote effective from date.
226 OKL_API.set_message (
227 p_app_name => 'OKL',
228 p_msg_name => 'OKL_AM_CREATE_TQ_RUN_INT_CALC',
229 p_token1 => 'CONTRACT_NUMBER',
230 p_token1_value => p_contract_number);
231
232 RETURN 'N';
233
234 ELSIF p_quote_number IS NOT NULL AND p_source = 'UPDATE' THEN
235
236 -- Quote QUOTE_NUMBER can not be accepted. Please process interest calculation
237 -- for contract CONTRACT_NUMBER up to the quote effective from date.
238 OKL_API.set_message (
239 p_app_name => 'OKL',
240 p_msg_name => 'OKL_AM_UPD_TQ_RUN_INT_CALC',
241 p_token1 => 'QUOTE_NUMBER',
242 p_token1_value => p_quote_number,
243 p_token2 => 'CONTRACT_NUMBER',
244 p_token2_value => p_contract_number);
245
246 RETURN 'N';
247
248 ELSIF p_source = 'TERMINATE' THEN
249
250 -- Contract CONTRACT_NUMBER can not be terminated. Please process Regular Stream Billing
251 -- for contract up to the termination date TERMINATION_DATE.
252 OKL_API.set_message (
253 p_app_name => 'OKL',
254 p_msg_name => 'OKL_AM_TERMT_RUN_INT_CALC',
255 p_token1 => 'CONTRACT_NUMBER',
256 p_token1_value => p_contract_number,
257 p_token2 => 'TERMINATION_DATE',
258 p_token2_value => p_trn_date);
259
260 RETURN 'N';
261
262 END IF;
263
264 END IF;
265
266 END IF; -- rmunjulu BUG 5050158
267 */
268 END IF;
269 IF (is_debug_statement_on) THEN
270 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Returning Y');
271 END IF;
272 IF (is_debug_procedure_on) THEN
273 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
274 END IF;
275
276 RETURN 'Y';
277
278 EXCEPTION
279
280 WHEN OKL_API.G_EXCEPTION_ERROR THEN
281 IF (is_debug_exception_on) THEN
282 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
283 END IF;
284 RETURN NULL;
285
286 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
287 IF (is_debug_exception_on) THEN
288 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
289 END IF;
290 RETURN NULL;
291
292 WHEN OTHERS THEN
293 IF (is_debug_exception_on) THEN
294 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
295 || sqlcode || ' , SQLERRM : ' || sqlerrm);
296 END IF;
297
298 OKL_API.set_message(
299 p_app_name => OKC_API.G_APP_NAME,
300 p_msg_name => G_UNEXPECTED_ERROR,
301 p_token1 => G_SQLCODE_TOKEN,
302 p_token1_value => SQLCODE,
303 p_token2 => G_SQLERRM_TOKEN,
304 p_token2_value => SQLERRM);
305
306 RETURN NULL;
307
308 END check_int_calc_done;
309
310 -- Start of Commnets
311 -- Procedure Name : get_last_run
312 -- Description : Gets the last run of TRX_MSGS
313 -- Business Rules :
314 -- Parameters : P_Trx_Id
315 -- Version : 1.0
316 -- History : RMUNJULU 24-SEP-03 3018641 created
317 -- End of Commnets
318 PROCEDURE get_last_run(
319 p_trx_id IN NUMBER,
320 x_last_run OUT NOCOPY NUMBER) IS
321
322 -- Get the last run for TRX_MSGS
323 CURSOR get_last_run_csr ( p_trx_id IN NUMBER) IS
324 SELECT NVL(MAX(TMG.tmg_run),0) last_run
325 FROM OKL_TRX_MSGS TMG
326 WHERE TMG.trx_id = p_trx_id;
327
328 l_last_run NUMBER := 0;
329 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'get_last_run';
330 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
331 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
332 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
333
334
335 BEGIN
336 IF (is_debug_procedure_on) THEN
337 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
338 END IF;
339 IF (is_debug_statement_on) THEN
340 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_trx_id: '|| p_trx_id);
341 END IF;
342
343 -- Get the last run
344 FOR get_last_run_rec IN get_last_run_csr(p_trx_id) LOOP
345
346 l_last_run := get_last_run_rec.last_run;
347
348 END LOOP;
349
350 x_last_run := l_last_run;
351 IF (is_debug_procedure_on) THEN
352 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
353 END IF;
354
355 EXCEPTION
356
357 WHEN OTHERS THEN
358 IF (is_debug_exception_on) THEN
359 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
360 || sqlcode || ' , SQLERRM : ' || sqlerrm);
361 END IF;
362 -- Set the oracle error message
363 OKL_API.set_message(p_app_name => OKC_API.G_APP_NAME,
364 p_msg_name => g_unexpected_error,
365 p_token1 => g_sqlcode_token,
366 p_token1_value => SQLCODE,
367 p_token2 => g_sqlerrm_token,
368 p_token2_value => SQLERRM);
369 x_last_run := NULL;
370
371 END get_last_run;
372
373
374 -- Start of Commnets
375 -- Procedure Name : get_set_tmg_run
376 -- Description : Gets the last run of TRX_MSGS and increments by 1 and sets TMG_RUN
377 -- Business Rules :
378 -- Parameters : P_Trx_Id
379 -- Version : 1.0
380 -- History : RMUNJULU 24-SEP-03 3018641 created
381 -- End of Commnets
382 PROCEDURE get_set_tmg_run(
383 p_trx_id IN NUMBER,
384 x_return_status OUT NOCOPY VARCHAR2) IS
385
386
387 -- Get the unfilled TMG_RUN rows for the trx_id
388 CURSOR get_empty_tmg_run_csr ( p_trx_id IN NUMBER) IS
389 SELECT TMG.id,
390 TMG.object_version_number
391 FROM OKL_TRX_MSGS TMG
392 WHERE TMG.trx_id = p_trx_id
393 AND TMG.tmg_run IS NULL;
394
395 l_last_run NUMBER;
396 lp_tmgv_tbl OKL_TRX_MSGS_PUB.tmgv_tbl_type;
397 lx_tmgv_tbl OKL_TRX_MSGS_PUB.tmgv_tbl_type;
398
399 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
400
401 l_api_version CONSTANT NUMBER := 1;
402 l_msg_count NUMBER := OKL_API.G_MISS_NUM;
403 l_msg_data VARCHAR2(2000);
404 i NUMBER := 1;
405 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'get_set_tmg_run';
406 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
407 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
408 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
409
410
411 BEGIN
412 IF (is_debug_procedure_on) THEN
413 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
414 END IF;
415 IF (is_debug_statement_on) THEN
416 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_trx_id: '|| p_trx_id);
417 END IF;
418
419 -- Get the last run
420 get_last_run(
421 p_trx_id => p_trx_id,
422 x_last_run => l_last_run);
423 IF (is_debug_statement_on) THEN
424 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called get_last_run , l_last_run: ' || l_last_run);
425 END IF;
426
427 -- increment the last run
428 l_last_run := l_last_run + 1;
429
430 -- get the rows which needs to be update with last run
431 FOR get_empty_tmg_run_rec IN get_empty_tmg_run_csr(p_trx_id) LOOP
432
433 lp_tmgv_tbl(i).id := get_empty_tmg_run_rec.id;
434 lp_tmgv_tbl(i).object_version_number := get_empty_tmg_run_rec.object_version_number;
435 lp_tmgv_tbl(i).tmg_run := l_last_run;
436
437 i := i + 1;
438
439 END LOOP;
440
441 -- Update the TMG_RUN of OKL_TRX_MSGS with l_last_run+1 for the TRX_ID with null TMG_RUN
442 IF (lp_tmgv_tbl.COUNT > 0) THEN
443
444 IF (is_debug_statement_on) THEN
445 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_TRX_MSGS_PUB.update_trx_msgs');
446 END IF;
447 OKL_TRX_MSGS_PUB.update_trx_msgs (
448 p_api_version => l_api_version,
449 p_init_msg_list => OKL_API.G_FALSE,
450 x_return_status => l_return_status,
451 x_msg_count => l_msg_count,
452 x_msg_data => l_msg_data,
453 p_tmgv_tbl => lp_tmgv_tbl,
454 x_tmgv_tbl => lx_tmgv_tbl);
455 IF (is_debug_statement_on) THEN
456 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_TRX_MSGS_PUB.update_trx_msgs , return status: ' || l_return_status);
457 END IF;
458
459 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
460 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
461 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
462 RAISE OKL_API.G_EXCEPTION_ERROR;
463 END IF;
464
465 END IF;
466
467 x_return_status := l_return_status;
468 IF (is_debug_procedure_on) THEN
469 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
470 END IF;
471
472 EXCEPTION
473
474 WHEN OKL_API.G_EXCEPTION_ERROR THEN
475 IF (is_debug_exception_on) THEN
476 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
477 END IF;
478 x_return_status := OKL_API.G_RET_STS_ERROR;
479
480 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
481 IF (is_debug_exception_on) THEN
482 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
483 END IF;
484 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
485
486 WHEN OTHERS THEN
487 IF (is_debug_exception_on) THEN
488 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
489 || sqlcode || ' , SQLERRM : ' || sqlerrm);
490 END IF;
491 -- Set the oracle error message
492 OKL_API.set_message(p_app_name => OKC_API.G_APP_NAME,
493 p_msg_name => g_unexpected_error,
494 p_token1 => g_sqlcode_token,
495 p_token1_value => SQLCODE,
496 p_token2 => g_sqlerrm_token,
497 p_token2_value => SQLERRM);
498 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
499
500 END get_set_tmg_run;
501
502
503 -- ++++++++++++++++++++ service contract integration begin ++++++++++++++++++
504
505 -- Start of comments
506 --
507 -- Function Name : check_service_link.
508 -- Description : If a link exists, the service contract information is returned back.
509 -- If no link exists, it returns NULL to service contract out variables.
510 -- Business Rules :
511 -- Parameters :
512 -- Version : 1.0
513 -- History : RMUNJULU 3061751 27-AUG-2003 Created
514 --
515 -- End of comments
516 PROCEDURE check_service_link (
517 p_api_version IN NUMBER,
518 p_init_msg_list IN VARCHAR2,
519 x_return_status OUT NOCOPY VARCHAR2,
520 x_msg_count OUT NOCOPY NUMBER,
521 x_msg_data OUT NOCOPY VARCHAR2,
522 p_lease_asset_id IN OKC_K_LINES_V.ID%TYPE,
523 x_service_contract_id OUT NOCOPY OKC_K_HEADERS_V.ID%TYPE
524 ) IS
525
526 l_api_name VARCHAR2(35) := 'check_service_link';
527 l_proc_name VARCHAR2(35) := 'CHECK_SERVICE_LINK';
528 l_api_version CONSTANT NUMBER := 1;
529 l_okl_chr_id OKC_K_HEADERS_V.ID%TYPE;
530 l_oks_chr_id OKC_K_HEADERS_V.ID%TYPE;
531 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_service_link';
532 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
533 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
534 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
535
536 G_API_TYPE VARCHAR2(20) := '_PVT';
537
538
539 -- Check if the Financial asset is serviced thru OKS - Will return the OKL Contract
540 CURSOR link_csr (p_kle_id OKC_K_LINES_V.ID%TYPE) IS
541 SELECT KREL.chr_id okl_contract_id
542 FROM OKC_K_HEADERS_B OKS_CHRB,
543 OKC_LINE_STYLES_B OKS_COV_PD_LSE,
544 OKC_K_LINES_B OKS_COV_PD_CLEB,
545 OKC_K_REL_OBJS KREL,
546 OKC_LINE_STYLES_B LNK_SRV_LSE,
547 OKC_STATUSES_B LNK_SRV_STS,
548 OKC_K_LINES_B LNK_SRV_CLEB,
549 OKC_K_ITEMS LNK_SRV_CIM
550 WHERE OKS_CHRB.scs_code = 'SERVICE'
551 AND OKS_CHRB.id = OKS_COV_PD_CLEB.dnz_chr_id
552 AND OKS_COV_PD_CLEB.lse_id = OKS_COV_PD_LSE.id
553 AND OKS_COV_PD_LSE.lty_code = 'COVER_PROD'
554 AND '#' = KREL.object1_id2
555 AND OKS_COV_PD_CLEB.id = KREL.object1_id1
556 AND KREL.rty_code = 'OKLSRV'
557 AND KREL.cle_id = LNK_SRV_CLEB.id
558 AND LNK_SRV_CLEB.lse_id = LNK_SRV_LSE.id
559 AND LNK_SRV_LSE.lty_code = 'LINK_SERV_ASSET'
560 AND LNK_SRV_CLEB.sts_code = LNK_SRV_STS.code
561 AND LNK_SRV_CLEB.id = LNK_SRV_CIM.cle_id
562 AND LNK_SRV_CIM.jtot_object1_code = 'OKX_COVASST'
563 AND LNK_SRV_CIM.object1_id2 = '#'
564 AND LNK_SRV_CIM.object1_id1 = p_kle_id;
565
566 BEGIN -- main process begins here
567 IF (is_debug_procedure_on) THEN
568 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
569 END IF;
570 IF (is_debug_statement_on) THEN
571 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_lease_asset_id: '|| p_lease_asset_id);
572 END IF;
573
574 x_return_status := OKL_API.G_RET_STS_SUCCESS;
575
576 -- call START_ACTIVITY to create savepoint, check compatibility
577 -- and initialize message list
578 x_return_status := OKL_API.START_ACTIVITY(
579 p_api_name => l_api_name,
580 p_pkg_name => G_PKG_NAME,
581 p_init_msg_list => p_init_msg_list,
582 l_api_version => l_api_version,
583 p_api_version => p_api_version,
584 p_api_type => G_API_TYPE,
585 x_return_status => x_return_status);
586
587 -- check if activity started successfully
588 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
589 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
590 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
591 raise OKL_API.G_EXCEPTION_ERROR;
592 END IF;
593
594 -- Check if the Financial Asset is Serviced thru OKS
595 FOR link_rec IN link_csr(p_lease_asset_id) LOOP
596 l_okl_chr_id := link_rec.okl_contract_id;
597 END LOOP;
598
599 IF (is_debug_statement_on) THEN
600 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_SERVICE_INTEGRATION_PVT.check_service_link');
601 END IF;
602 -- Get the Service Contract for the Leased Contract
603 OKL_SERVICE_INTEGRATION_PVT.check_service_link (
604 p_api_version => p_api_version,
605 p_init_msg_list => OKL_API.G_FALSE,
606 x_return_status => x_return_status,
607 x_msg_count => x_msg_count,
608 x_msg_data => x_msg_data,
609 p_lease_contract_id => l_okl_chr_id ,
610 x_service_contract_id => l_oks_chr_id);
611 IF (is_debug_statement_on) THEN
612 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_SERVICE_INTEGRATION_PVT.check_service_link , return status: ' || x_return_status);
613 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_oks_chr_id: ' || l_oks_chr_id);
614 END IF;
615
616 x_service_contract_id := l_oks_chr_id;
617
618 OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
619 x_msg_data => x_msg_data);
620 IF (is_debug_procedure_on) THEN
621 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
622 END IF;
623
624 EXCEPTION
625 WHEN OKL_API.G_EXCEPTION_ERROR THEN
626 IF (is_debug_exception_on) THEN
627 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
628 END IF;
629 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
630 p_api_name => l_api_name,
631 p_pkg_name => G_PKG_NAME,
632 p_exc_name => 'OKC_API.G_RET_STS_ERROR',
633 x_msg_count => x_msg_count,
634 x_msg_data => x_msg_data,
635 p_api_type => G_API_TYPE);
636
637 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
638 IF (is_debug_exception_on) THEN
639 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
640 END IF;
641 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
642 p_api_name => l_api_name,
643 p_pkg_name => G_PKG_NAME,
644 p_exc_name => 'OKC_API.G_RET_STS_UNEXP_ERROR',
645 x_msg_count => x_msg_count,
646 x_msg_data => x_msg_data,
647 p_api_type => G_API_TYPE);
648
649 WHEN OTHERS THEN
650 IF (is_debug_exception_on) THEN
651 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
652 || sqlcode || ' , SQLERRM : ' || sqlerrm);
653 END IF;
654 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
655 p_api_name => l_api_name,
656 p_pkg_name => G_PKG_NAME,
657 p_exc_name => 'OTHERS',
658 x_msg_count => x_msg_count,
659 x_msg_data => x_msg_data,
660 p_api_type => G_API_TYPE);
661
662 END check_service_link;
663
664 -- Start of comments
665 --
666 -- Function Name : check_true_partial_quote.
667 -- Description : Returns Y if TRUE partial quote(some more assets); else N or NULL
668 -- Business Rules : CALLED FROM OKL_AM_LEASE_LOAN_TRMNT_PVT, OKL_AM_TERMNT_QUOTE_PVT
669 -- Parameters :
670 -- Version : 1.0
671 -- History : RMUNJULU 3061751 27-AUG-2003 Created
672 --
673 -- End of comments
674 FUNCTION check_true_partial_quote(
675 p_quote_id IN NUMBER,
676 p_contract_id IN NUMBER) RETURN VARCHAR2 IS
677
678 -- Get the quote assets count
679 CURSOR get_quote_assets_no_csr (p_qte_id IN NUMBER) IS
680 SELECT COUNT(TQL.id) no_of_quote_assets
681 FROM OKL_TXL_QUOTE_LINES_B TQL
682 WHERE TQL.qlt_code = 'AMCFIA'
683 AND TQL.qte_id = p_qte_id;
684
685 -- Get the contract assets count - All NON Terminated Financial Assets
686 -- rmunjulu INVESTOR_DISB_ADJ
687 -- get assets with same status as contract
688 CURSOR get_contract_assets_no_csr (p_khr_id IN NUMBER) IS
689 SELECT COUNT(CLE.id) no_of_contract_assets
690 FROM OKC_K_LINES_B CLE,
691 OKC_LINE_STYLES_B LSE,
692 --OKC_STATUSES_B STS,
693 OKC_K_HEADERS_B CHR
694 WHERE CLE.lse_id = LSE.id
695 AND LSE.lty_code = 'FREE_FORM1'
696 --AND CLE.sts_code = STS.code
697 AND CLE.sts_code = CHR.sts_code
698 AND CHR.id = CLE.dnz_chr_id
699 --AND STS.ste_code NOT IN ('HOLD','EXPIRED','TERMINATED','CANCELLED') --OKC STATUSES
700 AND CLE.dnz_chr_id = p_khr_id;
701
702 -- Get the quote assets details
703 CURSOR get_asset_qty_csr (p_qte_id IN NUMBER) IS
704 SELECT TQL.kle_id,
705 TQL.asset_quantity,
706 TQL.quote_quantity
707 FROM OKL_TXL_QUOTE_LINES_B TQL
708 WHERE TQL.qlt_code = 'AMCFIA'
709 AND TQL.qte_id = p_qte_id;
710
711 l_quote_assets_no NUMBER;
712 l_contract_assets_no NUMBER;
713 l_true_partial_quote VARCHAR2(1) := 'N';
714 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_true_partial_quote';
715 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
716 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
717 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
718
719 BEGIN
720 IF (is_debug_procedure_on) THEN
721 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
722 END IF;
723 IF (is_debug_statement_on) THEN
724 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_quote_id: '|| p_quote_id);
725 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_id: '|| p_contract_id);
726 END IF;
727
728 -- Get the no of assets in quote
729 FOR get_quote_assets_no_rec
730 IN get_quote_assets_no_csr(p_quote_id) LOOP
731 l_quote_assets_no := get_quote_assets_no_rec.no_of_quote_assets;
732 END LOOP;
733
734 -- Get the no of assets in contract - non terminated
735 FOR get_contract_assets_no_rec
736 IN get_contract_assets_no_csr(p_contract_id) LOOP
737 l_contract_assets_no := get_contract_assets_no_rec.no_of_contract_assets;
738 END LOOP;
739
740 -- If quoted assets no = contract assets no
741 IF l_quote_assets_no = l_contract_assets_no THEN
742
743 -- For Each Quote Asset Check Corresponding contract asset quantity
744 -- If do not match then l_true_partial_quote = 'Y'
745 FOR get_asset_qty_rec
746 IN get_asset_qty_csr(p_quote_id) LOOP
747
748 -- Should not have any upgrade issues (when asset_qty
749 -- and quote_qty are not filled) In those cases its always
750 -- full_termination and wont get inside below IF
751
752 -- If asset_qty > quote_qty then TRUE PARTIAL
753 IF get_asset_qty_rec.asset_quantity > get_asset_qty_rec.quote_quantity THEN
754
755 l_true_partial_quote := 'Y';
756
757 END IF;
758
759 END LOOP;
760
761 ELSE -- assets number for quote and contract do not match -- so TRUE PARTIAL
762
763 l_true_partial_quote := 'Y';
764
765 END IF;
766 IF (is_debug_statement_on) THEN
767 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Returning l_true_partial_quote: '||l_true_partial_quote);
768 END IF;
769 IF (is_debug_procedure_on) THEN
770 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
771 END IF;
772
773 RETURN l_true_partial_quote;
774
775 EXCEPTION
776
777 WHEN OTHERS THEN
778 IF (is_debug_exception_on) THEN
779 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
780 || sqlcode || ' , SQLERRM : ' || sqlerrm);
781 END IF;
782
783 OKL_API.set_message(
784 p_app_name => OKC_API.G_APP_NAME,
785 p_msg_name => G_UNEXPECTED_ERROR,
786 p_token1 => G_SQLCODE_TOKEN,
787 p_token1_value => SQLCODE,
788 p_token2 => G_SQLERRM_TOKEN,
789 p_token2_value => SQLERRM);
790
791 RETURN NULL;
792
793 END check_true_partial_quote;
794
795 -- Start of comments
796 --
797 -- Function Name : check_true_partial_quote.
798 -- Description : Returns Y if TRUE partial quote(some more assets); else N or NULL
799 -- Business Rules : CALLED FROM OKL_AM_LEASE_LOAN_TRMNT_PVT
800 -- Parameters :
801 -- Version : 1.0
802 -- History : rmunjulu bug 4997075
803 --
804 -- End of comments
805 FUNCTION check_true_partial_quote_yn(
806 p_quote_id IN NUMBER,
807 p_contract_id IN NUMBER) RETURN VARCHAR2 IS
808
809 -- Get the quote assets details
810 CURSOR get_asset_qty_csr (p_qte_id IN NUMBER) IS
811 SELECT TQL.kle_id,
812 TQL.asset_quantity,
813 TQL.quote_quantity
814 FROM OKL_TXL_QUOTE_LINES_B TQL
815 WHERE TQL.qlt_code = 'AMCFIA'
816 AND TQL.qte_id = p_qte_id;
817
818 -- get any additional assets on contract which are non terminated and not in quote
819 CURSOR get_additional_assets_csr (p_khr_id IN NUMBER, p_qte_id IN NUMBER) IS
820 SELECT 1
821 FROM OKC_K_LINES_B CLE,
822 OKC_LINE_STYLES_B LSE,
823 OKC_K_HEADERS_B CHR
824 WHERE CLE.lse_id = LSE.id
825 AND LSE.lty_code = 'FREE_FORM1'
826 AND CLE.sts_code = CHR.sts_code
827 AND CHR.id = CLE.dnz_chr_id
828 AND CLE.dnz_chr_id = p_khr_id
829 AND CLE.id NOT IN
830 (SELECT kle_id
831 FROM OKL_TXL_QUOTE_LINES_B
832 WHERE qte_id = p_qte_id
833 AND qlt_code = 'AMCFIA');
834
835 l_quote_assets_no NUMBER;
836 l_contract_assets_no NUMBER;
837 l_true_partial_quote VARCHAR2(1) := 'N';
838 l_additional_assets_yn VARCHAR2(3);
839 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_true_partial_quote_yn';
840 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
841 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
842 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
843 BEGIN
844 IF (is_debug_procedure_on) THEN
845 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
846 END IF;
847 IF (is_debug_statement_on) THEN
848 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_quote_id: '|| p_quote_id);
849 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_id: '|| p_contract_id);
850 END IF;
851
852 -- Check if any more assets exist in contract which have not been quoted
853 FOR get_additional_assets_rec IN get_additional_assets_csr (p_contract_id,p_quote_id) LOOP
854 l_additional_assets_yn := 'Y';
855 END LOOP;
856
857 IF nvl(l_additional_assets_yn,'N') = 'N' THEN -- no more assets exist in contract which has not been quoted
858
859 -- For Each Quote Asset Check Corresponding contract asset quantity
860 -- If do not match then l_true_partial_quote = 'Y'
861 FOR get_asset_qty_rec
862 IN get_asset_qty_csr(p_quote_id) LOOP
863
864 -- Should not have any upgrade issues (when asset_qty
865 -- and quote_qty are not filled) In those cases its always
866 -- full_termination and wont get inside below IF
867
868 -- If asset_qty > quote_qty then TRUE PARTIAL
869 IF get_asset_qty_rec.asset_quantity > get_asset_qty_rec.quote_quantity THEN
870
871 l_true_partial_quote := 'Y';
872
873 END IF;
874
875 END LOOP;
876
877 ELSE -- some more assets exist for the contract which have not been quoted so - TRUE PARTIAL
878
879 l_true_partial_quote := 'Y';
880
881 END IF;
882 IF (is_debug_procedure_on) THEN
883 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
884 END IF;
885 IF (is_debug_statement_on) THEN
886 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Returning l_true_partial_quote: '||l_true_partial_quote);
887 END IF;
888
889 RETURN l_true_partial_quote;
890
891 EXCEPTION
892
893 WHEN OTHERS THEN
894 IF (is_debug_exception_on) THEN
895 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
896 || sqlcode || ' , SQLERRM : ' || sqlerrm);
897 END IF;
898
899 OKL_API.set_message(
900 p_app_name => OKC_API.G_APP_NAME,
901 p_msg_name => G_UNEXPECTED_ERROR,
902 p_token1 => G_SQLCODE_TOKEN,
903 p_token1_value => SQLCODE,
904 p_token2 => G_SQLERRM_TOKEN,
905 p_token2_value => SQLERRM);
906
907 RETURN NULL;
908
909 END check_true_partial_quote_yn;
910
911
912 -- Start of comments
913 --
914 -- Function Name : check_service_k_int_needed.
915 -- Description : Returns Y if Service Intergration needed; else N or NULL
916 -- Business Rules : Called from OKL_AM_LEASE_LOAN_TRMNT_PVT
917 -- Parameters :
918 -- Version : 1.0
919 -- History : RMUNJULU 3061751 27-AUG-2003 Created
920 -- RMUNJULU 05-JAN-04 SERVICE K UPDATES
921 --
922 -- End of comments
923 FUNCTION check_service_k_int_needed(
924 p_term_rec IN term_rec_type DEFAULT G_TERM_REC_EMPTY,
925 p_tcnv_rec IN tcnv_rec_type DEFAULT G_TCNV_REC_EMPTY,
926 p_partial_yn IN VARCHAR2 DEFAULT NULL,
927 p_asset_id IN NUMBER DEFAULT NULL,
928 p_source IN VARCHAR2) RETURN VARCHAR2 IS
929
930 l_service_integration_needed VARCHAR2(1) := 'N';
931 l_true_partial_quote VARCHAR2(1) := 'N';
932 l_oks_chr_id NUMBER;
933 l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
934
935 l_api_version CONSTANT NUMBER := 1;
936 l_msg_count NUMBER := OKL_API.G_MISS_NUM;
937 l_msg_data VARCHAR2(2000);
938 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_service_k_int_needed';
939 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
940 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
941 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
942
943 BEGIN
944 IF (is_debug_procedure_on) THEN
945 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
946 END IF;
947 IF (is_debug_statement_on) THEN
948 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_partial_yn: '|| p_partial_yn);
949 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_asset_id: '|| p_asset_id);
950 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_source: '|| p_source);
951 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_id: '|| p_term_rec.p_contract_id);
952 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
953 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tcnv_rec.tmt_recycle_yn: '||p_tcnv_rec.tmt_recycle_yn);
954 END IF;
955
956 -- IF SOURCE = 'TERMINATION'
957 -- If Recycle YN = 'N' AND Linked Lease AND Full Termination THEN
958 -- RETURN Y
959 -- End if ;
960 -- IF SOURCE = 'DISPOSE'
961 -- If linked lease THEN
962 -- RETURN Y
963 -- IF SOURCE = 'RETURN'
964 -- If linked lease THEN
965 -- RETURN Y
966
967 -- Check Source
968 IF p_source = 'TERMINATION' THEN -- Termination, so p_term_rec, p_tcnv_rec and p_partial_yn will be filled
969
970 -- RMUNJULU 05-JAN-04 Removed condition to check only if non recycle as this can be done in recycle too
971 -- we now check that the contract is terminated to say that service int is needed
972 -- since this procedure is called before the termination we cannot check contract is terminated or not here
973 -- so we will check that in service_k_intergration procedure.
974 -- If Recycle_YN = N
975 -- IF NVL(p_tcnv_rec.tmt_recycle_yn,'N') = 'N'
976 -- OR p_tcnv_rec.tmt_recycle_yn = OKL_API.G_MISS_CHAR THEN
977
978 -- Get the linked lease details
979 IF (is_debug_statement_on) THEN
980 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_SERVICE_INTEGRATION_PVT.check_service_link');
981 END IF;
982 OKL_SERVICE_INTEGRATION_PVT.check_service_link (
983 p_api_version => l_api_version,
984 p_init_msg_list => OKL_API.G_FALSE,
985 x_return_status => l_return_status,
986 x_msg_count => l_msg_count,
987 x_msg_data => l_msg_data,
988 p_lease_contract_id => p_term_rec.p_contract_id ,
989 x_service_contract_id => l_oks_chr_id);
990
991 IF (is_debug_statement_on) THEN
992 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_SERVICE_INTEGRATION_PVT.check_service_link , return status: ' || l_return_status);
993 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_oks_chr_id: ' || l_oks_chr_id);
994 END IF;
995 -- If linked Lease
996 IF l_return_status = OKL_API.G_RET_STS_SUCCESS
997 AND l_oks_chr_id IS NOT NULL THEN
998
999 -- Find if Full Termination
1000 IF p_partial_yn = 'Y' THEN
1001
1002 -- need to check if no more assets (This case p_quote_id is Always populated)
1003 l_true_partial_quote := check_true_partial_quote_yn( -- rmunjulu 4997075
1004 p_quote_id => p_term_rec.p_quote_id,
1005 p_contract_id => p_term_rec.p_contract_id);
1006 IF (is_debug_statement_on) THEN
1007 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called check_true_partial_quote_yn , l_true_partial_quote: ' || l_true_partial_quote);
1008 END IF;
1009
1010 ELSE -- Partial_YN = 'N'
1011
1012 l_true_partial_quote := 'N';
1013
1014 END IF;
1015
1016 -- If TRUE partial termination then
1017 IF l_true_partial_quote = 'N' THEN
1018
1019 l_service_integration_needed := 'Y';
1020
1021 END IF;
1022 ELSE -- Not Linked Lease
1023
1024 l_service_integration_needed := 'N';
1025
1026 END IF;
1027 -- ELSE -- Recycle YN = Y
1028
1029 -- l_service_integration_needed := 'N';
1030
1031 -- END IF;
1032 ELSIF p_source IN ('DISPOSE','RETURN') THEN -- DISPOSE or RETURN, so p_asset_id will be filled
1033
1034 -- Get the linked lease details -- ***
1035 --OKL_SERVICE_INTEGRATION_PVT.check_service_link (
1036 check_service_link(
1037 p_api_version => l_api_version,
1038 p_init_msg_list => OKL_API.G_FALSE,
1039 x_return_status => l_return_status,
1040 x_msg_count => l_msg_count,
1041 x_msg_data => l_msg_data,
1042 p_lease_asset_id => p_asset_id ,
1043 x_service_contract_id => l_oks_chr_id);
1044 IF (is_debug_statement_on) THEN
1045 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called check_service_link , l_oks_chr_id: ' || l_oks_chr_id);
1046 END IF;
1047
1048 -- If linked Lease
1049 IF l_return_status = OKL_API.G_RET_STS_SUCCESS
1050 AND l_oks_chr_id IS NOT NULL THEN
1051
1052 l_service_integration_needed := 'Y';
1053
1054 ELSE -- Not linked lease -- no integration needed
1055
1056 l_service_integration_needed := 'N';
1057
1058 END IF;
1059
1060 END IF;
1061 IF (is_debug_procedure_on) THEN
1062 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
1063 END IF;
1064
1065 IF (is_debug_statement_on) THEN
1066 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Returning l_service_integration_needed: '||l_service_integration_needed);
1067 END IF;
1068 -- Set the RETURN value
1069 RETURN l_service_integration_needed;
1070
1071 EXCEPTION
1072
1073 WHEN OTHERS THEN
1074 IF (is_debug_exception_on) THEN
1075 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1076 || sqlcode || ' , SQLERRM : ' || sqlerrm);
1077 END IF;
1078
1079 OKL_API.set_message(
1080 p_app_name => OKC_API.G_APP_NAME,
1081 p_msg_name => G_UNEXPECTED_ERROR,
1082 p_token1 => G_SQLCODE_TOKEN,
1083 p_token1_value => SQLCODE,
1084 p_token2 => G_SQLERRM_TOKEN,
1085 p_token2_value => SQLERRM);
1086
1087 RETURN NULL;
1088
1089 END check_service_k_int_needed;
1090
1091 -- Start of comments
1092 --
1093 -- Procedure Name : service_k_integration
1094 -- Desciption : Do the service contract integration steps (checks + notifications)
1095 -- Business Rules : Called from OKL_AM_LEASE_LOAN_TRMNT_PVT, OKL_AM_ASSET_DISPOSE_PVT, OKL_AM_ASSET_RETURN_PVT
1096 -- Parameters :
1097 -- Version : 1.0
1098 -- History : RMUNJULU 3061751 27-AUG-2003 Created
1099 -- : RMUNJULU 3061751 14-OCT-2003 Added code to get delink_yn from table
1100 -- : RMUNJULU 3061751 16-OCT-2003 Changed code to get delink_yn from OKL_SYSTEM_PARAMS_ALL_V
1101 -- : RMUNJULU 23-DEC-03 SERVICE K UPDATES
1102 -- : RMUNJULU 05-JAN-04 SERVICE K UPDATES
1103 --
1104 -- End of comments
1105 PROCEDURE service_k_integration(
1106 p_term_rec IN term_rec_type DEFAULT G_TERM_REC_EMPTY,
1107 p_transaction_id IN NUMBER DEFAULT NULL,
1108 p_transaction_date IN DATE DEFAULT NULL,
1109 p_source IN VARCHAR2,
1110 p_service_integration_needed IN VARCHAR2) IS
1111
1112 -- Get the quote acceptance date
1113 CURSOR get_quote_acc_dt_csr (p_qte_id IN NUMBER) IS
1114 SELECT QTE.date_accepted
1115 FROM OKL_TRX_QUOTES_B QTE
1116 WHERE QTE.id = p_qte_id;
1117
1118 -- Get the delink_yn value set for the org
1119 CURSOR get_setup_values_csr IS
1120 SELECT SYP.delink_yn
1121 FROM OKL_SYSTEM_PARAMS SYP;
1122
1123 l_delink_needed VARCHAR2(1) := 'N';
1124 l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
1125 l_wf_source VARCHAR2(20);
1126 l_termination_date DATE;
1127 l_quote_id NUMBER := NULL;
1128 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'service_k_integration';
1129 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1130 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1131 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1132
1133 l_api_version CONSTANT NUMBER := 1;
1134 l_msg_count NUMBER := OKL_API.G_MISS_NUM;
1135 l_msg_data VARCHAR2(2000);
1136
1137 -- RMUNJULU 23-DEC-03 SERVICE K UPDATES
1138 l_oks_chr_id NUMBER;
1139
1140 -- RMUNJULU 05-JAN-04 new cursor to get the contract status
1141 -- Get the sts_code for the contract
1142 CURSOR get_k_sts_csr (p_chr_id IN NUMBER) IS
1143 SELECT CHR.sts_code
1144 FROM OKC_K_HEADERS_B CHR
1145 WHERE CHR.id = p_chr_id;
1146
1147 -- RMUNJULU 05-JAN-04 Added variable
1148 l_sts_code OKC_K_HEADERS_B.sts_code%TYPE;
1149
1150 BEGIN
1151 IF (is_debug_procedure_on) THEN
1152 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
1153 END IF;
1154 IF (is_debug_statement_on) THEN
1155 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_transaction_id: '|| p_transaction_id);
1156 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_transaction_date: '|| p_transaction_date);
1157 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_source: '|| p_source);
1158 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_service_integration_needed: '|| p_service_integration_needed);
1159 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_id: '|| p_term_rec.p_contract_id);
1160 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
1161 END IF;
1162
1163 -- If Service Integration Needed
1164 IF NVL(p_service_integration_needed,'N') = 'Y' THEN
1165
1166 -- Request from Termination
1167 IF p_source = 'TERMINATION' THEN
1168
1169 -- p_term_rec is passed in this case
1170
1171 -- RMUNJULU 05-JAN-04 get contract status
1172 FOR get_k_sts_rec IN get_k_sts_csr (p_term_rec.p_contract_id) LOOP
1173 l_sts_code := get_k_sts_rec.sts_code;
1174 END LOOP;
1175
1176 -- RMUNJULU 05-JAN-04 added condition that contract is terminated/expired
1177 -- only then do delink (if needed) and notifications
1178 IF l_sts_code IN ('TERMINATED','EXPIRED' ) THEN
1179
1180 -- RMUNJULU 3061751 14-OCT-2003 Added code to get delink_yn value
1181 -- Check from setup if de-link needed
1182 FOR get_setup_values_rec IN get_setup_values_csr LOOP
1183 l_delink_needed := get_setup_values_rec.delink_yn;
1184 END LOOP;
1185
1186 -- If de-link needed
1187 IF NVL(l_delink_needed,'N') = 'Y' THEN
1188
1189 -- RMUNJULU 23-DEC-03 SERVICE K UPDATES
1190 -- Get the OKS contract ID before delink since after delink we loose that info
1191 IF (is_debug_statement_on) THEN
1192 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_SERVICE_INTEGRATION_PVT.check_service_link');
1193 END IF;
1194 OKL_SERVICE_INTEGRATION_PVT.check_service_link (
1195 p_api_version => l_api_version,
1196 p_init_msg_list => OKL_API.G_FALSE,
1197 x_return_status => l_return_status,
1198 x_msg_count => l_msg_count,
1199 x_msg_data => l_msg_data,
1200 p_lease_contract_id => p_term_rec.p_contract_id ,
1201 x_service_contract_id => l_oks_chr_id);
1202 IF (is_debug_statement_on) THEN
1203 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_SERVICE_INTEGRATION_PVT.check_service_link , return status: ' || l_return_status);
1204 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_oks_chr_id: ' || l_oks_chr_id);
1205 END IF;
1206
1207 IF (is_debug_statement_on) THEN
1208 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_SERVICE_INTEGRATION_PVT.delink_service_contract');
1209 END IF;
1210 -- De-link Lease from Service
1211 OKL_SERVICE_INTEGRATION_PVT.delink_service_contract(
1212 p_api_version => l_api_version,
1213 p_init_msg_list => OKL_API.G_FALSE,
1214 x_return_status => l_return_status,
1215 x_msg_count => l_msg_count,
1216 x_msg_data => l_msg_data,
1217 p_okl_chr_id => p_term_rec.p_contract_id);
1218 IF (is_debug_statement_on) THEN
1219 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_SERVICE_INTEGRATION_PVT.delink_service_contract , return status: ' || l_return_status);
1220 END IF;
1221 -- If De-link successful
1222 IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN -- SUCCESS
1223 l_wf_source := 'SUCCESS';
1224 ELSE -- De-link error -- ERROR
1225 l_wf_source := 'ERROR';
1226 END IF;
1227 ELSE -- de-link not needed -- TERMINATION
1228 l_wf_source := 'TERMINATION';
1229 END IF;
1230
1231 -- Set the termination date
1232 -- If Quote Exists then Termination date = Acceptance Date
1233 -- Else Termination date = Sysdate (ideal - do this after termination - get trn date)
1234 IF p_term_rec.p_quote_id IS NOT NULL
1235 AND p_term_rec.p_quote_id <> OKL_API.G_MISS_NUM THEN
1236
1237 -- Get the quote acceptance date
1238 FOR get_quote_acc_dt_rec
1239 IN get_quote_acc_dt_csr(p_term_rec.p_quote_id) LOOP
1240
1241 l_termination_date := get_quote_acc_dt_rec.date_accepted;
1242
1243 END LOOP;
1244 ELSE -- No quote get trn date
1245
1246 -- Get the TRN DATE, FOR NOW TRN DATE IS NOT AVAILABLE, SO SYSDATE
1247 l_termination_date := SYSDATE;
1248 END IF;
1249
1250 -- Set the Quote Id if termination request is from Quote
1251 IF p_term_rec.p_quote_id IS NOT NULL
1252 AND p_term_rec.p_quote_id <> OKL_API.G_MISS_NUM THEN
1253
1254 l_quote_id := p_term_rec.p_quote_id;
1255
1256 END IF;
1257
1258 -- Raise event to launch the service k integration workflow
1259 IF (is_debug_statement_on) THEN
1260 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event');
1261 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'p_term_rec.p_contract_id : ' || p_term_rec.p_contract_id);
1262 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_wf_source : ' || l_wf_source);
1263 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_quote_id : ' || l_quote_id);
1264 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_oks_chr_id : ' || l_oks_chr_id);
1265 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_termination_date : ' || l_termination_date);
1266 END IF;
1267 OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event(
1268 p_transaction_id => p_term_rec.p_contract_id,
1269 p_source => l_wf_source,
1270 p_quote_id => l_quote_id,
1271 p_oks_contract => l_oks_chr_id, -- RMUNJULU 23-DEC-03 SERVICE K UPDATES Pass OKS contract to WF
1272 p_transaction_date => l_termination_date);
1273 IF (is_debug_statement_on) THEN
1274 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event');
1275 END IF;
1276
1277 END IF;
1278 ELSIF p_source = 'RETURN' THEN -- Request from Asset Return
1279
1280 -- p_transaction_id and p_transaction_date will be passed
1281 -- p_transaction_id is ASSET_ID in this case
1282 -- p_transaction_date is RETURN DATE in this case
1283
1284 l_wf_source := 'RETURN';
1285
1286 IF (is_debug_statement_on) THEN
1287 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event');
1288 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'p_transaction_id : ' || p_transaction_id);
1289 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_wf_source : ' || l_wf_source);
1290 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'p_transaction_date : ' || p_transaction_date);
1291 END IF;
1292 -- Raise event to launch the service k integration workflow
1293 OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event(
1294 p_transaction_id => p_transaction_id,
1295 p_source => l_wf_source,
1296 p_transaction_date => p_transaction_date);
1297 IF (is_debug_statement_on) THEN
1298 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event');
1299 END IF;
1300
1301
1302 ELSIF p_source = 'DISPOSE_1' THEN -- Request from Asset Dispose_1
1303
1304 -- DISPOSE_1 when request from Term_with_purchase_Qte/Scrapped/Repurchase_Qte
1305 -- procedure of Asset_Dispose API. Asset is Sold/Scrapped/Sold in these cases.
1306
1307 -- p_transaction_id and p_transaction_date will be passed
1308 -- p_transaction_id is ASSET_ID in this case
1309 -- p_transaction_date is DISPOSE DATE in this case
1310
1311 l_wf_source := 'DISPOSE';
1312
1313 IF (is_debug_statement_on) THEN
1314 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event');
1315 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'p_transaction_id : ' || p_transaction_id);
1316 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_wf_source : ' || l_wf_source);
1317 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'p_transaction_date : ' || p_transaction_date);
1318 END IF;
1319 -- Raise event to launch the service k integration workflow
1320 OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event(
1321 p_transaction_id => p_transaction_id,
1322 p_source => l_wf_source,
1323 p_transaction_date => p_transaction_date);
1324 IF (is_debug_statement_on) THEN
1325 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event');
1326 END IF;
1327
1328 ELSIF p_source = 'DISPOSE_2' THEN -- Request from Asset Dispose_2
1329
1330 -- DISPOSE_2 when request from Remarketing Dispose procedure of
1331 -- Asset_Dispose API. Asset is Sold in this case.
1332
1333 -- p_transaction_id and p_transaction_date will be passed
1334 -- p_transaction_id is ASSET_ID in this case
1335 -- p_transaction_date is DISPOSE DATE in this case
1336
1337 l_wf_source := 'DISPOSE';
1338 IF (is_debug_statement_on) THEN
1339 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event');
1340 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'p_transaction_id : ' || p_transaction_id);
1341 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_wf_source : ' || l_wf_source);
1342 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'p_transaction_date : ' || p_transaction_date);
1343 END IF;
1344 -- Raise event to launch the service k integration workflow
1345 OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event(
1346 p_transaction_id => p_transaction_id,
1347 p_source => l_wf_source,
1348 p_transaction_date => p_transaction_date);
1349 IF (is_debug_statement_on) THEN
1350 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_SERVICE_K_INT_WF.raise_service_k_int_event');
1351 END IF;
1352 END IF;
1353 END IF;
1354 IF (is_debug_procedure_on) THEN
1355 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
1356 END IF;
1357
1358 EXCEPTION
1359
1360 WHEN OTHERS THEN
1361 IF (is_debug_exception_on) THEN
1362 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1363 || sqlcode || ' , SQLERRM : ' || sqlerrm);
1364 END IF;
1365
1366 OKL_API.set_message(
1367 p_app_name => OKC_API.G_APP_NAME,
1368 p_msg_name => G_UNEXPECTED_ERROR,
1369 p_token1 => G_SQLCODE_TOKEN,
1370 p_token1_value => SQLCODE,
1371 p_token2 => G_SQLERRM_TOKEN,
1372 p_token2_value => SQLERRM);
1373
1374 END service_k_integration;
1375
1376 -- Start of comments
1377 --
1378 -- Function Name : check_billing_done.
1379 -- Description : Returns 'Y' if BILLING DONE, Else 'N' or NULL
1380 -- Business Rules : Called from OKL_AM_TERMNT_QUOTE_PVT and OKL_AM_LEASE_TRMNT_PVT
1381 -- Parameters :
1382 -- Version : 1.0
1383 -- History : RMUNJULU 3061751 23-SEP-2003 Created
1384 -- RMUNJULU 05-JAN-04 SERVICE K UPDATES
1385 -- rmunjulu 6795295 modified the signature to pass
1386 -- p_rev_rec_method, p_int_cal_basis, p_oks_chr_id, p_sts_code
1387 --
1388 -- End of comments
1389 FUNCTION check_billing_done(
1390 p_contract_id IN NUMBER DEFAULT NULL,
1391 p_contract_number IN VARCHAR2 DEFAULT NULL,
1392 p_quote_number IN NUMBER DEFAULT NULL,
1393 p_trn_date IN DATE DEFAULT NULL,
1394 p_rev_rec_method IN VARCHAR2 DEFAULT NULL, -- rmunjulu 6795295
1395 p_int_cal_basis IN VARCHAR2 DEFAULT NULL, -- rmunjulu 6795295
1396 p_oks_chr_id IN NUMBER DEFAULT NULL, -- rmunjulu 6795295
1397 p_sts_code IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS -- rmunjulu 6795295
1398
1399 l_service_contract VARCHAR2(300);
1400 l_oks_chr_id NUMBER;
1401 l_api_version NUMBER := 1;
1402 l_msg_count NUMBER := OKL_API.G_MISS_NUM;
1403 l_msg_data VARCHAR2(2000);
1404 l_bill_stat_tbl OKL_BILL_STATUS_PUB.bill_stat_tbl_type; -- RMUNJULU 05-JAN-04 BPD Changed the API name
1405 l_bill_counter NUMBER;
1406 l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
1407 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_billing_done';
1408 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1409 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1410 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1411
1412 BEGIN
1413 IF (is_debug_procedure_on) THEN
1414 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
1415 END IF;
1416 IF (is_debug_statement_on) THEN
1417 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_id: '|| p_contract_id);
1418 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_number: '|| p_contract_number);
1419 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_quote_number: '|| p_quote_number);
1420 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_trn_date: '|| p_trn_date);
1421 END IF;
1422
1423 -- Process Codes and Types decided on
1424 -- =================================================
1425 -- Process Type Process Code
1426 -- =================================================
1427 --1. RENTAL RENTAL
1428 --2. SERVICE SERVICE
1429 --3. VARIABLE INTEREST VARIABLE_INTEREST
1430 --4. UBB UBB
1431 --5. LATE CHARGES LATE_CHARGES
1432 --6. LATE INTEREST LATE_INTEREST
1433 --7. EVERGREEN EVERGREEN
1434 --=================================================
1435 -- Limitations --
1436 -- For now coded for RENTAL and SERVICE billing. Will need to expand once
1437 -- other billing checks introduced
1438
1439 -- BPD Now provides a API which tells till when the billing was done, use that
1440 -- RMUNJULU 05-JAN-04 BPD Changed the API name
1441 IF (is_debug_statement_on) THEN
1442 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_BILL_STATUS_PUB.billing_status');
1443 END IF;
1444 OKL_BILL_STATUS_PUB.billing_status(
1445 p_api_version => l_api_version,
1446 p_init_msg_list => OKL_API.G_FALSE,
1447 x_return_status => l_return_status,
1448 x_msg_count => l_msg_count,
1449 x_msg_data => l_msg_data,
1450 x_bill_stat_tbl => l_bill_stat_tbl,
1451 p_khr_id => p_contract_id,
1452 p_transaction_date => p_trn_date);
1453 IF (is_debug_statement_on) THEN
1454 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_BILL_STATUS_PUB.billing_status , return status: ' || l_return_status);
1455 END IF;
1456
1457 IF l_bill_stat_tbl.COUNT > 0 THEN -- [1]
1458
1459 -- loop thru the bill_statuses table
1460 FOR l_bill_counter IN l_bill_stat_tbl.FIRST..l_bill_stat_tbl.LAST LOOP
1461
1462 -- For regular stream billing ie RENT billing
1463 IF l_bill_stat_tbl(l_bill_counter).transaction_type = 'RENTAL' THEN --[2]
1464
1465 -- Raise error if the last_bill_date is NULL
1466 -- or if the last scheduled billing date > last billing run date
1467 IF l_bill_stat_tbl(l_bill_counter).last_bill_date IS NULL
1468 OR (TRUNC(l_bill_stat_tbl(l_bill_counter).last_schedule_bill_date) >
1469 TRUNC(l_bill_stat_tbl(l_bill_counter).last_bill_date)) THEN --[3]
1470
1471 -- If quote_number passed then give quote message
1472 IF p_quote_number IS NOT NULL THEN --[4]
1473
1474 IF p_rev_rec_method = 'STREAMS'
1475 AND p_int_cal_basis = 'FIXED'
1476 AND p_oks_chr_id IS NULL
1477 AND p_sts_code = 'BOOKED' THEN -- rmunjulu 6795295
1478
1479 -- message will be set in calling procedure
1480 RETURN 'N';
1481
1482 ELSE -- throw message and return N
1483
1484 -- Quote QUOTE_NUMBER can not be accepted. Please process Regular Stream billing
1485 -- for contract CONTRACT_NUMBER up to the quote effective from date.
1486 OKL_API.set_message (
1487 p_app_name => 'OKL',
1488 p_msg_name => 'OKL_AM_ACCEPT_TQ_RUN_BILLING',
1489 p_token1 => 'QUOTE_NUMBER',
1490 p_token1_value => p_quote_number,
1491 p_token2 => 'CONTRACT_NUMBER',
1492 p_token2_value => p_contract_number);
1493
1494 RETURN 'N';
1495 END IF;
1496 ELSE -- Give contract message
1497
1498 -- Contract CONTRACT_NUMBER can not be terminated. Please process Regular Stream Billing
1499 -- for contract up to the termination date TERMINATION_DATE.
1500 OKL_API.set_message (
1501 p_app_name => 'OKL',
1502 p_msg_name => 'OKL_AM_RUN_BILLING',
1503 p_token1 => 'CONTRACT_NUMBER',
1504 p_token1_value => p_contract_number,
1505 p_token2 => 'TERMINATION_DATE',
1506 p_token2_value => p_trn_date);
1507
1508 RETURN 'N';
1509
1510 END IF; --[-4]
1511 END IF; --[-3]
1512 END IF; --[-2]
1513 END LOOP;
1514 END IF; --[-1]
1515
1516 IF (is_debug_statement_on) THEN
1517 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_SERVICE_INTEGRATION_PVT.check_service_link');
1518 END IF;
1519 -- Check if linked service contract exists for the quoted contract
1520 OKL_SERVICE_INTEGRATION_PVT.check_service_link (
1521 p_api_version => l_api_version,
1522 p_init_msg_list => OKL_API.G_FALSE,
1523 x_return_status => l_return_status,
1524 x_msg_count => l_msg_count,
1525 x_msg_data => l_msg_data,
1526 p_lease_contract_id => p_contract_id,
1527 x_service_contract_id => l_oks_chr_id);
1528 IF (is_debug_statement_on) THEN
1529 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_SERVICE_INTEGRATION_PVT.check_service_link , return status: ' || l_return_status);
1530 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_oks_chr_id : ' || l_oks_chr_id);
1531 END IF;
1532
1533 -- If linked Lease
1534 IF l_return_status = OKL_API.G_RET_STS_SUCCESS
1535 AND l_oks_chr_id IS NOT NULL THEN --[1]
1536
1537 -- Check if OKS Billing Done
1538 IF l_bill_stat_tbl.COUNT > 0 THEN --[2]
1539
1540 -- loop thru the bill_statuses table
1541 FOR l_bill_counter IN l_bill_stat_tbl.FIRST..l_bill_stat_tbl.LAST LOOP
1542
1543 -- For Service billing
1544 IF l_bill_stat_tbl(l_bill_counter).transaction_type = 'SERVICE' THEN --[3]
1545
1546 -- Raise error if the last_bill_date is NULL
1547 -- or if the last scheduled billing date > last billing run date
1548 IF l_bill_stat_tbl(l_bill_counter).last_bill_date IS NULL
1549 OR (TRUNC(l_bill_stat_tbl(l_bill_counter).last_schedule_bill_date) >
1550 TRUNC(l_bill_stat_tbl(l_bill_counter).last_bill_date)) THEN --[4]
1551
1552 -- If quote_number passed then give quote message
1553 IF p_quote_number IS NOT NULL THEN --[5]
1554
1555 -- Quote QUOTE_NUMBER can not be accepted. Please process service billing
1556 -- for contract CONTRACT_NUMBER up to the quote effective from date.
1557 OKL_API.set_message (
1558 p_app_name => 'OKL',
1559 p_msg_name => 'OKL_AM_ACCEPT_TQ_RUN_SRV_BILL',
1560 p_token1 => 'QUOTE_NUMBER',
1561 p_token1_value => p_quote_number,
1562 p_token2 => 'CONTRACT_NUMBER',
1563 p_token2_value => p_contract_number);
1564
1565 RETURN 'N';
1566
1567 ELSE -- Give contract message
1568
1569 -- Contract CONTRACT_NUMBER can not be terminated. Please process
1570 -- service billing for contract up to the termination date TERMINATION_DATE.
1571 OKL_API.set_message (
1572 p_app_name => 'OKL',
1573 p_msg_name => 'OKL_AM_RUN_SRV_BILLING',
1574 p_token1 => 'CONTRACT_NUMBER',
1575 p_token1_value => p_contract_number,
1576 p_token2 => 'TERMINATION_DATE',
1577 p_token2_value => p_trn_date);
1578
1579 RETURN 'N';
1580
1581 END IF; --[-5]
1582 END IF; --[-4]
1583 END IF; --[-3]
1584 END LOOP;
1585 END IF; --[-2]
1586 END IF; --[-1]
1587 IF (is_debug_procedure_on) THEN
1588 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
1589 END IF;
1590 IF (is_debug_statement_on) THEN
1591 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Returning Y');
1592 END IF;
1593
1594 RETURN 'Y';
1595
1596 EXCEPTION
1597
1598 WHEN OTHERS THEN
1599 IF (is_debug_exception_on) THEN
1600 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1601 || sqlcode || ' , SQLERRM : ' || sqlerrm);
1602 END IF;
1603
1604 OKL_API.set_message(
1605 p_app_name => OKC_API.G_APP_NAME,
1606 p_msg_name => G_UNEXPECTED_ERROR,
1607 p_token1 => G_SQLCODE_TOKEN,
1608 p_token1_value => SQLCODE,
1609 p_token2 => G_SQLERRM_TOKEN,
1610 p_token2_value => SQLERRM);
1611
1612 RETURN NULL;
1613
1614 END check_billing_done;
1615
1616
1617 -- Start of comments
1618 --
1619 -- Function Name : check_stream_billing_done.
1620 -- Description : Returns 'Y' if STREAM BASED BILLING DONE, Else 'N' or NULL
1621 -- Business Rules : Called from OKL_AM_TERMNT_QUOTE_PVT
1622 -- Parameters :
1623 -- Version : 1.0
1624 -- History : RMUNJULU bug 6736148 09-JAN-2008 Created
1625 --
1626 -- End of comments
1627 FUNCTION check_stream_billing_done(
1628 p_contract_id IN NUMBER DEFAULT NULL,
1629 p_contract_number IN VARCHAR2 DEFAULT NULL,
1630 p_quote_number IN NUMBER DEFAULT NULL,
1631 p_trn_date IN DATE DEFAULT NULL) RETURN VARCHAR2 IS
1632
1633 l_service_contract VARCHAR2(300);
1634 l_oks_chr_id NUMBER;
1635 l_api_version NUMBER := 1;
1636 l_msg_count NUMBER := OKL_API.G_MISS_NUM;
1637 l_msg_data VARCHAR2(2000);
1638 l_bill_stat_tbl OKL_BILL_STATUS_PUB.bill_stat_tbl_type;
1639 l_bill_counter NUMBER;
1640 l_return_status VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
1641 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_stream_billing_done';
1642 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1643 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1644 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1645
1646 BEGIN
1647 IF (is_debug_procedure_on) THEN
1648 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
1649 END IF;
1650 IF (is_debug_statement_on) THEN
1651 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_id: '|| p_contract_id);
1652 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_number: '|| p_contract_number);
1653 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_quote_number: '|| p_quote_number);
1654 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_trn_date: '|| p_trn_date);
1655 END IF;
1656
1657 IF (is_debug_statement_on) THEN
1658 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_BILL_STATUS_PUB.billing_status');
1659 END IF;
1660 OKL_BILL_STATUS_PUB.billing_status(
1661 p_api_version => l_api_version,
1662 p_init_msg_list => OKL_API.G_FALSE,
1663 x_return_status => l_return_status,
1664 x_msg_count => l_msg_count,
1665 x_msg_data => l_msg_data,
1666 x_bill_stat_tbl => l_bill_stat_tbl,
1667 p_khr_id => p_contract_id,
1668 p_transaction_date => p_trn_date);
1669 IF (is_debug_statement_on) THEN
1670 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_BILL_STATUS_PUB.billing_status , return status: ' || l_return_status);
1671 END IF;
1672
1673 IF l_bill_stat_tbl.COUNT > 0 THEN -- [1]
1674
1675 -- loop thru the bill_statuses table
1676 FOR l_bill_counter IN l_bill_stat_tbl.FIRST..l_bill_stat_tbl.LAST LOOP
1677
1678 -- For regular stream billing ie RENT billing
1679 IF l_bill_stat_tbl(l_bill_counter).transaction_type = 'RENTAL' THEN --[2]
1680
1681 -- Raise error if the last_bill_date is NULL
1682 -- or if the last scheduled billing date > last billing run date
1683 IF l_bill_stat_tbl(l_bill_counter).last_bill_date IS NULL
1684 OR (TRUNC(l_bill_stat_tbl(l_bill_counter).last_schedule_bill_date) >
1685 TRUNC(l_bill_stat_tbl(l_bill_counter).last_bill_date)) THEN --[3]
1686
1687 -- If quote_number passed then give quote message
1688 IF p_quote_number IS NOT NULL THEN --[4]
1689
1690 RETURN 'N';
1691
1692 ELSE -- Give contract message
1693
1694 RETURN 'N';
1695
1696 END IF; --[-4]
1697 END IF; --[-3]
1698 END IF; --[-2]
1699 END LOOP;
1700 END IF; --[-1]
1701
1702 IF (is_debug_procedure_on) THEN
1703 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
1704 END IF;
1705 IF (is_debug_statement_on) THEN
1706 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Returning Y');
1707 END IF;
1708
1709 RETURN 'Y';
1710
1711 EXCEPTION
1712
1713 WHEN OTHERS THEN
1714 IF (is_debug_exception_on) THEN
1715 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
1716 || sqlcode || ' , SQLERRM : ' || sqlerrm);
1717 END IF;
1718
1719 OKL_API.set_message(
1720 p_app_name => OKC_API.G_APP_NAME,
1721 p_msg_name => G_UNEXPECTED_ERROR,
1722 p_token1 => G_SQLCODE_TOKEN,
1723 p_token1_value => SQLCODE,
1724 p_token2 => G_SQLERRM_TOKEN,
1725 p_token2_value => SQLERRM);
1726
1727 RETURN NULL;
1728
1729 END check_stream_billing_done;
1730
1731 -- +++++++++++++++++++++ service contract integration end ++++++++++++++++++
1732
1733 -- Start of comments
1734 --
1735 -- Procedure Name : validate_contract
1736 -- Description : checks the validity of the contract
1737 -- Throws the proper error message if the contract found to be
1738 -- in the wrong status. p_control_flag decides which logic need
1739 -- to be applied for checking contract status
1740 -- The various controls this cater to are
1741 -- ------------------------------------------------------------
1742 -- P_Control_Flag value When Checking from
1743 -- ------------------------------------------------------------
1744 -- 1. CONTRACT_TERMINATE_SCRN -- Request termination screen
1745 -- 2. TRMNT_QUOTE_CREATE -- Termination quote create
1746 -- 3. RESTR_QUOTE_CREATE -- Resturcture quote create
1747 -- 4. REPUR_QUOTE_CREATE -- Repurchase quote create
1748 -- 5. TRMNT_QUOTE_UPDATE -- Termination quote update
1749 -- 6. RESTR_QUOTE_UPDATE -- Resturcture quote update
1750 -- 7. REPUR_QUOTE_UPDATE -- Repurchase quote update
1751 -- 8. BATCH_PROCESS -- Batch process
1752 -- 9. ASSET_RETURN_CREATE -- Asset return create
1753 -- 10.ASSET_RETURN_UPDATE -- Asset return update
1754 -- 11.BATCH_PROCESS_CHR -- Single request from batch
1755 -- Business Rules :
1756 -- Parameters : api version, init msg list, return status, msg count,
1757 -- msg data, contract id, control flag, status code
1758 -- Version : 1.0
1759 -- History : RMUNJULU -- 11-DEC-02: Bug # 2484327 : Added code in
1760 -- TRMNT_QUOTE_CREATE condition to check for termination trns
1761 -- : RMUNJULU 18-DEC-02 2484327. Added code in CONTRACT_TERMINATE_SCRN
1762 -- condition to check for term trn and if no accepted qte
1763 -- : RMUNJULU 2724951 02-JAN-02 Changed the if for checks in
1764 -- condition CONTRACT_TERMINATE_SCRN
1765 -- : RMUNJULU 25-FEB-03 2818866 Changed code for condition
1766 -- BATCH_PROCESS removed contract status check
1767 -- : RMUNJULU 06-MAR-03 Performance Fix Replaced K_HDR_FULL
1768 -- End of comments
1769
1770 PROCEDURE validate_contract(
1771 p_api_version IN NUMBER,
1772 p_init_msg_list IN VARCHAR2,
1773 x_return_status OUT NOCOPY VARCHAR2,
1774 x_msg_count OUT NOCOPY NUMBER,
1775 x_msg_data OUT NOCOPY VARCHAR2,
1776 p_contract_id IN NUMBER,
1777 p_control_flag IN VARCHAR2,
1778 x_contract_status OUT NOCOPY VARCHAR2) IS
1779
1780 -- Cursor to get the contract details
1781 -- RMUNJULU 06-MAR-03 Performance Fix Replaced K_HDR_FULL
1782 CURSOR k_header_csr IS
1783 SELECT chr.id,
1784 chr.contract_number,
1785 chr.template_yn,
1786 chr.end_date,
1787 khr.deal_type,
1788 chr.scs_code,
1789 chr.sts_code,
1790 sts.meaning
1791 FROM OKC_K_HEADERS_V chr,
1792 OKC_STATUSES_V sts,
1793 OKL_K_HEADERS_V khr
1794 WHERE chr.id = p_contract_id
1795 AND chr.sts_code = sts.code
1796 AND chr.id = khr.id;
1797
1798 -- This cursor is used by the Create Asset Return process to make
1799 -- sure that the contract has a logical post
1800 -- booking status.
1801 CURSOR k_contractstatus_csr IS
1802 SELECT khr.contract_number, sts.ste_code, sts.meaning
1803 FROM okc_k_headers_b khr, okc_statuses_v sts
1804 WHERE khr.sts_code = sts.code
1805 AND khr.id = p_contract_id;
1806
1807 -- Cursor to check if contract locked
1808 CURSOR k_locks_csr IS
1809 SELECT 'x'
1810 FROM OKC_K_PROCESSES v
1811 WHERE v.chr_id = p_contract_id
1812 AND v.in_process_yn = 'Y';
1813
1814 -- Cursor to get the service requests of contract
1815 CURSOR k_service_request_csr IS
1816 SELECT 'x'
1817 FROM OKX_INCIDENT_STATUSES_V xis,
1818 OKC_K_LINES_B cle
1819 WHERE cle.id = xis.contract_service_id
1820 AND cle.dnz_chr_id = p_contract_id
1821 AND xis.status_code IN ('OPEN');
1822
1823
1824 -- Cursor to get accepted quotes for contract
1825 CURSOR k_accepted_quote_csr IS
1826 SELECT 'x'
1827 FROM OKL_TRX_QUOTES_V
1828 WHERE khr_id = p_contract_id
1829 AND qst_code = 'ACCEPTED'
1830 AND (qtp_code LIKE 'TER%' OR qtp_code LIKE 'RES%');
1831
1832
1833
1834 k_header_rec k_header_csr%ROWTYPE;
1835 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1836 l_chg_request_in_process VARCHAR2(1) := '?';
1837 l_service_request VARCHAR2(1) := '?';
1838 l_quotes_exist VARCHAR2(1) := '?';
1839 l_tsu_code VARCHAR2(30) := '?';
1840 l_sys_date DATE;
1841 l_invalid_contract EXCEPTION;
1842 l_ste_code VARCHAR2(30);
1843 l_contract_number VARCHAR2(120);
1844 l_meaning VARCHAR2(90);
1845 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'validate_contract';
1846 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
1847 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
1848 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
1849
1850
1851 -- RMUNJULU -- 11-DEC-02 Bug # 2484327 -- Added variables for checking
1852 -- related to asset level termination
1853 lx_trn_tbl OKL_AM_UTIL_PVT.trn_tbl_type;
1854 i NUMBER;
1855
1856 -- RMUNJULU 18-DEC-02 2484327 -- Added variable for checking
1857 -- related to asset level termination
1858 lx_quote_tbl OKL_AM_UTIL_PVT.quote_tbl_type;
1859
1860
1861
1862 BEGIN
1863 IF (is_debug_procedure_on) THEN
1864 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
1865 END IF;
1866 IF (is_debug_statement_on) THEN
1867 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_contract_id: '|| p_contract_id);
1868 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_control_flag: '|| p_control_flag);
1869 END IF;
1870
1871 x_return_status := OKL_API.G_RET_STS_SUCCESS;
1872
1873 SELECT SYSDATE INTO l_sys_date FROM DUAL;
1874
1875 OPEN k_header_csr;
1876 FETCH k_header_csr INTO k_header_rec;
1877 CLOSE k_header_csr;
1878
1879 OPEN k_contractstatus_csr;
1880 FETCH k_contractstatus_csr INTO l_contract_number,l_ste_code, l_meaning;
1881 CLOSE k_contractstatus_csr;
1882
1883 -- Check contract id passed is valid
1884 IF k_header_rec.id IS NULL OR k_header_rec.contract_number IS NULL THEN
1885
1886 OKL_API.set_message( p_app_name => OKC_API.G_APP_NAME,
1887 p_msg_name => OKC_API.G_INVALID_VALUE,
1888 p_token1 => OKC_API.G_COL_NAME_TOKEN,
1889 p_token1_value => 'contract id');
1890
1891 RAISE l_invalid_contract;
1892 END IF;
1893
1894 -- Check Lease or Loan
1895 IF NOT ( (k_header_rec.scs_code = 'LOAN') -- Loan
1896 OR (k_header_rec.scs_code = 'LEASE'
1897 AND k_header_rec.deal_type LIKE 'LOAN%') -- Loan
1898 OR (k_header_rec.scs_code = 'LEASE'
1899 AND k_header_rec.deal_type LIKE 'LEASE%')-- Lease
1900 ) THEN
1901 -- Contract CONTRACT_NUMBER is neither a Lease nor a Loan.
1902 OKL_API.set_message( p_app_name => G_APP_NAME,
1903 p_msg_name => 'OKL_AM_K_TYPE_ERROR',
1904 p_token1 => 'CONTRACT_NUMBER',
1905 p_token1_value => k_header_rec.contract_number);
1906 RAISE l_invalid_contract;
1907 END IF;
1908
1909
1910 /* -- rmunjulu PERF
1911 OPEN k_locks_csr;
1912 FETCH k_locks_csr INTO l_chg_request_in_process;
1913 CLOSE k_locks_csr;
1914
1915 OPEN k_service_request_csr;
1916 FETCH k_service_request_csr INTO l_service_request;
1917 CLOSE k_service_request_csr;
1918
1919 OPEN k_accepted_quote_csr;
1920 FETCH k_accepted_quote_csr INTO l_quotes_exist;
1921 CLOSE k_accepted_quote_csr;
1922 */
1923
1924
1925 --******************************
1926 -- CONTRACT_TERMINATE_SCRN
1927 --******************************
1928
1929 -- If from contract termination screen
1930 IF (p_control_flag = 'CONTRACT_TERMINATE_SCRN') THEN
1931
1932 -- rmunjulu PERF -- start
1933 OPEN k_locks_csr;
1934 FETCH k_locks_csr INTO l_chg_request_in_process;
1935 CLOSE k_locks_csr;
1936
1937 OPEN k_service_request_csr;
1938 FETCH k_service_request_csr INTO l_service_request;
1939 CLOSE k_service_request_csr;
1940 -- rmunjulu PERF -- End
1941
1942 -- Check if template
1943 IF k_header_rec.template_yn = OKL_API.G_TRUE THEN
1944 -- Message: This operation is not allowed on contract template-(NUMBER).
1945 OKL_API.set_message(p_app_name => OKC_API.G_APP_NAME,
1946 p_msg_name => 'OKC_K_TEMPLATE',
1947 p_token1 => 'NUMBER',
1948 p_token1_value => k_header_rec.contract_number);
1949 RAISE l_invalid_contract;
1950 END IF;
1951
1952 -- Check if locked
1953 IF l_chg_request_in_process = 'x' THEN
1954 -- Message: You cannot modify this contract now because a
1955 -- change request is active. Please try later.
1956 OKL_API.set_message(p_app_name => OKC_API.G_APP_NAME,
1957 p_msg_name => 'OKC_K_LOCKED');
1958 RAISE l_invalid_contract;
1959 END IF;
1960
1961 -- Check if service requests found
1962 IF l_service_request = 'x' THEN
1963 -- Message: You cannot terminate this contract/line because a service
1964 --request is pending against this contract/line. Please try again later.
1965 OKL_API.set_message(p_app_name => OKC_API.G_APP_NAME,
1966 p_msg_name => 'OKC_SR_PENDING');
1967 RAISE l_invalid_contract;
1968 END IF;
1969
1970
1971
1972 -- Check user status
1973 IF (k_header_rec.sts_code NOT IN ('BOOKED', 'EVERGREEN')) THEN
1974 -- Message: Contract (CONTRACT_NUMBER) is (STATUS).
1975 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
1976 p_msg_name => 'OKL_AM_CONTRACT_INACTIVE',
1977 p_token1 => 'CONTRACT_NUMBER',
1978 p_token1_value => k_header_rec.contract_number,
1979 p_token2 => 'STATUS',
1980 p_token2_value => k_header_rec.meaning);
1981 RAISE l_invalid_contract;
1982 END IF;
1983
1984 -- RMUNJULU 18-DEC-02 2484327 -- START --
1985
1986 -- *****************
1987 -- IF unprocessed termination trn exists for the contract then error
1988 -- *****************
1989
1990
1991 IF (is_debug_statement_on) THEN
1992 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_contract_transactions');
1993 END IF;
1994 -- Get all the unprocessed transactions for the contract
1995 OKL_AM_UTIL_PVT.get_contract_transactions (
1996 p_khr_id => k_header_rec.id,
1997 x_trn_tbl => lx_trn_tbl,
1998 x_return_status => l_return_status);
1999 IF (is_debug_statement_on) THEN
2000 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.get_contract_transactions , return status: ' || l_return_status);
2001 END IF;
2002
2003
2004 -- Check the return status
2005 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2006
2007 -- Error occured in util proc, message set by util proc raise exp
2008 RAISE l_invalid_contract;
2009
2010 END IF;
2011
2012
2013 -- Check if termination transaction exists for the contract
2014 IF lx_trn_tbl.COUNT > 0 THEN
2015
2016 -- A termination transaction for the contract CONTRACT_NUMBER
2017 -- is already in progress.
2018 OKL_API.set_message (
2019 p_app_name => 'OKL',
2020 p_msg_name => 'OKL_AM_K_PENDING_TRN_ERROR',
2021 p_token1 => 'CONTRACT_NUMBER',
2022 p_token1_value => k_header_rec.contract_number);
2023
2024 RAISE l_invalid_contract;
2025
2026 END IF;
2027
2028
2029 -- *****************
2030 -- IF NO accepted quote with no trn exists for contract then error
2031 -- *****************
2032
2033 IF (is_debug_statement_on) THEN
2034 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_non_trn_contract_quotes');
2035 END IF;
2036 -- Get accepted quote for contract with no trn
2037 OKL_AM_UTIL_PVT.get_non_trn_contract_quotes (
2038 p_khr_id => k_header_rec.id,
2039 x_quote_tbl => lx_quote_tbl,
2040 x_return_status => l_return_status);
2041 IF (is_debug_statement_on) THEN
2042 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.get_non_trn_contract_quotes , return status: ' || l_return_status);
2043 END IF;
2044
2045 -- Check the return status
2046 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2047
2048 -- Error occured in util proc, message set by util proc raise exp
2049 RAISE l_invalid_contract;
2050
2051 END IF;
2052
2053 -- Check if accepted quote exists for the contract or contract reached end
2054 -- RMUNJULU 02-JAN-03 2724951 Changed OR to AND in the IF
2055 IF lx_quote_tbl.COUNT = 0
2056 AND k_header_rec.end_date > l_sys_date THEN
2057
2058 -- Cannot terminate contract CONTRACT_NUMBER since no
2059 -- accepted quotes exists nor contract has reached its end date.
2060 OKL_API.set_message (
2061 p_app_name => G_APP_NAME,
2062 p_msg_name => 'OKL_AM_QTE_EXIST_NOT_REACH_END',
2063 p_token1 => 'CONTRACT_NUMBER',
2064 p_token1_value => k_header_rec.contract_number);
2065
2066
2067 RAISE l_invalid_contract;
2068
2069 END IF;
2070
2071 -- RMUNJULU 18-DEC-02 2484327 -- END --
2072
2073 --******************************
2074 -- TRMNT_QUOTE_CREATE
2075 --******************************
2076
2077 -- If from create termination quote
2078 ELSIF (p_control_flag = 'TRMNT_QUOTE_CREATE') THEN
2079
2080 -- Check user status
2081 IF k_header_rec.sts_code NOT IN ('BOOKED', 'EVERGREEN', 'BANKRUPTCY_HOLD',
2082 'LITIGATION_HOLD', 'TERMINATION_HOLD') THEN
2083 -- Message: Contract (CONTRACT_NUMBER) is (STATUS).
2084 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
2085 p_msg_name => 'OKL_AM_CONTRACT_INACTIVE',
2086 p_token1 => 'CONTRACT_NUMBER',
2087 p_token1_value => k_header_rec.contract_number,
2088 p_token2 => 'STATUS',
2089 p_token2_value => k_header_rec.meaning);
2090 RAISE l_invalid_contract;
2091 END IF;
2092
2093
2094 -- RMUNJULU -- 11-DEC-02 Bug # 2484327 -- Added code to check based on
2095 -- asset level termination changes
2096
2097 -- *****************
2098 -- IF unprocessed FULL termination trn exists for the contract then error
2099 -- *****************
2100
2101 IF (is_debug_statement_on) THEN
2102 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_contract_transactions');
2103 END IF;
2104 -- Get all the unprocessed transactions for the contract
2105 OKL_AM_UTIL_PVT.get_contract_transactions (
2106 p_khr_id => k_header_rec.id,
2107 x_trn_tbl => lx_trn_tbl,
2108 x_return_status => l_return_status);
2109 IF (is_debug_statement_on) THEN
2110 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.get_contract_transactions , return status: ' || l_return_status);
2111 END IF;
2112
2113 -- Check the return status
2114 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2115
2116 -- Error occured in util proc, message set by util proc raise exp
2117 RAISE l_invalid_contract;
2118
2119 END IF;
2120
2121 -- Check if termination transaction exists for the contract
2122 IF lx_trn_tbl.COUNT > 0 THEN
2123
2124 -- Check if unprocessed FULL termination trn exists
2125 i := lx_trn_tbl.FIRST;
2126
2127 LOOP
2128
2129 --IF lx_trn_tbl(i).tcn_type = 'TMT' THEN -- FULL termination
2130 IF lx_trn_tbl(i).tcn_type in ('TMT', 'EVG') THEN -- akrangan bug 5354501 fix added 'EVG'
2131 -- A termination transaction for the contract CONTRACT_NUMBER
2132 -- is already in progress.
2133 OKL_API.set_message (
2134 p_app_name => 'OKL',
2135 p_msg_name => 'OKL_AM_K_PENDING_TRN_ERROR',
2136 p_token1 => 'CONTRACT_NUMBER',
2137 p_token1_value => k_header_rec.contract_number);
2138
2139 RAISE l_invalid_contract;
2140
2141 END IF;
2142
2143 EXIT WHEN (i = lx_trn_tbl.LAST);
2144 i := lx_trn_tbl.NEXT(i);
2145
2146 END LOOP;
2147
2148 END IF;
2149
2150
2151 --******************************
2152 -- RESTR_QUOTE_CREATE
2153 --******************************
2154
2155 -- If from create restructure quote
2156 ELSIF (p_control_flag = 'RESTR_QUOTE_CREATE') THEN
2157
2158 -- Check user status
2159 IF k_header_rec.sts_code NOT IN ( 'BOOKED', 'BANKRUPTCY_HOLD',
2160 'LITIGATION_HOLD') THEN
2161 -- Message: Contract (CONTRACT_NUMBER) is (STATUS).
2162 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
2163 p_msg_name => 'OKL_AM_CONTRACT_INACTIVE',
2164 p_token1 => 'CONTRACT_NUMBER',
2165 p_token1_value => k_header_rec.contract_number,
2166 p_token2 => 'STATUS',
2167 p_token2_value => k_header_rec.meaning);
2168 RAISE l_invalid_contract;
2169 END IF;
2170
2171 --******************************
2172 -- REPUR_QUOTE_CREATE
2173 --******************************
2174
2175 -- If from create repurchase quote
2176 ELSIF (p_control_flag = 'REPUR_QUOTE_CREATE') THEN
2177
2178 -- Check user status
2179 IF k_header_rec.sts_code NOT IN ( 'TERMINATED','EXPIRED') THEN
2180 -- Message: Contract CONTRACT_NUMBER is still STATUS.
2181 -- Unable to generate the quote until the contract
2182 -- has been terminated or expired.
2183 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
2184 p_msg_name => 'OKL_AM_CONTRACT_STILL_ACTIVE',
2185 p_token1 => 'CONTRACT_NUMBER',
2186 p_token1_value => k_header_rec.contract_number,
2187 p_token2 => 'STATUS',
2188 p_token2_value => k_header_rec.meaning);
2189 RAISE l_invalid_contract;
2190 END IF;
2191
2192 --******************************
2193 -- TRMNT_QUOTE_UPDATE
2194 --******************************
2195
2196 -- If from update termination quote
2197 ELSIF (p_control_flag = 'TRMNT_QUOTE_UPDATE') THEN
2198
2199 -- Check user status
2200 IF k_header_rec.sts_code NOT IN ('BOOKED', 'EVERGREEN', 'BANKRUPTCY_HOLD',
2201 'LITIGATION_HOLD', 'TERMINATION_HOLD') THEN
2202 -- Message: Contract (CONTRACT_NUMBER) is (STATUS).
2203 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
2204 p_msg_name => 'OKL_AM_CONTRACT_INACTIVE',
2205 p_token1 => 'CONTRACT_NUMBER',
2206 p_token1_value => k_header_rec.contract_number,
2207 p_token2 => 'STATUS',
2208 p_token2_value => k_header_rec.meaning);
2209 RAISE l_invalid_contract;
2210 END IF;
2211
2212 --******************************
2213 -- RESTR_QUOTE_UPDATE
2214 --******************************
2215
2216 -- If from update restructure quote
2217 ELSIF (p_control_flag = 'RESTR_QUOTE_UPDATE') THEN
2218
2219 -- Check user status
2220 IF k_header_rec.sts_code NOT IN ( 'BOOKED',
2221 'BANKRUPTCY_HOLD',
2222 'LITIGATION_HOLD') THEN
2223 -- Message: Contract (CONTRACT_NUMBER) is (STATUS).
2224 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
2225 p_msg_name => 'OKL_AM_CONTRACT_INACTIVE',
2226 p_token1 => 'CONTRACT_NUMBER',
2227 p_token1_value => k_header_rec.contract_number,
2228 p_token2 => 'STATUS',
2229 p_token2_value => k_header_rec.meaning);
2230 RAISE l_invalid_contract;
2231 END IF;
2232
2233 --******************************
2234 -- REPUR_QUOTE_UPDATE
2235 --******************************
2236
2237 -- If from update repurchase quote
2238 ELSIF (p_control_flag = 'REPUR_QUOTE_UPDATE') THEN
2239
2240 -- Check user status
2241 IF k_header_rec.sts_code NOT IN ( 'TERMINATED','EXPIRED') THEN
2242 -- Message: Contract CONTRACT_NUMBER is still STATUS.
2243 -- Unable to generate the quote until the contract
2244 -- has been terminated or expired.
2245 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
2246 p_msg_name => 'OKL_AM_CONTRACT_STILL_ACTIVE',
2247 p_token1 => 'CONTRACT_NUMBER',
2248 p_token1_value => k_header_rec.contract_number,
2249 p_token2 => 'STATUS',
2250 p_token2_value => k_header_rec.meaning);
2251 RAISE l_invalid_contract;
2252 END IF;
2253
2254 --******************************
2255 -- BATCH_PROCESS
2256 --******************************
2257
2258 -- If from batch process
2259 ELSIF (p_control_flag = 'BATCH_PROCESS') THEN
2260
2261 -- Check if template
2262 IF k_header_rec.template_yn = OKL_API.G_TRUE THEN
2263 -- Message: This operation is not allowed on contract template-(NUMBER).
2264 OKL_API.set_message(p_app_name => OKC_API.G_APP_NAME,
2265 p_msg_name => 'OKC_K_TEMPLATE',
2266 p_token1 => 'NUMBER',
2267 p_token1_value => k_header_rec.contract_number);
2268 RAISE l_invalid_contract;
2269 END IF;
2270
2271 /*-- rmunjulu PERF -- Not required
2272 -- Check if locked
2273 IF l_chg_request_in_process = 'x' THEN
2274 -- Message: You cannot modify this contract now because a
2275 -- change request is active. Please try later.
2276 OKL_API.set_message(p_app_name => OKC_API.G_APP_NAME,
2277 p_msg_name => 'OKC_K_LOCKED');
2278 RAISE l_invalid_contract;
2279 END IF;
2280
2281 --Check if service requests found
2282 IF l_service_request = 'x' THEN
2283 -- Message: You cannot terminate this contract/line because a service
2284 --request is pending against this contract/line. Please try again later.
2285 OKL_API.set_message(p_app_name => OKC_API.G_APP_NAME,
2286 p_msg_name => 'OKC_SR_PENDING');
2287 RAISE l_invalid_contract;
2288 END IF;
2289 */
2290
2291
2292 --******************************
2293 -- BATCH_PROCESS_CHR
2294 --******************************
2295
2296 -- If from batch process for single contract request
2297 ELSIF (p_control_flag = 'BATCH_PROCESS_CHR') THEN
2298
2299 -- Check if template
2300 IF k_header_rec.template_yn = OKL_API.G_TRUE THEN
2301 -- Message: This operation is not allowed on contract template-(NUMBER).
2302 OKL_API.set_message(p_app_name => OKC_API.G_APP_NAME,
2303 p_msg_name => 'OKC_K_TEMPLATE',
2304 p_token1 => 'NUMBER',
2305 p_token1_value => k_header_rec.contract_number);
2306 RAISE l_invalid_contract;
2307 END IF;
2308
2309 /*-- rmunjulu PERF -- Not required
2310 -- Check if locked
2311 IF l_chg_request_in_process = 'x' THEN
2312 -- Message: You cannot modify this contract now because a
2313 -- change request is active. Please try later.
2314 OKL_API.set_message(p_app_name => OKC_API.G_APP_NAME,
2315 p_msg_name => 'OKC_K_LOCKED');
2316 RAISE l_invalid_contract;
2317 END IF;
2318
2319 --Check if service requests found
2320 IF l_service_request = 'x' THEN
2321 -- Message: You cannot terminate this contract/line because a service
2322 --request is pending against this contract/line. Please try again later.
2323 OKL_API.set_message(p_app_name => OKC_API.G_APP_NAME,
2324 p_msg_name => 'OKC_SR_PENDING');
2325 RAISE l_invalid_contract;
2326 END IF;
2327 */
2328
2329 /*
2330 -- Check user status
2331 IF k_header_rec.sts_code <> 'BOOKED' THEN
2332 -- Message: Contract (CONTRACT_NUMBER) is (STATUS).
2333 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
2334 p_msg_name => 'OKL_AM_CONTRACT_INACTIVE',
2335 p_token1 => 'CONTRACT_NUMBER',
2336 p_token1_value => k_header_rec.contract_number,
2337 p_token2 => 'STATUS',
2338 p_token2_value => k_header_rec.meaning);
2339 RAISE l_invalid_contract;
2340 END IF;
2341 */
2342
2343 -- rmunjulu PERF -- Moved cursor open here
2344 OPEN k_accepted_quote_csr;
2345 FETCH k_accepted_quote_csr INTO l_quotes_exist;
2346 CLOSE k_accepted_quote_csr;
2347
2348 -- Check if accepted quote exists
2349 IF (l_quotes_exist = 'x') THEN
2350 -- Message: Cannot terminate contract (CONTRACT_NUMBER) since
2351 -- accepted quote exists.
2352 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
2353 p_msg_name => 'OKL_AM_QUOTES_EXIST',
2354 p_token1 => 'CONTRACT_NUMBER',
2355 p_token1_value => k_header_rec.contract_number);
2356 RAISE l_invalid_contract;
2357 END IF;
2358
2359 --******************************
2360 -- ASSET_RETURN_CREATE
2361 --******************************
2362
2363 -- If from create asset return
2364 ELSIF (p_control_flag = 'ASSET_RETURN_CREATE') THEN
2365
2366 -- Check contract status
2367 IF l_ste_code IS NOT NULL AND l_ste_code IN ('ENTERED','SIGNED','CANCELLED') THEN
2368 -- Message: Contract CONTRACT_NUMBER has invalid post-booking status - STATUS.
2369 -- Unable to create asset return for this contract.
2370
2371 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
2372 p_msg_name => 'OKL_AM_K_INVALID_STATUS',
2373 p_token1 => 'CONTRACT_NUMBER',
2374 p_token1_value => l_contract_number,
2375 p_token2 => 'STATUS',
2376 p_token2_value => l_meaning);
2377 RAISE l_invalid_contract;
2378 END IF;
2379
2380 --******************************
2381 -- ASSET_RETURN_UPDATE
2382 --******************************
2383
2384 -- If from update asset return
2385 ELSIF (p_control_flag = 'ASSET_RETURN_UPDATE') THEN
2386
2387 -- Check user status
2388 IF k_header_rec.sts_code NOT IN ( 'TERMINATED','EXPIRED') THEN
2389 --Message: Contract CONTRACT_NUMBER is still STATUS.
2390 -- Unable to return assets for this contract.
2391 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
2392 p_msg_name => 'OKL_AM_K_INVALID_FOR_ART_ERR',
2393 p_token1 => 'CONTRACT_NUMBER',
2394 p_token1_value => k_header_rec.contract_number,
2395 p_token2 => 'STATUS',
2396 p_token2_value => k_header_rec.meaning);
2397 RAISE l_invalid_contract;
2398 END IF;
2399
2400 --******************************
2401 -- Default checking (Control flag is null)
2402 --******************************
2403
2404 ELSE -- Default checking (Control flag is null)
2405
2406 -- Check user status
2407 IF k_header_rec.sts_code <> 'BOOKED' THEN
2408 -- Message: Contract (CONTRACT_NUMBER) is (STATUS).
2409 OKL_API.set_message(p_app_name => OKL_API.G_APP_NAME,
2410 p_msg_name => 'OKL_AM_CONTRACT_INACTIVE',
2411 p_token1 => 'CONTRACT_NUMBER',
2412 p_token1_value => k_header_rec.contract_number,
2413 p_token2 => 'STATUS',
2414 p_token2_value => k_header_rec.meaning);
2415 RAISE l_invalid_contract;
2416 END IF;
2417 END IF;
2418
2419 -- Set the current contract status
2420 x_contract_status := k_header_rec.sts_code;
2421
2422 -- Set the return status
2423 x_return_status := l_return_status;
2424 IF (is_debug_procedure_on) THEN
2425 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
2426 END IF;
2427 EXCEPTION
2428 WHEN l_invalid_contract THEN
2429 IF (is_debug_exception_on) THEN
2430 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'l_invalid_contract');
2431 END IF;
2432 IF k_header_csr%ISOPEN THEN
2433 CLOSE k_header_csr;
2434 END IF;
2435 IF k_contractstatus_csr%ISOPEN THEN
2436 CLOSE k_contractstatus_csr;
2437 END IF;
2438 IF k_locks_csr%ISOPEN THEN
2439 CLOSE k_locks_csr;
2440 END IF;
2441 IF k_service_request_csr%ISOPEN THEN
2442 CLOSE k_service_request_csr;
2443 END IF;
2444 IF k_accepted_quote_csr%ISOPEN THEN
2445 CLOSE k_accepted_quote_csr;
2446 END IF;
2447
2448
2449 -- notify caller of EXPECTED error
2450 x_return_status := OKL_API.G_RET_STS_ERROR;
2451
2452 WHEN OTHERS THEN
2453 IF (is_debug_exception_on) THEN
2454 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
2455 || sqlcode || ' , SQLERRM : ' || sqlerrm);
2456 END IF;
2457 IF k_header_csr%ISOPEN THEN
2458 CLOSE k_header_csr;
2459 END IF;
2460 IF k_contractstatus_csr%ISOPEN THEN
2461 CLOSE k_contractstatus_csr;
2462 END IF;
2463 IF k_locks_csr%ISOPEN THEN
2464 CLOSE k_locks_csr;
2465 END IF;
2466 IF k_service_request_csr%ISOPEN THEN
2467 CLOSE k_service_request_csr;
2468 END IF;
2469 IF k_accepted_quote_csr%ISOPEN THEN
2470 CLOSE k_accepted_quote_csr;
2471 END IF;
2472
2473 -- store SQL error message on message stack for caller
2474 OKL_API.SET_MESSAGE (
2475 p_app_name => OKC_API.G_APP_NAME
2476 ,p_msg_name => G_UNEXPECTED_ERROR
2477 ,p_token1 => G_SQLCODE_TOKEN
2478 ,p_token1_value => sqlcode
2479 ,p_token2 => G_SQLERRM_TOKEN
2480 ,p_token2_value => sqlerrm);
2481
2482 -- notify caller of an UNEXPECTED error
2483 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2484 END validate_contract;
2485
2486
2487 -- Start of comments
2488 --
2489 -- Procedure Name : check_lease_loan_type
2490 -- Desciption : Checks if contract is lease or loan
2491 -- Business Rules :
2492 -- Parameters :
2493 -- Version : 1.0
2494 -- History : RMUNJULU 06-MAR-03 Performance Fix Replaced K_HDR_FULL
2495 --
2496 -- End of comments
2497 PROCEDURE check_lease_loan_type(
2498 p_api_version IN NUMBER,
2499 p_init_msg_list IN VARCHAR2,
2500 x_return_status OUT NOCOPY VARCHAR2,
2501 x_msg_count OUT NOCOPY NUMBER,
2502 x_msg_data OUT NOCOPY VARCHAR2,
2503 p_term_rec IN term_rec_type,
2504 x_lease_loan_type OUT NOCOPY VARCHAR2) IS
2505
2506 -- Get the K details
2507 CURSOR k_header_csr is
2508 SELECT id,
2509 object_version_number,
2510 sts_code,
2511 scs_code
2512 FROM OKC_K_HEADERS_B
2513 WHERE id = p_term_rec.p_contract_id;
2514
2515 -- Get the K deal_type
2516 -- RMUNJULU 06-MAR-03 Performance Fix Replaced K_HDR_FULL
2517 CURSOR k_deal_type_csr is
2518 SELECT deal_type
2519 FROM OKL_K_HEADERS_V
2520 WHERE id = p_term_rec.p_contract_id;
2521
2522 k_header_rec k_header_csr%ROWTYPE;
2523 l_lease_loan_type VARCHAR2(30) := '$';
2524 l_api_name VARCHAR2(30) := 'check_lease_loan_type';
2525 l_deal_type VARCHAR2(30) := '$';
2526 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'check_lease_loan_type';
2527 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
2528 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
2529 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
2530
2531 BEGIN
2532 IF (is_debug_procedure_on) THEN
2533 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
2534 END IF;
2535 IF (is_debug_statement_on) THEN
2536 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_id: '|| p_term_rec.p_contract_id);
2537 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
2538 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_number: '|| p_term_rec.p_contract_number);
2539 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_modifier: '|| p_term_rec.p_contract_modifier);
2540 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
2541 END IF;
2542 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2543 x_lease_loan_type := l_lease_loan_type;
2544
2545 OPEN k_header_csr;
2546 FETCH k_header_csr INTO k_header_rec;
2547 IF k_header_csr%NOTFOUND THEN
2548 OKL_API.set_message(p_app_name => OKC_API.G_APP_NAME,
2549 p_msg_name => 'OKC_K_CHANGED',
2550 p_token1 => 'NUMBER',
2551 p_token1_value => p_term_rec.p_contract_number,
2552 p_token2 => 'MODIFIER',
2553 p_token2_value => p_term_rec.p_contract_modifier);
2554 CLOSE k_header_csr;
2555 RAISE OKL_API.G_EXCEPTION_ERROR;
2556 END IF;
2557
2558 OPEN k_deal_type_csr;
2559 FETCH k_deal_type_csr INTO l_deal_type;
2560 CLOSE k_deal_type_csr;
2561
2562 -- Set the lease or loan type
2563 -- (If scs_code = Lease and deal_type = Loan then Loan)
2564 IF k_header_rec.scs_code = 'LEASE'
2565 AND NVL(l_deal_type,'?') LIKE 'LOAN%' THEN
2566 l_lease_loan_type := 'LOAN';
2567 ELSIF k_header_rec.scs_code = 'LEASE'
2568 AND NVL(l_deal_type,'?') LIKE 'LEASE%' THEN
2569 l_lease_loan_type := 'LEASE';
2570 ELSIF k_header_rec.scs_code = 'LOAN' THEN
2571 l_lease_loan_type := 'LOAN';
2572 END IF;
2573 CLOSE k_header_csr;
2574
2575 x_lease_loan_type := l_lease_loan_type;
2576 IF (is_debug_procedure_on) THEN
2577 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
2578 END IF;
2579 EXCEPTION
2580 WHEN OKL_API.G_EXCEPTION_ERROR THEN
2581 IF (is_debug_exception_on) THEN
2582 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
2583 END IF;
2584 IF k_header_csr%ISOPEN THEN
2585 CLOSE k_header_csr;
2586 END IF;
2587 IF k_deal_type_csr%ISOPEN THEN
2588 CLOSE k_deal_type_csr;
2589 END IF;
2590 x_lease_loan_type := '$';
2591 x_return_status := OKL_API.G_RET_STS_ERROR;
2592
2593 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2594 IF (is_debug_exception_on) THEN
2595 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
2596 END IF;
2597 IF k_header_csr%ISOPEN THEN
2598 CLOSE k_header_csr;
2599 END IF;
2600 IF k_deal_type_csr%ISOPEN THEN
2601 CLOSE k_deal_type_csr;
2602 END IF;
2603 x_lease_loan_type := '$';
2604 x_return_status :=OKL_API.G_RET_STS_UNEXP_ERROR;
2605
2606 WHEN OTHERS THEN
2607 IF (is_debug_exception_on) THEN
2608 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
2609 || sqlcode || ' , SQLERRM : ' || sqlerrm);
2610 END IF;
2611 IF k_header_csr%ISOPEN THEN
2612 CLOSE k_header_csr;
2613 END IF;
2614 IF k_deal_type_csr%ISOPEN THEN
2615 CLOSE k_deal_type_csr;
2616 END IF;
2617 x_lease_loan_type := '$';
2618 OKL_API.set_message(p_app_name => okc_api.g_app_name,
2619 p_msg_name => g_unexpected_error,
2620 p_token1 => g_sqlcode_token,
2621 p_token1_value => sqlcode,
2622 p_token2 => g_sqlerrm_token,
2623 p_token2_value => sqlerrm);
2624 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2625 END check_lease_loan_type;
2626
2627 ----------------------------------------------------------------------------
2628 -- PROCEDURE : process_non_batch
2629 ----------------------------------------------------------------------------
2630 PROCEDURE process_non_batch(
2631 p_api_version IN NUMBER,
2632 p_init_msg_list IN VARCHAR2,
2633 x_return_status OUT NOCOPY VARCHAR2,
2634 x_msg_count OUT NOCOPY NUMBER,
2635 x_msg_data OUT NOCOPY VARCHAR2,
2636 p_term_rec IN term_rec_type,
2637 x_tcnv_rec OUT NOCOPY tcnv_rec_type,
2638 x_can_terminate OUT NOCOPY VARCHAR2) IS
2639
2640 l_quote_found VARCHAR2(1) := 'N';
2641 l_trn_exists VARCHAR2(1) := 'N';
2642 l_can_terminate VARCHAR2(1) := 'Y';
2643 lp_tcnv_rec tcnv_rec_type;
2644 lx_tcnv_rec tcnv_rec_type;
2645 lx_contract_status VARCHAR2(200);
2646 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2647 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'process_non_batch';
2648 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
2649 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
2650 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
2651
2652 BEGIN
2653 IF (is_debug_procedure_on) THEN
2654 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
2655 END IF;
2656 IF (is_debug_statement_on) THEN
2657 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_id: '|| p_term_rec.p_contract_id);
2658 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
2659 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_number: '|| p_term_rec.p_contract_number);
2660 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_modifier: '|| p_term_rec.p_contract_modifier);
2661 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
2662 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_control_flag: '|| p_term_rec.p_control_flag);
2663 END IF;
2664
2665 -- Validate the contract
2666 validate_contract(
2667 p_api_version => p_api_version,
2668 p_init_msg_list => p_init_msg_list,
2669 x_return_status => l_return_status,
2670 x_msg_count => x_msg_count,
2671 x_msg_data => x_msg_data,
2672 p_contract_id => p_term_rec.p_contract_id,
2673 p_control_flag => p_term_rec.p_control_flag,
2674 x_contract_status => lx_contract_status);
2675 IF (is_debug_statement_on) THEN
2676 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called validate_contract , return status: ' || l_return_status);
2677 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'lx_contract_status : ' || lx_contract_status);
2678 END IF;
2679
2680 -- If error abort this contract
2681 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2682 RAISE G_EXCEPTION_HALT;
2683 END IF;
2684
2685 -- get transaction if exists
2686 IF (is_debug_statement_on) THEN
2687 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_BTCH_EXP_LEASE_LOAN_PVT.get_trn_rec');
2688 END IF;
2689 OKL_AM_BTCH_EXP_LEASE_LOAN_PVT.get_trn_rec(
2690 p_contract_id => p_term_rec.p_contract_id,
2691 x_return_status => l_return_status,
2692 x_trn_exists => l_trn_exists,
2693 x_tcnv_rec => lp_tcnv_rec);
2694 IF (is_debug_statement_on) THEN
2695 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_BTCH_EXP_LEASE_LOAN_PVT.get_trn_rec , return status: ' || l_return_status);
2696 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_trn_exists : ' || l_trn_exists);
2697 END IF;
2698
2699 -- if error then abort this contract
2700 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2701 RAISE G_EXCEPTION_HALT;
2702 END IF;
2703
2704 -- If trn exists then set the out tcnv_rec
2705 -- (have to do this or else tcnv_rec set wrong)
2706 IF (l_trn_exists = 'Y' ) THEN
2707 lx_tcnv_rec := lp_tcnv_rec;
2708 x_tcnv_rec := lx_tcnv_rec;
2709 END IF;
2710
2711 x_return_status := l_return_status;
2712 x_can_terminate := l_can_terminate;
2713 IF (is_debug_procedure_on) THEN
2714 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
2715 END IF;
2716 EXCEPTION
2717
2718 WHEN G_EXCEPTION_HALT THEN
2719 IF (is_debug_exception_on) THEN
2720 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_HALT');
2721 END IF;
2722 x_return_status := OKL_API.G_RET_STS_ERROR;
2723 x_can_terminate := 'N';
2724
2725 WHEN OTHERS THEN
2726 IF (is_debug_exception_on) THEN
2727 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
2728 || sqlcode || ' , SQLERRM : ' || sqlerrm);
2729 END IF;
2730 x_return_status := OKL_API.G_RET_STS_ERROR;
2731 x_can_terminate := 'N';
2732 END process_non_batch;
2733
2734
2735
2736
2737
2738 -- Start of comments
2739 --
2740 -- Procedure Name : lease_loan_termination
2741 -- Desciption : method to terminate the lease or loan
2742 -- Business Rules :
2743 -- Parameters :
2744 -- Version : 1.0
2745 -- History : RMUNJULU -- 26-NOV-02: Bug # 2484327 : Added call to
2746 -- OKL_AM_CNTRCT_LN_TRMNT_PVT if partial quote, Changed
2747 -- l_accepted_qte_csr cursor.
2748 -- RMUNJULU 18-DEC-02 2484327 Changed IF to get qte_id properly
2749 -- : RMUNJULU 02-JAN-03 2699412 Set the okc context
2750 --
2751 -- End of comments
2752 PROCEDURE lease_loan_termination(
2753 p_api_version IN NUMBER,
2754 p_init_msg_list IN VARCHAR2,
2755 x_return_status OUT NOCOPY VARCHAR2,
2756 x_msg_count OUT NOCOPY NUMBER,
2757 x_msg_data OUT NOCOPY VARCHAR2,
2758 p_term_rec IN term_rec_type,
2759 p_tcnv_rec IN tcnv_rec_type) IS
2760
2761
2762 -- Get the accepted quote if exists for the contract
2763 -- RMUNJULU Bug # 2484327 : Added partial_yn to cursor to get the value
2764 -- of the quote whether partial yn
2765 -- RMUNJULU 18-DEC-02 2484327 commented --
2766
2767
2768 -- RMUNJULU 18-DEC-02 2484327 added cursor
2769 -- Get the quote details
2770 CURSOR l_qte_csr ( p_qte_id IN NUMBER) IS
2771 SELECT QTE.id,
2772 QTE.partial_yn
2773 FROM OKL_TRX_QUOTES_V QTE
2774 WHERE QTE.id = p_qte_id;
2775
2776
2777 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2778 l_api_name CONSTANT VARCHAR2(30) := 'lease_loan_termination';
2779 l_lease_or_loan VARCHAR2(200);
2780 l_tcnv_rec tcnv_rec_type := p_tcnv_rec;
2781 l_trn_exists VARCHAR2(1) := 'N';
2782 l_can_terminate VARCHAR2(1) := 'Y';
2783 lp_term_rec term_rec_type := p_term_rec;
2784 --l_accepted_qte_rec l_accepted_qte_csr%ROWTYPE;
2785 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'lease_loan_termination';
2786 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
2787 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
2788 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
2789
2790 -- RMUNJULU Bug # 2484327 : To get the value of the quote whether partial yn
2791 l_partial_yn VARCHAR2(1) := 'N';
2792
2793 -- RMUNJULU 18-DEC-02 2484327
2794 l_qte_rec l_qte_csr%ROWTYPE;
2795 lx_quote_tbl OKL_AM_UTIL_PVT.quote_tbl_type;
2796
2797 -- RMUNJULU 3061751 27-AUG-2003
2798 l_service_integration_needed VARCHAR2(3) := 'N';
2799
2800 BEGIN
2801 IF (is_debug_procedure_on) THEN
2802 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
2803 END IF;
2804 IF (is_debug_statement_on) THEN
2805 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_id: '|| p_term_rec.p_contract_id);
2806 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
2807 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_number: '|| p_term_rec.p_contract_number);
2808 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_modifier: '|| p_term_rec.p_contract_modifier);
2809 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
2810 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_control_flag: '|| p_term_rec.p_control_flag);
2811 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tcnv_rec.tmt_recycle_yn: '||p_tcnv_rec.tmt_recycle_yn);
2812 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tcnv_rec.qte_id: '||p_tcnv_rec.qte_id);
2813 END IF;
2814
2815 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2816
2817 -- if not batch process then check if can be terminated
2818 IF NVL(lp_term_rec.p_control_flag,'?') NOT IN ('BATCH_PROCESS','BATCH_PROCESS_CHR') THEN
2819
2820
2821 process_non_batch(
2822 p_api_version => p_api_version,
2823 p_init_msg_list => p_init_msg_list,
2824 x_return_status => l_return_status,
2825 x_msg_count => x_msg_count,
2826 x_msg_data => x_msg_data,
2827 p_term_rec => lp_term_rec,
2828 x_tcnv_rec => l_tcnv_rec,
2829 x_can_terminate => l_can_terminate);
2830 IF (is_debug_statement_on) THEN
2831 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called process_non_batch , return status: ' || l_return_status);
2832 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_can_terminate : ' || l_can_terminate);
2833 END IF;
2834
2835
2836 -- If error abort this contract
2837 IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2838 RAISE OKL_API.G_EXCEPTION_ERROR;
2839 END IF;
2840 IF (l_can_terminate <> 'Y') THEN
2841 RAISE OKL_API.G_EXCEPTION_ERROR;
2842 END IF;
2843
2844 END IF;
2845
2846
2847
2848 -- check if lease/loan exists and type
2849 check_lease_loan_type(
2850 p_api_version => p_api_version,
2851 p_init_msg_list => p_init_msg_list,
2852 x_return_status => l_return_status,
2853 x_msg_count => x_msg_count,
2854 x_msg_data => x_msg_data,
2855 p_term_rec => lp_term_rec,
2856 x_lease_loan_type => l_lease_or_loan);
2857 IF (is_debug_statement_on) THEN
2858 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called check_lease_loan_type , return status: ' || l_return_status);
2859 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_lease_or_loan : ' || l_lease_or_loan);
2860 END IF;
2861
2862
2863
2864 -- If error abort this contract
2865 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2866 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2867 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
2868 RAISE OKL_API.G_EXCEPTION_ERROR;
2869 END IF;
2870
2871
2872
2873 -- Set the quote parameter if accepted quote exists and not already populated
2874 -- RMUNJULU Bug # 2484327 : cannot have the below if since if quote id
2875 -- passed then will not set partial_yn
2876
2877
2878
2879 -- RMUNJULU 18-DEC-02 2484327 -- START --
2880 -- Changed the if logic to get the correct qte_id
2881
2882 -- NOTE: If this IF does not return any quote then the partial_yn is not set to 'Y'
2883 -- and it is a full termination
2884
2885 -- Check if quote id passed to p_term_rec get partial_yn if yes
2886 IF lp_term_rec.p_quote_id IS NOT NULL
2887 AND lp_term_rec.p_quote_id <> OKL_API.G_MISS_NUM THEN
2888
2889
2890 -- This condition is from termination quotes
2891 OPEN l_qte_csr ( lp_term_rec.p_quote_id);
2892 FETCH l_qte_csr INTO l_qte_rec;
2893 IF l_qte_csr%FOUND THEN
2894 l_partial_yn := l_qte_rec.partial_yn;
2895 END IF;
2896 CLOSE l_qte_csr;
2897
2898
2899 -- else check if quote id passed to p_tcnv_rec get partial_yn if yes
2900 ELSIF l_tcnv_rec.qte_id IS NOT NULL
2901 AND l_tcnv_rec.qte_id <> OKL_API.G_MISS_NUM THEN
2902
2903 -- This condition is from batch recycled trns which originated from qte
2904 OPEN l_qte_csr ( l_tcnv_rec.qte_id);
2905 FETCH l_qte_csr INTO l_qte_rec;
2906 IF l_qte_csr%FOUND THEN
2907 l_partial_yn := l_qte_rec.partial_yn;
2908 lp_term_rec.p_quote_id := l_tcnv_rec.qte_id;
2909 END IF;
2910 CLOSE l_qte_csr;
2911
2912
2913 -- else get the accepted quote for contract and get partial_yn
2914 ELSE
2915
2916 -- This condition is from contract term. scrn when quote exists with no trn
2917
2918 -- *****************
2919 -- Get accepted quote with no trn if exists for contract
2920 -- *****************
2921
2922 IF (is_debug_statement_on) THEN
2923 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_non_trn_contract_quotes');
2924 END IF;
2925 -- Get accepted quote for contract with no trn
2926 OKL_AM_UTIL_PVT.get_non_trn_contract_quotes (
2927 p_khr_id => lp_term_rec.p_contract_id,
2928 x_quote_tbl => lx_quote_tbl,
2929 x_return_status => l_return_status);
2930 IF (is_debug_statement_on) THEN
2931 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.get_non_trn_contract_quotes , return status: ' || l_return_status);
2932 END IF;
2933
2934 -- Check the return status
2935 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2936
2937 -- Error occured in util proc, message set by util proc raise exp
2938 RAISE OKL_API.G_EXCEPTION_ERROR;
2939
2940 END IF;
2941
2942 -- Check if accepted quote with no trn exists for the contract
2943 IF lx_quote_tbl.COUNT > 0 THEN
2944
2945 lp_term_rec.p_quote_id := lx_quote_tbl(lx_quote_tbl.FIRST).id;
2946 l_partial_yn := lx_quote_tbl(lx_quote_tbl.FIRST).partial_yn;
2947
2948 END IF;
2949
2950 END IF;
2951
2952 -- RMUNJULU 18-DEC-02 2484327 -- END --
2953
2954
2955 IF (is_debug_statement_on) THEN
2956 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'setting okc org context');
2957 END IF;
2958 -- RMUNJULU 02-JAN-03 2699412 Set the okc context
2959 OKL_CONTEXT.set_okc_org_context(p_chr_id => lp_term_rec.p_contract_id);
2960
2961 -- ++++++++++++++++++++ service contract integration begin ++++++++++++++++++
2962
2963 IF (is_debug_statement_on) THEN
2964 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling check_service_k_int_needed');
2965 END IF;
2966 -- RMUNJULU 3061751 27-AUG-2003
2967 -- Checks and sets service_integration_needed flag
2968 -- Need to do this before lines terminated else will not know
2969 -- if TRUE FULL termination or not (FULL Termination or PARTIAL Termination
2970 -- but no more assets)
2971 l_service_integration_needed := check_service_k_int_needed(
2972 p_term_rec => lp_term_rec,
2973 p_tcnv_rec => l_tcnv_rec,
2974 p_partial_yn => l_partial_yn,
2975 p_source => 'TERMINATION');
2976 IF (is_debug_statement_on) THEN
2977 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called check_service_k_int_needed');
2978 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_service_integration_needed : ' || l_service_integration_needed);
2979 END IF;
2980
2981 -- +++++++++++++++++++++ service contract integration end ++++++++++++++++++
2982
2983
2984 -- RMUNJULU Bug # 2484327 -- Will first check if partial termination and call
2985 -- OKL_AM_CONTRACT_LINE_TRMNT_PVT API or else check for lease or loan and
2986 -- call appropriate API.
2987
2988 -- rmunjulu Added condition to check if truely partial
2989 IF (l_partial_yn = 'Y') THEN
2990
2991 -- need to check if no more assets (This case p_quote_id is Always populated)
2992 l_partial_yn := check_true_partial_quote_yn( -- rmunjulu 4997075
2993 p_quote_id => lp_term_rec.p_quote_id,
2994 p_contract_id => lp_term_rec.p_contract_id);
2995 IF (is_debug_statement_on) THEN
2996 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called check_true_partial_quote_yn');
2997 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_partial_yn : ' || l_partial_yn);
2998 END IF;
2999 END IF;
3000
3001 -- Call the lease/loan termination api
3002 IF (l_partial_yn = 'Y') THEN
3003
3004 IF (is_debug_statement_on) THEN
3005 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_CNTRCT_LN_TRMNT_PVT.asset_level_termination');
3006 END IF;
3007
3008 OKL_AM_CNTRCT_LN_TRMNT_PVT.asset_level_termination(
3009 p_api_version => p_api_version,
3010 p_init_msg_list => p_init_msg_list,
3011 p_term_rec => lp_term_rec,
3012 p_tcnv_rec => l_tcnv_rec,
3013 x_msg_count => x_msg_count,
3014 x_msg_data => x_msg_data,
3015 x_return_status => l_return_status);
3016 IF (is_debug_statement_on) THEN
3017 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_CNTRCT_LN_TRMNT_PVT.asset_level_termination , return status: ' || l_return_status);
3018 END IF;
3019
3020 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3021 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3022 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3023 RAISE OKL_API.G_EXCEPTION_ERROR;
3024 END IF;
3025
3026 ELSIF (l_lease_or_loan = 'LEASE') THEN
3027
3028 IF (is_debug_statement_on) THEN
3029 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_LEASE_TRMNT_PVT.lease_termination');
3030 END IF;
3031 OKL_AM_LEASE_TRMNT_PVT.lease_termination(
3032 p_api_version => p_api_version,
3033 p_init_msg_list => p_init_msg_list,
3034 x_return_status => l_return_status,
3035 x_msg_count => x_msg_count,
3036 x_msg_data => x_msg_data,
3037 p_term_rec => lp_term_rec,
3038 p_tcnv_rec => l_tcnv_rec);
3039 IF (is_debug_statement_on) THEN
3040 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_LEASE_TRMNT_PVT.lease_termination , return status: ' || l_return_status);
3041 END IF;
3042
3043 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3044 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3045 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3046 RAISE OKL_API.G_EXCEPTION_ERROR;
3047 END IF;
3048
3049 ELSIF (l_lease_or_loan = 'LOAN') THEN
3050
3051 IF (is_debug_statement_on) THEN
3052 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_LOAN_TRMNT_PVT.loan_termination');
3053 END IF;
3054 OKL_AM_LOAN_TRMNT_PVT.loan_termination(
3055 p_api_version => p_api_version,
3056 p_init_msg_list => p_init_msg_list,
3057 x_return_status => l_return_status,
3058 x_msg_count => x_msg_count,
3059 x_msg_data => x_msg_data,
3060 p_term_rec => lp_term_rec,
3061 p_tcnv_rec => l_tcnv_rec);
3062 IF (is_debug_statement_on) THEN
3063 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_LOAN_TRMNT_PVT.loan_termination , return status: ' || l_return_status);
3064 END IF;
3065
3066 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3067 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3068 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3069 RAISE OKL_API.G_EXCEPTION_ERROR;
3070 END IF;
3071
3072 ELSIF (l_lease_or_loan = '$') THEN
3073
3074 -- type not found
3075 -- set message and raise exception
3076 -- Contract type, whether Lease or Loan could not be
3077 -- determined for Contract CONTRACT_NUMBER.
3078 OKL_API.set_message(p_app_name => G_APP_NAME,
3079 p_msg_name => 'OKL_AM_K_TYPE_NOT_FOUND',
3080 p_token1 => 'CONTRACT_NUMBER',
3081 p_token1_value => lp_term_rec.p_contract_number);
3082
3083 RAISE OKL_API.G_EXCEPTION_ERROR;
3084
3085 ELSE
3086
3087 -- neither lease or loan
3088 -- set message and raise exception
3089 -- Contract CONTRACT_NUMBER is neither a Lease nor a Loan.
3090 OKL_API.set_message( p_app_name => G_APP_NAME,
3091 p_msg_name => 'OKL_AM_K_TYPE_ERROR',
3092 p_token1 => 'CONTRACT_NUMBER',
3093 p_token1_value => lp_term_rec.p_contract_number);
3094
3095 RAISE OKL_API.G_EXCEPTION_ERROR;
3096
3097 END IF;
3098
3099
3100 -- ++++++++++++++++++++ service contract integration begin ++++++++++++++++++
3101
3102 -- RMUNJULU 3061751 27-AUG-2003 Do the Service_Integration Steps, Launches SERVICE INT WF if needed
3103 service_k_integration(
3104 p_term_rec => lp_term_rec,
3105 p_source => 'TERMINATION',
3106 p_service_integration_needed => l_service_integration_needed);
3107 IF (is_debug_statement_on) THEN
3108 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called service_k_integration');
3109 END IF;
3110
3111 -- +++++++++++++++++++++ service contract integration end ++++++++++++++++++
3112
3113 x_return_status := l_return_status;
3114 IF (is_debug_procedure_on) THEN
3115 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
3116 END IF;
3117
3118 EXCEPTION
3119
3120 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3121 IF (is_debug_exception_on) THEN
3122 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
3123 END IF;
3124
3125 -- RMUNJULU 18-DEC-02 2484327
3126 IF l_qte_csr%ISOPEN THEN
3127 CLOSE l_qte_csr;
3128 END IF;
3129
3130 x_return_status := OKL_API.G_RET_STS_ERROR;
3131
3132 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3133 IF (is_debug_exception_on) THEN
3134 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
3135 END IF;
3136
3137 -- RMUNJULU 18-DEC-02 2484327
3138 IF l_qte_csr%ISOPEN THEN
3139 CLOSE l_qte_csr;
3140 END IF;
3141
3142
3143 x_return_status :=OKL_API.G_RET_STS_UNEXP_ERROR;
3144
3145 WHEN OTHERS THEN
3146 IF (is_debug_exception_on) THEN
3147 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
3148 || sqlcode || ' , SQLERRM : ' || sqlerrm);
3149 END IF;
3150
3151 -- RMUNJULU 18-DEC-02 2484327
3152 IF l_qte_csr%ISOPEN THEN
3153 CLOSE l_qte_csr;
3154 END IF;
3155
3156
3157 OKL_API.set_message(p_app_name => okc_api.g_app_name,
3158 p_msg_name => g_unexpected_error,
3159 p_token1 => g_sqlcode_token,
3160 p_token1_value => sqlcode,
3161 p_token2 => g_sqlerrm_token,
3162 p_token2_value => sqlerrm);
3163
3164 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
3165
3166 END lease_loan_termination;
3167
3168 ----------------------------------------------------------------------------
3169 -- PROCEDURE : lease_loan_termination
3170 -- method to terminate multiple leases and loans
3171 -- Call this method from the Contract Termination Screen
3172 ----------------------------------------------------------------------------
3173 PROCEDURE lease_loan_termination(
3174 p_api_version IN NUMBER,
3175 p_init_msg_list IN VARCHAR2,
3176 x_return_status OUT NOCOPY VARCHAR2,
3177 x_msg_count OUT NOCOPY NUMBER,
3178 x_msg_data OUT NOCOPY VARCHAR2,
3179 p_term_tbl IN term_tbl_type,
3180 p_tcnv_tbl IN tcnv_tbl_type) IS
3181
3182 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3183 i NUMBER := 0;
3184 l_overall_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3185 l_api_version CONSTANT NUMBER := 1;
3186 l_api_name CONSTANT VARCHAR2(30) := 'lease_loan_termination';
3187 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'lease_loan_termination';
3188 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3189 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3190 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3191 BEGIN
3192 IF (is_debug_procedure_on) THEN
3193 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
3194 END IF;
3195
3196 --Check API version, initialize message list and create savepoint.
3197 l_return_status := OKL_API.START_ACTIVITY(l_api_name,
3198 G_PKG_NAME,
3199 p_init_msg_list,
3200 l_api_version,
3201 p_api_version,
3202 '_PVT',
3203 x_return_status);
3204 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3205 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3206 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3207 RAISE OKL_API.G_EXCEPTION_ERROR;
3208 END IF;
3209
3210 --OKL_API.init_msg_list(p_init_msg_list);
3211 -- Initialize return_status
3212 x_return_status := OKL_API.G_RET_STS_SUCCESS;
3213 -- Initialize p_init_msg_list to True so that every time the message stack
3214 -- is set or else the messages for the successfull terminated contracts
3215 -- will come here which is not desired
3216 -- This method is called from Contract Termination screen
3217 -- The screen will rollback if even one of the contracts failed to terminate
3218 -- Skip out of the loop as soon as the first contract is failed
3219 IF (p_term_tbl.COUNT > 0) THEN
3220 i := p_term_tbl.FIRST;
3221 LOOP
3222 lease_loan_termination (
3223 p_api_version => p_api_version,
3224 p_init_msg_list => OKL_API.G_TRUE,
3225 x_return_status => l_return_status,
3226 x_msg_count => x_msg_count,
3227 x_msg_data => x_msg_data,
3228 p_term_rec => p_term_tbl(i),
3229 p_tcnv_rec => p_tcnv_tbl(i));
3230 IF (is_debug_statement_on) THEN
3231 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called lease_loan_termination , return status: ' || l_return_status);
3232 END IF;
3233
3234 -- rollback if terminating contract failed
3235 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3236 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3237 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3238 RAISE OKL_API.G_EXCEPTION_ERROR;
3239 END IF;
3240 EXIT WHEN (i = p_term_tbl.LAST);
3241 i := p_term_tbl.NEXT(i);
3242 END LOOP;
3243
3244 END IF;
3245
3246
3247 x_return_status := l_return_status;
3248
3249 -- end the transaction
3250 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
3251 IF (is_debug_procedure_on) THEN
3252 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
3253 END IF;
3254 EXCEPTION
3255 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3256 IF (is_debug_exception_on) THEN
3257 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
3258 END IF;
3259
3260 x_return_status := OKL_API.HANDLE_EXCEPTIONS
3261 (
3262 l_api_name,
3263 G_PKG_NAME,
3264 'OKL_API.G_RET_STS_ERROR',
3265 x_msg_count,
3266 x_msg_data,
3267 '_PVT'
3268 );
3269 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3270 IF (is_debug_exception_on) THEN
3271 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
3272 END IF;
3273
3274 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
3275 (
3276 l_api_name,
3277 G_PKG_NAME,
3278 'OKL_API.G_RET_STS_UNEXP_ERROR',
3279 x_msg_count,
3280 x_msg_data,
3281 '_PVT'
3282 );
3283 WHEN OTHERS THEN
3284 IF (is_debug_exception_on) THEN
3285 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
3286 || sqlcode || ' , SQLERRM : ' || sqlerrm);
3287 END IF;
3288
3289 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
3290 (
3291 l_api_name,
3292 G_PKG_NAME,
3293 'OTHERS',
3294 x_msg_count,
3295 x_msg_data,
3296 '_PVT'
3297 );
3298 END lease_loan_termination;
3299
3300 -- Start of comments
3301 --
3302 -- Procedure Name : get_set_quote_dates
3303 -- Desciption : gets the quote eff dates and sets global variables with those
3304 -- Business Rules :
3305 -- Parameters :
3306 -- Version : 1.0
3307 -- History : RMUNJULU EDAT created
3308 --
3309 -- End of comments
3310 PROCEDURE get_set_quote_dates(
3311 p_qte_id IN NUMBER,
3312 p_trn_date IN DATE DEFAULT NULL,
3313 x_return_status OUT NOCOPY VARCHAR2) IS
3314
3315 -- get the quote dates
3316 CURSOR quote_dates_csr (p_quote_id IN NUMBER) IS
3317 SELECT trunc(qte.date_effective_from),
3318 trunc(qte.date_accepted)
3319 FROM okl_trx_quotes_b qte
3320 WHERE qte.id = p_quote_id;
3321
3322 l_eff_from DATE;
3323 l_accpt DATE;
3324
3325 l_trn_date DATE;
3326 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'get_set_quote_dates';
3327 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3328 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3329 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3330
3331 BEGIN
3332 IF (is_debug_procedure_on) THEN
3333 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
3334 END IF;
3335 IF (is_debug_statement_on) THEN
3336 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_qte_id: '|| p_qte_id);
3337 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_trn_date: '|| p_trn_date);
3338 END IF;
3339
3340 x_return_status := OKL_API.g_ret_sts_success;
3341
3342 SELECT SYSDATE INTO l_trn_date FROM DUAL;
3343
3344 -- if quote_id exists then
3345 IF p_qte_id IS NOT NULL
3346 AND p_qte_id <> OKL_API.G_MISS_NUM THEN
3347
3348 -- get quote dates
3349 OPEN quote_dates_csr (p_qte_id);
3350 FETCH quote_dates_csr INTO l_eff_from, l_accpt;
3351 CLOSE quote_dates_csr;
3352
3353 -- set global variables
3354 g_quote_eff_from_date := l_eff_from;
3355 g_quote_accept_date := l_accpt;
3356 g_quote_exists := 'Y';
3357
3358 ELSE -- quote does not exist
3359
3360 g_quote_exists := 'N';
3361
3362 IF p_trn_date IS NOT NULL THEN
3363 g_transaction_date := p_trn_date;
3364 ELSE
3365 g_transaction_date := l_trn_date;
3366 END IF;
3367
3368 END IF;
3369 IF (is_debug_procedure_on) THEN
3370 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
3371 END IF;
3372
3373 EXCEPTION
3374
3375 WHEN OTHERS THEN
3376 IF (is_debug_exception_on) THEN
3377 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
3378 || sqlcode || ' , SQLERRM : ' || sqlerrm);
3379 END IF;
3380
3381 x_return_status := OKL_API.g_ret_sts_error;
3382
3383 -- Set the oracle error message
3384 OKL_API.set_message(
3385 p_app_name => OKC_API.G_APP_NAME,
3386 p_msg_name => g_unexpected_error,
3387 p_token1 => g_sqlcode_token,
3388 p_token1_value => SQLCODE,
3389 p_token2 => g_sqlerrm_token,
3390 p_token2_value => SQLERRM);
3391
3392 END get_set_quote_dates;
3393
3394 -- Start of comments
3395 --
3396 -- Procedure Name : process_discount_subsidy
3397 -- Desciption : method to handle subsidy and discount refund
3398 -- Business Rules :
3399 -- Parameters :
3400 -- Version : 1.0
3401 -- History : RMUNJULU 26-NOV-03 2484327 Added code to get accrual_stream_type_id and pass to accrual_api
3402 -- Added Code to pass set_of_books_id to create AP invoice
3403 -- : RMUNJULU 08-DEC-03 3280473 Changed code to get the subsidy subline amount
3404 -- used for refund, instead of subsidy amount for the whole financial
3405 -- line
3406 -- : rmunjulu EDAT Added code to get the quote eff date and quote accpt date
3407 -- and set the dates accordingly
3408 -- : rmunjulu EDAT Changed code to set quote_eff dates using termination date if no quote
3409 -- : rmunjulu 4399352 changed to get subsidy income accrual sty id from stream generation template
3410 -- :sosharma build R12 replaced the procedure calls to create AP header,lines and accounting with
3411 -- a single call to disbursement API OKL_CREATE_DISB_TRANS_PVT.create_disb_trx
3412 -- End of comments
3413 PROCEDURE process_discount_subsidy(
3414 p_api_version IN NUMBER,
3415 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3416 x_return_status OUT NOCOPY VARCHAR2,
3417 x_msg_count OUT NOCOPY NUMBER,
3418 x_msg_data OUT NOCOPY VARCHAR2,
3419 p_term_rec IN term_rec_type,
3420 p_call_origin IN VARCHAR2 DEFAULT NULL,
3421 p_termination_date IN DATE) IS
3422
3423 p_asset_tbl_k OKL_AM_LEASE_TRMNT_PVT.klev_tbl_type;
3424 l_asset_tbl_l OKL_AM_CNTRCT_LN_TRMNT_PVT.klev_tbl_type;
3425 l_asset_tbl OKL_AM_LEASE_TRMNT_PVT.klev_tbl_type;
3426 l_asbv_tbl okl_subsidy_process_pvt.asbv_tbl_type;
3427 l_sty_id NUMBER;
3428 l_parent_line_id NUMBER;
3429 l_date_accepted DATE;
3430 l_subsidy_end_date DATE;
3431 l_contract_end_date DATE;
3432 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'process_discount_subsidy';
3433 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3434 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3435 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3436 /* sosharma 12-jan-2007
3437 Build: R12
3438 declared table of type okl_tpl_pvt.tplv_tbl_type to be passed as an input to the
3439 OKL_CREATE_DISB_TRANS_PVT. create_disb_trx
3440 Start changes
3441 */
3442 l_tplv_tbl okl_tpl_pvt.tplv_tbl_type;
3443 x_tplv_tbl okl_tpl_pvt.tplv_tbl_type;
3444 /*
3445 sosharma End changes
3446 */
3447 l_sub_sty_id NUMBER; -- SMODUGA for subsidy stream type id
3448 --**SMODUGA added for ap_invoice lines
3449 l_currency_conversion_type okl_k_headers.currency_conversion_type%TYPE;
3450 l_currency_conversion_date okl_k_headers.currency_conversion_date%TYPE;
3451 l_currency_conversion_rate okl_k_headers.currency_conversion_rate%TYPE;
3452 --**SMODUGA added for ap_invoice lines
3453 l_quote_number NUMBER;
3454 l_api_name CONSTANT VARCHAR2(30) := 'process_discount_subsidy';
3455 l_api_version CONSTANT NUMBER := 1;
3456 l_acceleration_rec OKL_GENERATE_ACCRUALS_PVT.acceleration_rec_type;
3457 l_tapv_rec okl_tap_pvt.tapv_rec_type ;
3458 x_tapv_rec okl_tap_pvt.tapv_rec_type ;
3459 --**SMODUGA added for ap_invoice lines
3460 l_tplv_rec okl_tpl_pvt.tplv_rec_type;
3461 x_tplv_rec okl_tpl_pvt.tplv_rec_type;
3462 -- ** END SMODUGA added for ap_invoice lines
3463 lx_subsidy_amount NUMBER;
3464 l_app_id NUMBER;
3465 l_trx_type_ID NUMBER;
3466 l_document_category VARCHAR2(100):= 'OKL Lease Pay Invoices';
3467 lx_dbseqnm VARCHAR2(2000):= '';
3468 lx_dbseqid NUMBER(38):= NULL;
3469 l_formula_name VARCHAR2(150);
3470 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3471 l_msg_count NUMBER := OKL_API.G_MISS_NUM;
3472 l_msg_data VARCHAR2(2000);
3473
3474 --akrangan for Bug 5669097 Fix Start
3475 v_flag varchar2(1) :='N';
3476 indx number :=1;
3477 TYPE l_acceleration_tbl_type IS TABLE OF
3478 OKL_GENERATE_ACCRUALS_PVT.acceleration_rec_type
3479 INDEX BY BINARY_INTEGER;
3480 l_acceleration_tbl l_acceleration_tbl_type;
3481 --akrangan for Bug 5669097 Fix End
3482 -- Get all active subsidies for this contract
3483 -- RMUNJULU *** Added code to get accrual_stream_type_id
3484 -- SMODUGA *** Added code to get subsidy_line_id
3485 CURSOR c_active_subsidies(c_parent_line_id NUMBER,c_contract_id NUMBER)IS
3486 select KLE1.amount,sub.stream_type_id, sub.refund_formula_id,
3487 sub.subsidy_calc_basis, sub.recourse_yn,
3488 sub.termination_refund_basis, sub.receipt_method_code,
3489 sub.accounting_method_code accounting_method_code,sub.effective_to_date,
3490 sub.vendor_id,sub.currency_code,
3491 -- to_number(sgn.VALUE) accrual_stream_type_id, --RMUNJULU *** --rmunjulu bug 4399352
3492 cle1.id subsidy_line_id, -- smoduga ***
3493 nvl(kle1.subsidy_override_amount,nvl(kle1.amount,0)) subsidy_amount -- RMUNJULU 3280473
3494 from OKL_K_LINES KLE1,
3495 OKC_K_LINES_B CLE1,
3496 OKC_LINE_STYLES_B LS1,
3497 okl_subsidies_b SUB,
3498 okl_subsidies_tl subt,
3499 OKC_STATUSES_V STS1
3500 -- ,okl_sgn_translations sgn --RMUNJULU *** --rmunjulu bug 4399352
3501 where KLE1.ID = CLE1.ID
3502 AND CLE1.LSE_ID = LS1.ID
3503 AND LS1.LTY_CODE ='SUBSIDY'
3504 AND cle1.dnz_chr_id = c_contract_id
3505 AND CLE1.STS_CODE = STS1.CODE
3506 AND CLE1.STS_CODE <> 'ABANDONED'
3507 AND cle1.cle_id= c_parent_line_id
3508 AND SUB.ID = KLE1.SUBSIDY_ID
3509 AND SUBT.ID = SUB.ID
3510 And subt.language = userenv('LANG') ;
3511 --AND sgn.jtot_object1_code = 'OKL_STRMTYP' --RMUNJULU *** --rmunjulu bug 4399352
3512 --AND sgn.object1_id1 = to_char(sub.stream_type_id); --RMUNJULU *** --rmunjulu bug 4399352
3513
3514
3515 -- get accepted date for the termination quote
3516 cursor c_term_quote(c_quote_id number) is
3517 select quote_number
3518 from okl_trx_quotes_v
3519 where id = c_quote_id
3520 AND accepted_yn ='Y';
3521
3522 -- get contract_end_date
3523 cursor c_contract_eff_to(c_contract_id number) is
3524 select end_date
3525 from okc_k_headers_b
3526 where id = c_contract_id;
3527
3528 --**SMODUGA added for currency conversion info
3529 -- get currency conversion info
3530 cursor c_currency_conversion (c_contract_id number) is
3531 select CURRENCY_CONVERSION_TYPE,CURRENCY_CONVERSION_RATE,
3532 CURRENCY_CONVERSION_DATE
3533 from okl_k_headers
3534 where id = c_contract_id;
3535 --**END SMODUGA added for currency conversion info
3536
3537 -- getting App ID
3538 CURSOR c_app_info IS
3539 SELECT APPLICATION_ID
3540 FROM FND_APPLICATION
3541 WHERE APPLICATION_SHORT_NAME = 'OKL' ;
3542
3543 -- ***SMODUGA***--
3544 --changed to get vendor_id and vendor site id for generating AP invoice
3545 -- getting vendor site id
3546 CURSOR c_vendor_info (p_subsidy_line_id NUMBER) IS
3547 SELECT pay.vendor_id,
3548 pay.pay_site_id
3549 FROM okl_party_payment_dtls_v pay,
3550 okc_k_party_roles_v party
3551 WHERE pay.cpl_id = party.id
3552 AND party.cle_id = p_subsidy_line_id ;
3553
3554 -- *** END SMODUGA***--
3555
3556 --**SMODUGA added for contract product
3557 --getting contract product id
3558 CURSOR pdt_id_csr ( p_khr_id NUMBER ) IS
3559 SELECT khr.pdt_id
3560 FROM okl_k_headers khr
3561 WHERE khr.id = p_khr_id;
3562 --**END SMODUGA added for contract product
3563
3564 -- Transaction type
3565 CURSOR c_trx_type (c_name VARCHAR2, c_language VARCHAR2) IS
3566 SELECT id
3567 FROM okl_trx_types_tl
3568 WHERE name = c_name
3569 AND language = c_language;
3570
3571 -- GET formula name
3572 CURSOR c_formula (c_refund_formula_id NUMBER) IS
3573 SELECT NAME
3574 FROM OKL_FORMULAE_V
3575 WHERE ID = c_refund_formula_id;
3576
3577 -- SMODUGA added for getting acceleration till date
3578 -- get acceleration till date
3579
3580 CURSOR get_accel_till_csr (c_khr_id IN NUMBER, c_accrual_sty_id IN NUMBER) IS
3581 SELECT max(stream_element_date) accelerate_till_date
3582 FROM okl_strm_elements_v sel,
3583 okl_streams stm
3584 where SEL.STM_ID = STM.ID
3585 and STM.STY_ID = c_accrual_sty_id
3586 and STM.khr_id = c_khr_id
3587 AND STM.active_yn = 'Y'
3588 AND STM.say_code = 'CURR';
3589
3590 -- END SMODUGA --
3591 l_sub_rec c_active_subsidies%ROWTYPE;
3592 l_sob_id number; -- RMUNJULU *** Added
3593
3594 -- rmunjulu EDAT
3595 l_quote_accpt_date DATE;
3596 l_quote_eff_date DATE;
3597 l_valid_gl_date DATE;
3598 --Bug# 3999921: pagarg +++ T and A ++++
3599 l_release_basis VARCHAR2(30);
3600
3601 l_accrual_sty_id NUMBER; -- rmunjulu 4399352
3602 l_accrual_sty_id_rep NUMBER; -- MGAAP 7263041
3603 l_trx_number OKL_TRX_CONTRACTS.TRX_NUMBER%TYPE; -- MGAAP 7263041
3604
3605 -- rmunjulu 4622198
3606 CURSOR khr_dtls_csr ( p_khr_id NUMBER ) IS
3607 SELECT chr.scs_code
3608 FROM okc_k_headers_b chr
3609 WHERE chr.id = p_khr_id;
3610
3611 -- rmunjulu 4622198
3612 l_scs_code OKC_K_HEADERS_B.scs_code%TYPE;
3613 l_fact_synd_code FND_LOOKUPS.lookup_code%TYPE;
3614 l_inv_acct_code OKC_RULES_B.rule_information1%TYPE;
3615 --akrangan Bug 5526955 fix start
3616 CURSOR check_accrual_previous_csr IS
3617 SELECT NVL(CHK_ACCRUAL_PREVIOUS_MNTH_YN,'N')
3618 FROM OKL_SYSTEM_PARAMS;
3619
3620 l_accrual_previous_mnth_yn VARCHAR2(3);
3621 --akrangan Bug 5526955 fix start
3622 FUNCTION get_invoice_number(
3623 p_app_id IN NUMBER,
3624 p_cat_code IN VARCHAR2,
3625 p_sob_id IN NUMBER,
3626 p_met_code IN VARCHAR2,
3627 p_trx_date IN DATE,
3628 p_dbseqnum IN OUT NOCOPY VARCHAR2,
3629 p_dbseqid IN OUT NOCOPY NUMBER
3630 ) RETURN NUMBER IS
3631 l_row_notfound BOOLEAN := TRUE;
3632 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'get_invoice_number';
3633 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
3634 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
3635 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
3636 BEGIN
3637 IF (is_debug_procedure_on) THEN
3638 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
3639 END IF;
3640 IF (is_debug_statement_on) THEN
3641 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_app_id: '|| p_app_id);
3642 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_cat_code: '|| p_cat_code);
3643 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_sob_id: '|| p_sob_id);
3644 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_met_code: '|| p_met_code);
3645 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_trx_date: '|| p_trx_date);
3646 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_dbseqnum: '|| p_dbseqnum);
3647 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_dbseqid: '|| p_dbseqid);
3648 END IF;
3649 l_tapv_rec.Invoice_Number := fnd_seqnum.get_next_sequence
3650 (appid => p_app_id,
3651 cat_code => p_cat_code,
3652 sobid => p_sob_id,
3653 met_code => p_met_code,
3654 trx_date => p_trx_date,
3655 dbseqnm => p_dbseqnum,
3656 dbseqid => p_dbseqid);
3657 IF (is_debug_procedure_on) THEN
3658 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
3659 END IF;
3660 IF (is_debug_statement_on) THEN
3661 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Returning l_tapv_rec.Invoice_Number: '||l_tapv_rec.Invoice_Number);
3662 END IF;
3663 RETURN l_tapv_rec.Invoice_Number;
3664
3665 EXCEPTION
3666 WHEN OTHERS THEN
3667 IF (is_debug_exception_on) THEN
3668 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
3669 || sqlcode || ' , SQLERRM : ' || sqlerrm);
3670 END IF;
3671 OKL_API.Set_Message(p_app_name => OKL_API.G_APP_NAME,
3672 p_msg_name => 'OKL_UNEXPECTED_ERROR',
3673 p_token1 => 'OKL_SQLCODE',
3674 p_token1_value => SQLCODE,
3675 p_token2 => 'OKL_SQLERRM',
3676 p_token2_value => SQLERRM);
3677 END get_invoice_number;
3678 BEGIN
3679 IF (is_debug_procedure_on) THEN
3680 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
3681 END IF;
3682 IF (is_debug_statement_on) THEN
3683 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_call_origin: '|| p_call_origin);
3684 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_termination_date: '|| p_termination_date);
3685 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_id: '|| p_term_rec.p_contract_id);
3686 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
3687 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_number: '|| p_term_rec.p_contract_number);
3688 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_modifier: '|| p_term_rec.p_contract_modifier);
3689 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
3690 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_control_flag: '|| p_term_rec.p_control_flag);
3691 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_type: '|| p_term_rec.p_quote_type);
3692 END IF;
3693 --Check API version, initialize message list and create savepoint.
3694 l_return_status := OKL_API.START_ACTIVITY(l_api_name,
3695 G_PKG_NAME,
3696 p_init_msg_list,
3697 l_api_version,
3698 p_api_version,
3699 '_PVT',
3700 x_return_status);
3701 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3702 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3703 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3704 RAISE OKL_API.G_EXCEPTION_ERROR;
3705 END IF;
3706
3707
3708 -- Initialize return_status
3709 x_return_status := OKL_API.G_RET_STS_SUCCESS;
3710
3711 -- rmunjulu +++++++++ Effective Dated Termination -- start ++++++++++++++++
3712
3713 -- rmunjulu EDAT
3714 -- If quote exists then accnting date is quote accept date else sysdate
3715 IF nvl(okl_am_lease_loan_trmnt_pvt.g_quote_exists,'N') = 'Y' THEN
3716
3717 l_quote_accpt_date := okl_am_lease_loan_trmnt_pvt.g_quote_accept_date;
3718 l_quote_eff_date := okl_am_lease_loan_trmnt_pvt.g_quote_eff_from_date;
3719
3720 ELSE
3721
3722 l_quote_accpt_date := p_termination_date;
3723 l_quote_eff_date := p_termination_date;
3724
3725 END IF;
3726
3727 -- rmunjulu EDAT
3728 -- get valid GL Date for acceptance date
3729 l_valid_gl_date := OKL_ACCOUNTING_UTIL.get_valid_gl_date( p_gl_date => l_quote_accpt_date);
3730
3731
3732 -- rmunjulu +++++++++ Effective Dated Termination -- end ++++++++++++++++
3733
3734
3735 -- Determine call origin
3736 IF p_call_origin = 'PARTIAL' THEN -- [1]
3737
3738 IF (is_debug_statement_on) THEN
3739 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_CNTRCT_LN_TRMNT_PVT.get_lines');
3740 END IF;
3741 -- get line details from OKL_AM_CNTRCT_LN_TRMNT
3742 OKL_AM_CNTRCT_LN_TRMNT_PVT.get_lines(
3743 p_term_rec => p_term_rec,
3744 x_klev_tbl => l_asset_tbl_l,
3745 x_return_status => l_return_status);
3746 IF (is_debug_statement_on) THEN
3747 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_CNTRCT_LN_TRMNT_PVT.get_lines , return status: ' || l_return_status);
3748 END IF;
3749
3750 IF l_asset_tbl_l.count > 0 THEN --[2]
3751 -- populate local table
3752 FOR i in l_asset_tbl_l.first..l_asset_tbl_l.last LOOP --[ L1 ]
3753 l_asset_tbl(i).p_kle_id := l_asset_tbl_l(i).p_kle_id;
3754 l_asset_tbl(i).p_asset_name := l_asset_tbl_l(i).p_asset_name;
3755 END LOOP; -- [ L1 ]
3756
3757 END IF; -- [2]
3758
3759
3760 ELSE -- Full Termination
3761
3762 IF (is_debug_statement_on) THEN
3763 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_LEASE_TRMNT_PVT.get_contract_lines');
3764 END IF;
3765 -- get line details from OKL_AM_LEASE_TRMNT_PVT
3766 OKL_AM_LEASE_TRMNT_PVT.get_contract_lines(
3767 p_api_version => p_api_version,
3768 p_init_msg_list => OKL_API.G_FALSE,
3769 x_return_status => l_return_status,
3770 x_msg_count => l_msg_count,
3771 x_msg_data => l_msg_data,
3772 p_term_rec => p_term_rec,
3773 x_klev_tbl => l_asset_tbl);
3774 IF (is_debug_statement_on) THEN
3775 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_LEASE_TRMNT_PVT.get_contract_lines , return status: ' || l_return_status);
3776 END IF;
3777
3778 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3779 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3780 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3781 RAISE OKL_API.G_EXCEPTION_ERROR;
3782 END IF;
3783
3784 END IF; -- [1]
3785
3786 -- rmunjulu 4622198 SPECIAL_ACCNT Get contract details
3787 OPEN khr_dtls_csr (p_term_rec.p_contract_id);
3788 FETCH khr_dtls_csr INTO l_scs_code;
3789 CLOSE khr_dtls_csr;
3790
3791 IF (is_debug_statement_on) THEN
3792 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_SECURITIZATION_PVT.check_khr_ia_associated');
3793 END IF;
3794 -- rmunjulu 4622198 SPECIAL_ACCNT Get special accounting details
3795 OKL_SECURITIZATION_PVT.check_khr_ia_associated(
3796 p_api_version => l_api_version
3797 ,p_init_msg_list => OKL_API.G_FALSE
3798 ,x_return_status => l_return_status
3799 ,x_msg_count => l_msg_count
3800 ,x_msg_data => l_msg_data
3801 ,p_khr_id => p_term_rec.p_contract_id
3802 ,p_scs_code => l_scs_code
3803 ,p_trx_date => l_quote_accpt_date
3804 ,x_fact_synd_code => l_fact_synd_code
3805 ,x_inv_acct_code => l_inv_acct_code
3806 );
3807 IF (is_debug_statement_on) THEN
3808 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_SECURITIZATION_PVT.check_khr_ia_associated , return status: ' || l_return_status);
3809 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_fact_synd_code : ' || l_fact_synd_code);
3810 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_inv_acct_code : ' || l_inv_acct_code);
3811 END IF;
3812
3813 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3814 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3815 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3816 RAISE OKL_API.G_EXCEPTION_ERROR;
3817 END IF;
3818
3819 -- Loop through each asset and process
3820 IF l_asset_tbl.count > 0 THEN
3821 FOR i in l_asset_tbl.FIRST..l_asset_tbl.LAST LOOP --[ L2 ]
3822
3823 -- Get the subsidy lines for the financial asset line sent
3824 -- Check all active subsidies for the asset
3825 FOR l_sub_rec in c_active_subsidies(l_asset_tbl(i).p_kle_id,p_term_rec.p_contract_id) LOOP --[L3]
3826
3827 --Bug# 3999921: pagarg +++ T and A +++++++ Start ++++++++++
3828 --Check for release basis to either accelerate accruals or create AP invoice
3829 --for TER_RELEASE_WO_PURCHASE
3830 IF p_term_rec.p_quote_type = 'TER_RELEASE_WO_PURCHASE'
3831 THEN
3832 IF (is_debug_statement_on) THEN
3833 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_SUBSIDY_PROCESS_PVT.GET_RELK_TERMN_BASIS');
3834 END IF;
3835 OKL_SUBSIDY_PROCESS_PVT.GET_RELK_TERMN_BASIS(
3836 p_api_version => p_api_version,
3837 p_init_msg_list => OKL_API.G_FALSE,
3838 x_return_status => l_return_status,
3839 x_msg_count => l_msg_count,
3840 x_msg_data => l_msg_data,
3841 p_chr_id => p_term_rec.p_contract_id,
3842 p_subsidy_id => l_sub_rec.subsidy_line_id,
3843 x_release_basis => l_release_basis);
3844 IF (is_debug_statement_on) THEN
3845 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_SUBSIDY_PROCESS_PVT.GET_RELK_TERMN_BASIS , return status: ' || l_return_status);
3846 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_release_basis : ' || l_release_basis);
3847 END IF;
3848
3849 IF l_sub_rec.accounting_method_code = 'AMORTIZE'
3850 THEN
3851 IF l_release_basis = 'ACCELERATE'
3852 THEN
3853
3854 IF (is_debug_statement_on) THEN
3855 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_STREAMS_UTIL.get_dependent_stream_type');
3856 END IF;
3857 -- SECHAWLA 29-DEC-05 4911502 : moved from above : begin
3858 -- rmunjulu 4399352 Added the following for bug 4399352 - start
3859 OKL_STREAMS_UTIL.get_dependent_stream_type(
3860 p_khr_id => p_term_rec.p_contract_id,
3861 p_primary_sty_id => l_sub_rec.stream_type_id,
3862 p_dependent_sty_purpose => 'SUBSIDY_INCOME',
3863 x_return_status => l_return_status,
3864 x_dependent_sty_id => l_accrual_sty_id);
3865 IF (is_debug_statement_on) THEN
3866 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_STREAMS_UTIL.get_dependent_stream_type , return status : ' || l_return_status);
3867 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_accrual_sty_id : ' || l_accrual_sty_id);
3868 END IF;
3869
3870 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3871 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3872 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3873 RAISE OKL_API.G_EXCEPTION_ERROR;
3874 END IF;
3875 -- rmunjulu 4399352 Added the following for bug 4399352 - end
3876 -- SECHAWLA 29-DEC-05 4911502 : moved from above : end
3877
3878 -- Fetch stream type id for subsidy and accrual streams
3879 l_sty_id := l_accrual_sty_id; -- rmunjulu 4399352
3880 --akrangan for bug 5669097 fix start
3881 IF l_acceleration_tbl.COUNT>0 THEN
3882 FOR c IN l_acceleration_tbl.first .. l_acceleration_tbl.last
3883 LOOP
3884 IF (l_acceleration_tbl(c).khr_id = p_term_rec.p_contract_id
3885 AND l_acceleration_tbl(c).sty_id =l_sty_id
3886 AND l_acceleration_tbl(c).kle_id =l_asset_tbl(i).p_kle_id )
3887 THEN
3888 v_flag :='Y';
3889 EXIT;
3890 ELSE
3891 v_flag :='N';
3892 END IF;
3893 END LOOP;
3894 END IF;
3895 l_acceleration_tbl(indx).khr_id :=p_term_rec.p_contract_id;
3896 l_acceleration_tbl(indx).sty_id :=l_sty_id;
3897 l_acceleration_tbl(indx).kle_id :=l_asset_tbl(i).p_kle_id ;
3898 indx := indx + 1;
3899 -- akrangan for bug 5669097 fix end
3900 OPEN get_accel_till_csr(p_term_rec.p_contract_id, l_sty_id);
3901 FETCH get_accel_till_csr INTO l_acceleration_rec.accelerate_till_date;
3902 CLOSE get_accel_till_csr ;
3903 --Bug 5852720 by srsreeni starts
3904 -- fix for bug -- 5610960 -- added below condition
3905 -- If quote exists then cancelation date is quote eff from date else sysdate
3906 IF nvl(okl_am_lease_loan_trmnt_pvt.g_quote_exists,'N') = 'Y' THEN
3907 --Bug 5852720 by srsreeni ends
3908 --akrangan Bug 5526955 fix start
3909 --Based on CHK_ACCRUAL_PREVIOUS_MNTH_YN setup
3910 --check accruals till quote eff date OR previous month last date
3911 OPEN check_accrual_previous_csr;
3912 FETCH check_accrual_previous_csr INTO l_accrual_previous_mnth_yn;
3913 CLOSE check_accrual_previous_csr;
3914
3915 IF nvl(l_accrual_previous_mnth_yn,'N') = 'N' THEN
3916 l_acceleration_rec.accelerate_from_date := TRUNC(LAST_DAY(l_quote_eff_date) + 1);
3917 ELSE
3918 l_acceleration_rec.accelerate_from_date := LAST_DAY(TRUNC(l_quote_eff_date, 'MONTH')-1)+1;
3919 END IF;
3920 --akrangan Bug 5526955 fix end
3921 --Bug 5852720 by srsreeni starts
3922 ELSE
3923 l_acceleration_rec.accelerate_from_date := TRUNC(LAST_DAY(l_quote_eff_date) + 1);
3924 END IF;
3925 --Bug 5852720 by srsreeni ends
3926 --pre populate the accrual rec
3927 l_acceleration_rec.khr_id := p_term_rec.p_contract_id; -- Id of the contract whose stream type needs to be accelerated
3928 l_acceleration_rec.sty_id := l_sty_id;-- Id of the stream type which needs to be accelerated
3929 l_acceleration_rec.acceleration_date := l_valid_gl_date; -- Date of acceleration (Transaction date)
3930 l_acceleration_rec.kle_id := l_asset_tbl(i).p_kle_id; --added for handling partial terminations.
3931
3932 -- Termination quote number
3933 OPEN c_term_quote(p_term_rec.p_quote_id);
3934 FETCH c_term_quote INTO l_quote_number;
3935 IF c_term_quote%FOUND
3936 THEN
3937 l_acceleration_rec.description := 'Accrual acceleration for Asset number '
3938 ||l_asset_tbl(i).p_asset_name||
3939 'and Contract number '||p_term_rec.p_contract_number ||
3940 'upon acceptance of ' || l_quote_number;
3941 ELSE
3942 l_acceleration_rec.description := 'Accrual acceleration for Asset number '
3943 ||l_asset_tbl(i).p_asset_name||
3944 'and Contract number '||p_term_rec.p_contract_number;
3945 END IF;
3946 CLOSE c_term_quote;
3947
3948 l_acceleration_rec.accrual_rule_yn := 'N';
3949
3950 --Accelerate Income Recognization
3951 -- akrangan for bug 5669097 start
3952 IF v_flag ='N' THEN
3953 IF (is_debug_statement_on) THEN
3954 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals');
3955 END IF;
3956 -- akrangan for bug 5669097 End
3957 OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals (
3958 p_api_version => p_api_version,
3959 p_init_msg_list => OKL_API.G_FALSE,
3960 x_return_status => l_return_status,
3961 x_msg_count => l_msg_count,
3962 x_msg_data => l_msg_data,
3963 p_acceleration_rec => l_acceleration_rec,
3964 x_trx_number => l_trx_number);
3965 IF (is_debug_statement_on) THEN
3966 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals , return status : ' || l_return_status);
3967 END IF;
3968
3969 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
3970 OKL_API.set_message(
3971 p_app_name => G_APP_NAME,
3972 p_msg_name => 'OKL_AM_SUBSIDY_INC_RECOG',
3973 p_token1 => 'ASSET_NUMBER',
3974 p_token1_value => l_asset_tbl(i).p_asset_name,
3975 p_token2 => 'CONTRACT_NUMBER',
3976 p_token2_value => p_term_rec.p_contract_number);
3977 END IF;
3978
3979 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3980 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3981 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3982 RAISE OKL_API.G_EXCEPTION_ERROR;
3983 END IF;
3984
3985 -- Start MGAAP 7263041
3986 OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS;
3987 OKL_STREAMS_UTIL.get_dependent_stream_type_rep(
3988 p_khr_id => p_term_rec.p_contract_id,
3989 p_primary_sty_id => l_sub_rec.stream_type_id,
3990 p_dependent_sty_purpose => 'SUBSIDY_INCOME',
3991 x_return_status => l_return_status,
3992 x_dependent_sty_id => l_accrual_sty_id_rep);
3993 IF (is_debug_statement_on) THEN
3994 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_STREAMS_UTIL.get_dependent_stream_type , return status : ' || l_return_status);
3995 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_accrual_sty_id_rep : ' || l_accrual_sty_id_rep);
3996 END IF;
3997
3998 IF (l_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
3999 l_acceleration_rec.sty_id := l_accrual_sty_id_rep;
4000 l_acceleration_rec.trx_number := l_trx_number;
4001
4002 OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals (
4003 p_api_version => p_api_version,
4004 p_init_msg_list => OKL_API.G_FALSE,
4005 x_return_status => l_return_status,
4006 x_msg_count => l_msg_count,
4007 x_msg_data => l_msg_data,
4008 p_acceleration_rec => l_acceleration_rec,
4009 p_representation_type => 'SECONDARY',
4010 x_trx_number => l_trx_number);
4011 OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
4012
4013 IF (is_debug_statement_on) THEN
4014 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals , return status : ' || l_return_status);
4015 END IF;
4016
4017 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4018 OKL_API.set_message(
4019 p_app_name => G_APP_NAME,
4020 p_msg_name => 'OKL_AM_SUBSIDY_INC_RECOG',
4021 p_token1 => 'ASSET_NUMBER',
4022 p_token1_value => l_asset_tbl(i).p_asset_name,
4023 p_token2 => 'CONTRACT_NUMBER',
4024 p_token2_value => p_term_rec.p_contract_number);
4025 END IF;
4026
4027 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4028 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4029 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4030 RAISE OKL_API.G_EXCEPTION_ERROR;
4031 END IF;
4032
4033 END IF;
4034 -- end MGAAP 7263041
4035
4036 -- akrangan for bug 5669097 start
4037 END IF;
4038 -- akrangan for bug 5669097 End
4039 ELSE -- l_release_basis = 'ACCELERATE'
4040 -------------------------------------------------
4041 --Gathering data for creating Invoice
4042 -------------------------------------------------
4043 l_sub_sty_id := l_sub_rec.stream_type_id;
4044 l_sob_id := okl_accounting_util.get_set_of_books_id;
4045 -- get currency conversion information
4046 OPEN c_currency_conversion(p_term_rec.p_contract_id);
4047 FETCH c_currency_conversion INTO l_currency_conversion_type,
4048 l_currency_conversion_rate,
4049 l_currency_conversion_date;
4050 CLOSE c_currency_conversion ;
4051
4052 -- Get Application Info
4053 OPEN c_app_info ;
4054 FETCH c_app_info INTO l_app_id;
4055 IF(c_app_info%NOTFOUND)
4056 THEN
4057 -- Change Message
4058 Okc_Api.set_message(G_APP_NAME, 'OKL_NO_TRANSACTION',
4059 G_COL_NAME_TOKEN,'Billing');
4060 x_return_status := OKC_API.G_RET_STS_ERROR ;
4061 CLOSE c_app_info ;
4062 RAISE OKC_API.G_EXCEPTION_ERROR;
4063 END if ;
4064 CLOSE c_app_info;
4065
4066 -- get Vendor site Id
4067 OPEN c_vendor_info (l_sub_rec.subsidy_line_id);
4068 FETCH c_vendor_info INTO l_tapv_rec.vendor_id, l_tapv_rec.IPVS_ID;
4069 IF(c_vendor_info%NOTFOUND) THEN
4070 -- Change Message
4071 Okc_Api.set_message(G_APP_NAME, 'OKL_NO_VENDOR_SITE');
4072 x_return_status := OKC_API.G_RET_STS_ERROR ;
4073 CLOSE c_vendor_info ;
4074 RAISE OKC_API.G_EXCEPTION_ERROR;
4075 END if ;
4076 CLOSE c_vendor_info;
4077
4078 l_tapv_rec.sfwt_flag := 'N' ;
4079 l_tapv_rec.TRX_STATUS_CODE := 'ENTERED' ;
4080 l_tapv_rec.currency_code := l_sub_rec.currency_code;
4081
4082 l_tapv_rec.CURRENCY_CONVERSION_TYPE := l_currency_conversion_type;
4083 l_tapv_rec.CURRENCY_CONVERSION_RATE := l_currency_conversion_rate;
4084 l_tapv_rec.CURRENCY_CONVERSION_DATE := l_currency_conversion_date;
4085 l_tapv_rec.SET_OF_BOOKS_ID := l_sob_id;
4086
4087 -- GET TRANSACTION TYPE
4088 OPEN c_trx_type ('Disbursement', 'US');
4089 FETCH c_trx_type INTO l_trx_type_ID;
4090 IF(c_trx_type%NOTFOUND)
4091 THEN
4092 Okc_Api.set_message(G_APP_NAME, 'OKL_NO_TRANSACTION',
4093 G_COL_NAME_TOKEN,'Disbursement');
4094 x_return_status := OKC_API.G_RET_STS_ERROR ;
4095 CLOSE c_trx_type ;
4096 RAISE OKC_API.G_EXCEPTION_ERROR;
4097 END if ;
4098 CLOSE c_trx_type ;
4099 l_tapv_rec.TRY_ID := l_trx_type_ID;
4100 l_tapv_rec.AMOUNT := lx_subsidy_amount;
4101 l_tapv_rec.invoice_type := 'STANDARD';
4102 IF (is_debug_statement_on) THEN
4103 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Getting invoice number');
4104 END IF;
4105 l_tapv_rec.Invoice_number := get_invoice_number(
4106 p_app_id => l_app_id,
4107 p_cat_code =>l_document_category,
4108 p_sob_id =>l_tapv_rec.SET_OF_BOOKS_ID,
4109 p_met_code => 'A',
4110 p_trx_date => SYSDATE,
4111 p_dbseqnum => lx_dbseqnm,
4112 p_dbseqid => lx_dbseqid);
4113
4114 l_tapv_rec.WORKFLOW_YN := 'N';
4115 l_tapv_rec.CONSOLIDATE_YN := 'N';
4116 l_tapv_rec.WAIT_VENDOR_INVOICE_YN := 'N';
4117
4118 -- setting all three dates to termination date instead of SYSDATE
4119 l_tapv_rec.DATE_INVOICED := l_quote_accpt_date;
4120 l_tapv_rec.DATE_GL := l_quote_accpt_date;
4121 l_tapv_rec.DATE_ENTERED := l_quote_accpt_date;
4122 l_tapv_rec.object_version_number := 1;
4123 --20-NOV-2006 ANSETHUR R12B - LEGAL ENTITY UPTAKE PROJECT
4124 l_tapv_rec.legal_entity_id :=OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(p_term_rec.p_contract_id);
4125
4126 SELECT DECODE(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,FND_GLOBAL.CONC_REQUEST_ID),
4127 DECODE(FND_GLOBAL.PROG_APPL_ID,-1,NULL,FND_GLOBAL.PROG_APPL_ID),
4128 DECODE(FND_GLOBAL.CONC_PROGRAM_ID,-1,NULL,FND_GLOBAL.CONC_PROGRAM_ID),
4129 DECODE(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,SYSDATE),
4130 mo_global.get_current_org_id() INTO l_tapv_rec.REQUEST_ID,
4131 l_tapv_rec.PROGRAM_APPLICATION_ID,
4132 l_tapv_rec.PROGRAM_ID,
4133 l_tapv_rec.PROGRAM_UPDATE_DATE,
4134 l_tapv_rec.ORG_ID
4135 FROM dual;
4136
4137
4138 ----------------------------------------------------
4139 -- Populate internal AP invoice Lines Record
4140 ----------------------------------------------------
4141
4142 /* sosharma 17-01-2007,added assignment of khr_id to l_tapv_rec
4143 Start Changes
4144 */
4145 l_tplv_rec.KHR_ID := p_term_rec.p_contract_id;
4146 /* End changes */
4147 l_tplv_rec.amount := l_tapv_rec.amount;
4148 l_tplv_rec.sty_id := l_sub_sty_id;
4149 l_tplv_rec.inv_distr_line_code := 'MANUAL';
4150 l_tplv_rec.line_number := 1;
4151 l_tplv_rec.org_id := l_tapv_rec.org_id;
4152 l_tplv_rec.disbursement_basis_code := 'BILL_DATE';
4153 /* sosharma 16-01-2007
4154 Assigned the record l_tplv_rec to table
4155 Start Changes */
4156 l_tplv_tbl(0):=l_tplv_rec;
4157 /* sosharma
4158 End changes
4159 */
4160 /*sosharma 12-jan-07
4161 Build:R12
4162 Added the call to disbursement procedure ,which is having the consolidated functionality of creating AP lines,header and AP accounting
4163 */
4164 IF (is_debug_statement_on) THEN
4165 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_CREATE_DISB_TRANS_PVT.create_disb_trx');
4166 END IF;
4167 OKL_CREATE_DISB_TRANS_PVT.create_disb_trx(p_api_version => l_api_version
4168 ,p_init_msg_list => OKL_API.G_FALSE
4169 ,x_return_status => l_return_status
4170 ,x_msg_count => x_msg_count
4171 ,x_msg_data => x_msg_data
4172 ,p_tapv_rec => l_tapv_rec
4173 ,p_tplv_tbl => l_tplv_tbl
4174 ,x_tapv_rec => x_tapv_rec
4175 ,x_tplv_tbl => x_tplv_tbl
4176 );
4177 IF (is_debug_statement_on) THEN
4178 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_CREATE_DISB_TRANS_PVT.create_disb_trx , return status : ' || l_return_status);
4179 END IF;
4180 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4181 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4182 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4183 RAISE OKL_API.G_EXCEPTION_ERROR;
4184 END IF;
4185
4186 x_tplv_rec := x_tplv_tbl(x_tplv_tbl.FIRST);
4187
4188 /*End Changes sosharma */
4189
4190 END IF; -- l_release_basis = 'ACCELERATE'
4191 END IF ; -- Accounting method
4192 ELSE -- quote type condition for TER_RELEASE_WO_PURCHASE
4193 --Bug# 3999921: pagarg +++ T and A +++++++ End ++++++++++
4194 --Current processing for quote type other than TER_RELEASE_WO_PURCHASE
4195 -- Fetch stream type id for subsidy and accrual streams
4196 l_sub_sty_id := l_sub_rec.stream_type_id; -- ***SMODUGA Subsidy stream type for invoice generation***
4197
4198 --SECHAWLA 29-DEC-05 4911502 : commenetd out
4199 --l_sty_id := l_accrual_sty_id; --RMUNJULU *** Changed to pass accrual_stream_type_id -- rmunjulu 4399352
4200
4201 l_sob_id := okl_accounting_util.get_set_of_books_id; --RMUNJULU *** Added code to get set of books id
4202
4203 --check accounting method
4204 IF l_sub_rec.accounting_method_code = 'NET' THEN --[3]
4205
4206 null; -- close sub line
4207
4208 ELSIF l_sub_rec.accounting_method_code = 'AMORTIZE'THEN
4209
4210 IF (is_debug_statement_on) THEN
4211 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_STREAMS_UTIL.get_dependent_stream_type');
4212 END IF;
4213 -- SECHAWLA 29-DEC-05 4911502 : added begin
4214 OKL_STREAMS_UTIL.get_dependent_stream_type(
4215 p_khr_id => p_term_rec.p_contract_id,
4216 p_primary_sty_id => l_sub_rec.stream_type_id,
4217 p_dependent_sty_purpose => 'SUBSIDY_INCOME', -- ***** confirm
4218 x_return_status => l_return_status,
4219 x_dependent_sty_id => l_accrual_sty_id);
4220 IF (is_debug_statement_on) THEN
4221 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_STREAMS_UTIL.get_dependent_stream_type , return status : ' || l_return_status);
4222 END IF;
4223
4224 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4225 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4226 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4227 RAISE OKL_API.G_EXCEPTION_ERROR;
4228 END IF;
4229
4230 l_sty_id := l_accrual_sty_id; --l_sub_rec.accrual_stream_type_id; --RMUNJULU *** Changed to pass accrual_stream_type_id
4231 -- SECHAWLA 29-DEC-05 4911502 : added end
4232
4233
4234 --Accelerate Income Recognization
4235 -- get contract_end_date
4236 OPEN c_contract_eff_to(p_term_rec.p_contract_id);
4237 FETCH c_contract_eff_to INTO l_contract_end_date ;
4238 CLOSE c_contract_eff_to ;
4239
4240 -- **SMODUGA added
4241 -- get currency conversion information
4242 OPEN c_currency_conversion(p_term_rec.p_contract_id);
4243 FETCH c_currency_conversion INTO l_currency_conversion_type,
4244 l_currency_conversion_rate,
4245 l_currency_conversion_date;
4246 CLOSE c_currency_conversion ;
4247
4248 -- akrangan for bug 5669097 start
4249 IF l_acceleration_tbl.COUNT>0 THEN
4250 FOR c IN l_acceleration_tbl.first .. l_acceleration_tbl.last
4251 LOOP
4252 IF (l_acceleration_tbl(c).khr_id = p_term_rec.p_contract_id
4253 AND l_acceleration_tbl(c).sty_id =l_sty_id
4254 AND l_acceleration_tbl(c).kle_id =l_asset_tbl(i).p_kle_id )
4255 THEN
4256 v_flag :='Y';
4257 EXIT;
4258 ELSE
4259 v_flag :='N';
4260 END IF;
4261 END LOOP;
4262 END IF;
4263 l_acceleration_tbl(indx).khr_id :=p_term_rec.p_contract_id;
4264 l_acceleration_tbl(indx).sty_id :=l_sty_id;
4265 l_acceleration_tbl(indx).kle_id :=l_asset_tbl(i).p_kle_id ;
4266 indx := indx + 1;
4267 -- akrangan for bug 5669097 End
4268 OPEN get_accel_till_csr(p_term_rec.p_contract_id,l_sty_id);
4269 FETCH get_accel_till_csr INTO l_acceleration_rec.accelerate_till_date;
4270 CLOSE get_accel_till_csr ;
4271
4272 -- **END SMODUGA added
4273 --akrangan Bug 5526955 fix start
4274 --Based on CHK_ACCRUAL_PREVIOUS_MNTH_YN setup check accruals till quote eff date OR previous month last date
4275 OPEN check_accrual_previous_csr;
4276 FETCH check_accrual_previous_csr INTO l_accrual_previous_mnth_yn;
4277 CLOSE check_accrual_previous_csr;
4278 --Bug 5852720 by akrangan starts
4279 -- fix for bug -- 5610960 -- added below condition
4280 -- If quote exists then cancelation date is quote eff from date else sysdate
4281 IF nvl(okl_am_lease_loan_trmnt_pvt.g_quote_exists,'N') = 'Y' THEN
4282 --Bug 5852720 by akrangan ends
4283 IF nvl(l_accrual_previous_mnth_yn,'N') = 'N' THEN
4284 l_acceleration_rec.accelerate_from_date := TRUNC(LAST_DAY(l_quote_eff_date) + 1);
4285 ELSE
4286 l_acceleration_rec.accelerate_from_date := LAST_DAY(TRUNC(l_quote_eff_date, 'MONTH')-1)+1;
4287 END IF;
4288 --akrangan Bug 5526955 fix end
4289 --Bug 5852720 by srsreeni starts
4290 ELSE
4291 l_acceleration_rec.accelerate_from_date := TRUNC(LAST_DAY(l_quote_eff_date) + 1);
4292 END IF;
4293 --Bug 5852720 by srsreeni ends
4294 --pre populate the accraual rec
4295 l_acceleration_rec.khr_id := p_term_rec.p_contract_id; -- Id of the contract whose stream type needs to be accelerated
4296 l_acceleration_rec.sty_id := l_sty_id;-- Id of the stream type which needs to be accelerated
4297 l_acceleration_rec.acceleration_date := l_valid_gl_date; -- Date of acceleration (Transaction date) - -rmunjulu EDAT
4298
4299 l_acceleration_rec.kle_id := l_asset_tbl(i).p_kle_id; --Smoduga added for handling partial terminations.
4300 -- Termination quote number
4301 OPEN c_term_quote(p_term_rec.p_quote_id);
4302 FETCH c_term_quote INTO l_quote_number;
4303 IF c_term_quote%FOUND THEN
4304 l_acceleration_rec.description := 'Accrual acceleration for Asset number '
4305 ||l_asset_tbl(i).p_asset_name||
4306 'and Contract number '||p_term_rec.p_contract_number ||
4307 'upon acceptance of ' || l_quote_number;
4308 ELSE
4309 l_acceleration_rec.description := 'Accrual acceleration for Asset number '
4310 ||l_asset_tbl(i).p_asset_name||
4311 'and Contract number '||p_term_rec.p_contract_number;
4312 END IF;
4313 CLOSE c_term_quote;
4314
4315 l_acceleration_rec.accrual_rule_yn := 'N';
4316
4317 -- check for recourse
4318 IF l_sub_rec.recourse_yn <> 'Y' THEN --[7]
4319 -- akrangan for bug 5669097 start
4320 IF v_flag ='N' THEN
4321 -- akrangan for bug 5669097 End
4322 -- accelerate income recognition
4323 IF (is_debug_statement_on) THEN
4324 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals');
4325 END IF;
4326 OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals (
4327 p_api_version => p_api_version,
4328 p_init_msg_list => OKL_API.G_FALSE,
4329 x_return_status => l_return_status,
4330 x_msg_count => l_msg_count,
4331 x_msg_data => l_msg_data,
4332 p_acceleration_rec => l_acceleration_rec,
4333 x_trx_number => l_trx_number);
4334 IF (is_debug_statement_on) THEN
4335 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals , return status : ' || l_return_status);
4336 END IF;
4337
4338 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4339
4340 OKL_API.set_message(
4341 p_app_name => G_APP_NAME,
4342 p_msg_name => 'OKL_AM_SUBSIDY_INC_RECOG',
4343 p_token1 => 'ASSET_NUMBER',
4344 p_token1_value => l_asset_tbl(i).p_asset_name,
4345 p_token2 => 'CONTRACT_NUMBER',
4346 p_token2_value => p_term_rec.p_contract_number);
4347
4348 END IF;
4349
4350 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4351 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4352 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4353 RAISE OKL_API.G_EXCEPTION_ERROR;
4354 END IF;
4355 -- akrangan for bug 5669097 start
4356 -- Start MGAAP 7263041
4357 OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS;
4358 OKL_STREAMS_UTIL.get_dependent_stream_type_rep(
4359 p_khr_id => p_term_rec.p_contract_id,
4360 p_primary_sty_id => l_sub_rec.stream_type_id,
4361 p_dependent_sty_purpose => 'SUBSIDY_INCOME',
4362 x_return_status => l_return_status,
4363 x_dependent_sty_id => l_accrual_sty_id_rep);
4364 IF (is_debug_statement_on) THEN
4365 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_STREAMS_UTIL.get_dependent_stream_type , return status : ' || l_return_status);
4366 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_accrual_sty_id_rep : ' || l_accrual_sty_id_rep);
4367 END IF;
4368
4369 IF (l_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
4370 l_acceleration_rec.sty_id := l_accrual_sty_id_rep;
4371 l_acceleration_rec.trx_number := l_trx_number;
4372
4373 OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals (
4374 p_api_version => p_api_version,
4375 p_init_msg_list => OKL_API.G_FALSE,
4376 x_return_status => l_return_status,
4377 x_msg_count => l_msg_count,
4378 x_msg_data => l_msg_data,
4379 p_acceleration_rec => l_acceleration_rec,
4380 p_representation_type => 'SECONDARY',
4381 x_trx_number => l_trx_number);
4382 OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
4383
4384 IF (is_debug_statement_on) THEN
4385 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals , return status : ' || l_return_status);
4386 END IF;
4387
4388 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4389 OKL_API.set_message(
4390 p_app_name => G_APP_NAME,
4391 p_msg_name => 'OKL_AM_SUBSIDY_INC_RECOG',
4392 p_token1 => 'ASSET_NUMBER',
4393 p_token1_value => l_asset_tbl(i).p_asset_name,
4394 p_token2 => 'CONTRACT_NUMBER',
4395 p_token2_value => p_term_rec.p_contract_number);
4396 END IF;
4397
4398 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4399 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4400 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4401 RAISE OKL_API.G_EXCEPTION_ERROR;
4402 END IF;
4403
4404 END IF;
4405 -- end MGAAP 7263041
4406 END IF;
4407 -- akrangan for bug 5669097 End
4408
4409 ELSE -- Recourse
4410
4411 -- calculation basis FULL
4412 IF l_sub_rec.TERMINATION_REFUND_BASIS = 'ALL' THEN --[9]
4413
4414 -- AMORTIZE = Y ,RECOURSE =Y ,CALC basis = FULL,Billing Method = Invoice
4415 IF l_sub_rec.receipt_method_code = 'BILL'
4416 OR l_sub_rec.receipt_method_code = 'FUND' THEN --[10]
4417
4418 -- RMUNJULU 3280473 Get the subsidy subline amount which should be refunded
4419 lx_subsidy_amount := l_sub_rec.subsidy_amount;
4420
4421 END IF; --[10]
4422 -- adagur for bug 5669097 start
4423 IF v_flag ='N' THEN
4424 -- adagur for bug 5669097 End
4425 IF (is_debug_statement_on) THEN
4426 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_GENERATE_ACCRUALS_PVT.ACCELERATE_ACCRUALS');
4427 END IF;
4428 -- accelerate income recognition
4429 OKL_GENERATE_ACCRUALS_PVT.ACCELERATE_ACCRUALS(
4430 p_api_version => p_api_version,
4431 p_init_msg_list => OKL_API.G_FALSE,
4432 x_return_status => l_return_status,
4433 x_msg_count => l_msg_count,
4434 x_msg_data => l_msg_data,
4435 p_acceleration_rec => l_acceleration_rec,
4436 x_trx_number => l_trx_number);
4437 IF (is_debug_statement_on) THEN
4438 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_GENERATE_ACCRUALS_PVT.ACCELERATE_ACCRUALS , return status : ' || l_return_status);
4439 END IF;
4440
4441 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4442
4443 OKL_API.set_message(
4444 p_app_name => G_APP_NAME,
4445 p_msg_name => 'OKL_AM_SUBSIDY_INC_RECOG',
4446 p_token1 => 'ASSET_NUMBER',
4447 p_token1_value => l_asset_tbl(i).p_asset_name,
4448 p_token2 => 'CONTRACT_NUMBER',
4449 p_token2_value => p_term_rec.p_contract_number);
4450
4451 END IF;
4452
4453 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4454 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4455 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4456 RAISE OKL_API.G_EXCEPTION_ERROR;
4457 END IF;
4458 -- akrangan for bug 5669097 start
4459 -- Start MGAAP 7263041
4460 OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS;
4461 OKL_STREAMS_UTIL.get_dependent_stream_type_rep(
4462 p_khr_id => p_term_rec.p_contract_id,
4463 p_primary_sty_id => l_sub_rec.stream_type_id,
4464 p_dependent_sty_purpose => 'SUBSIDY_INCOME',
4465 x_return_status => l_return_status,
4466 x_dependent_sty_id => l_accrual_sty_id_rep);
4467 IF (is_debug_statement_on) THEN
4468 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_STREAMS_UTIL.get_dependent_stream_type , return status : ' || l_return_status);
4469 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_accrual_sty_id_rep : ' || l_accrual_sty_id_rep);
4470 END IF;
4471
4472 IF (l_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
4473 l_acceleration_rec.sty_id := l_accrual_sty_id_rep;
4474 l_acceleration_rec.trx_number := l_trx_number;
4475
4476 OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals (
4477 p_api_version => p_api_version,
4478 p_init_msg_list => OKL_API.G_FALSE,
4479 x_return_status => l_return_status,
4480 x_msg_count => l_msg_count,
4481 x_msg_data => l_msg_data,
4482 p_acceleration_rec => l_acceleration_rec,
4483 p_representation_type => 'SECONDARY',
4484 x_trx_number => l_trx_number);
4485 OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS;
4486
4487 IF (is_debug_statement_on) THEN
4488 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_GENERATE_ACCRUALS_PVT.accelerate_accruals , return status : ' || l_return_status);
4489 END IF;
4490
4491 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4492 OKL_API.set_message(
4493 p_app_name => G_APP_NAME,
4494 p_msg_name => 'OKL_AM_SUBSIDY_INC_RECOG',
4495 p_token1 => 'ASSET_NUMBER',
4496 p_token1_value => l_asset_tbl(i).p_asset_name,
4497 p_token2 => 'CONTRACT_NUMBER',
4498 p_token2_value => p_term_rec.p_contract_number);
4499 END IF;
4500
4501 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4502 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4503 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4504 RAISE OKL_API.G_EXCEPTION_ERROR;
4505 END IF;
4506
4507 END IF;
4508 -- end MGAAP 7263041
4509 END IF;
4510 -- akrangan for bug 5669097 End
4511 ELSIF l_sub_rec.TERMINATION_REFUND_BASIS = 'FORMULA' THEN
4512
4513 -- get Formula name
4514 OPEN c_formula(l_sub_rec.refund_formula_id);
4515 FETCH c_formula INTO l_formula_name ;
4516 CLOSE c_formula ;
4517
4518 IF l_sub_rec.receipt_method_code = 'BILL'
4519 OR l_sub_rec.receipt_method_code = 'FUND' THEN --A/P invoice --[13]
4520
4521 IF (is_debug_statement_on) THEN
4522 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_EXECUTE_FORMULA_PUB.execute');
4523 END IF;
4524 -- get subsidy amount
4525 OKL_EXECUTE_FORMULA_PUB.execute(
4526 p_api_version => p_api_version,
4527 p_init_msg_list => OKL_API.G_FALSE,
4528 x_return_status => l_return_status,
4529 x_msg_count => l_msg_count,
4530 x_msg_data => l_msg_data,
4531 p_formula_name => l_formula_name,
4532 p_contract_id => p_term_rec.p_contract_id,
4533 p_line_id => l_asset_tbl(i).p_kle_id,
4534 p_additional_parameters => okl_execute_formula_pub.G_ADDITIONAL_PARAMETERS_NULL,
4535 x_value =>lx_subsidy_amount);
4536 IF (is_debug_statement_on) THEN
4537 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_EXECUTE_FORMULA_PUB.execute , return status : ' || l_return_status);
4538 END IF;
4539
4540 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4541 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4542 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4543 RAISE OKL_API.G_EXCEPTION_ERROR;
4544 END IF;
4545 END IF; -- [13]
4546 END IF; --[9]
4547 -------------------------------------------------
4548 --Gathering data for creating Invoice
4549 -------------------------------------------------
4550 -- Get Application Info
4551 OPEN c_app_info ;
4552 FETCH c_app_info INTO l_app_id;
4553 IF(c_app_info%NOTFOUND) THEN
4554 -- Change Message
4555 Okc_Api.set_message(G_APP_NAME, 'OKL_NO_TRANSACTION',
4556 G_COL_NAME_TOKEN,'Billing');
4557 x_return_status := OKC_API.G_RET_STS_ERROR ;
4558 CLOSE c_app_info ;
4559 RAISE OKC_API.G_EXCEPTION_ERROR;
4560 END if ;
4561
4562 CLOSE c_app_info;
4563
4564 -- **SMODUGA added for AP invoice creation
4565 --l_tapv_rec.vendor_id := l_sub_rec.vendor_id;
4566 -- ** END SMODUGA added for AP invoice creation
4567
4568 -- get Vendor site Id
4569 OPEN c_vendor_info (l_sub_rec.subsidy_line_id);
4570 FETCH c_vendor_info INTO l_tapv_rec.vendor_id,l_tapv_rec.IPVS_ID;
4571 IF(c_vendor_info%NOTFOUND) THEN
4572 -- Change Message
4573 Okc_Api.set_message(G_APP_NAME, 'OKL_NO_VENDOR_SITE');
4574 x_return_status := OKC_API.G_RET_STS_ERROR ;
4575 CLOSE c_vendor_info ;
4576 RAISE OKC_API.G_EXCEPTION_ERROR;
4577 END if ;
4578
4579 CLOSE c_vendor_info;
4580
4581 l_tapv_rec.sfwt_flag := 'N' ;
4582 l_tapv_rec.TRX_STATUS_CODE := 'ENTERED' ;
4583 l_tapv_rec.currency_code := l_sub_rec.currency_code;
4584
4585 -- **SMODUGA added for creation of AP invoice
4586 l_tapv_rec.CURRENCY_CONVERSION_TYPE := l_currency_conversion_type;
4587 l_tapv_rec.CURRENCY_CONVERSION_RATE := l_currency_conversion_rate;
4588 l_tapv_rec.CURRENCY_CONVERSION_DATE := l_currency_conversion_date;
4589 -- ** END SMODUGA added for AP invoice creation
4590
4591 l_tapv_rec.SET_OF_BOOKS_ID := l_sob_id; --RMUNJULU *** Set the set_of_books_id
4592
4593 -- GET TRANSACTION TYPE
4594 OPEN c_trx_type ('Disbursement', 'US');
4595 FETCH c_trx_type INTO l_trx_type_ID;
4596 IF(c_trx_type%NOTFOUND) THEN
4597 Okc_Api.set_message(G_APP_NAME, 'OKL_NO_TRANSACTION',
4598 G_COL_NAME_TOKEN,'Disbursement');
4599 x_return_status := OKC_API.G_RET_STS_ERROR ;
4600 CLOSE c_trx_type ;
4601 RAISE OKC_API.G_EXCEPTION_ERROR;
4602 END if ;
4603 CLOSE c_trx_type ;
4604
4605 l_tapv_rec.TRY_ID := l_trx_type_ID;
4606 l_tapv_rec.AMOUNT := lx_subsidy_amount;
4607 --20-NOV-2006 ANSETHUR R12B - LEGAL ENTITY UPTAKE PROJECT
4608 l_tapv_rec.legal_entity_id :=OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(p_term_rec.p_contract_id);
4609 --** SMODUGA Added for invoice generation
4610 l_tapv_rec.invoice_type := 'STANDARD';
4611 --** END SMODUGA Added for invoice generation
4612 IF (is_debug_statement_on) THEN
4613 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'Getting invoice number');
4614 END IF;
4615
4616 l_tapv_rec.Invoice_number := get_invoice_number(
4617 p_app_id => l_app_id,
4618 p_cat_code =>l_document_category,
4619 p_sob_id =>l_tapv_rec.SET_OF_BOOKS_ID,
4620 p_met_code => 'A',
4621 p_trx_date => SYSDATE,
4622 p_dbseqnum => lx_dbseqnm,
4623 p_dbseqid => lx_dbseqid
4624 );
4625
4626
4627 l_tapv_rec.WORKFLOW_YN := 'N';
4628 l_tapv_rec.CONSOLIDATE_YN := 'N';
4629 l_tapv_rec.WAIT_VENDOR_INVOICE_YN := 'N';
4630
4631 -- SMODUGA
4632 -- setting all three dates to termination date
4633 -- instead of SYSDATE
4634
4635 l_tapv_rec.DATE_INVOICED := l_quote_accpt_date; -- rmunjulu EDAT
4636 l_tapv_rec.DATE_GL := l_quote_accpt_date; -- rmunjulu EDAT
4637 l_tapv_rec.DATE_ENTERED := l_quote_accpt_date; -- rmunjulu EDAT
4638
4639 -- END SMODUGA
4640
4641 l_tapv_rec.object_version_number := 1;
4642
4643 SELECT DECODE(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,FND_GLOBAL.CONC_REQUEST_ID),
4644 DECODE(FND_GLOBAL.PROG_APPL_ID,-1,NULL,FND_GLOBAL.PROG_APPL_ID),
4645 DECODE(FND_GLOBAL.CONC_PROGRAM_ID,-1,NULL,FND_GLOBAL.CONC_PROGRAM_ID),
4646 DECODE(FND_GLOBAL.CONC_REQUEST_ID,-1,NULL,SYSDATE),
4647 mo_global.get_current_org_id() INTO l_tapv_rec.REQUEST_ID,
4648 l_tapv_rec.PROGRAM_APPLICATION_ID,
4649 l_tapv_rec.PROGRAM_ID,
4650 l_tapv_rec.PROGRAM_UPDATE_DATE,
4651 l_tapv_rec.ORG_ID FROM dual;
4652
4653 --**SMODUGA Added for invoice lines ** --
4654 ----------------------------------------------------
4655 -- Populate internal AP invoice Lines Record
4656 ------------------------------------------------------
4657 /* sosharma 17-01-2007,added assignment of khr_id to l_tapv_rec
4658 Start Changes
4659 */
4660 l_tplv_rec.KHR_ID := p_term_rec.p_contract_id;
4661 /* End Changes */
4662 l_tplv_rec.amount := l_tapv_rec.amount;
4663 l_tplv_rec.sty_id := l_sub_sty_id; --smoduga changed to subsidy stream type
4664 l_tplv_rec.inv_distr_line_code := 'MANUAL';
4665 l_tplv_rec.line_number := 1;
4666 l_tplv_rec.org_id := l_tapv_rec.org_id;
4667 l_tplv_rec.disbursement_basis_code := 'BILL_DATE';
4668
4669 /*sosharma 12-jan-07
4670 Build:R12
4671 Added the call to disbursement procedure ,which is having the consolidated functionality of creating AP lines,header and AP accounting
4672 */
4673 l_tplv_tbl(0):=l_tplv_rec;
4674 IF (is_debug_statement_on) THEN
4675 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_CREATE_DISB_TRANS_PVT.create_disb_trx');
4676 END IF;
4677 OKL_CREATE_DISB_TRANS_PVT.create_disb_trx(p_api_version => l_api_version
4678 ,p_init_msg_list => OKL_API.G_FALSE
4679 ,x_return_status => l_return_status
4680 ,x_msg_count => x_msg_count
4681 ,x_msg_data => x_msg_data
4682 ,p_tapv_rec => l_tapv_rec
4683 ,p_tplv_tbl => l_tplv_tbl
4684 ,x_tapv_rec => x_tapv_rec
4685 ,x_tplv_tbl => x_tplv_tbl
4686 );
4687 IF (is_debug_statement_on) THEN
4688 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_CREATE_DISB_TRANS_PVT.create_disb_trx , return status : ' || l_return_status);
4689 END IF;
4690 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4691 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4692 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4693 RAISE OKL_API.G_EXCEPTION_ERROR;
4694 END IF;
4695
4696 x_tplv_rec := x_tplv_tbl(x_tplv_tbl.FIRST);
4697
4698 /*End Changes sosharma */
4699
4700
4701 END IF; -- recourse --[7]
4702 END IF ; -- Accounting method --[3]
4703 -- close sub line
4704 END IF; -- quote type checking for TER_RELEASE_WO_PURCHASE
4705 END LOOP; -- subsidies --[L3]
4706 END LOOP; -- Main --[L2]
4707 END IF;
4708
4709 -- end the transaction
4710 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
4711 IF (is_debug_procedure_on) THEN
4712 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
4713 END IF;
4714 EXCEPTION
4715 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4716 IF (is_debug_exception_on) THEN
4717 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
4718 END IF;
4719
4720 x_return_status := OKL_API.HANDLE_EXCEPTIONS
4721 (
4722 l_api_name,
4723 G_PKG_NAME,
4724 'OKL_API.G_RET_STS_ERROR',
4725 x_msg_count,
4726 x_msg_data,
4727 '_PVT'
4728 );
4729 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4730 IF (is_debug_exception_on) THEN
4731 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
4732 END IF;
4733
4734 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
4735 (
4736 l_api_name,
4737 G_PKG_NAME,
4738 'OKL_API.G_RET_STS_UNEXP_ERROR',
4739 x_msg_count,
4740 x_msg_data,
4741 '_PVT'
4742 );
4743 WHEN OTHERS THEN
4744 IF (is_debug_exception_on) THEN
4745 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
4746 || sqlcode || ' , SQLERRM : ' || sqlerrm);
4747 END IF;
4748
4749 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
4750 (
4751 l_api_name,
4752 G_PKG_NAME,
4753 'OTHERS',
4754 x_msg_count,
4755 x_msg_data,
4756 '_PVT'
4757 );
4758
4759 END process_discount_subsidy;
4760
4761 -- Start of comments
4762 -- Procedure Name : process_adjustments
4763 -- Desciption : method to handle accrual adjustments
4764 -- Business Rules :
4765 -- Parameters :
4766 -- Version : 1.0
4767 -- History : 08 Nov 2004 PAGARG Bug# 3999921 (T and A)created
4768 -- : 14-Dec-04 rmunjulu TNA Modified to set return status properly and other changes
4769 -- : 14-Dec-04 rmunjulu TNA Additional changes as called API signature has changed
4770 -- : 14-Dec-04 rmunjulu TNA Close cursors in exception block
4771 -- : 20-Dec-04 rmunjulu TNA Added p_tcnv_rec since trn_id is needed
4772 -- : 20-Dec-04 rmunjulu TNA Added condition to check if advance_rent present
4773 -- : 10-Feb-05 PAGARG Bug 4177025 Create accounting distributions
4774 -- : after creating invoice lines
4775 -- : 21-Feb-05 rmunjulu Bug 4177025 Handle Return status properly
4776 -- End of comments
4777 PROCEDURE process_adjustments(
4778 p_api_version IN NUMBER,
4779 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
4780 x_return_status OUT NOCOPY VARCHAR2,
4781 x_msg_count OUT NOCOPY NUMBER,
4782 x_msg_data OUT NOCOPY VARCHAR2,
4783 p_term_rec IN term_rec_type,
4784 p_tcnv_rec IN tcnv_rec_type, -- rmunjulu TNA Added since trn_id is needed
4785 p_call_origin IN VARCHAR2 DEFAULT NULL,
4786 p_termination_date IN DATE) IS
4787
4788 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'process_adjustments';
4789 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
4790 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
4791 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
4792 l_api_name CONSTANT VARCHAR2(30) := 'process_adjustments';
4793 l_api_version CONSTANT NUMBER := 1;
4794 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS; -- rmunjulu TNA Defaulted
4795 l_msg_count NUMBER;
4796 l_msg_data VARCHAR2(2000);
4797 lx_asset_tbl OKL_AM_LEASE_TRMNT_PVT.klev_tbl_type;
4798 l_taiv_rec taiv_rec_type;
4799 lx_taiv_rec taiv_rec_type;
4800 l_tilv_rec tilv_rec_type;
4801 lx_tilv_rec tilv_rec_type;
4802 l_cm_try_id NUMBER;
4803 l_counter NUMBER;
4804 l_asset_ref_amt NUMBER;
4805
4806 l_quote_accpt_date DATE;
4807 l_quote_eff_date DATE;
4808
4809 CURSOR l_qte_dtls_csr (p_qte_id IN NUMBER) IS
4810 SELECT qte.currency_code currency_code,
4811 qte.currency_conversion_type currency_conversion_type,
4812 qte.currency_conversion_rate currency_conversion_rate,
4813 qte.currency_conversion_date currency_conversion_date
4814 FROM okl_trx_quotes_b qte
4815 WHERE qte.id = p_qte_id;
4816
4817 -- Cursor to obtain refund asset remaining amount
4818 CURSOR l_ref_asset_amt_csr(p_khr_id IN NUMBER, p_kle_id IN NUMBER, p_date IN DATE) IS
4819 SELECT stm.sty_id,
4820 SUM(ste.amount) amount
4821 FROM okl_streams stm
4822 ,okl_strm_type_b sty
4823 ,okc_k_lines_b kle
4824 ,okc_statuses_b kls
4825 ,okl_strm_elements ste
4826 WHERE stm.khr_id = p_khr_id
4827 AND stm.active_yn = 'Y'
4828 AND stm.say_code = 'CURR'
4829 AND ste.stm_id = stm.id
4830 AND sty.id = stm.sty_id
4831 AND sty.billable_yn = 'Y'
4832 AND kle.id = stm.kle_id
4833 AND kls.code = kle.sts_code
4834 AND kls.ste_code = 'ACTIVE'
4835 AND ste.date_billed IS NULL
4836 AND trunc(ste.stream_element_date) > trunc(p_date)
4837 AND kle.id = p_kle_id
4838 AND STY.STREAM_TYPE_PURPOSE = 'ADVANCE_RENT'
4839 GROUP BY stm.sty_id;
4840
4841 -- rmunjulu TNA Get the FEE and SERVICE Top Lines
4842 CURSOR p_chr_lines_csr(p_chr_id IN NUMBER) IS
4843 SELECT CLE.ID
4844 FROM OKC_k_LINES_B CLE,
4845 OKC_LINE_STYLES_B LTY
4846 WHERE CLE.LSE_ID = LTY.ID
4847 AND LTY.LTY_CODE IN ('FEE', 'SOLD_SERVICE') -- rmunjulu TNA Give the proper Alias
4848 AND CLE.CHR_ID = p_chr_id; -- rmunjulu TNA Give the proper Alias
4849
4850 l_sty_id NUMBER;
4851 l_line_id_tbl OKL_ACCRUAL_SEC_PVT.p_line_id_tbl_type;
4852 lx_accrual_adjustment_tbl OKL_ACCRUAL_SEC_PVT.p_accrual_adjustment_tbl_type;
4853 lx_trx_number VARCHAR2(30) := null; -- MGAAP 7263041
4854 l_accrual_rec OKL_GENERATE_ACCRUALS_PVT.adjust_accrual_rec_type; -- rmunjulu TNA additional changes -- Changed
4855 l_stream_tbl OKL_GENERATE_ACCRUALS_PVT.stream_tbl_type;
4856 l_valid_gl_date DATE;
4857 l_trmnt_try_id NUMBER;
4858
4859 -- rmunjulu TNA declared
4860 l_empty_taiv_rec taiv_rec_type;
4861 l_empty_tilv_rec tilv_rec_type;
4862
4863 -- Bug 4177025 PAGARG 10-Feb-2005 declare record for creating accounting distributions
4864 l_bpd_acc_rec okl_acc_call_pub.bpd_acc_rec_type;
4865
4866 --rmunjulu 4769094
4867 CURSOR check_accrual_previous_csr IS
4868 SELECT NVL(CHK_ACCRUAL_PREVIOUS_MNTH_YN,'N')
4869 FROM OKL_SYSTEM_PARAMS;
4870
4871 --rmunjulu 4769094
4872 l_accrual_previous_mnth_yn VARCHAR2(3);
4873 l_accrual_adjst_date DATE;
4874
4875 -- ansethur 27-FEB-07 R12B Added for Billing Enhancement Project Start Changes
4876 l_tldv_tbl okl_tld_pvt.tldv_tbl_type;
4877 lx_tldv_tbl okl_tld_pvt.tldv_tbl_type;
4878
4879 l_tilv_tbl okl_txl_ar_inv_lns_pub.tilv_tbl_type;
4880 lx_tilv_tbl okl_txl_ar_inv_lns_pub.tilv_tbl_type;
4881 -- ansethur 27-FEB-07 R12B Added for Billing Enhancement Project End Changes
4882
4883 -- MGAAP start 7263041
4884 CURSOR check_csr(p_chr_id NUMBER) IS
4885 SELECT A.MULTI_GAAP_YN,
4886 B.REPORTING_PDT_ID
4887 FROM OKL_K_HEADERS A,
4888 OKL_PRODUCTS B
4889 WHERE A.ID = p_chr_id
4890 AND A.PDT_ID = B.ID;
4891 l_multi_gaap_yn okl_k_headers.multi_gaap_yn%TYPE;
4892 l_reporting_pdt_id okl_products.REPORTING_PDT_ID%TYPE;
4893 -- MGAAP end 7263041
4894
4895 BEGIN
4896 IF (is_debug_procedure_on) THEN
4897 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
4898 END IF;
4899 IF (is_debug_statement_on) THEN
4900 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_call_origin: '|| p_call_origin);
4901 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_termination_date: '|| p_termination_date);
4902 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_id: '|| p_term_rec.p_contract_id);
4903 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
4904 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_number: '|| p_term_rec.p_contract_number);
4905 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_modifier: '|| p_term_rec.p_contract_modifier);
4906 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
4907 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_control_flag: '|| p_term_rec.p_control_flag);
4908 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_type: '|| p_term_rec.p_quote_type);
4909 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tcnv_rec.id: '||p_tcnv_rec.id);
4910 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tcnv_rec.tmt_recycle_yn: '||p_tcnv_rec.tmt_recycle_yn);
4911 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_tcnv_rec.qte_id: '||p_tcnv_rec.qte_id);
4912 END IF;
4913
4914 l_msg_count := x_msg_count;
4915 l_msg_data := x_msg_data;
4916
4917 --Check API version, initialize message list and create savepoint.
4918 l_return_status := OKL_API.START_ACTIVITY(l_api_name,
4919 G_PKG_NAME,
4920 p_init_msg_list,
4921 l_api_version,
4922 p_api_version,
4923 '_PVT',
4924 x_return_status);
4925 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4926 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4927 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
4928 RAISE OKL_API.G_EXCEPTION_ERROR;
4929 END IF;
4930
4931 -- MGAAP start 7263041
4932 OPEN check_csr(p_term_rec.p_contract_id);
4933 FETCH check_csr INTO
4934 l_multi_gaap_yn,
4935 l_reporting_pdt_id;
4936 CLOSE check_csr;
4937 -- MGAAP end 7263041
4938
4939 -- Full Termination for TER_RELEASE_WO_PURCHASE quote
4940 IF p_term_rec.p_quote_type = 'TER_RELEASE_WO_PURCHASE'
4941 AND p_call_origin = 'FULL'
4942 THEN
4943 IF (is_debug_statement_on) THEN
4944 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_LEASE_TRMNT_PVT.get_contract_lines');
4945 END IF;
4946 -- get line details from OKL_AM_LEASE_TRMNT_PVT
4947 OKL_AM_LEASE_TRMNT_PVT.get_contract_lines(
4948 p_api_version => p_api_version,
4949 p_init_msg_list => OKL_API.G_FALSE,
4950 x_return_status => l_return_status,
4951 x_msg_count => l_msg_count,
4952 x_msg_data => l_msg_data,
4953 p_term_rec => p_term_rec,
4954 x_klev_tbl => lx_asset_tbl);
4955 IF (is_debug_statement_on) THEN
4956 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_LEASE_TRMNT_PVT.get_contract_lines , return status : ' || l_return_status);
4957 END IF;
4958
4959 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)
4960 THEN
4961 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4962 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR)
4963 THEN
4964 RAISE OKL_API.G_EXCEPTION_ERROR;
4965 END IF;
4966 -- If quote exists then accnting date is quote accept date else sysdate
4967 IF nvl(okl_am_lease_loan_trmnt_pvt.g_quote_exists, 'N') = 'Y'
4968 THEN
4969 l_quote_accpt_date := okl_am_lease_loan_trmnt_pvt.g_quote_accept_date;
4970 l_quote_eff_date := okl_am_lease_loan_trmnt_pvt.g_quote_eff_from_date;
4971 ELSE
4972 l_quote_accpt_date := p_termination_date;
4973 l_quote_eff_date := p_termination_date;
4974 END IF;
4975
4976 IF (is_debug_statement_on) THEN
4977 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling okl_am_util_pvt.get_transaction_id');
4978 END IF;
4979 okl_am_util_pvt.get_transaction_id (
4980 p_try_name => 'CREDIT MEMO',
4981 x_return_status => l_return_status,
4982 x_try_id => l_cm_try_id);
4983 IF (is_debug_statement_on) THEN
4984 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called okl_am_util_pvt.get_transaction_id , return status : ' || l_return_status);
4985 END IF;
4986
4987 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS
4988 OR NVL (l_cm_try_id, OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM
4989 THEN
4990 l_return_status := OKL_API.G_RET_STS_ERROR;
4991 OKC_API.SET_MESSAGE (
4992 p_app_name => G_APP_NAME,
4993 p_msg_name => G_INVALID_VALUE,
4994 p_token1 => G_COL_NAME_TOKEN,
4995 p_token1_value => 'Transaction Type');
4996 END IF;
4997
4998 -- rmunjulu TNA Handle return status
4999 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5000 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5001 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5002 RAISE OKL_API.G_EXCEPTION_ERROR;
5003 END IF;
5004
5005
5006 IF lx_asset_tbl.count > 0
5007 THEN
5008 FOR l_counter IN lx_asset_tbl.FIRST..lx_asset_tbl.LAST
5009 LOOP
5010
5011 -- rmunjulu TNA Initialize the variables
5012 l_asset_ref_amt := 0;
5013 l_taiv_rec := l_empty_taiv_rec;
5014 l_tilv_rec := l_empty_tilv_rec;
5015
5016 OPEN l_qte_dtls_csr(p_term_rec.p_quote_id);
5017 FETCH l_qte_dtls_csr INTO l_taiv_rec.currency_code,
5018 l_taiv_rec.currency_conversion_type,
5019 l_taiv_rec.currency_conversion_rate,
5020 l_taiv_rec.currency_conversion_date;
5021 CLOSE l_qte_dtls_csr; -- rmunjulu TNA Close the cursor
5022 OPEN l_ref_asset_amt_csr(p_khr_id => p_term_rec.p_contract_id,
5023 p_kle_id => lx_asset_tbl(l_counter).p_kle_id,
5024 p_date => l_quote_eff_date);
5025 FETCH l_ref_asset_amt_csr INTO l_sty_id, l_asset_ref_amt;
5026 CLOSE l_ref_asset_amt_csr;
5027
5028 l_taiv_rec.try_id := l_cm_try_id;
5029 l_taiv_rec.khr_id := p_term_rec.p_contract_id;
5030 l_taiv_rec.date_invoiced := l_quote_accpt_date;
5031 l_taiv_rec.date_entered := l_quote_accpt_date;
5032 l_taiv_rec.amount := l_asset_ref_amt;
5033
5034 l_taiv_rec.qte_id := p_term_rec.p_quote_id;
5035 l_taiv_rec.description := p_term_rec.p_quote_type;
5036 l_taiv_rec.trx_status_code := 'SUBMITTED'; -- RMUNJULU CHANGED 21-NOV-05
5037 --20-NOV-2006 ANSETHUR R12B - LEGAL ENTITY UPTAKE PROJECT
5038 l_taiv_rec.legal_entity_id :=OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(p_term_rec.p_contract_id);
5039 -- rmunjulu TNA Added this IF
5040 IF l_asset_ref_amt <> 0 THEN
5041
5042 --ansethur 27-FEB-2007 Added for R12 B Billing Architecture Start Changes
5043 -- Included call to Enhanced Billing API in the place of the calls to Billing Header,Lines and Distributions
5044 l_taiv_rec.okl_source_billing_trx := 'TERMINATION';
5045 l_tilv_rec.line_number := l_counter;
5046 l_tilv_rec.kle_id := lx_asset_tbl(l_counter).p_kle_id;
5047 l_tilv_rec.description := 'Adjustment for Advanced Rent';
5048 l_tilv_rec.sty_id := l_sty_id;
5049 l_tilv_rec.amount := l_asset_ref_amt;
5050 l_tilv_rec.inv_receiv_line_code := 'LINE';
5051
5052 l_tilv_tbl(0) := l_tilv_rec; -- Assign the line record in tilv_tbl structure
5053
5054 IF (is_debug_statement_on) THEN
5055 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling okl_internal_billing_pvt.create_billing_trx');
5056 END IF;
5057 okl_internal_billing_pvt.create_billing_trx(p_api_version => l_api_version,
5058 p_init_msg_list => p_init_msg_list,
5059 x_return_status => x_return_status,
5060 x_msg_count => x_msg_count,
5061 x_msg_data => x_msg_data,
5062 p_taiv_rec => l_taiv_rec,
5063 p_tilv_tbl => l_tilv_tbl,
5064 p_tldv_tbl => l_tldv_tbl,
5065 x_taiv_rec => lx_taiv_rec,
5066 x_tilv_tbl => lx_tilv_tbl,
5067 x_tldv_tbl => lx_tldv_tbl);
5068 IF (is_debug_statement_on) THEN
5069 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called okl_internal_billing_pvt.create_billing_trx , return status : ' || x_return_status);
5070 END IF;
5071
5072 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5073 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5074 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5075 RAISE OKL_API.G_EXCEPTION_ERROR;
5076 END IF;
5077
5078 /* --ansethur 23-FEB-2007 commented for R12 B Billing Architecture Begins
5079
5080 okl_trx_ar_invoices_pub.insert_trx_ar_invoices (
5081 p_api_version => P_api_version,
5082 p_init_msg_list => OKL_API.G_FALSE,
5083 x_return_status => l_return_status,
5084 x_msg_count => l_msg_count,
5085 x_msg_data => l_msg_data,
5086 p_taiv_rec => l_taiv_rec,
5087 x_taiv_rec => lx_taiv_rec);
5088
5089 -- rmunjulu TNA Handle return status
5090 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5091 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5092 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5093 RAISE OKL_API.G_EXCEPTION_ERROR;
5094 END IF;
5095
5096 l_tilv_rec.line_number := l_counter;
5097 l_tilv_rec.kle_id := lx_asset_tbl(l_counter).p_kle_id;
5098 l_tilv_rec.description := 'Adjustment for Advanced Rent';
5099 l_tilv_rec.sty_id := l_sty_id;
5100 l_tilv_rec.amount := l_asset_ref_amt;
5101 l_tilv_rec.tai_id := lx_taiv_rec.id;
5102 l_tilv_rec.inv_receiv_line_code := 'LINE';
5103
5104 -- Create Invoice Line
5105 okl_txl_ar_inv_lns_pub.insert_txl_ar_inv_lns (
5106 p_api_version => l_api_version,
5107 p_init_msg_list => OKL_API.G_FALSE,
5108 x_return_status => l_return_status,
5109 x_msg_count => l_msg_count,
5110 x_msg_data => l_msg_data,
5111 p_tilv_rec => l_tilv_rec,
5112 x_tilv_rec => lx_tilv_rec);
5113
5114 -- rmunjulu TNA Handle return status
5115 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5116 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5117 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5118 RAISE OKL_API.G_EXCEPTION_ERROR;
5119 END IF;
5120
5121 -- Bug 4177025 PAGARG 10-Feb-2005 Fix start
5122 -- Added the call to create accounting distributions for the invoice lines
5123 IF l_return_status = OKL_API.G_RET_STS_SUCCESS THEN
5124 l_bpd_acc_rec.id := lx_tilv_rec.id;
5125 l_bpd_acc_rec.source_table := 'OKL_TXL_AR_INV_LNS_B';
5126
5127 -- Create Accounting Distribution
5128 okl_acc_call_pub.create_acc_trans(
5129 p_api_version => l_api_version,
5130 p_init_msg_list => OKL_API.G_FALSE,
5131 x_return_status => l_return_status,
5132 x_msg_count => l_msg_count,
5133 x_msg_data => l_msg_data,
5134 p_bpd_acc_rec => l_bpd_acc_rec);
5135
5136 -- rmunjulu Bug 4177025 Handle Return status properly
5137 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5138 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5139 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5140 RAISE OKL_API.G_EXCEPTION_ERROR;
5141 END IF;
5142
5143 END IF;
5144
5145 -- Bug 4177025 PAGARG 10-Feb-2005 Fix end
5146 --ansethur 27-FEB-2007 commented for R12 B Billing Architecture Ends
5147 */
5148 --ansethur 27-FEB-2007 Added for R12 B Billing Architecture End Changes
5149
5150 END IF; -- rmunjulu TNA End of New IF to check amt there for invoicing
5151 END LOOP;
5152 END IF; -- asset table count
5153
5154 --Bug# 3999921 14-Dec-2004 PAGARG Fix Start
5155 --Instead of calling create_accrual_adjustments, call get_accrual_adjustments
5156 --and generate accruals.
5157 --Populate lines table with id of contract top line for fee and sold service
5158 l_counter := 0;
5159
5160 -- rmunjulu TNA Get the FEE and SERVICE TOP lines
5161 FOR p_chr_lines_rec in p_chr_lines_csr(p_term_rec.p_contract_id)
5162 LOOP
5163 l_counter := l_counter + 1;
5164 l_line_id_tbl(l_counter).id := p_chr_lines_rec.id;
5165 END LOOP;
5166
5167 -- rmunjulu 4769094 Based on CHK_ACCRUAL_PREVIOUS_MNTH_YN setup check accruals till quote eff date OR previous month last date
5168 OPEN check_accrual_previous_csr;
5169 FETCH check_accrual_previous_csr INTO l_accrual_previous_mnth_yn;
5170 CLOSE check_accrual_previous_csr;
5171
5172 IF nvl(l_accrual_previous_mnth_yn,'N') = 'N' THEN -- rmunjulu 4769094 continue with current adjustment date as quote effective date
5173 l_accrual_adjst_date := l_quote_eff_date;
5174 ELSE -- rmunjulu 4769094 new check adjustment date is quote eff dates previous month last date
5175 l_accrual_adjst_date := LAST_DAY(TRUNC(l_quote_eff_date, 'MONTH')-1);
5176 END IF;
5177
5178 -- rmunjulu TNA Get the accrual adjustment streams and amounts for FEE and SERVICE lines
5179 IF (is_debug_statement_on) THEN
5180 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_ACCRUAL_SEC_PVT.Get_Accrual_Adjustment');
5181 END IF;
5182
5183 OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS; -- MGAAP 7263041
5184 OKL_ACCRUAL_SEC_PVT.Get_Accrual_Adjustment(
5185 p_api_version => p_api_version,
5186 p_init_msg_list => OKL_API.G_FALSE,
5187 x_return_status => l_return_status,
5188 x_msg_count => l_msg_count,
5189 x_msg_data => l_msg_data,
5190 p_contract_id => p_term_rec.p_contract_id,
5191 p_line_id_tbl => l_line_id_tbl,
5192 p_adjustment_date => l_accrual_adjst_date, -- rmunjulu 4769094
5193 x_accrual_adjustment_tbl => lx_accrual_adjustment_tbl);
5194 IF (is_debug_statement_on) THEN
5195 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_ACCRUAL_SEC_PVT.Get_Accrual_Adjustment , return status : ' || l_return_status);
5196 END IF;
5197
5198 -- rmunjulu TNA Handle return status
5199 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5200 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5201 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5202 RAISE OKL_API.G_EXCEPTION_ERROR;
5203 END IF;
5204
5205 -- rmunjulu TNA check if table has value before looping thru table and calling the other API
5206 IF lx_accrual_adjustment_tbl.COUNT > 0 THEN
5207
5208 -- rmunjulu TNA Brought the below code into this IF
5209 /* -- rmunjulu TNA Not needed
5210 okl_am_util_pvt.get_transaction_id (
5211 p_try_name => 'TERMINATION',
5212 x_return_status => l_return_status,
5213 x_try_id => l_trmnt_try_id);
5214
5215 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS
5216 OR NVL (l_trmnt_try_id, OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM THEN
5217
5218 l_return_status := OKL_API.G_RET_STS_ERROR;
5219
5220 OKC_API.SET_MESSAGE (
5221 p_app_name => G_APP_NAME,
5222 p_msg_name => G_INVALID_VALUE,
5223 p_token1 => G_COL_NAME_TOKEN,
5224 p_token1_value => 'Transaction Type');
5225 END IF;
5226
5227 -- rmunjulu TNA Handle return status
5228 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5229 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5230 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5231 RAISE OKL_API.G_EXCEPTION_ERROR;
5232 END IF;
5233 */
5234 --Populate online accrual rec type -- rmunjulu TNA set all the values for p_accrual_rec at one place
5235 l_accrual_rec.contract_id := p_term_rec.p_contract_id;
5236 l_accrual_rec.accrual_date := OKL_ACCOUNTING_UTIL.get_valid_gl_date(p_gl_date => l_quote_accpt_date);
5237 l_accrual_rec.source_trx_id := p_tcnv_rec.id; -- rmunjulu TNA Changed
5238 l_accrual_rec.source_trx_type := 'TCN';
5239 --l_accrual_rec.ignore_accrual_rule_yn := 'Y'; -- rmunjulu TNA Additional changes -- Removed
5240 --l_accrual_rec.stream_source_value := 'PROVIDED'; -- rmunjulu TNA Additional changes -- Removed
5241
5242 -- rmunjulu TNA Set the p_stream_tbl values
5243 FOR l_counter IN lx_accrual_adjustment_tbl.FIRST..lx_accrual_adjustment_tbl.LAST LOOP
5244
5245 l_stream_tbl(l_counter).stream_type_id := lx_accrual_adjustment_tbl(l_counter).sty_id;
5246 l_stream_tbl(l_counter).stream_amount := lx_accrual_adjustment_tbl(l_counter).amount;
5247 l_stream_tbl(l_counter).kle_id := lx_accrual_adjustment_tbl(l_counter).line_id;
5248 END LOOP;
5249
5250 -- rmunjulu TNA Create the accounting transactions for the accrual adjustments
5251 -- rmunjulu TNA Additional Changes -- Changed the procedure name
5252 IF (is_debug_statement_on) THEN
5253 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_GENERATE_ACCRUALS_PVT.adjust_accruals');
5254 END IF;
5255 OKL_GENERATE_ACCRUALS_PVT.adjust_accruals(
5256 p_api_version => p_api_version,
5257 p_init_msg_list => OKL_API.G_FALSE,
5258 x_return_status => l_return_status,
5259 x_msg_count => l_msg_count,
5260 x_msg_data => l_msg_data,
5261 x_trx_number => lx_trx_number,
5262 p_accrual_rec => l_accrual_rec,
5263 p_stream_tbl => l_stream_tbl);
5264 IF (is_debug_statement_on) THEN
5265 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_GENERATE_ACCRUALS_PVT.adjust_accruals , return status : ' || l_return_status);
5266 END IF;
5267
5268 -- rmunjulu TNA Handle return status
5269 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5270 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5271 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5272 RAISE OKL_API.G_EXCEPTION_ERROR;
5273 END IF;
5274
5275 --14-Dec-2004 Bug# 3999921 PAGARG Fix end
5276 END IF; -- Check for tbl has records
5277
5278 -- MGAAP start 7263041
5279 IF (l_multi_gaap_yn = 'Y') THEN
5280 IF (is_debug_statement_on) THEN
5281 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_ACCRUAL_SEC_PVT.Get_Accrual_Adjustment for SECONDARY');
5282 END IF;
5283
5284 OKL_STREAMS_SEC_PVT.SET_REPO_STREAMS; -- MGAAP 7263041
5285
5286 OKL_ACCRUAL_SEC_PVT.Get_Accrual_Adjustment(
5287 p_api_version => p_api_version,
5288 p_init_msg_list => OKL_API.G_FALSE,
5289 x_return_status => l_return_status,
5290 x_msg_count => l_msg_count,
5291 x_msg_data => l_msg_data,
5292 p_contract_id => p_term_rec.p_contract_id,
5293 p_line_id_tbl => l_line_id_tbl,
5294 p_adjustment_date => l_accrual_adjst_date, -- rmunjulu 4769094
5295 x_accrual_adjustment_tbl => lx_accrual_adjustment_tbl,
5296 p_product_id => l_reporting_pdt_id); -- MGAAP 7263041
5297
5298 OKL_STREAMS_SEC_PVT.RESET_REPO_STREAMS; -- MGAAP 7263041
5299
5300 IF (is_debug_statement_on) THEN
5301 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_ACCRUAL_SEC_PVT.Get_Accrual_Adjustment , return status : ' || l_return_status);
5302 END IF;
5303
5304 -- rmunjulu TNA Handle return status
5305 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5306 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5307 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5308 RAISE OKL_API.G_EXCEPTION_ERROR;
5309 END IF;
5310
5311 -- rmunjulu TNA check if table has value before looping thru table and calling the other API
5312 IF lx_accrual_adjustment_tbl.COUNT > 0 THEN
5313
5314 --Populate online accrual rec type -- rmunjulu TNA set all the values for p_accrual_rec at one place
5315 l_accrual_rec.contract_id := p_term_rec.p_contract_id;
5316 l_accrual_rec.accrual_date := OKL_ACCOUNTING_UTIL.get_valid_gl_date(p_gl_date => l_quote_accpt_date);
5317 l_accrual_rec.source_trx_id := p_tcnv_rec.id; -- rmunjulu TNA Changed
5318 l_accrual_rec.source_trx_type := 'TCN';
5319 --l_accrual_rec.ignore_accrual_rule_yn := 'Y'; -- rmunjulu TNA Additional changes -- Removed
5320 --l_accrual_rec.stream_source_value := 'PROVIDED'; -- rmunjulu TNA Additional changes -- Removed
5321 l_accrual_rec.trx_number := lx_trx_number; -- MGAAP 7263041
5322
5323 -- rmunjulu TNA Set the p_stream_tbl values
5324 FOR l_counter IN lx_accrual_adjustment_tbl.FIRST..lx_accrual_adjustment_tbl.LAST LOOP
5325
5326 l_stream_tbl(l_counter).stream_type_id := lx_accrual_adjustment_tbl(l_counter).sty_id;
5327 l_stream_tbl(l_counter).stream_amount := lx_accrual_adjustment_tbl(l_counter).amount;
5328 l_stream_tbl(l_counter).kle_id := lx_accrual_adjustment_tbl(l_counter).line_id;
5329 END LOOP;
5330
5331 -- rmunjulu TNA Create the accounting transactions for the accrual adjustments
5332 -- rmunjulu TNA Additional Changes -- Changed the procedure name
5333 IF (is_debug_statement_on) THEN
5334 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_GENERATE_ACCRUALS_PVT.adjust_accruals');
5335 END IF;
5336 OKL_GENERATE_ACCRUALS_PVT.adjust_accruals(
5337 p_api_version => p_api_version,
5338 p_init_msg_list => OKL_API.G_FALSE,
5339 x_return_status => l_return_status,
5340 x_msg_count => l_msg_count,
5341 x_msg_data => l_msg_data,
5342 x_trx_number => lx_trx_number,
5343 p_accrual_rec => l_accrual_rec,
5344 p_stream_tbl => l_stream_tbl,
5345 p_representation_type => 'SECONDARY'); -- MGAAP 7263041
5346 IF (is_debug_statement_on) THEN
5347 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_GENERATE_ACCRUALS_PVT.adjust_accruals , return status : ' || l_return_status);
5348 END IF;
5349
5350 -- rmunjulu TNA Handle return status
5351 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5352 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5353 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5354 RAISE OKL_API.G_EXCEPTION_ERROR;
5355 END IF;
5356
5357 --14-Dec-2004 Bug# 3999921 PAGARG Fix end
5358 END IF; -- Check for tbl has records
5359
5360 END IF;
5361 -- MGAAP end 7263041
5362
5363 END IF;
5364
5365 -- rmunjulu TNA Set the return status properly
5366 x_return_status := l_return_status;
5367
5368 -- end the transaction
5369 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
5370 IF (is_debug_procedure_on) THEN
5371 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
5372 END IF;
5373 EXCEPTION
5374 WHEN OKL_API.G_EXCEPTION_ERROR THEN
5375 IF (is_debug_exception_on) THEN
5376 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
5377 END IF;
5378 -- rmunjulu TNA Close cursors in exception block
5379 IF l_qte_dtls_csr%ISOPEN THEN
5380 CLOSE l_qte_dtls_csr;
5381 END IF;
5382 IF l_ref_asset_amt_csr%ISOPEN THEN
5383 CLOSE l_ref_asset_amt_csr;
5384 END IF;
5385 x_return_status := OKL_API.HANDLE_EXCEPTIONS
5386 (
5387 l_api_name,
5388 G_PKG_NAME,
5389 'OKL_API.G_RET_STS_ERROR',
5390 x_msg_count,
5391 x_msg_data,
5392 '_PVT'
5393 );
5394 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5395 IF (is_debug_exception_on) THEN
5396 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
5397 END IF;
5398 -- rmunjulu TNA Close cursors in exception block
5399 IF l_qte_dtls_csr%ISOPEN THEN
5400 CLOSE l_qte_dtls_csr;
5401 END IF;
5402 IF l_ref_asset_amt_csr%ISOPEN THEN
5403 CLOSE l_ref_asset_amt_csr;
5404 END IF;
5405 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
5406 (
5407 l_api_name,
5408 G_PKG_NAME,
5409 'OKL_API.G_RET_STS_UNEXP_ERROR',
5410 x_msg_count,
5411 x_msg_data,
5412 '_PVT'
5413 );
5414 WHEN OTHERS THEN
5415 IF (is_debug_exception_on) THEN
5416 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5417 || sqlcode || ' , SQLERRM : ' || sqlerrm);
5418 END IF;
5419 -- rmunjulu TNA Close cursors in exception block
5420 IF l_qte_dtls_csr%ISOPEN THEN
5421 CLOSE l_qte_dtls_csr;
5422 END IF;
5423 IF l_ref_asset_amt_csr%ISOPEN THEN
5424 CLOSE l_ref_asset_amt_csr;
5425 END IF;
5426 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
5427 (
5428 l_api_name,
5429 G_PKG_NAME,
5430 'OTHERS',
5431 x_msg_count,
5432 x_msg_data,
5433 '_PVT'
5434 );
5435 END process_adjustments;
5436
5437 -- Start of comments
5438 -- Procedure Name : process_loan_refunds
5439 -- Desciption : Do refund of loans (additional amount billed but not paid above outstanding balance) if expiration
5440 -- Business Rules :
5441 -- Parameters :
5442 -- Version : 1.0
5443 -- History : rmunjulu LOANS_ENHANCEMENTS
5444 -- End of comments
5445 PROCEDURE process_loan_refunds(
5446 p_api_version IN NUMBER,
5447 p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
5448 x_return_status OUT NOCOPY VARCHAR2,
5449 x_msg_count OUT NOCOPY NUMBER,
5450 x_msg_data OUT NOCOPY VARCHAR2,
5451 p_term_rec IN term_rec_type,
5452 p_tcnv_rec IN tcnv_rec_type,
5453 p_call_origin IN VARCHAR2 DEFAULT NULL,
5454 p_termination_date IN DATE) IS
5455
5456 l_module_name VARCHAR2(500) := G_MODULE_NAME || 'process_loan_refunds';
5457 is_debug_exception_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_EXCEPTION);
5458 is_debug_procedure_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_PROCEDURE);
5459 is_debug_statement_on boolean := OKL_DEBUG_PUB.Check_Log_On (l_module_name, G_LEVEL_STATEMENT);
5460 l_api_name CONSTANT VARCHAR2(30) := 'process_loan_refunds';
5461 l_api_version CONSTANT NUMBER := 1;
5462 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5463 l_msg_count NUMBER;
5464 l_msg_data VARCHAR2(2000);
5465 l_taiv_rec taiv_rec_type;
5466 lx_taiv_rec taiv_rec_type;
5467 l_tilv_rec tilv_rec_type;
5468 lx_tilv_rec tilv_rec_type;
5469 l_cm_try_id NUMBER;
5470 l_counter NUMBER := 1;
5471 l_quote_accpt_date DATE;
5472 l_quote_eff_date DATE;
5473 l_sty_id NUMBER;
5474 l_bpd_acc_rec OKL_ACC_CALL_PUB.bpd_acc_rec_type;
5475 l_currency_code OKC_K_HEADERS_B.currency_code%TYPE;
5476 l_loan_refund_amount NUMBER;
5477 l_functional_currency_code VARCHAR2(15);
5478 l_contract_currency_code VARCHAR2(15);
5479 l_currency_conversion_type VARCHAR2(30);
5480 l_currency_conversion_rate NUMBER;
5481 l_currency_conversion_date DATE;
5482 l_converted_amount NUMBER;
5483
5484 -- Since we do not use the amount or converted amount
5485 -- set a hardcoded value for the amount (and pass to to
5486 -- OKL_ACCOUNTING_UTIL.convert_to_functional_currency and get back
5487 -- conversion values )
5488 l_hard_coded_amount NUMBER := 100;
5489
5490 -- ansethur 23-FEB-07 R12B Added for Billing Enhancement Project Start Changes
5491 l_tldv_tbl okl_tld_pvt.tldv_tbl_type;
5492 lx_tldv_tbl okl_tld_pvt.tldv_tbl_type;
5493
5494 l_tilv_tbl okl_txl_ar_inv_lns_pub.tilv_tbl_type;
5495 lx_tilv_tbl okl_txl_ar_inv_lns_pub.tilv_tbl_type;
5496 -- ansethur 23-FEB-07 R12B Added for Billing Enhancement Project End Changes
5497
5498 BEGIN
5499 IF (is_debug_procedure_on) THEN
5500 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name ,'Begin(+)');
5501 END IF;
5502 IF (is_debug_statement_on) THEN
5503 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_call_origin: '|| p_call_origin);
5504 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_termination_date: '|| p_termination_date);
5505 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_id: '|| p_term_rec.p_contract_id);
5506 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
5507 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_number: '|| p_term_rec.p_contract_number);
5508 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_contract_modifier: '|| p_term_rec.p_contract_modifier);
5509 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_id: '|| p_term_rec.p_quote_id);
5510 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_control_flag: '|| p_term_rec.p_control_flag);
5511 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'In param, p_term_rec.p_quote_type: '|| p_term_rec.p_quote_type);
5512 END IF;
5513
5514 l_msg_count := x_msg_count;
5515 l_msg_data := x_msg_data;
5516
5517 --Check API version, initialize message list and create savepoint.
5518 l_return_status := OKL_API.START_ACTIVITY(l_api_name,
5519 G_PKG_NAME,
5520 p_init_msg_list,
5521 l_api_version,
5522 p_api_version,
5523 '_PVT',
5524 x_return_status);
5525
5526 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5527 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5528 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5529 RAISE OKL_API.G_EXCEPTION_ERROR;
5530 END IF;
5531
5532 -- expiration
5533 IF nvl(okl_am_lease_loan_trmnt_pvt.g_quote_exists, 'N') = 'N' THEN
5534
5535 -- If quote exists then accnting date is quote accept date else sysdate
5536 IF nvl(okl_am_lease_loan_trmnt_pvt.g_quote_exists, 'N') = 'Y'
5537 THEN
5538 l_quote_accpt_date := okl_am_lease_loan_trmnt_pvt.g_quote_accept_date;
5539 l_quote_eff_date := okl_am_lease_loan_trmnt_pvt.g_quote_eff_from_date;
5540 ELSE
5541 l_quote_accpt_date := p_termination_date;
5542 l_quote_eff_date := p_termination_date;
5543 END IF;
5544
5545 -- get excess loan payment amount
5546 IF (is_debug_statement_on) THEN
5547 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_excess_loan_payment');
5548 END IF;
5549 l_loan_refund_amount := OKL_AM_UTIL_PVT.get_excess_loan_payment(
5550 x_return_status => l_return_status,
5551 p_khr_id => p_term_rec.p_contract_id);
5552 IF (is_debug_statement_on) THEN
5553 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.get_excess_loan_payment , return status : ' || l_return_status);
5554 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_loan_refund_amount : ' || l_loan_refund_amount);
5555 END IF;
5556
5557 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5558 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5559 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5560 RAISE OKL_API.G_EXCEPTION_ERROR;
5561 END IF;
5562
5563 l_loan_refund_amount := nvl(l_loan_refund_amount,0) * -1;
5564
5565 IF l_loan_refund_amount <> 0 THEN
5566
5567 IF (is_debug_statement_on) THEN
5568 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_AM_UTIL_PVT.get_transaction_id');
5569 END IF;
5570 OKL_AM_UTIL_PVT.get_transaction_id (
5571 p_try_name => 'CREDIT MEMO',
5572 x_return_status => l_return_status,
5573 x_try_id => l_cm_try_id);
5574 IF (is_debug_statement_on) THEN
5575 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_AM_UTIL_PVT.get_transaction_id , return status : ' || l_return_status);
5576 END IF;
5577
5578 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS
5579 OR NVL (l_cm_try_id, OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM
5580 THEN
5581
5582 OKC_API.SET_MESSAGE (
5583 p_app_name => G_APP_NAME,
5584 p_msg_name => G_INVALID_VALUE,
5585 p_token1 => G_COL_NAME_TOKEN,
5586 p_token1_value => 'Transaction Type');
5587
5588 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5589 END IF;
5590
5591 l_functional_currency_code := OKL_AM_UTIL_PVT.get_functional_currency();
5592
5593 IF (is_debug_statement_on) THEN
5594 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling OKL_ACCOUNTING_UTIL.convert_to_functional_currency');
5595 END IF;
5596 -- Get the currency conversion details from ACCOUNTING_Util
5597 OKL_ACCOUNTING_UTIL.convert_to_functional_currency(
5598 p_khr_id => p_term_rec.p_contract_id,
5599 p_to_currency => l_functional_currency_code,
5600 p_transaction_date => l_quote_accpt_date,
5601 p_amount => l_hard_coded_amount,
5602 x_return_status => l_return_status,
5603 x_contract_currency => l_contract_currency_code,
5604 x_currency_conversion_type => l_currency_conversion_type,
5605 x_currency_conversion_rate => l_currency_conversion_rate,
5606 x_currency_conversion_date => l_currency_conversion_date,
5607 x_converted_amount => l_converted_amount);
5608 IF (is_debug_statement_on) THEN
5609 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called OKL_ACCOUNTING_UTIL.convert_to_functional_currency , return status : ' || l_return_status);
5610 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_contract_currency_code : ' || l_contract_currency_code);
5611 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_currency_conversion_type : ' || l_currency_conversion_type);
5612 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_currency_conversion_rate : ' || l_currency_conversion_rate);
5613 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_currency_conversion_date : ' || l_currency_conversion_date);
5614 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_converted_amount : ' || l_converted_amount);
5615 END IF;
5616
5617 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5618 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5619 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5620 RAISE OKL_API.G_EXCEPTION_ERROR;
5621 END IF;
5622
5623 IF (is_debug_statement_on) THEN
5624 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling okl_streams_util.get_dependent_stream_type');
5625 END IF;
5626 --Bug 6266134 veramach start
5627 okl_streams_util.get_dependent_stream_type(
5628 p_khr_id => p_term_rec.p_contract_id,
5629 p_primary_sty_purpose => 'RENT',
5630 p_dependent_sty_purpose => 'EXCESS_LOAN_PAYMENT_PAID',
5631 x_return_status => l_return_status,
5632 x_dependent_sty_id => l_sty_id
5633 );
5634 --Bug 6266134 veramach end
5635 IF (is_debug_statement_on) THEN
5636 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called okl_streams_util.get_dependent_stream_type , return status : ' || l_return_status);
5637 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'l_sty_id : ' || l_sty_id);
5638 END IF;
5639
5640 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5641 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5642 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5643 RAISE OKL_API.G_EXCEPTION_ERROR;
5644 END IF;
5645
5646 l_taiv_rec.currency_code := l_contract_currency_code;
5647 l_taiv_rec.currency_conversion_type := l_currency_conversion_type;
5648 l_taiv_rec.currency_conversion_rate := l_currency_conversion_rate;
5649 l_taiv_rec.currency_conversion_date := l_currency_conversion_date;
5650 l_taiv_rec.try_id := l_cm_try_id;
5651 l_taiv_rec.khr_id := p_term_rec.p_contract_id;
5652 l_taiv_rec.date_invoiced := l_quote_accpt_date;
5653 l_taiv_rec.date_entered := l_quote_accpt_date;
5654 l_taiv_rec.amount := l_loan_refund_amount;
5655 l_taiv_rec.description := 'Loan Refund Amount on Expiration';
5656 l_taiv_rec.trx_status_code := 'SUBMITTED'; -- RMUNJULU CHANGED 21-NOV-05
5657
5658 --20-NOV-2006 ANSETHUR R12B - LEGAL ENTITY UPTAKE PROJECT
5659 l_taiv_rec.legal_entity_id :=OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(p_term_rec.p_contract_id);
5660
5661 --ansethur 27-FEB-2007 Added for R12 B Billing Architecture Start Changes
5662 --Included call to Enhanced Billing API in the place of the calls to Billing Header,Lines and Distributions
5663 l_taiv_rec.okl_source_billing_trx := 'TERMINATION';
5664 l_tilv_rec.line_number := l_counter;
5665 l_tilv_rec.description := 'Loan Refund Amount on Expiration';
5666 l_tilv_rec.sty_id := l_sty_id;
5667 l_tilv_rec.amount := l_loan_refund_amount;
5668 l_tilv_rec.inv_receiv_line_code := 'LINE';
5669
5670 l_tilv_tbl(0) := l_tilv_rec; -- Assign the line record in tilv_tbl structure
5671
5672 IF (is_debug_statement_on) THEN
5673 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'calling okl_internal_billing_pvt.create_billing_trx');
5674 END IF;
5675 okl_internal_billing_pvt.create_billing_trx(p_api_version => l_api_version,
5676 p_init_msg_list => p_init_msg_list,
5677 x_return_status => x_return_status,
5678 x_msg_count => x_msg_count,
5679 x_msg_data => x_msg_data,
5680 p_taiv_rec => l_taiv_rec,
5681 p_tilv_tbl => l_tilv_tbl,
5682 p_tldv_tbl => l_tldv_tbl,
5683 x_taiv_rec => lx_taiv_rec,
5684 x_tilv_tbl => lx_tilv_tbl,
5685 x_tldv_tbl => lx_tldv_tbl);
5686 IF (is_debug_statement_on) THEN
5687 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_STATEMENT,l_module_name,'called okl_internal_billing_pvt.create_billing_trx , return status : ' || x_return_status);
5688 END IF;
5689
5690 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5691 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5692 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5693 RAISE OKL_API.G_EXCEPTION_ERROR;
5694 END IF;
5695
5696 /* --ansethur 27-FEB-2007 commented for R12 B Billing Architecture Begins
5697 -- create invoice header
5698 OKL_TRX_AR_INVOICES_PUB.insert_trx_ar_invoices (
5699 p_api_version => P_api_version,
5700 p_init_msg_list => OKL_API.G_FALSE,
5701 x_return_status => l_return_status,
5702 x_msg_count => l_msg_count,
5703 x_msg_data => l_msg_data,
5704 p_taiv_rec => l_taiv_rec,
5705 x_taiv_rec => lx_taiv_rec);
5706
5707 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5708 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5709 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5710 RAISE OKL_API.G_EXCEPTION_ERROR;
5711 END IF;
5712
5713 l_tilv_rec.line_number := l_counter;
5714 l_tilv_rec.description := 'Loan Refund Amount on Expiration';
5715 l_tilv_rec.sty_id := l_sty_id;
5716 l_tilv_rec.amount := l_loan_refund_amount;
5717 l_tilv_rec.tai_id := lx_taiv_rec.id;
5718 l_tilv_rec.inv_receiv_line_code := 'LINE';
5719
5720 -- Create Invoice Line
5721 OKL_TXL_AR_INV_LNS_PUB.insert_txl_ar_inv_lns (
5722 p_api_version => l_api_version,
5723 p_init_msg_list => OKL_API.G_FALSE,
5724 x_return_status => l_return_status,
5725 x_msg_count => l_msg_count,
5726 x_msg_data => l_msg_data,
5727 p_tilv_rec => l_tilv_rec,
5728 x_tilv_rec => lx_tilv_rec);
5729
5730 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5731 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5732 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5733 RAISE OKL_API.G_EXCEPTION_ERROR;
5734 END IF;
5735
5736 l_bpd_acc_rec.id := lx_tilv_rec.id;
5737 l_bpd_acc_rec.source_table := 'OKL_TXL_AR_INV_LNS_B';
5738
5739 -- Create Accounting Distribution
5740 OKL_ACC_CALL_PUB.create_acc_trans(
5741 p_api_version => l_api_version,
5742 p_init_msg_list => OKL_API.G_FALSE,
5743 x_return_status => l_return_status,
5744 x_msg_count => l_msg_count,
5745 x_msg_data => l_msg_data,
5746 p_bpd_acc_rec => l_bpd_acc_rec);
5747
5748 IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5749 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5750 ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
5751 RAISE OKL_API.G_EXCEPTION_ERROR;
5752 END IF;
5753
5754 --ansethur 23-FEB-2007 commented for R12 B Billing Architecture Ends
5755 */
5756 --ansethur 27-FEB-2007 Added for R12 B Billing Architecture End Changes
5757 END IF;
5758 END IF;
5759
5760 x_return_status := l_return_status;
5761
5762 -- end the transaction
5763 OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
5764 IF (is_debug_procedure_on) THEN
5765 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_PROCEDURE,l_module_name,'End(-)');
5766 END IF;
5767 EXCEPTION
5768 WHEN OKL_API.G_EXCEPTION_ERROR THEN
5769 IF (is_debug_exception_on) THEN
5770 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_ERROR');
5771 END IF;
5772
5773 x_return_status := OKL_API.HANDLE_EXCEPTIONS
5774 (
5775 l_api_name,
5776 G_PKG_NAME,
5777 'OKL_API.G_RET_STS_ERROR',
5778 x_msg_count,
5779 x_msg_data,
5780 '_PVT'
5781 );
5782 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5783 IF (is_debug_exception_on) THEN
5784 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'G_EXCEPTION_UNEXPECTED_ERROR');
5785 END IF;
5786
5787 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
5788 (
5789 l_api_name,
5790 G_PKG_NAME,
5791 'OKL_API.G_RET_STS_UNEXP_ERROR',
5792 x_msg_count,
5793 x_msg_data,
5794 '_PVT'
5795 );
5796 WHEN OTHERS THEN
5797 IF (is_debug_exception_on) THEN
5798 OKL_DEBUG_PUB.LOG_DEBUG(G_LEVEL_EXCEPTION,l_module_name, 'EXCEPTION :'||'OTHERS, SQLCODE: '
5799 || sqlcode || ' , SQLERRM : ' || sqlerrm);
5800 END IF;
5801
5802 x_return_status :=OKL_API.HANDLE_EXCEPTIONS
5803 (
5804 l_api_name,
5805 G_PKG_NAME,
5806 'OTHERS',
5807 x_msg_count,
5808 x_msg_data,
5809 '_PVT'
5810 );
5811 END process_loan_refunds;
5812
5813 END OKL_AM_LEASE_LOAN_TRMNT_PVT;