[Home] [Help]
PACKAGE BODY: APPS.OKL_SUBSIDY_PROCESS_PVT
Source
1 PACKAGE BODY okl_subsidy_process_pvt as
2 /* $Header: OKLRSBPB.pls 120.35 2011/02/09 10:25:06 rpillay ship $ */
3
4 G_MODULE VARCHAR2(255) := 'okl.stream.esg.okl_esg_transport_pvt';
5 G_DEBUG_ENABLED CONSTANT VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
6 G_IS_DEBUG_STATEMENT_ON BOOLEAN;
7
8 --global message constants
9 G_MISSING_SUB_CALC_BASIS CONSTANT VARCHAR2(200) := 'OKL_MISSING_SUB_CALC_BASIS';
10 G_SUBSIDY_NAME_TOKEN CONSTANT VARCHAR2(200) := 'SUBSIDY_NAME';
11
12 G_MISSING_SUB_CALC_PARAMETER CONSTANT VARCHAR2(200) := 'OKL_MISSING_SUB_CALC_PARAM';
13 G_PARAMETER_NAME_TOKEN CONSTANT VARCHAR2(200) := 'PARAMETER_NAME';
14 G_CALC_BASIS_TOKEN CONSTANT VARCHAR2(200) := 'SUB_CALC_BASIS';
15
16 G_CONV_RATE_NOT_FOUND CONSTANT VARCHAR2(200) := 'OKL_LLA_CONV_RATE_NOT_FOUND';
17 G_FROM_CURRENCY_TOKEN CONSTANT VARCHAR2(200) := 'FROM_CURRENCY';
18 G_TO_CURRENCY_TOKEN CONSTANT VARCHAR2(200) := 'TO_CURRENCY';
19 G_CONV_TYPE_TOKEN CONSTANT VARCHAR2(200) := 'CONVERSION_TYPE';
20 G_CONV_DATE_TOKEN CONSTANT VARCHAR2(200) := 'CONVERSION_DATE';
21
22 G_AMOUNT_ROUNDING CONSTANT VARCHAR2(200) := 'OKL_ERROR_ROUNDING_AMT';
23
24 G_API_MISSING_PARAMETER CONSTANT VARCHAR2(200) := 'OKL_API_ALL_MISSING_PARAM';
25 G_API_NAME_TOKEN CONSTANT VARCHAR2(50) := 'API_NAME';
26 G_MISSING_PARAM_TOKEN CONSTANT VARCHAR2(50) := 'MISSING_PARAM';
27
28 G_SUBSIDY_NO_RENTS CONSTANT VARCHAR2(200) := 'OKL_SUBSIDY_NO_RENTS';
29 G_ASSET_NUMBER_TOKEN CONSTANT VARCHAR2(30) := 'ASSET_NUMBER';
30
31
32 --global constants
33 G_FORMULA_OEC CONSTANT VARCHAR2(200) := 'LINE_OEC';
34 G_RATE_TYPE CONSTANT VARCHAR2(30) := 'PRE_TAX_IRR';
35
36 --global constants for billing trx creation
37 G_INCOMPLETE_VEND_BILL CONSTANT VARCHAR2(200) := 'OKL_SUB_INCOMPLETE_VEND_BILL';
38 G_ERROR_TYPE_TOKEN CONSTANT VARCHAR2(200) := 'ERROR_TYPE';
39 G_PARAMETER_TOKEN CONSTANT VARCHAR2(200) := 'PARAMETER';
40
41 G_VERIFY_VENDOR_BILL CONSTANT VARCHAR2(200) := 'OKL_SUB_VERIFY_VENDOR_BILL';
42 G_VENDOR_NAME_TOKEN CONSTANT VARCHAR2(200) := 'VENDOR_NAME';
43
44 G_AR_INV_TRX_TYPE CONSTANT VARCHAR2(30) := 'BILLING';
45 G_CANCEL_STATUS CONSTANT VARCHAR2(30) := 'CANCELED';
46 G_SUBMIT_STATUS CONSTANT VARCHAR2(30) := 'SUBMITTED';
47 G_PROCESSED_STATUS CONSTANT VARCHAR2(30) := 'PROCESSED';
48 G_AR_INV_LINE_CODE CONSTANT VARCHAR2(30) := 'LINE';
49 G_AR_LINES_SOURCE CONSTANT VARCHAR2(30) := 'OKL_TXL_AR_INV_LNS_B';
50 G_AR_CM_TRX_TYPE CONSTANT VARCHAR2(30) := 'CREDIT MEMO';
51 --global constants for billing trx creation
52 --Bug# 4899328
53 G_FORMULA_CAP CONSTANT VARCHAR2(200) := 'LINE_CAP_AMNT';
54
55 -- sjalasut, added Booking source as part of R12 Billing Enhancement. BEGIN
56 G_SOURCE_BILLING_TRX_BOOK CONSTANT fnd_lookups.lookup_code%TYPE :='BOOKING';
57 -- sjalasut, added Booking source as part of R12 Billing Enhancement. END
58
59 -- varangan - Billing Enhancement - Bug#5874824 - New constant added -Begin
60 G_SOURCE_BILLING_TRX_RBK CONSTANT fnd_lookups.lookup_code%TYPE :='REBOOK';
61 -- varangan - Billing Enhancement - Bug#5874824 - New constant added -End
62
63 -------------------------------------------------------------------------------
64 --****Local procedures for parameter validations
65 -------------------------------------------------------------------------------
66 ----------------------------------------------------
67 --validate chr_id : check that it is an okl contract
68 ----------------------------------------------------
69 Procedure validate_chr_id(p_chr_id in number,
70 x_return_status out nocopy varchar2) is
71
72 --cursor to find that chr id is valid okl contract header id
73 cursor l_chr_csr (p_chr_id in number) is
74 select 'Y'
75 from okc_k_headers_b chrb,
76 okc_subclasses_b scsb
77 where chrb.id = p_chr_id
78 and scsb.code = chrb.scs_code
79 and scsb.cls_code = 'OKL';
80
81 l_valid_value varchar2(1) default 'N';
82 begin
83 x_return_status := OKL_API.G_RET_STS_SUCCESS;
84
85 l_valid_value := 'N';
86
87 open l_chr_csr(p_chr_id => p_chr_id);
88 fetch l_chr_csr into l_valid_value;
89 if l_chr_csr%NOTFOUND then
90 null;
91 end if;
92 close l_chr_csr;
93
94 If l_valid_value = 'N' then
95 x_return_status := OKL_API.G_RET_STS_ERROR;
96 End If;
97
98 Exception
99 When Others then
100 If l_chr_csr%ISOPEN then
101 CLOSE l_chr_csr;
102 End If;
103 OKL_API.SET_MESSAGE( p_app_name => G_APP_NAME
104 ,p_msg_name => G_UNEXPECTED_ERROR
105 ,p_token1 => G_SQLCODE_TOKEN
106 ,p_token1_value => SQLCODE
107 ,p_token2 => G_SQLERRM_TOKEN
108 ,p_token2_value => SQLERRM);
109 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
110 end validate_chr_id;
111 --------------------------------------------------------------
112 --validate line id : check that it is a valid okl line
113 -------------------------------------------------------------
114 Procedure validate_cle_id(p_cle_id in number,
115 p_lty_code in varchar2 default NULL,
116 x_return_status out nocopy varchar2) is
117
118
119 --cursor to find that chr id is valid okl contract header id
120 cursor l_cle_csr (p_cle_id in number,
121 p_lty_code in varchar2) is
122 select 'Y'
123 from okc_k_lines_b cleb,
124 okc_line_styles_b lseb,
125 okc_k_headers_b chrb,
126 okc_subclasses_b scsb
127 where chrb.id = cleb.dnz_chr_id
128 and scsb.code = chrb.scs_code
129 and scsb.cls_code = 'OKL'
130 and lseb.lty_code = nvl(p_lty_code,lseb.lty_code)
131 and lseb.id = cleb.lse_id
132 and cleb.id = p_cle_id;
133
134 l_valid_value varchar2(1) default 'N';
135 begin
136 x_return_status := OKL_API.G_RET_STS_SUCCESS;
137
138 l_valid_value := 'N';
139
140 open l_cle_csr(p_cle_id => p_cle_id,
141 p_lty_code => p_lty_code);
142 fetch l_cle_csr into l_valid_value;
143 if l_cle_csr%NOTFOUND then
144 null;
145 end if;
146 close l_cle_csr;
147
148 If l_valid_value = 'N' then
149 x_return_status := OKL_API.G_RET_STS_ERROR;
150 End If;
151
152 Exception
153 When Others then
154 If l_cle_csr%ISOPEN then
155 CLOSE l_cle_csr;
156 End If;
157 OKL_API.SET_MESSAGE( p_app_name => G_APP_NAME
158 ,p_msg_name => G_UNEXPECTED_ERROR
159 ,p_token1 => G_SQLCODE_TOKEN
160 ,p_token1_value => SQLCODE
161 ,p_token2 => G_SQLERRM_TOKEN
162 ,p_token2_value => SQLERRM);
163 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
164 end validate_cle_id;
165 -----------------------------------------
166 --validate accounting method
167 -----------------------------------------
168 procedure validate_acct_method(p_accounting_method in varchar2,
169 x_return_status out nocopy varchar2) is
170
171 --cursor to find whether accounting method is valid
172 cursor l_flkup_csr (p_lookup_code in varchar2) is
173 select 'Y'
174 from fnd_lookups
175 where lookup_code = p_lookup_code
176 and lookup_type = 'OKL_SUBACCT_METHOD';
177
178 l_valid_value varchar2(1) default 'N';
179
180 begin
181 x_return_status := OKL_API.G_RET_STS_SUCCESS;
182
183 l_valid_value := 'N';
184
185 open l_flkup_csr(p_lookup_code => p_accounting_method);
186 fetch l_flkup_csr into l_valid_value;
187 if l_flkup_csr%NOTFOUND then
188 null;
189 end if;
190 close l_flkup_csr;
191
192 If l_valid_value = 'N' then
193 x_return_status := OKL_API.G_RET_STS_ERROR;
194 End If;
195
196 Exception
197 When Others then
198 If l_flkup_csr%ISOPEN then
199 CLOSE l_flkup_csr;
200 End If;
201 OKL_API.SET_MESSAGE( p_app_name => G_APP_NAME
202 ,p_msg_name => G_UNEXPECTED_ERROR
203 ,p_token1 => G_SQLCODE_TOKEN
204 ,p_token1_value => SQLCODE
205 ,p_token2 => G_SQLERRM_TOKEN
206 ,p_token2_value => SQLERRM);
207 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
208 end validate_acct_method;
209 ------------------------------------
210 --procedure to validate vendor id
211 -----------------------------------
212 procedure validate_vendor_id(p_vendor_id in number,
213 x_return_status out nocopy varchar2) is
214
215 --cursor to find whether vendor id is valid
216 cursor l_vendor_csr (p_vendor_id in number) is
217 select 'Y'
218 from po_vendors
219 where vendor_id = p_vendor_id;
220
221 l_valid_value varchar2(1) default 'N';
222
223 begin
224 x_return_status := OKL_API.G_RET_STS_SUCCESS;
225
226 l_valid_value := 'N';
227
228 open l_vendor_csr(p_vendor_id => p_vendor_id);
229 fetch l_vendor_csr into l_valid_value;
230 if l_vendor_csr%NOTFOUND then
231 null;
232 end if;
233 close l_vendor_csr;
234
235 If l_valid_value = 'N' then
236 x_return_status := OKL_API.G_RET_STS_ERROR;
237 End If;
238
239 Exception
240 When Others then
241 If l_vendor_csr%ISOPEN then
242 CLOSE l_vendor_csr;
243 End If;
244 OKL_API.SET_MESSAGE( p_app_name => G_APP_NAME
245 ,p_msg_name => G_UNEXPECTED_ERROR
246 ,p_token1 => G_SQLCODE_TOKEN
247 ,p_token1_value => SQLCODE
248 ,p_token2 => G_SQLERRM_TOKEN
249 ,p_token2_value => SQLERRM);
250 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
251 end validate_vendor_id;
252
253 ------------------------------------------------------------------------------
254 --*****End of local procedures for parameter validations
255 ------------------------------------------------------------------------------
256 --------------------------------------------------------------------------------
257 --Name : Is_Contract_Subsidized
258 --Description : UTIL API returns true if contract is subsidized
259 --
260 -- PARAMETERS : IN - p_chr_id : contract header id
261 -- OUT -x_subsidized : OKL_API.G_TRUE or OKL_API.G_FALSE
262 --------------------------------------------------------------------------------
263 Procedure is_contract_subsidized(
264 p_api_version IN NUMBER,
265 p_init_msg_list IN VARCHAR2,
266 x_return_status OUT NOCOPY VARCHAR2,
267 x_msg_count OUT NOCOPY NUMBER,
268 x_msg_data OUT NOCOPY VARCHAR2,
269 p_chr_id IN NUMBER,
270 x_subsidized OUT NOCOPY VARCHAR2) is
271
272 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
273 l_api_name CONSTANT varchar2(30) := 'IS_CONTRACT_SUBSIDIZED';
274 l_api_version CONSTANT NUMBER := 1.0;
275
276 --cursor to find out whether subsidies exist on the
277 --contract
278 cursor l_subexist_csr(p_chr_id in number) is
279 select 'Y'
280 from dual
281 where exists (select '1'
282 from okc_k_lines_b cleb,
283 okc_line_styles_b lseb
284 where cleb.dnz_chr_id = p_chr_id
285 and cleb.sts_code <> 'ABANDONED'
286 and lseb.id = cleb.lse_id
287 and lseb.lty_code = 'SUBSIDY'
288 );
289
290 l_subsidy_exists varchar2(1) default 'N';
291 begin
292 ----
293 --------------------------------------
294 --start of input variable validations
295 --------------------------------------
296 --validate p_chr_id
297 If (p_chr_id is NULL) or (p_chr_id = OKL_API.G_MISS_NUM) then
298 OKL_API.set_message(
299 p_app_name => G_APP_NAME,
300 p_msg_name => G_API_MISSING_PARAMETER,
301 p_token1 => G_API_NAME_TOKEN,
302 p_token1_value => l_api_name,
303 p_token2 => G_MISSING_PARAM_TOKEN,
304 p_token2_value => 'p_chr_id');
305 x_return_status := OKL_API.G_RET_STS_ERROR;
306 Raise OKL_API.G_EXCEPTION_ERROR;
307 Elsif (p_chr_id is not NULL) and (p_chr_id <> OKL_API.G_MISS_NUM) then
308 validate_chr_id(p_chr_id => p_chr_id,
309 x_return_status => x_return_status);
310 IF x_return_status = OKL_API.G_RET_STS_ERROR then
311 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_chr_id');
312 Raise OKL_API.G_EXCEPTION_ERROR;
313 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
314 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
315 End If;
316 End If;
317 ------------------------------------------
318 --end of input variable validations
319 -----------------------------------------
320
321 l_subsidy_exists := 'N';
322 open l_subexist_csr(p_chr_id => p_chr_id);
323 fetch l_subexist_csr into l_subsidy_exists;
324 If l_subexist_csr%NOTFOUND then
325 NULL;
326 End If;
327 Close l_subexist_csr;
328 If l_subsidy_exists = 'Y' then
329 x_subsidized := OKL_API.G_TRUE;
330 elsif l_subsidy_exists = 'N' then
331 x_subsidized := OKL_API.G_FALSE;
332 end if;
333 Exception
334 WHEN OKL_API.G_EXCEPTION_ERROR THEN
335 If l_subexist_csr%ISOPEN then
336 CLOSE l_subexist_csr;
337 End If;
338 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
339 l_api_name,
340 G_PKG_NAME,
341 'OKL_API.G_RET_STS_ERROR',
342 x_msg_count,
343 x_msg_data,
344 '_PVT');
345 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
346 If l_subexist_csr%ISOPEN then
347 CLOSE l_subexist_csr;
348 End If;
349 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
350 l_api_name,
351 G_PKG_NAME,
352 'OKL_API.G_RET_STS_UNEXP_ERROR',
353 x_msg_count,
354 x_msg_data,
355 '_PVT');
356 When others then
357 If l_subexist_csr%ISOPEN then
358 CLOSE l_subexist_csr;
359 End If;
360 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
361 l_api_name,
362 G_PKG_NAME,
363 'OTHERS',
364 x_msg_count,
365 x_msg_data,
366 '_PVT');
367 End is_contract_subsidized;
368 --------------------------------------------------------------------------------
369 --Name : Is_Asset_Subsidized
370 --Description : UTIL API returns true if asset is subsidized
371 --
372 -- PARAMETERS : IN - p_asset_cle_id : financial asset line id
373 -- OUT -x_subsidized : OKL_API.G_TRUE or OKL_API.G_FALSE
374 --------------------------------------------------------------------------------
375 Procedure is_asset_subsidized(
376 p_api_version IN NUMBER,
377 p_init_msg_list IN VARCHAR2,
378 x_return_status OUT NOCOPY VARCHAR2,
379 x_msg_count OUT NOCOPY NUMBER,
380 x_msg_data OUT NOCOPY VARCHAR2,
381 p_asset_cle_id IN NUMBER,
382 x_subsidized OUT NOCOPY VARCHAR2) is
383
384 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
385 l_api_name CONSTANT varchar2(30) := 'IS_ASSET_SUBSIDIZED';
386 l_api_version CONSTANT NUMBER := 1.0;
387
388 --cursor to find out whether subsidies exist on the
389 --contract
390 cursor l_subexist_csr(p_asset_cle_id in number) is
391 select 'Y'
392 from dual
393 where exists (select '1'
394 from okc_k_lines_b cleb,
395 okc_line_styles_b lseb
396 where cleb.cle_id = p_asset_cle_id
397 and cleb.sts_code <> 'ABANDONED'
398 and lseb.id = cleb.lse_id
399 and lseb.lty_code = 'SUBSIDY'
400 );
401
402 l_subsidy_exists varchar2(1) default 'N';
403 begin
404 ----
405 ----------------------------------------
406 --start of input parameter validations
407 ---------------------------------------
408 --1.validate p_asset_cle_id
409 If (p_asset_cle_id is NULL) or (p_asset_cle_id = OKL_API.G_MISS_NUM) then
410 OKL_API.set_message(
411 p_app_name => G_APP_NAME,
412 p_msg_name => G_API_MISSING_PARAMETER,
413 p_token1 => G_API_NAME_TOKEN,
414 p_token1_value => l_api_name,
415 p_token2 => G_MISSING_PARAM_TOKEN,
416 p_token2_value => 'p_asset_cle_id');
417 x_return_status := OKL_API.G_RET_STS_ERROR;
418 Raise OKL_API.G_EXCEPTION_ERROR;
419 Elsif (p_asset_cle_id is not NULL) and (p_asset_cle_id <> OKL_API.G_MISS_NUM) then
420 validate_cle_id(p_cle_id => p_asset_cle_id,
421 p_lty_code => 'FREE_FORM1',
422 x_return_status => x_return_status);
423 IF x_return_status = OKL_API.G_RET_STS_ERROR then
424 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_asset_cle_id');
425 Raise OKL_API.G_EXCEPTION_ERROR;
426 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
427 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
428 End If;
429 End If;
430 -----------------------------------
431 --end of input variable validations
432 -----------------------------------
433
434 l_subsidy_exists := 'N';
435 open l_subexist_csr(p_asset_cle_id => p_asset_cle_id);
436 fetch l_subexist_csr into l_subsidy_exists;
437 If l_subexist_csr%NOTFOUND then
438 NULL;
439 End If;
440 Close l_subexist_csr;
441 If l_subsidy_exists = 'Y' then
442 x_subsidized := OKL_API.G_TRUE;
443 elsif l_subsidy_exists = 'N' then
444 x_subsidized := OKL_API.G_FALSE;
445 end if;
446 Exception
447 WHEN OKL_API.G_EXCEPTION_ERROR THEN
448 If l_subexist_csr%ISOPEN then
449 CLOSE l_subexist_csr;
450 End If;
451 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
452 l_api_name,
453 G_PKG_NAME,
454 'OKL_API.G_RET_STS_ERROR',
455 x_msg_count,
456 x_msg_data,
457 '_PVT');
458 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
459 If l_subexist_csr%ISOPEN then
460 CLOSE l_subexist_csr;
461 End If;
462 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
463 l_api_name,
464 G_PKG_NAME,
465 'OKL_API.G_RET_STS_UNEXP_ERROR',
466 x_msg_count,
467 x_msg_data,
468 '_PVT');
469 When others then
470 If l_subexist_csr%ISOPEN then
471 CLOSE l_subexist_csr;
472 End If;
473 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
474 l_api_name,
475 G_PKG_NAME,
476 'OTHERS',
477 x_msg_count,
478 x_msg_data,
479 '_PVT');
480 End is_asset_subsidized;
481 ---------------------------------------------------------------------------------
482 --Bug# 3330669 : Bug Fix for Rate Points calculation
483 --------------------------------------------------------------------------------
484 Procedure print( p_proc_name IN VARCHAR2,
485 p_message IN VARCHAR2,
486 x_return_status IN VARCHAR2) IS
487
488 Begin
489
490 NULL;
491 --dbms_output.put_line( p_proc_name||':'||p_message||':'||x_return_status );
492
493 End;
494
495 Procedure print( p_proc_name IN VARCHAR2,
496 p_message IN VARCHAR2) IS
497 Begin
498
499 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
500 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,p_proc_name || p_message || 'S' );
501
502 END IF;
503 End;
504 --------------------------------------------------------------------------
505 -- FUNCTION get_first_sel_date
506 ---------------------------------------------------------------------------
507 FUNCTION get_first_sel_date( p_start_date IN DATE,
508 p_advance_or_arrears IN VARCHAR2,
509 p_months_increment IN NUMBER,
510 x_return_status OUT NOCOPY VARCHAR2) RETURN DATE IS
511 l_date DATE;
512
513 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'get_first_sel_date';
514
515 BEGIN
516 IF (G_DEBUG_ENABLED = 'Y') THEN
517 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
518 END IF;
519
520 x_return_status := OKL_API.G_RET_STS_SUCCESS;
521 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
522 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || 'begin' );
523 END IF;
524 IF p_advance_or_arrears = 'ADVANCE' THEN
525 l_date := TRUNC(p_start_date);
526 ELSIF p_advance_or_arrears = 'ARREARS' THEN
527 l_date := ADD_MONTHS(TRUNC(p_start_date), p_months_increment) - 1;
528 END IF;
529
530 IF l_date IS NOT NULL THEN
531 x_return_status := OKL_API.G_RET_STS_SUCCESS;
532 RETURN l_date;
533 ELSE
534 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
535 END IF;
536
537 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
538 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || 'end' );
539 END IF;
540 EXCEPTION
541
542 WHEN OKL_API.G_EXCEPTION_ERROR THEN
543
544 x_return_status := OKL_API.G_RET_STS_ERROR;
545
546 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
547
548 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
549
550 WHEN OTHERS THEN
551
552 OKL_API.SET_MESSAGE( p_app_name => G_APP_NAME
553 ,p_msg_name => G_UNEXPECTED_ERROR
554 ,p_token1 => G_SQLCODE_TOKEN
555 ,p_token1_value => SQLCODE
556 ,p_token2 => G_SQLERRM_TOKEN
557 ,p_token2_value => SQLERRM);
558
559 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
560
561 END get_first_sel_date;
562 ---------------------------------------------------------------------------
563 -- FUNCTION get_months_factor
564 ---------------------------------------------------------------------------
565 FUNCTION get_months_factor( p_frequency IN VARCHAR2,
566 x_return_status OUT NOCOPY VARCHAR2) RETURN NUMBER IS
567
568 l_months NUMBER;
569
570 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'get_months_factor';
571
572
573 BEGIN
574 IF (G_DEBUG_ENABLED = 'Y') THEN
575 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
576 END IF;
577
578 x_return_status := OKL_API.G_RET_STS_SUCCESS;
579 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
580 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || 'begin' );
581 END IF;
582 IF p_frequency = 'M' THEN
583 l_months := 1;
584 ELSIF p_frequency = 'Q' THEN
585 l_months := 3;
586 ELSIF p_frequency = 'S' THEN
587 l_months := 6;
588 ELSIF p_frequency = 'A' THEN
589 l_months := 12;
590 END IF;
591
592 IF l_months IS NOT NULL THEN
593 x_return_status := OKL_API.G_RET_STS_SUCCESS;
594 RETURN l_months;
595
596 ELSE
597
598 OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
599 p_msg_name => 'OKL_INVALID_FREQUENCY_CODE',
600 p_token1 => 'FRQ_CODE',
601 p_token1_value => p_frequency);
602
603 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
604
605 END IF;
606
607 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
608 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || 'end' );
609 END IF;
610 EXCEPTION
611
612 WHEN OKL_API.G_EXCEPTION_ERROR THEN
613
614 x_return_status := OKL_API.G_RET_STS_ERROR;
615
616 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
617
618 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
619
620 WHEN OTHERS THEN
621
622 OKL_API.SET_MESSAGE( p_app_name => G_APP_NAME
623 ,p_msg_name => G_UNEXPECTED_ERROR
624 ,p_token1 => G_SQLCODE_TOKEN
625 ,p_token1_value => SQLCODE
626 ,p_token2 => G_SQLERRM_TOKEN
627 ,p_token2_value => SQLERRM);
628
629 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
630
631 END get_months_factor;
632 ---------------------------------------------------------------------------
633 -- PROCEDURE get_stream_elements
634 --
635 -- Description
636 -- Populates Stream Elements array for contiguous periodic charges/expenses
637 --
638 ---------------------------------------------------------------------------
639 PROCEDURE get_stream_elements( p_start_date IN DATE,
640 p_periods IN NUMBER,
641 p_frequency IN VARCHAR2,
642 p_structure IN VARCHAR2,
643 p_advance_or_arrears IN VARCHAR2,
644 p_amount IN NUMBER,
645 p_stub_days IN NUMBER,
646 p_stub_amount IN NUMBER,
647 p_currency_code IN VARCHAR2,
648 p_khr_id IN NUMBER,
649 p_kle_id IN NUMBER,
650 p_purpose_code IN VARCHAR2,
651 x_selv_tbl OUT NOCOPY okl_sel_pvt.selv_tbl_type,
652 x_pt_tbl OUT NOCOPY okl_sel_pvt.selv_tbl_type,
653 x_return_status OUT NOCOPY VARCHAR2,
654 x_msg_count OUT NOCOPY NUMBER,
655 x_msg_data OUT NOCOPY VARCHAR2) IS
656
657 lx_return_status VARCHAR2(1);
658
659 l_months_factor NUMBER;
660 l_first_sel_date DATE;
661 l_element_count NUMBER;
662 l_base_amount NUMBER;
663 l_amount NUMBER;
664
665 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'get_stream_elements';
666
667 BEGIN
668 IF (G_DEBUG_ENABLED = 'Y') THEN
669 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
670 END IF;
671 x_return_status := OKL_API.G_RET_STS_SUCCESS ;
672 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
673 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || 'begin' );
674 END IF;
675 l_months_factor := get_months_factor( p_frequency => p_frequency,
676 x_return_status => x_return_status);
677
678 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
679 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
680 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
681 RAISE OKL_API.G_EXCEPTION_ERROR;
682 END IF;
683
684 l_first_sel_date := get_first_sel_date( p_start_date => p_start_date,
685 p_advance_or_arrears => p_advance_or_arrears,
686 p_months_increment => l_months_factor,
687 x_return_status => x_return_status);
688
689 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
690 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
691 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
692 RAISE OKL_API.G_EXCEPTION_ERROR;
693 END IF;
694
695 If ( p_amount IS NULL ) Then
696 l_amount := NULL;
697 else
698 l_amount := okl_accounting_util.validate_amount(p_amount => p_amount,
699 p_currency_code => p_currency_code);
700 ENd If;
701
702 If ( p_periods IS NULL ) AND ( p_stub_days IS NOT NULL ) Then
703
704 x_selv_tbl(1).amount := p_stub_amount;
705 x_selv_tbl(1).se_line_number := 1; -- TBD
706 x_selv_tbl(1).accrued_yn := NULL; -- TBD
707
708 IF p_advance_or_arrears = 'ARREARS' THEN
709 x_selv_tbl(1).stream_element_date := p_start_date + p_stub_days - 1;
710 x_selv_tbl(1).comments := 'Y';
711 ELSE
712 x_selv_tbl(1).stream_element_date := p_start_date;
713 x_selv_tbl(1).comments := 'N';
714 END IF;
715
716 Else
717
718 l_element_count := p_periods;
719
720 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
721 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || 'creating elements: ' || to_char(l_element_count) );
722 END IF;
723 FOR i IN 1 .. l_element_count LOOP
724
725 x_selv_tbl(i).amount := l_amount;
726 x_selv_tbl(i).stream_element_date := ADD_MONTHS(l_first_sel_date, (i - 1) * l_months_factor);
727 x_selv_tbl(i).se_line_number := i; -- TBD
728 x_selv_tbl(i).accrued_yn := NULL; -- TBD
729
730 IF p_advance_or_arrears = 'ARREARS' THEN
731 x_selv_tbl(i).comments := 'Y';
732 ELSE
733 x_selv_tbl(i).comments := 'N';
734 END IF;
735
736 END LOOP;
737
738 End If;
739
740
741 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
742 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || 'end' );
743
744 END IF;
745 EXCEPTION
746
747 WHEN OKL_API.G_EXCEPTION_ERROR THEN
748
749 x_return_status := OKL_API.G_RET_STS_ERROR;
750
751 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
752
753 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
754
755 WHEN OTHERS THEN
756
757 OKL_API.SET_MESSAGE( p_app_name => G_APP_NAME
758 ,p_msg_name => G_UNEXPECTED_ERROR
759 ,p_token1 => G_SQLCODE_TOKEN
760 ,p_token1_value => SQLCODE
761 ,p_token2 => G_SQLERRM_TOKEN
762 ,p_token2_value => SQLERRM);
763
764 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
765
766 END get_stream_elements;
767 ---------------------------------------------------------------------------
768 -- PROCEDURE get_stream_header
769 ---------------------------------------------------------------------------
770 PROCEDURE get_stream_header(p_purpose_code IN VARCHAR2,
771 p_khr_id IN NUMBER,
772 p_kle_id IN NUMBER,
773 p_sty_id IN NUMBER,
774 x_stmv_rec OUT NOCOPY okl_stm_pvt.stmv_rec_type,
775 x_return_status OUT NOCOPY VARCHAR2) IS
776
777 l_stmv_rec okl_stm_pvt.stmv_rec_type;
778 l_transaction_number NUMBER;
779
780 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'get_stream_header';
781
782
783 BEGIN
784 IF (G_DEBUG_ENABLED = 'Y') THEN
785 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
786 END IF;
787 x_return_status := OKL_API.G_RET_STS_SUCCESS;
788 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
789 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || 'begin' );
790 END IF;
791 SELECT okl_sif_seq.nextval INTO l_transaction_number FROM DUAL;
792
793 -- NOTE: UV for Streams inquiry (OKL_ASSET_STREAMS_UV) assumes a denormalized use of KHR_ID
794 l_stmv_rec.khr_id := p_khr_id;
795 l_stmv_rec.kle_id := p_kle_id;
796 l_stmv_rec.sty_id := p_sty_id;
797 l_stmv_rec.sgn_code := 'MANL';
798 l_stmv_rec.say_code := 'WORK';
799 l_stmv_rec.active_yn := 'N';
800 l_stmv_rec.transaction_number := l_transaction_number;
801 -- l_stmv_rec.date_current := NULL; -- TBD
802 l_stmv_rec.date_working := SYSDATE; -- TBD
803 -- l_stmv_rec.date_history := NULL; -- TBD
804 -- l_stmv_rec.comments := NULL; -- TBD
805
806 IF p_purpose_code = 'REPORT' THEN
807
808 l_stmv_rec.purpose_code := 'REPORT';
809
810 END IF;
811
812 x_stmv_rec := l_stmv_rec;
813 --x_return_status := G_RET_STS_SUCCESS;
814
815 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
816 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || 'end' );
817 END IF;
818 EXCEPTION
819
820 WHEN OKL_API.G_EXCEPTION_ERROR THEN
821
822 x_return_status := OKL_API.G_RET_STS_ERROR;
823
824 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
825
826 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
827
828 WHEN OTHERS THEN
829
830 OKL_API.SET_MESSAGE( p_app_name => G_APP_NAME
831 ,p_msg_name => G_UNEXPECTED_ERROR
832 ,p_token1 => G_SQLCODE_TOKEN
833 ,p_token1_value => SQLCODE
834 ,p_token2 => G_SQLERRM_TOKEN
835 ,p_token2_value => SQLERRM);
836
837 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
838
839 END get_stream_header;
840
841 --------------------------------------------------------------------------------
842 --Modified from okl_stream_generator_pvt.generate_stub_element
843 --------------------------------------------------------------------------------
844
845 Procedure generate_stub_element(p_khr_id IN NUMBER,
846 p_api_version IN NUMBER,
847 p_init_msg_list IN VARCHAR2,
848 x_msg_count OUT NOCOPY NUMBER,
849 x_msg_data OUT NOCOPY VARCHAR2,
850 x_return_status OUT NOCOPY VARCHAR2,
851 x_stmv_rec OUT NOCOPY OKL_STREAMS_PUB.stmv_rec_type,
852 x_selv_tbl OUT NOCOPY OKL_STREAMS_PUB.selv_tbl_type
853 ) Is
854
855 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
856 l_api_name CONSTANT varchar2(30) := 'GENERATE_STUB_ELEMENT';
857 l_api_version CONSTANT NUMBER := 1.0;
858
859
860 l_prog_name CONSTANT VARCHAR2(100) := G_PKG_NAME||'.'||'generate_stub_element';
861 l_selv_tbl OKL_STREAMS_PUB.selv_tbl_type;
862 l_stmv_rec OKL_STREAMS_PUB.stmv_rec_type;
863 --avsingh :
864 lx_selv_tbl OKL_STREAMS_PUB.selv_tbl_type;
865 lx_stmv_rec OKL_STREAMS_PUB.stmv_rec_type;
866
867
868 l_sty_id NUMBER;
869
870 Cursor c_sty IS
871 Select id
872 from okl_strm_type_v
873 --BUG# 4181025
874 --where name = 'RENT';
875 where stream_type_purpose = 'RENT';
876
877 Begin
878
879 x_return_status := OKL_API.G_RET_STS_SUCCESS;
880 -- Call start_activity to create savepoint, check compatibility
881 -- and initialize message list
882 x_return_status := OKL_API.START_ACTIVITY (
883 l_api_name
884 ,p_init_msg_list
885 ,'_PVT'
886 ,x_return_status);
887 -- Check if activity started successfully
888 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
889 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
890 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
891 RAISE OKL_API.G_EXCEPTION_ERROR;
892 END IF;
893
894
895
896 OPEN c_sty;
897 FETCH c_sty INTO l_sty_id;
898 CLOSE c_sty;
899
900 get_stream_header( p_khr_id => p_khr_id,
901 p_kle_id => NULL,
902 p_sty_id => l_sty_id,
903 p_purpose_code => 'STUBS',
904 x_stmv_rec => l_stmv_rec,
905 x_return_status => x_return_status);
906
907 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
908 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
909 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
910 RAISE OKL_API.G_EXCEPTION_ERROR;
911 END IF;
912
913 l_stmv_rec.date_history := sysdate ;
914 l_stmv_rec.say_code := 'HIST' ;
915 l_stmv_rec.SGN_CODE := 'MANL';
916 l_stmv_rec.active_yn := 'N';
917 l_stmv_rec.purpose_code := 'STUBS';
918 l_stmv_rec.comments := 'STUB STREAMS';
919
920 l_selv_tbl(1).stream_element_date := sysdate;
921 l_selv_tbl(1).amount := 0.0;
922 l_selv_tbl(1).se_line_number := 1 ;
923 l_selv_tbl(1).comments := 'STUB STREAM ELEMENT' ;
924 l_selv_tbl(1).parent_index := 1 ;
925
926
927 okl_streams_pvt.create_streams(
928 p_api_version => p_api_version
929 ,p_init_msg_list => p_init_msg_list
930 ,x_return_status => x_return_status
931 ,x_msg_count => x_msg_count
932 ,x_msg_data => x_msg_data
933 ,p_stmv_rec => l_stmv_rec
934 ,p_selv_tbl => l_selv_tbl
935 ,x_stmv_rec => lx_stmv_rec
936 ,x_selv_tbl => lx_selv_tbl
937 );
938
939 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
940 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
941 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
942 RAISE OKL_API.G_EXCEPTION_ERROR;
943 END IF;
944
945
946 --x_se_id := lx_selv_tbl(1).id;
947 x_stmv_rec := lx_stmv_rec;
948 x_selv_tbl := lx_selv_tbl;
949 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
950
951 EXCEPTION
952
953 WHEN OKL_API.G_EXCEPTION_ERROR THEN
954 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
955 l_api_name,
956 G_PKG_NAME,
957 'OKL_API.G_RET_STS_ERROR',
958 x_msg_count,
959 x_msg_data,
960 '_PVT');
961 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
962 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
963 l_api_name,
964 G_PKG_NAME,
965 'OKL_API.G_RET_STS_UNEXP_ERROR',
966 x_msg_count,
967 x_msg_data,
968 '_PVT');
969 WHEN OTHERS THEN
970 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
971 l_api_name,
972 G_PKG_NAME,
973 'OTHERS',
974 x_msg_count,
975 x_msg_data,
976 '_PVT');
977 end generate_stub_element;
978
979 --------------------------------------------------------------------------------
980 --Modified from okl_stream_generator_pvt.generate cash flows
981 --------------------------------------------------------------------------------
982 PROCEDURE generate_cash_flows(
983 p_api_version IN NUMBER,
984 p_init_msg_list IN VARCHAR2,
985 p_khr_id IN NUMBER,
986 p_kle_id IN NUMBER,
987 p_sty_id IN NUMBER,
988 p_payment_tbl IN okl_stream_generator_pvt.payment_tbl_type,
989 x_return_status OUT NOCOPY VARCHAR2,
990 x_msg_count OUT NOCOPY NUMBER,
991 x_msg_data OUT NOCOPY VARCHAR2,
992 x_stmv_rec_rent OUT NOCOPY okl_streams_pub.stmv_rec_type,
993 x_selv_tbl_rent OUT NOCOPY okl_streams_pub.selv_tbl_type,
994 x_stmv_rec_stub OUT NOCOPY okl_streams_pub.stmv_rec_type,
995 x_selv_tbl_stub OUT NOCOPY okl_streams_pub.selv_tbl_type,
996 x_payment_count OUT NOCOPY BINARY_INTEGER) IS
997
998 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
999 l_api_name CONSTANT varchar2(30) := 'GENERATE_CASH_FLOWS';
1000 l_api_version CONSTANT NUMBER := 1.0;
1001
1002
1003 CURSOR c_hdr IS
1004 SELECT chr.template_yn,
1005 chr.currency_code,
1006 chr.start_date,
1007 khr.deal_type,
1008 khr.term_duration,
1009 NVL(khr.generate_accrual_yn, 'Y')
1010 FROM okc_k_headers_b chr,
1011 okl_k_headers khr
1012 WHERE khr.id = p_khr_id
1013 AND chr.id = khr.id;
1014
1015 l_hdr c_hdr%ROWTYPE;
1016 l_deal_type VARCHAR2(30);
1017 l_purpose_code VARCHAR2(30) := 'FLOW';
1018
1019 l_pt_yn VARCHAR2(1);
1020 l_passthrough_id NUMBER;
1021
1022 l_sty_id NUMBER;
1023 l_sty_name VARCHAR2(150);
1024 l_mapped_sty_name VARCHAR2(150);
1025
1026 l_pre_tax_inc_id NUMBER;
1027 l_principal_id NUMBER;
1028 l_interest_id NUMBER;
1029 l_prin_bal_id NUMBER;
1030 l_termination_id NUMBER;
1031
1032 l_selv_tbl okl_streams_pub.selv_tbl_type;
1033 l_pt_tbl okl_streams_pub.selv_tbl_type;
1034 lx_selv_tbl okl_streams_pub.selv_tbl_type;
1035
1036 l_stmv_rec okl_streams_pub.stmv_rec_type;
1037 l_pt_rec okl_streams_pub.stmv_rec_type;
1038 lx_stmv_rec okl_streams_pub.stmv_rec_type;
1039
1040 i BINARY_INTEGER := 0;
1041 j BINARY_INTEGER := 0;
1042 l_ele_count BINARY_INTEGER := 0;
1043 k BINARY_INTEGER := 0;
1044
1045 l_adv_arr VARCHAR2(30);
1046
1047
1048
1049 l_prog_name CONSTANT VARCHAR2(61) := G_PKG_NAME||'.'||'generate_cash_flows';
1050 l_se_id NUMBER;
1051
1052 --avsingh
1053 l_stmv_rec_stub okl_streams_pub.stmv_rec_type;
1054 l_selv_tbl_stub okl_streams_pub.selv_tbl_type;
1055 l_stmv_rec_rent okl_streams_pub.stmv_rec_type;
1056 l_selv_tbl_rent okl_streams_pub.selv_tbl_type;
1057
1058
1059
1060 BEGIN
1061 IF (G_DEBUG_ENABLED = 'Y') THEN
1062 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1063 END IF;
1064
1065 x_return_status := OKL_API.G_RET_STS_SUCCESS;
1066 -- Call start_activity to create savepoint, check compatibility
1067 -- and initialize message list
1068 x_return_status := OKL_API.START_ACTIVITY (
1069 l_api_name
1070 ,p_init_msg_list
1071 ,'_PVT'
1072 ,x_return_status);
1073 -- Check if activity started successfully
1074 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1075 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1076 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1077 RAISE OKL_API.G_EXCEPTION_ERROR;
1078 END IF;
1079
1080
1081 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1082 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || 'begin' );
1083 END IF;
1084 OPEN c_hdr;
1085 FETCH c_hdr INTO l_hdr;
1086 CLOSE c_hdr;
1087
1088 generate_stub_element( p_api_version => p_api_version,
1089 p_init_msg_list => p_init_msg_list,
1090 p_khr_id => p_khr_id,
1091 x_return_status => x_return_status,
1092 x_msg_count => x_msg_count,
1093 x_msg_data => x_msg_data,
1094 x_stmv_rec => l_stmv_rec_stub,
1095 x_selv_tbl => l_selv_tbl_stub);
1096
1097 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
1098 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1099 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
1100 RAISE OKL_API.G_EXCEPTION_ERROR;
1101 END IF;
1102
1103 l_se_id := l_selv_tbl_stub(1).id;
1104
1105 ---------------------------------------------
1106 -- STEP 1: Spread cash INFLOW
1107 ---------------------------------------------
1108
1109 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1110 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || ' generating streams - begin');
1111
1112 END IF;
1113 get_stream_header(p_khr_id => p_khr_id,
1114 p_kle_id => p_kle_id,
1115 p_sty_id => p_sty_id,
1116 p_purpose_code => l_purpose_code,
1117 x_stmv_rec => l_stmv_rec,
1118 x_return_status => x_return_status);
1119
1120 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
1121 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1122 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
1123 RAISE OKL_API.G_EXCEPTION_ERROR;
1124 END IF;
1125
1126 l_stmv_rec.purpose_code := 'FLOW';
1127
1128 okl_streams_pub.create_streams(p_api_version => p_api_version,
1129 p_init_msg_list => p_init_msg_list,
1130 x_return_status => x_return_status,
1131 x_msg_count => x_msg_count,
1132 x_msg_data => x_msg_data,
1133 p_stmv_rec => l_stmv_rec,
1134 x_stmv_rec => lx_stmv_rec);
1135
1136 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
1137 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1138 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
1139 RAISE OKL_API.G_EXCEPTION_ERROR;
1140 END IF;
1141
1142 l_stmv_rec_rent := lx_stmv_rec;
1143
1144 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1145 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || 'created header' );
1146 END IF;
1147 x_payment_count := 0;
1148 l_ele_count := 0;
1149 FOR i IN p_payment_tbl.FIRST..p_payment_tbl.LAST
1150 LOOP
1151
1152 IF p_payment_tbl(i).start_date IS NULL THEN
1153
1154 OKL_API.SET_MESSAGE (p_app_name => G_APP_NAME,
1155 p_msg_name => 'OKL_NO_SLL_SDATE');
1156
1157 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1158
1159 END IF;
1160
1161 /*
1162 * calculate stream elements for each payment level
1163 * also means that if there are multiple payment levels for an asset, streams are
1164 * calculated at different points.
1165 * the streams amounts are they are entered in payments. In case of passthru, a
1166 * new set of streams are created with amounts that are passthru'ed - l_pt_tbl.
1167 */
1168 If ( p_payment_tbl(i).arrears_yn = 'Y' ) Then
1169 l_adv_arr := 'ARREARS';
1170 Else
1171 l_adv_arr := 'ADVANCE';
1172 End If;
1173
1174 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1175 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || 'start date ' || p_payment_tbl(i).start_date );
1176 END IF;
1177 get_stream_elements( p_start_date => p_payment_tbl(i).start_date,
1178 p_periods => p_payment_tbl(i).periods,
1179 p_frequency => p_payment_tbl(i).frequency,
1180 p_structure => p_payment_tbl(i).structure,
1181 p_advance_or_arrears => l_adv_arr,
1182 p_amount => p_payment_tbl(i).amount,
1183 p_stub_days => p_payment_tbl(i).stub_days,
1184 p_stub_amount => p_payment_tbl(i).stub_amount,
1185 p_currency_code => l_hdr.currency_code,
1186 p_khr_id => p_khr_id,
1187 p_kle_id => p_kle_id,
1188 p_purpose_code => l_purpose_code,
1189 x_selv_tbl => l_selv_tbl,
1190 x_pt_tbl => l_pt_tbl,
1191 x_return_status => x_return_status,
1192 x_msg_count => x_msg_count,
1193 x_msg_data => x_msg_data);
1194
1195 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
1196 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1197 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
1198 RAISE OKL_API.G_EXCEPTION_ERROR;
1199 END IF;
1200
1201 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1202 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || 'created elements ' || to_char(l_selv_tbl.COUNT) );
1203 END IF;
1204 FOR j in 1..l_selv_tbl.COUNT
1205 LOOP
1206 l_ele_count := l_ele_count + 1;
1207 l_selv_tbl(j).stm_id := lx_stmv_rec.id;
1208 l_selv_tbl(j).se_line_number := l_ele_count;
1209 l_selv_tbl(j).id := NULL;
1210 END LOOP;
1211
1212 If ( p_payment_tbl(i).stub_days IS NOT NULL ) AND ( p_payment_tbl(i).periods IS NULL ) Then
1213
1214 FOr i in 1..l_selv_tbl.COUNT
1215 LOOP
1216 l_selv_tbl(i).sel_id := l_se_id;
1217 END LOOP;
1218
1219 FOr i in 1..l_pt_tbl.COUNT
1220 LOOP
1221 l_pt_tbl(i).sel_id := l_se_id;
1222 END LOOP;
1223
1224 End If;
1225
1226 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1227 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || 'start date ' || l_selv_tbl(1).stream_element_date );
1228 END IF;
1229 okl_streams_pub.create_stream_elements(
1230 p_api_version => p_api_version,
1231 p_init_msg_list => p_init_msg_list,
1232 x_return_status => x_return_status,
1233 x_msg_count => x_msg_count,
1234 x_msg_data => x_msg_data,
1235 p_selv_tbl => l_selv_tbl,
1236 x_selv_tbl => lx_selv_tbl);
1237
1238 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
1239 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1240 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
1241 RAISE OKL_API.G_EXCEPTION_ERROR;
1242 END IF;
1243
1244 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1245 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || 'created elements ' || to_char(l_ele_count) );
1246 END IF;
1247 If l_selv_tbl_rent.COUNT = 0 then
1248 l_selv_tbl_rent := lx_selv_tbl;
1249 Else
1250 k := l_selv_tbl_rent.LAST;
1251 For j in lx_selv_tbl.FIRST..lx_selv_tbl.LAST
1252 Loop
1253 k := k + 1;
1254 l_selv_tbl_rent(k) := lx_selv_tbl(j);
1255 End Loop;
1256 End If;
1257 l_selv_tbl.DELETE;
1258 -- Clear out reusable data structures
1259
1260
1261 l_pt_rec := NULL;
1262 l_selv_tbl.delete;
1263 l_pt_tbl.delete;
1264
1265 lx_selv_tbl.delete;
1266
1267 x_payment_count := x_payment_count + 1;
1268 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1269 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || ' payment count ' || to_char(x_payment_count) );
1270
1271 END IF;
1272 END LOOP;
1273
1274 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1275 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_prog_name || ' done ' );
1276
1277 END IF;
1278 l_sty_name := NULL;
1279 l_sty_id := NULL;
1280 l_stmv_rec := NULL;
1281 lx_stmv_rec := NULL;
1282
1283 x_stmv_rec_stub := l_stmv_rec_stub;
1284 x_selv_tbl_stub := l_selv_tbl_stub;
1285 x_stmv_rec_rent := l_stmv_rec_rent;
1286 x_selv_tbl_rent := l_selv_tbl_rent;
1287
1288 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
1289
1290 EXCEPTION
1291
1292 WHEN OKL_API.G_EXCEPTION_ERROR THEN
1293 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1294 l_api_name,
1295 G_PKG_NAME,
1296 'OKL_API.G_RET_STS_ERROR',
1297 x_msg_count,
1298 x_msg_data,
1299 '_PVT');
1300 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1301 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1302 l_api_name,
1303 G_PKG_NAME,
1304 'OKL_API.G_RET_STS_UNEXP_ERROR',
1305 x_msg_count,
1306 x_msg_data,
1307 '_PVT');
1308 WHEN OTHERS THEN
1309 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1310 l_api_name,
1311 G_PKG_NAME,
1312 'OTHERS',
1313 x_msg_count,
1314 x_msg_data,
1315 '_PVT');
1316
1317 END generate_cash_flows;
1318
1319 -----------------------------------------------------------
1320 --Local procedure PV calculation - calls ISG API
1321 -----------------------------------------------------------
1322 Procedure calculate_pv (p_api_version IN NUMBER,
1323 p_init_msg_list IN VARCHAR2,
1324 x_return_status OUT NOCOPY VARCHAR2,
1325 x_msg_count OUT NOCOPY NUMBER,
1326 x_msg_data OUT NOCOPY VARCHAR2,
1327 p_chr_id IN NUMBER,
1328 p_asset_cle_id IN NUMBER,
1329 p_payment_tbl IN OKL_STREAM_GENERATOR_PVT.payment_tbl_type,
1330 p_irr IN NUMBER,
1331 x_npv OUT NOCOPY NUMBER
1332 ) is
1333
1334 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
1335 l_api_name CONSTANT varchar2(30) := 'CALCULATE_NPV';
1336 l_api_version CONSTANT NUMBER := 1.0;
1337
1338 cursor l_cleb_csr (p_cle_id in number) is
1339 select cleb.start_date,
1340 cleb.end_date
1341 from okc_k_lines_b cleb
1342 where cleb.id = p_cle_id;
1343
1344 l_start_date okc_k_lines_b.start_date%TYPE;
1345 l_end_date okc_k_lines_b.end_date%TYPE;
1346 i NUMBER;
1347
1348 l_stmv_rec_rent okl_streams_pub.stmv_rec_type;
1349 l_selv_tbl_rent okl_streams_pub.selv_tbl_type;
1350 l_stmv_rec_stub okl_streams_pub.stmv_rec_type;
1351 l_selv_tbl_stub okl_streams_pub.selv_tbl_type;
1352
1353 l_payment_count BINARY_INTEGER;
1354 l_sty_id NUMBER;
1355 l_npv NUMBER;
1356 l_kle_yld NUMBER;
1357 l_days NUMBER;
1358
1359 --cursor to ger stream type id
1360 cursor l_styb_csr(p_strm_type in varchar2) is
1361 select styb.id
1362 from okl_strm_type_b styb
1363 --Bug# 4181025
1364 --where code = p_strm_type;
1365 where stream_type_purpose = p_strm_type;
1366 l_pv number;
1367 l_cash_flow_tbl okl_stream_generator_pvt.cash_flow_tbl;
1368 Begin
1369 IF (G_DEBUG_ENABLED = 'Y') THEN
1370 G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1371 END IF;
1372
1373 x_return_status := OKL_API.G_RET_STS_SUCCESS;
1374 -- Call start_activity to create savepoint, check compatibility
1375 -- and initialize message list
1376 x_return_status := OKL_API.START_ACTIVITY (
1377 l_api_name
1378 ,p_init_msg_list
1379 ,'_PVT'
1380 ,x_return_status);
1381 -- Check if activity started successfully
1382 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1383 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1384 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1385 RAISE OKL_API.G_EXCEPTION_ERROR;
1386 END IF;
1387
1388 open l_styb_csr(p_strm_type => 'RENT');
1389 fetch l_styb_csr into l_sty_id;
1390 if l_styb_csr%NOTFOUND then
1391 null;
1392 end if;
1393 close l_styb_csr;
1394
1395 generate_cash_flows(p_api_version => p_api_version,
1396 p_init_msg_list => p_init_msg_list,
1397 p_khr_id => p_chr_id,
1398 p_kle_id => p_asset_cle_id,
1399 p_sty_id => l_sty_id,
1400 p_payment_tbl => p_payment_tbl,
1401 x_return_status => x_return_status,
1402 x_msg_count => x_msg_count,
1403 x_msg_data => x_msg_data,
1404 x_stmv_rec_rent => l_stmv_rec_rent,
1405 x_selv_tbl_rent => l_selv_tbl_rent,
1406 x_stmv_rec_stub => l_stmv_rec_stub,
1407 x_selv_tbl_stub => l_selv_tbl_stub,
1408 x_payment_count => l_payment_count);
1409
1410 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1411 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1412 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1413 RAISE OKL_API.G_EXCEPTION_ERROR;
1414 END IF;
1415
1416
1417 l_npv := 0.0;
1418
1419 open l_cleb_csr(p_cle_id => p_asset_cle_id);
1420 Fetch l_cleb_csr into l_start_date,
1421 l_end_date;
1422 IF l_cleb_csr%NOTFOUND then
1423 NULL;
1424 END IF;
1425 close l_cleb_csr;
1426
1427 FOR i in l_selv_tbl_rent.FIRST..l_selv_tbl_rent.LAST
1428 LOOP
1429
1430 l_pv := 0;
1431 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1432 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_api_name || ' frequency ' || p_payment_tbl(1).frequency );
1433 END IF;
1434 OKL_STREAM_GENERATOR_PVT.get_present_value(p_api_version => p_api_version,
1435 p_init_msg_list => p_init_msg_list,
1436 p_amount_date => l_selv_tbl_rent(i).stream_element_date,
1437 p_amount => l_selv_tbl_rent(i).amount,
1438 p_frequency => p_payment_tbl(1).frequency,
1439 p_rate => p_irr,
1440 p_pv_date => l_start_date,
1441 x_pv_amount => l_pv,
1442 x_return_status => x_return_status,
1443 x_msg_count => x_msg_count,
1444 x_msg_data => x_msg_data);
1445
1446 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1447 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1448 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1449 RAISE OKL_API.G_EXCEPTION_ERROR;
1450 END IF;
1451
1452 l_npv := l_npv + l_pv;
1453 IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1454 OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE, l_api_name || ' amount ' || to_char(l_npv) );
1455
1456 END IF;
1457 END LOOP;
1458 x_npv := l_npv;
1459
1460 --delete streams created for this temporary calculation
1461 okl_streams_pub.delete_streams(
1462 p_api_version => p_api_version,
1463 p_init_msg_list => p_init_msg_list,
1464 x_return_status => x_return_status,
1465 x_msg_count => x_msg_count,
1466 x_msg_data => x_msg_data,
1467 p_stmv_rec => l_stmv_rec_stub);
1468
1469 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
1470 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1471 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
1472 RAISE OKL_API.G_EXCEPTION_ERROR;
1473 END IF;
1474
1475
1476 okl_streams_pub.delete_streams(
1477 p_api_version => p_api_version,
1478 p_init_msg_list => p_init_msg_list,
1479 x_return_status => x_return_status,
1480 x_msg_count => x_msg_count,
1481 x_msg_data => x_msg_data,
1482 p_stmv_rec => l_stmv_rec_rent);
1483
1484 IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
1485 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1486 ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
1487 RAISE OKL_API.G_EXCEPTION_ERROR;
1488 END IF;
1489
1490 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
1491
1492 EXCEPTION
1493
1494 WHEN OKL_API.G_EXCEPTION_ERROR THEN
1495 If l_cleb_csr%ISOPEN then
1496 close l_cleb_csr;
1497 End If;
1498 If l_styb_csr%ISOPEN then
1499 close l_styb_csr;
1500 End If;
1501 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1502 l_api_name,
1503 G_PKG_NAME,
1504 'OKL_API.G_RET_STS_ERROR',
1505 x_msg_count,
1506 x_msg_data,
1507 '_PVT');
1508 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1509 If l_cleb_csr%ISOPEN then
1510 close l_cleb_csr;
1511 End If;
1512 If l_styb_csr%ISOPEN then
1513 close l_styb_csr;
1514 End If;
1515 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1516 l_api_name,
1517 G_PKG_NAME,
1518 'OKL_API.G_RET_STS_UNEXP_ERROR',
1519 x_msg_count,
1520 x_msg_data,
1521 '_PVT');
1522 WHEN OTHERS THEN
1523 If l_cleb_csr%ISOPEN then
1524 close l_cleb_csr;
1525 End If;
1526 If l_styb_csr%ISOPEN then
1527 close l_styb_csr;
1528 End If;
1529 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1530 l_api_name,
1531 G_PKG_NAME,
1532 'OTHERS',
1533 x_msg_count,
1534 x_msg_data,
1535 '_PVT');
1536 End calculate_pv;
1537 --End Rate Points Calc
1538 --------------------------------------------------------------------------------
1539 --Name : get_rate_points_amount
1540 --Description : API to calculate rate point subsidy amount for a subsidy line
1541 --
1542 -- PARAMETERS : IN - p_subsidy_cle_id : subsidy line id
1543 -- rate_points : rate points as specified in setup
1544 -- OUT - x_subsidy_amount : calculated subsidy amount
1545 --------------------------------------------------------------------------------
1546 PROCEDURE calc_rate_points_amount(
1547 p_api_version IN NUMBER,
1548 p_init_msg_list IN VARCHAR2,
1549 x_return_status OUT NOCOPY VARCHAR2,
1550 x_msg_count OUT NOCOPY NUMBER,
1551 x_msg_data OUT NOCOPY VARCHAR2,
1552 p_rate_points IN NUMBER,
1553 p_chr_id IN NUMBER,
1554 p_asset_cle_id IN NUMBER,
1555 x_subsidy_amount OUT NOCOPY NUMBER) is
1556
1557 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
1558 l_api_name CONSTANT varchar2(30) := 'GET_RATE_POINTS';
1559 l_api_version CONSTANT NUMBER := 1.0;
1560
1561 -- Added sll_rulb.rule_information2 in order by clause for bug#6007644 - varangan-14-Jun-07
1562 cursor l_rent_csr (p_asset_cle_id in number) is
1563 select sll_rulb.rule_information2 start_date,
1564 sll_rulb.rule_information3 periods,
1565 sll_rulb.object1_id1 frequency,
1566 sll_rulb.rule_information5 structure,
1567 nvl( sll_rulb.rule_information10,'N') arrears_yn,
1568 sll_rulb.rule_information6 amount,
1569 sll_rulb.rule_information7 stub_days,
1570 sll_rulb.rule_information8 stub_amount,
1571 sll_rulb.rule_information13 rate
1572 from okc_rules_b sll_rulb,
1573 okc_rules_b slh_rulb,
1574 okl_strm_type_b styb,
1575 okc_rule_groups_b rgpb
1576 where sll_rulb.rgp_id = rgpb.id
1577 and sll_rulb.rule_information_category = 'LASLL'
1578 and sll_rulb.dnz_chr_id = rgpb.dnz_chr_id
1579 and sll_rulb.object2_id1 = to_char(slh_rulb.id)
1580 and slh_rulb.rgp_id = rgpb.id
1581 and slh_rulb.rule_information_category = 'LASLH'
1582 and slh_rulb.dnz_chr_id = rgpb.dnz_chr_id
1583 and styb.id = slh_rulb.object1_id1
1584 --Bug# 4181025 :
1585 --and styb.code = 'RENT'
1586 and styb.stream_type_purpose = 'RENT'
1587 and rgpb.cle_id = p_asset_cle_id
1588 and rgpb.rgd_code = 'LALEVL'
1589 order by FND_DATE.canonical_to_date(sll_rulb.rule_information2);
1590
1591 l_rent_rec l_rent_csr%RowType;
1592 l_payment_tbl OKL_STREAM_GENERATOR_PVT.payment_tbl_type;
1593 lx_payment_tbl OKL_STREAM_GENERATOR_PVT.payment_tbl_type;
1594 l_payment_tbl_miss OKL_STREAM_GENERATOR_PVT.payment_tbl_type;
1595
1596 i number;
1597 l_orig_irr number;
1598 lx_orig_irr number;
1599 l_modified_irr number;
1600 l_rate_points number;
1601
1602 l_subsidy_amount number;
1603
1604 l_npv_new number;
1605 l_npv_orig number;
1606
1607 --cursor to get asset number for error message
1608 cursor l_astnum_csr (p_cle_id in number) is
1609 select clet.name
1610 from okc_k_lines_tl clet
1611 where id = p_cle_id
1612 and language = userenv('LANG');
1613
1614 l_asset_number okc_k_lines_tl.name%TYPE;
1615
1616 begin
1617 x_return_status := OKL_API.G_RET_STS_SUCCESS;
1618 -- Call start_activity to create savepoint, check compatibility
1619 -- and initialize message list
1620 x_return_status := OKL_API.START_ACTIVITY (
1621 l_api_name
1622 ,p_init_msg_list
1623 ,'_PVT'
1624 ,x_return_status);
1625 -- Check if activity started successfully
1626 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1627 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1628 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1629 RAISE OKL_API.G_EXCEPTION_ERROR;
1630 END IF;
1631
1632 ---------------------------------------
1633 --start of input parameter validations
1634 --------------------------------------
1635 --1.validate p_asset_cle_id
1636 If (p_asset_cle_id is NULL) or (p_asset_cle_id = OKL_API.G_MISS_NUM) then
1637 OKL_API.set_message(
1638 p_app_name => G_APP_NAME,
1639 p_msg_name => G_API_MISSING_PARAMETER,
1640 p_token1 => G_API_NAME_TOKEN,
1641 p_token1_value => l_api_name,
1642 p_token2 => G_MISSING_PARAM_TOKEN,
1643 p_token2_value => 'p_asset_cle_id');
1644 x_return_status := OKL_API.G_RET_STS_ERROR;
1645 Raise OKL_API.G_EXCEPTION_ERROR;
1646 Elsif (p_asset_cle_id is not NULL) and (p_asset_cle_id <> OKL_API.G_MISS_NUM) then
1647 validate_cle_id(p_cle_id => p_asset_cle_id,
1648 p_lty_code => 'FREE_FORM1',
1649 x_return_status => x_return_status);
1650 IF x_return_status = OKL_API.G_RET_STS_ERROR then
1651 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_asset_cle_id');
1652 Raise OKL_API.G_EXCEPTION_ERROR;
1653 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
1654 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1655 End If;
1656 End If;
1657 ------------------------------------
1658 --end of input variable validations
1659 -----------------------------------
1660
1661 ---------------------------------------------------------------------
1662 --Rate points calculation steps
1663 ---------------------------------------------------------------------
1664 --1. Get asset payments
1665 --2. Call ISG API to get IRR from asset payments
1666 --3. Add rate points to IRR to get modified IRR
1667 --4. Call PV formula to get PV of payments at original IRR
1668 --5. Call PV formula to get PV of payments at modified IRR
1669 --6. subtract new PV from old PV. Difference is subsidy amount;
1670 ------------------------------------------------------------------
1671
1672 i := 0;
1673 l_rate_points := p_rate_points;
1674 -----------------------------------------------------
1675 --1. Get asset payments
1676 -----------------------------------------------------
1677 open l_rent_csr(p_asset_cle_id => p_asset_cle_id);
1678 Loop
1679 fetch l_rent_csr into l_rent_rec;
1680 Exit when l_rent_csr%NOTFOUND;
1681 i := i+1;
1682 l_Payment_tbl(i).start_date := trunc(fnd_date.canonical_to_date(l_rent_rec.start_date));
1683 l_Payment_tbl(i).periods := l_rent_rec.periods;
1684 l_Payment_tbl(i).frequency := l_rent_rec.frequency;
1685 l_payment_tbl(i).structure := l_rent_rec.structure;
1686 l_payment_tbl(i).arrears_yn := l_rent_rec.arrears_yn;
1687 l_payment_tbl(i).amount := l_rent_rec.amount;
1688 l_payment_tbl(i).stub_days := l_rent_rec.stub_days;
1689 l_payment_tbl(i).stub_amount := l_rent_rec.stub_amount;
1690 l_payment_tbl(i).rate := l_rent_rec.rate;
1691 end loop;
1692 close l_rent_csr;
1693 If l_payment_tbl.COUNT > 0 then
1694 -------------------------------------------------------
1695 --2. Call ISG API to get IRR from asset payments
1696 -------------------------------------------------------
1697 OKL_PRICING_PVT.target_parameter
1698 (p_api_version => p_api_version,
1699 p_init_msg_list => p_init_msg_list,
1700 p_khr_id => p_chr_id,
1701 p_kle_id => p_asset_cle_id,
1702 p_rate_type => G_RATE_TYPE,
1703 p_target_param => 'PMNT',
1704 p_pay_tbl => l_payment_tbl,
1705 x_pay_tbl => lx_payment_tbl,
1706 x_overall_rate => l_orig_irr,
1707 x_return_status => x_return_status,
1708 x_msg_count => x_msg_count,
1709 x_msg_data => x_msg_data);
1710
1711 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1712 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1713 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1714 RAISE OKL_API.G_EXCEPTION_ERROR;
1715 END IF;
1716
1717 ------------------------------------------------
1718 --3. Add rate points to IRR to get modified IRR
1719 ------------------------------------------------
1720 l_modified_irr := l_rate_points + l_orig_irr;
1721
1722 ------------------------------------------------------------
1723 --5. Call PV formula and get NPV for old and new payments
1724 -----------------------------------------------------------
1725 --pv for old irr
1726 calculate_pv(p_api_version => p_api_version,
1727 p_init_msg_list => p_init_msg_list,
1728 x_return_status => x_return_status,
1729 x_msg_count => x_msg_count,
1730 x_msg_data => x_msg_data,
1731 p_chr_id => p_chr_id,
1732 p_asset_cle_id => p_asset_cle_id,
1733 p_payment_tbl => l_payment_tbl,
1734 p_irr => l_orig_irr,
1735 x_npv => l_npv_orig);
1736
1737 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1738 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1739 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1740 RAISE OKL_API.G_EXCEPTION_ERROR;
1741 END IF;
1742
1743 --pv for new irr
1744 calculate_pv (p_api_version => p_api_version,
1745 p_init_msg_list => p_init_msg_list,
1746 x_return_status => x_return_status,
1747 x_msg_count => x_msg_count,
1748 x_msg_data => x_msg_data,
1749 p_chr_id => p_chr_id,
1750 p_asset_cle_id => p_asset_cle_id,
1751 p_payment_tbl => l_payment_tbl,
1752 p_irr => l_modified_irr,
1753 x_npv => l_npv_new);
1754
1755 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1756 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1757 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1758 RAISE OKL_API.G_EXCEPTION_ERROR;
1759 END IF;
1760
1761
1762 l_subsidy_amount := l_npv_orig - l_npv_new;
1763
1764 Else
1765 --get asset number
1766 open l_astnum_csr(p_cle_id => p_asset_cle_id);
1767 fetch l_astnum_csr into l_asset_number;
1768 if l_astnum_csr%NOTFOUND then
1769 null;
1770 end if;
1771 close l_astnum_csr;
1772 OKL_API.set_message(p_app_name => G_APP_NAME,
1773 p_msg_name => G_SUBSIDY_NO_RENTS,
1774 p_token1 => G_ASSET_NUMBER_TOKEN,
1775 p_token1_value => l_asset_number);
1776 x_return_status := OKL_API.G_RET_STS_ERROR;
1777 RAISE OKL_API.G_EXCEPTION_ERROR;
1778 End If;
1779
1780 x_subsidy_amount := l_subsidy_amount;
1781 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
1782
1783 EXCEPTION
1784
1785 WHEN OKL_API.G_EXCEPTION_ERROR THEN
1786 If l_astnum_csr%ISOPEN then
1787 close l_astnum_csr;
1788 End If;
1789 If l_rent_csr%ISOPEN then
1790 close l_rent_csr;
1791 End If;
1792 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1793 l_api_name,
1794 G_PKG_NAME,
1795 'OKL_API.G_RET_STS_ERROR',
1796 x_msg_count,
1797 x_msg_data,
1798 '_PVT');
1799 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1800 If l_astnum_csr%ISOPEN then
1801 close l_astnum_csr;
1802 End If;
1803 If l_rent_csr%ISOPEN then
1804 close l_rent_csr;
1805 End If;
1806 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1807 l_api_name,
1808 G_PKG_NAME,
1809 'OKL_API.G_RET_STS_UNEXP_ERROR',
1810 x_msg_count,
1811 x_msg_data,
1812 '_PVT');
1813 WHEN OTHERS THEN
1814 If l_astnum_csr%ISOPEN then
1815 close l_astnum_csr;
1816 End If;
1817 If l_rent_csr%ISOPEN then
1818 close l_rent_csr;
1819 End If;
1820 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1821 l_api_name,
1822 G_PKG_NAME,
1823 'OTHERS',
1824 x_msg_count,
1825 x_msg_data,
1826 '_PVT');
1827 End calc_rate_points_amount;
1828 --------------------------------------------------------------------------------
1829 --End : Changes for Bug# 3330669
1830 --------------------------------------------------------------------------------
1831 --------------------------------------------------------------------------------
1832 --Name : Convert_Currency
1833 --Description : Local procedure to do currency conversion
1834 --PARAMETERS : IN p_from_currency in varchar2
1835 -- p_khr_id in contract header id
1836 -- p_transaction_date in transaction_date
1837 -- p_amount in number
1838 -- p_round_yn in varchar2 default OKL_API_G_TRUE
1839 -- OUT x_return_status
1840 -- x_converted amount
1841 --------------------------------------------------------------------------------
1842 Procedure Convert_currency(p_khr_id IN NUMBER,
1843 p_from_currency IN VARCHAR2,
1844 p_transaction_date IN DATE,
1845 p_amount IN NUMBER,
1846 p_round_yn IN VARCHAR2 DEFAULT OKL_API.G_TRUE,
1847 x_converted_amount OUT NOCOPY NUMBER,
1848 x_return_status OUT NOCOPY VARCHAR2) is
1849
1850 l_contract_currency okc_k_headers_b.currency_code%TYPE;
1851 l_currency_conversion_type okl_k_headers.currency_conversion_type%TYPE;
1852 l_currency_conversion_rate okl_k_headers.currency_conversion_rate%TYPE;
1853 l_currency_conversion_date okl_k_headers.currency_conversion_date%TYPE;
1854 l_converted_subsidy_amount Number;
1855 l_rounded_subsidy_amount Number;
1856
1857 error_condition Exception;
1858 Begin
1859 ----------------------------------------------------------------------------
1860 --1. Call accounting util to do currency conversion
1861 ----------------------------------------------------------------------------
1862 okl_accounting_util.convert_to_contract_currency
1863 (p_khr_id => p_khr_id,
1864 p_from_currency => p_from_currency,
1865 p_transaction_date => p_transaction_date,
1866 p_amount => p_amount,
1867 x_contract_currency => l_contract_currency,
1868 x_currency_conversion_type => l_currency_conversion_type,
1869 x_currency_conversion_rate => l_currency_conversion_rate,
1870 x_currency_conversion_date => l_currency_conversion_date,
1871 x_converted_amount => l_converted_subsidy_amount
1872 );
1873 --check for error in rate
1874 If (p_amount > 0) and (l_converted_subsidy_amount < 0 ) Then
1875 OKC_API.set_message(
1876 p_app_name => G_APP_NAME,
1877 p_msg_name => G_CONV_RATE_NOT_FOUND,
1878 p_token1 => G_FROM_CURRENCY_TOKEN,
1879 p_token1_value => p_from_currency,
1880 p_token2 => G_TO_CURRENCY_TOKEN,
1881 p_token2_value => l_contract_currency,
1882 p_token3 => G_CONV_TYPE_TOKEN,
1883 p_token3_value => l_currency_conversion_type,
1884 p_token4 => G_CONV_DATE_TOKEN,
1885 p_token4_value => to_char(l_currency_conversion_date,'DD-MON-YYYY'));
1886 x_return_status := OKL_API.G_RET_STS_ERROR;
1887 Raise error_condition;
1888 End If;
1889 ---------------------------------------------------------------------------
1890 --2. Call accounting util to do cross currency rounding
1891 ---------------------------------------------------------------------------
1892 If p_round_yn = OKL_API.G_TRUE then
1893 l_rounded_subsidy_amount := OKL_ACCOUNTING_UTIL.CROSS_CURRENCY_ROUND_AMOUNT
1894 (l_converted_subsidy_amount,
1895 l_contract_currency);
1896
1897 IF (l_converted_subsidy_amount <> 0 AND l_rounded_subsidy_amount = 0) THEN
1898 OKL_API.set_message(p_app_name => G_APP_NAME,
1899 p_msg_name => G_AMOUNT_ROUNDING);
1900 x_return_status := OKL_API.G_RET_STS_ERROR;
1901 RAISE error_condition;
1902 End If;
1903 l_converted_subsidy_amount := l_rounded_subsidy_amount;
1904 End If;
1905
1906 x_converted_amount := l_converted_subsidy_amount;
1907 Exception
1908 When Error_Condition Then
1909 Null;
1910 When Others Then
1911 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1912 End Convert_Currency;
1913 --------------------------------------------------------------------------------
1914 --Name : calculate_subsidy_amount
1915 --Description : API to calculate subsidy amount based on subsidy calculation
1916 -- criteria for a subsidy line.
1917 --Notes :
1918 -- Always calculates actual amount to
1919 -- be stored in okl_k_lines.amount column for the subsidy line.
1920 -- This will be called from OKL_ASSET_SUBSIDY_PVT.calculate_Asset_subsidy
1921 -- to calculate subsidy amount. This does not consider subsidy_override_amount.
1922 -- For considering subsidy_override_amount please use overloded form
1923 -- of calculate_subsidy_amount with extra parameter p_override_yn.
1924 -- PARAMETERS : IN - p_subsidy_cle_id : subsidy line id
1925 -- OUT - x_subsidy_amount : subsidy amount
1926 --------------------------------------------------------------------------------
1927 PROCEDURE calculate_subsidy_amount(
1928 p_api_version IN NUMBER,
1929 p_init_msg_list IN VARCHAR2,
1930 x_return_status OUT NOCOPY VARCHAR2,
1931 x_msg_count OUT NOCOPY NUMBER,
1932 x_msg_data OUT NOCOPY VARCHAR2,
1933 p_subsidy_cle_id IN NUMBER,
1934 x_subsidy_amount OUT NOCOPY NUMBER) is
1935
1936 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
1937 l_api_name CONSTANT varchar2(30) := 'CALCULATE_SUBSIDY_AMOUNT';
1938 l_api_version CONSTANT NUMBER := 1.0;
1939
1940 --cursor to fetch calculation basis
1941 cursor l_sub_calc_csr(p_subsidy_cle_id IN NUMBER) is
1942 Select sub_cle.id subsidy_cle_id,
1943 sub_cle.dnz_chr_id dnz_chr_id,
1944 sub_cle.start_date subsidy_start_date,
1945 sub_kle.subsidy_id subsidy_id,
1946 sub_kle.amount subsidy_line_amount,
1947 sub_cle.cle_id asset_cle_id,
1948 sub_kle.subsidy_override_amount subsidy_override_amount,
1949 ast_kle.oec asset_oec,
1950 ast_kle.capital_amount asset_capital_amount,
1951 ast_kle.residual_value residual_value,
1952 subb.subsidy_calc_basis subsidy_calc_basis,
1953 subb.amount subsidy_setup_amount,
1954 subb.name subsidy_name,
1955 subb.percent subsidy_setup_percent,
1956 subb.formula_id formula_id,
1957 subb.rate_points rate_points,
1958 subb.currency_code subsidy_setup_currency,
1959 sub_cle.currency_code contract_currency,
1960 --Bug# 3313802 :
1961 subb.maximum_financed_amount maximum_financed_amount,
1962 subb.maximum_subsidy_amount maximum_subsidy_amount
1963 from okc_k_lines_b sub_cle,
1964 okl_k_lines sub_kle,
1965 okl_k_lines ast_kle,
1966 okl_subsidies_b subb
1967 where subb.id = sub_kle.subsidy_id
1968 and ast_kle.id = sub_cle.cle_id
1969 and sub_kle.id = sub_cle.id
1970 and sub_cle.id = p_subsidy_cle_id
1971 and sub_cle.sts_code <> 'ABANDONED';
1972
1973 l_sub_calc_rec l_sub_calc_csr%ROWTYPE;
1974 l_subsidy_amount Number;
1975 l_finance_amount Number; -- Added by veramach for Bug#6622178
1976
1977 l_converted_subsidy_amount Number;
1978 l_conv_max_fin_amount Number;
1979 l_conv_max_sub_amount Number;
1980
1981 --Cursor to get formula name
1982 cursor l_fmla_csr (p_formula_id in NUMBER) is
1983 Select name
1984 from okl_formulae_b
1985 where id = p_formula_id;
1986
1987 l_formula_name okl_formulae_b.name%TYPE;
1988
1989 l_oec number;
1990
1991 -----------------------
1992 --Bug# 3394233
1993 /*-----------------------
1994 --cursor to get any maximum financed amount OR maximum subsidy restrictions defined for
1995 --inventory item
1996 --cursor l_sub_limits_csr(p_chr_id in number,p_asset_cle_id in number, p_subsidy_id in number) is
1997 --select suc.maximum_subsidy_amount,
1998 --suc.maximum_financed_amount
1999 --from okl_subsidy_criteria suc,
2000 --okc_k_items cim,
2001 --okc_k_lines_b cleb, --modelline
2002 --okc_line_styles_b lseb
2003 --where suc.subsidy_id = p_subsidy_id
2004 --and to_char(suc.organization_id) = cim.object1_id1
2005 --and to_char(suc.inventory_item_id) = cim.object1_id2
2006 --and cim.jtot_object1_code = 'OKX_SYSITEM'
2007 --and cim.dnz_chr_id = cleb.dnz_chr_id
2008 --and cim.cle_id = cleb.id
2009 --and cleb.cle_id = p_asset_cle_id
2010 --and lseb.id = cleb.lse_id
2011 --and lseb.lty_code = 'ITEM'
2012 --and cleb.dnz_chr_id = p_chr_id;
2013 -----------------------*/
2014 --Bug# 3394233
2015 -----------------------
2016
2017
2018 l_max_subsidy_amount number;
2019 l_max_financed_amount number;
2020
2021 --cursor to find out calculation basis meaning for errors
2022 cursor l_flkup_csr (p_lookup_code in varchar2,
2023 p_lookup_type in varchar2) is
2024 select flkup.meaning
2025 from fnd_lookups flkup
2026 where flkup.lookup_type = p_lookup_type
2027 and flkup.lookup_code = p_lookup_code;
2028
2029 l_flkup_meaning fnd_lookups.meaning%TYPE;
2030
2031
2032 begin
2033 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2034 -- Call start_activity to create savepoint, check compatibility
2035 -- and initialize message list
2036 x_return_status := OKL_API.START_ACTIVITY (
2037 l_api_name
2038 ,p_init_msg_list
2039 ,'_PVT'
2040 ,x_return_status);
2041 -- Check if activity started successfully
2042 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2043 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2044 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2045 RAISE OKL_API.G_EXCEPTION_ERROR;
2046 END IF;
2047
2048 ---------------------------------------
2049 --start of input parameter validations
2050 ---------------------------------------
2051 --1.validate p_subsidy_cle_id
2052 If (p_subsidy_cle_id is NULL) or (p_subsidy_cle_id = OKL_API.G_MISS_NUM) then
2053 OKL_API.set_message(
2054 p_app_name => G_APP_NAME,
2055 p_msg_name => G_API_MISSING_PARAMETER,
2056 p_token1 => G_API_NAME_TOKEN,
2057 p_token1_value => l_api_name,
2058 p_token2 => G_MISSING_PARAM_TOKEN,
2059 p_token2_value => 'p_subsidy_cle_id');
2060 x_return_status := OKL_API.G_RET_STS_ERROR;
2061 Raise OKL_API.G_EXCEPTION_ERROR;
2062 Elsif (p_subsidy_cle_id is not NULL) and (p_subsidy_cle_id <> OKL_API.G_MISS_NUM) then
2063 validate_cle_id(p_cle_id => p_subsidy_cle_id,
2064 p_lty_code => 'SUBSIDY',
2065 x_return_status => x_return_status);
2066 IF x_return_status = OKL_API.G_RET_STS_ERROR then
2067 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_subsidy_cle_id');
2068 Raise OKL_API.G_EXCEPTION_ERROR;
2069 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
2070 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2071 End If;
2072 End If;
2073 ------------------------------------
2074 --end of input variable validations
2075 ------------------------------------
2076
2077
2078 Open l_sub_calc_csr(p_subsidy_cle_id => p_subsidy_cle_id);
2079 Fetch l_sub_calc_csr into l_sub_calc_rec;
2080 If l_sub_calc_csr%NOTFOUND then
2081 --raise error
2082 OKL_API.set_message(p_app_name => G_APP_NAME,
2083 p_msg_name => G_MISSING_SUB_CALC_BASIS
2084 );
2085 x_return_status := OKL_API.G_RET_STS_ERROR;
2086 -- halt validation as it is a required setup
2087 RAISE OKL_API.G_EXCEPTION_ERROR;
2088 End If;
2089 Close l_sub_calc_csr;
2090
2091 --always calculate do not override the original calculated amount
2092 --overide amount considered in overloaded calculate_subsidy_amount API
2093 IF l_sub_calc_rec.subsidy_calc_basis is Null OR l_sub_calc_rec.subsidy_calc_basis = OKL_API.G_MISS_CHAR then
2094 --raise error
2095 OKL_API.set_message(p_app_name => G_APP_NAME,
2096 p_msg_name => G_MISSING_SUB_CALC_BASIS,
2097 p_token1 => G_SUBSIDY_NAME_TOKEN,
2098 p_token1_value => l_sub_calc_rec.subsidy_name
2099 );
2100 x_return_status := OKL_API.G_RET_STS_ERROR;
2101 -- halt validation as it is a required setup to go ahead
2102 RAISE OKL_API.G_EXCEPTION_ERROR;
2103 ElsIf l_sub_calc_rec.subsidy_calc_basis = 'FIXED' then
2104 If l_sub_calc_rec.subsidy_setup_amount is Null OR l_sub_calc_rec.subsidy_setup_amount = OKL_API.G_MISS_NUM then
2105
2106 --raise error
2107 open l_flkup_csr(p_lookup_type => 'OKL_SUBCALC_BASIS',
2108 p_lookup_code => l_sub_calc_rec.subsidy_calc_basis);
2109 fetch l_flkup_csr into l_flkup_meaning;
2110 If l_flkup_csr%NOTFOUND then
2111 l_flkup_meaning := l_sub_calc_rec.subsidy_calc_basis;
2112 End If;
2113 close l_flkup_csr;
2114
2115 OKL_API.set_message(p_app_name => G_APP_NAME,
2116 p_msg_name => G_MISSING_SUB_CALC_PARAMETER,
2117 p_token1 => G_PARAMETER_NAME_TOKEN,
2118 p_token1_value => 'Amount',
2119 p_token2 => G_CALC_BASIS_TOKEN,
2120 p_token2_value => l_flkup_meaning,
2121 p_token3 => G_SUBSIDY_NAME_TOKEN,
2122 p_token3_value => l_sub_calc_rec.subsidy_name
2123 );
2124 x_return_status := OKL_API.G_RET_STS_ERROR;
2125 -- halt validation as it is a required setup to go ahead
2126 RAISE OKL_API.G_EXCEPTION_ERROR;
2127 Else
2128 If l_sub_calc_rec.subsidy_setup_currency = l_sub_calc_rec.contract_currency then
2129 l_subsidy_amount := l_sub_calc_rec.subsidy_setup_amount;
2130 Elsif l_sub_calc_rec.subsidy_setup_currency <> l_sub_calc_rec.contract_currency then
2131 Convert_currency(p_khr_id => l_sub_calc_rec.dnz_chr_id,
2132 p_from_currency => l_sub_calc_rec.subsidy_setup_currency,
2133 p_transaction_date => l_sub_calc_rec.subsidy_start_date,
2134 p_amount => l_sub_calc_rec.subsidy_setup_amount,
2135 x_converted_amount => l_converted_subsidy_amount,
2136 x_return_status => x_return_status);
2137
2138 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2139 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2140 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2141 RAISE OKL_API.G_EXCEPTION_ERROR;
2142 END IF;
2143 l_subsidy_amount := l_converted_subsidy_amount;
2144 End If;
2145 End if;
2146 ElsIf l_sub_calc_rec.subsidy_calc_basis = 'ASSETCOST' then
2147 If l_sub_calc_rec.subsidy_setup_percent is Null OR l_sub_calc_rec.subsidy_setup_percent = OKL_API.G_MISS_NUM then
2148
2149 --raise error
2150 open l_flkup_csr(p_lookup_type => 'OKL_SUBCALC_BASIS',
2151 p_lookup_code => l_sub_calc_rec.subsidy_calc_basis);
2152 fetch l_flkup_csr into l_flkup_meaning;
2153 If l_flkup_csr%NOTFOUND then
2154 l_flkup_meaning := l_sub_calc_rec.subsidy_calc_basis;
2155 End If;
2156 close l_flkup_csr;
2157
2158
2159 OKL_API.set_message(p_app_name => G_APP_NAME,
2160 p_msg_name => G_MISSING_SUB_CALC_PARAMETER,
2161 p_token1 => G_PARAMETER_NAME_TOKEN,
2162 p_token1_value => 'Percent',
2163 p_token2 => G_CALC_BASIS_TOKEN,
2164 p_token2_value => l_flkup_meaning,
2165 p_token3 => G_SUBSIDY_NAME_TOKEN,
2166 p_token3_value => l_sub_calc_rec.subsidy_name
2167 );
2168 x_return_status := OKL_API.G_RET_STS_ERROR;
2169 -- halt validation as it is a required setup to go ahead
2170 RAISE OKL_API.G_EXCEPTION_ERROR;
2171 Else
2172 --get original equipment cost from formula
2173 OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
2174 p_init_msg_list => p_init_msg_list,
2175 x_return_status => x_return_status,
2176 x_msg_count => x_msg_count,
2177 x_msg_data => x_msg_data,
2178 p_formula_name => G_FORMULA_OEC,
2179 p_contract_id => l_sub_calc_rec.dnz_chr_id,
2180 p_line_id => l_sub_calc_rec.asset_cle_id,
2181 x_value => l_oec);
2182
2183 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2184 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2185 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2186 RAISE OKL_API.G_EXCEPTION_ERROR;
2187 END IF;
2188
2189 --Bug# 3313802 : maximum financed amount moved from subsidy criteria to
2190 -- main subsidy setup
2191 /*-----------------------------------------------------------------------
2192 --check if there is any maximum financed amount restriction on this subsidy
2193 --open l_sub_limits_csr(p_chr_id => l_sub_calc_rec.dnz_chr_id,
2194 --p_asset_cle_id => l_sub_calc_rec.asset_cle_id,
2195 --p_subsidy_id => l_sub_calc_rec.subsidy_id);
2196 --fetch l_sub_limits_csr into l_max_subsidy_amount,
2197 --l_max_financed_amount;
2198 --If l_sub_limits_csr%NOTFOUND then
2199 --null;
2200 --Else
2201 -------------------------------------------------------------------------*/
2202
2203 l_max_financed_amount := l_sub_calc_rec.maximum_financed_amount;
2204
2205 IF l_sub_calc_rec.subsidy_setup_currency = l_sub_calc_rec.contract_currency then
2206 l_conv_max_fin_amount := l_max_financed_amount;
2207 ELSIF l_sub_calc_rec.subsidy_setup_currency <> l_sub_calc_rec.contract_currency then
2208 Convert_currency(p_khr_id => l_sub_calc_rec.dnz_chr_id,
2209 p_from_currency => l_sub_calc_rec.subsidy_setup_currency,
2210 p_transaction_date => l_sub_calc_rec.subsidy_start_date,
2211 p_amount => l_max_financed_amount,
2212 x_converted_amount => l_conv_max_fin_amount,
2213 x_return_status => x_return_status);
2214
2215 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2216 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2217 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2218 RAISE OKL_API.G_EXCEPTION_ERROR;
2219 END IF;
2220 End If;
2221
2222 If (l_oec > l_conv_max_fin_amount) then
2223 l_oec := l_conv_max_fin_amount;
2224 End If;
2225 End If;
2226
2227 --End If;
2228 --Close l_sub_limits_csr;
2229
2230 l_subsidy_amount := l_oec * (l_sub_calc_rec.subsidy_setup_percent/100);
2231
2232 ElsIf l_sub_calc_rec.subsidy_calc_basis = 'FORMULA' then
2233 If l_sub_calc_rec.formula_id is Null OR l_sub_calc_rec.formula_id = OKL_API.G_MISS_NUM then
2234
2235 --raise error
2236 open l_flkup_csr(p_lookup_type => 'OKL_SUBCALC_BASIS',
2237 p_lookup_code => l_sub_calc_rec.subsidy_calc_basis);
2238 fetch l_flkup_csr into l_flkup_meaning;
2239 If l_flkup_csr%NOTFOUND then
2240 l_flkup_meaning := l_sub_calc_rec.subsidy_calc_basis;
2241 End If;
2242 close l_flkup_csr;
2243
2244
2245 OKL_API.set_message(p_app_name => G_APP_NAME,
2246 p_msg_name => G_MISSING_SUB_CALC_PARAMETER,
2247 p_token1 => G_PARAMETER_NAME_TOKEN,
2248 p_token1_value => 'Formula Name',
2249 p_token2 => G_CALC_BASIS_TOKEN,
2250 p_token2_value => l_flkup_meaning,
2251 p_token3 => G_SUBSIDY_NAME_TOKEN,
2252 p_token3_value => l_sub_calc_rec.subsidy_name
2253 );
2254 x_return_status := OKL_API.G_RET_STS_ERROR;
2255 -- halt validation as it is a required setup to go ahead
2256 RAISE OKL_API.G_EXCEPTION_ERROR;
2257 Else
2258 Open l_fmla_csr (p_formula_id => l_sub_calc_rec.formula_id);
2259 Fetch l_fmla_csr into l_formula_name;
2260 If l_fmla_csr%NOTFOUND then
2261 --raise error
2262 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'Subsidy Calculation Formula');
2263 x_return_status := OKL_API.G_RET_STS_ERROR;
2264 -- halt validation as it is a required setup to go ahead
2265 RAISE OKL_API.G_EXCEPTION_ERROR;
2266 End If;
2267 Close l_fmla_csr;
2268
2269 --Execte Formula
2270 OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
2271 p_init_msg_list => p_init_msg_list,
2272 x_return_status => x_return_status,
2273 x_msg_count => x_msg_count,
2274 x_msg_data => x_msg_data,
2275 p_formula_name => l_formula_name,
2276 p_contract_id => l_sub_calc_rec.dnz_chr_id,
2277 --Bug# 3487167
2278 p_line_id => l_sub_calc_rec.asset_cle_id,
2279 --p_line_id => l_sub_calc_rec.subsidy_cle_id,
2280 x_value => l_subsidy_amount);
2281 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
2282 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2283 Elsif (x_return_status = OKL_API.G_RET_STS_ERROR) then
2284 raise OKL_API.G_EXCEPTION_ERROR;
2285 End If;
2286
2287 End If;
2288 Elsif l_sub_calc_rec.subsidy_calc_basis = 'RATE' then
2289 If l_sub_calc_rec.rate_points is Null OR l_sub_calc_rec.rate_points = OKL_API.G_MISS_NUM then
2290 --raise error
2291 open l_flkup_csr(p_lookup_type => 'OKL_SUBCALC_BASIS',
2292 p_lookup_code => l_sub_calc_rec.subsidy_calc_basis);
2293 fetch l_flkup_csr into l_flkup_meaning;
2294 If l_flkup_csr%NOTFOUND then
2295 l_flkup_meaning := l_sub_calc_rec.subsidy_calc_basis;
2296 End If;
2297 close l_flkup_csr;
2298
2299 OKL_API.set_message(p_app_name => G_APP_NAME,
2300 p_msg_name => G_MISSING_SUB_CALC_PARAMETER,
2301 p_token1 => G_PARAMETER_NAME_TOKEN,
2302 p_token1_value => 'Rate Points',
2303 p_token2 => G_CALC_BASIS_TOKEN,
2304 p_token2_value => l_flkup_meaning,
2305 p_token3 => G_SUBSIDY_NAME_TOKEN,
2306 p_token3_value => l_sub_calc_rec.subsidy_name
2307 );
2308 x_return_status := OKL_API.G_RET_STS_ERROR;
2309 -- halt validation as it is a required setup to go ahead
2310 RAISE OKL_API.G_EXCEPTION_ERROR;
2311 Else
2312 calc_rate_points_amount(p_api_version => p_api_version,
2313 p_init_msg_list => p_init_msg_list,
2314 x_return_status => x_return_status,
2315 x_msg_count => x_msg_count,
2316 x_msg_data => x_msg_data,
2317 p_rate_points => l_sub_calc_rec.rate_points,
2318 p_chr_id => l_sub_calc_rec.dnz_chr_id,
2319 p_asset_cle_id => l_sub_calc_rec.asset_cle_id,
2320 x_subsidy_amount => l_subsidy_amount);
2321
2322 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
2323 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2324 Elsif (x_return_status = OKL_API.G_RET_STS_ERROR) then
2325 raise OKL_API.G_EXCEPTION_ERROR;
2326 End If;
2327 End If;
2328
2329 -------------------------------------------------------------
2330 -- Added by veramach for Bug#6622178
2331 -- Calculating subsidy amount on the basis of Financed Amount
2332 -------------------------------------------------------------
2333 ELSIF l_sub_calc_rec.subsidy_calc_basis = 'FINANCED_AMOUNT' THEN
2334 IF l_sub_calc_rec.subsidy_setup_percent IS NULL OR l_sub_calc_rec.subsidy_setup_percent = OKL_API.G_MISS_NUM THEN
2335 --raise error
2336 OPEN l_flkup_csr(p_lookup_type => 'OKL_SUBCALC_BASIS',
2337 p_lookup_code => l_sub_calc_rec.subsidy_calc_basis);
2338 FETCH l_flkup_csr INTO l_flkup_meaning;
2339 IF l_flkup_csr%NOTFOUND THEN
2340 l_flkup_meaning := l_sub_calc_rec.subsidy_calc_basis;
2341 END IF;
2342 CLOSE l_flkup_csr;
2343 OKL_API.set_message(p_app_name => G_APP_NAME,
2344 p_msg_name => G_MISSING_SUB_CALC_PARAMETER,
2345 p_token1 => G_PARAMETER_NAME_TOKEN,
2346 p_token1_value => 'Percent',
2347 p_token2 => G_CALC_BASIS_TOKEN,
2348 p_token2_value => l_flkup_meaning,
2349 p_token3 => G_SUBSIDY_NAME_TOKEN,
2350 p_token3_value => l_sub_calc_rec.subsidy_name
2351 );
2352 x_return_status := OKL_API.G_RET_STS_ERROR;
2353 --halt validation as it is a required setup to go ahead
2354 RAISE OKL_API.G_EXCEPTION_ERROR;
2355 ELSE
2356 --get original financed amount from formula
2357 OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
2358 p_init_msg_list => p_init_msg_list,
2359 x_return_status => x_return_status,
2360 x_msg_count => x_msg_count,
2361 x_msg_data => x_msg_data,
2362 p_formula_name => 'FRONT_END_FINANCED_AMOUNT',
2363 p_contract_id => l_sub_calc_rec.dnz_chr_id,
2364 p_line_id => l_sub_calc_rec.asset_cle_id,
2365 x_value => l_finance_amount);
2366 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2367 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2368 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2369 RAISE OKL_API.G_EXCEPTION_ERROR;
2370 END IF;
2371
2372 l_max_financed_amount := l_sub_calc_rec.maximum_financed_amount;
2373
2374 IF l_sub_calc_rec.subsidy_setup_currency = l_sub_calc_rec.contract_currency then
2375 l_conv_max_fin_amount := l_max_financed_amount;
2376 ELSIF l_sub_calc_rec.subsidy_setup_currency <> l_sub_calc_rec.contract_currency then
2377 Convert_currency(p_khr_id => l_sub_calc_rec.dnz_chr_id,
2378 p_from_currency => l_sub_calc_rec.subsidy_setup_currency,
2379 p_transaction_date => l_sub_calc_rec.subsidy_start_date,
2380 p_amount => l_max_financed_amount,
2381 x_converted_amount => l_conv_max_fin_amount,
2382 x_return_status => x_return_status);
2383
2384 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2385 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2386 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2387 RAISE OKL_API.G_EXCEPTION_ERROR;
2388 END IF;
2389 END IF;
2390
2391 IF (l_finance_amount > l_conv_max_fin_amount) THEN
2392 l_finance_amount := l_conv_max_fin_amount;
2393 END IF;
2394 END IF;
2395 l_subsidy_amount := l_finance_amount * (l_sub_calc_rec.subsidy_setup_percent/100);
2396 -- End by veramach for Bug#6622178
2397 Else
2398 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'Subsidy Calculation Basis');
2399 x_return_status := OKL_API.G_RET_STS_ERROR;
2400 raise OKL_API.G_EXCEPTION_ERROR;
2401 End If;
2402
2403 --Bug# 3313802 : Maximum subsidy amount moved from subsidy
2404 /*--------------------------------------------------------------------
2405 --check for limits on subsidy amount for this inventory item
2406 --open l_sub_limits_csr(p_chr_id => l_sub_calc_rec.dnz_chr_id,
2407 --p_asset_cle_id => l_sub_calc_rec.asset_cle_id,
2408 --p_subsidy_id => l_sub_calc_rec.subsidy_id);
2409 --fetch l_sub_limits_csr into l_max_subsidy_amount,
2410 --l_max_financed_amount;
2411 --If l_sub_limits_csr%NOTFOUND then
2412 --null;
2413 --Else
2414 --------------------------------------------------------------------------*/
2415 l_max_subsidy_amount := l_sub_calc_rec.maximum_subsidy_amount;
2416 IF l_sub_calc_rec.subsidy_setup_currency = l_sub_calc_rec.contract_currency then
2417 l_conv_max_sub_amount := l_max_subsidy_amount;
2418 ELSIF l_sub_calc_rec.subsidy_setup_currency <> l_sub_calc_rec.contract_currency then
2419 Convert_currency(p_khr_id => l_sub_calc_rec.dnz_chr_id,
2420 p_from_currency => l_sub_calc_rec.subsidy_setup_currency,
2421 p_transaction_date => l_sub_calc_rec.subsidy_start_date,
2422 p_amount => l_max_subsidy_amount,
2423 x_converted_amount => l_conv_max_sub_amount,
2424 x_return_status => x_return_status);
2425
2426 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2427 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2428 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2429 RAISE OKL_API.G_EXCEPTION_ERROR;
2430 END IF;
2431 END IF;
2432 If (l_subsidy_amount > l_conv_max_sub_amount) then
2433 l_subsidy_amount := l_conv_max_sub_amount;
2434 End If;
2435
2436 --End If;
2437 --Close l_sub_limits_csr;
2438
2439 x_subsidy_amount := l_subsidy_amount;
2440 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
2441
2442 EXCEPTION
2443 WHEN OKL_API.G_EXCEPTION_ERROR THEN
2444 If l_sub_calc_csr%ISOPEN then
2445 CLOSE l_sub_calc_csr;
2446 End If;
2447 If l_fmla_csr%ISOPEN then
2448 CLOSE l_fmla_csr;
2449 End If;
2450 -----------------------
2451 --Bug# 3394233
2452 /*--------------------------
2453 --If l_sub_limits_csr%ISOPEN then
2454 --CLOSE l_sub_limits_csr;
2455 --End If;
2456 ---------------------------*/
2457 --Bug# 3394233
2458 -----------------------
2459 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2460 l_api_name,
2461 G_PKG_NAME,
2462 'OKL_API.G_RET_STS_ERROR',
2463 x_msg_count,
2464 x_msg_data,
2465 '_PVT');
2466 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2467 If l_sub_calc_csr%ISOPEN then
2468 CLOSE l_sub_calc_csr;
2469 End If;
2470 If l_fmla_csr%ISOPEN then
2471 CLOSE l_fmla_csr;
2472 End If;
2473 -----------------------
2474 --Bug# 3394233
2475 /*--------------------------
2476 --If l_sub_limits_csr%ISOPEN then
2477 --CLOSE l_sub_limits_csr;
2478 --End If;
2479 ---------------------------*/
2480 --Bug# 3394233
2481 -----------------------
2482 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2483 l_api_name,
2484 G_PKG_NAME,
2485 'OKL_API.G_RET_STS_UNEXP_ERROR',
2486 x_msg_count,
2487 x_msg_data,
2488 '_PVT');
2489 WHEN OTHERS THEN
2490 If l_sub_calc_csr%ISOPEN then
2491 CLOSE l_sub_calc_csr;
2492 End If;
2493 If l_fmla_csr%ISOPEN then
2494 CLOSE l_fmla_csr;
2495 End If;
2496 -----------------------
2497 --Bug# 3394233
2498 /*--------------------------
2499 --If l_sub_limits_csr%ISOPEN then
2500 --CLOSE l_sub_limits_csr;
2501 --End If;
2502 ---------------------------*/
2503 --Bug# 3394233
2504 -----------------------
2505 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2506 l_api_name,
2507 G_PKG_NAME,
2508 'OTHERS',
2509 x_msg_count,
2510 x_msg_data,
2511 '_PVT');
2512 End calculate_subsidy_amount;
2513 --------------------------------------------------------------------------------
2514 --Name : calculate_subsidy_amount (overloaded)
2515 --Description : API to calculate subsidy amount based on subsidy calculation
2516 -- criteria for a subsidy line. If subsidy_override amount is
2517 -- specified and overloaded parameter p_override_yn is
2518 -- OKL_API.G_TRUE then subsidy_amount = subsidy_override_amount
2519 -- This overloaded form will be called to re-calculate total of
2520 -- subsidies at asset or contract level at the time of QA check
2521 -- or any other time where total calculated is to be copared
2522 -- against total stored amount of subsidies
2523 -- PARAMETERS : IN - p_subsidy_cle_id : subsidy line id
2524 -- p_override_yn : OKL_API.G_TRUE/OKL_API.G_FALSE (will
2525 -- determine whether subsidy override
2526 -- amount is to be taken into account
2527 -- OUT - x_subsidy_amount : subsidy amount
2528 --------------------------------------------------------------------------------
2529 PROCEDURE calculate_subsidy_amount(
2530 p_api_version IN NUMBER,
2531 p_init_msg_list IN VARCHAR2,
2532 x_return_status OUT NOCOPY VARCHAR2,
2533 x_msg_count OUT NOCOPY NUMBER,
2534 x_msg_data OUT NOCOPY VARCHAR2,
2535 p_subsidy_cle_id IN NUMBER,
2536 p_override_yn IN VARCHAR2,
2537 x_subsidy_amount OUT NOCOPY NUMBER) is
2538
2539 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
2540 l_api_name CONSTANT varchar2(30) := 'CALCULATE_SUBSIDY_AMOUNT';
2541 l_api_version CONSTANT NUMBER := 1.0;
2542
2543 --------------------------------------------------
2544 --cursor to fetch subsidy override amount
2545 --------------------------------------------------
2546 cursor l_kle_csr (p_cle_id in number) is
2547 select kle.subsidy_override_amount
2548 from okl_k_lines kle,
2549 okc_k_lines_b cleb
2550 where kle.id = cleb.id
2551 and cleb.sts_code <> 'ABANDONED'
2552 and cleb.id = p_cle_id;
2553
2554 l_subsidy_override_amount okl_k_lines.subsidy_override_amount%TYPE default NULL;
2555 l_subsidy_amount number;
2556
2557 begin
2558 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2559 -- Call start_activity to create savepoint, check compatibility
2560 -- and initialize message list
2561 x_return_status := OKL_API.START_ACTIVITY (
2562 l_api_name
2563 ,p_init_msg_list
2564 ,'_PVT'
2565 ,x_return_status);
2566 -- Check if activity started successfully
2567 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2568 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2569 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2570 RAISE OKL_API.G_EXCEPTION_ERROR;
2571 END IF;
2572
2573 --------------------------------------
2574 --start of input parameter validations
2575 --------------------------------------
2576 --1.validate p_subsidy_cle_id
2577 If (p_subsidy_cle_id is NULL) or (p_subsidy_cle_id = OKL_API.G_MISS_NUM) then
2578 OKL_API.set_message(
2579 p_app_name => G_APP_NAME,
2580 p_msg_name => G_API_MISSING_PARAMETER,
2581 p_token1 => G_API_NAME_TOKEN,
2582 p_token1_value => l_api_name,
2583 p_token2 => G_MISSING_PARAM_TOKEN,
2584 p_token2_value => 'p_subsidy_cle_id');
2585 x_return_status := OKL_API.G_RET_STS_ERROR;
2586 Raise OKL_API.G_EXCEPTION_ERROR;
2587 Elsif (p_subsidy_cle_id is not NULL) and (p_subsidy_cle_id <> OKL_API.G_MISS_NUM) then
2588 validate_cle_id(p_cle_id => p_subsidy_cle_id,
2589 p_lty_code => 'SUBSIDY',
2590 x_return_status => x_return_status);
2591 IF x_return_status = OKL_API.G_RET_STS_ERROR then
2592 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_subsidy_cle_id');
2593 Raise OKL_API.G_EXCEPTION_ERROR;
2594 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
2595 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2596 End If;
2597 End If;
2598
2599 --2.validate p_override_yn
2600 If p_override_yn is NULL Then
2601 OKL_API.set_message(
2602 p_app_name => G_APP_NAME,
2603 p_msg_name => G_API_MISSING_PARAMETER,
2604 p_token1 => G_API_NAME_TOKEN,
2605 p_token1_value => l_api_name,
2606 p_token2 => G_MISSING_PARAM_TOKEN,
2607 p_token2_value => 'p_override_yn');
2608 x_return_status := OKL_API.G_RET_STS_ERROR;
2609 Raise OKL_API.G_EXCEPTION_ERROR;
2610
2611 ElsIf (p_override_yn is Not Null) then
2612 If p_override_yn not in (OKL_API.G_TRUE,OKL_API.G_FALSE) then
2613 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_override_yn');
2614 Raise OKL_API.G_EXCEPTION_ERROR;
2615 End If;
2616 End If;
2617 -----------------------------------
2618 --end of input variable validations
2619 -----------------------------------
2620
2621 If p_override_yn = OKL_API.G_TRUE then
2622 open l_kle_csr (p_cle_id => p_subsidy_cle_id);
2623 fetch l_kle_csr into l_subsidy_override_amount;
2624 if l_kle_csr%NOTFOUND then
2625 Null;
2626 End If;
2627 close l_kle_csr;
2628 End If;
2629
2630 If (l_subsidy_override_amount is NOT NULL) and
2631 (l_subsidy_override_amount <> OKL_API.G_MISS_NUM) and
2632 (p_override_yn = OKL_API.G_TRUE) then
2633
2634 l_subsidy_amount := l_subsidy_override_amount;
2635
2636 Elsif (l_subsidy_override_amount is NULL) OR
2637 (l_subsidy_override_amount = OKL_API.G_MISS_NUM) OR
2638 (p_override_yn = OKL_API.G_FALSE) then
2639
2640 calculate_subsidy_amount(
2641 p_api_version => p_api_version,
2642 p_init_msg_list => p_init_msg_list,
2643 x_return_status => x_return_status,
2644 x_msg_count => x_msg_count,
2645 x_msg_data => x_msg_data,
2646 p_subsidy_cle_id => p_subsidy_cle_id,
2647 x_subsidy_amount => l_subsidy_amount);
2648
2649 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2650 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2651 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2652 RAISE OKL_API.G_EXCEPTION_ERROR;
2653 END IF;
2654
2655 End If;
2656
2657 x_subsidy_amount := l_subsidy_amount;
2658 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
2659
2660 EXCEPTION
2661 WHEN OKL_API.G_EXCEPTION_ERROR THEN
2662 If l_kle_csr%ISOPEN then
2663 close l_kle_csr;
2664 End If;
2665 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2666 l_api_name,
2667 G_PKG_NAME,
2668 'OKL_API.G_RET_STS_ERROR',
2669 x_msg_count,
2670 x_msg_data,
2671 '_PVT');
2672 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2673 If l_kle_csr%ISOPEN then
2674 close l_kle_csr;
2675 End If;
2676 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2677 l_api_name,
2678 G_PKG_NAME,
2679 'OKL_API.G_RET_STS_UNEXP_ERROR',
2680 x_msg_count,
2681 x_msg_data,
2682 '_PVT');
2683 WHEN OTHERS THEN
2684 If l_kle_csr%ISOPEN then
2685 close l_kle_csr;
2686 End If;
2687 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2688 l_api_name,
2689 G_PKG_NAME,
2690 'OTHERS',
2691 x_msg_count,
2692 x_msg_data,
2693 '_PVT');
2694 END calculate_subsidy_amount;
2695 --------------------------------------------------------------------------------
2696 --Name : get_subsidy_amount
2697 --Description : API to get subsidy amount based on subsidy calculation
2698 -- criteria for a subsidy line
2699 -- PARAMETERS : IN - p_subsidy_cle_id : subsidy line id
2700 -- OUT - x_subsidy_amount: subsidy amount
2701 --------------------------------------------------------------------------------
2702 PROCEDURE get_subsidy_amount(
2703 p_api_version IN NUMBER,
2704 p_init_msg_list IN VARCHAR2,
2705 x_return_status OUT NOCOPY VARCHAR2,
2706 x_msg_count OUT NOCOPY NUMBER,
2707 x_msg_data OUT NOCOPY VARCHAR2,
2708 p_subsidy_cle_id IN NUMBER,
2709 x_subsidy_amount OUT NOCOPY NUMBER) is
2710
2711 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
2712 l_api_name CONSTANT varchar2(30) := 'GET_SUBSIDY_AMOUNT';
2713 l_api_version CONSTANT NUMBER := 1.0;
2714
2715 l_subsidy_amount Number;
2716
2717 --cursor to get subsidy amount
2718 --should read override amount if it is specified, else amount
2719 cursor l_cleb_csr (p_cle_id in number) is
2720 select nvl(kle.subsidy_override_amount,nvl(kle.amount,0))
2721 from okl_k_lines kle,
2722 okc_k_lines_b cleb
2723 where kle.id = cleb.id
2724 and cleb.id = p_subsidy_cle_id
2725 and cleb.sts_code <> 'ABANDONED';
2726
2727
2728
2729 Begin
2730 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2731
2732 -----------------------------------------
2733 --start of input parameter validations
2734 -----------------------------------------
2735 --1.validate p_subsidy_cle_id
2736 If (p_subsidy_cle_id is NULL) or (p_subsidy_cle_id = OKL_API.G_MISS_NUM) then
2737 OKL_API.set_message(
2738 p_app_name => G_APP_NAME,
2739 p_msg_name => G_API_MISSING_PARAMETER,
2740 p_token1 => G_API_NAME_TOKEN,
2741 p_token1_value => l_api_name,
2742 p_token2 => G_MISSING_PARAM_TOKEN,
2743 p_token2_value => 'p_subsidy_cle_id');
2744 x_return_status := OKL_API.G_RET_STS_ERROR;
2745 Raise OKL_API.G_EXCEPTION_ERROR;
2746 Elsif (p_subsidy_cle_id is not NULL) and (p_subsidy_cle_id <> OKL_API.G_MISS_NUM) then
2747 validate_cle_id(p_cle_id => p_subsidy_cle_id,
2748 p_lty_code => 'SUBSIDY',
2749 x_return_status => x_return_status);
2750 IF x_return_status = OKL_API.G_RET_STS_ERROR then
2751 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_subsidy_cle_id');
2752 Raise OKL_API.G_EXCEPTION_ERROR;
2753 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
2754 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2755 End If;
2756 End If;
2757 -------------------------------------
2758 --end of input parameter validations
2759 -------------------------------------
2760
2761
2762 l_subsidy_amount := 0;
2763 -----------------------------------------------
2764 -- fetch the subsidy amount from subsidy line
2765 -----------------------------------------------
2766 Open l_cleb_csr (p_cle_id => p_subsidy_cle_id);
2767 fetch l_cleb_csr into l_subsidy_amount;
2768 If l_cleb_csr%NOTFOUND then
2769 null;
2770 End If;
2771 Close l_cleb_csr;
2772
2773 x_subsidy_amount := l_subsidy_amount;
2774
2775 EXCEPTION
2776 WHEN OKL_API.G_EXCEPTION_ERROR THEN
2777 If l_cleb_csr%ISOPEN then
2778 CLOSE l_cleb_csr;
2779 End If;
2780 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2781 l_api_name,
2782 G_PKG_NAME,
2783 'OKL_API.G_RET_STS_ERROR',
2784 x_msg_count,
2785 x_msg_data,
2786 '_PVT');
2787 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2788 If l_cleb_csr%ISOPEN then
2789 CLOSE l_cleb_csr;
2790 End If;
2791 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2792 l_api_name,
2793 G_PKG_NAME,
2794 'OKL_API.G_RET_STS_UNEXP_ERROR',
2795 x_msg_count,
2796 x_msg_data,
2797 '_PVT');
2798 WHEN OTHERS THEN
2799 If l_cleb_csr%ISOPEN then
2800 CLOSE l_cleb_csr;
2801 End If;
2802 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2803 l_api_name,
2804 G_PKG_NAME,
2805 'OTHERS',
2806 x_msg_count,
2807 x_msg_data,
2808 '_PVT');
2809 End get_subsidy_amount;
2810 --------------------------------------------------------------------------------
2811 --Name : get_subsidy_amount
2812 --Description : API to get subsidy amount along with other details from the
2813 -- subsidy line
2814 -- PARAMETERS : IN - p_subsidy_cle_id : subsidy line id
2815 -- OUT - x_asbv_rec : subsidy amount with details of vendor, pay to
2816 -- details etc (AM may need this)
2817 --------------------------------------------------------------------------------
2818 PROCEDURE get_subsidy_amount(
2819 p_api_version IN NUMBER,
2820 p_init_msg_list IN VARCHAR2,
2821 x_return_status OUT NOCOPY VARCHAR2,
2822 x_msg_count OUT NOCOPY NUMBER,
2823 x_msg_data OUT NOCOPY VARCHAR2,
2824 p_subsidy_cle_id IN NUMBER,
2825 x_asbv_rec OUT NOCOPY asbv_rec_type) is
2826
2827
2828 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
2829 l_api_name CONSTANT varchar2(30) := 'GET_SUBSIDY_AMOUNT';
2830 l_api_version CONSTANT NUMBER := 1.0;
2831
2832 l_asbv_rec asbv_rec_type;
2833 l_subsidy_amount number;
2834
2835 --Cursor to get other subsdiy details
2836 cursor l_sub_dtls_csr (p_subsidy_cle_id in number) is
2837 select
2838 sub_kle.subsidy_id subsidy_id
2839 ,sub_cleb.id subsidy_cle_id
2840 ,sub_clet.name name
2841 ,sub_clet.item_description description
2842 ,sub_kle.sty_id stream_type_id
2843 ,subb.accounting_method_code accounting_method_code
2844 ,subb.maximum_term maximum_term
2845 ,sub_kle.subsidy_override_amount subsidy_override_amount
2846 ,sub_cleb.dnz_chr_id dnz_chr_id
2847 ,sub_cleb.cle_id asset_cle_id
2848 ,cplb.id cpl_id
2849 ,pov.vendor_id vendor_id
2850 ,pov.vendor_name vendor_name
2851 ,ppyd.pay_site_id pay_site_id
2852 ,ppyd.payment_term_id payment_term_id
2853 ,ppyd.payment_method_code payment_method_code
2854 ,ppyd.pay_group_code pay_group_code
2855 --
2856 ,sub_cleb.start_date start_date
2857 ,sub_cleb.end_date end_date
2858 ,subb.expire_after_days expire_after_days
2859 ,subb.currency_code currency_code
2860 ,subb.exclusive_yn exclusive_yn
2861 ,subb.applicable_to_release_yn applicable_to_release_yn
2862 ,subb.recourse_yn recourse_yn
2863 ,subb.termination_refund_basis termination_refund_basis
2864 ,subb.refund_formula_id refund_formula_id
2865 ,subb.receipt_method_code receipt_method_code
2866 ,subb.customer_visible_yn customer_visible_yn
2867 from okl_subsidies_b subb,
2868 okc_k_lines_b sub_cleb,
2869 okc_k_lines_tl sub_clet,
2870 okl_k_lines sub_kle,
2871 okc_k_party_roles_b cplb,
2872 po_vendors pov,
2873 okl_party_payment_dtls ppyd
2874 where ppyd.cpl_id(+) = cplb.id --payment details may not be mandatory
2875 and ppyd.vendor_id(+) = cplb.object1_id1
2876 and to_char(pov.vendor_id) = cplb.object1_id1
2877 and cplb.object1_id2 = '#'
2878 and cplb.jtot_object1_code = 'OKX_VENDOR'
2879 and cplb.rle_code = 'OKL_VENDOR'
2880 and cplb.cle_id = sub_cleb.id
2881 and cplb.dnz_chr_id = sub_cleb.dnz_chr_id
2882 and subb.id = sub_kle.subsidy_id
2883 and sub_kle.id = sub_cleb.id
2884 and sub_clet.id = sub_cleb.id
2885 and sub_clet.language = userenv('LANG')
2886 and sub_cleb.id = p_subsidy_cle_id;
2887
2888 l_sub_dtls_rec l_sub_dtls_csr%ROWTYPE;
2889
2890 Begin
2891 x_return_status := OKL_API.G_RET_STS_SUCCESS;
2892
2893 ---------------------------------------
2894 --start of input parameter validations
2895 ---------------------------------------
2896 --1.validate p_subsidy_cle_id
2897 If (p_subsidy_cle_id is NULL) or (p_subsidy_cle_id = OKL_API.G_MISS_NUM) then
2898 OKL_API.set_message(
2899 p_app_name => G_APP_NAME,
2900 p_msg_name => G_API_MISSING_PARAMETER,
2901 p_token1 => G_API_NAME_TOKEN,
2902 p_token1_value => l_api_name,
2903 p_token2 => G_MISSING_PARAM_TOKEN,
2904 p_token2_value => 'p_subsidy_cle_id');
2905 x_return_status := OKL_API.G_RET_STS_ERROR;
2906 Raise OKL_API.G_EXCEPTION_ERROR;
2907 Elsif (p_subsidy_cle_id is not NULL) and (p_subsidy_cle_id <> OKL_API.G_MISS_NUM) then
2908 validate_cle_id(p_cle_id => p_subsidy_cle_id,
2909 p_lty_code => 'SUBSIDY',
2910 x_return_status => x_return_status);
2911 IF x_return_status = OKL_API.G_RET_STS_ERROR then
2912 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_subsidy_cle_id');
2913 Raise OKL_API.G_EXCEPTION_ERROR;
2914 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
2915 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2916 End If;
2917 End If;
2918 ------------------------------------------
2919 --end of input parameter validations
2920 ------------------------------------------
2921
2922
2923 ------------------------------------------------------
2924 --call api to get subsidy amount
2925 ------------------------------------------------------
2926 get_subsidy_amount(
2927 p_api_version => p_api_version,
2928 p_init_msg_list => p_init_msg_list,
2929 x_return_status => x_return_status,
2930 x_msg_count => x_msg_count,
2931 x_msg_data => x_msg_data,
2932 p_subsidy_cle_id => p_subsidy_cle_id,
2933 x_subsidy_amount => l_subsidy_amount);
2934
2935 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2936 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2937 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2938 RAISE OKL_API.G_EXCEPTION_ERROR;
2939 END IF;
2940
2941
2942 ----------------------------------------------------------------------------
2943 --fetch other details for subsidy
2944 ----------------------------------------------------------------------------
2945 Open l_sub_dtls_csr(p_subsidy_cle_id => p_subsidy_cle_id);
2946 Fetch l_sub_dtls_csr into l_sub_dtls_rec;
2947 If l_sub_dtls_csr%NOTFOUND then
2948 --need to raise error here (should have been taken care in call above)
2949 null;
2950 End If;
2951 Close l_sub_dtls_csr;
2952
2953 ----------------------------------------------------------------------------
2954 --initialize output rec
2955 ----------------------------------------------------------------------------
2956 l_asbv_rec.subsidy_id := l_sub_dtls_rec.subsidy_id;
2957 l_asbv_rec.subsidy_cle_id := l_sub_dtls_rec.subsidy_cle_id;
2958 l_asbv_rec.name := l_sub_dtls_rec.name;
2959 l_asbv_rec.description := l_sub_dtls_rec.description;
2960 l_asbv_rec.amount := l_subsidy_amount;
2961 l_asbv_rec.stream_type_id := l_sub_dtls_rec.stream_type_id;
2962 l_asbv_rec.accounting_method_code := l_sub_dtls_rec.accounting_method_code;
2963 l_asbv_rec.maximum_term := l_sub_dtls_rec.maximum_term;
2964 l_asbv_rec.subsidy_override_amount := l_sub_dtls_rec.subsidy_override_amount;
2965 l_asbv_rec.dnz_chr_id := l_sub_dtls_rec.dnz_chr_id;
2966 l_asbv_rec.asset_cle_id := l_sub_dtls_rec.asset_cle_id;
2967 l_asbv_rec.cpl_id := l_sub_dtls_rec.cpl_id;
2968 l_asbv_rec.vendor_id := l_sub_dtls_rec.vendor_id;
2969 l_asbv_rec.vendor_name := l_sub_dtls_rec.vendor_name;
2970 l_asbv_rec.pay_site_id := l_sub_dtls_rec.pay_site_id;
2971 l_asbv_rec.payment_term_id := l_sub_dtls_rec.payment_term_id;
2972 l_asbv_rec.payment_method_code := l_sub_dtls_rec.payment_method_code;
2973 l_asbv_rec.pay_group_code := l_sub_dtls_rec.pay_group_code;
2974 --
2975 l_asbv_rec.start_date := l_sub_dtls_rec.start_date;
2976 l_asbv_rec.end_date := l_sub_dtls_rec.end_date;
2977 l_asbv_rec.expire_after_days := l_sub_dtls_rec.expire_after_days;
2978 l_asbv_rec.currency_code := l_sub_dtls_rec.currency_code;
2979 l_asbv_rec.exclusive_yn := l_sub_dtls_rec.exclusive_yn;
2980 l_asbv_rec.applicable_to_release_yn := l_sub_dtls_rec.applicable_to_release_yn;
2981 l_asbv_rec.recourse_yn := l_sub_dtls_rec.recourse_yn;
2982 l_asbv_rec.termination_refund_basis := l_sub_dtls_rec.termination_refund_basis;
2983 l_asbv_rec.refund_formula_id := l_sub_dtls_rec.refund_formula_id;
2984 l_asbv_rec.receipt_method_code := l_sub_dtls_rec.receipt_method_code;
2985 l_asbv_rec.customer_visible_yn := l_sub_dtls_rec.customer_visible_yn;
2986 ----------------------------------------------------------------------------
2987
2988 x_asbv_rec := l_asbv_rec;
2989
2990 EXCEPTION
2991 WHEN OKL_API.G_EXCEPTION_ERROR THEN
2992 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2993 l_api_name,
2994 G_PKG_NAME,
2995 'OKL_API.G_RET_STS_ERROR',
2996 x_msg_count,
2997 x_msg_data,
2998 '_PVT');
2999 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3000 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3001 l_api_name,
3002 G_PKG_NAME,
3003 'OKL_API.G_RET_STS_UNEXP_ERROR',
3004 x_msg_count,
3005 x_msg_data,
3006 '_PVT');
3007 WHEN OTHERS THEN
3008 If l_sub_dtls_csr%ISOPEN then
3009 CLOSE l_sub_dtls_csr;
3010 End If;
3011 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3012 l_api_name,
3013 G_PKG_NAME,
3014 'OTHERS',
3015 x_msg_count,
3016 x_msg_data,
3017 '_PVT');
3018 End get_subsidy_amount;
3019 --------------------------------------------------------------------------------
3020 --Name : get_asset_subsidy_amount
3021 --Description : API to fetch subsidy amount an asset
3022 -- PARAMETERS : IN - p_asset_cle_id : financial asset line id, p_accounting_method(NET or AMORTIZE)
3023 -- OUT - l_subsidy_amount: subsidy amount
3024 --------------------------------------------------------------------------------
3025 PROCEDURE get_asset_subsidy_amount(
3026 p_api_version IN NUMBER,
3027 p_init_msg_list IN VARCHAR2,
3028 x_return_status OUT NOCOPY VARCHAR2,
3029 x_msg_count OUT NOCOPY NUMBER,
3030 x_msg_data OUT NOCOPY VARCHAR2,
3031 p_asset_cle_id IN NUMBER,
3032 p_accounting_method IN VARCHAR2,
3033 x_subsidy_amount OUT NOCOPY NUMBER) is
3034
3035 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
3036 l_api_name CONSTANT varchar2(30) := 'GET_ASSET_SUBSIDY';
3037 l_api_version CONSTANT NUMBER := 1.0;
3038
3039 l_subsidy_amount Number;
3040
3041 l_asset_subsidy_amount Number;
3042
3043 --cursor to fetch all the subsidies attached to financial asset
3044 cursor l_sub_csr(p_asset_cle_id in number) is
3045 select sub_cle.id
3046 from okl_subsidies_b subb,
3047 okl_k_lines sub_kle,
3048 okc_k_lines_b sub_cle,
3049 okc_line_styles_b sub_lse
3050 where subb.id = sub_kle.subsidy_id
3051 and subb.accounting_method_code = nvl(upper(p_accounting_method),subb.accounting_method_code)
3052 and sub_kle.id = sub_cle.id
3053 and sub_cle.cle_id = p_asset_cle_id
3054 and sub_cle.lse_id = sub_lse.id
3055 and sub_lse.lty_code = 'SUBSIDY'
3056 and sub_cle.sts_code <> 'ABANDONED';
3057
3058 l_subsidy_cle_id number;
3059 begin
3060 x_return_status := OKL_API.G_RET_STS_SUCCESS;
3061
3062 /*----commented this validation as it causes issues during booking
3063 --------------------------------------
3064 --start of input parameter validations
3065 --------------------------------------
3066 --1.validate p_asset_cle_id
3067 If (p_asset_cle_id is NULL) or (p_asset_cle_id = OKL_API.G_MISS_NUM) then
3068 OKL_API.set_message(
3069 p_app_name => G_APP_NAME,
3070 p_msg_name => G_API_MISSING_PARAMETER,
3071 p_token1 => G_API_NAME_TOKEN,
3072 p_token1_value => l_api_name,
3073 p_token2 => G_MISSING_PARAM_TOKEN,
3074 p_token2_value => 'p_asset_cle_id');
3075 x_return_status := OKL_API.G_RET_STS_ERROR;
3076 Raise OKL_API.G_EXCEPTION_ERROR;
3077 Elsif (p_asset_cle_id is not NULL) and (p_asset_cle_id <> OKL_API.G_MISS_NUM) then
3078 validate_cle_id(p_cle_id => p_asset_cle_id,
3079 p_lty_code => 'FREE_FORM1',
3080 x_return_status => x_return_status);
3081 IF x_return_status = OKL_API.G_RET_STS_ERROR then
3082 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_asset_cle_id');
3083 Raise OKL_API.G_EXCEPTION_ERROR;
3084 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
3085 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3086 End If;
3087 End If;
3088 --2.validate accounting method
3089 If (p_accounting_method is NOT NULL) then
3090 validate_acct_method(p_accounting_method => p_accounting_method,
3091 x_return_status => x_return_status);
3092 IF x_return_status = OKL_API.G_RET_STS_ERROR then
3093 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_accounting_method');
3094 Raise OKL_API.G_EXCEPTION_ERROR;
3095 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
3096 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3097 End If;
3098 End If;
3099 ------------------------------------
3100 --end of input parameter validations
3101 ------------------------------------
3102 ---commented this validation as this causes issues during booking------*/
3103
3104
3105
3106 l_asset_subsidy_amount := 0;
3107
3108 --------------------------------------------------------------
3109 --get all the subsidies associated to asset and get amount
3110 --------------------------------------------------------------
3111 Open l_sub_csr(p_asset_cle_id => p_asset_cle_id);
3112 Loop
3113 Fetch l_sub_csr into l_subsidy_cle_id;
3114 Exit when l_sub_csr%NOTFOUND;
3115 get_subsidy_amount(
3116 p_api_version => p_api_version,
3117 p_init_msg_list => p_init_msg_list,
3118 x_return_status => x_return_status,
3119 x_msg_count => x_msg_count,
3120 x_msg_data => x_msg_data,
3121 p_subsidy_cle_id => l_subsidy_cle_id,
3122 x_subsidy_amount => l_subsidy_amount);
3123
3124 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3125 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3126 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3127 RAISE OKL_API.G_EXCEPTION_ERROR;
3128 END IF;
3129 l_asset_subsidy_Amount := l_asset_subsidy_Amount + l_subsidy_amount;
3130 End Loop;
3131 Close l_sub_csr;
3132
3133 x_subsidy_amount := l_asset_subsidy_amount;
3134
3135 EXCEPTION
3136 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3137 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3138 l_api_name,
3139 G_PKG_NAME,
3140 'OKL_API.G_RET_STS_ERROR',
3141 x_msg_count,
3142 x_msg_data,
3143 '_PVT');
3144 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3145 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3146 l_api_name,
3147 G_PKG_NAME,
3148 'OKL_API.G_RET_STS_UNEXP_ERROR',
3149 x_msg_count,
3150 x_msg_data,
3151 '_PVT');
3152 WHEN OTHERS THEN
3153 If l_sub_csr%ISOPEN then
3154 CLOSE l_sub_csr;
3155 End If;
3156 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3157 l_api_name,
3158 G_PKG_NAME,
3159 'OTHERS',
3160 x_msg_count,
3161 x_msg_data,
3162 '_PVT');
3163
3164 End get_asset_subsidy_amount;
3165
3166 --------------------------------------------------------------------------------
3167 --Name : get_asset_subsidy_amount
3168 --Description : API to get subsidy amount for an asset
3169 -- PARAMETERS : IN - p_asset_cle_id : financial asset line id
3170 -- OUT - l_asbv_tbl:subsidy amount with additional details about
3171 -- subsidy vendor
3172 --------------------------------------------------------------------------------
3173 PROCEDURE get_asset_subsidy_amount(
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_asset_cle_id IN NUMBER,
3180 x_asbv_tbl OUT NOCOPY asbv_tbl_type) is
3181
3182 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
3183 l_api_name CONSTANT varchar2(30) := 'GET_ASSET_SUBSIDY';
3184 l_api_version CONSTANT NUMBER := 1.0;
3185
3186 l_asbv_tbl asbv_tbl_type;
3187
3188 --cursor to fetch all the subsidies attached to financial asset
3189 cursor l_sub_csr(p_asset_cle_id in number) is
3190 select sub_cle.id
3191 from okc_k_lines_b sub_cle,
3192 okc_line_styles_b sub_lse
3193 where sub_cle.cle_id = p_asset_cle_id
3194 and sub_cle.lse_id = sub_lse.id
3195 and sub_lse.lty_code = 'SUBSIDY'
3196 and sub_cle.sts_code <> 'ABANDONED';
3197
3198 l_subsidy_cle_id number;
3199 i number;
3200
3201 begin
3202 x_return_status := OKL_API.G_RET_STS_SUCCESS;
3203
3204 ---------------------------------------
3205 --start of input parameter validations
3206 ---------------------------------------
3207 --1.validate p_asset_cle_id
3208 If (p_asset_cle_id is NULL) or (p_asset_cle_id = OKL_API.G_MISS_NUM) then
3209 OKL_API.set_message(
3210 p_app_name => G_APP_NAME,
3211 p_msg_name => G_API_MISSING_PARAMETER,
3212 p_token1 => G_API_NAME_TOKEN,
3213 p_token1_value => l_api_name,
3214 p_token2 => G_MISSING_PARAM_TOKEN,
3215 p_token2_value => 'p_asset_cle_id');
3216 x_return_status := OKL_API.G_RET_STS_ERROR;
3217 Raise OKL_API.G_EXCEPTION_ERROR;
3218 Elsif (p_asset_cle_id is not NULL) and (p_asset_cle_id <> OKL_API.G_MISS_NUM) then
3219 validate_cle_id(p_cle_id => p_asset_cle_id,
3220 p_lty_code => 'FREE_FORM1',
3221 x_return_status => x_return_status);
3222 IF x_return_status = OKL_API.G_RET_STS_ERROR then
3223 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_asset_cle_id');
3224 Raise OKL_API.G_EXCEPTION_ERROR;
3225 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
3226 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3227 End If;
3228 End If;
3229 -------------------------------------
3230 --end of input parameter validations
3231 -------------------------------------
3232
3233 i := 0;
3234 Open l_sub_csr(p_asset_cle_id => p_asset_cle_id);
3235 Loop
3236 Fetch l_sub_csr into l_subsidy_cle_id;
3237 Exit when l_sub_csr%NOTFOUND;
3238 i := i + 1;
3239 get_subsidy_amount(
3240 p_api_version => p_api_version,
3241 p_init_msg_list => p_init_msg_list,
3242 x_return_status => x_return_status,
3243 x_msg_count => x_msg_count,
3244 x_msg_data => x_msg_data,
3245 p_subsidy_cle_id => l_subsidy_cle_id,
3246 x_asbv_rec => l_asbv_tbl(i));
3247
3248 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3249 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3250 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3251 RAISE OKL_API.G_EXCEPTION_ERROR;
3252 END IF;
3253 End Loop;
3254 Close l_sub_csr;
3255
3256 x_asbv_tbl := l_asbv_tbl;
3257
3258 EXCEPTION
3259 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3260 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3261 l_api_name,
3262 G_PKG_NAME,
3263 'OKL_API.G_RET_STS_ERROR',
3264 x_msg_count,
3265 x_msg_data,
3266 '_PVT');
3267 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3268 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3269 l_api_name,
3270 G_PKG_NAME,
3271 'OKL_API.G_RET_STS_UNEXP_ERROR',
3272 x_msg_count,
3273 x_msg_data,
3274 '_PVT');
3275 WHEN OTHERS THEN
3276 If l_sub_csr%ISOPEN then
3277 CLOSE l_sub_csr;
3278 End If;
3279 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3280 l_api_name,
3281 G_PKG_NAME,
3282 'OTHERS',
3283 x_msg_count,
3284 x_msg_data,
3285 '_PVT');
3286
3287 End get_asset_subsidy_amount;
3288 --------------------------------------------------------------------------------
3289 --Name : calculate_asset_subsidy
3290 --Description : API to calculate total subsidy amount for an asset
3291 -- PARAMETERS : IN - p_asset_cle_id : financial asset line id
3292 -- OUT - l_subsidy_amount: subsidy amount
3293 --------------------------------------------------------------------------------
3294 PROCEDURE calculate_asset_subsidy(
3295 p_api_version IN NUMBER,
3296 p_init_msg_list IN VARCHAR2,
3297 x_return_status OUT NOCOPY VARCHAR2,
3298 x_msg_count OUT NOCOPY NUMBER,
3299 x_msg_data OUT NOCOPY VARCHAR2,
3300 p_asset_cle_id IN NUMBER,
3301 x_subsidy_amount OUT NOCOPY NUMBER) is
3302
3303 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
3304 l_api_name CONSTANT varchar2(30) := 'CALC_ASSET_SUBSIDY';
3305 l_api_version CONSTANT NUMBER := 1.0;
3306
3307 l_subsidy_amount Number;
3308
3309 l_asset_subsidy_amount Number;
3310
3311 --cursor to fetch all the subsidies attached to financial asset
3312 cursor l_sub_csr(p_asset_cle_id in number) is
3313 select sub_cle.id
3314 from okc_k_lines_b sub_cle,
3315 okc_line_styles_b sub_lse
3316 where sub_cle.cle_id = p_asset_cle_id
3317 and sub_cle.lse_id = sub_lse.id
3318 and sub_lse.lty_code = 'SUBSIDY'
3319 and sub_cle.sts_code <> 'ABANDONED';
3320
3321 l_subsidy_cle_id number;
3322 begin
3323 x_return_status := OKL_API.G_RET_STS_SUCCESS;
3324
3325 ---------------------------------------
3326 --start of input parameter validations
3327 ---------------------------------------
3328 --1.validate p_asset_cle_id
3329 If (p_asset_cle_id is NULL) or (p_asset_cle_id = OKL_API.G_MISS_NUM) then
3330 OKL_API.set_message(
3331 p_app_name => G_APP_NAME,
3332 p_msg_name => G_API_MISSING_PARAMETER,
3333 p_token1 => G_API_NAME_TOKEN,
3334 p_token1_value => l_api_name,
3335 p_token2 => G_MISSING_PARAM_TOKEN,
3336 p_token2_value => 'p_asset_cle_id');
3337 x_return_status := OKL_API.G_RET_STS_ERROR;
3338 Raise OKL_API.G_EXCEPTION_ERROR;
3339 Elsif (p_asset_cle_id is not NULL) and (p_asset_cle_id <> OKL_API.G_MISS_NUM) then
3340 validate_cle_id(p_cle_id => p_asset_cle_id,
3341 p_lty_code => 'FREE_FORM1',
3342 x_return_status => x_return_status);
3343 IF x_return_status = OKL_API.G_RET_STS_ERROR then
3344 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_asset_cle_id');
3345 Raise OKL_API.G_EXCEPTION_ERROR;
3346 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
3347 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3348 End If;
3349 End If;
3350 ------------------------------------
3351 --end of input parameter validations
3352 ------------------------------------
3353
3354 l_asset_subsidy_amount := 0;
3355
3356 --------------------------------------------------------------
3357 --get all the subsidies associated to asset and get amount
3358 --------------------------------------------------------------
3359 Open l_sub_csr(p_asset_cle_id => p_asset_cle_id);
3360 Loop
3361 Fetch l_sub_csr into l_subsidy_cle_id;
3362 Exit when l_sub_csr%NOTFOUND;
3363 calculate_subsidy_amount(
3364 p_api_version => p_api_version,
3365 p_init_msg_list => p_init_msg_list,
3366 x_return_status => x_return_status,
3367 x_msg_count => x_msg_count,
3368 x_msg_data => x_msg_data,
3369 p_subsidy_cle_id => l_subsidy_cle_id,
3370 p_override_yn => OKL_API.G_TRUE,
3371 x_subsidy_amount => l_subsidy_amount);
3372
3373 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3374 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3375 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3376 RAISE OKL_API.G_EXCEPTION_ERROR;
3377 END IF;
3378 l_asset_subsidy_Amount := l_asset_subsidy_Amount + l_subsidy_amount;
3379 End Loop;
3380 Close l_sub_csr;
3381
3382 x_subsidy_amount := l_asset_subsidy_amount;
3383
3384 EXCEPTION
3385 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3386 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3387 l_api_name,
3388 G_PKG_NAME,
3389 'OKL_API.G_RET_STS_ERROR',
3390 x_msg_count,
3391 x_msg_data,
3392 '_PVT');
3393 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3394 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3395 l_api_name,
3396 G_PKG_NAME,
3397 'OKL_API.G_RET_STS_UNEXP_ERROR',
3398 x_msg_count,
3399 x_msg_data,
3400 '_PVT');
3401 WHEN OTHERS THEN
3402 If l_sub_csr%ISOPEN then
3403 CLOSE l_sub_csr;
3404 End If;
3405 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3406 l_api_name,
3407 G_PKG_NAME,
3408 'OTHERS',
3409 x_msg_count,
3410 x_msg_data,
3411 '_PVT');
3412
3413 End calculate_asset_subsidy;
3414 --------------------------------------------------------------------------------
3415 --Name : get_contract_subsidy_amount
3416 --Description : API to fetch subsidy amount for the contract
3417 -- PARAMETERS : IN - p_chr_id : Contract id
3418 -- OUT - x_subsidy_amount:subsidy amount
3419 --------------------------------------------------------------------------------
3420 PROCEDURE get_contract_subsidy_amount(
3421 p_api_version IN NUMBER,
3422 p_init_msg_list IN VARCHAR2,
3423 x_return_status OUT NOCOPY VARCHAR2,
3424 x_msg_count OUT NOCOPY NUMBER,
3425 x_msg_data OUT NOCOPY VARCHAR2,
3426 p_chr_id IN NUMBER,
3427 p_accounting_method IN VARCHAR2,
3428 x_subsidy_amount OUT NOCOPY NUMBER) is
3429
3430 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
3431 l_api_name CONSTANT varchar2(30) := 'GET_CONTRACT_SUBSIDY';
3432 l_api_version CONSTANT NUMBER := 1.0;
3433
3434 l_subsidy_amount number;
3435 l_chr_subsidy_amount number;
3436
3437 --cursor to get all the financial assets in the contract
3438 cursor l_asst_csr(p_chr_id in number) is
3439 select cleb.id
3440 from okc_k_lines_b cleb,
3441 okc_line_styles_b lseb,
3442 okc_statuses_b stsb
3443 where cleb.chr_id = p_chr_id
3444 and cleb.dnz_chr_id = p_chr_id
3445 and cleb.lse_id = lseb.id
3446 and lseb.lty_code = 'FREE_FORM1'
3447 and cleb.sts_code = stsb.code
3448 and stsb.ste_code not in ('HOLD','EXPIRED','TERMINATED','CANCELLED');
3449
3450 l_asset_cle_id number;
3451
3452 begin
3453 x_return_status := OKL_API.G_RET_STS_SUCCESS;
3454
3455 -------------------------------------
3456 --start of input parameter validations
3457 -------------------------------------
3458 --1.validate p_chr_id
3459 If (p_chr_id is NULL) or (p_chr_id = OKL_API.G_MISS_NUM) then
3460 OKL_API.set_message(
3461 p_app_name => G_APP_NAME,
3462 p_msg_name => G_API_MISSING_PARAMETER,
3463 p_token1 => G_API_NAME_TOKEN,
3464 p_token1_value => l_api_name,
3465 p_token2 => G_MISSING_PARAM_TOKEN,
3466 p_token2_value => 'p_chr_id');
3467 x_return_status := OKL_API.G_RET_STS_ERROR;
3468 Raise OKL_API.G_EXCEPTION_ERROR;
3469 Elsif (p_chr_id is not NULL) and (p_chr_id <> OKL_API.G_MISS_NUM) then
3470 validate_chr_id(p_chr_id => p_chr_id,
3471 x_return_status => x_return_status);
3472 IF x_return_status = OKL_API.G_RET_STS_ERROR then
3473 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_chr_id');
3474 Raise OKL_API.G_EXCEPTION_ERROR;
3475 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
3476 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3477 End If;
3478 End If;
3479 --2.validate accounting method
3480 If (p_accounting_method is NOT NULL) then
3481 validate_acct_method(p_accounting_method => p_accounting_method,
3482 x_return_status => x_return_status);
3483 IF x_return_status = OKL_API.G_RET_STS_ERROR then
3484 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_accounting_method');
3485 Raise OKL_API.G_EXCEPTION_ERROR;
3486 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
3487 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3488 End If;
3489 End If;
3490 ------------------------------------
3491 --end of input parameter validations
3492 -------------------------------------
3493
3494 l_chr_subsidy_amount := 0;
3495 Open l_asst_csr(p_chr_id => p_chr_id);
3496 Loop
3497 Fetch l_asst_csr into l_asset_cle_id;
3498 Exit when l_asst_csr%NOTFOUND;
3499 get_asset_subsidy_amount(
3500 p_api_version => p_api_version,
3501 p_init_msg_list => p_init_msg_list,
3502 x_return_status => x_return_status,
3503 x_msg_count => x_msg_count,
3504 x_msg_data => x_msg_data,
3505 p_asset_cle_id => l_asset_cle_id,
3506 p_accounting_method => p_accounting_method,
3507 x_subsidy_amount => l_subsidy_amount);
3508
3509 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3510 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3511 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3512 RAISE OKL_API.G_EXCEPTION_ERROR;
3513 END IF;
3514 l_chr_subsidy_Amount := l_chr_subsidy_Amount + l_subsidy_amount;
3515 End Loop;
3516 Close l_asst_csr;
3517
3518 x_subsidy_amount := l_chr_subsidy_amount;
3519
3520 EXCEPTION
3521 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3522 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3523 l_api_name,
3524 G_PKG_NAME,
3525 'OKL_API.G_RET_STS_ERROR',
3526 x_msg_count,
3527 x_msg_data,
3528 '_PVT');
3529 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3530 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3531 l_api_name,
3532 G_PKG_NAME,
3533 'OKL_API.G_RET_STS_UNEXP_ERROR',
3534 x_msg_count,
3535 x_msg_data,
3536 '_PVT');
3537 WHEN OTHERS THEN
3538 If l_asst_csr%ISOPEN then
3539 CLOSE l_asst_csr;
3540 End If;
3541 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3542 l_api_name,
3543 G_PKG_NAME,
3544 'OTHERS',
3545 x_msg_count,
3546 x_msg_data,
3547 '_PVT');
3548 end get_contract_subsidy_amount;
3549 --------------------------------------------------------------------------------
3550 --Name : get_contract_subsidy_amount
3551 --Description : API to fetch subsidy amount for the contract
3552 -- PARAMETERS : IN - p_chr_id : Contract id
3553 -- OUT - x_asbv_tbl : subsidy amount with additional vendor details
3554 --------------------------------------------------------------------------------
3555 PROCEDURE get_contract_subsidy_amount(
3556 p_api_version IN NUMBER,
3557 p_init_msg_list IN VARCHAR2,
3558 x_return_status OUT NOCOPY VARCHAR2,
3559 x_msg_count OUT NOCOPY NUMBER,
3560 x_msg_data OUT NOCOPY VARCHAR2,
3561 p_chr_id IN NUMBER,
3562 x_asbv_tbl OUT NOCOPY asbv_tbl_type) is
3563
3564 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
3565 l_api_name CONSTANT varchar2(30) := 'GET_CONTRACT_SUBSIDY';
3566 l_api_version CONSTANT NUMBER := 1.0;
3567
3568 l_asset_asbv_tbl asbv_tbl_type;
3569 l_chr_asbv_tbl asbv_tbl_type;
3570 i number;
3571 j number;
3572
3573 --cursor to get all the financial assets in the contract
3574 cursor l_asst_csr(p_chr_id in number) is
3575 select cleb.id
3576 from okc_k_lines_b cleb,
3577 okc_line_styles_b lseb,
3578 okc_statuses_b stsb
3579 where cleb.chr_id = p_chr_id
3580 and cleb.dnz_chr_id = p_chr_id
3581 and cleb.lse_id = lseb.id
3582 and lseb.lty_code = 'FREE_FORM1'
3583 and cleb.sts_code = stsb.code
3584 and stsb.ste_code not in ('HOLD','EXPIRED','TERMINATED','CANCELLED');
3585
3586 l_asset_cle_id number;
3587
3588 begin
3589 x_return_status := OKL_API.G_RET_STS_SUCCESS;
3590
3591 -----------------------------------------
3592 --start of input parameter validations
3593 ----------------------------------------
3594 --1.validate p_chr_id
3595 If (p_chr_id is NULL) or (p_chr_id = OKL_API.G_MISS_NUM) then
3596 OKL_API.set_message(
3597 p_app_name => G_APP_NAME,
3598 p_msg_name => G_API_MISSING_PARAMETER,
3599 p_token1 => G_API_NAME_TOKEN,
3600 p_token1_value => l_api_name,
3601 p_token2 => G_MISSING_PARAM_TOKEN,
3602 p_token2_value => 'p_chr_id');
3603 x_return_status := OKL_API.G_RET_STS_ERROR;
3604 Raise OKL_API.G_EXCEPTION_ERROR;
3605 Elsif (p_chr_id is not NULL) and (p_chr_id <> OKL_API.G_MISS_NUM) then
3606 validate_chr_id(p_chr_id => p_chr_id,
3607 x_return_status => x_return_status);
3608 IF x_return_status = OKL_API.G_RET_STS_ERROR then
3609 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_chr_id');
3610 Raise OKL_API.G_EXCEPTION_ERROR;
3611 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
3612 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3613 End If;
3614 End If;
3615 ------------------------------------
3616 --end of input parameter validations
3617 ------------------------------------
3618
3619 j := 0;
3620 i := 0;
3621 Open l_asst_csr(p_chr_id => p_chr_id);
3622 Loop
3623 Fetch l_asst_csr into l_asset_cle_id;
3624 Exit when l_asst_csr%NOTFOUND;
3625 get_asset_subsidy_amount(
3626 p_api_version => p_api_version,
3627 p_init_msg_list => p_init_msg_list,
3628 x_return_status => x_return_status,
3629 x_msg_count => x_msg_count,
3630 x_msg_data => x_msg_data,
3631 p_asset_cle_id => l_asset_cle_id,
3632 x_asbv_tbl => l_asset_asbv_tbl);
3633
3634 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3635 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3636 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3637 RAISE OKL_API.G_EXCEPTION_ERROR;
3638 END IF;
3639
3640 IF l_asset_asbv_tbl.COUNT > 0 then
3641 For i in l_asset_asbv_tbl.FIRST..l_asset_asbv_tbl.LAST
3642 Loop
3643 j := j + 1;
3644 l_chr_asbv_tbl(j) := l_asset_asbv_tbl(i);
3645 End Loop;
3646 l_asset_asbv_tbl.delete;
3647 End If;
3648
3649 End Loop;
3650 Close l_asst_csr;
3651
3652 x_asbv_tbl := l_chr_asbv_tbl;
3653
3654 EXCEPTION
3655 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3656 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3657 l_api_name,
3658 G_PKG_NAME,
3659 'OKL_API.G_RET_STS_ERROR',
3660 x_msg_count,
3661 x_msg_data,
3662 '_PVT');
3663 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3664 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3665 l_api_name,
3666 G_PKG_NAME,
3667 'OKL_API.G_RET_STS_UNEXP_ERROR',
3668 x_msg_count,
3669 x_msg_data,
3670 '_PVT');
3671 WHEN OTHERS THEN
3672 If l_asst_csr%ISOPEN then
3673 CLOSE l_asst_csr;
3674 End If;
3675 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3676 l_api_name,
3677 G_PKG_NAME,
3678 'OTHERS',
3679 x_msg_count,
3680 x_msg_data,
3681 '_PVT');
3682 end get_contract_subsidy_amount;
3683 --------------------------------------------------------------------------------
3684 --Name : calculate_contract_subsidy
3685 --Description : API to fetch subsidy amount for the contract
3686 -- PARAMETERS : IN - p_chr_id : Contract id
3687 -- OUT - x_subsidy_amount:subsidy amount
3688 --------------------------------------------------------------------------------
3689 PROCEDURE calculate_contract_subsidy(
3690 p_api_version IN NUMBER,
3691 p_init_msg_list IN VARCHAR2,
3692 x_return_status OUT NOCOPY VARCHAR2,
3693 x_msg_count OUT NOCOPY NUMBER,
3694 x_msg_data OUT NOCOPY VARCHAR2,
3695 p_chr_id IN NUMBER,
3696 x_subsidy_amount OUT NOCOPY NUMBER) is
3697
3698 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
3699 l_api_name CONSTANT varchar2(30) := 'CALC_CONTRACT_SUBSIDY';
3700 l_api_version CONSTANT NUMBER := 1.0;
3701
3702 l_subsidy_amount number;
3703 l_chr_subsidy_amount number;
3704
3705 --cursor to get all the financial assets in the contract
3706 cursor l_asst_csr(p_chr_id in number) is
3707 select cleb.id
3708 from okc_k_lines_b cleb,
3709 okc_line_styles_b lseb,
3710 okc_statuses_b stsb
3711 where cleb.chr_id = p_chr_id
3712 and cleb.dnz_chr_id = p_chr_id
3713 and cleb.lse_id = lseb.id
3714 and lseb.lty_code = 'FREE_FORM1'
3715 and cleb.sts_code = stsb.code
3716 and stsb.ste_code not in ('HOLD','EXPIRED','TERMINATED','CANCELLED');
3717
3718 l_asset_cle_id number;
3719
3720 begin
3721 x_return_status := OKL_API.G_RET_STS_SUCCESS;
3722
3723 -----------------------------------------
3724 --start of input parameter validations
3725 ----------------------------------------
3726 --1.validate p_chr_id
3727 If (p_chr_id is NULL) or (p_chr_id = OKL_API.G_MISS_NUM) then
3728 OKL_API.set_message(
3729 p_app_name => G_APP_NAME,
3730 p_msg_name => G_API_MISSING_PARAMETER,
3731 p_token1 => G_API_NAME_TOKEN,
3732 p_token1_value => l_api_name,
3733 p_token2 => G_MISSING_PARAM_TOKEN,
3734 p_token2_value => 'p_chr_id');
3735 x_return_status := OKL_API.G_RET_STS_ERROR;
3736 Raise OKL_API.G_EXCEPTION_ERROR;
3737 Elsif (p_chr_id is not NULL) and (p_chr_id <> OKL_API.G_MISS_NUM) then
3738 validate_chr_id(p_chr_id => p_chr_id,
3739 x_return_status => x_return_status);
3740 IF x_return_status = OKL_API.G_RET_STS_ERROR then
3741 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_chr_id');
3742 Raise OKL_API.G_EXCEPTION_ERROR;
3743 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
3744 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3745 End If;
3746 End If;
3747 ------------------------------------
3748 --end of input parameter validations
3749 ------------------------------------
3750
3751 l_chr_subsidy_amount := 0;
3752 Open l_asst_csr(p_chr_id => p_chr_id);
3753 Loop
3754 Fetch l_asst_csr into l_asset_cle_id;
3755 Exit when l_asst_csr%NOTFOUND;
3756 calculate_asset_subsidy(
3757 p_api_version => p_api_version,
3758 p_init_msg_list => p_init_msg_list,
3759 x_return_status => x_return_status,
3760 x_msg_count => x_msg_count,
3761 x_msg_data => x_msg_data,
3762 p_asset_cle_id => l_asset_cle_id,
3763 x_subsidy_amount => l_subsidy_amount);
3764
3765 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3766 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3767 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3768 RAISE OKL_API.G_EXCEPTION_ERROR;
3769 END IF;
3770 l_chr_subsidy_Amount := l_chr_subsidy_Amount + l_subsidy_amount;
3771 End Loop;
3772 Close l_asst_csr;
3773
3774 x_subsidy_amount := l_chr_subsidy_amount;
3775
3776 EXCEPTION
3777 WHEN OKL_API.G_EXCEPTION_ERROR THEN
3778 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3779 l_api_name,
3780 G_PKG_NAME,
3781 'OKL_API.G_RET_STS_ERROR',
3782 x_msg_count,
3783 x_msg_data,
3784 '_PVT');
3785 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3786 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3787 l_api_name,
3788 G_PKG_NAME,
3789 'OKL_API.G_RET_STS_UNEXP_ERROR',
3790 x_msg_count,
3791 x_msg_data,
3792 '_PVT');
3793 WHEN OTHERS THEN
3794 If l_asst_csr%ISOPEN then
3795 CLOSE l_asst_csr;
3796 End If;
3797 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3798 l_api_name,
3799 G_PKG_NAME,
3800 'OTHERS',
3801 x_msg_count,
3802 x_msg_data,
3803 '_PVT');
3804 end calculate_contract_subsidy;
3805 --------------------------------------------------------------------------------
3806 --Name : get_funding_subsidy_amount
3807 --Description : API to fetch subsidy amount for funding request
3808 -- PARAMETERS : IN - p_chr_id : Contract id
3809 -- p_asset_cle_id : Financial asset line id
3810 -- OUT -x_subsidy_amount : subsidy amount
3811 --special logic : If vendor id is passed , subsidy is calculated for that vendor
3812 -- If vendor id is null(defualt) subsidy is calculated only for assets
3813 -- which have vendor attached. Subsidy vendorr and asset vendor must
3814 -- be same.
3815 --------------------------------------------------------------------------------
3816 PROCEDURE get_funding_subsidy_amount(
3817 p_api_version IN NUMBER,
3818 p_init_msg_list IN VARCHAR2,
3819 x_return_status OUT NOCOPY VARCHAR2,
3820 x_msg_count OUT NOCOPY NUMBER,
3821 x_msg_data OUT NOCOPY VARCHAR2,
3822 p_chr_id IN NUMBER,
3823 p_asset_cle_id IN NUMBER,
3824 p_vendor_id IN NUMBER DEFAULT NULL,
3825 x_subsidy_amount OUT NOCOPY NUMBER) is
3826
3827 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
3828 l_api_name CONSTANT varchar2(30) := 'GET_FUND_SUBSIDY';
3829 l_api_version CONSTANT NUMBER := 1.0;
3830
3831 l_subsidy_amount number;
3832 l_asset_subsidy_amount number;
3833
3834 --cursor to fetch vendor subssidies
3835 cursor l_vend_sub_csr (p_asset_cle_id in number,
3836 p_chr_id in number,
3837 p_vendor_id in number) is
3838 select sub_cle.id
3839 from
3840 okl_k_lines sub_kle,
3841 okc_k_lines_b sub_cle,
3842 okc_line_styles_b sub_lse,
3843 okl_subsidies_b subb,
3844 okc_k_party_roles_b sub_vend,
3845 okc_k_party_roles_b asst_vend,
3846 okc_k_lines_b model_cle,
3847 okc_line_styles_b model_lse,
3848 okc_k_lines_b asst_cle,
3849 okc_statuses_b asst_sts
3850 --subsidy vendor
3851 where sub_vend.dnz_chr_id = sub_cle.dnz_chr_id
3852 and sub_vend.object1_id1 = nvl(to_char(p_vendor_id),sub_vend.object1_id1)
3853 and sub_vend.object1_id1 = asst_vend.object1_id1 --to make sure asset and subsidy vendors are same
3854 and sub_vend.object1_id2 = '#'
3855 and sub_vend.jtot_object1_code = 'OKX_VENDOR'
3856 and sub_vend.rle_code = 'OKL_VENDOR'
3857 and sub_vend.cle_id = sub_cle.id
3858 --subsidy receipt method is 'FUND' and subsidy accounting method is 'NET' (discount)
3859 and subb.id = sub_kle.subsidy_id
3860 and subb.receipt_method_code = 'FUND'
3861 and subb.accounting_method_code = 'NET'
3862 and sub_kle.id = sub_cle.id
3863 --subsidy line
3864 and sub_cle.cle_id = asst_cle.id
3865 and sub_cle.dnz_chr_id = asst_cle.dnz_chr_id
3866 and sub_cle.sts_code <> 'ABANDONED'
3867 and sub_lse.id = sub_cle.lse_id
3868 and sub_lse.lty_code = 'SUBSIDY'
3869 --model line vendor
3870 and asst_vend.dnz_chr_id = model_cle.dnz_chr_id
3871 and asst_vend.object1_id1 = nvl(to_char(p_vendor_id),asst_vend.object1_id1)
3872 and asst_vend.object1_id2 = '#'
3873 and asst_vend.jtot_object1_code = 'OKX_VENDOR'
3874 and asst_vend.rle_code = 'OKL_VENDOR'
3875 and asst_vend.cle_id = model_cle.id
3876 --model line
3877 and model_cle.cle_id = asst_cle.id
3878 and model_cle.dnz_chr_id = asst_cle.dnz_chr_id
3879 and model_lse.id = model_cle.lse_id
3880 and model_lse.lty_code = 'ITEM'
3881 --financial asset
3882 and asst_sts.code = asst_cle.sts_code
3883 and asst_sts.ste_code not in ('HOLD','EXPIRED','CANCELLED')
3884 and asst_cle.dnz_chr_id = p_chr_id
3885 and asst_cle.chr_id = p_chr_id
3886 and asst_cle.id = p_asset_cle_id;
3887
3888 --veramach bug 5600694 start
3889 cursor is_subsidy( p_chr_id in number, p_asset_cle_id in number) is
3890 select 'Y' from dual where exists
3891 (
3892 select null from OKC_LINE_STYLES_B SUB_LSE,
3893 OKC_K_LINES_B SUB_CLE
3894 where SUB_CLE.dnz_chr_id=p_chr_id
3895 and SUB_LSE.LTY_CODE = 'SUBSIDY'
3896 and SUB_CLE.lse_id= SUB_LSE.id
3897 and SUB_CLE.CLE_ID =p_asset_cle_id
3898 );
3899 l_has_subsidy varchar2(1) := 'N';
3900 --veramach bug 5600694 end
3901
3902 l_subsidy_cle_id number;
3903 begin
3904 x_return_status := OKL_API.G_RET_STS_SUCCESS;
3905
3906 -----------------------------------------
3907 --start of input parameter validations
3908 -----------------------------------------
3909 --1.validate p_chr_id
3910 If (p_chr_id is NULL) or (p_chr_id = OKL_API.G_MISS_NUM) then
3911 OKL_API.set_message(
3912 p_app_name => G_APP_NAME,
3913 p_msg_name => G_API_MISSING_PARAMETER,
3914 p_token1 => G_API_NAME_TOKEN,
3915 p_token1_value => l_api_name,
3916 p_token2 => G_MISSING_PARAM_TOKEN,
3917 p_token2_value => 'p_chr_id');
3918 x_return_status := OKL_API.G_RET_STS_ERROR;
3919 Raise OKL_API.G_EXCEPTION_ERROR;
3920 Elsif (p_chr_id is not NULL) and (p_chr_id <> OKL_API.G_MISS_NUM) then
3921 validate_chr_id(p_chr_id => p_chr_id,
3922 x_return_status => x_return_status);
3923 IF x_return_status = OKL_API.G_RET_STS_ERROR then
3924 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_chr_id');
3925 Raise OKL_API.G_EXCEPTION_ERROR;
3926 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
3927 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3928 End If;
3929 End If;
3930 --2. validate p_asset_cle_id
3931 If (p_asset_cle_id is NULL) or (p_asset_cle_id = OKL_API.G_MISS_NUM) then
3932 OKL_API.set_message(
3933 p_app_name => G_APP_NAME,
3934 p_msg_name => G_API_MISSING_PARAMETER,
3935 p_token1 => G_API_NAME_TOKEN,
3936 p_token1_value => l_api_name,
3937 p_token2 => G_MISSING_PARAM_TOKEN,
3938 p_token2_value => 'p_asset_cle_id');
3939 x_return_status := OKL_API.G_RET_STS_ERROR;
3940 Raise OKL_API.G_EXCEPTION_ERROR;
3941 Elsif (p_asset_cle_id is not NULL) and (p_asset_cle_id <> OKL_API.G_MISS_NUM) then
3942 validate_cle_id(p_cle_id => p_asset_cle_id,
3943 p_lty_code => 'FREE_FORM1',
3944 x_return_status => x_return_status);
3945 IF x_return_status = OKL_API.G_RET_STS_ERROR then
3946 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_asset_cle_id');
3947 Raise OKL_API.G_EXCEPTION_ERROR;
3948 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
3949 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3950 End If;
3951 End If;
3952 --3.validate vendor id
3953 if (p_vendor_id is not NULL) then
3954 validate_vendor_id(p_vendor_id => p_vendor_id,
3955 x_return_status => x_return_status);
3956 IF x_return_status = OKL_API.G_RET_STS_ERROR then
3957 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_vendor_id');
3958 Raise OKL_API.G_EXCEPTION_ERROR;
3959 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
3960 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3961 End If;
3962 End If;
3963 -------------------------------------
3964 --end of input parameter validations
3965 -------------------------------------
3966
3967 l_asset_subsidy_amount := 0;
3968
3969 --veramach bug 5600694 start
3970 open is_subsidy(p_chr_id => p_chr_id, p_asset_cle_id => p_asset_cle_id);
3971 fetch is_subsidy into l_has_subsidy;
3972 close is_subsidy;
3973 if(l_has_subsidy = 'Y') then
3974 --veramach bug 5600694 end
3975
3976 Open l_vend_sub_csr(p_chr_id => p_chr_id,
3977 p_asset_cle_id => p_asset_cle_id,
3978 p_vendor_id => p_vendor_id);
3979 Loop
3980 Fetch l_vend_sub_csr into l_subsidy_cle_id;
3981 Exit when l_vend_sub_csr%NOTFOUND;
3982 get_subsidy_amount(
3983 p_api_version => p_api_version,
3984 p_init_msg_list => p_init_msg_list,
3985 x_return_status => x_return_status,
3986 x_msg_count => x_msg_count,
3987 x_msg_data => x_msg_data,
3988 p_subsidy_cle_id => l_subsidy_cle_id,
3989 x_subsidy_amount => l_subsidy_amount);
3990
3991 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3992 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3993 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3994 RAISE OKL_API.G_EXCEPTION_ERROR;
3995 END IF;
3996 l_asset_subsidy_Amount := l_asset_subsidy_Amount + l_subsidy_amount;
3997 End Loop;
3998 Close l_vend_sub_csr;
3999 --veramach bug 5600694 start
4000 end if;
4001 --veramach bug 5600694 end
4002 x_subsidy_amount := l_asset_subsidy_amount;
4003
4004 EXCEPTION
4005 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4006 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4007 l_api_name,
4008 G_PKG_NAME,
4009 'OKL_API.G_RET_STS_ERROR',
4010 x_msg_count,
4011 x_msg_data,
4012 '_PVT');
4013 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4014 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4015 l_api_name,
4016 G_PKG_NAME,
4017 'OKL_API.G_RET_STS_UNEXP_ERROR',
4018 x_msg_count,
4019 x_msg_data,
4020 '_PVT');
4021 WHEN OTHERS THEN
4022 If l_vend_sub_csr%ISOPEN then
4023 CLOSE l_vend_sub_csr;
4024 End If;
4025 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4026 l_api_name,
4027 G_PKG_NAME,
4028 'OTHERS',
4029 x_msg_count,
4030 x_msg_data,
4031 '_PVT');
4032 end get_funding_subsidy_amount;
4033 --------------------------------------------------------------------------------
4034 --Name : get_partial_subsidy_amount
4035 --Description : API to fetch subsidy amount for partial funding request
4036 -- PARAMETERS : IN - p_asset_cle_id : Financial asset line id
4037 -- OUT -x_asbv_tbl : table of subsidy fund details
4038 --special logic : Subsidy vendor and asset vendor must
4039 -- be same.
4040 --------------------------------------------------------------------------------
4041 PROCEDURE get_partial_subsidy_amount(
4042 p_api_version IN NUMBER,
4043 p_init_msg_list IN VARCHAR2,
4044 x_return_status OUT NOCOPY VARCHAR2,
4045 x_msg_count OUT NOCOPY NUMBER,
4046 x_msg_data OUT NOCOPY VARCHAR2,
4047 p_asset_cle_id IN NUMBER,
4048 p_req_fund_amount IN NUMBER,
4049 x_asbv_tbl OUT NOCOPY asbv_tbl_type) is
4050
4051 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
4052 l_api_name CONSTANT varchar2(30) := 'GET_PARTIAL_SUBSIDY';
4053 l_api_version CONSTANT NUMBER := 1.0;
4054
4055 l_asbv_tbl asbv_tbl_type;
4056 l_asset_oec Number;
4057
4058 --cursor to fetch vendor subssidies
4059 cursor l_vend_sub_csr (p_asset_cle_id in number) is
4060 select sub_cle.id,
4061 sub_cle.dnz_chr_id
4062 from okl_k_lines sub_kle,
4063 okc_k_lines_b sub_cle,
4064 okc_line_styles_b sub_lse,
4065 okl_subsidies_b subb,
4066 okc_k_party_roles_b sub_vend,
4067 okc_k_party_roles_b asst_vend,
4068 okc_k_lines_b model_cle,
4069 okc_line_styles_b model_lse,
4070 okc_k_lines_b asst_cle,
4071 okc_statuses_b asst_sts
4072 --subsidy vendor
4073 where sub_vend.dnz_chr_id = sub_cle.dnz_chr_id
4074 --and sub_vend.object1_id1 = to_char(nvl(p_vendor_id,sub_vend.object1_id1))
4075 and sub_vend.object1_id1 = asst_vend.object1_id1 --to make sure asset and subsidy vendors are same
4076 and sub_vend.object1_id2 = '#'
4077 and sub_vend.jtot_object1_code = 'OKX_VENDOR'
4078 and sub_vend.rle_code = 'OKL_VENDOR'
4079 and sub_vend.cle_id = sub_cle.id
4080 --subsidy receipt method is 'FUND' and accounting method is 'NET'
4081 and subb.id = sub_kle.subsidy_id
4082 and subb.receipt_method_code = 'FUND'
4083 and subb.accounting_method_code IN ('NET', 'AMORTIZE') --Added 'AMORTIZE' for bug 7664571
4084 and sub_kle.id = sub_cle.id
4085 --subsidy line
4086 and sub_cle.cle_id = asst_cle.id
4087 and sub_cle.dnz_chr_id = asst_cle.dnz_chr_id
4088 and sub_cle.sts_code <> 'ABANDONED'
4089 and sub_lse.id = sub_cle.lse_id
4090 and sub_lse.lty_code = 'SUBSIDY'
4091 --model line vendor
4092 and asst_vend.dnz_chr_id = model_cle.dnz_chr_id
4093 --and asst_vend.object1_id1 = nvl(to_char(p_vendor_id),asst_vend.object1_id1)
4094 and asst_vend.object1_id2 = '#'
4095 and asst_vend.jtot_object1_code = 'OKX_VENDOR'
4096 and asst_vend.rle_code = 'OKL_VENDOR'
4097 and asst_vend.cle_id = model_cle.id
4098 --model line
4099 and model_cle.cle_id = asst_cle.id
4100 and model_cle.dnz_chr_id = asst_cle.dnz_chr_id
4101 and model_lse.id = model_cle.lse_id
4102 and model_lse.lty_code = 'ITEM'
4103 --financial asset
4104 and asst_sts.code = asst_cle.sts_code
4105 and asst_sts.ste_code not in ('HOLD','EXPIRED','CANCELLED')
4106 and asst_cle.dnz_chr_id = asst_cle.chr_id
4107 and asst_cle.id = p_asset_cle_id;
4108
4109 l_subsidy_cle_id number;
4110 l_chr_id number;
4111
4112 i number;
4113
4114 begin
4115 x_return_status := OKL_API.G_RET_STS_SUCCESS;
4116
4117 ---------------------------------------------
4118 --validate input parameters
4119 ---------------------------------------------
4120 --1.validate p_asset_id
4121 If (p_asset_cle_id is NULL) or (p_asset_cle_id = OKL_API.G_MISS_NUM) then
4122 OKL_API.set_message(
4123 p_app_name => G_APP_NAME,
4124 p_msg_name => G_API_MISSING_PARAMETER,
4125 p_token1 => G_API_NAME_TOKEN,
4126 p_token1_value => l_api_name,
4127 p_token2 => G_MISSING_PARAM_TOKEN,
4128 p_token2_value => 'p_asset_cle_id');
4129 x_return_status := OKL_API.G_RET_STS_ERROR;
4130 Raise OKL_API.G_EXCEPTION_ERROR;
4131 Elsif (p_asset_cle_id is not NULL) and (p_asset_cle_id <> OKL_API.G_MISS_NUM) then
4132 validate_cle_id(p_cle_id => p_asset_cle_id,
4133 p_lty_code => 'FREE_FORM1',
4134 x_return_status => x_return_status);
4135 IF x_return_status = OKL_API.G_RET_STS_ERROR then
4136 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_asset_cle_id');
4137 Raise OKL_API.G_EXCEPTION_ERROR;
4138 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
4139 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4140 End If;
4141 End If;
4142 ------------------------------------------
4143 --end of input parameter validations
4144 ------------------------------------------
4145
4146 i := 0;
4147 Open l_vend_sub_csr(p_asset_cle_id => p_asset_cle_id);
4148 Loop
4149 Fetch l_vend_sub_csr into l_subsidy_cle_id, l_chr_id;
4150 Exit when l_vend_sub_csr%NOTFOUND;
4151 i := i + 1;
4152 If i = 1 then --get oec only first time
4153 --get asset OEC
4154
4155 /*---commented formula as it has commit and this
4156 --needs to be called in a sql bu funding API
4157 --called seeded function directly instead of formula
4158
4159 --OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
4160 -- p_init_msg_list => p_init_msg_list,
4161 -- x_return_status => x_return_status,
4162 -- x_msg_count => x_msg_count,
4163 -- x_msg_data => x_msg_data,
4164 -- p_formula_name => G_FORMULA_OEC,
4165 -- p_contract_id => l_chr_id,
4166 -- p_line_id => p_asset_cle_id,
4167 -- x_value => l_asset_oec);
4168
4169 --IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4170 -- RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4171 --ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4172 -- RAISE OKL_API.G_EXCEPTION_ERROR;
4173 --END IF;
4174 -----------*/
4175 -------------------------------------------
4176 --call seeded functions API :
4177 -------------------------------------------
4178 -- l_asset_oec := OKL_SEEDED_FUNCTIONS_PVT.line_oec(p_dnz_chr_id => l_chr_id, p_cle_id => p_asset_cle_id);
4179 -- Bug#8244551 - Get fundable portion of OEC which accounts
4180 -- for tradeins and downpaymments
4181 l_asset_oec := OKL_FUNDING_PVT.get_contract_line_amt(l_chr_id,p_asset_cle_id);
4182
4183 End If;
4184
4185 get_subsidy_amount(
4186 p_api_version => p_api_version,
4187 p_init_msg_list => p_init_msg_list,
4188 x_return_status => x_return_status,
4189 x_msg_count => x_msg_count,
4190 x_msg_data => x_msg_data,
4191 p_subsidy_cle_id => l_subsidy_cle_id,
4192 x_asbv_rec => l_asbv_tbl(i));
4193
4194 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4195 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4196 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4197 RAISE OKL_API.G_EXCEPTION_ERROR;
4198 END IF;
4199
4200 --calculate proportional subsidy amount
4201 l_asbv_tbl(i).amount := (l_asbv_tbl(i).amount/l_asset_oec)* p_req_fund_amount;
4202 End Loop;
4203 Close l_vend_sub_csr;
4204
4205 x_asbv_tbl := l_asbv_tbl;
4206
4207 EXCEPTION
4208 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4209 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4210 l_api_name,
4211 G_PKG_NAME,
4212 'OKL_API.G_RET_STS_ERROR',
4213 x_msg_count,
4214 x_msg_data,
4215 '_PVT');
4216 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4217 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4218 l_api_name,
4219 G_PKG_NAME,
4220 'OKL_API.G_RET_STS_UNEXP_ERROR',
4221 x_msg_count,
4222 x_msg_data,
4223 '_PVT');
4224 WHEN OTHERS THEN
4225 If l_vend_sub_csr%ISOPEN then
4226 CLOSE l_vend_sub_csr;
4227 End If;
4228 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4229 l_api_name,
4230 G_PKG_NAME,
4231 'OTHERS',
4232 x_msg_count,
4233 x_msg_data,
4234 '_PVT');
4235 end get_partial_subsidy_amount;
4236
4237
4238
4239 -- Start of comments
4240 --
4241 -- Procedure Name : Get_Vendor_Billing_Info
4242 -- Description : Local Procedure to Extract Vendor Billing Information for
4243 -- creating billing transaction
4244 -- Business Rules :
4245 -- Parameters : Contract Party Id or Contract Id
4246 -- History :
4247 -- Version : 1.0
4248 -- End of comments
4249
4250 PROCEDURE Get_Vendor_Billing_Info (
4251 p_contract_id IN NUMBER,
4252 p_cpl_id IN NUMBER,
4253 x_return_status OUT NOCOPY VARCHAR2,
4254 x_bill_to_site_use_id OUT NOCOPY Number,
4255 x_cust_acct_id OUT NOCOPY Number,
4256 x_payment_method_id OUT NOCOPY Number,
4257 x_bank_account_id OUT NOCOPY Number,
4258 x_inv_reason_for_review OUT NOCOPY Varchar2,
4259 x_inv_review_until_date OUT NOCOPY Date,
4260 x_cash_appl_rule_id OUT NOCOPY Number,
4261 x_invoice_format OUT NOCOPY Varchar2,
4262 x_review_invoice_yn OUT NOCOPY Varchar2,
4263 x_cust_acct_site_id OUT NOCOPY Number,
4264 x_payment_term_id OUT NOCOPY Number) As
4265
4266 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4267 l_overall_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4268
4269 l_contract_id NUMBER := p_contract_id;
4270 l_cpl_id NUMBER := p_cpl_id;
4271 l_khr_id NUMBER;
4272 l_par_id NUMBER;
4273 l_rgd_id NUMBER;
4274 l_party_name VARCHAR2(1000);
4275
4276 l_bill_to_site_use_id OKC_K_HEADERS_B.bill_to_site_use_id%TYPE;
4277 l_cust_acct_id OKC_K_PARTY_ROLES_B.cust_acct_id%TYPE;
4278 l_party_role FND_LOOKUPS.meaning%TYPE;
4279
4280 ----------------------------------------------------------------------------
4281 -- Get bill to site of OKL_VENDOR party on the contract
4282 ----------------------------------------------------------------------------
4283 CURSOR l_k_party_rg_csr (cp_cpl_id IN NUMBER) IS
4284 SELECT cpl.id cpl_id,
4285 cpl.jtot_object1_code object1_code,
4286 cpl.object1_id1 object1_id1,
4287 cpl.object1_id2 object1_id2,
4288 rgd.id rgd_id,
4289 cpl.bill_to_site_use_id bill_to_site_use_id,
4290 cpl.role party_role,
4291 cpl.cust_acct_id cust_acct_id
4292 FROM okc_k_party_roles_v cpl,
4293 okc_rg_party_roles rgpr,
4294 okc_rule_groups_v rgd
4295 WHERE cpl.id = cp_cpl_id
4296 AND cpl.rle_code = 'OKL_VENDOR'
4297 AND rgpr.cpl_id (+) = cpl.id
4298 AND rgd.id (+) = rgpr.rgp_id
4299 AND rgd.rgd_code(+) = 'LAVENB';
4300
4301 ----------------------------------------------------------------------------
4302 -- Get bill to site of vendor PROGRAM if Vendor Program vendor same as lease vendor
4303 ----------------------------------------------------------------------------
4304 -- modified by zrehman to fix Bug#6341517 on 27-Feb-2008 start
4305 CURSOR l_partner_rg_csr (cp_khr_id IN NUMBER,
4306 cp_vendor_id IN VARCHAR2) IS
4307 SELECT khr.Id khr_Id,
4308 Par.Id Par_Id,
4309 rgd.Id rgd_Id,
4310 cPl.Bill_To_Site_Use_Id Bill_To_Site_Use_Id,
4311 -- cPl.ROLE ParACty_Role,
4312 cPl.cUst_acct_Id cUst_acct_Id
4313 FROM Okl_k_Headers khr,
4314 Okc_k_Headers_b Par,
4315 Okc_Rule_Groups_v rgd,
4316 Okc_k_Party_Roles_b cPl
4317 WHERE khr.Id = cp_khr_Id
4318 AND Par.Id = khr.khr_Id
4319 AND Par.scs_Code = 'PROGRAM'
4320 AND rgd.chr_Id = Par.Id
4321 AND rgd.dnz_chr_Id = Par.Id
4322 AND rgd.cle_Id IS NULL
4323 AND rgd.rgd_Code = 'LAVENB'
4324 AND Par.Id = cPl.chr_Id
4325 AND cPl.rle_Code = 'OKL_VENDOR'
4326 AND cPl.Object1_Id1 = cp_Vendor_Id
4327 AND cPl.Object1_Id2 = '#'
4328 AND cPl.jTot_Object1_Code = 'OKX_VENDOR';
4329 -- modified by zrehman to fix Bug#6341517 on 27-Feb-2008 end
4330
4331 -------------------------------------------------------
4332 --cursor to fetch receipt method id
4333 -------------------------------------------------------
4334 CURSOR l_rcpt_mthd_csr (cp_cust_rct_mthd IN NUMBER) IS
4335 SELECT c.receipt_method_id
4336 FROM ra_cust_receipt_methods c
4337 WHERE c.cust_receipt_method_id = cp_cust_rct_mthd;
4338
4339
4340 ---------------------------------------------------------
4341 --cursor to fetch site use information
4342 ----------------------------------------------------------
4343 CURSOR l_site_use_csr (cp_site_use_id IN NUMBER,
4344 cp_site_use_code IN VARCHAR2) IS
4345 SELECT a.cust_account_id cust_account_id,
4346 a.cust_acct_site_id cust_acct_site_id,
4347 a.payment_term_id payment_term_id
4348 FROM okx_cust_site_uses_v a,
4349 okx_customer_accounts_v c
4350 WHERE a.id1 = cp_site_use_id
4351 AND a.site_use_code = cp_site_use_code
4352 AND c.id1 = a.cust_account_id;
4353
4354 ----------------------------------------------------------------------------
4355 --get payment term from customer profiles
4356 ----------------------------------------------------------------------------
4357 CURSOR l_std_terms_csr (cp_cust_id IN NUMBER,
4358 cp_site_use_id IN NUMBER) IS
4359 SELECT c.standard_terms standard_terms
4360 FROM hz_customer_profiles c
4361 WHERE c.cust_account_id = cp_cust_id
4362 AND c.site_use_id = cp_site_use_id
4363 UNION
4364 SELECT c1.standard_terms standard_terms
4365 FROM hz_customer_profiles c1
4366 WHERE c1.cust_account_id = cp_cust_id
4367 AND c1.site_use_id IS NULL
4368 AND NOT EXISTS (
4369 SELECT '1'
4370 FROM hz_customer_profiles c2
4371 WHERE c2.cust_account_id = cp_cust_id
4372 AND c2.site_use_id = cp_site_use_id);
4373
4374 l_site_use_rec l_site_use_csr%ROWTYPE;
4375 l_k_party_rg_rec l_k_party_rg_csr%ROWTYPE;
4376
4377 ----------------------------------------------------------------------------
4378 --cursors to fetch rule values
4379 ----------------------------------------------------------------------------
4380 cursor l_rul_csr (p_rul_code in varchar2,
4381 p_rgp_id in number,
4382 p_chr_id in number) is
4383 select rule_information1,
4384 rule_information2,
4385 rule_information3,
4386 rule_information4,
4387 rule_information5,
4388 rule_information6,
4389 jtot_object1_code,
4390 object1_id1,
4391 object1_id2
4392 from okc_rules_b
4393 where rgp_id = p_rgp_id
4394 and rule_information_category = p_rul_code
4395 and dnz_chr_id = p_chr_id;
4396
4397 --START: rseela 11/28/05 bug#4673593
4398 ----------------------------------------------------------------------------
4399 --cursors to fetch bank account ID
4400 ----------------------------------------------------------------------------
4401 cursor l_bank_acc_csr (p_bank_acc_uses_id in varchar2) is
4402 select rmc.bank_account_id
4403 from OKX_RCPT_METHOD_ACCOUNTS_V rmc
4404 where rmc.id1 = p_bank_acc_uses_id;
4405
4406 --END: rseela 11/28/05 bug#4673593
4407
4408 --sechawla 26-may-09 6826580
4409 CURSOR l_invoice_format_csr(p_invoice_format_id IN NUMBER) IS
4410 SELECT name
4411 FROM okl_invoice_formats_v
4412 WHERE ID = p_invoice_format_id;
4413 l_inv_frmt VARCHAR2(150);
4414
4415 l_pmth_rec l_rul_csr%ROWTYPE;
4416 l_bacc_rec l_rul_csr%ROWTYPE;
4417 l_inpr_rec l_rul_csr%ROWTYPE;
4418 l_invd_rec l_rul_csr%ROWTYPE;
4419
4420 l_payment_method_id Number;
4421 l_bank_account_id Number;
4422 l_inv_reason_for_review Varchar2(450);
4423 l_inv_review_until_date Date;
4424 l_cash_appl_rule_id Number;
4425 l_invoice_format Varchar2(450);
4426 l_review_invoice_yn Varchar2(450);
4427
4428 l_cust_acct_site_id Number;
4429 l_payment_term_id Number;
4430
4431 BEGIN
4432 -- *******************
4433 -- Validate parameters
4434 -- *******************
4435 IF (l_cpl_id IS NULL
4436 OR l_cpl_id = OKL_API.G_MISS_NUM)
4437 AND (l_contract_id IS NULL
4438 OR l_contract_id = OKL_API.G_MISS_NUM) THEN
4439
4440 l_return_status := OKL_API.G_RET_STS_ERROR;
4441 OKL_API.SET_MESSAGE (
4442 p_app_name => G_APP_NAME,
4443 p_msg_name => G_INCOMPLETE_VEND_BILL,
4444 p_token1 => G_ERROR_TYPE_TOKEN,
4445 p_token1_value => 'Program Error : ',
4446 p_token2 => G_PARAMETER_TOKEN,
4447 p_token2_value => 'Contract Party Identifier and Contract identifier'
4448 );
4449
4450 END IF;
4451
4452 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4453 IF l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR THEN
4454 l_overall_status := l_return_status;
4455 END IF;
4456 END IF;
4457
4458 -- ***************
4459 -- Find Rule Group
4460 -- ***************
4461
4462 IF l_overall_status = OKL_API.G_RET_STS_SUCCESS THEN
4463
4464 IF l_cpl_id IS NOT NULL
4465 AND l_cpl_id <> OKL_API.G_MISS_NUM THEN
4466
4467 OPEN l_k_party_rg_csr (l_cpl_id);
4468 FETCH l_k_party_rg_csr INTO l_k_party_rg_rec;
4469 CLOSE l_k_party_rg_csr;
4470 l_rgd_id := l_k_party_rg_rec.rgd_id;
4471
4472 l_bill_to_site_use_id := l_k_party_rg_rec.bill_to_site_use_id ;
4473 l_cust_acct_id := l_k_party_rg_rec.cust_acct_id;
4474
4475 IF l_k_party_rg_rec.cpl_id IS NULL THEN
4476 l_return_status := OKL_API.G_RET_STS_ERROR;
4477 OKL_API.SET_MESSAGE (
4478 p_app_name => G_APP_NAME,
4479 p_msg_name => G_INCOMPLETE_VEND_BILL,
4480 p_token1 => G_ERROR_TYPE_TOKEN,
4481 p_token1_value => 'Program Error : ',
4482 p_token2 => G_PARAMETER_TOKEN,
4483 p_token2_value => 'Contract Party Identifier'
4484 );
4485 ELSIF l_k_party_rg_rec.bill_to_site_use_id IS NULL THEN
4486 ----------------------------------------------------------------
4487 --Try to fetch billing details from vendor program if lease
4488 --and vp verndor are the same
4489 ----------------------------------------------------------------
4490 If l_contract_id is not null
4491 and l_contract_id <> OKL_API.G_MISS_NUM
4492 Then
4493 --Open vendor program cursor
4494 OPEN l_partner_rg_csr (l_contract_id, l_k_party_rg_rec.object1_id1);
4495 FETCH l_partner_rg_csr INTO l_khr_id,
4496 l_par_id,
4497 l_rgd_id,
4498 l_bill_to_site_use_id,
4499 -- l_party_role, -- modified by zrehman to fix Bug#6341517 on 27-Feb-2008
4500 l_cust_acct_id;
4501 CLOSE l_partner_rg_csr;
4502
4503 ------------------------------------------------------------
4504 --not to raise this ambiguous error when VP does not exist
4505 --If (l_khr_id is null) OR (l_par_id is null) then
4506 -- l_return_status := OKL_API.G_RET_STS_ERROR;
4507 -- OKL_API.SET_MESSAGE (
4508 -- p_app_name => G_APP_NAME,
4509 -- p_msg_name => G_INCOMPLETE_VEND_BILL,
4510 -- p_token1 => G_ERROR_TYPE_TOKEN,
4511 -- p_token1_value => 'Program Error : ',
4512 -- p_token2 => G_PARAMETER_TOKEN,
4513 -- p_token2_value => 'Contract Header Identifier'
4514 -- );
4515 -- Els
4516 --not to raise this ambiguous error when VP does not exist
4517 -------------------------------------------------------------
4518 If l_bill_to_site_use_id is null then
4519
4520 l_return_status := OKL_API.G_RET_STS_ERROR;
4521 OKL_API.SET_MESSAGE (
4522 p_app_name => G_APP_NAME,
4523 p_msg_name => G_INCOMPLETE_VEND_BILL,
4524 p_token1 => G_ERROR_TYPE_TOKEN,
4525 p_token1_value => 'Billing setup not defined.',
4526 p_token2 => G_PARAMETER_TOKEN,
4527 p_token2_value => 'Bill to Site'
4528 );
4529 End If;
4530 ---------------------------------------------------------------
4531 --End of trying to fetch billing details from VP
4532 ---------------------------------------------------------------
4533 Else
4534 l_return_status := OKL_API.G_RET_STS_ERROR;
4535 OKL_API.SET_MESSAGE (
4536 p_app_name => G_APP_NAME,
4537 p_msg_name => G_INCOMPLETE_VEND_BILL,
4538 p_token1 => G_ERROR_TYPE_TOKEN,
4539 p_token1_value => '',
4540 p_token2 => G_PARAMETER_TOKEN,
4541 p_token2_value => 'Bill to Site'
4542 );
4543
4544 End If;
4545 END IF;
4546 ELSE
4547 --exception cpl_id passed is null
4548 l_return_status := OKL_API.G_RET_STS_ERROR;
4549 OKL_API.SET_MESSAGE (
4550 p_app_name => G_APP_NAME,
4551 p_msg_name => G_INCOMPLETE_VEND_BILL,
4552 p_token1 => G_ERROR_TYPE_TOKEN,
4553 p_token1_value => 'Program Error : ',
4554 p_token2 => G_PARAMETER_TOKEN,
4555 p_token2_value => 'Contract Party Identifier'
4556 );
4557
4558 END IF;
4559 END IF;
4560
4561 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4562 IF l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR THEN
4563 l_overall_status := l_return_status;
4564 END IF;
4565 END IF;
4566
4567
4568 IF l_overall_status = OKL_API.G_RET_STS_SUCCESS THEN
4569
4570 --------------------------------------------
4571 --1. Get payment method
4572 --------------------------------------------
4573 open l_rul_csr (p_rul_code => 'LAPMTH',
4574 p_rgp_id => l_rgd_id,
4575 p_chr_id => l_contract_id);
4576 Fetch l_rul_csr into l_pmth_rec;
4577 If l_rul_csr%NOTFOUND then
4578 l_payment_method_id := null;
4579 Else
4580 IF l_pmth_rec.object1_id2 <> '#' THEN
4581 l_payment_method_id := l_pmth_rec.object1_id2;
4582 ELSE
4583 -- This cursor needs to be removed when
4584 -- the view changes to include id2
4585 OPEN l_rcpt_mthd_csr (l_pmth_rec.object1_id1);
4586 FETCH l_rcpt_mthd_csr INTO l_payment_method_id;
4587 CLOSE l_rcpt_mthd_csr;
4588 END IF;
4589 End If;
4590 close l_rul_csr;
4591
4592 --------------------------------------------
4593 --2. Get bank account
4594 --------------------------------------------
4595 open l_rul_csr (p_rul_code => 'LABACC',
4596 p_rgp_id => l_rgd_id,
4597 p_chr_id => l_contract_id);
4598 Fetch l_rul_csr into l_bacc_rec;
4599 If l_rul_csr%NOTFOUND then
4600 l_bank_account_id := null;
4601 Else
4602 --START: rseela 11/28/05 bug#4673593
4603 open l_bank_acc_csr(TO_NUMBER(l_bacc_rec.object1_id1));
4604 fetch l_bank_acc_csr into l_bank_account_id;
4605 close l_bank_acc_csr;
4606 -- l_bank_account_id := l_bacc_rec.object1_id1;
4607 --END: rseela 11/28/05 bug#4673593
4608
4609 End If;
4610 close l_rul_csr;
4611
4612
4613 --------------------------------------------
4614 --3. Get invoice pull for review
4615 --------------------------------------------
4616 open l_rul_csr (p_rul_code => 'LAINPR',
4617 p_rgp_id => l_rgd_id,
4618 p_chr_id => l_contract_id);
4619 Fetch l_rul_csr into l_inpr_rec;
4620 If l_rul_csr%NOTFOUND then
4621 l_inv_reason_for_review := null;
4622 l_inv_review_until_date := null;
4623 Else
4624 l_inv_reason_for_review := l_inpr_rec.rule_information1;
4625 l_inv_review_until_date := fnd_date.canonical_to_date(l_inpr_rec.rule_information2);
4626 End If;
4627 close l_rul_csr;
4628
4629 --------------------------------------------
4630 --4. Get invoice details
4631 --------------------------------------------
4632 open l_rul_csr (p_rul_code => 'LAINVD',
4633 p_rgp_id => l_rgd_id,
4634 p_chr_id => l_contract_id);
4635 Fetch l_rul_csr into l_invd_rec;
4636 If l_rul_csr%NOTFOUND then
4637 l_cash_appl_rule_id := null;
4638 l_invoice_format := null;
4639 l_review_invoice_yn := null;
4640 Else
4641 l_cash_appl_rule_id := l_invd_rec.object1_id1;
4642
4643 --sechawla 26-may-09 6826580 : begin
4644 OPEN l_invoice_format_csr(to_number(l_invd_rec.rule_information1));
4645 FETCH l_invoice_format_csr INTO l_inv_frmt;
4646 CLOSE l_invoice_format_csr;
4647 --sechawla 26-may-09 6826580 end
4648
4649 l_invoice_format := l_inv_frmt; --l_invd_rec.rule_information1; --sechawla 26-may-09 6826580
4650
4651 l_review_invoice_yn := l_invd_rec.rule_information4;
4652 End If;
4653 close l_rul_csr;
4654
4655 END IF;
4656
4657
4658 -- *****************************************************
4659 -- Extract Customer, Bill To and Payment Term from rules
4660 -- *****************************************************
4661
4662 IF l_overall_status = OKL_API.G_RET_STS_SUCCESS THEN
4663
4664 OPEN l_site_use_csr (l_bill_to_site_use_id, 'BILL_TO');
4665 FETCH l_site_use_csr INTO l_site_use_rec;
4666 CLOSE l_site_use_csr;
4667
4668 l_cust_acct_site_id := l_site_use_rec.cust_acct_site_id;
4669 l_payment_term_id := l_site_use_rec.payment_term_id;
4670
4671 IF l_payment_term_id IS NULL
4672 OR l_payment_term_id = OKL_API.G_MISS_NUM THEN
4673 OPEN l_std_terms_csr (
4674 l_site_use_rec.cust_account_id,
4675 l_bill_to_site_use_id);
4676 FETCH l_std_terms_csr INTO l_payment_term_id;
4677 CLOSE l_std_terms_csr;
4678 END IF;
4679
4680 END IF;
4681
4682 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4683 IF l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR THEN
4684 l_overall_status := l_return_status;
4685 END IF;
4686 END IF;
4687
4688 -- ****************
4689 -- Validate Results
4690 -- ****************
4691
4692 IF l_overall_status = OKL_API.G_RET_STS_SUCCESS THEN
4693
4694 --IF px_taiv_rec.ixx_id IS NULL
4695 --OR px_taiv_rec.ixx_id = G_MISS_NUM THEN
4696 IF l_cust_acct_id IS NULL
4697 OR l_cust_acct_id = OKL_API.G_MISS_NUM THEN
4698
4699 l_return_status := OKL_API.G_RET_STS_ERROR;
4700 OKL_API.SET_MESSAGE (
4701 p_app_name => G_APP_NAME,
4702 p_msg_name => G_INCOMPLETE_VEND_BILL,
4703 p_token1 => G_ERROR_TYPE_TOKEN,
4704 p_token1_value => '',
4705 p_token2 => G_PARAMETER_TOKEN,
4706 p_token2_value => 'Customer Account'
4707 );
4708
4709 END IF;
4710
4711 --IF px_taiv_rec.ibt_id IS NULL
4712 --OR px_taiv_rec.ibt_id = G_MISS_NUM THEN
4713 IF l_cust_acct_site_id IS NULL
4714 OR l_cust_acct_site_id = OKL_API.G_MISS_NUM THEN
4715 l_return_status := OKL_API.G_RET_STS_ERROR;
4716 OKL_API.SET_MESSAGE (
4717 p_app_name => G_APP_NAME,
4718 p_msg_name => G_INCOMPLETE_VEND_BILL,
4719 p_token1 => G_ERROR_TYPE_TOKEN,
4720 p_token1_value => '',
4721 p_token2 => G_PARAMETER_TOKEN,
4722 p_token2_value => 'Customer Account Site'
4723 );
4724 END IF;
4725
4726 --IF px_taiv_rec.irt_id IS NULL
4727 --OR px_taiv_rec.irt_id = G_MISS_NUM THEN
4728 IF l_payment_term_id IS NULL
4729 OR l_payment_term_id = OKL_API.G_MISS_NUM THEN
4730 l_return_status := OKL_API.G_RET_STS_ERROR;
4731 OKL_API.SET_MESSAGE (
4732 p_app_name => G_APP_NAME,
4733 p_msg_name => G_INCOMPLETE_VEND_BILL,
4734 p_token1 => G_ERROR_TYPE_TOKEN,
4735 p_token1_value => '',
4736 p_token2 => G_PARAMETER_TOKEN,
4737 p_token2_value => 'Payment Term'
4738 );
4739 END IF;
4740
4741 END IF;
4742
4743 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4744 IF l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR THEN
4745 l_overall_status := l_return_status;
4746 END IF;
4747 END IF;
4748
4749 x_bill_to_site_use_id := l_bill_to_site_use_id;
4750 x_cust_acct_id := l_cust_acct_id;
4751 --
4752 x_payment_method_id := l_payment_method_id;
4753 x_bank_account_id := l_bank_account_id;
4754 x_inv_reason_for_review := l_inv_reason_for_review;
4755 x_inv_review_until_date := l_inv_review_until_date;
4756 x_cash_appl_rule_id := l_cash_appl_rule_id;
4757 x_invoice_format := l_invoice_format;
4758 x_review_invoice_yn := l_review_invoice_yn;
4759 --
4760 x_cust_acct_site_id := l_cust_acct_site_id;
4761 x_payment_term_id := l_payment_term_id;
4762
4763 x_return_status := l_overall_status;
4764
4765 EXCEPTION
4766
4767 WHEN OTHERS THEN
4768
4769 -- close open cursors
4770 IF l_k_party_rg_csr%ISOPEN THEN
4771 CLOSE l_k_party_rg_csr;
4772 END IF;
4773
4774 IF l_partner_rg_csr%ISOPEN THEN
4775 CLOSE l_partner_rg_csr;
4776 END IF;
4777
4778 IF l_rcpt_mthd_csr%ISOPEN THEN
4779 CLOSE l_rcpt_mthd_csr;
4780 END IF;
4781
4782 IF l_site_use_csr%ISOPEN THEN
4783 CLOSE l_site_use_csr;
4784 END IF;
4785
4786 IF l_std_terms_csr%ISOPEN THEN
4787 CLOSE l_std_terms_csr;
4788 END IF;
4789
4790 IF l_rul_csr%ISOPEN THEN
4791 CLOSE l_rul_csr;
4792 END IF;
4793
4794 -- store SQL error message on message stack for caller
4795 OKL_API.SET_MESSAGE (
4796 p_app_name => G_APP_NAME
4797 ,p_msg_name => G_UNEXPECTED_ERROR
4798 ,p_token1 => G_SQLCODE_TOKEN
4799 ,p_token1_value => sqlcode
4800 ,p_token2 => G_SQLERRM_TOKEN
4801 ,p_token2_value => sqlerrm);
4802
4803
4804 -- notify caller of an UNEXPECTED error
4805 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
4806
4807 END Get_Vendor_Billing_Info;
4808
4809 -- Start of comments
4810 --
4811 -- Function Name : Get_Trx_Type_Id
4812 -- Description : Local function to fetch trx_type_id (try_id)
4813 -- Business Rules :
4814 -- Parameters : p_trx_type - trx type name
4815 -- p_lang - language
4816 -- History :
4817 -- Version : 1.0
4818 -- End of comments
4819
4820 Function Get_trx_type_id (p_trx_type in varchar2,
4821 p_lang in varchar2) return number is
4822
4823
4824 -- Cursor to get the try_id for the name passed
4825 CURSOR l_try_id_csr (
4826 cp_try_name IN VARCHAR2,
4827 cp_language IN VARCHAR2) IS
4828 SELECT id
4829 FROM okl_trx_types_tl t
4830 WHERE Upper (t.name) LIKE Upper (cp_try_name)
4831 AND t.language = Upper (cp_language);
4832
4833 l_try_id number default null;
4834 begin
4835 l_try_id := Null;
4836 open l_try_id_csr (cp_try_name => p_trx_type,
4837 cp_language => p_lang);
4838 Fetch l_try_id_csr into l_try_id;
4839 If l_try_id_csr%NOTFOUND then
4840 NULL;
4841 End If;
4842 close l_try_id_csr;
4843 return(l_try_id);
4844 Exception
4845 When others then
4846 If l_try_id_csr%ISOPEN then
4847 CLOSE l_try_id_csr;
4848 End If;
4849 OKL_API.SET_MESSAGE( p_app_name => G_APP_NAME
4850 ,p_msg_name => G_UNEXPECTED_ERROR
4851 ,p_token1 => G_SQLCODE_TOKEN
4852 ,p_token1_value => SQLCODE
4853 ,p_token2 => G_SQLERRM_TOKEN
4854 ,p_token2_value => SQLERRM);
4855 Return(l_try_id);
4856 end Get_trx_type_id;
4857
4858 -- varangan - Bug#5474059 - Added - Start
4859 -- Start of comments
4860 -- Procedure Name : insert_billing_records
4861 -- Description : Code in this API was intially part of the procedure
4862 -- Create_Billing_Trx. Creates billing transaction
4863 -- records for subsidies
4864 -- PARAMETERS : IN - p_asdv_tbl : Table of records with subsidy details
4865 -- Created varangan
4866 -- End of comments
4867 PROCEDURE insert_billing_records
4868 (p_api_version IN NUMBER
4869 , p_init_msg_list IN VARCHAR2
4870 , x_return_status OUT NOCOPY VARCHAR2
4871 , x_msg_count OUT NOCOPY NUMBER
4872 , x_msg_data OUT NOCOPY VARCHAR2
4873 , p_chr_id IN NUMBER
4874 , p_asdv_tbl IN asbv_tbl_type) IS
4875 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
4876 l_api_name CONSTANT varchar2(30) := 'insert_billing_records';
4877 l_api_version CONSTANT NUMBER := 1.0;
4878
4879 l_asdv_tbl asbv_tbl_type DEFAULT p_asdv_tbl;
4880 l_asdv_tbl_proc asbv_tbl_type;
4881 i number;
4882 j number;
4883
4884 --30-Oct-03 avsingh : cursor corrected for same vendor match at
4885 --model line level
4886 --cursor to verify theat asset and subsidy vendors are the same
4887 cursor l_samevend_csr(p_vendor_id in number,
4888 p_asset_cle_id in number,
4889 p_chr_id in number) is
4890 Select 'Y'
4891 From okc_k_party_roles_b cplb,
4892 okc_k_lines_b cleb,
4893 okc_line_styles_b lseb
4894 where cplb.cle_id = cleb.id
4895 and cleb.cle_id = p_asset_cle_id
4896 and lseb.id = cleb.lse_id
4897 and lseb.lty_code = 'ITEM'
4898 and cplb.dnz_chr_id = p_chr_id
4899 and cplb.object1_id1 = to_char(p_vendor_id)
4900 and cplb.object1_id2 = '#'
4901 and cplb.jtot_object1_code = 'OKX_VENDOR'
4902 and cplb.rle_code = 'OKL_VENDOR';
4903
4904 l_exists varchar2(1) default'N';
4905 -- varangan - Billing Enhancement changes- Bug#5874824 - begin
4906
4907 /* l_taiv_rec okl_trx_ar_invoices_pub.taiv_rec_type;
4908 l_tilv_rec okl_txl_ar_inv_lns_pub.tilv_rec_type;
4909 l_bpd_acc_rec okl_acc_call_pub.bpd_acc_rec_type;
4910
4911 lx_taiv_rec okl_trx_ar_invoices_pub.taiv_rec_type;
4912 lx_tilv_rec okl_txl_ar_inv_lns_pub.tilv_rec_type;
4913 lx_bpd_acc_rec okl_acc_call_pub.bpd_acc_rec_type;
4914 */
4915
4916 -----------------------------------------------------------
4917 -- Variables for billing API call
4918 -----------------------------------------------------------
4919 lp_taiv_rec okl_tai_pvt.taiv_rec_type;
4920 lp_tilv_rec okl_til_pvt.tilv_rec_type;
4921 lp_tilv_tbl okl_til_pvt.tilv_tbl_type;
4922 lp_tldv_tbl okl_tld_pvt.tldv_tbl_type;
4923
4924 lx_taiv_rec okl_tai_pvt.taiv_rec_type;
4925 lx_tilv_tbl okl_til_pvt.tilv_tbl_type;
4926 lx_tldv_tbl okl_tld_pvt.tldv_tbl_type;
4927
4928 --Varangan - Billing Enhancement changes - Bug#5874824 - End
4929 l_bill_to_site_use_id OKC_K_HEADERS_B.bill_to_site_use_id%TYPE;
4930 l_cust_acct_id OKC_K_PARTY_ROLES_B.cust_acct_id%TYPE;
4931 l_payment_method_id Number;
4932 l_bank_account_id Number;
4933 l_inv_reason_for_review Varchar2(450);
4934 l_inv_review_until_date Date;
4935 l_cash_appl_rule_id Number;
4936 l_invoice_format Varchar2(450);
4937 l_review_invoice_yn Varchar2(450);
4938
4939 l_cust_acct_site_id Number;
4940 l_payment_term_id Number;
4941
4942 --cursor to get vendor cpl_id at header level
4943 cursor l_chrcpl_csr (p_vendor_id in number,
4944 p_chr_id in number) is
4945 select cplb.id
4946 from okc_k_party_roles_b cplb
4947 where cplb.chr_id = p_chr_id
4948 and cplb.dnz_chr_id = p_chr_id
4949 and cplb.cle_id is null
4950 and cplb.object1_id1 = to_char(p_vendor_id)
4951 and cplb.object1_id2 = '#'
4952 and cplb.jtot_object1_code = 'OKX_VENDOR'
4953 and cplb.rle_code = 'OKL_VENDOR';
4954
4955 l_chr_cpl_id number;
4956 l_try_id number;
4957 l_chr_id number DEFAULT p_chr_id;
4958
4959 BEGIN
4960
4961 x_return_status := OKL_API.G_RET_STS_SUCCESS;
4962 -- Call start_activity to create savepoint, check compatibility
4963 -- and initialize message list
4964 x_return_status := OKL_API.START_ACTIVITY (
4965 l_api_name
4966 ,p_init_msg_list
4967 ,'_PVT'
4968 ,x_return_status);
4969 -- Check if activity started successfully
4970 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4971 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4972 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4973 RAISE OKL_API.G_EXCEPTION_ERROR;
4974 END IF;
4975
4976 IF l_asdv_tbl.COUNT = 0 Then
4977 Null;
4978 Else
4979 -------------------------------------------------------------------------
4980 --find out subsidy records for which billing transaction is to be created
4981 -------------------------------------------------------------------------
4982 j := 1;
4983 FOR i in l_asdv_tbl.FIRST..l_asdv_tbl.LAST
4984 LOOP
4985 --Removed OR condition for bug 7664571
4986 If (l_asdv_tbl(i).receipt_method_code = 'BILL') Then
4987 -- OR clause added as only discounts('NET') can be FUNDED
4988 l_asdv_tbl_proc(j) := l_asdv_tbl(i);
4989 j:= j+1;
4990 ElsIf (l_asdv_tbl(i).receipt_method_code = 'FUND') AND
4991 (l_asdv_tbl(i).accounting_method_code IN('NET', 'AMORTIZE')) then
4992 --Added 'AMORTIZE' for bug 7664571
4993 -- AND clause added as only discounts ('NET') can be funded
4994
4995 ------------------------------------------------------------
4996 --find out if asset vendor and subsidy vendor are the same
4997 --becuase only then net from funding can be done. If not same
4998 --then 'BILL' irrespective of receipt method
4999 ------------------------------------------------------------
5000 l_exists := 'N';
5001 Open l_samevend_csr(p_vendor_id => l_asdv_tbl(i).vendor_id,
5002 p_asset_cle_id => l_asdv_tbl(i).asset_cle_id,
5003 p_chr_id => l_chr_id);
5004 Fetch l_samevend_csr into l_exists;
5005 If l_samevend_csr%NOTFOUND then
5006 null;
5007 End If;
5008 Close l_samevend_csr;
5009
5010 If l_exists = 'N' Then
5011 l_asdv_tbl_proc(j) := l_asdv_tbl(i);
5012 j := j+1;
5013 End If;
5014 End If;
5015 End Loop;
5016
5017 ------------------------------------------------------------------------
5018 --If there are records to process then create billing trx
5019 ------------------------------------------------------------------------
5020 If l_asdv_tbl_proc.COUNT > 0 Then
5021 For i in l_asdv_tbl_proc.FIRST..l_asdv_tbl_proc.LAST Loop
5022 -- Varangan - Billing Enhancement changes - Bug#5874824 - Begin
5023 lp_taiv_rec.khr_id := l_asdv_tbl_proc(i).dnz_chr_id;
5024 lp_taiv_rec.description := l_asdv_tbl_proc(i).description;
5025 lp_taiv_rec.currency_code := l_asdv_tbl_proc(i).currency_code;
5026 lp_taiv_rec.date_invoiced := l_asdv_tbl_proc(i).start_date; --check whether it is ok to give this
5027 lp_taiv_rec.amount := l_asdv_tbl_proc(i).amount;
5028
5029 -- Varangan - Billing Enhancement changes - Bug#5874824 - End
5030 --l_taiv_rec.qte_id := p_quote_id;
5031
5032 /*l_taiv_rec.currency_conversion_type := l_qte_rec.currency_conversion_type;
5033 l_taiv_rec.currency_conversion_rate := l_qte_rec.currency_conversion_rate;
5034 l_taiv_rec.currency_conversion_date := l_qte_rec.currency_conversion_date;
5035 */
5036 --------------------------------------------------------------------
5037 --Get vendor billing information for the transaction
5038 --------------------------------------------------------------------
5039 --fetch contract header cpl_id
5040 open l_chrcpl_csr (p_vendor_id => l_asdv_tbl_proc(i).vendor_id,
5041 p_chr_id => l_chr_id);
5042 Fetch l_chrcpl_csr into l_chr_cpl_id;
5043 If l_chrcpl_csr%NOTFOUND then
5044 NULL;
5045 End If;
5046 Close l_chrcpl_csr;
5047
5048 Get_Vendor_Billing_Info (
5049 p_contract_id => l_chr_id,
5050 p_cpl_id => l_chr_cpl_id,
5051 x_return_status => x_return_status,
5052 x_bill_to_site_use_id => l_bill_to_site_use_id,
5053 x_cust_acct_id => l_cust_acct_id,
5054 x_payment_method_id => l_payment_method_id,
5055 x_bank_account_id => l_bank_account_id,
5056 x_inv_reason_for_review => l_inv_reason_for_review,
5057 x_inv_review_until_date => l_inv_review_until_date,
5058 x_cash_appl_rule_id => l_cash_appl_rule_id,
5059 x_invoice_format => l_invoice_format,
5060 x_review_invoice_yn => l_review_invoice_yn,
5061 x_cust_acct_site_id => l_cust_acct_site_id,
5062 x_payment_term_id => l_payment_term_id);
5063
5064 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5065 OKL_API.SET_MESSAGE (
5066 p_app_name => G_APP_NAME,
5067 p_msg_name => G_VERIFY_VENDOR_BILL,
5068 p_token1 => G_VENDOR_NAME_TOKEN,
5069 p_token1_value => l_asdv_tbl_proc(i).vendor_name
5070 );
5071 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5072 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5073 OKL_API.SET_MESSAGE (
5074 p_app_name => G_APP_NAME,
5075 p_msg_name => G_VERIFY_VENDOR_BILL,
5076 p_token1 => G_VENDOR_NAME_TOKEN,
5077 p_token1_value => l_asdv_tbl_proc(i).vendor_name
5078 );
5079 RAISE OKL_API.G_EXCEPTION_ERROR;
5080 END IF;
5081 -- Varangan - Billing Enhancement changes - Bug#5874824 - Begin
5082 lp_taiv_rec.ibt_id := l_cust_acct_site_id;
5083 lp_taiv_rec.ixx_id := l_cust_acct_id;
5084 lp_taiv_rec.irt_id := l_payment_term_id;
5085 lp_taiv_rec.irm_id := l_payment_method_id;
5086 -- Varangan - Billing Enhancement changes - Bug#5874824 - End
5087 --function to fetch try_id
5088 l_try_id := Get_trx_type_id(p_trx_type => G_AR_INV_TRX_TYPE,
5089 p_lang => 'US');
5090 If l_try_id is null then
5091 x_return_status := OKL_API.G_RET_STS_ERROR;
5092 OKL_API.SET_MESSAGE (
5093 p_app_name => G_APP_NAME,
5094 p_msg_name => G_REQUIRED_VALUE,
5095 p_token1 => G_COL_NAME_TOKEN,
5096 p_token1_value => 'Transaction Type');
5097 RAISE OKL_API.G_EXCEPTION_ERROR;
5098 End If;
5099 -- Varangan - Billing Enhancement changes - Bug#5874824 - Begin
5100 lp_taiv_rec.try_id := l_try_id;
5101 lp_taiv_rec.trx_status_code := G_SUBMIT_STATUS;
5102 lp_taiv_rec.date_entered := sysdate;
5103
5104 lp_taiv_rec.OKL_SOURCE_BILLING_TRX := G_SOURCE_BILLING_TRX_BOOK;
5105
5106 -- Populate the Line record
5107 lp_tilv_rec.amount := l_asdv_tbl_proc(i).amount;
5108 -- varangan - Bug#5474059 - Modified - Start
5109 -- Passing KLE_ID as subsidy line id to track the subsidy records during rebook
5110 lp_tilv_rec.kle_id := l_asdv_tbl_proc(i).subsidy_cle_id;
5111
5112 lp_tilv_rec.description := l_asdv_tbl_proc(i).description;
5113 lp_tilv_rec.sty_id := l_asdv_tbl_proc(i).stream_type_id;
5114 lp_tilv_rec.line_number := i;
5115 lp_tilv_rec.inv_receiv_line_code := G_AR_INV_LINE_CODE;
5116 -- Bug# 4673593 -- pass bank acc# to internal |
5117 lp_tilv_rec.bank_acct_id := l_bank_account_id;
5118 -- Bug# 4673593 -- pass bank acc# to internal |
5119
5120 lp_tilv_tbl(1) := lp_tilv_rec; -- Assign the line record in tilv_tbl structure
5121
5122 ---------------------------------------------------------------------------
5123 -- Call to Billing Centralized API
5124 ---------------------------------------------------------------------------
5125 okl_internal_billing_pvt.create_billing_trx(p_api_version =>l_api_version,
5126 p_init_msg_list =>p_init_msg_list,
5127 x_return_status => x_return_status,
5128 x_msg_count => x_msg_count,
5129 x_msg_data => x_msg_data,
5130 p_taiv_rec => lp_taiv_rec,
5131 p_tilv_tbl => lp_tilv_tbl,
5132 p_tldv_tbl => lp_tldv_tbl,
5133 x_taiv_rec => lx_taiv_rec,
5134 x_tilv_tbl => lx_tilv_tbl,
5135 x_tldv_tbl => lx_tldv_tbl,
5136 p_cpl_id => l_chr_cpl_id);
5137
5138 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5139 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5140 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5141 RAISE OKL_API.G_EXCEPTION_ERROR;
5142 END IF;
5143
5144
5145
5146 /* -- Commenting the existing code for calling common Billing API
5147
5148 --create internal AR transaction header
5149 okl_trx_ar_invoices_pub.insert_trx_ar_invoices (
5150 p_api_version => p_api_version,
5151 p_init_msg_list => p_init_msg_list,
5152 x_return_status => x_return_status,
5153 x_msg_count => x_msg_count,
5154 x_msg_data => x_msg_data,
5155 p_taiv_rec => l_taiv_rec,
5156 x_taiv_rec => lx_taiv_rec);
5157
5158 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5159 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5160 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5161 RAISE OKL_API.G_EXCEPTION_ERROR;
5162 END IF;
5163
5164
5165 --tilv_record
5166 l_tilv_rec.tai_id := lx_taiv_rec.id;
5167
5168
5169
5170 --create internal AR transaction line
5171 okl_txl_ar_inv_lns_pub.insert_txl_ar_inv_lns (
5172 p_api_version => p_api_version,
5173 p_init_msg_list => p_init_msg_list,
5174 x_return_status => x_return_status,
5175 x_msg_count => x_msg_count,
5176 x_msg_data => x_msg_data,
5177 p_tilv_rec => l_tilv_rec,
5178 x_tilv_rec => lx_tilv_rec);
5179
5180 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5181 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5182 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5183 RAISE OKL_API.G_EXCEPTION_ERROR;
5184 END IF;
5185
5186
5187 --accounting trx
5188 l_bpd_acc_rec.id := lx_tilv_rec.id;
5189 l_bpd_acc_rec.source_table := G_AR_LINES_SOURCE;
5190
5191 -- Create Accounting Distribution
5192 okl_acc_call_pub.create_acc_trans (
5193 p_api_version => p_api_version,
5194 p_init_msg_list => p_init_msg_list,
5195 x_return_status => x_return_status,
5196 x_msg_count => x_msg_count,
5197 x_msg_data => x_msg_data,
5198 p_bpd_acc_rec => l_bpd_acc_rec);
5199
5200 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5201 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5202 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5203 RAISE OKL_API.G_EXCEPTION_ERROR;
5204 END IF; */
5205
5206 -- Varangan - Billing Enhancement changes - Bug#5874824 - End
5207 End Loop;
5208 End If;
5209 End If;
5210
5211 l_asdv_tbl_proc.delete;
5212 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
5213
5214 EXCEPTION
5215 WHEN OKL_API.G_EXCEPTION_ERROR THEN
5216 If l_samevend_csr%ISOPEN then
5217 close l_samevend_csr;
5218 End If;
5219 If l_chrcpl_csr%ISOPEN then
5220 close l_chrcpl_csr;
5221 End If;
5222 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5223 l_api_name,
5224 G_PKG_NAME,
5225 'OKL_API.G_RET_STS_ERROR',
5226 x_msg_count,
5227 x_msg_data,
5228 '_PVT');
5229 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5230 If l_samevend_csr%ISOPEN then
5231 close l_samevend_csr;
5232 End If;
5233 If l_chrcpl_csr%ISOPEN then
5234 close l_chrcpl_csr;
5235 End If;
5236 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5237 l_api_name,
5238 G_PKG_NAME,
5239 'OKL_API.G_RET_STS_UNEXP_ERROR',
5240 x_msg_count,
5241 x_msg_data,
5242 '_PVT');
5243 WHEN OTHERS THEN
5244 If l_samevend_csr%ISOPEN then
5245 close l_samevend_csr;
5246 End If;
5247 If l_chrcpl_csr%ISOPEN then
5248 close l_chrcpl_csr;
5249 End If;
5250 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5251 l_api_name,
5252 G_PKG_NAME,
5253 'OTHERS',
5254 x_msg_count,
5255 x_msg_data,
5256 '_PVT');
5257 END insert_billing_records;
5258 -- varangan - Bug#5474059 - Added - End
5259 --------------------------------------------------------------------------------
5260 --Name : Rebook_Synchronize
5261 --Date : 08-Sep-2003
5262 --Purpose : This will be called during online rebooks to synchronize any
5263 -- changes made on subsidies
5264 --------------------------------------------------------------------------------
5265 PROCEDURE rebook_synchronize(
5266 p_api_version IN NUMBER,
5267 p_init_msg_list IN VARCHAR2,
5268 x_return_status OUT NOCOPY VARCHAR2,
5269 x_msg_count OUT NOCOPY NUMBER,
5270 x_msg_data OUT NOCOPY VARCHAR2,
5271 p_rbk_chr_id in number,
5272 p_orig_chr_id in number
5273 ) is
5274
5275 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
5276 l_api_name CONSTANT varchar2(30) := 'REBOOK_SYNCHRONIZE';
5277 l_api_version CONSTANT NUMBER := 1.0;
5278
5279
5280
5281 --2.cursors to check if any of the subsidy elements have changed
5282 ---------------------------------------------------------------------------
5283 --get subsidy elements from rebook copy contract
5284 ---------------------------------------------------------------------------
5285 cursor l_subelm_rbk_csr(p_chr_id in number) is
5286 select kle.SUBSIDY_ID
5287 ,clet.NAME
5288 ,clet.ITEM_DESCRIPTION
5289 ,kle.AMOUNT
5290 ,kle.SUBSIDY_OVERRIDE_AMOUNT
5291 ,cleb.orig_system_id1
5292 ,cplb.object1_id1 vendor_id
5293 ,cplb.id cpl_id
5294 ,kle.sty_id sty_id
5295 from okl_k_lines kle,
5296 okc_k_lines_tl clet,
5297 okc_k_lines_b cleb,
5298 okc_statuses_b stsb,
5299 okc_line_styles_b lseb,
5300 okc_k_party_roles_b cplb
5301 where kle.id = cleb.id
5302 and clet.id = cleb.id
5303 and clet.language = userenv('LANG')
5304 and cleb.dnz_chr_id = p_chr_id
5305 and cleb.orig_system_id1 is not null
5306 and stsb.code = cleb.sts_code
5307 and stsb.ste_code not in ('CANCELLED')
5308 and lseb.id = cleb.lse_id
5309 and lseb.lty_code = 'SUBSIDY'
5310 and cplb.cle_id = cleb.id
5311 and cplb.rle_code = 'OKL_VENDOR'
5312 and cplb.dnz_chr_id = p_chr_id;
5313
5314 l_subelm_rbk_rec l_subelm_rbk_csr%ROWTYPE;
5315
5316 ---------------------------------------------------------------------------
5317 --get subsidy elements from original contract
5318 ---------------------------------------------------------------------------
5319 cursor l_subelm_orig_csr(p_cle_id in number,
5320 p_chr_id in number) is
5321 select kle.SUBSIDY_ID
5322 ,clet.NAME
5323 ,clet.ITEM_DESCRIPTION
5324 ,kle.AMOUNT
5325 ,kle.SUBSIDY_OVERRIDE_AMOUNT
5326 ,cplb.object1_id1 vendor_id
5327 ,cplb.id cpl_id
5328 ,kle.sty_id sty_id
5329 from okl_k_lines kle,
5330 okc_k_lines_tl clet,
5331 okc_k_lines_b cleb,
5332 okc_statuses_b stsb,
5333 okc_line_styles_b lseb,
5334 okc_k_party_roles_b cplb
5335 where kle.id = cleb.id
5336 and clet.id = cleb.id
5337 and clet.language = userenv('LANG')
5338 and cleb.id = p_cle_id
5339 and cleb.dnz_chr_id = p_chr_id
5340 and stsb.code = cleb.sts_code
5341 and stsb.ste_code not in ('CANCELLED')
5342 and lseb.id = cleb.lse_id
5343 and lseb.lty_code = 'SUBSIDY'
5344 and cplb.cle_id = cleb.id
5345 and cplb.rle_code = 'OKL_VENDOR'
5346 and cplb.dnz_chr_id = p_chr_id;
5347
5348 l_subelm_orig_rec l_subelm_orig_csr%ROWTYPE;
5349
5350 ----------------------------------------------------------
5351 --cursors to get party payment details
5352 ----------------------------------------------------------
5353 cursor l_ppyd_rbk_csr (p_cpl_id in number) is
5354 select ID
5355 ,CPL_ID
5356 ,VENDOR_ID
5357 ,PAY_SITE_ID
5358 ,PAYMENT_TERM_ID
5359 ,PAYMENT_METHOD_CODE
5360 ,PAY_GROUP_CODE
5361 from okl_party_payment_dtls
5362 where cpl_id = p_cpl_id;
5363
5364 l_ppyd_rbk_rec l_ppyd_rbk_csr%ROWTYPE;
5365
5366 cursor l_ppyd_orig_csr (p_cpl_id in number) is
5367 select ID
5368 ,CPL_ID
5369 ,VENDOR_ID
5370 ,PAY_SITE_ID
5371 ,PAYMENT_TERM_ID
5372 ,PAYMENT_METHOD_CODE
5373 ,PAY_GROUP_CODE
5374 from okl_party_payment_dtls
5375 where cpl_id = p_cpl_id;
5376
5377 l_ppyd_orig_rec l_ppyd_orig_csr%ROWTYPE;
5378
5379 ------------------------------------------------------------------------------
5380 --cursor to find out subsidy line which has been deleted
5381 ------------------------------------------------------------------------------
5382 cursor l_del_sub_csr (p_orig_chr_id in number,
5383 p_rbk_chr_id in number) is
5384 select cleb.id cle_id,
5385 cplb.id cpl_id
5386 from okc_k_lines_b cleb,
5387 okc_line_styles_b lseb,
5388 okc_k_party_roles_b cplb
5389 where cleb.dnz_chr_id = p_orig_chr_id
5390 and lseb.id = cleb.lse_id
5391 and lseb.lty_code = 'SUBSIDY'
5392 and cplb.cle_id = cleb.id
5393 and cplb.dnz_chr_id = p_orig_chr_id
5394 and cplb.rle_code = 'OKL_VENDOR'
5395 --Bug# 8766336
5396 and cleb.sts_code <> 'ABANDONED'
5397 --line was deleted from rebook copy :
5398 and not exists (select '1'
5399 from okc_k_lines_b cleb2
5400 where cleb2.orig_system_id1 = cleb.id
5401 and cleb2.dnz_chr_id = p_rbk_chr_id
5402 --Bug# 8766336
5403 and cleb2.sts_code <> 'ABANDONED')
5404 --line is not a new line created during this rebook
5405 and not exists (select '1'
5406 from okc_k_lines_b cleb3
5407 where cleb3.id = cleb.orig_system_id1
5408 and cleb3.dnz_chr_id = p_rbk_chr_id);
5409
5410 l_del_sub_id number;
5411 l_del_cpl_id number;
5412
5413 ------------------------------------------------------------------------------
5414 --cursor to find out new subsidy lines which have been added
5415 ------------------------------------------------------------------------------
5416 cursor l_new_sub_csr (p_chr_id in number) is
5417 select kle.subsidy_id subsidy_id,
5418 cleb.id subsidy_cle_id,
5419 clet.name name,
5420 clet.item_description description,
5421 kle.amount amount,
5422 kle.subsidy_override_amount subsidy_override_amount,
5423 cleb.dnz_chr_id dnz_chr_id,
5424 cleb.cle_id asset_cle_id,
5425 cplb.id cpl_id,
5426 cplb.object1_id1 vendor_id,
5427 cleb.lse_id lse_id,
5428 cleb.display_sequence display_sequence,
5429 cleb.start_date start_date,
5430 cleb.end_date end_date,
5431 cleb.currency_code currency_code,
5432 cleb.sts_code sts_code,
5433 kle.sty_id sty_id,
5434 asst_cleb.orig_system_id1 orig_asst_cle_id,
5435 --Bug# 8677460
5436 kle.orig_contract_line_id orig_contract_line_id
5437 from
5438 okc_k_lines_b asst_cleb,
5439 okc_statuses_b asst_sts,
5440 okc_k_party_roles_b cplb,
5441 okc_k_lines_tl clet,
5442 okl_k_lines kle,
5443 okc_line_styles_b lseb,
5444 okc_k_lines_b cleb
5445
5446 Where asst_cleb.id = cleb.cle_id
5447 And asst_cleb.dnz_chr_id = cleb.dnz_chr_id
5448 And asst_sts.code = asst_cleb.sts_code
5449 And asst_sts.ste_code not in ('HOLD','EXPIRED','TERMINATED','CANCELLED')
5450 And cplb.jtot_object1_code = 'OKX_VENDOR'
5451 And cplb.dnz_chr_id = cleb.dnz_chr_id
5452 And cplb.cle_id = cleb.id
5453 And cplb.rle_code = 'OKL_VENDOR'
5454 And clet.id = cleb.id
5455 And clet.language = userenv('LANG')
5456 And kle.id = cleb.id
5457 And lseb.id = cleb.lse_id
5458 And lseb.lty_code = 'SUBSIDY'
5459 And cleb.dnz_chr_id = p_chr_id
5460 And cleb.orig_system_id1 is null
5461 And asst_cleb.orig_system_id1 is not null
5462 And cleb.sts_code <> 'ABANDONED';
5463
5464 l_new_sub_rec l_new_sub_csr%ROWTYPE;
5465
5466 --cursor to get asset line id if asset line is new
5467 cursor l_cleb_csr (p_orig_cle_id in number) is
5468 select cleb.id
5469 from okc_k_lines_b cleb
5470 where cleb.orig_system_id1 = p_orig_cle_id;
5471
5472 l_asset_cle_id okc_k_lines_b.ID%TYPE;
5473
5474 --record structures for update and delete
5475
5476 l_asst_clev_rec okl_okc_migration_pvt.clev_rec_type;
5477 l_asst_klev_rec okl_contract_pub.klev_rec_type;
5478 lx_asst_clev_rec okl_okc_migration_pvt.clev_rec_type;
5479 lx_asst_klev_rec okl_contract_pub.klev_rec_type;
5480
5481 l_sub_clev_rec okl_okc_migration_pvt.clev_rec_type;
5482 l_sub_klev_rec okl_contract_pub.klev_rec_type;
5483 lx_sub_clev_rec okl_okc_migration_pvt.clev_rec_type;
5484 lx_sub_klev_rec okl_contract_pub.klev_rec_type;
5485
5486
5487 l_cplv_rec okl_okc_migration_pvt.cplv_rec_type;
5488 lx_cplv_rec okl_okc_migration_pvt.cplv_rec_type;
5489
5490
5491 l_pydv_rec okl_pyd_pvt.ppydv_rec_type;
5492 lx_pydv_rec okl_pyd_pvt.ppydv_rec_type;
5493
5494 -- sjalasut, added local variables to support logging. added as part of
5495 -- subsidy pools enhancement
5496 l_module CONSTANT fnd_log_messages.module%TYPE := 'okl.plsql.OKL_SUBSIDY_PROCESS_PVT.REBOOK_SYNCHRONIZE';
5497 l_debug_enabled VARCHAR2(10);
5498 is_debug_statement_on BOOLEAN;
5499
5500 --Bug# 4558486
5501 l_kplv_rec okl_k_party_roles_pvt.kplv_rec_type;
5502 lx_kplv_rec okl_k_party_roles_pvt.kplv_rec_type;
5503
5504 --Bug# 4899328
5505 l_orig_asset_cle_id number;
5506 l_cap_amount number;
5507 l_clev_fin_rec okl_okc_migration_pvt.clev_rec_type;
5508 l_klev_fin_rec okl_contract_pub.klev_rec_type;
5509 lx_clev_fin_rec okl_okc_migration_pvt.clev_rec_type;
5510 lx_klev_fin_rec okl_contract_pub.klev_rec_type;
5511
5512 -- varangan - Bug#5474059 - Added - Start
5513 l_new_asdv_tbl asbv_tbl_type;
5514 l_new_cnt NUMBER DEFAULT 0;
5515 -- varangan - Bug#5474059 - Added - End
5516 begin
5517
5518 x_return_status := OKL_API.G_RET_STS_SUCCESS;
5519 -- Call start_activity to create savepoint, check compatibility
5520 -- and initialize message list
5521 x_return_status := OKL_API.START_ACTIVITY (
5522 l_api_name
5523 ,p_init_msg_list
5524 ,'_PVT'
5525 ,x_return_status);
5526 -- Check if activity started successfully
5527 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5528 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5529 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5530 RAISE OKL_API.G_EXCEPTION_ERROR;
5531 END IF;
5532
5533 -- check if debug is enabled
5534 l_debug_enabled := okl_debug_pub.check_log_enabled;
5535 -- check for logging on STATEMENT level
5536 is_debug_statement_on := okl_debug_pub.check_log_on(l_module,FND_LOG.LEVEL_STATEMENT);
5537
5538 --------------------------------------
5539 --start of input parameter validations
5540 --------------------------------------
5541 --1.validate p_rbk_chr_id
5542 If (p_rbk_chr_id is NULL) or (p_rbk_chr_id = OKL_API.G_MISS_NUM) then
5543 OKL_API.set_message(
5544 p_app_name => G_APP_NAME,
5545 p_msg_name => G_API_MISSING_PARAMETER,
5546 p_token1 => G_API_NAME_TOKEN,
5547 p_token1_value => l_api_name,
5548 p_token2 => G_MISSING_PARAM_TOKEN,
5549 p_token2_value => 'p_rbk_chr_id');
5550 x_return_status := OKL_API.G_RET_STS_ERROR;
5551 Raise OKL_API.G_EXCEPTION_ERROR;
5552 Elsif (p_rbk_chr_id is not NULL) and (p_rbk_chr_id <> OKL_API.G_MISS_NUM) then
5553 validate_chr_id(p_chr_id => p_rbk_chr_id,
5554 x_return_status => x_return_status);
5555 IF x_return_status = OKL_API.G_RET_STS_ERROR then
5556 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_rbk_chr_id');
5557 Raise OKL_API.G_EXCEPTION_ERROR;
5558 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
5559 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5560 End If;
5561 End If;
5562 --2.validate p_orig_chr_id
5563 If (p_orig_chr_id is NULL) or (p_orig_chr_id = OKL_API.G_MISS_NUM) then
5564 OKL_API.set_message(
5565 p_app_name => G_APP_NAME,
5566 p_msg_name => G_API_MISSING_PARAMETER,
5567 p_token1 => G_API_NAME_TOKEN,
5568 p_token1_value => l_api_name,
5569 p_token2 => G_MISSING_PARAM_TOKEN,
5570 p_token2_value => 'p_orig_chr_id');
5571 x_return_status := OKL_API.G_RET_STS_ERROR;
5572 Raise OKL_API.G_EXCEPTION_ERROR;
5573 Elsif (p_orig_chr_id is not NULL) and (p_orig_chr_id <> OKL_API.G_MISS_NUM) then
5574 validate_chr_id(p_chr_id => p_orig_chr_id,
5575 x_return_status => x_return_status);
5576 IF x_return_status = OKL_API.G_RET_STS_ERROR then
5577 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_orig_chr_id');
5578 Raise OKL_API.G_EXCEPTION_ERROR;
5579 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
5580 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5581 End If;
5582 End If;
5583 -------------------------------------
5584 --end of input parameter validations
5585 ------------------------------------
5586 /*
5587 * sjalasut, added code here to call synchornization of subsidy pool transactions
5588 * before synchronizing the subsidy lines. this code is added as part of
5589 * subsidy pools enhancement. START
5590 */
5591 -- write to log
5592 IF(NVL(l_debug_enabled,'N')='Y' AND is_debug_statement_on) THEN
5593 okl_debug_pub.log_debug(FND_LOG.LEVEL_STATEMENT,
5594 l_module,
5595 'invoking OKL_SUBSIDY_POOL_AUTH_TRX_PVT.create_pool_trx_khr_rbk'||
5596 ' p_rbk_chr_id '||p_rbk_chr_id||' p_orig_chr_id '||p_orig_chr_id
5597 );
5598 END IF; -- end of NVL(l_debug_enabled,'N')='Y' AND is_debug_statement_on
5599
5600 OKL_SUBSIDY_POOL_AUTH_TRX_PVT.create_pool_trx_khr_rbk(p_api_version => p_api_version
5601 ,p_init_msg_list => p_init_msg_list
5602 ,x_return_status => x_return_status
5603 ,x_msg_count => x_msg_count
5604 ,x_msg_data => x_msg_data
5605 ,p_rbk_chr_id => p_rbk_chr_id
5606 ,p_orig_chr_id => p_orig_chr_id
5607 );
5608 -- write to log
5609 IF(NVL(l_debug_enabled,'N')='Y' AND is_debug_statement_on) THEN
5610 okl_debug_pub.log_debug(FND_LOG.LEVEL_STATEMENT,
5611 l_module,
5612 'OKL_SUBSIDY_POOL_AUTH_TRX_PVT.create_pool_trx_khr_rbk returned with status '||x_return_status||
5613 ' x_msg_data '||x_msg_data
5614 );
5615 END IF; -- end of NVL(l_debug_enabled,'N')='Y' AND is_debug_statement_on
5616
5617 IF(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)THEN
5618 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5619 ELSIF(x_return_status = OKL_API.G_RET_STS_ERROR)THEN
5620 RAISE OKL_API.G_EXCEPTION_ERROR;
5621 END IF;
5622
5623 /*
5624 * sjalasut, added code here to call synchornization of subsidy pool transactions
5625 * before synchronizing the subsidy lines. this code is added as part of
5626 * subsidy pools enhancement. END
5627 */
5628
5629 -----------------------------------------------------------------------------
5630 --A. Synchronize subsidized amounts on the financial asset lines
5631 -----------------------------------------------------------------------------
5632 --This code(Part A) is promoted to rebook api as asset lines are being synched there
5633
5634 ----------------------------------------------------------------------------
5635 --B. Sunchronize subsidy line attributes
5636 ----------------------------------------------------------------------------
5637 --1. Fetch subsidy line attributes for the rebook copy
5638 Open l_subelm_rbk_csr(p_chr_id => p_rbk_chr_id);
5639 Loop
5640 Fetch l_subelm_rbk_csr into l_subelm_rbk_rec;
5641 Exit when l_subelm_rbk_csr%NOTFOUND;
5642 --2. Fetch subsidy line attributes for original contract
5643 Open l_subelm_orig_csr(p_cle_id => l_subelm_rbk_rec.orig_system_id1,
5644 p_chr_id => p_orig_chr_id);
5645 Fetch l_subelm_orig_csr into l_subelm_orig_rec;
5646 If l_subelm_orig_csr%NOTFOUND then
5647 Null;
5648 Else
5649 --3. syncronize subsidy line attributes in case of differences
5650 If (nvl(l_subelm_orig_rec.amount,0) <> nvl(l_subelm_rbk_rec.Amount,0)) OR
5651 (nvl(l_subelm_orig_rec.subsidy_override_amount,0) <> nvl(l_subelm_rbk_rec.subsidy_override_Amount,0)) OR
5652 (l_subelm_orig_rec.subsidy_id <> l_subelm_rbk_rec.subsidy_id) OR
5653 (l_subelm_orig_rec.sty_id <> l_subelm_rbk_rec.sty_id) Then
5654
5655 l_sub_clev_rec.id := l_subelm_rbk_rec.orig_system_id1;
5656 l_sub_klev_rec.id := l_subelm_rbk_rec.orig_system_id1;
5657 l_sub_klev_rec.Amount := l_subelm_rbk_rec.Amount;
5658 l_sub_klev_rec.Subsidy_override_Amount := l_subelm_rbk_rec.Subsidy_override_Amount;
5659 l_sub_klev_rec.Subsidy_id := l_subelm_rbk_rec.Subsidy_id;
5660 l_sub_clev_rec.Name := l_subelm_rbk_rec.Name;
5661 l_sub_clev_rec.item_description := l_subelm_rbk_rec.item_description;
5662 l_sub_klev_rec.sty_id := l_subelm_rbk_rec.sty_id;
5663
5664 --dbms_output.put_line('Amount before updating line '||to_char(l_sub_klev_rec.Amount));
5665 okl_contract_pub.update_contract_line
5666 (p_api_version => p_api_version,
5667 p_init_msg_list => p_init_msg_list,
5668 x_return_status => x_return_status,
5669 x_msg_count => x_msg_count,
5670 x_msg_data => x_msg_data,
5671 p_clev_rec => l_sub_clev_rec,
5672 p_klev_rec => l_sub_klev_rec,
5673 x_clev_rec => lx_sub_clev_rec,
5674 x_klev_rec => lx_sub_klev_rec);
5675
5676 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5677 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5678 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5679 RAISE OKL_API.G_EXCEPTION_ERROR;
5680 END IF;
5681
5682 --Bug# 4899328 : Recalculate OEC and capital amount and update financial asset line
5683 l_orig_asset_cle_id := lx_sub_clev_rec.cle_id;
5684 OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
5685 p_init_msg_list => p_init_msg_list,
5686 x_return_status => x_return_status,
5687 x_msg_count => x_msg_count,
5688 x_msg_data => x_msg_data,
5689 p_formula_name => G_FORMULA_CAP,
5690 p_contract_id => p_orig_chr_id,
5691 p_line_id => l_orig_asset_cle_id,
5692 x_value => l_cap_amount);
5693
5694 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5695 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5696 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5697 RAISE OKL_API.G_EXCEPTION_ERROR;
5698 END IF;
5699
5700 ----------------------------------------------------------------------
5701 --call api to update costs on asset line
5702 ----------------------------------------------------------------------
5703 l_clev_fin_rec.id := l_orig_asset_cle_id;
5704 l_klev_fin_rec.id := l_orig_asset_cle_id;
5705 l_klev_fin_rec.capital_amount := l_cap_amount;
5706
5707
5708 okl_contract_pub.update_contract_line
5709 (p_api_version => p_api_version,
5710 p_init_msg_list => p_init_msg_list,
5711 x_return_status => x_return_status,
5712 x_msg_count => x_msg_count,
5713 x_msg_data => x_msg_data,
5714 p_clev_rec => l_clev_fin_rec,
5715 p_klev_rec => l_klev_fin_rec,
5716 x_clev_rec => lx_clev_fin_rec,
5717 x_klev_rec => lx_klev_fin_rec
5718 );
5719
5720 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5721 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5722 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5723 RAISE OKL_API.G_EXCEPTION_ERROR;
5724 END IF;
5725 End If;
5726 --Bug# 4899328
5727
5728 --4. syncronize subsidy party attributes in case of differences
5729 IF (l_subelm_orig_rec.vendor_id <> l_subelm_rbk_rec.vendor_id) Then
5730 Null;
5731 --------------------------------------------------------------
5732 --***(i)Commented as syncing vendor not allowed during rebooks
5733 --as per srawlings: if vendor is to be changed delete the
5734 --subsidy and add a new one
5735 /*------------------------------------------------------------
5736 --l_cplv_rec.id := l_subelm_orig_rec.cpl_id;
5737 --l_cplv_rec.object1_id1 := l_subelm_rbk_rec.vendor_id;
5738
5739 --okl_okc_migration_pvt.update_k_party_role
5740 --(p_api_version => p_api_version,
5741 --p_init_msg_list => p_init_msg_list,
5742 --x_return_status => x_return_status,
5743 --x_msg_count => x_msg_count,
5744 --x_msg_data => x_msg_data,
5745 --p_cplv_rec => l_cplv_rec,
5746 --x_cplv_rec => lx_cplv_rec);
5747
5748 --IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5749 --RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5750 --ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5751 --RAISE OKL_API.G_EXCEPTION_ERROR;
5752 --END IF;
5753 -----------------------------------------------------------*/
5754 --***Commented as syncing vendor not allowed during rebooks
5755 --as per srawlings
5756 -----------------------------------------------------------
5757 End If;
5758
5759 -----------------------------------------------------------------------
5760 --In view of the above decesion(i) of not changing the vendor during re-book,
5761 --party payment details will be synced only if the vendor is same on
5762 --rebook copy and the original contract. So enclosed the party payment
5763 --details sync code in IF clause below.
5764 ------------------------------------------------------------------------
5765 IF (l_subelm_orig_rec.vendor_id = l_subelm_rbk_rec.vendor_id) THEN --new IF clause
5766 --5. party payment details synchronization
5767 open l_ppyd_rbk_csr (p_cpl_id => l_subelm_rbk_rec.cpl_id);
5768 fetch l_ppyd_rbk_csr into l_ppyd_rbk_rec;
5769 If l_ppyd_rbk_csr%NOTFOUND then
5770 open l_ppyd_orig_csr (p_cpl_id => l_subelm_orig_rec.cpl_id);
5771 fetch l_ppyd_orig_csr into l_ppyd_orig_rec;
5772 If l_ppyd_orig_csr%NOTFOUND then
5773 null;
5774 Else
5775 --delete party payment details
5776 l_pydv_rec.id := l_ppyd_orig_rec.id;
5777
5778 OKL_PYD_PVT.delete_row
5779 (p_api_version => p_api_version,
5780 p_init_msg_list => p_init_msg_list,
5781 x_return_status => x_return_status,
5782 x_msg_count => x_msg_count,
5783 x_msg_data => x_msg_data,
5784 p_ppydv_rec => l_pydv_rec);
5785
5786
5787 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5788 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5789 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5790 RAISE OKL_API.G_EXCEPTION_ERROR;
5791 END IF;
5792 End If;
5793 close l_ppyd_orig_csr;
5794 Else
5795 open l_ppyd_orig_csr (p_cpl_id => l_subelm_orig_rec.cpl_id);
5796 fetch l_ppyd_orig_csr into l_ppyd_orig_rec;
5797 If l_ppyd_orig_csr%NOTFOUND then
5798
5799 --create payment details row
5800 l_pydv_rec.cpl_id := l_subelm_orig_rec.cpl_id;
5801 l_pydv_rec.vendor_id := l_ppyd_rbk_rec.vendor_id;
5802 l_pydv_rec.pay_site_id := l_ppyd_rbk_rec.pay_site_id;
5803 l_pydv_rec.payment_term_id := l_ppyd_rbk_rec.payment_term_id;
5804 l_pydv_rec.payment_method_code := l_ppyd_rbk_rec.payment_method_code;
5805 l_pydv_rec.pay_group_code := l_ppyd_rbk_rec.pay_group_code;
5806
5807 OKL_PYD_PVT.insert_row
5808 (p_api_version => p_api_version,
5809 p_init_msg_list => p_init_msg_list,
5810 x_return_status => x_return_status,
5811 x_msg_count => x_msg_count,
5812 x_msg_data => x_msg_data,
5813 p_ppydv_rec => l_pydv_rec,
5814 x_ppydv_rec => lx_pydv_rec);
5815
5816
5817 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5818 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5819 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5820 RAISE OKL_API.G_EXCEPTION_ERROR;
5821 END IF;
5822
5823
5824 Else
5825 --if payment details are not equal
5826 If (l_ppyd_orig_rec.pay_site_id <> l_ppyd_rbk_rec.pay_site_id) OR
5827 (l_ppyd_orig_rec.payment_term_id <> l_ppyd_rbk_rec.payment_term_id) OR
5828 (l_ppyd_orig_rec.payment_method_code <> l_ppyd_rbk_rec.payment_method_code) OR
5829 (l_ppyd_orig_rec.pay_group_code <> l_ppyd_rbk_rec.pay_group_code) Then
5830
5831 l_pydv_rec.id := l_ppyd_orig_rec.id;
5832 l_pydv_rec.cpl_id := l_subelm_orig_rec.cpl_id;
5833 l_pydv_rec.vendor_id := l_ppyd_rbk_rec.vendor_id;
5834 l_pydv_rec.pay_site_id := l_ppyd_rbk_rec.pay_site_id;
5835 l_pydv_rec.payment_term_id := l_ppyd_rbk_rec.payment_term_id;
5836 l_pydv_rec.payment_method_code := l_ppyd_rbk_rec.payment_method_code;
5837 l_pydv_rec.pay_group_code := l_ppyd_rbk_rec.pay_group_code;
5838
5839 okl_pyd_pvt.update_row
5840 (p_api_version => p_api_version,
5841 p_init_msg_list => p_init_msg_list,
5842 x_return_status => x_return_status,
5843 x_msg_count => x_msg_count,
5844 x_msg_data => x_msg_data,
5845 p_ppydv_rec => l_pydv_rec,
5846 x_ppydv_rec => lx_pydv_rec);
5847
5848
5849 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5850 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5851 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5852 RAISE OKL_API.G_EXCEPTION_ERROR;
5853 END IF;
5854 End If;
5855 End If;
5856 close l_ppyd_orig_csr;
5857 End If;
5858 Close l_ppyd_rbk_csr;
5859 END IF;-- If for effective only if vendor has not been modified
5860 -----------------------------------------------------------------------------------
5861 --party payment detail updates are effective only if vendor has not been modified on
5862 --rebook copy - as vendor updates are not allowed on a subsidy line during rebook
5863 ------------------------------------------------------------------------------------
5864 End If;
5865 Close l_subelm_orig_csr;
5866 End Loop;
5867 Close l_subelm_rbk_csr;
5868
5869 ----------------------------------------------------------------------------
5870 --C. Delete any subsidy lines deleted during rebook
5871 ----------------------------------------------------------------------------
5872 open l_del_sub_csr (p_orig_chr_id => p_orig_chr_id,
5873 p_rbk_chr_id => p_rbk_chr_id);
5874 Loop
5875 Fetch l_del_sub_csr into l_del_sub_id,
5876 l_del_cpl_id;
5877 Exit when l_del_sub_csr%NOTFOUND;
5878
5879 --3. Logically Delete subsidy line
5880 l_sub_clev_rec.id := l_del_sub_id;
5881 l_sub_klev_rec.id := l_del_sub_id;
5882 l_sub_clev_rec.sts_code := 'ABANDONED';
5883
5884 okl_contract_pub.update_contract_line
5885 (p_api_version => p_api_version,
5886 p_init_msg_list => p_init_msg_list,
5887 x_return_status => x_return_status,
5888 x_msg_count => x_msg_count,
5889 x_msg_data => x_msg_data,
5890 p_clev_rec => l_sub_clev_rec,
5891 p_klev_rec => l_sub_klev_rec,
5892 x_clev_rec => lx_sub_clev_rec,
5893 x_klev_rec => lx_sub_klev_rec);
5894
5895 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5896 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5897 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5898 RAISE OKL_API.G_EXCEPTION_ERROR;
5899 END IF;
5900
5901 /*********can not physically delete line on a booked K ****/
5902
5903 --Bug# 4899328 : Recalculate OEC and capital amount and update financial asset line
5904 l_orig_asset_cle_id := lx_sub_clev_rec.cle_id;
5905 OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
5906 p_init_msg_list => p_init_msg_list,
5907 x_return_status => x_return_status,
5908 x_msg_count => x_msg_count,
5909 x_msg_data => x_msg_data,
5910 p_formula_name => G_FORMULA_CAP,
5911 p_contract_id => p_orig_chr_id,
5912 p_line_id => l_orig_asset_cle_id,
5913 x_value => l_cap_amount);
5914
5915 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5916 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5917 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5918 RAISE OKL_API.G_EXCEPTION_ERROR;
5919 END IF;
5920
5921 ----------------------------------------------------------------------
5922 --call api to update costs on asset line
5923 ----------------------------------------------------------------------
5924 l_clev_fin_rec.id := l_orig_asset_cle_id;
5925 l_klev_fin_rec.id := l_orig_asset_cle_id;
5926 l_klev_fin_rec.capital_amount := l_cap_amount;
5927
5928
5929 okl_contract_pub.update_contract_line
5930 (p_api_version => p_api_version,
5931 p_init_msg_list => p_init_msg_list,
5932 x_return_status => x_return_status,
5933 x_msg_count => x_msg_count,
5934 x_msg_data => x_msg_data,
5935 p_clev_rec => l_clev_fin_rec,
5936 p_klev_rec => l_klev_fin_rec,
5937 x_clev_rec => lx_clev_fin_rec,
5938 x_klev_rec => lx_klev_fin_rec
5939 );
5940
5941 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5942 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5943 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5944 RAISE OKL_API.G_EXCEPTION_ERROR;
5945 END IF;
5946 --Bug# 4899328
5947
5948 End Loop;
5949 Close l_del_sub_csr;
5950
5951 ----------------------------------------------------------------------------
5952 --C. Syncronize new subsidy line
5953 ----------------------------------------------------------------------------
5954 --1. fetch new subsidy lines
5955 open l_new_sub_csr (p_chr_id => p_rbk_chr_id);
5956 Loop
5957 Fetch l_new_sub_csr into l_new_sub_rec;
5958 Exit when l_new_sub_csr%NOTFOUND;
5959
5960 --create subsidy line record
5961 l_sub_klev_rec.id := OKL_API.G_MISS_NUM;
5962 l_sub_klev_rec.subsidy_id := l_new_sub_rec.subsidy_id;
5963 l_sub_klev_rec.amount := l_new_sub_rec.amount;
5964 l_sub_klev_rec.subsidy_override_amount := l_new_sub_rec.subsidy_override_amount;
5965 l_sub_klev_rec.sty_id := l_new_sub_rec.sty_id;
5966
5967 --Bug# 8677460
5968 l_sub_klev_rec.orig_contract_line_id := l_new_sub_rec.orig_contract_line_id;
5969
5970 If l_new_sub_rec.orig_asst_cle_id is not null then
5971 l_sub_clev_rec.cle_id := l_new_sub_rec.orig_asst_cle_id;
5972 Else
5973 Open l_cleb_csr(p_orig_cle_id => l_new_sub_rec.asset_cle_id);
5974 fetch l_cleb_csr into l_asset_cle_id;
5975 If l_cleb_csr%NOTFOUND then
5976 null;
5977 End If;
5978 close l_cleb_csr;
5979 l_sub_clev_rec.cle_id := l_asset_cle_id;
5980 End If;
5981
5982 l_sub_clev_rec.id := OKL_API.G_MISS_NUM;
5983 l_sub_clev_rec.dnz_chr_id := p_orig_chr_id;
5984 l_sub_clev_rec.exception_yn := 'N';
5985 l_sub_clev_rec.lse_id := l_new_sub_rec.lse_id;
5986 l_sub_clev_rec.display_sequence := l_new_sub_rec.display_sequence;
5987 l_sub_clev_rec.name := l_new_sub_rec.name;
5988 l_sub_clev_rec.item_description := l_new_sub_rec.description;
5989 l_sub_clev_rec.start_date := l_new_sub_rec.start_date;
5990 l_sub_clev_rec.end_date := l_new_sub_rec.end_date;
5991 l_sub_clev_rec.currency_code := l_new_sub_rec.currency_code;
5992 l_sub_clev_rec.sts_code := l_new_sub_rec.sts_code;
5993
5994 --dbms_output.put_line('Amount before updating line '||to_char(l_sub_klev_rec.Amount));
5995 okl_contract_pub.create_contract_line
5996 (p_api_version => p_api_version,
5997 p_init_msg_list => p_init_msg_list,
5998 x_return_status => x_return_status,
5999 x_msg_count => x_msg_count,
6000 x_msg_data => x_msg_data,
6001 p_clev_rec => l_sub_clev_rec,
6002 p_klev_rec => l_sub_klev_rec,
6003 x_clev_rec => lx_sub_clev_rec,
6004 x_klev_rec => lx_sub_klev_rec);
6005
6006 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6007 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6008 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6009 RAISE OKL_API.G_EXCEPTION_ERROR;
6010 END IF;
6011
6012 --Bug# 4899328 : Recalculate OEC and capital amount and update financial asset line
6013 l_orig_asset_cle_id := lx_sub_clev_rec.cle_id;
6014 OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
6015 p_init_msg_list => p_init_msg_list,
6016 x_return_status => x_return_status,
6017 x_msg_count => x_msg_count,
6018 x_msg_data => x_msg_data,
6019 p_formula_name => G_FORMULA_CAP,
6020 p_contract_id => p_orig_chr_id,
6021 p_line_id => l_orig_asset_cle_id,
6022 x_value => l_cap_amount);
6023
6024 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6025 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6026 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6027 RAISE OKL_API.G_EXCEPTION_ERROR;
6028 END IF;
6029
6030 ----------------------------------------------------------------------
6031 --call api to update costs on asset line
6032 ----------------------------------------------------------------------
6033 l_clev_fin_rec.id := l_orig_asset_cle_id;
6034 l_klev_fin_rec.id := l_orig_asset_cle_id;
6035 l_klev_fin_rec.capital_amount := l_cap_amount;
6036
6037
6038 okl_contract_pub.update_contract_line
6039 (p_api_version => p_api_version,
6040 p_init_msg_list => p_init_msg_list,
6041 x_return_status => x_return_status,
6042 x_msg_count => x_msg_count,
6043 x_msg_data => x_msg_data,
6044 p_clev_rec => l_clev_fin_rec,
6045 p_klev_rec => l_klev_fin_rec,
6046 x_clev_rec => lx_clev_fin_rec,
6047 x_klev_rec => lx_klev_fin_rec
6048 );
6049
6050 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6051 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6052 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6053 RAISE OKL_API.G_EXCEPTION_ERROR;
6054 END IF;
6055 --Bug# 4899328
6056
6057 --create the party role record
6058 l_cplv_rec.id := OKL_API.G_MISS_NUM;
6059 l_cplv_rec.dnz_chr_id := p_orig_chr_id;
6060 l_cplv_rec.cle_id := lx_sub_clev_rec.id;
6061 l_cplv_rec.rle_code := 'OKL_VENDOR';
6062 l_cplv_rec.jtot_object1_code := 'OKX_VENDOR';
6063 l_cplv_rec.object1_id1 := l_new_sub_rec.vendor_id;
6064 l_cplv_rec.object1_id2 := '#';
6065
6066
6067 --Bug# 4558486: Changed call to okl_k_party_roles_pvt api
6068 -- to create records in tables
6069 -- okc_k_party_roles_b and okl_k_party_roles
6070 /*
6071 okl_okc_migration_pvt.create_k_party_role
6072 (p_api_version => p_api_version,
6073 p_init_msg_list => p_init_msg_list,
6074 x_return_status => x_return_status,
6075 x_msg_count => x_msg_count,
6076 x_msg_data => x_msg_data,
6077 p_cplv_rec => l_cplv_rec,
6078 x_cplv_rec => lx_cplv_rec);
6079 */
6080
6081 okl_k_party_roles_pvt.create_k_party_role
6082 (p_api_version => p_api_version,
6083 p_init_msg_list => p_init_msg_list,
6084 x_return_status => x_return_status,
6085 x_msg_count => x_msg_count,
6086 x_msg_data => x_msg_data,
6087 p_cplv_rec => l_cplv_rec,
6088 x_cplv_rec => lx_cplv_rec,
6089 p_kplv_rec => l_kplv_rec,
6090 x_kplv_rec => lx_kplv_rec);
6091
6092 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6093 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6094 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6095 RAISE OKL_API.G_EXCEPTION_ERROR;
6096 END IF;
6097
6098 --3. Fetch party payment details for the new line
6099 Open l_ppyd_rbk_csr(p_cpl_id => l_new_sub_rec.cpl_id);
6100 Fetch l_ppyd_rbk_csr into l_ppyd_rbk_rec;
6101 If l_ppyd_rbk_csr%NOTFOUND then
6102 null;
6103 Else
6104 --1.create the party payment details record
6105 l_pydv_rec.id := OKL_API.G_MISS_NUM;
6106 l_pydv_rec.cpl_id := lx_cplv_rec.id;
6107 l_pydv_rec.vendor_id := l_ppyd_rbk_rec.vendor_id;
6108 l_pydv_rec.pay_site_id := l_ppyd_rbk_rec.pay_site_id;
6109 l_pydv_rec.payment_term_id := l_ppyd_rbk_rec.payment_term_id;
6110 l_pydv_rec.payment_method_code := l_ppyd_rbk_rec.payment_method_code;
6111 l_pydv_rec.pay_group_code := l_ppyd_rbk_rec.pay_group_code;
6112
6113 OKL_PYD_PVT.insert_row
6114 (p_api_version => p_api_version,
6115 p_init_msg_list => p_init_msg_list,
6116 x_return_status => x_return_status,
6117 x_msg_count => x_msg_count,
6118 x_msg_data => x_msg_data,
6119 p_ppydv_rec => l_pydv_rec,
6120 x_ppydv_rec => lx_pydv_rec);
6121
6122
6123 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6124 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6125 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6126 RAISE OKL_API.G_EXCEPTION_ERROR;
6127 END IF;
6128 End If;
6129 Close l_ppyd_rbk_csr;
6130
6131 -- varangan - Bug#5474059 - Added - Start
6132 l_new_cnt := l_new_cnt + 1;
6133 -- Code to create billing transaction records for the newly added subsidies
6134 get_subsidy_amount(
6135 p_api_version => p_api_version
6136 , p_init_msg_list => p_init_msg_list
6137 , x_return_status => x_return_status
6138 , x_msg_count => x_msg_count
6139 , x_msg_data => x_msg_data
6140 , p_subsidy_cle_id => lx_sub_clev_rec.id
6141 , x_asbv_rec => l_new_asdv_tbl(l_new_cnt));
6142 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6143 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6144 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6145 RAISE OKL_API.G_EXCEPTION_ERROR;
6146 END IF;
6147 -- varangan - Bug#5474059 - Added - End
6148 End Loop;
6149 Close l_new_sub_csr;
6150
6151 -- varangan - Bug#5474059 - Added - Start
6152 -- Call to insert billing transaction records for the newly added subsidies
6153 IF ( l_new_asdv_tbl.count > 0)THEN
6154 insert_billing_records(
6155 p_api_version => p_api_version
6156 , p_init_msg_list => p_init_msg_list
6157 , x_return_status => x_return_status
6158 , x_msg_count => x_msg_count
6159 , x_msg_data => x_msg_data
6160 , p_chr_id => p_orig_chr_id
6161 , p_asdv_tbl => l_new_asdv_tbl);
6162 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6163 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6164 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6165 RAISE OKL_API.G_EXCEPTION_ERROR;
6166 END IF;
6167 END IF; -- end of check for l_new_asdv_tbl count
6168 -- varangan - Bug#5474059 - Added - End
6169
6170 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
6171
6172 EXCEPTION
6173 WHEN OKL_API.G_EXCEPTION_ERROR THEN
6174 If l_subelm_rbk_csr%ISOPEN then
6175 close l_subelm_rbk_csr;
6176 End If;
6177 If l_subelm_orig_csr%ISOPEN then
6178 close l_subelm_orig_csr;
6179 End If;
6180 If l_ppyd_rbk_csr%ISOPEN then
6181 close l_ppyd_rbk_csr;
6182 End If;
6183 If l_ppyd_orig_csr%ISOPEN then
6184 close l_ppyd_orig_csr;
6185 End If;
6186 If l_del_sub_csr%ISOPEN then
6187 close l_del_sub_csr;
6188 End If;
6189 If l_new_sub_csr%ISOPEN then
6190 close l_new_sub_csr;
6191 End If;
6192 If l_cleb_csr%ISOPEN then
6193 close l_cleb_csr;
6194 End If;
6195 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6196 l_api_name,
6197 G_PKG_NAME,
6198 'OKL_API.G_RET_STS_ERROR',
6199 x_msg_count,
6200 x_msg_data,
6201 '_PVT');
6202 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6203 If l_subelm_rbk_csr%ISOPEN then
6204 close l_subelm_rbk_csr;
6205 End If;
6206 If l_subelm_orig_csr%ISOPEN then
6207 close l_subelm_orig_csr;
6208 End If;
6209 If l_ppyd_rbk_csr%ISOPEN then
6210 close l_ppyd_rbk_csr;
6211 End If;
6212 If l_ppyd_orig_csr%ISOPEN then
6213 close l_ppyd_orig_csr;
6214 End If;
6215 If l_del_sub_csr%ISOPEN then
6216 close l_del_sub_csr;
6217 End If;
6218 If l_new_sub_csr%ISOPEN then
6219 close l_new_sub_csr;
6220 End If;
6221 If l_cleb_csr%ISOPEN then
6222 close l_cleb_csr;
6223 End If;
6224 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6225 l_api_name,
6226 G_PKG_NAME,
6227 'OKL_API.G_RET_STS_UNEXP_ERROR',
6228 x_msg_count,
6229 x_msg_data,
6230 '_PVT');
6231 WHEN OTHERS THEN
6232 If l_subelm_rbk_csr%ISOPEN then
6233 close l_subelm_rbk_csr;
6234 End If;
6235 If l_subelm_orig_csr%ISOPEN then
6236 close l_subelm_orig_csr;
6237 End If;
6238 If l_ppyd_rbk_csr%ISOPEN then
6239 close l_ppyd_rbk_csr;
6240 End If;
6241 If l_ppyd_orig_csr%ISOPEN then
6242 close l_ppyd_orig_csr;
6243 End If;
6244 If l_del_sub_csr%ISOPEN then
6245 close l_del_sub_csr;
6246 End If;
6247 If l_new_sub_csr%ISOPEN then
6248 close l_new_sub_csr;
6249 End If;
6250 If l_cleb_csr%ISOPEN then
6251 close l_cleb_csr;
6252 End If;
6253 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6254 l_api_name,
6255 G_PKG_NAME,
6256 'OTHERS',
6257 x_msg_count,
6258 x_msg_data,
6259 '_PVT');
6260 End Rebook_synchronize;
6261
6262 -- varangan - Bug#5474059 - Added - End
6263
6264 -- varangan - Bug#5474059 - Added - Start
6265 -- Start of comments
6266 -- Procedure Name : rebook_adjustment
6267 -- Description : Logic in the API is as follows:
6268 -- - Compare the subsidy lines of the orignal and rebook copy
6269 -- - If there is a decrease in subsidy, then check if the AR invoice
6270 -- has a balance and create a credit memo on this invoice for the
6271 -- invoice balance amount. If there is an excess amount in the subsidy
6272 -- change still to be adjusted, create an on-account credit memo.
6273 -- - If there is an increase in subsidy, then bill the excess amount to
6274 -- the vendor
6275 -- - API also handles the case of unprocessed billing transactions which
6276 -- a re cancelled.
6277 -- - Deletion of subsidies is also handled
6278 -- - Addition of subsidies is taken care in rebook_synchronize procedure
6279 -- PARAMETERS : IN - p_rbk_chr_id : Rebook Copy Contract id
6280 -- IN - p_orig_chr_id : Original Contract id
6281 -- IN - p_rebook_date : Date of rebook
6282 -- Created varangan
6283 -- End of comments
6284 PROCEDURE rebook_adjustment
6285 (p_api_version IN NUMBER
6286 , p_init_msg_list IN VARCHAR2
6287 , x_return_status OUT NOCOPY VARCHAR2
6288 , x_msg_count OUT NOCOPY NUMBER
6289 , x_msg_data OUT NOCOPY VARCHAR2
6290 , p_rbk_chr_id IN NUMBER
6291 , p_orig_chr_id IN NUMBER
6292 , p_rebook_date IN DATE
6293 ) IS
6294 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
6295 l_api_name CONSTANT varchar2(30) := 'rebook_adjustment';
6296 l_api_version CONSTANT NUMBER := 1.0;
6297
6298 --------------------------------------
6299 -- Cursor Block - Begin
6300 --------------------------------------
6301 -- Cursor to get the subsidy present in rebook copy. ORIG_SYSTEM_ID1 relates
6302 -- to the subsidy on the original contract
6303 CURSOR c_rbk_subs (p_cle_id IN NUMBER
6304 , p_chr_id IN NUMBER) IS
6305 SELECT CLEB.ID
6306 FROM OKC_K_LINES_B CLEB,
6307 OKC_STATUSES_B STSB,
6308 OKC_LINE_STYLES_B LSEB
6309 WHERE CLEB.ORIG_SYSTEM_ID1 = p_cle_id
6310 AND CLEB.ORIG_SYSTEM_SOURCE_CODE ='OKC_LINE'
6311 AND CLEB.DNZ_CHR_ID = p_chr_id
6312 AND STSB.CODE = CLEB.STS_CODE
6313 AND STSB.STE_CODE NOT IN ('CANCELLED')
6314 AND LSEB.ID = CLEB.LSE_ID
6315 AND LSEB.LTY_CODE = 'SUBSIDY';
6316
6317 --Added by bkatraga for bug 9276449
6318 --Cursor to check whether the asset was created during rebook or not
6319 CURSOR c_rbk_asset(p_cle_id IN NUMBER) IS
6320 SELECT 'Y'
6321 FROM OKC_K_LINES_B ORIG_CLEB,
6322 OKC_K_LINES_B RBK_CLEB
6323 WHERE ORIG_CLEB.ID = p_cle_id
6324 AND ORIG_CLEB.ORIG_SYSTEM_SOURCE_CODE ='OKC_LINE'
6325 AND ORIG_CLEB.ORIG_SYSTEM_ID1 = RBK_CLEB.ID
6326 AND RBK_CLEB.DNZ_CHR_ID = p_rbk_chr_id
6327 AND RBK_CLEB.ORIG_SYSTEM_ID1 IS NULL;
6328
6329 -- Cursor to get the unprocessed transactions of the subsidy
6330 CURSOR c_get_bill_stat( p_cle_id IN NUMBER,
6331 p_chr_id IN NUMBER) IS
6332 SELECT TRX.ID
6333 , TRX.DESCRIPTION
6334 FROM OKL_TRX_AR_INVOICES_V TRX
6335 , OKL_TXL_AR_INV_LNS_B TIL
6336 WHERE TIL.TAI_ID = TRX.ID
6337 AND TIL.KLE_ID = p_cle_id -- subsidy cle id
6338 AND TRX.KHR_ID = p_chr_id
6339 AND TRX.TRX_STATUS_CODE = G_SUBMIT_STATUS;
6340
6341 -- Bug# 11717252: Modified cursor to add a UNION to query pre R12
6342 -- invoices
6343 -- Cursor to get all the invoices already generated for this subsidy
6344 -- cursor doesnot consider credit-memos,as the invoice balances are already
6345 -- adjusted for invoice based credit-memos
6346 CURSOR c_get_inv_balance(p_cle_id IN NUMBER,
6347 p_chr_id IN NUMBER) IS
6348 SELECT ARL.receivables_invoice_id receivables_invoice_id,
6349 ARL.RECEIVABLES_INVOICE_LINE_ID invoice_line_id,
6350 tai.ibt_id cust_acct_site_id,
6351 tai.ixx_id cust_acct_id,
6352 tai.irt_id payment_term_id,
6353 tai.irm_id payment_method_id,
6354 tai.khr_id khr_id,
6355 tai.description tai_description,
6356 tai.currency_code currency_code,
6357 tai.date_invoiced date_invoiced,
6358 tai.amount tai_amount,
6359 tai.try_id try_id,
6360 tai.trx_status_code trx_status_code,
6361 tai.date_entered date_entered,
6362 til.id til_id_reverses,
6363 til.tai_id tai_id,
6364 til.amount til_amount,
6365 til.kle_id subsidy_cle_id,
6366 til.description til_description,
6367 til.sty_id stream_type_id,
6368 til.line_number line_number,
6369 til.inv_receiv_line_code inv_receiv_line_code
6370 , til.bank_acct_id bank_acct_id
6371 -- varangan - Bug#5588871 - Modified - Start
6372 -- Consider Invoice line balance instead of invoice balance itself
6373 , ARL.AMOUNT_LINE_ITEMS_REMAINING amount_remaining
6374 -- varangan - Bug#5588871 - Modified - End
6375 , ARL.AMOUNT_DUE_ORIGINAL invoice_amount
6376 , ARL.AMOUNT_DUE_REMAINING amount_due_remaining
6377 FROM OKL_BPD_AR_INV_LINES_V ARL
6378 , OKL_TXL_AR_INV_LNS_V TIL
6379 , OKL_TRX_AR_INVOICES_V TAI
6380 WHERE
6381 TIL.KLE_ID = p_cle_id -- < SUBSIDY CLE ID >
6382 AND TAI.ID = TIL.TAI_ID
6383 AND TAI.KHR_ID = p_chr_id
6384 AND TAI.TRX_STATUS_CODE = 'PROCESSED'
6385 AND TIL.ID = ARL.TIL_ID_DETAILS
6386 AND ARL.AMOUNT_DUE_ORIGINAL > 0 -- donot consider credit memos
6387 AND ARL.AMOUNT_DUE_REMAINING > 0 -- only those invoices that have some balance
6388 AND NOT EXISTS (SELECT 1
6389 FROM okl_cnsld_ar_strms_b lsm
6390 WHERE lsm.receivables_invoice_id = ARL.receivables_invoice_id)
6391 UNION
6392 SELECT lsm.receivables_invoice_id receivables_invoice_id,
6393 NULL invoice_line_id,
6394 tai.ibt_id cust_acct_site_id,
6395 tai.ixx_id cust_acct_id,
6396 tai.irt_id payment_term_id,
6397 tai.irm_id payment_method_id,
6398 tai.khr_id khr_id,
6399 tai.description tai_description,
6400 tai.currency_code currency_code,
6401 tai.date_invoiced date_invoiced,
6402 tai.amount tai_amount,
6403 tai.try_id try_id,
6404 tai.trx_status_code trx_status_code,
6405 tai.date_entered date_entered,
6406 til.id til_id_reverses,
6407 til.tai_id tai_id,
6408 til.amount til_amount,
6409 til.kle_id subsidy_cle_id,
6410 til.description til_description,
6411 til.sty_id stream_type_id,
6412 til.line_number line_number,
6413 til.inv_receiv_line_code inv_receiv_line_code
6414 , til.bank_acct_id bank_acct_id
6415 -- smadhava - Bug#5564198 - Modified - Start
6416 -- Consider Invoice line balance instead of invoice balance itself
6417 , APS.AMOUNT_LINE_ITEMS_REMAINING amount_remaining
6418 -- smadhava - Bug#5564198 - Modified - End
6419 , APS.AMOUNT_DUE_ORIGINAL invoice_amount
6420 , APS.AMOUNT_DUE_REMAINING amount_due_remaining
6421 FROM AR_PAYMENT_SCHEDULES_ALL APS
6422 , OKL_CNSLD_AR_STRMS_B LSM
6423 , OKL_XTL_SELL_INVS_B XTL
6424 , OKL_TXL_AR_INV_LNS_V TIL
6425 , OKL_TRX_AR_INVOICES_V TAI
6426 WHERE LSM.RECEIVABLES_INVOICE_ID = APS.CUSTOMER_TRX_ID
6427 AND XTL.LSM_ID = LSM.ID
6428 AND TIL.ID = XTL.TIL_ID
6429 AND TIL.KLE_ID = p_cle_id -- < SUBSIDY CLE ID >
6430 AND TAI.ID = TIL.TAI_ID
6431 AND TAI.KHR_ID = p_chr_id
6432 AND APS.AMOUNT_DUE_ORIGINAL > 0 -- donot consider credit memos
6433 AND APS.AMOUNT_DUE_REMAINING > 0 -- only those invoices that have some balance
6434 ORDER BY AMOUNT_DUE_REMAINING DESC;
6435
6436 -- Cursor to get billing details in order to create on-Acc CM
6437 CURSOR c_get_bill_details(p_cle_id IN NUMBER,
6438 p_chr_id IN NUMBER) IS
6439 SELECT tai.ibt_id cust_acct_site_id,
6440 tai.ixx_id cust_acct_id,
6441 tai.irt_id payment_term_id,
6442 tai.irm_id payment_method_id,
6443 tai.khr_id khr_id,
6444 tai.description tai_description,
6445 tai.currency_code currency_code,
6446 tai.date_invoiced date_invoiced,
6447 tai.amount tai_amount,
6448 tai.try_id try_id,
6449 tai.trx_status_code trx_status_code,
6450 tai.date_entered date_entered,
6451 til.id til_id_reverses,
6452 til.tai_id tai_id,
6453 til.amount til_amount,
6454 til.kle_id subsidy_cle_id,
6455 til.description til_description,
6456 til.sty_id stream_type_id,
6457 til.line_number line_number,
6458 til.inv_receiv_line_code inv_receiv_line_code
6459 , til.bank_acct_id bank_acct_id
6460 FROM OKL_TXL_AR_INV_LNS_V TIL
6461 , OKL_TRX_AR_INVOICES_V TAI
6462 WHERE TIL.KLE_ID = p_cle_id -- < SUBSIDY CLE ID >
6463 AND TAI.ID = TIL.TAI_ID
6464 AND TAI.KHR_ID = p_chr_id;
6465
6466 -- Cursor to check if any records have been processed for billing
6467 CURSOR c_chk_billing_done ( p_cle_id IN NUMBER
6468 , p_chr_id IN NUMBER) IS
6469 SELECT 'Y'
6470 FROM OKL_TRX_AR_INVOICES_B TAI
6471 , OKL_TXL_AR_INV_LNS_B TXL
6472 WHERE TXL.TAI_ID = TAI.ID
6473 AND TXL.KLE_ID = p_cle_id -- subsidy cle id
6474 AND TAI.KHR_ID = p_chr_id
6475 AND TAI.TRX_STATUS_CODE = G_PROCESSED_STATUS;
6476
6477 --Bug# 11717252
6478 CURSOR l_chr_subsidy_vendor_csr(p_subsidy_cpl_id IN NUMBER
6479 ,p_chr_id IN NUMBER) is
6480 SELECT chr_cplb.id
6481 FROM okc_k_party_roles_b chr_cplb,
6482 okc_k_party_roles_b cle_cplb
6483 WHERE cle_cplb.id = p_subsidy_cpl_id
6484 AND chr_cplb.chr_id = p_chr_id
6485 AND chr_cplb.dnz_chr_id = p_chr_id
6486 AND chr_cplb.object1_id1 = cle_cplb.object1_id1
6487 AND chr_cplb.object1_id2 = '#'
6488 AND chr_cplb.jtot_object1_code = 'OKX_VENDOR'
6489 AND chr_cplb.rle_code = 'OKL_VENDOR';
6490
6491 l_chr_cpl_id OKC_K_PARTY_ROLES_B.id%TYPE;
6492
6493 --------------------------------------
6494 -- Cursor Block - End
6495 --------------------------------------
6496
6497 l_pos_try_id NUMBER;
6498 l_neg_try_id NUMBER;
6499
6500 l_orig_asdv_tbl asbv_tbl_type;
6501 l_rbk_asdv_tbl asbv_tbl_type;
6502
6503 l_new_asdv_tbl asbv_tbl_type;
6504 l_new_cnt NUMBER DEFAULT 0;
6505
6506 l_rbk_subs_cle_id NUMBER;
6507 l_cancel_taiv_tbl OKL_TRX_AR_INVOICES_PUB.taiv_tbl_type;
6508 lx_cancel_taiv_tbl OKL_TRX_AR_INVOICES_PUB.taiv_tbl_type;
6509 l_cancel_cnt NUMBER DEFAULT 0;
6510
6511 l_subs_adj NUMBER;
6512 l_bill_chk VARCHAR2(1) DEFAULT 'N';
6513 -- varangan - Billing Enhancement changes- Bug#5874824 - begin
6514 /*l_taiv_rec okl_trx_ar_invoices_pub.taiv_rec_type;
6515 lx_taiv_rec okl_trx_ar_invoices_pub.taiv_rec_type;
6516 l_tilv_rec okl_txl_ar_inv_lns_pub.tilv_rec_type;
6517 lx_tilv_rec okl_txl_ar_inv_lns_pub.tilv_rec_type;
6518 l_bpd_acc_rec okl_acc_call_pub.bpd_acc_rec_type; */
6519
6520 lp_taiv_rec okl_tai_pvt.taiv_rec_type;
6521 lp_tilv_rec okl_til_pvt.tilv_rec_type;
6522 lp_tilv_tbl okl_til_pvt.tilv_tbl_type;
6523 lp_tldv_tbl okl_tld_pvt.tldv_tbl_type;
6524
6525 lx_taiv_rec okl_tai_pvt.taiv_rec_type;
6526 lx_tilv_tbl okl_til_pvt.tilv_tbl_type;
6527 lx_tldv_tbl okl_tld_pvt.tldv_tbl_type;
6528
6529 --Varangan - Billing Enhancement changes - Bug#5874824 - End
6530
6531 l_asbv_rec asbv_rec_type;
6532
6533 l_bill_details_rec c_get_bill_details%ROWTYPE;
6534 l_rbk_asset_flag VARCHAR2(1); --Added by bkatraga for bug 9276449
6535
6536 -------------------------------------------------------
6537 -- Local Procedure Block
6538 -------------------------------------------------------
6539 --Bug# 11717252: Added parameter p_cpl_id
6540 PROCEDURE on_acc_CM_create( p_subsidy_cle_id IN NUMBER
6541 , p_chr_id IN NUMBER
6542 , p_subs_adj IN NUMBER
6543 , p_rebook_date IN DATE
6544 , p_cpl_id IN NUMBER ) IS
6545 BEGIN
6546 OPEN c_get_bill_details(p_subsidy_cle_id
6547 ,p_chr_id );
6548 FETCH c_get_bill_details INTO l_bill_details_rec;
6549 CLOSE c_get_bill_details;
6550
6551 lp_taiv_rec.amount := p_subs_adj;
6552 lp_taiv_rec.khr_id := l_bill_details_rec.khr_id;
6553 lp_taiv_rec.description := 'Rebook Credit On-Acc- '||l_bill_details_rec.tai_description;
6554 lp_taiv_rec.currency_code := l_bill_details_rec.currency_code;
6555 lp_taiv_rec.date_invoiced := p_rebook_date; --check whether it is ok to give this
6556 lp_taiv_rec.ibt_id := l_bill_details_rec.cust_acct_site_id;
6557 lp_taiv_rec.ixx_id := l_bill_details_rec.cust_acct_id;
6558 lp_taiv_rec.irt_id := l_bill_details_rec.payment_term_id;
6559
6560 --Bug# 11717252
6561 -- Payment Method will be derived in okl_internal_billing_pvt.create_billing_trx
6562 lp_taiv_rec.irm_id := NULL;
6563
6564 lp_taiv_rec.try_id := l_neg_try_id;
6565 lp_taiv_rec.trx_status_code := G_SUBMIT_STATUS;
6566 lp_taiv_rec.date_entered := SYSDATE;
6567 lp_taiv_rec.OKL_SOURCE_BILLING_TRX := G_SOURCE_BILLING_TRX_RBK;
6568
6569 -- Line Record
6570 lp_tilv_rec.amount := p_subs_adj;
6571 lp_tilv_rec.kle_id := l_bill_details_rec.subsidy_cle_id;
6572 lp_tilv_rec.description := l_bill_details_rec.til_description;
6573 lp_tilv_rec.sty_id := l_bill_details_rec.stream_type_id;
6574 lp_tilv_rec.line_number := l_bill_details_rec.line_number;
6575 lp_tilv_rec.inv_receiv_line_code := G_AR_INV_LINE_CODE;
6576
6577 --Bug# 11717252
6578 -- Bank Account will be derived in okl_internal_billing_pvt.create_billing_trx
6579 --lp_tilv_rec.bank_acct_id := l_bill_details_rec.bank_acct_id;
6580
6581 -- ON-ACCOUNT Credit Memo
6582 lp_tilv_rec.TIL_ID_REVERSES := NULL;
6583 -- Assign the line record in tilv_tbl structure
6584 lp_tilv_tbl(1) := lp_tilv_rec;
6585 ---------------------------------------------------------------------------
6586 -- Call to Billing Centralized API
6587 ---------------------------------------------------------------------------
6588 okl_internal_billing_pvt.create_billing_trx(p_api_version =>l_api_version,
6589 p_init_msg_list =>p_init_msg_list,
6590 x_return_status => x_return_status,
6591 x_msg_count => x_msg_count,
6592 x_msg_data => x_msg_data,
6593 p_taiv_rec => lp_taiv_rec,
6594 p_tilv_tbl => lp_tilv_tbl,
6595 p_tldv_tbl => lp_tldv_tbl,
6596 x_taiv_rec => lx_taiv_rec,
6597 x_tilv_tbl => lx_tilv_tbl,
6598 x_tldv_tbl => lx_tldv_tbl,
6599 --Bug# 11717252
6600 p_cpl_id => p_cpl_id);
6601
6602 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6603 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6604 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6605 RAISE OKL_API.G_EXCEPTION_ERROR;
6606 END IF;
6607 -- Varangan - Billing Enhancement changes - Bug#5874824 - End
6608
6609 /* --create internal AR transaction header
6610 OKL_TRX_AR_INVOICES_PUB.insert_trx_ar_invoices (
6611 p_api_version => p_api_version,
6612 p_init_msg_list => p_init_msg_list,
6613 x_return_status => x_return_status,
6614 x_msg_count => x_msg_count,
6615 x_msg_data => x_msg_data,
6616 p_taiv_rec => l_taiv_rec,
6617 x_taiv_rec => lx_taiv_rec);
6618
6619 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6620 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6621 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6622 RAISE OKL_API.G_EXCEPTION_ERROR;
6623 END IF;
6624
6625 --l_tilv_rec.tai_id := lx_taiv_rec.id;
6626
6627 --create internal AR transaction line
6628 okl_txl_ar_inv_lns_pub.insert_txl_ar_inv_lns (
6629 p_api_version => p_api_version,
6630 p_init_msg_list => p_init_msg_list,
6631 x_return_status => x_return_status,
6632 x_msg_count => x_msg_count,
6633 x_msg_data => x_msg_data,
6634 p_tilv_rec => l_tilv_rec,
6635 x_tilv_rec => lx_tilv_rec);
6636
6637 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6638 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6639 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6640 RAISE OKL_API.G_EXCEPTION_ERROR;
6641 END IF;
6642
6643 --accounting trx
6644 l_bpd_acc_rec.id := lx_tilv_rec.id;
6645 l_bpd_acc_rec.source_table := G_AR_LINES_SOURCE;
6646 -- Create Accounting Distribution
6647 okl_acc_call_pub.create_acc_trans (
6648 p_api_version => p_api_version,
6649 p_init_msg_list => p_init_msg_list,
6650 x_return_status => x_return_status,
6651 x_msg_count => x_msg_count,
6652 x_msg_data => x_msg_data,
6653 p_bpd_acc_rec => l_bpd_acc_rec);
6654
6655 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6656 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6657 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6658 RAISE OKL_API.G_EXCEPTION_ERROR;
6659 END IF; */
6660
6661 END on_acc_CM_create;
6662
6663 BEGIN
6664
6665 x_return_status := OKL_API.G_RET_STS_SUCCESS;
6666 -- Call start_activity to create savepoint, check compatibility
6667 -- and initialize message list
6668 x_return_status := OKL_API.START_ACTIVITY (
6669 l_api_name
6670 ,p_init_msg_list
6671 ,'_PVT'
6672 ,x_return_status);
6673 -- Check if activity started successfully
6674 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6675 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6676 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6677 RAISE OKL_API.G_EXCEPTION_ERROR;
6678 END IF;
6679
6680 --function to fetch try_id
6681 l_pos_try_id := Get_trx_type_id(p_trx_type => G_AR_INV_TRX_TYPE,
6682 p_lang => 'US');
6683 If l_pos_try_id is null then
6684 x_return_status := OKL_API.G_RET_STS_ERROR;
6685 OKL_API.SET_MESSAGE (
6686 p_app_name => G_APP_NAME,
6687 p_msg_name => G_REQUIRED_VALUE,
6688 p_token1 => G_COL_NAME_TOKEN,
6689 p_token1_value => 'Transaction Type');
6690 RAISE OKL_API.G_EXCEPTION_ERROR;
6691 End If;
6692
6693 l_neg_try_id := Get_trx_type_id(p_trx_type => G_AR_CM_TRX_TYPE,
6694 p_lang => 'US');
6695 If l_neg_try_id is null then
6696 x_return_status := OKL_API.G_RET_STS_ERROR;
6697 OKL_API.SET_MESSAGE (
6698 p_app_name => G_APP_NAME,
6699 p_msg_name => G_REQUIRED_VALUE,
6700 p_token1 => G_COL_NAME_TOKEN,
6701 p_token1_value => 'Transaction Type');
6702 RAISE OKL_API.G_EXCEPTION_ERROR;
6703 End If;
6704
6705 -- STEP 1 : Get the subsidy table of the original contract
6706 get_contract_subsidy_amount(
6707 p_api_version => p_api_version
6708 , p_init_msg_list => p_init_msg_list
6709 , x_return_status => x_return_status
6710 , x_msg_count => x_msg_count
6711 , x_msg_data => x_msg_data
6712 , p_chr_id => p_orig_chr_id
6713 , x_asbv_tbl => l_orig_asdv_tbl);
6714
6715 -- check if the l_orig_asdv_tbl is not empty
6716 IF l_orig_asdv_tbl.count > 0 THEN
6717 FOR i IN l_orig_asdv_tbl.FIRST .. l_orig_asdv_tbl.LAST
6718 LOOP
6719
6720 --Bug# 11717252
6721 l_chr_cpl_id := NULL;
6722 OPEN l_chr_subsidy_vendor_csr(p_subsidy_cpl_id => l_orig_asdv_tbl(i).cpl_id,
6723 p_chr_id => p_orig_chr_id);
6724 FETCH l_chr_subsidy_vendor_csr INTO l_chr_cpl_id;
6725 CLOSE l_chr_subsidy_vendor_csr;
6726
6727 l_subs_adj := 0;
6728 -- STEP 2 : Query for the original subsidy line in rebook copy
6729 OPEN c_rbk_subs(l_orig_asdv_tbl(i).subsidy_cle_id, p_rbk_chr_id);
6730 FETCH c_rbk_subs INTO l_rbk_subs_cle_id;
6731
6732 -- STEP 3 : IF the original subsidy line doesnot exist - Subsidy DELETED
6733 IF c_rbk_subs%NOTFOUND THEN
6734
6735 --Added by bkatraga for bug 9276449
6736 l_rbk_asset_flag := 'N';
6737 OPEN c_rbk_asset(l_orig_asdv_tbl(i).asset_cle_id);
6738 FETCH c_rbk_asset INTO l_rbk_asset_flag;
6739 CLOSE c_rbk_asset;
6740 IF l_rbk_asset_flag = 'Y' THEN
6741 --Subsidy was added to the newly created asset during rebook
6742 --Code to create billing transaction records for the newly added subsidies
6743 l_new_cnt := l_new_cnt + 1;
6744 get_subsidy_amount(
6745 p_api_version => p_api_version
6746 , p_init_msg_list => p_init_msg_list
6747 , x_return_status => x_return_status
6748 , x_msg_count => x_msg_count
6749 , x_msg_data => x_msg_data
6750 , p_subsidy_cle_id => l_orig_asdv_tbl(i).subsidy_cle_id
6751 , x_asbv_rec => l_new_asdv_tbl(l_new_cnt));
6752 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6753 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6754 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6755 RAISE OKL_API.G_EXCEPTION_ERROR;
6756 END IF;
6757
6758 ELSE
6759 --end bkatraga
6760
6761 -- STEP 3 (a) : IF the subsidy billing transaction is still Unprocessed
6762 -- Cancel transaction
6763 FOR c_get_bill_stat_rec IN c_get_bill_stat(l_orig_asdv_tbl(i).subsidy_cle_id
6764 , p_orig_chr_id)
6765 LOOP
6766 l_cancel_cnt := l_cancel_cnt + 1;
6767 l_cancel_taiv_tbl(l_cancel_cnt).ID := c_get_bill_stat_rec.ID;
6768 l_cancel_taiv_tbl(l_cancel_cnt).DESCRIPTION := c_get_bill_stat_rec.DESCRIPTION;
6769 l_cancel_taiv_tbl(l_cancel_cnt).TRX_STATUS_CODE := G_CANCEL_STATUS;
6770 -- sjalasut, added okl_source_billing_trx as 'REBOOK' as rebook process initiates
6771 -- cancelation
6772 l_cancel_taiv_tbl(l_cancel_cnt).OKL_SOURCE_BILLING_TRX := G_SOURCE_BILLING_TRX_RBK;
6773 END LOOP;
6774
6775 -- STEP 3 (b) : IF the subsidy billing transaction had been processed
6776
6777 -- need to reverse the entire amount of the deleted subsidy
6778 l_subs_adj := - l_orig_asdv_tbl(i).amount;
6779
6780 -- IF Balance exists on the subsidy invoices, then create credit-memos
6781 -- on the balances
6782 FOR c_get_inv_balance_rec IN c_get_inv_balance(l_orig_asdv_tbl(i).subsidy_cle_id
6783 , p_orig_chr_id)
6784 LOOP
6785
6786 IF c_get_inv_balance_rec.amount_remaining > 0 THEN
6787 -- Varangan - Billing Enhancement changes - Bug#5874824 - Begin
6788 -- reverse whatever amount is remaining on the invoice of deleted subsidy
6789 lp_taiv_rec.amount := (-1) * c_get_inv_balance_rec.amount_remaining;
6790 -- Accordingly change the l_subs_adj so as to track if On-Acc CM needs to be generated
6791 l_subs_adj := l_subs_adj + c_get_inv_balance_rec.amount_remaining;
6792
6793 lp_taiv_rec.khr_id := c_get_inv_balance_rec.khr_id;
6794 lp_taiv_rec.description := 'Rebook Credit - '||c_get_inv_balance_rec.tai_description;
6795 lp_taiv_rec.currency_code := c_get_inv_balance_rec.currency_code;
6796 lp_taiv_rec.date_invoiced := p_rebook_date; --check whether it is ok to give this
6797 lp_taiv_rec.ibt_id := c_get_inv_balance_rec.cust_acct_site_id;
6798 lp_taiv_rec.ixx_id := c_get_inv_balance_rec.cust_acct_id;
6799 lp_taiv_rec.irt_id := c_get_inv_balance_rec.payment_term_id;
6800
6801 --Bug# 11717252
6802 -- Payment Method will be derived in okl_internal_billing_pvt.create_billing_trx
6803 lp_taiv_rec.irm_id := NULL;
6804
6805 lp_taiv_rec.try_id := l_neg_try_id;
6806 lp_taiv_rec.trx_status_code := G_SUBMIT_STATUS;
6807 lp_taiv_rec.date_entered := SYSDATE;
6808 lp_taiv_rec.OKL_SOURCE_BILLING_TRX := G_SOURCE_BILLING_TRX_RBK;
6809 --tilv_record
6810 --l_tilv_rec.tai_id := lx_taiv_rec.id;
6811 lp_tilv_rec.amount := (-1) * c_get_inv_balance_rec.amount_remaining;
6812 lp_tilv_rec.kle_id := c_get_inv_balance_rec.subsidy_cle_id;
6813 lp_tilv_rec.description := 'Rebook Credit - '||c_get_inv_balance_rec.til_description;
6814 lp_tilv_rec.sty_id := c_get_inv_balance_rec.stream_type_id;
6815 lp_tilv_rec.line_number := c_get_inv_balance_rec.line_number;
6816 lp_tilv_rec.inv_receiv_line_code := G_AR_INV_LINE_CODE;
6817 lp_tilv_rec.til_id_reverses := c_get_inv_balance_rec.til_id_reverses;
6818
6819 --Bug# 11717252
6820 -- Bank Account will be derived in okl_internal_billing_pvt.create_billing_trx
6821 --lp_tilv_rec.bank_acct_id := c_get_inv_balance_rec.bank_acct_id;
6822
6823 lp_tilv_tbl(1) := lp_tilv_rec; -- Assign the line record in tilv_tbl structure
6824
6825 ---------------------------------------------------------------------------
6826 -- Call to Billing Centralized API
6827 ---------------------------------------------------------------------------
6828 okl_internal_billing_pvt.create_billing_trx(p_api_version =>l_api_version,
6829 p_init_msg_list =>p_init_msg_list,
6830 x_return_status => x_return_status,
6831 x_msg_count => x_msg_count,
6832 x_msg_data => x_msg_data,
6833 p_taiv_rec => lp_taiv_rec,
6834 p_tilv_tbl => lp_tilv_tbl,
6835 p_tldv_tbl => lp_tldv_tbl,
6836 x_taiv_rec => lx_taiv_rec,
6837 x_tilv_tbl => lx_tilv_tbl,
6838 x_tldv_tbl => lx_tldv_tbl,
6839 --Bug# 11717252
6840 p_cpl_id => l_chr_cpl_id);
6841
6842 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6843 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6844 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6845 RAISE OKL_API.G_EXCEPTION_ERROR;
6846 END IF;
6847
6848 -- Varangan - Billing Enhancement changes - Bug#5874824 - End
6849
6850 /* Commented the existing Billing call
6851 --create internal AR transaction header
6852 OKL_TRX_AR_INVOICES_PUB.insert_trx_ar_invoices (
6853 p_api_version => p_api_version,
6854 p_init_msg_list => p_init_msg_list,
6855 x_return_status => x_return_status,
6856 x_msg_count => x_msg_count,
6857 x_msg_data => x_msg_data,
6858 p_taiv_rec => l_taiv_rec,
6859 x_taiv_rec => lx_taiv_rec);
6860
6861 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6862 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6863 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6864 RAISE OKL_API.G_EXCEPTION_ERROR;
6865 END IF;
6866
6867 --tilv_record
6868 l_tilv_rec.tai_id := lx_taiv_rec.id;
6869 l_tilv_rec.amount := (-1) * c_get_inv_balance_rec.amount_remaining;
6870 l_tilv_rec.kle_id := c_get_inv_balance_rec.subsidy_cle_id;
6871 l_tilv_rec.description := 'Rebook Credit - '||c_get_inv_balance_rec.til_description;
6872 l_tilv_rec.sty_id := c_get_inv_balance_rec.stream_type_id;
6873 l_tilv_rec.line_number := c_get_inv_balance_rec.line_number;
6874 l_tilv_rec.inv_receiv_line_code := G_AR_INV_LINE_CODE;
6875 l_tilv_rec.til_id_reverses := c_get_inv_balance_rec.til_id_reverses;
6876 l_tilv_rec.bank_acct_id := c_get_inv_balance_rec.bank_acct_id;
6877
6878 --create internal AR transaction line
6879 okl_txl_ar_inv_lns_pub.insert_txl_ar_inv_lns (
6880 p_api_version => p_api_version,
6881 p_init_msg_list => p_init_msg_list,
6882 x_return_status => x_return_status,
6883 x_msg_count => x_msg_count,
6884 x_msg_data => x_msg_data,
6885 p_tilv_rec => l_tilv_rec,
6886 x_tilv_rec => lx_tilv_rec);
6887
6888 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6889 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6890 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6891 RAISE OKL_API.G_EXCEPTION_ERROR;
6892 END IF;
6893
6894 --accounting trx
6895 l_bpd_acc_rec.id := lx_tilv_rec.id;
6896 l_bpd_acc_rec.source_table := G_AR_LINES_SOURCE;
6897 -- Create Accounting Distribution
6898 okl_acc_call_pub.create_acc_trans (
6899 p_api_version => p_api_version,
6900 p_init_msg_list => p_init_msg_list,
6901 x_return_status => x_return_status,
6902 x_msg_count => x_msg_count,
6903 x_msg_data => x_msg_data,
6904 p_bpd_acc_rec => l_bpd_acc_rec);
6905
6906 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6907 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6908 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6909 RAISE OKL_API.G_EXCEPTION_ERROR;
6910 END IF; */ --Commented End
6911
6912 END IF; -- end of check for amount_remaining > 0
6913 END LOOP; -- end of check for invoice balances
6914
6915 -- If there is still amount remaining, create on-account credit-memo
6916 IF l_subs_adj < 0 THEN
6917 -- Call API to create On-ACC CM
6918 on_acc_CM_create( p_subsidy_cle_id =>l_orig_asdv_tbl(i).subsidy_cle_id
6919 , p_chr_id => p_orig_chr_id
6920 , p_subs_adj => l_subs_adj
6921 , p_rebook_date => p_rebook_date
6922 --Bug# 11717252
6923 , p_cpl_id => l_chr_cpl_id);
6924 END IF; -- end of check for on_acc credit memo creation
6925
6926 END IF; --Added by bkatraga for bug 9276449
6927
6928 -- STEP 4 : ELSE IF the original subsidy line exists
6929 ELSE --else for c_rbk_subs%NOTFOUND
6930
6931 -- Get the subsidy amount for the rebook copy
6932 get_subsidy_amount(
6933 p_api_version => p_api_version
6934 , p_init_msg_list => p_init_msg_list
6935 , x_return_status => x_return_status
6936 , x_msg_count => x_msg_count
6937 , x_msg_data => x_msg_data
6938 , p_subsidy_cle_id => l_rbk_subs_cle_id -- rebook subsidy cle id
6939 , x_asbv_rec => l_asbv_rec);
6940
6941 l_subs_adj := l_asbv_rec.amount -- Subsidy in rebook copy
6942 - l_orig_asdv_tbl(i).amount; -- Subsidy in Original KHR
6943 -- STEP 4 (a) : IF there is decrease in subsidy
6944 IF (l_subs_adj < 0) THEN
6945
6946 -- If subsidy billing transaction is still Unprocessed
6947 -- Cancel transaction
6948 FOR c_get_bill_stat_rec IN c_get_bill_stat(l_orig_asdv_tbl(i).subsidy_cle_id
6949 , p_orig_chr_id)
6950 LOOP
6951 l_cancel_cnt := l_cancel_cnt + 1;
6952 l_cancel_taiv_tbl(l_cancel_cnt).ID := c_get_bill_stat_rec.ID;
6953 l_cancel_taiv_tbl(l_cancel_cnt).DESCRIPTION := c_get_bill_stat_rec.DESCRIPTION;
6954 l_cancel_taiv_tbl(l_cancel_cnt).TRX_STATUS_CODE := G_CANCEL_STATUS;
6955 -- sjalasut, added okl_source_billing_trx as 'REBOOK' as rebook process initiates
6956 -- cancelation
6957 l_cancel_taiv_tbl(l_cancel_cnt).OKL_SOURCE_BILLING_TRX := G_SOURCE_BILLING_TRX_RBK;
6958 END LOOP;
6959
6960 -- If there has been no billing run till now, then on cancellation
6961 -- create a new record for the new subsidy amount
6962 OPEN c_chk_billing_done(l_orig_asdv_tbl(i).subsidy_cle_id
6963 , p_orig_chr_id);
6964 FETCH c_chk_billing_done INTO l_bill_chk;
6965 CLOSE c_chk_billing_done;
6966 IF l_bill_chk <> 'Y' THEN
6967 l_subs_adj := 0;
6968 l_new_cnt := l_new_cnt + 1;
6969 l_new_asdv_tbl(l_new_cnt) := l_orig_asdv_tbl(i);
6970 l_new_asdv_tbl(l_new_cnt).amount := l_asbv_rec.amount; -- bill subsidy with new amount
6971 END IF;
6972
6973 -- ELSE IF Balance exists on the subsidy invoices, then create credit-memos
6974 -- on the balances
6975 FOR c_get_inv_balance_rec IN c_get_inv_balance(l_orig_asdv_tbl(i).subsidy_cle_id
6976 , p_orig_chr_id)
6977 LOOP
6978 -- Varangan - Billing Enhancement changes - Bug#5874824 - Begin
6979
6980 IF c_get_inv_balance_rec.amount_remaining > 0 AND l_subs_adj <> 0 THEN
6981 IF ( c_get_inv_balance_rec.amount_remaining + l_subs_adj ) >= 0 THEN
6982 lp_taiv_rec.amount := l_subs_adj; -- l_subs_adj is already negative
6983 l_subs_adj := 0;
6984 ELSE
6985 lp_taiv_rec.amount := (-1) * c_get_inv_balance_rec.amount_remaining;
6986 l_subs_adj := l_subs_adj + c_get_inv_balance_rec.amount_remaining;
6987 END IF;
6988 lp_taiv_rec.khr_id := c_get_inv_balance_rec.khr_id;
6989 lp_taiv_rec.description := 'Rebook Credit - '||c_get_inv_balance_rec.tai_description;
6990 lp_taiv_rec.currency_code := c_get_inv_balance_rec.currency_code;
6991 lp_taiv_rec.date_invoiced := p_rebook_date; --check whether it is ok to give this
6992 lp_taiv_rec.ibt_id := c_get_inv_balance_rec.cust_acct_site_id;
6993 lp_taiv_rec.ixx_id := c_get_inv_balance_rec.cust_acct_id;
6994 lp_taiv_rec.irt_id := c_get_inv_balance_rec.payment_term_id;
6995
6996 --Bug# 11717252
6997 -- Payment Method will be derived in okl_internal_billing_pvt.create_billing_trx
6998 lp_taiv_rec.irm_id := NULL;
6999
7000 lp_taiv_rec.try_id := l_neg_try_id;
7001 lp_taiv_rec.trx_status_code := G_SUBMIT_STATUS;
7002 lp_taiv_rec.date_entered := SYSDATE;
7003 lp_taiv_rec.OKL_SOURCE_BILLING_TRX := G_SOURCE_BILLING_TRX_RBK;
7004
7005 --lp_tilv record
7006 -- l_tilv_rec.tai_id := lx_taiv_rec.id;
7007 -- varangan - Bug#5588871 - Modified - Start
7008 -- THE TIL record amount should be the same as the TRX record amount
7009 lp_tilv_rec.amount := lp_taiv_rec.amount;
7010 -- varangan - Bug#5588871 - Modified - End
7011 lp_tilv_rec.kle_id := c_get_inv_balance_rec.subsidy_cle_id;
7012 lp_tilv_rec.description := 'Rebook Credit - '||c_get_inv_balance_rec.til_description;
7013 lp_tilv_rec.sty_id := c_get_inv_balance_rec.stream_type_id;
7014 lp_tilv_rec.line_number := c_get_inv_balance_rec.line_number;
7015 lp_tilv_rec.inv_receiv_line_code := G_AR_INV_LINE_CODE;
7016 lp_tilv_rec.til_id_reverses := c_get_inv_balance_rec.til_id_reverses;
7017
7018 --Bug# 11717252
7019 -- Bank Account will be derived in okl_internal_billing_pvt.create_billing_trx
7020 --lp_tilv_rec.bank_acct_id := c_get_inv_balance_rec.bank_acct_id;
7021
7022 lp_tilv_tbl(1) := lp_tilv_rec; -- Assign the line record in tilv_tbl structure
7023
7024 ---------------------------------------------------------------------------
7025 -- Call to Billing Centralized API
7026 ---------------------------------------------------------------------------
7027 okl_internal_billing_pvt.create_billing_trx(p_api_version =>l_api_version,
7028 p_init_msg_list =>p_init_msg_list,
7029 x_return_status => x_return_status,
7030 x_msg_count => x_msg_count,
7031 x_msg_data => x_msg_data,
7032 p_taiv_rec => lp_taiv_rec,
7033 p_tilv_tbl => lp_tilv_tbl,
7034 p_tldv_tbl => lp_tldv_tbl,
7035 x_taiv_rec => lx_taiv_rec,
7036 x_tilv_tbl => lx_tilv_tbl,
7037 x_tldv_tbl => lx_tldv_tbl,
7038 --Bug# 11717252
7039 p_cpl_id => l_chr_cpl_id);
7040
7041 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7042 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7043 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7044 RAISE OKL_API.G_EXCEPTION_ERROR;
7045 END IF;
7046 -- Varangan - Billing Enhancement changes - Bug#5874824 - End
7047
7048 /* Commented the existing billing API call
7049 --create internal AR transaction header
7050 OKL_TRX_AR_INVOICES_PUB.insert_trx_ar_invoices (
7051 p_api_version => p_api_version,
7052 p_init_msg_list => p_init_msg_list,
7053 x_return_status => x_return_status,
7054 x_msg_count => x_msg_count,
7055 x_msg_data => x_msg_data,
7056 p_taiv_rec => l_taiv_rec,
7057 x_taiv_rec => lx_taiv_rec);
7058
7059 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7060 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7061 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7062 RAISE OKL_API.G_EXCEPTION_ERROR;
7063 END IF;
7064
7065 --tilv_record
7066 l_tilv_rec.tai_id := lx_taiv_rec.id;
7067 -- varangan - Bug#5588871 - Modified - Start
7068 -- THE TIL record amount should be the same as the TRX record amount
7069 l_tilv_rec.amount := l_taiv_rec.amount;
7070 -- varangan - Bug#5588871 - Modified - End
7071 l_tilv_rec.kle_id := c_get_inv_balance_rec.subsidy_cle_id;
7072 l_tilv_rec.description := 'Rebook Credit - '||c_get_inv_balance_rec.til_description;
7073 l_tilv_rec.sty_id := c_get_inv_balance_rec.stream_type_id;
7074 l_tilv_rec.line_number := c_get_inv_balance_rec.line_number;
7075 l_tilv_rec.inv_receiv_line_code := G_AR_INV_LINE_CODE;
7076 l_tilv_rec.til_id_reverses := c_get_inv_balance_rec.til_id_reverses;
7077 l_tilv_rec.bank_acct_id := c_get_inv_balance_rec.bank_acct_id;
7078
7079 --create internal AR transaction line
7080 okl_txl_ar_inv_lns_pub.insert_txl_ar_inv_lns (
7081 p_api_version => p_api_version,
7082 p_init_msg_list => p_init_msg_list,
7083 x_return_status => x_return_status,
7084 x_msg_count => x_msg_count,
7085 x_msg_data => x_msg_data,
7086 p_tilv_rec => l_tilv_rec,
7087 x_tilv_rec => lx_tilv_rec);
7088
7089 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7090 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7091 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7092 RAISE OKL_API.G_EXCEPTION_ERROR;
7093 END IF;
7094
7095 --accounting trx
7096 l_bpd_acc_rec.id := lx_tilv_rec.id;
7097 l_bpd_acc_rec.source_table := G_AR_LINES_SOURCE;
7098 -- Create Accounting Distribution
7099 okl_acc_call_pub.create_acc_trans (
7100 p_api_version => p_api_version,
7101 p_init_msg_list => p_init_msg_list,
7102 x_return_status => x_return_status,
7103 x_msg_count => x_msg_count,
7104 x_msg_data => x_msg_data,
7105 p_bpd_acc_rec => l_bpd_acc_rec);
7106
7107 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7108 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7109 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7110 RAISE OKL_API.G_EXCEPTION_ERROR;
7111 END IF; */
7112
7113
7114 END IF; -- end of check for amount_remaining > 0
7115 END LOOP; -- end of loop over invoice balances
7116
7117 -- If there is still amount remaining, create an on-account credit-memo
7118 IF (l_subs_adj < 0) THEN
7119 -- Call API to create On-ACC CM
7120 on_acc_CM_create( p_subsidy_cle_id =>l_orig_asdv_tbl(i).subsidy_cle_id
7121 , p_chr_id => p_orig_chr_id
7122 , p_subs_adj => l_subs_adj
7123 , p_rebook_date => p_rebook_date
7124 --Bug# 11717252
7125 , p_cpl_id => l_chr_cpl_id);
7126 END IF; -- end of on_account credit memo creation
7127
7128 -- STEP 4 (b) : IF there is increase in subsidy
7129 ELSIF (l_subs_adj > 0) THEN
7130 -- If subsidy billing transaction is still Unprocessed
7131 -- Cancel transaction
7132 FOR c_get_bill_stat_rec IN c_get_bill_stat(l_orig_asdv_tbl(i).subsidy_cle_id
7133 , p_orig_chr_id)
7134 LOOP
7135 l_cancel_cnt := l_cancel_cnt + 1;
7136 l_cancel_taiv_tbl(l_cancel_cnt).ID := c_get_bill_stat_rec.ID;
7137 l_cancel_taiv_tbl(l_cancel_cnt).DESCRIPTION := c_get_bill_stat_rec.DESCRIPTION;
7138 l_cancel_taiv_tbl(l_cancel_cnt).TRX_STATUS_CODE := G_CANCEL_STATUS;
7139 -- sjalasut, added okl_source_billing_trx as 'REBOOK' as rebook process initiates
7140 -- cancelation
7141 l_cancel_taiv_tbl(l_cancel_cnt).OKL_SOURCE_BILLING_TRX := G_SOURCE_BILLING_TRX_RBK;
7142
7143 END LOOP;
7144
7145 -- If there has been no billing run till now, then on cancellation
7146 -- create a new record for the new subsidy amount
7147 OPEN c_chk_billing_done(l_orig_asdv_tbl(i).subsidy_cle_id
7148 , p_orig_chr_id);
7149 FETCH c_chk_billing_done INTO l_bill_chk;
7150 CLOSE c_chk_billing_done;
7151 IF l_bill_chk <> 'Y' THEN
7152 l_subs_adj := 0;
7153 l_new_cnt := l_new_cnt + 1;
7154 l_new_asdv_tbl(l_new_cnt) := l_orig_asdv_tbl(i);
7155 l_new_asdv_tbl(l_new_cnt).amount := l_asbv_rec.amount; -- bill subsidy with new amount
7156 ELSE
7157 -- Else IF subsidy billing transaction had been processed
7158 -- add new record to l_new_asdv_tbl table to bill subsidy change amount
7159 l_new_cnt := l_new_cnt + 1;
7160 l_new_asdv_tbl(l_new_cnt) := l_orig_asdv_tbl(i);
7161 l_new_asdv_tbl(l_new_cnt).amount := l_subs_adj; -- bill subsidy with new amount
7162 END IF;
7163
7164 END IF; -- end of check for l_subs_adj
7165 END IF; -- end of c_rbk_subs%NOTFOUND IF loop
7166 CLOSE c_rbk_subs;
7167 END LOOP; -- end of loop over the orignal contract subsidies
7168 END IF; -- end of check l_orig_asdv_tbl is not empty
7169
7170 -- STEP 5 : Create billing transaction records using l_new_asdv_tbl table
7171 -- this procedure is called to create billing transaction
7172 -- records for the new subsidies
7173 IF l_new_cnt > 0 THEN
7174 insert_billing_records(
7175 p_api_version => p_api_version
7176 , p_init_msg_list => p_init_msg_list
7177 , x_return_status => x_return_status
7178 , x_msg_count => x_msg_count
7179 , x_msg_data => x_msg_data
7180 , p_chr_id => p_orig_chr_id
7181 , p_asdv_tbl => l_new_asdv_tbl);
7182 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7183 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7184 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7185 RAISE OKL_API.G_EXCEPTION_ERROR;
7186 END IF;
7187 END IF; -- end of check for l_new_asdv_tbl count
7188
7189
7190 -- STEP 6 : Cancel the records which were in unprocessed state
7191 IF l_cancel_cnt > 0 THEN
7192 --update internal AR transaction headers to mark them canceled
7193 okl_trx_ar_invoices_pub.update_trx_ar_invoices (
7194 p_api_version => p_api_version,
7195 p_init_msg_list => p_init_msg_list,
7196 x_return_status => x_return_status,
7197 x_msg_count => x_msg_count,
7198 x_msg_data => x_msg_data,
7199 p_taiv_tbl => l_cancel_taiv_tbl,
7200 x_taiv_tbl => lx_cancel_taiv_tbl);
7201 END IF;
7202
7203
7204 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
7205 EXCEPTION
7206 WHEN OKL_API.G_EXCEPTION_ERROR THEN
7207 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7208 l_api_name,
7209 G_PKG_NAME,
7210 'OKL_API.G_RET_STS_ERROR',
7211 x_msg_count,
7212 x_msg_data,
7213 '_PVT');
7214 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7215 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7216 l_api_name,
7217 G_PKG_NAME,
7218 'OKL_API.G_RET_STS_UNEXP_ERROR',
7219 x_msg_count,
7220 x_msg_data,
7221 '_PVT');
7222 WHEN OTHERS THEN
7223 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7224 l_api_name,
7225 G_PKG_NAME,
7226 'OTHERS',
7227 x_msg_count,
7228 x_msg_data,
7229 '_PVT');
7230 END rebook_adjustment;
7231 -- varangan - Bug#5474059 - Added - End
7232
7233 -- Start of comments
7234 --
7235 -- Procedure Name : Create_Billing_Trx
7236 -- Description : Procedure to create billing transaction for subsidies to
7237 -- be billed to third party
7238 -- Business Rules :
7239 -- Parameters : Contract Id
7240 -- History :
7241 -- Version : 1.0
7242 -- End of comments
7243
7244 Procedure Create_Billing_Trx
7245 (p_api_version IN NUMBER,
7246 p_init_msg_list IN VARCHAR2,
7247 x_return_status OUT NOCOPY VARCHAR2,
7248 x_msg_count OUT NOCOPY NUMBER,
7249 x_msg_data OUT NOCOPY VARCHAR2,
7250 p_chr_id IN NUMBER) is
7251
7252 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
7253 l_api_name CONSTANT varchar2(30) := 'CREATE_BILLING_TRX';
7254 l_api_version CONSTANT NUMBER := 1.0;
7255
7256
7257 l_asdv_tbl asbv_tbl_type;
7258 l_asdv_tbl_proc asbv_tbl_type;
7259 l_chr_id number;
7260 i number;
7261 j number;
7262
7263 --30-Oct-03 avsingh : cursor corrected for same vendor match at
7264 --model line level
7265 --cursor to verify theat asset and subsidy vendors are the same
7266 cursor l_samevend_csr(p_vendor_id in number,
7267 p_asset_cle_id in number,
7268 p_chr_id in number) is
7269 Select 'Y'
7270 From okc_k_party_roles_b cplb,
7271 okc_k_lines_b cleb,
7272 okc_line_styles_b lseb
7273 where cplb.cle_id = cleb.id
7274 and cleb.cle_id = p_asset_cle_id
7275 and lseb.id = cleb.lse_id
7276 and lseb.lty_code = 'ITEM'
7277 and cplb.dnz_chr_id = p_chr_id
7278 and cplb.object1_id1 = to_char(p_vendor_id)
7279 and cplb.object1_id2 = '#'
7280 and cplb.jtot_object1_code = 'OKX_VENDOR'
7281 and cplb.rle_code = 'OKL_VENDOR';
7282
7283 l_exists varchar2(1) default 'N';
7284
7285 l_taiv_rec okl_trx_ar_invoices_pub.taiv_rec_type;
7286 l_tilv_rec okl_txl_ar_inv_lns_pub.tilv_rec_type;
7287 l_bpd_acc_rec okl_acc_call_pub.bpd_acc_rec_type;
7288
7289 lx_taiv_rec okl_trx_ar_invoices_pub.taiv_rec_type;
7290 lx_tilv_rec okl_txl_ar_inv_lns_pub.tilv_rec_type;
7291 lx_bpd_acc_rec okl_acc_call_pub.bpd_acc_rec_type;
7292
7293 l_bill_to_site_use_id OKC_K_HEADERS_B.bill_to_site_use_id%TYPE;
7294 l_cust_acct_id OKC_K_PARTY_ROLES_B.cust_acct_id%TYPE;
7295 l_payment_method_id Number;
7296 l_bank_account_id Number;
7297 l_inv_reason_for_review Varchar2(450);
7298 l_inv_review_until_date Date;
7299 l_cash_appl_rule_id Number;
7300 l_invoice_format Varchar2(450);
7301 l_review_invoice_yn Varchar2(450);
7302
7303 l_cust_acct_site_id Number;
7304 l_payment_term_id Number;
7305
7306 --cursor to get vendor cpl_id at header level
7307 cursor l_chrcpl_csr (p_vendor_id in number,
7308 p_chr_id in number) is
7309 select cplb.id
7310 from okc_k_party_roles_b cplb
7311 where cplb.chr_id = p_chr_id
7312 and cplb.dnz_chr_id = p_chr_id
7313 and cplb.cle_id is null
7314 and cplb.object1_id1 = to_char(p_vendor_id)
7315 and cplb.object1_id2 = '#'
7316 and cplb.jtot_object1_code = 'OKX_VENDOR'
7317 and cplb.rle_code = 'OKL_VENDOR';
7318
7319 l_chr_cpl_id number;
7320
7321 -- Cursor to find out whether rebook copy
7322 cursor l_chk_rbk_csr(p_chr_id IN NUMBER) is
7323 SELECT 'Y',
7324 chrb.orig_system_id1,
7325 ktrx.date_transaction_occurred
7326 FROM okc_k_headers_b CHRB,
7327 okl_trx_contracts ktrx
7328 WHERE ktrx.khr_id_new = chrb.id
7329 AND ktrx.tsu_code = 'ENTERED'
7330 AND ktrx.rbr_code is NOT NULL
7331 AND ktrx.tcn_type = 'TRBK'
7332 --rkuttiya added for 12.1.1 Multi GAAP
7333 AND ktrx.representation_type = 'PRIMARY'
7334 --
7335 AND CHRB.id = p_chr_id
7336 AND CHRB.ORIG_SYSTEM_SOURCE_CODE = 'OKL_REBOOK';
7337
7338 l_rebook_cpy varchar2(1) default 'N';
7339 l_orig_chr_id okc_k_headers_b.id%TYPE;
7340 l_rebook_date date;
7341
7342 l_try_id number;
7343
7344 Begin
7345
7346 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7347 -- Call start_activity to create savepoint, check compatibility
7348 -- and initialize message list
7349 x_return_status := OKL_API.START_ACTIVITY (
7350 l_api_name
7351 ,p_init_msg_list
7352 ,'_PVT'
7353 ,x_return_status);
7354 -- Check if activity started successfully
7355 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7356 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7357 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7358 RAISE OKL_API.G_EXCEPTION_ERROR;
7359 END IF;
7360
7361
7362 -----------------------------------------------
7363 --start of input parameter validations
7364 -----------------------------------------------
7365 --1. validate chr_id
7366 If (p_chr_id is NULL) or (p_chr_id = OKL_API.G_MISS_NUM) then
7367 OKL_API.set_message(
7368 p_app_name => G_APP_NAME,
7369 p_msg_name => G_API_MISSING_PARAMETER,
7370 p_token1 => G_API_NAME_TOKEN,
7371 p_token1_value => l_api_name,
7372 p_token2 => G_MISSING_PARAM_TOKEN,
7373 p_token2_value => 'p_chr_id');
7374 x_return_status := OKL_API.G_RET_STS_ERROR;
7375 Raise OKL_API.G_EXCEPTION_ERROR;
7376 Elsif (p_chr_id is not NULL) and (p_chr_id <> OKL_API.G_MISS_NUM) then
7377 validate_chr_id(p_chr_id => p_chr_id,
7378 x_return_status => x_return_status);
7379 IF x_return_status = OKL_API.G_RET_STS_ERROR then
7380 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_chr_id');
7381 Raise OKL_API.G_EXCEPTION_ERROR;
7382 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
7383 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7384 End If;
7385 End If;
7386 ---------------------------------------
7387 --end of input parameter validations
7388 ---------------------------------------
7389
7390 --Rebook Processing
7391 -------------------------------------------
7392 --find out whether contract is rebook copy :
7393 -------------------------------------------
7394 l_rebook_cpy := 'N';
7395 open l_chk_rbk_csr(p_chr_id => p_chr_id);
7396 fetch l_chk_rbk_csr into
7397 l_rebook_cpy,
7398 l_orig_chr_id,
7399 l_rebook_date;
7400 If l_chk_rbk_csr%NOTFOUND then
7401 Null;
7402 End If;
7403 close l_chk_rbk_csr;
7404
7405 If l_rebook_cpy = 'N' then
7406 l_chr_id := p_chr_id;
7407 -- varangan - Bug#5474059 - Modified - Start
7408 get_contract_subsidy_amount(
7409 p_api_version => p_api_version,
7410 p_init_msg_list => p_init_msg_list,
7411 x_return_status => x_return_status,
7412 x_msg_count => x_msg_count,
7413 x_msg_data => x_msg_data,
7414 p_chr_id => l_chr_id,
7415 x_asbv_tbl => l_asdv_tbl);
7416
7417 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7418 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7419 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7420 RAISE OKL_API.G_EXCEPTION_ERROR;
7421 END IF;
7422
7423
7424 -- Moved code into a separate Procedure and called here
7425 -- this procedure is called to create billing transaction
7426 -- records for the new subsidies
7427 insert_billing_records(
7428 p_api_version => p_api_version
7429 , p_init_msg_list => p_init_msg_list
7430 , x_return_status => x_return_status
7431 , x_msg_count => x_msg_count
7432 , x_msg_data => x_msg_data
7433 , p_chr_id => l_chr_id
7434 , p_asdv_tbl => l_asdv_tbl);
7435 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7436 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7437 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7438 RAISE OKL_API.G_EXCEPTION_ERROR;
7439 END IF;
7440 -- varangan - Bug#5474059 - Modified - End
7441
7442 elsif l_rebook_cpy = 'Y' then
7443 l_chr_id := l_orig_chr_id;
7444 --call api for reversals
7445 -- varangan - Bug#5412198 - Commented - Start
7446 -- Susbidy invoice will no longer be reversed. Instead additional credit memos
7447 -- or invoices will be generated
7448 /* Reverse_Billing_Trx
7449 (p_api_version => p_api_version,
7450 p_init_msg_list => p_init_msg_list,
7451 x_return_status => x_return_status,
7452 x_msg_count => x_msg_count,
7453 x_msg_data => x_msg_data,
7454 p_chr_id => l_orig_chr_id,
7455 p_rebook_date => l_rebook_date);*/
7456
7457 -- varangan - Bug#5474059 - Commented - End
7458 -- varangan - Bug#5474059 - Added - Start
7459 rebook_adjustment
7460 (p_api_version => p_api_version,
7461 p_init_msg_list => p_init_msg_list,
7462 x_return_status => x_return_status,
7463 x_msg_count => x_msg_count,
7464 x_msg_data => x_msg_data,
7465 p_rbk_chr_id => p_chr_id,
7466 p_orig_chr_id => l_orig_chr_id,
7467 p_rebook_date => l_rebook_date);
7468 -- varangan - Bug#5474059 - Added - End
7469 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7470 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7471 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7472 RAISE OKL_API.G_EXCEPTION_ERROR;
7473 END IF;
7474 End If;
7475 -- End of rebook processing
7476
7477
7478
7479 l_asdv_tbl.delete;
7480
7481 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
7482
7483 EXCEPTION
7484 WHEN OKL_API.G_EXCEPTION_ERROR THEN
7485 If l_samevend_csr%ISOPEN then
7486 close l_samevend_csr;
7487 End If;
7488 If l_chrcpl_csr%ISOPEN then
7489 close l_chrcpl_csr;
7490 End If;
7491 If l_chk_rbk_csr%ISOPEN then
7492 close l_chk_rbk_csr;
7493 End If;
7494 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7495 l_api_name,
7496 G_PKG_NAME,
7497 'OKL_API.G_RET_STS_ERROR',
7498 x_msg_count,
7499 x_msg_data,
7500 '_PVT');
7501 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7502 If l_samevend_csr%ISOPEN then
7503 close l_samevend_csr;
7504 End If;
7505 If l_chrcpl_csr%ISOPEN then
7506 close l_chrcpl_csr;
7507 End If;
7508 If l_chk_rbk_csr%ISOPEN then
7509 close l_chk_rbk_csr;
7510 End If;
7511 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7512 l_api_name,
7513 G_PKG_NAME,
7514 'OKL_API.G_RET_STS_UNEXP_ERROR',
7515 x_msg_count,
7516 x_msg_data,
7517 '_PVT');
7518 WHEN OTHERS THEN
7519 If l_samevend_csr%ISOPEN then
7520 close l_samevend_csr;
7521 End If;
7522 If l_chrcpl_csr%ISOPEN then
7523 close l_chrcpl_csr;
7524 End If;
7525 If l_chk_rbk_csr%ISOPEN then
7526 close l_chk_rbk_csr;
7527 End If;
7528 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7529 l_api_name,
7530 G_PKG_NAME,
7531 'OTHERS',
7532 x_msg_count,
7533 x_msg_data,
7534 '_PVT');
7535 End Create_Billing_Trx;
7536
7537 --Bug# 3948361
7538 Procedure get_relk_termn_basis
7539 (p_api_version IN NUMBER,
7540 p_init_msg_list IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
7541 x_return_status OUT NOCOPY VARCHAR2,
7542 x_msg_count OUT NOCOPY NUMBER,
7543 x_msg_data OUT NOCOPY VARCHAR2,
7544 p_chr_id IN NUMBER,
7545 p_subsidy_id IN NUMBER,
7546 x_release_basis OUT NOCOPY varchar2) is
7547
7548 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
7549 l_api_name CONSTANT varchar2(30) := 'GET_RELK_TERMN_BASIS';
7550 l_api_version CONSTANT NUMBER := 1.0;
7551
7552 --cursor to read whether product change or customer change
7553 cursor l_relk_reason_csr(p_chr_id in number) is
7554 select tcn.rbr_code
7555 from okl_trx_contracts tcn,
7556 okl_trx_types_tl ttl
7557 where ttl.id = tcn.try_id
7558 and ttl.language = 'US'
7559 and ttl.name = 'Release'
7560 and tcn.tsu_code = 'ENTERED'
7561 and tcn.tcn_type = 'MAE'
7562 --rkuttiya added for 12.1.1 Multi GAAP
7563 and tcn.representation_type = 'PRIMARY'
7564 --
7565 and tcn.khr_id = p_chr_id;
7566
7567 l_relk_reason okl_trx_contracts.rbr_code%TYPE;
7568
7569 --cursor to read subsidy setup
7570 cursor l_tsfr_basis_csr (p_subsidy_id in number) is
7571 select subb.transfer_basis_code
7572 from okl_subsidies_b subb
7573 where id = p_subsidy_id;
7574
7575 l_transfer_basis okl_subsidies_b.transfer_basis_code%TYPE;
7576 Begin
7577
7578 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7579 -- Call start_activity to create savepoint, check compatibility
7580 -- and initialize message list
7581 x_return_status := OKL_API.START_ACTIVITY (
7582 l_api_name
7583 ,p_init_msg_list
7584 ,'_PVT'
7585 ,x_return_status);
7586 -- Check if activity started successfully
7587 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7588 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7589 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7590 RAISE OKL_API.G_EXCEPTION_ERROR;
7591 END IF;
7592
7593
7594 for l_relk_reason_rec in l_relk_reason_csr(p_chr_id => p_chr_id)
7595 loop
7596 l_relk_reason := l_relk_reason_rec.rbr_code;
7597 end loop;
7598
7599 If l_relk_reason = 'PRODUCT_CHANGE' then
7600 x_release_basis := 'ACCELERATE';
7601 ElsIf l_relk_reason = 'CUSTOMER_CHANGE' then
7602 --read subsidy setup
7603 for l_tsfr_basis_rec in l_tsfr_basis_csr(p_subsidy_id => p_subsidy_id)
7604 loop
7605 l_transfer_basis := l_tsfr_basis_rec.transfer_basis_code;
7606 end loop;
7607 x_release_basis := l_transfer_basis;
7608 End If;
7609
7610 If x_release_basis is null then
7611 x_release_basis := 'ACCELERATE';
7612 end if;
7613 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
7614
7615 EXCEPTION
7616 WHEN OKL_API.G_EXCEPTION_ERROR THEN
7617 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7618 l_api_name,
7619 G_PKG_NAME,
7620 'OKL_API.G_RET_STS_ERROR',
7621 x_msg_count,
7622 x_msg_data,
7623 '_PVT');
7624 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7625 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7626 l_api_name,
7627 G_PKG_NAME,
7628 'OKL_API.G_RET_STS_UNEXP_ERROR',
7629 x_msg_count,
7630 x_msg_data,
7631 '_PVT');
7632 WHEN OTHERS THEN
7633 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7634 l_api_name,
7635 G_PKG_NAME,
7636 'OTHERS',
7637 x_msg_count,
7638 x_msg_data,
7639 '_PVT');
7640
7641 End get_relk_termn_basis;
7642 END OKL_SUBSIDY_PROCESS_PVT;