[Home] [Help]
PACKAGE BODY: APPS.OKL_LOAN_BAL_UPDATE_PVT
Source
1 PACKAGE BODY OKL_LOAN_BAL_UPDATE_PVT AS
2 /* $Header: OKLRLBUB.pls 120.4 2006/07/13 12:36:41 adagur noship $ */
3
4
5 ------------------------------------------------------------------------------
6 -- Start of Comments
7 -- Created By: smadhava
8 -- Procedure Name: get_loan_amounts
9 -- Description: This Procedure is called from concurrent program "OKL Loan Balances Update"
10 -- as of a given date for a Loan
11 -- Inputs :
12 -- Output :
13 -- Dependencies:
14 -- Parameters: Contract id, As of Date
15 -- Version: 1.0
16 -- End of Comments
17 -----------------------------------------------------------------------------
18 PROCEDURE get_loan_amounts(
19 p_api_version IN NUMBER
20 , p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE
21 , x_return_status OUT NOCOPY VARCHAR2
22 , x_msg_count OUT NOCOPY NUMBER
23 , x_msg_data OUT NOCOPY VARCHAR2
24 , p_khr_rec IN khr_rec_type
25 , p_as_of_date IN DATE) IS
26 l_api_version CONSTANT NUMBER DEFAULT 1.0;
27 l_api_name CONSTANT VARCHAR2(30) DEFAULT 'GET_LOAN_AMOUNTS';
28
29 l_module CONSTANT fnd_log_messages.MODULE%TYPE := 'okl.plsql.OKL_LOAN_BAL_UPDATE_PVT.GET_LOAN_AMOUNTS';
30 l_debug_enabled VARCHAR2(10);
31
32 --l_khr_id NUMBER;
33 --l_asset_exists BOOLEAN := FALSE;
34
35 l_kle_prin_bal NUMBER := 0;
36 l_khr_prin_bal NUMBER := 0;
37 l_tot_interest_amt_due NUMBER := 0;
38 l_tot_interest_amt_billed NUMBER := 0;
39 l_tot_interest_amt_received NUMBER := 0;
40
41 l_cblv_rec okl_cblv_rec;
42 l_crt_cblv_tbl okl_cblv_tbl;
43 lx_crt_cblv_tbl okl_cblv_tbl;
44 l_upd_cblv_tbl okl_cblv_tbl;
45 lx_upd_cblv_tbl okl_cblv_tbl;
46
47
48 i NUMBER := 0;
49 j NUMBER := 0;
50
51 /*
52 CURSOR TO CHECK IF THE contract's Book classification is LOAN or REVOLVING-LOAN
53 AND IF contract status is booked or terminated
54 */
55 /*CURSOR check_contract_loan_bal(p_contract_number VARCHAR2) IS
56 SELECT
57 KHR.ID
58 FROM
59 OKC_K_HEADERS_B CHR
60 , OKL_K_HEADERS KHR
61 , OKL_PRODUCT_PARAMETERS_V PPM
62 , OKC_STATUSES_V STS
63 WHERE chr.id = khr.id
64 AND khr.pdt_id = ppm.id
65 AND chr.sts_code = sts.code
66 AND (sts.code = 'BOOKED' OR sts.ste_code = 'TERMINATED')
67 AND (ppm.deal_type = 'LOAN' OR ppm.deal_type = 'LOAN-REVOLVING')
68 AND CHR.CONTRACT_NUMBER = p_contract_number;*/
69
70 -- Cursor to obtain the Assets in a contract
71 CURSOR get_assets(cp_khr_id NUMBER) IS
72 SELECT assets.id asset_id
73 , assets.name asset_number
74 FROM okc_k_lines_v assets
75 , okc_line_styles_b lse
76 ,okc_statuses_v sts
77 WHERE assets.dnz_chr_id = cp_khr_id
78 AND lse.id = assets.lse_id
79 AND lse.lty_code = 'FREE_FORM1'
80 AND assets.sts_code = sts.code
81 AND sts.ste_code in ('ACTIVE', 'TERMINATED');
82
83 -- Cursor to check the presence of contract balances for a contract
84 CURSOR chk_contract_bal(p_chr_id NUMBER) IS
85 SELECT id
86 , object_version_number
87 FROM okl_contract_balances
88 WHERE khr_id = p_chr_id
89 AND kle_id IS NULL ;
90
91 -- Cursor to check the presence of contract balances for a contract asset
92 CURSOR chk_asset_bal(p_chr_id NUMBER, p_kle_id NUMBER) IS
93 SELECT id
94 , object_version_number
95 FROM okl_contract_balances
96 WHERE khr_id = p_chr_id
97 AND kle_id = p_kle_id;
98 BEGIN
99 l_debug_enabled := okl_debug_pub.check_log_enabled;
100
101 IF(NVL(l_debug_enabled,'N')='Y') THEN
102 okl_debug_pub.log_debug(FND_LOG.LEVEL_PROCEDURE,l_module,'begin debug OKLRLBUB.pls call GET_LOAN_AMOUNTS');
103 END IF;
104
105 -- call START_ACTIVITY to create savepoint, check compatibility and initialize message list
106 /*x_return_status := OKL_API.START_ACTIVITY(
107 p_api_name => l_api_name
108 , p_pkg_name => G_PKG_NAME
109 , p_init_msg_list => p_init_msg_list
110 , l_api_version => l_api_version
111 , p_api_version => p_api_version
112 , p_api_type => G_API_TYPE
113 , x_return_status => x_return_status);
114 -- check if activity started successfully
115 IF(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
116 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
117 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
118 RAISE OKL_API.G_EXCEPTION_ERROR;
119 END IF;*/
120
121 x_return_status := OKL_API.G_RET_STS_SUCCESS;
122 -- check if the contract is of Book classification LOAN or REVOLVING-LOAN and is Booked
123 /*OPEN check_contract_loan_bal(p_contract_number);
124 FETCH check_contract_loan_bal INTO l_khr_id;
125 IF check_contract_loan_bal%NOTFOUND THEN
126 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Contract Book classification is not valid or the contract status is not Booked ');
127 FND_FILE.PUT_LINE (FND_FILE.LOG,'Contract Book classification is not valid or the contract status is not Booked ');
128 RAISE OKL_API.G_EXCEPTION_ERROR;
129 END IF;
130 CLOSE check_contract_loan_bal;*/
131
132 i :=1;
133 j :=1;
134 -- Get the asset IDs of the contract
135 IF (p_khr_rec.deal_type = 'LOAN') THEN
136 FOR l_kle_rec IN get_assets(p_khr_rec.khr_id)
137 LOOP
138 --l_asset_exists := TRUE;
139 --FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Calculation for Asset Number: '|| l_kle_rec.asset_number);
140 --FND_FILE.PUT_LINE (FND_FILE.LOG,'Calculation for Asset Number: '|| l_kle_rec.asset_number);
141 /********************************************
142 * Calculation FOR Actual Principal Balance *
143 ********************************************/
144 FND_FILE.PUT_LINE (FND_FILE.LOG,'Calculation for Actual Principal Balance');
145 -- Get the total principal balance
146 l_kle_prin_bal :=
147 OKL_VARIABLE_INT_UTIL_PVT.get_principal_bal( x_return_status
148 , p_khr_rec.khr_id -- Contract ID
149 , l_kle_rec.asset_id -- Asset ID
150 , p_as_of_date );
151
152 IF(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
153 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Unable to calculate principal balance for Asset Number: '|| l_kle_rec.asset_number);
154 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
155 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Unable to calculate principal balance for Asset Number: '|| l_kle_rec.asset_number);
156 END IF;
157 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Asset Number: '|| l_kle_rec.asset_number || ' Principal Balance : ' || l_kle_prin_bal);
158 --l_khr_prin_bal := l_khr_prin_bal + l_kle_prin_bal;
159
160 -- Actual Principal balance = outstanding principal balance
161 --l_actual_prin_bal := l_outstanding_prin_bal;
162 --FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Actual Principal balance (outstanding principal balance)='||l_actual_prin_bal);
163 --FND_FILE.PUT_LINE (FND_FILE.LOG,'Actual Principal balance (outstanding principal balance )='||l_actual_prin_bal);
164
165 -- Initialize the contract balances record with the values
166 l_cblv_rec.khr_id := p_khr_rec.khr_id;
167 l_cblv_rec.kle_id := l_kle_rec.asset_id;
168 l_cblv_rec.actual_principal_balance_amt := l_kle_prin_bal;
169 l_cblv_rec.actual_principal_balance_date := p_as_of_date;
170
171 -- Check if there are balances for this asset
172 OPEN chk_asset_bal(p_khr_rec.khr_id, l_kle_rec.asset_id);
173 FETCH chk_asset_bal INTO l_cblv_rec.id, l_cblv_rec.object_version_number;
174
175 IF chk_asset_bal%NOTFOUND THEN
176 l_crt_cblv_tbl(i) := l_cblv_rec;
177 i := i + 1;
178 ELSE
179 l_upd_cblv_tbl(j) := l_cblv_rec;
180 j := j + 1;
181 END IF; -- end of check for presence of contract asset balances
182 CLOSE chk_asset_bal; -- end of check for Balances for asset
183
184 END LOOP; -- end of for loop for Assets
185 END IF;
186
187
188 --FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'--------------------------------------------------------------------------');
189 --FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Contract Balances for Contract Number: ' ||p_contract_number);
190 --FND_FILE.PUT_LINE (FND_FILE.LOG,'--------------------------------------------------------------------------');
191 --FND_FILE.PUT_LINE (FND_FILE.LOG,'Contract Balances for Contract Number: ' ||p_contract_number);
192
193 -- Re-initialize the principal balance columns
194 l_cblv_rec.actual_principal_balance_amt := null;
195 l_cblv_rec.actual_principal_balance_date := null;
196
197 -- A revolving loan doesnot have any assets and hence has a contract level information only.
198 --IF NOT l_asset_exists THEN
199 /********************************************
200 * Calculation FOR Actual Principal Balance *
201 ********************************************/
202 --FND_FILE.PUT_LINE (FND_FILE.LOG,'Calculation for Actual Principal Balance');
203 -- Get the total principal balance
204 l_khr_prin_bal :=
205 OKL_VARIABLE_INT_UTIL_PVT.get_principal_bal( x_return_status
206 , p_khr_rec.khr_id -- Contract ID
207 , null --Asset id is null for revolving Loan
208 , p_as_of_date );
209 IF(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
210 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Unable to calculate principal balance for Contract Number: '|| p_khr_rec.contract_number);
211 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
212 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Unable to calculate principal balance for Contract Number: '|| p_khr_rec.contract_number);
213 END IF;
214 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Contract Number: '|| p_khr_rec.contract_number || ' Principal Balance : ' || l_khr_prin_bal);
215
216 -- Actual Principal balance = outstanding principal balance
217 --l_actual_prin_bal := l_outstanding_prin_bal;
218
219 l_cblv_rec.actual_principal_balance_amt := l_khr_prin_bal;
220 l_cblv_rec.actual_principal_balance_date := p_as_of_date;
221
222 --FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Actual Principal balance (outstanding principal balance)='||l_actual_prin_bal);
223 --FND_FILE.PUT_LINE (FND_FILE.LOG,'Actual Principal balance (outstanding principal balance )='||l_actual_prin_bal);
224 --END IF; -- end of check for existence of asset for the contract
225
226 /*********************************************
227 * Calculation FOR Total Interest Amount Due *
228 *********************************************/
229 --FND_FILE.PUT_LINE (FND_FILE.LOG,'Calculation for Total Interest Amount Due');
230 -- Get the total interest amount due
231 l_tot_interest_amt_due :=
232 OKL_VARIABLE_INT_UTIL_PVT.get_interest_due( x_return_status
233 , p_khr_rec.khr_id -- Contract ID
234 , p_as_of_date );
235 IF(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
236 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Unable to calculate interest due for Contract Number: '|| p_khr_rec.contract_number);
237 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
238 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Unable to calculate interest due for Contract Number: '|| p_khr_rec.contract_number);
239 END IF;
240 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Contract Number: '|| p_khr_rec.contract_number || ' Interest Due : ' || l_tot_interest_amt_due);
241 /************************************************
242 * Calculation FOR Total Interest Amount Billed *
243 ************************************************/
244 -- Get the total interest amount billed
245 l_tot_interest_amt_billed :=
246 OKL_VARIABLE_INT_UTIL_PVT.get_interest_billed( x_return_status
247 , p_khr_rec.khr_id -- Contract ID
248 , NULL
249 , p_as_of_date );
250 IF(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
251 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Unable to calculate interest billed for Contract Number: '|| p_khr_rec.contract_number);
252 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
253 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Unable to calculate interest billed for Contract Number: '|| p_khr_rec.contract_number);
254 END IF;
255 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Contract Number: '|| p_khr_rec.contract_number || ' Interest Billed : ' || l_tot_interest_amt_billed);
256 --FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Total interest amount billed ='|| l_tot_interest_amt_billed );
257 --FND_FILE.PUT_LINE (FND_FILE.LOG,'Total interest amount billed ='|| l_tot_interest_amt_billed );
258 /**************************************************
259 * Calculation FOR Total Interest Amount Received *
260 **************************************************/
261 -- Get the total interest amount received
262 l_tot_interest_amt_received :=
263 OKL_VARIABLE_INT_UTIL_PVT.get_interest_paid( x_return_status
264 , p_khr_rec.khr_id -- Contract ID
265 , NULL
266 , p_as_of_date );
267 IF(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
268 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Unable to calculate interest received for Contract Number: '|| p_khr_rec.contract_number);
269 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
270 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Unable to calculate interest received for Contract Number: '|| p_khr_rec.contract_number);
271 END IF;
272 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Contract Number: '|| p_khr_rec.contract_number || ' Interest Received : ' || l_tot_interest_amt_received);
273 --FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Total interest amount received ='|| l_tot_interest_amt_received);
274 --FND_FILE.PUT_LINE (FND_FILE.LOG,'Total interest amount received ='|| l_tot_interest_amt_received);
275
276 -- Initialize the contract balances record with the values
277 l_cblv_rec.khr_id := p_khr_rec.khr_id;
278 l_cblv_rec.kle_id := NULL;
279 l_cblv_rec.interest_amt := l_tot_interest_amt_due;
280 l_cblv_rec.interest_calc_date := p_as_of_date;
281 l_cblv_rec.interest_billed_amt := l_tot_interest_amt_billed;
282 l_cblv_rec.interest_billed_date := p_as_of_date;
283 l_cblv_rec.interest_received_amt := l_tot_interest_amt_received;
284 l_cblv_rec.interest_received_date := p_as_of_date;
285
286 -- Check if there are balances for this contract
287 OPEN chk_contract_bal(p_khr_rec.khr_id);
288 FETCH chk_contract_bal INTO l_cblv_rec.id, l_cblv_rec.object_version_number;
289 IF chk_contract_bal%NOTFOUND THEN
290 l_crt_cblv_tbl(i) := l_cblv_rec;
291 ELSE
292 l_upd_cblv_tbl(j) := l_cblv_rec;
293 END IF; -- end of check for presence of contract asset balances
294 CLOSE chk_contract_bal;
295
296 IF l_crt_cblv_tbl.COUNT > 0 THEN
297 -- Insert the table of records into OKL_CONTRACT_BALANCES
298 OKL_CONTRACT_BALANCES_PVT.create_contract_balance(
299 p_api_version => l_api_version
300 , p_init_msg_list => p_init_msg_list
301 , x_return_status => x_return_status
302 , x_msg_count => x_msg_count
303 , x_msg_data => x_msg_data
304 , p_cblv_tbl => l_crt_cblv_tbl
305 , x_cblv_tbl => lx_crt_cblv_tbl);
306 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
307 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Unable to create balances for Contract Number: '|| p_khr_rec.contract_number);
308 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
309 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Unable to create balances for Contract Number: '|| p_khr_rec.contract_number);
310 END IF;
311 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Successfully created balances for Contract Number: '|| p_khr_rec.contract_number);
312 END IF;
313
314 IF l_upd_cblv_tbl.COUNT > 0 THEN
315 -- Update the table of records in OKL_CONTRACT_BALANCES
316 OKL_CONTRACT_BALANCES_PVT.update_contract_balance(
317 p_api_version => l_api_version
318 , p_init_msg_list => p_init_msg_list
319 , x_return_status => x_return_status
320 , x_msg_count => x_msg_count
321 , x_msg_data => x_msg_data
322 , p_cblv_tbl => l_upd_cblv_tbl
323 , x_cblv_tbl => lx_upd_cblv_tbl);
324 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
325 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Unable to update balances for Contract Number: '|| p_khr_rec.contract_number);
326 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
327 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Unable to update balances for Contract Number: '|| p_khr_rec.contract_number);
328 END IF;
329 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Successfully updated balances for Contract Number: '|| p_khr_rec.contract_number);
330 END IF;
331 -- commit the savepoint
332 --OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
333
334 IF(NVL(l_debug_enabled,'N')='Y') THEN
335 okl_debug_pub.log_debug(FND_LOG.LEVEL_PROCEDURE,l_module,'end debug OKLRLBUB.pls call GET_LOAN_AMOUNTS');
336 END IF;
337
338 EXCEPTION
339 WHEN OTHERS THEN
340 x_return_status := x_return_status;
341 END get_loan_amounts;
342
343 --------------------------------------------------------------------------------
344 --Start of Comments
345 --API Name : calculate_loan_amounts
346 --Description : Process API to calculate the balances for a contract and its
347 -- assets. The API is called by the Loan Balances concurrent
348 -- program to create/update the balances for the contract based
349 -- on the given date.
350 --History :
351 -- 02-SEP-2005 dkagrawa Created
352 --End of Comments
353 ------------------------------------------------------------------------------
354
355 PROCEDURE calculate_loan_amounts(
356 errbuf OUT NOCOPY VARCHAR2
357 , retcode OUT NOCOPY NUMBER
358 , p_contract_number IN VARCHAR2
359 , p_as_of_date IN VARCHAR2 ) IS
360 l_api_version CONSTANT NUMBER DEFAULT 1.0;
361
362 lx_msg_count NUMBER;
363 lx_msg_data VARCHAR2(450);
364 l_msg_index_out NUMBER;
365 lx_return_status VARCHAR(1) := OKL_API.G_RET_STS_SUCCESS;
366 l_as_of_date DATE := TRUNC(SYSDATE);
367 l_khr_rec khr_rec_type;
368
369 CURSOR c_khr_csr(cp_contract_number IN VARCHAR2) IS SELECT chr.id khr_id,
370 chr.contract_number,
371 sts.code status,
372 ppm.deal_type,
373 ppm.interest_calculation_basis ,
374 ppm.revenue_recognition_method
375 FROM okc_k_headers_b chr
376 , okl_k_headers khr
377 , okl_product_parameters_v ppm
378 , okc_statuses_v sts
379 WHERE chr.contract_number = NVL(cp_contract_number, chr.contract_number)
380 AND chr.id = khr.id
381 AND khr.pdt_id = ppm.id
382 AND chr.sts_code = sts.code
383 AND (sts.code = 'BOOKED' OR sts.ste_code = 'TERMINATED')
384 AND (ppm.deal_type = 'LOAN' OR ppm.deal_type = 'LOAN-REVOLVING')
385 AND (NOT(ppm.interest_calculation_basis = 'FIXED' AND ppm.revenue_recognition_method = 'STREAMS'))
386 ORDER BY chr.contract_number;
387 BEGIN
388
389 IF p_as_of_date IS NOT NULL THEN
390 l_as_of_date := FND_DATE.CANONICAL_TO_DATE(p_as_of_date);
391 END IF;
392
393 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '***********************************************');
394 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, 'OKL Loan Balances Update for Variable Interest');
395 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '***********************************************');
396 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, 'Program Run Date: '||sysdate);
397 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, 'To Date: '||l_as_of_date);
398 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, 'Success or Error Detailed Messages Each Update');
399
400 FOR cur_khr IN c_khr_csr(p_contract_number) LOOP
401 l_khr_rec := cur_khr;
402 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '***********************************************');
403 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, 'Processing Contract Number: '|| l_khr_rec.contract_number);
404 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, ' Status: ' || l_khr_rec.status);
405 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, ' Book classification: ' || l_khr_rec.deal_type);
406 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, ' Interest calculation method: ' || l_khr_rec.interest_calculation_basis);
407 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, ' Revenue recognition method: ' || l_khr_rec.revenue_recognition_method);
408
409 get_loan_amounts(
410 p_api_version => l_api_version,
411 p_init_msg_list => FND_API.G_FALSE,
412 x_return_status => lx_return_status,
413 x_msg_count => lx_msg_count,
414 x_msg_data => errbuf,
415 p_khr_rec => l_khr_rec,
416 p_as_of_date => l_as_of_date);
417
418 IF (lx_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
419 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, 'Successfully processed contract: ' || l_khr_rec.contract_number);
420 Commit;
421 ELSIF lx_return_status = OKL_API.G_RET_STS_ERROR THEN
422 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, 'Error processing contract: ' || l_khr_rec.contract_number);
423 ELSIF lx_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
424 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, 'Unexpected error processing contract: ' || l_khr_rec.contract_number);
425 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
426 END IF;
427 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '***********************************************');
428 END LOOP;
429
430 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, 'OKL Loan Balances Update for Variable Interest Completed Successfully');
431 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, 'Program End Date: '||sysdate);
432 FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '***********************************************');
433
434 errbuf := lx_msg_data;
435 IF lx_msg_count >= 1 THEN
436 FOR i in 1..lx_msg_count LOOP
437 fnd_msg_pub.get (p_msg_index => i,
438 p_encoded => 'F',
439 p_data => lx_msg_data,
440 p_msg_index_out => l_msg_index_out);
441
442 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,to_char(i) || ': ' || lx_msg_data);
443 END LOOP; -- end of for loop
444 END IF; -- end of check for message count
445 retcode := 0;
446 EXCEPTION
447 WHEN Okl_Api.G_EXCEPTION_ERROR THEN
448 retcode := 2;
449 lx_return_status := Okl_Api.HANDLE_EXCEPTIONS(G_APP_NAME,
450 G_PKG_NAME,
451 'Okl_Api.G_RET_STS_ERROR',
452 lx_msg_count,
453 lx_msg_data,
454 '_PVT');
455 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
456 retcode := 2;
457 lx_return_status := OKL_API.HANDLE_EXCEPTIONS(
458 p_api_name => G_APP_NAME,
459 p_pkg_name => G_PKG_NAME,
460 p_exc_name => 'OKL_API.G_RET_STS_UNEXP_ERROR',
461 x_msg_count => lx_msg_count,
462 x_msg_data => lx_msg_data,
463 p_api_type => '_PVT');
464 WHEN OTHERS THEN
465 retcode := 2;
466 errbuf := SQLERRM;
467 FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'Error '||SQLCODE||': '||SQLERRM);
468 END calculate_loan_amounts;
469
470 END OKL_LOAN_BAL_UPDATE_PVT; -- end of Body