[Home] [Help]
PACKAGE BODY: APPS.OKL_SUBSIDY_PROCESS_PVT
Source
1 PACKAGE BODY okl_subsidy_process_pvt as
2 /* $Header: OKLRSBPB.pls 120.27.12010000.2 2008/10/01 21:56:16 rkuttiya 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 = 'NET' --only discounts ('NET') can be funded from vendor
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,
4179 p_cle_id => p_asset_cle_id);
4180
4181 End If;
4182
4183 get_subsidy_amount(
4184 p_api_version => p_api_version,
4185 p_init_msg_list => p_init_msg_list,
4186 x_return_status => x_return_status,
4187 x_msg_count => x_msg_count,
4188 x_msg_data => x_msg_data,
4189 p_subsidy_cle_id => l_subsidy_cle_id,
4190 x_asbv_rec => l_asbv_tbl(i));
4191
4192 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4193 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4194 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4195 RAISE OKL_API.G_EXCEPTION_ERROR;
4196 END IF;
4197
4198 --calculate proportional subsidy amount
4199 l_asbv_tbl(i).amount := (l_asbv_tbl(i).amount/l_asset_oec)* p_req_fund_amount;
4200 End Loop;
4201 Close l_vend_sub_csr;
4202
4203 x_asbv_tbl := l_asbv_tbl;
4204
4205 EXCEPTION
4206 WHEN OKL_API.G_EXCEPTION_ERROR THEN
4207 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4208 l_api_name,
4209 G_PKG_NAME,
4210 'OKL_API.G_RET_STS_ERROR',
4211 x_msg_count,
4212 x_msg_data,
4213 '_PVT');
4214 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4215 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4216 l_api_name,
4217 G_PKG_NAME,
4218 'OKL_API.G_RET_STS_UNEXP_ERROR',
4219 x_msg_count,
4220 x_msg_data,
4221 '_PVT');
4222 WHEN OTHERS THEN
4223 If l_vend_sub_csr%ISOPEN then
4224 CLOSE l_vend_sub_csr;
4225 End If;
4226 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4227 l_api_name,
4228 G_PKG_NAME,
4229 'OTHERS',
4230 x_msg_count,
4231 x_msg_data,
4232 '_PVT');
4233 end get_partial_subsidy_amount;
4234
4235
4236
4237 -- Start of comments
4238 --
4239 -- Procedure Name : Get_Vendor_Billing_Info
4240 -- Description : Local Procedure to Extract Vendor Billing Information for
4241 -- creating billing transaction
4242 -- Business Rules :
4243 -- Parameters : Contract Party Id or Contract Id
4244 -- History :
4245 -- Version : 1.0
4246 -- End of comments
4247
4248 PROCEDURE Get_Vendor_Billing_Info (
4249 p_contract_id IN NUMBER,
4250 p_cpl_id IN NUMBER,
4251 x_return_status OUT NOCOPY VARCHAR2,
4252 x_bill_to_site_use_id OUT NOCOPY Number,
4253 x_cust_acct_id OUT NOCOPY Number,
4254 x_payment_method_id OUT NOCOPY Number,
4255 x_bank_account_id OUT NOCOPY Number,
4256 x_inv_reason_for_review OUT NOCOPY Varchar2,
4257 x_inv_review_until_date OUT NOCOPY Date,
4258 x_cash_appl_rule_id OUT NOCOPY Number,
4259 x_invoice_format OUT NOCOPY Varchar2,
4260 x_review_invoice_yn OUT NOCOPY Varchar2,
4261 x_cust_acct_site_id OUT NOCOPY Number,
4262 x_payment_term_id OUT NOCOPY Number) As
4263
4264 l_return_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4265 l_overall_status VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4266
4267 l_contract_id NUMBER := p_contract_id;
4268 l_cpl_id NUMBER := p_cpl_id;
4269 l_khr_id NUMBER;
4270 l_par_id NUMBER;
4271 l_rgd_id NUMBER;
4272 l_party_name VARCHAR2(1000);
4273
4274 l_bill_to_site_use_id OKC_K_HEADERS_B.bill_to_site_use_id%TYPE;
4275 l_cust_acct_id OKC_K_PARTY_ROLES_B.cust_acct_id%TYPE;
4276 l_party_role FND_LOOKUPS.meaning%TYPE;
4277
4278 ----------------------------------------------------------------------------
4279 -- Get bill to site of OKL_VENDOR party on the contract
4280 ----------------------------------------------------------------------------
4281 CURSOR l_k_party_rg_csr (cp_cpl_id IN NUMBER) IS
4282 SELECT cpl.id cpl_id,
4283 cpl.jtot_object1_code object1_code,
4284 cpl.object1_id1 object1_id1,
4285 cpl.object1_id2 object1_id2,
4286 rgd.id rgd_id,
4287 cpl.bill_to_site_use_id bill_to_site_use_id,
4288 cpl.role party_role,
4289 cpl.cust_acct_id cust_acct_id
4290 FROM okc_k_party_roles_v cpl,
4291 okc_rg_party_roles rgpr,
4292 okc_rule_groups_v rgd
4293 WHERE cpl.id = cp_cpl_id
4294 AND cpl.rle_code = 'OKL_VENDOR'
4295 AND rgpr.cpl_id (+) = cpl.id
4296 AND rgd.id (+) = rgpr.rgp_id
4297 AND rgd.rgd_code(+) = 'LAVENB';
4298
4299 ----------------------------------------------------------------------------
4300 -- Get bill to site of vendor PROGRAM if Vendor Program vendor same as lease vendor
4301 ----------------------------------------------------------------------------
4302 -- modified by zrehman to fix Bug#6341517 on 27-Feb-2008 start
4303 CURSOR l_partner_rg_csr (cp_khr_id IN NUMBER,
4304 cp_vendor_id IN VARCHAR2) IS
4305 SELECT khr.Id khr_Id,
4306 Par.Id Par_Id,
4307 rgd.Id rgd_Id,
4308 cPl.Bill_To_Site_Use_Id Bill_To_Site_Use_Id,
4309 -- cPl.ROLE ParACty_Role,
4310 cPl.cUst_acct_Id cUst_acct_Id
4311 FROM Okl_k_Headers khr,
4312 Okc_k_Headers_b Par,
4313 Okc_Rule_Groups_v rgd,
4314 Okc_k_Party_Roles_b cPl
4315 WHERE khr.Id = cp_khr_Id
4316 AND Par.Id = khr.khr_Id
4317 AND Par.scs_Code = 'PROGRAM'
4318 AND rgd.chr_Id = Par.Id
4319 AND rgd.dnz_chr_Id = Par.Id
4320 AND rgd.cle_Id IS NULL
4321 AND rgd.rgd_Code = 'LAVENB'
4322 AND Par.Id = cPl.chr_Id
4323 AND cPl.rle_Code = 'OKL_VENDOR'
4324 AND cPl.Object1_Id1 = cp_Vendor_Id
4325 AND cPl.Object1_Id2 = '#'
4326 AND cPl.jTot_Object1_Code = 'OKX_VENDOR';
4327 -- modified by zrehman to fix Bug#6341517 on 27-Feb-2008 end
4328
4329 -------------------------------------------------------
4330 --cursor to fetch receipt method id
4331 -------------------------------------------------------
4332 CURSOR l_rcpt_mthd_csr (cp_cust_rct_mthd IN NUMBER) IS
4333 SELECT c.receipt_method_id
4334 FROM ra_cust_receipt_methods c
4335 WHERE c.cust_receipt_method_id = cp_cust_rct_mthd;
4336
4337
4338 ---------------------------------------------------------
4339 --cursor to fetch site use information
4340 ----------------------------------------------------------
4341 CURSOR l_site_use_csr (cp_site_use_id IN NUMBER,
4342 cp_site_use_code IN VARCHAR2) IS
4343 SELECT a.cust_account_id cust_account_id,
4344 a.cust_acct_site_id cust_acct_site_id,
4345 a.payment_term_id payment_term_id
4346 FROM okx_cust_site_uses_v a,
4347 okx_customer_accounts_v c
4348 WHERE a.id1 = cp_site_use_id
4349 AND a.site_use_code = cp_site_use_code
4350 AND c.id1 = a.cust_account_id;
4351
4352 ----------------------------------------------------------------------------
4353 --get payment term from customer profiles
4354 ----------------------------------------------------------------------------
4355 CURSOR l_std_terms_csr (cp_cust_id IN NUMBER,
4356 cp_site_use_id IN NUMBER) IS
4357 SELECT c.standard_terms standard_terms
4358 FROM hz_customer_profiles c
4359 WHERE c.cust_account_id = cp_cust_id
4360 AND c.site_use_id = cp_site_use_id
4361 UNION
4362 SELECT c1.standard_terms standard_terms
4363 FROM hz_customer_profiles c1
4364 WHERE c1.cust_account_id = cp_cust_id
4365 AND c1.site_use_id IS NULL
4366 AND NOT EXISTS (
4367 SELECT '1'
4368 FROM hz_customer_profiles c2
4369 WHERE c2.cust_account_id = cp_cust_id
4370 AND c2.site_use_id = cp_site_use_id);
4371
4372 l_site_use_rec l_site_use_csr%ROWTYPE;
4373 l_k_party_rg_rec l_k_party_rg_csr%ROWTYPE;
4374
4375 ----------------------------------------------------------------------------
4376 --cursors to fetch rule values
4377 ----------------------------------------------------------------------------
4378 cursor l_rul_csr (p_rul_code in varchar2,
4379 p_rgp_id in number,
4380 p_chr_id in number) is
4381 select rule_information1,
4382 rule_information2,
4383 rule_information3,
4384 rule_information4,
4385 rule_information5,
4386 rule_information6,
4387 jtot_object1_code,
4388 object1_id1,
4389 object1_id2
4390 from okc_rules_b
4391 where rgp_id = p_rgp_id
4392 and rule_information_category = p_rul_code
4393 and dnz_chr_id = p_chr_id;
4394
4395 --START: rseela 11/28/05 bug#4673593
4396 ----------------------------------------------------------------------------
4397 --cursors to fetch bank account ID
4398 ----------------------------------------------------------------------------
4399 cursor l_bank_acc_csr (p_bank_acc_uses_id in varchar2) is
4400 select rmc.bank_account_id
4401 from OKX_RCPT_METHOD_ACCOUNTS_V rmc
4402 where rmc.id1 = p_bank_acc_uses_id;
4403
4404 --END: rseela 11/28/05 bug#4673593
4405
4406
4407 l_pmth_rec l_rul_csr%ROWTYPE;
4408 l_bacc_rec l_rul_csr%ROWTYPE;
4409 l_inpr_rec l_rul_csr%ROWTYPE;
4410 l_invd_rec l_rul_csr%ROWTYPE;
4411
4412 l_payment_method_id Number;
4413 l_bank_account_id Number;
4414 l_inv_reason_for_review Varchar2(450);
4415 l_inv_review_until_date Date;
4416 l_cash_appl_rule_id Number;
4417 l_invoice_format Varchar2(450);
4418 l_review_invoice_yn Varchar2(450);
4419
4420 l_cust_acct_site_id Number;
4421 l_payment_term_id Number;
4422
4423
4424 BEGIN
4425 -- *******************
4426 -- Validate parameters
4427 -- *******************
4428 IF (l_cpl_id IS NULL
4429 OR l_cpl_id = OKL_API.G_MISS_NUM)
4430 AND (l_contract_id IS NULL
4431 OR l_contract_id = OKL_API.G_MISS_NUM) THEN
4432
4433 l_return_status := OKL_API.G_RET_STS_ERROR;
4434 OKL_API.SET_MESSAGE (
4435 p_app_name => G_APP_NAME,
4436 p_msg_name => G_INCOMPLETE_VEND_BILL,
4437 p_token1 => G_ERROR_TYPE_TOKEN,
4438 p_token1_value => 'Program Error : ',
4439 p_token2 => G_PARAMETER_TOKEN,
4440 p_token2_value => 'Contract Party Identifier and Contract identifier'
4441 );
4442
4443 END IF;
4444
4445 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4446 IF l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR THEN
4447 l_overall_status := l_return_status;
4448 END IF;
4449 END IF;
4450
4451 -- ***************
4452 -- Find Rule Group
4453 -- ***************
4454
4455 IF l_overall_status = OKL_API.G_RET_STS_SUCCESS THEN
4456
4457 IF l_cpl_id IS NOT NULL
4458 AND l_cpl_id <> OKL_API.G_MISS_NUM THEN
4459
4460 OPEN l_k_party_rg_csr (l_cpl_id);
4461 FETCH l_k_party_rg_csr INTO l_k_party_rg_rec;
4462 CLOSE l_k_party_rg_csr;
4463 l_rgd_id := l_k_party_rg_rec.rgd_id;
4464
4465 l_bill_to_site_use_id := l_k_party_rg_rec.bill_to_site_use_id ;
4466 l_cust_acct_id := l_k_party_rg_rec.cust_acct_id;
4467
4468 IF l_k_party_rg_rec.cpl_id IS NULL THEN
4469 l_return_status := OKL_API.G_RET_STS_ERROR;
4470 OKL_API.SET_MESSAGE (
4471 p_app_name => G_APP_NAME,
4472 p_msg_name => G_INCOMPLETE_VEND_BILL,
4473 p_token1 => G_ERROR_TYPE_TOKEN,
4474 p_token1_value => 'Program Error : ',
4475 p_token2 => G_PARAMETER_TOKEN,
4476 p_token2_value => 'Contract Party Identifier'
4477 );
4478 ELSIF l_k_party_rg_rec.bill_to_site_use_id IS NULL THEN
4479 ----------------------------------------------------------------
4480 --Try to fetch billing details from vendor program if lease
4481 --and vp verndor are the same
4482 ----------------------------------------------------------------
4483 If l_contract_id is not null
4484 and l_contract_id <> OKL_API.G_MISS_NUM
4485 Then
4486 --Open vendor program cursor
4487 OPEN l_partner_rg_csr (l_contract_id, l_k_party_rg_rec.object1_id1);
4488 FETCH l_partner_rg_csr INTO l_khr_id,
4489 l_par_id,
4490 l_rgd_id,
4491 l_bill_to_site_use_id,
4492 -- l_party_role, -- modified by zrehman to fix Bug#6341517 on 27-Feb-2008
4493 l_cust_acct_id;
4494 CLOSE l_partner_rg_csr;
4495
4496 ------------------------------------------------------------
4497 --not to raise this ambiguous error when VP does not exist
4498 --If (l_khr_id is null) OR (l_par_id is null) then
4499 -- l_return_status := OKL_API.G_RET_STS_ERROR;
4500 -- OKL_API.SET_MESSAGE (
4501 -- p_app_name => G_APP_NAME,
4502 -- p_msg_name => G_INCOMPLETE_VEND_BILL,
4503 -- p_token1 => G_ERROR_TYPE_TOKEN,
4504 -- p_token1_value => 'Program Error : ',
4505 -- p_token2 => G_PARAMETER_TOKEN,
4506 -- p_token2_value => 'Contract Header Identifier'
4507 -- );
4508 -- Els
4509 --not to raise this ambiguous error when VP does not exist
4510 -------------------------------------------------------------
4511 If l_bill_to_site_use_id is null then
4512
4513 l_return_status := OKL_API.G_RET_STS_ERROR;
4514 OKL_API.SET_MESSAGE (
4515 p_app_name => G_APP_NAME,
4516 p_msg_name => G_INCOMPLETE_VEND_BILL,
4517 p_token1 => G_ERROR_TYPE_TOKEN,
4518 p_token1_value => 'Billing setup not defined.',
4519 p_token2 => G_PARAMETER_TOKEN,
4520 p_token2_value => 'Bill to Site'
4521 );
4522 End If;
4523 ---------------------------------------------------------------
4524 --End of trying to fetch billing details from VP
4525 ---------------------------------------------------------------
4526 Else
4527 l_return_status := OKL_API.G_RET_STS_ERROR;
4528 OKL_API.SET_MESSAGE (
4529 p_app_name => G_APP_NAME,
4530 p_msg_name => G_INCOMPLETE_VEND_BILL,
4531 p_token1 => G_ERROR_TYPE_TOKEN,
4532 p_token1_value => '',
4533 p_token2 => G_PARAMETER_TOKEN,
4534 p_token2_value => 'Bill to Site'
4535 );
4536
4537 End If;
4538 END IF;
4539 ELSE
4540 --exception cpl_id passed is null
4541 l_return_status := OKL_API.G_RET_STS_ERROR;
4542 OKL_API.SET_MESSAGE (
4543 p_app_name => G_APP_NAME,
4544 p_msg_name => G_INCOMPLETE_VEND_BILL,
4545 p_token1 => G_ERROR_TYPE_TOKEN,
4546 p_token1_value => 'Program Error : ',
4547 p_token2 => G_PARAMETER_TOKEN,
4548 p_token2_value => 'Contract Party Identifier'
4549 );
4550
4551 END IF;
4552 END IF;
4553
4554 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4555 IF l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR THEN
4556 l_overall_status := l_return_status;
4557 END IF;
4558 END IF;
4559
4560
4561 IF l_overall_status = OKL_API.G_RET_STS_SUCCESS THEN
4562
4563 --------------------------------------------
4564 --1. Get payment method
4565 --------------------------------------------
4566 open l_rul_csr (p_rul_code => 'LAPMTH',
4567 p_rgp_id => l_rgd_id,
4568 p_chr_id => l_contract_id);
4569 Fetch l_rul_csr into l_pmth_rec;
4570 If l_rul_csr%NOTFOUND then
4571 l_payment_method_id := null;
4572 Else
4573 IF l_pmth_rec.object1_id2 <> '#' THEN
4574 l_payment_method_id := l_pmth_rec.object1_id2;
4575 ELSE
4576 -- This cursor needs to be removed when
4577 -- the view changes to include id2
4578 OPEN l_rcpt_mthd_csr (l_pmth_rec.object1_id1);
4579 FETCH l_rcpt_mthd_csr INTO l_payment_method_id;
4580 CLOSE l_rcpt_mthd_csr;
4581 END IF;
4582 End If;
4583 close l_rul_csr;
4584
4585 --------------------------------------------
4586 --2. Get bank account
4587 --------------------------------------------
4588 open l_rul_csr (p_rul_code => 'LABACC',
4589 p_rgp_id => l_rgd_id,
4590 p_chr_id => l_contract_id);
4591 Fetch l_rul_csr into l_bacc_rec;
4592 If l_rul_csr%NOTFOUND then
4593 l_bank_account_id := null;
4594 Else
4595 --START: rseela 11/28/05 bug#4673593
4596 open l_bank_acc_csr(TO_NUMBER(l_bacc_rec.object1_id1));
4597 fetch l_bank_acc_csr into l_bank_account_id;
4598 close l_bank_acc_csr;
4599 -- l_bank_account_id := l_bacc_rec.object1_id1;
4600 --END: rseela 11/28/05 bug#4673593
4601
4602 End If;
4603 close l_rul_csr;
4604
4605
4606 --------------------------------------------
4607 --3. Get invoice pull for review
4608 --------------------------------------------
4609 open l_rul_csr (p_rul_code => 'LAINPR',
4610 p_rgp_id => l_rgd_id,
4611 p_chr_id => l_contract_id);
4612 Fetch l_rul_csr into l_inpr_rec;
4613 If l_rul_csr%NOTFOUND then
4614 l_inv_reason_for_review := null;
4615 l_inv_review_until_date := null;
4616 Else
4617 l_inv_reason_for_review := l_inpr_rec.rule_information1;
4618 l_inv_review_until_date := fnd_date.canonical_to_date(l_inpr_rec.rule_information2);
4619 End If;
4620 close l_rul_csr;
4621
4622 --------------------------------------------
4623 --4. Get invoice details
4624 --------------------------------------------
4625 open l_rul_csr (p_rul_code => 'LAINVD',
4626 p_rgp_id => l_rgd_id,
4627 p_chr_id => l_contract_id);
4628 Fetch l_rul_csr into l_invd_rec;
4629 If l_rul_csr%NOTFOUND then
4630 l_cash_appl_rule_id := null;
4631 l_invoice_format := null;
4632 l_review_invoice_yn := null;
4633 Else
4634 l_cash_appl_rule_id := l_invd_rec.object1_id1;
4635 l_invoice_format := l_invd_rec.rule_information1;
4636 l_review_invoice_yn := l_invd_rec.rule_information4;
4637 End If;
4638 close l_rul_csr;
4639
4640 END IF;
4641
4642
4643 -- *****************************************************
4644 -- Extract Customer, Bill To and Payment Term from rules
4645 -- *****************************************************
4646
4647 IF l_overall_status = OKL_API.G_RET_STS_SUCCESS THEN
4648
4649 OPEN l_site_use_csr (l_bill_to_site_use_id, 'BILL_TO');
4650 FETCH l_site_use_csr INTO l_site_use_rec;
4651 CLOSE l_site_use_csr;
4652
4653 l_cust_acct_site_id := l_site_use_rec.cust_acct_site_id;
4654 l_payment_term_id := l_site_use_rec.payment_term_id;
4655
4656 IF l_payment_term_id IS NULL
4657 OR l_payment_term_id = OKL_API.G_MISS_NUM THEN
4658 OPEN l_std_terms_csr (
4659 l_site_use_rec.cust_account_id,
4660 l_bill_to_site_use_id);
4661 FETCH l_std_terms_csr INTO l_payment_term_id;
4662 CLOSE l_std_terms_csr;
4663 END IF;
4664
4665 END IF;
4666
4667 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4668 IF l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR THEN
4669 l_overall_status := l_return_status;
4670 END IF;
4671 END IF;
4672
4673 -- ****************
4674 -- Validate Results
4675 -- ****************
4676
4677 IF l_overall_status = OKL_API.G_RET_STS_SUCCESS THEN
4678
4679 --IF px_taiv_rec.ixx_id IS NULL
4680 --OR px_taiv_rec.ixx_id = G_MISS_NUM THEN
4681 IF l_cust_acct_id IS NULL
4682 OR l_cust_acct_id = OKL_API.G_MISS_NUM THEN
4683
4684 l_return_status := OKL_API.G_RET_STS_ERROR;
4685 OKL_API.SET_MESSAGE (
4686 p_app_name => G_APP_NAME,
4687 p_msg_name => G_INCOMPLETE_VEND_BILL,
4688 p_token1 => G_ERROR_TYPE_TOKEN,
4689 p_token1_value => '',
4690 p_token2 => G_PARAMETER_TOKEN,
4691 p_token2_value => 'Customer Account'
4692 );
4693
4694 END IF;
4695
4696 --IF px_taiv_rec.ibt_id IS NULL
4697 --OR px_taiv_rec.ibt_id = G_MISS_NUM THEN
4698 IF l_cust_acct_site_id IS NULL
4699 OR l_cust_acct_site_id = OKL_API.G_MISS_NUM THEN
4700 l_return_status := OKL_API.G_RET_STS_ERROR;
4701 OKL_API.SET_MESSAGE (
4702 p_app_name => G_APP_NAME,
4703 p_msg_name => G_INCOMPLETE_VEND_BILL,
4704 p_token1 => G_ERROR_TYPE_TOKEN,
4705 p_token1_value => '',
4706 p_token2 => G_PARAMETER_TOKEN,
4707 p_token2_value => 'Customer Account Site'
4708 );
4709 END IF;
4710
4711 --IF px_taiv_rec.irt_id IS NULL
4712 --OR px_taiv_rec.irt_id = G_MISS_NUM THEN
4713 IF l_payment_term_id IS NULL
4714 OR l_payment_term_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 => 'Payment Term'
4723 );
4724 END IF;
4725
4726 END IF;
4727
4728 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
4729 IF l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR THEN
4730 l_overall_status := l_return_status;
4731 END IF;
4732 END IF;
4733
4734 x_bill_to_site_use_id := l_bill_to_site_use_id;
4735 x_cust_acct_id := l_cust_acct_id;
4736 --
4737 x_payment_method_id := l_payment_method_id;
4738 x_bank_account_id := l_bank_account_id;
4739 x_inv_reason_for_review := l_inv_reason_for_review;
4740 x_inv_review_until_date := l_inv_review_until_date;
4741 x_cash_appl_rule_id := l_cash_appl_rule_id;
4742 x_invoice_format := l_invoice_format;
4743 x_review_invoice_yn := l_review_invoice_yn;
4744 --
4745 x_cust_acct_site_id := l_cust_acct_site_id;
4746 x_payment_term_id := l_payment_term_id;
4747
4748 x_return_status := l_overall_status;
4749
4750 EXCEPTION
4751
4752 WHEN OTHERS THEN
4753
4754 -- close open cursors
4755 IF l_k_party_rg_csr%ISOPEN THEN
4756 CLOSE l_k_party_rg_csr;
4757 END IF;
4758
4759 IF l_partner_rg_csr%ISOPEN THEN
4760 CLOSE l_partner_rg_csr;
4761 END IF;
4762
4763 IF l_rcpt_mthd_csr%ISOPEN THEN
4764 CLOSE l_rcpt_mthd_csr;
4765 END IF;
4766
4767 IF l_site_use_csr%ISOPEN THEN
4768 CLOSE l_site_use_csr;
4769 END IF;
4770
4771 IF l_std_terms_csr%ISOPEN THEN
4772 CLOSE l_std_terms_csr;
4773 END IF;
4774
4775 IF l_rul_csr%ISOPEN THEN
4776 CLOSE l_rul_csr;
4777 END IF;
4778
4779 -- store SQL error message on message stack for caller
4780 OKL_API.SET_MESSAGE (
4781 p_app_name => G_APP_NAME
4782 ,p_msg_name => G_UNEXPECTED_ERROR
4783 ,p_token1 => G_SQLCODE_TOKEN
4784 ,p_token1_value => sqlcode
4785 ,p_token2 => G_SQLERRM_TOKEN
4786 ,p_token2_value => sqlerrm);
4787
4788
4789 -- notify caller of an UNEXPECTED error
4790 x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
4791
4792 END Get_Vendor_Billing_Info;
4793
4794 -- Start of comments
4795 --
4796 -- Function Name : Get_Trx_Type_Id
4797 -- Description : Local function to fetch trx_type_id (try_id)
4798 -- Business Rules :
4799 -- Parameters : p_trx_type - trx type name
4800 -- p_lang - language
4801 -- History :
4802 -- Version : 1.0
4803 -- End of comments
4804
4805 Function Get_trx_type_id (p_trx_type in varchar2,
4806 p_lang in varchar2) return number is
4807
4808
4809 -- Cursor to get the try_id for the name passed
4810 CURSOR l_try_id_csr (
4811 cp_try_name IN VARCHAR2,
4812 cp_language IN VARCHAR2) IS
4813 SELECT id
4814 FROM okl_trx_types_tl t
4815 WHERE Upper (t.name) LIKE Upper (cp_try_name)
4816 AND t.language = Upper (cp_language);
4817
4818 l_try_id number default null;
4819 begin
4820 l_try_id := Null;
4821 open l_try_id_csr (cp_try_name => p_trx_type,
4822 cp_language => p_lang);
4823 Fetch l_try_id_csr into l_try_id;
4824 If l_try_id_csr%NOTFOUND then
4825 NULL;
4826 End If;
4827 close l_try_id_csr;
4828 return(l_try_id);
4829 Exception
4830 When others then
4831 If l_try_id_csr%ISOPEN then
4832 CLOSE l_try_id_csr;
4833 End If;
4834 OKL_API.SET_MESSAGE( p_app_name => G_APP_NAME
4835 ,p_msg_name => G_UNEXPECTED_ERROR
4836 ,p_token1 => G_SQLCODE_TOKEN
4837 ,p_token1_value => SQLCODE
4838 ,p_token2 => G_SQLERRM_TOKEN
4839 ,p_token2_value => SQLERRM);
4840 Return(l_try_id);
4841 end Get_trx_type_id;
4842
4843 -- varangan - Bug#5474059 - Added - Start
4844 -- Start of comments
4845 -- Procedure Name : insert_billing_records
4846 -- Description : Code in this API was intially part of the procedure
4847 -- Create_Billing_Trx. Creates billing transaction
4848 -- records for subsidies
4849 -- PARAMETERS : IN - p_asdv_tbl : Table of records with subsidy details
4850 -- Created varangan
4851 -- End of comments
4852 PROCEDURE insert_billing_records
4853 (p_api_version IN NUMBER
4854 , p_init_msg_list IN VARCHAR2
4855 , x_return_status OUT NOCOPY VARCHAR2
4856 , x_msg_count OUT NOCOPY NUMBER
4857 , x_msg_data OUT NOCOPY VARCHAR2
4858 , p_chr_id IN NUMBER
4859 , p_asdv_tbl IN asbv_tbl_type) IS
4860 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
4861 l_api_name CONSTANT varchar2(30) := 'insert_billing_records';
4862 l_api_version CONSTANT NUMBER := 1.0;
4863
4864 l_asdv_tbl asbv_tbl_type DEFAULT p_asdv_tbl;
4865 l_asdv_tbl_proc asbv_tbl_type;
4866 i number;
4867 j number;
4868
4869 --30-Oct-03 avsingh : cursor corrected for same vendor match at
4870 --model line level
4871 --cursor to verify theat asset and subsidy vendors are the same
4872 cursor l_samevend_csr(p_vendor_id in number,
4873 p_asset_cle_id in number,
4874 p_chr_id in number) is
4875 Select 'Y'
4876 From okc_k_party_roles_b cplb,
4877 okc_k_lines_b cleb,
4878 okc_line_styles_b lseb
4879 where cplb.cle_id = cleb.id
4880 and cleb.cle_id = p_asset_cle_id
4881 and lseb.id = cleb.lse_id
4882 and lseb.lty_code = 'ITEM'
4883 and cplb.dnz_chr_id = p_chr_id
4884 and cplb.object1_id1 = to_char(p_vendor_id)
4885 and cplb.object1_id2 = '#'
4886 and cplb.jtot_object1_code = 'OKX_VENDOR'
4887 and cplb.rle_code = 'OKL_VENDOR';
4888
4889 l_exists varchar2(1) default'N';
4890 -- varangan - Billing Enhancement changes- Bug#5874824 - begin
4891
4892 /* l_taiv_rec okl_trx_ar_invoices_pub.taiv_rec_type;
4893 l_tilv_rec okl_txl_ar_inv_lns_pub.tilv_rec_type;
4894 l_bpd_acc_rec okl_acc_call_pub.bpd_acc_rec_type;
4895
4896 lx_taiv_rec okl_trx_ar_invoices_pub.taiv_rec_type;
4897 lx_tilv_rec okl_txl_ar_inv_lns_pub.tilv_rec_type;
4898 lx_bpd_acc_rec okl_acc_call_pub.bpd_acc_rec_type;
4899 */
4900
4901 -----------------------------------------------------------
4902 -- Variables for billing API call
4903 -----------------------------------------------------------
4904 lp_taiv_rec okl_tai_pvt.taiv_rec_type;
4905 lp_tilv_rec okl_til_pvt.tilv_rec_type;
4906 lp_tilv_tbl okl_til_pvt.tilv_tbl_type;
4907 lp_tldv_tbl okl_tld_pvt.tldv_tbl_type;
4908
4909 lx_taiv_rec okl_tai_pvt.taiv_rec_type;
4910 lx_tilv_tbl okl_til_pvt.tilv_tbl_type;
4911 lx_tldv_tbl okl_tld_pvt.tldv_tbl_type;
4912
4913 --Varangan - Billing Enhancement changes - Bug#5874824 - End
4914 l_bill_to_site_use_id OKC_K_HEADERS_B.bill_to_site_use_id%TYPE;
4915 l_cust_acct_id OKC_K_PARTY_ROLES_B.cust_acct_id%TYPE;
4916 l_payment_method_id Number;
4917 l_bank_account_id Number;
4918 l_inv_reason_for_review Varchar2(450);
4919 l_inv_review_until_date Date;
4920 l_cash_appl_rule_id Number;
4921 l_invoice_format Varchar2(450);
4922 l_review_invoice_yn Varchar2(450);
4923
4924 l_cust_acct_site_id Number;
4925 l_payment_term_id Number;
4926
4927 --cursor to get vendor cpl_id at header level
4928 cursor l_chrcpl_csr (p_vendor_id in number,
4929 p_chr_id in number) is
4930 select cplb.id
4931 from okc_k_party_roles_b cplb
4932 where cplb.chr_id = p_chr_id
4933 and cplb.dnz_chr_id = p_chr_id
4934 and cplb.cle_id is null
4935 and cplb.object1_id1 = to_char(p_vendor_id)
4936 and cplb.object1_id2 = '#'
4937 and cplb.jtot_object1_code = 'OKX_VENDOR'
4938 and cplb.rle_code = 'OKL_VENDOR';
4939
4940 l_chr_cpl_id number;
4941 l_try_id number;
4942 l_chr_id number DEFAULT p_chr_id;
4943
4944 BEGIN
4945
4946 x_return_status := OKL_API.G_RET_STS_SUCCESS;
4947 -- Call start_activity to create savepoint, check compatibility
4948 -- and initialize message list
4949 x_return_status := OKL_API.START_ACTIVITY (
4950 l_api_name
4951 ,p_init_msg_list
4952 ,'_PVT'
4953 ,x_return_status);
4954 -- Check if activity started successfully
4955 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4956 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4957 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4958 RAISE OKL_API.G_EXCEPTION_ERROR;
4959 END IF;
4960
4961 IF l_asdv_tbl.COUNT = 0 Then
4962 Null;
4963 Else
4964 -------------------------------------------------------------------------
4965 --find out subsidy records for which billing transaction is to be created
4966 -------------------------------------------------------------------------
4967 j := 1;
4968 FOR i in l_asdv_tbl.FIRST..l_asdv_tbl.LAST
4969 LOOP
4970 If (l_asdv_tbl(i).receipt_method_code = 'BILL') OR
4971 (l_asdv_tbl(i).accounting_method_code = 'AMORTIZE') Then
4972 -- OR clause added as only discounts('NET') can be FUNDED
4973 l_asdv_tbl_proc(j) := l_asdv_tbl(i);
4974 j:= j+1;
4975 ElsIf (l_asdv_tbl(i).receipt_method_code = 'FUND') AND
4976 (l_asdv_tbl(i).accounting_method_code = 'NET') then
4977 -- AND clause added as only discounts ('NET') can be funded
4978
4979 ------------------------------------------------------------
4980 --find out if asset vendor and subsidy vendor are the same
4981 --becuase only then net from funding can be done. If not same
4982 --then 'BILL' irrespective of receipt method
4983 ------------------------------------------------------------
4984 l_exists := 'N';
4985 Open l_samevend_csr(p_vendor_id => l_asdv_tbl(i).vendor_id,
4986 p_asset_cle_id => l_asdv_tbl(i).asset_cle_id,
4987 p_chr_id => l_chr_id);
4988 Fetch l_samevend_csr into l_exists;
4989 If l_samevend_csr%NOTFOUND then
4990 null;
4991 End If;
4992 Close l_samevend_csr;
4993
4994 If l_exists = 'N' Then
4995 l_asdv_tbl_proc(j) := l_asdv_tbl(i);
4996 j := j+1;
4997 End If;
4998 End If;
4999 End Loop;
5000
5001 ------------------------------------------------------------------------
5002 --If there are records to process then create billing trx
5003 ------------------------------------------------------------------------
5004 If l_asdv_tbl_proc.COUNT > 0 Then
5005 For i in l_asdv_tbl_proc.FIRST..l_asdv_tbl_proc.LAST Loop
5006 -- Varangan - Billing Enhancement changes - Bug#5874824 - Begin
5007 lp_taiv_rec.khr_id := l_asdv_tbl_proc(i).dnz_chr_id;
5008 lp_taiv_rec.description := l_asdv_tbl_proc(i).description;
5009 lp_taiv_rec.currency_code := l_asdv_tbl_proc(i).currency_code;
5010 lp_taiv_rec.date_invoiced := l_asdv_tbl_proc(i).start_date; --check whether it is ok to give this
5011 lp_taiv_rec.amount := l_asdv_tbl_proc(i).amount;
5012
5013 -- Varangan - Billing Enhancement changes - Bug#5874824 - End
5014 --l_taiv_rec.qte_id := p_quote_id;
5015
5016 /*l_taiv_rec.currency_conversion_type := l_qte_rec.currency_conversion_type;
5017 l_taiv_rec.currency_conversion_rate := l_qte_rec.currency_conversion_rate;
5018 l_taiv_rec.currency_conversion_date := l_qte_rec.currency_conversion_date;
5019 */
5020 --------------------------------------------------------------------
5021 --Get vendor billing information for the transaction
5022 --------------------------------------------------------------------
5023 --fetch contract header cpl_id
5024 open l_chrcpl_csr (p_vendor_id => l_asdv_tbl_proc(i).vendor_id,
5025 p_chr_id => l_chr_id);
5026 Fetch l_chrcpl_csr into l_chr_cpl_id;
5027 If l_chrcpl_csr%NOTFOUND then
5028 NULL;
5029 End If;
5030 Close l_chrcpl_csr;
5031
5032 Get_Vendor_Billing_Info (
5033 p_contract_id => l_chr_id,
5034 p_cpl_id => l_chr_cpl_id,
5035 x_return_status => x_return_status,
5036 x_bill_to_site_use_id => l_bill_to_site_use_id,
5037 x_cust_acct_id => l_cust_acct_id,
5038 x_payment_method_id => l_payment_method_id,
5039 x_bank_account_id => l_bank_account_id,
5040 x_inv_reason_for_review => l_inv_reason_for_review,
5041 x_inv_review_until_date => l_inv_review_until_date,
5042 x_cash_appl_rule_id => l_cash_appl_rule_id,
5043 x_invoice_format => l_invoice_format,
5044 x_review_invoice_yn => l_review_invoice_yn,
5045 x_cust_acct_site_id => l_cust_acct_site_id,
5046 x_payment_term_id => l_payment_term_id);
5047
5048 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5049 OKL_API.SET_MESSAGE (
5050 p_app_name => G_APP_NAME,
5051 p_msg_name => G_VERIFY_VENDOR_BILL,
5052 p_token1 => G_VENDOR_NAME_TOKEN,
5053 p_token1_value => l_asdv_tbl_proc(i).vendor_name
5054 );
5055 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5056 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5057 OKL_API.SET_MESSAGE (
5058 p_app_name => G_APP_NAME,
5059 p_msg_name => G_VERIFY_VENDOR_BILL,
5060 p_token1 => G_VENDOR_NAME_TOKEN,
5061 p_token1_value => l_asdv_tbl_proc(i).vendor_name
5062 );
5063 RAISE OKL_API.G_EXCEPTION_ERROR;
5064 END IF;
5065 -- Varangan - Billing Enhancement changes - Bug#5874824 - Begin
5066 lp_taiv_rec.ibt_id := l_cust_acct_site_id;
5067 lp_taiv_rec.ixx_id := l_cust_acct_id;
5068 lp_taiv_rec.irt_id := l_payment_term_id;
5069 lp_taiv_rec.irm_id := l_payment_method_id;
5070 -- Varangan - Billing Enhancement changes - Bug#5874824 - End
5071 --function to fetch try_id
5072 l_try_id := Get_trx_type_id(p_trx_type => G_AR_INV_TRX_TYPE,
5073 p_lang => 'US');
5074 If l_try_id is null then
5075 x_return_status := OKL_API.G_RET_STS_ERROR;
5076 OKL_API.SET_MESSAGE (
5077 p_app_name => G_APP_NAME,
5078 p_msg_name => G_REQUIRED_VALUE,
5079 p_token1 => G_COL_NAME_TOKEN,
5080 p_token1_value => 'Transaction Type');
5081 RAISE OKL_API.G_EXCEPTION_ERROR;
5082 End If;
5083 -- Varangan - Billing Enhancement changes - Bug#5874824 - Begin
5084 lp_taiv_rec.try_id := l_try_id;
5085 lp_taiv_rec.trx_status_code := G_SUBMIT_STATUS;
5086 lp_taiv_rec.date_entered := sysdate;
5087
5088 lp_taiv_rec.OKL_SOURCE_BILLING_TRX := G_SOURCE_BILLING_TRX_BOOK;
5089
5090 -- Populate the Line record
5091 lp_tilv_rec.amount := l_asdv_tbl_proc(i).amount;
5092 -- varangan - Bug#5474059 - Modified - Start
5093 -- Passing KLE_ID as subsidy line id to track the subsidy records during rebook
5094 lp_tilv_rec.kle_id := l_asdv_tbl_proc(i).subsidy_cle_id;
5095
5096 lp_tilv_rec.description := l_asdv_tbl_proc(i).description;
5097 lp_tilv_rec.sty_id := l_asdv_tbl_proc(i).stream_type_id;
5098 lp_tilv_rec.line_number := i;
5099 lp_tilv_rec.inv_receiv_line_code := G_AR_INV_LINE_CODE;
5100 -- Bug# 4673593 -- pass bank acc# to internal |
5101 lp_tilv_rec.bank_acct_id := l_bank_account_id;
5102 -- Bug# 4673593 -- pass bank acc# to internal |
5103
5104 lp_tilv_tbl(1) := lp_tilv_rec; -- Assign the line record in tilv_tbl structure
5105
5106 ---------------------------------------------------------------------------
5107 -- Call to Billing Centralized API
5108 ---------------------------------------------------------------------------
5109 okl_internal_billing_pvt.create_billing_trx(p_api_version =>l_api_version,
5110 p_init_msg_list =>p_init_msg_list,
5111 x_return_status => x_return_status,
5112 x_msg_count => x_msg_count,
5113 x_msg_data => x_msg_data,
5114 p_taiv_rec => lp_taiv_rec,
5115 p_tilv_tbl => lp_tilv_tbl,
5116 p_tldv_tbl => lp_tldv_tbl,
5117 x_taiv_rec => lx_taiv_rec,
5118 x_tilv_tbl => lx_tilv_tbl,
5119 x_tldv_tbl => lx_tldv_tbl);
5120
5121 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5122 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5123 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5124 RAISE OKL_API.G_EXCEPTION_ERROR;
5125 END IF;
5126
5127
5128
5129 /* -- Commenting the existing code for calling common Billing API
5130
5131 --create internal AR transaction header
5132 okl_trx_ar_invoices_pub.insert_trx_ar_invoices (
5133 p_api_version => p_api_version,
5134 p_init_msg_list => p_init_msg_list,
5135 x_return_status => x_return_status,
5136 x_msg_count => x_msg_count,
5137 x_msg_data => x_msg_data,
5138 p_taiv_rec => l_taiv_rec,
5139 x_taiv_rec => lx_taiv_rec);
5140
5141 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5142 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5143 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5144 RAISE OKL_API.G_EXCEPTION_ERROR;
5145 END IF;
5146
5147
5148 --tilv_record
5149 l_tilv_rec.tai_id := lx_taiv_rec.id;
5150
5151
5152
5153 --create internal AR transaction line
5154 okl_txl_ar_inv_lns_pub.insert_txl_ar_inv_lns (
5155 p_api_version => p_api_version,
5156 p_init_msg_list => p_init_msg_list,
5157 x_return_status => x_return_status,
5158 x_msg_count => x_msg_count,
5159 x_msg_data => x_msg_data,
5160 p_tilv_rec => l_tilv_rec,
5161 x_tilv_rec => lx_tilv_rec);
5162
5163 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5164 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5165 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5166 RAISE OKL_API.G_EXCEPTION_ERROR;
5167 END IF;
5168
5169
5170 --accounting trx
5171 l_bpd_acc_rec.id := lx_tilv_rec.id;
5172 l_bpd_acc_rec.source_table := G_AR_LINES_SOURCE;
5173
5174 -- Create Accounting Distribution
5175 okl_acc_call_pub.create_acc_trans (
5176 p_api_version => p_api_version,
5177 p_init_msg_list => p_init_msg_list,
5178 x_return_status => x_return_status,
5179 x_msg_count => x_msg_count,
5180 x_msg_data => x_msg_data,
5181 p_bpd_acc_rec => l_bpd_acc_rec);
5182
5183 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5184 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5185 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5186 RAISE OKL_API.G_EXCEPTION_ERROR;
5187 END IF; */
5188
5189 -- Varangan - Billing Enhancement changes - Bug#5874824 - End
5190 End Loop;
5191 End If;
5192 End If;
5193
5194 l_asdv_tbl_proc.delete;
5195 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
5196
5197 EXCEPTION
5198 WHEN OKL_API.G_EXCEPTION_ERROR THEN
5199 If l_samevend_csr%ISOPEN then
5200 close l_samevend_csr;
5201 End If;
5202 If l_chrcpl_csr%ISOPEN then
5203 close l_chrcpl_csr;
5204 End If;
5205 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5206 l_api_name,
5207 G_PKG_NAME,
5208 'OKL_API.G_RET_STS_ERROR',
5209 x_msg_count,
5210 x_msg_data,
5211 '_PVT');
5212 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5213 If l_samevend_csr%ISOPEN then
5214 close l_samevend_csr;
5215 End If;
5216 If l_chrcpl_csr%ISOPEN then
5217 close l_chrcpl_csr;
5218 End If;
5219 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5220 l_api_name,
5221 G_PKG_NAME,
5222 'OKL_API.G_RET_STS_UNEXP_ERROR',
5223 x_msg_count,
5224 x_msg_data,
5225 '_PVT');
5226 WHEN OTHERS THEN
5227 If l_samevend_csr%ISOPEN then
5228 close l_samevend_csr;
5229 End If;
5230 If l_chrcpl_csr%ISOPEN then
5231 close l_chrcpl_csr;
5232 End If;
5233 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5234 l_api_name,
5235 G_PKG_NAME,
5236 'OTHERS',
5237 x_msg_count,
5238 x_msg_data,
5239 '_PVT');
5240 END insert_billing_records;
5241 -- varangan - Bug#5474059 - Added - End
5242 --------------------------------------------------------------------------------
5243 --Name : Rebook_Synchronize
5244 --Date : 08-Sep-2003
5245 --Purpose : This will be called during online rebooks to synchronize any
5246 -- changes made on subsidies
5247 --------------------------------------------------------------------------------
5248 PROCEDURE rebook_synchronize(
5249 p_api_version IN NUMBER,
5250 p_init_msg_list IN VARCHAR2,
5251 x_return_status OUT NOCOPY VARCHAR2,
5252 x_msg_count OUT NOCOPY NUMBER,
5253 x_msg_data OUT NOCOPY VARCHAR2,
5254 p_rbk_chr_id in number,
5255 p_orig_chr_id in number
5256 ) is
5257
5258 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
5259 l_api_name CONSTANT varchar2(30) := 'REBOOK_SYNCHRONIZE';
5260 l_api_version CONSTANT NUMBER := 1.0;
5261
5262
5263
5264 --2.cursors to check if any of the subsidy elements have changed
5265 ---------------------------------------------------------------------------
5266 --get subsidy elements from rebook copy contract
5267 ---------------------------------------------------------------------------
5268 cursor l_subelm_rbk_csr(p_chr_id in number) is
5269 select kle.SUBSIDY_ID
5270 ,clet.NAME
5271 ,clet.ITEM_DESCRIPTION
5272 ,kle.AMOUNT
5273 ,kle.SUBSIDY_OVERRIDE_AMOUNT
5274 ,cleb.orig_system_id1
5275 ,cplb.object1_id1 vendor_id
5276 ,cplb.id cpl_id
5277 ,kle.sty_id sty_id
5278 from okl_k_lines kle,
5279 okc_k_lines_tl clet,
5280 okc_k_lines_b cleb,
5281 okc_statuses_b stsb,
5282 okc_line_styles_b lseb,
5283 okc_k_party_roles_b cplb
5284 where kle.id = cleb.id
5285 and clet.id = cleb.id
5286 and clet.language = userenv('LANG')
5287 and cleb.dnz_chr_id = p_chr_id
5288 and cleb.orig_system_id1 is not null
5289 and stsb.code = cleb.sts_code
5290 and stsb.ste_code not in ('CANCELLED')
5291 and lseb.id = cleb.lse_id
5292 and lseb.lty_code = 'SUBSIDY'
5293 and cplb.cle_id = cleb.id
5294 and cplb.rle_code = 'OKL_VENDOR'
5295 and cplb.dnz_chr_id = p_chr_id;
5296
5297 l_subelm_rbk_rec l_subelm_rbk_csr%ROWTYPE;
5298
5299 ---------------------------------------------------------------------------
5300 --get subsidy elements from original contract
5301 ---------------------------------------------------------------------------
5302 cursor l_subelm_orig_csr(p_cle_id in number,
5303 p_chr_id in number) is
5304 select kle.SUBSIDY_ID
5305 ,clet.NAME
5306 ,clet.ITEM_DESCRIPTION
5307 ,kle.AMOUNT
5308 ,kle.SUBSIDY_OVERRIDE_AMOUNT
5309 ,cplb.object1_id1 vendor_id
5310 ,cplb.id cpl_id
5311 ,kle.sty_id sty_id
5312 from okl_k_lines kle,
5313 okc_k_lines_tl clet,
5314 okc_k_lines_b cleb,
5315 okc_statuses_b stsb,
5316 okc_line_styles_b lseb,
5317 okc_k_party_roles_b cplb
5318 where kle.id = cleb.id
5319 and clet.id = cleb.id
5320 and clet.language = userenv('LANG')
5321 and cleb.id = p_cle_id
5322 and cleb.dnz_chr_id = p_chr_id
5323 and stsb.code = cleb.sts_code
5324 and stsb.ste_code not in ('CANCELLED')
5325 and lseb.id = cleb.lse_id
5326 and lseb.lty_code = 'SUBSIDY'
5327 and cplb.cle_id = cleb.id
5328 and cplb.rle_code = 'OKL_VENDOR'
5329 and cplb.dnz_chr_id = p_chr_id;
5330
5331 l_subelm_orig_rec l_subelm_orig_csr%ROWTYPE;
5332
5333 ----------------------------------------------------------
5334 --cursors to get party payment details
5335 ----------------------------------------------------------
5336 cursor l_ppyd_rbk_csr (p_cpl_id in number) is
5337 select ID
5338 ,CPL_ID
5339 ,VENDOR_ID
5340 ,PAY_SITE_ID
5341 ,PAYMENT_TERM_ID
5342 ,PAYMENT_METHOD_CODE
5343 ,PAY_GROUP_CODE
5344 from okl_party_payment_dtls
5345 where cpl_id = p_cpl_id;
5346
5347 l_ppyd_rbk_rec l_ppyd_rbk_csr%ROWTYPE;
5348
5349 cursor l_ppyd_orig_csr (p_cpl_id in number) is
5350 select ID
5351 ,CPL_ID
5352 ,VENDOR_ID
5353 ,PAY_SITE_ID
5354 ,PAYMENT_TERM_ID
5355 ,PAYMENT_METHOD_CODE
5356 ,PAY_GROUP_CODE
5357 from okl_party_payment_dtls
5358 where cpl_id = p_cpl_id;
5359
5360 l_ppyd_orig_rec l_ppyd_orig_csr%ROWTYPE;
5361
5362 ------------------------------------------------------------------------------
5363 --cursor to find out subsidy line which has been deleted
5364 ------------------------------------------------------------------------------
5365 cursor l_del_sub_csr (p_orig_chr_id in number,
5366 p_rbk_chr_id in number) is
5367 select cleb.id cle_id,
5368 cplb.id cpl_id
5369 from okc_k_lines_b cleb,
5370 okc_line_styles_b lseb,
5371 okc_k_party_roles_b cplb
5372 where cleb.dnz_chr_id = p_orig_chr_id
5373 and lseb.id = cleb.lse_id
5374 and lseb.lty_code = 'SUBSIDY'
5375 and cplb.cle_id = cleb.id
5376 and cplb.dnz_chr_id = p_orig_chr_id
5377 and cplb.rle_code = 'OKL_VENDOR'
5378 --line was deleted from rebook copy :
5379 and not exists (select '1'
5380 from okc_k_lines_b cleb2
5381 where cleb2.orig_system_id1 = cleb.id
5382 and cleb2.dnz_chr_id = p_rbk_chr_id)
5383 --line is not a new line created during this rebook
5384 and not exists (select '1'
5385 from okc_k_lines_b cleb3
5386 where cleb3.id = cleb.orig_system_id1
5387 and cleb3.dnz_chr_id = p_rbk_chr_id);
5388
5389 l_del_sub_id number;
5390 l_del_cpl_id number;
5391
5392 ------------------------------------------------------------------------------
5393 --cursor to find out new subsidy lines which have been added
5394 ------------------------------------------------------------------------------
5395 cursor l_new_sub_csr (p_chr_id in number) is
5396 select kle.subsidy_id subsidy_id,
5397 cleb.id subsidy_cle_id,
5398 clet.name name,
5399 clet.item_description description,
5400 kle.amount amount,
5401 kle.subsidy_override_amount subsidy_override_amount,
5402 cleb.dnz_chr_id dnz_chr_id,
5403 cleb.cle_id asset_cle_id,
5404 cplb.id cpl_id,
5405 cplb.object1_id1 vendor_id,
5406 cleb.lse_id lse_id,
5407 cleb.display_sequence display_sequence,
5408 cleb.start_date start_date,
5409 cleb.end_date end_date,
5410 cleb.currency_code currency_code,
5411 cleb.sts_code sts_code,
5412 kle.sty_id sty_id,
5413 asst_cleb.orig_system_id1 orig_asst_cle_id
5414
5415 from
5416 okc_k_lines_b asst_cleb,
5417 okc_statuses_b asst_sts,
5418 okc_k_party_roles_b cplb,
5419 okc_k_lines_tl clet,
5420 okl_k_lines kle,
5421 okc_line_styles_b lseb,
5422 okc_k_lines_b cleb
5423
5424 Where asst_cleb.id = cleb.cle_id
5425 And asst_cleb.dnz_chr_id = cleb.dnz_chr_id
5426 And asst_sts.code = asst_cleb.sts_code
5427 And asst_sts.ste_code not in ('HOLD','EXPIRED','TERMINATED','CANCELLED')
5428 And cplb.jtot_object1_code = 'OKX_VENDOR'
5429 And cplb.dnz_chr_id = cleb.dnz_chr_id
5430 And cplb.cle_id = cleb.id
5431 And cplb.rle_code = 'OKL_VENDOR'
5432 And clet.id = cleb.id
5433 And clet.language = userenv('LANG')
5434 And kle.id = cleb.id
5435 And lseb.id = cleb.lse_id
5436 And lseb.lty_code = 'SUBSIDY'
5437 And cleb.dnz_chr_id = p_chr_id
5438 And cleb.orig_system_id1 is null
5439 And asst_cleb.orig_system_id1 is not null
5440 And cleb.sts_code <> 'ABANDONED';
5441
5442 l_new_sub_rec l_new_sub_csr%ROWTYPE;
5443
5444 --cursor to get asset line id if asset line is new
5445 cursor l_cleb_csr (p_orig_cle_id in number) is
5446 select cleb.id
5447 from okc_k_lines_b cleb
5448 where cleb.orig_system_id1 = p_orig_cle_id;
5449
5450 l_asset_cle_id okc_k_lines_b.ID%TYPE;
5451
5452 --record structures for update and delete
5453
5454 l_asst_clev_rec okl_okc_migration_pvt.clev_rec_type;
5455 l_asst_klev_rec okl_contract_pub.klev_rec_type;
5456 lx_asst_clev_rec okl_okc_migration_pvt.clev_rec_type;
5457 lx_asst_klev_rec okl_contract_pub.klev_rec_type;
5458
5459 l_sub_clev_rec okl_okc_migration_pvt.clev_rec_type;
5460 l_sub_klev_rec okl_contract_pub.klev_rec_type;
5461 lx_sub_clev_rec okl_okc_migration_pvt.clev_rec_type;
5462 lx_sub_klev_rec okl_contract_pub.klev_rec_type;
5463
5464
5465 l_cplv_rec okl_okc_migration_pvt.cplv_rec_type;
5466 lx_cplv_rec okl_okc_migration_pvt.cplv_rec_type;
5467
5468
5469 l_pydv_rec okl_pyd_pvt.ppydv_rec_type;
5470 lx_pydv_rec okl_pyd_pvt.ppydv_rec_type;
5471
5472 -- sjalasut, added local variables to support logging. added as part of
5473 -- subsidy pools enhancement
5474 l_module CONSTANT fnd_log_messages.module%TYPE := 'okl.plsql.OKL_SUBSIDY_PROCESS_PVT.REBOOK_SYNCHRONIZE';
5475 l_debug_enabled VARCHAR2(10);
5476 is_debug_statement_on BOOLEAN;
5477
5478 --Bug# 4558486
5479 l_kplv_rec okl_k_party_roles_pvt.kplv_rec_type;
5480 lx_kplv_rec okl_k_party_roles_pvt.kplv_rec_type;
5481
5482 --Bug# 4899328
5483 l_orig_asset_cle_id number;
5484 l_cap_amount number;
5485 l_clev_fin_rec okl_okc_migration_pvt.clev_rec_type;
5486 l_klev_fin_rec okl_contract_pub.klev_rec_type;
5487 lx_clev_fin_rec okl_okc_migration_pvt.clev_rec_type;
5488 lx_klev_fin_rec okl_contract_pub.klev_rec_type;
5489
5490 -- varangan - Bug#5474059 - Added - Start
5491 l_new_asdv_tbl asbv_tbl_type;
5492 l_new_cnt NUMBER DEFAULT 0;
5493 -- varangan - Bug#5474059 - Added - End
5494 begin
5495
5496 x_return_status := OKL_API.G_RET_STS_SUCCESS;
5497 -- Call start_activity to create savepoint, check compatibility
5498 -- and initialize message list
5499 x_return_status := OKL_API.START_ACTIVITY (
5500 l_api_name
5501 ,p_init_msg_list
5502 ,'_PVT'
5503 ,x_return_status);
5504 -- Check if activity started successfully
5505 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5506 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5507 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5508 RAISE OKL_API.G_EXCEPTION_ERROR;
5509 END IF;
5510
5511 -- check if debug is enabled
5512 l_debug_enabled := okl_debug_pub.check_log_enabled;
5513 -- check for logging on STATEMENT level
5514 is_debug_statement_on := okl_debug_pub.check_log_on(l_module,FND_LOG.LEVEL_STATEMENT);
5515
5516 --------------------------------------
5517 --start of input parameter validations
5518 --------------------------------------
5519 --1.validate p_rbk_chr_id
5520 If (p_rbk_chr_id is NULL) or (p_rbk_chr_id = OKL_API.G_MISS_NUM) then
5521 OKL_API.set_message(
5522 p_app_name => G_APP_NAME,
5523 p_msg_name => G_API_MISSING_PARAMETER,
5524 p_token1 => G_API_NAME_TOKEN,
5525 p_token1_value => l_api_name,
5526 p_token2 => G_MISSING_PARAM_TOKEN,
5527 p_token2_value => 'p_rbk_chr_id');
5528 x_return_status := OKL_API.G_RET_STS_ERROR;
5529 Raise OKL_API.G_EXCEPTION_ERROR;
5530 Elsif (p_rbk_chr_id is not NULL) and (p_rbk_chr_id <> OKL_API.G_MISS_NUM) then
5531 validate_chr_id(p_chr_id => p_rbk_chr_id,
5532 x_return_status => x_return_status);
5533 IF x_return_status = OKL_API.G_RET_STS_ERROR then
5534 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_rbk_chr_id');
5535 Raise OKL_API.G_EXCEPTION_ERROR;
5536 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
5537 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5538 End If;
5539 End If;
5540 --2.validate p_orig_chr_id
5541 If (p_orig_chr_id is NULL) or (p_orig_chr_id = OKL_API.G_MISS_NUM) then
5542 OKL_API.set_message(
5543 p_app_name => G_APP_NAME,
5544 p_msg_name => G_API_MISSING_PARAMETER,
5545 p_token1 => G_API_NAME_TOKEN,
5546 p_token1_value => l_api_name,
5547 p_token2 => G_MISSING_PARAM_TOKEN,
5548 p_token2_value => 'p_orig_chr_id');
5549 x_return_status := OKL_API.G_RET_STS_ERROR;
5550 Raise OKL_API.G_EXCEPTION_ERROR;
5551 Elsif (p_orig_chr_id is not NULL) and (p_orig_chr_id <> OKL_API.G_MISS_NUM) then
5552 validate_chr_id(p_chr_id => p_orig_chr_id,
5553 x_return_status => x_return_status);
5554 IF x_return_status = OKL_API.G_RET_STS_ERROR then
5555 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_orig_chr_id');
5556 Raise OKL_API.G_EXCEPTION_ERROR;
5557 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
5558 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5559 End If;
5560 End If;
5561 -------------------------------------
5562 --end of input parameter validations
5563 ------------------------------------
5564 /*
5565 * sjalasut, added code here to call synchornization of subsidy pool transactions
5566 * before synchronizing the subsidy lines. this code is added as part of
5567 * subsidy pools enhancement. START
5568 */
5569 -- write to log
5570 IF(NVL(l_debug_enabled,'N')='Y' AND is_debug_statement_on) THEN
5571 okl_debug_pub.log_debug(FND_LOG.LEVEL_STATEMENT,
5572 l_module,
5573 'invoking OKL_SUBSIDY_POOL_AUTH_TRX_PVT.create_pool_trx_khr_rbk'||
5574 ' p_rbk_chr_id '||p_rbk_chr_id||' p_orig_chr_id '||p_orig_chr_id
5575 );
5576 END IF; -- end of NVL(l_debug_enabled,'N')='Y' AND is_debug_statement_on
5577
5578 OKL_SUBSIDY_POOL_AUTH_TRX_PVT.create_pool_trx_khr_rbk(p_api_version => p_api_version
5579 ,p_init_msg_list => p_init_msg_list
5580 ,x_return_status => x_return_status
5581 ,x_msg_count => x_msg_count
5582 ,x_msg_data => x_msg_data
5583 ,p_rbk_chr_id => p_rbk_chr_id
5584 ,p_orig_chr_id => p_orig_chr_id
5585 );
5586 -- write to log
5587 IF(NVL(l_debug_enabled,'N')='Y' AND is_debug_statement_on) THEN
5588 okl_debug_pub.log_debug(FND_LOG.LEVEL_STATEMENT,
5589 l_module,
5590 'OKL_SUBSIDY_POOL_AUTH_TRX_PVT.create_pool_trx_khr_rbk returned with status '||x_return_status||
5591 ' x_msg_data '||x_msg_data
5592 );
5593 END IF; -- end of NVL(l_debug_enabled,'N')='Y' AND is_debug_statement_on
5594
5595 IF(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR)THEN
5596 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5597 ELSIF(x_return_status = OKL_API.G_RET_STS_ERROR)THEN
5598 RAISE OKL_API.G_EXCEPTION_ERROR;
5599 END IF;
5600
5601 /*
5602 * sjalasut, added code here to call synchornization of subsidy pool transactions
5603 * before synchronizing the subsidy lines. this code is added as part of
5604 * subsidy pools enhancement. END
5605 */
5606
5607 -----------------------------------------------------------------------------
5608 --A. Synchronize subsidized amounts on the financial asset lines
5609 -----------------------------------------------------------------------------
5610 --This code(Part A) is promoted to rebook api as asset lines are being synched there
5611
5612 ----------------------------------------------------------------------------
5613 --B. Sunchronize subsidy line attributes
5614 ----------------------------------------------------------------------------
5615 --1. Fetch subsidy line attributes for the rebook copy
5616 Open l_subelm_rbk_csr(p_chr_id => p_rbk_chr_id);
5617 Loop
5618 Fetch l_subelm_rbk_csr into l_subelm_rbk_rec;
5619 Exit when l_subelm_rbk_csr%NOTFOUND;
5620 --2. Fetch subsidy line attributes for original contract
5621 Open l_subelm_orig_csr(p_cle_id => l_subelm_rbk_rec.orig_system_id1,
5622 p_chr_id => p_orig_chr_id);
5623 Fetch l_subelm_orig_csr into l_subelm_orig_rec;
5624 If l_subelm_orig_csr%NOTFOUND then
5625 Null;
5626 Else
5627 --3. syncronize subsidy line attributes in case of differences
5628 If (nvl(l_subelm_orig_rec.amount,0) <> nvl(l_subelm_rbk_rec.Amount,0)) OR
5629 (nvl(l_subelm_orig_rec.subsidy_override_amount,0) <> nvl(l_subelm_rbk_rec.subsidy_override_Amount,0)) OR
5630 (l_subelm_orig_rec.subsidy_id <> l_subelm_rbk_rec.subsidy_id) OR
5631 (l_subelm_orig_rec.sty_id <> l_subelm_rbk_rec.sty_id) Then
5632
5633 l_sub_clev_rec.id := l_subelm_rbk_rec.orig_system_id1;
5634 l_sub_klev_rec.id := l_subelm_rbk_rec.orig_system_id1;
5635 l_sub_klev_rec.Amount := l_subelm_rbk_rec.Amount;
5636 l_sub_klev_rec.Subsidy_override_Amount := l_subelm_rbk_rec.Subsidy_override_Amount;
5637 l_sub_klev_rec.Subsidy_id := l_subelm_rbk_rec.Subsidy_id;
5638 l_sub_clev_rec.Name := l_subelm_rbk_rec.Name;
5639 l_sub_clev_rec.item_description := l_subelm_rbk_rec.item_description;
5640 l_sub_klev_rec.sty_id := l_subelm_rbk_rec.sty_id;
5641
5642 --dbms_output.put_line('Amount before updating line '||to_char(l_sub_klev_rec.Amount));
5643 okl_contract_pub.update_contract_line
5644 (p_api_version => p_api_version,
5645 p_init_msg_list => p_init_msg_list,
5646 x_return_status => x_return_status,
5647 x_msg_count => x_msg_count,
5648 x_msg_data => x_msg_data,
5649 p_clev_rec => l_sub_clev_rec,
5650 p_klev_rec => l_sub_klev_rec,
5651 x_clev_rec => lx_sub_clev_rec,
5652 x_klev_rec => lx_sub_klev_rec);
5653
5654 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5655 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5656 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5657 RAISE OKL_API.G_EXCEPTION_ERROR;
5658 END IF;
5659
5660 --Bug# 4899328 : Recalculate OEC and capital amount and update financial asset line
5661 l_orig_asset_cle_id := lx_sub_clev_rec.cle_id;
5662 OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
5663 p_init_msg_list => p_init_msg_list,
5664 x_return_status => x_return_status,
5665 x_msg_count => x_msg_count,
5666 x_msg_data => x_msg_data,
5667 p_formula_name => G_FORMULA_CAP,
5668 p_contract_id => p_orig_chr_id,
5669 p_line_id => l_orig_asset_cle_id,
5670 x_value => l_cap_amount);
5671
5672 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5673 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5674 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5675 RAISE OKL_API.G_EXCEPTION_ERROR;
5676 END IF;
5677
5678 ----------------------------------------------------------------------
5679 --call api to update costs on asset line
5680 ----------------------------------------------------------------------
5681 l_clev_fin_rec.id := l_orig_asset_cle_id;
5682 l_klev_fin_rec.id := l_orig_asset_cle_id;
5683 l_klev_fin_rec.capital_amount := l_cap_amount;
5684
5685
5686 okl_contract_pub.update_contract_line
5687 (p_api_version => p_api_version,
5688 p_init_msg_list => p_init_msg_list,
5689 x_return_status => x_return_status,
5690 x_msg_count => x_msg_count,
5691 x_msg_data => x_msg_data,
5692 p_clev_rec => l_clev_fin_rec,
5693 p_klev_rec => l_klev_fin_rec,
5694 x_clev_rec => lx_clev_fin_rec,
5695 x_klev_rec => lx_klev_fin_rec
5696 );
5697
5698 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5699 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5700 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5701 RAISE OKL_API.G_EXCEPTION_ERROR;
5702 END IF;
5703 End If;
5704 --Bug# 4899328
5705
5706 --4. syncronize subsidy party attributes in case of differences
5707 IF (l_subelm_orig_rec.vendor_id <> l_subelm_rbk_rec.vendor_id) Then
5708 Null;
5709 --------------------------------------------------------------
5710 --***(i)Commented as syncing vendor not allowed during rebooks
5711 --as per srawlings: if vendor is to be changed delete the
5712 --subsidy and add a new one
5713 /*------------------------------------------------------------
5714 --l_cplv_rec.id := l_subelm_orig_rec.cpl_id;
5715 --l_cplv_rec.object1_id1 := l_subelm_rbk_rec.vendor_id;
5716
5717 --okl_okc_migration_pvt.update_k_party_role
5718 --(p_api_version => p_api_version,
5719 --p_init_msg_list => p_init_msg_list,
5720 --x_return_status => x_return_status,
5721 --x_msg_count => x_msg_count,
5722 --x_msg_data => x_msg_data,
5723 --p_cplv_rec => l_cplv_rec,
5724 --x_cplv_rec => lx_cplv_rec);
5725
5726 --IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5727 --RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5728 --ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5729 --RAISE OKL_API.G_EXCEPTION_ERROR;
5730 --END IF;
5731 -----------------------------------------------------------*/
5732 --***Commented as syncing vendor not allowed during rebooks
5733 --as per srawlings
5734 -----------------------------------------------------------
5735 End If;
5736
5737 -----------------------------------------------------------------------
5738 --In view of the above decesion(i) of not changing the vendor during re-book,
5739 --party payment details will be synced only if the vendor is same on
5740 --rebook copy and the original contract. So enclosed the party payment
5741 --details sync code in IF clause below.
5742 ------------------------------------------------------------------------
5743 IF (l_subelm_orig_rec.vendor_id = l_subelm_rbk_rec.vendor_id) THEN --new IF clause
5744 --5. party payment details synchronization
5745 open l_ppyd_rbk_csr (p_cpl_id => l_subelm_rbk_rec.cpl_id);
5746 fetch l_ppyd_rbk_csr into l_ppyd_rbk_rec;
5747 If l_ppyd_rbk_csr%NOTFOUND then
5748 open l_ppyd_orig_csr (p_cpl_id => l_subelm_orig_rec.cpl_id);
5749 fetch l_ppyd_orig_csr into l_ppyd_orig_rec;
5750 If l_ppyd_orig_csr%NOTFOUND then
5751 null;
5752 Else
5753 --delete party payment details
5754 l_pydv_rec.id := l_ppyd_orig_rec.id;
5755
5756 OKL_PYD_PVT.delete_row
5757 (p_api_version => p_api_version,
5758 p_init_msg_list => p_init_msg_list,
5759 x_return_status => x_return_status,
5760 x_msg_count => x_msg_count,
5761 x_msg_data => x_msg_data,
5762 p_ppydv_rec => l_pydv_rec);
5763
5764
5765 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5766 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5767 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5768 RAISE OKL_API.G_EXCEPTION_ERROR;
5769 END IF;
5770 End If;
5771 close l_ppyd_orig_csr;
5772 Else
5773 open l_ppyd_orig_csr (p_cpl_id => l_subelm_orig_rec.cpl_id);
5774 fetch l_ppyd_orig_csr into l_ppyd_orig_rec;
5775 If l_ppyd_orig_csr%NOTFOUND then
5776
5777 --create payment details row
5778 l_pydv_rec.cpl_id := l_subelm_orig_rec.cpl_id;
5779 l_pydv_rec.vendor_id := l_ppyd_rbk_rec.vendor_id;
5780 l_pydv_rec.pay_site_id := l_ppyd_rbk_rec.pay_site_id;
5781 l_pydv_rec.payment_term_id := l_ppyd_rbk_rec.payment_term_id;
5782 l_pydv_rec.payment_method_code := l_ppyd_rbk_rec.payment_method_code;
5783 l_pydv_rec.pay_group_code := l_ppyd_rbk_rec.pay_group_code;
5784
5785 OKL_PYD_PVT.insert_row
5786 (p_api_version => p_api_version,
5787 p_init_msg_list => p_init_msg_list,
5788 x_return_status => x_return_status,
5789 x_msg_count => x_msg_count,
5790 x_msg_data => x_msg_data,
5791 p_ppydv_rec => l_pydv_rec,
5792 x_ppydv_rec => lx_pydv_rec);
5793
5794
5795 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5796 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5797 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5798 RAISE OKL_API.G_EXCEPTION_ERROR;
5799 END IF;
5800
5801
5802 Else
5803 --if payment details are not equal
5804 If (l_ppyd_orig_rec.pay_site_id <> l_ppyd_rbk_rec.pay_site_id) OR
5805 (l_ppyd_orig_rec.payment_term_id <> l_ppyd_rbk_rec.payment_term_id) OR
5806 (l_ppyd_orig_rec.payment_method_code <> l_ppyd_rbk_rec.payment_method_code) OR
5807 (l_ppyd_orig_rec.pay_group_code <> l_ppyd_rbk_rec.pay_group_code) Then
5808
5809 l_pydv_rec.id := l_ppyd_orig_rec.id;
5810 l_pydv_rec.cpl_id := l_subelm_orig_rec.cpl_id;
5811 l_pydv_rec.vendor_id := l_ppyd_rbk_rec.vendor_id;
5812 l_pydv_rec.pay_site_id := l_ppyd_rbk_rec.pay_site_id;
5813 l_pydv_rec.payment_term_id := l_ppyd_rbk_rec.payment_term_id;
5814 l_pydv_rec.payment_method_code := l_ppyd_rbk_rec.payment_method_code;
5815 l_pydv_rec.pay_group_code := l_ppyd_rbk_rec.pay_group_code;
5816
5817 okl_pyd_pvt.update_row
5818 (p_api_version => p_api_version,
5819 p_init_msg_list => p_init_msg_list,
5820 x_return_status => x_return_status,
5821 x_msg_count => x_msg_count,
5822 x_msg_data => x_msg_data,
5823 p_ppydv_rec => l_pydv_rec,
5824 x_ppydv_rec => lx_pydv_rec);
5825
5826
5827 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5828 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5829 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5830 RAISE OKL_API.G_EXCEPTION_ERROR;
5831 END IF;
5832 End If;
5833 End If;
5834 close l_ppyd_orig_csr;
5835 End If;
5836 Close l_ppyd_rbk_csr;
5837 END IF;-- If for effective only if vendor has not been modified
5838 -----------------------------------------------------------------------------------
5839 --party payment detail updates are effective only if vendor has not been modified on
5840 --rebook copy - as vendor updates are not allowed on a subsidy line during rebook
5841 ------------------------------------------------------------------------------------
5842 End If;
5843 Close l_subelm_orig_csr;
5844 End Loop;
5845 Close l_subelm_rbk_csr;
5846
5847 ----------------------------------------------------------------------------
5848 --C. Delete any subsidy lines deleted during rebook
5849 ----------------------------------------------------------------------------
5850 open l_del_sub_csr (p_orig_chr_id => p_orig_chr_id,
5851 p_rbk_chr_id => p_rbk_chr_id);
5852 Loop
5853 Fetch l_del_sub_csr into l_del_sub_id,
5854 l_del_cpl_id;
5855 Exit when l_del_sub_csr%NOTFOUND;
5856
5857 --3. Logically Delete subsidy line
5858 l_sub_clev_rec.id := l_del_sub_id;
5859 l_sub_klev_rec.id := l_del_sub_id;
5860 l_sub_clev_rec.sts_code := 'ABANDONED';
5861
5862 okl_contract_pub.update_contract_line
5863 (p_api_version => p_api_version,
5864 p_init_msg_list => p_init_msg_list,
5865 x_return_status => x_return_status,
5866 x_msg_count => x_msg_count,
5867 x_msg_data => x_msg_data,
5868 p_clev_rec => l_sub_clev_rec,
5869 p_klev_rec => l_sub_klev_rec,
5870 x_clev_rec => lx_sub_clev_rec,
5871 x_klev_rec => lx_sub_klev_rec);
5872
5873 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5874 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5875 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5876 RAISE OKL_API.G_EXCEPTION_ERROR;
5877 END IF;
5878
5879 /*********can not physically delete line on a booked K ****/
5880
5881 --Bug# 4899328 : Recalculate OEC and capital amount and update financial asset line
5882 l_orig_asset_cle_id := lx_sub_clev_rec.cle_id;
5883 OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
5884 p_init_msg_list => p_init_msg_list,
5885 x_return_status => x_return_status,
5886 x_msg_count => x_msg_count,
5887 x_msg_data => x_msg_data,
5888 p_formula_name => G_FORMULA_CAP,
5889 p_contract_id => p_orig_chr_id,
5890 p_line_id => l_orig_asset_cle_id,
5891 x_value => l_cap_amount);
5892
5893 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5894 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5895 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5896 RAISE OKL_API.G_EXCEPTION_ERROR;
5897 END IF;
5898
5899 ----------------------------------------------------------------------
5900 --call api to update costs on asset line
5901 ----------------------------------------------------------------------
5902 l_clev_fin_rec.id := l_orig_asset_cle_id;
5903 l_klev_fin_rec.id := l_orig_asset_cle_id;
5904 l_klev_fin_rec.capital_amount := l_cap_amount;
5905
5906
5907 okl_contract_pub.update_contract_line
5908 (p_api_version => p_api_version,
5909 p_init_msg_list => p_init_msg_list,
5910 x_return_status => x_return_status,
5911 x_msg_count => x_msg_count,
5912 x_msg_data => x_msg_data,
5913 p_clev_rec => l_clev_fin_rec,
5914 p_klev_rec => l_klev_fin_rec,
5915 x_clev_rec => lx_clev_fin_rec,
5916 x_klev_rec => lx_klev_fin_rec
5917 );
5918
5919 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5920 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5921 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5922 RAISE OKL_API.G_EXCEPTION_ERROR;
5923 END IF;
5924 --Bug# 4899328
5925
5926 End Loop;
5927 Close l_del_sub_csr;
5928
5929 ----------------------------------------------------------------------------
5930 --C. Syncronize new subsidy line
5931 ----------------------------------------------------------------------------
5932 --1. fetch new subsidy lines
5933 open l_new_sub_csr (p_chr_id => p_rbk_chr_id);
5934 Loop
5935 Fetch l_new_sub_csr into l_new_sub_rec;
5936 Exit when l_new_sub_csr%NOTFOUND;
5937
5938 --create subsidy line record
5939 l_sub_klev_rec.id := OKL_API.G_MISS_NUM;
5940 l_sub_klev_rec.subsidy_id := l_new_sub_rec.subsidy_id;
5941 l_sub_klev_rec.amount := l_new_sub_rec.amount;
5942 l_sub_klev_rec.subsidy_override_amount := l_new_sub_rec.subsidy_override_amount;
5943 l_sub_klev_rec.sty_id := l_new_sub_rec.sty_id;
5944
5945 If l_new_sub_rec.orig_asst_cle_id is not null then
5946 l_sub_clev_rec.cle_id := l_new_sub_rec.orig_asst_cle_id;
5947 Else
5948 Open l_cleb_csr(p_orig_cle_id => l_new_sub_rec.asset_cle_id);
5949 fetch l_cleb_csr into l_asset_cle_id;
5950 If l_cleb_csr%NOTFOUND then
5951 null;
5952 End If;
5953 close l_cleb_csr;
5954 l_sub_clev_rec.cle_id := l_asset_cle_id;
5955 End If;
5956
5957 l_sub_clev_rec.id := OKL_API.G_MISS_NUM;
5958 l_sub_clev_rec.dnz_chr_id := p_orig_chr_id;
5959 l_sub_clev_rec.exception_yn := 'N';
5960 l_sub_clev_rec.lse_id := l_new_sub_rec.lse_id;
5961 l_sub_clev_rec.display_sequence := l_new_sub_rec.display_sequence;
5962 l_sub_clev_rec.name := l_new_sub_rec.name;
5963 l_sub_clev_rec.item_description := l_new_sub_rec.description;
5964 l_sub_clev_rec.start_date := l_new_sub_rec.start_date;
5965 l_sub_clev_rec.end_date := l_new_sub_rec.end_date;
5966 l_sub_clev_rec.currency_code := l_new_sub_rec.currency_code;
5967 l_sub_clev_rec.sts_code := l_new_sub_rec.sts_code;
5968
5969 --dbms_output.put_line('Amount before updating line '||to_char(l_sub_klev_rec.Amount));
5970 okl_contract_pub.create_contract_line
5971 (p_api_version => p_api_version,
5972 p_init_msg_list => p_init_msg_list,
5973 x_return_status => x_return_status,
5974 x_msg_count => x_msg_count,
5975 x_msg_data => x_msg_data,
5976 p_clev_rec => l_sub_clev_rec,
5977 p_klev_rec => l_sub_klev_rec,
5978 x_clev_rec => lx_sub_clev_rec,
5979 x_klev_rec => lx_sub_klev_rec);
5980
5981 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5982 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5983 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5984 RAISE OKL_API.G_EXCEPTION_ERROR;
5985 END IF;
5986
5987 --Bug# 4899328 : Recalculate OEC and capital amount and update financial asset line
5988 l_orig_asset_cle_id := lx_sub_clev_rec.cle_id;
5989 OKL_EXECUTE_FORMULA_PUB.execute(p_api_version => p_api_version,
5990 p_init_msg_list => p_init_msg_list,
5991 x_return_status => x_return_status,
5992 x_msg_count => x_msg_count,
5993 x_msg_data => x_msg_data,
5994 p_formula_name => G_FORMULA_CAP,
5995 p_contract_id => p_orig_chr_id,
5996 p_line_id => l_orig_asset_cle_id,
5997 x_value => l_cap_amount);
5998
5999 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6000 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6001 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6002 RAISE OKL_API.G_EXCEPTION_ERROR;
6003 END IF;
6004
6005 ----------------------------------------------------------------------
6006 --call api to update costs on asset line
6007 ----------------------------------------------------------------------
6008 l_clev_fin_rec.id := l_orig_asset_cle_id;
6009 l_klev_fin_rec.id := l_orig_asset_cle_id;
6010 l_klev_fin_rec.capital_amount := l_cap_amount;
6011
6012
6013 okl_contract_pub.update_contract_line
6014 (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_clev_rec => l_clev_fin_rec,
6020 p_klev_rec => l_klev_fin_rec,
6021 x_clev_rec => lx_clev_fin_rec,
6022 x_klev_rec => lx_klev_fin_rec
6023 );
6024
6025 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6026 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6027 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6028 RAISE OKL_API.G_EXCEPTION_ERROR;
6029 END IF;
6030 --Bug# 4899328
6031
6032 --create the party role record
6033 l_cplv_rec.id := OKL_API.G_MISS_NUM;
6034 l_cplv_rec.dnz_chr_id := p_orig_chr_id;
6035 l_cplv_rec.cle_id := lx_sub_clev_rec.id;
6036 l_cplv_rec.rle_code := 'OKL_VENDOR';
6037 l_cplv_rec.jtot_object1_code := 'OKX_VENDOR';
6038 l_cplv_rec.object1_id1 := l_new_sub_rec.vendor_id;
6039 l_cplv_rec.object1_id2 := '#';
6040
6041
6042 --Bug# 4558486: Changed call to okl_k_party_roles_pvt api
6043 -- to create records in tables
6044 -- okc_k_party_roles_b and okl_k_party_roles
6045 /*
6046 okl_okc_migration_pvt.create_k_party_role
6047 (p_api_version => p_api_version,
6048 p_init_msg_list => p_init_msg_list,
6049 x_return_status => x_return_status,
6050 x_msg_count => x_msg_count,
6051 x_msg_data => x_msg_data,
6052 p_cplv_rec => l_cplv_rec,
6053 x_cplv_rec => lx_cplv_rec);
6054 */
6055
6056 okl_k_party_roles_pvt.create_k_party_role
6057 (p_api_version => p_api_version,
6058 p_init_msg_list => p_init_msg_list,
6059 x_return_status => x_return_status,
6060 x_msg_count => x_msg_count,
6061 x_msg_data => x_msg_data,
6062 p_cplv_rec => l_cplv_rec,
6063 x_cplv_rec => lx_cplv_rec,
6064 p_kplv_rec => l_kplv_rec,
6065 x_kplv_rec => lx_kplv_rec);
6066
6067 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6068 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6069 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6070 RAISE OKL_API.G_EXCEPTION_ERROR;
6071 END IF;
6072
6073 --3. Fetch party payment details for the new line
6074 Open l_ppyd_rbk_csr(p_cpl_id => l_new_sub_rec.cpl_id);
6075 Fetch l_ppyd_rbk_csr into l_ppyd_rbk_rec;
6076 If l_ppyd_rbk_csr%NOTFOUND then
6077 null;
6078 Else
6079 --1.create the party payment details record
6080 l_pydv_rec.id := OKL_API.G_MISS_NUM;
6081 l_pydv_rec.cpl_id := lx_cplv_rec.id;
6082 l_pydv_rec.vendor_id := l_ppyd_rbk_rec.vendor_id;
6083 l_pydv_rec.pay_site_id := l_ppyd_rbk_rec.pay_site_id;
6084 l_pydv_rec.payment_term_id := l_ppyd_rbk_rec.payment_term_id;
6085 l_pydv_rec.payment_method_code := l_ppyd_rbk_rec.payment_method_code;
6086 l_pydv_rec.pay_group_code := l_ppyd_rbk_rec.pay_group_code;
6087
6088 OKL_PYD_PVT.insert_row
6089 (p_api_version => p_api_version,
6090 p_init_msg_list => p_init_msg_list,
6091 x_return_status => x_return_status,
6092 x_msg_count => x_msg_count,
6093 x_msg_data => x_msg_data,
6094 p_ppydv_rec => l_pydv_rec,
6095 x_ppydv_rec => lx_pydv_rec);
6096
6097
6098 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6099 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6100 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6101 RAISE OKL_API.G_EXCEPTION_ERROR;
6102 END IF;
6103 End If;
6104 Close l_ppyd_rbk_csr;
6105
6106 -- varangan - Bug#5474059 - Added - Start
6107 l_new_cnt := l_new_cnt + 1;
6108 -- Code to create billing transaction records for the newly added subsidies
6109 get_subsidy_amount(
6110 p_api_version => p_api_version
6111 , p_init_msg_list => p_init_msg_list
6112 , x_return_status => x_return_status
6113 , x_msg_count => x_msg_count
6114 , x_msg_data => x_msg_data
6115 , p_subsidy_cle_id => lx_sub_clev_rec.id
6116 , x_asbv_rec => l_new_asdv_tbl(l_new_cnt));
6117 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6118 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6119 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6120 RAISE OKL_API.G_EXCEPTION_ERROR;
6121 END IF;
6122 -- varangan - Bug#5474059 - Added - End
6123 End Loop;
6124 Close l_new_sub_csr;
6125
6126 -- varangan - Bug#5474059 - Added - Start
6127 -- Call to insert billing transaction records for the newly added subsidies
6128 IF ( l_new_asdv_tbl.count > 0)THEN
6129 insert_billing_records(
6130 p_api_version => p_api_version
6131 , p_init_msg_list => p_init_msg_list
6132 , x_return_status => x_return_status
6133 , x_msg_count => x_msg_count
6134 , x_msg_data => x_msg_data
6135 , p_chr_id => p_orig_chr_id
6136 , p_asdv_tbl => l_new_asdv_tbl);
6137 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6138 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6139 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6140 RAISE OKL_API.G_EXCEPTION_ERROR;
6141 END IF;
6142 END IF; -- end of check for l_new_asdv_tbl count
6143 -- varangan - Bug#5474059 - Added - End
6144
6145 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
6146
6147 EXCEPTION
6148 WHEN OKL_API.G_EXCEPTION_ERROR THEN
6149 If l_subelm_rbk_csr%ISOPEN then
6150 close l_subelm_rbk_csr;
6151 End If;
6152 If l_subelm_orig_csr%ISOPEN then
6153 close l_subelm_orig_csr;
6154 End If;
6155 If l_ppyd_rbk_csr%ISOPEN then
6156 close l_ppyd_rbk_csr;
6157 End If;
6158 If l_ppyd_orig_csr%ISOPEN then
6159 close l_ppyd_orig_csr;
6160 End If;
6161 If l_del_sub_csr%ISOPEN then
6162 close l_del_sub_csr;
6163 End If;
6164 If l_new_sub_csr%ISOPEN then
6165 close l_new_sub_csr;
6166 End If;
6167 If l_cleb_csr%ISOPEN then
6168 close l_cleb_csr;
6169 End If;
6170 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6171 l_api_name,
6172 G_PKG_NAME,
6173 'OKL_API.G_RET_STS_ERROR',
6174 x_msg_count,
6175 x_msg_data,
6176 '_PVT');
6177 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6178 If l_subelm_rbk_csr%ISOPEN then
6179 close l_subelm_rbk_csr;
6180 End If;
6181 If l_subelm_orig_csr%ISOPEN then
6182 close l_subelm_orig_csr;
6183 End If;
6184 If l_ppyd_rbk_csr%ISOPEN then
6185 close l_ppyd_rbk_csr;
6186 End If;
6187 If l_ppyd_orig_csr%ISOPEN then
6188 close l_ppyd_orig_csr;
6189 End If;
6190 If l_del_sub_csr%ISOPEN then
6191 close l_del_sub_csr;
6192 End If;
6193 If l_new_sub_csr%ISOPEN then
6194 close l_new_sub_csr;
6195 End If;
6196 If l_cleb_csr%ISOPEN then
6197 close l_cleb_csr;
6198 End If;
6199 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6200 l_api_name,
6201 G_PKG_NAME,
6202 'OKL_API.G_RET_STS_UNEXP_ERROR',
6203 x_msg_count,
6204 x_msg_data,
6205 '_PVT');
6206 WHEN OTHERS THEN
6207 If l_subelm_rbk_csr%ISOPEN then
6208 close l_subelm_rbk_csr;
6209 End If;
6210 If l_subelm_orig_csr%ISOPEN then
6211 close l_subelm_orig_csr;
6212 End If;
6213 If l_ppyd_rbk_csr%ISOPEN then
6214 close l_ppyd_rbk_csr;
6215 End If;
6216 If l_ppyd_orig_csr%ISOPEN then
6217 close l_ppyd_orig_csr;
6218 End If;
6219 If l_del_sub_csr%ISOPEN then
6220 close l_del_sub_csr;
6221 End If;
6222 If l_new_sub_csr%ISOPEN then
6223 close l_new_sub_csr;
6224 End If;
6225 If l_cleb_csr%ISOPEN then
6226 close l_cleb_csr;
6227 End If;
6228 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
6229 l_api_name,
6230 G_PKG_NAME,
6231 'OTHERS',
6232 x_msg_count,
6233 x_msg_data,
6234 '_PVT');
6235 End Rebook_synchronize;
6236
6237 -- varangan - Bug#5474059 - Added - End
6238
6239 -- varangan - Bug#5474059 - Added - Start
6240 -- Start of comments
6241 -- Procedure Name : rebook_adjustment
6242 -- Description : Logic in the API is as follows:
6243 -- - Compare the subsidy lines of the orignal and rebook copy
6244 -- - If there is a decrease in subsidy, then check if the AR invoice
6245 -- has a balance and create a credit memo on this invoice for the
6246 -- invoice balance amount. If there is an excess amount in the subsidy
6247 -- change still to be adjusted, create an on-account credit memo.
6248 -- - If there is an increase in subsidy, then bill the excess amount to
6249 -- the vendor
6250 -- - API also handles the case of unprocessed billing transactions which
6251 -- a re cancelled.
6252 -- - Deletion of subsidies is also handled
6253 -- - Addition of subsidies is taken care in rebook_synchronize procedure
6254 -- PARAMETERS : IN - p_rbk_chr_id : Rebook Copy Contract id
6255 -- IN - p_orig_chr_id : Original Contract id
6256 -- IN - p_rebook_date : Date of rebook
6257 -- Created varangan
6258 -- End of comments
6259 PROCEDURE rebook_adjustment
6260 (p_api_version IN NUMBER
6261 , p_init_msg_list IN VARCHAR2
6262 , x_return_status OUT NOCOPY VARCHAR2
6263 , x_msg_count OUT NOCOPY NUMBER
6264 , x_msg_data OUT NOCOPY VARCHAR2
6265 , p_rbk_chr_id IN NUMBER
6266 , p_orig_chr_id IN NUMBER
6267 , p_rebook_date IN DATE
6268 ) IS
6269 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
6270 l_api_name CONSTANT varchar2(30) := 'rebook_adjustment';
6271 l_api_version CONSTANT NUMBER := 1.0;
6272
6273 --------------------------------------
6274 -- Cursor Block - Begin
6275 --------------------------------------
6276 -- Cursor to get the subsidy present in rebook copy. ORIG_SYSTEM_ID1 relates
6277 -- to the subsidy on the original contract
6278 CURSOR c_rbk_subs (p_cle_id IN NUMBER
6279 , p_chr_id IN NUMBER) IS
6280 SELECT CLEB.ID
6281 FROM OKC_K_LINES_B CLEB,
6282 OKC_STATUSES_B STSB,
6283 OKC_LINE_STYLES_B LSEB
6284 WHERE CLEB.ORIG_SYSTEM_ID1 = p_cle_id
6285 AND CLEB.ORIG_SYSTEM_SOURCE_CODE ='OKC_LINE'
6286 AND CLEB.DNZ_CHR_ID = p_chr_id
6287 AND STSB.CODE = CLEB.STS_CODE
6288 AND STSB.STE_CODE NOT IN ('CANCELLED')
6289 AND LSEB.ID = CLEB.LSE_ID
6290 AND LSEB.LTY_CODE = 'SUBSIDY';
6291
6292 -- Cursor to get the unprocessed transactions of the subsidy
6293 CURSOR c_get_bill_stat( p_cle_id IN NUMBER,
6294 p_chr_id IN NUMBER) IS
6295 SELECT TRX.ID
6296 , TRX.DESCRIPTION
6297 FROM OKL_TRX_AR_INVOICES_V TRX
6298 , OKL_TXL_AR_INV_LNS_B TIL
6299 WHERE TIL.TAI_ID = TRX.ID
6300 AND TIL.KLE_ID = p_cle_id -- subsidy cle id
6301 AND TRX.KHR_ID = p_chr_id
6302 AND TRX.TRX_STATUS_CODE = G_SUBMIT_STATUS;
6303
6304 -- Cursor to get all the invoices already generated for this subsidy
6305 -- cursor doesnot consider credit-memos,as the invoice balances are already
6306 -- adjusted for invoice based credit-memos
6307 CURSOR c_get_inv_balance(p_cle_id IN NUMBER,
6308 p_chr_id IN NUMBER) IS
6309 SELECT ARL.receivables_invoice_id receivables_invoice_id,
6310 ARL.RECEIVABLES_INVOICE_LINE_ID invoice_line_id,
6311 tai.ibt_id cust_acct_site_id,
6312 tai.ixx_id cust_acct_id,
6313 tai.irt_id payment_term_id,
6314 tai.irm_id payment_method_id,
6315 tai.khr_id khr_id,
6316 tai.description tai_description,
6317 tai.currency_code currency_code,
6318 tai.date_invoiced date_invoiced,
6319 tai.amount tai_amount,
6320 tai.try_id try_id,
6321 tai.trx_status_code trx_status_code,
6322 tai.date_entered date_entered,
6323 til.id til_id_reverses,
6324 til.tai_id tai_id,
6325 til.amount til_amount,
6326 til.kle_id subsidy_cle_id,
6327 til.description til_description,
6328 til.sty_id stream_type_id,
6329 til.line_number line_number,
6330 til.inv_receiv_line_code inv_receiv_line_code
6331 , til.bank_acct_id bank_acct_id
6332 -- varangan - Bug#5588871 - Modified - Start
6333 -- Consider Invoice line balance instead of invoice balance itself
6334 , ARL.AMOUNT_LINE_ITEMS_REMAINING amount_remaining
6335 -- varangan - Bug#5588871 - Modified - End
6336 , ARL.AMOUNT_DUE_ORIGINAL invoice_amount
6337 FROM OKL_BPD_AR_INV_LINES_V ARL
6338 , OKL_TXL_AR_INV_LNS_V TIL
6339 , OKL_TRX_AR_INVOICES_V TAI
6340 WHERE
6341 TIL.KLE_ID = p_cle_id -- < SUBSIDY CLE ID >
6342 AND TAI.ID = TIL.TAI_ID
6343 AND TAI.KHR_ID = p_chr_id
6344 AND TAI.TRX_STATUS_CODE = 'PROCESSED'
6345 AND TIL.ID = ARL.TIL_ID_DETAILS
6346 AND ARL.AMOUNT_DUE_ORIGINAL > 0 -- donot consider credit memos
6347 AND ARL.AMOUNT_DUE_REMAINING > 0 -- only those invoices that have some balance
6348 ORDER BY ARL.AMOUNT_DUE_REMAINING DESC;
6349
6350 -- Cursor to get billing details in order to create on-Acc CM
6351 CURSOR c_get_bill_details(p_cle_id IN NUMBER,
6352 p_chr_id IN NUMBER) IS
6353 SELECT tai.ibt_id cust_acct_site_id,
6354 tai.ixx_id cust_acct_id,
6355 tai.irt_id payment_term_id,
6356 tai.irm_id payment_method_id,
6357 tai.khr_id khr_id,
6358 tai.description tai_description,
6359 tai.currency_code currency_code,
6360 tai.date_invoiced date_invoiced,
6361 tai.amount tai_amount,
6362 tai.try_id try_id,
6363 tai.trx_status_code trx_status_code,
6364 tai.date_entered date_entered,
6365 til.id til_id_reverses,
6366 til.tai_id tai_id,
6367 til.amount til_amount,
6368 til.kle_id subsidy_cle_id,
6369 til.description til_description,
6370 til.sty_id stream_type_id,
6371 til.line_number line_number,
6372 til.inv_receiv_line_code inv_receiv_line_code
6373 , til.bank_acct_id bank_acct_id
6374 FROM OKL_TXL_AR_INV_LNS_V TIL
6375 , OKL_TRX_AR_INVOICES_V TAI
6376 WHERE TIL.KLE_ID = p_cle_id -- < SUBSIDY CLE ID >
6377 AND TAI.ID = TIL.TAI_ID
6378 AND TAI.KHR_ID = p_chr_id;
6379
6380 -- Cursor to check if any records have been processed for billing
6381 CURSOR c_chk_billing_done ( p_cle_id IN NUMBER
6382 , p_chr_id IN NUMBER) IS
6383 SELECT 'Y'
6384 FROM OKL_TRX_AR_INVOICES_B TAI
6385 , OKL_TXL_AR_INV_LNS_B TXL
6386 WHERE TXL.TAI_ID = TAI.ID
6387 AND TXL.KLE_ID = p_cle_id -- subsidy cle id
6388 AND TAI.KHR_ID = p_chr_id
6389 AND TAI.TRX_STATUS_CODE = G_PROCESSED_STATUS;
6390 --------------------------------------
6391 -- Cursor Block - End
6392 --------------------------------------
6393
6394 l_pos_try_id NUMBER;
6395 l_neg_try_id NUMBER;
6396
6397 l_orig_asdv_tbl asbv_tbl_type;
6398 l_rbk_asdv_tbl asbv_tbl_type;
6399
6400 l_new_asdv_tbl asbv_tbl_type;
6401 l_new_cnt NUMBER DEFAULT 0;
6402
6403 l_rbk_subs_cle_id NUMBER;
6404 l_cancel_taiv_tbl OKL_TRX_AR_INVOICES_PUB.taiv_tbl_type;
6405 lx_cancel_taiv_tbl OKL_TRX_AR_INVOICES_PUB.taiv_tbl_type;
6406 l_cancel_cnt NUMBER DEFAULT 0;
6407
6408 l_subs_adj NUMBER;
6409 l_bill_chk VARCHAR2(1) DEFAULT 'N';
6410 -- varangan - Billing Enhancement changes- Bug#5874824 - begin
6411 /*l_taiv_rec okl_trx_ar_invoices_pub.taiv_rec_type;
6412 lx_taiv_rec okl_trx_ar_invoices_pub.taiv_rec_type;
6413 l_tilv_rec okl_txl_ar_inv_lns_pub.tilv_rec_type;
6414 lx_tilv_rec okl_txl_ar_inv_lns_pub.tilv_rec_type;
6415 l_bpd_acc_rec okl_acc_call_pub.bpd_acc_rec_type; */
6416
6417 lp_taiv_rec okl_tai_pvt.taiv_rec_type;
6418 lp_tilv_rec okl_til_pvt.tilv_rec_type;
6419 lp_tilv_tbl okl_til_pvt.tilv_tbl_type;
6420 lp_tldv_tbl okl_tld_pvt.tldv_tbl_type;
6421
6422 lx_taiv_rec okl_tai_pvt.taiv_rec_type;
6423 lx_tilv_tbl okl_til_pvt.tilv_tbl_type;
6424 lx_tldv_tbl okl_tld_pvt.tldv_tbl_type;
6425
6426 --Varangan - Billing Enhancement changes - Bug#5874824 - End
6427
6428 l_asbv_rec asbv_rec_type;
6429
6430 l_bill_details_rec c_get_bill_details%ROWTYPE;
6431
6432 -------------------------------------------------------
6433 -- Local Procedure Block
6434 -------------------------------------------------------
6435 PROCEDURE on_acc_CM_create( p_subsidy_cle_id IN NUMBER
6436 , p_chr_id IN NUMBER
6437 , p_subs_adj IN NUMBER
6438 , p_rebook_date IN DATE ) IS
6439 BEGIN
6440 OPEN c_get_bill_details(p_subsidy_cle_id
6441 ,p_chr_id );
6442 FETCH c_get_bill_details INTO l_bill_details_rec;
6443 CLOSE c_get_bill_details;
6444
6445 lp_taiv_rec.amount := p_subs_adj;
6446 lp_taiv_rec.khr_id := l_bill_details_rec.khr_id;
6447 lp_taiv_rec.description := 'Rebook Credit On-Acc- '||l_bill_details_rec.tai_description;
6448 lp_taiv_rec.currency_code := l_bill_details_rec.currency_code;
6449 lp_taiv_rec.date_invoiced := p_rebook_date; --check whether it is ok to give this
6450 lp_taiv_rec.ibt_id := l_bill_details_rec.cust_acct_site_id;
6451 lp_taiv_rec.ixx_id := l_bill_details_rec.cust_acct_id;
6452 lp_taiv_rec.irt_id := l_bill_details_rec.payment_term_id;
6453 lp_taiv_rec.irm_id := l_bill_details_rec.payment_method_id;
6454 lp_taiv_rec.try_id := l_neg_try_id;
6455 lp_taiv_rec.trx_status_code := G_SUBMIT_STATUS;
6456 lp_taiv_rec.date_entered := SYSDATE;
6457 lp_taiv_rec.OKL_SOURCE_BILLING_TRX := G_SOURCE_BILLING_TRX_RBK;
6458
6459 -- Line Record
6460 lp_tilv_rec.amount := p_subs_adj;
6461 lp_tilv_rec.kle_id := l_bill_details_rec.subsidy_cle_id;
6462 lp_tilv_rec.description := l_bill_details_rec.til_description;
6463 lp_tilv_rec.sty_id := l_bill_details_rec.stream_type_id;
6464 lp_tilv_rec.line_number := l_bill_details_rec.line_number;
6465 lp_tilv_rec.inv_receiv_line_code := G_AR_INV_LINE_CODE;
6466 lp_tilv_rec.bank_acct_id := l_bill_details_rec.bank_acct_id;
6467 -- ON-ACCOUNT Credit Memo
6468 lp_tilv_rec.TIL_ID_REVERSES := NULL;
6469 -- Assign the line record in tilv_tbl structure
6470 lp_tilv_tbl(1) := lp_tilv_rec;
6471 ---------------------------------------------------------------------------
6472 -- Call to Billing Centralized API
6473 ---------------------------------------------------------------------------
6474 okl_internal_billing_pvt.create_billing_trx(p_api_version =>l_api_version,
6475 p_init_msg_list =>p_init_msg_list,
6476 x_return_status => x_return_status,
6477 x_msg_count => x_msg_count,
6478 x_msg_data => x_msg_data,
6479 p_taiv_rec => lp_taiv_rec,
6480 p_tilv_tbl => lp_tilv_tbl,
6481 p_tldv_tbl => lp_tldv_tbl,
6482 x_taiv_rec => lx_taiv_rec,
6483 x_tilv_tbl => lx_tilv_tbl,
6484 x_tldv_tbl => lx_tldv_tbl);
6485
6486 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6487 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6488 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6489 RAISE OKL_API.G_EXCEPTION_ERROR;
6490 END IF;
6491 -- Varangan - Billing Enhancement changes - Bug#5874824 - End
6492
6493 /* --create internal AR transaction header
6494 OKL_TRX_AR_INVOICES_PUB.insert_trx_ar_invoices (
6495 p_api_version => p_api_version,
6496 p_init_msg_list => p_init_msg_list,
6497 x_return_status => x_return_status,
6498 x_msg_count => x_msg_count,
6499 x_msg_data => x_msg_data,
6500 p_taiv_rec => l_taiv_rec,
6501 x_taiv_rec => lx_taiv_rec);
6502
6503 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6504 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6505 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6506 RAISE OKL_API.G_EXCEPTION_ERROR;
6507 END IF;
6508
6509 --l_tilv_rec.tai_id := lx_taiv_rec.id;
6510
6511 --create internal AR transaction line
6512 okl_txl_ar_inv_lns_pub.insert_txl_ar_inv_lns (
6513 p_api_version => p_api_version,
6514 p_init_msg_list => p_init_msg_list,
6515 x_return_status => x_return_status,
6516 x_msg_count => x_msg_count,
6517 x_msg_data => x_msg_data,
6518 p_tilv_rec => l_tilv_rec,
6519 x_tilv_rec => lx_tilv_rec);
6520
6521 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6522 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6523 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6524 RAISE OKL_API.G_EXCEPTION_ERROR;
6525 END IF;
6526
6527 --accounting trx
6528 l_bpd_acc_rec.id := lx_tilv_rec.id;
6529 l_bpd_acc_rec.source_table := G_AR_LINES_SOURCE;
6530 -- Create Accounting Distribution
6531 okl_acc_call_pub.create_acc_trans (
6532 p_api_version => p_api_version,
6533 p_init_msg_list => p_init_msg_list,
6534 x_return_status => x_return_status,
6535 x_msg_count => x_msg_count,
6536 x_msg_data => x_msg_data,
6537 p_bpd_acc_rec => l_bpd_acc_rec);
6538
6539 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6540 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6541 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6542 RAISE OKL_API.G_EXCEPTION_ERROR;
6543 END IF; */
6544
6545 END on_acc_CM_create;
6546
6547 BEGIN
6548
6549 x_return_status := OKL_API.G_RET_STS_SUCCESS;
6550 -- Call start_activity to create savepoint, check compatibility
6551 -- and initialize message list
6552 x_return_status := OKL_API.START_ACTIVITY (
6553 l_api_name
6554 ,p_init_msg_list
6555 ,'_PVT'
6556 ,x_return_status);
6557 -- Check if activity started successfully
6558 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6559 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6560 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6561 RAISE OKL_API.G_EXCEPTION_ERROR;
6562 END IF;
6563
6564 --function to fetch try_id
6565 l_pos_try_id := Get_trx_type_id(p_trx_type => G_AR_INV_TRX_TYPE,
6566 p_lang => 'US');
6567 If l_pos_try_id is null then
6568 x_return_status := OKL_API.G_RET_STS_ERROR;
6569 OKL_API.SET_MESSAGE (
6570 p_app_name => G_APP_NAME,
6571 p_msg_name => G_REQUIRED_VALUE,
6572 p_token1 => G_COL_NAME_TOKEN,
6573 p_token1_value => 'Transaction Type');
6574 RAISE OKL_API.G_EXCEPTION_ERROR;
6575 End If;
6576
6577 l_neg_try_id := Get_trx_type_id(p_trx_type => G_AR_CM_TRX_TYPE,
6578 p_lang => 'US');
6579 If l_neg_try_id is null then
6580 x_return_status := OKL_API.G_RET_STS_ERROR;
6581 OKL_API.SET_MESSAGE (
6582 p_app_name => G_APP_NAME,
6583 p_msg_name => G_REQUIRED_VALUE,
6584 p_token1 => G_COL_NAME_TOKEN,
6585 p_token1_value => 'Transaction Type');
6586 RAISE OKL_API.G_EXCEPTION_ERROR;
6587 End If;
6588
6589 -- STEP 1 : Get the subsidy table of the original contract
6590 get_contract_subsidy_amount(
6591 p_api_version => p_api_version
6592 , p_init_msg_list => p_init_msg_list
6593 , x_return_status => x_return_status
6594 , x_msg_count => x_msg_count
6595 , x_msg_data => x_msg_data
6596 , p_chr_id => p_orig_chr_id
6597 , x_asbv_tbl => l_orig_asdv_tbl);
6598
6599 -- check if the l_orig_asdv_tbl is not empty
6600 IF l_orig_asdv_tbl.count > 0 THEN
6601 FOR i IN l_orig_asdv_tbl.FIRST .. l_orig_asdv_tbl.LAST
6602 LOOP
6603 l_subs_adj := 0;
6604 -- STEP 2 : Query for the original subsidy line in rebook copy
6605 OPEN c_rbk_subs(l_orig_asdv_tbl(i).subsidy_cle_id, p_rbk_chr_id);
6606 FETCH c_rbk_subs INTO l_rbk_subs_cle_id;
6607
6608 -- STEP 3 : IF the original subsidy line doesnot exist - Subsidy DELETED
6609 IF c_rbk_subs%NOTFOUND THEN
6610 -- STEP 3 (a) : IF the subsidy billing transaction is still Unprocessed
6611 -- Cancel transaction
6612 FOR c_get_bill_stat_rec IN c_get_bill_stat(l_orig_asdv_tbl(i).subsidy_cle_id
6613 , p_orig_chr_id)
6614 LOOP
6615 l_cancel_cnt := l_cancel_cnt + 1;
6616 l_cancel_taiv_tbl(l_cancel_cnt).ID := c_get_bill_stat_rec.ID;
6617 l_cancel_taiv_tbl(l_cancel_cnt).DESCRIPTION := c_get_bill_stat_rec.DESCRIPTION;
6618 l_cancel_taiv_tbl(l_cancel_cnt).TRX_STATUS_CODE := G_CANCEL_STATUS;
6619 -- sjalasut, added okl_source_billing_trx as 'REBOOK' as rebook process initiates
6620 -- cancelation
6621 l_cancel_taiv_tbl(l_cancel_cnt).OKL_SOURCE_BILLING_TRX := G_SOURCE_BILLING_TRX_RBK;
6622 END LOOP;
6623
6624 -- STEP 3 (b) : IF the subsidy billing transaction had been processed
6625
6626 -- need to reverse the entire amount of the deleted subsidy
6627 l_subs_adj := - l_orig_asdv_tbl(i).amount;
6628
6629 -- IF Balance exists on the subsidy invoices, then create credit-memos
6630 -- on the balances
6631 FOR c_get_inv_balance_rec IN c_get_inv_balance(l_orig_asdv_tbl(i).subsidy_cle_id
6632 , p_orig_chr_id)
6633 LOOP
6634
6635 IF c_get_inv_balance_rec.amount_remaining > 0 THEN
6636 -- Varangan - Billing Enhancement changes - Bug#5874824 - Begin
6637 -- reverse whatever amount is remaining on the invoice of deleted subsidy
6638 lp_taiv_rec.amount := (-1) * c_get_inv_balance_rec.amount_remaining;
6639 -- Accordingly change the l_subs_adj so as to track if On-Acc CM needs to be generated
6640 l_subs_adj := l_subs_adj + c_get_inv_balance_rec.amount_remaining;
6641
6642 lp_taiv_rec.khr_id := c_get_inv_balance_rec.khr_id;
6643 lp_taiv_rec.description := 'Rebook Credit - '||c_get_inv_balance_rec.tai_description;
6644 lp_taiv_rec.currency_code := c_get_inv_balance_rec.currency_code;
6645 lp_taiv_rec.date_invoiced := p_rebook_date; --check whether it is ok to give this
6646 lp_taiv_rec.ibt_id := c_get_inv_balance_rec.cust_acct_site_id;
6647 lp_taiv_rec.ixx_id := c_get_inv_balance_rec.cust_acct_id;
6648 lp_taiv_rec.irt_id := c_get_inv_balance_rec.payment_term_id;
6649 lp_taiv_rec.irm_id := c_get_inv_balance_rec.payment_method_id;
6650 lp_taiv_rec.try_id := l_neg_try_id;
6651 lp_taiv_rec.trx_status_code := G_SUBMIT_STATUS;
6652 lp_taiv_rec.date_entered := SYSDATE;
6653 lp_taiv_rec.OKL_SOURCE_BILLING_TRX := G_SOURCE_BILLING_TRX_RBK;
6654 --tilv_record
6655 --l_tilv_rec.tai_id := lx_taiv_rec.id;
6656 lp_tilv_rec.amount := (-1) * c_get_inv_balance_rec.amount_remaining;
6657 lp_tilv_rec.kle_id := c_get_inv_balance_rec.subsidy_cle_id;
6658 lp_tilv_rec.description := 'Rebook Credit - '||c_get_inv_balance_rec.til_description;
6659 lp_tilv_rec.sty_id := c_get_inv_balance_rec.stream_type_id;
6660 lp_tilv_rec.line_number := c_get_inv_balance_rec.line_number;
6661 lp_tilv_rec.inv_receiv_line_code := G_AR_INV_LINE_CODE;
6662 lp_tilv_rec.til_id_reverses := c_get_inv_balance_rec.til_id_reverses;
6663 lp_tilv_rec.bank_acct_id := c_get_inv_balance_rec.bank_acct_id;
6664
6665 lp_tilv_tbl(1) := lp_tilv_rec; -- Assign the line record in tilv_tbl structure
6666
6667 ---------------------------------------------------------------------------
6668 -- Call to Billing Centralized API
6669 ---------------------------------------------------------------------------
6670 okl_internal_billing_pvt.create_billing_trx(p_api_version =>l_api_version,
6671 p_init_msg_list =>p_init_msg_list,
6672 x_return_status => x_return_status,
6673 x_msg_count => x_msg_count,
6674 x_msg_data => x_msg_data,
6675 p_taiv_rec => lp_taiv_rec,
6676 p_tilv_tbl => lp_tilv_tbl,
6677 p_tldv_tbl => lp_tldv_tbl,
6678 x_taiv_rec => lx_taiv_rec,
6679 x_tilv_tbl => lx_tilv_tbl,
6680 x_tldv_tbl => lx_tldv_tbl);
6681
6682 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6683 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6684 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6685 RAISE OKL_API.G_EXCEPTION_ERROR;
6686 END IF;
6687
6688 -- Varangan - Billing Enhancement changes - Bug#5874824 - End
6689
6690 /* Commented the existing Billing call
6691 --create internal AR transaction header
6692 OKL_TRX_AR_INVOICES_PUB.insert_trx_ar_invoices (
6693 p_api_version => p_api_version,
6694 p_init_msg_list => p_init_msg_list,
6695 x_return_status => x_return_status,
6696 x_msg_count => x_msg_count,
6697 x_msg_data => x_msg_data,
6698 p_taiv_rec => l_taiv_rec,
6699 x_taiv_rec => lx_taiv_rec);
6700
6701 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6702 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6703 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6704 RAISE OKL_API.G_EXCEPTION_ERROR;
6705 END IF;
6706
6707 --tilv_record
6708 l_tilv_rec.tai_id := lx_taiv_rec.id;
6709 l_tilv_rec.amount := (-1) * c_get_inv_balance_rec.amount_remaining;
6710 l_tilv_rec.kle_id := c_get_inv_balance_rec.subsidy_cle_id;
6711 l_tilv_rec.description := 'Rebook Credit - '||c_get_inv_balance_rec.til_description;
6712 l_tilv_rec.sty_id := c_get_inv_balance_rec.stream_type_id;
6713 l_tilv_rec.line_number := c_get_inv_balance_rec.line_number;
6714 l_tilv_rec.inv_receiv_line_code := G_AR_INV_LINE_CODE;
6715 l_tilv_rec.til_id_reverses := c_get_inv_balance_rec.til_id_reverses;
6716 l_tilv_rec.bank_acct_id := c_get_inv_balance_rec.bank_acct_id;
6717
6718 --create internal AR transaction line
6719 okl_txl_ar_inv_lns_pub.insert_txl_ar_inv_lns (
6720 p_api_version => p_api_version,
6721 p_init_msg_list => p_init_msg_list,
6722 x_return_status => x_return_status,
6723 x_msg_count => x_msg_count,
6724 x_msg_data => x_msg_data,
6725 p_tilv_rec => l_tilv_rec,
6726 x_tilv_rec => lx_tilv_rec);
6727
6728 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6729 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6730 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6731 RAISE OKL_API.G_EXCEPTION_ERROR;
6732 END IF;
6733
6734 --accounting trx
6735 l_bpd_acc_rec.id := lx_tilv_rec.id;
6736 l_bpd_acc_rec.source_table := G_AR_LINES_SOURCE;
6737 -- Create Accounting Distribution
6738 okl_acc_call_pub.create_acc_trans (
6739 p_api_version => p_api_version,
6740 p_init_msg_list => p_init_msg_list,
6741 x_return_status => x_return_status,
6742 x_msg_count => x_msg_count,
6743 x_msg_data => x_msg_data,
6744 p_bpd_acc_rec => l_bpd_acc_rec);
6745
6746 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6747 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6748 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6749 RAISE OKL_API.G_EXCEPTION_ERROR;
6750 END IF; */ --Commented End
6751
6752 END IF; -- end of check for amount_remaining > 0
6753 END LOOP; -- end of check for invoice balances
6754
6755 -- If there is still amount remaining, create on-account credit-memo
6756 IF l_subs_adj < 0 THEN
6757 -- Call API to create On-ACC CM
6758 on_acc_CM_create( p_subsidy_cle_id =>l_orig_asdv_tbl(i).subsidy_cle_id
6759 , p_chr_id => p_orig_chr_id
6760 , p_subs_adj => l_subs_adj
6761 , p_rebook_date => p_rebook_date);
6762 END IF; -- end of check for on_acc credit memo creation
6763
6764 -- STEP 4 : ELSE IF the original subsidy line exists
6765 ELSE --else for c_rbk_subs%NOTFOUND
6766
6767 -- Get the subsidy amount for the rebook copy
6768 get_subsidy_amount(
6769 p_api_version => p_api_version
6770 , p_init_msg_list => p_init_msg_list
6771 , x_return_status => x_return_status
6772 , x_msg_count => x_msg_count
6773 , x_msg_data => x_msg_data
6774 , p_subsidy_cle_id => l_rbk_subs_cle_id -- rebook subsidy cle id
6775 , x_asbv_rec => l_asbv_rec);
6776
6777 l_subs_adj := l_asbv_rec.amount -- Subsidy in rebook copy
6778 - l_orig_asdv_tbl(i).amount; -- Subsidy in Original KHR
6779 -- STEP 4 (a) : IF there is decrease in subsidy
6780 IF (l_subs_adj < 0) THEN
6781
6782 -- If subsidy billing transaction is still Unprocessed
6783 -- Cancel transaction
6784 FOR c_get_bill_stat_rec IN c_get_bill_stat(l_orig_asdv_tbl(i).subsidy_cle_id
6785 , p_orig_chr_id)
6786 LOOP
6787 l_cancel_cnt := l_cancel_cnt + 1;
6788 l_cancel_taiv_tbl(l_cancel_cnt).ID := c_get_bill_stat_rec.ID;
6789 l_cancel_taiv_tbl(l_cancel_cnt).DESCRIPTION := c_get_bill_stat_rec.DESCRIPTION;
6790 l_cancel_taiv_tbl(l_cancel_cnt).TRX_STATUS_CODE := G_CANCEL_STATUS;
6791 -- sjalasut, added okl_source_billing_trx as 'REBOOK' as rebook process initiates
6792 -- cancelation
6793 l_cancel_taiv_tbl(l_cancel_cnt).OKL_SOURCE_BILLING_TRX := G_SOURCE_BILLING_TRX_RBK;
6794 END LOOP;
6795
6796 -- If there has been no billing run till now, then on cancellation
6797 -- create a new record for the new subsidy amount
6798 OPEN c_chk_billing_done(l_orig_asdv_tbl(i).subsidy_cle_id
6799 , p_orig_chr_id);
6800 FETCH c_chk_billing_done INTO l_bill_chk;
6801 CLOSE c_chk_billing_done;
6802 IF l_bill_chk <> 'Y' THEN
6803 l_subs_adj := 0;
6804 l_new_cnt := l_new_cnt + 1;
6805 l_new_asdv_tbl(l_new_cnt) := l_orig_asdv_tbl(i);
6806 l_new_asdv_tbl(l_new_cnt).amount := l_asbv_rec.amount; -- bill subsidy with new amount
6807 END IF;
6808
6809 -- ELSE IF Balance exists on the subsidy invoices, then create credit-memos
6810 -- on the balances
6811 FOR c_get_inv_balance_rec IN c_get_inv_balance(l_orig_asdv_tbl(i).subsidy_cle_id
6812 , p_orig_chr_id)
6813 LOOP
6814 -- Varangan - Billing Enhancement changes - Bug#5874824 - Begin
6815
6816 IF c_get_inv_balance_rec.amount_remaining > 0 AND l_subs_adj <> 0 THEN
6817 IF ( c_get_inv_balance_rec.amount_remaining + l_subs_adj ) >= 0 THEN
6818 lp_taiv_rec.amount := l_subs_adj; -- l_subs_adj is already negative
6819 l_subs_adj := 0;
6820 ELSE
6821 lp_taiv_rec.amount := (-1) * c_get_inv_balance_rec.amount_remaining;
6822 l_subs_adj := l_subs_adj + c_get_inv_balance_rec.amount_remaining;
6823 END IF;
6824 lp_taiv_rec.khr_id := c_get_inv_balance_rec.khr_id;
6825 lp_taiv_rec.description := 'Rebook Credit - '||c_get_inv_balance_rec.tai_description;
6826 lp_taiv_rec.currency_code := c_get_inv_balance_rec.currency_code;
6827 lp_taiv_rec.date_invoiced := p_rebook_date; --check whether it is ok to give this
6828 lp_taiv_rec.ibt_id := c_get_inv_balance_rec.cust_acct_site_id;
6829 lp_taiv_rec.ixx_id := c_get_inv_balance_rec.cust_acct_id;
6830 lp_taiv_rec.irt_id := c_get_inv_balance_rec.payment_term_id;
6831 lp_taiv_rec.irm_id := c_get_inv_balance_rec.payment_method_id;
6832 lp_taiv_rec.try_id := l_neg_try_id;
6833 lp_taiv_rec.trx_status_code := G_SUBMIT_STATUS;
6834 lp_taiv_rec.date_entered := SYSDATE;
6835 lp_taiv_rec.OKL_SOURCE_BILLING_TRX := G_SOURCE_BILLING_TRX_RBK;
6836
6837 --lp_tilv record
6838 -- l_tilv_rec.tai_id := lx_taiv_rec.id;
6839 -- varangan - Bug#5588871 - Modified - Start
6840 -- THE TIL record amount should be the same as the TRX record amount
6841 lp_tilv_rec.amount := lp_taiv_rec.amount;
6842 -- varangan - Bug#5588871 - Modified - End
6843 lp_tilv_rec.kle_id := c_get_inv_balance_rec.subsidy_cle_id;
6844 lp_tilv_rec.description := 'Rebook Credit - '||c_get_inv_balance_rec.til_description;
6845 lp_tilv_rec.sty_id := c_get_inv_balance_rec.stream_type_id;
6846 lp_tilv_rec.line_number := c_get_inv_balance_rec.line_number;
6847 lp_tilv_rec.inv_receiv_line_code := G_AR_INV_LINE_CODE;
6848 lp_tilv_rec.til_id_reverses := c_get_inv_balance_rec.til_id_reverses;
6849 lp_tilv_rec.bank_acct_id := c_get_inv_balance_rec.bank_acct_id;
6850
6851 lp_tilv_tbl(1) := lp_tilv_rec; -- Assign the line record in tilv_tbl structure
6852
6853 ---------------------------------------------------------------------------
6854 -- Call to Billing Centralized API
6855 ---------------------------------------------------------------------------
6856 okl_internal_billing_pvt.create_billing_trx(p_api_version =>l_api_version,
6857 p_init_msg_list =>p_init_msg_list,
6858 x_return_status => x_return_status,
6859 x_msg_count => x_msg_count,
6860 x_msg_data => x_msg_data,
6861 p_taiv_rec => lp_taiv_rec,
6862 p_tilv_tbl => lp_tilv_tbl,
6863 p_tldv_tbl => lp_tldv_tbl,
6864 x_taiv_rec => lx_taiv_rec,
6865 x_tilv_tbl => lx_tilv_tbl,
6866 x_tldv_tbl => lx_tldv_tbl);
6867
6868 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6869 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6870 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6871 RAISE OKL_API.G_EXCEPTION_ERROR;
6872 END IF;
6873 -- Varangan - Billing Enhancement changes - Bug#5874824 - End
6874
6875 /* Commented the existing billing API call
6876 --create internal AR transaction header
6877 OKL_TRX_AR_INVOICES_PUB.insert_trx_ar_invoices (
6878 p_api_version => p_api_version,
6879 p_init_msg_list => p_init_msg_list,
6880 x_return_status => x_return_status,
6881 x_msg_count => x_msg_count,
6882 x_msg_data => x_msg_data,
6883 p_taiv_rec => l_taiv_rec,
6884 x_taiv_rec => lx_taiv_rec);
6885
6886 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6887 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6888 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6889 RAISE OKL_API.G_EXCEPTION_ERROR;
6890 END IF;
6891
6892 --tilv_record
6893 l_tilv_rec.tai_id := lx_taiv_rec.id;
6894 -- varangan - Bug#5588871 - Modified - Start
6895 -- THE TIL record amount should be the same as the TRX record amount
6896 l_tilv_rec.amount := l_taiv_rec.amount;
6897 -- varangan - Bug#5588871 - Modified - End
6898 l_tilv_rec.kle_id := c_get_inv_balance_rec.subsidy_cle_id;
6899 l_tilv_rec.description := 'Rebook Credit - '||c_get_inv_balance_rec.til_description;
6900 l_tilv_rec.sty_id := c_get_inv_balance_rec.stream_type_id;
6901 l_tilv_rec.line_number := c_get_inv_balance_rec.line_number;
6902 l_tilv_rec.inv_receiv_line_code := G_AR_INV_LINE_CODE;
6903 l_tilv_rec.til_id_reverses := c_get_inv_balance_rec.til_id_reverses;
6904 l_tilv_rec.bank_acct_id := c_get_inv_balance_rec.bank_acct_id;
6905
6906 --create internal AR transaction line
6907 okl_txl_ar_inv_lns_pub.insert_txl_ar_inv_lns (
6908 p_api_version => p_api_version,
6909 p_init_msg_list => p_init_msg_list,
6910 x_return_status => x_return_status,
6911 x_msg_count => x_msg_count,
6912 x_msg_data => x_msg_data,
6913 p_tilv_rec => l_tilv_rec,
6914 x_tilv_rec => lx_tilv_rec);
6915
6916 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6917 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6918 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6919 RAISE OKL_API.G_EXCEPTION_ERROR;
6920 END IF;
6921
6922 --accounting trx
6923 l_bpd_acc_rec.id := lx_tilv_rec.id;
6924 l_bpd_acc_rec.source_table := G_AR_LINES_SOURCE;
6925 -- Create Accounting Distribution
6926 okl_acc_call_pub.create_acc_trans (
6927 p_api_version => p_api_version,
6928 p_init_msg_list => p_init_msg_list,
6929 x_return_status => x_return_status,
6930 x_msg_count => x_msg_count,
6931 x_msg_data => x_msg_data,
6932 p_bpd_acc_rec => l_bpd_acc_rec);
6933
6934 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6935 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6936 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6937 RAISE OKL_API.G_EXCEPTION_ERROR;
6938 END IF; */
6939
6940
6941 END IF; -- end of check for amount_remaining > 0
6942 END LOOP; -- end of loop over invoice balances
6943
6944 -- If there is still amount remaining, create an on-account credit-memo
6945 IF (l_subs_adj < 0) THEN
6946 -- Call API to create On-ACC CM
6947 on_acc_CM_create( p_subsidy_cle_id =>l_orig_asdv_tbl(i).subsidy_cle_id
6948 , p_chr_id => p_orig_chr_id
6949 , p_subs_adj => l_subs_adj
6950 , p_rebook_date => p_rebook_date);
6951 END IF; -- end of on_account credit memo creation
6952
6953 -- STEP 4 (b) : IF there is increase in subsidy
6954 ELSIF (l_subs_adj > 0) THEN
6955 -- If subsidy billing transaction is still Unprocessed
6956 -- Cancel transaction
6957 FOR c_get_bill_stat_rec IN c_get_bill_stat(l_orig_asdv_tbl(i).subsidy_cle_id
6958 , p_orig_chr_id)
6959 LOOP
6960 l_cancel_cnt := l_cancel_cnt + 1;
6961 l_cancel_taiv_tbl(l_cancel_cnt).ID := c_get_bill_stat_rec.ID;
6962 l_cancel_taiv_tbl(l_cancel_cnt).DESCRIPTION := c_get_bill_stat_rec.DESCRIPTION;
6963 l_cancel_taiv_tbl(l_cancel_cnt).TRX_STATUS_CODE := G_CANCEL_STATUS;
6964 -- sjalasut, added okl_source_billing_trx as 'REBOOK' as rebook process initiates
6965 -- cancelation
6966 l_cancel_taiv_tbl(l_cancel_cnt).OKL_SOURCE_BILLING_TRX := G_SOURCE_BILLING_TRX_RBK;
6967
6968 END LOOP;
6969
6970 -- If there has been no billing run till now, then on cancellation
6971 -- create a new record for the new subsidy amount
6972 OPEN c_chk_billing_done(l_orig_asdv_tbl(i).subsidy_cle_id
6973 , p_orig_chr_id);
6974 FETCH c_chk_billing_done INTO l_bill_chk;
6975 CLOSE c_chk_billing_done;
6976 IF l_bill_chk <> 'Y' THEN
6977 l_subs_adj := 0;
6978 l_new_cnt := l_new_cnt + 1;
6979 l_new_asdv_tbl(l_new_cnt) := l_orig_asdv_tbl(i);
6980 l_new_asdv_tbl(l_new_cnt).amount := l_asbv_rec.amount; -- bill subsidy with new amount
6981 ELSE
6982 -- Else IF subsidy billing transaction had been processed
6983 -- add new record to l_new_asdv_tbl table to bill subsidy change amount
6984 l_new_cnt := l_new_cnt + 1;
6985 l_new_asdv_tbl(l_new_cnt) := l_orig_asdv_tbl(i);
6986 l_new_asdv_tbl(l_new_cnt).amount := l_subs_adj; -- bill subsidy with new amount
6987 END IF;
6988
6989 END IF; -- end of check for l_subs_adj
6990 END IF; -- end of c_rbk_subs%NOTFOUND IF loop
6991 CLOSE c_rbk_subs;
6992 END LOOP; -- end of loop over the orignal contract subsidies
6993 END IF; -- end of check l_orig_asdv_tbl is not empty
6994
6995 -- STEP 5 : Create billing transaction records using l_new_asdv_tbl table
6996 -- this procedure is called to create billing transaction
6997 -- records for the new subsidies
6998 IF l_new_cnt > 0 THEN
6999 insert_billing_records(
7000 p_api_version => p_api_version
7001 , p_init_msg_list => p_init_msg_list
7002 , x_return_status => x_return_status
7003 , x_msg_count => x_msg_count
7004 , x_msg_data => x_msg_data
7005 , p_chr_id => p_orig_chr_id
7006 , p_asdv_tbl => l_new_asdv_tbl);
7007 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7008 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7009 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7010 RAISE OKL_API.G_EXCEPTION_ERROR;
7011 END IF;
7012 END IF; -- end of check for l_new_asdv_tbl count
7013
7014
7015 -- STEP 6 : Cancel the records which were in unprocessed state
7016 IF l_cancel_cnt > 0 THEN
7017 --update internal AR transaction headers to mark them canceled
7018 okl_trx_ar_invoices_pub.update_trx_ar_invoices (
7019 p_api_version => p_api_version,
7020 p_init_msg_list => p_init_msg_list,
7021 x_return_status => x_return_status,
7022 x_msg_count => x_msg_count,
7023 x_msg_data => x_msg_data,
7024 p_taiv_tbl => l_cancel_taiv_tbl,
7025 x_taiv_tbl => lx_cancel_taiv_tbl);
7026 END IF;
7027
7028
7029 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
7030 EXCEPTION
7031 WHEN OKL_API.G_EXCEPTION_ERROR THEN
7032 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7033 l_api_name,
7034 G_PKG_NAME,
7035 'OKL_API.G_RET_STS_ERROR',
7036 x_msg_count,
7037 x_msg_data,
7038 '_PVT');
7039 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7040 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7041 l_api_name,
7042 G_PKG_NAME,
7043 'OKL_API.G_RET_STS_UNEXP_ERROR',
7044 x_msg_count,
7045 x_msg_data,
7046 '_PVT');
7047 WHEN OTHERS THEN
7048 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7049 l_api_name,
7050 G_PKG_NAME,
7051 'OTHERS',
7052 x_msg_count,
7053 x_msg_data,
7054 '_PVT');
7055 END rebook_adjustment;
7056 -- varangan - Bug#5474059 - Added - End
7057
7058 -- Start of comments
7059 --
7060 -- Procedure Name : Create_Billing_Trx
7061 -- Description : Procedure to create billing transaction for subsidies to
7062 -- be billed to third party
7063 -- Business Rules :
7064 -- Parameters : Contract Id
7065 -- History :
7066 -- Version : 1.0
7067 -- End of comments
7068
7069 Procedure Create_Billing_Trx
7070 (p_api_version IN NUMBER,
7071 p_init_msg_list IN VARCHAR2,
7072 x_return_status OUT NOCOPY VARCHAR2,
7073 x_msg_count OUT NOCOPY NUMBER,
7074 x_msg_data OUT NOCOPY VARCHAR2,
7075 p_chr_id IN NUMBER) is
7076
7077 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
7078 l_api_name CONSTANT varchar2(30) := 'CREATE_BILLING_TRX';
7079 l_api_version CONSTANT NUMBER := 1.0;
7080
7081
7082 l_asdv_tbl asbv_tbl_type;
7083 l_asdv_tbl_proc asbv_tbl_type;
7084 l_chr_id number;
7085 i number;
7086 j number;
7087
7088 --30-Oct-03 avsingh : cursor corrected for same vendor match at
7089 --model line level
7090 --cursor to verify theat asset and subsidy vendors are the same
7091 cursor l_samevend_csr(p_vendor_id in number,
7092 p_asset_cle_id in number,
7093 p_chr_id in number) is
7094 Select 'Y'
7095 From okc_k_party_roles_b cplb,
7096 okc_k_lines_b cleb,
7097 okc_line_styles_b lseb
7098 where cplb.cle_id = cleb.id
7099 and cleb.cle_id = p_asset_cle_id
7100 and lseb.id = cleb.lse_id
7101 and lseb.lty_code = 'ITEM'
7102 and cplb.dnz_chr_id = p_chr_id
7103 and cplb.object1_id1 = to_char(p_vendor_id)
7104 and cplb.object1_id2 = '#'
7105 and cplb.jtot_object1_code = 'OKX_VENDOR'
7106 and cplb.rle_code = 'OKL_VENDOR';
7107
7108 l_exists varchar2(1) default 'N';
7109
7110 l_taiv_rec okl_trx_ar_invoices_pub.taiv_rec_type;
7111 l_tilv_rec okl_txl_ar_inv_lns_pub.tilv_rec_type;
7112 l_bpd_acc_rec okl_acc_call_pub.bpd_acc_rec_type;
7113
7114 lx_taiv_rec okl_trx_ar_invoices_pub.taiv_rec_type;
7115 lx_tilv_rec okl_txl_ar_inv_lns_pub.tilv_rec_type;
7116 lx_bpd_acc_rec okl_acc_call_pub.bpd_acc_rec_type;
7117
7118 l_bill_to_site_use_id OKC_K_HEADERS_B.bill_to_site_use_id%TYPE;
7119 l_cust_acct_id OKC_K_PARTY_ROLES_B.cust_acct_id%TYPE;
7120 l_payment_method_id Number;
7121 l_bank_account_id Number;
7122 l_inv_reason_for_review Varchar2(450);
7123 l_inv_review_until_date Date;
7124 l_cash_appl_rule_id Number;
7125 l_invoice_format Varchar2(450);
7126 l_review_invoice_yn Varchar2(450);
7127
7128 l_cust_acct_site_id Number;
7129 l_payment_term_id Number;
7130
7131 --cursor to get vendor cpl_id at header level
7132 cursor l_chrcpl_csr (p_vendor_id in number,
7133 p_chr_id in number) is
7134 select cplb.id
7135 from okc_k_party_roles_b cplb
7136 where cplb.chr_id = p_chr_id
7137 and cplb.dnz_chr_id = p_chr_id
7138 and cplb.cle_id is null
7139 and cplb.object1_id1 = to_char(p_vendor_id)
7140 and cplb.object1_id2 = '#'
7141 and cplb.jtot_object1_code = 'OKX_VENDOR'
7142 and cplb.rle_code = 'OKL_VENDOR';
7143
7144 l_chr_cpl_id number;
7145
7146 -- Cursor to find out whether rebook copy
7147 cursor l_chk_rbk_csr(p_chr_id IN NUMBER) is
7148 SELECT 'Y',
7149 chrb.orig_system_id1,
7150 ktrx.date_transaction_occurred
7151 FROM okc_k_headers_b CHRB,
7152 okl_trx_contracts ktrx
7153 WHERE ktrx.khr_id_new = chrb.id
7154 AND ktrx.tsu_code = 'ENTERED'
7155 AND ktrx.rbr_code is NOT NULL
7156 AND ktrx.tcn_type = 'TRBK'
7157 --rkuttiya added for 12.1.1 Multi GAAP
7158 AND ktrx.representation_type = 'PRIMARY'
7159 --
7160 AND CHRB.id = p_chr_id
7161 AND CHRB.ORIG_SYSTEM_SOURCE_CODE = 'OKL_REBOOK';
7162
7163 l_rebook_cpy varchar2(1) default 'N';
7164 l_orig_chr_id okc_k_headers_b.id%TYPE;
7165 l_rebook_date date;
7166
7167 l_try_id number;
7168
7169 Begin
7170
7171 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7172 -- Call start_activity to create savepoint, check compatibility
7173 -- and initialize message list
7174 x_return_status := OKL_API.START_ACTIVITY (
7175 l_api_name
7176 ,p_init_msg_list
7177 ,'_PVT'
7178 ,x_return_status);
7179 -- Check if activity started successfully
7180 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7181 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7182 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7183 RAISE OKL_API.G_EXCEPTION_ERROR;
7184 END IF;
7185
7186
7187 -----------------------------------------------
7188 --start of input parameter validations
7189 -----------------------------------------------
7190 --1. validate chr_id
7191 If (p_chr_id is NULL) or (p_chr_id = OKL_API.G_MISS_NUM) then
7192 OKL_API.set_message(
7193 p_app_name => G_APP_NAME,
7194 p_msg_name => G_API_MISSING_PARAMETER,
7195 p_token1 => G_API_NAME_TOKEN,
7196 p_token1_value => l_api_name,
7197 p_token2 => G_MISSING_PARAM_TOKEN,
7198 p_token2_value => 'p_chr_id');
7199 x_return_status := OKL_API.G_RET_STS_ERROR;
7200 Raise OKL_API.G_EXCEPTION_ERROR;
7201 Elsif (p_chr_id is not NULL) and (p_chr_id <> OKL_API.G_MISS_NUM) then
7202 validate_chr_id(p_chr_id => p_chr_id,
7203 x_return_status => x_return_status);
7204 IF x_return_status = OKL_API.G_RET_STS_ERROR then
7205 OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_chr_id');
7206 Raise OKL_API.G_EXCEPTION_ERROR;
7207 Elsif x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR then
7208 Raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7209 End If;
7210 End If;
7211 ---------------------------------------
7212 --end of input parameter validations
7213 ---------------------------------------
7214
7215 --Rebook Processing
7216 -------------------------------------------
7217 --find out whether contract is rebook copy :
7218 -------------------------------------------
7219 l_rebook_cpy := 'N';
7220 open l_chk_rbk_csr(p_chr_id => p_chr_id);
7221 fetch l_chk_rbk_csr into
7222 l_rebook_cpy,
7223 l_orig_chr_id,
7224 l_rebook_date;
7225 If l_chk_rbk_csr%NOTFOUND then
7226 Null;
7227 End If;
7228 close l_chk_rbk_csr;
7229
7230 If l_rebook_cpy = 'N' then
7231 l_chr_id := p_chr_id;
7232 -- varangan - Bug#5474059 - Modified - Start
7233 get_contract_subsidy_amount(
7234 p_api_version => p_api_version,
7235 p_init_msg_list => p_init_msg_list,
7236 x_return_status => x_return_status,
7237 x_msg_count => x_msg_count,
7238 x_msg_data => x_msg_data,
7239 p_chr_id => l_chr_id,
7240 x_asbv_tbl => l_asdv_tbl);
7241
7242 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7243 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7244 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7245 RAISE OKL_API.G_EXCEPTION_ERROR;
7246 END IF;
7247
7248
7249 -- Moved code into a separate Procedure and called here
7250 -- this procedure is called to create billing transaction
7251 -- records for the new subsidies
7252 insert_billing_records(
7253 p_api_version => p_api_version
7254 , p_init_msg_list => p_init_msg_list
7255 , x_return_status => x_return_status
7256 , x_msg_count => x_msg_count
7257 , x_msg_data => x_msg_data
7258 , p_chr_id => l_chr_id
7259 , p_asdv_tbl => l_asdv_tbl);
7260 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7261 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7262 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7263 RAISE OKL_API.G_EXCEPTION_ERROR;
7264 END IF;
7265 -- varangan - Bug#5474059 - Modified - End
7266
7267 elsif l_rebook_cpy = 'Y' then
7268 l_chr_id := l_orig_chr_id;
7269 --call api for reversals
7270 -- varangan - Bug#5412198 - Commented - Start
7271 -- Susbidy invoice will no longer be reversed. Instead additional credit memos
7272 -- or invoices will be generated
7273 /* Reverse_Billing_Trx
7274 (p_api_version => p_api_version,
7275 p_init_msg_list => p_init_msg_list,
7276 x_return_status => x_return_status,
7277 x_msg_count => x_msg_count,
7278 x_msg_data => x_msg_data,
7279 p_chr_id => l_orig_chr_id,
7280 p_rebook_date => l_rebook_date);*/
7281
7282 -- varangan - Bug#5474059 - Commented - End
7283 -- varangan - Bug#5474059 - Added - Start
7284 rebook_adjustment
7285 (p_api_version => p_api_version,
7286 p_init_msg_list => p_init_msg_list,
7287 x_return_status => x_return_status,
7288 x_msg_count => x_msg_count,
7289 x_msg_data => x_msg_data,
7290 p_rbk_chr_id => p_chr_id,
7291 p_orig_chr_id => l_orig_chr_id,
7292 p_rebook_date => l_rebook_date);
7293 -- varangan - Bug#5474059 - Added - End
7294 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7295 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7296 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7297 RAISE OKL_API.G_EXCEPTION_ERROR;
7298 END IF;
7299 End If;
7300 -- End of rebook processing
7301
7302
7303
7304 l_asdv_tbl.delete;
7305
7306 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
7307
7308 EXCEPTION
7309 WHEN OKL_API.G_EXCEPTION_ERROR THEN
7310 If l_samevend_csr%ISOPEN then
7311 close l_samevend_csr;
7312 End If;
7313 If l_chrcpl_csr%ISOPEN then
7314 close l_chrcpl_csr;
7315 End If;
7316 If l_chk_rbk_csr%ISOPEN then
7317 close l_chk_rbk_csr;
7318 End If;
7319 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7320 l_api_name,
7321 G_PKG_NAME,
7322 'OKL_API.G_RET_STS_ERROR',
7323 x_msg_count,
7324 x_msg_data,
7325 '_PVT');
7326 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7327 If l_samevend_csr%ISOPEN then
7328 close l_samevend_csr;
7329 End If;
7330 If l_chrcpl_csr%ISOPEN then
7331 close l_chrcpl_csr;
7332 End If;
7333 If l_chk_rbk_csr%ISOPEN then
7334 close l_chk_rbk_csr;
7335 End If;
7336 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7337 l_api_name,
7338 G_PKG_NAME,
7339 'OKL_API.G_RET_STS_UNEXP_ERROR',
7340 x_msg_count,
7341 x_msg_data,
7342 '_PVT');
7343 WHEN OTHERS THEN
7344 If l_samevend_csr%ISOPEN then
7345 close l_samevend_csr;
7346 End If;
7347 If l_chrcpl_csr%ISOPEN then
7348 close l_chrcpl_csr;
7349 End If;
7350 If l_chk_rbk_csr%ISOPEN then
7351 close l_chk_rbk_csr;
7352 End If;
7353 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7354 l_api_name,
7355 G_PKG_NAME,
7356 'OTHERS',
7357 x_msg_count,
7358 x_msg_data,
7359 '_PVT');
7360 End Create_Billing_Trx;
7361
7362 --Bug# 3948361
7363 Procedure get_relk_termn_basis
7364 (p_api_version IN NUMBER,
7365 p_init_msg_list IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
7366 x_return_status OUT NOCOPY VARCHAR2,
7367 x_msg_count OUT NOCOPY NUMBER,
7368 x_msg_data OUT NOCOPY VARCHAR2,
7369 p_chr_id IN NUMBER,
7370 p_subsidy_id IN NUMBER,
7371 x_release_basis OUT NOCOPY varchar2) is
7372
7373 l_return_status VARCHAR2(1) default OKL_API.G_RET_STS_SUCCESS;
7374 l_api_name CONSTANT varchar2(30) := 'GET_RELK_TERMN_BASIS';
7375 l_api_version CONSTANT NUMBER := 1.0;
7376
7377 --cursor to read whether product change or customer change
7378 cursor l_relk_reason_csr(p_chr_id in number) is
7379 select tcn.rbr_code
7380 from okl_trx_contracts tcn,
7381 okl_trx_types_tl ttl
7382 where ttl.id = tcn.try_id
7383 and ttl.language = 'US'
7384 and ttl.name = 'Release'
7385 and tcn.tsu_code = 'ENTERED'
7386 and tcn.tcn_type = 'MAE'
7387 --rkuttiya added for 12.1.1 Multi GAAP
7388 and tcn.representation_type = 'PRIMARY'
7389 --
7390 and tcn.khr_id = p_chr_id;
7391
7392 l_relk_reason okl_trx_contracts.rbr_code%TYPE;
7393
7394 --cursor to read subsidy setup
7395 cursor l_tsfr_basis_csr (p_subsidy_id in number) is
7396 select subb.transfer_basis_code
7397 from okl_subsidies_b subb
7398 where id = p_subsidy_id;
7399
7400 l_transfer_basis okl_subsidies_b.transfer_basis_code%TYPE;
7401 Begin
7402
7403 x_return_status := OKL_API.G_RET_STS_SUCCESS;
7404 -- Call start_activity to create savepoint, check compatibility
7405 -- and initialize message list
7406 x_return_status := OKL_API.START_ACTIVITY (
7407 l_api_name
7408 ,p_init_msg_list
7409 ,'_PVT'
7410 ,x_return_status);
7411 -- Check if activity started successfully
7412 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7413 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7414 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7415 RAISE OKL_API.G_EXCEPTION_ERROR;
7416 END IF;
7417
7418
7419 for l_relk_reason_rec in l_relk_reason_csr(p_chr_id => p_chr_id)
7420 loop
7421 l_relk_reason := l_relk_reason_rec.rbr_code;
7422 end loop;
7423
7424 If l_relk_reason = 'PRODUCT_CHANGE' then
7425 x_release_basis := 'ACCELERATE';
7426 ElsIf l_relk_reason = 'CUSTOMER_CHANGE' then
7427 --read subsidy setup
7428 for l_tsfr_basis_rec in l_tsfr_basis_csr(p_subsidy_id => p_subsidy_id)
7429 loop
7430 l_transfer_basis := l_tsfr_basis_rec.transfer_basis_code;
7431 end loop;
7432 x_release_basis := l_transfer_basis;
7433 End If;
7434
7435 If x_release_basis is null then
7436 x_release_basis := 'ACCELERATE';
7437 end if;
7438 OKL_API.END_ACTIVITY (x_msg_count,x_msg_data );
7439
7440 EXCEPTION
7441 WHEN OKL_API.G_EXCEPTION_ERROR THEN
7442 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7443 l_api_name,
7444 G_PKG_NAME,
7445 'OKL_API.G_RET_STS_ERROR',
7446 x_msg_count,
7447 x_msg_data,
7448 '_PVT');
7449 WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7450 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7451 l_api_name,
7452 G_PKG_NAME,
7453 'OKL_API.G_RET_STS_UNEXP_ERROR',
7454 x_msg_count,
7455 x_msg_data,
7456 '_PVT');
7457 WHEN OTHERS THEN
7458 x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
7459 l_api_name,
7460 G_PKG_NAME,
7461 'OTHERS',
7462 x_msg_count,
7463 x_msg_data,
7464 '_PVT');
7465
7466 End get_relk_termn_basis;
7467 END OKL_SUBSIDY_PROCESS_PVT;