DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_SUBSIDY_PROCESS_PVT

Source


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