DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_RELEASE_PVT

Source


1 Package body okl_release_pvt as
2 /* $Header: OKLRREKB.pls 120.36.12010000.4 2008/11/25 09:46:23 nikshah ship $ */
3 -------------------------------------------------------------------------------------------------
4 -- GLOBAL MESSAGE CONSTANTS
5 -------------------------------------------------------------------------------------------------
6   G_NO_MATCHING_RECORD          CONSTANT VARCHAR2(200) := 'OKL_LLA_NO_MATCHING_RECORD';
7   G_COPY_HEADER                 CONSTANT VARCHAR2(200) := 'OKL_LLA_COPY_HEADER';
8   G_COPY_LINE                   CONSTANT VARCHAR2(200) := 'OKL_LLA_COPY_LINE';
9   G_FND_APP                     CONSTANT  VARCHAR2(200) := OKL_API.G_FND_APP;
10   G_FORM_UNABLE_TO_RESERVE_REC  CONSTANT  VARCHAR2(200) := OKL_API.G_FORM_UNABLE_TO_RESERVE_REC;
11   G_FORM_RECORD_DELETED	        CONSTANT  VARCHAR2(200) := OKL_API.G_FORM_RECORD_DELETED;
12   G_FORM_RECORD_CHANGED	        CONSTANT  VARCHAR2(200) := OKL_API.G_FORM_RECORD_CHANGED;
13   G_RECORD_LOGICALLY_DELETED    CONSTANT  VARCHAR2(200) := OKL_API.G_RECORD_LOGICALLY_DELETED;
14   G_REQUIRED_VALUE              CONSTANT  VARCHAR2(200) := OKL_API.G_REQUIRED_VALUE;
15   G_INVALID_VALUE               CONSTANT  VARCHAR2(200) := OKL_API.G_INVALID_VALUE;
16   G_COL_NAME_TOKEN              CONSTANT  VARCHAR2(200) := OKL_API.G_COL_NAME_TOKEN;
17   G_PARENT_TABLE_TOKEN	        CONSTANT  VARCHAR2(200) := OKL_API.G_PARENT_TABLE_TOKEN;
18   G_CHILD_TABLE_TOKEN	        CONSTANT  VARCHAR2(200) := OKL_API.G_CHILD_TABLE_TOKEN;
19   G_UNEXPECTED_ERROR            CONSTANT  VARCHAR2(200) := 'OKC_CONTRACTS_UNEXP_ERROR';
20   G_SQLERRM_TOKEN               CONSTANT  VARCHAR2(200) := 'SQLerrm';
21   G_SQLCODE_TOKEN               CONSTANT  VARCHAR2(200) := 'SQLcode';
22   G_UPPERCASE_REQUIRED	        CONSTANT  VARCHAR2(200) := 'OKL_CONTRACTS_UPPERCASE_REQ';
23   G_FETCHING_INFO               CONSTANT  VARCHAR2(200) := 'OKL_LLA_FETCHING_INFO';
24   G_LINE_RECORD                 CONSTANT  VARCHAR2(200) := 'OKL_LLA_LINE_RECORD';
25 -------------------------------------------------------------------------------------------------
26 -- GLOBAL EXCEPTION
27 -------------------------------------------------------------------------------------------------
28   G_EXCEPTION_HALT_VALIDATION             EXCEPTION;
29   G_EXCEPTION_STOP_VALIDATION             EXCEPTION;
30   G_API_TYPE                    CONSTANT  VARCHAR2(4) := '_PVT';
31   G_API_VERSION                 CONSTANT  NUMBER := 1.0;
32   G_SCOPE                       CONSTANT  VARCHAR2(4) := '_PVT';
33 -------------------------------------------------------------------------------------------------
34 -- GLOBAL VARIABLES
35 -------------------------------------------------------------------------------------------------
36   G_PKG_NAME	                CONSTANT  VARCHAR2(200) := 'OKL_RELEASE_PVT';
37   G_APP_NAME		        CONSTANT  VARCHAR2(3)   :=  OKL_API.G_APP_NAME;
38   G_FIN_LINE_LTY_CODE                     OKC_LINE_STYLES_V.LTY_CODE%TYPE := 'FREE_FORM1';
39   G_FA_LINE_LTY_CODE                      OKC_LINE_STYLES_V.LTY_CODE%TYPE := 'FIXED_ASSET';
40   G_INST_LINE_LTY_CODE                    OKC_LINE_STYLES_V.LTY_CODE%TYPE := 'FREE_FORM2';
41   G_IB_LINE_LTY_CODE                      OKC_LINE_STYLES_V.LTY_CODE%TYPE := 'INST_ITEM';
42   G_ERROR                       CONSTANT  VARCHAR2(200) := 'OKL_COPY_ASSET_LINES';
43   G_CREATION_ERROR              CONSTANT  VARCHAR2(200) := 'Error Occurred in Creation';
44   G_ID2                         CONSTANT  VARCHAR2(200) := '#';
45   G_TRY_NAME                              OKL_TRX_TYPES_V.NAME%TYPE       := 'CREATE ASSET LINES';
46   G_TRY_TYPE                              OKL_TRX_TYPES_V.TRY_TYPE%TYPE   := 'TIE';
47   G_TLS_TYPE                              OKC_LINE_STYLES_V.LSE_TYPE%TYPE := 'TLS';
48   G_SLS_TYPE                              OKC_LINE_STYLES_V.LSE_TYPE%TYPE := 'SLS';
49   G_YN_ERROR                    CONSTANT  VARCHAR2(200) := 'Invalid Value for ';
50 -------------------------------------------------------------------------------------------------
51 -- GLOBAL COMPOSITE TYPE VARIABLES
52 -------------------------------------------------------------------------------------------------
53   TYPE g_top_line_tbl IS TABLE OF OKC_K_LINES_V.ID%TYPE
54         INDEX BY BINARY_INTEGER;
55   TYPE g_asset_num_tbl IS TABLE OF OKL_TXL_ASSETS_V.ASSET_NUMBER%TYPE
56         INDEX BY BINARY_INTEGER;
57   subtype clev_rec_type is OKL_OKC_MIGRATION_PVT.CLEV_REC_TYPE;
58   subtype klev_tbl_type is OKL_CONTRACT_PUB.klev_tbl_type;
59   subtype cimv_rec_type is OKL_OKC_MIGRATION_PVT.cimv_rec_type;
60   subtype trxv_rec_type is OKL_TRX_ASSETS_PUB.thpv_rec_type;
61 -------------------------------------------------------------------------------------------------
62  ------------------------------------------------------------------------------
63  	   --Start of comments
64  	   --
65  	   --Procedure Name        : create_ubb_contract
66  	   --Purpose               : Check if Release Contract has usage line
67  	   --                       If true then create a usage contract only in case
68  	   --                       of full TnA
69  	   --                        - used internally
70  	   --Modification History  :
71  	   --09-jan-2008    rajnisku   Created : Bug 6657564
72  	 ------------------------------------------------------------------------------
73 
74  	   PROCEDURE create_ubb_contract(p_api_version   IN  NUMBER,
75  	                                p_init_msg_list IN  VARCHAR2,
76  	                                x_return_status OUT NOCOPY VARCHAR2,
77  	                                x_msg_count     OUT NOCOPY NUMBER,
78  	                                x_msg_data      OUT NOCOPY VARCHAR2,
79  	                                p_chr_id        IN  NUMBER,
80  	                                p_source_trx_id IN NUMBER
81  	                                                            ) IS
82 
83  	    l_return_status   VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
84  	    l_api_name        CONSTANT VARCHAR2(30) := 'create_ubb_contract';
85  	    l_api_version     CONSTANT NUMBER    := 1.0;
86 
87  	     --cursor to check if usage line exists on the contract
88  	     CURSOR l_chk_usage_csr (p_chr_id IN Number) IS
89  	     SELECT '!'
90  	     FROM   dual
91  	     where exists (SELECT 1
92  	                  FROM OKC_LINE_STYLES_B lse,
93  	                       OKC_K_LINES_B     cle,
94  	                       okc_statuses_b sts
95  	                  WHERE  lse.id = cle.lse_id
96  	                  AND    lse.lty_code = 'USAGE'
97  	                  AND    cle.dnz_chr_id = p_chr_id
98  	                  AND sts.code =cle.sts_code
99  	                  AND sts.ste_code NOT IN ('EXPIRED','HOLD','CANCELLED','TERMINATED')
100  	                  );
101 
102  	   CURSOR taa_request_csr(p_source_trx_id IN NUMBER)
103  	   IS
104  	   SELECT tsu_code,
105  	        complete_transfer_yn,
106  	        date_transaction_occurred
107  	   FROM okl_trx_contracts
108  	   where id = p_source_trx_id;
109 
110  	   taa_request_rec        taa_request_csr%ROWTYPE;
111 
112  	   l_usage_khr varchar2(1);
113  	   l_usage_create_yn VARCHAR2(1):='N';
114  	   l_service_chr_id NUMBER;
115 
116  	  begin
117  	     --check if usage line is there on the contract
118  	       l_usage_khr := '?';
119  	       OPEN l_chk_usage_csr (p_chr_id => p_chr_id);
120  	       FETCH l_chk_usage_csr INTO l_usage_khr;
121  	       IF l_chk_usage_csr%NOTFOUND THEN
122  	          NULL;
123  	       END IF;
124  	       CLOSE l_chk_usage_csr;
125 
126  	       IF l_usage_khr = '!' THEN
127  	            --check whether partial/full T n A request
128  	            --create a usage contract only in case of full TnA
129  	           l_usage_create_yn:='N';
130 
131  	           IF p_source_trx_id IS NOT NULL THEN
132  	            open taa_request_csr(p_source_trx_id => p_source_trx_id );
133  	            fetch taa_request_csr into taa_request_rec;
134  	            close taa_request_csr;
135 
136  	            IF NVL(taa_request_rec.complete_transfer_yn,'X') = 'Y' THEN
137  	                 l_usage_create_yn:='Y';
138  	            END IF;
139  	           ELSE -- source id null.
140  	             l_usage_create_yn:='Y';
141  	           END IF;
142 
143  	           IF l_usage_create_yn='Y' THEN
144  	            --call ubb api for service contracts creation
145  	            okl_ubb_integration_pub.create_ubb_contract(
146  	                           p_api_version   => p_api_version,
147  	                           p_init_msg_list => p_init_msg_list,
148  	                           x_return_status => x_return_status,
149  	                           x_msg_count     => x_msg_count,
150  	                           x_msg_data      => x_msg_data,
151  	                           p_chr_id        => p_chr_id,
152  	                           x_chr_id        => l_service_chr_id
153  	                          );
154  	            IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
155  	                     RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
156  	             ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
157  	                     RAISE Okl_Api.G_EXCEPTION_ERROR;
158  	             END IF;
159  	           END IF;
160 
161  	         End If;
162 
163  	    EXCEPTION
164  	       when OKL_API.G_EXCEPTION_ERROR then
165 
166  	         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
167  	                         p_api_name  => l_api_name,
168  	                         p_pkg_name  => G_PKG_NAME,
169  	                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
170  	                         x_msg_count => x_msg_count,
171  	                         x_msg_data  => x_msg_data,
172  	                         p_api_type  => G_API_TYPE);
173 
174  	       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
175 
176  	         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
177  	                         p_api_name  => l_api_name,
178  	                         p_pkg_name  => G_PKG_NAME,
179  	                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
180  	                         x_msg_count => x_msg_count,
181  	                         x_msg_data  => x_msg_data,
182  	                         p_api_type  => G_API_TYPE);
183 
184  	       when OTHERS then
185 
186  	         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
187  	                         p_api_name  => l_api_name,
188  	                         p_pkg_name  => G_PKG_NAME,
189  	                         p_exc_name  => 'OTHERS',
190  	                         x_msg_count => x_msg_count,
191  	                         x_msg_data  => x_msg_data,
192  	                         p_api_type  => G_API_TYPE);
193  	  end create_ubb_contract;
194 
195 
196 
197  	 ------------------------------------------------------------------------------
198  	   --Start of comments
199  	   --
200  	   --Procedure Name        : adjust_usage_lines
201  	   --Purpose               : Update/Delete usage line on Release contract
202  	   --
203  	   --
204  	   --                        - used internally
205  	   --Modification History  :
206  	   --09-Jan-2008    rirawat   Created : Bug 6657564
207  	 ------------------------------------------------------------------------------
208 
209  	    PROCEDURE adjust_usage_lines(p_api_version   IN  NUMBER,
210  	                                p_init_msg_list IN  VARCHAR2,
211  	                                x_return_status OUT NOCOPY VARCHAR2,
212  	                                x_msg_count     OUT NOCOPY NUMBER,
213  	                                x_msg_data      OUT NOCOPY VARCHAR2,
214  	                                p_chr_id        IN  NUMBER,
215  	                                p_release_date  IN  DATE) IS
216 
217  	     l_return_status   VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
218  	     l_api_name        CONSTANT VARCHAR2(30) := 'ADJUST_USAGE_LINES';
219  	     l_api_version     CONSTANT NUMBER   := 1.0;
220 
221  	   --This cursor find usage lines in the release contract which are not
222  	   -- linked to any asset
223 
224  	   CURSOR non_linked_usage_csr (p_chr_id NUMBER)  IS
225  	     SELECT cle.id usage_line_id
226  	     FROM okc_line_styles_b lse,
227  	          okc_k_lines_b cle,
228  	          okc_statuses_v okcsts
229  	     WHERE cle.dnz_chr_id = p_chr_id
230  	     AND cle.lse_id = lse.id
231  	     AND lse.lse_parent_id is null
232  	     AND lse.lty_code ='USAGE'
233  	     and okcsts.code = cle.sts_code
234  	     AND okcsts.ste_code NOT IN ('EXPIRED','HOLD','CANCELLED','TERMINATED')
235  	     AND NOT EXISTS (
236  	         SELECT 1
237  	        FROM okc_k_lines_b line,
238  	        okc_line_styles_b lse,
239  	        okc_statuses_b sts
240  	        WHERE  line.dnz_chr_id = p_chr_id
241  	        AND    line.cle_id     = cle.id
242  	        AND    line.lse_id = lse.id
243  	        AND    lse.lty_code ='LINK_USAGE_ASSET'
244  	        AND sts.code = line.sts_code
245  	        AND sts.ste_code NOT IN ('EXPIRED','HOLD','CANCELLED','TERMINATED')
246  	     );
247 
248 
249  	     CURSOR usage_csr (p_chr_id NUMBER) IS
250  	     SELECT cle.id usage_line_id
251  	     FROM okc_line_styles_b lse,
252  	          okc_k_lines_b cle,okc_statuses_v okcsts
253  	     WHERE cle.dnz_chr_id = p_chr_id
254  	     AND cle.lse_id = lse.id
255  	     AND lse.lse_parent_id is null
256  	     AND lse.lty_code ='USAGE'
257  	     and okcsts.code = cle.sts_code
258  	     AND okcsts.ste_code NOT IN ('EXPIRED','HOLD','CANCELLED','TERMINATED');
259 
260 
261  	    CURSOR link_asset_csr (p_chr_id        NUMBER,
262  	                           p_usage_line_id NUMBER) IS
263  	    SELECT line.id
264  	    FROM okc_k_lines_b line,
265  	    okc_line_styles_b lse,
266  	    okc_statuses_b okcsts
267  	    WHERE  line.dnz_chr_id = p_chr_id
268  	    AND    line.cle_id     = p_usage_line_id
269  	    AND    line.lse_id = lse.id
270  	    AND    lse.lty_code ='LINK_USAGE_ASSET'
271  	    AND okcsts.code = line.sts_code
272  	    AND okcsts.ste_code NOT IN ('EXPIRED','HOLD','CANCELLED','TERMINATED');
273 
274  	    lp_klev_rec  okl_kle_pvt.klev_rec_type;
275  	     lp_clev_rec  okl_okc_migration_pvt.clev_rec_type;
276  	     lp_clev_temp_rec okl_okc_migration_pvt.clev_rec_type;
277  	     lp_klev_temp_rec okl_kle_pvt.klev_rec_type;
278  	     lx_klev_rec  okl_kle_pvt.klev_rec_type;
279  	     lx_clev_rec  okl_okc_migration_pvt.clev_rec_type;
280 
281  	  begin
282 
283  	      x_return_status := Okl_Api.G_RET_STS_SUCCESS;
284  	     -- Call start_activity to create savepoint, check compatibility
285  	     -- and initialize message list
286  	     l_return_status := Okl_Api.START_ACTIVITY(
287  	                         p_api_name      => l_api_name,
288  	                         p_pkg_name      => g_pkg_name,
289  	                         p_init_msg_list => p_init_msg_list,
290  	                         l_api_version   => l_api_version,
291  	                         p_api_version   => p_api_version,
292  	                         p_api_type      => '_PVT',
293  	                         x_return_status => x_return_status);
294  	     -- Check if activity started successfully
295  	     IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
296  	        RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
297  	     ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
298  	        RAISE Okl_Api.G_EXCEPTION_ERROR;
299  	     END IF;
300 
301  	    --Remove all the usage lines without any assets associated with it.
302  	    FOR non_linked_usage_rec In non_linked_usage_csr(p_chr_id) LOOP
303 
304  	         OKL_CONTRACT_PUB.delete_contract_line(
305  	             p_api_version   =>p_api_version,
306  	             p_init_msg_list => p_init_msg_list,
307  	             x_return_status => x_return_status,
308  	             x_msg_count     => x_msg_count,
309  	             x_msg_data      => x_msg_data,
310  	             p_line_id       => non_linked_usage_rec.usage_line_id
311  	         );
312 
313  	         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
314  	           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
315  	         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
316  	           RAISE OKL_API.G_EXCEPTION_ERROR;
317  	         END IF;
318 
319  	    END LOOP;
320 
321  	     --update the start date of the usage and linked asset lines with the
322  	     -- release date
323 
324  	     FOR usage_rec IN usage_csr (p_chr_id)
325  	     LOOP
326  	       lp_clev_rec     := lp_clev_temp_rec;
327  	       lp_klev_rec     := lp_klev_temp_rec;
328  	       lp_clev_rec.id := usage_rec.usage_line_id;
329  	       lp_clev_rec.start_date := p_release_date;
330  	       lp_klev_rec.id := usage_rec.usage_line_id;
331 
332  	       OKL_CONTRACT_PUB.update_contract_line(
333  	            p_api_version         => p_api_version,
334  	            p_init_msg_list       => p_init_msg_list,
335  	            x_return_status       => x_return_status,
336  	            x_msg_count           => x_msg_count,
337  	            x_msg_data            => x_msg_data,
338  	            p_clev_rec            => lp_clev_rec,
339  	            p_klev_rec            => lp_klev_rec,
340  	            x_clev_rec            => lx_clev_rec,
341  	            x_klev_rec            => lx_klev_rec
342  	         );
343  	         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
344  	           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
345  	         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
346  	           RAISE OKL_API.G_EXCEPTION_ERROR;
347  	         END IF;
348 
349  	           FOR link_asset_rec IN link_asset_csr (p_chr_id,usage_rec.usage_line_id)
350  	           LOOP
351  	               lp_clev_rec     := lp_clev_temp_rec;
352  	           lp_klev_rec     := lp_klev_temp_rec;
353 
354  	               lp_clev_rec.id := link_asset_rec.id;
355  	               lp_clev_rec.start_date := p_release_date;
356  	               lp_klev_rec.id := link_asset_rec.id;
357 
358  	         OKL_CONTRACT_PUB.update_contract_line(
359  	            p_api_version         => p_api_version,
360  	            p_init_msg_list       => p_init_msg_list,
361  	            x_return_status       => x_return_status,
362  	            x_msg_count           => x_msg_count,
363  	            x_msg_data            => x_msg_data,
364  	            p_clev_rec            => lp_clev_rec,
365  	            p_klev_rec            => lp_klev_rec,
366  	            x_clev_rec            => lx_clev_rec,
367  	            x_klev_rec            => lx_klev_rec
368  	           );
369  	         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
370  	          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
371  	         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
372  	           RAISE OKL_API.G_EXCEPTION_ERROR;
373  	         END IF;
374  	           END LOOP;
375 
376  	     END LOOP;
377  	      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
378  	                          x_msg_data    => x_msg_data);
379  	   EXCEPTION
380  	       when OKL_API.G_EXCEPTION_ERROR then
381 
382  	         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
383  	                         p_api_name  => l_api_name,
384  	                         p_pkg_name  => G_PKG_NAME,
385  	                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
386  	                         x_msg_count => x_msg_count,
387  	                         x_msg_data  => x_msg_data,
388  	                         p_api_type  => G_API_TYPE);
389 
390  	       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
391 
392  	         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
393  	                         p_api_name  => l_api_name,
394  	                         p_pkg_name  => G_PKG_NAME,
395  	                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
396  	                         x_msg_count => x_msg_count,
397  	                         x_msg_data  => x_msg_data,
398  	                         p_api_type  => G_API_TYPE);
399 
400  	       when OTHERS then
401 
402  	         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
403  	                         p_api_name  => l_api_name,
404  	                         p_pkg_name  => G_PKG_NAME,
405  	                         p_exc_name  => 'OTHERS',
406  	                         x_msg_count => x_msg_count,
407  	                         x_msg_data  => x_msg_data,
408  	                         p_api_type  => G_API_TYPE);
409 
410 
411  	  end adjust_usage_lines;
412 -- Start of Commnets
413 -- Badrinath Kuchibholta
414 -- Function Name        : get_tasv_rec
415 -- Description          : Get Transaction Header Record
416 -- Business Rules       :
417 -- Parameters           :
418 -- Version              :
419 -- End of Commnets
420   FUNCTION  get_tasv_rec(p_tas_id   IN  NUMBER,
421                          x_trxv_rec OUT NOCOPY trxv_rec_type)
422   RETURN  VARCHAR2
423   IS
424     x_return_status            VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
425     CURSOR c_trxv_rec(p_tas_id NUMBER)
426     IS
427     SELECT ID,
428            OBJECT_VERSION_NUMBER,
429            ICA_ID,
430            ATTRIBUTE_CATEGORY,
431            ATTRIBUTE1,
432            ATTRIBUTE2,
433            ATTRIBUTE3,
434            ATTRIBUTE4,
435            ATTRIBUTE5,
436            ATTRIBUTE6,
437            ATTRIBUTE7,
438            ATTRIBUTE8,
439            ATTRIBUTE9,
440            ATTRIBUTE10,
441            ATTRIBUTE11,
442            ATTRIBUTE12,
443            ATTRIBUTE13,
444            ATTRIBUTE14,
445            ATTRIBUTE15,
446            TAS_TYPE,
447            CREATED_BY,
448            CREATION_DATE,
449            LAST_UPDATED_BY,
450            LAST_UPDATE_DATE,
451            LAST_UPDATE_LOGIN,
452            TSU_CODE,
453            TRY_ID,
454            DATE_TRANS_OCCURRED,
455            TRANS_NUMBER,
456            COMMENTS,
457            REQ_ASSET_ID,
458            TOTAL_MATCH_AMOUNT
459     FROM OKL_TRX_ASSETS
460     WHERE id = p_tas_id;
461   BEGIN
462     OPEN c_trxv_rec(p_tas_id);
463     FETCH c_trxv_rec INTO
464            x_trxv_rec.ID,
465            x_trxv_rec.OBJECT_VERSION_NUMBER,
466            x_trxv_rec.ICA_ID,
467            x_trxv_rec.ATTRIBUTE_CATEGORY,
468            x_trxv_rec.ATTRIBUTE1,
469            x_trxv_rec.ATTRIBUTE2,
470            x_trxv_rec.ATTRIBUTE3,
471            x_trxv_rec.ATTRIBUTE4,
472            x_trxv_rec.ATTRIBUTE5,
473            x_trxv_rec.ATTRIBUTE6,
474            x_trxv_rec.ATTRIBUTE7,
475            x_trxv_rec.ATTRIBUTE8,
476            x_trxv_rec.ATTRIBUTE9,
477            x_trxv_rec.ATTRIBUTE10,
478            x_trxv_rec.ATTRIBUTE11,
479            x_trxv_rec.ATTRIBUTE12,
480            x_trxv_rec.ATTRIBUTE13,
481            x_trxv_rec.ATTRIBUTE14,
482            x_trxv_rec.ATTRIBUTE15,
483            x_trxv_rec.TAS_TYPE,
484            x_trxv_rec.CREATED_BY,
485            x_trxv_rec.CREATION_DATE,
486            x_trxv_rec.LAST_UPDATED_BY,
487            x_trxv_rec.LAST_UPDATE_DATE,
488            x_trxv_rec.LAST_UPDATE_LOGIN,
489            x_trxv_rec.TSU_CODE,
490            x_trxv_rec.TRY_ID,
491            x_trxv_rec.DATE_TRANS_OCCURRED,
492            x_trxv_rec.TRANS_NUMBER,
493            x_trxv_rec.COMMENTS,
494            x_trxv_rec.REQ_ASSET_ID,
495            x_trxv_rec.TOTAL_MATCH_AMOUNT;
496     IF c_trxv_rec%NOTFOUND THEN
497        x_return_status := OKL_API.G_RET_STS_ERROR;
498     END IF;
499     CLOSE c_trxv_rec;
500     RETURN(x_return_status);
501   EXCEPTION
502     WHEN OTHERS THEN
503       -- store SQL error message on message stack for caller
504       OKL_API.set_message(
505               G_APP_NAME,
506               G_UNEXPECTED_ERROR,
507               G_SQLCODE_TOKEN,
508               SQLCODE,
509               G_SQLERRM_TOKEN,
510               SQLERRM);
511      IF c_trxv_rec%ISOPEN THEN
512         CLOSE c_trxv_rec;
513      END IF;
514       -- notify caller of an UNEXPECTED error
515      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
516      RETURN(x_return_status);
517   END get_tasv_rec;
518 -------------------------------------------------------------------------------------------------
519   FUNCTION get_rec_chrv (p_id        IN  OKC_K_HEADERS_V.ID%TYPE,
520                          x_chrv_rec  OUT NOCOPY chrv_rec_type)
521   RETURN VARCHAR2 IS
522     CURSOR okc_chrv_pk_csr(p_id OKC_K_HEADERS_V.ID%TYPE) IS
523     SELECT ID,
524            OBJECT_VERSION_NUMBER,
525            SFWT_FLAG,
526            CHR_ID_RESPONSE,
527            CHR_ID_AWARD,
528            INV_ORGANIZATION_ID,
529            STS_CODE,
530            QCL_ID,
531            SCS_CODE,
532            CONTRACT_NUMBER,
533            CURRENCY_CODE,
534            CONTRACT_NUMBER_MODIFIER,
535            ARCHIVED_YN,
536            DELETED_YN,
537            CUST_PO_NUMBER_REQ_YN,
538            PRE_PAY_REQ_YN,
539            CUST_PO_NUMBER,
540            SHORT_DESCRIPTION,
541            COMMENTS,
542            DESCRIPTION,
543            DPAS_RATING,
544            COGNOMEN,
545            TEMPLATE_YN,
546            TEMPLATE_USED,
547            DATE_APPROVED,
548            DATETIME_CANCELLED,
549            AUTO_RENEW_DAYS,
550            DATE_ISSUED,
551            DATETIME_RESPONDED,
552            NON_RESPONSE_REASON,
553            NON_RESPONSE_EXPLAIN,
554            RFP_TYPE,
555            CHR_TYPE,
556            KEEP_ON_MAIL_LIST,
557            SET_ASIDE_REASON,
558            SET_ASIDE_PERCENT,
559            RESPONSE_COPIES_REQ,
560            DATE_CLOSE_PROJECTED,
561            DATETIME_PROPOSED,
562            DATE_SIGNED,
563            DATE_TERMINATED,
564            DATE_RENEWED,
565            TRN_CODE,
566            START_DATE,
567            END_DATE,
568            AUTHORING_ORG_ID,
569            BUY_OR_SELL,
570            ISSUE_OR_RECEIVE,
571            ESTIMATED_AMOUNT,
572            ESTIMATED_AMOUNT_RENEWED,
573            CURRENCY_CODE_RENEWED,
574 	   UPG_ORIG_SYSTEM_REF,
575            UPG_ORIG_SYSTEM_REF_ID,
576            APPLICATION_ID,
577            ORIG_SYSTEM_SOURCE_CODE,
578            ORIG_SYSTEM_ID1,
579            ORIG_SYSTEM_REFERENCE1,
580            ATTRIBUTE_CATEGORY,
581            ATTRIBUTE1,
582            ATTRIBUTE2,
583            ATTRIBUTE3,
584            ATTRIBUTE4,
585            ATTRIBUTE5,
586            ATTRIBUTE6,
587            ATTRIBUTE7,
588            ATTRIBUTE8,
589            ATTRIBUTE9,
590            ATTRIBUTE10,
591            ATTRIBUTE11,
592            ATTRIBUTE12,
593            ATTRIBUTE13,
594            ATTRIBUTE14,
595            ATTRIBUTE15,
596            CREATED_BY,
597            CREATION_DATE,
598            LAST_UPDATED_BY,
599            LAST_UPDATE_DATE,
600            LAST_UPDATE_LOGIN
601      FROM okc_k_headers_v chrv
602      WHERE chrv.id = p_id;
603     x_return_status            VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
604   BEGIN
605     OPEN okc_chrv_pk_csr (p_id);
606     FETCH okc_chrv_pk_csr INTO
607           x_chrv_rec.ID,
608           x_chrv_rec.OBJECT_VERSION_NUMBER,
609           x_chrv_rec.SFWT_FLAG,
610           x_chrv_rec.CHR_ID_RESPONSE,
611           x_chrv_rec.CHR_ID_AWARD,
612           x_chrv_rec.INV_ORGANIZATION_ID,
613           x_chrv_rec.STS_CODE,
614           x_chrv_rec.QCL_ID,
615           x_chrv_rec.SCS_CODE,
616           x_chrv_rec.CONTRACT_NUMBER,
617           x_chrv_rec.CURRENCY_CODE,
618           x_chrv_rec.CONTRACT_NUMBER_MODIFIER,
619           x_chrv_rec.ARCHIVED_YN,
620           x_chrv_rec.DELETED_YN,
621           x_chrv_rec.CUST_PO_NUMBER_REQ_YN,
622           x_chrv_rec.PRE_PAY_REQ_YN,
623           x_chrv_rec.CUST_PO_NUMBER,
624           x_chrv_rec.SHORT_DESCRIPTION,
625           x_chrv_rec.COMMENTS,
626           x_chrv_rec.DESCRIPTION,
627           x_chrv_rec.DPAS_RATING,
628           x_chrv_rec.COGNOMEN,
629           x_chrv_rec.TEMPLATE_YN,
630           x_chrv_rec.TEMPLATE_USED,
631           x_chrv_rec.DATE_APPROVED,
632           x_chrv_rec.DATETIME_CANCELLED,
633           x_chrv_rec.AUTO_RENEW_DAYS,
634           x_chrv_rec.DATE_ISSUED,
635           x_chrv_rec.DATETIME_RESPONDED,
636           x_chrv_rec.NON_RESPONSE_REASON,
637           x_chrv_rec.NON_RESPONSE_EXPLAIN,
638           x_chrv_rec.RFP_TYPE,
639           x_chrv_rec.CHR_TYPE,
640           x_chrv_rec.KEEP_ON_MAIL_LIST,
641           x_chrv_rec.SET_ASIDE_REASON,
642           x_chrv_rec.SET_ASIDE_PERCENT,
643           x_chrv_rec.RESPONSE_COPIES_REQ,
644           x_chrv_rec.DATE_CLOSE_PROJECTED,
645           x_chrv_rec.DATETIME_PROPOSED,
646           x_chrv_rec.DATE_SIGNED,
647           x_chrv_rec.DATE_TERMINATED,
648           x_chrv_rec.DATE_RENEWED,
649           x_chrv_rec.TRN_CODE,
650           x_chrv_rec.START_DATE,
651           x_chrv_rec.END_DATE,
652           x_chrv_rec.AUTHORING_ORG_ID,
653           x_chrv_rec.BUY_OR_SELL,
654           x_chrv_rec.ISSUE_OR_RECEIVE,
655           x_chrv_rec.ESTIMATED_AMOUNT,
656           x_chrv_rec.ESTIMATED_AMOUNT_RENEWED,
657           x_chrv_rec.CURRENCY_CODE_RENEWED,
658           x_chrv_rec.UPG_ORIG_SYSTEM_REF,
659           x_chrv_rec.UPG_ORIG_SYSTEM_REF_ID,
660           x_chrv_rec.APPLICATION_ID,
661           x_chrv_rec.ORIG_SYSTEM_SOURCE_CODE,
662           x_chrv_rec.ORIG_SYSTEM_ID1,
663           x_chrv_rec.ORIG_SYSTEM_REFERENCE1,
664           x_chrv_rec.ATTRIBUTE_CATEGORY,
665           x_chrv_rec.ATTRIBUTE1,
666           x_chrv_rec.ATTRIBUTE2,
667           x_chrv_rec.ATTRIBUTE3,
668           x_chrv_rec.ATTRIBUTE4,
669           x_chrv_rec.ATTRIBUTE5,
670           x_chrv_rec.ATTRIBUTE6,
671           x_chrv_rec.ATTRIBUTE7,
672           x_chrv_rec.ATTRIBUTE8,
673           x_chrv_rec.ATTRIBUTE9,
674           x_chrv_rec.ATTRIBUTE10,
675           x_chrv_rec.ATTRIBUTE11,
676           x_chrv_rec.ATTRIBUTE12,
677           x_chrv_rec.ATTRIBUTE13,
678           x_chrv_rec.ATTRIBUTE14,
679           x_chrv_rec.ATTRIBUTE15,
680           x_chrv_rec.CREATED_BY,
681           x_chrv_rec.CREATION_DATE,
682           x_chrv_rec.LAST_UPDATED_BY,
683           x_chrv_rec.LAST_UPDATE_DATE,
684           x_chrv_rec.LAST_UPDATE_LOGIN;
685     IF okc_chrv_pk_csr%NOTFOUND THEN
686        x_return_status := OKL_API.G_RET_STS_ERROR;
687     END IF;
688     CLOSE okc_chrv_pk_csr;
689     RETURN(x_return_status);
690   EXCEPTION
691     WHEN OTHERS THEN
692       -- store SQL error message on message stack for caller
693       OKL_API.set_message(
694               G_APP_NAME,
695               G_UNEXPECTED_ERROR,
696               G_SQLCODE_TOKEN,
697               SQLCODE,
698               G_SQLERRM_TOKEN,
699               SQLERRM);
700       -- notify caller of an UNEXPECTED error
701       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
702       -- if the cursor is open
703       IF okc_chrv_pk_csr%ISOPEN THEN
704          CLOSE okc_chrv_pk_csr;
705       END IF;
706       RETURN(x_return_status);
707   END get_rec_chrv;
708 ----------------------------------------------------------------------------
709 -- FUNCTION get_rec for: OKC_K_ITEMS_V
710 ---------------------------------------------------------------------------
711   FUNCTION get_rec_cimv(p_cle_id      IN  OKC_K_ITEMS_V.CLE_ID%TYPE,
712                         p_dnz_chr_id  IN  OKC_K_ITEMS_V.DNZ_CHR_ID%TYPE,
713                         x_cimv_rec OUT NOCOPY cimv_rec_type)
714   RETURN VARCHAR2 IS
715     CURSOR okc_cimv_pk_csr(p_cle_id     OKC_K_ITEMS_V.CLE_ID%TYPE,
716                            p_dnz_chr_id OKC_K_ITEMS_V.DNZ_CHR_ID%TYPE) IS
717     SELECT CIM.ID,
718            CIM.OBJECT_VERSION_NUMBER,
719            CIM.CLE_ID,
720            CIM.CHR_ID,
721            CIM.CLE_ID_FOR,
722            CIM.DNZ_CHR_ID,
723            CIM.OBJECT1_ID1,
724            CIM.OBJECT1_ID2,
725            CIM.JTOT_OBJECT1_CODE,
726            CIM.UOM_CODE,
727            CIM.EXCEPTION_YN,
728            CIM.NUMBER_OF_ITEMS,
729            CIM.UPG_ORIG_SYSTEM_REF,
730            CIM.UPG_ORIG_SYSTEM_REF_ID,
731            CIM.PRICED_ITEM_YN,
732            CIM.CREATED_BY,
733            CIM.CREATION_DATE,
734            CIM.LAST_UPDATED_BY,
735            CIM.LAST_UPDATE_DATE,
736            CIM.LAST_UPDATE_LOGIN
737     FROM okc_k_items_v cim
738     WHERE cim.dnz_chr_id = p_dnz_chr_id
739     AND cim.cle_id = p_cle_id;
740     l_okc_cimv_pk              okc_cimv_pk_csr%ROWTYPE;
741     x_return_status            VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
742   BEGIN
743     OPEN okc_cimv_pk_csr(p_cle_id,
744                          p_dnz_chr_id);
745     FETCH okc_cimv_pk_csr INTO
746               x_cimv_rec.ID,
747               x_cimv_rec.OBJECT_VERSION_NUMBER,
748               x_cimv_rec.CLE_ID,
749               x_cimv_rec.CHR_ID,
750               x_cimv_rec.CLE_ID_FOR,
751               x_cimv_rec.DNZ_CHR_ID,
752               x_cimv_rec.OBJECT1_ID1,
753               x_cimv_rec.OBJECT1_ID2,
754               x_cimv_rec.JTOT_OBJECT1_CODE,
755               x_cimv_rec.UOM_CODE,
756               x_cimv_rec.EXCEPTION_YN,
757               x_cimv_rec.NUMBER_OF_ITEMS,
758               x_cimv_rec.UPG_ORIG_SYSTEM_REF,
759               x_cimv_rec.UPG_ORIG_SYSTEM_REF_ID,
760               x_cimv_rec.PRICED_ITEM_YN,
761               x_cimv_rec.CREATED_BY,
762               x_cimv_rec.CREATION_DATE,
763               x_cimv_rec.LAST_UPDATED_BY,
764               x_cimv_rec.LAST_UPDATE_DATE,
765               x_cimv_rec.LAST_UPDATE_LOGIN;
766     IF okc_cimv_pk_csr%NOTFOUND THEN
767        x_return_status := OKL_API.G_RET_STS_ERROR;
768     END IF;
769     IF (okc_cimv_pk_csr%ROWCOUNT > 1) THEN
770        x_return_status := OKL_API.G_RET_STS_ERROR;
771     END IF;
772     CLOSE okc_cimv_pk_csr;
773     RETURN(x_return_status);
774   EXCEPTION
775     WHEN OTHERS THEN
776       -- store SQL error message on message stack for caller
777       OKL_API.set_message(
778               G_APP_NAME,
779               G_UNEXPECTED_ERROR,
780               G_SQLCODE_TOKEN,
781               SQLCODE,
782               G_SQLERRM_TOKEN,
783               SQLERRM);
784      -- notify caller of an UNEXPECTED error
785      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
786      -- if the cursor is open
787      IF okc_cimv_pk_csr%ISOPEN THEN
788         CLOSE okc_cimv_pk_csr;
789      END IF;
790      RETURN(x_return_status);
791   END get_rec_cimv;
792 --Bug# 4631549 : validate_release_date to be called from validate_release_contract
793 ------------------------------------------------------------------------------
794   --Start of comments
795   --
796   --Procedure Name        : validate_release_date
797   --Purpose               : Check if Release Contract Start Date
798   --                        falls within the current open FA period
799   --                        - used internally
800   --Modification History  :
801   --08-Jul-2004    rpillay   Created
802 ------------------------------------------------------------------------------
803 PROCEDURE  validate_release_date
804                  (p_api_version     IN  NUMBER,
805                   p_init_msg_list   IN  VARCHAR2,
806                   x_return_status   OUT NOCOPY VARCHAR2,
807                   x_msg_count       OUT NOCOPY NUMBER,
808                   x_msg_data        OUT NOCOPY VARCHAR2,
809                   p_book_type_code  IN  VARCHAR2,
810                   p_release_date    IN  DATE) IS
811 
812   l_return_status     VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
813   l_api_name          CONSTANT VARCHAR2(30) := 'validate_release_date';
814   l_api_version     CONSTANT NUMBER     := 1.0;
815 
816   CURSOR open_period_cur(p_book_type_code IN VARCHAR2) IS
817   select period_name,
818          calendar_period_open_date,
819          calendar_period_close_date
820   from fa_deprn_periods
821   where book_type_code = p_book_type_code
822   and period_close_date is null;
823 
824   open_period_rec          open_period_cur%rowtype;
825   l_current_open_period    varchar2(240) default null;
826 
827   l_icx_date_format        varchar2(240);
828 BEGIN
829 
830    open open_period_cur(p_book_type_code);
831    fetch open_period_cur into open_period_rec;
832    close open_period_cur;
833 
834    IF NOT ( p_release_date BETWEEN open_period_rec.calendar_period_open_date AND
835             open_period_rec.calendar_period_close_date ) THEN
836 
837      l_icx_date_format := nvl(fnd_profile.value('ICX_DATE_FORMAT_MASK'),'DD-MON-RRRR');
838 
839      l_current_open_period := open_period_rec.period_name||' ('||
840                   to_char(open_period_rec.calendar_period_open_date,l_icx_date_format)
841                   ||' - '||to_char(open_period_rec.calendar_period_close_date,l_icx_date_format)||')';
842      OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
843                          p_msg_name     => 'OKL_LLA_RELEASE_DATE_INVALID',
844                          p_token1       => 'BOOK_TYPE_CODE',
845                          p_token1_value => p_book_type_code,
846                          p_token2       => 'OPEN_PERIOD',
847                          p_token2_value => l_current_open_period
848                                  );
849      RAISE OKL_API.G_EXCEPTION_ERROR;
850    END IF;
851 
852 EXCEPTION
853   WHEN OKL_API.G_EXCEPTION_ERROR Then
854     x_return_status := OKL_API.G_RET_STS_ERROR;
855 
856   WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
857     x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
858 
859   WHEN OTHERS THEN
860     x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
861 
862 END validate_release_date;
863 
864 ----------------------------------------------------------------------------
865 -- Start of Commnets
866 -- Badrinath Kuchibholta
867 -- Procedure Name       : l_update_contract_header
868 -- Description          : Update Contract Header
869 -- Business Rules       :
870 -- Parameters           :
871 -- Version              :
872 -- End of Commnets
873   PROCEDURE l_update_contract_header(p_api_version        IN  NUMBER,
874                                       p_init_msg_list     IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
875                                       x_return_status     OUT NOCOPY VARCHAR2,
876                                       x_msg_count         OUT NOCOPY NUMBER,
877                                       x_msg_data          OUT NOCOPY VARCHAR2,
878                                       p_restricted_update IN  VARCHAR2 DEFAULT 'F',
879                                       p_chrv_rec          IN  chrv_rec_type,
880                                       p_khrv_rec          IN  khrv_rec_type,
881                                       x_chrv_rec          OUT NOCOPY chrv_rec_type,
882                                       x_khrv_rec          OUT NOCOPY khrv_rec_type) IS
883     l_api_name      CONSTANT VARCHAR2(30) := 'L_UPDATE_CONTRACT_HEADER';
884 
885      -- Added below for bug 5769216 - Start
886       -- Cursor to get top line id
887       Cursor top_cle_csr (p_chr_id IN NUMBER) is
888       SELECT cle.id
889       From   okc_k_lines_b cle,
890              okc_statuses_b sts
891       where  cle.dnz_chr_id = cle.chr_id
892       and    cle.chr_id     = p_chr_id
893       and    sts.code = cle.sts_code;
894 
895 
896       l_top_cle_id OKC_K_LINES_B.ID%TYPE;
897       l_chr_id OKC_K_HEADERS_B.ID%TYPE;
898       l_cle_id           OKC_K_LINES_B.ID%TYPE;
899       l_cle_start_date   OKC_K_LINES_B.START_DATE%TYPE;
900       l_cle_end_date     OKC_K_LINES_B.END_DATE%TYPE;
901       l_clev_rec          OKL_OKC_MIGRATION_PVT.clev_rec_type;
902       lx_clev_rec         OKL_OKC_MIGRATION_PVT.clev_rec_type;
903       l_parent_cle_id    OKC_K_LINES_B.orig_system_id1%TYPE;
904 
905        --Cursor to check if lease chr has lines to change effectivity
906 
907        Cursor  cle_csr(p_cle_id IN NUMBER) is
908        SELECT  cle.id,
909                cle.start_date,
910                cle.end_date
911        From    okc_k_lines_b cle
912        connect by prior cle.id = cle.cle_id
913        start with cle.id = p_cle_id
914        and exists (select 1
915                    from okc_statuses_b sts
916                    where sts.code = cle.sts_code);
917       -- bug 5769216 - End
918 
919   BEGIN
920     x_return_status      := OKL_API.G_RET_STS_SUCCESS;
921     -- Call start_activity to create savepoint, check compatibility
922     -- and initialize message list
923     x_return_status := OKL_API.START_ACTIVITY (
924                                l_api_name
925                                ,p_init_msg_list
926                                ,'_PVT'
927                                ,x_return_status);
928     -- Check if activity started successfully
929     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
930        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
931     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
932        RAISE OKL_API.G_EXCEPTION_ERROR;
933     END IF;
934 
935     -- Bug 5769216 -- Start
936        Open top_cle_csr(p_chr_id => p_chrv_rec.id);
937          Loop
938              Fetch top_cle_csr into l_top_cle_id;
939              Exit when top_cle_csr%NOTFOUND;
940              Open cle_csr (p_cle_id => l_top_cle_id);
941              Loop
942                  Fetch Cle_Csr into l_cle_id,
943                                     l_cle_start_date,
944                                     l_cle_end_date;
945                  Exit When Cle_Csr%NOTFOUND;
946 
947                  l_clev_rec.id         := l_cle_id;
948                  l_clev_rec.start_date := p_khrv_rec.date_deal_transferred;
949 
950                  okl_okc_migration_pvt.update_contract_line(
951                       p_api_version        => p_api_version,
952                       p_init_msg_list        => p_init_msg_list,
953                       x_return_status         => x_return_status,
954                       x_msg_count             => x_msg_count,
955                       x_msg_data              => x_msg_data,
956                       p_clev_rec                => l_clev_rec,
957                       x_clev_rec                => lx_clev_rec);
958                   -- check return status
959                   IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
960                          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
961                   ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
962                          RAISE OKL_API.G_EXCEPTION_ERROR;
963                   END IF;
964               End Loop;
965               Close Cle_Csr;
966            End Loop;
967        Close top_cle_csr;
968      -- Bug 5769216 - End
969 
970     OKL_OKC_MIGRATION_PVT.update_contract_header(
971        p_api_version        => p_api_version,
972        p_init_msg_list      => p_init_msg_list,
973        x_return_status      => x_return_status,
974        x_msg_count          => x_msg_count,
975        x_msg_data           => x_msg_data,
976        p_restricted_update  => p_restricted_update,
977        p_chrv_rec           => p_chrv_rec,
978        x_chrv_rec           => x_chrv_rec);
979 
980     -- check return status
981     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
982 	  raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
983     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
984 	  raise OKL_API.G_EXCEPTION_ERROR;
985     End If;
986 
987     OKL_KHR_PVT.Update_Row(
988        p_api_version   => p_api_version,
989        p_init_msg_list => p_init_msg_list,
990        x_return_status => x_return_status,
991        x_msg_count     => x_msg_count,
992        x_msg_data      => x_msg_data,
993        p_khrv_rec      => p_khrv_rec,
994        x_khrv_rec      => x_khrv_rec);
995 
996     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
997 	  raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
998     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
999 	  raise OKL_API.G_EXCEPTION_ERROR;
1000     End If;
1001 
1002     OKL_API.END_ACTIVITY (x_msg_count,
1003                           x_msg_data );
1004   EXCEPTION
1005     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1006     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1007                                l_api_name,
1008                                G_PKG_NAME,
1009                                'OKL_API.G_RET_STS_ERROR',
1010                                x_msg_count,
1011                                x_msg_data,
1012                                '_PVT');
1013     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1014     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1015                               l_api_name,
1016                               G_PKG_NAME,
1017                               'OKL_API.G_RET_STS_UNEXP_ERROR',
1018                               x_msg_count,
1019                               x_msg_data,
1020                               '_PVT');
1021     WHEN OTHERS THEN
1022     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1023                               l_api_name,
1024                               G_PKG_NAME,
1025                               'OTHERS',
1026                               x_msg_count,
1027                               x_msg_data,
1028                               '_PVT');
1029   END l_update_contract_header;
1030 -------------------------------------------------------------------------------------------------
1031 -- Start of Commnets
1032 -- Badrinath Kuchibholta
1033 -- Procedure Name       : l_copy_contract
1034 -- Description          : Copy of the contract
1035 -- Business Rules       :
1036 -- Parameters           :
1037 -- Version              :
1038 -- End of Commnets
1039   PROCEDURE l_copy_contract(p_api_version               IN  NUMBER,
1040                             p_init_msg_list             IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
1041                             x_return_status             OUT NOCOPY VARCHAR2,
1042                             x_msg_count                 OUT NOCOPY NUMBER,
1043                             x_msg_data                  OUT NOCOPY VARCHAR2,
1044                             p_commit        	        IN  VARCHAR2 DEFAULT 'F',
1045                             p_old_chr_id                IN  NUMBER,
1046                             p_new_contract_number       IN  VARCHAR2,
1047                             p_release_date              IN  DATE,
1048                             p_term_duration             IN NUMBER,
1049                             x_new_chrv_rec              OUT NOCOPY chrv_rec_type,
1050                             x_new_khrv_rec              OUT NOCOPY khrv_rec_type) IS
1051     l_api_name      CONSTANT VARCHAR2(30) := 'LOCAL_COPY_CONTRACT';
1052     l_chrv_rec               chrv_rec_type;
1053     l_khrv_rec               khrv_rec_type;
1054     ln_new_chr_id            OKC_K_HEADERS_V.ID%TYPE;
1055     ln_new_cle_id            OKC_K_LINES_V.ID%TYPE;
1056     lt_klev_tbl_type         klev_tbl_type;
1057     ltx_klev_tbl_type        klev_tbl_type;
1058     i                        number := 0;
1059 
1060     CURSOR c_get_old_k_top_line(p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE) IS
1061     SELECT cle.id top_line
1062     FROM okc_subclass_top_line stl,
1063          okc_line_styles_b lse,
1064          okc_k_lines_b cle
1065     WHERE cle.dnz_chr_id = p_dnz_chr_id
1066     AND cle.lse_id = lse.id
1067     AND lse.lty_code = G_FIN_LINE_LTY_CODE
1068     AND lse.lse_parent_id is null
1069     AND lse.lse_type = G_TLS_TYPE
1070     AND lse.id = stl.lse_Id
1071     AND stl.scs_code = 'LEASE';
1072 
1073     CURSOR larles_csr(p_chr_id IN NUMBER) IS
1074     select rul.id rul_id,
1075            rgp.id rgp_id,
1076            rul.rule_information1
1077     from okc_rule_groups_b rgp,
1078          okc_rules_b rul
1079     where rgp.id = rul.rgp_id
1080     and rgp.rgd_code = 'LARLES'
1081     and rul.rule_information_category = 'LARLES'
1082     and rgp.dnz_chr_id = p_chr_id
1083     and rgp.chr_id = p_chr_id
1084     and rul.dnz_chr_id = p_chr_id;
1085 
1086     larles_rec         larles_csr%ROWTYPE;
1087     lp_larles_rgpv_rec OKL_OKC_MIGRATION_PVT.rgpv_rec_type;
1088     lx_larles_rgpv_rec OKL_OKC_MIGRATION_PVT.rgpv_rec_type;
1089     lp_larles_rulv_rec Okl_Rule_Pub.rulv_rec_type;
1090     lx_larles_rulv_rec Okl_Rule_Pub.rulv_rec_type;
1091 
1092   BEGIN
1093     x_return_status      := OKL_API.G_RET_STS_SUCCESS;
1094     -- Call start_activity to create savepoint, check compatibility
1095     -- and initialize message list
1096     x_return_status := OKL_API.START_ACTIVITY (
1097                                l_api_name
1098                                ,p_init_msg_list
1099                                ,'_PVT'
1100                                ,x_return_status);
1101     -- Check if activity started successfully
1102     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1103        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1104     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1105        RAISE OKL_API.G_EXCEPTION_ERROR;
1106     END IF;
1107     -- TO copy the Copy the contract first
1108     OKL_COPY_CONTRACT_PUB.copy_lease_contract_new(
1109                           p_api_version              => p_api_version,
1110                           p_init_msg_list            => p_init_msg_list,
1111                           x_return_status            => x_return_status,
1112                           x_msg_count                => x_msg_count,
1113                           x_msg_data                 => x_msg_data,
1114                           p_commit                   => OKL_API.G_FALSE,
1115                           p_chr_id                   => p_old_chr_id,
1116                           p_contract_number          => p_new_contract_number,
1117                           p_contract_number_modifier => null,
1118                           p_to_template_yn           => 'N',
1119                           p_renew_ref_yn             => 'N',
1120                           p_copy_lines_yn            => 'Y',
1121                           p_override_org             => 'N',
1122                           p_trans_type               => 'CRL',
1123                           x_chr_id                   => ln_new_chr_id);
1124     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1125        OKL_API.set_message(p_app_name => G_APP_NAME,
1126                            p_msg_name => G_COPY_HEADER);
1127       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1128     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1129        OKL_API.set_message(p_app_name => G_APP_NAME,
1130                            p_msg_name => G_COPY_HEADER);
1131       RAISE OKL_API.G_EXCEPTION_ERROR;
1132     END IF;
1133 
1134     okc_context.set_okc_org_context(p_chr_id => ln_new_chr_id);
1135 
1136     -- Update Contract Header Start Date to Release Date
1137     -- Update Term Duration to new contract duration
1138     l_chrv_rec.id          := ln_new_chr_id;
1139     l_chrv_rec.start_date  := p_release_date;
1140     l_chrv_rec.orig_system_source_code := 'OKL_RELEASE';
1141 
1142     l_khrv_rec.id          := ln_new_chr_id;
1143     l_khrv_rec.term_duration := p_term_duration;
1144     l_khrv_rec.date_deal_transferred := p_release_date;
1145 
1146     l_update_contract_header(p_api_version        => p_api_version,
1147                              p_init_msg_list      => p_init_msg_list,
1148                              x_return_status      => x_return_status,
1149                              x_msg_count          => x_msg_count,
1150                              x_msg_data           => x_msg_data,
1151                              p_restricted_update  => OKL_API.G_FALSE,
1152                              p_chrv_rec           => l_chrv_rec,
1153                              p_khrv_rec           => l_khrv_rec,
1154                              x_chrv_rec           => x_new_chrv_rec,
1155                              x_khrv_rec           => x_new_khrv_rec);
1156     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1157       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1158     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1159       RAISE OKL_API.G_EXCEPTION_ERROR;
1160     END IF;
1161 
1162     -- Set Re-lease Asset flag to 'Y'
1163     open larles_csr(p_chr_id => x_new_chrv_rec.id);
1164     fetch larles_csr into larles_rec;
1165     if larles_csr%NOTFOUND then
1166 
1167       lp_larles_rgpv_rec.id := null;
1168       lp_larles_rgpv_rec.rgd_code := 'LARLES';
1169       lp_larles_rgpv_rec.dnz_chr_id := x_new_chrv_rec.id;
1170       lp_larles_rgpv_rec.chr_id := x_new_chrv_rec.id;
1171       lp_larles_rgpv_rec.rgp_type := 'KRG';
1172 
1173       OKL_RULE_PUB.create_rule_group(
1174         p_api_version    => p_api_version,
1175         p_init_msg_list  => p_init_msg_list,
1176         x_return_status  => x_return_status,
1177         x_msg_count      => x_msg_count,
1178         x_msg_data       => x_msg_data,
1179         p_rgpv_rec       => lp_larles_rgpv_rec,
1180         x_rgpv_rec       => lx_larles_rgpv_rec);
1181 
1182       If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
1183          raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1184       Elsif (x_return_status = OKL_API.G_RET_STS_ERROR) then
1185          raise OKL_API.G_EXCEPTION_ERROR;
1186       End If;
1187 
1188       lp_larles_rulv_rec.id := null;
1189       lp_larles_rulv_rec.rgp_id := lx_larles_rgpv_rec.id;
1190       lp_larles_rulv_rec.rule_information_category := 'LARLES';
1191       lp_larles_rulv_rec.dnz_chr_id := x_new_chrv_rec.id;
1192       lp_larles_rulv_rec.rule_information1 := 'Y';
1193       lp_larles_rulv_rec.WARN_YN := 'N';
1194       lp_larles_rulv_rec.STD_TEMPLATE_YN := 'N';
1195 
1196       OKL_RULE_PUB.create_rule(
1197         p_api_version    => p_api_version,
1198         p_init_msg_list  => p_init_msg_list,
1199         x_return_status  => x_return_status,
1200         x_msg_count      => x_msg_count,
1201         x_msg_data       => x_msg_data,
1202         p_rulv_rec       => lp_larles_rulv_rec,
1203         x_rulv_rec       => lx_larles_rulv_rec);
1204 
1205       If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
1206          raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1207       Elsif (x_return_status = OKL_API.G_RET_STS_ERROR) then
1208          raise OKL_API.G_EXCEPTION_ERROR;
1209       End If;
1210 
1211     else
1212       if larles_rec.rule_information1 <> 'Y' then
1213 
1214         lp_larles_rulv_rec.id := larles_rec.rul_id;
1215         lp_larles_rulv_rec.rgp_id := larles_rec.rgp_id;
1216         lp_larles_rulv_rec.rule_information_category := 'LARLES';
1217         lp_larles_rulv_rec.dnz_chr_id := x_new_chrv_rec.id;
1218         lp_larles_rulv_rec.rule_information1 := 'Y';
1219         lp_larles_rulv_rec.WARN_YN := 'N';
1220         lp_larles_rulv_rec.STD_TEMPLATE_YN := 'N';
1221 
1222         OKL_RULE_PUB.update_rule(
1223           p_api_version    => p_api_version,
1224           p_init_msg_list  => p_init_msg_list,
1225           x_return_status  => x_return_status,
1226           x_msg_count      => x_msg_count,
1227           x_msg_data       => x_msg_data,
1228           p_rulv_rec       => lp_larles_rulv_rec,
1229           x_rulv_rec       => lx_larles_rulv_rec);
1230 
1231         If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
1232           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1233         Elsif (x_return_status = OKL_API.G_RET_STS_ERROR) then
1234           raise OKL_API.G_EXCEPTION_ERROR;
1235         End If;
1236       end if;
1237     end if;
1238 
1239     OKL_API.END_ACTIVITY (x_msg_count,
1240                           x_msg_data );
1241   EXCEPTION
1242     WHEN OKL_API.G_EXCEPTION_ERROR THEN
1243     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1244                                l_api_name,
1245                                G_PKG_NAME,
1246                                'OKL_API.G_RET_STS_ERROR',
1247                                x_msg_count,
1248                                x_msg_data,
1249                                '_PVT');
1250     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1251     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1252                               l_api_name,
1253                               G_PKG_NAME,
1254                               'OKL_API.G_RET_STS_UNEXP_ERROR',
1255                               x_msg_count,
1256                               x_msg_data,
1257                               '_PVT');
1258     WHEN OTHERS THEN
1259     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
1260                               l_api_name,
1261                               G_PKG_NAME,
1262                               'OTHERS',
1263                               x_msg_count,
1264                               x_msg_data,
1265                               '_PVT');
1266   END l_copy_contract;
1267 -----------------------------------------------------------------------------------------------------------------------
1268   FUNCTION get_k_tls_asset(p_dnz_chr_id    IN  OKC_K_LINES_B.DNZ_CHR_ID%TYPE DEFAULT OKL_API.G_MISS_NUM,
1269                            x_top_line_tbl  OUT NOCOPY g_top_line_tbl,
1270                            x_asset_num_tbl OUT NOCOPY g_asset_num_tbl)
1271   RETURN VARCHAR2 IS
1272     x_return_status            VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
1273     i                          NUMBER := 0;
1274     j                          NUMBER := 0;
1275 
1276     CURSOR c_get_old_k_top_line(p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE) IS
1277     SELECT cle.id top_line
1278     FROM okc_subclass_top_line stl,
1279          okc_line_styles_b lse,
1280          okc_k_lines_b cle
1281     WHERE cle.dnz_chr_id = p_dnz_chr_id
1282     AND cle.lse_id = lse.id
1283     AND lse.lty_code = G_FIN_LINE_LTY_CODE
1284     AND lse.lse_parent_id is null
1285     AND lse.lse_type = G_TLS_TYPE
1286     AND lse.id = stl.lse_Id
1287     AND stl.scs_code = 'LEASE';
1288 
1289     CURSOR c_get_old_k_asset(p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE) IS
1290     SELECT av.asset_number asset_number
1291     FROM okc_subclass_top_line stl,
1292          okc_line_styles_b lse2,
1293          okc_line_styles_b lse1,
1294          okx_assets_v av,
1295          okc_k_items cim,
1296          okc_k_lines_b cle
1297     WHERE cle.dnz_chr_id = p_dnz_chr_id
1298     AND cle.id = cim.cle_id
1299     AND cim.dnz_chr_id = cle.dnz_chr_id
1300     AND cim.object1_id1 = av.id1
1301     AND cim.object1_id2 = av.id2
1302     AND cle.lse_id = lse1.id
1303     AND lse1.lty_code = G_FA_LINE_LTY_CODE
1304     AND lse1.lse_type = G_SLS_TYPE
1305     AND lse1.lse_parent_id = lse2.id
1306     AND lse2.lty_code = G_FIN_LINE_LTY_CODE
1307     AND lse2.id = stl.lse_Id
1308     AND stl.scs_code = 'LEASE';
1309 
1310   BEGIN
1311    --  Getting the TOP Line STS CODE
1312    IF (p_dnz_chr_id IS NOT NULL OR
1313       p_dnz_chr_id <> OKL_API.G_MISS_NUM) THEN
1314       -- Getting the all the top lines
1315       FOR r_get_old_k_top_line IN c_get_old_k_top_line(p_dnz_chr_id) LOOP
1316         x_top_line_tbl(i) := r_get_old_k_top_line.top_line;
1317         IF c_get_old_k_top_line%NOTFOUND THEN
1318            -- store SQL error message on message stack
1319            OKL_API.set_message(p_app_name     => G_APP_NAME,
1320                                p_msg_name     => G_NO_MATCHING_RECORD,
1321                                p_token1       => G_COL_NAME_TOKEN,
1322                                p_token1_value => 'dnz_chr_id');
1323            x_return_status := OKL_API.G_RET_STS_ERROR;
1324            EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
1325         END IF;
1326         i := i + 1;
1327       END LOOP;
1328       IF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1329          RAISE G_EXCEPTION_HALT_VALIDATION;
1330       END IF;
1331       -- Getting the all the asset number
1332       FOR r_get_old_k_asset IN c_get_old_k_asset(p_dnz_chr_id) LOOP
1333         x_asset_num_tbl(j) := r_get_old_k_asset.asset_number;
1334         IF c_get_old_k_asset%NOTFOUND THEN
1335          -- store SQL error message on message stack
1336          OKL_API.set_message(p_app_name     => G_APP_NAME,
1337                              p_msg_name     => G_NO_MATCHING_RECORD,
1338                              p_token1       => G_COL_NAME_TOKEN,
1339                              p_token1_value => 'Asset Number');
1340            x_return_status := OKL_API.G_RET_STS_ERROR;
1341            EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
1342         END IF;
1343         j := j + 1;
1344       END LOOP;
1345       IF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1346          RAISE G_EXCEPTION_HALT_VALIDATION;
1347       END IF;
1348       -- Check we got any record
1349       IF x_top_line_tbl.count = 0 THEN
1350          -- store SQL error message on message stack
1351          OKL_API.set_message(p_app_name     => G_APP_NAME,
1352                              p_msg_name     => G_NO_MATCHING_RECORD,
1353                              p_token1       => G_COL_NAME_TOKEN,
1354                              p_token1_value => 'Top Line id');
1355          RAISE G_EXCEPTION_HALT_VALIDATION;
1356       END IF;
1357       IF x_asset_num_tbl.count = 0 THEN
1358          -- store SQL error message on message stack
1359          OKL_API.set_message(p_app_name     => G_APP_NAME,
1360                              p_msg_name     => G_NO_MATCHING_RECORD,
1361                              p_token1       => G_COL_NAME_TOKEN,
1362                              p_token1_value => 'Asset Number');
1363          RAISE G_EXCEPTION_HALT_VALIDATION;
1364       END IF;
1365    ELSE
1366       -- store SQL error message on message stack
1367       -- Notify Error
1368       OKL_API.set_message(p_app_name     => G_APP_NAME,
1369                           p_msg_name     => G_REQUIRED_VALUE,
1370                           p_token1       => G_COL_NAME_TOKEN,
1371                           p_token1_value => 'Dnz_chr_id');
1372       RAISE G_EXCEPTION_STOP_VALIDATION;
1373    END IF;
1374    RETURN x_return_status;
1375   EXCEPTION
1376     WHEN G_EXCEPTION_HALT_VALIDATION then
1377       -- We are here b'cause we have no parent record
1378       -- If the cursor is open then it has to be closed
1379      IF c_get_old_k_top_line%ISOPEN THEN
1380         CLOSE c_get_old_k_top_line;
1381      END IF;
1382      -- if the cursor is open
1383      IF c_get_old_k_asset%ISOPEN THEN
1384         CLOSE c_get_old_k_asset;
1385      END IF;
1386      -- notify caller of an error
1387      x_return_status := OKL_API.G_RET_STS_ERROR;
1388      RETURN(x_return_status);
1389     WHEN OTHERS THEN
1390       -- store SQL error message on message stack for caller
1391       OKL_API.set_message(
1392               G_APP_NAME,
1393               G_UNEXPECTED_ERROR,
1394               G_SQLCODE_TOKEN,
1395               SQLCODE,
1396               G_SQLERRM_TOKEN,
1397               SQLERRM);
1398      -- notify caller of an UNEXPECTED error
1399      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1400      IF c_get_old_k_top_line%ISOPEN THEN
1401         CLOSE c_get_old_k_top_line;
1402      END IF;
1403      -- if the cursor is open
1404      IF c_get_old_k_asset%ISOPEN THEN
1405         CLOSE c_get_old_k_asset;
1406      END IF;
1407      RETURN(x_return_status);
1408  END get_k_tls_asset;
1409 -----------------------------------------------------------------------------------------------
1410 -- Start of Commnets
1411 -- Badrinath Kuchibholta
1412 -- Procedure Name       : Validate_offlease_asset
1413 -- Description          : validation with OKX_ASSET_LINES_V and OKL_ASSET_RETURNS_V
1414 -- Business Rules       : We first need to get the parent line id and
1415 --                        Asset number of the old contract number.
1416 --                        And Now the check the top_line_id present in OKL_ASSET_RETURNS_V
1417 --                        which significe that the asset are off lease and ready for release
1418 --
1419 --                        Again we now check Asset number against OKX_ASSET_LINES_V to make sure
1420 --                        asset number are not in lease with any other conract by looking for
1421 --                        status of that line as TERMINATED , EXPIRED etc....
1422 -- Parameters           : 1.P_dnz_chr_id Old Contract id
1423 -- Version              : 1.0
1424 -- End of Commnets
1425   FUNCTION validate_assets_offlease(p_dnz_chr_id    IN  OKC_K_LINES_B.DNZ_CHR_ID%TYPE)
1426   RETURN VARCHAR2 IS
1427     lt_top_line_tbl            g_top_line_tbl;
1428     lt_asset_num_tbl           g_asset_num_tbl;
1429     i                          NUMBER := 0;
1430     j                          NUMBER := 0;
1431     ln_top_present             NUMBER := 0;
1432     ln_asset_present           NUMBER := 0;
1433     x_return_status            VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
1434     CURSOR c_validate_top_line(p_cle_id    OKC_K_LINES_V.ID%TYPE) IS
1435     SELECT 1
1436     FROM DUAL
1437     WHERE EXISTS (SELECT '1'
1438                   FROM OKL_ASSET_RETURNS_B
1439                   WHERE kle_id = p_cle_id
1440                   AND ars_code = 'RE_LEASE');
1441 
1442     CURSOR c_validate_asset_number(p_asset_number   OKL_TXL_ASSETS_B.ASSET_NUMBER%TYPE)
1443     IS
1444     SELECT 1
1445     FROM dual
1446     WHERE EXISTS (SELECT '1'
1447                   FROM okx_asset_lines_v
1448                   WHERE asset_number = p_asset_number
1449                   AND line_status not in ('EXPIRED','TERMINATED','ABANDONED'));
1450 
1451   BEGIN
1452     -- data is required
1453     IF (p_dnz_chr_id = OKL_API.G_MISS_NUM) OR
1454        (p_dnz_chr_id IS NULL) THEN
1455        -- halt validation
1456        RAISE G_EXCEPTION_HALT_VALIDATION;
1457     END IF;
1458     x_return_status := get_k_tls_asset(p_dnz_chr_id    => p_dnz_chr_id,
1459                                        x_top_line_tbl  => lt_top_line_tbl,
1460                                        x_asset_num_tbl => lt_asset_num_tbl);
1461     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1462        RAISE G_EXCEPTION_HALT_VALIDATION;
1463     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1464        RAISE G_EXCEPTION_HALT_VALIDATION;
1465     END IF;
1466     IF (lt_top_line_tbl.COUNT > 0) THEN
1467       i := lt_top_line_tbl.FIRST;
1468       LOOP
1469         OPEN  c_validate_top_line(lt_top_line_tbl(i));
1470         IF c_validate_top_line%NOTFOUND THEN
1471           OKL_API.set_message(p_app_name     => G_APP_NAME,
1472                               p_msg_name     => G_NO_MATCHING_RECORD,
1473                               p_token1       => G_COL_NAME_TOKEN,
1474                               p_token1_value => 'Top Line for Contract Number');
1475            x_return_status := OKL_API.G_RET_STS_ERROR;
1476            EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
1477         END IF;
1478         FETCH c_validate_top_line INTO ln_top_present;
1479         CLOSE c_validate_top_line;
1480         EXIT WHEN (ln_top_present = null);
1481         EXIT WHEN (i = lt_top_line_tbl.LAST);
1482         i := lt_top_line_tbl.NEXT(i);
1483       END LOOP;
1484     END IF;
1485     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1486        RAISE G_EXCEPTION_HALT_VALIDATION;
1487     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1488        RAISE G_EXCEPTION_HALT_VALIDATION;
1489     END IF;
1490 
1491     IF (lt_asset_num_tbl.COUNT > 0) THEN
1492       j := lt_asset_num_tbl.FIRST;
1493       LOOP
1494         OPEN  c_validate_asset_number(lt_asset_num_tbl(j));
1495         IF c_validate_asset_number%NOTFOUND THEN
1496           OKL_API.set_message(p_app_name     => G_APP_NAME,
1497                               p_msg_name     => G_NO_MATCHING_RECORD,
1498                               p_token1       => G_COL_NAME_TOKEN,
1499                               p_token1_value => 'Asset Number');
1500            x_return_status := OKL_API.G_RET_STS_ERROR;
1501            EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
1502         END IF;
1503         FETCH c_validate_asset_number INTO ln_asset_present;
1504         CLOSE c_validate_asset_number;
1505         EXIT WHEN (ln_asset_present <> null);
1506         EXIT WHEN (j = lt_asset_num_tbl.LAST);
1507         j := lt_asset_num_tbl.NEXT(j);
1508       END LOOP;
1509     END IF;
1510     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1511        RAISE G_EXCEPTION_HALT_VALIDATION;
1512     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1513        RAISE G_EXCEPTION_HALT_VALIDATION;
1514     END IF;
1515     IF ln_asset_present IS NOT NULL AND
1516        ln_top_present IS NULL THEN
1517        RAISE G_EXCEPTION_HALT_VALIDATION;
1518     ELSIF ln_asset_present IS NOT NULL OR
1519        ln_top_present IS NULL THEN
1520        RAISE G_EXCEPTION_HALT_VALIDATION;
1521     END IF;
1522     RETURN(x_return_status);
1523   EXCEPTION
1524     WHEN G_EXCEPTION_HALT_VALIDATION then
1525     -- We are here b'cause we have no parent record
1526     -- store SQL error message on message stack
1527     OKL_API.set_message(p_app_name     => G_APP_NAME,
1528                         p_msg_name     => G_NO_MATCHING_RECORD,
1529                         p_token1       => G_COL_NAME_TOKEN,
1530                         p_token1_value => 'Cle_id');
1531     -- If the cursor is open then it has to be closed
1532     IF c_validate_asset_number%ISOPEN THEN
1533        CLOSE c_validate_asset_number;
1534     END IF;
1535     IF c_validate_top_line%ISOPEN THEN
1536        CLOSE c_validate_top_line;
1537     END IF;
1538     -- notify caller of an error
1539     x_return_status := OKL_API.G_RET_STS_ERROR;
1540      RETURN(x_return_status);
1541     WHEN OTHERS THEN
1542       -- store SQL error message on message stack
1543       OKL_API.SET_MESSAGE(p_app_name => G_APP_NAME,
1544                       p_msg_name => G_UNEXPECTED_ERROR,
1545                       p_token1 => G_SQLCODE_TOKEN,
1546                       p_token1_value => SQLCODE,
1547                       p_token2 => G_SQLERRM_TOKEN,
1548                       p_token2_value => SQLERRM);
1549     -- If the cursor is open then it has to be closed
1550     IF c_validate_asset_number%ISOPEN THEN
1551        CLOSE c_validate_asset_number;
1552     END IF;
1553     IF c_validate_top_line%ISOPEN THEN
1554        CLOSE c_validate_top_line;
1555     END IF;
1556     -- notify caller of an error as UNEXPETED error
1557      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1558      RETURN(x_return_status);
1559   END validate_assets_offlease;
1560 
1561   -----------------------------------------------------------------------------------------------
1562 -- Start of Comments
1563 -- Rekha Pillay
1564 -- Procedure Name       : Create_Release_Transaction
1565 -- Description          : Create Re-lease Transaction
1566 -- Business Rules       :
1567 --
1568 --
1569 --
1570 --
1571 --
1572 --
1573 --
1574 -- Parameters           :
1575 -- Version              : 1.0
1576 -- End of Commments
1577   PROCEDURE create_release_transaction
1578                          (p_api_version        IN  NUMBER,
1579                           p_init_msg_list      IN  VARCHAR2,
1580                           x_return_status      OUT NOCOPY VARCHAR2,
1581                           x_msg_count          OUT NOCOPY NUMBER,
1582                           x_msg_data           OUT NOCOPY VARCHAR2,
1583                           p_chr_id             IN  OKC_K_HEADERS_B.ID%TYPE,
1584                           p_new_chr_id         IN  OKC_K_HEADERS_B.ID%TYPE,
1585                           p_reason_code        IN  VARCHAR2,
1586                           p_description        IN  VARCHAR2,
1587                           p_trx_date           IN  DATE,
1588                           p_source_trx_id      IN  NUMBER,
1589                           p_source_trx_type    IN  VARCHAR2,
1590                           x_tcnv_rec           OUT NOCOPY tcnv_rec_type) IS
1591 
1592     l_return_status   VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1593     l_api_name        CONSTANT VARCHAR2(30) := 'CREATE_RELEASE_TRANSACTION';
1594     l_api_version     CONSTANT NUMBER	:= 1.0;
1595 
1596     CURSOR con_header_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
1597     SELECT currency_code,
1598            authoring_org_id
1599     FROM   okc_k_headers_b
1600     WHERE  id = p_chr_id;
1601 
1602     CURSOR try_csr(p_trx_type_name VARCHAR2) IS
1603     SELECT id
1604     FROM   okl_trx_types_tl
1605     WHERE  language = 'US'
1606     AND    name = p_trx_type_name;
1607 
1608     l_dummy         VARCHAR2(1);
1609     l_try_id        NUMBER;
1610     l_tcnv_rec      tcnv_rec_type;
1611     l_out_tcnv_rec  tcnv_rec_type;
1612     l_currency_code okc_k_headers_b.currency_code%TYPE;
1613     l_org_id        okc_k_headers_b.authoring_org_id%TYPE;
1614 
1615     --Added by dpsingh for LE uptake
1616   CURSOR contract_num_csr (p_ctr_id1 NUMBER) IS
1617   SELECT  contract_number
1618   FROM OKC_K_HEADERS_B
1619   WHERE id = p_ctr_id1;
1620 
1621   l_cntrct_number         OKC_K_HEADERS_B.CONTRACT_NUMBER%TYPE;
1622   l_legal_entity_id          NUMBER;
1623 
1624   BEGIN
1625     x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1626     -- Call start_activity to create savepoint, check compatibility
1627     -- and initialize message list
1628     l_return_status := Okl_Api.START_ACTIVITY(
1629 			p_api_name      => l_api_name,
1630 			p_pkg_name      => g_pkg_name,
1631 			p_init_msg_list => p_init_msg_list,
1632 			l_api_version   => l_api_version,
1633 			p_api_version   => p_api_version,
1634 			p_api_type      => '_PVT',
1635 			x_return_status => x_return_status);
1636     -- Check if activity started successfully
1637     IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1638        RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1639     ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1640        RAISE Okl_Api.G_EXCEPTION_ERROR;
1641     END IF;
1642 
1643     -- Validate Re-lease Reason Code
1644     IF p_reason_code NOT IN ('CUSTOMER_CHANGE','PRODUCT_CHANGE') THEN
1645       OKL_API.SET_MESSAGE(G_APP_NAME,
1646                           'OKL_LA_REV_RELCODE');
1647       RAISE OKL_API.G_EXCEPTION_ERROR;
1648     END IF;
1649 
1650     OPEN  con_header_csr(p_chr_id);
1651     FETCH con_header_csr INTO l_currency_code,
1652                               l_org_id;
1653     CLOSE con_header_csr;
1654 
1655     -- Validate Re-lease Transaction Type
1656     OPEN try_csr (p_trx_type_name => 'Release');
1657     FETCH try_csr INTO l_try_id;
1658     IF try_csr%NOTFOUND THEN
1659       CLOSE try_csr;
1660       OKL_API.SET_MESSAGE(G_APP_NAME,
1661                           'OKL_LA_NO_TRY',
1662                           'TRX_TYPE',
1663                           'Release'
1664                          );
1665       RAISE OKL_API.G_EXCEPTION_ERROR;
1666     END IF;
1667     CLOSE try_csr;
1668 
1669     l_tcnv_rec.try_id                    := l_try_id;
1670     l_tcnv_rec.tsu_code                  := 'ENTERED';
1671     l_tcnv_rec.rbr_code                  := p_reason_code;
1672     l_tcnv_rec.description               := p_description;
1673     l_tcnv_rec.tcn_type                  := 'MAE';
1674     l_tcnv_rec.khr_id                    := p_chr_id;
1675     l_tcnv_rec.khr_id_old                := p_chr_id;
1676     l_tcnv_rec.khr_id_new                := p_new_chr_id;
1677     l_tcnv_rec.currency_code             := l_currency_code;
1678     l_tcnv_rec.date_transaction_occurred := p_trx_date;
1679     l_tcnv_rec.org_id                    := l_org_id;
1680 
1681     if (p_source_trx_id is not null and p_source_trx_type is not null )then
1682       l_tcnv_rec.source_trx_id   := p_source_trx_id;
1683       l_tcnv_rec.source_trx_type := p_source_trx_type;
1684     end if;
1685     --Added by dpsingh for LE Uptake
1686     l_legal_entity_id  := OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(p_chr_id) ;
1687     IF  l_legal_entity_id IS NOT NULL THEN
1688        l_tcnv_rec.legal_entity_id :=  l_legal_entity_id;
1689     ELSE
1690         -- get the contract number
1691        OPEN contract_num_csr(p_chr_id);
1692        FETCH contract_num_csr INTO l_cntrct_number;
1693        CLOSE contract_num_csr;
1694 	Okl_Api.set_message(p_app_name     => g_app_name,
1695                              p_msg_name     => 'OKL_LE_NOT_EXIST_CNTRCT',
1696 			     p_token1           =>  'CONTRACT_NUMBER',
1697 			     p_token1_value  =>  l_cntrct_number);
1698          RAISE OKL_API.G_EXCEPTION_ERROR;
1699     END IF;
1700     okl_trx_contracts_pub.create_trx_contracts
1701        (p_api_version    => p_api_version,
1702         p_init_msg_list  => p_init_msg_list,
1703         x_return_status  => x_return_status,
1704         x_msg_count      => x_msg_count,
1705         x_msg_data       => x_msg_data,
1706         p_tcnv_rec       => l_tcnv_rec,
1707         x_tcnv_rec       => l_out_tcnv_rec
1708        );
1709 
1710     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1711       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1712     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1713       RAISE OKL_API.G_EXCEPTION_ERROR;
1714     END IF;
1715 
1716     x_tcnv_rec := l_out_tcnv_rec;
1717 
1718     OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
1719                          x_msg_data    => x_msg_data);
1720 
1721   EXCEPTION
1722       when OKL_API.G_EXCEPTION_ERROR then
1723 
1724        x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1725                         p_api_name  => l_api_name,
1726                         p_pkg_name  => G_PKG_NAME,
1727                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
1728                         x_msg_count => x_msg_count,
1729                         x_msg_data  => x_msg_data,
1730                         p_api_type  => G_API_TYPE);
1731 
1732       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
1733 
1734         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1735                         p_api_name  => l_api_name,
1736                         p_pkg_name  => G_PKG_NAME,
1737                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
1738                         x_msg_count => x_msg_count,
1739                         x_msg_data  => x_msg_data,
1740                         p_api_type  => G_API_TYPE);
1741 
1742       when OTHERS then
1743 
1744         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1745                         p_api_name  => l_api_name,
1746                         p_pkg_name  => G_PKG_NAME,
1747                         p_exc_name  => 'OTHERS',
1748                         x_msg_count => x_msg_count,
1749                         x_msg_data  => x_msg_data,
1750                         p_api_type  => G_API_TYPE);
1751   END create_release_transaction;
1752 
1753   --Bug# 5005869
1754   -----------------------------------------------------------------------------------------------
1755 -- Start of Comments
1756 -- Rekha Pillay
1757 -- Procedure Name       : Validate_Taa_Request_Info
1758 -- Description          : Validations for the information entered in the
1759 --                        Transfer and Assumption Request from Customer Service
1760 --
1761 -- Business Rules       :
1762 --
1763 --
1764 --
1765 --
1766 --
1767 --
1768 --
1769 -- Parameters           :
1770 -- Version              : 1.0
1771 -- End of Commments
1772   PROCEDURE validate_taa_request_info(p_api_version   IN  NUMBER,
1773                                       p_init_msg_list IN  VARCHAR2,
1774                                       x_return_status OUT NOCOPY VARCHAR2,
1775                                       x_msg_count     OUT NOCOPY NUMBER,
1776                                       x_msg_data      OUT NOCOPY VARCHAR2,
1777                                       p_chr_id        IN  NUMBER,
1778                                       p_release_date  IN  DATE,
1779                                       p_source_trx_id IN  NUMBER,
1780                                       p_currency_code IN  VARCHAR2) IS
1781 
1782     l_return_status   VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
1783     l_api_name        CONSTANT VARCHAR2(30) := 'VALIDATE_TAA_REQUEST_INFO';
1784     l_api_version     CONSTANT NUMBER	:= 1.0;
1785 
1786     CURSOR taa_party_info_csr(p_taa_trx_id IN NUMBER) IS
1787     SELECT party_rel_id2_new,
1788            trx_number
1789     FROM okl_trx_contracts
1790     WHERE id = p_taa_trx_id;
1791 
1792     taa_party_info_rec taa_party_info_csr%ROWTYPE;
1793 
1794     CURSOR taa_chr_hdr_dtl_csr(p_taa_trx_id IN NUMBER) IS
1795     SELECT bill_to_site_id,
1796            cust_acct_id,
1797            bank_acct_id,
1798            invoice_format_id,
1799            payment_mthd_id,
1800            mla_id,
1801            credit_line_id,
1802            --Bug# 4191851
1803            insurance_yn,
1804            lease_policy_yn,
1805            ipy_type,
1806            policy_number,
1807            covered_amt,
1808            deductible_amt,
1809            effective_to_date,
1810            effective_from_date,
1811            proof_provided_date,
1812            proof_required_date,
1813            lessor_insured_yn,
1814            lessor_payee_yn,
1815            int_id,
1816            isu_id,
1817            agency_site_id,
1818            agent_site_id,
1819            territory_code
1820     FROM okl_taa_request_details_b
1821     WHERE tcn_id = p_taa_trx_id;
1822 
1823     taa_chr_hdr_dtl_rec taa_chr_hdr_dtl_csr%ROWTYPE;
1824 
1825     CURSOR taa_lines_csr(p_chr_id     IN NUMBER,
1826                         p_taa_trx_id IN NUMBER) IS
1827     SELECT cle.id,
1828            cle.name,
1829            tcl.source_column_1,
1830            tcl.source_value_1,
1831            tcl.source_column_2,
1832            tcl.source_value_2,
1833            tcl.source_column_3,
1834            tcl.source_value_3
1835     FROM okc_k_lines_v cle,
1836          okc_line_styles_b lse,
1837          okl_txl_cntrct_lns tcl
1838     WHERE cle.chr_id = p_chr_id
1839     AND cle.dnz_chr_id = p_chr_id
1840     AND lse.lty_code = 'FREE_FORM1'
1841     AND cle.lse_id = lse.id
1842     AND tcl.tcn_id = p_taa_trx_id
1843     AND tcl.kle_id = cle.id
1844     AND tcl.before_transfer_yn = 'N';
1845 
1846     CURSOR chk_party_csr(p_party_id IN NUMBER) IS
1847     SELECT 'Y'
1848     FROM   hz_parties prt
1849     WHERE  prt.party_id = p_party_id
1850     AND    prt.party_type IN ('PERSON','ORGANIZATION');
1851 
1852     CURSOR chk_cust_acc_csr(p_cust_acc_id IN NUMBER,
1853                             p_party_id IN NUMBER) is
1854     SELECT 'Y'
1855     FROM   hz_cust_accounts cas
1856     WHERE  cas.party_id = p_party_id
1857     AND    cas.cust_account_id = p_cust_acc_id;
1858 
1859     CURSOR chk_bill_to_csr(p_bill_to_site_id IN NUMBER,
1860                            p_cust_acc_id IN NUMBER,
1861                            p_party_id IN NUMBER,
1862                            p_chr_id IN NUMBER) is
1863     SELECT 'Y'
1864     FROM   okx_cust_site_uses_v site_use,
1865            hz_cust_acct_sites_all site,
1866            okc_k_headers_b chr
1867     WHERE  chr.id = p_chr_id
1868     AND    site.cust_acct_site_id   = site_use.cust_acct_site_id
1869     AND    site_use.party_id        = p_party_id
1870     AND    site_use.id1             = p_bill_to_site_id
1871     AND    site_use.cust_account_id = p_cust_acc_id
1872     AND    site_use.site_use_code   = 'BILL_TO'
1873     AND    site_use.b_status        = 'A'
1874     AND    site.status              = 'A'
1875     AND    site_use.org_id          = chr.authoring_org_id
1876     AND    site.org_id              = chr.authoring_org_id;
1877 
1878     CURSOR chk_bank_acc_csr(p_bank_acc_id  IN NUMBER,
1879                             p_bill_to_site_id IN NUMBER,
1880                             p_cust_acc_id IN NUMBER,
1881                             p_chr_id IN NUMBER) is
1882     SELECT 'Y'
1883     FROM   okx_rcpt_method_accounts_v rma,
1884            okc_k_headers_b chr
1885     WHERE  chr.id          = p_chr_id
1886     AND    rma.id1             = p_bank_acc_id
1887     AND    rma.customer_id     = p_cust_acc_id
1888     AND    rma.org_id          = chr.authoring_org_id
1889     AND    TRUNC(SYSDATE) between NVL(rma.start_date_active, TRUNC(SYSDATE))
1890            AND NVL(rma.end_date_active,TRUNC(SYSDATE));
1891 
1892     CURSOR chk_pymt_mthd_csr(p_payment_mthd_id  IN NUMBER,
1893                              p_bill_to_site_id IN NUMBER,
1894                              p_cust_acc_id IN NUMBER) IS
1895     SELECT 'Y'
1896     FROM   okx_receipt_methods_v
1897     WHERE  id1  = p_payment_mthd_id
1898     AND    customer_id  = p_cust_acc_id
1899     AND    site_use_id  = p_bill_to_site_id
1900     AND    TRUNC(SYSDATE) between NVL(start_date_active, TRUNC(SYSDATE))
1901            AND NVL(end_date_active,TRUNC(SYSDATE));
1902 
1903 
1904     CURSOR chk_inv_format_csr(p_invoice_format_id IN NUMBER) IS
1905     SELECT 'Y'
1906     FROM   okl_invoice_formats_v
1907     WHERE  id   = p_invoice_format_id
1908     AND    TRUNC(SYSDATE) between NVL(start_date, TRUNC(SYSDATE))
1909            AND NVL(end_date,TRUNC(SYSDATE));
1910 
1911     CURSOR chk_mla_csr(p_mla_id IN NUMBER) is
1912     SELECT 'Y'
1913     FROM okc_k_headers_b chr
1914     WHERE chr.id = p_mla_id
1915     AND chr.scs_code = 'MASTER_LEASE'
1916     AND chr.sts_code = 'ACTIVE'
1917     AND chr.template_yn = 'N'
1918     AND chr.buy_or_sell = 'S';
1919 
1920     CURSOR chk_credit_line_csr(p_credit_line_id IN NUMBER,
1921                                p_cust_id        IN NUMBER,
1922                                p_cust_acct_id   IN NUMBER,
1923                                p_currency_code  IN VARCHAR2) is
1924     SELECT 'Y'
1925     FROM okl_k_hdr_crdtln_uv crd,
1926          okc_k_headers_b chr
1927     WHERE crd.id = p_credit_line_id
1928     AND chr.id = crd.id
1929     AND crd.end_date >= p_release_date
1930     AND crd.cust_object1_id1 = p_cust_id
1931     AND crd.currency_code = p_currency_code
1932     AND chr.cust_acct_id = p_cust_acct_id;
1933 
1934     CURSOR chk_install_site_csr(p_install_site_id IN NUMBER,
1935                                 p_cust_id        IN NUMBER) is
1936     SELECT 'Y'
1937     FROM   okx_party_site_uses_v
1938     WHERE  id1  = p_install_site_id
1939     AND    site_use_type = 'INSTALL_AT'
1940     AND    party_id      = p_cust_id
1941     AND    status = 'A';
1942 
1943     CURSOR chk_fa_loc_csr(p_location_id IN NUMBER) IS
1944     SELECT 'Y'
1945     FROM   okx_ast_locs_v
1946     WHERE  id1= p_location_id
1947     AND    NVL(enabled_flag,'Y') = 'Y'
1948     AND    TRUNC(SYSDATE) BETWEEN NVL(start_date_active, TRUNC(SYSDATE))
1949            AND NVL(end_date_active, TRUNC(SYSDATE));
1950 
1951     l_found VARCHAR2(1);
1952 
1953   BEGIN
1954     x_return_status := Okl_Api.G_RET_STS_SUCCESS;
1955     -- Call start_activity to create savepoint, check compatibility
1956     -- and initialize message list
1957     l_return_status := Okl_Api.START_ACTIVITY(
1958 			p_api_name      => l_api_name,
1959 			p_pkg_name      => g_pkg_name,
1960 			p_init_msg_list => p_init_msg_list,
1961 			l_api_version   => l_api_version,
1962 			p_api_version   => p_api_version,
1963 			p_api_type      => '_PVT',
1964 			x_return_status => x_return_status);
1965     -- Check if activity started successfully
1966     IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
1967        RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
1968     ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
1969        RAISE Okl_Api.G_EXCEPTION_ERROR;
1970     END IF;
1971 
1972     OPEN taa_party_info_csr(p_taa_trx_id => p_source_trx_id);
1973     FETCH taa_party_info_csr INTO taa_party_info_rec;
1974     CLOSE taa_party_info_csr;
1975 
1976     OPEN taa_chr_hdr_dtl_csr(p_taa_trx_id => p_source_trx_id);
1977     FETCH taa_chr_hdr_dtl_csr INTO taa_chr_hdr_dtl_rec;
1978     CLOSE taa_chr_hdr_dtl_csr;
1979 
1980     -- Validate Lessee
1981     IF (taa_party_info_rec.party_rel_id2_new IS NOT NULL) THEN
1982       l_found := 'N';
1983       OPEN chk_party_csr(p_party_id => taa_party_info_rec.party_rel_id2_new);
1984       FETCH chk_party_csr INTO l_found;
1985       CLOSE chk_party_csr;
1986 
1987       IF l_found = 'N' THEN
1988         OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
1989                             p_msg_name     => 'OKL_LLA_REL_INVALID_CUST',
1990                             p_token1       => 'REQ_NUM',
1991                             p_token1_value => taa_party_info_rec.trx_number);
1992         RAISE OKL_API.G_EXCEPTION_ERROR;
1993       END IF;
1994     END IF;
1995 
1996     -- Validate Customer Account
1997     IF (taa_chr_hdr_dtl_rec.cust_acct_id IS NOT NULL) THEN
1998       l_found := 'N';
1999       OPEN chk_cust_acc_csr(p_party_id    => taa_party_info_rec.party_rel_id2_new,
2000                             p_cust_acc_id => taa_chr_hdr_dtl_rec.cust_acct_id);
2001       FETCH chk_cust_acc_csr INTO l_found;
2002       CLOSE chk_cust_acc_csr;
2003 
2004       IF l_found = 'N' THEN
2005         OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2006                             p_msg_name     => 'OKL_LLA_REL_INVALID_CUST_ACC',
2007                             p_token1       => 'REQ_NUM',
2008                             p_token1_value => taa_party_info_rec.trx_number);
2009         RAISE OKL_API.G_EXCEPTION_ERROR;
2010       END IF;
2011     END IF;
2012 
2013     -- Validate Bill-To-Site
2014     IF (taa_chr_hdr_dtl_rec.bill_to_site_id IS NOT NULL) THEN
2015       l_found := 'N';
2016       OPEN chk_bill_to_csr(p_chr_id => p_chr_id,
2017                            p_bill_to_site_id    => taa_chr_hdr_dtl_rec.bill_to_site_id,
2018                            p_party_id    => taa_party_info_rec.party_rel_id2_new,
2019                            p_cust_acc_id => taa_chr_hdr_dtl_rec.cust_acct_id);
2020       FETCH chk_bill_to_csr INTO l_found;
2021       CLOSE chk_bill_to_csr;
2022 
2023       IF l_found = 'N' THEN
2024         OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2025                             p_msg_name     => 'OKL_LLA_REL_INVALID_BILL_TO',
2026                             p_token1       => 'REQ_NUM',
2027                             p_token1_value => taa_party_info_rec.trx_number);
2028         RAISE OKL_API.G_EXCEPTION_ERROR;
2029       END IF;
2030     END IF;
2031 
2032     -- Validate Bank Account
2033     IF (taa_chr_hdr_dtl_rec.bank_acct_id IS NOT NULL) THEN
2034       l_found := 'N';
2035       OPEN chk_bank_acc_csr(p_chr_id => p_chr_id,
2036                             p_bank_acc_id => taa_chr_hdr_dtl_rec.bank_acct_id,
2037                             p_bill_to_site_id => taa_chr_hdr_dtl_rec.bill_to_site_id,
2038                             p_cust_acc_id => taa_chr_hdr_dtl_rec.cust_acct_id);
2039       FETCH chk_bank_acc_csr INTO l_found;
2040       CLOSE chk_bank_acc_csr;
2041 
2042       IF l_found = 'N' THEN
2043         OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2044                             p_msg_name     => 'OKL_LLA_REL_INVALID_BANK_ACC',
2045                             p_token1       => 'REQ_NUM',
2046                             p_token1_value => taa_party_info_rec.trx_number);
2047         RAISE OKL_API.G_EXCEPTION_ERROR;
2048       END IF;
2049     END IF;
2050 
2051     -- Validate Payment Method
2052     IF (taa_chr_hdr_dtl_rec.payment_mthd_id IS NOT NULL) THEN
2053       l_found := 'N';
2054       OPEN chk_pymt_mthd_csr(p_payment_mthd_id => taa_chr_hdr_dtl_rec.payment_mthd_id,
2055                              p_bill_to_site_id => taa_chr_hdr_dtl_rec.bill_to_site_id,
2056                              p_cust_acc_id => taa_chr_hdr_dtl_rec.cust_acct_id);
2057       FETCH chk_pymt_mthd_csr INTO l_found;
2058       CLOSE chk_pymt_mthd_csr;
2059 
2060       IF l_found = 'N' THEN
2061         OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2062                             p_msg_name     => 'OKL_LLA_REL_INVALID_PYMT_MTHD',
2063                             p_token1       => 'REQ_NUM',
2064                             p_token1_value => taa_party_info_rec.trx_number);
2065         RAISE OKL_API.G_EXCEPTION_ERROR;
2066       END IF;
2067     END IF;
2068 
2069     -- Validate Invoice Format
2070     IF (taa_chr_hdr_dtl_rec.invoice_format_id IS NOT NULL) THEN
2071       l_found := 'N';
2072       OPEN chk_inv_format_csr(p_invoice_format_id => taa_chr_hdr_dtl_rec.invoice_format_id);
2073       FETCH chk_inv_format_csr INTO l_found;
2074       CLOSE chk_inv_format_csr;
2075 
2076       IF l_found = 'N' THEN
2077         OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2078                             p_msg_name     => 'OKL_LLA_REL_INVALID_INV_FMT',
2079                             p_token1       => 'REQ_NUM',
2080                             p_token1_value => taa_party_info_rec.trx_number);
2081         RAISE OKL_API.G_EXCEPTION_ERROR;
2082       END IF;
2083 
2084     END IF;
2085 
2086     -- Validate MLA
2087     IF (taa_chr_hdr_dtl_rec.mla_id IS NOT NULL) THEN
2088       l_found := 'N';
2089       OPEN chk_mla_csr(p_mla_id => taa_chr_hdr_dtl_rec.mla_id);
2090       FETCH chk_mla_csr INTO l_found;
2091       CLOSE chk_mla_csr;
2092 
2093       IF l_found = 'N' THEN
2094         OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2095                             p_msg_name     => 'OKL_LLA_REL_INVALID_MLA',
2096                             p_token1       => 'REQ_NUM',
2097                             p_token1_value => taa_party_info_rec.trx_number);
2098         RAISE OKL_API.G_EXCEPTION_ERROR;
2099       END IF;
2100     END IF;
2101 
2102     -- Validate Credit Line
2103     IF (taa_chr_hdr_dtl_rec.credit_line_id IS NOT NULL) THEN
2104       l_found := 'N';
2105       OPEN chk_credit_line_csr(p_credit_line_id => taa_chr_hdr_dtl_rec.credit_line_id,
2106                        p_cust_id => taa_party_info_rec.party_rel_id2_new,
2107                        p_cust_acct_id => taa_chr_hdr_dtl_rec.cust_acct_id,
2108                        p_currency_code => p_currency_code);
2109       FETCH chk_credit_line_csr INTO l_found;
2110       CLOSE chk_credit_line_csr;
2111 
2112       IF l_found = 'N' THEN
2113         OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2114                             p_msg_name     => 'OKL_LLA_REL_INVALID_CL',
2115                             p_token1       => 'REQ_NUM',
2116                             p_token1_value => taa_party_info_rec.trx_number);
2117         RAISE OKL_API.G_EXCEPTION_ERROR;
2118       END IF;
2119     END IF;
2120 
2121 
2122     FOR taa_lines_rec IN taa_lines_csr(p_chr_id     => p_chr_id,
2123                                        p_taa_trx_id => p_source_trx_id)
2124     LOOP
2125 
2126       -- Asset Line level Install At Location
2127       IF (taa_lines_rec.source_column_1 = 'INSTALL_SITE_ID'
2128          AND taa_lines_rec.source_value_1 IS NOT NULL) THEN
2129         l_found := 'N';
2130         OPEN chk_install_site_csr(p_install_site_id => taa_lines_rec.source_value_1,
2131                                   p_cust_id         => taa_party_info_rec.party_rel_id2_new);
2132         FETCH chk_install_site_csr INTO l_found;
2133         CLOSE chk_install_site_csr;
2134 
2135         IF l_found = 'N' THEN
2136           OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2137                               p_msg_name     => 'OKL_LLA_REL_INVALID_INS_SITE',
2138                               p_token1       => 'REQ_NUM',
2139                               p_token1_value => taa_party_info_rec.trx_number,
2140                               p_token2       => 'ASSET_NUM',
2141                               p_token2_value => taa_lines_rec.name);
2142           RAISE OKL_API.G_EXCEPTION_ERROR;
2143         END IF;
2144       END IF;
2145 
2146      -- Asset Line level Fixed asset location
2147       IF (taa_lines_rec.source_column_2 = 'FA_LOC_ID'
2148          AND taa_lines_rec.source_value_2 IS NOT NULL) THEN
2149         l_found := 'N';
2150         OPEN chk_fa_loc_csr(p_location_id => taa_lines_rec.source_value_2);
2151         FETCH chk_fa_loc_csr INTO l_found;
2152         CLOSE chk_fa_loc_csr;
2153 
2154         IF l_found = 'N' THEN
2155           OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2156                               p_msg_name     => 'OKL_LLA_REL_INVALID_FA_LOC',
2157                               p_token1       => 'REQ_NUM',
2158                               p_token1_value => taa_party_info_rec.trx_number,
2159                               p_token2       => 'ASSET_NUM',
2160                               p_token2_value => taa_lines_rec.name);
2161           RAISE OKL_API.G_EXCEPTION_ERROR;
2162         END IF;
2163       END IF;
2164 
2165       -- Asset Line level Bill-To-Site
2166       IF (taa_lines_rec.source_column_3 = 'BILL_TO_SITE_ID'
2167          AND taa_lines_rec.source_value_3 IS NOT NULL) THEN
2168         l_found := 'N';
2169         OPEN chk_bill_to_csr(p_chr_id          => p_chr_id,
2170                              p_bill_to_site_id => taa_lines_rec.source_value_3,
2171                              p_party_id    => taa_party_info_rec.party_rel_id2_new,
2172                              p_cust_acc_id     => taa_chr_hdr_dtl_rec.cust_acct_id);
2173         FETCH chk_bill_to_csr INTO l_found;
2174         CLOSE chk_bill_to_csr;
2175 
2176         IF l_found = 'N' THEN
2177           OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2178                               p_msg_name     => 'OKL_LLA_REL_INVALID_AST_BILL',
2179                               p_token1       => 'REQ_NUM',
2180                               p_token1_value => taa_party_info_rec.trx_number,
2181                               p_token2       => 'ASSET_NUM',
2182                               p_token2_value => taa_lines_rec.name);
2183           RAISE OKL_API.G_EXCEPTION_ERROR;
2184         END IF;
2185       END IF;
2186 
2187     END LOOP;
2188 
2189     OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
2190                          x_msg_data    => x_msg_data);
2191 
2192   EXCEPTION
2193       when OKL_API.G_EXCEPTION_ERROR then
2194 
2195         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2196                         p_api_name  => l_api_name,
2197                         p_pkg_name  => G_PKG_NAME,
2198                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
2199                         x_msg_count => x_msg_count,
2200                         x_msg_data  => x_msg_data,
2201                         p_api_type  => G_API_TYPE);
2202 
2203       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
2204 
2205         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2206                         p_api_name  => l_api_name,
2207                         p_pkg_name  => G_PKG_NAME,
2208                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
2209                         x_msg_count => x_msg_count,
2210                         x_msg_data  => x_msg_data,
2211                         p_api_type  => G_API_TYPE);
2212 
2213       when OTHERS then
2214 
2215         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2216                         p_api_name  => l_api_name,
2217                         p_pkg_name  => G_PKG_NAME,
2218                         p_exc_name  => 'OTHERS',
2219                         x_msg_count => x_msg_count,
2220                         x_msg_data  => x_msg_data,
2221                         p_api_type  => G_API_TYPE);
2222   END validate_taa_request_info;
2223   --Bug# 5005869
2224   -----------------------------------------------------------------------------------------------
2225 -- Start of Comments
2226 -- Furong Miao            19-NOV-2004
2227 -- Procedure Name       : Validate_Release_Contract
2228 -- Description          : Validations upon creation and activation of
2229 --                        re-leased contract
2230 --
2231 -- Business Rules       : This procedure will be overloaded with one more
2232 --                        parameter p_call_program which indicates from where
2233 --                        this procedure is being called. It can be 'RELEASE' or
2234 --                        'ACTIVATE'
2235 --
2236 -- Parameters           :
2237 -- Version              : 1.0
2238 -- End of Commments
2239   PROCEDURE validate_release_contract(p_api_version   IN  NUMBER,
2240                                       p_init_msg_list IN  VARCHAR2,
2241                                       x_return_status OUT NOCOPY VARCHAR2,
2242                                       x_msg_count     OUT NOCOPY NUMBER,
2243                                       x_msg_data      OUT NOCOPY VARCHAR2,
2244                                       p_chr_id        IN  NUMBER,
2245                                       p_release_date  IN  DATE,
2246                                       p_source_trx_id IN  NUMBER,
2247 									  p_call_program  IN  VARCHAR2) IS
2248 
2249     l_return_status   VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
2250     l_api_name        CONSTANT VARCHAR2(30) := 'VALIDATE_REL_CONTRACT';
2251     l_api_version     CONSTANT NUMBER	:= 1.0;
2252 
2253     CURSOR chr_csr(p_chr_id       IN NUMBER) IS
2254     SELECT chr.start_date,
2255            chr.end_date,
2256            chr.contract_number,
2257            khr.deal_type,
2258            sts_code,
2259 	   	   chr.cust_acct_id,
2260            --Bug# 4173345
2261            chr.orig_system_source_code,
2262            --Bug# 4631549
2263            chr.currency_code
2264 	FROM okc_k_headers_b chr,
2265          okl_k_headers khr
2266     WHERE chr.id = p_chr_id
2267     AND   chr.id = khr.id;
2268 
2269     chr_rec   chr_csr%ROWTYPE;
2270 
2271    -- Called at activation to exclude the current contract --
2272     CURSOR pending_trx_act_csr(p_chr_id IN NUMBER)
2273     IS
2274     SELECT 'Y'
2275     FROM   okl_trx_contracts tcn
2276     WHERE  tcn.khr_id = p_chr_id
2277     AND    tcn.tsu_code IN ('ENTERED','WORKING','WAITING','SUBMITTED')
2278 --rkuttiya added for 12.1.1 Multi GAAP
2279     AND    tcn.representation_type = 'PRIMARY'
2280 --
2281     AND   (tcn.tcn_type IN ('TRBK','RVS','SPLC'));
2282 
2283     CURSOR taa_request_csr(p_source_trx_id IN NUMBER)
2284     IS
2285     SELECT tsu_code,
2286            complete_transfer_yn,
2287            trx_number
2288     FROM okl_trx_contracts
2289     where id = p_source_trx_id;
2290 
2291     taa_request_rec        taa_request_csr%ROWTYPE;
2292 
2293     CURSOR chk_chr_accept_term_qte_csr
2294                  (p_orig_chr_id IN NUMBER)
2295     IS
2296     SELECT fin_ast_cle.id,
2297            fin_ast_cle.name
2298     FROM okc_k_lines_v fin_ast_cle,
2299          okc_k_headers_b chr,
2300          okc_line_styles_b fin_ast_lse,
2301          okl_trx_quotes_b qte,
2302          okl_txl_quote_lines_b tql
2303     WHERE chr.id = p_orig_chr_id
2304     AND   fin_ast_cle.chr_id = chr.id
2305     AND   fin_ast_cle.dnz_chr_id = chr.id
2306     AND   fin_ast_cle.sts_code = chr.sts_code
2307     AND   fin_ast_cle.lse_id = fin_ast_lse.id
2308     AND   fin_ast_lse.lty_code = 'FREE_FORM1'
2309     AND   tql.kle_id = fin_ast_cle.id
2310     AND   tql.qte_id = qte.id
2311     AND   tql.qlt_code = 'AMCFIA'
2312     AND   NVL(qte.accepted_yn,'N') = 'Y'
2313     AND   NVL(qte.consolidated_yn,'N') = 'N';
2314 
2315     CURSOR chk_taa_accept_term_qte_csr
2316                  (p_orig_chr_id    IN NUMBER
2317                  ,p_source_trx_id  IN NUMBER)
2318     IS
2319     SELECT fin_ast_cle.id,
2320            fin_ast_cle.name
2321     FROM okl_txl_cntrct_lns tcl,
2322          okc_k_lines_v fin_ast_cle,
2323          okl_trx_quotes_b qte,
2324          okl_txl_quote_lines_b tql
2325     WHERE tcl.tcn_id = p_source_trx_id
2326     AND   tcl.before_transfer_yn = 'N'
2327     AND   fin_ast_cle.chr_id = p_orig_chr_id
2328     AND   fin_ast_cle.dnz_chr_id = p_orig_chr_id
2329     AND   fin_ast_cle.id = tcl.kle_id
2330     AND   tql.kle_id = fin_ast_cle.id
2331     AND   tql.qte_id = qte.id
2332     AND   tql.qlt_code = 'AMCFIA'
2333     AND   NVL(qte.accepted_yn,'N') = 'Y'
2334     AND   NVL(qte.consolidated_yn,'N') = 'N';
2335 
2336     CURSOR chk_chr_equip_exch_req_csr
2337                   (p_orig_chr_id IN NUMBER)
2338     IS
2339     SELECT fin_ast_cle.id,
2340            fin_ast_cle.name
2341     FROM okc_k_lines_v fin_ast_cle,
2342          okc_k_headers_b chr,
2343          okc_line_styles_b fin_ast_lse,
2344          okl_trx_assets ota,
2345          okl_txl_assets_b otl
2346     WHERE chr.id = p_orig_chr_id
2347     AND   fin_ast_cle.chr_id = chr.id
2348     AND   fin_ast_cle.dnz_chr_id = chr.id
2349     AND   fin_ast_cle.sts_code = chr.sts_code
2350     AND   fin_ast_cle.lse_id = fin_ast_lse.id
2351     AND   fin_ast_lse.lty_code = 'FREE_FORM1'
2352     AND   otl.kle_id = fin_ast_cle.id
2353     AND   ota.tas_type IN ('LLT','LLP','NLP')
2354     AND   ota.id = otl.tas_id
2355     AND   otl.tal_type = 'OAS'
2356     AND   ota.tsu_code = 'PROCESSED';
2357 
2358     CURSOR chk_taa_equip_exch_req_csr
2359                   (p_orig_chr_id    IN NUMBER
2360                   ,p_source_trx_id  IN NUMBER)
2361     IS
2362     SELECT fin_ast_cle.id,
2363            fin_ast_cle.name
2364     FROM okl_txl_cntrct_lns tcl,
2365          okc_k_lines_v fin_ast_cle,
2366          okl_trx_assets ota,
2367          okl_txl_assets_b otl
2368     WHERE tcl.tcn_id = p_source_trx_id
2369     AND   tcl.before_transfer_yn = 'N'
2370     AND   fin_ast_cle.chr_id = p_orig_chr_id
2371     AND   fin_ast_cle.dnz_chr_id = p_orig_chr_id
2372     AND   fin_ast_cle.id = tcl.kle_id
2373     AND   otl.kle_id = fin_ast_cle.id
2374     AND   ota.tas_type IN ('LLT','LLP','NLP')
2375     AND   ota.id = otl.tas_id
2376     AND   otl.tal_type = 'OAS'
2377     AND   ota.tsu_code = 'PROCESSED';
2378 
2379     CURSOR chk_linked_serv_chr_csr(p_chr_id IN NUMBER)
2380     IS
2381     SELECT 'Y'
2382     FROM okc_k_rel_objs_v
2383     WHERE chr_id = p_chr_id
2384     AND jtot_object1_code = 'OKL_SERVICE'
2385    -- AND rty_code IN ('OKLUBB','OKLSRV')
2386         AND rty_code = 'OKLSRV';
2387   --rajnisku: Bug 6657564  : End
2388 
2389     l_found VARCHAR2(30);
2390     l_icx_date_format     VARCHAR2(240);
2391     l_funding_remaining   NUMBER;
2392     l_term_duration       NUMBER;
2393     l_asset_num_token     VARCHAR2(2000);
2394 	l_receipt_date        DATE;
2395 	l_acceptance_date     DATE;
2396 	l_invoice_date        DATE;
2397 
2398 	--Cursor for obtaining the last receipt date
2399     /*--Bug# 4061058
2400     CURSOR last_receipt_date_csr(p_cust_acct_number IN VARCHAR2) IS
2401     SELECT max(receipt_date)
2402     FROM okl_ext_csh_rcpts_b
2403     WHERE customer_number = p_cust_acct_number;*/
2404 
2405     --Cusor for obtaining the last accepted termination quote date.
2406     CURSOR last_trq_date_csr(p_contract_id IN NUMBER) IS
2407     SELECT max(date_accepted)
2408     FROM okl_trx_quotes_b
2409     WHERE khr_id = p_contract_id
2410     AND QST_CODE = 'ACCEPTED';
2411 
2412     -- Cursor for obtaining the last credit memo date
2413     CURSOR last_credit_date_csr(p_contract_id IN NUMBER) IS
2414     SELECT max(date_invoiced)
2415     FROM  okl_trx_ar_invoices_b tar,
2416           okl_trx_types_b  typ
2417     WHERE tar.khr_id = p_contract_id
2418     AND   tar.amount<0
2419     AND   tar.try_id = typ.id
2420     AND   typ.aep_code = 'CREDIT_MEMO';
2421 
2422     --Bug# 4151222
2423     l_fully_funded_flag BOOLEAN;
2424 
2425     --Bug# 4631549
2426     --cusror to fetch all lines expected_asset_cost
2427     Cursor l_exp_cost_csr(p_chr_id IN NUMBER) is
2428     Select kle.expected_Asset_Cost,
2429            cleb.orig_system_id1 orig_cle_id,
2430            chrb.id              new_chr_id,
2431            cleb.id              new_cle_id
2432     From
2433            okc_k_lines_b   cleb,
2434            okl_k_lines     kle,
2435            okc_k_headers_b chrb
2436     where  kle.id                       = cleb.id
2437     and    cleb.dnz_chr_id              = chrb.id
2438     and    cleb.lse_id                  = 33 --financial asset line
2439     and    cleb.sts_code                = 'APPROVED'
2440     and    cleb.orig_system_id1 is NOT NULL
2441     and    chrb.orig_system_id1         = p_chr_id
2442     and    chrb.orig_system_source_code = 'OKL_RELEASE'
2443     and    chrb.sts_code                = 'APPROVED';
2444 
2445     l_exp_cost_rec l_exp_cost_csr%ROWTYPE;
2446 
2447     --cusror to fetch fixed asset details
2448     cursor l_fa_csr (p_cle_id in number,
2449                      p_chr_id in number) is
2450     select fb.asset_id,
2451            fb.book_type_code
2452     from   fa_books fb,
2453            fa_book_controls fbc,
2454            okc_k_items cim,
2455            okc_k_lines_b cleb_fa
2456     where  fb.asset_id      = cim.object1_id1
2457     and    fb.book_type_code = fbc.book_type_code
2458     and    fbc.book_class   = 'CORPORATE'
2459     and    fb.transaction_header_id_out is NULL
2460     and    cim.jtot_object1_code = 'OKX_ASSET'
2461     and    cim.object1_id2       = '#'
2462     and    cim.dnz_chr_id        = cleb_fa.dnz_chr_id
2463     and    cim.cle_id            = cleb_fa.id
2464     and    cleb_fa.cle_id        = p_cle_id
2465     and    cleb_fa.dnz_chr_id    = p_chr_id
2466     and    cleb_fa.lse_id        = 42; -- fixed asset
2467 
2468     l_fa_rec l_fa_csr%ROWTYPE;
2469 
2470     --cursor to fetch number of units of the asset
2471     cursor l_units_csr (p_cle_id in number,
2472                         p_chr_id in number) is
2473     select cleb_model.id  model_cle_id,
2474            cim_model.number_of_items
2475     from   okc_k_lines_b  cleb_model,
2476            okc_k_items    cim_model
2477     where  cim_model.cle_id       = cleb_model.id
2478     and    cim_model.dnz_chr_id   = p_chr_id
2479     and    cleb_model.cle_id      = p_cle_id
2480     and    cleb_model.dnz_chr_id  = p_chr_id
2481     and    cleb_model.lse_id      = 34; --model line
2482 
2483     l_units_rec l_units_csr%ROWTYPE;
2484 
2485 
2486     --cursor to fetch asset number
2487     cursor l_asset_num_csr(p_asset_id in number) is
2488     select asset_number
2489     from   fa_additions_b
2490     where  asset_id = p_Asset_id;
2491 
2492     l_asset_num_rec l_asset_num_csr%ROWTYPE;
2493 
2494     l_corp_net_book_value  NUMBER;
2495     l_expected_cost        NUMBER;
2496     l_exp_cost_mismatch_yn VARCHAR2(1);
2497     l_capital_amount       NUMBER;
2498     l_capitalized_interest NUMBER;
2499 
2500     l_model_clev_rec        okc_contract_pub.clev_rec_type;
2501     lx_model_clev_rec       okc_contract_pub.clev_rec_type;
2502     l_finast_clev_rec       okl_okc_migration_pvt.clev_rec_type;
2503     lx_finast_clev_rec      okl_okc_migration_pvt.clev_rec_type;
2504     l_finast_klev_rec       okl_contract_pub.klev_rec_type;
2505     lx_finast_klev_rec      okl_contract_pub.klev_rec_type;
2506     l_finast_clev_rec2       okl_okc_migration_pvt.clev_rec_type;
2507     lx_finast_clev_rec2      okl_okc_migration_pvt.clev_rec_type;
2508     l_finast_klev_rec2       okl_contract_pub.klev_rec_type;
2509     lx_finast_klev_rec2      okl_contract_pub.klev_rec_type;
2510 
2511     --cursor to fetch new contract currency
2512     cursor l_new_chr_hdr_csr (p_chr_id in number) is
2513     select currency_code
2514     from   okc_k_headers_b
2515     where  id = p_chr_id;
2516 
2517     l_new_chr_hdr_rec l_new_chr_hdr_csr%ROWTYPE;
2518     --End Bug# 4631549
2519          --rajnisku: Bug 6657564
2520  	     --cursor to check whether the TNA request contains asset
2521  	     --associated to a Usage line
2522  	     cursor l_chk_link_usage_csr (p_source_trx_id NUMBER) IS
2523  	     select '!' from dual
2524  	     where exists (
2525  	         select 1
2526  	         from okc_k_items UITEM ,
2527  	         OKC_K_LINES_B USAGE,
2528  	         OKC_K_LINES_B USUB_LINE,
2529  	         okc_k_items LINK_ITEM,
2530  	         okc_k_lines_b top_line,
2531  	         okl_txl_cntrct_lns tcl
2532  	         where UITEM.dnz_chr_id=tcl.khr_id
2533  	         and UITEM.JTOT_OBJECT1_CODE = 'OKL_USAGE'
2534  	         and UITEM.OBJECT1_ID2='#'
2535  	         and USAGE.id=UITEM.cle_id
2536  	         and USUB_LINE.cle_id=USAGE.id
2537  	         and USUB_LINE.lse_id=(select id from okc_line_styles_v where lty_code = 'LINK_USAGE_ASSET')
2538  	         and LINK_ITEM.cle_id=USUB_LINE.id
2539  	         and LINK_ITEM.OBJECT1_ID1=top_line.id
2540  	         and LINK_ITEM.OBJECT1_ID2='#'
2541  	         and top_line.lse_id=(select id from okc_line_styles_v where lty_code = 'FREE_FORM1')
2542  	         and top_line.id = tcl.kle_id
2543  	         and tcl.tcn_id = p_source_trx_id
2544  	         AND tcl.before_transfer_yn = 'N'
2545  	     );
2546 
2547  	    cursor l_ubb_contract_csr(p_orig_chr_id number) IS
2548  	    SELECT oks.date_terminated,sts.ste_code
2549  	     FROM okc_k_rel_objs_v krelobj ,
2550  	          okc_k_headers_b oks,
2551  	          okc_statuses_b sts
2552  	     WHERE krelobj.JTOT_OBJECT1_CODE = 'OKL_SERVICE'
2553  	     AND krelobj.RTY_CODE = 'OKLUBB'
2554  	     and krelobj.OBJECT1_ID1 = oks.id
2555  	     and krelobj.OBJECT1_ID2='#'
2556  	     and krelobj.CHR_ID = p_orig_chr_id --original contract id
2557  	     and sts.code=oks.sts_code;
2558 
2559  	    l_ubb_contract_rec l_ubb_contract_csr%ROWTYPE;
2560  	    l_link_usage varchar2(1);
2561  	    l_chk_ubb_terminated_yn varchar2(1):='N';
2562  	   --rajnisku: Bug 6657564  :End
2563 
2564   BEGIN
2565     x_return_status := Okl_Api.G_RET_STS_SUCCESS;
2566     -- Call start_activity to create savepoint, check compatibility
2567     -- and initialize message list
2568     l_return_status := Okl_Api.START_ACTIVITY(
2569 			p_api_name      => l_api_name,
2570 			p_pkg_name      => g_pkg_name,
2571 			p_init_msg_list => p_init_msg_list,
2572 			l_api_version   => l_api_version,
2573 			p_api_version   => p_api_version,
2574 			p_api_type      => '_PVT',
2575 			x_return_status => x_return_status);
2576     -- Check if activity started successfully
2577     IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2578       RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2579     ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2580       RAISE Okl_Api.G_EXCEPTION_ERROR;
2581     END IF;
2582 
2583 	open chr_csr(p_chr_id => p_chr_id);
2584     fetch chr_csr into chr_rec;
2585     close chr_csr;
2586 
2587 	if (p_call_program in ('RELEASE','ACTIVATE') ) then
2588 
2589       -- Validate that Contract status is valid
2590       if chr_rec.sts_code NOT IN ('BOOKED','EVERGREEN','BANKRUPTCY_HOLD',
2591                                 'LITIGATION_HOLD') then
2592         OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2593                           p_msg_name     => 'OKL_LLA_REL_INVALID_STATUS',
2594                           p_token1       => 'CONTRACT_NUM',
2595                           p_token1_value => chr_rec.contract_number);
2596         RAISE OKL_API.G_EXCEPTION_ERROR;
2597       end if;
2598 
2599       -- Validate if Linked Service Contract exists
2600       l_found := 'N';
2601       open chk_linked_serv_chr_csr(p_chr_id => p_chr_id);
2602       fetch chk_linked_serv_chr_csr into l_found;
2603       close chk_linked_serv_chr_csr;
2604       if (l_found = 'Y') then
2605         OKL_API.SET_MESSAGE(G_APP_NAME,
2606                           'OKL_LLA_REL_LINK_SERV_CNTRCT');
2607         RAISE OKL_API.G_EXCEPTION_ERROR;
2608       end if;
2609 
2610       -- T and A Validations
2611       -- Validate that T and A request is Approved
2612       IF p_source_trx_id IS NOT NULL THEN
2613 
2614         open taa_request_csr(p_source_trx_id => p_source_trx_id);
2615         fetch taa_request_csr into taa_request_rec;
2616         close taa_request_csr;
2617         if taa_request_rec.tsu_code <> 'APPROVED' then
2618           OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2619                             p_msg_name     => 'OKL_LLA_REL_TAA_REQ_NO_APPRVD',
2620                             p_token1       => 'REQ_NUM',
2621                             p_token1_value => taa_request_rec.trx_number);
2622           RAISE OKL_API.G_EXCEPTION_ERROR;
2623         end if;
2624       END IF;
2625 
2626       -- Validations that assets are not a part of any
2627       -- Accepted Termination quote or
2628       -- Processed Equipment Exchange
2629 
2630       -- T and A transaction
2631       if (p_source_trx_id IS NOT NULL) then
2632 
2633         l_found := 'N';
2634         l_asset_num_token := null;
2635         for chk_taa_accept_term_qte_rec in
2636             chk_taa_accept_term_qte_csr
2637                         (p_orig_chr_id   => p_chr_id
2638                         ,p_source_trx_id => p_source_trx_id) loop
2639 
2640           l_found := 'Y';
2641           if l_asset_num_token is null then
2642             l_asset_num_token := l_asset_num_token ||chk_taa_accept_term_qte_rec.name;
2643           else
2644             l_asset_num_token := l_asset_num_token ||', '||chk_taa_accept_term_qte_rec.name;
2645           end if;
2646         end loop;
2647 
2648         if l_found = 'Y' then
2649           OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2650                             p_msg_name     => 'OKL_LLA_REL_NO_ACCEPT_TQ',
2651                             p_token1       => 'ASST_NUM',
2652                             p_token1_value => l_asset_num_token);
2653           RAISE OKL_API.G_EXCEPTION_ERROR;
2654         end if;
2655 
2656         l_found := 'N';
2657         l_asset_num_token := null;
2658         for chk_taa_equip_exch_req_rec in
2659             chk_taa_equip_exch_req_csr
2660                        (p_orig_chr_id   => p_chr_id
2661                        ,p_source_trx_id => p_source_trx_id) loop
2662 
2663           l_found := 'Y';
2664           if l_asset_num_token is null then
2665             l_asset_num_token := l_asset_num_token ||chk_taa_equip_exch_req_rec.name;
2666           else
2667             l_asset_num_token := l_asset_num_token ||', '||chk_taa_equip_exch_req_rec.name;
2668           end if;
2669         end loop;
2670 
2671         if l_found = 'Y' then
2672           OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2673                             p_msg_name     => 'OKL_LLA_REL_NO_PROCESSED_EQ',
2674                             p_token1       => 'ASSET_NUM',
2675                             p_token1_value => l_asset_num_token);
2676           RAISE OKL_API.G_EXCEPTION_ERROR;
2677         end if;
2678 
2679       -- Re-lease contract
2680       else
2681         l_found := 'N';
2682         l_asset_num_token := null;
2683         for chk_chr_accept_term_qte_rec in
2684             chk_chr_accept_term_qte_csr
2685                         (p_orig_chr_id   => p_chr_id) loop
2686 
2687           l_found := 'Y';
2688           if l_asset_num_token is null then
2689             l_asset_num_token := l_asset_num_token ||chk_chr_accept_term_qte_rec.name;
2690           else
2691             l_asset_num_token := l_asset_num_token ||', '||chk_chr_accept_term_qte_rec.name;
2692           end if;
2693         end loop;
2694 
2695         if l_found = 'Y' then
2696           OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2697                             p_msg_name     => 'OKL_LLA_REL_NO_ACCEPT_TQ',
2698                             p_token1       => 'ASST_NUM',
2699                             p_token1_value => l_asset_num_token);
2700           RAISE OKL_API.G_EXCEPTION_ERROR;
2701         end if;
2702 
2703         l_found := 'N';
2704         l_asset_num_token := null;
2705         for chk_chr_equip_exch_req_rec in
2706             chk_chr_equip_exch_req_csr
2707                        (p_orig_chr_id   => p_chr_id) loop
2708 
2709           l_found := 'Y';
2710           if l_asset_num_token is null then
2711             l_asset_num_token := l_asset_num_token ||chk_chr_equip_exch_req_rec.name;
2712           else
2713             l_asset_num_token := l_asset_num_token ||', '||chk_chr_equip_exch_req_rec.name;
2714           end if;
2715         end loop;
2716 
2717         if l_found = 'Y' then
2718           OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2719                             p_msg_name     => 'OKL_LLA_REL_NO_PROCESSED_EQ',
2720                             p_token1       => 'ASSET_NUM',
2721                             p_token1_value => l_asset_num_token);
2722           RAISE OKL_API.G_EXCEPTION_ERROR;
2723         end if;
2724       end if;
2725 
2726       -- Validate that the Contract is fully funded
2727       /* Bug# 4151222: Funding validation api call changed
2728       l_funding_remaining :=
2729            OKL_FUNDING_PVT.get_chr_canbe_funded_rem(p_contract_id => p_chr_id);
2730       --Bug# 4080102 - Changed to check for Funding remaining > 0
2731       if (l_funding_remaining > 0) then
2732         OKL_API.SET_MESSAGE(G_APP_NAME,
2733                             'OKL_LLA_REL_NOT_FULLY_FUNDED');
2734         RAISE OKL_API.G_EXCEPTION_ERROR;
2735       end if;*/
2736 
2737       --Bug# 4151222
2738       l_fully_funded_flag := false;
2739 
2740       --Bug# 4173345
2741       -- Re-leased contracts should be treated as fully funded
2742       if NVL(chr_rec.orig_system_source_code,OKL_API.G_MISS_CHAR) = 'OKL_RELEASE' then
2743         l_fully_funded_flag := true;
2744       else
2745         OKL_FUNDING_PVT.is_contract_fully_funded(
2746           p_api_version                  => p_api_version
2747          ,p_init_msg_list                => p_init_msg_list
2748          ,x_return_status                => x_return_status
2749          ,x_msg_count                    => x_msg_count
2750          ,x_msg_data                     => x_msg_data
2751          ,x_value                        => l_fully_funded_flag
2752          ,p_contract_id                  => p_chr_id);
2753 
2754         IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
2755           RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
2756         ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
2757           RAISE Okl_Api.G_EXCEPTION_ERROR;
2758         END IF;
2759       end if;
2760       --Bug# 4173345
2761 
2762       if (l_fully_funded_flag = false) then
2763         OKL_API.SET_MESSAGE(G_APP_NAME,
2764                             'OKL_LLA_REL_NOT_FULLY_FUNDED');
2765         RAISE OKL_API.G_EXCEPTION_ERROR;
2766       end if;
2767 
2768 	  -- Validate whether the release date is after
2769 	  -- last Receipt Date, last Credit Memo Date and
2770 	  -- last accepted Termination Quote date.
2771 
2772   /* ankushar R12 billing enhancement
2773      replaced the call to cursor with the billing API call
2774      start changes
2775    */
2776    OKL_BILLING_UTIL_PVT.LAST_INVOICE_DATE(
2777                         p_api_version                  =>  p_api_version
2778                        ,p_init_msg_list                =>  p_init_msg_list
2779                        ,x_return_status                =>  x_return_status
2780                        ,x_msg_count                    =>  x_msg_count
2781                        ,x_msg_data                     =>  x_msg_data
2782                        ,p_contract_id                  =>  p_chr_id
2783                        ,x_invoice_date                 =>  l_receipt_date);
2784 
2785    /* ankushar R12 billing enhancement end changes */
2786 
2787 	  open last_trq_date_csr (p_contract_id => p_chr_id);
2788       fetch last_trq_date_csr into l_acceptance_date;
2789 	  close last_trq_date_csr;
2790 
2791 	  open last_credit_date_csr (p_contract_id => p_chr_id);
2792 	  fetch last_credit_date_csr into l_invoice_date;
2793 	  close last_credit_date_csr;
2794 
2795         -- Bug# 4072796
2796 	  if (l_receipt_date IS NOT NULL) and (p_release_date <= l_receipt_date ) then
2797         OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2798                             p_msg_name     => 'OKL_CS_TF_RECEIPT_DATE',
2799                             p_token1       => 'INVOICE_DATE',
2800                             p_token1_value => l_receipt_date);
2801         RAISE OKL_API.G_EXCEPTION_ERROR;
2802 	  elsif (l_acceptance_date IS NOT NULL) and (p_release_date <= l_acceptance_date ) then
2803         OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2804                             p_msg_name     => 'OKL_CS_TF_QUOTE_DATE',
2805                             p_token1       => 'QUOTE_DATE',
2806                             p_token1_value => l_acceptance_date);
2807         RAISE OKL_API.G_EXCEPTION_ERROR;
2808 	  elsif (l_invoice_date IS NOT NULL) and (p_release_date <= l_invoice_date) then
2809         OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
2810                             p_msg_name     => 'OKL_CS_TF_CREDITMEMO_DATE',
2811                             p_token1       => 'CREDIT_MEMO',
2812                             p_token1_value => l_invoice_date);
2813         RAISE OKL_API.G_EXCEPTION_ERROR;
2814 	  end if;
2815 	end if;
2816 		      -- T and A Validations
2817  	      --rajnisku: Bug 6657564  : Added validation to block TNA
2818  	      --if the transferred asset is associated to a Usage line
2819  	      --or if service contract is not terminated
2820 
2821  	      IF p_source_trx_id IS NOT NULL THEN
2822  	            l_link_usage := '?';
2823  	            l_chk_ubb_terminated_yn:='N';
2824  	            --check any transferred asset line is associated to a usage line
2825  	            OPEN l_chk_link_usage_csr (p_source_trx_id => p_source_trx_id);
2826  	            FETCH l_chk_link_usage_csr INTO l_link_usage;
2827  	            IF l_chk_link_usage_csr%NOTFOUND THEN
2828  	              NULL;
2829  	            END IF;
2830  	            CLOSE l_chk_link_usage_csr;
2831 
2832  	            IF l_link_usage = '!'
2833  	              AND NVL(taa_request_rec.complete_transfer_yn,'X')='N' THEN
2834  	                 --set message
2835  	                 --The transfer is not permitted because one of the transferred
2836  	                 --asset is associated to a usage line.
2837  	                  OKL_API.SET_MESSAGE(G_APP_NAME,
2838  	                                   'OKL_CS_TA_ASSET_WITH_UBB_NA');
2839  	                  RAISE OKL_API.G_EXCEPTION_ERROR;
2840  	            END IF;
2841 
2842  	            IF l_link_usage = '!' AND
2843  	               NVL(taa_request_rec.complete_transfer_yn,'X')='Y' THEN
2844  	                 l_chk_ubb_terminated_yn:='Y';
2845  	             END IF;
2846 
2847  	         ELSE -- p_source_trx_id is null
2848  	          --full TnA performed from html screen without TnA request
2849  	           l_chk_ubb_terminated_yn:='Y';
2850  	        END IF;
2851 
2852  	        --check whether the associated usage contract is terminated
2853  	        IF l_chk_ubb_terminated_yn='Y'  THEN
2854 
2855  	          OPEN l_ubb_contract_csr (p_orig_chr_id => p_chr_id);
2856  	          FETCH l_ubb_contract_csr INTO l_ubb_contract_rec;
2857  	          IF l_ubb_contract_csr%NOTFOUND THEN
2858  	              NULL;
2859  	          ELSE
2860  	              IF NVL(l_ubb_contract_rec.ste_code,'X')<>'TERMINATED' THEN
2861  	             --set message
2862  	             --You must terminate the associated service contract before
2863  	             --release is permitted.
2864  	              OKL_API.SET_MESSAGE(G_APP_NAME,
2865  	                           'OKL_LLA_REL_TERM_SERV_CNTRCT');
2866  	             RAISE OKL_API.G_EXCEPTION_ERROR;
2867  	           END IF;
2868  	          END IF;
2869  	          CLOSE l_ubb_contract_csr;
2870  	        END IF; --check
2871  	      --rajnisku: Bug 6657564  :End
2872 
2873 	-- Validation at activation --
2874       -- Bug# 4072796
2875 	if (p_call_program = 'ACTIVATE') then
2876       if (p_release_date > TRUNC(sysdate)) then
2877         OKL_API.SET_MESSAGE(G_APP_NAME,
2878                             'OKL_CS_NO_TF_FUTURE_DATE');
2879         RAISE OKL_API.G_EXCEPTION_ERROR;
2880 	  end if;
2881 
2882       -- Validate if Contract is undergoing Revision
2883       l_found := 'N';
2884       open pending_trx_act_csr(p_chr_id => p_chr_id);
2885       fetch pending_trx_act_csr into l_found;
2886       close pending_trx_act_csr;
2887       if (l_found = 'Y') then
2888         OKL_API.SET_MESSAGE(G_APP_NAME,
2889                           'OKL_LLA_REV_IN_PROGRESS');
2890         RAISE OKL_API.G_EXCEPTION_ERROR;
2891       end if;
2892 	end if;
2893 
2894     --Bug# 4631549
2895     --Validate if the expected asset value has changed since the time the asset was authored
2896     If (p_call_program = 'ACTIVATE') then
2897     l_exp_cost_mismatch_yn := 'N';
2898     Open l_exp_cost_csr(p_chr_id => p_chr_id);
2899     loop
2900         fetch l_exp_cost_csr into l_exp_cost_rec;
2901         Exit when l_exp_cost_csr%NOTFOUND;
2902         open l_fa_csr(p_cle_id => l_exp_cost_rec.orig_cle_id,
2903                       p_chr_id => p_chr_id);
2904         fetch l_fa_csr into l_fa_rec;
2905         If l_fa_csr%NOTFOUND Then
2906             NULL;
2907         End If;
2908         close l_fa_csr;
2909 
2910         --Bug# 4631549 : Date validation removed to fix GE bug# 4873420
2911         -- Release contract start date should fall in the current
2912         -- open period in FA
2913         --validate_release_date
2914                          --(p_api_version     => p_api_version,
2915                           --p_init_msg_list   => p_init_msg_list,
2916                           --x_return_status   => x_return_status,
2917                           --x_msg_count       => x_msg_count,
2918                           --x_msg_data        => x_msg_data,
2919                           --p_book_type_code  => l_fa_rec.book_type_code,
2920                           --p_release_date    => p_release_date);
2921 
2922         --IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2923             --RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2924         --ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2925             --RAISE OKL_API.G_EXCEPTION_ERROR;
2926         --END IF;
2927 
2928         -- Calculate  Expected asset cost (cost of the asset expected after re-lease)
2929         Calculate_Expected_Cost
2930                                (p_api_version    => p_api_version,
2931                                 p_init_msg_list  => p_init_msg_list,
2932                                 x_return_status  => x_return_status,
2933                                 x_msg_count      => x_msg_count,
2934                                 x_msg_data       => x_msg_data,
2935                                 p_new_chr_id     => l_exp_cost_rec.new_chr_id,
2936                                 p_orig_chr_id    => p_chr_id,
2937                                 p_orig_cle_id    => l_exp_cost_rec.orig_cle_id,
2938                                 p_asset_id       => l_fa_rec.asset_id,
2939                                 p_book_type_code => l_fa_rec.book_type_code,
2940                                 p_release_date   => p_release_date,
2941                                 p_nbv            => l_corp_net_book_value,
2942                                 x_expected_cost  => l_expected_cost);
2943 
2944         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2945             RAISE OKL_API.G_EXCEPTION_ERROR;
2946         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2947             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2948         END IF;
2949 
2950         If nvl(l_expected_cost,0) <> nvl(l_exp_cost_rec.expected_Asset_cost,0) then
2951             l_exp_cost_mismatch_yn := 'Y';
2952             open l_asset_num_csr(p_asset_id => l_fa_rec.asset_id);
2953             fetch l_asset_num_csr into l_asset_num_rec;
2954             close l_asset_num_csr;
2955             OKL_API.set_message(p_app_name     => G_APP_NAME,
2956                                 p_msg_name      => 'OKL_LA_EXPECTED_ASSET_COST_MOD',
2957                                 p_token1        => 'ASSET_NUMBER',
2958                                 p_token1_value  => l_asset_num_rec.asset_number);
2959         Elsif nvl(l_expected_cost,0) = nvl(l_exp_cost_rec.expected_asset_cost,0) then
2960             open l_units_csr(p_cle_id => l_exp_cost_rec.new_cle_id,
2961                              p_chr_id => l_exp_cost_rec.new_chr_id
2962                              );
2963             fetch l_units_csr into l_units_rec;
2964             If l_units_csr%NOTFOUND then
2965                 Null;
2966             End If;
2967             close l_units_csr;
2968 
2969             If nvl(l_units_rec.number_of_items,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM then
2970                --modify the model line
2971                l_model_clev_rec.id := l_units_rec.model_cle_id;
2972                l_model_clev_rec.price_unit := (l_expected_cost/l_units_rec.number_of_items);
2973 
2974                open l_new_chr_hdr_csr (p_chr_id => l_exp_cost_rec.new_chr_id);
2975                fetch l_new_chr_hdr_csr into l_new_chr_hdr_rec;
2976                close l_new_chr_hdr_csr;
2977 
2978                l_model_clev_rec.price_unit := OKL_ACCOUNTING_UTIL.cross_currency_round_amount
2979                            (p_amount        => l_model_clev_rec.price_unit,
2980                             p_currency_code => l_new_chr_hdr_rec.currency_code);
2981 
2982 
2983                OKC_CONTRACT_PUB.update_contract_line
2984                                  (p_api_version    => p_api_version,
2985                                   p_init_msg_list  => p_init_msg_list,
2986                                   x_return_status  => x_return_status,
2987                                   x_msg_count      => x_msg_count,
2988                                   x_msg_data       => x_msg_data,
2989                                   p_clev_rec       => l_model_clev_rec,
2990                                   x_clev_rec       => lx_model_clev_rec
2991                                  );
2992                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2993                    RAISE OKL_API.G_EXCEPTION_ERROR;
2994                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2995                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2996                END IF;
2997                --modify the OEC on financial asset line
2998 
2999                l_finast_clev_rec.id  := l_exp_cost_rec.new_cle_id;
3000                l_finast_klev_rec.id  := l_exp_cost_rec.new_cle_id;
3001                l_finast_klev_rec.oec := l_expected_cost;
3002 
3003                OKL_CONTRACT_PUB.update_contract_line
3004                                (p_api_version    => p_api_version,
3005                                 p_init_msg_list  => p_init_msg_list,
3006                                 x_return_status  => x_return_status,
3007                                 x_msg_count      => x_msg_count,
3008                                 x_msg_data       => x_msg_data,
3009                                 p_clev_rec       => l_finast_clev_rec,
3010                                 p_klev_rec       => l_finast_klev_rec,
3011                                 p_edit_mode      => 'N',
3012                                 x_clev_rec       => lx_finast_clev_rec,
3013                                 x_klev_rec       => lx_finast_klev_rec);
3014 
3015                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3016                    RAISE OKL_API.G_EXCEPTION_ERROR;
3017                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3018                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3019                END IF;
3020 
3021                --modify the capital amount on financial assrt line
3022                OKL_EXECUTE_FORMULA_PUB.EXECUTE(p_api_version   => p_api_version,
3023                                                p_init_msg_list => p_init_msg_list,
3024                                                x_return_status => x_return_status,
3025                                                x_msg_count     => x_msg_count,
3026                                                x_msg_data      => x_msg_data,
3027                                                p_formula_name  => 'LINE_CAP_AMNT',
3028                                                p_contract_id   => l_exp_cost_rec.new_chr_id,
3029                                                p_line_id       => l_exp_cost_rec.new_cle_id,
3030                                                x_value         => l_capital_amount);
3031 
3032                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3033                    RAISE OKL_API.G_EXCEPTION_ERROR;
3034                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3035                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3036                END IF;
3037 
3038                OKL_EXECUTE_FORMULA_PUB.EXECUTE(p_api_version   => p_api_version,
3039                                                p_init_msg_list => p_init_msg_list,
3040                                                x_return_status => x_return_status,
3041                                                x_msg_count     => x_msg_count,
3042                                                x_msg_data      => x_msg_data,
3043                                                p_formula_name  => 'LINE_CAPITALIZED_INTEREST',
3044                                                p_contract_id   => l_exp_cost_rec.new_chr_id,
3045                                                p_line_id       => l_exp_cost_rec.new_cle_id,
3046                                                x_value         => l_capitalized_interest);
3047 
3048                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3049                    RAISE OKL_API.G_EXCEPTION_ERROR;
3050                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3051                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3052                END IF;
3053 
3054                l_finast_klev_rec2.capital_amount   := (l_capital_amount - l_capitalized_interest);
3055                l_finast_klev_rec2.id               := l_exp_cost_rec.new_cle_id;
3056                l_finast_clev_rec2.id               := l_exp_cost_rec.new_cle_id;
3057 
3058                OKL_CONTRACT_PUB.update_contract_line
3059                                (p_api_version    => p_api_version,
3060                                 p_init_msg_list  => p_init_msg_list,
3061                                 x_return_status  => x_return_status,
3062                                 x_msg_count      => x_msg_count,
3063                                 x_msg_data       => x_msg_data,
3064                                 p_clev_rec       => l_finast_clev_rec2,
3065                                 p_klev_rec       => l_finast_klev_rec2,
3066                                 p_edit_mode      => 'N',
3067                                 x_clev_rec       => lx_finast_clev_rec2,
3068                                 x_klev_rec       => lx_finast_klev_rec2);
3069 
3070                IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3071                    RAISE OKL_API.G_EXCEPTION_ERROR;
3072                ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3073                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3074                END IF;
3075 
3076             End If;
3077         End If;
3078     End Loop;
3079     Close l_exp_cost_csr;
3080     If l_exp_cost_mismatch_yn = 'Y' then
3081         OKL_API.set_message(p_app_name => G_APP_NAME,
3082                             p_msg_name => 'OKL_LA_UPDATE_ASSET');
3083         RAISE OKL_API.G_EXCEPTION_ERROR;
3084     End If;
3085     End If;
3086     --End Bug# 4631549
3087 
3088 
3089 
3090     --End Bug# 4631549
3091 
3092     OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
3093                          x_msg_data    => x_msg_data);
3094 
3095   EXCEPTION
3096       when OKL_API.G_EXCEPTION_ERROR then
3097 
3098         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3099                         p_api_name  => l_api_name,
3100                         p_pkg_name  => G_PKG_NAME,
3101                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
3102                         x_msg_count => x_msg_count,
3103                         x_msg_data  => x_msg_data,
3104                         p_api_type  => G_API_TYPE);
3105 
3106       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
3107 
3108         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3109                         p_api_name  => l_api_name,
3110                         p_pkg_name  => G_PKG_NAME,
3111                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
3112                         x_msg_count => x_msg_count,
3113                         x_msg_data  => x_msg_data,
3114                         p_api_type  => G_API_TYPE);
3115 
3116       when OTHERS then
3117 
3118         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3119                         p_api_name  => l_api_name,
3120                         p_pkg_name  => G_PKG_NAME,
3121                         p_exc_name  => 'OTHERS',
3122                         x_msg_count => x_msg_count,
3123                         x_msg_data  => x_msg_data,
3124                         p_api_type  => G_API_TYPE);
3125   END validate_release_contract;
3126 
3127   -----------------------------------------------------------------------------------------------
3128 -- Start of Comments
3129 -- Rekha Pillay
3130 -- Procedure Name       : Validate_Release_Contract
3131 -- Description          : Validations for the Re-lease contract
3132 --
3133 -- Business Rules       :
3134 --
3135 --
3136 --
3137 --
3138 --
3139 --
3140 --
3141 -- Parameters           :
3142 -- Version              : 1.0
3143 -- End of Commments
3144   PROCEDURE validate_release_contract(p_api_version   IN  NUMBER,
3145                                       p_init_msg_list IN  VARCHAR2,
3146                                       x_return_status OUT NOCOPY VARCHAR2,
3147                                       x_msg_count     OUT NOCOPY NUMBER,
3148                                       x_msg_data      OUT NOCOPY VARCHAR2,
3149                                       p_chr_id        IN  NUMBER,
3150                                       p_release_date  IN  DATE,
3151                                       p_source_trx_id IN  NUMBER,
3152 				      p_release_reason_code IN VARCHAR2) IS
3153 
3154     l_return_status   VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3155     l_api_name        CONSTANT VARCHAR2(30) := 'VALIDATE_RELEASE_CONTRACT';
3156     l_api_version     CONSTANT NUMBER	:= 1.0;
3157 
3158     CURSOR chr_csr(p_chr_id       IN NUMBER) IS
3159     SELECT chr.start_date,
3160            chr.end_date,
3161            chr.contract_number,
3162            khr.deal_type,
3163            sts_code,
3164            --Bug# 5005869
3165            chr.currency_code
3166     FROM okc_k_headers_b chr,
3167          okl_k_headers khr
3168     WHERE chr.id = p_chr_id
3169     AND   chr.id = khr.id;
3170 
3171     chr_rec   chr_csr%ROWTYPE;
3172 
3173     CURSOR rul_csr(p_chr_id   IN NUMBER,
3174                    p_rgd_code IN VARCHAR2,
3175                    p_rul_cat  IN VARCHAR2
3176                    ) IS
3177     SELECT crl.rule_information1
3178     FROM   okc_rule_groups_b crg,
3179            okc_rules_b crl
3180     WHERE  crl.rgp_id = crg.id
3181     AND    crg.rgd_code = p_rgd_code
3182     AND    crl.rule_information_category = p_rul_cat
3183     AND    crg.dnz_chr_id = p_chr_id;
3184 
3185     rul_rec                rul_csr%ROWTYPE;
3186 
3187     CURSOR chk_usage_csr(p_chr_id OKC_K_HEADERS_B.ID%TYPE)
3188     IS
3189     SELECT 'Y'
3190     FROM okc_k_lines_b cle,
3191          okc_line_styles_b lse
3192     WHERE cle.chr_id = p_chr_id
3193     AND cle.dnz_chr_id = p_chr_id
3194     AND lse.id = cle.lse_id
3195     AND lse.lty_code = 'USAGE'
3196     AND rownum = 1;
3197 
3198     -- Bug# 4072796
3199     -- Called at release --
3200     CURSOR pending_trx_csr(p_chr_id IN NUMBER)
3201     IS
3202     SELECT 'Y'
3203     FROM   okl_trx_contracts tcn
3204     WHERE  tcn.khr_id = p_chr_id
3205     AND    tcn.tsu_code IN ('ENTERED','WORKING','WAITING','SUBMITTED')
3206 --rkuttiya added for 12.1.1 Multi GAAP
3207     AND   tcn.representation_type = 'PRIMARY'
3208     AND   (tcn.tcn_type IN ('TRBK','RVS','SPLC')
3209 --
3210            OR (tcn.tcn_type = 'MAE' AND tcn.try_id IN (SELECT try.id
3211                                                    FROM okl_trx_types_tl try
3212                                                    WHERE try.name = 'Release'
3213                                                    AND try.language= 'US')));
3214 
3215     --Bug# 4905732
3216     CURSOR chk_chr_asset_pymt_csr
3217            (p_orig_chr_id IN NUMBER)
3218     IS
3219     SELECT fin_ast_cle.id,
3220            fin_ast_cle.name
3221     FROM okc_k_lines_v fin_ast_cle,
3222          okc_k_headers_b chr,
3223          okc_line_styles_b fin_ast_lse
3224     WHERE chr.id = p_orig_chr_id
3225     AND   fin_ast_cle.chr_id = chr.id
3226     AND   fin_ast_cle.dnz_chr_id = chr.id
3227     AND   fin_ast_cle.sts_code = chr.sts_code
3228     AND   fin_ast_cle.lse_id = fin_ast_lse.id
3229     AND   fin_ast_lse.lty_code = 'FREE_FORM1';
3230 
3231     CURSOR chk_taa_asset_pymt_csr
3232                   (p_orig_chr_id    IN NUMBER
3233                   ,p_source_trx_id  IN NUMBER)
3234     IS
3235     SELECT fin_ast_cle.id,
3236            fin_ast_cle.name
3237     FROM okl_txl_cntrct_lns tcl,
3238          okc_k_lines_v fin_ast_cle
3239     WHERE tcl.tcn_id = p_source_trx_id
3240     AND   tcl.before_transfer_yn = 'N'
3241     AND   fin_ast_cle.chr_id = p_orig_chr_id
3242     AND   fin_ast_cle.dnz_chr_id = p_orig_chr_id
3243     AND   fin_ast_cle.id = tcl.kle_id;
3244 
3245     CURSOR chk_payment_csr
3246            (p_chr_id       IN NUMBER,
3247             p_cle_id       IN NUMBER) IS
3248     SELECT FND_DATE.canonical_to_date(sll.rule_information2) start_date,
3249            DECODE(sll.rule_information7, NULL,
3250                  (ADD_MONTHS(FND_DATE.canonical_to_date(sll.rule_information2),
3251                    NVL(TO_NUMBER(sll.rule_information3),1) *
3252                    DECODE(sll.object1_id1, 'M',1,'Q',3,'S',6,'A',12)) - 1),
3253                  FND_DATE.canonical_to_date(sll.rule_information2) +
3254                    TO_NUMBER(sll.rule_information7) - 1) end_date
3255     FROM okc_rules_b sll,
3256          okc_rules_b slh,
3257          okc_rule_groups_b rgp,
3258          okl_strm_type_b sty
3259     WHERE rgp.dnz_chr_id = p_chr_id
3260     AND rgp.cle_id = p_cle_id
3261     AND rgp.rgd_code = 'LALEVL'
3262     AND slh.rgp_id = rgp.id
3263     AND slh.rule_information_category = 'LASLH'
3264     AND sll.object2_id1 = slh.id
3265     AND sll.rule_information_category = 'LASLL'
3266     AND sll.rgp_id = rgp.id
3267     AND sty.id = TO_NUMBER(slh.object1_id1)
3268     AND sty.stream_type_purpose = 'RENT';
3269 
3270     l_payment_exists VARCHAR2(1);
3271     --Bug# 4905732
3272 
3273     l_found VARCHAR2(30);
3274     l_icx_date_format     VARCHAR2(240);
3275     l_funding_remaining   NUMBER;
3276     l_term_duration       NUMBER;
3277     l_asset_num_token     VARCHAR2(2000);
3278 
3279   BEGIN
3280     x_return_status := Okl_Api.G_RET_STS_SUCCESS;
3281     -- Call start_activity to create savepoint, check compatibility
3282     -- and initialize message list
3283     l_return_status := Okl_Api.START_ACTIVITY(
3284 			p_api_name      => l_api_name,
3285 			p_pkg_name      => g_pkg_name,
3286 			p_init_msg_list => p_init_msg_list,
3287 			l_api_version   => l_api_version,
3288 			p_api_version   => p_api_version,
3289 			p_api_type      => '_PVT',
3290 			x_return_status => x_return_status);
3291     -- Check if activity started successfully
3292     IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3293        RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3294     ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3295        RAISE Okl_Api.G_EXCEPTION_ERROR;
3296     END IF;
3297 
3298     -- Revision date is mandatory
3299     if (p_release_date IS NULL) then
3300       OKL_API.SET_MESSAGE(G_APP_NAME,
3301                           'OKL_LLA_MISSING_TRX_DATE');
3302       RAISE OKL_API.G_EXCEPTION_ERROR;
3303     end if;
3304 
3305     -- Revision Date should be between Contract Start and End dates
3306     open chr_csr(p_chr_id => p_chr_id);
3307     fetch chr_csr into chr_rec;
3308     close chr_csr;
3309     -- Bug# 4072796
3310     if NOT (p_release_date BETWEEN (chr_rec.start_date + 1) AND chr_rec.end_date) then
3311       l_icx_date_format := nvl(fnd_profile.value('ICX_DATE_FORMAT_MASK'),'DD-MON-RRRR');
3312 
3313       OKL_API.SET_MESSAGE(G_APP_NAME,
3314                           'OKL_LLA_WRONG_TRX_DATE',
3315                           'START_DATE',
3316                           TO_CHAR(chr_rec.start_date,l_icx_date_format),
3317                           'END_DATE',
3318                           TO_CHAR(chr_rec.end_date,l_icx_date_format)
3319                           );
3320       RAISE OKL_API.G_EXCEPTION_ERROR;
3321     end if;
3322 
3323     -- The new Term duration (Re-lease Date to Contract end date)
3324     -- must be a whole number of months
3325     l_term_duration := MONTHS_BETWEEN(chr_rec.end_date + 1,p_release_date);
3326     if (MOD(l_term_duration,1) <> 0) then
3327       OKL_API.SET_MESSAGE(G_APP_NAME,
3328                           'OKL_LLA_REL_INVALID_DURATION');
3329       RAISE OKL_API.G_EXCEPTION_ERROR;
3330     end if;
3331 
3332     -- Validate if Deal Type is Loan or Revolving Loan
3333     if chr_rec.deal_type IN ('LOAN','LOAN-REVOLVING') then
3334       OKL_API.SET_MESSAGE(G_APP_NAME,
3335                           'OKL_LLA_REL_NOT_ALLOW_LOAN');
3336       RAISE OKL_API.G_EXCEPTION_ERROR;
3337     end if;
3338 
3339     -- Validate if Contract has Variable Interest Rate
3340     open rul_csr(p_chr_id   => p_chr_id
3341                 ,p_rgd_code => 'LAIIND'
3342                 ,p_rul_cat  => 'LAINTP');
3343     fetch rul_csr into rul_rec;
3344     close rul_csr;
3345 
3346     if (rul_rec.rule_information1 = 'Y') then
3347       OKL_API.SET_MESSAGE(G_APP_NAME,
3348                           'OKL_LLA_REL_NOT_ALLOW_VAR_RT');
3349       RAISE OKL_API.G_EXCEPTION_ERROR;
3350     end if;
3351    --rajnisku: Bug 6657564
3352   --added if condition to allow TnA for contract with Usage line
3353  	     if NVL(p_release_reason_code,'X') <> 'CUSTOMER_CHANGE' THEN
3354     -- Validate if Usage Line exists
3355     l_found := 'N';
3356     open chk_usage_csr(p_chr_id => p_chr_id);
3357     fetch chk_usage_csr into l_found;
3358     close chk_usage_csr;
3359     if (l_found = 'Y') then
3360       OKL_API.SET_MESSAGE(G_APP_NAME,
3361                           'OKL_LLA_REL_NO_USAGE_LINES');
3362       RAISE OKL_API.G_EXCEPTION_ERROR;
3363     end if;
3364          end if;
3365  	     --rajnisku: Bug 6657564  : end
3366 
3367     -- Bug# 4072796
3368     -- Validate if Contract is undergoing Revision
3369     l_found := 'N';
3370     open pending_trx_csr(p_chr_id => p_chr_id);
3371     fetch pending_trx_csr into l_found;
3372     close pending_trx_csr;
3373     if (l_found = 'Y') then
3374       OKL_API.SET_MESSAGE(G_APP_NAME,
3375                         'OKL_LLA_REV_IN_PROGRESS');
3376       RAISE OKL_API.G_EXCEPTION_ERROR;
3377     end if;
3378 
3379     --Bug# 4905732
3380     -- Validation that assets selected for Re-lease
3381     -- have incomplete Payments
3382 
3383     -- T and A transaction
3384     if (p_source_trx_id IS NOT NULL) then
3385 
3386       l_asset_num_token := null;
3387       for chk_taa_asset_pymt_rec in
3388           chk_taa_asset_pymt_csr
3389                         (p_orig_chr_id   => p_chr_id
3390                         ,p_source_trx_id => p_source_trx_id) loop
3391 
3392         l_payment_exists := 'N';
3393         for chk_payment_rec in chk_payment_csr
3394                                   (p_chr_id => p_chr_id,
3395                                    p_cle_id => chk_taa_asset_pymt_rec.id) loop
3396           if (chk_payment_rec.end_date >= p_release_date) then
3397             l_payment_exists := 'Y';
3398             exit;
3399           end if;
3400         end loop;
3401 
3402         if l_payment_exists = 'N' then
3403           if l_asset_num_token is null then
3404             l_asset_num_token := l_asset_num_token ||chk_taa_asset_pymt_rec.name;
3405           else
3406             l_asset_num_token := l_asset_num_token ||', '||chk_taa_asset_pymt_rec.name;
3407           end if;
3408         end if;
3409       end loop;
3410 
3411       if l_asset_num_token IS NOT NULL then
3412         l_icx_date_format := nvl(fnd_profile.value('ICX_DATE_FORMAT_MASK'),'DD-MON-RRRR');
3413         OKL_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
3414                             p_msg_name     => 'OKL_LLA_REL_ASSET_NO_PYMT',
3415                             p_token1       => 'ASSET_NUMBER',
3416                             p_token1_value => l_asset_num_token,
3417                             p_token2       => 'RELEASE_DATE',
3418                             p_token2_value => to_char(p_release_date,l_icx_date_format));
3419         RAISE OKL_API.G_EXCEPTION_ERROR;
3420       end if;
3421 
3422     -- Re-lease contract
3423     else
3424 
3425       l_asset_num_token := null;
3426       for chk_chr_asset_pymt_rec in
3427           chk_chr_asset_pymt_csr
3428             (p_orig_chr_id   => p_chr_id) loop
3429 
3430         l_payment_exists := 'N';
3431         for chk_payment_rec in chk_payment_csr
3432                                   (p_chr_id => p_chr_id,
3433                                    p_cle_id => chk_chr_asset_pymt_rec.id) loop
3434           if (chk_payment_rec.end_date >= p_release_date) then
3435             l_payment_exists := 'Y';
3436             exit;
3437           end if;
3438         end loop;
3439 
3440         if l_payment_exists = 'N' then
3441           if l_asset_num_token is null then
3442             l_asset_num_token := l_asset_num_token ||chk_chr_asset_pymt_rec.name;
3443           else
3444             l_asset_num_token := l_asset_num_token ||', '||chk_chr_asset_pymt_rec.name;
3445           end if;
3446         end if;
3447       end loop;
3448 
3449       if l_asset_num_token IS NOT NULL then
3450         l_icx_date_format := nvl(fnd_profile.value('ICX_DATE_FORMAT_MASK'),'DD-MON-RRRR');
3451         OKL_API.SET_MESSAGE(p_app_name       => G_APP_NAME,
3452                               p_msg_name     => 'OKL_LLA_REL_ASSET_NO_PYMT',
3453                               p_token1       => 'ASSET_NUMBER',
3454                               p_token1_value => l_asset_num_token,
3455                               p_token2       => 'RELEASE_DATE',
3456                               p_token2_value => to_char(p_release_date,l_icx_date_format));
3457         RAISE OKL_API.G_EXCEPTION_ERROR;
3458       end if;
3459 
3460     end if;
3461     --Bug# 4905732
3462 
3463      --Bug# 5005869
3464     -- Validate information from the
3465     -- Transfer and Assumption request
3466     if (p_source_trx_id IS NOT NULL) then
3467 
3468       validate_taa_request_info
3469         (p_api_version   => p_api_version,
3470          p_init_msg_list => p_init_msg_list,
3471          x_return_status => x_return_status,
3472          x_msg_count     => x_msg_count,
3473          x_msg_data      => x_msg_data,
3474          p_chr_id        => p_chr_id,
3475          p_release_date  => p_release_date,
3476          p_source_trx_id => p_source_trx_id,
3477          p_currency_code => chr_rec.currency_code);
3478 
3479       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3480         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3481       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3482         RAISE OKL_API.G_EXCEPTION_ERROR;
3483       END IF;
3484 
3485     end if;
3486     --Bug# 5005869
3487 
3488     -- Start change fmiao 19-NOV-04 for release date check --
3489     -- Perform the shared validations
3490     validate_release_contract(p_api_version   => p_api_version,
3491                               p_init_msg_list => p_init_msg_list,
3492                               x_return_status => x_return_status,
3493                               x_msg_count     => x_msg_count,
3494                               x_msg_data      => x_msg_data,
3495                               p_chr_id        => p_chr_id,
3496                               p_release_date  => p_release_date,
3497                               p_source_trx_id => p_source_trx_id,
3498 							  p_call_program  => 'RELEASE');
3499     -- End change fmiao 19-NOV-04 for release date check --
3500 
3501       -- Bug# 4072796
3502       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3503         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3504       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3505         RAISE OKL_API.G_EXCEPTION_ERROR;
3506       END IF;
3507 
3508 	OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
3509                          x_msg_data    => x_msg_data);
3510 
3511   EXCEPTION
3512       when OKL_API.G_EXCEPTION_ERROR then
3513 
3514         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3515                         p_api_name  => l_api_name,
3516                         p_pkg_name  => G_PKG_NAME,
3517                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
3518                         x_msg_count => x_msg_count,
3519                         x_msg_data  => x_msg_data,
3520                         p_api_type  => G_API_TYPE);
3521 
3522       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
3523 
3524         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3525                         p_api_name  => l_api_name,
3526                         p_pkg_name  => G_PKG_NAME,
3527                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
3528                         x_msg_count => x_msg_count,
3529                         x_msg_data  => x_msg_data,
3530                         p_api_type  => G_API_TYPE);
3531 
3532       when OTHERS then
3533 
3534         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3535                         p_api_name  => l_api_name,
3536                         p_pkg_name  => G_PKG_NAME,
3537                         p_exc_name  => 'OTHERS',
3538                         x_msg_count => x_msg_count,
3539                         x_msg_data  => x_msg_data,
3540                         p_api_type  => G_API_TYPE);
3541   END validate_release_contract;
3542 
3543    -----------------------------------------------------------------------------------------------
3544 -- Start of Comments
3545 -- Rekha Pillay
3546 -- Procedure Name       : Adjust_Payment_Lines
3547 -- Description          : Adjust Payment lines on the Re-lease contract
3548 -- Business Rules       :
3549 --
3550 --
3551 --
3552 --
3553 --
3554 --
3555 --
3556 -- Parameters           :
3557 -- Version              : 1.0
3558 -- End of Commments
3559   PROCEDURE adjust_payment_lines(p_api_version  IN  NUMBER,
3560                                  p_init_msg_list IN  VARCHAR2,
3561                                  x_return_status OUT NOCOPY VARCHAR2,
3562                                  x_msg_count     OUT NOCOPY NUMBER,
3563                                  x_msg_data      OUT NOCOPY VARCHAR2,
3564                                  p_chr_id        IN  NUMBER,
3565                                  p_release_date  IN  DATE) IS
3566 
3567     l_return_status   VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3568     l_api_name        CONSTANT VARCHAR2(30) := 'ADJUST_PAYMENT_LINES';
3569     l_api_version     CONSTANT NUMBER	:= 1.0;
3570 
3571     CURSOR contract_payment_csr
3572            (p_chr_id       IN NUMBER,
3573             p_release_date IN DATE) IS
3574     SELECT FND_DATE.canonical_to_date(sll.rule_information2) start_date,
3575            DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12)factor,
3576            TO_NUMBER(sll.rule_information3) periods,
3577            DECODE(sll.rule_information7, NULL,
3578                  (ADD_MONTHS(FND_DATE.canonical_to_date(sll.rule_information2),
3579                    NVL(TO_NUMBER(sll.rule_information3),1) *
3580                    DECODE(sll.object1_id1, 'M',1,'Q',3,'S',6,'A',12)) - 1),
3581                  FND_DATE.canonical_to_date(sll.rule_information2) +
3582                    TO_NUMBER(sll.rule_information7) - 1) end_date,
3583            sll.rule_information10   arrears_yn,
3584            TO_NUMBER(sll.rule_information6) amount,
3585            TO_NUMBER(sll.rule_information8) stub_amount,
3586            sll.rule_information5,
3587            sll.rgp_id,
3588            sll.object1_id1,
3589            sll.object1_id2,
3590            sll.jtot_object1_code,
3591            sll.object2_id1,
3592            sll.object2_id2,
3593            sll.jtot_object2_code,
3594            sll.id sll_id
3595     FROM okc_rules_b sll,
3596          okc_rules_b slh,
3597          okc_rule_groups_b rgp
3598     WHERE rgp.dnz_chr_id = p_chr_id
3599     AND rgp.rgd_code = 'LALEVL'
3600     AND slh.rgp_id = rgp.id
3601     AND slh.rule_information_category = 'LASLH'
3602     AND sll.object2_id1 = slh.id
3603     AND sll.rule_information_category = 'LASLL'
3604     AND sll.rgp_id = rgp.id
3605     AND FND_DATE.canonical_to_date(sll.rule_information2) < p_release_date;
3606 
3607     CURSOR slh_csr(p_chr_id       IN NUMBER) IS
3608     SELECT slh.id slh_id
3609     FROM okc_rules_b slh
3610     WHERE slh.dnz_chr_id = p_chr_id
3611     AND   slh.rule_information_category = 'LASLH'
3612     AND NOT EXISTS (SELECT NULL FROM okc_rules_b sll
3613                     WHERE sll.object2_id1 = slh.id
3614                     AND sll.rule_information_category = 'LASLL'
3615                     AND sll.dnz_chr_id = slh.dnz_chr_id);
3616 
3617     CURSOR rgp_csr(p_chr_id       IN NUMBER) IS
3618     SELECT rgp.id rgp_id
3619     FROM  okc_rule_groups_b rgp
3620     WHERE rgp.dnz_chr_id = p_chr_id
3621     AND   rgp.rgd_code = 'LALEVL'
3622     AND NOT EXISTS (SELECT NULL FROM okc_rules_b slh
3623                     WHERE slh.rgp_id = rgp.id
3624                     AND slh.rule_information_category = 'LASLH');
3625 
3626     l_rulv_rec  OKL_RULE_PUB.rulv_rec_type;
3627     lx_rulv_rec OKL_RULE_PUB.rulv_rec_type;
3628     l_rgpv_rec  OKL_RULE_PUB.rgpv_rec_type;
3629 
3630     l_rulv_temp_rec  OKL_RULE_PUB.rulv_rec_type;
3631     l_rgpv_temp_rec  OKL_RULE_PUB.rgpv_rec_type;
3632 
3633     l_no_of_periods   NUMBER;
3634     l_periods_to_skip NUMBER;
3635     l_new_start_date  DATE;
3636     l_stub_amount     NUMBER;
3637     l_stub_days       NUMBER;
3638   BEGIN
3639     x_return_status := Okl_Api.G_RET_STS_SUCCESS;
3640     -- Call start_activity to create savepoint, check compatibility
3641     -- and initialize message list
3642     l_return_status := Okl_Api.START_ACTIVITY(
3643 			p_api_name      => l_api_name,
3644 			p_pkg_name      => g_pkg_name,
3645 			p_init_msg_list => p_init_msg_list,
3646 			l_api_version   => l_api_version,
3647 			p_api_version   => p_api_version,
3648 			p_api_type      => '_PVT',
3649 			x_return_status => x_return_status);
3650     -- Check if activity started successfully
3651     IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3652        RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3653     ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3654        RAISE Okl_Api.G_EXCEPTION_ERROR;
3655     END IF;
3656 
3657     for contract_payment_rec in contract_payment_csr
3658                                   (p_chr_id => p_chr_id,
3659                                    p_release_date => p_release_date) loop
3660 
3661       l_rulv_rec := l_rulv_temp_rec;
3662 
3663       -- Delete SLL where End Date is earlier than Re-lease date
3664       if (contract_payment_rec.end_date < p_release_date) then
3665         l_rulv_rec.id := contract_payment_rec.sll_id; -- SLL Rule ID
3666         okl_rule_pub.delete_rule(
3667                          p_api_version    => p_api_version,
3668                          p_init_msg_list  => p_init_msg_list,
3669                          x_return_status  => x_return_status,
3670                          x_msg_count      => x_msg_count,
3671                          x_msg_data       => x_msg_data,
3672                          p_rulv_rec       => l_rulv_rec
3673                         );
3674         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3675            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3676         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3677            RAISE OKL_API.G_EXCEPTION_ERROR;
3678         END IF;
3679 
3680       -- Update SLL Start Date, Periods and Amount where End Date is greater than
3681       -- or equal to Re-lease date and Start Date is less than Re-lease date
3682       elsif (contract_payment_rec.end_date >= p_release_date) then
3683 
3684         -- Convert Payment line to a Stub starting on Re-lease date
3685         -- if there is only 1 period or if it is a stub payment
3686         if NVL(contract_payment_rec.periods,1) = 1 then
3687 
3688             l_rulv_rec.id := contract_payment_rec.sll_id; -- SLL Rule ID
3689 
3690             l_stub_days :=  contract_payment_rec.end_date - p_release_date + 1;
3691 
3692             -- Payment in Arrears
3693             if (contract_payment_rec.arrears_yn = 'Y') then
3694                 l_stub_amount := NVL(contract_payment_rec.amount,contract_payment_rec.stub_amount);
3695 
3696             -- Payment in Advance
3697             else
3698               l_stub_amount := 0;
3699             end if;
3700 
3701             l_rulv_rec.rule_information2 := FND_DATE.date_to_canonical(p_release_date);
3702             l_rulv_rec.rule_information3 := NULL;
3703             l_rulv_rec.rule_information6 := NULL;
3704             l_rulv_rec.rule_information7 := TO_CHAR(l_stub_days);
3705             l_rulv_rec.rule_information8 := TO_CHAR(l_stub_amount);
3706 
3707             OKL_RULE_PUB.update_rule(
3708                     p_api_version        => p_api_version,
3709                     p_init_msg_list      => p_init_msg_list,
3710                     x_return_status      => x_return_status,
3711                     x_msg_count          => x_msg_count,
3712                     x_msg_data           => x_msg_data,
3713                     p_rulv_rec           => l_rulv_rec,
3714                     x_rulv_rec           => lx_rulv_rec);
3715 
3716             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3717               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3718             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3719               RAISE OKL_API.G_EXCEPTION_ERROR;
3720             END IF;
3721 
3722         elsif (contract_payment_rec.periods > 1) then
3723 
3724           if (contract_payment_rec.factor IS NOT NULL and contract_payment_rec.factor > 0 ) then
3725 
3726               l_rulv_rec.id := contract_payment_rec.sll_id; -- SLL Rule ID
3727 
3728               l_periods_to_skip :=
3729                 CEIL(CEIL(MONTHS_BETWEEN(p_release_date,contract_payment_rec.start_date))/contract_payment_rec.factor);
3730 
3731               l_new_start_date := ADD_MONTHS(contract_payment_rec.start_date,
3732                                            l_periods_to_skip * contract_payment_rec.factor);
3733 
3734               if (l_new_start_date > contract_payment_rec.end_date) then
3735 
3736                 -- No periodic payment, only stub payment needed
3737                 OKL_RULE_PUB.delete_rule(
3738                          p_api_version    => p_api_version,
3739                          p_init_msg_list  => p_init_msg_list,
3740                          x_return_status  => x_return_status,
3741                          x_msg_count      => x_msg_count,
3742                          x_msg_data       => x_msg_data,
3743                          p_rulv_rec       => l_rulv_rec
3744                         );
3745                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3746                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3747                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3748                   RAISE OKL_API.G_EXCEPTION_ERROR;
3749                 END IF;
3750 
3751               else
3752 
3753                 l_rulv_rec.rule_information2 := FND_DATE.date_to_canonical(l_new_start_date);
3754 
3755                 l_no_of_periods := MONTHS_BETWEEN((contract_payment_rec.end_date + 1),l_new_start_date)/contract_payment_rec.factor;
3756                 l_rulv_rec.rule_information3 := TO_CHAR(l_no_of_periods);
3757 
3758                 OKL_RULE_PUB.update_rule(
3759                     p_api_version        => p_api_version,
3760                     p_init_msg_list      => p_init_msg_list,
3761                     x_return_status      => x_return_status,
3762                     x_msg_count          => x_msg_count,
3763                     x_msg_data           => x_msg_data,
3764                     p_rulv_rec           => l_rulv_rec,
3765                     x_rulv_rec           => lx_rulv_rec);
3766 
3767                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3768                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3769                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3770                   RAISE OKL_API.G_EXCEPTION_ERROR;
3771                 END IF;
3772               end if;
3773 
3774               -- Create Stub payment line for 1st payment
3775               l_rulv_rec := l_rulv_temp_rec;
3776 
3777               l_stub_days :=  l_new_start_date - p_release_date;
3778               if (l_stub_days > 0) then
3779 
3780                 -- Payment in Arrears
3781                 if (contract_payment_rec.arrears_yn = 'Y') then
3782                   l_stub_amount := contract_payment_rec.amount;
3783 
3784                 -- Payment in Advance
3785                 else
3786                   l_stub_amount := 0;
3787                 end if;
3788 
3789                 l_rulv_rec.dnz_chr_id        := p_chr_id;
3790                 l_rulv_rec.rgp_id            := contract_payment_rec.rgp_id;
3791                 l_rulv_rec.object1_id1       := contract_payment_rec.object1_id1;
3792                 l_rulv_rec.object1_id2       := contract_payment_rec.object1_id2;
3793                 l_rulv_rec.jtot_object1_code := contract_payment_rec.jtot_object1_code;
3794                 l_rulv_rec.object2_id1       := contract_payment_rec.object2_id1;
3795                 -- nikshah 25-Nov-08 bug # 6697542
3796                 l_rulv_rec.object2_id2       := '#'; --contract_payment_rec.object2_id2;
3797                 -- nikshah 25-Nov-08 bug # 6697542
3798                 l_rulv_rec.jtot_object2_code := contract_payment_rec.jtot_object2_code;
3799                 l_rulv_rec.std_template_yn   := 'N';
3800                 l_rulv_rec.warn_yn           := 'N';
3801                 l_rulv_rec.template_yn       := 'N';
3802                 l_rulv_rec.sfwt_flag         := 'N';
3803                 l_rulv_rec.rule_information_category := 'LASLL';
3804                 l_rulv_rec.rule_information2 := FND_DATE.date_to_canonical(p_release_date);
3805                 l_rulv_rec.rule_information5 := contract_payment_rec.rule_information5;
3806                 l_rulv_rec.rule_information7 := TO_CHAR(l_stub_days);
3807                 l_rulv_rec.rule_information8 := TO_CHAR(l_stub_amount);
3808                 l_rulv_rec.rule_information10 := contract_payment_rec.arrears_yn;
3809 
3810                 OKL_RULE_PUB.create_rule(
3811                     p_api_version        => p_api_version,
3812                     p_init_msg_list      => p_init_msg_list,
3813                     x_return_status      => x_return_status,
3814                     x_msg_count          => x_msg_count,
3815                     x_msg_data           => x_msg_data,
3816                     p_rulv_rec           => l_rulv_rec,
3817                     x_rulv_rec           => lx_rulv_rec);
3818 
3819                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3820                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3821                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3822                   RAISE OKL_API.G_EXCEPTION_ERROR;
3823                 END IF;
3824               end if; --Stub days greater than 0
3825           end if; --Factor is not null
3826         end if; --Periods equal/greater than 1
3827       end if; --End date less/greater than Release date
3828     end loop;
3829 
3830     for slh_rec in slh_csr(p_chr_id => p_chr_id) loop
3831         l_rulv_rec := l_rulv_temp_rec;
3832 
3833         l_rulv_rec.id := slh_rec.slh_id; -- SLH Rule ID
3834         okl_rule_pub.delete_rule(
3835                          p_api_version    => p_api_version,
3836                          p_init_msg_list  => p_init_msg_list,
3837                          x_return_status  => x_return_status,
3838                          x_msg_count      => x_msg_count,
3839                          x_msg_data       => x_msg_data,
3840                          p_rulv_rec       => l_rulv_rec
3841                         );
3842         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3843            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3844         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3845            RAISE OKL_API.G_EXCEPTION_ERROR;
3846         END IF;
3847     end loop;
3848 
3849     for rgp_rec in rgp_csr(p_chr_id => p_chr_id) loop
3850         l_rgpv_rec := l_rgpv_temp_rec;
3851 
3852         l_rgpv_rec.id := rgp_rec.rgp_id; -- Rule Group ID
3853         okl_rule_pub.delete_rule_group(
3854                      p_api_version    => p_api_version,
3855                      p_init_msg_list  => p_init_msg_list,
3856                      x_return_status  => x_return_status,
3857                      x_msg_count      => x_msg_count,
3858                      x_msg_data       => x_msg_data,
3859                      p_rgpv_rec       => l_rgpv_rec
3860                      );
3861         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3862            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3863         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
3864            RAISE OKL_API.G_EXCEPTION_ERROR;
3865         END IF;
3866     end loop;
3867 
3868     OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
3869                          x_msg_data    => x_msg_data);
3870 
3871   EXCEPTION
3872       when OKL_API.G_EXCEPTION_ERROR then
3873 
3874         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3875                         p_api_name  => l_api_name,
3876                         p_pkg_name  => G_PKG_NAME,
3877                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
3878                         x_msg_count => x_msg_count,
3879                         x_msg_data  => x_msg_data,
3880                         p_api_type  => G_API_TYPE);
3881 
3882       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
3883 
3884         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3885                         p_api_name  => l_api_name,
3886                         p_pkg_name  => G_PKG_NAME,
3887                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
3888                         x_msg_count => x_msg_count,
3889                         x_msg_data  => x_msg_data,
3890                         p_api_type  => G_API_TYPE);
3891 
3892       when OTHERS then
3893 
3894         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3895                         p_api_name  => l_api_name,
3896                         p_pkg_name  => G_PKG_NAME,
3897                         p_exc_name  => 'OTHERS',
3898                         x_msg_count => x_msg_count,
3899                         x_msg_data  => x_msg_data,
3900                         p_api_type  => G_API_TYPE);
3901   END adjust_payment_lines;
3902 
3903 -----------------------------------------------------------------------------------------------
3904 -- Start of Comments
3905 -- Rekha Pillay
3906 -- Procedure Name       : Get_Principal_bal
3907 -- Description          : Get prinicipal balance amount
3908 -- Business Rules       :
3909 --
3910 --
3911 --
3912 --
3913 --
3914 --
3915 --
3916 -- Parameters           :
3917 -- Version              : 1.0
3918 -- End of Commments
3919   PROCEDURE  get_principal_bal(p_api_version         IN  NUMBER,
3920                                p_init_msg_list       IN  VARCHAR2,
3921                                p_pymt_sty_id         IN  NUMBER,
3922                                p_orig_chr_id         IN  NUMBER,
3923                                p_orig_cle_id         IN  NUMBER,
3924                                p_release_date        IN  DATE,
3925                                x_principal_balance   OUT NOCOPY NUMBER,
3926                                x_accumulated_int     OUT NOCOPY NUMBER,
3927                                x_return_status       OUT NOCOPY VARCHAR2,
3928                                x_msg_count           OUT NOCOPY NUMBER,
3929                                x_msg_data            OUT NOCOPY VARCHAR2) IS
3930 
3931   l_return_status   VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
3932   l_api_name        CONSTANT VARCHAR2(30) := 'Get_Principal_Bal';
3933   l_api_version     CONSTANT NUMBER	:= 1.0;
3934 
3935   CURSOR streams_csr(p_chr_id IN NUMBER,
3936                      p_cle_id IN NUMBER,
3937                      p_sty_id IN NUMBER)
3938   IS
3939   SELECT  stm.id
3940   FROM    okl_streams       stm
3941   WHERE   stm.khr_id      = p_chr_id
3942   AND     stm.kle_id      = p_cle_id
3943   AND     stm.sty_id      = p_sty_id
3944   AND     stm.active_yn   = 'Y'
3945   AND     stm.say_code    = 'CURR';
3946 
3947   streams_rec streams_csr%ROWTYPE;
3948 
3949   CURSOR principal_bal_csr(p_stm_id IN NUMBER,
3950                            p_release_date IN DATE)
3951   IS
3952   SELECT stream_element_date,
3953          amount
3954   FROM   okl_strm_elements_v sel
3955   WHERE  sel.stm_id = p_stm_id
3956   AND    stream_element_date < p_release_date
3957   ORDER BY stream_element_date DESC;
3958 
3959   principal_bal_rec principal_bal_csr%ROWTYPE;
3960   l_principal_bal NUMBER;
3961   l_principal_bal_sty_id NUMBER;
3962 
3963 BEGIN
3964     x_return_status := Okl_Api.G_RET_STS_SUCCESS;
3965     -- Call start_activity to create savepoint, check compatibility
3966     -- and initialize message list
3967     l_return_status := Okl_Api.START_ACTIVITY(
3968 			p_api_name      => l_api_name,
3969 			p_pkg_name      => g_pkg_name,
3970 			p_init_msg_list => p_init_msg_list,
3971 			l_api_version   => l_api_version,
3972 			p_api_version   => p_api_version,
3973 			p_api_type      => '_PVT',
3974 			x_return_status => x_return_status);
3975     -- Check if activity started successfully
3976     IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
3977        RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
3978     ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
3979        RAISE Okl_Api.G_EXCEPTION_ERROR;
3980     END IF;
3981 
3982     -- Fetch Stream information from Original Contract
3983     l_principal_bal_sty_id := null;
3984     OKL_STREAMS_UTIL.get_dependent_stream_type
3985        (p_khr_id                  => p_orig_chr_id,
3986         p_primary_sty_id          => p_pymt_sty_id,
3987         p_dependent_sty_purpose   => 'PRINCIPAL_BALANCE',
3988         x_return_status           => x_return_status,
3989         x_dependent_sty_id        => l_principal_bal_sty_id);
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 
3997     l_principal_bal := 0;
3998     if (l_principal_bal_sty_id IS NOT NULL) then
3999       open streams_csr(p_chr_id => p_orig_chr_id,
4000                        p_cle_id => p_orig_cle_id,
4001                        p_sty_id => l_principal_bal_sty_id);
4002       fetch streams_csr into streams_rec;
4003       close streams_csr;
4004 
4005       if (streams_rec.id IS NOT NULL) then
4006 
4007         open principal_bal_csr(p_stm_id       => streams_rec.id,
4008                                p_release_date => p_release_date);
4009         fetch principal_bal_csr into principal_bal_rec;
4010         close principal_bal_csr;
4011 
4012         l_principal_bal := principal_bal_rec.amount;
4013 
4014       end if; --Fee Payment Stream Id is not null
4015     end if; --Fee Payment Stream Type Id is not null
4016 
4017     x_principal_balance := l_principal_bal;
4018     x_accumulated_int := 0;
4019 
4020     OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
4021                          x_msg_data    => x_msg_data);
4022 
4023   EXCEPTION
4024       when OKL_API.G_EXCEPTION_ERROR then
4025 
4026         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4027                         p_api_name  => l_api_name,
4028                         p_pkg_name  => G_PKG_NAME,
4029                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
4030                         x_msg_count => x_msg_count,
4031                         x_msg_data  => x_msg_data,
4032                         p_api_type  => G_API_TYPE);
4033 
4034       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
4035 
4036         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4037                         p_api_name  => l_api_name,
4038                         p_pkg_name  => G_PKG_NAME,
4039                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
4040                         x_msg_count => x_msg_count,
4041                         x_msg_data  => x_msg_data,
4042                         p_api_type  => G_API_TYPE);
4043 
4044       when OTHERS then
4045 
4046         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4047                         p_api_name  => l_api_name,
4048                         p_pkg_name  => G_PKG_NAME,
4049                         p_exc_name  => 'OTHERS',
4050                         x_msg_count => x_msg_count,
4051                         x_msg_data  => x_msg_data,
4052                         p_api_type  => G_API_TYPE);
4053   END get_principal_bal;
4054 
4055 -----------------------------------------------------------------------------------------------
4056 -- Start of Comments
4057 -- Rekha Pillay
4058 -- Procedure Name       : Adjust_Fee_Lines
4059 -- Description          : Adjust Fee lines on the Re-lease contract
4060 -- Business Rules       :
4061 --
4062 --
4063 --
4064 --
4065 --
4066 --
4067 --
4068 -- Parameters           :
4069 -- Version              : 1.0
4070 -- End of Commments
4071   PROCEDURE adjust_fee_lines(p_api_version   IN  NUMBER,
4072                              p_init_msg_list IN  VARCHAR2,
4073                              x_return_status OUT NOCOPY VARCHAR2,
4074                              x_msg_count     OUT NOCOPY NUMBER,
4075                              x_msg_data      OUT NOCOPY VARCHAR2,
4076                              p_chr_id        IN  NUMBER,
4077                              p_orig_chr_id   IN  NUMBER,
4078                              p_release_date  IN  DATE) IS
4079 
4080     l_return_status   VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
4081     l_api_name        CONSTANT VARCHAR2(30) := 'ADJUST_FEE_LINES';
4082     l_api_version     CONSTANT NUMBER	:= 1.0;
4083 
4084     CURSOR contract_fee_csr
4085            (p_chr_id       IN NUMBER) IS
4086     SELECT cle.id,
4087            cle.start_date,
4088            cle.end_date,
4089            kle.amount,
4090            kle.initial_direct_cost,
4091            kle.fee_type,
4092            cle.chr_id,
4093            cle.dnz_chr_id,
4094            cle.cle_id,
4095            sts.ste_code,
4096            cle.orig_system_id1
4097     FROM okc_k_lines_b cle,
4098          okl_k_lines kle,
4099          okc_line_styles_b lse,
4100          okc_statuses_b sts
4101     WHERE cle.dnz_chr_id = p_chr_id
4102     AND cle.chr_id =  p_chr_id
4103     AND  kle.id = cle.id
4104     AND  cle.lse_id = lse.id
4105     AND  lse.lty_code = 'FEE'
4106     AND  cle.sts_code = sts.code;
4107 
4108     CURSOR orig_cle_sts_csr(p_cle_id IN NUMBER)
4109     IS
4110     SELECT sts.ste_code
4111     FROM   okc_k_lines_b cle,
4112            okc_statuses_b sts
4113     WHERE  cle.id = p_cle_id
4114     AND    cle.sts_code = sts.code;
4115 
4116     orig_cle_sts_rec orig_cle_sts_csr%ROWTYPE;
4117 
4118     CURSOR fee_expense_csr
4119            (p_chr_id       IN NUMBER,
4120             p_cle_id       IN NUMBER) IS
4121     SELECT DECODE(rul_lafreq.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12)factor,
4122            TO_NUMBER(rul_lafexp.rule_information1) periods,
4123            TO_NUMBER(rul_lafexp.rule_information2) amount,
4124            rul_lafexp.id  rul_lafexp_id,
4125            rul_lafreq.id  rul_lafreq_id,
4126            rgp.id         rgp_id
4127     FROM   okc_rules_b rul_lafexp,
4128            okc_rules_b rul_lafreq,
4129            okc_rule_groups_b rgp
4130     WHERE  rgp.dnz_chr_id = p_chr_id
4131     AND   rgp.cle_id = p_cle_id
4132     AND   rgp.rgd_code = 'LAFEXP'
4133     AND   rul_lafreq.rgp_id = rgp.id
4134     AND   rul_lafreq.rule_information_category = 'LAFREQ'
4135     AND   rul_lafexp.rgp_id = rgp.id
4136     AND   rul_lafexp.rule_information_category = 'LAFEXP';
4137 
4138     fee_expense_rec fee_expense_csr%ROWTYPE;
4139 
4140     CURSOR fee_subline_csr (p_cle_id IN NUMBER,
4141                             p_chr_id IN NUMBER) IS
4142     SELECT cle.id,
4143            NVL(kle.capital_amount,0) capital_amount,
4144            NVL(kle.amount,0) amount,
4145            cle.chr_id,
4146            cle.dnz_chr_id,
4147            cle.cle_id,
4148            --avsingh
4149            cle.orig_system_id1
4150     FROM   okc_k_lines_b cle,
4151            okl_k_lines kle
4152     WHERE  cle.cle_id   = p_cle_id
4153     AND    cle.dnz_chr_id = p_chr_id
4154     AND    cle.id = kle.id;
4155 
4156 	CURSOR check_pymts_csr(p_chr_id IN NUMBER,
4157                            p_cle_id IN NUMBER) IS
4158     SELECT 'Y'  pymt_exists,
4159            rgp.id
4160     FROM   okc_rule_groups_b rgp
4161     WHERE  rgp.cle_id   = p_cle_id
4162     AND    rgp.dnz_chr_id = p_chr_id
4163     AND    rgp.rgd_code  = 'LALEVL';
4164 
4165     l_pymt_exists VARCHAR2(30);
4166     l_rgp_id      okc_rule_groups_b.id%TYPE;
4167 
4168     CURSOR fee_item_csr(p_chr_id IN NUMBER,
4169                         p_cle_id IN NUMBER) IS
4170     SELECT fee_cim.id,
4171            fee_cim.object1_id1
4172     FROM   okc_k_items fee_cim
4173     WHERE  fee_cim.cle_id = p_cle_id
4174     AND    fee_cim.dnz_chr_id = p_chr_id
4175     AND    fee_cim.jtot_object1_code = 'OKL_STRMTYP';
4176 
4177     fee_item_rec fee_item_csr%ROWTYPE;
4178 
4179     CURSOR pymt_details_csr(p_chr_id   IN NUMBER,
4180                             p_rgp_id   IN NUMBER,
4181                             p_rul_cat  IN VARCHAR2) IS
4182     SELECT crl.object1_id1,
4183            crl.rule_information3,
4184            crl.rule_information6,
4185            crl.rule_information8
4186     FROM   okc_rules_b crl
4187     WHERE  crl.rgp_id = p_rgp_id
4188     AND    crl.dnz_chr_id = p_chr_id
4189     AND    crl.rule_information_category = p_rul_cat;
4190 
4191     pymt_details_rec pymt_details_csr%ROWTYPE;
4192 
4193     l_pymt_amount NUMBER;
4194 
4195     l_rulv_rec  OKL_RULE_PUB.rulv_rec_type;
4196     lx_rulv_rec OKL_RULE_PUB.rulv_rec_type;
4197 
4198     l_rgpv_rec  OKL_RULE_PUB.rgpv_rec_type;
4199 
4200     l_periods_bef_release NUMBER;
4201     l_orig_no_of_periods  NUMBER;
4202     l_new_no_of_periods   NUMBER;
4203     l_new_fee_amount      NUMBER;
4204     l_new_idc_amount      NUMBER;
4205 
4206     lp_klev_rec  okl_kle_pvt.klev_rec_type;
4207     lp_clev_rec  okl_okc_migration_pvt.clev_rec_type;
4208 
4209     lx_klev_rec  okl_kle_pvt.klev_rec_type;
4210     lx_clev_rec  okl_okc_migration_pvt.clev_rec_type;
4211 
4212     lp_sub_clev_tbl  okl_okc_migration_pvt.clev_tbl_type;
4213     lx_sub_clev_tbl  okl_okc_migration_pvt.clev_tbl_type;
4214     lp_sub_clev_rec  okl_okc_migration_pvt.clev_rec_type;
4215 
4216     lp_sub_klev_tbl  okl_kle_pvt.klev_tbl_type;
4217     lx_sub_klev_tbl  okl_kle_pvt.klev_tbl_type;
4218     lp_sub_klev_rec  okl_kle_pvt.klev_rec_type;
4219 
4220     lp_cimv_rec      okl_okc_migration_pvt.cimv_rec_type;
4221     lx_cimv_rec      okl_okc_migration_pvt.cimv_rec_type;
4222 
4223     lp_clev_temp_tbl okl_okc_migration_pvt.clev_tbl_type;
4224     lp_clev_temp_rec okl_okc_migration_pvt.clev_rec_type;
4225     lp_klev_temp_tbl okl_kle_pvt.klev_tbl_type;
4226     lp_klev_temp_rec okl_kle_pvt.klev_rec_type;
4227     lp_cimv_temp_rec okl_okc_migration_pvt.cimv_rec_type;
4228     l_rulv_temp_rec  okl_rule_pub.rulv_rec_type;
4229 
4230     l_subline_present      VARCHAR2(1);
4231     l_sub_cap_amt          NUMBER;
4232     i NUMBER;
4233     l_idc_sty_id           NUMBER;
4234     l_fin_fee_pymt_sty_id  NUMBER;
4235     l_rlvr_fee_pymt_sty_id NUMBER;
4236 
4237     CURSOR streams_csr(p_chr_id IN NUMBER,
4238                        p_cle_id IN NUMBER,
4239                        p_sty_id IN NUMBER)
4240     IS
4241     SELECT  stm.id
4242     FROM    okl_streams       stm
4243     WHERE   stm.khr_id      = p_chr_id
4244     AND     stm.kle_id      = p_cle_id
4245     AND     stm.sty_id      = p_sty_id
4246     AND     stm.active_yn   = 'Y'
4247     AND     stm.say_code    = 'CURR';
4248 
4249     streams_rec streams_csr%ROWTYPE;
4250 
4251     CURSOR unamort_idc_exp_csr(p_stm_id IN NUMBER,
4252                                p_release_date IN DATE)
4253     IS
4254     SELECT SUM(amount) amount
4255     FROM   okl_strm_elements_v sel
4256     WHERE  sel.stm_id = p_stm_id
4257     AND    stream_element_date >= p_release_date;
4258 
4259     unamort_idc_exp_rec unamort_idc_exp_csr%ROWTYPE;
4260 
4261     CURSOR principal_bal_csr(p_stm_id IN NUMBER,
4262                              p_release_date IN DATE)
4263     IS
4264     SELECT stream_element_date,
4265            amount
4266     FROM   okl_strm_elements_v sel
4267     WHERE  sel.stm_id = p_stm_id
4268     AND    stream_element_date < p_release_date
4269     ORDER BY stream_element_date DESC;
4270 
4271     principal_bal_rec principal_bal_csr%ROWTYPE;
4272 
4273     l_rlvr_sub_amt   NUMBER;
4274     l_rlvr_sub_total NUMBER;
4275     l_sum            NUMBER;
4276 
4277     CURSOR curr_hdr_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
4278     SELECT currency_code
4279     FROM   okc_k_headers_b
4280     WHERE  id = p_chr_id;
4281 
4282     l_currency_code OKC_K_LINES_B.CURRENCY_CODE%TYPE;
4283 
4284     l_principal_bal NUMBER;
4285     l_accumulated_int NUMBER;
4286 
4287 	-- Start change for rollover by fmiao on 12-NOV-2004--
4288 	CURSOR fee_type_csr (p_line_id NUMBER) IS
4289 	SELECT fee_type
4290 	FROM   okl_k_lines
4291     WHERE  id = p_line_id;
4292 
4293 	l_fee_type   okl_k_lines.fee_type%TYPE;
4294 	-- End change for rollover by fmiao on 12-NOV-2004--
4295 
4296   BEGIN
4297     x_return_status := Okl_Api.G_RET_STS_SUCCESS;
4298     -- Call start_activity to create savepoint, check compatibility
4299     -- and initialize message list
4300     l_return_status := Okl_Api.START_ACTIVITY(
4301 			p_api_name      => l_api_name,
4302 			p_pkg_name      => g_pkg_name,
4303 			p_init_msg_list => p_init_msg_list,
4304 			l_api_version   => l_api_version,
4305 			p_api_version   => p_api_version,
4306 			p_api_type      => '_PVT',
4307 			x_return_status => x_return_status);
4308     -- Check if activity started successfully
4309     IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
4310        RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
4311     ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
4312        RAISE Okl_Api.G_EXCEPTION_ERROR;
4313     END IF;
4314 
4315     l_currency_code := '?';
4316     open curr_hdr_csr (p_chr_id);
4317     fetch curr_hdr_csr into l_currency_code;
4318     close curr_hdr_csr;
4319 
4320     if (l_currency_code = '?') then
4321 
4322       OKL_API.set_message(p_app_name     => G_APP_NAME,
4323                           p_msg_name     => G_REQUIRED_VALUE,
4324                           p_token1       => G_COL_NAME_TOKEN,
4325                           p_token1_value => 'Currency Code');
4326       RAISE OKL_API.G_EXCEPTION_ERROR;
4327     end if;
4328 
4329     for contract_fee_rec in contract_fee_csr
4330                                  (p_chr_id => p_chr_id) loop
4331 
4332       l_rulv_rec      := l_rulv_temp_rec;
4333       lp_clev_rec     := lp_clev_temp_rec;
4334       lp_klev_rec     := lp_klev_temp_rec;
4335       lp_sub_clev_rec := lp_clev_temp_rec;
4336       lp_sub_clev_tbl := lp_clev_temp_tbl;
4337       lp_sub_klev_rec := lp_klev_temp_rec;
4338       lp_sub_klev_tbl := lp_klev_temp_tbl;
4339       lp_cimv_rec     := lp_cimv_temp_rec;
4340 
4341       -- Delete Fee Lines where End Date is earlier than Re-lease date
4342       -- or Fee Type = Security Deposit
4343       -- or Line Status is not Active
4344 
4345       -- Fetch Status of the Line in original contract
4346       open orig_cle_sts_csr(p_cle_id => contract_fee_rec.orig_system_id1);
4347       fetch orig_cle_sts_csr into orig_cle_sts_rec;
4348       close orig_cle_sts_csr;
4349 
4350       if (contract_fee_rec.end_date < p_release_date) or
4351          (contract_fee_rec.ste_code IN ('TERMINATED', 'EXPIRED', 'CANCELLED')) or
4352          (orig_cle_sts_rec.ste_code IN ('TERMINATED', 'EXPIRED', 'CANCELLED')) then
4353 
4354         OKL_CONTRACT_PUB.delete_contract_line(
4355           p_api_version   => p_api_version,
4356           p_init_msg_list => p_init_msg_list,
4357           x_return_status => x_return_status,
4358           x_msg_count     => x_msg_count,
4359           x_msg_data      => x_msg_data,
4360           p_line_id       => contract_fee_rec.id
4361         );
4362 
4363         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4364           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4365         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4366           RAISE OKL_API.G_EXCEPTION_ERROR;
4367         END IF;
4368 
4369       -- If Fee Line Start date is greater than or equal to Re-lease Date
4370       -- make updates for Covered assets not moved over
4371       elsif (contract_fee_rec.start_date >= p_release_date) then
4372 
4373         -- Update Capitalized Fee Amount to Sum of Covered Asset amounts
4374         -- if they are not equal
4375         if (contract_fee_rec.fee_type = 'CAPITALIZED') then
4376 
4377           l_subline_present := 'N';
4378           l_sub_cap_amt     := 0;
4379 
4380           i := 0;
4381           for fee_subline_rec in fee_subline_csr
4382                 (p_cle_id => contract_fee_rec.id,
4383                  p_chr_id => p_chr_id)
4384           loop
4385             i := i + 1;
4386             l_subline_present := 'Y';
4387             l_sub_cap_amt := l_sub_cap_amt + fee_subline_rec.capital_amount;
4388           end loop;
4389 
4390           -- No Covered assets associated with Fee
4391           if (l_subline_present = 'N') then
4392 
4393             -- Delete Capitalized Fee line if no Covered Assets are present
4394             OKL_CONTRACT_PUB.delete_contract_line(
4395                 p_api_version   => p_api_version,
4396                 p_init_msg_list => p_init_msg_list,
4397                 x_return_status => x_return_status,
4398                 x_msg_count     => x_msg_count,
4399                 x_msg_data      => x_msg_data,
4400                 p_line_id       => contract_fee_rec.id
4401                );
4402 
4403             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4404               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4405             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4406               RAISE OKL_API.G_EXCEPTION_ERROR;
4407             END IF;
4408 
4409           -- Covered assets associated with Fee
4410           else
4411 
4412             -- Set the capital_amount on capitalized fee top line equal
4413             -- to the sum of capital_amount on capitalized fee sublines
4414             if (contract_fee_rec.amount <> l_sub_cap_amt) then
4415 
4416               lp_clev_rec.id := contract_fee_rec.id;
4417 
4418               lp_klev_rec.id := contract_fee_rec.id;
4419               lp_klev_rec.amount :=l_sub_cap_amt;
4420               lp_klev_rec.capital_amount := l_sub_cap_amt;
4421 
4422               OKL_CONTRACT_PUB.update_contract_line(
4423                 p_api_version         => p_api_version,
4424                 p_init_msg_list       => p_init_msg_list,
4425                 x_return_status       => x_return_status,
4426                 x_msg_count           => x_msg_count,
4427                 x_msg_data            => x_msg_data,
4428                 p_clev_rec            => lp_clev_rec,
4429                 p_klev_rec            => lp_klev_rec,
4430                 x_clev_rec            => lx_clev_rec,
4431                 x_klev_rec            => lx_klev_rec
4432               );
4433 
4434               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4435                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4436               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4437                 RAISE OKL_API.G_EXCEPTION_ERROR;
4438               END IF;
4439             end if;
4440 
4441           end if; --Subline Present Y/N
4442 
4443         -- Update Rollover Fee Amount to Sum of Covered Asset amounts
4444         -- if they are not equal
4445         elsif (contract_fee_rec.fee_type = 'ROLLOVER') then
4446 
4447           l_subline_present := 'N';
4448           l_rlvr_sub_total  := 0;
4449 
4450           i := 0;
4451           for fee_subline_rec in fee_subline_csr
4452               (p_cle_id => contract_fee_rec.id,
4453                p_chr_id => p_chr_id)
4454           loop
4455             i := i + 1;
4456             l_subline_present := 'Y';
4457             l_rlvr_sub_total := l_rlvr_sub_total + fee_subline_rec.amount;
4458 
4459           end loop;
4460 
4461           if ((l_subline_present = 'Y') and (contract_fee_rec.amount <> l_rlvr_sub_total)) then
4462 
4463             lp_clev_rec.id := contract_fee_rec.id;
4464 
4465             lp_klev_rec.id := contract_fee_rec.id;
4466             lp_klev_rec.amount :=l_rlvr_sub_total;
4467 
4468             OKL_CONTRACT_PUB.update_contract_line(
4469               p_api_version         => p_api_version,
4470               p_init_msg_list       => p_init_msg_list,
4471               x_return_status       => x_return_status,
4472               x_msg_count           => x_msg_count,
4473               x_msg_data            => x_msg_data,
4474               p_clev_rec            => lp_clev_rec,
4475               p_klev_rec            => lp_klev_rec,
4476               x_clev_rec            => lx_clev_rec,
4477               x_klev_rec            => lx_klev_rec
4478             );
4479 
4480             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4481               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4482             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4483               RAISE OKL_API.G_EXCEPTION_ERROR;
4484             END IF;
4485           end if; -- Subline exists and Fee Amount <> Sum of Covered asset amounts
4486 
4487         end if; --Capitalized Fee / Rollover fee
4488 
4489       -- Update Fee Line Start Date and Amount where End Date is greater than
4490       -- or equal to Re-lease date and Start Date is less than Re-lease date
4491       elsif (contract_fee_rec.start_date < p_release_date) then
4492 
4493         open fee_expense_csr(p_chr_id => p_chr_id,
4494                              p_cle_id => contract_fee_rec.id);
4495         fetch fee_expense_csr into fee_expense_rec;
4496 
4497         -- No Expense associated with Fee
4498         if fee_expense_csr%NOTFOUND THEN
4499           close fee_expense_csr;
4500 
4501           if (contract_fee_rec.fee_type = 'CAPITALIZED') then
4502 
4503             l_subline_present := 'N';
4504             l_sub_cap_amt     := 0;
4505 
4506             i := 0;
4507             for fee_subline_rec in fee_subline_csr
4508                   (p_cle_id => contract_fee_rec.id,
4509                    p_chr_id => p_chr_id)
4510             loop
4511               i := i + 1;
4512               l_subline_present := 'Y';
4513               l_sub_cap_amt := l_sub_cap_amt + fee_subline_rec.capital_amount;
4514 
4515               lp_sub_clev_rec.id := fee_subline_rec.id;
4516               lp_sub_clev_rec.start_date := p_release_date;
4517 
4518               lp_sub_clev_tbl(i) := lp_sub_clev_rec;
4519               lp_sub_klev_tbl(i) := lp_klev_temp_rec;
4520             end loop;
4521 
4522             -- No Covered assets associated with Fee
4523             if (l_subline_present = 'N') then
4524 
4525               -- Delete Capitalized Fee line if no Covered Assets are present
4526               OKL_CONTRACT_PUB.delete_contract_line(
4527                 p_api_version   => p_api_version,
4528                 p_init_msg_list => p_init_msg_list,
4529                 x_return_status => x_return_status,
4530                 x_msg_count     => x_msg_count,
4531                 x_msg_data      => x_msg_data,
4532                 p_line_id       => contract_fee_rec.id
4533                );
4534 
4535               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4536                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4537               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4538                 RAISE OKL_API.G_EXCEPTION_ERROR;
4539               END IF;
4540 
4541             -- Covered assets associated with Fee
4542             else
4543 
4544               -- Set Fee line Start Date equal to Release Date
4545               lp_clev_rec.id := contract_fee_rec.id;
4546               lp_clev_rec.start_date := p_release_date;
4547 
4548               -- Set the capital_amount on capitalized fee top line equal
4549               -- to the sum of capital_amount on capitalized fee sublines
4550               if (contract_fee_rec.amount <> l_sub_cap_amt) then
4551                 lp_klev_rec.id := contract_fee_rec.id;
4552                 lp_klev_rec.amount :=l_sub_cap_amt;
4553                 lp_klev_rec.capital_amount := l_sub_cap_amt;
4554               end if;
4555 
4556               -- Set Fee Top Line Start Date equal to Release Date
4557               -- and Amount equal to sum of capital_amounts
4558               OKL_CONTRACT_PUB.update_contract_line(
4559                 p_api_version         => p_api_version,
4560                 p_init_msg_list       => p_init_msg_list,
4561                 x_return_status       => x_return_status,
4562                 x_msg_count           => x_msg_count,
4563                 x_msg_data            => x_msg_data,
4564                 p_clev_rec            => lp_clev_rec,
4565                 p_klev_rec            => lp_klev_rec,
4566                 x_clev_rec            => lx_clev_rec,
4567                 x_klev_rec            => lx_klev_rec
4568               );
4569 
4570               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4571                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4572               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4573                 RAISE OKL_API.G_EXCEPTION_ERROR;
4574               END IF;
4575 
4576               -- Set Covered Asset line Start Dates equal to Release Date
4577               OKL_CONTRACT_PUB.update_contract_line(
4578                 p_api_version         => p_api_version,
4579                 p_init_msg_list       => p_init_msg_list,
4580                 x_return_status       => x_return_status,
4581                 x_msg_count           => x_msg_count,
4582                 x_msg_data            => x_msg_data,
4583                 p_clev_tbl            => lp_sub_clev_tbl,
4584                 p_klev_tbl            => lp_sub_klev_tbl,
4585                 x_clev_tbl            => lx_sub_clev_tbl,
4586                 x_klev_tbl            => lx_sub_klev_tbl
4587                );
4588 
4589               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4590                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4591               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4592                 RAISE OKL_API.G_EXCEPTION_ERROR;
4593               END IF;
4594 
4595             end if; --Subline Present Y/N
4596 
4597           -- Fee type is not 'CAPITALIZED'
4598           else
4599 
4600             l_pymt_exists := 'N';
4601             open check_pymts_csr(p_chr_id => p_chr_id
4602                                 ,p_cle_id => contract_fee_rec.id);
4603             fetch check_pymts_csr into l_pymt_exists,l_rgp_id;
4604             close check_pymts_csr;
4605 
4606 			if ( l_pymt_exists = 'N') then
4607               -- Start change for rollover by fmiao on 12-OCT-2004--
4608 			  OPEN fee_type_csr (contract_fee_rec.id);
4609 			  FETCH fee_type_csr INTO l_fee_type;
4610 			  CLOSE fee_type_csr;
4611 
4612 			  if (l_fee_type <> 'ROLLOVER') then
4613 
4614                 -- Delete Fee line if no Payments or Expenses are present
4615                 OKL_CONTRACT_PUB.delete_contract_line(
4616                   p_api_version   => p_api_version,
4617                   p_init_msg_list => p_init_msg_list,
4618                   x_return_status => x_return_status,
4619                   x_msg_count     => x_msg_count,
4620                   x_msg_data      => x_msg_data,
4621                   p_line_id       => contract_fee_rec.id
4622                  );
4623 
4624               	IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4625                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4626               	ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4627                   RAISE OKL_API.G_EXCEPTION_ERROR;
4628               	END IF;
4629 
4630 			  --avsingh : payment may exist at the sub-line level
4631               elsif (l_fee_type = 'ROLLOVER') then
4632 
4633 			    l_subline_present := 'N';
4634                 l_rlvr_sub_total  := 0;
4635 
4636                 i := 0;
4637                 for fee_subline_rec in fee_subline_csr
4638                   (p_cle_id => contract_fee_rec.id,
4639                    p_chr_id => p_chr_id)
4640                 loop
4641                   i := i + 1;
4642                   l_subline_present := 'Y';
4643 
4644                   l_principal_bal := 0;
4645                   l_accumulated_int := 0;
4646     			  okl_stream_generator_pvt.get_sched_principal_bal(
4647 				                  p_api_version         => p_api_version,
4648                                   p_init_msg_list       => p_init_msg_list,
4649                                   p_khr_id              => p_orig_chr_id,
4650                                   p_kle_id              => fee_subline_rec.orig_system_id1,
4651                                   p_date                => p_release_date,
4652                                   x_principal_balance   => l_principal_bal,
4653                                   x_accumulated_int     => l_accumulated_int,
4654                                   x_return_status       => x_return_status,
4655                                   x_msg_count           => x_msg_count,
4656                                   x_msg_data            => x_msg_data);
4657 
4658 
4659                   lp_sub_clev_rec.id := fee_subline_rec.id;
4660                   lp_sub_clev_rec.start_date := p_release_date;
4661 
4662                   lp_sub_klev_rec.id := fee_subline_rec.id;
4663                   lp_sub_klev_rec.amount :=l_principal_bal + l_accumulated_int;
4664 
4665                   --Bug# 4080102 - Round Rollover Fee subline amount
4666                   lp_sub_klev_rec.amount :=
4667                          OKL_ACCOUNTING_UTIL.cross_currency_round_amount
4668                            (p_amount        => lp_sub_klev_rec.amount,
4669                             p_currency_code => l_currency_code);
4670 
4671                   l_rlvr_sub_total := l_rlvr_sub_total + lp_sub_klev_rec.amount;
4672 
4673                   lp_sub_clev_tbl(i) := lp_sub_clev_rec;
4674                   lp_sub_klev_tbl(i) := lp_sub_klev_rec;
4675                 end loop;
4676 
4677                 l_new_fee_amount :=
4678                          OKL_ACCOUNTING_UTIL.cross_currency_round_amount
4679                            (p_amount        => l_rlvr_sub_total,
4680                             p_currency_code => l_currency_code);
4681 
4682                 if (l_subline_present = 'Y') then
4683                   -- Set Covered Asset line Start Dates equal to Release Date
4684                   -- and Amount proportionate to the new fee amount
4685                   OKL_CONTRACT_PUB.update_contract_line(
4686                     p_api_version         => p_api_version,
4687                     p_init_msg_list       => p_init_msg_list,
4688                     x_return_status       => x_return_status,
4689                     x_msg_count           => x_msg_count,
4690                     x_msg_data            => x_msg_data,
4691                     p_clev_tbl            => lp_sub_clev_tbl,
4692                     p_klev_tbl            => lp_sub_klev_tbl,
4693                     x_clev_tbl            => lx_sub_clev_tbl,
4694                     x_klev_tbl            => lx_sub_klev_tbl
4695                    );
4696 
4697                   IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4698                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4699                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4700                     RAISE OKL_API.G_EXCEPTION_ERROR;
4701                   END IF;
4702 
4703                 lp_clev_rec.id := contract_fee_rec.id;
4704                 lp_clev_rec.start_date := p_release_date;
4705                 lp_klev_rec.id := contract_fee_rec.id;
4706                 lp_klev_rec.amount := l_new_fee_amount;
4707                 lp_klev_rec.initial_direct_cost := l_new_idc_amount;
4708 
4709                 -- Set Fee Top Line Start Date equal to Release Date
4710                 -- Retain Fee Amount equal to the amount from original contract
4711                 -- Set IDC to Null, as no Expenses present
4712                 OKL_CONTRACT_PUB.update_contract_line(
4713                   p_api_version         => p_api_version,
4714                   p_init_msg_list       => p_init_msg_list,
4715                   x_return_status       => x_return_status,
4716                   x_msg_count           => x_msg_count,
4717                   x_msg_data            => x_msg_data,
4718                   p_clev_rec            => lp_clev_rec,
4719                   p_klev_rec            => lp_klev_rec,
4720                   x_clev_rec            => lx_clev_rec,
4721                   x_klev_rec            => lx_klev_rec
4722                 );
4723 
4724                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4725                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4726                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4727                   RAISE OKL_API.G_EXCEPTION_ERROR;
4728                 END IF;
4729 
4730               else --sublines not found
4731 
4732                 -- Delete Fee line if no Payments or Expenses are present
4733                 OKL_CONTRACT_PUB.delete_contract_line(
4734                   p_api_version   => p_api_version,
4735                   p_init_msg_list => p_init_msg_list,
4736                   x_return_status => x_return_status,
4737                   x_msg_count     => x_msg_count,
4738                   x_msg_data      => x_msg_data,
4739                   p_line_id       => contract_fee_rec.id
4740                 );
4741 
4742               	IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4743                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4744               	ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4745                   RAISE OKL_API.G_EXCEPTION_ERROR;
4746               	END IF;
4747 
4748               end if; -- Subline exists
4749               --avsingh : payment may exist at sub-line level
4750 			  end if;
4751 			  -- End change for rollover by fmiao on 12-OCT-2004--
4752 
4753             elsif (l_pymt_exists = 'Y') then
4754 
4755               -- Retain Fee Amount equal to the amount from original contract
4756               -- Set IDC to Null, as no Expenses present
4757 
4758               l_new_fee_amount := contract_fee_rec.amount;
4759               l_new_idc_amount := null;
4760 
4761               -- For Income and Passthrough Fee, set the fee line amount
4762               -- equal to the total of the payments
4763               if (contract_fee_rec.fee_type IN ('PASSTHROUGH', 'INCOME')) then
4764 
4765                 l_pymt_amount := 0;
4766                 for pymt_details_rec in pymt_details_csr(p_chr_id => p_chr_id,
4767                                                          p_rgp_id => l_rgp_id,
4768                                                          p_rul_cat => 'LASLL')
4769                 loop
4770                   if (pymt_details_rec.rule_information8 IS NOT NULL) THEN
4771                     l_pymt_amount := l_pymt_amount +
4772                                   TO_NUMBER(pymt_details_rec.rule_information8);
4773                   else
4774                     l_pymt_amount := l_pymt_amount +
4775                       (TO_NUMBER(NVL(pymt_details_rec.rule_information6,'0')) *
4776                        TO_NUMBER(NVL(pymt_details_rec.rule_information3,'1')) );
4777                   end if;
4778                 end loop;
4779 
4780                 l_new_fee_amount := l_pymt_amount;
4781 
4782               -- For Rollover Fee, if Payment Incomplete then set Fee Amount
4783               -- equal to Closing Principal Balance prior to the Re-lease Date and
4784               -- update covered asset amount for each covered asset
4785               -- proportionate to the new Fee Amount
4786 
4787               elsif  (contract_fee_rec.fee_type = 'ROLLOVER') then
4788 
4789                 -- Fetch Primary Stream Type Id for Fee Payment
4790                 pymt_details_rec := null;
4791                 open pymt_details_csr(p_chr_id  => p_chr_id,
4792                                       p_rgp_id  => l_rgp_id,
4793                                       p_rul_cat => 'LASLH');
4794                 fetch pymt_details_csr into pymt_details_rec;
4795                 close pymt_details_csr;
4796 
4797                 l_principal_bal := 0;
4798                 l_accumulated_int := 0;
4799 				-- Start change for accrued interest by fmiao 09-NOV-04--
4800                 okl_stream_generator_pvt.get_sched_principal_bal(
4801 				                  p_api_version         => p_api_version,
4802                                   p_init_msg_list       => p_init_msg_list,
4803                                   p_khr_id              => p_orig_chr_id,
4804                                   p_kle_id              => contract_fee_rec.orig_system_id1,
4805                                   p_date                => p_release_date,
4806                                   x_principal_balance   => l_principal_bal,
4807                                   x_accumulated_int     => l_accumulated_int,
4808                                   x_return_status       => x_return_status,
4809                                   x_msg_count           => x_msg_count,
4810                                   x_msg_data            => x_msg_data);
4811 
4812 				-- End change for accrued interest by fmiao 09-NOV-04--
4813 
4814                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4815                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4816                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4817                   RAISE OKL_API.G_EXCEPTION_ERROR;
4818                 END IF;
4819 
4820                 l_new_fee_amount := l_principal_bal + l_accumulated_int;
4821 
4822                 l_subline_present := 'N';
4823                 l_rlvr_sub_total  := 0;
4824 
4825                 i := 0;
4826                 for fee_subline_rec in fee_subline_csr
4827                   (p_cle_id => contract_fee_rec.id,
4828                    p_chr_id => p_chr_id)
4829                 loop
4830                   i := i + 1;
4831                   l_subline_present := 'Y';
4832                   l_rlvr_sub_total := l_rlvr_sub_total + fee_subline_rec.amount;
4833 
4834                   lp_sub_clev_rec.id := fee_subline_rec.id;
4835                   lp_sub_clev_rec.start_date := p_release_date;
4836 
4837                   lp_sub_klev_rec.id := fee_subline_rec.id;
4838                   lp_sub_klev_rec.amount := fee_subline_rec.amount;
4839 
4840                   lp_sub_clev_tbl(i) := lp_sub_clev_rec;
4841                   lp_sub_klev_tbl(i) := lp_sub_klev_rec;
4842                 end loop;
4843 
4844                 -- If not all covered assets have moved over then adjust
4845                 -- New Fee amount proportionate to the Covered assets
4846                 -- moved over
4847                 if (contract_fee_rec.amount <> l_rlvr_sub_total) then
4848                   l_new_fee_amount := l_new_fee_amount * (l_rlvr_sub_total/contract_fee_rec.amount);
4849 
4850                   l_new_fee_amount :=
4851                          OKL_ACCOUNTING_UTIL.cross_currency_round_amount
4852                            (p_amount        => l_new_fee_amount,
4853                             p_currency_code => l_currency_code);
4854                 end if;
4855 
4856                 -- Set Sub-line amount proportionate to the new fee amount
4857                 l_sum := 0;
4858                 for i in 1..lp_sub_klev_tbl.COUNT loop
4859 
4860                   if (i = lp_sub_klev_tbl.COUNT) then
4861                     lp_sub_klev_tbl(i).amount :=  l_new_fee_amount - l_sum;
4862 
4863                   else
4864 
4865                     l_rlvr_sub_amt := l_new_fee_amount *
4866                                       lp_sub_klev_tbl(i).amount / l_rlvr_sub_total;
4867 
4868                     lp_sub_klev_tbl(i).amount :=
4869                          OKL_ACCOUNTING_UTIL.cross_currency_round_amount
4870                          (p_amount        => l_rlvr_sub_amt,
4871                           p_currency_code => l_currency_code);
4872 
4873                     l_sum := l_sum + lp_sub_klev_tbl(i).amount;
4874 
4875                   end if;
4876                 end loop;
4877 
4878                 if (l_subline_present = 'Y') then
4879                   -- Set Covered Asset line Start Dates equal to Release Date
4880                   -- and Amount proportionate to the new fee amount
4881                   OKL_CONTRACT_PUB.update_contract_line(
4882                     p_api_version         => p_api_version,
4883                     p_init_msg_list       => p_init_msg_list,
4884                     x_return_status       => x_return_status,
4885                     x_msg_count           => x_msg_count,
4886                     x_msg_data            => x_msg_data,
4887                     p_clev_tbl            => lp_sub_clev_tbl,
4888                     p_klev_tbl            => lp_sub_klev_tbl,
4889                     x_clev_tbl            => lx_sub_clev_tbl,
4890                     x_klev_tbl            => lx_sub_klev_tbl
4891                    );
4892 
4893                   IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4894                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4895                   ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4896                     RAISE OKL_API.G_EXCEPTION_ERROR;
4897                   END IF;
4898                 end if; -- Subline exists
4899               end if; -- Fee Type - Income / Passthrough /Rollover
4900 
4901               lp_clev_rec.id := contract_fee_rec.id;
4902               lp_clev_rec.start_date := p_release_date;
4903 
4904               lp_klev_rec.id := contract_fee_rec.id;
4905               lp_klev_rec.amount := l_new_fee_amount;
4906               lp_klev_rec.initial_direct_cost := l_new_idc_amount;
4907 
4908               -- Set Fee Top Line Start Date equal to Release Date
4909               -- Retain Fee Amount equal to the amount from original contract
4910               -- Set IDC to Null, as no Expenses present
4911               OKL_CONTRACT_PUB.update_contract_line(
4912                 p_api_version         => p_api_version,
4913                 p_init_msg_list       => p_init_msg_list,
4914                 x_return_status       => x_return_status,
4915                 x_msg_count           => x_msg_count,
4916                 x_msg_data            => x_msg_data,
4917                 p_clev_rec            => lp_clev_rec,
4918                 p_klev_rec            => lp_klev_rec,
4919                 x_clev_rec            => lx_clev_rec,
4920                 x_klev_rec            => lx_klev_rec
4921               );
4922 
4923               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4924                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4925               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4926                 RAISE OKL_API.G_EXCEPTION_ERROR;
4927               END IF;
4928 
4929             end if; --Payment exists Y/N
4930           end if;  --Capitalized Fee Y/N
4931 
4932         -- Expense associated with Fee
4933         else
4934           close fee_expense_csr;
4935 
4936           l_periods_bef_release :=
4937               CEIL(CEIL(MONTHS_BETWEEN(p_release_date,contract_fee_rec.start_date))/fee_expense_rec.factor);
4938 
4939           l_new_no_of_periods := fee_expense_rec.periods - l_periods_bef_release;
4940 
4941           if (l_new_no_of_periods > 0) then
4942 
4943             l_new_fee_amount :=  fee_expense_rec.amount * l_new_no_of_periods;
4944 
4945             -- New IDC Expense is equal to
4946             -- Total of Unpaid Recurring Expenses * (Original IDC / Original Fee Amount)
4947             -- Less Total Unamortized IDC Exp
4948 
4949             l_new_idc_amount := null;
4950             if (contract_fee_rec.initial_direct_cost IS NOT NULL) then
4951 
4952               l_new_idc_amount := l_new_fee_amount *
4953                        (contract_fee_rec.initial_direct_cost/contract_fee_rec.amount);
4954 
4955               /* Old Formula - Uncomment if required
4956               -- Fetch Primary Stream Type Id for Fee Expense
4957               open fee_item_csr(p_chr_id => p_chr_id,
4958                                 p_cle_id => contract_fee_rec.id);
4959               fetch fee_item_csr into fee_item_rec;
4960               close fee_item_csr;
4961 
4962               -- Fetch Stream information from Original Contract
4963               l_idc_sty_id := null;
4964               OKL_STREAMS_UTIL.get_dependent_stream_type
4965                 (p_khr_id                  => p_orig_chr_id,
4966                  p_primary_sty_id          => fee_item_rec.object1_id1,
4967                  p_dependent_sty_purpose   => 'AMORTIZED_FEE_EXPENSE',
4968                  x_return_status           => x_return_status,
4969                  x_dependent_sty_id        => l_idc_sty_id);
4970 
4971               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4972                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4973               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
4974                 RAISE OKL_API.G_EXCEPTION_ERROR;
4975               END IF;
4976 
4977               if (l_idc_sty_id IS NOT NULL) then
4978 
4979                 open streams_csr(p_chr_id => p_orig_chr_id,
4980                                  p_cle_id => contract_fee_rec.orig_system_id1,
4981                                  p_sty_id => l_idc_sty_id);
4982                 fetch streams_csr into streams_rec;
4983                 close streams_csr;
4984 
4985                 if (streams_rec.id IS NOT NULL) then
4986 
4987                   open unamort_idc_exp_csr(p_stm_id       => streams_rec.id,
4988                                            p_release_date => p_release_date);
4989                   fetch unamort_idc_exp_csr into unamort_idc_exp_rec;
4990                   close unamort_idc_exp_csr;
4991 
4992                   l_new_idc_amount :=
4993                   (l_new_fee_amount * (contract_fee_rec.initial_direct_cost/contract_fee_rec.amount))
4994                      - NVL(unamort_idc_exp_rec.amount,0);
4995 
4996                 end if; --IDC Stream Id is not null
4997               end if; -- IDC Stream Type Id is not null
4998             */
4999 
5000             end if; -- IDC is not null
5001 
5002             l_rulv_rec.id                 := fee_expense_rec.rul_lafexp_id;
5003             l_rulv_rec.rule_information1  := TO_CHAR(l_new_no_of_periods);
5004 
5005             -- Set Expense periods equal to New No. of periods
5006             OKL_RULE_PUB.update_rule(
5007                     p_api_version        => p_api_version,
5008                     p_init_msg_list      => p_init_msg_list,
5009                     x_return_status      => x_return_status,
5010                     x_msg_count          => x_msg_count,
5011                     x_msg_data           => x_msg_data,
5012                     p_rulv_rec           => l_rulv_rec,
5013                     x_rulv_rec           => lx_rulv_rec);
5014 
5015             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5016               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5017             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5018               RAISE OKL_API.G_EXCEPTION_ERROR;
5019             END IF;
5020 
5021             lp_clev_rec.id := contract_fee_rec.id;
5022             lp_clev_rec.start_date := p_release_date;
5023 
5024             lp_klev_rec.id := contract_fee_rec.id;
5025             lp_klev_rec.amount := l_new_fee_amount;
5026             lp_klev_rec.initial_direct_cost := l_new_idc_amount;
5027 
5028             -- For Misellaneous Fee, if Expense Incomplete and Payment Complete
5029             -- then change Fee Type to EXPENSE
5030             if (contract_fee_rec.fee_type = 'MISCELLANEOUS') then
5031 
5032               l_pymt_exists := 'N';
5033               open check_pymts_csr(p_chr_id => p_chr_id
5034                                   ,p_cle_id => contract_fee_rec.id);
5035               fetch check_pymts_csr into l_pymt_exists, l_rgp_id;
5036               close check_pymts_csr;
5037 
5038               if (l_pymt_exists = 'N') then
5039                 lp_klev_rec.fee_type := 'EXPENSE';
5040               end if; -- Payment does not exist
5041             end if; -- Miscellaneous Fee
5042 
5043             -- Set Fee Top Line Start Date equal to Release Date
5044             -- and Amount equal to Expense per period Amount * New No. of periods
5045             OKL_CONTRACT_PUB.update_contract_line(
5046               p_api_version         => p_api_version,
5047               p_init_msg_list       => p_init_msg_list,
5048               x_return_status       => x_return_status,
5049               x_msg_count           => x_msg_count,
5050               x_msg_data            => x_msg_data,
5051               p_clev_rec            => lp_clev_rec,
5052               p_klev_rec            => lp_klev_rec,
5053               x_clev_rec            => lx_clev_rec,
5054               x_klev_rec            => lx_klev_rec
5055             );
5056 
5057             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5058               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5059             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5060               RAISE OKL_API.G_EXCEPTION_ERROR;
5061             END IF;
5062 
5063           -- No. of periods <= 0
5064           else
5065 
5066             l_pymt_exists := 'N';
5067             open check_pymts_csr(p_chr_id => p_chr_id
5068                                 ,p_cle_id => contract_fee_rec.id);
5069             fetch check_pymts_csr into l_pymt_exists, l_rgp_id;
5070             close check_pymts_csr;
5071 
5072             if ( l_pymt_exists = 'N') then
5073 
5074               -- Delete Fee line if Expenses are complete
5075               -- and no Payments present
5076               OKL_CONTRACT_PUB.delete_contract_line(
5077                 p_api_version   => p_api_version,
5078                 p_init_msg_list => p_init_msg_list,
5079                 x_return_status => x_return_status,
5080                 x_msg_count     => x_msg_count,
5081                 x_msg_data      => x_msg_data,
5082                 p_line_id       => contract_fee_rec.id
5083                );
5084 
5085               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5086                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5087               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5088                 RAISE OKL_API.G_EXCEPTION_ERROR;
5089               END IF;
5090 
5091             elsif (l_pymt_exists = 'Y') then
5092 
5093               -- Retain Fee Amount equal to the amount from original contract
5094               -- Set IDC to Null, as no Expenses present
5095               -- Delete Expense Rules as No. of periods <= 0
5096 
5097               l_new_fee_amount := contract_fee_rec.amount;
5098               l_new_idc_amount := null;
5099 
5100               lp_clev_rec.id := contract_fee_rec.id;
5101               lp_clev_rec.start_date := p_release_date;
5102 
5103               lp_klev_rec.id := contract_fee_rec.id;
5104               lp_klev_rec.amount := l_new_fee_amount;
5105               lp_klev_rec.initial_direct_cost := l_new_idc_amount;
5106 
5107               -- For Misellaneous Fee, if Expense Complete and Payment Incomplete
5108               -- then Change Fee Type to INCOME
5109               -- Set Fee Line Amount equal to total of the Payments
5110               -- Set Stream Type on the Fee to the Stream associated with Payments
5111               if (contract_fee_rec.fee_type = 'MISCELLANEOUS') then
5112 
5113                 lp_klev_rec.fee_type := 'INCOME';
5114 
5115                 -- Update Fee line Amount to total of the Payments
5116                 l_pymt_amount := 0;
5117                 for pymt_details_rec in pymt_details_csr(p_chr_id  => p_chr_id,
5118                                                          p_rgp_id  => l_rgp_id,
5119                                                          p_rul_cat => 'LASLL')
5120                 loop
5121                   if (pymt_details_rec.rule_information8 IS NOT NULL) THEN
5122                     l_pymt_amount := l_pymt_amount +
5123                                   TO_NUMBER(pymt_details_rec.rule_information8);
5124                   else
5125                     l_pymt_amount := l_pymt_amount +
5126                       (TO_NUMBER(NVL(pymt_details_rec.rule_information6,'0')) *
5127                        TO_NUMBER(NVL(pymt_details_rec.rule_information3,'1')) );
5128                   end if;
5129                 end loop;
5130                 lp_klev_rec.amount := l_pymt_amount;
5131 
5132                 -- Update Stream Type on the Fee to Stream associated with
5133                 -- Payments
5134                 pymt_details_rec := null;
5135                 open pymt_details_csr(p_chr_id  => p_chr_id,
5136                                       p_rgp_id  => l_rgp_id,
5137                                       p_rul_cat => 'LASLH');
5138                 fetch pymt_details_csr into pymt_details_rec;
5139                 close pymt_details_csr;
5140 
5141                 if (pymt_details_rec.object1_id1 IS NOT NULL) then
5142                   open fee_item_csr(p_chr_id => p_chr_id,
5143                                     p_cle_id => contract_fee_rec.id);
5144                   fetch fee_item_csr into fee_item_rec;
5145                   close fee_item_csr;
5146 
5147                   if (fee_item_rec.id IS NOT NULL) then
5148                     lp_cimv_rec.id           := fee_item_rec.id;
5149                     lp_cimv_rec.object1_id1  := pymt_details_rec.object1_id1;
5150 
5151                     OKL_OKC_MIGRATION_PVT.update_contract_item
5152                       (p_api_version    => p_api_version,
5153                        p_init_msg_list  => p_init_msg_list,
5154                        x_return_status  => x_return_status,
5155                        x_msg_count      => x_msg_count,
5156                        x_msg_data       => x_msg_data,
5157                        p_cimv_rec       => lp_cimv_rec,
5158                        x_cimv_rec       => lx_cimv_rec);
5159                     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5160                       RAISE OKL_API.G_EXCEPTION_ERROR;
5161                     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5162                       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5163                     END IF;
5164 
5165                   end if; --Fee item exists
5166                 end if; -- Payment Stream Type exists
5167 
5168 
5169               -- For Financed Fee, if Expense Complete and Payment Incomplete
5170               -- then set Fee and Expense Amount equal to Closing Principal
5171               -- Balance prior to the Re-lease Date and
5172               -- Expense periods equal to 1
5173               elsif (contract_fee_rec.fee_type = 'FINANCED') then
5174 
5175                 -- Fetch Primary Stream Type Id for Fee Payment
5176                 pymt_details_rec := null;
5177                 open pymt_details_csr(p_chr_id  => p_chr_id,
5178                                       p_rgp_id  => l_rgp_id,
5179                                       p_rul_cat => 'LASLH');
5180                 fetch pymt_details_csr into pymt_details_rec;
5181                 close pymt_details_csr;
5182 
5183                 l_principal_bal := 0;
5184                 l_accumulated_int := 0;
5185 				-- Start change for accrued interest by fmiao 09-NOV-04--
5186 				okl_stream_generator_pvt.get_sched_principal_bal(
5187 				                  p_api_version         => p_api_version,
5188                                   p_init_msg_list       => p_init_msg_list,
5189                                   p_khr_id              => p_orig_chr_id,
5190                                   p_kle_id              => contract_fee_rec.orig_system_id1,
5191                                   p_date                => p_release_date,
5192                                   x_principal_balance   => l_principal_bal,
5193                                   x_accumulated_int     => l_accumulated_int,
5194                                   x_return_status       => x_return_status,
5195                                   x_msg_count           => x_msg_count,
5196                                   x_msg_data            => x_msg_data);
5197 				-- End change for accrued interest by fmiao 09-NOV-04--
5198 
5199                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5200                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5201                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5202                   RAISE OKL_API.G_EXCEPTION_ERROR;
5203                 END IF;
5204 
5205                 lp_klev_rec.amount := l_principal_bal + l_accumulated_int;
5206 
5207                 --Bug# 4080102 - Round Financed Fee amount
5208                 lp_klev_rec.amount :=
5209                          OKL_ACCOUNTING_UTIL.cross_currency_round_amount
5210                          (p_amount        => lp_klev_rec.amount,
5211                           p_currency_code => l_currency_code);
5212 
5213                 l_rulv_rec.id                 := fee_expense_rec.rul_lafexp_id;
5214                 l_rulv_rec.rule_information1  := '1';
5215                 l_rulv_rec.rule_information2  := TO_CHAR(lp_klev_rec.amount);
5216 
5217                 -- Set Expense periods equal to 1 and
5218                 -- Amount equal to Closing principal balance
5219                 OKL_RULE_PUB.update_rule(
5220                   p_api_version        => p_api_version,
5221                   p_init_msg_list      => p_init_msg_list,
5222                   x_return_status      => x_return_status,
5223                   x_msg_count          => x_msg_count,
5224                   x_msg_data           => x_msg_data,
5225                   p_rulv_rec           => l_rulv_rec,
5226                   x_rulv_rec           => lx_rulv_rec);
5227 
5228                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5229                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5230                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5231                   RAISE OKL_API.G_EXCEPTION_ERROR;
5232                 END IF;
5233 
5234               end if; -- Fee Type - Miscellaneous / Financed
5235 
5236               -- Set Fee Top Line Start Date equal to Release Date
5237               -- Retain Amount equal to the amount from original contract
5238               OKL_CONTRACT_PUB.update_contract_line(
5239                 p_api_version         => p_api_version,
5240                 p_init_msg_list       => p_init_msg_list,
5241                 x_return_status       => x_return_status,
5242                 x_msg_count           => x_msg_count,
5243                 x_msg_data            => x_msg_data,
5244                 p_clev_rec            => lp_clev_rec,
5245                 p_klev_rec            => lp_klev_rec,
5246                 x_clev_rec            => lx_clev_rec,
5247                 x_klev_rec            => lx_klev_rec
5248               );
5249 
5250               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5251                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5252               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5253                 RAISE OKL_API.G_EXCEPTION_ERROR;
5254               END IF;
5255 
5256               if (contract_fee_rec.fee_type <> 'FINANCED') then
5257                 -- Delete Expense Rules as No. of periods is <= 0
5258                 l_rgpv_rec.id := fee_expense_rec.rgp_id; -- LAFEXP Rule Group ID
5259                 OKL_RULE_PUB.delete_rule_group(
5260                   p_api_version    => p_api_version,
5261                   p_init_msg_list  => p_init_msg_list,
5262                   x_return_status  => x_return_status,
5263                   x_msg_count      => x_msg_count,
5264                   x_msg_data       => x_msg_data,
5265                   p_rgpv_rec       => l_rgpv_rec
5266                   );
5267                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5268                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5269                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5270                   RAISE OKL_API.G_EXCEPTION_ERROR;
5271                 END IF;
5272               end if;
5273 
5274             end if; --Payment exists Y/N
5275           end if; --New No. of periods > 0
5276         end if; --Expense associated with Fee
5277 
5278       end if; --Fee line End Date >= Release Date
5279     end loop;
5280 
5281     OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
5282                          x_msg_data    => x_msg_data);
5283 
5284   EXCEPTION
5285       when OKL_API.G_EXCEPTION_ERROR then
5286 
5287         IF fee_expense_csr%ISOPEN THEN
5288           close fee_expense_csr;
5289         END IF;
5290 
5291         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5292                         p_api_name  => l_api_name,
5293                         p_pkg_name  => G_PKG_NAME,
5294                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5295                         x_msg_count => x_msg_count,
5296                         x_msg_data  => x_msg_data,
5297                         p_api_type  => G_API_TYPE);
5298 
5299       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5300 
5301         IF fee_expense_csr%ISOPEN THEN
5302           close fee_expense_csr;
5303         END IF;
5304 
5305         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5306                         p_api_name  => l_api_name,
5307                         p_pkg_name  => G_PKG_NAME,
5308                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5309                         x_msg_count => x_msg_count,
5310                         x_msg_data  => x_msg_data,
5311                         p_api_type  => G_API_TYPE);
5312 
5313       when OTHERS then
5314 
5315         IF fee_expense_csr%ISOPEN THEN
5316           close fee_expense_csr;
5317         END IF;
5318 
5319         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5320                         p_api_name  => l_api_name,
5321                         p_pkg_name  => G_PKG_NAME,
5322                         p_exc_name  => 'OTHERS',
5323                         x_msg_count => x_msg_count,
5324                         x_msg_data  => x_msg_data,
5325                         p_api_type  => G_API_TYPE);
5326   END adjust_fee_lines;
5327 
5328   -----------------------------------------------------------------------------------------------
5329 -- Start of Comments
5330 -- Rekha Pillay
5331 -- Procedure Name       : Adjust_Service_Lines
5332 -- Description          : Adjust Service lines on the Re-lease contract
5333 -- Business Rules       :
5334 --
5335 --
5336 --
5337 --
5338 --
5339 --
5340 --
5341 -- Parameters           :
5342 -- Version              : 1.0
5343 -- End of Commments
5344   PROCEDURE adjust_service_lines(p_api_version   IN  NUMBER,
5345                                  p_init_msg_list IN  VARCHAR2,
5346                                  x_return_status OUT NOCOPY VARCHAR2,
5347                                  x_msg_count     OUT NOCOPY NUMBER,
5348                                  x_msg_data      OUT NOCOPY VARCHAR2,
5349                                  p_chr_id        IN  NUMBER,
5350                                  p_orig_chr_id   IN  NUMBER,
5351                                  p_release_date  IN  DATE) IS
5352 
5353     l_return_status   VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
5354     l_api_name        CONSTANT VARCHAR2(30) := 'ADJUST_SERVICE_LINES';
5355     l_api_version     CONSTANT NUMBER	:= 1.0;
5356 
5357     CURSOR contract_service_csr
5358            (p_chr_id       IN NUMBER) IS
5359     SELECT cle.id,
5360            cle.start_date,
5361            cle.end_date,
5362            kle.amount,
5363            cle.chr_id,
5364            cle.dnz_chr_id,
5365            cle.cle_id,
5366            cle.orig_system_id1,
5367            sts.ste_code
5368     FROM okc_k_lines_b cle,
5369          okl_k_lines kle,
5370          okc_line_styles_b lse,
5371          okc_statuses_b sts
5372     WHERE cle.dnz_chr_id = p_chr_id
5373     AND cle.chr_id =  p_chr_id
5374     AND  kle.id = cle.id
5375     AND  cle.lse_id = lse.id
5376     AND  lse.lty_code = 'SOLD_SERVICE'
5377     AND  cle.sts_code = sts.code;
5378 
5379     CURSOR orig_cle_sts_csr(p_cle_id IN NUMBER)
5380     IS
5381     SELECT sts.ste_code
5382     FROM   okc_k_lines_b cle,
5383            okc_statuses_b sts
5384     WHERE  cle.id = p_cle_id
5385     AND    cle.sts_code = sts.code;
5386 
5387     orig_cle_sts_rec orig_cle_sts_csr%ROWTYPE;
5388 
5389     CURSOR service_expense_csr
5390            (p_chr_id       IN NUMBER,
5391             p_cle_id       IN NUMBER) IS
5392     SELECT DECODE(rul_lafreq.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12)factor,
5393            TO_NUMBER(rul_lafexp.rule_information1) periods,
5394            TO_NUMBER(rul_lafexp.rule_information2) amount,
5395            rul_lafexp.id  rul_lafexp_id,
5396            rul_lafreq.id  rul_lafreq_id,
5397            rgp.id         rgp_id
5398     FROM   okc_rules_b rul_lafexp,
5399            okc_rules_b rul_lafreq,
5400            okc_rule_groups_b rgp
5401     WHERE  rgp.dnz_chr_id = p_chr_id
5402     AND   rgp.cle_id = p_cle_id
5403     AND   rgp.rgd_code = 'LAFEXP'
5404     AND   rul_lafreq.rgp_id = rgp.id
5405     AND   rul_lafreq.rule_information_category = 'LAFREQ'
5406     AND   rul_lafexp.rgp_id = rgp.id
5407     AND   rul_lafexp.rule_information_category = 'LAFEXP';
5408 
5409     service_expense_rec service_expense_csr%ROWTYPE;
5410 
5411     CURSOR service_subline_csr (p_chr_id IN NUMBER,
5412                                 p_cle_id IN NUMBER) IS
5413     SELECT cle.id,
5414            NVL(kle.capital_amount,0) capital_amount,
5415            cle.chr_id,
5416            cle.dnz_chr_id,
5417            cle.cle_id
5418     FROM   okc_k_lines_b cle,
5419            okl_k_lines kle
5420     WHERE  cle.cle_id   = p_cle_id
5421     AND    cle.dnz_chr_id = p_chr_id
5422     AND    cle.id = kle.id;
5423 
5424     CURSOR curr_hdr_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
5425     SELECT currency_code
5426     FROM   okc_k_headers_b
5427     WHERE  id = p_chr_id;
5428 
5429     l_currency_code OKC_K_LINES_B.CURRENCY_CODE%TYPE;
5430 
5431     CURSOR check_pymts_csr(p_chr_id IN NUMBER,
5432                            p_cle_id IN NUMBER) IS
5433     SELECT 'Y'  pymt_exists
5434     FROM   okc_rule_groups_b rgp
5435     WHERE  rgp.cle_id   = p_cle_id
5436     AND    rgp.dnz_chr_id = p_chr_id
5437     AND    rgp.rgd_code  = 'LALEVL';
5438 
5439     l_pymt_exists VARCHAR2(30);
5440 
5441     l_rulv_rec  OKL_RULE_PUB.rulv_rec_type;
5442     lx_rulv_rec OKL_RULE_PUB.rulv_rec_type;
5443 
5444     l_rgpv_rec  OKL_RULE_PUB.rgpv_rec_type;
5445 
5446     l_periods_bef_release NUMBER;
5447     l_orig_no_of_periods  NUMBER;
5448     l_new_no_of_periods   NUMBER;
5449     l_new_service_amount  NUMBER;
5450     l_per_period_amount   NUMBER;
5451 
5452     lp_klev_rec  okl_kle_pvt.klev_rec_type;
5453     lp_clev_rec  okl_okc_migration_pvt.clev_rec_type;
5454 
5455     lx_klev_rec  okl_kle_pvt.klev_rec_type;
5456     lx_clev_rec  okl_okc_migration_pvt.clev_rec_type;
5457 
5458     lp_sub_clev_tbl  okl_okc_migration_pvt.clev_tbl_type;
5459     lx_sub_clev_tbl  okl_okc_migration_pvt.clev_tbl_type;
5460     lp_sub_clev_rec  okl_okc_migration_pvt.clev_rec_type;
5461 
5462     lp_sub_klev_tbl  okl_kle_pvt.klev_tbl_type;
5463     lx_sub_klev_tbl  okl_kle_pvt.klev_tbl_type;
5464     lp_sub_klev_rec  okl_kle_pvt.klev_rec_type;
5465 
5466     lp_clev_temp_tbl okl_okc_migration_pvt.clev_tbl_type;
5467     lp_clev_temp_rec okl_okc_migration_pvt.clev_rec_type;
5468     lp_klev_temp_tbl okl_kle_pvt.klev_tbl_type;
5469     lp_klev_temp_rec okl_kle_pvt.klev_rec_type;
5470     l_rulv_temp_rec  okl_rule_pub.rulv_rec_type;
5471     l_rgpv_temp_rec  okl_rule_pub.rgpv_rec_type;
5472 
5473     l_subline_present     VARCHAR2(1);
5474     l_sub_cap_amt         NUMBER;
5475     l_capital_amount      NUMBER;
5476     l_sum                 NUMBER;
5477     i NUMBER;
5478 
5479   BEGIN
5480     x_return_status := Okl_Api.G_RET_STS_SUCCESS;
5481     -- Call start_activity to create savepoint, check compatibility
5482     -- and initialize message list
5483     l_return_status := Okl_Api.START_ACTIVITY(
5484 			p_api_name      => l_api_name,
5485 			p_pkg_name      => g_pkg_name,
5486 			p_init_msg_list => p_init_msg_list,
5487 			l_api_version   => l_api_version,
5488 			p_api_version   => p_api_version,
5489 			p_api_type      => '_PVT',
5490 			x_return_status => x_return_status);
5491     -- Check if activity started successfully
5492     IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
5493        RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
5494     ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
5495        RAISE Okl_Api.G_EXCEPTION_ERROR;
5496     END IF;
5497 
5498     l_currency_code := '?';
5499     open curr_hdr_csr (p_chr_id);
5500     fetch curr_hdr_csr into l_currency_code;
5501     close curr_hdr_csr;
5502 
5503     if (l_currency_code = '?') then
5504 
5505       OKL_API.set_message(p_app_name     => G_APP_NAME,
5506                           p_msg_name     => G_REQUIRED_VALUE,
5507                           p_token1       => G_COL_NAME_TOKEN,
5508                           p_token1_value => 'Currency Code');
5509       RAISE OKL_API.G_EXCEPTION_ERROR;
5510     end if;
5511 
5512     for contract_service_rec in contract_service_csr
5513                                  (p_chr_id => p_chr_id) loop
5514 
5515       l_rulv_rec      := l_rulv_temp_rec;
5516       l_rgpv_rec      := l_rgpv_temp_rec;
5517       lp_clev_rec     := lp_clev_temp_rec;
5518       lp_klev_rec     := lp_klev_temp_rec;
5519       lp_sub_clev_rec := lp_clev_temp_rec;
5520       lp_sub_clev_tbl := lp_clev_temp_tbl;
5521       lp_sub_klev_rec := lp_klev_temp_rec;
5522       lp_sub_klev_tbl := lp_klev_temp_tbl;
5523 
5524       -- Delete Service Lines where End Date is earlier than Re-lease date
5525       -- or Line status is not Active
5526 
5527       -- Fetch Status of the Line in original contract
5528       open orig_cle_sts_csr(p_cle_id => contract_service_rec.orig_system_id1);
5529       fetch orig_cle_sts_csr into orig_cle_sts_rec;
5530       close orig_cle_sts_csr;
5531 
5532       if (contract_service_rec.end_date < p_release_date) or
5533          (contract_service_rec.ste_code IN ('TERMINATED','EXPIRED','CANCELLED')) or
5534          (orig_cle_sts_rec.ste_code IN ('TERMINATED', 'EXPIRED', 'CANCELLED')) then
5535 
5536         OKL_CONTRACT_PUB.delete_contract_line(
5537           p_api_version   => p_api_version,
5538           p_init_msg_list => p_init_msg_list,
5539           x_return_status => x_return_status,
5540           x_msg_count     => x_msg_count,
5541           x_msg_data      => x_msg_data,
5542           p_line_id       => contract_service_rec.id
5543         );
5544 
5545         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5546           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5547         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5548           RAISE OKL_API.G_EXCEPTION_ERROR;
5549         END IF;
5550 
5551       -- If Service Line Start Date is greater than or equal to Re-lease date
5552       -- Update Service Top line Amount equal to sum of covered assets
5553       -- if its not equal
5554       -- Update Expense Per Period amount as New Service Amount / Periods
5555       elsif (contract_service_rec.start_date >= p_release_date) then
5556 
5557         l_subline_present := 'N';
5558 
5559         i := 0;
5560         l_sub_cap_amt     := 0;
5561         for service_subline_rec in service_subline_csr
5562                                  (p_chr_id => p_chr_id,
5563                                   p_cle_id => contract_service_rec.id)
5564         loop
5565           i := i + 1;
5566           l_subline_present := 'Y';
5567           l_sub_cap_amt := l_sub_cap_amt + service_subline_rec.capital_amount;
5568         end loop;
5569 
5570         -- Covered assets associated with Service
5571         if ((l_subline_present = 'Y') and (contract_service_rec.amount <> l_sub_cap_amt)) then
5572 
5573           l_new_service_amount := l_sub_cap_amt;
5574 
5575           open service_expense_csr(p_chr_id => p_chr_id,
5576                                    p_cle_id => contract_service_rec.id);
5577           fetch service_expense_csr into service_expense_rec;
5578 
5579           -- Expense associated with Service
5580           if service_expense_csr%FOUND THEN
5581             close service_expense_csr;
5582 
5583             if (service_expense_rec.periods > 0) then
5584               l_per_period_amount :=  l_new_service_amount / service_expense_rec.periods;
5585 
5586               l_per_period_amount :=
5587                        OKL_ACCOUNTING_UTIL.cross_currency_round_amount
5588                          (p_amount        => l_per_period_amount,
5589                           p_currency_code => l_currency_code);
5590 
5591               l_rulv_rec.id                 := service_expense_rec.rul_lafexp_id;
5592               l_rulv_rec.rule_information2  := TO_CHAR(l_per_period_amount);
5593 
5594               -- Set Per period Amount equal to Rounded value of
5595               -- (Sum of Covered Asset Capital Amounts / No. of periods)
5596               OKL_RULE_PUB.update_rule(
5597                   p_api_version        => p_api_version,
5598                   p_init_msg_list      => p_init_msg_list,
5599                   x_return_status      => x_return_status,
5600                   x_msg_count          => x_msg_count,
5601                   x_msg_data           => x_msg_data,
5602                   p_rulv_rec           => l_rulv_rec,
5603                   x_rulv_rec           => lx_rulv_rec);
5604 
5605               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5606                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5607               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5608                 RAISE OKL_API.G_EXCEPTION_ERROR;
5609               END IF;
5610             end if; --Periods > 0
5611 
5612           -- No Expenses associated with service
5613           else
5614             close service_expense_csr;
5615           end if;
5616 
5617           lp_clev_rec.id := contract_service_rec.id;
5618 
5619           lp_klev_rec.id := contract_service_rec.id;
5620           lp_klev_rec.amount := l_new_service_amount;
5621 
5622           -- Set Service Top Line Amount equal to sum of capital_amounts
5623           OKL_CONTRACT_PUB.update_contract_line(
5624             p_api_version         => p_api_version,
5625             p_init_msg_list       => p_init_msg_list,
5626             x_return_status       => x_return_status,
5627             x_msg_count           => x_msg_count,
5628             x_msg_data            => x_msg_data,
5629             p_clev_rec            => lp_clev_rec,
5630             p_klev_rec            => lp_klev_rec,
5631             x_clev_rec            => lx_clev_rec,
5632             x_klev_rec            => lx_klev_rec
5633           );
5634 
5635           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5636             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5637           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5638             RAISE OKL_API.G_EXCEPTION_ERROR;
5639           END IF;
5640 
5641         end if; --Subline present = 'Y'
5642 
5643       -- Update Service Line Start Date and Amount where End Date is greater than
5644       -- or equal to Re-lease date and Start Date is less than Re-lease date
5645       elsif (contract_service_rec.start_date < p_release_date) then
5646 
5647         l_subline_present := 'N';
5648 
5649         i := 0;
5650         l_sub_cap_amt     := 0;
5651         for service_subline_rec in service_subline_csr
5652                                  (p_chr_id => p_chr_id,
5653                                   p_cle_id => contract_service_rec.id)
5654         loop
5655           i := i + 1;
5656           l_subline_present := 'Y';
5657           l_sub_cap_amt := l_sub_cap_amt + service_subline_rec.capital_amount;
5658 
5659           lp_sub_clev_rec.id := service_subline_rec.id;
5660           lp_sub_clev_rec.start_date := p_release_date;
5661 
5662           lp_sub_klev_rec.id := service_subline_rec.id;
5663           lp_sub_klev_rec.capital_amount := service_subline_rec.capital_amount;
5664 
5665           lp_sub_clev_tbl(i) := lp_sub_clev_rec;
5666           lp_sub_klev_tbl(i) := lp_sub_klev_rec;
5667         end loop;
5668 
5669         -- Covered assets associated with Service
5670         if (l_subline_present = 'Y') then
5671 
5672           open service_expense_csr(p_chr_id => p_chr_id,
5673                                    p_cle_id => contract_service_rec.id);
5674           fetch service_expense_csr into service_expense_rec;
5675 
5676           -- Expense associated with Service
5677           if service_expense_csr%FOUND THEN
5678             close service_expense_csr;
5679 
5680             l_periods_bef_release :=
5681                 CEIL(CEIL(MONTHS_BETWEEN(p_release_date,contract_service_rec.start_date))/service_expense_rec.factor);
5682             l_new_no_of_periods := service_expense_rec.periods - l_periods_bef_release;
5683 
5684             if (l_new_no_of_periods > 0) then
5685 
5686               l_per_period_amount :=  service_expense_rec.amount * l_sub_cap_amt / contract_service_rec.amount;
5687 
5688               l_per_period_amount :=
5689                        OKL_ACCOUNTING_UTIL.cross_currency_round_amount
5690                          (p_amount        => l_per_period_amount,
5691                           p_currency_code => l_currency_code);
5692 
5693               l_new_service_amount := l_per_period_amount *  l_new_no_of_periods;
5694 
5695               l_sum := 0;
5696               for i in 1..lp_sub_klev_tbl.COUNT loop
5697 
5698                 if (i = lp_sub_klev_tbl.COUNT) then
5699                    lp_sub_klev_tbl(i).capital_amount :=  l_new_service_amount - l_sum;
5700 
5701                 else
5702 
5703                   l_capital_amount := lp_sub_klev_tbl(i).capital_amount *
5704                                       l_new_no_of_periods / service_expense_rec.periods;
5705 
5706                   lp_sub_klev_tbl(i).capital_amount :=
5707                        OKL_ACCOUNTING_UTIL.cross_currency_round_amount
5708                          (p_amount        => l_capital_amount,
5709                           p_currency_code => l_currency_code);
5710 
5711                   l_sum := l_sum + lp_sub_klev_tbl(i).capital_amount;
5712 
5713                 end if;
5714               end loop;
5715 
5716               l_rulv_rec.id                 := service_expense_rec.rul_lafexp_id;
5717               l_rulv_rec.rule_information1  := TO_CHAR(l_new_no_of_periods);
5718               l_rulv_rec.rule_information2  := TO_CHAR(l_per_period_amount);
5719 
5720               -- Set Expense periods equal to New No. of periods and
5721               -- per period Amount equal to Rounded value of
5722               -- (Sum of Covered Asset Capital Amounts / New No. of periods)
5723               OKL_RULE_PUB.update_rule(
5724                   p_api_version        => p_api_version,
5725                   p_init_msg_list      => p_init_msg_list,
5726                   x_return_status      => x_return_status,
5727                   x_msg_count          => x_msg_count,
5728                   x_msg_data           => x_msg_data,
5729                   p_rulv_rec           => l_rulv_rec,
5730                   x_rulv_rec           => lx_rulv_rec);
5731 
5732               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5733                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5734               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5735                 RAISE OKL_API.G_EXCEPTION_ERROR;
5736               END IF;
5737 
5738             --New No. of periods <= 0
5739             else
5740 
5741               l_new_service_amount := l_sub_cap_amt;
5742 
5743               -- Delete Expense Rules as No. of periods is <= 0
5744               l_rgpv_rec.id := service_expense_rec.rgp_id; -- LAFEXP Rule Group ID
5745               OKL_RULE_PUB.delete_rule_group(
5746                   p_api_version    => p_api_version,
5747                   p_init_msg_list  => p_init_msg_list,
5748                   x_return_status  => x_return_status,
5749                   x_msg_count      => x_msg_count,
5750                   x_msg_data       => x_msg_data,
5751                   p_rgpv_rec       => l_rgpv_rec
5752                   );
5753               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5754                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5755               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5756                 RAISE OKL_API.G_EXCEPTION_ERROR;
5757               END IF;
5758             end if;
5759 
5760           -- No Expense associated with Service
5761           else
5762 
5763             l_new_service_amount := l_sub_cap_amt;
5764             close service_expense_csr;
5765           end if;
5766 
5767           -- Set Service line Start Date equal to Release Date
5768           lp_clev_rec.id := contract_service_rec.id;
5769           lp_clev_rec.start_date := p_release_date;
5770 
5771           lp_klev_rec.id := contract_service_rec.id;
5772           lp_klev_rec.amount := l_new_service_amount;
5773 
5774           -- Set Service Top Line Start Date equal to Release Date
5775           -- and Amount equal to sum of capital_amounts
5776           OKL_CONTRACT_PUB.update_contract_line(
5777             p_api_version         => p_api_version,
5778             p_init_msg_list       => p_init_msg_list,
5779             x_return_status       => x_return_status,
5780             x_msg_count           => x_msg_count,
5781             x_msg_data            => x_msg_data,
5782             p_clev_rec            => lp_clev_rec,
5783             p_klev_rec            => lp_klev_rec,
5784             x_clev_rec            => lx_clev_rec,
5785             x_klev_rec            => lx_klev_rec
5786           );
5787 
5788           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5789             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5790           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5791             RAISE OKL_API.G_EXCEPTION_ERROR;
5792           END IF;
5793 
5794           -- Set Covered Asset line Start Dates equal to Release Date
5795           OKL_CONTRACT_PUB.update_contract_line(
5796             p_api_version         => p_api_version,
5797             p_init_msg_list       => p_init_msg_list,
5798             x_return_status       => x_return_status,
5799             x_msg_count           => x_msg_count,
5800             x_msg_data            => x_msg_data,
5801             p_clev_tbl            => lp_sub_clev_tbl,
5802             p_klev_tbl            => lp_sub_klev_tbl,
5803             x_clev_tbl            => lx_sub_clev_tbl,
5804             x_klev_tbl            => lx_sub_klev_tbl
5805           );
5806 
5807           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5808             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5809           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5810             RAISE OKL_API.G_EXCEPTION_ERROR;
5811           END IF;
5812 
5813         -- No Covered asset associated with Service
5814         else
5815 
5816           open service_expense_csr(p_chr_id => p_chr_id,
5817                                    p_cle_id => contract_service_rec.id);
5818           fetch service_expense_csr into service_expense_rec;
5819 
5820           -- No Expense associated with Service
5821           if service_expense_csr%NOTFOUND THEN
5822             close service_expense_csr;
5823 
5824             lp_clev_rec.id := contract_service_rec.id;
5825             lp_clev_rec.start_date := p_release_date;
5826 
5827             lp_klev_rec.id := contract_service_rec.id;
5828 
5829             -- Set Service Top Line Start Date equal to Release Date
5830             -- and retain Amount equal to the Amount from original contract
5831             OKL_CONTRACT_PUB.update_contract_line(
5832               p_api_version         => p_api_version,
5833               p_init_msg_list       => p_init_msg_list,
5834               x_return_status       => x_return_status,
5835               x_msg_count           => x_msg_count,
5836               x_msg_data            => x_msg_data,
5837               p_clev_rec            => lp_clev_rec,
5838               p_klev_rec            => lp_klev_rec,
5839               x_clev_rec            => lx_clev_rec,
5840               x_klev_rec            => lx_klev_rec
5841             );
5842 
5843             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5844               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5845             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5846               RAISE OKL_API.G_EXCEPTION_ERROR;
5847             END IF;
5848 
5849           -- Expense is associated with Service
5850           else
5851             close service_expense_csr;
5852             l_periods_bef_release :=
5853               CEIL(CEIL(MONTHS_BETWEEN(p_release_date,contract_service_rec.start_date))/service_expense_rec.factor);
5854 
5855             l_new_no_of_periods := service_expense_rec.periods - l_periods_bef_release;
5856 
5857             if (l_new_no_of_periods > 0) then
5858 
5859               l_new_service_amount :=  service_expense_rec.amount * l_new_no_of_periods;
5860 
5861               l_rulv_rec.id                 := service_expense_rec.rul_lafexp_id;
5862               l_rulv_rec.rule_information1  := TO_CHAR(l_new_no_of_periods);
5863 
5864               -- Set Expense periods equal to New No. of periods
5865               OKL_RULE_PUB.update_rule(
5866                   p_api_version        => p_api_version,
5867                   p_init_msg_list      => p_init_msg_list,
5868                   x_return_status      => x_return_status,
5869                   x_msg_count          => x_msg_count,
5870                   x_msg_data           => x_msg_data,
5871                   p_rulv_rec           => l_rulv_rec,
5872                   x_rulv_rec           => lx_rulv_rec);
5873 
5874               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5875                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5876               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5877                 RAISE OKL_API.G_EXCEPTION_ERROR;
5878               END IF;
5879 
5880               lp_clev_rec.id := contract_service_rec.id;
5881               lp_clev_rec.start_date := p_release_date;
5882 
5883               lp_klev_rec.id := contract_service_rec.id;
5884               lp_klev_rec.amount := l_new_service_amount;
5885 
5886               -- Set Service Top Line Start Date equal to Release Date
5887               -- and Amount equal to Expense per period Amount * New No. of periods
5888               OKL_CONTRACT_PUB.update_contract_line(
5889                 p_api_version         => p_api_version,
5890                 p_init_msg_list       => p_init_msg_list,
5891                 x_return_status       => x_return_status,
5892                 x_msg_count           => x_msg_count,
5893                 x_msg_data            => x_msg_data,
5894                 p_clev_rec            => lp_clev_rec,
5895                 p_klev_rec            => lp_klev_rec,
5896                 x_clev_rec            => lx_clev_rec,
5897                 x_klev_rec            => lx_klev_rec
5898                 );
5899 
5900               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5901                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5902               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5903                 RAISE OKL_API.G_EXCEPTION_ERROR;
5904               END IF;
5905 
5906             -- No. of periods <= 0
5907             else
5908 
5909               -- Retain Service Amount equal to the amount from original contract
5910               -- Delete Expense Rules as No. of periods <= 0
5911 
5912               lp_clev_rec.id := contract_service_rec.id;
5913               lp_clev_rec.start_date := p_release_date;
5914 
5915               lp_klev_rec.id := contract_service_rec.id;
5916 
5917               -- Set Service Top Line Start Date equal to Release Date
5918               -- and retin Amount equal to the Amount from original contract
5919               OKL_CONTRACT_PUB.update_contract_line(
5920                 p_api_version         => p_api_version,
5921                 p_init_msg_list       => p_init_msg_list,
5922                 x_return_status       => x_return_status,
5923                 x_msg_count           => x_msg_count,
5924                 x_msg_data            => x_msg_data,
5925                 p_clev_rec            => lp_clev_rec,
5926                 p_klev_rec            => lp_klev_rec,
5927                 x_clev_rec            => lx_clev_rec,
5928                 x_klev_rec            => lx_klev_rec
5929               );
5930 
5931               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5932                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5933               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5934                 RAISE OKL_API.G_EXCEPTION_ERROR;
5935               END IF;
5936 
5937               -- Delete Expense Rules as No. of periods is <= 0
5938               l_rgpv_rec.id := service_expense_rec.rgp_id; -- LAFEXP Rule Group ID
5939               OKL_RULE_PUB.delete_rule_group(
5940                 p_api_version    => p_api_version,
5941                 p_init_msg_list  => p_init_msg_list,
5942                 x_return_status  => x_return_status,
5943                 x_msg_count      => x_msg_count,
5944                 x_msg_data       => x_msg_data,
5945                 p_rgpv_rec       => l_rgpv_rec
5946                 );
5947               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5948                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5949               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5950                 RAISE OKL_API.G_EXCEPTION_ERROR;
5951               END IF;
5952 
5953             end if; --New No. of periods > 0
5954           end if; --Expense associated with Service
5955         end if; --Asset associated with Service
5956       end if; --Service line End Date >= Release Date
5957     end loop;
5958 
5959     OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
5960                          x_msg_data    => x_msg_data);
5961 
5962   EXCEPTION
5963       when OKL_API.G_EXCEPTION_ERROR then
5964 
5965         IF service_expense_csr%ISOPEN THEN
5966           close service_expense_csr;
5967         END IF;
5968 
5969         IF service_subline_csr%ISOPEN THEN
5970           close service_subline_csr;
5971         END IF;
5972 
5973         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5974                         p_api_name  => l_api_name,
5975                         p_pkg_name  => G_PKG_NAME,
5976                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5977                         x_msg_count => x_msg_count,
5978                         x_msg_data  => x_msg_data,
5979                         p_api_type  => G_API_TYPE);
5980 
5981       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5982 
5983         IF service_expense_csr%ISOPEN THEN
5984           close service_expense_csr;
5985         END IF;
5986 
5987         IF service_subline_csr%ISOPEN THEN
5988           close service_subline_csr;
5989         END IF;
5990 
5991         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5992                         p_api_name  => l_api_name,
5993                         p_pkg_name  => G_PKG_NAME,
5994                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5995                         x_msg_count => x_msg_count,
5996                         x_msg_data  => x_msg_data,
5997                         p_api_type  => G_API_TYPE);
5998 
5999       when OTHERS then
6000 
6001         IF service_expense_csr%ISOPEN THEN
6002           close service_expense_csr;
6003         END IF;
6004 
6005         IF service_subline_csr%ISOPEN THEN
6006           close service_subline_csr;
6007         END IF;
6008 
6009         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6010                         p_api_name  => l_api_name,
6011                         p_pkg_name  => G_PKG_NAME,
6012                         p_exc_name  => 'OTHERS',
6013                         x_msg_count => x_msg_count,
6014                         x_msg_data  => x_msg_data,
6015                         p_api_type  => G_API_TYPE);
6016   END adjust_service_lines;
6017 
6018 
6019   -----------------------------------------------------------------------------------------------
6020 -- Start of Comments
6021 -- Rekha Pillay
6022 -- Procedure Name       : Adjust_Partial_Taa_Pymt
6023 -- Description          : Adjust Payment lines on the Re-lease contract for Partial TA
6024 --                        when Service and Rollover fee payments are defined at Top line level
6025 --                        and not all Covered assets move over to the new contract
6026 -- Business Rules       :
6027 --
6028 --
6029 --
6030 --
6031 --
6032 --
6033 --
6034 -- Parameters           :
6035 -- Version              : 1.0
6036 -- End of Commments
6037   PROCEDURE adjust_partial_taa_pymt(p_api_version   IN  NUMBER,
6038                                     p_init_msg_list IN  VARCHAR2,
6039                                     x_return_status OUT NOCOPY VARCHAR2,
6040                                     x_msg_count     OUT NOCOPY NUMBER,
6041                                     x_msg_data      OUT NOCOPY VARCHAR2,
6042                                     p_chr_id        IN  NUMBER) IS
6043 
6044     l_return_status   VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6045     l_api_name        CONSTANT VARCHAR2(30) := 'ADJUST_PARTIAL_TAA_PYMT';
6046     l_api_version     CONSTANT NUMBER	:= 1.0;
6047 
6048     CURSOR fee_serv_csr(p_chr_id    IN NUMBER)
6049     IS
6050     SELECT cle.id,
6051            kle.amount
6052     FROM okc_k_lines_b cle,
6053          okc_line_styles_b lse,
6054          okl_k_lines kle
6055     WHERE cle.chr_id = p_chr_id
6056     AND cle.dnz_chr_id = p_chr_id
6057     AND lse.lty_code IN ('FEE','SOLD_SERVICE')
6058     AND cle.lse_id = lse.id
6059     AND kle.id = cle.id
6060     AND NVL(kle.fee_type,'XXXX') <> 'CAPITALIZED';
6061 
6062     CURSOR subline_csr (p_chr_id IN NUMBER,
6063                         p_cle_id IN NUMBER) IS
6064     SELECT SUM(NVL(kle.capital_amount,kle.amount)) sum_amount
6065     FROM   okc_k_lines_b cle,
6066            okl_k_lines kle
6067     WHERE  cle.cle_id   = p_cle_id
6068     AND    cle.dnz_chr_id = p_chr_id
6069     AND    kle.id = cle.id;
6070 
6071     CURSOR contract_payment_csr
6072            (p_chr_id       IN NUMBER,
6073             p_cle_id       IN NUMBER) IS
6074     SELECT TO_NUMBER(sll.rule_information6) amount,
6075            TO_NUMBER(sll.rule_information8) stub_amount,
6076            sll.id sll_id
6077     FROM okc_rules_b sll,
6078          okc_rule_groups_b rgp
6079     WHERE rgp.dnz_chr_id = p_chr_id
6080     AND rgp.cle_id = p_cle_id
6081     AND rgp.rgd_code = 'LALEVL'
6082     AND sll.rule_information_category = 'LASLL'
6083     AND sll.rgp_id = rgp.id;
6084 
6085     CURSOR curr_hdr_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
6086     SELECT currency_code
6087     FROM   okc_k_headers_b
6088     WHERE  id = p_chr_id;
6089 
6090     l_currency_code OKC_K_LINES_B.CURRENCY_CODE%TYPE;
6091 
6092     l_rulv_rec  OKL_RULE_PUB.rulv_rec_type;
6093     lx_rulv_rec OKL_RULE_PUB.rulv_rec_type;
6094 
6095     l_rulv_temp_rec  OKL_RULE_PUB.rulv_rec_type;
6096 
6097     l_amount NUMBER;
6098 
6099   BEGIN
6100     x_return_status := Okl_Api.G_RET_STS_SUCCESS;
6101     -- Call start_activity to create savepoint, check compatibility
6102     -- and initialize message list
6103     l_return_status := Okl_Api.START_ACTIVITY(
6104 			p_api_name      => l_api_name,
6105 			p_pkg_name      => g_pkg_name,
6106 			p_init_msg_list => p_init_msg_list,
6107 			l_api_version   => l_api_version,
6108 			p_api_version   => p_api_version,
6109 			p_api_type      => '_PVT',
6110 			x_return_status => x_return_status);
6111     -- Check if activity started successfully
6112     IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6113        RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6114     ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6115        RAISE Okl_Api.G_EXCEPTION_ERROR;
6116     END IF;
6117 
6118     l_currency_code := '?';
6119     open curr_hdr_csr (p_chr_id);
6120     fetch curr_hdr_csr into l_currency_code;
6121     close curr_hdr_csr;
6122 
6123     if (l_currency_code = '?') then
6124 
6125       OKL_API.set_message(p_app_name     => G_APP_NAME,
6126                           p_msg_name     => G_REQUIRED_VALUE,
6127                           p_token1       => G_COL_NAME_TOKEN,
6128                           p_token1_value => 'Currency Code');
6129       RAISE OKL_API.G_EXCEPTION_ERROR;
6130     end if;
6131 
6132     for fee_serv_rec in fee_serv_csr(p_chr_id  => p_chr_id)loop
6133 
6134       for subline_rec in subline_csr(p_chr_id => p_chr_id,
6135                                      p_cle_id => fee_serv_rec.id) loop
6136 
6137         if  (fee_serv_rec.amount <> subline_rec.sum_amount) then
6138 
6139           for contract_payment_rec in contract_payment_csr
6140                                   (p_chr_id => p_chr_id,
6141                                    p_cle_id => fee_serv_rec.id) loop
6142 
6143             l_rulv_rec := l_rulv_temp_rec;
6144 
6145             l_rulv_rec.id := contract_payment_rec.sll_id; -- SLL Rule ID
6146 
6147             l_amount := NVL(contract_payment_rec.amount,contract_payment_rec.stub_amount)
6148                            * (subline_rec.sum_amount/fee_serv_rec.amount);
6149 
6150             l_amount := OKL_ACCOUNTING_UTIL.cross_currency_round_amount
6151                           (p_amount        => l_amount,
6152                            p_currency_code => l_currency_code);
6153 
6154             if (contract_payment_rec.amount IS NOT NULL) then
6155               l_rulv_rec.rule_information6 := TO_CHAR(l_amount);
6156             else
6157               l_rulv_rec.rule_information8 := TO_CHAR(l_amount);
6158             end if;
6159 
6160             OKL_RULE_PUB.update_rule(
6161                     p_api_version        => p_api_version,
6162                     p_init_msg_list      => p_init_msg_list,
6163                     x_return_status      => x_return_status,
6164                     x_msg_count          => x_msg_count,
6165                     x_msg_data           => x_msg_data,
6166                     p_rulv_rec           => l_rulv_rec,
6167                     x_rulv_rec           => lx_rulv_rec);
6168 
6169             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6170               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6171             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6172               RAISE OKL_API.G_EXCEPTION_ERROR;
6173             END IF;
6174 
6175           end loop;
6176         end if;
6177       end loop;
6178     end loop;
6179 
6180     OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
6181                          x_msg_data    => x_msg_data);
6182 
6183   EXCEPTION
6184       when OKL_API.G_EXCEPTION_ERROR then
6185 
6186         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6187                         p_api_name  => l_api_name,
6188                         p_pkg_name  => G_PKG_NAME,
6189                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
6190                         x_msg_count => x_msg_count,
6191                         x_msg_data  => x_msg_data,
6192                         p_api_type  => G_API_TYPE);
6193 
6194       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
6195 
6196         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6197                         p_api_name  => l_api_name,
6198                         p_pkg_name  => G_PKG_NAME,
6199                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
6200                         x_msg_count => x_msg_count,
6201                         x_msg_data  => x_msg_data,
6202                         p_api_type  => G_API_TYPE);
6203 
6204       when OTHERS then
6205 
6206         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6207                         p_api_name  => l_api_name,
6208                         p_pkg_name  => G_PKG_NAME,
6209                         p_exc_name  => 'OTHERS',
6210                         x_msg_count => x_msg_count,
6211                         x_msg_data  => x_msg_data,
6212                         p_api_type  => G_API_TYPE);
6213   END adjust_partial_taa_pymt;
6214 
6215   ------------------------------------------------------------------------------
6216   --Start of comments
6217   --
6218   --Procedure Name        : get_nbv
6219   --Purpose               : Get Net Book Value- used internally
6220   --Modification History  :
6221   --13-Oct-2004    rpillay   Created
6222   ------------------------------------------------------------------------------
6223   PROCEDURE get_nbv(p_api_version     IN  NUMBER,
6224                     p_init_msg_list   IN  VARCHAR2,
6225                     x_return_status   OUT NOCOPY VARCHAR2,
6226                     x_msg_count       OUT NOCOPY NUMBER,
6227                     x_msg_data        OUT NOCOPY VARCHAR2,
6228                     p_asset_id        IN  NUMBER,
6229                     p_book_type_code  IN  VARCHAR2,
6230                     p_chr_id          IN  NUMBER,
6231                     p_release_date    IN  DATE,
6232                     x_nbv             OUT NOCOPY Number) IS
6233 
6234     l_return_status   VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6235     l_api_name        CONSTANT VARCHAR2(30) := 'GET_NBV';
6236     l_api_version	    CONSTANT NUMBER	:= 1.0;
6237 
6238     l_asset_hdr_rec            FA_API_TYPES.asset_hdr_rec_type;
6239     l_asset_fin_rec            FA_API_TYPES.asset_fin_rec_type;
6240     l_asset_deprn_rec          FA_API_TYPES.asset_deprn_rec_type;
6241 
6242     l_nbv                      NUMBER;
6243     l_converted_amount         NUMBER;
6244     l_contract_currency        OKL_K_HEADERS_FULL_V.currency_code%TYPE;
6245     l_currency_conversion_type OKL_K_HEADERS_FULL_V.currency_conversion_type%TYPE;
6246     l_currency_conversion_rate OKL_K_HEADERS_FULL_V.currency_conversion_rate%TYPE;
6247     l_currency_conversion_date OKL_K_HEADERS_FULL_V.currency_conversion_date%TYPE;
6248 
6249   BEGIN
6250      --call start activity to set savepoint
6251      l_return_status := OKL_API.START_ACTIVITY( substr(l_api_name,1,26),
6252                                                 p_init_msg_list,
6253                                                 '_PVT',
6254                                                 x_return_status);
6255      IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6256        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6257      ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
6258        RAISE OKL_API.G_EXCEPTION_ERROR;
6259      END IF;
6260 
6261      l_asset_hdr_rec.asset_id          := p_asset_id;
6262      l_asset_hdr_rec.book_type_code    := p_book_type_code;
6263 
6264      if NOT fa_cache_pkg.fazcbc(x_book => l_asset_hdr_rec.book_type_code) then
6265        OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
6266                            p_msg_name     => 'OKL_LLA_FA_CACHE_ERROR'
6267                           );
6268        Raise OKL_API.G_EXCEPTION_ERROR;
6269      end if;
6270 
6271      -- To fetch Asset Current Cost
6272      if not FA_UTIL_PVT.get_asset_fin_rec
6273               (p_asset_hdr_rec         => l_asset_hdr_rec,
6274                px_asset_fin_rec        => l_asset_fin_rec,
6275                p_transaction_header_id => NULL,
6276                p_mrc_sob_type_code     => 'P'
6277               ) then
6278 
6279        OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
6280                            p_msg_name     => 'OKL_LLA_FA_ASSET_FIN_REC_ERROR'
6281                           );
6282        Raise OKL_API.G_EXCEPTION_ERROR;
6283      end if;
6284 
6285      -- To fetch Depreciation Reserve
6286      if not FA_UTIL_PVT.get_asset_deprn_rec
6287                 (p_asset_hdr_rec         => l_asset_hdr_rec ,
6288                  px_asset_deprn_rec      => l_asset_deprn_rec,
6289                  p_period_counter        => NULL,
6290                  p_mrc_sob_type_code     => 'P'
6291                  ) then
6292        OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
6293                            p_msg_name     => 'OKL_LLA_FA_DEPRN_REC_ERROR'
6294                           );
6295        Raise OKL_API.G_EXCEPTION_ERROR;
6296      end if;
6297 
6298      l_nbv := l_asset_fin_rec.cost - l_asset_deprn_rec.deprn_reserve;
6299 
6300      l_converted_amount := 0;
6301      OKL_ACCOUNTING_UTIL.CONVERT_TO_CONTRACT_CURRENCY(
6302         p_khr_id                   => p_chr_id,
6303         p_from_currency            => NULL,
6304         p_transaction_date         => p_release_date,
6305         p_amount                   => l_nbv,
6306         x_return_status            => x_return_status,
6307         x_contract_currency        => l_contract_currency,
6308         x_currency_conversion_type => l_currency_conversion_type,
6309         x_currency_conversion_rate => l_currency_conversion_rate,
6310         x_currency_conversion_date => l_currency_conversion_date,
6311         x_converted_amount         => l_converted_amount);
6312 
6313       IF(x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6314         Okl_Api.Set_Message(p_app_name     => Okl_Api.G_APP_NAME,
6315                             p_msg_name     => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
6316         RAISE Okl_Api.G_EXCEPTION_ERROR;
6317       END IF;
6318 
6319       x_nbv := l_converted_amount;
6320 
6321      --Call end Activity
6322      OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
6323 EXCEPTION
6324   WHEN OKL_API.G_EXCEPTION_ERROR Then
6325     x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6326     (
6327       l_api_name,
6328       G_PKG_NAME,
6329       'OKL_API.G_RET_STS_ERROR',
6330       x_msg_count,
6331       x_msg_data,
6332       '_PVT'
6333     );
6334   WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6335     x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6336     (
6337       l_api_name,
6338       G_PKG_NAME,
6339       'OKL_API.G_RET_STS_UNEXP_ERROR',
6340       x_msg_count,
6341       x_msg_data,
6342       '_PVT'
6343     );
6344   WHEN OTHERS THEN
6345     x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6346     (
6347       l_api_name,
6348       G_PKG_NAME,
6349       'OTHERS',
6350       x_msg_count,
6351       x_msg_data,
6352       '_PVT'
6353     );
6354   END get_nbv;
6355 
6356 -------------
6357 --Bug# 4631549
6358 --------------
6359    -----------------------------------------------------------------------------------------------
6360 -- Start of Comments
6361 -- avsingh
6362 -- Procedure Name       : Calculate_Expected_Cost
6363 -- Description          : Calculate Expected Asset Cost based on the same formula used by offlease
6364 -- Business Rules       :
6365 --
6366 --
6367 --
6368 --
6369 --
6370 --
6371 --
6372 -- Parameters           :
6373 -- Version              : 1.0
6374 -- End of Commments
6375  PROCEDURE Calculate_expected_cost
6376             (p_api_version    IN  NUMBER,
6377              p_init_msg_list  IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
6378              x_return_status  OUT NOCOPY VARCHAR2,
6379              x_msg_count      OUT NOCOPY NUMBER,
6380              x_msg_data       OUT NOCOPY VARCHAR2,
6381              p_new_chr_id     IN  NUMBER,
6382              p_orig_chr_id    IN  NUMBER,
6383              p_orig_cle_id    IN  NUMBER,
6384              p_asset_id       IN  NUMBER,
6385              p_book_type_code IN  VARCHAR2,
6386              p_nbv            IN  NUMBER,
6387              p_release_date   IN  DATE,
6388              x_expected_cost  OUT NOCOPY NUMBER) IS
6389 
6390   l_return_status        VARCHAR2(1)  DEFAULT Okl_Api.G_RET_STS_SUCCESS;
6391   l_api_name             CONSTANT VARCHAR2(30) := 'CALCULATE EXPECTED COST';
6392   l_api_version          CONSTANT NUMBER := 1.0;
6393 
6394 
6395   --cursor to fetch deal type and taxowner
6396   Cursor l_book_class_csr (p_chr_id IN NUMBER) is
6397   select khr.deal_type          deal_type,
6398          rulb.rule_information1 tax_owner
6399   from   okl_k_headers khr,
6400          okc_rules_b   rulb
6401   where  rulb.dnz_chr_id                = p_chr_id
6402   and    rulb.rule_information_category = 'LATOWN'
6403   and    khr.id                         = p_chr_id;
6404 
6405   l_book_class_rec  l_book_class_csr%ROWTYPE;
6406   l_additional_parameters okl_execute_formula_pub.ctxt_val_tbl_type;
6407   l_expected_cost   NUMBER;
6408 
6409   l_converted_amount         NUMBER;
6410   l_contract_currency        OKL_K_HEADERS_FULL_V.currency_code%TYPE;
6411   l_currency_conversion_type OKL_K_HEADERS_FULL_V.currency_conversion_type%TYPE;
6412   l_currency_conversion_rate OKL_K_HEADERS_FULL_V.currency_conversion_rate%TYPE;
6413   l_currency_conversion_date OKL_K_HEADERS_FULL_V.currency_conversion_date%TYPE;
6414 
6415   BEGIN
6416       x_return_status := Okl_Api.G_RET_STS_SUCCESS;
6417       -- Call start_activity to create savepoint, check compatibility
6418       -- and initialize message list
6419       l_return_status := Okl_Api.START_ACTIVITY(
6420                         p_api_name      => l_api_name,
6421                         p_pkg_name      => g_pkg_name,
6422                         p_init_msg_list => p_init_msg_list,
6423                         l_api_version   => l_api_version,
6424                         p_api_version   => p_api_version,
6425                         p_api_type      => '_PVT',
6426                         x_return_status => x_return_status);
6427       -- Check if activity started successfully
6428       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6429          RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6430       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6431          RAISE Okl_Api.G_EXCEPTION_ERROR;
6432       END IF;
6433 
6434       Open l_book_class_csr(p_chr_id => p_orig_chr_id);
6435       fetch l_book_class_csr into l_book_class_rec;
6436       Close l_book_class_csr;
6437 
6438       IF l_book_class_rec.deal_type = 'LEASEOP' then
6439 
6440           IF nvl(p_nbv,0) = 0 Then
6441               -- Fetch NBV for Corporate Book
6442               l_expected_cost := 0;
6443               get_nbv(p_api_version     => p_api_version,
6444                       p_init_msg_list   => p_init_msg_list,
6445                       x_return_status   => x_return_status,
6446                       x_msg_count       => x_msg_count,
6447                       x_msg_data        => x_msg_data,
6448                       p_asset_id        => p_asset_id,
6449                       p_book_type_code  => p_book_type_code,
6450                       p_chr_id          => p_new_chr_id,
6451                       p_release_date    => p_release_date,
6452                       x_nbv             => l_expected_cost);
6453 
6454               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6455                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6456               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6457                   RAISE OKL_API.G_EXCEPTION_ERROR;
6458               END IF;
6459 
6460 
6461           ElsIf nvl(p_nbv,0) <> 0 then
6462               l_expected_cost := p_nbv;
6463           END IF;
6464 
6465      ELSIF l_book_class_rec.deal_type in ('LEASEDF','LEASEST') then
6466 
6467           l_additional_parameters(1).name  := 'quote_effective_from_date';
6468           l_additional_parameters(1).value := to_char(p_release_date - 1,'MM/DD/YYYY');
6469 
6470           okl_execute_formula_pub.execute (
6471                 p_api_version   => p_api_version,
6472                 p_init_msg_list => p_init_msg_list,
6473                 x_return_status => x_return_status,
6474                 x_msg_count     => x_msg_count,
6475                 x_msg_data      => x_msg_data,
6476                 --bug# 4631549
6477                 p_formula_name  => 'LINE_EXPECTED_ASSET_COST',
6478                 --p_formula_name  => 'LINE_ASSET_NET_INVESTMENT',
6479                 p_contract_id   => p_orig_chr_id,
6480                 p_line_id       => p_orig_cle_id,
6481                 p_additional_parameters => l_additional_parameters,
6482                 x_value         => l_expected_cost);
6483 
6484           IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6485               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6486           ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
6487               RAISE OKL_API.G_EXCEPTION_ERROR;
6488           END IF;
6489 
6490           l_converted_amount := 0;
6491           OKL_ACCOUNTING_UTIL.CONVERT_TO_CONTRACT_CURRENCY(
6492                               p_khr_id                   => p_new_chr_id,
6493                               p_from_currency            => NULL,
6494                               p_transaction_date         => p_release_date,
6495                               p_amount                   => l_expected_cost,
6496                               x_return_status            => x_return_status,
6497                               x_contract_currency        => l_contract_currency,
6498                               x_currency_conversion_type => l_currency_conversion_type,
6499                               x_currency_conversion_rate => l_currency_conversion_rate,
6500                               x_currency_conversion_date => l_currency_conversion_date,
6501                               x_converted_amount         => l_converted_amount);
6502 
6503           IF(x_return_status <> Okl_Api.G_RET_STS_SUCCESS) THEN
6504               Okl_Api.Set_Message(p_app_name     => Okl_Api.G_APP_NAME,
6505                                   p_msg_name     => 'OKL_CONV_TO_FUNC_CURRENCY_FAIL');
6506           RAISE Okl_Api.G_EXCEPTION_ERROR;
6507           l_expected_cost := l_converted_Amount;
6508       END IF;
6509       END IF;
6510       x_expected_cost := l_expected_cost;
6511 
6512       --Call end Activity
6513       OKL_API.END_ACTIVITY(x_msg_count, x_msg_data);
6514   EXCEPTION
6515   WHEN OKL_API.G_EXCEPTION_ERROR Then
6516     x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6517     (
6518       l_api_name,
6519       G_PKG_NAME,
6520       'OKL_API.G_RET_STS_ERROR',
6521       x_msg_count,
6522       x_msg_data,
6523       '_PVT'
6524     );
6525   WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6526     x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6527     (
6528       l_api_name,
6529       G_PKG_NAME,
6530       'OKL_API.G_RET_STS_UNEXP_ERROR',
6531       x_msg_count,
6532       x_msg_data,
6533       '_PVT'
6534     );
6535   WHEN OTHERS THEN
6536     x_return_status :=OKL_API.HANDLE_EXCEPTIONS
6537     (
6538       l_api_name,
6539       G_PKG_NAME,
6540       'OTHERS',
6541       x_msg_count,
6542       x_msg_data,
6543       '_PVT'
6544     );
6545   END Calculate_expected_cost;
6546    -----------------------------------------------------------------------------------------------
6547 -- Start of Comments
6548 -- Rekha Pillay
6549 -- Procedure Name       : Adjust_Asset_Lines
6550 -- Description          : Adjust Asset lines on the Re-lease contract
6551 -- Business Rules       :
6552 --
6553 --
6554 --
6555 --
6556 --
6557 --
6558 --
6559 -- Parameters           :
6560 -- Version              : 1.0
6561 -- End of Commments
6562   PROCEDURE adjust_asset_lines(p_api_version   IN  NUMBER,
6563                                p_init_msg_list IN  VARCHAR2,
6564                                x_return_status OUT NOCOPY VARCHAR2,
6565                                x_msg_count     OUT NOCOPY NUMBER,
6566                                x_msg_data      OUT NOCOPY VARCHAR2,
6567                                p_chr_id        IN  NUMBER,
6568                                p_release_date  IN  DATE) IS
6569 
6570     l_return_status   VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
6571     l_api_name        CONSTANT VARCHAR2(30) := 'ADJUST_ASSET_LINES';
6572     l_api_version     CONSTANT NUMBER	:= 1.0;
6573 
6574     CURSOR contract_fin_asset_csr
6575            (p_chr_id       IN NUMBER) IS
6576     SELECT cle.id,
6577            cle.start_date,
6578            sts.ste_code,
6579            cle.orig_system_id1
6580     FROM okc_k_lines_b cle,
6581          okc_line_styles_b lse,
6582          okc_statuses_b sts
6583     WHERE cle.dnz_chr_id = p_chr_id
6584     AND  cle.chr_id =  p_chr_id
6585     AND  cle.lse_id = lse.id
6586     AND  lse.lty_code = 'FREE_FORM1'
6587     AND  cle.sts_code = sts.code;
6588 
6589     CURSOR orig_cle_sts_csr(p_cle_id IN NUMBER)
6590     IS
6591     SELECT sts.ste_code,
6592            --Bug# 4670760
6593            cle.dnz_chr_id
6594     FROM   okc_k_lines_b cle,
6595            okc_statuses_b sts
6596     WHERE  cle.id = p_cle_id
6597     AND    cle.sts_code = sts.code;
6598 
6599     orig_cle_sts_rec orig_cle_sts_csr%ROWTYPE;
6600 
6601     CURSOR cle_csr(p_cle_id IN NUMBER) IS
6602     SELECT id,
6603            dnz_chr_id,
6604            chr_id,
6605            cle_id,
6606            lse_id,
6607            start_date
6608     FROM okc_k_lines_b
6609     CONNECT BY  PRIOR id = cle_id
6610     START WITH  id = p_cle_id;
6611 
6612     CURSOR lse_csr(p_lse_id IN NUMBER) IS
6613     SELECT lty_code
6614     FROM okc_line_styles_b
6615     WHERE id = p_lse_id;
6616 
6617     lse_rec            lse_csr%ROWTYPE;
6618 
6619     CURSOR asset_number_csr(p_cle_id IN NUMBER) IS
6620     SELECT name  asset_number
6621     FROM okc_k_lines_v
6622     WHERE id = p_cle_id;
6623 
6624     asset_number_rec asset_number_csr%ROWTYPE;
6625 
6626     CURSOR fa_asset_csr(p_asset_number   IN VARCHAR2)
6627     IS
6628     SELECT fab.asset_id,
6629            fab.book_type_code
6630     FROM   fa_additions fad,
6631            fa_book_controls fbc,
6632            fa_books fab
6633     WHERE  fad.asset_number = p_asset_number
6634     AND    fab.asset_id = fad.asset_id
6635     AND    fab.book_type_code = fbc.book_type_code
6636     AND    fab.transaction_header_id_out IS NULL
6637     AND    fbc.book_class = 'CORPORATE';
6638 
6639     fa_asset_rec       fa_asset_csr%ROWTYPE;
6640 
6641     CURSOR txl_asset_csr (p_chr_id IN NUMBER,
6642                           p_cle_id IN NUMBER) IS
6643     SELECT txlb.depreciation_cost,
6644            txlb.current_units,
6645            txlb.salvage_value,
6646            txlb.percent_salvage_value,
6647            txlb.id
6648     FROM   okl_txl_assets_b  txlb,
6649            okl_trx_assets    trx,
6650            okc_k_lines_b     fa_cleb,
6651            okc_line_styles_b fa_lseb
6652     WHERE  txlb.kle_id        = fa_cleb.id
6653     AND    txlb.tal_type      = 'CRL'
6654     AND    trx.id             = txlb.tas_id
6655     AND    trx.tsu_code       <> 'PROCESSED'
6656     AND    trx.tas_type       = 'CRL'
6657     AND    fa_cleb.cle_id     = p_cle_id
6658     AND    fa_cleb.dnz_chr_id = p_chr_id
6659     AND    fa_cleb.lse_id     = fa_lseb.id
6660     AND    fa_lseb.lty_code   = 'FIXED_ASSET';
6661 
6662     txl_asset_rec      txl_asset_csr%ROWTYPE;
6663 
6664     CURSOR modelline_csr(p_chr_id       IN NUMBER,
6665                          p_model_cle_id IN NUMBER) IS
6666     SELECT model_cim.id      model_cim_id
6667     FROM   okc_k_items       model_cim
6668     WHERE  model_cim.cle_id       = p_model_cle_id
6669     AND    model_cim.dnz_chr_id   = p_chr_id;
6670 
6671     modelline_rec      modelline_csr%ROWTYPE;
6672 
6673     CURSOR txd_asset_csr(p_tal_id in number) is
6674     SELECT txdb.tax_book,
6675            txdb.id
6676     FROM   okl_txd_assets_b txdb
6677     WHERE  txdb.tal_id      = p_tal_id;
6678 
6679     l_corp_net_book_value   NUMBER;
6680     l_tax_net_book_value    NUMBER;
6681 
6682     l_talv_rec         okl_txl_assets_pub.tlpv_rec_type;
6683     lx_talv_rec        okl_txl_assets_pub.tlpv_rec_type;
6684     l_txdv_rec         okl_txd_assets_pub.adpv_rec_type;
6685     lx_txdv_rec        okl_txd_assets_pub.adpv_rec_type;
6686 
6687     lp_cimv_rec        okl_okc_migration_pvt.cimv_rec_type;
6688     lx_cimv_rec        okl_okc_migration_pvt.cimv_rec_type;
6689 
6690     lp_klev_rec        okl_kle_pvt.klev_rec_type;
6691     lp_clev_rec        okl_okc_migration_pvt.clev_rec_type;
6692 
6693     lx_klev_rec        okl_kle_pvt.klev_rec_type;
6694     lx_clev_rec        okl_okc_migration_pvt.clev_rec_type;
6695 
6696     lp_cimv_temp_rec   okl_okc_migration_pvt.cimv_rec_type;
6697     lp_klev_temp_rec   okl_kle_pvt.klev_rec_type;
6698     lp_clev_temp_rec   okl_okc_migration_pvt.clev_rec_type;
6699 
6700     --Bug# 3950089
6701     CURSOR curr_hdr_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
6702     SELECT currency_code
6703     FROM   okc_k_headers_b
6704     WHERE  id = p_chr_id;
6705 
6706     l_currency_code OKC_K_LINES_B.CURRENCY_CODE%TYPE;
6707 
6708     --bug# 4670760
6709     l_orig_chr_id   NUMBER;
6710     l_orig_cle_id   NUMBER;
6711     l_expected_cost NUMBER;
6712 
6713   BEGIN
6714     x_return_status := Okl_Api.G_RET_STS_SUCCESS;
6715     -- Call start_activity to create savepoint, check compatibility
6716     -- and initialize message list
6717     l_return_status := Okl_Api.START_ACTIVITY(
6718 			p_api_name      => l_api_name,
6719 			p_pkg_name      => g_pkg_name,
6720 			p_init_msg_list => p_init_msg_list,
6721 			l_api_version   => l_api_version,
6722 			p_api_version   => p_api_version,
6723 			p_api_type      => '_PVT',
6724 			x_return_status => x_return_status);
6725     -- Check if activity started successfully
6726     IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
6727        RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
6728     ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
6729        RAISE Okl_Api.G_EXCEPTION_ERROR;
6730     END IF;
6731 
6732     --Bug# 3950089
6733     l_currency_code := '?';
6734     open curr_hdr_csr (p_chr_id);
6735     fetch curr_hdr_csr into l_currency_code;
6736     close curr_hdr_csr;
6737 
6738     if (l_currency_code = '?') then
6739 
6740       OKL_API.set_message(p_app_name     => G_APP_NAME,
6741                           p_msg_name     => G_REQUIRED_VALUE,
6742                           p_token1       => G_COL_NAME_TOKEN,
6743                           p_token1_value => 'Currency Code');
6744       RAISE OKL_API.G_EXCEPTION_ERROR;
6745     end if;
6746 
6747     -- Fetch Financial Asset Top line
6748     for contract_fin_asset_rec in contract_fin_asset_csr
6749                                  (p_chr_id => p_chr_id) loop
6750 
6751       -- Fetch Status of the Line in original contract
6752       open orig_cle_sts_csr(p_cle_id => contract_fin_asset_rec.orig_system_id1);
6753       fetch orig_cle_sts_csr into orig_cle_sts_rec;
6754       close orig_cle_sts_csr;
6755 
6756       if (contract_fin_asset_rec.ste_code IN ('TERMINATED', 'EXPIRED', 'CANCELLED'))
6757          or ( orig_cle_sts_rec.ste_code IN ('TERMINATED', 'EXPIRED', 'CANCELLED')) then
6758 
6759         -- Delete Lines which are not Active
6760         OKL_CONTRACT_PUB.delete_contract_line(
6761           p_api_version   => p_api_version,
6762           p_init_msg_list => p_init_msg_list,
6763           x_return_status => x_return_status,
6764           x_msg_count     => x_msg_count,
6765           x_msg_data      => x_msg_data,
6766           p_line_id       => contract_fin_asset_rec.id
6767          );
6768 
6769         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6770           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6771         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6772           RAISE OKL_API.G_EXCEPTION_ERROR;
6773         END IF;
6774 
6775       else
6776 
6777         open asset_number_csr(p_cle_id => contract_fin_asset_rec.id);
6778         fetch asset_number_csr into asset_number_rec;
6779         close asset_number_csr;
6780 
6781         open fa_asset_csr(p_asset_number => asset_number_rec.asset_number);
6782         fetch fa_asset_csr into fa_asset_rec;
6783         close fa_asset_csr;
6784 
6785         -- Fetch NBV for Corporate Book
6786         l_corp_net_book_value := 0;
6787         get_nbv(p_api_version     => p_api_version,
6788                 p_init_msg_list   => p_init_msg_list,
6789 	        x_return_status   => x_return_status,
6790                 x_msg_count       => x_msg_count,
6791                 x_msg_data        => x_msg_data,
6792                 p_asset_id        => fa_asset_rec.asset_id,
6793                 p_book_type_code  => fa_asset_rec.book_type_code,
6794                 p_chr_id          => p_chr_id,
6795                 p_release_date    => p_release_date,
6796                 x_nbv             => l_corp_net_book_value);
6797 
6798         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6799           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6800         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6801           RAISE OKL_API.G_EXCEPTION_ERROR;
6802         END IF;
6803 
6804         --Bug# 4670760
6805         --Get expected asset Cost
6806         l_orig_chr_id := orig_cle_sts_rec.dnz_chr_id;
6807         l_orig_cle_id := contract_fin_Asset_rec.orig_system_id1;
6808 
6809         -- Calculate  Expected asset cost (cost of the asset expected after re-lease)
6810         Calculate_Expected_Cost(p_api_version    => p_api_version,
6811                                 p_init_msg_list  => p_init_msg_list,
6812                                 x_return_status  => x_return_status,
6813                                 x_msg_count      => x_msg_count,
6814                                 x_msg_data       => x_msg_data,
6815                                 p_new_chr_id     => p_chr_id,
6816                                 p_orig_chr_id    => l_orig_chr_id,
6817                                 p_orig_cle_id    => l_orig_cle_id,
6818                                 p_asset_id       => fa_asset_rec.asset_id,
6819                                 p_book_type_code => fa_asset_rec.book_type_code,
6820                                 p_release_date   => p_release_date,
6821                                 p_nbv            => l_corp_net_book_value,
6822                                 x_expected_cost  => l_expected_cost);
6823 
6824         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6825             RAISE OKL_API.G_EXCEPTION_ERROR;
6826         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6827             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6828         END IF;
6829         --End Bug# 4670760
6830 
6831         open txl_asset_csr(p_chr_id => p_chr_id
6832                           ,p_cle_id => contract_fin_asset_rec.id);
6833         fetch txl_asset_csr into txl_asset_rec;
6834         close txl_asset_csr;
6835 
6836         if l_corp_net_book_value IS NOT NULL then
6837 
6838           --Update Okl_Txl_Assets for Depreciation cost and
6839           --Original cost
6840           l_talv_rec.id                    := txl_asset_rec.id;
6841           l_talv_rec.depreciation_cost     := l_corp_net_book_value;
6842           l_talv_rec.original_cost         := l_corp_net_book_value;
6843 
6844           OKL_TXL_ASSETS_PUB.update_txl_asset_def(
6845                        p_api_version    => p_api_version,
6846                        p_init_msg_list  => p_init_msg_list,
6847                        x_return_status  => x_return_status,
6848                        x_msg_count      => x_msg_count,
6849                        x_msg_data       => x_msg_data,
6850                        p_tlpv_rec       => l_talv_rec,
6851                        x_tlpv_rec       => lx_talv_rec);
6852 
6853           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6854             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6855           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6856             RAISE OKL_API.G_EXCEPTION_ERROR;
6857           END IF;
6858         end if;
6859 
6860         for txd_asset_rec in txd_asset_csr(p_tal_id => txl_asset_rec.id) loop
6861 
6862           -- Fetch NBV for Tax Book
6863           l_tax_net_book_value := 0;
6864           get_nbv(p_api_version     => p_api_version,
6865                   p_init_msg_list   => p_init_msg_list,
6866 	            x_return_status   => x_return_status,
6867                   x_msg_count       => x_msg_count,
6868                   x_msg_data        => x_msg_data,
6869                   p_asset_id        => fa_asset_rec.asset_id,
6870                   p_book_type_code  => txd_asset_rec.tax_book,
6871                   p_chr_id          => p_chr_id,
6872                   p_release_date    => p_release_date,
6873                   x_nbv             => l_tax_net_book_value);
6874 
6875           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6876             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6877           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6878             RAISE OKL_API.G_EXCEPTION_ERROR;
6879           END IF;
6880 
6881           if l_tax_net_book_value IS NOT NULL then
6882 
6883             --Update Okl_Txd_Assets for Cost
6884             l_txdv_rec.id       := txd_asset_rec.id;
6885             l_txdv_rec.cost     := l_tax_net_book_value;
6886 
6887             OKL_TXD_ASSETS_PUB.UPDATE_TXD_ASSET_DEF
6888               (p_api_version    =>  p_api_version,
6889                p_init_msg_list  =>  p_init_msg_list,
6890                x_return_status  =>  x_return_status,
6891                x_msg_count      =>  x_msg_count,
6892                x_msg_data       =>  x_msg_data,
6893                p_adpv_rec       =>  l_txdv_rec,
6894                x_adpv_rec       =>  lx_txdv_rec);
6895 
6896             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6897               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6898             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6899               RAISE OKL_API.G_EXCEPTION_ERROR;
6900             END IF;
6901           end if;
6902         end loop;
6903 
6904         -- Loop through Financial asset line and all its children
6905         -- for making updates
6906         for cle_rec in cle_csr(p_cle_id => contract_fin_asset_rec.id) loop
6907 
6908           lp_clev_rec := lp_clev_temp_rec;
6909           lp_klev_rec := lp_klev_temp_rec;
6910           lp_cimv_rec := lp_cimv_temp_rec;
6911 
6912           open lse_csr(p_lse_id => cle_rec.lse_id);
6913           fetch lse_csr into lse_rec;
6914           close lse_csr;
6915 
6916           -- Subsidy Line
6917           if lse_rec.lty_code = 'SUBSIDY' then
6918 
6919             -- Delete Subsidy Lines
6920             OKL_CONTRACT_PUB.delete_contract_line(
6921               p_api_version   => p_api_version,
6922               p_init_msg_list => p_init_msg_list,
6923               x_return_status => x_return_status,
6924               x_msg_count     => x_msg_count,
6925               x_msg_data      => x_msg_data,
6926               p_line_id       => cle_rec.id
6927             );
6928 
6929             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6930               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6931             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6932               RAISE OKL_API.G_EXCEPTION_ERROR;
6933             END IF;
6934 
6935           -- Financial Asset line
6936           elsif lse_rec.lty_code = 'FREE_FORM1' then
6937 
6938             --Update Financial asset line for OEC and Residual value
6939             lp_clev_rec.id                  := cle_rec.id;
6940 
6941             if cle_rec.start_date < p_release_date then
6942               lp_clev_rec.start_date        := p_release_date;
6943             end if;
6944 
6945             lp_klev_rec.id                  := cle_rec.id;
6946             -- l_clev_rec.price_unit          := OKL_API.G_MISS_NUM;
6947             --Bug# 4631549: Take residual percent and residual value from the previous contract
6948             --lp_klev_rec.residual_percentage := txl_asset_rec.percent_salvage_value;
6949             --lp_klev_rec.residual_value      := txl_asset_rec.salvage_value;
6950             lp_klev_rec.oec                 := NVL(l_corp_net_book_value,0);
6951 
6952             --Bug# 4631549: Not required to sync residual value and percent as they
6953             --              are now getting copied from previous contract
6954             /*
6955             --Bug# 3950089: Sync Residual value and percent
6956             if (lp_klev_rec.residual_value IS NOT NULL) then
6957 
6958               if (lp_klev_rec.residual_value = 0 or lp_klev_rec.oec = 0) then
6959                 lp_klev_rec.residual_percentage := 0;
6960               else
6961                 lp_klev_rec.residual_percentage := ROUND(lp_klev_rec.residual_value * 100/lp_klev_rec.oec,2);
6962               end if;
6963 
6964             elsif (lp_klev_rec.residual_percentage IS NOT NULL) then
6965               lp_klev_rec.residual_value :=  (lp_klev_rec.residual_percentage/100 * lp_klev_rec.oec);
6966 
6967               lp_klev_rec.residual_value :=
6968                         OKL_ACCOUNTING_UTIL.cross_currency_round_amount
6969                           (p_amount        => lp_klev_rec.residual_value,
6970                            p_currency_code => l_currency_code);
6971             end if;
6972             */
6973 
6974             --Bug# 4631549 : Update Expected asset cost (cost of the asset expected after re-lease)
6975             lp_klev_rec.expected_asset_cost := l_expected_cost;
6976 
6977             OKL_CONTRACT_PUB.update_contract_line
6978               (p_api_version    => p_api_version,
6979                p_init_msg_list  => p_init_msg_list,
6980                x_return_status  => x_return_status,
6981                x_msg_count      => x_msg_count,
6982                x_msg_data       => x_msg_data,
6983                p_clev_rec       => lp_clev_rec,
6984                p_klev_rec       => lp_klev_rec,
6985                x_clev_rec       => lx_clev_rec,
6986                x_klev_rec       => lx_klev_rec);
6987             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6988               RAISE OKL_API.G_EXCEPTION_ERROR;
6989             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6990               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6991             END IF;
6992             --End Bug# 4631549
6993 
6994           -- Model line
6995           elsif lse_rec.lty_code = 'ITEM' then
6996 
6997             --Update Model line for Unit Price and No. of items
6998             lp_clev_rec.id                 := cle_rec.id;
6999 
7000             if cle_rec.start_date < p_release_date then
7001               lp_clev_rec.start_date       := p_release_date;
7002             end if;
7003 
7004             lp_klev_rec.id                 := cle_rec.id;
7005 
7006             if l_corp_net_book_value IS NULL then
7007               lp_clev_rec.price_unit  :=
7008                 (txl_asset_rec.depreciation_cost/txl_asset_rec.current_units);
7009             elsif l_corp_net_book_value IS NOT NULL then
7010               lp_clev_rec.price_unit  := (l_corp_net_book_value/txl_asset_rec.current_units);
7011             end if;
7012 
7013             open modelline_csr(p_chr_id => p_chr_id
7014                               ,p_model_cle_id => cle_rec.id);
7015             fetch modelline_csr into modelline_rec;
7016             close modelline_csr;
7017 
7018             lp_cimv_rec.id                 := modelline_rec.model_cim_id;
7019             lp_cimv_rec.number_of_items    := txl_asset_rec.current_units;
7020 
7021             OKL_CONTRACT_PUB.update_contract_line
7022               (p_api_version    => p_api_version,
7023                p_init_msg_list  => p_init_msg_list,
7024                x_return_status  => x_return_status,
7025                x_msg_count      => x_msg_count,
7026                x_msg_data       => x_msg_data,
7027                p_clev_rec       => lp_clev_rec,
7028                p_klev_rec       => lp_klev_rec,
7029                x_clev_rec       => lx_clev_rec,
7030                x_klev_rec       => lx_klev_rec);
7031             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7032               RAISE OKL_API.G_EXCEPTION_ERROR;
7033             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7034               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7035             END IF;
7036 
7037             OKL_OKC_MIGRATION_PVT.update_contract_item
7038               (p_api_version    => p_api_version,
7039                p_init_msg_list  => p_init_msg_list,
7040                x_return_status  => x_return_status,
7041                x_msg_count      => x_msg_count,
7042                x_msg_data       => x_msg_data,
7043                p_cimv_rec       => lp_cimv_rec,
7044                x_cimv_rec       => lx_cimv_rec);
7045             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7046               RAISE OKL_API.G_EXCEPTION_ERROR;
7047             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7048               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7049             END IF;
7050 
7051           -- For all other lines update Start Date to Re-lease date
7052           else
7053 
7054             lp_clev_rec.id         := cle_rec.id;
7055 
7056             if cle_rec.start_date < p_release_date then
7057               lp_clev_rec.start_date := p_release_date;
7058             end if;
7059 
7060             -- Set Line Start Date equal to Release Date
7061             OKL_CONTRACT_PUB.update_contract_line(
7062               p_api_version         => p_api_version,
7063               p_init_msg_list       => p_init_msg_list,
7064               x_return_status       => x_return_status,
7065               x_msg_count           => x_msg_count,
7066               x_msg_data            => x_msg_data,
7067               p_clev_rec            => lp_clev_rec,
7068               p_klev_rec            => lp_klev_rec,
7069               x_clev_rec            => lx_clev_rec,
7070               x_klev_rec            => lx_klev_rec
7071             );
7072 
7073             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7074               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7075             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7076               RAISE OKL_API.G_EXCEPTION_ERROR;
7077             END IF;
7078           end if;
7079         end loop;
7080 
7081       end if;
7082     end loop;
7083 
7084     OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
7085                          x_msg_data    => x_msg_data);
7086 
7087   EXCEPTION
7088       when OKL_API.G_EXCEPTION_ERROR then
7089 
7090         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7091                         p_api_name  => l_api_name,
7092                         p_pkg_name  => G_PKG_NAME,
7093                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
7094                         x_msg_count => x_msg_count,
7095                         x_msg_data  => x_msg_data,
7096                         p_api_type  => G_API_TYPE);
7097 
7098       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
7099 
7100         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7101                         p_api_name  => l_api_name,
7102                         p_pkg_name  => G_PKG_NAME,
7103                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
7104                         x_msg_count => x_msg_count,
7105                         x_msg_data  => x_msg_data,
7106                         p_api_type  => G_API_TYPE);
7107 
7108       when OTHERS then
7109 
7110         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7111                         p_api_name  => l_api_name,
7112                         p_pkg_name  => G_PKG_NAME,
7113                         p_exc_name  => 'OTHERS',
7114                         x_msg_count => x_msg_count,
7115                         x_msg_data  => x_msg_data,
7116                         p_api_type  => G_API_TYPE);
7117   END adjust_asset_lines;
7118 
7119 -----------------------------------------------------------------------------------------------
7120 -- Start of Comments
7121 -- Rekha Pillay
7122 -- Procedure Name       : Update_Taa_Request_Info
7123 -- Description          : Update the Re-lease contract with contract related
7124 --                        information entered in the Transfer and Assumption
7125 --                        Request
7126 -- Business Rules       :
7127 --
7128 --
7129 --
7130 --
7131 --
7132 --
7133 --
7134 -- Parameters           :
7135 -- Version              : 1.0
7136 -- End of Commments
7137   PROCEDURE update_taa_request_info(p_api_version   IN  NUMBER,
7138                                     p_init_msg_list IN  VARCHAR2,
7139                                     x_return_status OUT NOCOPY VARCHAR2,
7140                                     x_msg_count     OUT NOCOPY NUMBER,
7141                                     x_msg_data      OUT NOCOPY VARCHAR2,
7142                                     p_chr_id        IN  NUMBER,
7143                                     p_taa_trx_id    IN  NUMBER,
7144                                     p_org_id        IN  NUMBER) IS
7145 
7146     l_return_status   VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
7147     l_api_name        CONSTANT VARCHAR2(30) := 'UPDATE_TAA_REQUEST_INFO';
7148     l_api_version     CONSTANT NUMBER	:= 1.0;
7149 
7150     CURSOR taa_party_info_csr(p_taa_trx_id IN NUMBER) IS
7151     SELECT party_rel_id2_new
7152     FROM okl_trx_contracts
7153     WHERE id = p_taa_trx_id;
7154 
7155     taa_party_info_rec taa_party_info_csr%ROWTYPE;
7156 
7157     CURSOR taa_chr_hdr_dtl_csr(p_taa_trx_id IN NUMBER) IS
7158     SELECT bill_to_site_id,
7159            cust_acct_id,
7160            bank_acct_id,
7161            invoice_format_id,
7162            payment_mthd_id,
7163            mla_id,
7164            credit_line_id,
7165            --Bug# 4191851
7166            insurance_yn,
7167            lease_policy_yn,
7168            ipy_type,
7169            policy_number,
7170            covered_amt,
7171            deductible_amt,
7172            effective_to_date,
7173            effective_from_date,
7174            proof_provided_date,
7175            proof_required_date,
7176            lessor_insured_yn,
7177            lessor_payee_yn,
7178            int_id,
7179            isu_id,
7180            agency_site_id,
7181            agent_site_id,
7182            territory_code
7183     FROM okl_taa_request_details_b
7184     WHERE tcn_id = p_taa_trx_id;
7185 
7186     taa_chr_hdr_dtl_rec taa_chr_hdr_dtl_csr%ROWTYPE;
7187 
7188     CURSOR party_role_csr(p_chr_id IN NUMBER) IS
7189     SELECT id
7190     FROM okc_k_party_roles_b
7191     WHERE chr_id = p_chr_id
7192     AND rle_code = 'LESSEE';
7193 
7194     party_role_rec     party_role_csr%ROWTYPE;
7195     lp_cplv_rec        okl_okc_migration_pvt.cplv_rec_type;
7196     lx_cplv_rec        okl_okc_migration_pvt.cplv_rec_type;
7197 
7198     l_chrv_rec         okl_okc_migration_pvt.chrv_rec_type;
7199     lx_chrv_rec        okl_okc_migration_pvt.chrv_rec_type;
7200 
7201     CURSOR hdr_rules_csr(p_chr_id   IN NUMBER,
7202                          p_rgd_code IN VARCHAR2,
7203                          p_rul_cat  IN VARCHAR2) IS
7204     select rul.id rul_id,
7205            rgp.id rgp_id
7206     from okc_rule_groups_b rgp,
7207          okc_rules_b rul
7208     where rgp.id = rul.rgp_id
7209     and rgp.rgd_code = p_rgd_code
7210     and rul.rule_information_category = p_rul_cat
7211     and rgp.dnz_chr_id = p_chr_id
7212     and rgp.chr_id = p_chr_id
7213     and rul.dnz_chr_id = p_chr_id;
7214 
7215     hdr_rules_rec    hdr_rules_csr%ROWTYPE;
7216     lp_rulv_rec      Okl_Rule_Pub.rulv_rec_type;
7217     lx_rulv_rec      Okl_Rule_Pub.rulv_rec_type;
7218     lp_rulv_temp_rec Okl_Rule_Pub.rulv_rec_type;
7219 
7220     CURSOR invoice_format_csr(p_invoice_format_id IN NUMBER) IS
7221     SELECT name
7222     FROM okl_invoice_formats_v
7223     WHERE ID = p_invoice_format_id;
7224 
7225     invoice_format_rec invoice_format_csr%ROWTYPE;
7226 
7227     CURSOR governance_csr(p_chr_id   IN NUMBER,
7228                           p_scs_code IN VARCHAR2) IS
7229     SELECT id
7230     FROM okc_governances gve
7231     WHERE chr_id = p_chr_id
7232     AND dnz_chr_id = p_chr_id
7233     AND EXISTS (SELECT 1
7234                 FROM okc_k_headers_b chr
7235                 WHERE chr.id = gve.chr_id_referred
7236                 AND   chr.scs_code = p_scs_code);
7237 
7238    governance_rec     governance_csr%ROWTYPE;
7239    lp_gvev_rec        okl_okc_migration_pvt.gvev_rec_type;
7240    lx_gvev_rec        okl_okc_migration_pvt.gvev_rec_type;
7241    lp_gvev_temp_rec   okl_okc_migration_pvt.gvev_rec_type;
7242 
7243    CURSOR taa_lines_csr(p_chr_id     IN NUMBER,
7244                         p_taa_trx_id IN NUMBER) IS
7245    SELECT cle.id,
7246           tcl.source_column_1,
7247           tcl.source_value_1,
7248           tcl.source_column_2,
7249           tcl.source_value_2,
7250           tcl.source_column_3,
7251           tcl.source_value_3
7252    FROM okc_k_lines_b cle,
7253         okc_line_styles_b lse,
7254         okl_txl_cntrct_lns tcl
7255    WHERE cle.chr_id = p_chr_id
7256    AND cle.dnz_chr_id = p_chr_id
7257    AND lse.lty_code = 'FREE_FORM1'
7258    AND cle.lse_id = lse.id
7259    AND tcl.tcn_id = p_taa_trx_id
7260    AND tcl.kle_id = cle.orig_system_id1
7261    AND tcl.before_transfer_yn = 'N';
7262 
7263    lp_klev_rec  okl_kle_pvt.klev_rec_type;
7264    lp_clev_rec  okl_okc_migration_pvt.clev_rec_type;
7265 
7266    lx_klev_rec  okl_kle_pvt.klev_rec_type;
7267    lx_clev_rec  okl_okc_migration_pvt.clev_rec_type;
7268 
7269    CURSOR txl_asset_csr(p_chr_id IN NUMBER,
7270                         p_cle_id IN NUMBER) IS
7271    SELECT txlb.id
7272    FROM   okl_txl_assets_b  txlb,
7273           okl_trx_assets    trx,
7274           okc_k_lines_b     fa_cleb,
7275           okc_line_styles_b fa_lseb
7276    WHERE  txlb.kle_id        = fa_cleb.id
7277    AND    txlb.tal_type      = 'CRL'
7278    AND    trx.id             = txlb.tas_id
7279    AND    trx.tsu_code       <> 'PROCESSED'
7280    AND    trx.tas_type       = 'CRL'
7281    AND    fa_cleb.cle_id     = p_cle_id
7282    AND    fa_cleb.dnz_chr_id = p_chr_id
7283    AND    fa_cleb.lse_id     = fa_lseb.id
7284    AND    fa_lseb.lty_code   = 'FIXED_ASSET';
7285 
7286    txl_asset_rec txl_asset_csr%ROWTYPE;
7287 
7288    l_talv_rec         okl_txl_assets_pub.tlpv_rec_type;
7289    lx_talv_rec        okl_txl_assets_pub.tlpv_rec_type;
7290 
7291    CURSOR txl_ib_csr (p_chr_id IN NUMBER,
7292                       p_cle_id IN NUMBER) is
7293    SELECT iti.id,
7294           iti.object_id1_new,
7295           iti.object_id2_new,
7296           iti.jtot_object_code_new
7297    FROM   okl_trx_assets    trx,
7298           okl_txl_itm_insts iti,
7299           okc_k_lines_b     cleb_ib,
7300           okc_line_styles_b lseb_ib,
7301           okc_k_lines_b     cleb_inst,
7302           okc_line_styles_b lseb_inst
7303    WHERE  trx.id               = iti.tas_id
7304    AND    trx.tsu_code         <> 'PROCESSED'
7305    AND    trx.tas_type         = 'CRL'
7306    AND    iti.kle_id           = cleb_ib.id
7307    AND    iti.tal_type         = 'CRL'
7308    AND    cleb_ib.cle_id       = cleb_inst.id
7309    AND    cleb_ib.dnz_chr_id   = cleb_inst.dnz_chr_id
7310    AND    cleb_ib.lse_id       = lseb_ib.id
7311    AND    lseb_ib.lty_code     = 'INST_ITEM'
7312    AND    cleb_inst.cle_id     = p_cle_id
7313    AND    cleb_inst.dnz_chr_id = p_chr_id
7314    AND    cleb_inst.lse_id     = lseb_inst.id
7315    AND    lseb_inst.lty_code   = 'FREE_FORM2';
7316 
7317    l_itiv_ib_tbl  OKL_TXL_ITM_INSTS_PUB.iipv_tbl_type;
7318    lx_itiv_ib_tbl OKL_TXL_ITM_INSTS_PUB.iipv_tbl_type;
7319    i NUMBER;
7320 
7321    --Bug# 4191851
7322    l_ipyv_rec     OKL_IPY_PVT.ipyv_rec_type;
7323    lx_ipyv_rec    OKL_IPY_PVT.ipyv_rec_type;
7324 
7325    --Bug# 4558486
7326    lp_kplv_rec      OKL_K_PARTY_ROLES_PVT.kplv_rec_type;
7327    lx_kplv_rec      OKL_K_PARTY_ROLES_PVT.kplv_rec_type;
7328 
7329   BEGIN
7330     x_return_status := Okl_Api.G_RET_STS_SUCCESS;
7331     -- Call start_activity to create savepoint, check compatibility
7332     -- and initialize message list
7333     l_return_status := Okl_Api.START_ACTIVITY(
7334 			p_api_name      => l_api_name,
7335 			p_pkg_name      => g_pkg_name,
7336 			p_init_msg_list => p_init_msg_list,
7337 			l_api_version   => l_api_version,
7338 			p_api_version   => p_api_version,
7339 			p_api_type      => '_PVT',
7340 			x_return_status => x_return_status);
7341     -- Check if activity started successfully
7342     IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
7343        RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
7344     ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
7345        RAISE Okl_Api.G_EXCEPTION_ERROR;
7346     END IF;
7347 
7348     OPEN taa_party_info_csr(p_taa_trx_id => p_taa_trx_id);
7349     FETCH taa_party_info_csr INTO taa_party_info_rec;
7350     CLOSE taa_party_info_csr;
7351 
7352     OPEN taa_chr_hdr_dtl_csr(p_taa_trx_id => p_taa_trx_id);
7353     FETCH taa_chr_hdr_dtl_csr INTO taa_chr_hdr_dtl_rec;
7354     CLOSE taa_chr_hdr_dtl_csr;
7355 
7356     -- Update Lessee
7357     IF (taa_party_info_rec.party_rel_id2_new IS NOT NULL) THEN
7358 
7359       party_role_rec.id := NULL;
7360       OPEN party_role_csr(p_chr_id => p_chr_id);
7361       FETCH party_role_csr INTO party_role_rec;
7362       CLOSE party_role_csr;
7363 
7364       IF (party_role_rec.id IS NOT NULL) THEN
7365 
7366         lp_cplv_rec.id := party_role_rec.id;
7367         lp_cplv_rec.object1_id1 := taa_party_info_rec.party_rel_id2_new;
7368         lp_cplv_rec.object1_id2 := '#';
7369 
7370         --Bug# 4558486: Changed call to okl_k_party_roles_pvt api
7371         --              to update records in tables
7372         --              okc_k_party_roles_b and okl_k_party_roles
7373         /*
7374         OKL_OKC_MIGRATION_PVT.update_k_party_role
7375           (p_api_version    => p_api_version,
7376            p_init_msg_list  => p_init_msg_list,
7377            x_return_status  => x_return_status,
7378            x_msg_count      => x_msg_count,
7379            x_msg_data       => x_msg_data,
7380            p_cplv_rec       => lp_cplv_rec,
7381            x_cplv_rec       => lx_cplv_rec);
7382         */
7383 
7384         lp_kplv_rec.id := lp_cplv_rec.id;
7385         OKL_K_PARTY_ROLES_PVT.update_k_party_role
7386           (p_api_version   => p_api_version,
7387            p_init_msg_list => p_init_msg_list,
7388            x_return_status => x_return_status,
7389            x_msg_count     => x_msg_count,
7390            x_msg_data      => x_msg_data,
7391            p_cplv_rec      => lp_cplv_rec,
7392            x_cplv_rec      => lx_cplv_rec,
7393            p_kplv_rec      => lp_kplv_rec,
7394            x_kplv_rec      => lx_kplv_rec);
7395 
7396         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7397           RAISE OKL_API.G_EXCEPTION_ERROR;
7398         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7399           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7400         END IF;
7401       END IF;
7402     END IF;
7403 
7404     -- Update Customer Account and Header level Bill-To-Site
7405     IF (taa_chr_hdr_dtl_rec.cust_acct_id IS NOT NULL) THEN
7406 
7407       l_chrv_rec.id := p_chr_id;
7408       l_chrv_rec.cust_acct_id := taa_chr_hdr_dtl_rec.cust_acct_id;
7409 
7410       IF (taa_chr_hdr_dtl_rec.bill_to_site_id IS NOT NULL) THEN
7411         l_chrv_rec.bill_to_site_use_id := taa_chr_hdr_dtl_rec.bill_to_site_id;
7412       END IF;
7413 
7414       OKL_OKC_MIGRATION_PVT.update_contract_header(
7415         p_api_version        => p_api_version,
7416         p_init_msg_list      => p_init_msg_list,
7417         x_return_status      => x_return_status,
7418         x_msg_count          => x_msg_count,
7419         x_msg_data           => x_msg_data,
7420         p_restricted_update  => OKL_API.G_FALSE,
7421         p_chrv_rec           => l_chrv_rec,
7422         x_chrv_rec           => lx_chrv_rec);
7423 
7424       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7425         RAISE OKL_API.G_EXCEPTION_ERROR;
7426       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7427         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7428       END IF;
7429     END IF;
7430 
7431     -- Update Header level Bank Account
7432     lp_rulv_rec := lp_rulv_temp_rec;
7433     IF (taa_chr_hdr_dtl_rec.bank_acct_id IS NOT NULL) THEN
7434 
7435       hdr_rules_rec.rul_id := NULL;
7436       hdr_rules_rec.rgp_id := NULL;
7437       OPEN hdr_rules_csr(p_chr_id   => p_chr_id,
7438                          p_rgd_code => 'LABILL',
7439                          p_rul_cat  => 'LABACC');
7440       FETCH hdr_rules_csr INTO hdr_rules_rec;
7441       CLOSE hdr_rules_csr;
7442 
7443       IF (hdr_rules_rec.rul_id IS NOT NULL) THEN
7444         lp_rulv_rec.id := hdr_rules_rec.rul_id;
7445         lp_rulv_rec.rgp_id := hdr_rules_rec.rgp_id;
7446         lp_rulv_rec.rule_information_category := 'LABACC';
7447         lp_rulv_rec.dnz_chr_id := p_chr_id;
7448         lp_rulv_rec.object1_id1 := taa_chr_hdr_dtl_rec.bank_acct_id;
7449         lp_rulv_rec.object1_id2 := '#';
7450         lp_rulv_rec.jtot_object1_code := 'OKX_CUSTBKAC';
7451         lp_rulv_rec.warn_yn := 'N';
7452         lp_rulv_rec.std_template_yn := 'N';
7453 
7454         OKL_RULE_PUB.update_rule(
7455           p_api_version    => p_api_version,
7456           p_init_msg_list  => p_init_msg_list,
7457           x_return_status  => x_return_status,
7458           x_msg_count      => x_msg_count,
7459           x_msg_data       => x_msg_data,
7460           p_rulv_rec       => lp_rulv_rec,
7461           x_rulv_rec       => lx_rulv_rec);
7462 
7463         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7464           RAISE OKL_API.G_EXCEPTION_ERROR;
7465         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7466           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7467         END IF;
7468       END IF;
7469     END IF;
7470 
7471     -- Update Header level Payment Method
7472     lp_rulv_rec := lp_rulv_temp_rec;
7473     IF (taa_chr_hdr_dtl_rec.payment_mthd_id IS NOT NULL) THEN
7474 
7475       hdr_rules_rec.rul_id := NULL;
7476       hdr_rules_rec.rgp_id := NULL;
7477       OPEN hdr_rules_csr(p_chr_id   => p_chr_id,
7478                          p_rgd_code => 'LABILL',
7479                          p_rul_cat  => 'LAPMTH');
7480       FETCH hdr_rules_csr INTO hdr_rules_rec;
7481       CLOSE hdr_rules_csr;
7482 
7483       IF (hdr_rules_rec.rul_id IS NOT NULL) THEN
7484         lp_rulv_rec.id := hdr_rules_rec.rul_id;
7485         lp_rulv_rec.rgp_id := hdr_rules_rec.rgp_id;
7486         lp_rulv_rec.rule_information_category := 'LAPMTH';
7487         lp_rulv_rec.dnz_chr_id := p_chr_id;
7488         lp_rulv_rec.object1_id1 := taa_chr_hdr_dtl_rec.payment_mthd_id;
7489         lp_rulv_rec.object1_id2 := '#';
7490         lp_rulv_rec.jtot_object1_code := 'OKX_RCPTMTH';
7491         lp_rulv_rec.warn_yn := 'N';
7492         lp_rulv_rec.std_template_yn := 'N';
7493 
7494         OKL_RULE_PUB.update_rule(
7495           p_api_version    => p_api_version,
7496           p_init_msg_list  => p_init_msg_list,
7497           x_return_status  => x_return_status,
7498           x_msg_count      => x_msg_count,
7499           x_msg_data       => x_msg_data,
7500           p_rulv_rec       => lp_rulv_rec,
7501           x_rulv_rec       => lx_rulv_rec);
7502 
7503         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7504           RAISE OKL_API.G_EXCEPTION_ERROR;
7505         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7506           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7507         END IF;
7508       END IF;
7509     END IF;
7510 
7511     -- Update Header level Invoice Format
7512     lp_rulv_rec := lp_rulv_temp_rec;
7513     IF (taa_chr_hdr_dtl_rec.invoice_format_id IS NOT NULL) THEN
7514 
7515       hdr_rules_rec.rul_id := NULL;
7516       hdr_rules_rec.rgp_id := NULL;
7517       OPEN hdr_rules_csr(p_chr_id   => p_chr_id,
7518                          p_rgd_code => 'LABILL',
7519                          p_rul_cat  => 'LAINVD');
7520       FETCH hdr_rules_csr INTO hdr_rules_rec;
7521       CLOSE hdr_rules_csr;
7522 
7523       IF (hdr_rules_rec.rul_id IS NOT NULL) THEN
7524 
7525         OPEN invoice_format_csr
7526                (p_invoice_format_id => taa_chr_hdr_dtl_rec.invoice_format_id);
7527         FETCH invoice_format_csr INTO invoice_format_rec;
7528         CLOSE invoice_format_csr;
7529 
7530         lp_rulv_rec.id := hdr_rules_rec.rul_id;
7531         lp_rulv_rec.rgp_id := hdr_rules_rec.rgp_id;
7532         lp_rulv_rec.rule_information_category := 'LAINVD';
7533         lp_rulv_rec.dnz_chr_id := p_chr_id;
7534         lp_rulv_rec.rule_information1 := invoice_format_rec.name;
7535         lp_rulv_rec.warn_yn := 'N';
7536         lp_rulv_rec.std_template_yn := 'N';
7537 
7538         OKL_RULE_PUB.update_rule(
7539           p_api_version    => p_api_version,
7540           p_init_msg_list  => p_init_msg_list,
7541           x_return_status  => x_return_status,
7542           x_msg_count      => x_msg_count,
7543           x_msg_data       => x_msg_data,
7544           p_rulv_rec       => lp_rulv_rec,
7545           x_rulv_rec       => lx_rulv_rec);
7546 
7547         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7548           RAISE OKL_API.G_EXCEPTION_ERROR;
7549         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7550           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7551         END IF;
7552       END IF;
7553     END IF;
7554 
7555     -- Update Master Lease Agreement
7556     lp_gvev_rec := lp_gvev_temp_rec;
7557     IF (taa_chr_hdr_dtl_rec.mla_id IS NOT NULL) THEN
7558 
7559       governance_rec.id := NULL;
7560       OPEN governance_csr(p_chr_id   => p_chr_id,
7561                           p_scs_code => 'MASTER_LEASE');
7562       FETCH governance_csr INTO governance_rec;
7563       CLOSE governance_csr;
7564 
7565       lp_gvev_rec.chr_id := p_chr_id;
7566       lp_gvev_rec.dnz_chr_id := p_chr_id;
7567       lp_gvev_rec.chr_id_referred := taa_chr_hdr_dtl_rec.mla_id;
7568       lp_gvev_rec.copied_only_yn := 'N';
7569 
7570       IF (governance_rec.id IS NULL) THEN
7571         lp_gvev_rec.id := NULL;
7572 
7573         OKL_OKC_MIGRATION_PVT.create_governance
7574           (p_api_version    => p_api_version,
7575            p_init_msg_list  => p_init_msg_list,
7576            x_return_status  => x_return_status,
7577            x_msg_count      => x_msg_count,
7578            x_msg_data       => x_msg_data,
7579            p_gvev_rec       => lp_gvev_rec,
7580            x_gvev_rec       => lx_gvev_rec);
7581 
7582         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7583           RAISE OKL_API.G_EXCEPTION_ERROR;
7584         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7585           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7586         END IF;
7587 
7588       ELSE
7589 
7590         lp_gvev_rec.id := governance_rec.id;
7591 
7592         OKL_OKC_MIGRATION_PVT.update_governance
7593           (p_api_version    => p_api_version,
7594            p_init_msg_list  => p_init_msg_list,
7595            x_return_status  => x_return_status,
7596            x_msg_count      => x_msg_count,
7597            x_msg_data       => x_msg_data,
7598            p_gvev_rec       => lp_gvev_rec,
7599            x_gvev_rec       => lx_gvev_rec);
7600 
7601         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7602           RAISE OKL_API.G_EXCEPTION_ERROR;
7603         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7604           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7605         END IF;
7606 
7607       END IF;
7608     END IF;
7609 
7610     -- Update Credit Line
7611     lp_gvev_rec := lp_gvev_temp_rec;
7612     IF (taa_chr_hdr_dtl_rec.credit_line_id IS NOT NULL) THEN
7613 
7614       governance_rec.id := NULL;
7615       OPEN governance_csr(p_chr_id   => p_chr_id,
7616                           p_scs_code => 'CREDITLINE_CONTRACT');
7617       FETCH governance_csr INTO governance_rec;
7618       CLOSE governance_csr;
7619 
7620       lp_gvev_rec.chr_id := p_chr_id;
7621       lp_gvev_rec.dnz_chr_id := p_chr_id;
7622       lp_gvev_rec.chr_id_referred := taa_chr_hdr_dtl_rec.credit_line_id;
7623       lp_gvev_rec.copied_only_yn := 'N';
7624 
7625       IF (governance_rec.id IS NULL) THEN
7626         lp_gvev_rec.id := NULL;
7627 
7628         OKL_OKC_MIGRATION_PVT.create_governance
7629           (p_api_version    => p_api_version,
7630            p_init_msg_list  => p_init_msg_list,
7631            x_return_status  => x_return_status,
7632            x_msg_count      => x_msg_count,
7633            x_msg_data       => x_msg_data,
7634            p_gvev_rec       => lp_gvev_rec,
7635            x_gvev_rec       => lx_gvev_rec);
7636 
7637         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7638           RAISE OKL_API.G_EXCEPTION_ERROR;
7639         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7640           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7641         END IF;
7642 
7643       ELSE
7644 
7645         lp_gvev_rec.id := governance_rec.id;
7646 
7647         OKL_OKC_MIGRATION_PVT.update_governance
7648           (p_api_version    => p_api_version,
7649            p_init_msg_list  => p_init_msg_list,
7650            x_return_status  => x_return_status,
7651            x_msg_count      => x_msg_count,
7652            x_msg_data       => x_msg_data,
7653            p_gvev_rec       => lp_gvev_rec,
7654            x_gvev_rec       => lx_gvev_rec);
7655 
7656         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7657           RAISE OKL_API.G_EXCEPTION_ERROR;
7658         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7659           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7660         END IF;
7661 
7662       END IF;
7663     END IF;
7664 
7665     -- Update Asset Line Details
7666     FOR taa_lines_rec IN taa_lines_csr(p_chr_id     => p_chr_id,
7667                                        p_taa_trx_id => p_taa_trx_id)
7668     LOOP
7669 
7670       -- Asset Line level Install At Location
7671       IF (taa_lines_rec.source_column_1 = 'INSTALL_SITE_ID'
7672          AND taa_lines_rec.source_value_1 IS NOT NULL) THEN
7673 
7674         i := 0;
7675         l_itiv_ib_tbl.DELETE;
7676         FOR txl_ib_rec IN txl_ib_csr(p_chr_id => p_chr_id,
7677                                      p_cle_id => taa_lines_rec.id)
7678         LOOP
7679 
7680           i := i + 1;
7681           l_itiv_ib_tbl(i).id                   := txl_ib_rec.id;
7682           l_itiv_ib_tbl(i).object_id1_old       := txl_ib_rec.object_id1_new;
7683           l_itiv_ib_tbl(i).object_id2_old       := txl_ib_rec.object_id2_new;
7684           l_itiv_ib_tbl(i).jtot_object_code_old := txl_ib_rec.jtot_object_code_new;
7685 
7686           l_itiv_ib_tbl(i).object_id1_new  := taa_lines_rec.source_value_1;
7687           l_itiv_ib_tbl(i).object_id2_new  := '#';
7688 
7689         END LOOP;
7690 
7691         IF (i > 0) THEN
7692 
7693           OKL_TXL_ITM_INSTS_PUB.update_txl_itm_insts
7694             (p_api_version    => p_api_version,
7695              p_init_msg_list  => p_init_msg_list,
7696              x_return_status  => x_return_status,
7697              x_msg_count      => x_msg_count,
7698              x_msg_data       => x_msg_data,
7699              p_iipv_tbl       => l_itiv_ib_tbl,
7700              x_iipv_tbl       => lx_itiv_ib_tbl);
7701 
7702           IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
7703               RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
7704           ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
7705               RAISE Okl_Api.G_EXCEPTION_ERROR;
7706           END IF;
7707         END IF;
7708       END IF;
7709 
7710       -- Asset Line level Fixed asset location
7711       IF (taa_lines_rec.source_column_2 = 'FA_LOC_ID'
7712          AND taa_lines_rec.source_value_2 IS NOT NULL) THEN
7713 
7714         OPEN txl_asset_csr(p_chr_id => p_chr_id,
7715                            p_cle_id => taa_lines_rec.id);
7716         FETCH txl_asset_csr INTO txl_asset_rec;
7717         CLOSE txl_asset_csr;
7718 
7719         l_talv_rec.id              := txl_asset_rec.id;
7720         l_talv_rec.fa_location_id  := taa_lines_rec.source_value_2;
7721 
7722         OKL_TXL_ASSETS_PUB.update_txl_asset_def(
7723           p_api_version    => p_api_version,
7724           p_init_msg_list  => p_init_msg_list,
7725           x_return_status  => x_return_status,
7726           x_msg_count      => x_msg_count,
7727           x_msg_data       => x_msg_data,
7728           p_tlpv_rec       => l_talv_rec,
7729           x_tlpv_rec       => lx_talv_rec);
7730 
7731         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7732           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7733         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7734           RAISE OKL_API.G_EXCEPTION_ERROR;
7735         END IF;
7736       END IF;
7737 
7738       -- Asset Line level Bill-To-Site
7739       IF (taa_lines_rec.source_column_3 = 'BILL_TO_SITE_ID'
7740          AND taa_lines_rec.source_value_3 IS NOT NULL) THEN
7741 
7742         lp_clev_rec.id := taa_lines_rec.id;
7743         lp_clev_rec.bill_to_site_use_id := taa_lines_rec.source_value_3;
7744 
7745         lp_klev_rec.id := taa_lines_rec.id;
7746 
7747         OKL_CONTRACT_PUB.update_contract_line(
7748           p_api_version         => p_api_version,
7749           p_init_msg_list       => p_init_msg_list,
7750           x_return_status       => x_return_status,
7751           x_msg_count           => x_msg_count,
7752           x_msg_data            => x_msg_data,
7753           p_clev_rec            => lp_clev_rec,
7754           p_klev_rec            => lp_klev_rec,
7755           x_clev_rec            => lx_clev_rec,
7756           x_klev_rec            => lx_klev_rec
7757         );
7758 
7759         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7760           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7761         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7762           RAISE OKL_API.G_EXCEPTION_ERROR;
7763         END IF;
7764       END IF;
7765 
7766     END LOOP;
7767 
7768     --Bug# 4191851
7769     -- Create Third Party Insurance
7770     IF (taa_chr_hdr_dtl_rec.insurance_yn = 'Y' AND
7771         taa_chr_hdr_dtl_rec.lease_policy_yn = 'N' AND
7772         taa_chr_hdr_dtl_rec.policy_number IS NOT NULL) THEN
7773 
7774       l_ipyv_rec.ipy_type              := taa_chr_hdr_dtl_rec.ipy_type;
7775       l_ipyv_rec.sfwt_flag             := 'T';
7776       l_ipyv_rec.policy_number         := taa_chr_hdr_dtl_rec.policy_number;
7777       l_ipyv_rec.covered_amount        := taa_chr_hdr_dtl_rec.covered_amt;
7778       l_ipyv_rec.deductible            := taa_chr_hdr_dtl_rec.deductible_amt;
7779       l_ipyv_rec.date_to               := taa_chr_hdr_dtl_rec.effective_to_date;
7780       l_ipyv_rec.date_from             := taa_chr_hdr_dtl_rec.effective_from_date;
7781       l_ipyv_rec.date_proof_provided   := taa_chr_hdr_dtl_rec.proof_provided_date;
7782       l_ipyv_rec.date_proof_required   := taa_chr_hdr_dtl_rec.proof_required_date;
7783       l_ipyv_rec.quote_yn              := 'N';
7784       l_ipyv_rec.lessor_insured_yn     := taa_chr_hdr_dtl_rec.lessor_insured_yn;
7785       l_ipyv_rec.lessor_payee_yn       := taa_chr_hdr_dtl_rec.lessor_payee_yn;
7786       l_ipyv_rec.khr_id                := p_chr_id;
7787       l_ipyv_rec.int_id                := taa_chr_hdr_dtl_rec.int_id;
7788       l_ipyv_rec.isu_id                := taa_chr_hdr_dtl_rec.isu_id;
7789       l_ipyv_rec.agency_site_id        := taa_chr_hdr_dtl_rec.agency_site_id;
7790       l_ipyv_rec.agent_site_id         := taa_chr_hdr_dtl_rec.agent_site_id;
7791       l_ipyv_rec.territory_code        := taa_chr_hdr_dtl_rec.territory_code;
7792       l_ipyv_rec.org_id                := p_org_id;
7793 
7794       OKL_INS_QUOTE_PUB.create_third_prt_ins(
7795         p_api_version     => p_api_version,
7796         p_init_msg_list   => p_init_msg_list,
7797         x_return_status   => x_return_status,
7798         x_msg_count       => x_msg_count,
7799         x_msg_data        => x_msg_data,
7800         p_ipyv_rec        => l_ipyv_rec,
7801         x_ipyv_rec        => lx_ipyv_rec);
7802 
7803       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7804         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7805       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7806         RAISE OKL_API.G_EXCEPTION_ERROR;
7807       END IF;
7808     END IF;
7809 
7810     OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
7811                          x_msg_data    => x_msg_data);
7812 
7813   EXCEPTION
7814       when OKL_API.G_EXCEPTION_ERROR then
7815 
7816         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7817                         p_api_name  => l_api_name,
7818                         p_pkg_name  => G_PKG_NAME,
7819                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
7820                         x_msg_count => x_msg_count,
7821                         x_msg_data  => x_msg_data,
7822                         p_api_type  => G_API_TYPE);
7823 
7824       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
7825 
7826         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7827                         p_api_name  => l_api_name,
7828                         p_pkg_name  => G_PKG_NAME,
7829                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
7830                         x_msg_count => x_msg_count,
7831                         x_msg_data  => x_msg_data,
7832                         p_api_type  => G_API_TYPE);
7833 
7834       when OTHERS then
7835 
7836         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7837                         p_api_name  => l_api_name,
7838                         p_pkg_name  => G_PKG_NAME,
7839                         p_exc_name  => 'OTHERS',
7840                         x_msg_count => x_msg_count,
7841                         x_msg_data  => x_msg_data,
7842                         p_api_type  => G_API_TYPE);
7843   END update_taa_request_info;
7844 
7845 -----------------------------------------------------------------------------------------------
7846 -------------------------- Main Process for Re-Lease of Contract ------------------------------
7847 -----------------------------------------------------------------------------------------------
7848   Procedure create_release_contract(
7849             p_api_version          IN  NUMBER,
7850             p_init_msg_list        IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
7851             x_return_status        OUT NOCOPY VARCHAR2,
7852             x_msg_count            OUT NOCOPY NUMBER,
7853             x_msg_data             OUT NOCOPY VARCHAR2,
7854             p_chr_id               IN  OKC_K_HEADERS_B.ID%TYPE,
7855             p_release_reason_code  IN  VARCHAR2,
7856             p_release_description  IN  VARCHAR2,
7857             p_trx_date             IN  DATE,
7858             p_source_trx_id        IN  NUMBER,
7859             p_source_trx_type      IN  VARCHAR2,
7860             x_tcnv_rec             OUT NOCOPY tcnv_rec_type,
7861             x_release_chr_id       OUT NOCOPY OKC_K_HEADERS_B.ID%TYPE)
7862   IS
7863     l_api_name      CONSTANT VARCHAR2(30) := 'CREATE_RELEASE_CONTRACT';
7864     l_chrv_rec               chrv_rec_type;
7865     l_khrv_rec               khrv_rec_type;
7866     ln_old_chr_id            OKC_K_HEADERS_V.ID%TYPE;
7867     ln_new_chr_id            OKC_K_HEADERS_V.ID%TYPE;
7868     lv_old_sts_code          OKC_K_HEADERS_V.STS_CODE%TYPE;
7869     lv_old_contract_number   OKC_K_HEADERS_V.CONTRACT_NUMBER%TYPE;
7870     ld_old_end_date          OKC_K_HEADERS_V.END_DATE%TYPE;
7871     ln_old_authoring_org_id  OKC_K_HEADERS_V.AUTHORING_ORG_ID%TYPE;
7872     lt_top_line_tbl          g_top_line_tbl;
7873     lt_asset_num_tbl         g_asset_num_tbl;
7874     l_return_status          VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
7875 
7876     CURSOR c_fetch_header_line_id(p_chr_id OKC_K_HEADERS_B.ID%TYPE)
7877     IS
7878     SELECT chr.id,
7879            chr.contract_number,
7880            chr.end_date,
7881            st.ste_code sts_code,
7882            chr.authoring_org_id
7883     FROM OKC_K_HEADERS_B chr,
7884          okc_statuses_b st
7885     WHERE chr.id = p_chr_id
7886     and st.code = chr.sts_code;
7887 
7888     l_new_contract_number okc_k_headers_b.contract_number%TYPE;
7889     x_new_chrv_rec        chrv_rec_type;
7890     x_new_khrv_rec        khrv_rec_type;
7891 
7892     CURSOR taa_request_dtl_csr(p_source_trx_id IN NUMBER)
7893     IS
7894     SELECT new_contract_number
7895     FROM okl_taa_request_details_b
7896     WHERE tcn_id = p_source_trx_id;
7897 
7898     taa_request_dtl_rec taa_request_dtl_csr%ROWTYPE;
7899 
7900 
7901     CURSOR taa_lines_csr(p_new_chr_id    IN NUMBER,
7902                          p_source_trx_id IN NUMBER)
7903     IS
7904     SELECT cle.id
7905     FROM okc_k_lines_b cle,
7906          okc_line_styles_b lse
7907     WHERE cle.chr_id = p_new_chr_id
7908     AND cle.dnz_chr_id = p_new_chr_id
7909     AND lse.lty_code = 'FREE_FORM1'
7910     AND cle.lse_id = lse.id
7911     AND NOT EXISTS (SELECT 1
7912                     FROM okl_txl_cntrct_lns tcl
7913                     WHERE tcl.tcn_id = p_source_trx_id
7914                     AND tcl.kle_id = cle.orig_system_id1
7915                     AND tcl.before_transfer_yn = 'N');
7916 
7917     CURSOR taa_fee_serv_csr(p_new_chr_id    IN NUMBER)
7918     IS
7919     SELECT cle.id
7920     FROM okc_k_lines_b cle,
7921          okc_line_styles_b lse
7922     WHERE cle.chr_id = p_new_chr_id
7923     AND cle.dnz_chr_id = p_new_chr_id
7924     AND lse.lty_code IN ('FEE','SOLD_SERVICE')
7925     AND cle.lse_id = lse.id
7926     AND NOT EXISTS (SELECT 1
7927                     FROM okc_k_lines_b sub_cle
7928                     WHERE sub_cle.cle_id = cle.id);
7929 
7930     CURSOR taa_request_csr(p_source_trx_id IN NUMBER)
7931     IS
7932     SELECT tsu_code,
7933            complete_transfer_yn,
7934            --Bug# 4198413
7935            date_transaction_occurred
7936     FROM okl_trx_contracts
7937     where id = p_source_trx_id;
7938 
7939     taa_request_rec        taa_request_csr%ROWTYPE;
7940 
7941     l_seq_no               NUMBER;
7942     l_term_duration        NUMBER;
7943 
7944     l_release_date         DATE;
7945 
7946     --Bug# 4631549
7947     --cursor to get all finasset lines
7948     cursor l_finast_csr (p_chr_id in number) is
7949     select cleb.id
7950     from   okc_k_lines_b cleb
7951     where  cleb.chr_id = p_chr_id
7952     and    cleb.dnz_chr_id = p_chr_id
7953     and    cleb.lse_id = 33; --financial asset line id
7954 
7955     l_finast_rec    l_finast_csr%ROWTYPE;
7956     l_fin_clev_rec  okl_okc_migration_pvt.clev_rec_type;
7957     l_fin_klev_rec  okl_contract_pub.klev_rec_type;
7958     lx_fin_clev_rec okl_okc_migration_pvt.clev_rec_type;
7959     lx_fin_klev_rec okl_contract_pub.klev_rec_type;
7960     --End Bug# 4631549
7961 
7962   BEGIN
7963     x_return_status  := OKL_API.G_RET_STS_SUCCESS;
7964     -- Call start_activity to create savepoint, check compatibility
7965     -- and initialize message list
7966     x_return_status := OKL_API.START_ACTIVITY (
7967                                l_api_name
7968                                ,p_init_msg_list
7969                                ,'_PVT'
7970                                ,l_return_status);
7971     -- Check if activity started successfully
7972     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7973        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7974     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7975        RAISE OKL_API.G_EXCEPTION_ERROR;
7976     END IF;
7977 
7978     l_release_date := TRUNC(p_trx_date);
7979 
7980     --Bug# 4198413: Set Revision Date equal to TNA Transfer Effective
7981     --              Date, if the user does not enter Revision date.
7982     if (l_release_date IS NULL and p_source_trx_id IS NOT NULL) then
7983       open taa_request_csr(p_source_trx_id => p_source_trx_id);
7984       fetch taa_request_csr into taa_request_rec;
7985       close taa_request_csr;
7986 
7987       l_release_date := TRUNC(taa_request_rec.date_transaction_occurred);
7988     end if;
7989 
7990     -- Validate Re-lease contract
7991     validate_release_contract(p_api_version   => p_api_version,
7992                               p_init_msg_list => p_init_msg_list,
7993                               x_return_status => x_return_status,
7994                               x_msg_count     => x_msg_count,
7995                               x_msg_data      => x_msg_data,
7996                               p_chr_id        => p_chr_id,
7997                               p_release_date  => l_release_date,
7998                               p_source_trx_id => p_source_trx_id,
7999 			       p_release_reason_code=>p_release_reason_code);
8000 
8001     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8002        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8003     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8004        RAISE OKL_API.G_EXCEPTION_ERROR;
8005     END IF;
8006 
8007     -- Fetch the old contract header id and sts_code
8008     OPEN  c_fetch_header_line_id(p_chr_id);
8009     IF c_fetch_header_line_id%NOTFOUND THEN
8010       OKL_API.set_message(p_app_name     => G_APP_NAME,
8011                           p_msg_name     => G_NO_MATCHING_RECORD,
8012                           p_token1       => G_COL_NAME_TOKEN,
8013                           p_token1_value => 'OKC_K_HEADERS_V.ID');
8014 
8015        RAISE OKL_API.G_EXCEPTION_ERROR;
8016     END IF;
8017     FETCH  c_fetch_header_line_id INTO ln_old_chr_id,
8018                                        lv_old_contract_number,
8019                                        ld_old_end_date,
8020                                        lv_old_sts_code,
8021                                        ln_old_authoring_org_id;
8022     CLOSE  c_fetch_header_line_id;
8023 
8024     -- T and A Request
8025     IF p_source_trx_id IS NOT NULL THEN
8026 
8027       OPEN taa_request_dtl_csr(p_source_trx_id);
8028       FETCH taa_request_dtl_csr INTO taa_request_dtl_rec;
8029       CLOSE taa_request_dtl_csr;
8030 
8031       l_new_contract_number := taa_request_dtl_rec.new_contract_number;
8032     END IF;
8033 
8034     IF l_new_contract_number IS NULL THEN
8035 
8036       -- Get Sequence Number to generate Contract Number
8037       SELECT okl_rbk_seq.NEXTVAL
8038       INTO   l_seq_no
8039       FROM   DUAL;
8040 
8041       l_new_contract_number :=  lv_old_contract_number||'-REL'||l_seq_no;
8042     END IF;
8043 
8044     l_term_duration := TRUNC(MONTHS_BETWEEN(ld_old_end_date + 1,l_release_date));
8045 
8046     -- Depending on the status of the contract we have to copy the contract
8047     -- or else validate the assets of the contract
8048     IF (lv_old_sts_code IS NOT NULL OR
8049        lv_old_sts_code <> OKL_API.G_MISS_CHAR) AND
8050        lv_old_sts_code IN ('ACTIVE','HOLD') THEN
8051        l_copy_contract(p_api_version         => p_api_version,
8052                        p_init_msg_list       => p_init_msg_list,
8053                        x_return_status       => x_return_status,
8054                        x_msg_count           => x_msg_count,
8055                        x_msg_data            => x_msg_data,
8056                        p_commit              => OKL_API.G_FALSE,
8057                        p_old_chr_id          => ln_old_chr_id,
8058                        p_new_contract_number => l_new_contract_number,
8059                        p_release_date        => l_release_date,
8060                        p_term_duration       => l_term_duration,
8061                        x_new_chrv_rec        => x_new_chrv_rec,
8062                        x_new_khrv_rec        => x_new_khrv_rec);
8063        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8064           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8065        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8066           RAISE OKL_API.G_EXCEPTION_ERROR;
8067        END IF;
8068     ELSIF (lv_old_sts_code IS NOT NULL OR
8069        lv_old_sts_code <> OKL_API.G_MISS_CHAR) AND
8070        lv_old_sts_code = 'TERMINATED' THEN
8071        -- Since we got the new contract in form of x_chr_id
8072        x_return_status := validate_assets_offlease(p_dnz_chr_id    => ln_old_chr_id);
8073        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8074          OKL_API.set_message(p_app_name     => G_APP_NAME,
8075                              p_msg_name     => 'OKL_LLA_CHR_ID');
8076          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8077        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8078          OKL_API.set_message(p_app_name     => G_APP_NAME,
8079                              p_msg_name     => 'OKL_LLA_CHR_ID');
8080          RAISE OKL_API.G_EXCEPTION_ERROR;
8081        END IF;
8082        l_copy_contract(p_api_version         => p_api_version,
8083                        p_init_msg_list       => p_init_msg_list,
8084                        x_return_status       => x_return_status,
8085                        x_msg_count           => x_msg_count,
8086                        x_msg_data            => x_msg_data,
8087                        p_commit              => OKL_API.G_FALSE,
8088                        p_old_chr_id          => ln_old_chr_id,
8089                        p_new_contract_number => l_new_contract_number,
8090                        p_release_date        => l_release_date,
8091                        p_term_duration       => l_term_duration,
8092                        x_new_chrv_rec        => x_new_chrv_rec,
8093                        x_new_khrv_rec        => x_new_khrv_rec);
8094        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8095           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8096        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8097           RAISE OKL_API.G_EXCEPTION_ERROR;
8098        END IF;
8099     ELSE
8100       OKL_API.set_message(p_app_name     => G_APP_NAME,
8101                           p_msg_name     => 'OKL_LLA_CHR_ID');
8102        RAISE OKL_API.G_EXCEPTION_ERROR;
8103     END IF;
8104 
8105     -- Create Re-lease contract transaction
8106     create_release_transaction
8107        (p_api_version        => p_api_version,
8108         p_init_msg_list      => p_init_msg_list,
8109         x_return_status      => x_return_status,
8110         x_msg_count          => x_msg_count,
8111         x_msg_data           => x_msg_data,
8112         p_chr_id             => p_chr_id,
8113         p_new_chr_id         => x_new_chrv_rec.id,
8114         p_reason_code        => p_release_reason_code,
8115         p_description        => p_release_description,
8116         p_trx_date           => l_release_date,
8117         p_source_trx_id      => p_source_trx_id,
8118         p_source_trx_type    => p_source_trx_type,
8119         x_tcnv_rec           => x_tcnv_rec);
8120 
8121     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8122       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8123     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8124       RAISE OKL_API.G_EXCEPTION_ERROR;
8125     END IF;
8126 
8127     -- Delete contract lines which are not transferred
8128     -- if the source transaction is Partial T and A
8129     if (p_source_trx_id IS NOT NULL ) then
8130 
8131       open taa_request_csr(p_source_trx_id => p_source_trx_id);
8132       fetch taa_request_csr into taa_request_rec;
8133       close taa_request_csr;
8134 
8135       if (taa_request_rec.complete_transfer_yn = 'N') then
8136 
8137         -- Delete Financial Asset lines not transferred
8138         for taa_lines_rec in taa_lines_csr
8139                          (p_new_chr_id    => x_new_chrv_rec.id,
8140                           p_source_trx_id => p_source_trx_id)
8141         loop
8142           OKL_CONTRACT_PUB.delete_contract_line(
8143             p_api_version   => p_api_version,
8144             p_init_msg_list => p_init_msg_list,
8145             x_return_status => x_return_status,
8146             x_msg_count     => x_msg_count,
8147             x_msg_data      => x_msg_data,
8148             p_line_id       => taa_lines_rec.id
8149             );
8150 
8151             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8152               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8153             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8154               RAISE OKL_API.G_EXCEPTION_ERROR;
8155             END IF;
8156         end loop;
8157 
8158         -- Delete Fee and Service lines not having Covered Assets
8159         for taa_fee_serv_rec in taa_fee_serv_csr
8160                          (p_new_chr_id    => x_new_chrv_rec.id)
8161         loop
8162           OKL_CONTRACT_PUB.delete_contract_line(
8163             p_api_version   => p_api_version,
8164             p_init_msg_list => p_init_msg_list,
8165             x_return_status => x_return_status,
8166             x_msg_count     => x_msg_count,
8167             x_msg_data      => x_msg_data,
8168             p_line_id       => taa_fee_serv_rec.id
8169             );
8170 
8171             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8172               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8173             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8174               RAISE OKL_API.G_EXCEPTION_ERROR;
8175             END IF;
8176         end loop;
8177 
8178         -- Adjust Top line payments for Service and Rollover Fees
8179         -- where Covered assets are defined and not all Covered
8180         -- assets move over
8181         adjust_partial_taa_pymt
8182                         (p_api_version   => p_api_version,
8183                          p_init_msg_list => p_init_msg_list,
8184                          x_return_status => x_return_status,
8185                          x_msg_count     => x_msg_count,
8186                          x_msg_data      => x_msg_data,
8187                          p_chr_id        => x_new_chrv_rec.id);
8188 
8189         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8190           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8191         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8192           RAISE OKL_API.G_EXCEPTION_ERROR;
8193         END IF;
8194 
8195       end if;
8196     end if;
8197 
8198     --Bug# 4155405
8199     -- Update Re-lease contract with information from the
8200     -- Transfer and Assumption request
8201     if (p_source_trx_id IS NOT NULL) then
8202 
8203       update_taa_request_info
8204         (p_api_version   => p_api_version,
8205          p_init_msg_list => p_init_msg_list,
8206          x_return_status => x_return_status,
8207          x_msg_count     => x_msg_count,
8208          x_msg_data      => x_msg_data,
8209          p_chr_id        => x_new_chrv_rec.id,
8210          p_taa_trx_id    => p_source_trx_id,
8211          p_org_id        => ln_old_authoring_org_id);
8212 
8213       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8214         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8215       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8216         RAISE OKL_API.G_EXCEPTION_ERROR;
8217       END IF;
8218 
8219     end if;
8220 
8221     adjust_asset_lines(p_api_version   => p_api_version,
8222                        p_init_msg_list => p_init_msg_list,
8223                        x_return_status => x_return_status,
8224                        x_msg_count     => x_msg_count,
8225                        x_msg_data      => x_msg_data,
8226                        p_chr_id        => x_new_chrv_rec.id,
8227                        p_release_date  => l_release_date);
8228 
8229     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8230       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8231     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8232       RAISE OKL_API.G_EXCEPTION_ERROR;
8233     END IF;
8234 
8235     adjust_payment_lines(p_api_version   => p_api_version,
8236                          p_init_msg_list => p_init_msg_list,
8237                          x_return_status => x_return_status,
8238                          x_msg_count     => x_msg_count,
8239                          x_msg_data      => x_msg_data,
8240                          p_chr_id        => x_new_chrv_rec.id,
8241                          p_release_date  => l_release_date);
8242 
8243     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8244       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8245     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8246       RAISE OKL_API.G_EXCEPTION_ERROR;
8247     END IF;
8248 
8249     adjust_fee_lines(p_api_version   => p_api_version,
8250                      p_init_msg_list => p_init_msg_list,
8251                      x_return_status => x_return_status,
8252                      x_msg_count     => x_msg_count,
8253                      x_msg_data      => x_msg_data,
8254                      p_chr_id        => x_new_chrv_rec.id,
8255                      p_orig_chr_id   => p_chr_id,
8256                      p_release_date  => l_release_date);
8257 
8258     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8259       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8260     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8261       RAISE OKL_API.G_EXCEPTION_ERROR;
8262     END IF;
8263 
8264     adjust_service_lines(p_api_version   => p_api_version,
8265                          p_init_msg_list => p_init_msg_list,
8266                          x_return_status => x_return_status,
8267                          x_msg_count     => x_msg_count,
8268                          x_msg_data      => x_msg_data,
8269                          p_chr_id        => x_new_chrv_rec.id,
8270                          p_orig_chr_id   => p_chr_id,
8271                          p_release_date  => l_release_date);
8272 
8273     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8274       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8275     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8276       RAISE OKL_API.G_EXCEPTION_ERROR;
8277     END IF;
8278 	   --Added by rajnisku Bug 6657564
8279  	    adjust_usage_lines(p_api_version   => p_api_version,
8280  	                        p_init_msg_list => p_init_msg_list,
8281  	                        x_return_status => x_return_status,
8282  	                        x_msg_count     => x_msg_count,
8283  	                        x_msg_data      => x_msg_data,
8284  	                        p_chr_id        => x_new_chrv_rec.id,
8285  	                        p_release_date  => l_release_date);
8286 
8287  	     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8288  	       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8289  	     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8290  	       RAISE OKL_API.G_EXCEPTION_ERROR;
8291  	     END IF;
8292  	    --Added by rajnisku Bug 6657564 : End
8293     --Bug# 4631549 : Update line Capital Amounts
8294     open l_finast_csr (p_chr_id => x_new_chrv_rec.id);
8295     Loop
8296             Fetch l_finast_csr into l_finast_rec;
8297             Exit when l_finast_csr%NOTFOUND;
8298             OKL_EXECUTE_FORMULA_PUB.EXECUTE(p_api_version   => p_api_version,
8299                                             p_init_msg_list => p_init_msg_list,
8300                                             x_return_status => x_return_status,
8301                                             x_msg_count     => x_msg_count,
8302                                             x_msg_data      => x_msg_data,
8303                                             p_formula_name  => 'LINE_CAP_AMNT',
8304                                             p_contract_id   => x_new_chrv_rec.id,
8305                                             p_line_id       => l_finast_rec.id,
8306                                             x_value         => l_fin_klev_rec.capital_amount);
8307 
8308             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8309               RAISE OKL_API.G_EXCEPTION_ERROR;
8310             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8311               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8312             END IF;
8313 
8314             l_fin_clev_rec.id := l_finast_rec.id;
8315             l_fin_klev_rec.id := l_finast_rec.id;
8316 
8317             OKL_CONTRACT_PUB.update_contract_line
8318               (p_api_version    => p_api_version,
8319                p_init_msg_list  => p_init_msg_list,
8320                x_return_status  => x_return_status,
8321                x_msg_count      => x_msg_count,
8322                x_msg_data       => x_msg_data,
8323                p_clev_rec       => l_fin_clev_rec,
8324                p_klev_rec       => l_fin_klev_rec,
8325                x_clev_rec       => lx_fin_clev_rec,
8326                x_klev_rec       => lx_fin_klev_rec);
8327 
8328             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8329               RAISE OKL_API.G_EXCEPTION_ERROR;
8330             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8331               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8332             END IF;
8333       End Loop;
8334       Close l_finast_csr;
8335       --End Bug# 4631549
8336 
8337     -- R12B Authoring OA Migration
8338     x_release_chr_id := x_new_chrv_rec.id;
8339 
8340     OKL_API.END_ACTIVITY (x_msg_count   => x_msg_count,
8341                           x_msg_data    => x_msg_data);
8342 
8343   EXCEPTION
8344     WHEN OKL_API.G_EXCEPTION_ERROR THEN
8345       IF c_fetch_header_line_id%ISOPEN THEN
8346          CLOSE c_fetch_header_line_id;
8347       END IF;
8348       l_return_status := OKL_API.HANDLE_EXCEPTIONS(
8349                                  l_api_name,
8350                                  G_PKG_NAME,
8351                                  'OKL_API.G_RET_STS_ERROR',
8352                                  x_msg_count,
8353                                  x_msg_data,
8354                                  '_PVT');
8355       x_return_status := l_return_status;
8356     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
8357       l_return_status :=OKL_API.HANDLE_EXCEPTIONS(
8358                                 l_api_name,
8359                                 G_PKG_NAME,
8360                                 'OKL_API.G_RET_STS_UNEXP_ERROR',
8361                                 x_msg_count,
8362                                 x_msg_data,
8363                                 '_PVT');
8364       x_return_status := l_return_status;
8365     WHEN OTHERS THEN
8366       IF c_fetch_header_line_id%ISOPEN THEN
8367          CLOSE c_fetch_header_line_id;
8368       END IF;
8369       l_return_status :=OKL_API.HANDLE_EXCEPTIONS(
8370                                 l_api_name,
8371                                 G_PKG_NAME,
8372                                 'OTHERS',
8373                                 x_msg_count,
8374                                 x_msg_data,
8375                                 '_PVT');
8376       x_return_status := l_return_status;
8377   END create_release_contract;
8378 -----------------------------------------------------------------------------------------------
8379 --------------------------------- Activate Release Contract ----------------------------------
8380 -----------------------------------------------------------------------------------------------
8381   PROCEDURE activate_release_contract(
8382             p_api_version        IN  NUMBER,
8383             p_init_msg_list      IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
8384             x_return_status      OUT NOCOPY VARCHAR2,
8385             x_msg_count          OUT NOCOPY NUMBER,
8386             x_msg_data           OUT NOCOPY VARCHAR2,
8387             p_chr_id             IN  OKC_K_HEADERS_B.ID%TYPE) IS
8388     l_api_name                    VARCHAR2(35)    := 'ACTIVATE_RELEASE_CONTRACT';
8389     l_proc_name                   VARCHAR2(35)    := 'ACTIVATE_RELEASE_CONTRACT';
8390     ln_orig_system_source_code    OKC_K_HEADERS_B.ORIG_SYSTEM_SOURCE_CODE%TYPE;
8391     ln_orig_system_id1            OKC_K_HEADERS_B.ORIG_SYSTEM_ID1%TYPE;
8392     ln_orig_contract_number       OKC_K_HEADERS_B.CONTRACT_NUMBER%TYPE;
8393     l_cimv_rec                    cimv_rec_type;
8394     lx_cimv_rec                   cimv_rec_type;
8395     l_trxv_rec                    trxv_rec_type;
8396     lx_trxv_rec                   trxv_rec_type;
8397     --Bug# 4072796
8398     ln_new_contract_number       OKC_K_HEADERS_B.CONTRACT_NUMBER%TYPE;
8399 
8400     -- To get the orig system id for p_chr_id
8401     CURSOR get_orig_sys_code(p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
8402     SELECT chr_new.orig_system_source_code,
8403            chr_new.orig_system_id1,
8404            chr_old.contract_number,
8405            --Bug# 4072796
8406            chr_new.contract_number
8407     FROM okc_k_headers_b chr_new,
8408          okc_k_headers_b chr_old
8409     WHERE chr_new.id = p_chr_id
8410     AND   chr_old.id = chr_new.orig_system_id1;
8411 
8412     -- To get the orig system id for Fixed Asset lines of p_chr_id
8413     CURSOR get_orig_fa(p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
8414     SELECT cle.orig_system_id1 orig_cle_fa,
8415            cle.id id
8416     FROM OKC_K_LINES_B cle,
8417          OKC_LINE_STYLES_B lse
8418     WHERE cle.dnz_chr_id = p_chr_id
8419     AND cle.lse_id = lse.id
8420     AND lse.lty_code = 'FIXED_ASSET';
8421 
8422     -- To get the orig system id for Install Base lines of p_chr_id
8423     CURSOR get_orig_ib(p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
8424     SELECT cle.orig_system_id1 orig_cle_ib,
8425            cle.id id
8426     FROM OKC_K_LINES_B cle,
8427          OKC_LINE_STYLES_B lse
8428     WHERE cle.dnz_chr_id = p_chr_id
8429     AND cle.lse_id = lse.id
8430     AND lse.lty_code = 'INST_ITEM';
8431 
8432     -- To get the item information from original line id and original contract id
8433     CURSOR get_item_info(p_orig_chr_id OKC_K_HEADERS_B.ID%TYPE,
8434                          p_orig_cle_id OKC_K_LINES_B.ID%TYPE) IS
8435     SELECT object1_id1,
8436            object1_id2
8437     FROM  okc_k_items
8438     WHERE cle_id = p_orig_cle_id
8439     AND dnz_chr_Id = p_orig_chr_id;
8440 
8441     Cursor l_asr_csr(p_rel_chr_id IN NUMBER) IS
8442     SELECT cle.cle_id        finasst_id,
8443            cim.object1_id1   asset_id,
8444            cle_orig.cle_id   orig_finasst_id,
8445            asr.id            asset_return_id
8446     FROM   OKL_ASSET_RETURNS_B asr,
8447            OKC_K_LINES_B     cle_orig,
8448            OKC_LINE_STYLES_B lse_orig,
8449            OKC_K_ITEMS       cim_orig,
8450            OKC_K_ITEMS       cim,
8451            OKC_K_LINES_B     cle,
8452            OKC_LINE_STYLES_B lse,
8453            OKC_STATUSES_B    sts,
8454            OKL_TXL_ASSETS_B  txl
8455     WHERE  asr.kle_id            = cle_orig.cle_id
8456     AND    asr.ars_code          = 'RELEASE_IN_PROCESS'
8457     AND    cim.object1_id1       = cim_orig.object1_id1
8458     AND    cim.object1_id2       = cim_orig.object1_id2
8459     AND    cim.jtot_object1_code = cim_orig.jtot_object1_code
8460     AND    cim.id                <> cim_orig.id
8461     AND    cle_orig.id           = cim_orig.cle_id
8462     AND    cle_orig.dnz_chr_id   = cim_orig.dnz_chr_id
8463     AND    cle_orig.lse_id       = lse_orig.id
8464     AND    lse_orig.lty_code     = 'FIXED_ASSET'
8465     AND    cim.cle_id            = cle.id
8466     AND    cim.dnz_chr_id        = cle.dnz_chr_id
8467     AND    cle.id                = txl.kle_id
8468     AND    cle.dnz_chr_id        = p_rel_chr_id
8469     AND    cle.lse_id            = lse.id
8470     AND    lse.lty_code          = 'FIXED_ASSET'
8471     AND    cle.sts_code          = sts.code
8472     AND    sts.ste_code not in ('EXPIRED','TERMINATED','CANCELLED')
8473     AND    txl.tal_type = 'CRL';
8474 
8475    l_asr_rec l_asr_csr%ROWTYPE;
8476 
8477    l_artv_rec    okl_asset_returns_pub.artv_rec_type;
8478    lx_artv_rec   okl_asset_returns_pub.artv_rec_type;
8479 
8480    CURSOR taa_trx_csr(p_orig_chr_id    IN NUMBER
8481                      ,p_new_chr_id     IN NUMBER)
8482    IS
8483    SELECT tcn.id,
8484           tcn.source_trx_id ,
8485 	    --Bug 6657564- Added
8486  	           RBR_CODE
8487  	           --Bug 6657564 - End
8488    FROM   okl_trx_contracts tcn,
8489           okl_trx_types_tl try
8490    WHERE  tcn.khr_id_old = p_orig_chr_id
8491    AND    tcn.khr_id_new = p_new_chr_id
8492    AND    tcn_type = 'MAE'
8493    AND    tcn.tsu_code <> 'PROCESSED'
8494    AND    tcn.try_id = try.id
8495 --rkuttiya added for 12.1.1 Multi GAAP
8496    AND    tcn.representation_type = 'PRIMARY'
8497 --
8498    AND    try.name = 'Release'
8499    AND    try.language= 'US';
8500 
8501    taa_trx_rec taa_trx_csr%ROWTYPE;
8502 
8503    l_tcnv_rec      tcnv_rec_type;
8504    l_out_tcnv_rec  tcnv_rec_type;
8505 
8506    --Bug# 4072796
8507    CURSOR taa_request_dtl_csr(p_source_trx_id IN NUMBER)
8508    IS
8509    SELECT id,
8510           tcn_id
8511    FROM okl_taa_request_details_b
8512    WHERE tcn_id = p_source_trx_id;
8513 
8514    taa_request_dtl_rec taa_request_dtl_csr%ROWTYPE;
8515 
8516    l_taav_rec      okl_taa_pvt.taav_rec_type;
8517    l_out_taav_rec  okl_taa_pvt.taav_rec_type;
8518 
8519   BEGIN
8520     x_return_status      := OKL_API.G_RET_STS_SUCCESS;
8521     -- Call start_activity to create savepoint, check compatibility
8522     -- and initialize message list
8523     x_return_status := OKL_API.START_ACTIVITY (
8524                                l_api_name
8525                                ,p_init_msg_list
8526                                ,'_PVT'
8527                                ,x_return_status);
8528     -- Check if activity started successfully
8529     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8530        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8531     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8532        RAISE OKL_API.G_EXCEPTION_ERROR;
8533     END IF;
8534 
8535     -- To get the orig system id for
8536     OPEN  get_orig_sys_code(p_chr_id => p_chr_id);
8537     FETCH get_orig_sys_code INTO ln_orig_system_source_code,
8538                                  ln_orig_system_id1,
8539                                  ln_orig_contract_number,
8540                                  ln_new_contract_number; --Bug# 4072796
8541     IF get_orig_sys_code%NOTFOUND THEN
8542       OKL_API.set_message(p_app_name     => G_APP_NAME,
8543                           p_msg_name     => G_NO_MATCHING_RECORD,
8544                           p_token1       => G_COL_NAME_TOKEN,
8545                           p_token1_value => 'OKC_K_HEADERS_V.ID');
8546       RAISE OKL_API.G_EXCEPTION_ERROR;
8547     END IF;
8548     CLOSE get_orig_sys_code;
8549     IF ln_orig_system_source_code = 'OKL_RELEASE' THEN
8550 
8551       -- To get all the assets for the p_chr_id
8552       FOR r_get_orig_fa IN get_orig_fa(p_chr_id => p_chr_id) LOOP
8553 
8554         -- to get all the new line item information
8555         x_return_status := get_rec_cimv(r_get_orig_fa.id,
8556                                         p_chr_id,
8557                                         l_cimv_rec);
8558         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8559           OKL_API.set_message(p_app_name     => G_APP_NAME,
8560                               p_msg_name     => G_NO_MATCHING_RECORD,
8561                               p_token1       => G_COL_NAME_TOKEN,
8562                               p_token1_value => 'OKC_K_ITEMS_V record');
8563           x_return_status := OKL_API.G_RET_STS_ERROR;
8564           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8565         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8566           OKL_API.set_message(p_app_name     => G_APP_NAME,
8567                               p_msg_name     => G_NO_MATCHING_RECORD,
8568                               p_token1       => G_COL_NAME_TOKEN,
8569                               p_token1_value => 'OKC_K_ITEMS_V record');
8570           x_return_status := OKL_API.G_RET_STS_ERROR;
8571           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8572         END IF;
8573         -- To get the old information of the old asset
8574         OPEN get_item_info(p_orig_chr_id => ln_orig_system_id1,
8575                            p_orig_cle_id => r_get_orig_fa.orig_cle_fa);
8576         FETCH get_item_info INTO l_cimv_rec.object1_id1,
8577                                  l_cimv_rec.object1_id2;
8578         IF get_item_info%NOTFOUND THEN
8579           x_return_status := OKL_API.G_RET_STS_ERROR;
8580           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8581         END IF;
8582         CLOSE get_item_info;
8583         OKL_OKC_MIGRATION_PVT.update_contract_item(p_api_version   => p_api_version,
8584                                                    p_init_msg_list => p_init_msg_list,
8585                                                    x_return_status => x_return_status,
8586                                                    x_msg_count     => x_msg_count,
8587                                                    x_msg_data      => x_msg_data,
8588                                                    p_cimv_rec      => l_cimv_rec,
8589                                                    x_cimv_rec      => lx_cimv_rec);
8590         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8591           x_return_status := OKL_API.G_RET_STS_ERROR;
8592           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8593         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8594           x_return_status := OKL_API.G_RET_STS_ERROR;
8595           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8596         END IF;
8597       END LOOP;
8598       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8599          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8600       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8601           RAISE OKL_API.G_EXCEPTION_ERROR;
8602       END IF;
8603 
8604       -- To get the Install Base information for the p_chr_id
8605       FOR r_get_orig_ib IN get_orig_ib(p_chr_id => p_chr_id) LOOP
8606         -- to get all the new line item information
8607         x_return_status := get_rec_cimv(r_get_orig_ib.id,
8608                                         p_chr_id,
8609                                         l_cimv_rec);
8610         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8611           OKL_API.set_message(p_app_name     => G_APP_NAME,
8612                               p_msg_name     => G_NO_MATCHING_RECORD,
8613                               p_token1       => G_COL_NAME_TOKEN,
8614                               p_token1_value => 'OKC_K_ITEMS_V record');
8615           x_return_status := OKL_API.G_RET_STS_ERROR;
8616           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8617         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8618           OKL_API.set_message(p_app_name     => G_APP_NAME,
8619                               p_msg_name     => G_NO_MATCHING_RECORD,
8620                               p_token1        => G_COL_NAME_TOKEN,
8621                               p_token1_value  => 'OKC_K_ITEMS_V record');
8622           x_return_status := OKL_API.G_RET_STS_ERROR;
8623           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8624         END IF;
8625         -- To get the old information of the old asset
8626         OPEN get_item_info(p_orig_chr_id => ln_orig_system_id1,
8627                            p_orig_cle_id => r_get_orig_ib.orig_cle_ib);
8628         FETCH get_item_info INTO l_cimv_rec.object1_id1,
8629                                  l_cimv_rec.object1_id2;
8630         IF get_item_info%NOTFOUND THEN
8631           x_return_status := OKL_API.G_RET_STS_ERROR;
8632           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8633         END IF;
8634         CLOSE get_item_info;
8635         OKL_OKC_MIGRATION_PVT.update_contract_item(p_api_version   => p_api_version,
8636                                                    p_init_msg_list => p_init_msg_list,
8637                                                    x_return_status => x_return_status,
8638                                                    x_msg_count     => x_msg_count,
8639                                                    x_msg_data      => x_msg_data,
8640                                                    p_cimv_rec      => l_cimv_rec,
8641                                                    x_cimv_rec      => lx_cimv_rec);
8642         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8643           x_return_status := OKL_API.G_RET_STS_ERROR;
8644           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8645         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8646           x_return_status := OKL_API.G_RET_STS_ERROR;
8647           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8648         END IF;
8649       END LOOP;
8650       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8651         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8652       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8653         RAISE OKL_API.G_EXCEPTION_ERROR;
8654       END IF;
8655 
8656       -- call the asset release api
8657       okl_activate_asset_pub.RELEASE_ASSET
8658           (p_api_version   => p_api_version,
8659            p_init_msg_list => p_init_msg_list,
8660            x_return_status => x_return_status,
8661            x_msg_count     => x_msg_count,
8662            x_msg_data      => x_msg_data,
8663            p_rel_chr_id    => p_chr_id);
8664 
8665       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8666         RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8667       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8668         RAISE Okl_Api.G_EXCEPTION_ERROR;
8669       END IF;
8670 
8671       --call the install base instance re_lease API
8672       okl_activate_ib_pvt.RELEASE_IB_INSTANCE
8673         (p_api_version   => p_api_version,
8674          p_init_msg_list => p_init_msg_list,
8675          x_return_status => x_return_status,
8676          x_msg_count     => x_msg_count,
8677          x_msg_data      => x_msg_data,
8678          p_rel_chr_id    => p_chr_id);
8679 
8680       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8681         RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8682       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8683         RAISE Okl_Api.G_EXCEPTION_ERROR;
8684       END IF;
8685 
8686       --code added to update status in OKL_ASSET_RETURNS_B
8687       --after the release asset transaction has been processed
8688       OPEN l_asr_csr(p_chr_id);
8689       LOOP
8690         FETCH l_asr_csr into l_asr_rec;
8691         EXIT When l_asr_csr%NOTFOUND;
8692         l_artv_rec.id := l_asr_rec.asset_return_id;
8693         l_artv_rec.ars_code := 'CANCELLED';
8694         l_artv_rec.like_kind_yn := 'N';
8695         --call to change the release asset status to 'CANCELLED' in asset return
8696         okl_asset_returns_pub.update_asset_returns(
8697            p_api_version    => p_api_version
8698           ,p_init_msg_list  => p_init_msg_list
8699           ,x_return_status  => x_return_status
8700           ,x_msg_count      => x_msg_count
8701           ,x_msg_data       => x_msg_data
8702           ,p_artv_rec       => l_artv_rec
8703           ,x_artv_rec       => lx_artv_rec);
8704 
8705         IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8706           RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8707         ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8708           RAISE Okl_Api.G_EXCEPTION_ERROR;
8709         END IF;
8710       END LOOP;
8711       CLOSE l_asr_csr;
8712 
8713       -- Update Credit line
8714       OKL_TRANSFER_ASSUMPTION_PVT.update_full_tna_creditline(
8715           p_api_version    => p_api_version
8716          ,p_init_msg_list  => p_init_msg_list
8717          ,x_return_status  => x_return_status
8718          ,x_msg_count      => x_msg_count
8719          ,x_msg_data       => x_msg_data
8720          ,p_chr_id         => p_chr_id);
8721 
8722       IF (x_return_status = Okl_Api.G_RET_STS_UNEXP_ERROR) THEN
8723         RAISE Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR;
8724       ELSIF (x_return_status = Okl_Api.G_RET_STS_ERROR) THEN
8725         RAISE Okl_Api.G_EXCEPTION_ERROR;
8726       END IF;
8727 
8728       -- We need to change the status of the contract
8729       OKL_CONTRACT_STATUS_PUB.update_contract_status(
8730                               p_api_version   => p_api_version,
8731                               p_init_msg_list => p_init_msg_list,
8732                               x_return_status => x_return_status,
8733                               x_msg_count     => x_msg_count,
8734                               x_msg_data      => x_msg_data,
8735                               p_khr_status    => 'BOOKED',
8736                               p_chr_id        => p_chr_id);
8737       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8738         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8739       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8740         RAISE OKL_API.G_EXCEPTION_ERROR;
8741       END IF;
8742       -- We need to change the status of the Lines for the contract
8743       OKL_CONTRACT_STATUS_PUB.cascade_lease_status(
8744                               p_api_version   => p_api_version,
8745                               p_init_msg_list => p_init_msg_list,
8746                               x_return_status => x_return_status,
8747                               x_msg_count     => x_msg_count,
8748                               x_msg_data      => x_msg_data,
8749                               p_chr_id        => p_chr_id);
8750       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8751         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8752       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8753         RAISE OKL_API.G_EXCEPTION_ERROR;
8754       END IF;
8755 
8756       -- Set Re-lease Transaction status to 'PROCESSED'
8757       open taa_trx_csr(p_orig_chr_id => ln_orig_system_id1
8758                       ,p_new_chr_id  => p_chr_id);
8759       fetch taa_trx_csr into taa_trx_rec;
8760       close taa_trx_csr;
8761 
8762       if (taa_trx_rec.id IS NOT NULL) then
8763         l_tcnv_rec.id       := taa_trx_rec.id;
8764         l_tcnv_rec.tsu_code := 'PROCESSED';
8765 
8766         OKL_TRX_CONTRACTS_PUB.update_trx_contracts
8767           (p_api_version    => p_api_version,
8768            p_init_msg_list  => p_init_msg_list,
8769            x_return_status  => x_return_status,
8770            x_msg_count      => x_msg_count,
8771            x_msg_data       => x_msg_data,
8772            p_tcnv_rec       => l_tcnv_rec,
8773            x_tcnv_rec       => l_out_tcnv_rec
8774           );
8775 
8776         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8777           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8778         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8779           RAISE OKL_API.G_EXCEPTION_ERROR;
8780         END IF;
8781       end if;
8782 
8783       --Bug# 4072796
8784       -- Update new contract number on Transfer and Assumption request
8785       -- Set status of Transfer and Assumption request to Processed
8786       if (taa_trx_rec.source_trx_id IS NOT NULL) then
8787 
8788         OPEN taa_request_dtl_csr(p_source_trx_id => taa_trx_rec.source_trx_id);
8789         FETCH taa_request_dtl_csr INTO taa_request_dtl_rec;
8790         CLOSE taa_request_dtl_csr;
8791 
8792         if (taa_request_dtl_rec.id is not null) then
8793           l_taav_rec.id := taa_request_dtl_rec.id;
8794           l_taav_rec.tcn_id := taa_request_dtl_rec.tcn_id;
8795           l_taav_rec.new_contract_number := ln_new_contract_number;
8796 
8797           OKL_TAA_PVT.update_row
8798            (p_api_version   => p_api_version,
8799             p_init_msg_list => p_init_msg_list,
8800             x_return_status => x_return_status,
8801             x_msg_count     => x_msg_count,
8802             x_msg_data      => x_msg_data,
8803             p_taav_rec      => l_taav_rec,
8804             x_taav_rec      => l_out_taav_rec);
8805 
8806           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8807             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8808           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8809             RAISE OKL_API.G_EXCEPTION_ERROR;
8810           END IF;
8811         end if;
8812 
8813         l_tcnv_rec.id       := taa_trx_rec.source_trx_id;
8814         l_tcnv_rec.tsu_code := 'PROCESSED';
8815         l_tcnv_rec.khr_id_new := p_chr_id;
8816 
8817         OKL_TRX_CONTRACTS_PUB.update_trx_contracts
8818           (p_api_version    => p_api_version,
8819            p_init_msg_list  => p_init_msg_list,
8820            x_return_status  => x_return_status,
8821            x_msg_count      => x_msg_count,
8822            x_msg_data       => x_msg_data,
8823            p_tcnv_rec       => l_tcnv_rec,
8824            x_tcnv_rec       => l_out_tcnv_rec
8825           );
8826 
8827         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8828           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8829         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8830           RAISE OKL_API.G_EXCEPTION_ERROR;
8831         END IF;
8832       end if;
8833        	 --rajnisku Bug 6657564  : Added a call to create usage line
8834 
8835  	       IF NVL(taa_trx_rec.RBR_CODE,'X')='CUSTOMER_CHANGE' THEN
8836  	            create_ubb_contract(p_api_version   =>p_api_version,
8837  	                                p_init_msg_list =>p_init_msg_list,
8838  	                                x_return_status =>x_return_status,
8839  	                                x_msg_count     =>x_msg_count,
8840  	                                x_msg_data      =>x_msg_data,
8841  	                                p_chr_id        =>p_chr_id,
8842  	                                p_source_trx_id => taa_trx_rec.source_trx_id
8843  	                         ) ;
8844 
8845 
8846  	        END IF;
8847  	       --rajnisku:End
8848 
8849     ELSE
8850       OKL_API.set_message(p_app_name     => G_APP_NAME,
8851                           p_msg_name     => 'This Contract is not a Re-Lease Contract');
8852       RAISE OKL_API.G_EXCEPTION_ERROR;
8853     END IF;
8854     OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
8855                           x_msg_data    => x_msg_data);
8856 
8857   EXCEPTION
8858       when OKL_API.G_EXCEPTION_ERROR then
8859         IF get_orig_sys_code%ISOPEN THEN
8860           close get_orig_sys_code;
8861         END IF;
8862         IF get_orig_fa%ISOPEN THEN
8863           close get_orig_fa;
8864         END IF;
8865         IF get_orig_ib%ISOPEN THEN
8866           close get_orig_ib;
8867         END IF;
8868         IF get_item_info%ISOPEN THEN
8869           close get_item_info;
8870         END IF;
8871         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8872                         p_api_name  => l_api_name,
8873                         p_pkg_name  => G_PKG_NAME,
8874                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
8875                         x_msg_count => x_msg_count,
8876                         x_msg_data  => x_msg_data,
8877                         p_api_type  => G_API_TYPE);
8878 
8879       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
8880         IF get_orig_sys_code%ISOPEN THEN
8881           close get_orig_sys_code;
8882         END IF;
8883         IF get_orig_fa%ISOPEN THEN
8884           close get_orig_fa;
8885         END IF;
8886         IF get_orig_ib%ISOPEN THEN
8887           close get_orig_ib;
8888         END IF;
8889         IF get_item_info%ISOPEN THEN
8890           close get_item_info;
8891         END IF;
8892         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8893                         p_api_name  => l_api_name,
8894                         p_pkg_name  => G_PKG_NAME,
8895                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
8896                         x_msg_count => x_msg_count,
8897                         x_msg_data  => x_msg_data,
8898                         p_api_type  => G_API_TYPE);
8899 
8900       when OTHERS then
8901         IF get_orig_sys_code%ISOPEN THEN
8902           close get_orig_sys_code;
8903         END IF;
8904         IF get_orig_fa%ISOPEN THEN
8905           close get_orig_fa;
8906         END IF;
8907         IF get_orig_ib%ISOPEN THEN
8908           close get_orig_ib;
8909         END IF;
8910         IF get_item_info%ISOPEN THEN
8911           close get_item_info;
8912         END IF;
8913         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8914                         p_api_name  => l_api_name,
8915                         p_pkg_name  => G_PKG_NAME,
8916                         p_exc_name  => 'OTHERS',
8917                         x_msg_count => x_msg_count,
8918                         x_msg_data  => x_msg_data,
8919                         p_api_type  => G_API_TYPE);
8920   END activate_release_contract;
8921 
8922 End okl_release_pvt;