DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_RELEASE_PVT

Source


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