DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_CONTRACT_PVT

Source


1 PACKAGE BODY OKL_CONTRACT_PVT  AS
2 /* $Header: OKLCKHRB.pls 120.45.12010000.7 2009/01/16 20:03:51 apaul ship $ */
3 
4     G_MODULE VARCHAR2(255) := 'okl.stream.esg.okl_esg_transport_pvt';
5     G_DEBUG_ENABLED CONSTANT VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
6     G_IS_DEBUG_STATEMENT_ON BOOLEAN;
7   -- GLOBAL VARIABLES
8   G_NO_PARENT_RECORD    CONSTANT VARCHAR2(200) := 'OKL_NO_PARENT_RECORD';
9   G_UNEXPECTED_ERROR    CONSTANT VARCHAR2(200) := 'OKL_CONTRACTS_UNEXPECTED_ERROR';
10 --avsingh added for k line deletion checks
11   G_OKL_BOOKED_STS_CODE      CONSTANT VARCHAR2(30) := 'BOOKED';
12   G_OKL_CANCELLED_STS_CODE   CONSTANT VARCHAR2(30) := 'ABANDONED';
13 
14 
15 
16   G_PARENT_TABLE_TOKEN  CONSTANT VARCHAR2(200) := OKL_API.G_PARENT_TABLE_TOKEN;
17   G_CHILD_TABLE_TOKEN   CONSTANT VARCHAR2(200) := OKL_API.G_CHILD_TABLE_TOKEN;
18   G_SQLERRM_TOKEN        CONSTANT        VARCHAR2(200)  := 'SQLerrm';
19   G_SQLCODE_TOKEN        CONSTANT        VARCHAR2(200)  := 'SQLcode';
20   G_REQUIRED_VALUE       CONSTANT VARCHAR2(200) := OKL_API.G_REQUIRED_VALUE;
21   G_INVALID_VALUE        CONSTANT VARCHAR2(200) := OKL_API.G_INVALID_VALUE;
22   G_COL_NAME_TOKEN       CONSTANT VARCHAR2(200) := OKL_API.G_COL_NAME_TOKEN;
23   G_TABLE_TOKEN      CONSTANT VARCHAR2(200) := OKL_API.G_CHILD_TABLE_TOKEN;
24 --------------------------------------------------------------------------------
25 --GLOBAL Message constants added for okl line delete checks
26 --------------------------------------------------------------------------------
27   G_BOOKED_KLE_DELETE         CONSTANT VARCHAR2(200) := 'OKL_LLA_BOOKED_KLE_DELETE';
28   G_PAST_BOOKED_KLE_DELETE    CONSTANT VARCHAR2(200) := 'OKL_LLA_P_BOOKED_KLE_DELETE';
29   G_FUNDED_KLE_DELETE         CONSTANT VARCHAR2(200) := 'OKL_LLA_FUNDED_KLE_DELETE';
30 --------------------------------------------------------------------------------
31 --Global Message Constants for Term Reduction
32 --------------------------------------------------------------------------------
33 G_TERM_REDUCTION_NOT_ALLOWED  CONSTANT VARCHAR2(200) := 'OKL_LLA_TERM_REDUCTION';
34 G_PRODUCT_EFFECTIVITY         CONSTANT VARCHAR2(200) := 'OKL_LLA_PDT_EFFECTIVITY';
35 --Bug # 2691056
36 G_RBK_NEW_START_DATE          CONSTANT VARCHAR2(200) := 'OKL_LLA_RBK_START_DATE';
37 G_RBK_DATE_LESS               CONSTANT VARCHAR2(200) := 'OKL_LLA_REBOOK_DATE_LESS';
38 G_EFFECTIVE_FROM_TOKEN        CONSTANT VARCHAR2(200) := 'EFFECTIVE_FROM';
39 G_REBOOK_DATE_TOKEN           CONSTANT VARCHAR2(200) := 'REBOOK_DATE';
40 --------------------------------------------------------------------------------
41 --Global Message Constant for Template creation not allowed
42 --------------------------------------------------------------------------------
43 G_TEMPLATE_CREATE_NOT_ALLOWED CONSTANT VARCHAR2(200) := 'OKL_LLA_TEMPLATE_CREATE';
44 --------------------------------------------------------------------------------
45 --Global Message constants for 11.5.9 - Multi currency Validation
46 --------------------------------------------------------------------------------
47 G_CONV_RATE_NOT_FOUND     CONSTANT VARCHAR2(200)  := 'OKL_LLA_CONV_RATE_NOT_FOUND';
48 G_FROM_CURRENCY_TOKEN     CONSTANT VARCHAR2(200)  := 'FROM_CURRENCY';
49 G_TO_CURRENCY_TOKEN       CONSTANT VARCHAR2(200)  := 'TO_CURRENCY';
50 G_CONV_TYPE_TOKEN         CONSTANT VARCHAR2(200)  := 'CONVERSION_TYPE';
51 G_CONV_DATE_TOKEN         CONSTANT VARCHAR2(200)  := 'CONVERSION_DATE';
52 G_REBOOK_CURRENCY_MODFN   CONSTANT VARCHAR2(200)  := 'OKL_LLA_REBOOK_CURR_MODFN';
53 G_REBOOK_PRODUCT_MODFN    CONSTANT VARCHAR2(200)  := 'OKL_LLA_REBOOK_PROD_MODFN';
54 --------------------------------------------------------------------------------
55 --Global Message constants for 11.5.9 - Product Validation
56 --------------------------------------------------------------------------------
57 G_PROD_PARAMS_NOT_FOUND   CONSTANT VARCHAR2(200)  := 'OKL_LLA_PDT_PARAM_NOT_FOUND';
58 G_PROD_MISSING_PARAM      CONSTANT VARCHAR2(200)  := 'OKL_LLA_MISSING_PDT_PARAM';
59 G_PROD_NAME_TOKEN         CONSTANT VARCHAR2(200)  := 'PRODUCT_NAME';
60 G_PROD_PARAM_TOKEN        CONSTANT VARCHAR2(200)  := 'PARAMETER_NAME';
61 G_PROD_SUBCALSS_MISMATCH  CONSTANT VARCHAR2(200)  := 'OKL_LLA_PDT_SUBCLASS_MISMATCH';
62 G_PROD_SUBCALSS_TOKEN     CONSTANT VARCHAR2(200)  := 'PRODUCT_SUBCLASS';
63 G_CONTRACT_SUBCLASS_TOKEN CONSTANT VARCHAR2(200)  := 'CONTRACT_SUBCLASS';
64 
65   G_DELETE_CONT_ERROR CONSTANT VARCHAR2(30) := 'OKL_LLA_DELETE_CONT_ERROR';
66   G_DELETE_CONT_RBK_ERROR CONSTANT VARCHAR2(30) := 'OKL_LLA_DELETE_CONT_RBK_ERROR';
67   G_DELETE_CONT_FUND_ERROR CONSTANT VARCHAR2(30) := 'OKL_LLA_DELETE_CONT_FUND_ERROR';
68   G_DELETE_CONT_RCPT_ERROR CONSTANT VARCHAR2(30) := 'OKL_LLA_DELETE_CONT_RCPT_ERROR';
69 
70   G_EXCEPTION_HALT_VALIDATION exception;
71 
72   NO_CONTRACT_FOUND exception;
73 
74   G_NO_UPDATE_ALLOWED_EXCEPTION exception;
75   G_NO_UPDATE_ALLOWED CONSTANT VARCHAR2(200) := 'OKL_NO_UPDATE_ALLOWED';
76   G_EXCEPTION_HALT_PROCESS exception;
77 
78   G_API_TYPE            CONSTANT VARCHAR2(4) := '_PVT';
79 
80 /*
81 -- vthiruva, 08/19/2004
82 -- Added Constants to enable Business Event
83 */
84 G_WF_EVT_CR_LMT_CREATED CONSTANT VARCHAR2(50) := 'oracle.apps.okl.la.credit_limit.created';
85 G_WF_EVT_CR_LMT_UPDATED CONSTANT VARCHAR2(50) := 'oracle.apps.okl.la.credit_limit.updated';
86 G_WF_EVT_CR_LMT_REMOVED CONSTANT VARCHAR2(50) := 'oracle.apps.okl.la.credit_limit.remove';
87 G_WF_EVT_ASSET_CREATED CONSTANT VARCHAR2(50) := 'oracle.apps.okl.la.lease_contract.asset_created';
88 G_WF_EVT_ASSET_UPDATED CONSTANT VARCHAR2(50) := 'oracle.apps.okl.la.lease_contract.asset_updated';
89 G_WF_EVT_ASSET_REMOVED CONSTANT VARCHAR2(50) := 'oracle.apps.okl.la.lease_contract.remove_asset';
90 G_WF_EVT_SERVICE_CREATED CONSTANT VARCHAR2(60) := 'oracle.apps.okl.la.lease_contract.service_fee_created';
91 G_WF_EVT_SERVICE_UPDATED CONSTANT VARCHAR2(60) := 'oracle.apps.okl.la.lease_contract.service_fee_updated';
92 G_WF_ITM_CR_LINE_ID CONSTANT VARCHAR2(30) := 'CREDIT_LINE_ID';
93 G_WF_ITM_CR_LMT_ID CONSTANT VARCHAR2(30) := 'CREDIT_LIMIT_ID';
94 G_WF_ITM_CONTRACT_ID CONSTANT VARCHAR2(30) := 'CONTRACT_ID';
95 G_WF_ITM_ASSET_ID CONSTANT VARCHAR2(30) := 'ASSET_ID';
96 G_WF_ITM_SRV_LINE_ID CONSTANT VARCHAR2(30) := 'SERVICE_LINE_ID';
97 G_WF_ITM_SERVICE_KHR_ID CONSTANT VARCHAR2(30) := 'SERVICE_CONTRACT_ID';
98 G_WF_ITM_SERVICE_CLE_ID CONSTANT VARCHAR2(30) := 'SERVICE_CONTRACT_LINE_ID';
99 G_WF_ITM_CONTRACT_PROCESS CONSTANT VARCHAR2(30)   := 'CONTRACT_PROCESS';
100 --create_fee and update_fee events are raised from here rather than okl_maintain_fee_pvt
101 --as contract import process and split contract do not call okl_maintain_fee_pvt,
102 --but directly call okl_contract_pvt
103 G_WF_EVT_FEE_CREATED CONSTANT VARCHAR2(50) := 'oracle.apps.okl.la.lease_contract.fee_created';
104 G_WF_EVT_FEE_UPDATED CONSTANT VARCHAR2(50) := 'oracle.apps.okl.la.lease_contract.fee_updated';
105 G_WF_ITM_FEE_LINE_ID CONSTANT VARCHAR2(30) := 'FEE_LINE_ID';
106 
107 /*
108 -- vthiruva, 08/19/2004
109 -- START, Added PROCEDURE to enable Business Event
110 */
111 -- Start of comments
112 --
113 -- Procedure Name  : raise_business_event
114 -- Description     : local_procedure, raises business event by making a call to
115 --                   okl_wf_pvt.raise_event
116 -- Business Rules  :
117 -- Parameters      :
118 -- Version         : 1.0
119 -- End of comments
120 --
121 PROCEDURE raise_business_event(
122                 p_api_version       IN NUMBER,
123                 p_init_msg_list     IN VARCHAR2,
124                 x_return_status     OUT NOCOPY VARCHAR2,
125                 x_msg_count         OUT NOCOPY NUMBER,
126                 x_msg_data          OUT NOCOPY VARCHAR2,
127                 p_event_name        IN wf_events.name%TYPE,
128                 p_parameter_list    IN wf_parameter_list_t) IS
129 
130 l_chr_id              okc_k_headers_b.id%TYPE;
131 l_contract_process    VARCHAR2(30);
132 l_parameter_list      WF_PARAMETER_LIST_T := p_parameter_list;
133 
134 BEGIN
135   -- check to see if the the contract_id is not null, this is required since
136   -- credit limit events do not necessarily pass a contract
137   l_chr_id := wf_event.GetValueForParameter(G_WF_ITM_CONTRACT_ID,p_parameter_list);
138   IF(l_chr_id IS NOT NULL)THEN
139     -- if there exists a contract in context, then derive the contract process status
140     l_contract_process := okl_lla_util_pvt.get_contract_process(l_chr_id);
141     IF(l_contract_process IS NOT NULL)THEN
142        -- add the contract process status to the parameter list only the value is not null
143        wf_event.AddParameterToList(G_WF_ITM_CONTRACT_PROCESS,l_contract_process,l_parameter_list);
144     END IF;
145   END IF;
146   OKL_WF_PVT.raise_event (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_event_name     => p_event_name,
152                           p_parameters     => l_parameter_list);
153 
154   EXCEPTION
155     WHEN OTHERS THEN
156       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
157       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
158 END raise_business_event;
159 
160 /*
161 -- vthiruva, 08/19/2004
162 -- END, PROCEDURE to enable Business Event
163 */
164 
165 --Bug#2937980
166 -- Start of comments
167 --
168 -- Procedure Name  : Inactivate_streams
169 -- Description     : local_procedures inactivates line level streams for logically
170 --                   deleted lines
171 -- Business Rules  :
172 -- Parameters      :
173 -- Version         : 1.0
174 -- End of comments
175 -- Start of comments
176 --
177 Procedure Inactivate_Streams
178           ( p_api_version     IN  NUMBER,
179             p_init_msg_list   IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
180             x_return_status   OUT NOCOPY VARCHAR2,
181             x_msg_count       OUT NOCOPY NUMBER,
182             x_msg_data        OUT NOCOPY VARCHAR2,
183             p_cle_id          IN NUMBER) is
184 
185 --Cursor to fetch active streams against line
186 Cursor strms_csr (cleId IN Number) is
187 Select str.id strm_id,
188        str.kle_id,
189        str.sty_id,
190        str.sgn_code
191 from   OKL_STREAMS str
192 where  str.say_code = 'CURR'
193 and    str.kle_id   = cleId;
194 
195 l_strms_rec     strms_csr%ROWTYPE;
196 l_return_status VARCHAR2(1);
197 i               NUMBER;
198 l_stmv_tbl      okl_streams_pub.stmv_tbl_type;
199 x_stmv_tbl      okl_streams_pub.stmv_tbl_type;
200 l_stream_update_err EXCEPTION;
201 
202 Begin
203 -----
204     x_return_status := OKL_API.G_RET_STS_SUCCESS;
205     i := 0;
206     Open strms_csr(cleId => p_cle_id);
207     Loop
208         Fetch strms_csr into l_strms_rec;
209         Exit when strms_csr%NOTFOUND;
210         i := i+1;
211         l_stmv_tbl(i).id := l_strms_rec.STRM_ID;
212         l_stmv_tbl(i).say_code := 'HIST';
213         l_stmv_tbl(i).active_yn := 'N';
214         l_stmv_tbl(i).date_history := sysdate;
215     End Loop;
216     Close strms_csr;
217     If (l_stmv_tbl.COUNT > 0) then
218         Okl_Streams_pub.update_streams(
219                          p_api_version   => p_api_version,
220                          p_init_msg_list => p_init_msg_list,
221                          x_return_status => x_return_status,
222                          x_msg_count     => x_msg_count,
223                          x_msg_data      => x_msg_data,
224                          p_stmv_tbl      => l_stmv_tbl,
225                          x_stmv_tbl      => x_stmv_tbl);
226          IF l_return_status <> OKL_API.G_RET_STS_SUCCESS Then
227              raise l_stream_update_err;
228          END IF;
229          l_stmv_tbl.delete;
230      End If;
231      EXCEPTION
232      When l_stream_update_err then
233          If (l_stmv_tbl.COUNT > 0) then
234              l_stmv_tbl.delete;
235          End If;
236      When OTHERS then
237          If (l_stmv_tbl.COUNT > 0) then
238              l_stmv_tbl.delete;
239          End If;
240          If strms_csr%ISOPEN then
241              close strms_csr;
242          End If;
243 End Inactivate_Streams;
244 --Bug#2937980 end
245 
246 -- Procedure Name  : kle_delete_allowed
247 -- Description     : local procvalidates if it is OK to delete the okl contract line
248 -- Business Rules  :
249 -- Parameters      :
250 -- Version         : 1.0
251 -- End of comments
252 
253 PROCEDURE kle_delete_allowed(p_cle_id          IN NUMBER,
254                              x_deletion_type   OUT NOCOPY VARCHAR2,
255                              x_return_status   OUT NOCOPY VARCHAR2) IS
256 
257 
258     --Cursor to check if the contract is booked
259     Cursor Chr_sts_crs(p_cle_id IN Number) IS
260     SELECT chr.sts_code
261     FROM   okc_k_headers_b chr,
262            okc_k_lines_b   cle
263     WHERE  chr.ID = cle.dnz_chr_id
264     AND    cle.ID = p_cle_id;
265 
266     l_sts_code    OKC_K_HEADERS_B.STS_CODE%TYPE;
267 
268     --Cursor to check if the contract was ever booked
269     Cursor Ever_Booked_crs(p_cle_id IN Number) is
270     SELECT 'Y'
271     FROM   okc_k_headers_bh chrh,
272            okc_k_headers_b chr,
273            okc_k_lines_b cle
274     WHERE  chrh.contract_number = chr.contract_number
275     AND    chr.ID = cle.dnz_chr_id
276     AND    chrh.sts_code = G_OKL_BOOKED_STS_CODE
277     AND    cle.ID = p_cle_id
278     AND    rownum < 2;
279 
280     l_chr_ever_booked Varchar2(1) default 'N';
281 
282     --Cursor to check whether funding exists
283     Cursor Funding_Exists_crs(p_cle_id IN NUMBER) is
284     SELECT 'Y'
285     FROM   OKL_TXL_AP_INV_LNS_B fln
286     WHERE  fln.kle_id = p_cle_id
287     And rownum < 2;
288 
289     l_funding_exists Varchar2(1) default 'N';
290 
291     --Cursor to check whether streams exist
292     Cursor streams_exist_crs(p_cle_id IN NUMBER) is
293     SELECT 'Y'
294     FROM   OKL_STREAMS str
295     WHERE  str.kle_id = p_cle_id
296     And rownum < 2;
297 
298     l_streams_exists Varchar2(1) default 'N';
299     l_deletion_type Varchar2(1) default 'P'; --P : physical delete
300                                              --L : logical delete
301                                              --N : Not allowed
302 
303     --------------
304     --Bug# 4091789
305     --------------
306     --cursor to check that line is financila asset line and
307     --contract is a rebook copy contract
308     Cursor l_rbk_asst_csr(p_cle_id IN NUMBER) is
309     Select 'Y' rbk_asst_flag,
310            clet.NAME
311     from   okc_k_lines_tl clet,
312            okc_k_lines_b  cleb,
313            okc_line_styles_b lseb,
314            okc_k_headers_b chrb
315     where  chrb.id                      =   cleb.dnz_chr_id
316     and    chrb.scs_code                =   'LEASE'
317     and    chrb.orig_system_source_code =   'OKL_REBOOK'
318     and    clet.id                      =   cleb.id
319     and    clet.language                =   userenv('LANG')
320     and    lseb.id                      =   cleb.lse_id
321     and    lseb.lty_code                =   'FREE_FORM1'
322     and    cleb.id                      =   p_cle_id
323     and    cleb.orig_system_id1 is not NULL
324     and    exists (select '1'
325                    from    okc_k_headers_b orig_chrb,
326                            okc_k_lines_b   orig_cleb
327                    where   orig_chrb.id          = chrb.orig_system_id1
328                    and     orig_cleb.id          = cleb.orig_system_id1
329                    --Bug# 4375800 :
330                    and     orig_cleb.sts_code    <> 'ABANDONED'
331                    and     orig_cleb.dnz_chr_id  = orig_chrb.id);
332 
333     l_rbk_asst_rec l_rbk_asst_csr%ROWTYPE;
334     -------------
335     --Bug# 4091789 End
336     -------------
337 
338 Begin
339      x_return_status := OKL_API.G_RET_STS_SUCCESS;
340 
341      --check if contract is booked
342      Open  Chr_sts_crs(p_cle_id => p_cle_id);
343          Fetch Chr_sts_crs into l_sts_code;
344      Close Chr_sts_crs;
345      If l_sts_code = G_OKL_BOOKED_STS_CODE Then
346          OKL_API.SET_MESSAGE(p_app_name => g_app_name,
347                                              p_msg_name => G_BOOKED_KLE_DELETE);
348          x_return_status := OKL_API.G_RET_STS_ERROR;
349          l_deletion_type := 'N';
350          Raise G_EXCEPTION_HALT_VALIDATION;
351      End If;
352 
353      --check if contract was ever booked
354      l_chr_ever_booked := 'N';
355      Open  Ever_Booked_crs(p_cle_id => p_cle_id);
356          Fetch Ever_Booked_crs into l_chr_ever_booked;
357          If Ever_Booked_crs%NOTFOUND Then
358              Null;
359          End If;
360      Close Ever_Booked_crs;
361 
362      If l_chr_ever_booked = 'Y' Then
363          OKL_API.SET_MESSAGE(p_app_name => g_app_name,
364                              p_msg_name => G_PAST_BOOKED_KLE_DELETE);
365          x_return_status := OKL_API.G_RET_STS_ERROR;
366          l_deletion_type := 'N';
367          Raise G_EXCEPTION_HALT_VALIDATION;
368      End If;
369 
370      --check whether funding exists
371      l_funding_exists := 'N';
372      Open  Funding_Exists_crs(p_cle_id => p_cle_id);
373          Fetch Funding_Exists_crs into l_funding_exists;
374               If Funding_Exists_crs%NOTFOUND Then
375              Null;
376          End If;
377      Close Funding_Exists_crs;
378 
379      If l_funding_exists = 'Y' Then
380          OKL_API.SET_MESSAGE(p_app_name => g_app_name,
381                                              p_msg_name => G_FUNDED_KLE_DELETE);
382          x_return_status := OKL_API.G_RET_STS_ERROR;
383          l_deletion_type := 'N';
384          Raise G_EXCEPTION_HALT_VALIDATION;
385      End If;
386 
387      -------------
388      --Bug# 4091789
389      -------------
390      --check if user is trying to delete a financial asset line on a lease rebook copy
391      l_rbk_asst_rec := Null;
392      for l_rbk_asst_rec in l_rbk_asst_csr(p_cle_id => p_cle_id)
393      loop
394          If NVL(l_rbk_asst_rec.rbk_asst_flag,'N') = 'Y' then
395              OKL_API.SET_MESSAGE(p_app_name      => g_app_name,
396                                  p_msg_name      => 'OKL_LA_REBOOK_LINE_DELETE',
397                                  p_token1        => 'ASSET_NUMBER',
398                                  p_token1_value  => l_rbk_asst_rec.name);
399              x_return_status := OKL_API.G_RET_STS_ERROR;
400              l_deletion_type := 'N';
401              Raise G_EXCEPTION_HALT_VALIDATION;
402           End If;
403       End Loop;
404       -------------
405       --Bug# 4091789 End
406       -------------
407 
408 
409      --check if streams exist for the line
410      l_streams_exists := 'N';
411      Open  streams_exist_crs(p_cle_id => p_cle_id);
412          Fetch streams_exist_crs into l_streams_exists;
413               If streams_exist_crs%NOTFOUND Then
414              Null;
415          End If;
416      Close streams_exist_crs;
417 
418      If l_streams_exists = 'Y' Then
419          l_deletion_type := 'L';
420      End If;
421      x_deletion_type := l_deletion_type;
422 
423      Exception
424 
425          when G_EXCEPTION_HALT_VALIDATION then
426          -- no processing necessary; validation can continue with the next column
427          x_deletion_type := l_deletion_type;
428          when OTHERS then
429          -- store SQL error message on message stack for caller
430           OKL_API.SET_MESSAGE(p_app_name => g_app_name,
431                     p_msg_name => G_UNEXPECTED_ERROR,
432                                     p_token1   => g_sqlcode_token,
433                                     p_token1_value => sqlcode,
434                                     p_token2         => g_sqlerrm_token,
435                                     p_token2_value => sqlerrm);
436 
437           -- notify caller of an error
438       If Chr_sts_crs%ISOPEN Then
439          Close Chr_sts_crs;
440       End If;
441       If Ever_Booked_crs%ISOPEN Then
442          Close Ever_Booked_crs;
443       End If;
444       If Funding_Exists_crs%ISOPEN Then
445          Close Funding_Exists_crs;
446       End If;
447       If streams_exist_crs%ISOPEN Then
448          Close streams_exist_crs;
449       End If;
450       x_deletion_type := 'N';
451           x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
452 END kle_delete_allowed;
453 
454 -- Start of comments
455 --
456 -- Procedure Name  : term_modfn
457 -- Description     : local proc checks if term modfn allowed on a lease chr hdr
458 --                   and cascades term modification to lines
459 -- Business Rules  :
460 -- Parameters      :
461 -- Version         : 1.0
462 -- End of comments
463 
464 Procedure term_modfn( p_api_version    IN NUMBER,
465                       p_init_msg_list  IN VARCHAR2,
466                       x_return_status  OUT NOCOPY VARCHAR2,
467                       x_msg_count      OUT NOCOPY NUMBER,
468                       x_msg_data       OUT NOCOPY VARCHAR2,
469                       p_chr_id          IN   NUMBER,
470                       p_new_start_date  IN   Date,
471                       p_new_end_date    IN   Date,
472                       p_new_term        IN   Number,
473                       x_modfn_mode     OUT NOCOPY VARCHAR2) IS
474 
475 --Cursor to check if it is lease contract chr
476    Cursor  chk_lease_csr(p_chr_id IN NUMBER) is
477    SELECT  chr.sts_code,
478            chr.scs_code,
479            khr.term_duration,
480            chr.start_date,
481            chr.end_date
482    From    okl_k_headers khr,
483            okc_k_headers_b chr
484    Where   khr.id = chr.id
485    And     chr.id = p_chr_id;
486 
487    l_sts_code      okc_k_headers_b.sts_code%TYPE;
488    l_scs_code      okc_k_headers_b.scs_code%TYPE;
489    l_term_duration okl_k_headers.term_duration%TYPE;
490    l_start_date    okc_k_headers_b.start_date%TYPE;
491    l_end_date      okc_k_headers_b.end_date%TYPE;
492 
493 
494 --Cursor to check if the contract was ever booked
495     Cursor Ever_Booked_csr(p_chr_id IN Number) is
496     SELECT 'Y'
497     FROM   okc_k_headers_bh chrh,
498            okc_k_headers_b chr
499     WHERE  chrh.contract_number = chr.contract_number
500     AND    chr.ID = p_chr_id
501     AND    chrh.sts_code = G_OKL_BOOKED_STS_CODE
502     AND    rownum < 2;
503 
504     l_ever_booked Varchar2(1) default 'N';
505 
506 --Cursor to check if the contract is a rebook copy
507    Cursor Rbk_Cpy_Csr(p_chr_id IN Number) is
508    Select 'Y'
509    From   okc_k_headers_b chr
510    where  chr.orig_system_source_code = 'OKL_REBOOK'
511    and    chr.id = p_chr_id;
512 
513    l_rbk_cpy  Varchar2(1) default 'N';
514 
515    l_modfn_mode Varchar2(1); --'R' restrict reduction in term
516                              --'N' Normal
517                              --'L' Copy start and end dates on to lines
518                              --'P' Violates product effictivity dates
519 
520    l_clev_rec   okl_okc_migration_pvt.clev_rec_type;
521    lx_clev_rec  okl_okc_migration_pvt.clev_rec_type;
522 
523 --Cursor to find out the product from_date and to_date
524   Cursor pdt_dts_csr(p_chr_id IN NUMBER) IS
525   Select pdt.from_date,
526          pdt.to_date
527   From   okl_products  pdt,
528          okl_k_headers khr
529   where  pdt.id = khr.pdt_id
530   and    khr.id = p_chr_id;
531 
532   l_pdt_to_date      okl_products.to_date%TYPE;
533   l_pdt_from_date    okl_products.from_date%TYPE;
534 
535   l_new_start_date   date;
536   l_new_end_date     date;
537 
538 --Bug# 2691029 : Cursor to find out Rebook date
539   Cursor rbk_date_csr (rbk_chr_id IN NUMBER) is
540   SELECT DATE_TRANSACTION_OCCURRED
541   FROM   okl_trx_contracts ktrx
542   WHERE  ktrx.KHR_ID_NEW = rbk_chr_id
543   AND    ktrx.tsu_code   = 'ENTERED'
544   --AND    ktrx.rbr_code IS NOT NULL
545   AND    ktrx.tcn_type = 'TRBK'
546 --rkuttiya added for 12.1.1 Multi GAAP Project
547   AND    ktrx.representation_type = 'PRIMARY';
548 --
549 
550   l_rbk_date okl_trx_contracts.DATE_TRANSACTION_OCCURRED%TYPE;
551 
552 --Bug# 2691029: Cursor to find out the original start date of contract being rebooked
553   Cursor orig_date_csr(rbk_chr_id IN NUMBER) is
554   Select orig.start_date,
555          orig.end_date,
556          orig_k.term_duration
557   from   okl_k_headers orig_k,
558          okc_k_headers_b orig,
559          okc_k_headers_b rbk
560   where  orig_k.id = orig.id
561   and    orig.id   = rbk.orig_system_id1
562   and    rbk.id    = rbk_chr_id;
563 
564   l_orig_start_date    okc_k_headers_b.start_date%TYPE;
565   l_orig_end_date      okc_k_headers_b.end_date%TYPE;
566   l_orig_term_duration okl_k_headers.term_duration%TYPE;
567 
568 
569 Begin
570 
571   x_return_status  := OKL_API.G_RET_STS_SUCCESS;
572   l_modfn_mode     := 'N';
573   l_new_start_date := p_new_start_date;
574   l_new_end_date   := p_new_end_date;
575 
576   Open  chk_lease_csr(p_chr_id => p_chr_id);
577   Fetch chk_lease_csr Into l_sts_code,
578                            l_scs_code,
579                            l_term_duration,
580                            l_start_date,
581                            l_end_date;
582   If chk_lease_csr%NOTFOUND Then
583      Raise G_EXCEPTION_HALT_VALIDATION;
584   End If;
585   Close chk_lease_csr;
586 
587   If l_new_start_date is null or l_new_start_date = OKL_API.G_MISS_DATE Then
588      l_new_start_date := l_start_date;
589   End If;
590 
591   If l_new_end_date is null or l_new_end_date = OKL_API.G_MISS_DATE Then
592      l_new_end_date := l_end_date;
593   End If;
594 
595 
596   If l_scs_code = 'LEASE' Then
597       --Bug#2691029 if there is no change in dates then there is no term modification
598       If l_new_start_date = l_start_date and
599          l_new_end_date   = l_end_date Then
600          l_modfn_mode := 'N';
601       Else
602           l_modfn_mode := 'L';
603           --if contract booked do not allow term changes--(this will be taken care of by the UI as
604           -- user get to see view only pages only)
605 
606           --if contract is a Rebook Copy OR Contract is ever booked
607           --do not allow reduction in term (allow change in start date only)
608 
609           l_ever_booked := 'N';
610           Open Ever_Booked_csr(p_chr_id => p_chr_id);
611               Fetch Ever_Booked_csr into l_ever_booked;
612               If Ever_Booked_csr%NOTFOUND Then
613                   Null;
614               End If;
615           Close Ever_Booked_csr;
616 
617           If l_ever_booked = 'Y' Then
618               l_modfn_mode := 'R';
619           End If;
620 
621           l_rbk_cpy := 'N';
622           --if lines exist for contract change start_end dates on lines
623           Open Rbk_Cpy_Csr(p_chr_id => p_chr_id);
624               Fetch Rbk_Cpy_Csr into l_rbk_cpy;
625               If Rbk_Cpy_Csr%NOTFOUND Then
626                   Null;
627               End If;
628           Close Rbk_Cpy_Csr;
629 
630           If l_rbk_cpy = 'Y' Then
631               l_modfn_mode := 'R';
632           End If;
633 
634           --if not restricted then check if the change will satisfy pdt start end dates
635           If l_modfn_mode <> 'R' Then
636               Open pdt_dts_csr(p_chr_id => p_chr_id);
637                   Fetch pdt_dts_csr into l_pdt_from_date,
638                                          l_pdt_to_date;
639                   If pdt_dts_csr%NOTFOUND Then
640                       Null;
641                   End If;
642               Close pdt_dts_csr;
643               If trunc(l_new_start_date) not between trunc(nvl(l_pdt_from_date,l_new_start_date))
644                                              and trunc(nvl(l_pdt_to_date,l_new_start_date)) Then
645                   l_modfn_mode := 'P';
646               End If;
647           End If;
648       End If;
649   Elsif l_scs_code = 'QUOTE' then
650 
651      l_modfn_mode := 'L';
652      Open pdt_dts_csr(p_chr_id => p_chr_id);
653          Fetch pdt_dts_csr into l_pdt_from_date,
654                                 l_pdt_to_date;
655          If pdt_dts_csr%NOTFOUND Then
656              Null;
657          End If;
658      Close pdt_dts_csr;
659      If trunc(l_new_start_date) not between trunc(nvl(l_pdt_from_date,l_new_start_date))
660                and trunc(nvl(l_pdt_to_date,l_new_start_date)) Then
661          l_modfn_mode := 'P';
662      End If;
663 
664   Else
665      --do nothing
666      l_modfn_mode := 'N';
667   End If;
668 
669 
670   If (l_modfn_mode = 'R') Then
671      --bug# 2821383: For rebook copy contracts end data should be from original contract
672      If l_rbk_cpy <> 'Y' then
673          If trunc(l_new_end_date) < trunc(l_end_date)
674              or (p_new_term  < l_term_duration) Then
675               OKL_API.SET_MESSAGE(p_app_name      => g_app_name,
676                                   p_msg_name      => G_TERM_REDUCTION_NOT_ALLOWED
677                                               );
678              x_return_status := OKL_API.G_RET_STS_ERROR;
679              Raise G_EXCEPTION_HALT_VALIDATION;
680          End If;
681      End If; --bug # 2821383
682 
683      --Bug # 2691029
684      If l_rbk_cpy = 'Y' Then
685          --start date compare should be with the start_date of the original contract
686          Open orig_date_csr(rbk_chr_id => p_chr_id);
687          Fetch orig_date_csr into l_orig_start_date,
688                                   l_orig_end_date,
689                                   l_orig_term_duration;
690          If orig_date_csr%NOTFOUND then
691              null; --should never hit this
692          end if;
693          Close orig_date_csr;
694 
695          If trunc(l_new_start_date) < trunc(l_orig_start_date) Then
696              OKL_API.SET_MESSAGE(p_app_name      => g_app_name,
697                                  p_msg_name      => G_RBK_NEW_START_DATE,
698                                  p_token1        => g_effective_from_token,
699                                  p_token1_value  => to_char(l_orig_start_date,'DD-MON-YYYY')
700                                                  );
701              x_return_status := OKL_API.G_RET_STS_ERROR;
702              Raise G_EXCEPTION_HALT_VALIDATION;
703          End If;
704          --Bug#2821383 :check on term reduction for rbook copy contract should be with original end date
705          If trunc(l_new_end_date) < trunc(l_orig_end_date)
706              or (p_new_term  < l_orig_term_duration) Then
707               OKL_API.SET_MESSAGE(p_app_name      => g_app_name,
708                                   p_msg_name      => G_TERM_REDUCTION_NOT_ALLOWED
709                                               );
710              x_return_status := OKL_API.G_RET_STS_ERROR;
711              Raise G_EXCEPTION_HALT_VALIDATION;
712          End If; --Bug# 2821383  End
713      End If;
714 
715      --Bug # 2691029
716      If l_rbk_cpy = 'Y' Then
717          Open  rbk_date_csr(p_chr_id);
718          Fetch rbk_date_csr into l_rbk_date;
719          If  rbk_date_csr%NOTFOUND Then
720              null;
721              --rebook date will always e there though
722          end if;
723          Close rbk_date_csr;
724 
725          If l_rbk_date < l_new_start_date then
726              OKL_API.SET_MESSAGE(p_app_name      => g_app_name,
727                                  p_msg_name      => G_RBK_DATE_LESS, --new message needed
728                                  p_token1        => g_rebook_date_token,
729                                  p_token1_value  => to_char(l_rbk_date,'DD-MON-YYYY')
730                                                  );
731              x_return_status := OKL_API.G_RET_STS_ERROR;
732              Raise G_EXCEPTION_HALT_VALIDATION;
733          End If;
734     End If;
735 
736   ElsIF (l_modfn_mode = 'P') Then
737       OKL_API.SET_MESSAGE(p_app_name      => g_app_name,
738                           p_msg_name      => G_PRODUCT_EFFECTIVITY
739                                           );
740       x_return_status := OKL_API.G_RET_STS_ERROR;
741       Raise G_EXCEPTION_HALT_VALIDATION;
742   End If;
743 
744   x_modfn_mode := l_modfn_mode;
745 
746   Exception
747     when G_EXCEPTION_HALT_VALIDATION then
748          -- no processing necessary; validation can continue with the next column
749          x_modfn_mode := l_modfn_mode;
750 
751          when OTHERS then
752          -- store SQL error message on message stack for caller
753           OKL_API.SET_MESSAGE(p_app_name => g_app_name,
754                     p_msg_name => G_UNEXPECTED_ERROR,
755                                     p_token1   => g_sqlcode_token,
756                                     p_token1_value => sqlcode,
757                                     p_token2         => g_sqlerrm_token,
758                                     p_token2_value => sqlerrm);
759 
760           -- notify caller of an error
761 
762       If Ever_Booked_csr%ISOPEN Then
763          Close Ever_Booked_csr;
764       End If;
765 
766       If Rbk_Cpy_Csr%ISOPEN Then
767          Close Rbk_Cpy_Csr;
768       End If;
769 
770       IF pdt_dts_csr%ISOPEN Then
771           Close pdt_dts_csr;
772       End If;
773 
774           x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
775       x_modfn_mode    := 'N';
776 END term_modfn;
777 
778 -- Start of comments
779 --
780 -- Procedure Name  : template_create_allowed
781 -- Description     : local proc validates if it is OK to create contract as template
782 -- Business Rules  : If profile option OKL_ALLOW_K_TEMPLATE_CREATE is 'Y' then
783 --                   the user is allowed to create contract templates else if it
784 --                   is 'N' the user is not allowed to create contract templates
785 -- Parameters      :
786 -- Version         : 1.0
787 -- End of comments
788 
789 PROCEDURE template_create_allowed(p_chr_id          IN  NUMBER,
790                                   p_template_yn     IN  VARCHAR2,
791                                   x_return_status   OUT NOCOPY VARCHAR2) IS
792 
793    Cursor chk_template_csr (p_chr_id IN NUMBER) is
794    Select nvl(template_yn,'N')
795    From   okc_k_headers_b
796    Where  id = p_chr_id;
797 
798    l_template_yn okc_k_headers_b.template_yn%TYPE;
799 
800 BEGIN
801     x_return_status := OKL_API.G_RET_STS_SUCCESS;
802     --check if contract template creation is allowed
803     IF p_chr_id is not null Then --it is an update
804        --get old value of template y/N flag
805        Open chk_template_csr(p_chr_id => p_chr_id);
806        Fetch chk_template_csr into l_template_yn;
807        If chk_template_csr%NOTFOUND Then
808           l_template_yn := 'N';
809        End If;
810        Close chk_template_csr;
811    Elsif p_chr_id is null Then
812        l_template_yn := 'N';
813    End If;
814 
815   --If p_template_yn is null OR p_template_yn = OKL_API.G_MISS_CHAR Then
816   --   l_template_yn := p_template_yn;
817   --End If;
818 
819   IF p_template_yn is Null OR p_template_yn = OKL_API.G_MISS_CHAR Then
820       Null;
821   Else
822       IF p_template_yn  <> l_template_yn then
823           IF FND_PROFILE.VALUE('OKL_ALLOW_K_TEMPLATE_CREATE') = 'Y' Then
824              Null;
825           ElsIf FND_PROFILE.VALUE('OKL_ALLOW_K_TEMPLATE_CREATE') = 'N' Then
826              x_return_status := OKL_API.G_RET_STS_ERROR;
827           End If;
828       End If;
829   END IF;
830 
831   EXCEPTION
832     when OTHERS then
833     x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
834 END template_create_allowed;
835 
836 -- Start of comments
837 --  Bug # 2522268
838 -- Procedure Name  : Asset_Logical_Delete
839 -- Description     : Generates Asset Number for logically deleted asset ('ABANDONED')
840 --                   and updates the original number with deleted asset number
841 --                   so that the original asset number could be re-used
842 -- Business Rules  :
843 -- Parameters      :
844 -- Version         : 1.0
845 -- End of comments
846 PROCEDURE Asset_Logical_Delete( p_api_version     IN NUMBER,
847                                 p_init_msg_list   IN VARCHAR2,
848                                 x_return_status   OUT NOCOPY VARCHAR2,
849                                 x_msg_count       OUT NOCOPY NUMBER,
850                                 x_msg_data        OUT NOCOPY VARCHAR2,
851                                 p_cle_id          IN NUMBER,
852                                 p_asset_number    IN VARCHAR2) IS
853 
854     --cursor to get new asset number
855     Cursor c_asset_no IS
856     select 'DUMMY'||TO_CHAR(OKL_FAN_SEQ.NEXTVAL)
857     FROM dual;
858 
859     l_asset_no OKX_ASSETS_V.ASSET_NUMBER%TYPE;
860 
861     --Cursors to find if asset number exists
862     CURSOR c_txl_asset_number(p_asset_number OKX_ASSETS_V.ASSET_NUMBER%TYPE) is
863     SELECT 'Y'
864     FROM DUAL
865     WHERE EXISTS (SELECT '1'
866                   FROM OKL_TXL_ASSETS_V
867                   WHERE asset_number = p_asset_number);
868 
869     CURSOR c_okx_asset_lines_v(p_asset_number OKX_ASSETS_V.ASSET_NUMBER%TYPE) is
870     --start modified abhsaxen for performance SQLID 20562304
871       select 'Y'
872       from   okc_k_lines_b kleb,
873              okc_k_lines_tl kle,
874              okc_line_styles_b  lse
875       where  kle.name = p_asset_number
876       and    kle.id = kleb.id
877       and    kle.language = USERENV('LANG')
878       and    kleb.lse_id = lse.id
879       and    lse.lty_code = 'FREE_FORM1';
880     --start modified abhsaxen for performance SQLID 20562304
881 
882     CURSOR c_okx_assets_v(p_asset_number OKX_ASSETS_V.ASSET_NUMBER%TYPE) is
883     SELECT 'Y'
884     FROM DUAL
885     WHERE EXISTS (SELECT '1'
886                   FROM OKX_ASSETS_V
887                   WHERE asset_number = p_asset_number);
888 
889     CURSOR c_txd_assets_v (p_asset_number OKX_ASSETS_V.ASSET_NUMBER%TYPE) is
890     SELECT 'Y'
891     FROM DUAL
892     WHERE EXISTS (SELECT '1'
893                   FROM OKL_TXD_ASSETS_V
894                   WHERE asset_number = p_asset_number);
895 
896 
897     l_asset_exists Varchar2(1) default 'N';
898 
899     --cursor to check if line is financial asset top line
900     CURSOR l_is_finasst (p_line_id OKC_K_LINES_B.ID%TYPE) IS
901     Select 'Y'
902     From   Dual
903     Where exists (select '1'
904                   from   okc_k_lines_b cle,
905                          okc_line_styles_b  lse
906                   where  cle.lse_id = lse.id
907                   and    lse.lty_code = 'FREE_FORM1'
908                   and    cle.id       = p_line_id);
909 
910     l_fin_asst Varchar2(1) default 'N';
911     l_cle_id Number;
912 
913     l_clev_rec  OKL_OKC_MIGRATION_PVT.clev_rec_type;
914     lx_clev_rec  OKL_OKC_MIGRATION_PVT.clev_rec_type;
915 
916     --Cursor to check asset number on txl
917     CURSOR l_txlv_csr (p_finasst_id IN NUMBER, P_Asstno IN VARCHAR2) is
918     Select txlv.id,
919            txlv.asset_number
920     From   OKL_TXL_ASSETS_V  txlv,
921            OKC_K_LINES_B     cle,
922            OKC_LINE_STYLES_B lse
923     Where  txlv.kle_id    = cle.id
924     And    cle.lse_id     = lse.id
925     And    lse.lty_code   = 'FIXED_ASSET'
926     And    cle.cle_id     = p_finasst_id
927     And    txlv.asset_number = p_asstNo;
928 
929     l_txl_id              OKL_TXL_ASSETS_V.ID%TYPE;
930     l_txl_asset_number    OKL_TXL_ASSETS_V.ASSET_NUMBER%TYPE;
931 
932     --Cursor to check asset number on txd
933     CURSOR l_txdv_csr (p_finasst_id IN NUMBER, p_asstno IN VARCHAR2) is
934     Select txdv.id,
935            txdv.asset_number
936     From   OKL_TXD_ASSETS_V  txdv,
937            OKL_TXL_ASSETS_V  txlv,
938            OKC_K_LINES_B     cle,
939            OKC_LINE_STYLES_B lse
940     Where  txdv.tal_id    = txlv.id
941     And    txlv.kle_id    = cle.id
942     And    cle.lse_id     = lse.id
943     And    lse.lty_code   = 'FIXED_ASSET'
944     And    cle.cle_id     = p_finasst_id
945     And    txdv.asset_number = p_asstno;
946 
947     l_txd_id              OKL_TXD_ASSETS_V.ID%TYPE;
948     l_txd_asset_number    OKL_TXD_ASSETS_V.ASSET_NUMBER%TYPE;
949 
950     l_tlpv_rec             OKL_TXL_ASSETS_PUB.tlpv_rec_type;
951     lx_tlpv_rec            OKL_TXL_ASSETS_PUB.tlpv_rec_type;
952     l_adpv_rec             OKL_TXD_ASSETS_PUB.adpv_rec_type;
953     lx_adpv_rec            OKL_TXD_ASSETS_PUB.adpv_rec_type;
954 
955 
956 Begin
957     x_return_status := OKL_API.G_RET_STS_SUCCESS;
958     l_cle_id := p_cle_id;
959     --dbms_output.put_line('outside Asset_Logical_Delete:'||to_char(l_cle_id));
960     l_fin_asst := 'N';
961     --find out if p_cle_id is financial asset line
962     Open l_is_finasst(l_cle_id);
963     Fetch l_is_finasst into l_fin_asst;
964     If l_is_finasst%NOTFOUND Then
965        Null;
966     End If;
967     Close l_is_finasst;
968 
969     If l_fin_asst = 'Y' Then
970         --dbms_output.put_line('inside Asset_Logical_Delete:'||to_char(l_cle_id));
971         --get deleted asset number
972         l_asset_no := null;
973         Open c_asset_no;
974         Loop
975             Fetch c_asset_no into l_asset_no;
976             --chk if asset already exists
977             l_asset_exists := 'N';
978             open c_txl_asset_number(l_asset_no);
979             Fetch c_txl_asset_number into l_asset_exists;
980             If c_txl_asset_number%NOTFOUND Then
981                 open  c_okx_asset_lines_v(l_asset_no);
982                 Fetch c_okx_asset_lines_v into l_asset_exists;
983                 If c_okx_asset_lines_v%NOTFOUND Then
984                     open c_okx_assets_v(l_asset_no);
985                     Fetch c_okx_assets_v into l_asset_exists;
986                     If c_okx_assets_v%NOTFOUND Then
987                         open c_txd_assets_v(l_asset_no);
988                         Fetch c_txd_assets_v into l_Asset_exists;
989                         If c_txd_assets_v%NOTFOUND Then
990                            null;
991                         End If;
992                         Close c_txd_assets_v;
993                     End If;
994                     Close c_okx_assets_v;
995                 End If;
996                 Close c_okx_asset_lines_v;
997              End If;
998              Close c_txl_asset_number;
999              If l_asset_exists = 'N' Then
1000                  Exit;
1001              End If;
1002          End Loop;
1003 
1004          --dbms_output.put_line(l_asset_no);
1005          --update asset number on top line
1006          l_clev_rec.id   := l_cle_id;
1007          l_clev_rec.name := l_asset_no;
1008          okl_okc_migration_pvt.update_contract_line(
1009              p_api_version       => p_api_version,
1010              p_init_msg_list     => p_init_msg_list,
1011              x_return_status     => x_return_status,
1012              x_msg_count         => x_msg_count,
1013              x_msg_data          => x_msg_data,
1014              p_restricted_update => OKC_API.G_FALSE,
1015              p_clev_rec          => l_clev_rec,
1016              x_clev_rec          => lx_clev_rec);
1017 
1018         If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
1019             RAISE G_EXCEPTION_HALT_PROCESS;
1020         End If;
1021 
1022         --update asset number on txl
1023         OPEN l_txlv_csr(l_cle_id, p_asset_number);
1024         Loop
1025             Fetch l_txlv_csr into l_txl_id, l_txl_asset_number;
1026             Exit When l_txlv_csr%NOTFOUND;
1027             IF l_txl_asset_number is not null then
1028                  l_tlpv_rec.id := l_txl_id;
1029                  l_tlpv_rec.asset_number := l_asset_no;
1030                  okl_txl_assets_pub.update_txl_asset_Def(
1031                                          p_api_version   => p_api_version,
1032                                          p_init_msg_list => p_init_msg_list,
1033                                          x_return_status => x_return_status,
1034                                          x_msg_count     => x_msg_count,
1035                                          x_msg_data      => x_msg_data,
1036                                          p_tlpv_rec      => l_tlpv_rec,
1037                                          x_tlpv_rec      => lx_tlpv_rec);
1038                  --dbms_output.put_line('after updating txl assets for asset number');
1039                  If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
1040                      RAISE G_EXCEPTION_HALT_PROCESS;
1041                  End If;
1042              End IF;
1043         End Loop;
1044         CLOSE l_txlv_csr;
1045 
1046         --update asset number on txd
1047         OPEN l_txdv_csr(l_cle_id,p_asset_number);
1048         LOOP
1049             Fetch l_txdv_csr into l_txd_id, l_txd_asset_number;
1050             Exit When l_txdv_csr%NOTFOUND;
1051             IF l_txd_asset_number is not null then
1052                  l_adpv_rec.id := l_txd_id;
1053                  l_adpv_rec.asset_number := l_asset_no;
1054 
1055                  okl_txd_assets_pub.update_txd_asset_Def(
1056                                          p_api_version   => p_api_version,
1057                                          p_init_msg_list => p_init_msg_list,
1058                                          x_return_status => x_return_status,
1059                                          x_msg_count     => x_msg_count,
1060                                          x_msg_data      => x_msg_data,
1061                                          p_adpv_rec      => l_adpv_rec,
1062                                          x_adpv_rec      => lx_adpv_rec);
1063 
1064                  If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
1065                      RAISE G_EXCEPTION_HALT_PROCESS;
1066                  End If;
1067 
1068              End IF;
1069         End Loop;
1070         CLOSE l_txlv_csr;
1071     END IF;
1072     EXCEPTION
1073     WHEN G_EXCEPTION_HALT_PROCESS Then
1074          --just return back the return status with message stack;
1075          Null;
1076          If l_txdv_csr%ISOPEN Then
1077              CLOSE l_txdv_csr;
1078          End If;
1079          If l_txlv_csr%ISOPEN Then
1080              CLOSE l_txlv_csr;
1081          End If;
1082          If l_is_finasst%ISOPEN Then
1083              CLOSE l_is_finasst;
1084          End If;
1085          If c_txd_assets_v%ISOPEN Then
1086              CLOSE c_txd_assets_v;
1087          End If;
1088          If c_okx_assets_v%ISOPEN Then
1089              CLOSE c_okx_assets_v;
1090          End If;
1091          If c_okx_asset_lines_v%ISOPEN Then
1092              CLOSE c_okx_asset_lines_v;
1093          End If;
1094          If c_txl_asset_number%ISOPEN Then
1095              CLOSE c_txl_asset_number;
1096          End If;
1097          If c_asset_no%ISOPEN Then
1098              CLOSE c_asset_no;
1099          End If;
1100     WHEN OTHERS Then
1101          If l_txdv_csr%ISOPEN Then
1102              CLOSE l_txdv_csr;
1103          End If;
1104          If l_txlv_csr%ISOPEN Then
1105              CLOSE l_txlv_csr;
1106          End If;
1107          If l_is_finasst%ISOPEN Then
1108              CLOSE l_is_finasst;
1109          End If;
1110          If c_txd_assets_v%ISOPEN Then
1111              CLOSE c_txd_assets_v;
1112          End If;
1113          If c_okx_assets_v%ISOPEN Then
1114              CLOSE c_okx_assets_v;
1115          End If;
1116          If c_okx_asset_lines_v%ISOPEN Then
1117              CLOSE c_okx_asset_lines_v;
1118          End If;
1119          If c_txl_asset_number%ISOPEN Then
1120              CLOSE c_txl_asset_number;
1121          End If;
1122          If c_asset_no%ISOPEN Then
1123              CLOSE c_asset_no;
1124          End If;
1125          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1126 END Asset_logical_Delete;
1127  --Bug # 2522268 End
1128 
1129 -- Start of comments
1130 -- Bug # 2522268 End
1131 -- Procedure Name  : Linked_Asset_Delete
1132 -- Description     : Local Procedure to delete linked_assets
1133 -- Business Rules  :
1134 -- Parameters      :
1135 -- Version         : 1.0
1136 -- End of comments
1137 Procedure Linked_Asset_Delete( p_api_version     IN NUMBER,
1138                                p_init_msg_list   IN VARCHAR2,
1139                                x_return_status   OUT NOCOPY VARCHAR2,
1140                                x_msg_count       OUT NOCOPY NUMBER,
1141                                x_msg_data        OUT NOCOPY VARCHAR2,
1142                                p_cle_id          IN NUMBER,
1143                                p_deletion_type  IN VARCHAR2) IS
1144 
1145     --cursor to check if line is financial asset top line
1146     CURSOR l_is_finasst (p_line_id OKC_K_LINES_B.ID%TYPE) IS
1147     Select 'Y'
1148     From   Dual
1149     Where exists (select '1'
1150                   from   okc_k_lines_b cle,
1151                          okc_line_styles_b  lse
1152                   where  cle.lse_id = lse.id
1153                   and    lse.lty_code = 'FREE_FORM1'
1154                   and    cle.id       = p_line_id);
1155 
1156     l_fin_asst Varchar2(1) default 'N';
1157     l_cle_id Number;
1158 
1159     --cursor to check if financial asset appears as linked asset
1160     CURSOR l_lnk_ast_csr (p_line_id  OKC_K_LINES_B.ID%TYPE) IS
1161     Select lnk.id
1162     From   okc_k_lines_b lnk,
1163            okc_line_styles_b lnk_lse,
1164            okc_statuses_b sts,
1165            okc_k_items    cim
1166     Where  lnk.id = cim.cle_id
1167     and    lnk.dnz_chr_id = cim.dnz_chr_id
1168     and    lnk.lse_id = lnk_lse.id
1169     and    lnk_lse.lty_code in ('LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET')
1170     and    sts.code = lnk.sts_code
1171     and    sts.ste_code not in ('EXPIRED','TERMINATED','CANCELLED')
1172     and    cim.jtot_object1_code = 'OKX_COVASST'
1173     and    cim.object1_id1 = to_char(p_line_id)
1174     and    cim.object1_id2 = '#';
1175 
1176     l_lnk_cle_id         OKC_K_LINES_B.ID%TYPE;
1177     l_clev_rec           OKL_OKC_MIGRATION_PVT.clev_rec_type;
1178     l_clev_rec_out       OKL_OKC_MIGRATION_PVT.clev_rec_type;
1179     l_deletion_type      Varchar2(1);
1180 
1181 Begin
1182     x_return_status := OKL_API.G_RET_STS_SUCCESS;
1183     l_cle_id := p_cle_id;
1184     l_deletion_type := p_deletion_type;
1185     --dbms_output.put_line('outside Link_asset_Delete:'||to_char(l_cle_id));
1186     l_fin_asst := 'N';
1187     --find out if p_cle_id is financial asset line
1188     Open l_is_finasst(l_cle_id);
1189     Fetch l_is_finasst into l_fin_asst;
1190     If l_is_finasst%NOTFOUND Then
1191        Null;
1192     End If;
1193     Close l_is_finasst;
1194 
1195     If l_fin_asst = 'Y' Then
1196         --dbms_output.put_line('deletion type '||l_deletion_type);
1197         OPEN l_lnk_ast_csr(p_line_id => l_cle_id);
1198         LOOP
1199             FETCH l_lnk_ast_csr into l_lnk_cle_id;
1200             EXIT When l_lnk_ast_csr%NOTFOUND;
1201             If l_deletion_type = 'L' Then
1202                 --do logical deletion of linked asset line
1203                 l_clev_rec.id := l_lnk_cle_id;
1204                 l_clev_rec.sts_code := G_OKL_CANCELLED_STS_CODE;
1205 
1206                 okl_okc_migration_pvt.update_contract_line
1207                      (p_api_version    => p_api_version,
1208                       p_init_msg_list  => p_init_msg_list,
1209                       x_return_status  => x_return_status,
1210                       x_msg_count      => x_msg_count,
1211                       x_msg_data       => x_msg_data,
1212                       p_clev_rec       => l_clev_rec,
1213                       x_clev_rec       => l_clev_rec_out
1214                      );
1215                 If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
1216                    RAISE G_EXCEPTION_HALT_PROCESS;
1217                 End If;
1218 
1219             ElsIf l_deletion_type = 'P' Then
1220                 --do physical deletions
1221                 --dbms_output.put_line('Inside Link_asset_Delete:'||to_char(l_lnk_cle_id));
1222                 OKL_CONTRACT_PVT.delete_contract_line
1223                      (p_api_version    => p_api_version,
1224                       p_init_msg_list  => p_init_msg_list,
1225                       x_return_status  => x_return_status,
1226                       x_msg_count      => x_msg_count,
1227                       x_msg_data       => x_msg_data,
1228                       p_line_id        => l_lnk_cle_id
1229                       );
1230 
1231                  If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
1232                    RAISE G_EXCEPTION_HALT_PROCESS;
1233                  End If;
1234              End If;
1235         END LOOP;
1236         CLOSE l_lnk_ast_csr;
1237     END If;
1238 
1239         EXCEPTION
1240     WHEN G_EXCEPTION_HALT_PROCESS Then
1241          --just return back the return status with message stack;
1242          Null;
1243          If l_is_finasst%ISOPEN Then
1244              CLOSE l_is_finasst;
1245          End If;
1246          If l_lnk_ast_csr%ISOPEN Then
1247              CLOSE l_lnk_ast_csr;
1248          End If;
1249     WHEN OTHERS Then
1250          If l_is_finasst%ISOPEN Then
1251              CLOSE l_is_finasst;
1252          End If;
1253          If l_lnk_ast_csr%ISOPEN Then
1254              CLOSE l_lnk_ast_csr;
1255          End If;
1256          x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1257 END Linked_Asset_Delete;
1258 --------------------------------------------------------------------------------
1259 --Start of comments
1260 -- Bug#2727161   : 11.5.9 Enhancment
1261 -- Procedure     : Is_Rebook_Copy (Local)
1262 -- Description   : Return 'Y' if contract is a rebook copy contract, 'N' if it
1263 --                 is not
1264 --Notes         :
1265 --Prameters     : IN
1266 --                p_chr_id          - contract id
1267 --                Return            - 'Y' if rebook copy
1268 --                                    'N' if not rebook copy
1269 --end of comments
1270 --------------------------------------------------------------------------------
1271 FUNCTION Is_Rebook_Copy (p_chr_id IN NUMBER) return varchar2 IS
1272    --Cursor to check if the contract is a rebook copy
1273    Cursor Rbk_Cpy_Csr(p_chr_id IN Number) is
1274    Select 'Y'
1275    From   okc_k_headers_b chr
1276    where  chr.orig_system_source_code = 'OKL_REBOOK'
1277    and    chr.id = p_chr_id;
1278 
1279    l_rbk_cpy  Varchar2(1) default 'N';
1280 Begin
1281    l_rbk_cpy := 'N';
1282    Open Rbk_Cpy_Csr(p_chr_id => p_chr_id);
1283    Fetch Rbk_Cpy_Csr into l_rbk_cpy;
1284    If Rbk_Cpy_Csr%NOTFOUND Then
1285        Null;
1286    End If;
1287    Close Rbk_Cpy_Csr;
1288    Return (l_rbk_cpy);
1289 End Is_Rebook_Copy;
1290 --Bug# : 3143522 - Subsidies . Extra enhancement if line start/end dates are not
1291 --passed they should be initialized
1292 --------------------------------------------------------------------------------
1293 -- Start of comments
1294 --
1295 -- Procedure Name  : get_line_dates
1296 -- Description     : defaults line dates for fee and service line and
1297 --                   sub-lines on a lease contract if no dates are
1298 --                   passed.
1299 -- Business Rules  :
1300 -- Parameters      :
1301 -- Version         : 1.0
1302 -- End of comments
1303 --------------------------------------------------------------------------------
1304 Procedure get_line_dates(p_clev_rec      IN okl_okc_migration_pvt.clev_rec_type,
1305                          x_return_status OUT NOCOPY Varchar2,
1306                          x_clev_rec      OUT NOCOPY okl_okc_migration_pvt.clev_rec_type) is
1307 
1308     l_return_status      Varchar2(1) default OKL_API.G_RET_STS_SUCCESS;
1309     --cursor to get contract header dates
1310     cursor l_chr_csr (p_chr_id in number) is
1311     select chrb.start_date,
1312            chrb.end_date,
1313            chrb.scs_code,
1314            chrb.currency_code,
1315            chrb.sts_code
1316     from   okc_k_headers_b chrb
1317     where  chrb.id = p_chr_id;
1318 
1319     l_chr_start_date date;
1320     l_chr_end_date   date;
1321     l_scs_code       okc_k_headers_b.scs_code%TYPE;
1322     l_chr_curr_code  okc_k_headers_b.currency_code%TYPE;
1323     l_chr_sts_code   okc_k_headers_b.sts_code%TYPE;
1324 
1325     --cursor to get parent line dates
1326     cursor l_cle_csr (p_cle_id in number) is
1327     select cleb.start_date,
1328            cleb.end_date,
1329            cleb.currency_code,
1330            cleb.sts_code
1331     from   okc_k_lines_b cleb
1332     where  cleb.id = p_cle_id;
1333    l_cle_start_date date;
1334    l_cle_end_date   date;
1335    l_cle_curr_code  okc_k_lines_b.currency_code%TYPE;
1336    l_cle_sts_code   okc_k_lines_b.sts_code%TYPE;
1337 
1338     --cursor to get line style
1339     cursor l_lse_csr (p_lse_id in number ) is
1340     select lseb.lty_code,
1341            lseb.lse_type
1342     from   okc_line_styles_b lseb
1343     where  lseb.id = p_lse_id;
1344 
1345     l_lty_code okc_line_styles_b.lty_code%TYPE;
1346     l_lse_type okc_line_styles_b.lse_type%TYPE;
1347 
1348     l_clev_rec       okl_okc_migration_pvt.clev_rec_type;
1349 
1350     l_rbk_cpy varchar2(1) default 'N';
1351 
1352     --Cursor to find out Rebook date
1353     Cursor rbk_date_csr (rbk_chr_id IN NUMBER) is
1354     SELECT DATE_TRANSACTION_OCCURRED
1355     FROM   okl_trx_contracts ktrx
1356     WHERE  ktrx.KHR_ID_NEW = rbk_chr_id
1357     AND    ktrx.tsu_code   = 'ENTERED'
1358     AND    ktrx.tcn_type = 'TRBK'
1359 --rkuttiya added for 12.1.1 Multi GAAP
1360     AND    ktrx.representation_type = 'PRIMARY';
1361 --
1362 
1363     l_rbk_date okl_trx_contracts.DATE_TRANSACTION_OCCURRED%TYPE default Null;
1364 begin
1365     l_return_status := OKL_API.G_RET_STS_SUCCESS;
1366     l_clev_rec      := p_clev_rec;
1367 
1368     open l_chr_csr(p_chr_id => l_clev_rec.dnz_chr_id);
1369     fetch l_chr_csr into l_chr_start_date,
1370                          l_chr_end_date,
1371                          l_scs_code,
1372                          l_chr_curr_code,
1373                          l_chr_sts_code;
1374     close l_chr_csr;
1375 
1376     --get rebook date if it is a rebook copy contract
1377     l_rbk_cpy := 'N';
1378     If l_scs_code = 'LEASE' then
1379         l_rbk_cpy := Is_rebook_Copy(p_chr_id => l_clev_rec.dnz_chr_id);
1380     End If;
1381 
1382     If l_rbk_cpy = 'Y' Then
1383         Open  rbk_date_csr(l_clev_rec.dnz_chr_id);
1384         Fetch rbk_date_csr into l_rbk_date;
1385         If  rbk_date_csr%NOTFOUND Then
1386             null;
1387             --rebook date will always e there though
1388         end if;
1389         Close rbk_date_csr;
1390     End If;
1391     --end of get rebook date if it is a rebook copy contract
1392 
1393     If l_scs_code  in ('LEASE','QUOTE') then
1394         open l_lse_csr(p_lse_id => l_clev_rec.lse_id);
1395         fetch l_lse_csr into l_lty_code,
1396                              l_lse_type;
1397         close l_lse_csr;
1398         --If l_lty_code in ('SOLD_SERVICE','FEE','USAGE','LINK_FEE_ASSET','LINK_SERV_ASSET','LINK_USAGE_ASSET') then
1399            if l_lse_type = 'TLS' then
1400 
1401               If nvl(l_clev_rec.start_date,OKL_API.G_MISS_DATE) = OKL_API.G_MISS_DATE then
1402                   If nvl(l_rbk_cpy,'N') = 'Y' AND nvl(l_rbk_date,OKL_API.G_MISS_DATE) <> OKL_API.G_MISS_DATE then
1403                       l_clev_rec.start_date := l_rbk_date;
1404                   Else
1405                       l_clev_rec.start_date := l_chr_start_date;
1406                   End If;
1407               End If;
1408               If nvl(l_clev_rec.end_date,OKL_API.G_MISS_DATE) = OKL_API.G_MISS_DATE then
1409                   l_clev_rec.end_date   := l_chr_end_date;
1410               End If;
1411               If nvl(l_clev_rec.currency_code,OKL_API.G_MISS_CHAR) = OKL_API.G_MISS_CHAR then
1412                   l_clev_rec.currency_code := l_chr_curr_code;
1413               End If;
1414               If nvl(l_clev_rec.sts_code,OKL_API.G_MISS_CHAR) = OKL_API.G_MISS_CHAR then
1415                   l_clev_rec.sts_code := l_chr_sts_code;
1416               End If;
1417 
1418            elsif l_lse_type = 'SLS' then
1419                open l_cle_csr (p_cle_id => l_clev_rec.cle_id);
1420                fetch l_cle_csr into l_cle_start_date,
1421                                     l_cle_end_date,
1422                                     l_cle_curr_code,
1423                                     l_cle_sts_code;
1424                close l_cle_csr;
1425                If nvl(l_clev_rec.start_date,OKL_API.G_MISS_DATE) = OKL_API.G_MISS_DATE then
1426                    l_clev_rec.start_date := l_cle_start_date;
1427                End If;
1428                If nvl(l_clev_rec.end_date,OKL_API.G_MISS_DATE) = OKL_API.G_MISS_DATE then
1429                    l_clev_rec.end_date   := l_cle_end_date;
1430                End If;
1431               If nvl(l_clev_rec.currency_code,OKL_API.G_MISS_CHAR) = OKL_API.G_MISS_CHAR then
1432                   l_clev_rec.currency_code := l_cle_curr_code;
1433               End If;
1434               If nvl(l_clev_rec.sts_code,OKL_API.G_MISS_CHAR) = OKL_API.G_MISS_CHAR then
1435                   l_clev_rec.sts_code := l_cle_sts_code;
1436               End If;
1437 
1438            end if;
1439         --end if;
1440     end if;
1441     x_clev_rec      := l_clev_rec;
1442     x_return_status := l_return_status;
1443 exception
1444 when others then
1445      if l_chr_csr%ISOPEN then
1446          close l_chr_csr;
1447      end if;
1448      if l_cle_csr%ISOPEN then
1449          close l_cle_csr;
1450      end if;
1451      if l_lse_csr%ISOPEN then
1452          close l_lse_csr;
1453      end if;
1454      if  rbk_date_csr%ISOPEN then
1455          close rbk_date_csr;
1456      end if;
1457      x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
1458 end get_line_dates;
1459 --End Bug# 3143522 - Subsidies - extra enhancement to auto-populate line dates
1460 --------------------------------------------------------------------------------
1461 --Bug# 3124577 : Procedure Create_OKC_CURRENCY_RULE  is removed  for
1462 --               OKC 11.5.10 Rule Migration
1463 --               as there is no need to create the CVN rule . Currency columns
1464 --               been promoted to OKC_K_HEADERS_B
1465 /*--Bug# 3124577 : 11.5.10 Rule Migration -------------------------------------*/
1466 --------------------------------------------------------------------------------
1467   --Bug # : Multi-Currency Enhancement
1468   --
1469   -- PROCEDURE validate_currency (local)
1470   -- Decription: This procedure validates currency_code during insert and update operation
1471   -- Logic:
1472   --       1. If transaction currency is NULL, take functional currency and
1473   --          make rate, date and type as NULL
1474   --       2. If transaction currency is NOT NULL and
1475   --             transaction currency <> functional currency and
1476   --             type <> 'User' then
1477   --            get conversion rate from GL and change rate column with new rate
1478   --       3. If transaction currency is NOT NULL and
1479   --             transaction currency <> functional currency and
1480   --             type = 'User' then
1481   --            take all values as it is
1482   --       4. If transaction currency = functional currency
1483   --            make rate, date and type as NULL
1484   --       5. If Contract currency <> Functional currency then ceate OKC
1485   --          currency conversion rule
1486   --
1487 ------------------------------------------------------------------------------
1488   PROCEDURE validate_currency(p_api_version   IN  NUMBER,
1489                               p_init_msg_list IN  VARCHAR2,
1490                               x_msg_count     OUT NOCOPY NUMBER,
1491                               x_msg_data      OUT NOCOPY VARCHAR2,
1492                               x_return_status OUT NOCOPY VARCHAR2,
1493                               p_chrv_rec      IN  okl_okc_migration_pvt.chrv_rec_type,
1494                               p_khrv_rec      IN  khrv_rec_type,
1495                               x_chrv_rec      OUT NOCOPY okl_okc_migration_pvt.chrv_rec_type,
1496                               x_khrv_rec      OUT NOCOPY khrv_rec_type
1497                              ) IS
1498 
1499   l_chrv_rec                 okl_okc_migration_pvt.chrv_rec_type;
1500   l_khrv_rec                 khrv_rec_type;
1501   l_func_currency            GL_CURRENCIES.CURRENCY_CODE%TYPE;
1502   currency_validation_failed EXCEPTION;
1503 
1504   --Bug# : 11.5.9 Rebooks - currency can not be modified
1505   -- cursor to get currency of the original contract
1506   Cursor ger_orig_curr_csr(p_rbk_chr_id IN NUMBER) is
1507   Select khr.currency_code,
1508          khr.currency_conversion_type,
1509          khr.currency_conversion_date,
1510          khr.currency_conversion_rate
1511   from   okl_k_headers_full_v khr,
1512          okc_k_headers_b rbk_chr
1513   where  khr.id = rbk_chr.orig_system_id1
1514   and    rbk_chr.id = p_rbk_chr_id;
1515 
1516   l_orig_curr_code       okl_k_headers_full_v.currency_code%TYPE;
1517   l_orig_curr_conv_type  okl_k_headers_full_v.currency_conversion_type%TYPE;
1518   l_orig_curr_conv_date  okl_k_headers_full_v.currency_conversion_date%TYPE;
1519   l_orig_curr_conv_rate  okl_k_headers_full_v.currency_conversion_rate%TYPE;
1520   --Bug# : 11.5.9 Rebooks - currency can not be modified
1521 
1522 
1523   l_rbk_cpy Varchar2(1) default 'N';
1524 
1525   BEGIN
1526     x_return_status := OKL_API.G_RET_STS_SUCCESS;
1527     l_chrv_rec := p_chrv_rec;
1528     l_khrv_rec := p_khrv_rec;
1529 
1530     --Check if contract is rebook copy
1531     --if it is and currency code and conv type is being modified raise error
1532     l_rbk_cpy := Is_Rebook_Copy(p_chr_id => p_chrv_rec.id);
1533     If l_rbk_cpy = 'Y' Then
1534         Open ger_orig_curr_csr(p_rbk_chr_id => l_chrv_rec.id);
1535         Fetch ger_orig_curr_csr into  l_orig_curr_code,
1536                                       l_orig_curr_conv_type,
1537                                       l_orig_curr_conv_date,
1538                                       l_orig_curr_conv_rate;
1539         If ger_orig_curr_csr%NOTFOUND then
1540             null;
1541         Else
1542             If  l_chrv_rec.currency_code <> l_orig_curr_code OR
1543                 l_khrv_rec.currency_conversion_type <> l_orig_curr_conv_type OR
1544                 l_khrv_rec.currency_conversion_rate <> l_orig_curr_conv_rate Then
1545                 OKL_API.Set_Message(p_app_name  => G_APP_NAME,
1546                                     p_msg_name  => G_REBOOK_CURRENCY_MODFN);
1547                 x_return_status := OKL_API.G_RET_STS_ERROR;
1548                 raise currency_validation_failed;
1549             Else
1550                 --do not allow change in currency conversion date
1551                 l_khrv_rec.currency_conversion_date := l_orig_curr_conv_date;
1552             End If;
1553         End If;
1554     End If;
1555 
1556     l_func_currency := okl_accounting_util.get_func_curr_code();
1557 
1558     --dbms_output.put_line('Func Curr: '||l_func_currency);
1559     --dbms_output.put_line('Trans Curr Code: '|| p_chrv_rec.currency_code);
1560     --dbms_output.put_line('Trans Curr Rate: '|| p_khrv_rec.currency_conversion_rate);
1561     --dbms_output.put_line('Trans Curr Date: '|| p_khrv_rec.currency_conversion_date);
1562     --dbms_output.put_line('Trans Curr Type: '|| p_khrv_rec.currency_conversion_type);
1563 
1564     IF (l_chrv_rec.currency_code IS NULL
1565        OR
1566         l_chrv_rec.currency_code = OKL_API.G_MISS_CHAR) THEN -- take functional currency
1567         l_chrv_rec.currency_code := l_func_currency;
1568         l_khrv_rec.currency_conversion_type := NULL;
1569         l_khrv_rec.currency_conversion_rate := NULL;
1570         l_khrv_rec.currency_conversion_date := NULL;
1571     ELSE
1572        IF (l_chrv_rec.currency_code = l_func_currency) THEN -- both are same
1573            l_khrv_rec.currency_conversion_type := NULL;
1574            l_khrv_rec.currency_conversion_rate := NULL;
1575            l_khrv_rec.currency_conversion_date := NULL;
1576        ELSE -- transactional and functional currency are different
1577 
1578            -- Conversion type, date and rate mandetory
1579            IF (l_khrv_rec.currency_conversion_type IS NULL
1580                OR
1581                l_khrv_rec.currency_conversion_type = OKC_API.G_MISS_CHAR) THEN
1582               OKC_API.set_message(
1583                                   p_app_name     => G_APP_NAME,
1584                                   p_msg_name     => G_REQUIRED_VALUE,
1585                                   p_token1       => G_COL_NAME_TOKEN,
1586                                   p_token1_value => 'Currency Conversion Type');
1587               x_return_status := OKC_API.G_RET_STS_ERROR;
1588               RAISE currency_validation_failed;
1589            END IF;
1590 
1591 
1592            IF (l_khrv_rec.currency_conversion_date IS NULL
1593                OR
1594                l_khrv_rec.currency_conversion_date = OKC_API.G_MISS_DATE) THEN
1595                If nvl(l_rbk_cpy,'N') <> 'Y' Then
1596                    l_khrv_rec.currency_conversion_date := p_chrv_rec.start_date;
1597                End if;
1598            End IF;
1599 
1600            --For Lease contract entry currency conversion date is always equal to
1601            --contract start date - PMs So
1602 
1603            If l_chrv_rec.scs_code = 'LEASE' and nvl(l_rbk_cpy,'N') <> 'Y' then
1604                l_khrv_rec.currency_conversion_date := p_chrv_rec.start_date;
1605            End If;
1606 
1607 
1608            IF (l_khrv_rec.currency_conversion_date IS NULL
1609                OR
1610                l_khrv_rec.currency_conversion_date = OKC_API.G_MISS_DATE) THEN
1611               OKC_API.set_message(
1612                                   p_app_name     => G_APP_NAME,
1613                                   p_msg_name     => G_REQUIRED_VALUE,
1614                                   p_token1       => G_COL_NAME_TOKEN,
1615                                   p_token1_value => 'Currency Conversion Date');
1616               x_return_status := OKC_API.G_RET_STS_ERROR;
1617               RAISE currency_validation_failed;
1618            END IF;
1619 
1620            IF (upper(l_khrv_rec.currency_conversion_type) = 'USER') THEN
1621 
1622                IF (l_khrv_rec.currency_conversion_rate IS NULL
1623                    OR
1624                     l_khrv_rec.currency_conversion_rate = OKC_API.G_MISS_NUM) THEN
1625                   OKC_API.set_message(
1626                                       p_app_name     => G_APP_NAME,
1627                                       p_msg_name     => G_REQUIRED_VALUE,
1628                                       p_token1       => G_COL_NAME_TOKEN,
1629                                       p_token1_value => 'Currency Conversion Rate');
1630                   x_return_status := OKC_API.G_RET_STS_ERROR;
1631                   RAISE currency_validation_failed;
1632                END IF;
1633 
1634 
1635            ELSE -- conversion_type <> 'User'
1636 
1637               l_khrv_rec.currency_conversion_rate := okl_accounting_util.get_curr_con_rate(
1638                                                           p_from_curr_code => l_chrv_rec.currency_code,
1639                                                           p_to_curr_code   => l_func_currency,
1640                                                           p_con_date       => l_khrv_rec.currency_conversion_date,
1641                                                           p_con_type       => l_khrv_rec.currency_conversion_type
1642                                                          );
1643               --since accounting util is returning -1 for all the rates not found
1644               --Bug# 2763523 : if rate not found api returnes -1 or -2 or any other negative value
1645               --If (l_khrv_rec.currency_conversion_rate = 0 ) OR (l_khrv_rec.currency_conversion_rate = -1)Then
1646               If (l_khrv_rec.currency_conversion_rate <= 0 ) Then
1647                   OKC_API.set_message(
1648                                       p_app_name     => G_APP_NAME,
1649                                       p_msg_name     => G_CONV_RATE_NOT_FOUND,
1650                                       p_token1       => G_FROM_CURRENCY_TOKEN,
1651                                       p_token1_value => l_chrv_rec.currency_code,
1652                                       p_token2       => G_TO_CURRENCY_TOKEN,
1653                                       p_token2_value => l_func_currency,
1654                                       p_token3       => G_CONV_TYPE_TOKEN,
1655                                       p_token3_value => l_khrv_rec.currency_conversion_type,
1656                                       p_token4       => G_CONV_DATE_TOKEN,
1657                                       p_token4_value => to_char(l_khrv_rec.currency_conversion_date,'DD-MON-YYYY'));
1658                   x_return_status := OKC_API.G_RET_STS_ERROR;
1659                   RAISE currency_validation_failed;
1660               End If;
1661 
1662 
1663            END IF; -- conversion_type
1664 
1665 /*---Bug# 3124577 : 11.5.10 Rule Migration
1666 ----OKC currency rule will no longer be created.Removed call to create OKC Currency CVN rule---*/
1667 
1668        END IF; -- currency_code check
1669     END IF; -- currency_code NULL
1670 
1671     --Bug# 3124577 :11.5.10 Rule migration : OKC rule will not have to be created
1672     l_chrv_rec.conversion_type      := l_khrv_rec.currency_conversion_type;
1673     l_chrv_rec.conversion_rate      := l_khrv_rec.currency_conversion_rate;
1674     l_chrv_rec.conversion_rate_date := l_khrv_rec.currency_conversion_date;
1675     --Bug# 3124577 :11.5.10 Rule Migration : OKC rule will not have to be created
1676 
1677     x_chrv_rec := l_chrv_rec;
1678     x_khrv_rec := l_khrv_rec;
1679 
1680   EXCEPTION
1681     WHEN currency_validation_failed THEN
1682        RETURN;
1683     WHEN others THEN
1684        x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
1685 END validate_currency;
1686 --Bug# : 11.5.9 Enhancement  Multi-Currency Changes
1687 ---------------------------------------------------------------------------------
1688 -- Start of comments
1689 --  Bug # : 11.5.9  Enhancement Validate product and default Tax Owner
1690 --                  and Book Classification from product
1691 -- Procedure Name  : Validate_Product(Local)
1692 -- Description     : 1. Will validate whether selected product belongs to the
1693 --                      correct subclass
1694 --                   2. Will default tax owner and book class from product
1695 -- Business Rules  :
1696 -- Parameters      :
1697 -- Version         : 1.0
1698 -- End of comments
1699 ---------------------------------------------------------------------------------
1700 Procedure Validate_Product(p_api_version   IN  NUMBER,
1701                            p_init_msg_list IN  VARCHAR2,
1702                            x_return_status OUT NOCOPY VARCHAR2,
1703                            x_msg_count     OUT NOCOPY NUMBER,
1704                            x_msg_data      OUT NOCOPY VARCHAR2,
1705                            p_chrv_rec      IN  okl_okc_migration_pvt.chrv_rec_type,
1706                            p_pdt_id        IN  NUMBER,
1707                            x_deal_type     OUT NOCOPY VARCHAR2,
1708                            x_tax_owner     OUT NOCOPY VARCHAR2,
1709                            --bug# 3180583
1710                            x_multigaap_yn  OUT NOCOPY VARCHAR2) is
1711 
1712     l_pdt_id            Number;
1713     l_pdt_date          date;
1714     l_scs_code          okc_k_headers_b.scs_code%TYPE;
1715     l_pdtv_rec          okl_setupproducts_pub.pdtv_rec_type;
1716     l_pdt_parameter_rec okl_setupproducts_pub.pdt_parameters_rec_type;
1717     l_no_data_found     Boolean;
1718     l_error_condition   exception;
1719 
1720     --cursor to get tax owner rule group
1721     Cursor town_rgp_exists_csr (pchrid Number) is
1722     select id
1723     From   okc_rule_groups_b rgp
1724     Where  rgp.chr_id     = pchrid
1725     and    rgp.dnz_chr_id = pchrid
1726     and    rgp.rgd_code   = 'LATOWN';
1727 
1728     l_town_rgp_id Number  default Null;
1729 
1730     --cursor to get tax owner rule
1731     Cursor town_rul_csr (pchrid number, prgpid number) is
1732     Select rule_information1 tax_owner,
1733            id
1734     From   okc_rules_b rul
1735     where  rul.rgp_id     = prgpid
1736     and    rul.dnz_chr_id = pchrid
1737     and    rul.rule_information_category = 'LATOWN'
1738     and    nvl(rul.STD_TEMPLATE_YN,'N')  = 'N';
1739 
1740     l_town_rul      okc_rules_b.rule_information1%TYPE;
1741     l_town_rul_id   okc_rules_b.id%TYPE;
1742 
1743     l_latown_rgpv_rec   OKL_RULE_PUB.rgpv_rec_type;
1744     lx_latown_rgpv_rec  OKL_RULE_PUB.rgpv_rec_type;
1745 
1746     l_latown_rulv_rec   OKL_RULE_PUB.rulv_rec_type;
1747     lx_latown_rulv_rec  OKL_RULE_PUB.rulv_rec_type;
1748 
1749     --cursor to get product name for exception conditions
1750     Cursor get_pdtname_csr (pdtid in Number) is
1751     Select name
1752     From   OKL_PRODUCTS_V
1753     Where  id = pdtid;
1754 
1755     l_pdt_name OKL_PRODUCTS_V.NAME%TYPE default null;
1756 
1757     --Bug#2727161 : 11.5.9 Rebooks - product can not be modified
1758     -- cursor to get product of the original contract
1759     Cursor ger_orig_pdt_csr(p_rbk_chr_id IN NUMBER) is
1760     Select khr.pdt_id
1761     from   okl_k_headers khr,
1762            okc_k_headers_b rbk_chr
1763     where  khr.id = rbk_chr.orig_system_id1
1764     and    rbk_chr.id = p_rbk_chr_id;
1765 
1766     l_orig_pdt_id  okl_k_headers.pdt_id%TYPE;
1767     --Bug#2727161 : 11.5.9 product - currency can not be modified
1768 
1769     l_rbk_cpy   Varchar2(1) default 'N';
1770 
1771 
1772     --Bug# 3548044 : cursor to fetch the existing  pdt_id for this contract
1773     --Bug# 3631094 :
1774     Cursor l_curr_pdt_csr (p_chr_id in number) is
1775     select khr.pdt_id,
1776            chrb.scs_code,
1777            chrb.orig_system_source_code
1778     from   okl_k_headers      khr,
1779            okc_k_headers_b    chrb
1780     where  khr.id                        =   chrb.id
1781     and    chrb.id                       =   p_chr_id;
1782 
1783     l_curr_pdt_rec    l_curr_pdt_csr%ROWTYPE;
1784 
1785     --Bug# 3631094
1786     Cursor l_release_asset_yn_csr (p_chr_id in number) is
1787     select nvl(rulb.rule_information1,'N') release_Asset_yn
1788     from   okc_rules_b rulb,
1789            okc_rule_groups_b rgpb
1790     where  rulb.rule_information_category   = 'LARLES'
1791     and    rulb.rgp_id                      = rgpb.id
1792     and    rulb.dnz_chr_id                  = rgpb.dnz_chr_id
1793     and    rgpb.rgd_code                    = 'LARLES'
1794     and    rgpb.chr_id                      = p_chr_id
1795     and    rgpb.dnz_chr_id                  = p_chr_id;
1796 
1797     l_release_asset_yn                      okc_rules_b.rule_information1%TYPE;
1798     --Bug# 3631094
1799 
1800     --cursor to get multi-gaap reporting book transaction
1801     cursor l_txd_csr (p_book_type_code in varchar2,
1802                       p_chr_id         in number) is
1803     select txdb.id
1804     from   okl_txd_assets_b txdb,
1805            okl_txl_assets_b txlb,
1806            okc_k_lines_b    cleb,
1807            okc_line_styles_b lseb
1808     where  txdb.tax_book         =  p_book_type_code
1809     and    txdb.tal_id           =  txlb.id
1810     and    txlb.kle_id           =  cleb.id
1811     and    cleb.lse_id           = lseb.id
1812     and    lseb.lty_code         = 'FIXED_ASSET'
1813     and    cleb.dnz_chr_id       = p_chr_id;
1814 
1815     l_txd_rec   l_txd_csr%ROWTYPE;
1816 
1817     l_adpv_tbl  OKL_TXD_ASSETS_PUB.adpv_tbl_type;
1818 
1819     i                        number;
1820     l_curr_pdtv_rec          okl_setupproducts_pub.pdtv_rec_type;
1821     l_curr_pdt_parameter_rec okl_setupproducts_pub.pdt_parameters_rec_type;
1822     l_rep_book_type          okl_txd_assets_b.tax_book%TYPE;
1823     --Bug# 3621663
1824     l_Multi_GAAP_YN          varchar2(1);
1825     l_rep_pdtv_rec           okl_setupproducts_pub.pdtv_rec_type;
1826     l_rep_pdt_parameter_rec  okl_setupproducts_pub.pdt_parameters_rec_type;
1827     --Bug# 3548044
1828 
1829 Begin
1830     x_return_status := OKL_API.G_RET_STS_SUCCESS;
1831     l_pdt_id        := p_pdt_id;
1832     l_pdt_date      := p_chrv_rec.start_date;
1833     l_scs_code      := p_chrv_rec.scs_code;
1834     l_pdtv_rec.id   := l_pdt_id;
1835     l_no_data_found := TRUE;
1836 
1837     --Check if contract is rebook copy
1838     --if it is and product is being modified raise error
1839     l_rbk_cpy := Is_Rebook_Copy(p_chr_id => p_chrv_rec.id);
1840     If l_rbk_cpy = 'Y' Then
1841         Open ger_orig_pdt_csr(p_rbk_chr_id => p_chrv_rec.id);
1842         Fetch ger_orig_pdt_csr into  l_orig_pdt_id;
1843         If ger_orig_pdt_csr%NOTFOUND then
1844             null;
1845         Else
1846             If l_orig_pdt_id <> l_pdt_id Then
1847                 OKL_API.Set_Message(p_app_name  => G_APP_NAME,
1848                                     p_msg_name  => G_REBOOK_PRODUCT_MODFN);
1849                 x_return_status := OKL_API.G_RET_STS_ERROR;
1850                 raise l_error_condition;
1851             End If;
1852         End If;
1853     End If;
1854 
1855     Okl_SetupProducts_Pub.GetPdt_Parameters (p_api_version   => p_api_version,
1856                                              p_init_msg_list => p_init_msg_list,
1857                                              x_return_status => x_return_status,
1858                                              x_msg_count     => x_msg_count,
1859                                              x_msg_data      => x_msg_data,
1860                                              x_no_data_found => l_no_data_found,
1861                                              p_pdtv_rec      => l_pdtv_rec,
1862                                              p_product_date  => l_pdt_date,
1863                                              p_pdt_parameter_rec => l_pdt_parameter_rec);
1864 
1865     --product param fetch returns errors
1866     If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
1867        Open get_pdtname_csr(p_pdt_id);
1868        Fetch get_pdtname_csr into l_pdt_name;
1869        If get_pdtname_csr%notfound then
1870            null;
1871        end if;
1872        close get_pdtname_csr;
1873 
1874        OKC_API.set_message(
1875                            p_app_name     => G_APP_NAME,
1876                            p_msg_name     => G_PROD_PARAMS_NOT_FOUND,
1877                            p_token1       => G_PROD_NAME_TOKEN ,
1878                            p_token1_value => l_pdt_name);
1879        x_return_status := OKL_API.G_RET_STS_ERROR;
1880        raise l_error_condition;
1881     End If;
1882 
1883     --product subcalss is null
1884     If l_pdt_parameter_rec.product_subclass is Null or
1885        l_pdt_parameter_rec.product_subclass = OKL_API.G_MISS_CHAR Then
1886        --message for missing product subclass
1887        Open get_pdtname_csr(p_pdt_id);
1888        Fetch get_pdtname_csr into l_pdt_name;
1889        If get_pdtname_csr%notfound then
1890            null;
1891        end if;
1892 
1893        OKC_API.set_message(
1894                            p_app_name     => G_APP_NAME,
1895                            p_msg_name     => G_PROD_MISSING_PARAM,
1896                            p_token1       => G_PROD_PARAM_TOKEN,
1897                            p_token1_value => 'Product Subclass',
1898                            p_token2       => G_PROD_NAME_TOKEN,
1899                            p_token2_value => l_pdt_name);
1900        x_return_status := OKL_API.G_RET_STS_ERROR;
1901        RAISE l_error_condition;
1902     End If;
1903 
1904     --product tax owner is null
1905     If l_pdt_parameter_rec.tax_owner is Null or
1906        l_pdt_parameter_rec.tax_owner = OKL_API.G_MISS_CHAR Then
1907        If l_scs_code in ('LEASE','QUOTE') then
1908            --message for missing product tax owner
1909            Open get_pdtname_csr(p_pdt_id);
1910            Fetch get_pdtname_csr into l_pdt_name;
1911            If get_pdtname_csr%notfound then
1912                null;
1913            end if;
1914            OKC_API.set_message(
1915                            p_app_name     => G_APP_NAME,
1916                            p_msg_name     => G_PROD_MISSING_PARAM,
1917                            p_token1       => G_PROD_PARAM_TOKEN,
1918                            p_token1_value => 'Tax Owner',
1919                            p_token2       => G_PROD_NAME_TOKEN,
1920                            p_token2_value => l_pdt_name);
1921            x_return_status := OKL_API.G_RET_STS_ERROR;
1922            RAISE l_error_condition;
1923            -- tax owner may not be a mandatory quality
1924        End If;
1925     End If;
1926 
1927     --product deal type is null
1928     If l_pdt_parameter_rec.deal_type is Null or
1929        l_pdt_parameter_rec.deal_type = OKL_API.G_MISS_CHAR Then
1930        If l_scs_code in ('LEASE','QUOTE') then
1931            --message for missing product tax owner
1932            Open get_pdtname_csr(p_pdt_id);
1933            Fetch get_pdtname_csr into l_pdt_name;
1934            If get_pdtname_csr%notfound then
1935                null;
1936            end if;
1937            OKC_API.set_message(
1938                            p_app_name     => G_APP_NAME,
1939                            p_msg_name     => G_PROD_MISSING_PARAM,
1940                            p_token1       => G_PROD_PARAM_TOKEN,
1941                            p_token1_value => 'Book Classification',
1942                            p_token2       => G_PROD_NAME_TOKEN,
1943                            p_token2_value => l_pdt_name);
1944            x_return_status := OKL_API.G_RET_STS_ERROR;
1945            RAISE l_error_condition;
1946            -- tax owner may not be a mandatory quality
1947        End If;
1948        null; -- deal type may not be a mandatory pdt quality
1949     End If;
1950 
1951     --check if product subclass matches contract subclass
1952     If l_scs_code in ('LEASE', 'PROGRAM', 'MASTER_LEASE','QUOTE','LOAN') and
1953        l_pdt_parameter_rec.product_subclass <> 'LEASE' then
1954        --Product and contract subclassess do not match
1955        Open get_pdtname_csr(p_pdt_id);
1956        Fetch get_pdtname_csr into l_pdt_name;
1957        If get_pdtname_csr%notfound then
1958            null;
1959        end if;
1960        OKC_API.set_message(p_app_name     => G_APP_NAME,
1961                            p_msg_name     => G_PROD_SUBCALSS_MISMATCH,
1962                            p_token1       => G_CONTRACT_SUBCLASS_TOKEN,
1963                            p_token1_value => l_scs_code,
1964                            p_token2       => G_PROD_SUBCALSS_TOKEN,
1965                            p_token2_value => l_pdt_parameter_rec.product_subclass);
1966        x_return_status := OKL_API.G_RET_STS_ERROR;
1967        RAISE l_error_condition;
1968     ElsIf l_scs_code in ('INVESTOR') and
1969        l_pdt_parameter_rec.product_subclass <> 'INVESTOR' then
1970        --Product and contract subclassess do not match
1971        Open get_pdtname_csr(p_pdt_id);
1972        Fetch get_pdtname_csr into l_pdt_name;
1973        If get_pdtname_csr%notfound then
1974            null;
1975        end if;
1976        OKC_API.set_message(p_app_name     => G_APP_NAME,
1977                            p_msg_name     => G_PROD_SUBCALSS_MISMATCH,
1978                            p_token1       => G_CONTRACT_SUBCLASS_TOKEN,
1979                            p_token1_value => l_scs_code,
1980                            p_token2       => G_PROD_SUBCALSS_TOKEN,
1981                            p_token2_value => l_pdt_parameter_rec.product_subclass);
1982        x_return_status := OKL_API.G_RET_STS_ERROR;
1983        RAISE l_error_condition;
1984     End If;
1985 
1986     If l_scs_code in ('LEASE','QUOTE') Then
1987 
1988         l_town_rgp_id := Null;
1989 
1990         Open town_rgp_exists_csr(pchrid => p_chrv_rec.id);
1991         Fetch town_rgp_exists_csr into l_town_rgp_id;
1992         If town_rgp_exists_csr%NOTFOUND Then
1993             null;
1994         end if;
1995         Close town_rgp_exists_csr;
1996 
1997         If l_town_rgp_id is null Then
1998             --tax owner record does not exist
1999             --create tax owner
2000             l_latown_rgpv_rec.rgd_code   := 'LATOWN';
2001             l_latown_rgpv_rec.dnz_chr_id := p_chrv_rec.id;
2002             l_latown_rgpv_rec.chr_id     := p_chrv_rec.id;
2003             l_latown_rgpv_rec.rgp_type   := 'KRG';
2004 
2005             OKL_RULE_PUB.create_rule_group(
2006                p_api_version    => p_api_version,
2007                p_init_msg_list  => p_init_msg_list,
2008                x_return_status  => x_return_status,
2009                x_msg_count      => x_msg_count,
2010                x_msg_data       => x_msg_data,
2011                p_rgpv_rec       => l_latown_rgpv_rec,
2012                x_rgpv_rec       => lx_latown_rgpv_rec);
2013 
2014            If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) Then
2015                   raise l_error_condition;
2016            End If;
2017 
2018             l_town_rgp_id := lx_latown_rgpv_rec.id;
2019         End if;
2020 
2021         l_town_rul := null;
2022         l_town_rul_id := null;
2023         Open town_rul_csr (pchrid => p_chrv_rec.id, prgpid => l_town_rgp_id );
2024         Fetch town_rul_csr into l_town_rul,l_town_rul_id;
2025         If town_rul_csr%NOTFOUND Then
2026             Null;
2027         End If;
2028         Close town_rul_csr;
2029 
2030         If l_town_rul_id is null then
2031             -- create rule
2032             l_latown_rulv_rec.rgp_id                    := l_town_rgp_id;
2033             l_latown_rulv_rec.rule_information_category := 'LATOWN';
2034             l_latown_rulv_rec.dnz_chr_id                := p_chrv_rec.id;
2035             l_latown_rulv_rec.rule_information1         := l_pdt_parameter_rec.tax_owner;
2036             l_latown_rulv_rec.WARN_YN                   := 'N';
2037             l_latown_rulv_rec.STD_TEMPLATE_YN           := 'N';
2038 
2039             OKL_RULE_PUB.create_rule(
2040                 p_api_version    => p_api_version,
2041                 p_init_msg_list  => p_init_msg_list,
2042                 x_return_status  => x_return_status,
2043                 x_msg_count      => x_msg_count,
2044                 x_msg_data       => x_msg_data,
2045                 p_rulv_rec       => l_latown_rulv_rec,
2046                 x_rulv_rec       => lx_latown_rulv_rec);
2047 
2048            If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) Then
2049                   raise l_error_condition;
2050            End If;
2051 
2052 
2053        Elsif l_town_rul_id is not null then
2054 
2055            --update existing rule if values are different
2056            If l_town_rul <> l_pdt_parameter_rec.tax_owner Then
2057                l_latown_rulv_rec.id := l_town_rul_id;
2058                l_latown_rulv_rec.rule_information1 := l_pdt_parameter_rec.tax_owner;
2059 
2060                OKL_RULE_PUB.update_rule(
2061                    p_api_version    => p_api_version,
2062                    p_init_msg_list  => p_init_msg_list,
2063                    x_return_status  => x_return_status,
2064                    x_msg_count      => x_msg_count,
2065                    x_msg_data       => x_msg_data,
2066                    p_rulv_rec       => l_latown_rulv_rec,
2067                    x_rulv_rec       => lx_latown_rulv_rec);
2068 
2069               If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) Then
2070                   raise l_error_condition;
2071               End If;
2072            End If;
2073 
2074        End If;
2075 
2076     End If;
2077 
2078     ---------------------------------------------------------------------
2079     --Bug# 3631094 : Do not prompt for deletion of rporting asset books
2080     --               if rebook, release contract or release asset
2081     ---------------------------------------------------------------------
2082     --fetch currenct pdt_id
2083     open l_curr_pdt_csr (p_chr_id => p_chrv_rec.id);
2084     fetch l_curr_pdt_csr into l_curr_pdt_rec;
2085     If l_curr_pdt_csr%NOTFOUND then
2086          null;
2087     End If;
2088     close l_curr_pdt_csr;
2089 
2090     If nvl(l_curr_pdt_rec.pdt_id, okl_api.g_miss_num) <> okl_api.g_miss_num AND
2091     l_curr_pdt_rec.pdt_id <> l_pdt_id  AND
2092     l_curr_pdt_rec.scs_code = 'LEASE'  AND
2093     nvl(l_curr_pdt_rec.orig_system_source_code,okl_api.g_miss_char) not in ('OKL_REBOOK','OKL_RELEASE') then
2094         l_release_asset_yn := 'N';
2095         Open l_release_asset_yn_csr(p_chr_id  => p_chrv_rec.id);
2096         Fetch l_release_asset_yn_csr into l_release_Asset_yn;
2097         If l_release_asset_yn_csr%NOTFOUND then
2098             null;
2099         End If;
2100         Close l_release_asset_yn_csr;
2101         If l_release_asset_yn =  'N' then
2102             -----------------
2103             --Bug# 3548044 : If multi-gaap prod changed to no multi-gaap
2104                             --multi gaap reporting book trx needs to be deleted
2105             ----------------
2106             --Bug# 3621663 :
2107             l_Multi_GAAP_YN := 'N';
2108             If l_rbk_cpy = 'N' then
2109             --decide whether the reporting product needs multigaap asset book
2110                 If nvl(l_pdt_parameter_rec.reporting_pdt_id,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM then
2111                     l_rep_pdtv_rec.id      := l_pdt_parameter_rec.reporting_pdt_id;
2112                  --okl_debug_pub.logmessage('AKP:0.l_rep_pdtv_rec.id = ' || l_rep_pdtv_rec.id);
2113                     l_pdt_date             := p_chrv_rec.start_date;
2114                  --okl_debug_pub.logmessage('AKP:0.l_pdt_date = ' || l_pdt_date);
2115 
2116                     Okl_SetupProducts_Pub.GetPdt_Parameters (p_api_version       => p_api_version,
2117                                                  p_init_msg_list     => p_init_msg_list,
2118                                                  x_return_status     => x_return_status,
2119                                                  x_msg_count         => x_msg_count,
2120                                                  x_msg_data          => x_msg_data,
2121                                                  x_no_data_found     => l_no_data_found,
2122                                                  p_pdtv_rec          => l_rep_pdtv_rec,
2123                                                  p_product_date      => l_pdt_date,
2124                                                  p_pdt_parameter_rec => l_rep_pdt_parameter_rec);
2125 
2126                      If x_return_status = OKL_API.G_RET_STS_SUCCESS then
2127 
2128                          -- 7610725
2129                          /*If nvl(l_pdt_parameter_rec.deal_type,OKL_API.G_MISS_CHAR) = 'LEASEOP' and
2130                          nvl(l_rep_pdt_parameter_rec.deal_type,OKL_API.G_MISS_CHAR) = 'LEASEOP' and
2131                          nvl(l_pdt_parameter_rec.tax_owner,OKL_API.G_MISS_CHAR) = 'LESSOR' Then
2132                              l_Multi_GAAP_YN := 'Y';
2133                          End If;
2134 
2135                          If nvl(l_pdt_parameter_rec.deal_type,OKL_API.G_MISS_CHAR) in ('LEASEDF','LEASEST') and
2136                          nvl(l_rep_pdt_parameter_rec.deal_type,OKL_API.G_MISS_CHAR) = 'LEASEOP' and
2137                          nvl(l_pdt_parameter_rec.tax_owner,OKL_API.G_MISS_CHAR) = 'LESSOR' Then
2138                              l_Multi_GAAP_YN := 'Y';
2139                          End If;
2140 
2141                          If nvl(l_pdt_parameter_rec.deal_type,OKL_API.G_MISS_CHAR) in ('LEASEDF','LEASEST') and
2142                          nvl(l_rep_pdt_parameter_rec.deal_type,OKL_API.G_MISS_CHAR) = 'LEASEOP' and
2143                          nvl(l_pdt_parameter_rec.tax_owner,OKL_API.G_MISS_CHAR) = 'LESSEE' Then
2144                             l_Multi_GAAP_YN := 'Y';
2145                          End If;
2146 
2147                          If nvl(l_pdt_parameter_rec.deal_type,OKL_API.G_MISS_CHAR) = 'LOAN' and
2148                          nvl(l_rep_pdt_parameter_rec.deal_type,OKL_API.G_MISS_CHAR) = 'LEASEOP' and
2149                          nvl(l_pdt_parameter_rec.tax_owner,OKL_API.G_MISS_CHAR) = 'LESSEE' Then
2150                              l_Multi_GAAP_YN := 'Y';
2151                          End If; */
2152 
2153                          -- 7610725
2154          --okl_debug_pub.logmessage('AKP:1.l_rep_pdt_parameter_rec.id = ' || l_rep_pdt_parameter_rec.id);
2155          --okl_debug_pub.logmessage('AKP:2.l_rep_pdt_parameter_rec.deal_type = ' || l_rep_pdt_parameter_rec.deal_type);
2156                          If (nvl(l_rep_pdt_parameter_rec.deal_type,OKL_API.G_MISS_CHAR)
2157                                  <> OKL_API.G_MISS_CHAR )
2158                          Then
2159                              l_Multi_GAAP_YN := 'Y';
2160                          End If;
2161 
2162 
2163                      End If;
2164                 End If;
2165             End If;
2166             --Bug# 3621663
2167 
2168          --okl_debug_pub.logmessage('AKP:3.l_pdt_parameter_rec.reporting_pdt_id =' || l_pdt_parameter_rec.reporting_pdt_id);
2169          --okl_debug_pub.logmessage('AKP:4.l_Multi_GAAP_YN= ' || l_Multi_GAAP_YN);
2170             If  (nvl(l_pdt_parameter_rec.reporting_pdt_id,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM)
2171               OR
2172                  (nvl(l_pdt_parameter_rec.reporting_pdt_id,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM
2173              and l_Multi_GAAP_YN = 'N') Then
2174                  If l_rbk_cpy = 'N' then
2175                      l_curr_pdtv_rec.id      := l_curr_pdt_rec.pdt_id;
2176                      l_pdt_date              := p_chrv_rec.start_date;
2177                      Okl_SetupProducts_Pub.GetPdt_Parameters (p_api_version       => p_api_version,
2178                                                       p_init_msg_list     => p_init_msg_list,
2179                                                       x_return_status     => x_return_status,
2180                                                       x_msg_count         => x_msg_count,
2181                                                       x_msg_data          => x_msg_data,
2182                                                       x_no_data_found     => l_no_data_found,
2183                                                       p_pdtv_rec          => l_curr_pdtv_rec,
2184                                                       p_product_date      => l_pdt_date,
2185                                                       p_pdt_parameter_rec => l_curr_pdt_parameter_rec);
2186 
2187                      If x_return_status = OKL_API.G_RET_STS_SUCCESS then
2188          --okl_debug_pub.logmessage('AKP:5.l_curr_pdt_parameter_rec.id = ' || l_curr_pdt_parameter_rec.id);
2189                          If nvl(l_curr_pdt_parameter_rec.reporting_pdt_id,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM then
2190                              l_rep_book_type := OKL_SYSTEM_PARAMS_ALL_PUB.get_system_param_value(OKL_SYSTEM_PARAMS_ALL_PUB.G_RPT_PROD_BOOK_TYPE_CODE);
2191                              i := 0;
2192                              open l_txd_csr (p_book_type_code  => l_rep_book_type,
2193                                              p_chr_id          => p_chrv_rec.id);
2194                              Loop
2195                                  fetch l_txd_csr into l_txd_rec;
2196                                  exit when l_txd_csr%NOTFOUND;
2197                                  i := i+1;
2198                                  l_adpv_tbl(i).id := l_txd_rec.id;
2199                              end Loop;
2200                              close l_txd_csr;
2201 
2202                              If l_adpv_tbl.COUNT <> 0 then
2203                                  --Bug# 3631094
2204                                  OKL_API.set_message(p_app_name     => G_APP_NAME,
2205                                                        p_msg_name     => 'OKL_LA_MULTIGAAP_ASSET_BOOK');
2206                                  x_return_status :=  OKL_API.G_RET_STS_ERROR;
2207                                  raise l_error_condition;
2208                              End If;
2209 
2210                          End If; -- current reporting product is not null
2211                      End If; --product parameters fetch api returns success
2212                  End If; -- is not a rebook copy
2213             End If; -- new multi gaap product is null
2214         End If; -- not a contract with release assets
2215     End If; -- is 'LEASE', change in product is there, not rbook or contract release copy, current pdt not null
2216     ------------------
2217     --Bug# 3548044 : End
2218     ------------------
2219 
2220 
2221     x_deal_type  := l_pdt_parameter_rec.deal_type;
2222     x_tax_owner  := l_pdt_parameter_rec.tax_owner;
2223 
2224     -----------------
2225     --Bug# 3180583
2226     -----------------
2227     If nvl(l_pdt_parameter_rec.reporting_pdt_id,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM then
2228         x_multigaap_yn := 'N';
2229     Elsif nvl(l_pdt_parameter_rec.reporting_pdt_id,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM then
2230         x_multigaap_yn := 'Y';
2231     End If;
2232     -----------------
2233     --Bug# 3180583
2234     -----------------
2235 
2236 
2237     EXCEPTION
2238     When l_error_condition Then
2239         Return;
2240 
2241     When Others Then
2242         x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
2243 End validate_product;
2244 --------------------------------------------------------------------------------
2245 -- Start of comments
2246 --
2247 -- Bug# : 11.5.9 Enhancement  Product change (Bug# 2730633)
2248 -- Function Name   : Is_Orig_Pdt_Old
2249 -- Scope           : Local
2250 -- Description     : For Copied contracts if the original contract has old (11.5.8)
2251 --                   product, product validations should not be done. If they are
2252 --                   done copy from old contracts will not be possible.
2253 --                   This function verifies if product against original contract
2254 --                   is old(11.5.8) or not.
2255 --                   This will be called at the time of insert(create_contract_header)
2256 --                   If original/old contract product is old then 11.5.9 product validations
2257 --                   will not be done.
2258 -- Business Rules  :
2259 -- Parameters      : IN - p_orig_chr_id - original contract id
2260 --                      - p_pdt_id      - pdt_id on new contract being created
2261 --                   Returns Varchar2 = 'Y' or 'N'
2262 -- Version         : 1.0
2263 -- End of comments
2264 --------------------------------------------------------------------------------
2265 Function Is_Orig_Pdt_Old(p_orig_chr_id IN NUMBER,
2266                          p_pdt_id      IN NUMBER
2267                          ) return Varchar2 is
2268 --cursor to get pdt of original contract
2269 Cursor get_pdt_csr(orig_chr_id in number) is
2270 Select khr.pdt_id,
2271        khr.start_date
2272 from   okl_k_headers_full_v khr
2273 where  id = orig_chr_id;
2274 
2275 l_pdt_id                 okl_k_headers_full_v.pdt_id%TYPE;
2276 l_Start_date             date;
2277 l_is_orig_pdt_old        Varchar2(1) default 'N';
2278 l_no_data_found          Boolean;
2279 l_pdtv_rec               Okl_SetupProducts_Pub.pdtv_rec_type;
2280 l_pdt_parameter_rec      Okl_setupproducts_pub.pdt_parameters_rec_type;
2281 l_exception_halt_process Exception;
2282 
2283 l_return_status          Varchar2(1) default OKL_API.G_RET_STS_SUCCESS;
2284 l_msg_count              Number;
2285 l_msg_data               Varchar2(3000);
2286 
2287 begin
2288     l_return_status    := OKL_API.G_RET_STS_SUCCESS;
2289     l_is_orig_pdt_old  := 'N';
2290 
2291     Open get_pdt_csr (orig_chr_id => p_orig_chr_id);
2292     Fetch get_pdt_csr into l_pdt_id, l_start_date;
2293     If get_pdt_csr%NOTFOUND Then
2294         Null;
2295     End If;
2296     Close get_pdt_csr;
2297 
2298     If (l_pdt_id = p_pdt_id) Then
2299         l_pdtv_rec.id   := l_pdt_id;
2300         l_no_data_found := TRUE;
2301         Okl_SetupProducts_Pub.GetPdt_Parameters (p_api_version       => 1.0,
2302                                                  p_init_msg_list     => OKL_API.G_FALSE,
2303                                                  x_return_status     => l_return_status,
2304                                                  x_msg_count         => l_msg_count,
2305                                                  x_msg_data          => l_msg_data,
2306                                                  x_no_data_found     => l_no_data_found,
2307                                                  p_pdtv_rec          => l_pdtv_rec,
2308                                                  p_product_date      => l_start_date,
2309                                                  p_pdt_parameter_rec => l_pdt_parameter_rec);
2310 
2311         --product param do not exist
2312         If l_return_status <> OKL_API.G_RET_STS_SUCCESS Then
2313             l_is_orig_pdt_old := 'Y';
2314             Raise l_exception_halt_process;
2315         End If;
2316 
2317         --product subcalss is null
2318         If l_pdt_parameter_rec.product_subclass is Null or
2319            l_pdt_parameter_rec.product_subclass = OKL_API.G_MISS_CHAR Then
2320             l_is_orig_pdt_old := 'Y';
2321             Raise l_exception_halt_process;
2322         End If;
2323 
2324         --product tax owner is null
2325         If l_pdt_parameter_rec.tax_owner is Null or
2326            l_pdt_parameter_rec.tax_owner = OKL_API.G_MISS_CHAR Then
2327            l_is_orig_pdt_old := 'Y';
2328            Raise l_exception_halt_process;
2329         End If;
2330 
2331         --product deal type is null
2332         If l_pdt_parameter_rec.deal_type is Null or
2333            l_pdt_parameter_rec.deal_type = OKL_API.G_MISS_CHAR Then
2334            l_is_orig_pdt_old := 'Y';
2335            Raise l_exception_halt_process;
2336         End If;
2337     End If;
2338     Return(l_is_orig_pdt_old);
2339     Exception
2340     When l_exception_halt_process Then
2341         return (l_is_orig_pdt_old);
2342     When others then
2343         return (l_is_orig_pdt_old);
2344 
2345 End Is_Orig_Pdt_Old;
2346 --------------------------------------------------------------------------------
2347 -- Start of comments
2348 --
2349 -- Procedure Name  : create_contract_header
2350 -- Description     : creates contract header for shadowed contract
2351 -- Bug# : 11.5.9 Enhancement  Multi-Currency Changes
2352 --                           Product Vaqlidations
2353 --                           Rebook contract can not change currency code
2354 -- Business Rules  :
2355 -- Parameters      :
2356 -- Version         : 1.0
2357 -- End of comments
2358 --------------------------------------------------------------------------------
2359   PROCEDURE create_contract_header(
2360     p_api_version                  IN NUMBER,
2361     p_init_msg_list                IN VARCHAR2,
2362     x_return_status                OUT NOCOPY VARCHAR2,
2363     x_msg_count                    OUT NOCOPY NUMBER,
2364     x_msg_data                     OUT NOCOPY VARCHAR2,
2365     p_chrv_rec                     IN  okl_okc_migration_pvt.chrv_rec_type,
2366     p_khrv_rec                     IN  khrv_rec_type,
2367     x_chrv_rec                     OUT NOCOPY okl_okc_migration_pvt.chrv_rec_type,
2368     x_khrv_rec                     OUT NOCOPY khrv_rec_type) IS
2369 
2370     subtype rulv_tbl_type is OKL_RULE_PUB.rulv_tbl_type;
2371 
2372     l_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
2373     l_khrv_rec khrv_rec_type;
2374 
2375     l_api_name              CONSTANT VARCHAR2(30) := 'CREATE_CONTRACT_HEADER';
2376     l_api_version               CONSTANT NUMBER          := 1.0;
2377     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
2378     --Bug # : 11.5.9 Enhancement - Multi Currency changes
2379 
2380     l_curr_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
2381     l_curr_khrv_rec khrv_rec_type;
2382 
2383     --Bug # : 11.5.9 Enhancement - Defaulting from product definition
2384     l_pdt_deal_type  varchar2(150);
2385     l_pdt_tax_owner  varchar2(150);
2386 
2387     l_bypass_pdt_validation varchar2(1) default 'N';
2388     --Bug# 3180583
2389     l_multigaap_yn varchar2(1) default NULL;
2390 
2391     --Bug# 3486065
2392     cursor profile_option_csr(p_profile_option_name in varchar2) is
2393     select user_profile_option_name
2394     from   fnd_profile_options_vl
2395     where  profile_option_name = p_profile_option_name;
2396 
2397     l_authoring_org_profile_name  fnd_profile_options_vl.user_profile_option_name%type;
2398     l_inventory_org_profile_name  fnd_profile_options_vl.user_profile_option_name%type;
2399     l_authoring_org_profile_value fnd_profile_option_values.profile_option_value%type;
2400     l_inventory_org_profile_value fnd_profile_option_values.profile_option_value%type;
2401 
2402   l_deal_type OKL_K_HEADERS.deal_type%TYPE;
2403   l_interest_calculation_basis VARCHAR2(30);
2404   l_revenue_recognition_method VARCHAR2(30);
2405   l_pdt_parameter_rec OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
2406   x_rulv_tbl rulv_tbl_type;
2407 
2408   BEGIN
2409 
2410     -- call START_ACTIVITY to create savepoint, check compatibility
2411     -- and initialize message list
2412 
2413 
2414     l_return_status := OKL_API.START_ACTIVITY(
2415                         p_api_name      => l_api_name,
2416                         p_pkg_name      => g_pkg_name,
2417                         p_init_msg_list => p_init_msg_list,
2418                         l_api_version   => l_api_version,
2419                         p_api_version   => p_api_version,
2420                         p_api_type      => g_api_type,
2421                         x_return_status => x_return_status);
2422 
2423     -- check if activity started successfully
2424     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
2425        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2426     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
2427        raise OKL_API.G_EXCEPTION_ERROR;
2428     End If;
2429 
2430     l_khrv_rec := p_khrv_rec;
2431     l_chrv_rec := p_chrv_rec;
2432 
2433     --Bug# 3783278
2434     --Remove leading and trailing spaces in contract number
2435     If l_chrv_rec.contract_number is not null Then
2436       l_chrv_rec.contract_number := LTRIM(RTRIM(l_chrv_rec.contract_number));
2437     End If;
2438 
2439     --
2440     -- set okc context before API call
2441     -- msamoyle: check whether we need to call this method here or in PUB or in processing
2442         --dbms_output.put_line('Set org context');
2443 
2444     --Bug# 3486065
2445     l_authoring_org_profile_value := mo_global.get_current_org_id();
2446     If NVL(l_authoring_org_profile_value,OKL_API.G_MISS_CHAR) = OKL_API.G_MISS_CHAR Then
2447       open profile_option_csr(p_profile_option_name => 'ORG_ID');
2448       fetch profile_option_csr into l_authoring_org_profile_name;
2449       close profile_option_csr;
2450 
2451       OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
2452                           p_msg_name     => 'OKL_NO_SYSTEM_PROFILE',
2453                           p_token1       => 'OKL_SYS_PROFILE_NAME',
2454                           p_token1_value => l_authoring_org_profile_name);
2455       raise OKL_API.G_EXCEPTION_ERROR;
2456     End If;
2457 
2458     l_inventory_org_profile_value := OKL_SYSTEM_PARAMS_ALL_PUB.get_system_param_value(OKL_SYSTEM_PARAMS_ALL_PUB.G_ITEM_INV_ORG_ID);
2459 
2460     -- removed by dcshanmu to fix bug 5378114
2461 
2462     If NVL(l_inventory_org_profile_value,OKL_API.G_MISS_CHAR) = OKL_API.G_MISS_CHAR Then
2463          /*open profile_option_csr(p_profile_option_name => 'OKL_K_ITEMS_INVENTORY_ORG');
2464          fetch profile_option_csr into l_inventory_org_profile_name;
2465          close profile_option_csr;*/
2466 
2467       OKL_API.SET_MESSAGE(p_app_name     => g_app_name,
2468                           p_msg_name     => 'OKL_NO_INVENTORY_ORG');
2469       raise OKL_API.G_EXCEPTION_ERROR;
2470     End If;
2471 
2472     OKL_CONTEXT.SET_OKC_ORG_CONTEXT(l_chrv_rec.authoring_org_id,l_chrv_rec.inv_organization_id);
2473 
2474         ----------------------------------------------------------------------------
2475     --call to check if template modification is allowed
2476     ----------------------------------------------------------------------------
2477     template_create_allowed(p_chr_id        => null,
2478                             p_template_yn   => l_chrv_rec.template_yn,
2479                             x_return_status => x_return_status);
2480 
2481     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
2482        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2483     Elsif (x_return_status = OKL_API.G_RET_STS_ERROR) then
2484        OKL_API.SET_MESSAGE(p_app_name => g_app_name,
2485                                            p_msg_name => G_TEMPLATE_CREATE_NOT_ALLOWED);
2486        raise OKL_API.G_EXCEPTION_ERROR;
2487     End If;
2488 
2489     ----------------------------------------------------------------------------
2490     --Bug# : 11.5.9 Enhancement Multi Currency
2491     ----------------------------------------------------------------------------
2492     validate_currency(p_api_version   => p_api_version,
2493                       p_init_msg_list => p_init_msg_list,
2494                       x_msg_count     => x_msg_count,
2495                       x_msg_data      => x_msg_data,
2496                       x_return_status => x_return_status,
2497                       p_chrv_rec      => l_chrv_rec,
2498                       p_khrv_rec      => l_khrv_rec,
2499                       x_chrv_rec      => l_curr_chrv_rec,
2500                       x_khrv_rec      => l_curr_khrv_rec);
2501 
2502     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
2503        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2504     Elsif (x_return_status = OKL_API.G_RET_STS_ERROR) then
2505        raise OKL_API.G_EXCEPTION_ERROR;
2506     End If;
2507     l_chrv_rec := l_curr_chrv_rec;
2508     l_khrv_rec := l_curr_khrv_rec;
2509     ----------------------------------------------------------------------------
2510     --Bug# : 11.5.9 Enhancement Multi Currency
2511     ----------------------------------------------------------------------------
2512       --Added by dpsingh
2513       IF (l_khrv_rec.legal_entity_id IS NOT NULL AND l_khrv_rec.legal_entity_id <> Okl_Api.G_MISS_NUM) THEN
2514           OKL_LA_VALIDATION_UTIL_PVT.VALIDATE_LEGAL_ENTITY(x_return_status => x_return_status,
2515                                                                                                        p_chrv_rec      => l_chrv_rec,
2516 												       p_mode => 'CR');
2517        ELSE
2518            IF l_chrv_rec.scs_code IN ('LEASE','LOAN','INVESTOR', 'MASTER_LEASE','PROGRAM') THEN
2519 	      OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'legal_entity_id');
2520 	      RAISE OKL_API.G_EXCEPTION_ERROR;
2521 	   END IF;
2522        END IF;
2523 
2524      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2525        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2526     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2527        RAISE OKL_API.G_EXCEPTION_ERROR;
2528     END IF;
2529     --Added by dpsingh end
2530 
2531     --dbms_output.put_line('Create contract header');
2532     --
2533     -- call procedure in complex API
2534     --
2535     --OKC_CONTRACT_PUB.create_contract_header(
2536 
2537     okl_okc_migration_pvt.create_contract_header(
2538          p_api_version            => p_api_version,
2539          p_init_msg_list        => p_init_msg_list,
2540          x_return_status         => x_return_status,
2541          x_msg_count             => x_msg_count,
2542          x_msg_data              => x_msg_data,
2543          p_chrv_rec                    => l_chrv_rec,
2544          x_chrv_rec                    => x_chrv_rec);
2545 
2546 
2547     -- check return status
2548     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
2549           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2550     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
2551           raise OKL_API.G_EXCEPTION_ERROR;
2552     End If;
2553 
2554 
2555     /*Bug# 3124577 : Commented for 11.5.10 Rule Migration-------------------------------------------
2556     --Removed call to creation of OKC CVN Rule
2557     ----------------------------------------------------------------------------
2558     --Bug# : 11.5.9 Enhancement Multi Currency, Create CURRENCY Rule
2559     ----------------------------------------------------------------------------
2560     -----------------------------------------------------------Bug# 3124577 11.5.10: Rule Migration*/
2561     ----------------------------------------------------------------------------
2562     --Bug# : 11.5.9 Product validations
2563     ----------------------------------------------------------------------------
2564     If p_khrv_rec.pdt_id is null OR p_khrv_rec.pdt_id = OKL_API.G_MISS_NUM Then
2565         Null;
2566     Else
2567 
2568         --Begin (Bug# 2730633)
2569         --Fix for not to validate for copied contracts being copied from contracts
2570         --which have 11.5.8 products against them
2571         l_bypass_pdt_validation := 'N';
2572         If nvl(x_chrv_rec.orig_system_source_code,OKL_API.G_MISS_CHAR) <> OKL_API.G_MISS_CHAR AND
2573            nvl(x_chrv_rec.orig_system_id1,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM Then
2574            l_bypass_pdt_validation := Is_Orig_Pdt_old(p_orig_chr_id => x_chrv_rec.orig_system_id1,
2575                                                       p_pdt_id      => p_khrv_rec.pdt_id);
2576         End If;
2577         --Fix for not to validate for copied contracts being copied from contracts
2578         --which have 11.5.8 products against them
2579         --End (Bug# 2730633)
2580 
2581         If  l_bypass_pdt_validation = 'N' Then
2582             Validate_Product(p_api_version   => p_api_version,
2583                              p_init_msg_list => p_init_msg_list,
2584                              x_return_status => x_return_status,
2585                              x_msg_count     => x_msg_count,
2586                              x_msg_data      => x_msg_data,
2587                              p_chrv_rec      => x_chrv_rec,
2588                              p_pdt_id        => p_khrv_rec.pdt_id,
2589                              x_deal_type     => l_pdt_deal_type,
2590                              x_tax_owner     => l_pdt_tax_owner,
2591                              --Bug# 3180583
2592                              x_multigaap_yn  => l_multigaap_yn);
2593 
2594             -- check return status
2595             If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
2596                     raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2597             Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
2598                     raise OKL_API.G_EXCEPTION_ERROR;
2599             End If;
2600 
2601             If l_chrv_rec.scs_code in ('LEASE','QUOTE') Then
2602                 --Bug#2809358
2603                 --If l_khrv_rec.deal_type <> l_pdt_deal_type Then
2604                 If nvl(l_khrv_rec.deal_type,'DEALTYPE') <> l_pdt_deal_type Then
2605                     --If l_pdt_deal_type is not null OR
2606                     If l_pdt_deal_type is not null AND
2607                        l_pdt_deal_type <> OKL_API.G_MISS_CHAR Then
2608                        l_khrv_rec.deal_type := l_pdt_deal_type;
2609                     End If;
2610                  End If;
2611 
2612                  --Bug# 3379294 : check if deal type is still Null then raise error for lease and quote
2613                  If nvl(l_khrv_rec.deal_type,OKL_API.G_MISS_CHAR) = OKL_API.G_MISS_CHAR then
2614                      OKL_API.Set_Message(p_app_name => G_APP_NAME,
2615                                          p_msg_name => 'OKL_NULL_DEAL_TYPE');
2616                      x_return_status := OKL_API.G_RET_STS_ERROR;
2617                      raise OKL_API.G_EXCEPTION_ERROR;
2618                  End If;
2619                  --Bug# 3379294: End
2620 
2621             End If;
2622         End If;
2623     End If;
2624     ----------------------------------------------------------------------------
2625     --Bug# : 11.5.9 Product validations
2626     ----------------------------------------------------------------------------
2627 
2628     --Bug# 2819869: Generate accrual and assignable hould be 'Y' by default
2629     If x_chrv_rec.scs_code = 'LEASE' Then
2630         If l_khrv_rec.generate_accrual_yn is NULL OR
2631            l_khrv_rec.generate_accrual_yn = OKL_API.G_MISS_CHAR then
2632             l_khrv_rec.generate_accrual_yn := 'Y';
2633         End IF;
2634         If l_khrv_rec.GENERATE_ACCRUAL_OVERRIDE_YN is NULL OR
2635            l_khrv_rec.GENERATE_ACCRUAL_OVERRIDE_YN = OKL_API.G_MISS_CHAR then
2636             l_khrv_rec.GENERATE_ACCRUAL_OVERRIDE_YN := 'N';
2637         End IF;
2638         If l_khrv_rec.assignable_yn is NULL OR
2639            l_khrv_rec.assignable_yn = OKL_API.G_MISS_CHAR then
2640             l_khrv_rec.assignable_yn := 'Y';
2641         End IF;
2642     End If;
2643     --End Bug# 2819869 : Generate accrual and assignable should be 'Y' by default
2644 
2645     -- get id from OKC record
2646     l_khrv_rec.ID := x_chrv_rec.ID;
2647 
2648         --dbms_output.put_line('Create shadow');
2649 
2650     -- call procedure in complex API
2651         OKL_KHR_PVT.Insert_Row(
2652                 p_api_version            => p_api_version,
2653                 p_init_msg_list            => p_init_msg_list,
2654             x_return_status     => x_return_status,
2655             x_msg_count         => x_msg_count,
2656             x_msg_data          => x_msg_data,
2657             p_khrv_rec              => l_khrv_rec,
2658             x_khrv_rec              => x_khrv_rec);
2659 
2660     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
2661           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2662     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
2663           raise OKL_API.G_EXCEPTION_ERROR;
2664     End If;
2665 
2666         --dbms_output.put_line('I am through');
2667 
2668   -- 4542290. Create zero interest schedules for LOAN (FLOAT, CATCHUP/CLEANUP)
2669   --          And LOAN-REVOLVING (FLOAT).
2670 
2671   OKL_K_RATE_PARAMS_PVT.get_product(
2672           p_api_version   => p_api_version,
2673           p_init_msg_list => p_init_msg_list,
2674           x_return_status => x_return_status,
2675           x_msg_count     => x_msg_count,
2676           x_msg_data      => x_msg_data,
2677           p_khr_id        => l_khrv_rec.ID,
2678           x_pdt_parameter_rec => l_pdt_parameter_rec);
2679 
2680   l_interest_calculation_basis :=l_pdt_parameter_rec.interest_calculation_basis;
2681   l_revenue_recognition_method :=l_pdt_parameter_rec.revenue_recognition_method;
2682   l_deal_type := l_pdt_parameter_rec.deal_type;
2683 
2684   --Bug 4742650 (Not to be created for LOAN CATCHUP/CLEANUP)
2685   IF (l_deal_type = 'LOAN' AND
2686       --l_interest_calculation_basis IN ('FLOAT', 'CATCHUP/CLEANUP')) OR
2687       l_interest_calculation_basis = 'FLOAT') OR
2688     (l_deal_type = 'LOAN-REVOLVING' AND
2689      l_interest_calculation_basis = 'FLOAT') THEN
2690     OKL_LA_PAYMENTS_PVT.VARIABLE_INTEREST_SCHEDULE (
2691           p_api_version   => p_api_version,
2692           p_init_msg_list => p_init_msg_list,
2693           x_return_status => x_return_status,
2694           x_msg_count     => x_msg_count,
2695           x_msg_data      => x_msg_data,
2696           p_chr_id        => l_khrv_rec.ID,
2697           x_rulv_tbl      => x_rulv_tbl
2698     );
2699 
2700     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
2701           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2702     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
2703           raise OKL_API.G_EXCEPTION_ERROR;
2704     End If;
2705 
2706   END IF;
2707 
2708     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
2709                                  x_msg_data                => x_msg_data);
2710   EXCEPTION
2711     when OKL_API.G_EXCEPTION_ERROR then
2712       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2713                         p_api_name  => l_api_name,
2714                         p_pkg_name  => g_pkg_name,
2715                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
2716                         x_msg_count => x_msg_count,
2717                         x_msg_data  => x_msg_data,
2718                         p_api_type  => g_api_type);
2719 
2720     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
2721       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2722                         p_api_name  => l_api_name,
2723                         p_pkg_name  => g_pkg_name,
2724                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
2725                         x_msg_count => x_msg_count,
2726                         x_msg_data  => x_msg_data,
2727                         p_api_type  => g_api_type);
2728 
2729     when OTHERS then
2730       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2731                         p_api_name  => l_api_name,
2732                         p_pkg_name  => g_pkg_name,
2733                         p_exc_name  => 'OTHERS',
2734                         x_msg_count => x_msg_count,
2735                         x_msg_data  => x_msg_data,
2736                         p_api_type  => g_api_type);
2737   END create_contract_header;
2738 
2739 
2740 -- Start of comments
2741 --
2742 -- Procedure Name  : create_contract_header
2743 -- Description     : creates contract header for shadowed contract
2744 -- Business Rules  :
2745 -- Parameters      :
2746 -- Version         : 1.0
2747 -- End of comments
2748   PROCEDURE create_contract_header(
2749     p_api_version                  IN NUMBER,
2750     p_init_msg_list                IN VARCHAR2,
2751     x_return_status                OUT NOCOPY VARCHAR2,
2752     x_msg_count                    OUT NOCOPY NUMBER,
2753     x_msg_data                     OUT NOCOPY VARCHAR2,
2754     p_chrv_tbl                     IN  okl_okc_migration_pvt.chrv_tbl_type,
2755     p_khrv_tbl                     IN  khrv_tbl_type,
2756     x_chrv_tbl                     OUT NOCOPY okl_okc_migration_pvt.chrv_tbl_type,
2757     x_khrv_tbl                     OUT NOCOPY khrv_tbl_type) IS
2758 
2759     l_api_name              CONSTANT VARCHAR2(30) := 'CREATE_CONTRACT_HEADER';
2760     l_api_version               CONSTANT NUMBER          := 1.0;
2761     l_return_status         VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
2762     l_overall_status    VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
2763     i                               NUMBER;
2764     l_khrv_tbl                  khrv_tbl_type := p_khrv_tbl;
2765   BEGIN
2766     -- call START_ACTIVITY to create savepoint, check compatibility
2767     -- and initialize message list
2768     l_return_status := OKL_API.START_ACTIVITY(
2769                         p_api_name      => l_api_name,
2770                         p_pkg_name      => g_pkg_name,
2771                         p_init_msg_list => p_init_msg_list,
2772                         l_api_version   => l_api_version,
2773                         p_api_version   => p_api_version,
2774                         p_api_type      => g_api_type,
2775                         x_return_status => x_return_status);
2776 
2777     -- check if activity started successfully
2778     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
2779        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2780     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
2781        raise OKL_API.G_EXCEPTION_ERROR;
2782 
2783     End If;
2784 
2785     If (p_chrv_tbl.COUNT > 0) Then
2786            i := p_chrv_tbl.FIRST;
2787            LOOP
2788                 -- call procedure in complex API for a record
2789                 create_contract_header(
2790                         p_api_version                => p_api_version,
2791                         p_init_msg_list                => p_init_msg_list,
2792                         x_return_status         => x_return_status,
2793                         x_msg_count             => x_msg_count,
2794                         x_msg_data              => x_msg_data,
2795                         p_chrv_rec                => p_chrv_tbl(i),
2796                 p_khrv_rec                => l_khrv_tbl(i),
2797                         x_chrv_rec                => x_chrv_tbl(i),
2798                 x_khrv_rec                => x_khrv_tbl(i));
2799 
2800                 If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
2801                    If l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR Then
2802                          l_overall_status := x_return_status;
2803                    End If;
2804                 End If;
2805 
2806         EXIT WHEN (i = p_chrv_tbl.LAST);
2807                 i := p_chrv_tbl.NEXT(i);
2808            END LOOP;
2809 
2810            -- return overall status
2811            x_return_status := l_overall_status;
2812     End If;
2813 
2814     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
2815           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2816     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
2817           raise OKL_API.G_EXCEPTION_ERROR;
2818     End If;
2819 
2820     OKL_API.END_ACTIVITY(       x_msg_count        => x_msg_count,
2821                                 x_msg_data        => x_msg_data);
2822   EXCEPTION
2823     when OKL_API.G_EXCEPTION_ERROR then
2824       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2825                         p_api_name  => l_api_name,
2826                         p_pkg_name  => g_pkg_name,
2827                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
2828                         x_msg_count => x_msg_count,
2829                         x_msg_data  => x_msg_data,
2830                         p_api_type  => g_api_type);
2831 
2832     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
2833       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2834                         p_api_name  => l_api_name,
2835                         p_pkg_name  => g_pkg_name,
2836                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
2837                         x_msg_count => x_msg_count,
2838                         x_msg_data  => x_msg_data,
2839                         p_api_type  => g_api_type);
2840 
2841     when OTHERS then
2842       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2843                         p_api_name  => l_api_name,
2844                         p_pkg_name  => g_pkg_name,
2845                         p_exc_name  => 'OTHERS',
2846                         x_msg_count => x_msg_count,
2847                         x_msg_data  => x_msg_data,
2848                         p_api_type  => g_api_type);
2849 
2850   END create_contract_header;
2851 
2852 
2853 --------------------------------------------------------------------------------
2854 -- Start of comments
2855 -- Procedure Name  : update_contract_header
2856 -- Description     : updates contract header for shadowed contract
2857 --Bug# : 11.5.9 Enhancement  Multi-Currency Changes
2858 --                           Product Vaqlidations
2859 --                           Rebook contract can not change currency code
2860 -- Business Rules  :
2861 -- Parameters      :
2862 -- Version         : 1.0
2863 -- End of comments
2864 ---------------------------------------------------------------------------------
2865   PROCEDURE update_contract_header(
2866     p_api_version                  IN NUMBER,
2867     p_init_msg_list                IN VARCHAR2,
2868     x_return_status                OUT NOCOPY VARCHAR2,
2869     x_msg_count                    OUT NOCOPY NUMBER,
2870     x_msg_data                     OUT NOCOPY VARCHAR2,
2871     p_restricted_update            IN VARCHAR2,
2872     p_chrv_rec                     IN  okl_okc_migration_pvt.chrv_rec_type,
2873     p_khrv_rec                     IN  khrv_rec_type,
2874     p_edit_mode                    IN  VARCHAR2,
2875     x_chrv_rec                     OUT NOCOPY okl_okc_migration_pvt.chrv_rec_type,
2876     x_khrv_rec                     OUT NOCOPY khrv_rec_type) IS
2877 
2878 
2879     subtype rulv_tbl_type is OKL_RULE_PUB.rulv_tbl_type;
2880     l_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
2881     l_khrv_rec khrv_rec_type;
2882 
2883     l_api_name          CONSTANT VARCHAR2(30) := 'UPDATE_CONTRACT_HEADER';
2884     l_api_version               CONSTANT NUMBER          := 1.0;
2885     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
2886 
2887     cursor l_khrv_csr(l_id IN NUMBER) is
2888         select 'x'
2889         from OKL_K_HEADERS_V
2890         where id = l_id;
2891     l_dummy_var VARCHAR2(1) := '?';
2892 
2893     l_modfn_mode  Varchar2(1);
2894 
2895    --Bug #2821383 : added order by as order of line dates being updated is important
2896    --Cursor to get top lines is lease chr has lines to change effectivity
2897    --bug 4412923: Removed the status 'CANCELLED' from the cursor
2898    Cursor top_cle_csr (p_chr_id IN NUMBER) is
2899    SELECT cle.id
2900    From   okc_k_lines_b cle,
2901           okc_statuses_b sts
2902    where  cle.dnz_chr_id = cle.chr_id
2903    and    cle.chr_id     = p_chr_id
2904    and    sts.code = cle.sts_code
2905    And    sts.ste_code not in ('HOLD','EXPIRED','TERMINATED');
2906 
2907    l_top_cle_id OKC_K_LINES_B.ID%TYPE;
2908 
2909    --Cursor to check if lease chr has lines to change effectivity
2910       --bug 4412923: Removed the status 'CANCELLED' from the cursor
2911    Cursor  cle_csr(p_cle_id IN NUMBER) is
2912    SELECT  cle.id,
2913            cle.start_date,
2914            cle.end_date,
2915            cle.orig_system_id1,
2916            --Bug#
2917            cle.lse_id
2918    From    okc_k_lines_b cle
2919    connect by prior cle.id = cle.cle_id
2920    start with cle.id = p_cle_id
2921    and exists (select 1
2922                from okc_statuses_b sts
2923                where sts.code = cle.sts_code
2924                and sts.ste_code not in ('HOLD','EXPIRED','TERMINATED'));
2925 
2926    l_cle_id           OKC_K_LINES_B.ID%TYPE;
2927    l_cle_start_date   OKC_K_LINES_B.START_DATE%TYPE;
2928    l_cle_end_date     OKC_K_LINES_B.END_DATE%TYPE;
2929    l_parent_cle_id    OKC_K_LINES_B.orig_system_id1%TYPE;
2930    --Bug#
2931    l_lse_id           OKC_K_LINES_B.lse_id%TYPE;
2932 
2933 
2934    l_clev_rec          OKL_OKC_MIGRATION_PVT.clev_rec_type;
2935    lx_clev_rec         OKL_OKC_MIGRATION_PVT.clev_rec_type;
2936 
2937    -------------------------------------------------------------------------
2938    --Bug# : 11.5.9 Multi-currency/product validation enhancements
2939    -------------------------------------------------------------------------
2940    --cursor to fetch current chr/khr columns from the database
2941    Cursor get_orig_chr_csr(chrid in number) is
2942    SELECT chr.currency_code,
2943           chr.start_date,
2944           chr.end_date,
2945           chr.scs_code,
2946           chr.orig_system_source_code,
2947           chr.orig_system_id1,
2948           chr.authoring_org_id  --MOAC
2949    FROM   okc_k_headers_b chr
2950    WHERE  chr.id = chrid;
2951 
2952    l_orig_chr_rec get_orig_chr_csr%ROWTYPE;
2953 
2954    --separate cursor fr khr as sometimes khr record may not exist
2955    -- for update
2956    Cursor get_orig_khr_csr(chrid in number) is
2957    SELECT khr.currency_conversion_type,
2958           khr.currency_conversion_rate,
2959           khr.currency_conversion_date,
2960           khr.term_duration,
2961           khr.pdt_id,
2962           --bug# 3180583
2963           khr.multi_gaap_yn
2964    FROM   okl_k_headers khr
2965    WHERE  khr.id = chrid;
2966 
2967    l_orig_khr_rec get_orig_khr_csr%ROWTYPE;
2968 
2969    -- Bug 7610725 start
2970    CURSOR curr_pdt_csr(p_pdt_id in number) IS
2971    SELECT DEAL_TYPE, REPORTING_PDT_ID
2972    FROM   OKL_PRODUCT_PARAMETERS_V
2973    WHERE  ID = p_pdt_id;
2974 
2975    l_curr_pdt_rec curr_pdt_csr%ROWTYPE;
2976    l_delete_flag VARCHAR(1) := 'N';
2977 
2978    l_rep_book_type          okl_txd_assets_b.tax_book%TYPE;
2979    cursor l_txd_csr (p_book_type_code in varchar2,
2980                       p_chr_id         in number) is
2981     select txdb.id
2982     from   okl_txd_assets_b txdb,
2983            okl_txl_assets_b txlb,
2984            okc_k_lines_b    cleb,
2985            okc_line_styles_b lseb
2986     where  txdb.tax_book         =  p_book_type_code
2987     and    txdb.tal_id           =  txlb.id
2988     and    txlb.kle_id           =  cleb.id
2989     and    cleb.lse_id           = lseb.id
2990     and    lseb.lty_code         = 'FIXED_ASSET'
2991     and    cleb.dnz_chr_id       = p_chr_id;
2992 
2993     l_txd_rec   l_txd_csr%ROWTYPE;
2994     l_adpv_tbl  OKL_TXD_ASSETS_PUB.adpv_tbl_type;
2995     i number;
2996    -- Bug 7610725 end
2997 
2998 
2999    l_curr_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
3000    l_curr_khrv_rec khrv_rec_type;
3001 
3002    l_pdt_deal_type       varchar2(150);
3003    l_pdt_tax_owner       varchar2(150);
3004 
3005    l_bypass_pdt_validation varchar2(1) default 'N';
3006    -------------------------------------------------------------------------
3007    --Bug# : 11.5.9 Multi-currency/product validation enhancements
3008    -------------------------------------------------------------------------
3009    --Bug# 2821383
3010    l_rbk_cpy    Varchar2(1) default 'N';
3011 
3012    --Cursor to get dates from orignal lines in case of a rebook contract
3013    Cursor  parent_cle_csr (p_cle_id IN Number) is
3014    SELECT
3015            cle.start_date,
3016            cle.end_date
3017    From    okc_k_lines_b cle
3018    Where   cle.id = p_cle_id;
3019 
3020    l_parent_cle_start_date OKC_K_HEADERS_B.start_date%TYPE;
3021    l_parent_cle_end_date   OKC_K_HEADERS_B.end_date%TYPE;
3022 
3023    --Bug# 3143522 : Subsidies
3024    --cursor to get lty code
3025    cursor l_ltycd_csr (p_lse_id in number) is
3026    select lseb.lty_code
3027    from   okc_line_styles_b lseb
3028    where  lseb.id = p_lse_id;
3029 
3030    l_lty_code okc_line_styles_b.lty_code%TYPE default null;
3031 
3032    --cursor to get maximum subsidy term
3033    cursor l_sub_csr (p_cle_id in number) is
3034    select subb.maximum_term
3035    from   okl_subsidies_b subb,
3036           okl_k_lines     kle
3037    where  subsidy_id = kle.subsidy_id
3038    and    kle.id     = p_cle_id;
3039 
3040    l_max_subsidy_term  okl_subsidies_b.maximum_term%TYPE;
3041    --Bug# 3143522 : subsidies
3042 
3043    --Bug# 3180583
3044    l_multigaap_yn varchar2(1) default Null;
3045 
3046   -- Bug 4722839
3047   l_deal_type OKL_K_HEADERS.deal_type%TYPE;
3048   l_interest_calculation_basis VARCHAR2(30);
3049   l_revenue_recognition_method VARCHAR2(30);
3050   l_pdt_parameter_rec OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
3051   x_rulv_tbl rulv_tbl_type;
3052 
3053 --Added by dpsingh for LE Uptake
3054  CURSOR get_con_line_ids_csr(p_chr_id1 NUMBER) IS
3055  SELECT DISTINCT TAS_ID
3056  FROM OKL_TXL_ASSETS_B
3057  WHERE KLE_ID IN
3058               (SELECT OKC.ID
3059 	       FROM OKC_K_LINES_B OKC,
3060 	       OKC_LINE_STYLES_B OKC_ST
3061 	       WHERE OKC_ST.LTY_CODE ='FREE_FORM1'
3062 	       AND OKC.LSE_ID=OKC_ST.ID
3063 	       AND OKC.CHR_ID =OKC.DNZ_CHR_ID
3064 	       AND OKC.CHR_ID =p_chr_id1);
3065 
3066 l_tasv_rec  okl_tas_pvt.tasv_rec_type;
3067 x_tasv_rec okl_tas_pvt.tasv_rec_type;
3068 l_legal_entity_id NUMBER;
3069 l_upd_trx_assets NUMBER(1);
3070 
3071   BEGIN
3072 
3073     -- call START_ACTIVITY to create savepoint, check compatibility
3074     -- and initialize message list
3075     l_return_status := OKL_API.START_ACTIVITY(
3076                         p_api_name      => l_api_name,
3077                         p_pkg_name      => g_pkg_name,
3078                         p_init_msg_list => p_init_msg_list,
3079                         l_api_version   => l_api_version,
3080                         p_api_version   => p_api_version,
3081                         p_api_type      => g_api_type,
3082                         x_return_status => x_return_status);
3083 
3084     -- check if activity started successfully
3085     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3086        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3087     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
3088        raise OKL_API.G_EXCEPTION_ERROR;
3089     End If;
3090 
3091     l_khrv_rec := p_khrv_rec;
3092     l_chrv_rec := p_chrv_rec;
3093 
3094     --Bug# 3783278
3095     --Remove leading and trailing spaces in contract number
3096     If l_chrv_rec.contract_number is not null Then
3097       l_chrv_rec.contract_number := LTRIM(RTRIM(l_chrv_rec.contract_number));
3098     End If;
3099 
3100 
3101         --term modfn
3102 
3103         OPEN  get_orig_chr_csr(l_chrv_rec.id);
3104         FETCH get_orig_chr_csr into l_orig_chr_rec;
3105         IF get_orig_chr_csr%NOTFOUND Then
3106             Null; --will not happen as we are updating the current record so it has to be there
3107         END IF;
3108         CLOSE get_orig_chr_csr;
3109 
3110         --dkagrawa moved down the following code and passed l_orig_chr_rec.authoring_org_id for MOAC
3111 
3112         -- set okc context before API call
3113         -- msamoyle: check whether we need to call this method here or in PUB or in processing
3114         OKL_CONTEXT.SET_OKC_ORG_CONTEXT(l_orig_chr_rec.authoring_org_id,l_chrv_rec.inv_organization_id);
3115 
3116         OPEN  get_orig_khr_csr(l_chrv_rec.id);
3117         FETCH get_orig_khr_csr into l_orig_khr_rec;
3118         IF get_orig_khr_csr%NOTFOUND Then
3119             Null; --will not happen as we are updating the current record so it has to be there
3120         END IF;
3121         CLOSE get_orig_khr_csr;
3122 
3123    -- Bug 7610725 start
3124     l_delete_flag := 'N';
3125     IF (l_khrv_rec.pdt_id IS NOT NULL AND
3126         l_khrv_rec.pdt_id <> OKL_API.G_MISS_NUM) THEN
3127       IF (NVL(l_orig_khr_rec.multi_gaap_yn,'N') = 'Y') THEN
3128         OPEN curr_pdt_csr(l_khrv_rec.pdt_id);
3129         FETCH curr_pdt_csr INTO l_curr_pdt_rec;
3130         CLOSE curr_pdt_csr;
3131 
3132         IF (l_curr_pdt_rec.REPORTING_PDT_ID IS NOT NULL) THEN
3133           IF l_curr_pdt_rec.DEAL_TYPE like 'LOAN%' THEN
3134             -- Delete reporting asset tax book
3135             l_delete_flag := 'Y';
3136           END IF;
3137         ELSE
3138           -- Delete rep[orting asset tax book
3139             l_delete_flag := 'Y';
3140             --l_khrv_rec.multi_gaap_yn := 'N';
3141         END IF;
3142       END IF;
3143     END IF;
3144 
3145     IF (l_delete_flag = 'Y') THEN
3146        -- Delete reporting asset tax book
3147        l_rep_book_type := OKL_SYSTEM_PARAMS_ALL_PUB.get_system_param_value(OKL_SYSTEM_PARAMS_ALL_PUB.G_RPT_PROD_BOOK_TYPE_CODE);
3148            i := 0;
3149            If nvl(l_rep_book_type,OKL_API.G_MISS_CHAR) <> OKL_API.G_MISS_CHAR then
3150                open l_txd_csr (p_book_type_code  => l_rep_book_type,
3151                                p_chr_id          => l_chrv_rec.id);
3152                Loop
3153                    fetch l_txd_csr into l_txd_rec;
3154                    exit when l_txd_csr%NOTFOUND;
3155                    i := i+1;
3156                    l_adpv_tbl(i).id := l_txd_rec.id;
3157                end Loop;
3158                close l_txd_csr;
3159 
3160                If l_adpv_tbl.COUNT <> 0 then
3161                    OKL_TXD_ASSETS_PUB.delete_txd_asset_Def(
3162                        p_api_version         => p_api_version,
3163                        p_init_msg_list       => p_init_msg_list,
3164                        x_return_status       => x_return_status,
3165                        x_msg_count           => x_msg_count,
3166                        x_msg_data            => x_msg_data,
3167                        p_adpv_tbl            => l_adpv_tbl);
3168                    If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
3169                        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3170                    Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
3171                        raise OKL_API.G_EXCEPTION_ERROR;
3172                    End If;
3173                End If;
3174           End If;
3175 
3176     END IF;
3177    -- Bug 7610725 end
3178 
3179     --
3180     If l_chrv_rec.start_date = OKL_API.G_MISS_DATE Then
3181        l_chrv_rec.start_date := l_orig_chr_rec.start_date;
3182     End If;
3183     --
3184 
3185     If l_khrv_rec.term_duration = OKL_API.G_MISS_NUM  and
3186        l_orig_khr_rec.term_duration is not null Then
3187        l_khrv_rec.term_duration := l_orig_khr_rec.term_duration;
3188     End If;
3189     --
3190     --Bug Fix# 2860122 start.
3191     --SandO fix for end date
3192     IF (l_chrv_rec.end_date = OKL_API.G_MISS_DATE) Then
3193        IF (l_chrv_rec.start_date is NOT NULL and
3194           l_chrv_rec.start_date <> OKL_API.G_MISS_DATE) and
3195           (l_khrv_rec.term_duration is not NULL and
3196           l_khrv_rec.term_duration <> OKL_API.G_MISS_NUM) Then
3197 	   --Added for bug 6007644
3198            l_chrv_rec.end_date := OKL_LLA_UTIL_PVT.calculate_end_date(p_start_date => l_chrv_rec.start_date,
3199                                                                       p_months     => l_khrv_rec.term_duration);
3200          --end bug 6007644
3201        ELSE
3202            l_chrv_rec.end_date := l_orig_chr_rec.end_date;
3203        END IF;
3204     END IF;
3205     -- Bug Fix # 2860122 End.
3206     --
3207     If l_chrv_rec.currency_code = OKL_API.G_MISS_CHAR Then
3208        l_chrv_rec.currency_code := l_orig_chr_rec.currency_code;
3209     End If;
3210 
3211     --
3212     -- call to check if term modification is allowed and cascade it onto existing lines
3213     ---
3214     --Bug # 11.5.9 : modified to take care of currency modification during rebooks
3215     term_modfn( p_api_version    => p_api_version,
3216                 p_init_msg_list  => p_init_msg_list,
3217                 x_return_status  => x_return_status,
3218                 x_msg_count      => x_msg_count,
3219                 x_msg_data       => x_msg_data,
3220                 p_chr_id         => l_chrv_rec.id,
3221                 p_new_start_date => l_chrv_rec.start_date,
3222                 p_new_end_date   => l_chrv_rec.end_date,
3223                 p_new_term       => l_khrv_rec.term_duration,
3224                 x_modfn_mode     => l_modfn_mode);
3225 
3226     -- check return status
3227     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
3228           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3229     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
3230           raise OKL_API.G_EXCEPTION_ERROR;
3231     End If;
3232 
3233     ----------------------------------------------------------------------------
3234     --call to check if template modification is allowed
3235     ----------------------------------------------------------------------------
3236     template_create_allowed(p_chr_id        => l_chrv_rec.id,
3237                             p_template_yn   => l_chrv_rec.template_yn,
3238                             x_return_status => x_return_status);
3239 
3240     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3241        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3242     Elsif (x_return_status = OKL_API.G_RET_STS_ERROR) then
3243        OKL_API.SET_MESSAGE(p_app_name => g_app_name,
3244                                            p_msg_name => G_TEMPLATE_CREATE_NOT_ALLOWED);
3245        raise OKL_API.G_EXCEPTION_ERROR;
3246     End If;
3247 
3248     ----------------------------------------------------------------------------
3249     --Bug# : 11.5.9 Enhancement Multi Currency
3250     ----------------------------------------------------------------------------
3251     If (l_chrv_rec.currency_code = OKL_API.G_MISS_CHAR) Then
3252        l_chrv_rec.currency_code := l_orig_chr_rec.currency_code;
3253     End If;
3254 
3255     If (l_khrv_rec.currency_conversion_type = OKL_API.G_MISS_CHAR) and
3256        l_orig_khr_rec.currency_conversion_type is not null Then
3257        l_khrv_rec.currency_conversion_type := l_orig_khr_rec.currency_conversion_type;
3258     End If;
3259 
3260     If (l_khrv_rec.currency_conversion_rate = OKL_API.G_MISS_NUM) and
3261        l_orig_khr_rec.currency_conversion_rate is not null Then
3262        l_khrv_rec.currency_conversion_rate := l_orig_khr_rec.currency_conversion_rate;
3263     End If;
3264 
3265     If (l_khrv_rec.currency_conversion_date = OKL_API.G_MISS_DATE) and
3266        l_orig_khr_rec.currency_conversion_date is not null Then
3267        l_khrv_rec.currency_conversion_date := l_orig_khr_rec.currency_conversion_date;
3268     End If;
3269 
3270     If (l_chrv_rec.start_date = OKL_API.G_MISS_DATE) Then
3271        l_chrv_rec.start_date := l_orig_chr_rec.start_date;
3272     End If;
3273 
3274     If (l_chrv_rec.scs_code = OKL_API.G_MISS_CHAR) Then
3275        l_chrv_rec.scs_code := l_orig_chr_rec.scs_code;
3276     End If;
3277 
3278     --Bug# 3180583
3279     If (l_khrv_rec.multi_gaap_yn = OKL_API.G_MISS_CHAR) then
3280         l_khrv_rec.multi_gaap_yn := l_orig_khr_rec.multi_gaap_yn;
3281     End If;
3282 
3283     -- AKP:Check if start_date is changed default interest_start_date,
3284     --rate_change_start_date and catchup_start_date
3285     IF ((l_chrv_rec.start_date <> l_orig_chr_rec.start_date) AND
3286         (l_chrv_rec.scs_code = 'LEASE') ) THEN
3287       okl_k_rate_params_pvt.cascade_contract_start_date
3288               ( p_api_version    => p_api_version,
3289                 p_init_msg_list  => p_init_msg_list,
3290                 x_return_status  => x_return_status,
3291                 x_msg_count      => x_msg_count,
3292                 x_msg_data       => x_msg_data,
3293                 p_chr_id         => l_chrv_rec.id,
3294                 p_new_start_date => l_chrv_rec.start_date);
3295       -- check return status
3296       If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
3297             raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3298       Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
3299             raise OKL_API.G_EXCEPTION_ERROR;
3300       End If;
3301     END IF;
3302 
3303     -- now go in to validate currency
3304     validate_currency(p_api_version   => p_api_version,
3305                       p_init_msg_list => p_init_msg_list,
3306                       x_msg_count     => x_msg_count,
3307                       x_msg_data      => x_msg_data,
3308                       x_return_status => x_return_status,
3309                       p_chrv_rec      => l_chrv_rec,
3310                       p_khrv_rec      => l_khrv_rec,
3311                       x_chrv_rec      => l_curr_chrv_rec,
3312                       x_khrv_rec      => l_curr_khrv_rec);
3313     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3314        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3315     Elsif (x_return_status = OKL_API.G_RET_STS_ERROR) then
3316        raise OKL_API.G_EXCEPTION_ERROR;
3317     End If;
3318 
3319     l_chrv_rec := l_curr_chrv_rec;
3320     l_khrv_rec := l_curr_khrv_rec;
3321     ----------------------------------------------------------------------------
3322     --Bug# : 11.5.9 Enhancement Multi Currency End
3323     ----------------------------------------------------------------------------
3324 
3325     ----------------------------------------------------------------------------
3326     --Bug# : 11.5.9 Enhancement Product Validations
3327     ----------------------------------------------------------------------------
3328     --For older contracts do not check for product validation unless product has changed
3329     --therefore commenting this code below :
3330     --If l_khrv_rec.pdt_id = OKL_API.G_MISS_NUM Then
3331     --    l_khrv_rec.pdt_id := l_orig_chr_rec.pdt_id;
3332     --End If;
3333 
3334     If (l_chrv_rec.start_date = OKL_API.G_MISS_DATE) Then
3335        l_chrv_rec.start_date := l_orig_chr_rec.start_date;
3336     End If;
3337 
3338 
3339     --For older contracts do not check for product validation unless product has changed
3340     --therefore commenting adding the G_MISS clause in IF below :
3341 
3342     If (l_khrv_rec.pdt_id is  null) OR (l_khrv_rec.pdt_id = OKL_API.G_MISS_NUM ) OR
3343        (l_khrv_rec.pdt_id = l_orig_khr_rec.pdt_id)  then
3344         null;
3345     Else
3346         --Begin (Bug# 2730633)
3347         --Fix for not to validate for copied contracts being copied from contracts
3348         --which have 11.5.8 products against them
3349         l_bypass_pdt_validation := 'N';
3350         If nvl(l_orig_chr_rec.orig_system_source_code,OKL_API.G_MISS_CHAR) <> OKL_API.G_MISS_CHAR AND
3351            nvl(l_orig_chr_rec.orig_system_id1,OKL_API.G_MISS_NUM) <> OKL_API.G_MISS_NUM Then
3352            l_bypass_pdt_validation := Is_Orig_Pdt_old(p_orig_chr_id => l_orig_chr_rec.orig_system_id1,
3353                                                       p_pdt_id      => l_khrv_rec.pdt_id);
3354         End If;
3355         --Fix for not to validate for copied contracts being copied from contracts
3356         --which have 11.5.8 products against them
3357         --End (Bug# 2730633)
3358         If l_bypass_pdt_validation = 'N' Then
3359             Validate_Product(p_api_version   => p_api_version,
3360                              p_init_msg_list => p_init_msg_list,
3361                              x_return_status => x_return_status,
3362                              x_msg_count     => x_msg_count,
3363                              x_msg_data      => x_msg_data,
3364                              p_chrv_rec      => l_chrv_rec,
3365                              p_pdt_id        => l_khrv_rec.pdt_id,
3366                              x_deal_type     => l_pdt_deal_type,
3367                              x_tax_owner     => l_pdt_tax_owner,
3368                              --Bug# 3180583
3369                              x_multigaap_yn  => l_multigaap_yn);
3370 
3371             -- check return status
3372             If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
3373                     raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3374             Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
3375                     raise OKL_API.G_EXCEPTION_ERROR;
3376             End If;
3377 
3378             --for lease contracts deal type has to come from product
3379             If l_chrv_rec.scs_code in ('LEASE','QUOTE') Then
3380                  --Bug# 2809358
3381                  --If l_khrv_rec.deal_type <> l_pdt_deal_type Then
3382                  If nvl(l_khrv_rec.deal_type,'DEALTYPE') <> l_pdt_deal_type Then
3383                      --If l_pdt_deal_type is not null OR
3384                      If l_pdt_deal_type is not null AND
3385                        l_pdt_deal_type <> OKL_API.G_MISS_CHAR Then
3386                           l_khrv_rec.deal_type := l_pdt_deal_type;
3387                      End If;
3388                  End If;
3389 
3390                  --------------
3391                  --Bug# 3180583
3392                  -------------
3393                  If nvl(l_multigaap_yn,OKL_API.G_MISS_CHAR)  = 'N' then
3394                      If nvl(l_khrv_rec.multi_gaap_yn,OKL_API.G_MISS_CHAR) = 'Y' then
3395                           l_khrv_rec.multi_gaap_yn := NULL;
3396                      End If;
3397                  ELSIf nvl(l_multigaap_yn,'N')  = 'Y' then  -- 7610725
3398                           l_khrv_rec.multi_gaap_yn := 'Y';
3399                  End If;
3400                  --------------
3401                  --Bug# 3180583
3402                  -------------
3403 
3404                 --Bug# 3379294 : check if deal type is still Null then raise error for lease and quote
3405                  If nvl(l_khrv_rec.deal_type,OKL_API.G_MISS_CHAR) = OKL_API.G_MISS_CHAR then
3406                      OKL_API.Set_Message(p_app_name => G_APP_NAME,
3407                                          p_msg_name => 'OKL_NULL_DEAL_TYPE');
3408                      x_return_status := OKL_API.G_RET_STS_ERROR;
3409                      raise OKL_API.G_EXCEPTION_ERROR;
3410                  End If;
3411                  --Bug# 3379294 : End
3412 
3413             End If;
3414         End If;
3415     End If;
3416     ----------------------------------------------------------------------------
3417     --Bug# : 11.5.9 Product validations
3418     ----------------------------------------------------------------------------
3419 --Added by dpsingh
3420       l_legal_entity_id  := OKL_LEGAL_ENTITY_UTIL.get_khr_le_id(l_chrv_rec.id) ;
3421 
3422   --rkuttiya commented out for bug 6595451
3423   --validation on null legal entity id not required for update contract
3424      /*IF (l_khrv_rec.legal_entity_id IS NULL ) THEN
3425             IF l_chrv_rec.scs_code IN ('LEASE','LOAN','INVESTOR', 'MASTER_LEASE','PROGRAM') THEN
3426 	      OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'legal_entity_id');
3427 	      RAISE OKL_API.G_EXCEPTION_ERROR;
3428 	    END IF;*/
3429      IF( (l_khrv_rec.legal_entity_id <> Okl_Api.G_MISS_NUM) AND  (l_legal_entity_id <> l_khrv_rec.legal_entity_id)) THEN
3430             OKL_LA_VALIDATION_UTIL_PVT.VALIDATE_LEGAL_ENTITY(x_return_status => x_return_status,
3431                                                                                                           p_chrv_rec      => l_chrv_rec,
3432 													  p_mode => 'UPD');
3433              l_upd_trx_assets := 1;
3434            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3435               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3436            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3437               RAISE OKL_API.G_EXCEPTION_ERROR;
3438            END IF;
3439       END IF ;
3440   --Added by dpsingh end
3441 
3442     --Should not go in and validate for previous records
3443 
3444     --
3445     -- call procedure in complex API
3446     --
3447 --    OKC_CONTRACT_PUB.update_contract_header(
3448 
3449      okl_okc_migration_pvt.update_contract_header(
3450          p_api_version            => p_api_version,
3451          p_init_msg_list        => p_init_msg_list,
3452          x_return_status         => x_return_status,
3453          x_msg_count             => x_msg_count,
3454          x_msg_data              => x_msg_data,
3455          p_restricted_update    => p_restricted_update,
3456          p_chrv_rec                        => l_curr_chrv_rec,
3457          x_chrv_rec                        => x_chrv_rec);
3458 
3459     -- check return status
3460     IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
3461           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3462     ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
3463           RAISE OKL_API.G_EXCEPTION_ERROR;
3464      --Added by dpsingh for LE Uptake
3465     ELSIF  x_return_status = OKL_API.G_RET_STS_SUCCESS AND l_upd_trx_assets = 1 THEN
3466          FOR get_con_line_ids_rec IN get_con_line_ids_csr(l_chrv_rec.id) LOOP
3467             l_tasv_rec.id :=  get_con_line_ids_rec.tas_id;
3468             l_tasv_rec.legal_entity_id := l_legal_entity_id;
3469 	    OKL_TRX_ASSETS_PVT.UPDATE_TRX_ASS_H_DEF(p_api_version ,
3470                                                                                                p_init_msg_list ,
3471                                                                                                x_return_status ,
3472                                                                                                x_msg_count ,
3473                                                                                                x_msg_data  ,
3474                                                                                                l_tasv_rec ,
3475                                                                                                x_tasv_rec) ;
3476 
3477 	       IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
3478                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3479                ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
3480                     RAISE OKL_API.G_EXCEPTION_ERROR;
3481 	       END IF;
3482           END LOOP;
3483     END IF;
3484     /*Bug# 3124577: 11.5.10 Rule Migration:-----------------------------------------------------------
3485     ----------------------------------------------------------------------------
3486     --Bug# : 11.5.9 Enhancement Multi Currency, Create CURRENCY Rule
3487     ----------------------------------------------------------------------------
3488     --Create OKC currency rule for contract currency different from functional currency
3489     --Removed as OKC CVN rule need not be created after 11.5.10 rules migration
3490     ----------------------------------------------------------------------------
3491     --Bug# : 11.5.9 Enhancement Multi Currency, Create CURRENCY Rule
3492     ----------------------------------------------------------------------------
3493     ---------------------------------------Bug# 3124577 -Rule Migration 11.5.10-----------*/
3494 
3495      --If does not satisfy above clause stamp header dates on to lines
3496   If l_modfn_mode in ('L','R') Then
3497       --Bug# 2821383
3498       Open top_cle_csr(p_chr_id => x_chrv_rec.id);
3499       Loop
3500           Fetch top_cle_csr into l_top_cle_id;
3501           Exit when top_cle_csr%NOTFOUND;
3502 
3503           Open cle_csr (p_cle_id => l_top_cle_id);
3504           --Open cle_csr (p_chr_id => x_chrv_rec.id);
3505           Loop
3506               Fetch Cle_Csr into l_cle_id,
3507                                  l_cle_start_date,
3508                                  l_cle_end_date,
3509                                  l_parent_cle_id,
3510                                  --Bug# : subsidy
3511                                  l_lse_id;
3512 
3513               Exit When Cle_Csr%NOTFOUND;
3514 
3515               l_clev_rec.id         := l_cle_id;
3516               l_clev_rec.start_date := l_cle_start_date;
3517               l_clev_rec.end_date   := l_cle_end_date;
3518 
3519               --Bug#: Subsidy
3520               l_lty_code := Null;
3521               open l_ltycd_csr (p_lse_id => l_lse_id);
3522               fetch l_ltycd_csr into l_lty_code;
3523               If l_ltycd_csr%NOTFOUND then
3524                   Null;
3525               End If;
3526               close l_ltycd_csr;
3527 
3528 
3529               -----------------------------------------------------------------------------------------------------
3530               --Bug# 3143522: Subsidy - segregated date stamping logic for fee,service and subsidy from rest of the lines
3531               --       because of different natures of these lines
3532               ---------------------------------------------------------------------------------------------------e
3533               If nvl(l_lty_code,'XXXX') not in('FEE','SOLD_SERVICE','LINK_FEE_ASSET','LINK_SERV_ASSET','SUBSIDY') then
3534                   --Bug # 2691029 : modify line start date only if line start date is
3535                   -- is less than or equal to new header start date
3536                   ----------------------------------------------------------------
3537                   --start date logic for lines other than FEE, SERVICE and SUBSIDY
3538                   ----------------------------------------------------------------
3539                   If l_modfn_mode = 'R' then
3540                       --bug# 2821383
3541                       l_rbk_cpy := 'N';
3542                       l_rbk_cpy := Is_rebook_Copy(p_chr_id => x_chrv_rec.id);
3543                       If l_rbk_cpy = 'Y' then
3544                           If l_parent_cle_id is not null then
3545                               If l_cle_start_date <= x_chrv_rec.start_date then
3546                                   l_clev_rec.start_date := x_chrv_rec.start_date;
3547                               elsif l_cle_start_date > x_chrv_rec.start_date then
3548                                   --get the dates from parent lines
3549                                   Open parent_cle_csr(p_cle_id => l_parent_cle_id);
3550                                   Fetch parent_cle_csr into
3551                                                        l_parent_cle_start_date,
3552                                                        l_parent_cle_end_date;
3553                                   If parent_cle_csr%NOTFOUND then
3554                                       null;
3555                                   Else
3556                                       If trunc(l_clev_rec.start_date) = trunc(l_parent_cle_start_date) then
3557                                           --do not change the line date (do not stamp header date on line)
3558                                           null;
3559                                       Else
3560                                           --change line start date
3561                                           If trunc(l_parent_cle_start_date) <= trunc(x_chrv_rec.start_date) then
3562                                               l_clev_rec.start_date := x_chrv_rec.start_date;
3563                                           Elsif trunc(l_parent_cle_start_date) > trunc(x_chrv_rec.start_date) then
3564                                               l_clev_rec.start_date := l_parent_cle_start_date;
3565                                           End If;
3566                                       End If;
3567                                   End If;
3568                                   Close parent_cle_csr;
3569                               End If; --cle_start date > header date
3570 
3571                           elsif l_parent_cle_id is null then
3572                               null;
3573                           end if;
3574                       Elsif l_rbk_cpy = 'N' then
3575                           If l_cle_start_date <= x_chrv_rec.start_date then
3576                               l_clev_rec.start_date := x_chrv_rec.start_date;
3577                           elsif l_cle_start_date > x_chrv_rec.start_date then
3578                               null;
3579                           end if;
3580                       End If;
3581 
3582                   elsif l_modfn_mode = 'L' then
3583                       l_clev_rec.start_date := x_chrv_rec.start_date;
3584                   end if;
3585                   ----------------------------------------------------------------
3586                   --end of start date logic for lines other than FEE, SERVICE and SUBSIDY
3587                   ----------------------------------------------------------------
3588 
3589                   ---------------------------------------------------------------
3590                   --End date logic for lines other than FEE, SERVICE and SUBSIDY
3591                   --------------------------------------------------------------
3592                   l_clev_rec.end_date   := x_chrv_rec.end_date;
3593                   ---------------------------------------------------------------
3594                   --end of End date logic for lines other than FEE, SERVICE and SUBSIDY
3595                   --------------------------------------------------------------
3596 
3597               ---------------------------------------------------------------------------------------------
3598               --Bug#3143522 :subsidy special logic for fee and service lines which may end and start on any dates
3599               --      between contract dates
3600               ---------------------------------------------------------------------------------------------
3601               ElsIf nvl(l_lty_code,'XXXX') in ('FEE','SOLD_SERVICE','LINK_FEE_ASSET','LINK_SERV_ASSET') then
3602 
3603                   --------------------------------------------------------
3604                   --New code added along with bug fix 3180583 to take care of
3605                   --fee and service lines during re-books :
3606                   /*--------new code-------------------------------------*/
3607                   If l_modfn_mode = 'R' then
3608                       --bug# 2821383
3609                       l_rbk_cpy := 'N';
3610                       l_rbk_cpy := Is_rebook_Copy(p_chr_id => x_chrv_rec.id);
3611                       If l_rbk_cpy = 'Y' then
3612                           If l_parent_cle_id is not null then
3613                               Open parent_cle_csr(p_cle_id => l_parent_cle_id);
3614                                   Fetch parent_cle_csr into
3615                                                        l_parent_cle_start_date,
3616                                                        l_parent_cle_end_date;
3617                                   If parent_cle_csr%NOTFOUND then
3618                                       null;
3619                                   End If;
3620                               Close parent_cle_csr;
3621 
3622                               If (l_cle_start_date <= x_chrv_rec.start_date) OR
3623                                   (l_cle_start_date > x_chrv_rec.end_date) then
3624                                   l_clev_rec.start_date := x_chrv_rec.start_date;
3625                               elsif (l_cle_start_date > x_chrv_rec.start_date) AND
3626                                      (l_cle_start_date <= x_chrv_rec.end_date) then
3627                                   --get the dates from parent lines
3628                                   If nvl(l_parent_cle_start_date,OKL_API.G_MISS_DATE) = OKL_API.G_MISS_DATE then
3629                                       null;
3630                                   Else
3631                                       If trunc(l_clev_rec.start_date) = trunc(l_parent_cle_start_date) then
3632                                           --do not change the line date (do not stamp header date on line)
3633                                           null;
3634                                       Else
3635                                           --change line start date
3636                                           If trunc(l_parent_cle_start_date) <= trunc(x_chrv_rec.start_date) then
3637                                               l_clev_rec.start_date := x_chrv_rec.start_date;
3638                                           Elsif trunc(l_parent_cle_start_date) > trunc(x_chrv_rec.start_date) then
3639                                               l_clev_rec.start_date := l_parent_cle_start_date;
3640                                           End If;
3641                                       End If;
3642                                   End If;
3643                               End If; --cle_start date > header date
3644 
3645                               If (l_cle_end_date >= x_chrv_rec.end_date) OR
3646                                  (l_cle_end_date < x_chrv_rec.start_date)  then
3647                                   l_clev_rec.end_date := x_chrv_rec.end_date;
3648                               ElsIf (l_cle_end_date < x_chrv_rec.end_date)
3649                                   and (l_cle_end_date >=  x_chrv_rec.start_date) then
3650                                   --get the dates from parent lines
3651                                   If nvl(l_parent_cle_end_date,OKL_API.G_MISS_DATE) = OKL_API.G_MISS_DATE then
3652                                       null;
3653                                   Else
3654                                       If trunc(l_clev_rec.end_date) = trunc(l_parent_cle_end_date) then
3655                                           --do not change the line date (do not stamp header date on line)
3656                                           null;
3657                                       Else
3658                                           --change line start date
3659                                           If trunc(l_parent_cle_end_date) > trunc(x_chrv_rec.end_date) then
3660                                               l_clev_rec.end_date := x_chrv_rec.end_date;
3661                                           Elsif trunc(l_parent_cle_end_date) <= trunc(x_chrv_rec.end_date) then
3662                                               l_clev_rec.end_date := l_parent_cle_end_date;
3663                                           End If;
3664                                       End If;
3665                                   End If;
3666                               End If; --cle_end date < header end date
3667 
3668                           elsif l_parent_cle_id is null then
3669                               null;
3670                           end if;
3671 
3672                       Elsif l_rbk_cpy = 'N' then
3673                           -------------------------------------------
3674                           --start date logic for fee and service lines
3675                           -------------------------------------------
3676                           If (l_cle_start_date < x_chrv_rec.start_date) OR (l_cle_start_date > x_chrv_rec.end_date) then
3677                               l_clev_rec.start_date := x_chrv_rec.start_date;
3678                           ElsIf (l_cle_start_date >= x_chrv_rec.start_date) And (l_cle_start_date <= x_chrv_rec.end_date) then
3679                                NULL;
3680                           End If;
3681                           --------------------------------------------
3682                           --end of start date logic for fee and service
3683                           -------------------------------------------
3684                           ---------------------------------------------
3685                           --end date logic for fee and service
3686                           ---------------------------------------------
3687                           If (l_cle_end_date > x_chrv_rec.end_date) OR (l_cle_end_date < x_chrv_rec.start_date)  then
3688                               l_clev_rec.end_date := x_chrv_rec.end_date;
3689                           ElsIf (l_cle_end_date <= x_chrv_rec.end_date) and (l_cle_end_date >=  x_chrv_rec.start_date) then
3690                               NULL;
3691                           End If;
3692                           --------------------------------------------
3693                           --end of end date logic for fee and service
3694                           -------------------------------------------
3695 
3696                       End If;
3697 
3698                   elsif l_modfn_mode = 'L' then
3699                       ---------------------------------------------
3700                       --start date logic for fee and service lines
3701                       ---------------------------------------------
3702                       If (l_cle_start_date < x_chrv_rec.start_date) OR (l_cle_start_date > x_chrv_rec.end_date) then
3703                           l_clev_rec.start_date := x_chrv_rec.start_date;
3704                       ElsIf (l_cle_start_date >= x_chrv_rec.start_date) And (l_cle_start_date <= x_chrv_rec.end_date) then
3705                           NULL;
3706                       End If;
3707                       --------------------------------------------
3708                       --end of start date logic for fee and service
3709                       -------------------------------------------
3710                       ---------------------------------------------
3711                       --end date logic for fee and service
3712                       ---------------------------------------------
3713                       If (l_cle_end_date > x_chrv_rec.end_date) OR (l_cle_end_date < x_chrv_rec.start_date)  then
3714                           l_clev_rec.end_date := x_chrv_rec.end_date;
3715                       ElsIf (l_cle_end_date <= x_chrv_rec.end_date) and (l_cle_end_date >=  x_chrv_rec.start_date) then
3716                           NULL;
3717                       End If;
3718                       --------------------------------------------
3719                       --end of end date logic for fee and service
3720                       -------------------------------------------
3721                   end if;
3722                   /*---------------------end of new code--------------------*/
3723 
3724               ----------------------------------------------------------------------------------------------
3725               --Bug#3143522 : Subsidy special logic for subsidy line which starts with the parent line but may end
3726               --       prior to contract/parent line end date based on maximum-term in subsidy setup
3727               ---------------------------------------------------------------------------------------------
3728               ElsIf nvl(l_lty_code,'XXX') = 'SUBSIDY' then
3729                   -- follow the same logic for normal asset lines for start date
3730 
3731                   -----------------------------------------------------------------------------------
3732                   -- start date logic for subsidy lines : exactly copied from above (for asset lines)
3733                   -----------------------------------------------------------------------------------
3734                   If l_modfn_mode = 'R' then
3735                       --bug# 2821383
3736                       l_rbk_cpy := 'N';
3737                       l_rbk_cpy := Is_rebook_Copy(p_chr_id => x_chrv_rec.id);
3738                       If l_rbk_cpy = 'Y' then
3739                           If l_parent_cle_id is not null then
3740                               If l_cle_start_date <= x_chrv_rec.start_date then
3741                                   l_clev_rec.start_date := x_chrv_rec.start_date;
3742                               elsif l_cle_start_date > x_chrv_rec.start_date then
3743                                   --get the dates from parent lines
3744                                   Open parent_cle_csr(p_cle_id => l_parent_cle_id);
3745                                   Fetch parent_cle_csr into
3746                                                        l_parent_cle_start_date,
3747                                                        l_parent_cle_end_date;
3748                                   If parent_cle_csr%NOTFOUND then
3749                                       null;
3750                                   Else
3751                                       If trunc(l_clev_rec.start_date) = trunc(l_parent_cle_start_date) then
3752                                           --do not change the line date (do not stamp header date on line)
3753                                           null;
3754                                       Else
3755                                           --change line start date
3756                                           If trunc(l_parent_cle_start_date) <= trunc(x_chrv_rec.start_date) then
3757                                               l_clev_rec.start_date := x_chrv_rec.start_date;
3758                                           Elsif trunc(l_parent_cle_start_date) > trunc(x_chrv_rec.start_date) then
3759                                               l_clev_rec.start_date := l_parent_cle_start_date;
3760                                           End If;
3761                                       End If;
3762                                   End If;
3763                                   Close parent_cle_csr;
3764                               End If; --cle_start date > header date
3765 
3766                           elsif l_parent_cle_id is null then
3767                               null;
3768                           end if;
3769                       Elsif l_rbk_cpy = 'N' then
3770                           If l_cle_start_date <= x_chrv_rec.start_date then
3771                               l_clev_rec.start_date := x_chrv_rec.start_date;
3772                           elsif l_cle_start_date > x_chrv_rec.start_date then
3773                               null;
3774                           end if;
3775                       End If;
3776 
3777                   elsif l_modfn_mode = 'L' then
3778                       l_clev_rec.start_date := x_chrv_rec.start_date;
3779                   end if;
3780                   ---------------------------------------------------
3781                   --end of start date logic for subsidy lines
3782                   ---------------------------------------------------
3783 
3784                   ---------------------------------------------------
3785                   --start of end date logic for subsidy lines
3786                   --------------------------------------------------
3787                   l_max_subsidy_term := null;
3788                   open l_sub_csr(p_cle_id => l_cle_id);
3789                       fetch l_sub_csr into l_max_subsidy_term;
3790                       If l_sub_csr%NOTFOUND then
3791                           null;
3792                       End If;
3793                   close l_sub_csr;
3794                   If nvl(l_max_subsidy_term,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM  then
3795                       l_clev_rec.end_date := x_chrv_rec.end_date;
3796                   Elsif l_max_subsidy_term  <= 0 then
3797                       l_clev_rec.end_date := l_clev_rec.start_date;
3798                   Elsif l_max_subsidy_term > 0 then
3799                       l_clev_rec.end_date := add_months(l_clev_rec.start_date,l_max_subsidy_term) - 1;
3800                       If l_clev_rec.end_date > x_chrv_rec.end_date then
3801                           l_clev_rec.end_date := x_chrv_rec.end_date;
3802                       End If;
3803                   End If;
3804                   ---------------------------------------------------
3805                   --end of end date logic for subsidy lines
3806                   ---------------------------------------------------
3807 
3808               End If; --lty code not service fee or subsidy
3809 
3810 
3811               okl_okc_migration_pvt.update_contract_line(
3812                    p_api_version        => p_api_version,
3813                    p_init_msg_list        => p_init_msg_list,
3814                    x_return_status         => x_return_status,
3815                    x_msg_count             => x_msg_count,
3816                    x_msg_data              => x_msg_data,
3817                    p_clev_rec                => l_clev_rec,
3818                    x_clev_rec                => lx_clev_rec);
3819 
3820                -- check return status
3821                If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
3822                    raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3823                Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
3824                    raise OKL_API.G_EXCEPTION_ERROR;
3825                End If;
3826            End Loop;
3827            Close Cle_Csr;
3828         End Loop;
3829         Close top_cle_csr;
3830     Elsif l_modfn_mode = 'N' Then
3831         Null;
3832     End If;
3833 
3834     -- Bug# 6438785
3835     -- When the contract start date is changed, update the
3836     -- start dates for all payments based on the new contract or
3837     -- line start dates
3838     IF ((l_chrv_rec.start_date <> l_orig_chr_rec.start_date) AND
3839         (l_chrv_rec.scs_code = 'LEASE') ) THEN
3840 
3841       OKL_LA_PAYMENTS_PVT.update_pymt_start_date
3842         (p_api_version    => p_api_version,
3843          p_init_msg_list  => p_init_msg_list,
3844          x_return_status  => x_return_status,
3845          x_msg_count      => x_msg_count,
3846          x_msg_data       => x_msg_data,
3847          p_chr_id         => l_chrv_rec.id);
3848 
3849       If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
3850         raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3851       Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
3852         raise OKL_API.G_EXCEPTION_ERROR;
3853       End If;
3854 
3855     END IF;
3856     -- Bug# 6438785
3857 
3858     -- get id from OKC record
3859     l_khrv_rec.ID := x_chrv_rec.ID;
3860 
3861     -- check whether the shadow is present
3862     open l_khrv_csr(l_khrv_rec.id);
3863         fetch l_khrv_csr into l_dummy_var;
3864     close l_khrv_csr;
3865 
3866     -- call procedure in complex API
3867     -- if l_dummy_var is changed then the shadow is present
3868     -- and we need to update it, otherwise we need to create the shadow
3869     if (l_dummy_var = 'x') THEN
3870         OKL_KHR_PVT.Update_Row(
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_khrv_rec          => l_khrv_rec,
3877             x_khrv_rec          => x_khrv_rec);
3878     else
3879         OKL_KHR_PVT.Insert_Row(
3880               p_api_version        => p_api_version,
3881               p_init_msg_list        => p_init_msg_list,
3882             x_return_status     => x_return_status,
3883             x_msg_count         => x_msg_count,
3884             x_msg_data          => x_msg_data,
3885             p_khrv_rec          => l_khrv_rec,
3886             x_khrv_rec          => x_khrv_rec);
3887     end if;
3888 
3889     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
3890           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3891     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
3892           raise OKL_API.G_EXCEPTION_ERROR;
3893     End If;
3894 
3895     If p_edit_mode = 'Y' Then
3896     --Added for updating header status if required and cascading to lines
3897     If (x_khrv_rec.id is not null) OR (x_khrv_rec.id <> OKL_API.G_MISS_NUM) Then
3898         okl_contract_status_pub.cascade_lease_status_edit
3899                 (p_api_version     => p_api_version,
3900                  p_init_msg_list   => p_init_msg_list,
3901                 x_return_status   => x_return_status,
3902                 x_msg_count       => x_msg_count,
3903                 x_msg_data        => x_msg_data,
3904                 p_chr_id          => x_khrv_rec.id);
3905 
3906         If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
3907                raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3908         Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
3909                raise OKL_API.G_EXCEPTION_ERROR;
3910         End If;
3911     End If;
3912     End If;
3913 
3914   -- 4722839. Create zero interest schedules for LOAN (FLOAT, CATCHUP/CLEANUP)
3915   --          And LOAN-REVOLVING (FLOAT).
3916 
3917   OKL_K_RATE_PARAMS_PVT.get_product(
3918           p_api_version   => p_api_version,
3919           p_init_msg_list => p_init_msg_list,
3920           x_return_status => x_return_status,
3921           x_msg_count     => x_msg_count,
3922           x_msg_data      => x_msg_data,
3923           p_khr_id        => x_khrv_rec.ID,
3924           x_pdt_parameter_rec => l_pdt_parameter_rec);
3925 
3926   l_interest_calculation_basis :=l_pdt_parameter_rec.interest_calculation_basis;
3927   l_revenue_recognition_method :=l_pdt_parameter_rec.revenue_recognition_method;
3928   l_deal_type := l_pdt_parameter_rec.deal_type;
3929 
3930   --okl_debug_pub.logmessage('update_contract_header: l_deal_type=' || l_deal_type);
3931   --okl_debug_pub.logmessage('update_contract_header: l_interest_calculation_basis=' || l_interest_calculation_basis);
3932   IF (l_deal_type = 'LOAN' AND
3933       --l_interest_calculation_basis IN ('FLOAT', 'CATCHUP/CLEANUP')) OR
3934       l_interest_calculation_basis = 'FLOAT') OR
3935     (l_deal_type = 'LOAN-REVOLVING' AND
3936      l_interest_calculation_basis = 'FLOAT') THEN
3937     OKL_LA_PAYMENTS_PVT.VARIABLE_INTEREST_SCHEDULE (
3938           p_api_version   => p_api_version,
3939           p_init_msg_list => p_init_msg_list,
3940           x_return_status => x_return_status,
3941           x_msg_count     => x_msg_count,
3942           x_msg_data      => x_msg_data,
3943           p_chr_id        => l_khrv_rec.ID,
3944           x_rulv_tbl      => x_rulv_tbl
3945     );
3946 
3947     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
3948           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3949     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
3950           raise OKL_API.G_EXCEPTION_ERROR;
3951     End If;
3952 
3953   END IF;
3954 
3955     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
3956                                  x_msg_data                => x_msg_data);
3957   EXCEPTION
3958     when OKL_API.G_EXCEPTION_ERROR then
3959       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3960                         p_api_name  => l_api_name,
3961                         p_pkg_name  => g_pkg_name,
3962                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
3963                         x_msg_count => x_msg_count,
3964                         x_msg_data  => x_msg_data,
3965                         p_api_type  => g_api_type);
3966       if l_khrv_csr%ISOPEN then
3967           close l_khrv_csr;
3968         end if;
3969 
3970     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
3971       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3972                         p_api_name  => l_api_name,
3973                         p_pkg_name  => g_pkg_name,
3974                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
3975                         x_msg_count => x_msg_count,
3976                         x_msg_data  => x_msg_data,
3977                         p_api_type  => g_api_type);
3978       if l_khrv_csr%ISOPEN then
3979           close l_khrv_csr;
3980         end if;
3981 
3982     when OTHERS then
3983       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3984                         p_api_name  => l_api_name,
3985                         p_pkg_name  => g_pkg_name,
3986                         p_exc_name  => 'OTHERS',
3987                         x_msg_count => x_msg_count,
3988                         x_msg_data  => x_msg_data,
3989                         p_api_type  => g_api_type);
3990       if l_khrv_csr%ISOPEN then
3991           close l_khrv_csr;
3992         end if;
3993 
3994   END update_contract_header;
3995 
3996 -- Start of comments
3997 --
3998 -- Procedure Name  : update_contract_header
3999 -- Description     : updates contract header for shadowed contract  will be called
4000 --                   from updation of streams after stream generation
4001 --                   This will not flip the contract status
4002 -- Business Rules  :
4003 -- Parameters      :
4004 -- Version         : 1.0
4005 -- End of comments
4006   PROCEDURE update_contract_header(
4007     p_api_version                  IN NUMBER,
4008     p_init_msg_list                IN VARCHAR2,
4009     x_return_status                OUT NOCOPY VARCHAR2,
4010     x_msg_count                    OUT NOCOPY NUMBER,
4011     x_msg_data                     OUT NOCOPY VARCHAR2,
4012     p_restricted_update            IN VARCHAR2,
4013     p_chrv_rec                     IN  okl_okc_migration_pvt.chrv_rec_type,
4014     p_khrv_rec                     IN  khrv_rec_type,
4015     x_chrv_rec                     OUT NOCOPY okl_okc_migration_pvt.chrv_rec_type,
4016     x_khrv_rec                     OUT NOCOPY khrv_rec_type) IS
4017 
4018     l_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
4019     l_khrv_rec khrv_rec_type;
4020 
4021     l_api_name          CONSTANT VARCHAR2(30) := 'UPDATE_CONTRACT_HEADER';
4022     l_api_version               CONSTANT NUMBER          := 1.0;
4023     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
4024 
4025 
4026   BEGIN
4027 
4028     -- call START_ACTIVITY to create savepoint, check compatibility
4029     -- and initialize message list
4030     l_return_status := OKL_API.START_ACTIVITY(
4031                         p_api_name      => l_api_name,
4032                         p_pkg_name      => g_pkg_name,
4033                         p_init_msg_list => p_init_msg_list,
4034                         l_api_version   => l_api_version,
4035                         p_api_version   => p_api_version,
4036                         p_api_type      => g_api_type,
4037                         x_return_status => x_return_status);
4038 
4039     -- check if activity started successfully
4040     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4041        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4042     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
4043        raise OKL_API.G_EXCEPTION_ERROR;
4044     End If;
4045 
4046     l_khrv_rec := p_khrv_rec;
4047     l_chrv_rec := p_chrv_rec;
4048 
4049 
4050      update_contract_header(
4051              p_api_version        => p_api_version,
4052              p_init_msg_list        => p_init_msg_list,
4053              x_return_status         => x_return_status,
4054              x_msg_count             => x_msg_count,
4055              x_msg_data              => x_msg_data,
4056          p_restricted_update    => p_restricted_update,
4057              p_chrv_rec                => l_chrv_rec,
4058          p_khrv_rec     => l_khrv_rec,
4059          p_edit_mode    => 'Y',
4060              x_chrv_rec                => x_chrv_rec,
4061          x_khrv_rec     => x_khrv_rec
4062          );
4063 
4064     -- check return status
4065     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
4066           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4067     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
4068           raise OKL_API.G_EXCEPTION_ERROR;
4069     End If;
4070 
4071 
4072     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
4073                                  x_msg_data                => x_msg_data);
4074   EXCEPTION
4075     when OKL_API.G_EXCEPTION_ERROR then
4076       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4077                         p_api_name  => l_api_name,
4078                         p_pkg_name  => g_pkg_name,
4079                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
4080                         x_msg_count => x_msg_count,
4081                         x_msg_data  => x_msg_data,
4082                         p_api_type  => g_api_type);
4083 
4084     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
4085       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4086                         p_api_name  => l_api_name,
4087                         p_pkg_name  => g_pkg_name,
4088                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
4089                         x_msg_count => x_msg_count,
4090                         x_msg_data  => x_msg_data,
4091                         p_api_type  => g_api_type);
4092 
4093     when OTHERS then
4094       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4095                         p_api_name  => l_api_name,
4096                         p_pkg_name  => g_pkg_name,
4097                         p_exc_name  => 'OTHERS',
4098                         x_msg_count => x_msg_count,
4099                         x_msg_data  => x_msg_data,
4100                         p_api_type  => g_api_type);
4101 
4102   END update_contract_header;
4103 
4104 
4105 -- Start of comments
4106 --
4107 -- Procedure Name  : update_contract_header
4108 -- Description     : creates contract header for shadowed contract
4109 -- Business Rules  :
4110 -- Parameters      :
4111 -- Version         : 1.0
4112 -- End of comments
4113   PROCEDURE update_contract_header(
4114     p_api_version                  IN NUMBER,
4115     p_init_msg_list                IN VARCHAR2,
4116     x_return_status                OUT NOCOPY VARCHAR2,
4117     x_msg_count                    OUT NOCOPY NUMBER,
4118     x_msg_data                     OUT NOCOPY VARCHAR2,
4119     p_restricted_update            IN VARCHAR2,
4120     p_chrv_tbl                     IN  okl_okc_migration_pvt.chrv_tbl_type,
4121     p_khrv_tbl                     IN  khrv_tbl_type,
4122     x_chrv_tbl                     OUT NOCOPY okl_okc_migration_pvt.chrv_tbl_type,
4123     x_khrv_tbl                     OUT NOCOPY khrv_tbl_type) IS
4124 
4125     l_api_name          CONSTANT VARCHAR2(30) := 'UPDATE_CONTRACT_HEADER';
4126     l_api_version               CONSTANT NUMBER          := 1.0;
4127     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
4128     l_overall_status    VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
4129     i                           NUMBER;
4130     l_khrv_tbl                  khrv_tbl_type := p_khrv_tbl;
4131   BEGIN
4132     -- call START_ACTIVITY to create savepoint, check compatibility
4133     -- and initialize message list
4134     l_return_status := OKL_API.START_ACTIVITY(
4135                         p_api_name      => l_api_name,
4136                         p_pkg_name      => g_pkg_name,
4137                         p_init_msg_list => p_init_msg_list,
4138                         l_api_version   => l_api_version,
4139                         p_api_version   => p_api_version,
4140                         p_api_type      => g_api_type,
4141                         x_return_status => x_return_status);
4142 
4143     -- check if activity started successfully
4144     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4145        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4146     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
4147        raise OKL_API.G_EXCEPTION_ERROR;
4148 
4149     End If;
4150 
4151     If (p_chrv_tbl.COUNT > 0) Then
4152            i := p_chrv_tbl.FIRST;
4153            LOOP
4154                 -- call procedure in complex API for a record
4155                 update_contract_header(
4156                         p_api_version                => p_api_version,
4157                         p_init_msg_list                => p_init_msg_list,
4158                         x_return_status         => x_return_status,
4159                         x_msg_count             => x_msg_count,
4160                         x_msg_data              => x_msg_data,
4161                         p_restricted_update    => p_restricted_update,
4162                         p_chrv_rec                => p_chrv_tbl(i),
4163                         p_khrv_rec                => l_khrv_tbl(i),
4164                         x_chrv_rec                => x_chrv_tbl(i),
4165                         x_khrv_rec                => x_khrv_tbl(i));
4166 
4167                 If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
4168                    If l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR Then
4169                          l_overall_status := x_return_status;
4170                    End If;
4171                 End If;
4172 
4173         EXIT WHEN (i = p_chrv_tbl.LAST);
4174                 i := p_chrv_tbl.NEXT(i);
4175            END LOOP;
4176 
4177            -- return overall status
4178            x_return_status := l_overall_status;
4179     End If;
4180 
4181     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
4182           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4183     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
4184           raise OKL_API.G_EXCEPTION_ERROR;
4185     End If;
4186 
4187     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
4188                                  x_msg_data                => x_msg_data);
4189   EXCEPTION
4190     when OKL_API.G_EXCEPTION_ERROR then
4191       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4192                         p_api_name  => l_api_name,
4193                         p_pkg_name  => g_pkg_name,
4194                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
4195                         x_msg_count => x_msg_count,
4196                         x_msg_data  => x_msg_data,
4197                         p_api_type  => g_api_type);
4198 
4199     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
4200       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4201                         p_api_name  => l_api_name,
4202                         p_pkg_name  => g_pkg_name,
4203                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
4204                         x_msg_count => x_msg_count,
4205                         x_msg_data  => x_msg_data,
4206                         p_api_type  => g_api_type);
4207 
4208     when OTHERS then
4209       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4210                         p_api_name  => l_api_name,
4211                         p_pkg_name  => g_pkg_name,
4212                         p_exc_name  => 'OTHERS',
4213                         x_msg_count => x_msg_count,
4214                         x_msg_data  => x_msg_data,
4215                         p_api_type  => g_api_type);
4216 
4217   END update_contract_header;
4218 
4219 
4220 -------------------------------------------------------------------------------------------------
4221 -- Start of Commnets
4222 -- Procedure Name       : delete_contracte
4223 -- Description          : delete of the contract
4224 -- Business Rules       :
4225 -- Parameters           :
4226 -- Version              :
4227 -- End of Commnets
4228   PROCEDURE delete_contract(
4229           p_api_version      IN  NUMBER,
4230           p_init_msg_list    IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
4231           x_return_status    OUT NOCOPY VARCHAR2,
4232           x_msg_count        OUT NOCOPY NUMBER,
4233           x_msg_data         OUT NOCOPY VARCHAR2,
4234           p_contract_id      IN  okc_k_headers_b.id%TYPE) IS
4235 
4236     SUBTYPE chrv_rec_type IS OKL_OKC_MIGRATION_PVT.CHRV_REC_TYPE;
4237     SUBTYPE khrv_rec_type IS OKL_CONTRACT_PUB.KHRV_REC_TYPE;
4238     G_TLS_TYPE                              OKC_LINE_STYLES_V.LSE_TYPE%TYPE := 'TLS';
4239     G_APP_NAME                  CONSTANT  VARCHAR2(3)   :=  OKL_API.G_APP_NAME;
4240     G_NO_MATCHING_RECORD          CONSTANT VARCHAR2(200) := 'OKL_LLA_NO_MATCHING_RECORD';
4241     G_PKG_NAME                  CONSTANT  VARCHAR2(200) := 'OKL_OPEN_INTERFACE_PVT';
4242     G_COL_NAME_TOKEN              CONSTANT VARCHAR2(200) := OKL_API.G_COL_NAME_TOKEN;
4243   G_CANNOT_DELETE VARCHAR2(200) := 'OKC_CANNOT_DELETE';
4244   G_TABLE_NAME_TOKEN VARCHAR2(200) := 'TABLE_NAME';
4245   G_UNEXPECTED_ERROR CONSTANT VARCHAR2(200) := 'OKC_CONTRACT_UNEXPECTED_ERROR';
4246   G_SQLCODE_TOKEN VARCHAR2(200) := 'SQLcode';
4247   G_SQLERRM_TOKEN VARCHAR2(200) := 'SQLerrm';
4248 
4249     l_api_name      CONSTANT VARCHAR2(30) := 'DELETE_CONTRACT';
4250     l_chrv_rec2              OKC_CONTRACT_PUB.chrv_rec_type;
4251     l_chrv_rec               chrv_rec_type;
4252     l_khrv_rec               khrv_rec_type;
4253     l_tcnv_rec               OKL_TRX_CONTRACTS_PVT.tcnv_rec_type;
4254     lx_tcnv_rec              OKL_TRX_CONTRACTS_PVT.tcnv_rec_type;
4255     l_stmv_rec               OKL_STREAMS_PUB.stmv_rec_type;
4256     r_tcnv_rec               OKL_TRX_CONTRACTS_PVT.tcnv_rec_type;
4257     l_sts_code               OKC_K_HEADERS_B.STS_CODE%TYPE;
4258 
4259     l_orig_system_source_code okc_k_headers_b.orig_system_source_code%type;
4260     l_contract_number okc_k_headers_b.contract_number%type;
4261     l_funding_count number := 0;
4262     l_chr_ever_booked varchar2(1);
4263     l_chr_invoices varchar2(1);
4264     l_receipts_csr number;
4265     l_authoring_org_id NUMBER; --CDUBEY l_authoring_org_id added for MOAC
4266 
4267     CURSOR check_receipts_csr(p_id number) IS
4268     SELECT 'Y'
4269     FROM   okl_trx_ar_invoices_b
4270     WHERE khr_id = p_id
4271     AND   trx_status_code <> 'ERROR'
4272     AND   rownum < 2;
4273 
4274     CURSOR Ever_Booked_crs(p_id number) IS
4275     SELECT 'Y'
4276     FROM   okc_k_headers_bh chrh,
4277            okc_k_headers_b chr
4278     WHERE  chrh.contract_number = chr.contract_number
4279     AND    chr.id = p_id
4280     AND    chrh.sts_code = G_OKL_BOOKED_STS_CODE
4281     AND    rownum < 2;
4282 
4283     CURSOR c_get_k_stream(p_khr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE) IS
4284     SELECT id stm_id
4285     FROM OKL_STREAMS
4286     WHERE khr_id = p_khr_id;
4287 
4288     CURSOR c_get_je_trans(p_khr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE) IS
4289     SELECT id trx_id
4290     FROM OKL_TRX_CONTRACTS
4291     WHERE khr_id = p_khr_id
4292     AND   representation_type = 'PRIMARY';
4293 
4294     CURSOR c_get_source_id(p_khr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE) IS
4295     SELECT id
4296     FROM OKL_TXL_CNTRCT_LNS
4297     WHERE khr_id = p_khr_id;
4298 
4299     CURSOR c_get_k_top_line(p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE) IS
4300     SELECT cle.id top_line
4301     FROM okc_line_styles_b lse,
4302          okc_k_lines_b cle
4303     WHERE cle.dnz_chr_id = p_dnz_chr_id
4304     AND cle.cle_id IS NULL
4305     AND cle.chr_id = cle.dnz_chr_id
4306     AND cle.lse_id = lse.id
4307     AND lse.lse_parent_id IS NULL
4308     AND lse.lse_type = G_TLS_TYPE;
4309 
4310     -- To get the orig system id for p_chr_id
4311     CURSOR get_sts_code(p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
4312     SELECT sts_code, orig_system_source_code, contract_number,authoring_org_id --CDUBEY authoring_org_id added for MOAC
4313     FROM okc_k_headers_b
4314     WHERE id = p_chr_id;
4315 
4316 
4317 FUNCTION DELETE_GOVERNANCES( p_chr_id number) Return varchar2 IS
4318   l_return_status varchar2(30);
4319   l_gvev_tbl_in okc_contract_pub.gvev_tbl_type;
4320 
4321   CURSOR l_gvev_csr (p_id  IN NUMBER) IS
4322     SELECT ID
4323      FROM OKC_GOVERNANCES_V
4324      WHERE dnz_chr_id = p_id;
4325 
4326 Begin
4327 
4328    l_return_status := OKC_API.G_RET_STS_SUCCESS;
4329 
4330    FOR rec IN l_gvev_csr(p_chr_id)
4331    LOOP
4332 
4333          l_gvev_tbl_in(1).ID := rec.id;
4334 
4335          okc_contract_pub.delete_governance (
4336                 p_api_version                => p_api_version,
4337                 p_init_msg_list        => p_init_msg_list,
4338                 x_return_status        => l_return_status,
4339                 x_msg_count                => x_msg_count,
4340                 x_msg_data                => x_msg_data,
4341                 p_gvev_tbl                => l_gvev_tbl_in
4342                 );
4343 
4344              If (l_return_status <> 'S') Then
4345              OKC_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
4346                                  p_msg_name     => G_CANNOT_DELETE,
4347                                  p_token1       => G_TABLE_NAME_TOKEN,
4348                                  p_token1_value => 'Governances',
4349                                  p_token2       => G_SQLCODE_TOKEN,
4350                                  p_token2_value => sqlcode,
4351                                  p_token3       => G_SQLERRM_TOKEN,
4352                                  p_token3_value => sqlerrm);
4353                    Exit;
4354                 End If;
4355    END LOOP;
4356    return l_return_status;
4357   EXCEPTION
4358        -- other appropriate handlers
4359        When others then
4360        -- store SQL error message on message stack
4361              OKC_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
4362                                  p_msg_name     => G_UNEXPECTED_ERROR,
4363                                  p_token1       => G_SQLCODE_TOKEN,
4364                                  p_token1_value => sqlcode,
4365                                  p_token2       => G_SQLERRM_TOKEN,
4366                                  p_token2_value => sqlerrm);
4367 
4368        -- notify  UNEXPECTED error
4369              l_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
4370              return l_return_status;
4371 END DELETE_GOVERNANCES;
4372 
4373 FUNCTION DELETE_RULE_GROUPS( p_chr_id number) Return varchar2 IS
4374 
4375   l_return_status varchar2(30);
4376   l_rgpv_tbl_in OKC_RULE_PUB.rgpv_tbl_type;
4377 
4378   CURSOR l_rgpv_csr (p_id  IN NUMBER) IS
4379     SELECT ID
4380      FROM OKC_RULE_GROUPS_V
4381      WHERE dnz_chr_id = p_id;
4382 
4383 Begin
4384 
4385    l_return_status := OKC_API.G_RET_STS_SUCCESS;
4386 
4387    FOR rec IN l_rgpv_csr(p_chr_id)
4388    LOOP
4389          l_rgpv_tbl_in(1).ID := rec.id;
4390 
4391          OKC_RULE_PUB.delete_rule_group (
4392                 p_api_version                => p_api_version,
4393                 p_init_msg_list        => p_init_msg_list,
4394                 x_return_status        => l_return_status,
4395                 x_msg_count                => x_msg_count,
4396                 x_msg_data                => x_msg_data,
4397                 p_rgpv_tbl                => l_rgpv_tbl_in
4398                 );
4399 
4400              If (l_return_status <> 'S') Then
4401              OKC_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
4402                                  p_msg_name     => G_CANNOT_DELETE,
4403                                  p_token1       => G_TABLE_NAME_TOKEN,
4404                                  p_token1_value => 'Rule Groups',
4405                                  p_token2       => G_SQLCODE_TOKEN,
4406                                  p_token2_value => sqlcode,
4407                                  p_token3       => G_SQLERRM_TOKEN,
4408                                  p_token3_value => sqlerrm);
4409                    Exit;
4410                 End If;
4411    END LOOP;
4412    return l_return_status;
4413   EXCEPTION
4414        -- other appropriate handlers
4415        When others then
4416        -- store SQL error message on message stack
4417              OKC_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
4418                                  p_msg_name     => G_UNEXPECTED_ERROR,
4419                                  p_token1       => G_SQLCODE_TOKEN,
4420                                  p_token1_value => sqlcode,
4421                                  p_token2       => G_SQLERRM_TOKEN,
4422                                  p_token2_value => sqlerrm);
4423 
4424        -- notify  UNEXPECTED error
4425              l_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
4426              return l_return_status;
4427 END DELETE_RULE_GROUPS;
4428 
4429 FUNCTION DELETE_K_PARTY_ROLES( p_chr_id number) Return varchar2 IS
4430 
4431   --Bug# 4558486
4432   l_cplv_tbl_in OKL_OKC_MIGRATION_PVT.cplv_tbl_type;
4433   l_return_status varchar2(30);
4434 
4435   CURSOR l_cplv_csr (p_id  IN NUMBER) IS
4436     SELECT ID
4437      FROM OKC_K_PARTY_ROLES_V
4438      WHERE dnz_chr_id = p_id;
4439 
4440   --Bug# 4558486
4441   l_kplv_tbl_in  OKL_K_PARTY_ROLES_PVT.kplv_tbl_type;
4442 Begin
4443 
4444    l_return_status := OKC_API.G_RET_STS_SUCCESS;
4445 
4446    FOR rec IN l_cplv_csr(p_chr_id)
4447    LOOP
4448          l_cplv_tbl_in(1).ID := rec.id;
4449 
4450          --Bug# 4558486: Changed call to okl_k_party_roles_pvt api
4451        --              to delete records in tables
4452        --              okc_k_party_roles_b and okl_k_party_roles
4453 
4454         l_kplv_tbl_in(1).ID := l_cplv_tbl_in(1).ID;
4455         OKL_K_PARTY_ROLES_PVT.DELETE_K_PARTY_ROLE (
4456           p_api_version         => p_api_version,
4457           p_init_msg_list       => p_init_msg_list,
4458           x_return_status       => x_return_status,
4459           x_msg_count           => x_msg_count,
4460           x_msg_data            => x_msg_data,
4461           p_cplv_tbl            => l_cplv_tbl_in,
4462           p_kplv_tbl          => l_kplv_tbl_in
4463                 );
4464 
4465              If (l_return_status <> 'S') Then
4466              OKC_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
4467                                  p_msg_name     => G_CANNOT_DELETE,
4468                                  p_token1       => G_TABLE_NAME_TOKEN,
4469                                  p_token1_value => 'Contract Party Roles',
4470                                  p_token2       => G_SQLCODE_TOKEN,
4471                                  p_token2_value => sqlcode,
4472                                  p_token3       => G_SQLERRM_TOKEN,
4473                                  p_token3_value => sqlerrm);
4474                    Exit;
4475                 End If;
4476    END LOOP;
4477    return l_return_status;
4478   EXCEPTION
4479        -- other appropriate handlers
4480        When others then
4481        -- store SQL error message on message stack
4482              OKC_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
4483                                  p_msg_name     => G_UNEXPECTED_ERROR,
4484                                  p_token1       => G_SQLCODE_TOKEN,
4485                                  p_token1_value => sqlcode,
4486                                  p_token2       => G_SQLERRM_TOKEN,
4487                                  p_token2_value => sqlerrm);
4488 
4489        -- notify  UNEXPECTED error
4490              l_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
4491              return l_return_status;
4492 END DELETE_K_PARTY_ROLES;
4493 
4494 FUNCTION DELETE_CONTACTS( p_chr_id number) Return varchar2 IS
4495 
4496   l_ctcv_tbl_in OKC_CONTRACT_PARTY_PUB.ctcv_tbl_type;
4497   l_return_status varchar2(30);
4498 
4499   CURSOR l_ctc_csr (p_id  IN NUMBER) IS
4500     SELECT ID
4501      FROM OKC_CONTACTS_V
4502      WHERE dnz_chr_id = p_id;
4503 
4504 Begin
4505    l_return_status := OKC_API.G_RET_STS_SUCCESS;
4506 
4507    FOR rec IN l_ctc_csr(p_chr_id)
4508    LOOP
4509 
4510          l_ctcv_tbl_in(1).ID := rec.id;
4511 
4512          OKC_CONTRACT_PARTY_PUB.Delete_Contact(
4513                         p_api_version     => p_api_version,
4514                         p_init_msg_list   => p_init_msg_list,
4515                         x_return_status   => x_return_status,
4516                         x_msg_count       => x_msg_count,
4517                         x_msg_data        => x_msg_data,
4518                         p_ctcv_tbl        => l_ctcv_tbl_in);
4519 
4520              If (l_return_status <> 'S') Then
4521              OKC_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
4522                                  p_msg_name     => G_CANNOT_DELETE,
4523                                  p_token1       => G_TABLE_NAME_TOKEN,
4524                                  p_token1_value => 'Contacts',
4525                                  p_token2       => G_SQLCODE_TOKEN,
4526                                  p_token2_value => sqlcode,
4527                                  p_token3       => G_SQLERRM_TOKEN,
4528                                  p_token3_value => sqlerrm);
4529                    Exit;
4530                 End If;
4531    END LOOP;
4532    return l_return_status;
4533   EXCEPTION
4534        -- other appropriate handlers
4535        When others then
4536        -- store SQL error message on message stack
4537              OKC_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
4538                                  p_msg_name     => G_UNEXPECTED_ERROR,
4539                                  p_token1       => G_SQLCODE_TOKEN,
4540                                  p_token1_value => sqlcode,
4541                                  p_token2       => G_SQLERRM_TOKEN,
4542                                  p_token2_value => sqlerrm);
4543 
4544        -- notify  UNEXPECTED error
4545              l_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
4546              return l_return_status;
4547 END DELETE_CONTACTS;
4548 
4549 FUNCTION DELETE_RG_PARTY_ROLES( p_chr_id number) Return varchar2 IS
4550 
4551   l_rmpv_tbl_in OKC_RULE_PUB.rmpv_tbl_type;
4552   l_return_status varchar2(30);
4553 
4554   CURSOR l_rmpv_csr (p_id  IN NUMBER) IS
4555     SELECT ID
4556      FROM OKC_RG_PARTY_ROLES_V
4557      WHERE dnz_chr_id = p_id;
4558 
4559 Begin
4560 
4561    l_return_status := OKC_API.G_RET_STS_SUCCESS;
4562 
4563    FOR rec IN l_rmpv_csr(p_chr_id)
4564    LOOP
4565          l_rmpv_tbl_in(1).ID := rec.id;
4566 
4567          OKC_RULE_PUB.delete_rg_mode_pty_role (
4568                 p_api_version                => p_api_version,
4569                 p_init_msg_list        => p_init_msg_list,
4570                 x_return_status        => x_return_status,
4571                 x_msg_count                => x_msg_count,
4572                 x_msg_data                => x_msg_data,
4573                 p_rmpv_tbl                => l_rmpv_tbl_in
4574                 );
4575 
4576              If (l_return_status <> 'S') Then
4577              OKC_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
4578                                  p_msg_name     => G_CANNOT_DELETE,
4579                                  p_token1       => G_TABLE_NAME_TOKEN,
4580                                  p_token1_value => 'Rule Group Party Roles',
4581                                  p_token2       => G_SQLCODE_TOKEN,
4582                                  p_token2_value => sqlcode,
4583                                  p_token3       => G_SQLERRM_TOKEN,
4584                                  p_token3_value => sqlerrm);
4585                    Exit;
4586                 End If;
4587    END LOOP;
4588    return l_return_status;
4589   EXCEPTION
4590        -- other appropriate handlers
4591        When others then
4592        -- store SQL error message on message stack
4593              OKC_API.SET_MESSAGE(p_app_name     => G_APP_NAME,
4594                                  p_msg_name     => G_UNEXPECTED_ERROR,
4595                                  p_token1       => G_SQLCODE_TOKEN,
4596                                  p_token1_value => sqlcode,
4597                                  p_token2       => G_SQLERRM_TOKEN,
4598                                  p_token2_value => sqlerrm);
4599 
4600        -- notify  UNEXPECTED error
4601              l_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
4602              return l_return_status;
4603 END DELETE_RG_PARTY_ROLES;
4604 
4605 
4606   BEGIN
4607     x_return_status      := OKL_API.G_RET_STS_SUCCESS;
4608     -- Call start_activity to create savepoint, check compatibility
4609     -- and initialize message list
4610     x_return_status := OKL_API.START_ACTIVITY (
4611                                l_api_name
4612                                ,p_init_msg_list
4613                                ,'_PVT'
4614                                ,x_return_status);
4615     -- Check if activity started successfully
4616     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4617        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4618     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4619        RAISE OKL_API.G_EXCEPTION_ERROR;
4620     END IF;
4621     -- Get the Orig system id1
4622     OPEN  get_sts_code(p_chr_id => p_contract_id);
4623     FETCH get_sts_code INTO l_sts_code,
4624                             l_orig_system_source_code,
4625                             l_contract_number,
4626 			    l_authoring_org_id; --CDUBEY l_authoring_org_id added for MOAC
4627     IF get_sts_code%NOTFOUND THEN
4628       OKL_API.set_message(p_app_name     => G_APP_NAME,
4629                           p_msg_name     => G_NO_MATCHING_RECORD,
4630                           p_token1       => G_COL_NAME_TOKEN,
4631                           p_token1_value => 'p_chr_id');
4632       x_return_status := OKL_API.G_RET_STS_ERROR;
4633       RAISE OKL_API.G_EXCEPTION_ERROR;
4634     END IF;
4635     CLOSE get_sts_code;
4636 
4637     -- Check rebook copy contract
4638     if (nvl(l_orig_system_source_code, 'N') = 'OKL_REBOOK') then
4639       OKL_API.set_message(p_app_name     => G_APP_NAME,
4640                           p_msg_name     => G_DELETE_CONT_RBK_ERROR,
4641                           p_token1       => 'CONTRACT_NUMBER',
4642                           p_token1_value =>  l_contract_number);
4643       x_return_status := OKL_API.G_RET_STS_ERROR;
4644       RAISE OKL_API.G_EXCEPTION_ERROR;
4645     end if;
4646 
4647     -- Check if funding txn exists
4648     l_funding_count := 0;
4649     -- sjalasut, added okl_txl_ap_inv_lns_all_b as part of OKLR12B disbursements project
4650     -- also changed the reference of okl_trx_ap_invoices_v to okl_trx_ap_invoices_b
4651     select count(1) into l_funding_count
4652     from   okl_trx_ap_invoices_b a
4653            ,okl_txl_ap_inv_lns_all_b b
4654     where a.id = b.tap_id
4655     and  b.khr_id = p_contract_id
4656     and a.funding_type_code is not null
4657     and rownum < 2;
4658 
4659     if (l_funding_count > 0) then
4660       OKL_API.set_message(p_app_name     => G_APP_NAME,
4661                           p_msg_name     => G_DELETE_CONT_FUND_ERROR,
4662                           p_token1       => 'CONTRACT_NUMBER',
4663                           p_token1_value =>  l_contract_number);
4664       x_return_status := OKL_API.G_RET_STS_ERROR;
4665       RAISE OKL_API.G_EXCEPTION_ERROR;
4666     end if;
4667 
4668      --check if contract was ever booked
4669      l_chr_ever_booked := 'N';
4670      Open  Ever_Booked_crs(p_id => p_contract_id);
4671          Fetch Ever_Booked_crs into l_chr_ever_booked;
4672 
4673      Close Ever_Booked_crs;
4674 
4675      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4676             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_chr_ever_booked=' || l_chr_ever_booked);
4677      END IF;
4678      If nvl(l_chr_ever_booked, 'N') = 'Y' Then
4679          OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4680                              p_msg_name => G_PAST_BOOKED_KLE_DELETE);
4681          x_return_status := OKL_API.G_RET_STS_ERROR;
4682          Raise OKL_API.G_EXCEPTION_ERROR;
4683      End If;
4684 
4685      --check if contract has receivables invoices
4686      l_chr_invoices := 'N';
4687      Open  check_receipts_csr(p_id => p_contract_id);
4688          Fetch check_receipts_csr into l_chr_invoices;
4689          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4690                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In okl_contract_pvt.delete_contract: ' || p_contract_id || ':' || l_chr_invoices);
4691          END IF;
4692 
4693      Close check_receipts_csr;
4694 
4695      If nvl(l_chr_invoices, 'N') = 'Y' Then
4696          OKL_API.SET_MESSAGE(p_app_name => g_app_name,
4697                              p_msg_name => G_DELETE_CONT_RCPT_ERROR,
4698                              p_token1       => 'CONTRACT_NUMBER',
4699                              p_token1_value =>  l_contract_number);
4700          x_return_status := OKL_API.G_RET_STS_ERROR;
4701          RAISE OKL_API.G_EXCEPTION_ERROR;
4702      End If;
4703 
4704     --debug_message('l_sts_code=' || l_sts_code);
4705     if l_sts_code not in ('NEW', 'INCOMPLETE', 'PASSED', 'COMPLETE', 'APPROVED', 'PENDING_APPROVAL') then
4706       OKL_API.set_message(p_app_name     => G_APP_NAME,
4707                           p_msg_name     => G_DELETE_CONT_ERROR,
4708                           p_token1       => 'CONTRACT_NUMBER',
4709                           p_token1_value =>  l_contract_number,
4710                           p_token2       => 'STATUS',
4711                           p_token2_value =>  l_sts_code);
4712       x_return_status := OKL_API.G_RET_STS_ERROR;
4713       RAISE OKL_API.G_EXCEPTION_ERROR;
4714     end if;
4715 
4716     -- Deleting the Draft journal Entries
4717     FOR r_get_source_id IN c_get_source_id(p_khr_id => p_contract_id) LOOP
4718       OKL_ACCOUNT_DIST_PUB.DELETE_ACCT_ENTRIES(
4719                             p_api_version   => p_api_version,
4720                             p_init_msg_list => p_init_msg_list,
4721                             x_return_status => x_return_status,
4722                             x_msg_count     => x_msg_count,
4723                             x_msg_data      => x_msg_data,
4724                             p_source_id     => r_get_source_id.id,
4725                             p_source_table  => 'OKL_TXL_CNTRCT_LNS');
4726       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4727         EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4728       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4729         EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4730       END IF;
4731     END LOOP;
4732     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4733        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4734     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4735        RAISE OKL_API.G_EXCEPTION_ERROR;
4736     END IF;
4737     -- Deleting the transctions of the journal Entries
4738     FOR r_get_je_trans IN c_get_je_trans(p_khr_id => p_contract_id) LOOP
4739       r_tcnv_rec.id := r_get_je_trans.trx_id;
4740       OKL_TRX_CONTRACTS_PUB.delete_trx_contracts(
4741                             p_api_version   => p_api_version,
4742                             p_init_msg_list => p_init_msg_list,
4743                             x_return_status => x_return_status,
4744                             x_msg_count     => x_msg_count,
4745                             x_msg_data      => x_msg_data,
4746                             p_tcnv_rec      => r_tcnv_rec);
4747       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4748         EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4749       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4750         EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4751       END IF;
4752     END LOOP;
4753     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4754        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4755     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4756        RAISE OKL_API.G_EXCEPTION_ERROR;
4757     END IF;
4758     -- Delete the streams for the contract
4759     FOR r_get_k_stream IN c_get_k_stream(p_khr_id => p_contract_id) LOOP
4760       l_stmv_rec.id := r_get_k_stream.stm_id;
4761       OKL_STREAMS_PUB.delete_streams(
4762                               p_api_version   => p_api_version,
4763                               p_init_msg_list => p_init_msg_list,
4764                               x_return_status => x_return_status,
4765                               x_msg_count     => x_msg_count,
4766                               x_msg_data      => x_msg_data,
4767                               p_stmv_rec      => l_stmv_rec);
4768       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4769         EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4770       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4771         EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4772       END IF;
4773     END LOOP;
4774     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4775        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4776     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4777        RAISE OKL_API.G_EXCEPTION_ERROR;
4778     END IF;
4779     -- Delete the contract lines
4780     FOR r_get_k_top_line IN c_get_k_top_line(p_dnz_chr_id => p_contract_id) LOOP
4781       OKL_CONTRACT_PUB.delete_contract_line(
4782                        p_api_version        => p_api_version,
4783                        p_init_msg_list      => p_init_msg_list,
4784                        x_return_status      => x_return_status,
4785                        x_msg_count          => x_msg_count,
4786                        x_msg_data           => x_msg_data,
4787                        p_line_id            => r_get_k_top_line.top_line);
4788       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4789         EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4790       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4791         EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4792       END IF;
4793     END LOOP;
4794     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4795        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4796     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4797        RAISE OKL_API.G_EXCEPTION_ERROR;
4798     END IF;
4799 
4800     OKC_K_HISTORY_PUB.delete_all_rows(
4801                      p_api_version        => p_api_version,
4802                      p_init_msg_list      => p_init_msg_list,
4803                      x_return_status      => x_return_status,
4804                      x_msg_count          => x_msg_count,
4805                      x_msg_data           => x_msg_data,
4806                      p_chr_id             => p_contract_id);
4807     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4808        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4809     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4810        RAISE OKL_API.G_EXCEPTION_ERROR;
4811     END IF;
4812 
4813     x_return_status := DELETE_GOVERNANCES(p_contract_id);
4814     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4815        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4816     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4817        RAISE OKL_API.G_EXCEPTION_ERROR;
4818     END IF;
4819 
4820     x_return_status := DELETE_RULE_GROUPS(p_contract_id);
4821     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4822        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4823     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4824        RAISE OKL_API.G_EXCEPTION_ERROR;
4825     END IF;
4826 
4827     x_return_status := DELETE_CONTACTS(p_contract_id);
4828     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4829        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4830     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4831        RAISE OKL_API.G_EXCEPTION_ERROR;
4832     END IF;
4833 
4834     x_return_status := DELETE_K_PARTY_ROLES(p_contract_id);
4835     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4836        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4837     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4838        RAISE OKL_API.G_EXCEPTION_ERROR;
4839     END IF;
4840 
4841     x_return_status := DELETE_RG_PARTY_ROLES(p_contract_id);
4842     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4843        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4844     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4845        RAISE OKL_API.G_EXCEPTION_ERROR;
4846     END IF;
4847 
4848     DELETE OKL_K_RATE_PARAMS
4849     WHERE  KHR_ID = p_contract_id;
4850 
4851     -- Now the Delete the Header
4852 
4853     l_chrv_rec.id := p_contract_id;
4854     l_chrv_rec.authoring_org_id :=l_authoring_org_id; --CDUBEY added for MOAC
4855     l_khrv_rec.id := p_contract_id;
4856 
4857 
4858 
4859     OKL_CONTRACT_PUB.delete_contract_header(
4860                      p_api_version        => p_api_version,
4861                      p_init_msg_list      => p_init_msg_list,
4862                      x_return_status      => x_return_status,
4863                      x_msg_count          => x_msg_count,
4864                      x_msg_data           => x_msg_data,
4865                      p_chrv_rec           => l_chrv_rec,
4866                      p_khrv_rec           => l_khrv_rec);
4867     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4868        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4869     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4870        RAISE OKL_API.G_EXCEPTION_ERROR;
4871     END IF;
4872 
4873     OKL_API.END_ACTIVITY (x_msg_count,
4874                           x_msg_data );
4875     -- since we need to do this beacuse we need to delete to the contract
4876     --COMMIT;
4877   EXCEPTION
4878     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4879     IF c_get_k_top_line%ISOPEN THEN
4880       CLOSE c_get_k_top_line;
4881     END IF;
4882     IF get_sts_code%ISOPEN THEN
4883       CLOSE get_sts_code;
4884     END IF;
4885 
4886     IF c_get_k_stream%ISOPEN THEN
4887       CLOSE c_get_k_stream;
4888     END IF;
4889     IF c_get_je_trans%ISOPEN THEN
4890       CLOSE c_get_je_trans;
4891     END IF;
4892     IF c_get_source_id%ISOPEN THEN
4893       CLOSE c_get_source_id;
4894     END IF;
4895     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4896                                l_api_name,
4897                                G_PKG_NAME,
4898                                'OKL_API.G_RET_STS_ERROR',
4899                                x_msg_count,
4900                                x_msg_data,
4901                                '_PVT');
4902     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4903     IF c_get_k_top_line%ISOPEN THEN
4904       CLOSE c_get_k_top_line;
4905     END IF;
4906     IF get_sts_code%ISOPEN THEN
4907       CLOSE get_sts_code;
4908     END IF;
4909 
4910     IF c_get_k_stream%ISOPEN THEN
4911       CLOSE c_get_k_stream;
4912     END IF;
4913     IF c_get_je_trans%ISOPEN THEN
4914       CLOSE c_get_je_trans;
4915     END IF;
4916     IF c_get_source_id%ISOPEN THEN
4917       CLOSE c_get_source_id;
4918     END IF;
4919     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4920                               l_api_name,
4921                               G_PKG_NAME,
4922                               'OKL_API.G_RET_STS_UNEXP_ERROR',
4923                               x_msg_count,
4924                               x_msg_data,
4925                               '_PVT');
4926     WHEN OTHERS THEN
4927     IF c_get_k_top_line%ISOPEN THEN
4928       CLOSE c_get_k_top_line;
4929     END IF;
4930     IF get_sts_code%ISOPEN THEN
4931       CLOSE get_sts_code;
4932     END IF;
4933 
4934     IF c_get_k_stream%ISOPEN THEN
4935       CLOSE c_get_k_stream;
4936     END IF;
4937     IF c_get_je_trans%ISOPEN THEN
4938       CLOSE c_get_je_trans;
4939     END IF;
4940     IF c_get_source_id%ISOPEN THEN
4941       CLOSE c_get_source_id;
4942     END IF;
4943     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4944                               l_api_name,
4945                               G_PKG_NAME,
4946                               'OTHERS',
4947                               x_msg_count,
4948                               x_msg_data,
4949                               '_PVT');
4950 END delete_contract;
4951 
4952 -- Start of comments
4953 --
4954 -- Procedure Name  : delete_contract_header
4955 -- Description     : deletes contract header for shadowed contract
4956 -- Business Rules  :
4957 -- Parameters      :
4958 -- Version         : 1.0
4959 -- End of comments
4960   PROCEDURE delete_contract_header(
4961     p_api_version                  IN NUMBER,
4962     p_init_msg_list                IN VARCHAR2,
4963     x_return_status                OUT NOCOPY VARCHAR2,
4964     x_msg_count                    OUT NOCOPY NUMBER,
4965     x_msg_data                     OUT NOCOPY VARCHAR2,
4966     p_chrv_rec                     IN  okl_okc_migration_pvt.chrv_rec_type,
4967     p_khrv_rec                     IN  khrv_rec_type) IS
4968 
4969     l_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
4970     l_khrv_rec khrv_rec_type;
4971 
4972     l_api_name          CONSTANT VARCHAR2(30) := 'DELETE_CONTRACT_HEADER';
4973     l_api_version               CONSTANT NUMBER          := 1.0;
4974     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
4975   BEGIN
4976 
4977     -- call START_ACTIVITY to create savepoint, check compatibility
4978     -- and initialize message list
4979     l_return_status := OKL_API.START_ACTIVITY(
4980                         p_api_name      => l_api_name,
4981                         p_pkg_name      => g_pkg_name,
4982                         p_init_msg_list => p_init_msg_list,
4983                         l_api_version   => l_api_version,
4984                         p_api_version   => p_api_version,
4985                         p_api_type      => g_api_type,
4986                         x_return_status => x_return_status);
4987 
4988     -- check if activity started successfully
4989     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
4990        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4991     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
4992        raise OKL_API.G_EXCEPTION_ERROR;
4993     End If;
4994 
4995     l_khrv_rec := p_khrv_rec;
4996     l_chrv_rec := p_chrv_rec;
4997 
4998     --
4999     -- set okc context before API call
5000     -- msamoyle: check whether we need to call this method here or in PUB or in processing
5001 
5002     OKL_CONTEXT.SET_OKC_ORG_CONTEXT(l_chrv_rec.authoring_org_id,l_chrv_rec.inv_organization_id);
5003 
5004 
5005     --
5006     -- call procedure in complex API
5007     --
5008     okl_okc_migration_pvt.delete_contract_header(
5009          p_api_version        => p_api_version,
5010          p_init_msg_list        => p_init_msg_list,
5011          x_return_status         => x_return_status,
5012          x_msg_count             => x_msg_count,
5013          x_msg_data              => x_msg_data,
5014          p_chrv_rec                => l_chrv_rec);
5015 
5016     -- check return status
5017     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
5018           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5019     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
5020           raise OKL_API.G_EXCEPTION_ERROR;
5021     End If;
5022 
5023     -- call procedure in complex API
5024         OKL_KHR_PVT.Delete_Row(
5025               p_api_version        => p_api_version,
5026               p_init_msg_list        => p_init_msg_list,
5027             x_return_status     => x_return_status,
5028             x_msg_count         => x_msg_count,
5029             x_msg_data          => x_msg_data,
5030             p_khrv_rec          => p_khrv_rec);
5031 
5032     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
5033           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5034     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
5035           raise OKL_API.G_EXCEPTION_ERROR;
5036     End If;
5037 
5038     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
5039                                  x_msg_data                => x_msg_data);
5040   EXCEPTION
5041     when OKL_API.G_EXCEPTION_ERROR then
5042       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5043                         p_api_name  => l_api_name,
5044                         p_pkg_name  => g_pkg_name,
5045                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5046                         x_msg_count => x_msg_count,
5047                         x_msg_data  => x_msg_data,
5048                         p_api_type  => g_api_type);
5049 
5050     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5051       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5052                         p_api_name  => l_api_name,
5053                         p_pkg_name  => g_pkg_name,
5054                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5055                         x_msg_count => x_msg_count,
5056                         x_msg_data  => x_msg_data,
5057                         p_api_type  => g_api_type);
5058 
5059     when OTHERS then
5060       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5061                         p_api_name  => l_api_name,
5062                         p_pkg_name  => g_pkg_name,
5063                         p_exc_name  => 'OTHERS',
5064                         x_msg_count => x_msg_count,
5065                         x_msg_data  => x_msg_data,
5066                         p_api_type  => g_api_type);
5067   END delete_contract_header;
5068 
5069 
5070 -- Start of comments
5071 --
5072 -- Procedure Name  : delete_contract_header
5073 -- Description     : deletes contract header for shadowed contract
5074 -- Business Rules  :
5075 -- Parameters      :
5076 -- Version         : 1.0
5077 -- End of comments
5078   PROCEDURE delete_contract_header(
5079     p_api_version                  IN NUMBER,
5080     p_init_msg_list                IN VARCHAR2,
5081     x_return_status                OUT NOCOPY VARCHAR2,
5082     x_msg_count                    OUT NOCOPY NUMBER,
5083     x_msg_data                     OUT NOCOPY VARCHAR2,
5084     p_chrv_tbl                     IN  okl_okc_migration_pvt.chrv_tbl_type,
5085     p_khrv_tbl                     IN  khrv_tbl_type) IS
5086 
5087     l_api_name          CONSTANT VARCHAR2(30) := 'DELETE_CONTRACT_HEADER';
5088     l_api_version               CONSTANT NUMBER          := 1.0;
5089     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
5090     l_overall_status    VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
5091     i                           NUMBER;
5092     l_khrv_tbl                  khrv_tbl_type := p_khrv_tbl;
5093   BEGIN
5094     -- call START_ACTIVITY to create savepoint, check compatibility
5095     -- and initialize message list
5096     l_return_status := OKL_API.START_ACTIVITY(
5097                         p_api_name      => l_api_name,
5098                         p_pkg_name      => g_pkg_name,
5099                         p_init_msg_list => p_init_msg_list,
5100                         l_api_version   => l_api_version,
5101                         p_api_version   => p_api_version,
5102                         p_api_type      => g_api_type,
5103                         x_return_status => x_return_status);
5104 
5105     -- check if activity started successfully
5106     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5107        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5108     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
5109        raise OKL_API.G_EXCEPTION_ERROR;
5110 
5111     End If;
5112 
5113     If (p_chrv_tbl.COUNT > 0) Then
5114            i := p_chrv_tbl.FIRST;
5115            LOOP
5116                 -- call procedure in complex API for a record
5117                 delete_contract_header(
5118                         p_api_version                => p_api_version,
5119                         p_init_msg_list                => p_init_msg_list,
5120                         x_return_status         => x_return_status,
5121                         x_msg_count             => x_msg_count,
5122                         x_msg_data              => x_msg_data,
5123                         p_chrv_rec                => p_chrv_tbl(i),
5124                 p_khrv_rec                => l_khrv_tbl(i));
5125 
5126                 If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
5127                    If l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR Then
5128                          l_overall_status := x_return_status;
5129                    End If;
5130                 End If;
5131 
5132         EXIT WHEN (i = p_chrv_tbl.LAST);
5133                 i := p_chrv_tbl.NEXT(i);
5134            END LOOP;
5135 
5136            -- return overall status
5137            x_return_status := l_overall_status;
5138     End If;
5139 
5140     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
5141           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5142     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
5143           raise OKL_API.G_EXCEPTION_ERROR;
5144     End If;
5145 
5146     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
5147                                  x_msg_data                => x_msg_data);
5148   EXCEPTION
5149     when OKL_API.G_EXCEPTION_ERROR then
5150       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5151                         p_api_name  => l_api_name,
5152                         p_pkg_name  => g_pkg_name,
5153                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5154                         x_msg_count => x_msg_count,
5155                         x_msg_data  => x_msg_data,
5156                         p_api_type  => g_api_type);
5157 
5158     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5159       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5160                         p_api_name  => l_api_name,
5161                         p_pkg_name  => g_pkg_name,
5162                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5163                         x_msg_count => x_msg_count,
5164                         x_msg_data  => x_msg_data,
5165                         p_api_type  => g_api_type);
5166 
5167     when OTHERS then
5168       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5169                         p_api_name  => l_api_name,
5170                         p_pkg_name  => g_pkg_name,
5171                         p_exc_name  => 'OTHERS',
5172                         x_msg_count => x_msg_count,
5173                         x_msg_data  => x_msg_data,
5174                         p_api_type  => g_api_type);
5175 
5176   END delete_contract_header;
5177 
5178 -- Start of comments
5179 --
5180 -- Procedure Name  : lock_contract_header
5181 -- Description     : locks contract header for shadowed contract
5182 -- Business Rules  :
5183 -- Parameters      :
5184 -- Version         : 1.0
5185 -- End of comments
5186   PROCEDURE lock_contract_header(
5187     p_api_version                  IN NUMBER,
5188     p_init_msg_list                IN VARCHAR2,
5189     x_return_status                OUT NOCOPY VARCHAR2,
5190     x_msg_count                    OUT NOCOPY NUMBER,
5191     x_msg_data                     OUT NOCOPY VARCHAR2,
5192     p_chrv_rec                     IN  okl_okc_migration_pvt.chrv_rec_type,
5193     p_khrv_rec                     IN  khrv_rec_type) IS
5194 
5195     l_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
5196     l_khrv_rec khrv_rec_type;
5197 
5198     l_api_name          CONSTANT VARCHAR2(30) := 'LOCK_CONTRACT_HEADER';
5199     l_api_version               CONSTANT NUMBER          := 1.0;
5200     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
5201   BEGIN
5202 
5203     -- call START_ACTIVITY to create savepoint, check compatibility
5204     -- and initialize message list
5205     l_return_status := OKL_API.START_ACTIVITY(
5206                         p_api_name      => l_api_name,
5207                         p_pkg_name      => g_pkg_name,
5208                         p_init_msg_list => p_init_msg_list,
5209                         l_api_version   => l_api_version,
5210                         p_api_version   => p_api_version,
5211                         p_api_type      => g_api_type,
5212                         x_return_status => x_return_status);
5213 
5214     -- check if activity started successfully
5215     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5216        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5217     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
5218        raise OKL_API.G_EXCEPTION_ERROR;
5219     End If;
5220 
5221     l_khrv_rec := p_khrv_rec;
5222     l_chrv_rec := p_chrv_rec;
5223 
5224     --
5225     -- set okc context before API call
5226     -- msamoyle: check whether we need to call this method here or in PUB or in processing
5227 
5228     OKL_CONTEXT.SET_OKC_ORG_CONTEXT(l_chrv_rec.authoring_org_id,l_chrv_rec.inv_organization_id);
5229 
5230 
5231     --
5232     -- call procedure in complex API
5233     --
5234     okl_okc_migration_pvt.lock_contract_header(
5235          p_api_version        => p_api_version,
5236          p_init_msg_list        => p_init_msg_list,
5237          x_return_status         => x_return_status,
5238          x_msg_count             => x_msg_count,
5239          x_msg_data              => x_msg_data,
5240          p_chrv_rec                => l_chrv_rec);
5241 
5242     -- check return status
5243     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
5244           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5245     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
5246           raise OKL_API.G_EXCEPTION_ERROR;
5247     End If;
5248 
5249     -- call procedure in complex API
5250         OKL_KHR_PVT.lock_Row(
5251               p_api_version        => p_api_version,
5252               p_init_msg_list        => p_init_msg_list,
5253             x_return_status     => x_return_status,
5254             x_msg_count         => x_msg_count,
5255             x_msg_data          => x_msg_data,
5256             p_khrv_rec          => p_khrv_rec);
5257 
5258     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
5259           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5260     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
5261           raise OKL_API.G_EXCEPTION_ERROR;
5262     End If;
5263 
5264     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
5265                                  x_msg_data                => x_msg_data);
5266   EXCEPTION
5267     when OKL_API.G_EXCEPTION_ERROR then
5268       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5269                         p_api_name  => l_api_name,
5270                         p_pkg_name  => g_pkg_name,
5271                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5272                         x_msg_count => x_msg_count,
5273                         x_msg_data  => x_msg_data,
5274                         p_api_type  => g_api_type);
5275 
5276     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5277       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5278                         p_api_name  => l_api_name,
5279                         p_pkg_name  => g_pkg_name,
5280                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5281                         x_msg_count => x_msg_count,
5282                         x_msg_data  => x_msg_data,
5283                         p_api_type  => g_api_type);
5284 
5285     when OTHERS then
5286       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5287                         p_api_name  => l_api_name,
5288                         p_pkg_name  => g_pkg_name,
5289                         p_exc_name  => 'OTHERS',
5290                         x_msg_count => x_msg_count,
5291                         x_msg_data  => x_msg_data,
5292                         p_api_type  => g_api_type);
5293   END lock_contract_header;
5294 
5295 
5296 -- Start of comments
5297 --
5298 -- Procedure Name  : lock_contract_header
5299 -- Description     : locks contract header for shadowed contract
5300 -- Business Rules  :
5301 -- Parameters      :
5302 -- Version         : 1.0
5303 -- End of comments
5304   PROCEDURE lock_contract_header(
5305     p_api_version                  IN NUMBER,
5306     p_init_msg_list                IN VARCHAR2,
5307     x_return_status                OUT NOCOPY VARCHAR2,
5308     x_msg_count                    OUT NOCOPY NUMBER,
5309     x_msg_data                     OUT NOCOPY VARCHAR2,
5310     p_chrv_tbl                     IN  okl_okc_migration_pvt.chrv_tbl_type,
5311     p_khrv_tbl                     IN  khrv_tbl_type) IS
5312 
5313     l_api_name          CONSTANT VARCHAR2(30) := 'LOCK_CONTRACT_HEADER';
5314     l_api_version               CONSTANT NUMBER          := 1.0;
5315     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
5316     l_overall_status    VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
5317     i                           NUMBER;
5318     l_khrv_tbl                  khrv_tbl_type := p_khrv_tbl;
5319   BEGIN
5320     -- call START_ACTIVITY to create savepoint, check compatibility
5321     -- and initialize message list
5322     l_return_status := OKL_API.START_ACTIVITY(
5323                         p_api_name      => l_api_name,
5324                         p_pkg_name      => g_pkg_name,
5325                         p_init_msg_list => p_init_msg_list,
5326                         l_api_version   => l_api_version,
5327                         p_api_version   => p_api_version,
5328                         p_api_type      => g_api_type,
5329                         x_return_status => x_return_status);
5330 
5331     -- check if activity started successfully
5332     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5333        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5334     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
5335        raise OKL_API.G_EXCEPTION_ERROR;
5336 
5337     End If;
5338 
5339     If (p_chrv_tbl.COUNT > 0) Then
5340            i := p_chrv_tbl.FIRST;
5341            LOOP
5342                 -- call procedure in complex API for a record
5343                 lock_contract_header(
5344                         p_api_version                => p_api_version,
5345                         p_init_msg_list                => p_init_msg_list,
5346                         x_return_status         => x_return_status,
5347                         x_msg_count             => x_msg_count,
5348                         x_msg_data              => x_msg_data,
5349                         p_chrv_rec                => p_chrv_tbl(i),
5350                 p_khrv_rec                => l_khrv_tbl(i));
5351 
5352                 If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
5353                    If l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR Then
5354                          l_overall_status := x_return_status;
5355                    End If;
5356                 End If;
5357 
5358         EXIT WHEN (i = p_chrv_tbl.LAST);
5359                 i := p_chrv_tbl.NEXT(i);
5360            END LOOP;
5361 
5362            -- return overall status
5363            x_return_status := l_overall_status;
5364     End If;
5365 
5366     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
5367           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5368     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
5369           raise OKL_API.G_EXCEPTION_ERROR;
5370     End If;
5371 
5372     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
5373                                  x_msg_data                => x_msg_data);
5374   EXCEPTION
5375     when OKL_API.G_EXCEPTION_ERROR then
5376       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5377                         p_api_name  => l_api_name,
5378                         p_pkg_name  => g_pkg_name,
5379                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5380                         x_msg_count => x_msg_count,
5381                         x_msg_data  => x_msg_data,
5382                         p_api_type  => g_api_type);
5383 
5384     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5385       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5386                         p_api_name  => l_api_name,
5387                         p_pkg_name  => g_pkg_name,
5388                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5389                         x_msg_count => x_msg_count,
5390                         x_msg_data  => x_msg_data,
5391                         p_api_type  => g_api_type);
5392 
5393     when OTHERS then
5394       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5395                         p_api_name  => l_api_name,
5396                         p_pkg_name  => g_pkg_name,
5397                         p_exc_name  => 'OTHERS',
5398                         x_msg_count => x_msg_count,
5399                         x_msg_data  => x_msg_data,
5400                         p_api_type  => g_api_type);
5401 
5402   END lock_contract_header;
5403 
5404 -- -----------------------------------------------------------------------------
5405 -- Start of comments
5406 --
5407 -- Procedure Name  : validate_contract_header
5408 -- Description     : validates contract header for shadowed contract
5409 -- Business Rules  :
5410 -- Parameters      :
5411 -- Version         : 1.0
5412 -- End of comments
5413   PROCEDURE validate_contract_header(
5414     p_api_version                  IN NUMBER,
5415     p_init_msg_list                IN VARCHAR2,
5416     x_return_status                OUT NOCOPY VARCHAR2,
5417     x_msg_count                    OUT NOCOPY NUMBER,
5418     x_msg_data                     OUT NOCOPY VARCHAR2,
5419     p_chrv_rec                     IN  okl_okc_migration_pvt.chrv_rec_type,
5420     p_khrv_rec                     IN  khrv_rec_type) IS
5421 
5422     l_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
5423     l_khrv_rec khrv_rec_type;
5424 
5425     l_api_name          CONSTANT VARCHAR2(30) := 'VALIDATE_CONTRACT_HEADER';
5426     l_api_version               CONSTANT NUMBER          := 1.0;
5427     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
5428   BEGIN
5429 
5430         --dbms_output.put_line('Start validation');
5431     -- call START_ACTIVITY to create savepoint, check compatibility
5432     -- and initialize message list
5433     l_return_status := OKL_API.START_ACTIVITY(
5434                         p_api_name      => l_api_name,
5435                         p_pkg_name      => g_pkg_name,
5436                         p_init_msg_list => p_init_msg_list,
5437                         l_api_version   => l_api_version,
5438                         p_api_version   => p_api_version,
5439                         p_api_type      => g_api_type,
5440                         x_return_status => x_return_status);
5441 
5442     -- check if activity started successfully
5443     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5444        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5445     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
5446        raise OKL_API.G_EXCEPTION_ERROR;
5447     End If;
5448 
5449         --dbms_output.put_line('Started activity');
5450 
5451     l_khrv_rec := p_khrv_rec;
5452     l_chrv_rec := p_chrv_rec;
5453 
5454     --
5455     -- set okc context before API call
5456     -- msamoyle: check whether we need to call this method here or in PUB or in processing
5457 
5458     OKL_CONTEXT.SET_OKC_ORG_CONTEXT(l_chrv_rec.authoring_org_id,l_chrv_rec.inv_organization_id);
5459         --dbms_output.put_line('Set up context');
5460 
5461     --
5462     -- call procedure in complex API
5463     --
5464     okl_okc_migration_pvt.validate_contract_header(
5465          p_api_version        => p_api_version,
5466          p_init_msg_list        => p_init_msg_list,
5467          x_return_status         => x_return_status,
5468          x_msg_count             => x_msg_count,
5469          x_msg_data              => x_msg_data,
5470          p_chrv_rec                => l_chrv_rec);
5471 
5472     -- check return status
5473     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
5474           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5475     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
5476           raise OKL_API.G_EXCEPTION_ERROR;
5477     End If;
5478         --dbms_output.put_line('Got standard validation');
5479 
5480     -- pass OKC contract header id
5481         l_khrv_rec.id := l_chrv_rec.id;
5482 
5483     -- call procedure in complex API
5484         OKL_KHR_PVT.validate_Row(
5485               p_api_version        => p_api_version,
5486               p_init_msg_list        => p_init_msg_list,
5487             x_return_status     => x_return_status,
5488             x_msg_count         => x_msg_count,
5489             x_msg_data          => x_msg_data,
5490             p_khrv_rec          => l_khrv_rec);
5491 
5492     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
5493           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5494     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
5495           raise OKL_API.G_EXCEPTION_ERROR;
5496     End If;
5497         --dbms_output.put_line('Got shadow validation');
5498 
5499     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
5500                                  x_msg_data                => x_msg_data);
5501         --dbms_output.put_line('Done');
5502   EXCEPTION
5503     when OKL_API.G_EXCEPTION_ERROR then
5504       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5505                         p_api_name  => l_api_name,
5506                         p_pkg_name  => g_pkg_name,
5507                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5508                         x_msg_count => x_msg_count,
5509                         x_msg_data  => x_msg_data,
5510                         p_api_type  => g_api_type);
5511 
5512     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5513       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5514                         p_api_name  => l_api_name,
5515                         p_pkg_name  => g_pkg_name,
5516                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5517                         x_msg_count => x_msg_count,
5518                         x_msg_data  => x_msg_data,
5519                         p_api_type  => g_api_type);
5520 
5521     when OTHERS then
5522       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5523                         p_api_name  => l_api_name,
5524                         p_pkg_name  => g_pkg_name,
5525                         p_exc_name  => 'OTHERS',
5526                         x_msg_count => x_msg_count,
5527                         x_msg_data  => x_msg_data,
5528                         p_api_type  => g_api_type);
5529   END validate_contract_header;
5530 
5531 
5532 -- Start of comments
5533 --
5534 -- Procedure Name  : validate_contract_header
5535 -- Description     : validates contract header for shadowed contract
5536 -- Business Rules  :
5537 -- Parameters      :
5538 -- Version         : 1.0
5539 -- End of comments
5540   PROCEDURE validate_contract_header(
5541     p_api_version                  IN NUMBER,
5542     p_init_msg_list                IN VARCHAR2,
5543     x_return_status                OUT NOCOPY VARCHAR2,
5544     x_msg_count                    OUT NOCOPY NUMBER,
5545     x_msg_data                     OUT NOCOPY VARCHAR2,
5546     p_chrv_tbl                     IN  okl_okc_migration_pvt.chrv_tbl_type,
5547     p_khrv_tbl                     IN  khrv_tbl_type) IS
5548 
5549     l_api_name          CONSTANT VARCHAR2(30) := 'validate_CONTRACT_HEADER';
5550     l_api_version               CONSTANT NUMBER          := 1.0;
5551     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
5552     l_overall_status    VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
5553     i                           NUMBER;
5554     l_khrv_tbl                  khrv_tbl_type := p_khrv_tbl;
5555   BEGIN
5556     -- call START_ACTIVITY to create savepoint, check compatibility
5557     -- and initialize message list
5558     l_return_status := OKL_API.START_ACTIVITY(
5559                         p_api_name      => l_api_name,
5560                         p_pkg_name      => g_pkg_name,
5561                         p_init_msg_list => p_init_msg_list,
5562                         l_api_version   => l_api_version,
5563                         p_api_version   => p_api_version,
5564                         p_api_type      => g_api_type,
5565                         x_return_status => x_return_status);
5566 
5567     -- check if activity started successfully
5568     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5569        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5570     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
5571        raise OKL_API.G_EXCEPTION_ERROR;
5572 
5573     End If;
5574 
5575     If (p_chrv_tbl.COUNT > 0) Then
5576            i := p_chrv_tbl.FIRST;
5577            LOOP
5578                 -- call procedure in complex API for a record
5579                 validate_contract_header(
5580                         p_api_version                => p_api_version,
5581                         p_init_msg_list                => p_init_msg_list,
5582                         x_return_status         => x_return_status,
5583                         x_msg_count             => x_msg_count,
5584                         x_msg_data              => x_msg_data,
5585                         p_chrv_rec                => p_chrv_tbl(i),
5586                 p_khrv_rec                => l_khrv_tbl(i));
5587 
5588                 If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
5589                    If l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR Then
5590                          l_overall_status := x_return_status;
5591                    End If;
5592                 End If;
5593 
5594         EXIT WHEN (i = p_chrv_tbl.LAST);
5595                 i := p_chrv_tbl.NEXT(i);
5596            END LOOP;
5597 
5598            -- return overall status
5599            x_return_status := l_overall_status;
5600     End If;
5601 
5602     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
5603           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5604     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
5605           raise OKL_API.G_EXCEPTION_ERROR;
5606     End If;
5607 
5608     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
5609                                  x_msg_data                => x_msg_data);
5610   EXCEPTION
5611     when OKL_API.G_EXCEPTION_ERROR then
5612       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5613                         p_api_name  => l_api_name,
5614                         p_pkg_name  => g_pkg_name,
5615                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5616                         x_msg_count => x_msg_count,
5617                         x_msg_data  => x_msg_data,
5618                         p_api_type  => g_api_type);
5619 
5620     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5621       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5622                         p_api_name  => l_api_name,
5623                         p_pkg_name  => g_pkg_name,
5624                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5625                         x_msg_count => x_msg_count,
5626                         x_msg_data  => x_msg_data,
5627                         p_api_type  => g_api_type);
5628 
5629     when OTHERS then
5630       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5631                         p_api_name  => l_api_name,
5632                         p_pkg_name  => g_pkg_name,
5633                         p_exc_name  => 'OTHERS',
5634                         x_msg_count => x_msg_count,
5635                         x_msg_data  => x_msg_data,
5636                         p_api_type  => g_api_type);
5637 
5638   END validate_contract_header;
5639 
5640 -- Start of comments
5641 --
5642 -- Procedure Name  : roundoff_line_amount
5643 -- Description     : Round off NOT NULL line amounts columns
5644 -- Business Rules  :
5645 -- Parameters      :
5646 -- Version         : 1.0
5647 -- End of comments
5648 
5649    PROCEDURE roundoff_line_amount(
5650                          x_return_status   OUT NOCOPY VARCHAR2,
5651                          x_msg_count       OUT NOCOPY NUMBER,
5652                          x_msg_data        OUT NOCOPY VARCHAR2,
5653                          p_clev_rec        IN  okl_okc_migration_pvt.clev_rec_type,
5654                          p_klev_rec        IN  klev_rec_type,
5655                          x_clev_rec        OUT NOCOPY okl_okc_migration_pvt.clev_rec_type,
5656                          x_klev_rec        OUT NOCOPY klev_rec_type
5657                         ) IS
5658 
5659    --Fix Bug# 2727161
5660    CURSOR curr_hdr_csr (p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
5661    SELECT currency_code
5662    FROM   okc_k_headers_b
5663    WHERE  id = p_chr_id;
5664 
5665    CURSOR curr_ln_csr (p_line_id OKC_K_HEADERS_B.ID%TYPE) IS
5666    SELECT h.currency_code
5667    FROM   okc_k_headers_b h,
5668           okc_k_lines_b l
5669    WHERE  h.id = l.dnz_chr_id
5670    AND    l.id = p_line_id;
5671 
5672    l_conv_amount   NUMBER;
5673    l_currency_code OKC_K_LINES_B.CURRENCY_CODE%TYPE;
5674 
5675    roundoff_error EXCEPTION;
5676 
5677    BEGIN
5678 
5679      x_return_status := OKL_API.G_RET_STS_SUCCESS;
5680 
5681      -- Take original record values
5682      x_clev_rec := p_clev_rec;
5683      x_klev_rec := p_klev_rec;
5684 
5685      --
5686      -- Get currency Code
5687      -- Using line dnz_chr_id
5688      --
5689      l_currency_code := '?';
5690      OPEN curr_hdr_csr (p_clev_rec.dnz_chr_id);
5691      FETCH curr_hdr_csr INTO l_currency_code;
5692      CLOSE curr_hdr_csr;
5693 
5694      IF (l_currency_code = '?') THEN
5695          --
5696          -- Get currency_code
5697          -- Using line_id
5698          --
5699         OPEN curr_ln_csr (p_clev_rec.id);
5700         FETCH curr_ln_csr INTO l_currency_code;
5701         CLOSE curr_ln_csr;
5702      END IF;
5703 
5704      IF (l_currency_code = '?') THEN -- Fatal error, Not a valid currency_code
5705         RAISE roundoff_error;
5706      END IF;
5707 
5708      --dbms_output.put_line('Round off start '||l_currency_code);
5709      -- Round off all OKL Line Amounts
5710      IF (p_klev_rec.amount IS NOT NULL
5711          AND
5712          p_klev_rec.amount <> OKL_API.G_MISS_NUM) THEN
5713 
5714          l_conv_amount := NULL;
5715          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5716                                           p_amount        => p_klev_rec.amount,
5717                                           p_currency_code => l_currency_code
5718                                          );
5719 
5720          x_klev_rec.amount := l_conv_amount;
5721      END IF;
5722 
5723      IF (p_klev_rec.amount_stake IS NOT NULL
5724          AND
5725          p_klev_rec.amount_stake<> OKL_API.G_MISS_NUM) THEN
5726 
5727          l_conv_amount := NULL;
5728          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5729                                           p_amount        => p_klev_rec.amount_stake,
5730                                           p_currency_code => l_currency_code
5731                                          );
5732 
5733          x_klev_rec.amount_stake := l_conv_amount;
5734      END IF;
5735 
5736      IF (p_klev_rec.appraisal_value IS NOT NULL
5737          AND
5738          p_klev_rec.appraisal_value <> OKL_API.G_MISS_NUM) THEN
5739 
5740          l_conv_amount := NULL;
5741          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5742                                           p_amount        => p_klev_rec.appraisal_value,
5743                                           p_currency_code => l_currency_code
5744                                          );
5745 
5746          x_klev_rec.appraisal_value := l_conv_amount;
5747      END IF;
5748 
5749      IF (p_klev_rec.capital_amount IS NOT NULL
5750          AND
5751          p_klev_rec.capital_amount <> OKL_API.G_MISS_NUM) THEN
5752 
5753          l_conv_amount := NULL;
5754          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5755                                           p_amount        => p_klev_rec.capital_amount,
5756                                           p_currency_code => l_currency_code
5757                                          );
5758 
5759          x_klev_rec.capital_amount := l_conv_amount;
5760      END IF;
5761 
5762      IF (p_klev_rec.capital_reduction IS NOT NULL
5763          AND
5764          p_klev_rec.capital_reduction <> OKL_API.G_MISS_NUM) THEN
5765 
5766          l_conv_amount := NULL;
5767          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5768                                           p_amount        => p_klev_rec.capital_reduction,
5769                                           p_currency_code => l_currency_code
5770                                          );
5771 
5772          x_klev_rec.capital_reduction := l_conv_amount;
5773      END IF;
5774 
5775      IF (p_klev_rec.capitalized_interest IS NOT NULL
5776          AND
5777          p_klev_rec.capitalized_interest <> OKL_API.G_MISS_NUM) THEN
5778 
5779          l_conv_amount := NULL;
5780          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5781                                           p_amount        => p_klev_rec.capitalized_interest,
5782                                           p_currency_code => l_currency_code
5783                                          );
5784 
5785          x_klev_rec.capitalized_interest := l_conv_amount;
5786      END IF;
5787 
5788      IF (p_klev_rec.coverage IS NOT NULL
5789          AND
5790          p_klev_rec.coverage <> OKL_API.G_MISS_NUM) THEN
5791 
5792          l_conv_amount := NULL;
5793          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5794                                           p_amount        => p_klev_rec.coverage,
5795                                           p_currency_code => l_currency_code
5796                                          );
5797 
5798          x_klev_rec.coverage := l_conv_amount;
5799      END IF;
5800 
5801      IF (p_klev_rec.estimated_oec IS NOT NULL
5802          AND
5803          p_klev_rec.estimated_oec <> OKL_API.G_MISS_NUM) THEN
5804 
5805          l_conv_amount := NULL;
5806          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5807                                           p_amount        => p_klev_rec.estimated_oec,
5808                                           p_currency_code => l_currency_code
5809                                          );
5810 
5811          x_klev_rec.estimated_oec := l_conv_amount;
5812      END IF;
5813 
5814      IF (p_klev_rec.fee_charge IS NOT NULL
5815          AND
5816          p_klev_rec.fee_charge <> OKL_API.G_MISS_NUM) THEN
5817 
5818          l_conv_amount := NULL;
5819          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5820                                           p_amount        => p_klev_rec.fee_charge,
5821                                           p_currency_code => l_currency_code
5822                                          );
5823 
5824          x_klev_rec.fee_charge := l_conv_amount;
5825      END IF;
5826 
5827      IF (p_klev_rec.floor_amount IS NOT NULL
5828          AND
5829          p_klev_rec.floor_amount <> OKL_API.G_MISS_NUM) THEN
5830 
5831          l_conv_amount := NULL;
5832          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5833                                           p_amount        => p_klev_rec.floor_amount,
5834                                           p_currency_code => l_currency_code
5835                                          );
5836 
5837          x_klev_rec.floor_amount := l_conv_amount;
5838      END IF;
5839 
5840      IF (p_klev_rec.initial_direct_cost IS NOT NULL
5841          AND
5842          p_klev_rec.initial_direct_cost <> OKL_API.G_MISS_NUM) THEN
5843 
5844          l_conv_amount := NULL;
5845          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5846                                           p_amount        => p_klev_rec.initial_direct_cost,
5847                                           p_currency_code => l_currency_code
5848                                          );
5849 
5850          x_klev_rec.initial_direct_cost := l_conv_amount;
5851      END IF;
5852 
5853      IF (p_klev_rec.lao_amount IS NOT NULL
5854          AND
5855          p_klev_rec.lao_amount <> OKL_API.G_MISS_NUM) THEN
5856 
5857          l_conv_amount := NULL;
5858          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5859                                           p_amount        => p_klev_rec.lao_amount,
5860                                           p_currency_code => p_clev_rec.currency_code
5861                                          );
5862 
5863          x_klev_rec.lao_amount := l_conv_amount;
5864      END IF;
5865 
5866      IF (p_klev_rec.lrv_amount IS NOT NULL
5867          AND
5868          p_klev_rec.lrv_amount <> OKL_API.G_MISS_NUM) THEN
5869 
5870          l_conv_amount := NULL;
5871          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5872                                           p_amount        => p_klev_rec.lrv_amount,
5873                                           p_currency_code => l_currency_code
5874                                          );
5875 
5876          x_klev_rec.lrv_amount := l_conv_amount;
5877      END IF;
5878 
5879      IF (p_klev_rec.net_rentable IS NOT NULL
5880          AND
5881          p_klev_rec.net_rentable <> OKL_API.G_MISS_NUM) THEN
5882 
5883          l_conv_amount := NULL;
5884          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5885                                           p_amount        => p_klev_rec.net_rentable,
5886                                           p_currency_code => l_currency_code
5887                                          );
5888 
5889          x_klev_rec.net_rentable := l_conv_amount;
5890      END IF;
5891 
5892      IF (p_klev_rec.oec IS NOT NULL
5893          AND
5894          p_klev_rec.oec <> OKL_API.G_MISS_NUM) THEN
5895 
5896          l_conv_amount := NULL;
5897          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5898                                           p_amount        => p_klev_rec.oec,
5899                                           p_currency_code => l_currency_code
5900                                          );
5901 
5902          x_klev_rec.oec := l_conv_amount;
5903 
5904      END IF;
5905 
5906      IF (p_klev_rec.refinance_amount IS NOT NULL
5907          AND
5908          p_klev_rec.refinance_amount <> OKL_API.G_MISS_NUM) THEN
5909 
5910          l_conv_amount := NULL;
5911          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5912                                           p_amount        => p_klev_rec.refinance_amount,
5913                                           p_currency_code => l_currency_code
5914                                          );
5915 
5916          x_klev_rec.refinance_amount := l_conv_amount;
5917      END IF;
5918 
5919      IF (p_klev_rec.remarketed_amount IS NOT NULL
5920          AND
5921          p_klev_rec.remarketed_amount <> OKL_API.G_MISS_NUM) THEN
5922 
5923          l_conv_amount := NULL;
5924          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5925                                           p_amount        => p_klev_rec.remarketed_amount,
5926                                           p_currency_code => l_currency_code
5927                                          );
5928 
5929          x_klev_rec.remarketed_amount := l_conv_amount;
5930      END IF;
5931 
5932      IF (p_klev_rec.repurchased_amount IS NOT NULL
5933          AND
5934          p_klev_rec.repurchased_amount <> OKL_API.G_MISS_NUM) THEN
5935 
5936          l_conv_amount := NULL;
5937          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5938                                           p_amount        => p_klev_rec.repurchased_amount,
5939                                           p_currency_code => l_currency_code
5940                                          );
5941 
5942          x_klev_rec.repurchased_amount := l_conv_amount;
5943      END IF;
5944 
5945      IF (p_klev_rec.residual_grnty_amount IS NOT NULL
5946          AND
5947          p_klev_rec.residual_grnty_amount <> OKL_API.G_MISS_NUM) THEN
5948 
5949          l_conv_amount := NULL;
5950          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5951                                           p_amount        => p_klev_rec.residual_grnty_amount,
5952                                           p_currency_code => l_currency_code
5953                                          );
5954 
5955          x_klev_rec.residual_grnty_amount := l_conv_amount;
5956      END IF;
5957 
5958      IF (p_klev_rec.rvi_premium IS NOT NULL
5959          AND
5960          p_klev_rec.rvi_premium <> OKL_API.G_MISS_NUM) THEN
5961 
5962          l_conv_amount := NULL;
5963          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5964                                           p_amount        => p_klev_rec.rvi_premium,
5965                                           p_currency_code => l_currency_code
5966                                          );
5967 
5968          x_klev_rec.rvi_premium := l_conv_amount;
5969      END IF;
5970 
5971      IF (p_klev_rec.termination_purchase_amount IS NOT NULL
5972          AND
5973          p_klev_rec.termination_purchase_amount <> OKL_API.G_MISS_NUM) THEN
5974 
5975          l_conv_amount := NULL;
5976          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5977                                           p_amount        => p_klev_rec.termination_purchase_amount,
5978                                           p_currency_code => l_currency_code
5979                                          );
5980 
5981          x_klev_rec.termination_purchase_amount := l_conv_amount;
5982      END IF;
5983 
5984      IF (p_klev_rec.tracked_residual IS NOT NULL
5985          AND
5986          p_klev_rec.tracked_residual <> OKL_API.G_MISS_NUM) THEN
5987 
5988          l_conv_amount := NULL;
5989          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
5990                                           p_amount        => p_klev_rec.tracked_residual,
5991                                           p_currency_code => l_currency_code
5992                                          );
5993 
5994          x_klev_rec.tracked_residual := l_conv_amount;
5995      END IF;
5996 
5997      IF (p_klev_rec.tradein_amount IS NOT NULL
5998          AND
5999          p_klev_rec.tradein_amount <> OKL_API.G_MISS_NUM) THEN
6000 
6001          l_conv_amount := NULL;
6002          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
6003                                           p_amount        => p_klev_rec.tradein_amount,
6004                                           p_currency_code => l_currency_code
6005                                          );
6006 
6007          x_klev_rec.tradein_amount := l_conv_amount;
6008      END IF;
6009 
6010      IF (p_klev_rec.vendor_advance_paid IS NOT NULL
6011          AND
6012          p_klev_rec.vendor_advance_paid <> OKL_API.G_MISS_NUM) THEN
6013 
6014          l_conv_amount := NULL;
6015          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
6016                                           p_amount        => p_klev_rec.vendor_advance_paid,
6017                                           p_currency_code => l_currency_code
6018                                          );
6019 
6020          x_klev_rec.vendor_advance_paid := l_conv_amount;
6021      END IF;
6022 
6023      IF (p_klev_rec.residual_value IS NOT NULL
6024          AND
6025          p_klev_rec.residual_value <> OKL_API.G_MISS_NUM) THEN
6026 
6027          l_conv_amount := NULL;
6028          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
6029                                           p_amount        => p_klev_rec.residual_value,
6030                                           p_currency_code => l_currency_code
6031                                          );
6032 
6033          x_klev_rec.residual_value := l_conv_amount;
6034      END IF;
6035 
6036      --Bug# 3143522 : 11.5.10 Subsidies
6037      IF (p_klev_rec.subsidy_override_amount IS NOT NULL
6038          AND
6039          p_klev_rec.subsidy_override_amount <> OKL_API.G_MISS_NUM) THEN
6040 
6041          l_conv_amount := NULL;
6042          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
6043                                           p_amount        => p_klev_rec.subsidy_override_amount,
6044                                           p_currency_code => l_currency_code
6045                                          );
6046 
6047          x_klev_rec.subsidy_override_amount := l_conv_amount;
6048      END IF;
6049      -- Round off OKC line amounts
6050 
6051 
6052      IF (p_clev_rec.price_negotiated IS NOT NULL
6053          AND
6054          p_clev_rec.price_negotiated <> OKL_API.G_MISS_NUM) THEN
6055 
6056          l_conv_amount := NULL;
6057          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
6058                                           p_amount        => p_clev_rec.price_negotiated,
6059                                           p_currency_code => l_currency_code
6060                                          );
6061 
6062          x_clev_rec.price_negotiated := l_conv_amount;
6063      END IF;
6064 
6065      IF (p_clev_rec.price_negotiated_renewed IS NOT NULL
6066          AND
6067          p_clev_rec.price_negotiated_renewed <> OKL_API.G_MISS_NUM) THEN
6068 
6069          l_conv_amount := NULL;
6070          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
6071                                           p_amount        => p_clev_rec.price_negotiated_renewed,
6072                                           p_currency_code => l_currency_code
6073                                          );
6074 
6075          x_clev_rec.price_negotiated_renewed := l_conv_amount;
6076      END IF;
6077 
6078      IF (p_clev_rec.price_unit IS NOT NULL
6079          AND
6080          p_clev_rec.price_unit <> OKL_API.G_MISS_NUM) THEN
6081 
6082          l_conv_amount := NULL;
6083          l_conv_amount := okl_accounting_util.cross_currency_round_amount(
6084                                           p_amount        => p_clev_rec.price_unit,
6085                                           p_currency_code => l_currency_code
6086                                          );
6087 
6088          x_clev_rec.price_unit := l_conv_amount;
6089      END IF;
6090      --dbms_output.put_line('Round off complete');
6091 
6092    EXCEPTION
6093      WHEN roundoff_error THEN
6094         x_return_status := OKL_API.G_RET_STS_ERROR;
6095    END roundoff_line_amount;
6096 
6097 
6098 -- -----------------------------------------------------------------------------
6099 -- Contract Line Related Procedure
6100 -- -----------------------------------------------------------------------------
6101 
6102 -- Start of comments
6103 --
6104 -- Procedure Name  : create_contract_line
6105 -- Description     : creates contract line for shadowed contract
6106 -- Business Rules  :
6107 -- Parameters      :
6108 -- Version         : 1.0
6109 -- End of comments
6110   PROCEDURE create_contract_line(
6111     p_api_version                  IN NUMBER,
6112     p_init_msg_list                IN VARCHAR2,
6113     x_return_status                OUT NOCOPY VARCHAR2,
6114     x_msg_count                    OUT NOCOPY NUMBER,
6115     x_msg_data                     OUT NOCOPY VARCHAR2,
6116     p_clev_rec                     IN  okl_okc_migration_pvt.clev_rec_type,
6117     p_klev_rec                     IN  klev_rec_type,
6118     x_clev_rec                     OUT NOCOPY okl_okc_migration_pvt.clev_rec_type,
6119     x_klev_rec                     OUT NOCOPY klev_rec_type) IS
6120 
6121    /*
6122    -- vthiruva, 08/19/2004
6123    -- START, Code change to enable Business Event
6124    */
6125    --cursor to fetch the line style code for line style id passed
6126     CURSOR lty_code_csr(p_line_id okc_k_lines_b.id%TYPE) IS
6127     SELECT lse.lty_code
6128     FROM okc_line_styles_b lse,
6129          okc_k_lines_b line
6130     WHERE lse.id = line.lse_id
6131       AND line.id = p_line_id;
6132 
6133     l_lty_code              okc_line_styles_b.lty_code%TYPE;
6134     l_parameter_list        wf_parameter_list_t;
6135     l_event_name            wf_events.name%TYPE := null;
6136     l_raise_business_event  VARCHAR2(1) := OKL_API.G_FALSE;
6137    /*
6138    -- vthiruva, 08/19/2004
6139    -- END, Code change to enable Business Event
6140    */
6141     l_clev_rec okl_okc_migration_pvt.clev_rec_type;
6142     l_klev_rec klev_rec_type;
6143 
6144     lx_clev_rec okl_okc_migration_pvt.clev_rec_type;
6145     lx_klev_rec klev_rec_type;
6146 
6147     l_api_name          CONSTANT VARCHAR2(30) := 'CREATE_CONTRACT_LINE';
6148     l_api_version               CONSTANT NUMBER          := 1.0;
6149     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
6150 
6151     --Bug# 3143522
6152     l_dt_clev_rec       okl_okc_migration_pvt.clev_rec_type;
6153     lx_dt_clev_rec      okl_okc_migration_pvt.clev_rec_type;
6154   BEGIN
6155 
6156     -- call START_ACTIVITY to create savepoint, check compatibility
6157     -- and initialize message list
6158     l_return_status := OKL_API.START_ACTIVITY(
6159                         p_api_name      => l_api_name,
6160                         p_pkg_name      => g_pkg_name,
6161                         p_init_msg_list => p_init_msg_list,
6162                         l_api_version   => l_api_version,
6163                         p_api_version   => p_api_version,
6164                         p_api_type      => g_api_type,
6165                         x_return_status => x_return_status);
6166 
6167     -- check if activity started successfully
6168     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6169        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6170     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
6171        raise OKL_API.G_EXCEPTION_ERROR;
6172     End If;
6173 
6174     l_klev_rec := p_klev_rec;
6175     l_clev_rec := p_clev_rec;
6176 
6177     --
6178     -- Calling amount round-off process
6179     --
6180     roundoff_line_amount(
6181                          x_return_status   => x_return_status,
6182                          x_msg_count       => x_msg_count,
6183                          x_msg_data        => x_msg_data,
6184                          p_clev_rec        => l_clev_rec,
6185                          p_klev_rec        => l_klev_rec,
6186                          x_clev_rec        => lx_clev_rec,
6187                          x_klev_rec        => lx_klev_rec
6188                         );
6189 
6190     -- check return status
6191     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
6192           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6193     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
6194           raise OKL_API.G_EXCEPTION_ERROR;
6195     End If;
6196 
6197     l_klev_rec := lx_klev_rec;
6198     l_clev_rec := lx_clev_rec;
6199 
6200     --Bug# 3143522:
6201     --
6202     -- call procedure to get default line dates for Fee and service lines
6203     --
6204     If nvl(l_clev_rec.start_date,OKL_API.G_MISS_DATE)    = OKL_API.G_MISS_DATE or
6205        nvl(l_clev_rec.end_date,OKL_API.G_MISS_DATE)      = OKL_API.G_MISS_DATE or
6206        nvl(l_clev_rec.currency_code,OKL_API.G_MISS_CHAR) = OKL_API.G_MISS_CHAR or
6207        nvl(l_clev_rec.sts_code,OKL_API.G_MISS_CHAR)      = OKL_API.G_MISS_CHAR then
6208 
6209        l_dt_clev_rec := l_clev_rec;
6210 
6211        get_line_dates(p_clev_rec       => l_dt_clev_rec,
6212                       x_return_status  => x_return_status,
6213                       x_clev_rec       => lx_dt_clev_rec);
6214 
6215         -- check return status
6216         If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
6217             raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6218         Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
6219             raise OKL_API.G_EXCEPTION_ERROR;
6220         End If;
6221 
6222         If nvl(lx_dt_clev_rec.start_date,OKL_API.G_MISS_DATE) <> OKL_API.G_MISS_DATE then
6223             l_clev_rec.start_date := lx_dt_clev_rec.start_date;
6224         End If;
6225         If nvl(lx_dt_clev_rec.end_date,OKL_API.G_MISS_DATE) <> OKL_API.G_MISS_DATE then
6226             l_clev_rec.end_date  := lx_dt_clev_rec.end_date;
6227         End If;
6228         If nvl(lx_dt_clev_rec.currency_code,OKL_API.G_MISS_CHAR) <> OKL_API.G_MISS_CHAR then
6229             l_clev_rec.currency_code  := lx_dt_clev_rec.currency_code;
6230         End If;
6231         If nvl(lx_dt_clev_rec.sts_code,OKL_API.G_MISS_CHAR)  <> OKL_API.G_MISS_CHAR then
6232             l_clev_rec.sts_code  := lx_dt_clev_rec.sts_code;
6233         End If;
6234     End If;
6235     --End Bug# 3143522
6236 
6237     --
6238     -- call procedure in complex API
6239     --
6240     okl_okc_migration_pvt.create_contract_line(
6241          p_api_version        => p_api_version,
6242          p_init_msg_list        => p_init_msg_list,
6243          x_return_status         => x_return_status,
6244          x_msg_count             => x_msg_count,
6245          x_msg_data              => x_msg_data,
6246          p_clev_rec                => l_clev_rec,
6247          x_clev_rec                => x_clev_rec);
6248 
6249     -- check return status
6250     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
6251           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6252     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
6253           raise OKL_API.G_EXCEPTION_ERROR;
6254     End If;
6255 
6256     -- get id from OKC record
6257     l_klev_rec.ID := x_clev_rec.ID;
6258 
6259     -- call procedure in complex API
6260         OKL_KLE_PVT.Insert_Row(
6261               p_api_version        => p_api_version,
6262               p_init_msg_list        => p_init_msg_list,
6263             x_return_status     => x_return_status,
6264             x_msg_count         => x_msg_count,
6265             x_msg_data          => x_msg_data,
6266             p_klev_rec          => l_klev_rec,
6267             x_klev_rec          => x_klev_rec);
6268 
6269     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
6270           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6271     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
6272           raise OKL_API.G_EXCEPTION_ERROR;
6273     End If;
6274 
6275     If (x_clev_rec.dnz_chr_id is not null) AND (l_clev_rec.dnz_chr_id <> OKL_API.G_MISS_NUM) Then
6276 
6277          -- call to cascade lease contract statuses to INCOMPLETE
6278          okl_contract_status_pub.cascade_lease_status_edit
6279                 (p_api_version     => p_api_version,
6280                  p_init_msg_list   => p_init_msg_list,
6281                  x_return_status   => x_return_status,
6282                  x_msg_count       => x_msg_count,
6283                  x_msg_data        => x_msg_data,
6284                  p_chr_id          => x_clev_rec.dnz_chr_id);
6285 
6286          If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
6287                  raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6288          Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
6289                  raise OKL_API.G_EXCEPTION_ERROR;
6290          End If;
6291 
6292     End If;
6293 
6294    /*
6295    -- vthiruva, 08/19/2004
6296    -- START, Code change to enable Business Event
6297    */
6298     --fetch the line style code for the record
6299     OPEN lty_code_csr(x_clev_rec.ID);
6300     FETCH lty_code_csr into l_lty_code;
6301     CLOSE lty_code_csr;
6302 
6303     IF l_lty_code = 'FREE_FORM' THEN
6304         -- raise the business event for create credit limit, if line style code is FREE_FORM
6305         l_event_name  := G_WF_EVT_CR_LMT_CREATED;
6306         l_raise_business_event := OKL_API.G_TRUE;
6307         -- create the parameter list to pass to raise_event
6308         wf_event.AddParameterToList(G_WF_ITM_CR_LINE_ID,l_clev_rec.dnz_chr_id,l_parameter_list);
6309         wf_event.AddParameterToList(G_WF_ITM_CR_LMT_ID,x_clev_rec.id,l_parameter_list);
6310     ELSIF l_lty_code = 'FREE_FORM1' THEN
6311       -- raise business event only if the context contract is a lease contract
6312       l_raise_business_event := OKL_LLA_UTIL_PVT.is_lease_contract(l_clev_rec.dnz_chr_id);
6313       IF(l_raise_business_event = OKL_API.G_TRUE)THEN
6314         -- raise the business event for create asset, if line style code is FREE_FORM1
6315         l_event_name  := G_WF_EVT_ASSET_CREATED;
6316         -- create the parameter list to pass to raise_event
6317         wf_event.AddParameterToList(G_WF_ITM_CONTRACT_ID,l_clev_rec.dnz_chr_id,l_parameter_list);
6318         wf_event.AddParameterToList(G_WF_ITM_ASSET_ID,x_clev_rec.id,l_parameter_list);
6319       END IF;
6320     ELSIF l_lty_code = 'SOLD_SERVICE' THEN
6321       -- raise business event only if the context contract is a lease contract
6322       l_raise_business_event := OKL_LLA_UTIL_PVT.is_lease_contract(l_clev_rec.dnz_chr_id);
6323       IF(l_raise_business_event = OKL_API.G_TRUE)THEN
6324         -- raise the business event for create service, if line style code is SOLD_SERVICE
6325         l_event_name  := G_WF_EVT_SERVICE_CREATED;
6326         -- create the parameter list to pass to raise_event
6327         wf_event.AddParameterToList(G_WF_ITM_CONTRACT_ID,l_clev_rec.dnz_chr_id,l_parameter_list);
6328         wf_event.AddParameterToList(G_WF_ITM_SRV_LINE_ID,x_clev_rec.id,l_parameter_list);
6329       END IF;
6330     --create_fee event is raised from here rather than okl_maintain_fee_pvt
6331     --as contract import process does not call okl_maintain_fee_pvt, but directly calls
6332     --okl_contract_pvt
6333     ELSIF l_lty_code = 'FEE' THEN
6334       -- raise business event only if the context contract is a lease contract
6335       l_raise_business_event := OKL_LLA_UTIL_PVT.is_lease_contract(l_clev_rec.dnz_chr_id);
6336       IF(l_raise_business_event = OKL_API.G_TRUE)THEN
6337         -- raise the business event for create fee, if line style code is FEE
6338         l_event_name  := G_WF_EVT_FEE_CREATED;
6339         -- create the parameter list to pass to raise_event
6340         wf_event.AddParameterToList(G_WF_ITM_CONTRACT_ID,l_clev_rec.dnz_chr_id,l_parameter_list);
6341         wf_event.AddParameterToList(G_WF_ITM_FEE_LINE_ID,x_clev_rec.id,l_parameter_list);
6342       END IF;
6343     END IF;
6344 
6345     -- raise business event only if the contract is a lease contract, the raise_event flag is on and business event
6346     -- name is specified. the event should also be raised if this is a credit limit, in which case is_lease_contract
6347     -- does not hold good
6348     IF(l_raise_business_event = OKL_API.G_TRUE AND l_event_name IS NOT NULL) THEN
6349          raise_business_event(p_api_version    => p_api_version,
6350                           p_init_msg_list  => p_init_msg_list,
6351                           x_return_status  => x_return_status,
6352                           x_msg_count      => x_msg_count,
6353                           x_msg_data       => x_msg_data,
6354                           p_event_name     => l_event_name,
6355                           p_parameter_list => l_parameter_list);
6356       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6357         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6358       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6359         RAISE OKL_API.G_EXCEPTION_ERROR;
6360       END IF;
6361     END IF;
6362 
6363    /*
6364    -- vthiruva, 08/19/2004
6365    -- END, Code change to enable Business Event
6366    */
6367 
6368     OKL_API.END_ACTIVITY(       x_msg_count        => x_msg_count,
6369                                 x_msg_data        => x_msg_data);
6370   EXCEPTION
6371     when OKL_API.G_EXCEPTION_ERROR then
6372       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6373                         p_api_name  => l_api_name,
6374                         p_pkg_name  => g_pkg_name,
6375                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
6376                         x_msg_count => x_msg_count,
6377                         x_msg_data  => x_msg_data,
6378                         p_api_type  => g_api_type);
6379 
6380     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
6381       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6382                         p_api_name  => l_api_name,
6383                         p_pkg_name  => g_pkg_name,
6384                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
6385                         x_msg_count => x_msg_count,
6386                         x_msg_data  => x_msg_data,
6387                         p_api_type  => g_api_type);
6388 
6389     when OTHERS then
6390       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6391                         p_api_name  => l_api_name,
6392                         p_pkg_name  => g_pkg_name,
6393                         p_exc_name  => 'OTHERS',
6394                         x_msg_count => x_msg_count,
6395                         x_msg_data  => x_msg_data,
6396                         p_api_type  => g_api_type);
6397   END create_contract_line;
6398 
6399 
6400 -- Start of comments
6401 --
6402 -- Procedure Name  : create_contract_line
6403 -- Description     : creates contract line for shadowed contract
6404 -- Business Rules  :
6405 -- Parameters      :
6406 -- Version         : 1.0
6407 -- End of comments
6408   PROCEDURE create_contract_line(
6409     p_api_version                  IN NUMBER,
6410     p_init_msg_list                IN VARCHAR2,
6411     x_return_status                OUT NOCOPY VARCHAR2,
6412     x_msg_count                    OUT NOCOPY NUMBER,
6413     x_msg_data                     OUT NOCOPY VARCHAR2,
6414     p_clev_tbl                     IN  okl_okc_migration_pvt.clev_tbl_type,
6415     p_klev_tbl                     IN  klev_tbl_type,
6416     x_clev_tbl                     OUT NOCOPY okl_okc_migration_pvt.clev_tbl_type,
6417     x_klev_tbl                     OUT NOCOPY klev_tbl_type) IS
6418 
6419     l_api_name          CONSTANT VARCHAR2(30) := 'CREATE_CONTRACT_LINE';
6420     l_api_version               CONSTANT NUMBER          := 1.0;
6421     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
6422     l_overall_status    VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
6423     i                           NUMBER;
6424     l_klev_tbl                  klev_tbl_type := p_klev_tbl;
6425   BEGIN
6426     -- call START_ACTIVITY to create savepoint, check compatibility
6427     -- and initialize message list
6428     l_return_status := OKL_API.START_ACTIVITY(
6429                         p_api_name      => l_api_name,
6430                         p_pkg_name      => g_pkg_name,
6431                         p_init_msg_list => p_init_msg_list,
6432                         l_api_version   => l_api_version,
6433                         p_api_version   => p_api_version,
6434                         p_api_type      => g_api_type,
6435                         x_return_status => x_return_status);
6436 
6437     -- check if activity started successfully
6438     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6439        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6440     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
6441        raise OKL_API.G_EXCEPTION_ERROR;
6442 
6443     End If;
6444 
6445     If (p_clev_tbl.COUNT > 0) Then
6446            i := p_clev_tbl.FIRST;
6447            LOOP
6448                 -- call procedure in complex API for a record
6449                 create_contract_line(
6450                         p_api_version                => p_api_version,
6451                         p_init_msg_list                => p_init_msg_list,
6452                         x_return_status         => x_return_status,
6453                         x_msg_count             => x_msg_count,
6454                         x_msg_data              => x_msg_data,
6455                         p_clev_rec                => p_clev_tbl(i),
6456                 p_klev_rec                => l_klev_tbl(i),
6457                         x_clev_rec                => x_clev_tbl(i),
6458                 x_klev_rec                => x_klev_tbl(i));
6459 
6460                 If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
6461                    If l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR Then
6462                          l_overall_status := x_return_status;
6463                    End If;
6464                 End If;
6465 
6466         EXIT WHEN (i = p_clev_tbl.LAST);
6467                 i := p_clev_tbl.NEXT(i);
6468            END LOOP;
6469 
6470            -- return overall status
6471            x_return_status := l_overall_status;
6472     End If;
6473 
6474     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
6475           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6476     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
6477           raise OKL_API.G_EXCEPTION_ERROR;
6478     End If;
6479 
6480     OKL_API.END_ACTIVITY(       x_msg_count        => x_msg_count,
6481                                 x_msg_data        => x_msg_data);
6482   EXCEPTION
6483     when OKL_API.G_EXCEPTION_ERROR then
6484       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6485                         p_api_name  => l_api_name,
6486                         p_pkg_name  => g_pkg_name,
6487                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
6488                         x_msg_count => x_msg_count,
6489                         x_msg_data  => x_msg_data,
6490                         p_api_type  => g_api_type);
6491 
6492     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
6493       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6494                         p_api_name  => l_api_name,
6495                         p_pkg_name  => g_pkg_name,
6496                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
6497                         x_msg_count => x_msg_count,
6498                         x_msg_data  => x_msg_data,
6499                         p_api_type  => g_api_type);
6500 
6501     when OTHERS then
6502       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6503                         p_api_name  => l_api_name,
6504                         p_pkg_name  => g_pkg_name,
6505                         p_exc_name  => 'OTHERS',
6506                         x_msg_count => x_msg_count,
6507                         x_msg_data  => x_msg_data,
6508                         p_api_type  => g_api_type);
6509 
6510   END create_contract_line;
6511 -- Start of comments
6512 -- Bug 2525554      : added this overloaded form for bug 252554
6513 -- Procedure Name   : update_contract_line
6514 -- Description      : updates contract line for shadowed contract
6515 -- Business Rules   : If p_edit_mode is sent as 'Y' contract status will be
6516 --                    updated to 'INCOMPLETE' else it will not be updated to
6517 --                    'INCOMPLETE'. Facilitates updater transactions which
6518 --                    happen in the background while the contract is not 'BOOKED'
6519 --                    for example - calculation and updation of okl_k_lines.
6520 --                    capitalized_interest every time user navigates to booking
6521 --                    page. It is not desired that khr status change to 'INCOMPLETE'
6522 --                    every time capitalized interest is updated.
6523 -- Parameters       :
6524 -- Version          : 1.0
6525 -- End of comments
6526   PROCEDURE update_contract_line(
6527     p_api_version                  IN NUMBER,
6528     p_init_msg_list                IN VARCHAR2,
6529     x_return_status                OUT NOCOPY VARCHAR2,
6530     x_msg_count                    OUT NOCOPY NUMBER,
6531     x_msg_data                     OUT NOCOPY VARCHAR2,
6532     p_clev_rec                     IN  okl_okc_migration_pvt.clev_rec_type,
6533     p_klev_rec                     IN  klev_rec_type,
6534     p_edit_mode                    IN  VARCHAR2,
6535     x_clev_rec                     OUT NOCOPY okl_okc_migration_pvt.clev_rec_type,
6536     x_klev_rec                     OUT NOCOPY klev_rec_type) IS
6537 
6538     l_clev_rec okl_okc_migration_pvt.clev_rec_type;
6539     l_klev_rec klev_rec_type;
6540     lx_clev_rec okl_okc_migration_pvt.clev_rec_type;
6541     lx_klev_rec klev_rec_type;
6542 
6543     l_api_name          CONSTANT VARCHAR2(30) := 'UPDATE_CONTRACT_LINE';
6544     l_api_version               CONSTANT NUMBER          := 1.0;
6545     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
6546 
6547     cursor l_klev_csr(l_id IN NUMBER) is
6548         select 'x'
6549         from OKL_K_LINES_V
6550         where id = l_id;
6551     l_dummy_var VARCHAR2(1) := '?';
6552 
6553      --Bug# 3143522,
6554      --
6555      -- cursor to get original line data for defaulting dates for fee and service lines
6556      --Bug# 3455874
6557      --
6558      -- populate missing currency_code and sts_code
6559 
6560      cursor l_orig_clev_csr(p_cle_id in number) is
6561      select cleb.dnz_chr_id,
6562             cleb.cle_id,
6563             cleb.lse_id,
6564             cleb.start_date,
6565             cleb.end_date,
6566             cleb.currency_code,
6567             cleb.sts_code
6568      from   okc_k_lines_b cleb
6569      where  id = p_cle_id;
6570 
6571      l_orig_chr_id        okc_k_lines_b.dnz_chr_id%TYPE;
6572      l_orig_cle_id        okc_k_lines_b.cle_id%TYPE;
6573      l_orig_lse_id        okc_k_lines_b.lse_id%TYPE;
6574      l_orig_start_date    okc_k_lines_b.start_date%TYPE;
6575      l_orig_end_date      okc_k_lines_b.end_date%TYPE;
6576      l_orig_currency_code okc_k_lines_b.currency_code%TYPE;
6577      l_orig_sts_code      okc_k_lines_b.sts_code%TYPE;
6578 
6579      l_dt_clev_rec        okl_okc_migration_pvt.clev_rec_type;
6580      lx_dt_clev_rec       okl_okc_migration_pvt.clev_rec_type;
6581      --Bug# 3143522
6582 
6583    /*
6584    -- vthiruva, 08/19/2004
6585    -- START, Code change to enable Business Event
6586    */
6587    --cursor to fetch the line style code for line style id passed
6588     CURSOR lty_code_csr(p_line_id okc_k_lines_b.id%TYPE) IS
6589     SELECT lse.lty_code
6590     FROM okc_line_styles_b lse,
6591          okc_k_lines_b line
6592     WHERE lse.id = line.lse_id
6593       AND line.id = p_line_id;
6594 
6595     -- sjalasut. added cursors to get the service contract details
6596     CURSOR get_linked_serv_cle (p_okl_chr_id okc_k_headers_b.id%TYPE, p_okl_cle_id okc_k_lines_b.id%TYPE) IS
6597     select rlobj.object1_id1
6598      from okc_k_rel_objs_v rlobj
6599     where rlobj.chr_id = p_okl_chr_id
6600       and rlobj.cle_id = p_okl_cle_id
6601       and rlobj.rty_code = 'OKLSRV'
6602       and rlobj.jtot_object1_code = 'OKL_SERVICE_LINE';
6603     l_linked_serv_cle_id okc_k_lines_b.id%TYPE;
6604 
6605     CURSOR get_linked_serv_khr (p_oks_cle_id okc_k_headers_b.id%TYPE) IS
6606     select dnz_chr_id from okc_k_lines_b where id = p_oks_cle_id;
6607     l_linked_serv_chr_id okc_k_headers_b.id%TYPE;
6608 
6609 
6610     l_lty_code              okc_line_styles_b.lty_code%TYPE;
6611     l_parameter_list        wf_parameter_list_t;
6612     l_event_name            wf_events.name%TYPE := null;
6613     l_raise_business_event  VARCHAR2(1) := OKL_API.G_FALSE;
6614    /*
6615    -- vthiruva, 08/19/2004
6616    -- END, Code change to enable Business Event
6617    */
6618   BEGIN
6619 
6620     -- call START_ACTIVITY to create savepoint, check compatibility
6621     -- and initialize message list
6622     l_return_status := OKL_API.START_ACTIVITY(
6623                         p_api_name      => l_api_name,
6624                         p_pkg_name      => g_pkg_name,
6625                         p_init_msg_list => p_init_msg_list,
6626                         l_api_version   => l_api_version,
6627                         p_api_version   => p_api_version,
6628                         p_api_type      => g_api_type,
6629                         x_return_status => x_return_status);
6630 
6631     -- check if activity started successfully
6632     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6633        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6634     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
6635        raise OKL_API.G_EXCEPTION_ERROR;
6636     End If;
6637 
6638     l_klev_rec := p_klev_rec;
6639     l_clev_rec := p_clev_rec;
6640 
6641     --
6642     -- Calling amount round-off process
6643     --
6644     roundoff_line_amount(
6645                          x_return_status   => x_return_status,
6646                          x_msg_count       => x_msg_count,
6647                          x_msg_data        => x_msg_data,
6648                          p_clev_rec        => l_clev_rec,
6649                          p_klev_rec        => l_klev_rec,
6650                          x_clev_rec        => lx_clev_rec,
6651                          x_klev_rec        => lx_klev_rec
6652                         );
6653 
6654     -- check return status
6655     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
6656           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6657     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
6658           raise OKL_API.G_EXCEPTION_ERROR;
6659     End If;
6660 
6661     l_klev_rec := lx_klev_rec;
6662     l_clev_rec := lx_clev_rec;
6663 
6664     --Bug# 3143522
6665     --
6666     -- call procedure to get default line dates for Fee and service lines
6667     --
6668     If nvl(l_clev_rec.start_date,OKL_API.G_MISS_DATE)    = OKL_API.G_MISS_DATE or
6669        nvl(l_clev_rec.end_date,OKL_API.G_MISS_DATE)      = OKL_API.G_MISS_DATE or
6670        nvl(l_clev_rec.currency_code,OKL_API.G_MISS_CHAR) = OKL_API.G_MISS_CHAR or
6671        nvl(l_clev_rec.sts_code,OKL_API.G_MISS_CHAR)      = OKL_API.G_MISS_CHAR then
6672 
6673 
6674        l_dt_clev_rec := l_clev_rec;
6675 
6676        open l_orig_clev_csr(p_cle_id => l_clev_rec.id);
6677            fetch l_orig_clev_csr into l_orig_chr_id,
6678                                       l_orig_cle_id,
6679                                       l_orig_lse_id,
6680                                       l_orig_start_date,
6681                                       l_orig_end_date,
6682                                       l_orig_currency_code,
6683                                       l_orig_sts_code;
6684        close l_orig_clev_csr;
6685 
6686        If nvl(l_dt_clev_rec.dnz_chr_id,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM then
6687           l_dt_clev_rec.dnz_chr_id := l_orig_chr_id;
6688        End If;
6689        If nvl(l_dt_clev_rec.cle_id,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM then
6690            l_dt_clev_rec.cle_id := l_orig_cle_id;
6691        End If;
6692        If nvl(l_dt_clev_rec.lse_id,OKL_API.G_MISS_NUM) = OKL_API.G_MISS_NUM then
6693            l_dt_clev_rec.lse_id := l_orig_lse_id;
6694        End If;
6695        If nvl(l_dt_clev_rec.start_date,OKL_API.G_MISS_DATE) = OKL_API.G_MISS_DATE then
6696            l_dt_clev_rec.start_date := l_orig_start_date;
6697        End If;
6698        If nvl(l_dt_clev_rec.end_date,OKL_API.G_MISS_DATE) = OKL_API.G_MISS_DATE then
6699            l_dt_clev_rec.end_date := l_orig_end_date;
6700        End If;
6701        If nvl(l_dt_clev_rec.currency_code,OKL_API.G_MISS_CHAR) = OKL_API.G_MISS_CHAR then
6702            l_dt_clev_rec.currency_code := l_orig_currency_code;
6703        End If;
6704        If nvl(l_dt_clev_rec.sts_code,OKL_API.G_MISS_CHAR) = OKL_API.G_MISS_CHAR then
6705            l_dt_clev_rec.sts_code := l_orig_sts_code;
6706        End If;
6707 
6708     If nvl(l_dt_clev_rec.start_date,OKL_API.G_MISS_DATE)    = OKL_API.G_MISS_DATE or
6709        nvl(l_dt_clev_rec.end_date,OKL_API.G_MISS_DATE)      = OKL_API.G_MISS_DATE or
6710        nvl(l_dt_clev_rec.currency_code,OKL_API.G_MISS_CHAR) = OKL_API.G_MISS_CHAR or
6711        nvl(l_dt_clev_rec.sts_code,OKL_API.G_MISS_CHAR)      = OKL_API.G_MISS_CHAR then
6712 
6713           get_line_dates(p_clev_rec       => l_dt_clev_rec,
6714                          x_return_status  => x_return_status,
6715                          x_clev_rec       => lx_dt_clev_rec);
6716 
6717            -- check return status
6718            If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
6719                raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6720            Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
6721                raise OKL_API.G_EXCEPTION_ERROR;
6722            End If;
6723 
6724             If nvl(lx_dt_clev_rec.start_date,OKL_API.G_MISS_DATE) <> OKL_API.G_MISS_DATE then
6725                 l_clev_rec.start_date := lx_dt_clev_rec.start_date;
6726             End If;
6727             If nvl(lx_dt_clev_rec.end_date,OKL_API.G_MISS_DATE) <> OKL_API.G_MISS_DATE then
6728                 l_clev_rec.end_date  := lx_dt_clev_rec.end_date;
6729             End If;
6730             If nvl(lx_dt_clev_rec.currency_code,OKL_API.G_MISS_CHAR) <> OKL_API.G_MISS_CHAR then
6731                 l_clev_rec.currency_code  := lx_dt_clev_rec.currency_code;
6732             End If;
6733             If nvl(lx_dt_clev_rec.sts_code,OKL_API.G_MISS_CHAR)  <> OKL_API.G_MISS_CHAR then
6734                 l_clev_rec.sts_code  := lx_dt_clev_rec.sts_code;
6735             End If;
6736         End If;
6737     End If;
6738     --Bug# 3143522
6739 
6740     --
6741     -- call procedure in complex API
6742     --
6743     okl_okc_migration_pvt.update_contract_line(
6744          p_api_version        => p_api_version,
6745          p_init_msg_list        => p_init_msg_list,
6746          x_return_status         => x_return_status,
6747          x_msg_count             => x_msg_count,
6748          x_msg_data              => x_msg_data,
6749          p_clev_rec                => l_clev_rec,
6750          x_clev_rec                => x_clev_rec);
6751 
6752     -- check return status
6753     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
6754           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6755     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
6756           raise OKL_API.G_EXCEPTION_ERROR;
6757     End If;
6758 
6759     -- get id from OKC record
6760     l_klev_rec.ID := x_clev_rec.ID;
6761 
6762     -- check whether the shadow is present
6763     open l_klev_csr(l_klev_rec.id);
6764         fetch l_klev_csr into l_dummy_var;
6765     close l_klev_csr;
6766 
6767     -- call procedure in complex API
6768     -- if l_dummy_var is changed then the shadow is present
6769     -- and we need to update it, otherwise we need to create the shadow
6770     if (l_dummy_var = 'x') THEN
6771         OKL_KLE_PVT.Update_Row(
6772               p_api_version        => p_api_version,
6773               p_init_msg_list        => p_init_msg_list,
6774             x_return_status     => x_return_status,
6775             x_msg_count         => x_msg_count,
6776             x_msg_data          => x_msg_data,
6777             p_klev_rec          => l_klev_rec,
6778             x_klev_rec          => x_klev_rec);
6779     else
6780         OKL_KLE_PVT.Insert_Row(
6781               p_api_version        => p_api_version,
6782               p_init_msg_list        => p_init_msg_list,
6783             x_return_status     => x_return_status,
6784             x_msg_count         => x_msg_count,
6785             x_msg_data          => x_msg_data,
6786             p_klev_rec          => l_klev_rec,
6787             x_klev_rec          => x_klev_rec);
6788     end if;
6789 
6790     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
6791           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6792     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
6793           raise OKL_API.G_EXCEPTION_ERROR;
6794     End If;
6795 
6796     If p_edit_mode = 'Y' Then
6797         If (x_clev_rec.dnz_chr_id is NOT NULL) AND (x_clev_rec.dnz_chr_id <> OKL_API.G_MISS_NUM) THEN
6798             --cascade edit status on to lines
6799             okl_contract_status_pub.cascade_lease_status_edit
6800                     (p_api_version     => p_api_version,
6801                      p_init_msg_list   => p_init_msg_list,
6802                      x_return_status   => x_return_status,
6803                      x_msg_count       => x_msg_count,
6804                      x_msg_data        => x_msg_data,
6805                      p_chr_id          => x_clev_rec.dnz_chr_id);
6806 
6807              If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
6808                  raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6809              Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
6810                  raise OKL_API.G_EXCEPTION_ERROR;
6811              End If;
6812          END IF;
6813     End If;
6814 
6815    /*
6816    -- vthiruva, 08/19/2004
6817    -- START, Code change to enable Business Event
6818    */
6819     --fetch the line style code for the record
6820     OPEN lty_code_csr(x_clev_rec.ID);
6821     FETCH lty_code_csr into l_lty_code;
6822     CLOSE lty_code_csr;
6823 
6824     IF l_lty_code = 'FREE_FORM' THEN
6825         -- raise the business event for update credit limit if line style code is FREE_FORM
6826         l_event_name  := G_WF_EVT_CR_LMT_UPDATED;
6827         l_raise_business_event := OKL_API.G_TRUE;
6828         --create the parameter list to pass to raise_event
6829         wf_event.AddParameterToList(G_WF_ITM_CR_LINE_ID,l_clev_rec.dnz_chr_id,l_parameter_list);
6830         wf_event.AddParameterToList(G_WF_ITM_CR_LMT_ID,l_clev_rec.id,l_parameter_list);
6831     ELSIF l_lty_code = 'FREE_FORM1' THEN
6832       -- raise business event only if the context contract is a lease contract
6833       l_raise_business_event := OKL_LLA_UTIL_PVT.is_lease_contract(l_clev_rec.dnz_chr_id);
6834       IF(l_raise_business_event = OKL_API.G_TRUE)THEN
6835         -- raise the business event for create asset, if line style code is FREE_FORM1
6836         l_event_name  := G_WF_EVT_ASSET_UPDATED;
6837         --create the parameter list to pass to raise_event
6838         wf_event.AddParameterToList(G_WF_ITM_CONTRACT_ID,l_clev_rec.dnz_chr_id,l_parameter_list);
6839         wf_event.AddParameterToList(G_WF_ITM_ASSET_ID,x_clev_rec.id,l_parameter_list);
6840       END IF;
6841     ELSIF l_lty_code = 'SOLD_SERVICE' THEN
6842       -- raise business event only if the context contract is a lease contract
6843       l_raise_business_event := OKL_LLA_UTIL_PVT.is_lease_contract(l_clev_rec.dnz_chr_id);
6844       IF(l_raise_business_event = OKL_API.G_TRUE)THEN
6845         --raise the business event for create service, if line style code is SOLD_SERVICE
6846         l_event_name  := G_WF_EVT_SERVICE_UPDATED;
6847         --create the parameter list to pass to raise_event
6848         wf_event.AddParameterToList(G_WF_ITM_CONTRACT_ID,l_clev_rec.dnz_chr_id,l_parameter_list);
6849         wf_event.AddParameterToList(G_WF_ITM_SRV_LINE_ID,x_clev_rec.id,l_parameter_list);
6850         -- check if this service line is linked with a service contract
6851         OPEN get_linked_serv_cle(l_clev_rec.dnz_chr_id,x_clev_rec.id);
6852         FETCH get_linked_serv_cle INTO l_linked_serv_cle_id;
6853         CLOSE get_linked_serv_cle;
6854         IF(l_linked_serv_cle_id IS NOT NULL)THEN
6855           -- we have a service line, derive the service contract and pass the service line and
6856           -- service contract to the event
6857           OPEN get_linked_serv_khr(l_linked_serv_cle_id);
6858           FETCH get_linked_serv_khr INTO l_linked_serv_chr_id;
6859           CLOSE get_linked_serv_khr;
6860           wf_event.AddParameterToList(G_WF_ITM_SERVICE_KHR_ID,l_linked_serv_chr_id,l_parameter_list);
6861           wf_event.AddParameterToList(G_WF_ITM_SERVICE_CLE_ID,l_linked_serv_cle_id,l_parameter_list);
6862         END IF;
6863       END IF;
6864     --update_fee event is raised from here rather than okl_maintain_fee_pvt
6865     --as split contract process does not call okl_maintain_fee_pvt, but directly calls
6866     --okl_contract_pvt
6867     ELSIF l_lty_code = 'FEE' THEN
6868       -- raise business event only if the context contract is a lease contract
6869       l_raise_business_event := OKL_LLA_UTIL_PVT.is_lease_contract(l_clev_rec.dnz_chr_id);
6870       IF(l_raise_business_event = OKL_API.G_TRUE)THEN
6871         -- raise the business event for fee updated, if line style code is FEE
6872         l_event_name  := G_WF_EVT_FEE_UPDATED;
6873         --create the parameter list to pass to raise_event
6874         wf_event.AddParameterToList(G_WF_ITM_CONTRACT_ID,l_clev_rec.dnz_chr_id,l_parameter_list);
6875         wf_event.AddParameterToList(G_WF_ITM_FEE_LINE_ID,x_clev_rec.id,l_parameter_list);
6876       END IF;
6877     END IF;
6878 
6879     -- raise business event only if the contract is a lease contract, the raise_event flag is on and business event
6880     -- name is specified. the event should also be raised if this is a credit limit, in which case is_lease_contract
6881     -- does not hold good
6882     IF(l_raise_business_event = OKL_API.G_TRUE AND l_event_name IS NOT NULL) THEN
6883          raise_business_event(p_api_version    => p_api_version,
6884                            p_init_msg_list  => p_init_msg_list,
6885                            x_return_status  => x_return_status,
6886                            x_msg_count      => x_msg_count,
6887                            x_msg_data       => x_msg_data,
6888                            p_event_name     => l_event_name,
6889                            p_parameter_list => l_parameter_list);
6890       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6891         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6892       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6893         RAISE OKL_API.G_EXCEPTION_ERROR;
6894       END IF;
6895     END IF;
6896 
6897    /*
6898    -- vthiruva, 08/19/2004
6899    -- END, Code change to enable Business Event
6900    */
6901 
6902   OKL_API.END_ACTIVITY(x_msg_count      => x_msg_count,
6903                                  x_msg_data                => x_msg_data);
6904   EXCEPTION
6905     when OKL_API.G_EXCEPTION_ERROR then
6906       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6907                         p_api_name  => l_api_name,
6908                         p_pkg_name  => g_pkg_name,
6909                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
6910                         x_msg_count => x_msg_count,
6911                         x_msg_data  => x_msg_data,
6912                         p_api_type  => g_api_type);
6913       if l_klev_csr%ISOPEN then
6914           close l_klev_csr;
6915         end if;
6916 
6917     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
6918       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6919                         p_api_name  => l_api_name,
6920                         p_pkg_name  => g_pkg_name,
6921                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
6922                         x_msg_count => x_msg_count,
6923                         x_msg_data  => x_msg_data,
6924                         p_api_type  => g_api_type);
6925       if l_klev_csr%ISOPEN then
6926           close l_klev_csr;
6927         end if;
6928 
6929     when OTHERS then
6930       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6931                         p_api_name  => l_api_name,
6932                         p_pkg_name  => g_pkg_name,
6933                         p_exc_name  => 'OTHERS',
6934                         x_msg_count => x_msg_count,
6935                         x_msg_data  => x_msg_data,
6936                         p_api_type  => g_api_type);
6937       if l_klev_csr%ISOPEN then
6938           close l_klev_csr;
6939         end if;
6940   END update_contract_line;
6941 
6942 -- Start of comments
6943 --
6944 -- Procedure Name  : update_contract_line (default)
6945 -- Description     : updates contract line for shadowed contract
6946 -- Business Rules  :
6947 -- Parameters      :
6948 -- Version         : 1.0
6949 -- Bug # 2525554   : Now calls the p_edit_mode form of update_contract_line
6950 --                   with p_edit_mode = 'Y' as default. This is the original
6951 --                   default update contract line.
6952 -- End of comments
6953   PROCEDURE update_contract_line(
6954     p_api_version                  IN NUMBER,
6955     p_init_msg_list                IN VARCHAR2,
6956     x_return_status                OUT NOCOPY VARCHAR2,
6957     x_msg_count                    OUT NOCOPY NUMBER,
6958     x_msg_data                     OUT NOCOPY VARCHAR2,
6959     p_clev_rec                     IN  okl_okc_migration_pvt.clev_rec_type,
6960     p_klev_rec                     IN  klev_rec_type,
6961     x_clev_rec                     OUT NOCOPY okl_okc_migration_pvt.clev_rec_type,
6962     x_klev_rec                     OUT NOCOPY klev_rec_type) IS
6963 
6964     l_clev_rec okl_okc_migration_pvt.clev_rec_type;
6965     l_klev_rec klev_rec_type;
6966 
6967     l_api_name          CONSTANT VARCHAR2(30) := 'UPDATE_CONTRACT_LINE';
6968     l_api_version               CONSTANT NUMBER          := 1.0;
6969     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
6970 
6971   BEGIN
6972 
6973     -- call START_ACTIVITY to create savepoint, check compatibility
6974     -- and initialize message list
6975     l_return_status := OKL_API.START_ACTIVITY(
6976                         p_api_name      => l_api_name,
6977                         p_pkg_name      => g_pkg_name,
6978                         p_init_msg_list => p_init_msg_list,
6979                         l_api_version   => l_api_version,
6980                         p_api_version   => p_api_version,
6981                         p_api_type      => g_api_type,
6982                         x_return_status => x_return_status);
6983 
6984     -- check if activity started successfully
6985     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6986        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6987     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
6988        raise OKL_API.G_EXCEPTION_ERROR;
6989     End If;
6990 
6991     l_klev_rec := p_klev_rec;
6992     l_clev_rec := p_clev_rec;
6993 
6994     --
6995     -- call procedure in complex API
6996     --
6997     update_contract_line(
6998          p_api_version            => p_api_version,
6999          p_init_msg_list        => p_init_msg_list,
7000          x_return_status         => x_return_status,
7001          x_msg_count             => x_msg_count,
7002          x_msg_data              => x_msg_data,
7003          p_clev_rec                    => l_clev_rec,
7004      p_klev_rec         => l_klev_rec,
7005      p_edit_mode        => 'Y',
7006          x_clev_rec                    => x_clev_rec,
7007      x_klev_rec         => x_klev_rec);
7008 
7009     -- check return status
7010     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
7011           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7012     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
7013           raise OKL_API.G_EXCEPTION_ERROR;
7014     End If;
7015 
7016   OKL_API.END_ACTIVITY(x_msg_count      => x_msg_count,
7017                                  x_msg_data                => x_msg_data);
7018   EXCEPTION
7019     when OKL_API.G_EXCEPTION_ERROR then
7020       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7021                         p_api_name  => l_api_name,
7022                         p_pkg_name  => g_pkg_name,
7023                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
7024                         x_msg_count => x_msg_count,
7025                         x_msg_data  => x_msg_data,
7026                         p_api_type  => g_api_type);
7027 
7028     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
7029       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7030                         p_api_name  => l_api_name,
7031                         p_pkg_name  => g_pkg_name,
7032                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
7033                         x_msg_count => x_msg_count,
7034                         x_msg_data  => x_msg_data,
7035                         p_api_type  => g_api_type);
7036 
7037     when OTHERS then
7038       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7039                         p_api_name  => l_api_name,
7040                         p_pkg_name  => g_pkg_name,
7041                         p_exc_name  => 'OTHERS',
7042                         x_msg_count => x_msg_count,
7043                         x_msg_data  => x_msg_data,
7044                         p_api_type  => g_api_type);
7045   END update_contract_line;
7046 
7047 -- Start of comments
7048 -- Bug 2525554      : added this overloaded form for bug 252554
7049 -- Procedure Name   : update_contract_line
7050 -- Description      : updates contract line for shadowed contract
7051 -- Business Rules   : If p_edit_mode is sent as 'Y' contract status will be
7052 --                    updated to 'INCOMPLETE' else it will not be updated to
7053 --                    'INCOMPLETE'. Facilitates updater transactions which
7054 --                    happen in the background while the contract is not 'BOOKED'
7055 --                    for example - calculation and updation of okl_k_lines.
7056 --                    capitalized_interest every time user navigates to booking
7057 --                    page. It is not desired that khr status change to 'INCOMPLETE'
7058 --                    every time capitalized interest is updated.
7059 -- Parameters       :
7060 -- Version          : 1.0
7061 -- End of comments
7062 
7063   PROCEDURE update_contract_line(
7064     p_api_version                  IN NUMBER,
7065     p_init_msg_list                IN VARCHAR2,
7066     x_return_status                OUT NOCOPY VARCHAR2,
7067     x_msg_count                    OUT NOCOPY NUMBER,
7068     x_msg_data                     OUT NOCOPY VARCHAR2,
7069     p_clev_tbl                     IN  okl_okc_migration_pvt.clev_tbl_type,
7070     p_klev_tbl                     IN  klev_tbl_type,
7071     p_edit_mode                    IN  VARCHAR2,
7072     x_clev_tbl                     OUT NOCOPY okl_okc_migration_pvt.clev_tbl_type,
7073     x_klev_tbl                     OUT NOCOPY klev_tbl_type) IS
7074 
7075     l_api_name               CONSTANT VARCHAR2(30) := 'UPDATE_CONTRACT_LINE';
7076     l_api_version                CONSTANT NUMBER          := 1.0;
7077     l_return_status          VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
7078     l_overall_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
7079     i                                NUMBER;
7080     l_klev_tbl                  klev_tbl_type := p_klev_tbl;
7081   BEGIN
7082     -- call START_ACTIVITY to create savepoint, check compatibility
7083     -- and initialize message list
7084     l_return_status := OKL_API.START_ACTIVITY(
7085                         p_api_name      => l_api_name,
7086                         p_pkg_name      => g_pkg_name,
7087                         p_init_msg_list => p_init_msg_list,
7088                         l_api_version   => l_api_version,
7089                         p_api_version   => p_api_version,
7090                         p_api_type      => g_api_type,
7091                         x_return_status => x_return_status);
7092 
7093     -- check if activity started successfully
7094     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7095        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7096     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
7097        raise OKL_API.G_EXCEPTION_ERROR;
7098 
7099     End If;
7100 
7101     If (p_clev_tbl.COUNT > 0) Then
7102            i := p_clev_tbl.FIRST;
7103            LOOP
7104                 -- call procedure in complex API for a record
7105                 update_contract_line(
7106                         p_api_version                => p_api_version,
7107                         p_init_msg_list                => p_init_msg_list,
7108                         x_return_status         => x_return_status,
7109                         x_msg_count             => x_msg_count,
7110                         x_msg_data              => x_msg_data,
7111                         p_clev_rec                    => p_clev_tbl(i),
7112                 p_klev_rec                    => l_klev_tbl(i),
7113             p_edit_mode         => p_edit_mode,
7114                         x_clev_rec                    => x_clev_tbl(i),
7115                 x_klev_rec                    => x_klev_tbl(i));
7116 
7117                 If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
7118                    If l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR Then
7119                          l_overall_status := x_return_status;
7120                    End If;
7121                 End If;
7122 
7123         EXIT WHEN (i = p_clev_tbl.LAST);
7124                 i := p_clev_tbl.NEXT(i);
7125            END LOOP;
7126 
7127            -- return overall status
7128            x_return_status := l_overall_status;
7129     End If;
7130 
7131     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
7132           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7133     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
7134           raise OKL_API.G_EXCEPTION_ERROR;
7135     End If;
7136 
7137     OKL_API.END_ACTIVITY(       x_msg_count        => x_msg_count,
7138                                 x_msg_data        => x_msg_data);
7139   EXCEPTION
7140     when OKL_API.G_EXCEPTION_ERROR then
7141       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7142                         p_api_name  => l_api_name,
7143                         p_pkg_name  => g_pkg_name,
7144                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
7145                         x_msg_count => x_msg_count,
7146                         x_msg_data  => x_msg_data,
7147                         p_api_type  => g_api_type);
7148 
7149     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
7150       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7151                         p_api_name  => l_api_name,
7152                         p_pkg_name  => g_pkg_name,
7153                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
7154                         x_msg_count => x_msg_count,
7155                         x_msg_data  => x_msg_data,
7156                         p_api_type  => g_api_type);
7157 
7158     when OTHERS then
7159       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7160                         p_api_name  => l_api_name,
7161                         p_pkg_name  => g_pkg_name,
7162                         p_exc_name  => 'OTHERS',
7163                         x_msg_count => x_msg_count,
7164                         x_msg_data  => x_msg_data,
7165                         p_api_type  => g_api_type);
7166 
7167   END update_contract_line;
7168 
7169 
7170 -- Start of comments
7171 --
7172 -- Procedure Name  : update_contract_line
7173 -- Description     : updates contract line for shadowed contract(default)
7174 -- Business Rules  :
7175 -- Parameters      :
7176 -- Version         : 1.0
7177 -- Bug # 2525554   : Now calls the p_edit_mode form of update_contract_line
7178 --                   with p_edit_mode = 'Y' as default. This is the original
7179 --                   default update contract line for table signature.
7180 -- End of comments
7181   PROCEDURE update_contract_line(
7182     p_api_version                  IN NUMBER,
7183     p_init_msg_list                IN VARCHAR2,
7184     x_return_status                OUT NOCOPY VARCHAR2,
7185     x_msg_count                    OUT NOCOPY NUMBER,
7186     x_msg_data                     OUT NOCOPY VARCHAR2,
7187     p_clev_tbl                     IN  okl_okc_migration_pvt.clev_tbl_type,
7188     p_klev_tbl                     IN  klev_tbl_type,
7189     x_clev_tbl                     OUT NOCOPY okl_okc_migration_pvt.clev_tbl_type,
7190     x_klev_tbl                     OUT NOCOPY klev_tbl_type) IS
7191 
7192     l_api_name               CONSTANT VARCHAR2(30) := 'UPDATE_CONTRACT_LINE';
7193     l_api_version                CONSTANT NUMBER          := 1.0;
7194     l_return_status          VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
7195     l_overall_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
7196     i                                NUMBER;
7197     l_klev_tbl                  klev_tbl_type := p_klev_tbl;
7198   BEGIN
7199     -- call START_ACTIVITY to create savepoint, check compatibility
7200     -- and initialize message list
7201     l_return_status := OKL_API.START_ACTIVITY(
7202                         p_api_name      => l_api_name,
7203                         p_pkg_name      => g_pkg_name,
7204                         p_init_msg_list => p_init_msg_list,
7205                         l_api_version   => l_api_version,
7206                         p_api_version   => p_api_version,
7207                         p_api_type      => g_api_type,
7208                         x_return_status => x_return_status);
7209 
7210     -- check if activity started successfully
7211     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7212        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7213     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
7214        raise OKL_API.G_EXCEPTION_ERROR;
7215 
7216     End If;
7217 
7218     If (p_clev_tbl.COUNT > 0) Then
7219 
7220                 update_contract_line(
7221                         p_api_version                => p_api_version,
7222                         p_init_msg_list                => p_init_msg_list,
7223                         x_return_status         => x_return_status,
7224                         x_msg_count             => x_msg_count,
7225                         x_msg_data              => x_msg_data,
7226                         p_clev_tbl                    => p_clev_tbl,
7227                 p_klev_tbl                    => l_klev_tbl,
7228             p_edit_mode         => 'Y',
7229                         x_clev_tbl                    => x_clev_tbl,
7230                 x_klev_tbl                    => x_klev_tbl);
7231 
7232         If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
7233                 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7234         Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
7235                 raise OKL_API.G_EXCEPTION_ERROR;
7236         End If;
7237 
7238     End If;
7239 
7240 
7241     OKL_API.END_ACTIVITY(       x_msg_count        => x_msg_count,
7242                                 x_msg_data        => x_msg_data);
7243   EXCEPTION
7244     when OKL_API.G_EXCEPTION_ERROR then
7245       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7246                         p_api_name  => l_api_name,
7247                         p_pkg_name  => g_pkg_name,
7248                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
7249                         x_msg_count => x_msg_count,
7250                         x_msg_data  => x_msg_data,
7251                         p_api_type  => g_api_type);
7252 
7253     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
7254       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7255                         p_api_name  => l_api_name,
7256                         p_pkg_name  => g_pkg_name,
7257                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
7258                         x_msg_count => x_msg_count,
7259                         x_msg_data  => x_msg_data,
7260                         p_api_type  => g_api_type);
7261 
7262     when OTHERS then
7263       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7264                         p_api_name  => l_api_name,
7265                         p_pkg_name  => g_pkg_name,
7266                         p_exc_name  => 'OTHERS',
7267                         x_msg_count => x_msg_count,
7268                         x_msg_data  => x_msg_data,
7269                         p_api_type  => g_api_type);
7270 
7271   END update_contract_line;
7272 
7273 
7274 -- Start of comments
7275 --
7276 -- Procedure Name  : delete_contract_line
7277 -- Description     : deletes contract line for shadowed contract
7278 -- Business Rules  : line can be deleted only when there is no sublines attached
7279 -- Parameters      :
7280 -- Version         : 1.0
7281 -- End of comments
7282   PROCEDURE delete_contract_line(
7283     p_api_version                  IN NUMBER,
7284     p_init_msg_list                IN VARCHAR2,
7285     x_return_status                OUT NOCOPY VARCHAR2,
7286     x_msg_count                    OUT NOCOPY NUMBER,
7287     x_msg_data                     OUT NOCOPY VARCHAR2,
7288     p_clev_rec                     IN  okl_okc_migration_pvt.clev_rec_type,
7289     p_klev_rec                     IN  klev_rec_type) IS
7290 
7291     l_clev_rec okl_okc_migration_pvt.clev_rec_type;
7292     l_klev_rec klev_rec_type;
7293 
7294     l_clev_rec_out okl_okc_migration_pvt.clev_rec_type;
7295     l_klev_rec_out klev_rec_type;
7296 
7297     l_deletion_type     Varchar2(1);
7298 
7299     l_api_name              CONSTANT VARCHAR2(30) := 'DELETE_CONTRACT_LINE';
7300     l_api_version               CONSTANT NUMBER          := 1.0;
7301     l_return_status         VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
7302 
7303      --cursor to find out chr id required to flip status at edit point
7304     CURSOR chr_id_crs (p_cle_id IN NUMBER) is
7305     SELECT DNZ_CHR_ID
7306     FROM   OKC_K_LINES_B
7307     WHERE  ID = P_CLE_ID;
7308 
7309     l_dnz_chr_id   OKC_K_LINES_B.dnz_chr_id%TYPE;
7310 
7311     --cursor to find out if any transactions hanging off the line to be deleted
7312     CURSOR l_get_txl_crs (p_kle_id IN NUMBER) is
7313     SELECT tas_id,
7314            id
7315     FROM   OKL_TXL_ASSETS_B
7316     WHERE  kle_id = p_kle_id;
7317 
7318     l_tas_id    OKL_TXL_ASSETS_B.TAS_ID%TYPE;
7319     l_txl_id    OKL_TXL_ASSETS_B.ID%TYPE;
7320 
7321     --cursor to get the transaction detail record if it exists
7322     CURSOR l_get_txd_crs (p_tal_id IN NUMBER) is
7323     SELECT ID
7324     FROM   OKL_TXD_ASSETS_B
7325     WHERE  tal_id = p_tal_id;
7326 
7327     l_txd_id      OKL_TXD_ASSETS_B.ID%TYPE;
7328 
7329     l_adpv_rec        OKL_TXD_ASSETS_PUB.adpv_rec_type;
7330     l_tlpv_rec        OKL_TXL_ASSETS_PUB.tlpv_rec_type;
7331     l_thpv_rec        OKL_TRX_ASSETS_PUB.thpv_rec_type;
7332 
7333      --Bug # 2522268
7334     --cursor to get ib transaction line record
7335     CURSOR l_get_iti_csr (p_kle_id IN NUMBER) is
7336     SELECT tas_id,
7337            id
7338     FROM   OKL_TXL_ITM_INSTS
7339     WHERE  kle_id = p_kle_id;
7340 
7341     l_iti_tas_id   OKL_TXL_ITM_INSTS.TAS_ID%TYPE;
7342     l_iti_id       OKL_TXL_ITM_INSTS.ID%TYPE;
7343 
7344     l_iipv_rec     OKL_TXL_ITM_INSTS_PUB.iipv_rec_type;
7345     l_iti_thpv_rec OKL_TRX_ASSETS_PUB.thpv_rec_type;
7346      --Bug # 2522268
7347 
7348     --Bug# 3143522 : delete supplier invoice details is line is deleted
7349     --cursor to ger supplier invoice details
7350     CURSOR l_get_sid_csr (p_kle_id IN NUMBER) is
7351     Select id
7352     FROM   OKL_SUPP_INVOICE_DTLS
7353     where  cle_id = p_kle_id;
7354 
7355     l_sid_id     OKL_SUPP_INVOICE_DTLS.ID%TYPE;
7356 
7357     l_sidv_tbl   OKL_SUPP_INVOICE_DTLS_PUB.sidv_tbl_type;
7358 
7359     --cursor to get party payment header for line
7360     -- Passthru, Bug 4350255
7361     CURSOR l_get_pyh_csr (p_kle_id IN NUMBER) is
7362     Select pyh.id
7363     FROM   OKL_PARTY_PAYMENT_HDR  pyh
7364     WHERE  pyh.cle_id = p_kle_id;
7365 
7366     l_pyh_id    OKL_PARTY_PAYMENT_HDR.ID%TYPE;
7367     l_pphv_tbl  OKL_PARTY_PAYMENTS_PVT.pphv_tbl_type;
7368 
7369     --cursor to get party payment details for line
7370     CURSOR l_get_pyd_csr (p_kle_id IN NUMBER) is
7371     Select pyd.id
7372     FROM   OKL_PARTY_PAYMENT_DTLS pyd,
7373            OKC_K_PARTY_ROLES_B    cplb
7374     WHERE  pyd.cpl_id = cplb.id
7375     AND    nvl(cplb.cle_id,-9999) = p_kle_id;
7376 
7377     l_pyd_id    OKL_PARTY_PAYMENT_DTLS.ID%TYPE;
7378 
7379     l_ppydv_tbl OKL_PYD_PVT.ppydv_tbl_type;
7380     i   number  default 0;
7381 
7382     --Bug# 4558486
7383     CURSOR l_kpl_csr(p_kle_id IN NUMBER,
7384                      p_khr_id IN NUMBER) is
7385     SELECT kpl.id
7386     FROM   okl_k_party_roles kpl,
7387            okc_k_party_roles_b cpl
7388     WHERE  kpl.id = cpl.id
7389     AND    cpl.cle_id = p_kle_id
7390     AND    cpl.dnz_chr_id = p_khr_id;
7391 
7392     l_kplv_tbl OKL_KPL_PVT.kplv_tbl_type;
7393 
7394     --Bug# 3143522
7395     /*
7396     -- vthiruva, 08/19/2004
7397     -- START, Code change to enable Business Event
7398     */
7399     --cursor to fetch the line style code for line style id passed
7400     CURSOR lty_code_csr(p_line_id okc_k_lines_b.id%TYPE) IS
7401     SELECT lse.lty_code
7402     FROM okc_line_styles_b lse,
7403          okc_k_lines_b lns
7404     WHERE lns.id = p_line_id
7405     AND lse.id = lns.lse_id;
7406 
7407     l_lty_code              okc_line_styles_b.lty_code%TYPE;
7408     l_parameter_list        wf_parameter_list_t;
7409     l_raise_business_event VARCHAR2(1) := OKL_API.G_FALSE;
7410     l_business_event_name WF_EVENTS.NAME%TYPE;
7411     /*
7412     -- vthiruva, 08/19/2004
7413     -- END, Code change to enable Business Event
7414     */
7415 
7416   BEGIN
7417 
7418     -- call START_ACTIVITY to create savepoint, check compatibility
7419     -- and initialize message list
7420     l_return_status := OKL_API.START_ACTIVITY(
7421                         p_api_name      => l_api_name,
7422                         p_pkg_name      => g_pkg_name,
7423                         p_init_msg_list => p_init_msg_list,
7424                         l_api_version   => l_api_version,
7425                         p_api_version   => p_api_version,
7426                         p_api_type      => g_api_type,
7427                         x_return_status => x_return_status);
7428 
7429     -- check if activity started successfully
7430     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7431        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7432     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
7433        raise OKL_API.G_EXCEPTION_ERROR;
7434     End If;
7435 
7436     l_klev_rec := p_klev_rec;
7437     l_clev_rec := p_clev_rec;
7438 
7439     --check if okl contract line delete is allowed
7440     kle_delete_allowed(p_cle_id          => l_klev_rec.id,
7441                        x_deletion_type   => l_deletion_type,
7442                        x_return_status   => x_return_status);
7443 
7444     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7445        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7446     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
7447        raise OKL_API.G_EXCEPTION_ERROR;
7448     End If;
7449 
7450     OPEN  lty_code_csr(l_clev_rec.id);
7451     FETCH lty_code_csr into l_lty_code;
7452     CLOSE lty_code_csr;
7453 
7454 
7455     If l_deletion_type = 'L' Then --logical delete
7456        --update line status to 'Abandoned'
7457        l_clev_rec.sts_code := G_OKL_CANCELLED_STS_CODE;
7458        --l_clev_rec.end_date := sysdate;
7459 
7460        update_contract_line(
7461            p_api_version    => p_api_version,
7462            p_init_msg_list  => p_init_msg_list,
7463            x_return_status  => x_return_status,
7464            x_msg_count      => x_msg_count,
7465            x_msg_data       => x_msg_data,
7466            p_clev_rec       => l_clev_rec,
7467            p_klev_rec       => l_klev_rec,
7468            x_clev_rec       => l_clev_rec_out,
7469            x_klev_rec       => l_klev_rec_out
7470            );
7471 
7472        If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7473            raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7474        Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
7475            raise OKL_API.G_EXCEPTION_ERROR;
7476        End If;
7477 
7478        --Bug # 2522268 Begin
7479        --do logical deletion of asset number so
7480        -- old asset number is available for use
7481        Asset_Logical_Delete( p_api_version     => p_api_version,
7482                              p_init_msg_list   => p_init_msg_list,
7483                              x_return_status   => x_return_status,
7484                              x_msg_count       => x_msg_count,
7485                              x_msg_data        => x_msg_data,
7486                              p_cle_id          => l_clev_rec_out.id,
7487                              p_asset_number    => l_clev_rec_out.name);
7488 
7489        If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7490            raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7491        Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
7492            raise OKL_API.G_EXCEPTION_ERROR;
7493        End If;
7494 
7495        --do logical deletion of linked assets
7496        Linked_Asset_Delete(p_api_version     => p_api_version,
7497                            p_init_msg_list   => p_init_msg_list,
7498                            x_return_status   => x_return_status,
7499                            x_msg_count       => x_msg_count,
7500                            x_msg_data        => x_msg_data,
7501                            p_cle_id          => l_clev_rec_out.id,
7502                            p_deletion_type   => l_deletion_type);
7503 
7504        If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7505            raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7506        Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
7507            raise OKL_API.G_EXCEPTION_ERROR;
7508        End If;
7509         --Bug # 2522268 End
7510 
7511        --Bug # 2937980
7512        Inactivate_Streams
7513           ( p_api_version     => p_api_version,
7514             p_init_msg_list   => p_init_msg_list,
7515             x_return_status   => x_return_status,
7516             x_msg_count       => x_msg_count,
7517             x_msg_data        => x_msg_data,
7518             p_cle_id          => l_clev_rec.id);
7519 
7520        If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7521            raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7522        Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
7523            raise OKL_API.G_EXCEPTION_ERROR;
7524        End If;
7525        --Bug # 2937980
7526 
7527        If (l_clev_rec_out.dnz_chr_id is not null) AND (l_clev_rec_out.dnz_chr_id <> OKL_API.G_MISS_NUM) THEN
7528             --call to cascade the status to Incomplete
7529             okl_contract_status_pub.cascade_lease_status_edit
7530                     (p_api_version     => p_api_version,
7531                      p_init_msg_list   => p_init_msg_list,
7532                     x_return_status   => x_return_status,
7533                     x_msg_count       => x_msg_count,
7534                     x_msg_data        => x_msg_data,
7535                     p_chr_id          => l_clev_rec_out.dnz_chr_id);
7536 
7537             If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
7538                    raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7539             Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
7540                    raise OKL_API.G_EXCEPTION_ERROR;
7541             End If;
7542 
7543        End If;
7544 
7545     ElsIf l_deletion_type = 'N' Then --not allowed
7546         null; --delete is not allowed this will be normally an error
7547     ElsIf l_deletion_type = 'P' Then
7548 
7549           --call to cascade the status to Incomplete
7550           --this has to be done first as l_clev_rec.dnz_chr_id will be null
7551           -- once the line has been deleted.
7552           If (l_clev_rec.dnz_chr_id is NULL) or (l_clev_rec.dnz_chr_id = OKL_API.G_MISS_NUM) Then
7553               Open chr_id_crs(p_cle_id => l_clev_rec.cle_id);
7554                   Fetch chr_id_crs into l_dnz_chr_id;
7555                   If chr_id_crs%NOTFOUND Then
7556                      null;
7557                   End If;
7558               Close chr_id_crs;
7559           Else
7560              l_dnz_chr_id := l_clev_rec.dnz_chr_id;
7561           End If;
7562 
7563           If (l_dnz_chr_id is not null) AND (l_dnz_chr_id <> OKL_API.G_MISS_NUM) THEN
7564 
7565           okl_contract_status_pub.cascade_lease_status_edit
7566                 (p_api_version     => p_api_version,
7567                  p_init_msg_list   => p_init_msg_list,
7568                  x_return_status   => x_return_status,
7569                  x_msg_count       => x_msg_count,
7570                  x_msg_data        => x_msg_data,
7571                  p_chr_id          => l_dnz_chr_id);
7572 
7573           If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
7574                   raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7575           Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
7576                   raise OKL_API.G_EXCEPTION_ERROR;
7577           End If;
7578 
7579           End If;
7580 
7581         --Bug # 2522268
7582         --Physical delete of linked covered asset lines
7583         Linked_Asset_Delete(p_api_version     => p_api_version,
7584                            p_init_msg_list   => p_init_msg_list,
7585                            x_return_status   => x_return_status,
7586                            x_msg_count       => x_msg_count,
7587                            x_msg_data        => x_msg_data,
7588                            p_cle_id          => l_clev_rec.id,
7589                            p_deletion_type   => l_deletion_type);
7590 
7591         If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7592             raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7593         Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
7594             raise OKL_API.G_EXCEPTION_ERROR;
7595         End If;
7596         --Bug # 2522268 End
7597 
7598         --Bug# 3143522
7599         --delete associated party payment details
7600         i := 0;
7601         open l_get_pyd_csr(p_kle_id => l_clev_rec.id);
7602         Loop
7603             Fetch l_get_pyd_csr into l_pyd_id;
7604             Exit when l_get_pyd_csr%NOTFOUND;
7605             i := i+1;
7606             l_ppydv_tbl(i).id := l_pyd_id;
7607         End Loop;
7608         close l_get_pyd_csr;
7609 
7610         If l_ppydv_tbl.COUNT > 0 then
7611             OKL_PYD_PVT.delete_row
7612              (p_api_version      => p_api_version,
7613               p_init_msg_list    => p_init_msg_list,
7614               x_return_status    => x_return_status,
7615               x_msg_count        => x_msg_count,
7616               x_msg_data         => x_msg_data,
7617               p_ppydv_tbl        => l_ppydv_tbl);
7618 
7619            If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
7620                raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7621            Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
7622                raise OKL_API.G_EXCEPTION_ERROR;
7623            End If;
7624 
7625            l_ppydv_tbl.DELETE;
7626 
7627        End If;
7628        --Bug# 3143522
7629 
7630        -- Passthru Bug 4350255
7631         i := 0;
7632         open l_get_pyh_csr(p_kle_id => l_clev_rec.id);
7633         Loop
7634             Fetch l_get_pyh_csr into l_pyh_id;
7635             Exit when l_get_pyh_csr%NOTFOUND;
7636             i := i+1;
7637             l_pphv_tbl(i).id := l_pyh_id;
7638         End Loop;
7639         close l_get_pyh_csr;
7640 
7641         If l_pphv_tbl.COUNT > 0 then
7642             OKL_PARTY_PAYMENTS_PVT.DELETE_PARTY_PAYMENT_HDR
7643              (p_api_version      => p_api_version,
7644               p_init_msg_list    => p_init_msg_list,
7645               x_return_status    => x_return_status,
7646               x_msg_count        => x_msg_count,
7647               x_msg_data         => x_msg_data,
7648               p_pphv_tbl         => l_pphv_tbl );
7649 
7650            If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
7651                raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7652            Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
7653                raise OKL_API.G_EXCEPTION_ERROR;
7654            End If;
7655 
7656            l_pphv_tbl.DELETE;
7657 
7658        End If;
7659        -- Passthru Bug 4350255
7660 
7661         --Bug# 4558486
7662         -- Delete records from okl_k_party_roles
7663         i := 0;
7664         For l_kpl_rec in l_kpl_csr(p_kle_id => l_clev_rec.id,
7665                                    p_khr_id => l_dnz_chr_id)
7666         Loop
7667           i := i + 1;
7668           l_kplv_tbl(i).id := l_kpl_rec.id;
7669         End Loop;
7670 
7671         If l_kplv_tbl.COUNT > 0 then
7672             OKL_KPL_PVT.Delete_Row
7673                (p_api_version      => p_api_version,
7674                 p_init_msg_list    => p_init_msg_list,
7675                 x_return_status    => x_return_status,
7676                 x_msg_count        => x_msg_count,
7677                 x_msg_data         => x_msg_data,
7678                 p_kplv_tbl         => l_kplv_tbl);
7679 
7680            If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
7681                raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7682            Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
7683                raise OKL_API.G_EXCEPTION_ERROR;
7684            End If;
7685 
7686            l_kplv_tbl.DELETE;
7687         End If;
7688         --Bug# 4558486
7689 
7690         --
7691         -- call procedure in complex API
7692         --
7693         okl_okc_migration_pvt.delete_contract_line(
7694              p_api_version            => p_api_version,
7695              p_init_msg_list        => p_init_msg_list,
7696              x_return_status         => x_return_status,
7697              x_msg_count             => x_msg_count,
7698              x_msg_data              => x_msg_data,
7699          p_clev_rec                 => l_clev_rec);
7700 
7701 
7702       --12/10/01 ashish - changed this to call different okc api as we need to delete
7703       --okc_k_items automatically when okc_k_lines is deleted.
7704       --okc_contract_pub can be called directly here as there are no records involved
7705 
7706       --taken care of in another api with p_delete_cascade_yn flag
7707 
7708         -- check return status
7709         If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
7710               raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7711         Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
7712                raise OKL_API.G_EXCEPTION_ERROR;
7713         End If;
7714 
7715         -- get id from OKC record
7716         l_klev_rec.ID := l_clev_rec.ID;
7717 
7718         -- check if any transactions are hanging on this line
7719         OPEN l_get_txl_crs (p_kle_id => l_klev_rec.ID);
7720              FETCH l_get_txl_crs into l_tas_id, l_txl_id;
7721              If l_get_txl_crs%NOTFOUND Then
7722                  Null;
7723              Else
7724                  --find if any transaction details attached to the txl line
7725 
7726                  OPEN l_get_txd_crs (p_tal_id => l_txl_id);
7727                  FETCH l_get_txd_crs INTO l_txd_id;
7728                  If l_get_txd_crs%NOTFOUND Then
7729                     Null;
7730                  Else
7731                      --delete txd record
7732                      l_adpv_rec.id := l_txd_id;
7733                      OKL_TXD_ASSETS_PUB.delete_txd_asset_Def(
7734                          p_api_version     => p_api_version,
7735                          p_init_msg_list   => p_init_msg_list,
7736                          x_return_status   => x_return_status,
7737                          x_msg_count       => x_msg_count,
7738                          x_msg_data        => x_msg_data,
7739                          p_adpv_rec        => l_adpv_rec);
7740                       -- check return status
7741                       If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
7742                               raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7743                       Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
7744                               raise OKL_API.G_EXCEPTION_ERROR;
7745                       End If;
7746                   End If;
7747                   Close l_get_txd_crs;
7748                   --delete txl record
7749                   l_tlpv_rec.id := l_txl_id;
7750                   OKL_TXL_ASSETS_PUB.delete_txl_asset_Def(
7751                            p_api_version   => p_api_version,
7752                            p_init_msg_list => p_init_msg_list,
7753                            x_return_status => x_return_status,
7754                            x_msg_count     => x_msg_count,
7755                            x_msg_data      => x_msg_data,
7756                            p_tlpv_rec      => l_tlpv_rec);
7757                   -- check return status
7758                   If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
7759                      raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7760                   Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
7761                      raise OKL_API.G_EXCEPTION_ERROR;
7762                   End If;
7763 
7764                   --delete tas_record
7765                   l_thpv_rec.id := l_tas_id;
7766                   OKL_TRX_ASSETS_PUB.delete_trx_ass_h_Def(
7767                            p_api_version   => p_api_version,
7768                            p_init_msg_list => p_init_msg_list,
7769                            x_return_status => x_return_status,
7770                            x_msg_count     => x_msg_count,
7771                            x_msg_data      => x_msg_data,
7772                            p_thpv_rec      => l_thpv_rec);
7773                   -- check return status
7774                   If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
7775                      raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7776                   Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
7777                      raise OKL_API.G_EXCEPTION_ERROR;
7778                   End If;
7779               End If;
7780         Close l_get_txl_crs;
7781 
7782         --Bug # 2522268
7783         -- check if any IB transactions are hanging on this line
7784         OPEN l_get_iti_csr (p_kle_id => l_klev_rec.ID);
7785              FETCH l_get_iti_csr into l_iti_tas_id, l_iti_id;
7786              If l_get_iti_csr%NOTFOUND Then
7787                  Null;
7788              Else
7789                   l_iipv_rec.id := l_iti_id;
7790                   OKL_TXL_ITM_INSTS_PUB.delete_txl_itm_insts(
7791                            p_api_version   => p_api_version,
7792                            p_init_msg_list => p_init_msg_list,
7793                            x_return_status => x_return_status,
7794                            x_msg_count     => x_msg_count,
7795                            x_msg_data      => x_msg_data,
7796                            p_iipv_rec      => l_iipv_rec);
7797                   -- check return status
7798                   If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
7799                      raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7800                   Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
7801                      raise OKL_API.G_EXCEPTION_ERROR;
7802                   End If;
7803 
7804                   --delete tas_record
7805                   l_iti_thpv_rec.id := l_iti_tas_id;
7806                   OKL_TRX_ASSETS_PUB.delete_trx_ass_h_Def(
7807                            p_api_version   => p_api_version,
7808                            p_init_msg_list => p_init_msg_list,
7809                            x_return_status => x_return_status,
7810                            x_msg_count     => x_msg_count,
7811                            x_msg_data      => x_msg_data,
7812                            p_thpv_rec      => l_iti_thpv_rec);
7813                   -- check return status
7814                   If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
7815                      raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7816                   Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
7817                      raise OKL_API.G_EXCEPTION_ERROR;
7818                   End If;
7819               End If;
7820         Close l_get_iti_csr;
7821 
7822         --Bug # 2522268 End
7823 
7824        --Bug# 3143522
7825         --delete associated supplier invoice details
7826         i := 0;
7827         open l_get_sid_csr(p_kle_id => l_clev_rec.id);
7828         Loop
7829             Fetch l_get_sid_csr into l_sid_id;
7830             Exit when l_get_sid_csr%NOTFOUND;
7831             i := i+1;
7832             l_sidv_tbl(i).id := l_sid_id;
7833         End Loop;
7834         close l_get_sid_csr;
7835 
7836         If l_sidv_tbl.COUNT > 0 then
7837             OKL_SUPP_INVOICE_DTLS_PUB.delete_sup_inv_dtls
7838              (p_api_version      => p_api_version,
7839               p_init_msg_list    => p_init_msg_list,
7840               x_return_status    => x_return_status,
7841               x_msg_count        => x_msg_count,
7842               x_msg_data         => x_msg_data,
7843               p_sidv_tbl         => l_sidv_tbl);
7844 
7845            If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
7846                raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7847            Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
7848                raise OKL_API.G_EXCEPTION_ERROR;
7849            End If;
7850 
7851            l_sidv_tbl.DELETE;
7852 
7853        End If;
7854        --Bug# 3143522 End
7855 
7856 
7857         -- call procedure in complex API
7858         OKL_KLE_PVT.Delete_Row(
7859                 p_api_version        => p_api_version,
7860                 p_init_msg_list        => p_init_msg_list,
7861             x_return_status     => x_return_status,
7862             x_msg_count         => x_msg_count,
7863             x_msg_data          => x_msg_data,
7864             p_klev_rec          => l_klev_rec);
7865 
7866         If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
7867               raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7868         Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
7869               raise OKL_API.G_EXCEPTION_ERROR;
7870         End If;
7871     End If;
7872 
7873     -- sjalasut, added code to handle business event when credit limit is deleted
7874     -- raise the business event for delete credit limit only if line style code is FREE_FORM.
7875     -- keep the following condition and the raise business event api separate for
7876     -- extensibility
7877     IF(l_lty_code = 'FREE_FORM')THEN
7878       l_raise_business_event := OKL_API.G_TRUE;
7879       --create the parameter list to pass to raise_event
7880       wf_event.AddParameterToList(G_WF_ITM_CR_LINE_ID,l_dnz_chr_id,l_parameter_list);
7881       wf_event.AddParameterToList(G_WF_ITM_CR_LMT_ID,l_clev_rec.id,l_parameter_list);
7882       l_business_event_name := G_WF_EVT_CR_LMT_REMOVED;
7883     END IF;
7884 
7885     IF(l_raise_business_event = OKL_API.G_TRUE AND l_business_event_name IS NOT NULL)THEN
7886       raise_business_event(p_api_version    => p_api_version,
7887                           p_init_msg_list  => p_init_msg_list,
7888                           x_return_status  => x_return_status,
7889                           x_msg_count      => x_msg_count,
7890                           x_msg_data       => x_msg_data,
7891                           p_event_name     => l_business_event_name,
7892                           p_parameter_list => l_parameter_list);
7893       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7894          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7895       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7896          RAISE OKL_API.G_EXCEPTION_ERROR;
7897       END IF;
7898     END IF;
7899 
7900    OKL_API.END_ACTIVITY(x_msg_count     => x_msg_count,
7901                                      x_msg_data                => x_msg_data);
7902   EXCEPTION
7903     when OKL_API.G_EXCEPTION_ERROR then
7904       If l_get_txl_crs%ISOPEN Then
7905           Close l_get_txl_crs;
7906       End If;
7907       If l_get_txd_crs%ISOPEN Then
7908           Close l_get_txd_crs;
7909       End If;
7910       If chr_id_crs%ISOPEN Then
7911           Close chr_id_crs;
7912       End If;
7913       If l_get_iti_csr%ISOPEN Then
7914           Close l_get_iti_csr;
7915       End If;
7916       If l_get_sid_csr%ISOPEN Then
7917           Close l_get_sid_csr;
7918       End If;
7919       If l_get_pyd_csr%ISOPEN Then
7920           Close l_get_pyd_csr;
7921       End If;
7922       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7923                                                  p_api_name  => l_api_name,
7924                                                  p_pkg_name  => g_pkg_name,
7925                                                  p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
7926                                                  x_msg_count => x_msg_count,
7927                                                  x_msg_data  => x_msg_data,
7928                                                  p_api_type  => g_api_type);
7929 
7930     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
7931       If l_get_txl_crs%ISOPEN Then
7932           Close l_get_txl_crs;
7933       End If;
7934       If l_get_txd_crs%ISOPEN Then
7935           Close l_get_txd_crs;
7936       End If;
7937       If chr_id_crs%ISOPEN Then
7938           Close chr_id_crs;
7939       End If;
7940       If l_get_iti_csr%ISOPEN Then
7941           Close l_get_iti_csr;
7942       End If;
7943       If l_get_sid_csr%ISOPEN Then
7944           Close l_get_sid_csr;
7945       End If;
7946       If l_get_pyd_csr%ISOPEN Then
7947           Close l_get_pyd_csr;
7948       End If;
7949 
7950       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7951                                                  p_api_name  => l_api_name,
7952                                                  p_pkg_name  => g_pkg_name,
7953                                                  p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
7954                                                  x_msg_count => x_msg_count,
7955                                                  x_msg_data  => x_msg_data,
7956                                                  p_api_type  => g_api_type);
7957 
7958     when OTHERS then
7959       If l_get_txl_crs%ISOPEN Then
7960           Close l_get_txl_crs;
7961       End If;
7962       If l_get_txd_crs%ISOPEN Then
7963           Close l_get_txd_crs;
7964       End If;
7965       If chr_id_crs%ISOPEN Then
7966           Close chr_id_crs;
7967       End If;
7968       If l_get_iti_csr%ISOPEN Then
7969           Close l_get_iti_csr;
7970       End If;
7971       If l_get_sid_csr%ISOPEN Then
7972           Close l_get_sid_csr;
7973       End If;
7974       If l_get_pyd_csr%ISOPEN Then
7975           Close l_get_pyd_csr;
7976       End If;
7977 
7978       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7979                                                  p_api_name  => l_api_name,
7980                                                  p_pkg_name  => g_pkg_name,
7981                                                  p_exc_name  => 'OTHERS',
7982                                                  x_msg_count => x_msg_count,
7983                                                  x_msg_data  => x_msg_data,
7984                                                  p_api_type  => g_api_type);
7985   END delete_contract_line;
7986 
7987 
7988 -- Start of comments
7989 --
7990 -- Procedure Name  : delete_contract_line
7991 -- Description     : deletes contract line for shadowed contract
7992 -- Business Rules  : line can be deleted only if there is not sublines attached
7993 -- Parameters      :
7994 -- Version         : 1.0
7995 -- End of comments
7996   PROCEDURE delete_contract_line(
7997     p_api_version                  IN NUMBER,
7998     p_init_msg_list                IN VARCHAR2,
7999     x_return_status                OUT NOCOPY VARCHAR2,
8000     x_msg_count                    OUT NOCOPY NUMBER,
8001     x_msg_data                     OUT NOCOPY VARCHAR2,
8002     p_clev_tbl                     IN  okl_okc_migration_pvt.clev_tbl_type,
8003     p_klev_tbl                     IN  klev_tbl_type) IS
8004 
8005     l_api_name          CONSTANT VARCHAR2(30) := 'DELETE_CONTRACT_LINE';
8006     l_api_version               CONSTANT NUMBER          := 1.0;
8007     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
8008     l_overall_status    VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
8009     i                           NUMBER;
8010     l_klev_tbl                  klev_tbl_type := p_klev_tbl;
8011   BEGIN
8012     -- call START_ACTIVITY to create savepoint, check compatibility
8013     -- and initialize message list
8014     l_return_status := OKL_API.START_ACTIVITY(
8015                         p_api_name      => l_api_name,
8016                         p_pkg_name      => g_pkg_name,
8017                         p_init_msg_list => p_init_msg_list,
8018                         l_api_version   => l_api_version,
8019                         p_api_version   => p_api_version,
8020                         p_api_type      => g_api_type,
8021                         x_return_status => x_return_status);
8022 
8023     -- check if activity started successfully
8024     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8025        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8026     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
8027        raise OKL_API.G_EXCEPTION_ERROR;
8028     End If;
8029 
8030     If (p_clev_tbl.COUNT > 0) Then
8031            i := p_clev_tbl.FIRST;
8032            LOOP
8033                 -- call procedure in complex API for a record
8034                 delete_contract_line(
8035                         p_api_version                => p_api_version,
8036                         p_init_msg_list                => p_init_msg_list,
8037                         x_return_status         => x_return_status,
8038                         x_msg_count             => x_msg_count,
8039                         x_msg_data              => x_msg_data,
8040                         p_clev_rec                => p_clev_tbl(i),
8041                 p_klev_rec                => l_klev_tbl(i));
8042 
8043                 If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
8044                    If l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR Then
8045                          l_overall_status := x_return_status;
8046                    End If;
8047                 End If;
8048 
8049         EXIT WHEN (i = p_clev_tbl.LAST);
8050                 i := p_clev_tbl.NEXT(i);
8051            END LOOP;
8052 
8053            -- return overall status
8054            x_return_status := l_overall_status;
8055     End If;
8056 
8057     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
8058           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8059     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
8060           raise OKL_API.G_EXCEPTION_ERROR;
8061     End If;
8062 
8063     OKL_API.END_ACTIVITY(       x_msg_count        => x_msg_count,
8064                                 x_msg_data        => x_msg_data);
8065   EXCEPTION
8066     when OKL_API.G_EXCEPTION_ERROR then
8067       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8068                         p_api_name  => l_api_name,
8069                         p_pkg_name  => g_pkg_name,
8070                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
8071                         x_msg_count => x_msg_count,
8072                         x_msg_data  => x_msg_data,
8073                         p_api_type  => g_api_type);
8074 
8075     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
8076       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8077                         p_api_name  => l_api_name,
8078                         p_pkg_name  => g_pkg_name,
8079                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
8080                         x_msg_count => x_msg_count,
8081                         x_msg_data  => x_msg_data,
8082                         p_api_type  => g_api_type);
8083 
8084     when OTHERS then
8085       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8086                         p_api_name  => l_api_name,
8087                         p_pkg_name  => g_pkg_name,
8088                         p_exc_name  => 'OTHERS',
8089                         x_msg_count => x_msg_count,
8090                         x_msg_data  => x_msg_data,
8091                         p_api_type  => g_api_type);
8092 
8093   END delete_contract_line;
8094 
8095 -- Start of comments
8096 --
8097 -- Procedure Name  : delete_contract_line
8098 -- Description     : deletes contract line for shadowed contract
8099 -- Business Rules  : delete contract line, all related objects and sublines
8100 -- Parameters      :
8101 -- Version         : 1.0
8102 -- End of comments
8103  PROCEDURE delete_contract_line(
8104     p_api_version                  IN NUMBER,
8105     p_init_msg_list                IN VARCHAR2,
8106     x_return_status                OUT NOCOPY VARCHAR2,
8107     x_msg_count                    OUT NOCOPY NUMBER,
8108     x_msg_data                     OUT NOCOPY VARCHAR2,
8109     p_line_id                      IN NUMBER) IS
8110 
8111     l_cle_Id     NUMBER;
8112     v_Index   Binary_Integer;
8113 
8114 -- OKC code removes lines four levels deep
8115     CURSOR l_Child_Cur1_csr(P_Parent_Id IN NUMBER)
8116     IS SELECT ID
8117     FROM   OKC_K_Lines_b
8118     WHERE  cle_id=P_Parent_Id;
8119 
8120     CURSOR l_Child_Cur2_csr(P_Parent_Id IN NUMBER)
8121     IS SELECT ID
8122     FROM   Okc_K_Lines_b
8123     WHERE  cle_Id=P_Parent_Id;
8124 
8125     CURSOR l_Child_Cur3_csr(P_Parent_Id IN NUMBER)
8126     IS SELECT ID
8127     FROM   Okc_K_Lines_b
8128     WHERE  cle_Id=P_Parent_Id;
8129 
8130     CURSOR l_Child_Cur4_csr(P_Parent_Id IN NUMBER)
8131     IS SELECT ID
8132     FROM   Okc_K_Lines_b
8133     WHERE  cle_Id=P_Parent_Id;
8134 
8135     CURSOR l_Child_Cur5_csr(P_Parent_Id IN NUMBER)
8136     IS SELECT ID
8137     FROM   Okc_K_Lines_b
8138     WHERE  cle_Id=P_Parent_Id;
8139 
8140     --cursor to find out chr id required to flip status at edit point
8141     CURSOR chr_id_crs (p_cle_id IN NUMBER) is
8142     SELECT DNZ_CHR_ID
8143     FROM   OKC_K_LINES_B
8144     WHERE  ID = P_CLE_ID;
8145 
8146     l_dnz_chr_id   OKC_K_LINES_B.dnz_chr_id%TYPE;
8147 
8148 
8149     n NUMBER:=0;
8150     l_klev_tbl_in     OKL_KLE_PVT.klev_tbl_type;
8151     l_klev_tbl_tmp    OKL_KLE_PVT.klev_tbl_type;
8152 
8153     l_api_version       CONSTANT        NUMBER      := 1.0;
8154     l_return_status     VARCHAR2(1);
8155     l_api_name            CONSTANT VARCHAR2(30) := 'DELETE_CONTRACT_LINE';
8156 
8157     l_clev NUMBER:=1;
8158     l_lse_Id NUMBER;
8159 
8160     --cursor to find out if any transactions hanging off the line to be deleted
8161     CURSOR l_get_txl_crs (p_kle_id IN NUMBER) is
8162     SELECT tas_id,
8163            id
8164     FROM   OKL_TXL_ASSETS_B
8165     WHERE  kle_id = p_kle_id;
8166 
8167     l_tas_id    OKL_TXL_ASSETS_B.TAS_ID%TYPE;
8168     l_txl_id    OKL_TXL_ASSETS_B.ID%TYPE;
8169 
8170     --cursor to get the transaction detail record if it exists
8171     CURSOR l_get_txd_crs (p_tal_id IN NUMBER) is
8172     SELECT ID
8173     FROM   OKL_TXD_ASSETS_B
8174     WHERE  tal_id = p_tal_id;
8175 
8176     l_txd_id      OKL_TXD_ASSETS_B.ID%TYPE;
8177 
8178     l_adpv_rec        OKL_TXD_ASSETS_PUB.adpv_rec_type;
8179     l_tlpv_rec        OKL_TXL_ASSETS_PUB.tlpv_rec_type;
8180     l_thpv_rec        OKL_TRX_ASSETS_PUB.thpv_rec_type;
8181 
8182      --Bug # 2522268
8183     --cursor to get ib transaction line record
8184     CURSOR l_get_iti_csr (p_kle_id IN NUMBER) is
8185     SELECT tas_id,
8186            id
8187     FROM   OKL_TXL_ITM_INSTS
8188     WHERE  kle_id = p_kle_id;
8189 
8190     l_iti_tas_id   OKL_TXL_ITM_INSTS.TAS_ID%TYPE;
8191     l_iti_id       OKL_TXL_ITM_INSTS.ID%TYPE;
8192 
8193     l_iipv_rec     OKL_TXL_ITM_INSTS_PUB.iipv_rec_type;
8194     l_iti_thpv_rec OKL_TRX_ASSETS_PUB.thpv_rec_type;
8195      --Bug # 2522268
8196 
8197 
8198 --variable added for checking if okl line deletion is allowed
8199     i Number;
8200     l_deletion_type Varchar2(1) default 'P';
8201     l_clev_rec okl_okc_migration_pvt.clev_rec_type;
8202     l_klev_rec klev_rec_type;
8203 
8204     l_clev_rec_out okl_okc_migration_pvt.clev_rec_type;
8205     l_klev_rec_out klev_rec_type;
8206 --variable added for checking if okl line deletion is allowed
8207  --Bug# 3143522 : delete supplier invoice details is line is deleted
8208     --cursor to ger supplier invoice details
8209     CURSOR l_get_sid_csr (p_kle_id IN NUMBER) is
8210     Select id
8211     FROM   OKL_SUPP_INVOICE_DTLS
8212     where  cle_id = p_kle_id;
8213 
8214     l_sid_id     OKL_SUPP_INVOICE_DTLS.ID%TYPE;
8215 
8216     l_sidv_tbl   OKL_SUPP_INVOICE_DTLS_PUB.sidv_tbl_type;
8217 
8218     --cursor to get party payment details for line
8219     CURSOR l_get_pyd_csr (p_kle_id IN NUMBER) is
8220     Select pyd.id
8221     FROM   OKL_PARTY_PAYMENT_DTLS pyd,
8222            OKC_K_PARTY_ROLES_B    cplb
8223     WHERE  pyd.cpl_id = cplb.id
8224     AND    nvl(cplb.cle_id,-9999) = p_kle_id;
8225 
8226     l_pyd_id    OKL_PARTY_PAYMENT_DTLS.ID%TYPE;
8227 
8228     l_ppydv_tbl OKL_PYD_PVT.ppydv_tbl_type;
8229     k   number  default 0;
8230     --Bug# 3143522
8231 
8232     --cursor to get party payment header for line
8233     -- Passthru, Bug 4350255
8234     CURSOR l_get_pyh_csr (p_kle_id IN NUMBER) is
8235     Select pyh.id
8236     FROM   OKL_PARTY_PAYMENT_HDR  pyh
8237     WHERE  pyh.cle_id = p_kle_id;
8238 
8239     l_pyh_id    OKL_PARTY_PAYMENT_HDR.ID%TYPE;
8240     l_pphv_tbl  OKL_PARTY_PAYMENTS_PVT.pphv_tbl_type;
8241 
8242     --Bug# 4558486
8243     CURSOR l_kpl_csr(p_kle_id IN NUMBER,
8244                      p_khr_id IN NUMBER) is
8245     SELECT kpl.id
8246     FROM   okl_k_party_roles kpl,
8247            okc_k_party_roles_b cpl
8248     WHERE  kpl.id = cpl.id
8249     AND    cpl.cle_id = p_kle_id
8250     AND    cpl.dnz_chr_id = p_khr_id;
8251 
8252     l_kplv_tbl OKL_KPL_PVT.kplv_tbl_type;
8253 
8254     /*
8255     -- vthiruva, 08/19/2004
8256     -- START, Code change to enable Business Event
8257     */
8258     --cursor to fetch the line style code for line style id passed
8259     CURSOR lty_code_csr(p_line_id okc_k_lines_b.id%TYPE) IS
8260     SELECT lse.lty_code
8261     FROM okc_line_styles_b lse,
8262          okc_k_lines_b lns
8263     WHERE lns.id = p_line_id
8264     AND lse.id = lns.lse_id;
8265 
8266     l_lty_code              okc_line_styles_b.lty_code%TYPE;
8267     l_parameter_list        wf_parameter_list_t;
8268     l_raise_business_event VARCHAR2(1) := OKL_API.G_FALSE;
8269     l_business_event_name WF_EVENTS.NAME%TYPE;
8270     /*
8271     -- vthiruva, 08/19/2004
8272     -- END, Code change to enable Business Event
8273     */
8274 
8275     -- validates line id
8276     PROCEDURE Validate_Line_id(
8277       p_line_id         IN NUMBER,
8278       x_return_status   OUT NOCOPY VARCHAR2) IS
8279       l_return_status   VARCHAR2(1) := OKL_API.G_RET_STS_SUCCESS;
8280       l_count   NUMBER;
8281       CURSOR l_cur_line_csr(p_line_id IN NUMBER) IS
8282       SELECT COUNT(id) FROM OKC_K_LINES_B
8283       WHERE id = p_line_id;
8284     BEGIN
8285       IF p_line_id = OKL_API.G_MISS_NUM OR p_line_id IS NULL
8286       THEN
8287         OKL_API.set_message(G_APP_NAME, G_REQUIRED_VALUE,G_COL_NAME_TOKEN,'p_line_id');
8288 
8289         l_return_status := OKL_API.G_RET_STS_ERROR;
8290       END IF;
8291 
8292       OPEN l_cur_line_csr(p_line_id);
8293       FETCH l_cur_line_csr INTO l_Count;
8294       CLOSE l_cur_line_csr;
8295       IF NOT l_Count = 1 THEN
8296         OKL_API.set_message(G_APP_NAME, G_INVALID_VALUE,G_COL_NAME_TOKEN,'p_line_id');
8297 
8298         l_return_status := OKL_API.G_RET_STS_ERROR;
8299       END IF;
8300       x_return_status := l_return_status;
8301     EXCEPTION
8302       WHEN OTHERS THEN
8303         -- store SQL error message on message stack for caller
8304 
8305         OKL_API.set_message(G_APP_NAME,
8306                          G_UNEXPECTED_ERROR,
8307                          G_SQLCODE_TOKEN,
8308                          SQLCODE,
8309                          G_SQLERRM_TOKEN,
8310                          SQLERRM);
8311         -- notify caller of an UNEXPECTED error
8312         x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
8313     END Validate_Line_id;
8314 
8315   BEGIN
8316     x_return_status:=OKL_API.G_RET_STS_SUCCESS;
8317 
8318     -- call START_ACTIVITY to create savepoint, check compatibility
8319     -- and initialize message list
8320     l_return_status := OKL_API.START_ACTIVITY(
8321                         p_api_name      => l_api_name,
8322                         p_pkg_name      => g_pkg_name,
8323                         p_init_msg_list => p_init_msg_list,
8324                         l_api_version   => l_api_version,
8325                         p_api_version   => p_api_version,
8326                         p_api_type      => g_api_type,
8327                         x_return_status => x_return_status);
8328 
8329     -- check if activity started successfully
8330     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8331        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8332     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
8333        raise OKL_API.G_EXCEPTION_ERROR;
8334     End If;
8335 
8336     Validate_Line_id(p_line_id,l_return_status);
8337     -- check if activity started successfully
8338     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8339        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8340     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
8341        raise OKL_API.G_EXCEPTION_ERROR;
8342     End If;
8343 
8344 
8345 -- now we need to store all numbers of sublines to the current line
8346 -- we do it the same way as OKC are doing
8347 -- what we need to make sure later, is that even when the master line is deleted
8348 -- we still can delete the shadow
8349     l_klev_tbl_tmp(l_clev).ID:=p_line_id;
8350     l_clev:=l_clev+1;
8351     FOR l_child_rec1 IN l_child_cur1_csr(p_line_id)
8352     LOOP
8353       l_klev_tbl_tmp(l_clev).ID:=l_child_rec1.ID;
8354       l_clev:=l_clev+1;
8355       FOR l_child_rec2 IN l_child_cur2_csr(l_child_rec1.Id)
8356       LOOP
8357           l_klev_tbl_tmp(l_clev).ID:=l_child_rec2.Id;
8358         l_clev:=l_clev+1;
8359         FOR l_child_rec3 IN l_child_cur3_csr(l_child_rec2.Id)
8360         LOOP
8361             l_klev_tbl_tmp(l_clev).ID:=l_child_rec3.Id;
8362           l_clev:=l_clev+1;
8363             FOR l_child_rec4 IN l_child_cur4_csr(l_child_rec3.Id)
8364             LOOP
8365               l_klev_tbl_tmp(l_clev).ID:=l_child_rec4.Id;
8366             l_clev:=l_clev+1;
8367             FOR l_child_rec5 IN l_child_cur5_csr(l_child_rec4.Id)
8368               LOOP
8369                     l_klev_tbl_tmp(l_clev).ID:=l_child_rec5.Id;
8370               l_clev:=l_clev+1;
8371             END LOOP;
8372             END LOOP;
8373         END LOOP;
8374       END LOOP;
8375     END LOOP;
8376     l_clev:=1;
8377     FOR v_Index IN REVERSE l_klev_tbl_tmp.FIRST .. l_klev_tbl_tmp.LAST
8378     LOOP
8379       l_klev_tbl_in(l_clev).ID:= l_klev_tbl_tmp(v_Index).ID;
8380       l_clev:=l_clev+1;
8381     END LOOP;
8382 
8383     --check for deletion allowed on all lines
8384     for i in 1..l_klev_tbl_in.LAST
8385     LOOP
8386            --check if okl contract line delete is allowed
8387            --dbms_output.put_line('cle id '||to_char(l_klev_tbl_in(i).id));
8388            kle_delete_allowed(p_cle_id          => l_klev_tbl_in(i).id,
8389                               x_deletion_type   => l_deletion_type,
8390                               x_return_status   => x_return_status);
8391 
8392            If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8393                raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8394            Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
8395                raise OKL_API.G_EXCEPTION_ERROR;
8396            End If;
8397            --dbms_output.put_line('l_deletion_type'||l_deletion_type);
8398            If (l_deletion_type in ('L','N')) Then --logical delete or not allowed
8399                Exit;
8400            End If;
8401      END LOOP;
8402 
8403      If l_deletion_type = 'L' Then
8404          for i in l_klev_tbl_in.FIRST..l_klev_tbl_in.LAST
8405          LOOP
8406              --update line status to 'Abandoned'
8407              l_clev_rec.id       := l_klev_tbl_in(i).ID;
8408              l_clev_rec.sts_code := G_OKL_CANCELLED_STS_CODE; --'ABANDONED';
8409              --l_clev_rec.end_date := sysdate;
8410              --l_klev_rec.ID       := l_klev_tbl_in(i).ID;
8411              --dbms_output.put_line('going in for logical delete');
8412              --dbms_output.put_line('line:'||to_char(l_clev_rec.id));
8413 
8414                okl_okc_migration_pvt.update_contract_line
8415                  (p_api_version    => p_api_version,
8416                  p_init_msg_list  => p_init_msg_list,
8417                  x_return_status  => x_return_status,
8418                  x_msg_count      => x_msg_count,
8419                  x_msg_data       => x_msg_data,
8420                  p_clev_rec       => l_clev_rec,
8421                  x_clev_rec       => l_clev_rec_out
8422                  );
8423                --dbms_output.put_line('sts_code :'||l_clev_rec_out.sts_code);
8424                --dbms_output.put_line('line:'||to_char(l_clev_rec_out.id));
8425 
8426                 If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8427                    raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8428                 Elsif (x_return_status = OKL_API.G_RET_STS_ERROR) then
8429                    raise OKL_API.G_EXCEPTION_ERROR;
8430                 End If;
8431 
8432                 --Bug # 2522268 Begin
8433                 --do logical deletion of asset number so
8434                 -- old asset number is available for use
8435                 --dbms_output.put_line('Asset_Logical_Delete:'||to_char(l_clev_rec_out.id));
8436                 Asset_Logical_Delete( p_api_version     => p_api_version,
8437                                       p_init_msg_list   => p_init_msg_list,
8438                                       x_return_status   => x_return_status,
8439                                       x_msg_count       => x_msg_count,
8440                                       x_msg_data        => x_msg_data,
8441                                       p_cle_id          => l_clev_rec_out.id,
8442                                       p_asset_number    => l_clev_rec_out.name);
8443 
8444                 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8445                     raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8446                 Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
8447                     raise OKL_API.G_EXCEPTION_ERROR;
8448                 End If;
8449 
8450                 --do logical deletion of linked assets
8451                 Linked_Asset_Delete(p_api_version     => p_api_version,
8452                                     p_init_msg_list   => p_init_msg_list,
8453                                     x_return_status   => x_return_status,
8454                                     x_msg_count       => x_msg_count,
8455                                     x_msg_data        => x_msg_data,
8456                                     p_cle_id          => l_clev_rec_out.id,
8457                                     p_deletion_type   => l_deletion_type);
8458 
8459                 If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8460                     raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8461                 Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
8462                     raise OKL_API.G_EXCEPTION_ERROR;
8463                 End If;
8464                 --Bug # 2522268 End
8465 
8466                 --Bug # 2937980
8467                 Inactivate_Streams
8468                    ( p_api_version     => p_api_version,
8469                      p_init_msg_list   => p_init_msg_list,
8470                      x_return_status   => x_return_status,
8471                      x_msg_count       => x_msg_count,
8472                      x_msg_data        => x_msg_data,
8473                      p_cle_id          => l_clev_rec.id);
8474 
8475                  If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8476                     raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8477                  Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
8478                     raise OKL_API.G_EXCEPTION_ERROR;
8479                  End If;
8480                  --Bug # 2937980
8481 
8482                If (l_clev_rec_out.dnz_chr_id is not null) AND (l_clev_rec_out.dnz_chr_id <> OKL_API.G_MISS_NUM) THEN
8483                     --call API to cascade 'INCOMPLETE' status for lease contracts
8484                     okl_contract_status_pub.cascade_lease_status_edit
8485                         (p_api_version     => p_api_version,
8486                          p_init_msg_list   => p_init_msg_list,
8487                          x_return_status   => x_return_status,
8488                          x_msg_count       => x_msg_count,
8489                          x_msg_data        => x_msg_data,
8490                          p_chr_id          => l_clev_rec_out.dnz_chr_id);
8491 
8492                    If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
8493                            raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8494                    Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
8495                            raise OKL_API.G_EXCEPTION_ERROR;
8496                    End If;
8497 
8498                End If;
8499           END LOOP;
8500 
8501       ElsIf l_deletion_type = 'P' Then --physical delete
8502         -- sjalasut added code to raise business event. the cursor is processed here but the actual
8503         -- event is raised later. the cursor cannot be processed just before raising the event
8504         -- as the records would have been deleted by that time and no information about the line can
8505         -- be derived. fetch the line style code for the record
8506 
8507         OPEN  lty_code_csr(p_line_id);
8508         FETCH lty_code_csr into l_lty_code;
8509         CLOSE lty_code_csr;
8510 
8511 
8512           --get dnz_chr_id
8513           --call to cascade the status to Incomplete
8514           --this has to be done first as l_clev_rec.dnz_chr_id will be null
8515           -- once the line has been deleted.
8516 
8517            Open chr_id_crs(p_cle_id => p_line_id);
8518                Fetch chr_id_crs into l_dnz_chr_id;
8519                    If chr_id_crs%NOTFOUND Then
8520                      null;
8521                    End If;
8522            Close chr_id_crs;
8523 
8524           If (l_dnz_chr_id is not null) AND (l_dnz_chr_id <> OKL_API.G_MISS_NUM) THEN
8525 
8526           okl_contract_status_pub.cascade_lease_status_edit
8527                 (p_api_version     => p_api_version,
8528                  p_init_msg_list   => p_init_msg_list,
8529                  x_return_status   => x_return_status,
8530                  x_msg_count       => x_msg_count,
8531                  x_msg_data        => x_msg_data,
8532                  p_chr_id          => l_dnz_chr_id);
8533 
8534           If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
8535                   raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8536           Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
8537                   raise OKL_API.G_EXCEPTION_ERROR;
8538           End If;
8539 
8540           End If;
8541 
8542           --Bug # 2522268 begin
8543           --physical deletion of linked assets
8544           --dbms_output.put_line('going in for lnk asst delete '||to_char(p_line_id));
8545           Linked_Asset_Delete(p_api_version     => p_api_version,
8546                                p_init_msg_list   => p_init_msg_list,
8547                                x_return_status   => x_return_status,
8548                                x_msg_count       => x_msg_count,
8549                                x_msg_data        => x_msg_data,
8550                                p_cle_id          => p_line_id,
8551                                p_deletion_type   => l_deletion_type);
8552 
8553           If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8554                 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8555           Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
8556                 raise OKL_API.G_EXCEPTION_ERROR;
8557           End If;
8558           --Bug # 2522268 end
8559 
8560           --Bug# 3143522
8561           --delete associated party payment details
8562           for i in l_klev_tbl_in.FIRST..l_klev_tbl_in.LAST
8563           LOOP
8564 
8565               --Bug# 3143522
8566               --delete associated party payment details
8567               k := 0;
8568               open l_get_pyd_csr(p_kle_id => l_klev_tbl_in(i).ID);
8569               Loop
8570                   Fetch l_get_pyd_csr into l_pyd_id;
8571                   Exit when l_get_pyd_csr%NOTFOUND;
8572                   k := k+1;
8573                   l_ppydv_tbl(k).id := l_pyd_id;
8574               End Loop;
8575               close l_get_pyd_csr;
8576 
8577               If l_ppydv_tbl.COUNT > 0 then
8578                   OKL_PYD_PVT.delete_row
8579                    (p_api_version      => p_api_version,
8580                     p_init_msg_list    => p_init_msg_list,
8581                     x_return_status    => x_return_status,
8582                     x_msg_count        => x_msg_count,
8583                     x_msg_data         => x_msg_data,
8584                     p_ppydv_tbl        => l_ppydv_tbl);
8585 
8586                  If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
8587                      raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8588                  Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
8589                      raise OKL_API.G_EXCEPTION_ERROR;
8590                  End If;
8591 
8592                  l_ppydv_tbl.DELETE;
8593 
8594              End If;
8595          End Loop;
8596          --Bug# 3143522
8597 
8598        -- Passthru Bug 4350255
8599         i := 0;
8600         open l_get_pyh_csr(p_kle_id => p_line_id);
8601         Loop
8602             Fetch l_get_pyh_csr into l_pyh_id;
8603             Exit when l_get_pyh_csr%NOTFOUND;
8604             i := i+1;
8605             l_pphv_tbl(i).id := l_pyh_id;
8606         End Loop;
8607         close l_get_pyh_csr;
8608 
8609         If l_pphv_tbl.COUNT > 0 then
8610             OKL_PARTY_PAYMENTS_PVT.DELETE_PARTY_PAYMENT_HDR
8611              (p_api_version      => p_api_version,
8612               p_init_msg_list    => p_init_msg_list,
8613               x_return_status    => x_return_status,
8614               x_msg_count        => x_msg_count,
8615               x_msg_data         => x_msg_data,
8616               p_pphv_tbl         => l_pphv_tbl );
8617 
8618            If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
8619                raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8620            Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
8621                raise OKL_API.G_EXCEPTION_ERROR;
8622            End If;
8623 
8624            l_pphv_tbl.DELETE;
8625 
8626        End If;
8627        -- Passthru Bug 4350255
8628 
8629        --Bug# 4558486
8630        -- Delete records from okl_k_party_roles
8631        i := 0;
8632        For l_klev_count in l_klev_tbl_in.FIRST..l_klev_tbl_in.LAST
8633        Loop
8634          For l_kpl_rec in l_kpl_csr(p_kle_id => l_klev_tbl_in(l_klev_count).ID,
8635                                     p_khr_id => l_dnz_chr_id)
8636          Loop
8637            i := i + 1;
8638            l_kplv_tbl(i).id := l_kpl_rec.id;
8639          End Loop;
8640        End Loop;
8641 
8642        If l_kplv_tbl.COUNT > 0 then
8643            OKL_KPL_PVT.Delete_Row
8644                (p_api_version      => p_api_version,
8645                 p_init_msg_list    => p_init_msg_list,
8646                 x_return_status    => x_return_status,
8647                 x_msg_count        => x_msg_count,
8648                 x_msg_data         => x_msg_data,
8649                 p_kplv_tbl         => l_kplv_tbl);
8650 
8651            If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
8652                raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8653            Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
8654                raise OKL_API.G_EXCEPTION_ERROR;
8655            End If;
8656 
8657            l_kplv_tbl.DELETE;
8658        End If;
8659        --Bug# 4558486
8660 
8661         -- call OKC API first to delete contract line
8662             okc_contract_pub.delete_contract_line(
8663             p_api_version               => l_api_version,
8664             p_init_msg_list             => p_init_msg_list,
8665             x_return_status             => x_return_status,
8666             x_msg_count             => x_msg_count,
8667             x_msg_data              => x_msg_data,
8668             p_line_id           => p_line_id);
8669 
8670           If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
8671                   raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8672           Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
8673                   raise OKL_API.G_EXCEPTION_ERROR;
8674           End If;
8675 
8676           -- delete transactions hanging fo the lines
8677           for i in l_klev_tbl_in.FIRST..l_klev_tbl_in.LAST
8678           LOOP
8679              l_tas_id := Null;
8680              l_txl_id := Null;
8681              OPEN l_get_txl_crs (p_kle_id => l_klev_tbl_in(i).ID);
8682              FETCH l_get_txl_crs into l_tas_id, l_txl_id;
8683              If l_get_txl_crs%NOTFOUND Then
8684                  Null;
8685              Else
8686                  --find if any transaction details attached to the txl line
8687                  l_txd_id := Null;
8688                  OPEN l_get_txd_crs (p_tal_id => l_txl_id);
8689                  FETCH l_get_txd_crs INTO l_txd_id;
8690                  If l_get_txd_crs%NOTFOUND Then
8691                     Null;
8692                  Else
8693                      --delete txd record
8694                      l_adpv_rec.id := l_txd_id;
8695                      OKL_TXD_ASSETS_PUB.delete_txd_asset_Def(
8696                          p_api_version     => p_api_version,
8697                          p_init_msg_list   => p_init_msg_list,
8698                          x_return_status   => x_return_status,
8699                          x_msg_count       => x_msg_count,
8700                          x_msg_data        => x_msg_data,
8701                          p_adpv_rec        => l_adpv_rec);
8702                       -- check return status
8703                       If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
8704                               raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8705                       Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
8706                               raise OKL_API.G_EXCEPTION_ERROR;
8707                       End If;
8708                   End If;
8709                   Close l_get_txd_crs;
8710                   --delete txl record
8711                   l_tlpv_rec.id := l_txl_id;
8712                   OKL_TXL_ASSETS_PUB.delete_txl_asset_Def(
8713                            p_api_version   => p_api_version,
8714                            p_init_msg_list => p_init_msg_list,
8715                            x_return_status => x_return_status,
8716                            x_msg_count     => x_msg_count,
8717                            x_msg_data      => x_msg_data,
8718                            p_tlpv_rec      => l_tlpv_rec);
8719                   -- check return status
8720                   If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
8721                      raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8722                   Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
8723                      raise OKL_API.G_EXCEPTION_ERROR;
8724                   End If;
8725 
8726                   --delete tas_record
8727                   l_thpv_rec.id := l_tas_id;
8728                   OKL_TRX_ASSETS_PUB.delete_trx_ass_h_Def(
8729                            p_api_version   => p_api_version,
8730                            p_init_msg_list => p_init_msg_list,
8731                            x_return_status => x_return_status,
8732                            x_msg_count     => x_msg_count,
8733                            x_msg_data      => x_msg_data,
8734                            p_thpv_rec      => l_thpv_rec);
8735                   -- check return status
8736                   If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
8737                      raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8738                   Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
8739                      raise OKL_API.G_EXCEPTION_ERROR;
8740                   End If;
8741               End If;
8742            Close l_get_txl_crs;
8743 
8744            --Bug # 2522268
8745            -- check if any IB transactions are hanging on this line
8746            l_iti_tas_id := Null;
8747            l_iti_id     := Null;
8748            OPEN l_get_iti_csr (p_kle_id => l_klev_tbl_in(i).ID);
8749            FETCH l_get_iti_csr into l_iti_tas_id, l_iti_id;
8750            If l_get_iti_csr%NOTFOUND Then
8751                Null;
8752            Else
8753 
8754                l_iipv_rec.id := l_iti_id;
8755                OKL_TXL_ITM_INSTS_PUB.delete_txl_itm_insts(
8756                                p_api_version   => p_api_version,
8757                                p_init_msg_list => p_init_msg_list,
8758                                x_return_status => x_return_status,
8759                                x_msg_count     => x_msg_count,
8760                                x_msg_data      => x_msg_data,
8761                                p_iipv_rec      => l_iipv_rec);
8762                -- check return status
8763                If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
8764                    raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8765                Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
8766                    raise OKL_API.G_EXCEPTION_ERROR;
8767                End If;
8768 
8769                --delete tas_record
8770                l_iti_thpv_rec.id := l_iti_tas_id;
8771                OKL_TRX_ASSETS_PUB.delete_trx_ass_h_Def(
8772                            p_api_version   => p_api_version,
8773                            p_init_msg_list => p_init_msg_list,
8774                            x_return_status => x_return_status,
8775                            x_msg_count     => x_msg_count,
8776                            x_msg_data      => x_msg_data,
8777                            p_thpv_rec      => l_iti_thpv_rec);
8778                -- check return status
8779                If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
8780                    raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8781                Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
8782                    raise OKL_API.G_EXCEPTION_ERROR;
8783                End If;
8784 
8785            End If;
8786            Close l_get_iti_csr;
8787 
8788           --Bug # 2522268 End
8789 
8790 
8791           --Bug# 3143522
8792           --delete associated supplier invoice details
8793           k := 0;
8794           open l_get_sid_csr(p_kle_id => l_klev_tbl_in(i).id);
8795           Loop
8796               Fetch l_get_sid_csr into l_sid_id;
8797               Exit when l_get_sid_csr%NOTFOUND;
8798               k := k+1;
8799               l_sidv_tbl(k).id := l_sid_id;
8800           End Loop;
8801           close l_get_sid_csr;
8802 
8803           If l_sidv_tbl.COUNT > 0 then
8804               OKL_SUPP_INVOICE_DTLS_PUB.delete_sup_inv_dtls
8805                (p_api_version      => p_api_version,
8806                 p_init_msg_list    => p_init_msg_list,
8807                 x_return_status    => x_return_status,
8808                 x_msg_count        => x_msg_count,
8809                 x_msg_data         => x_msg_data,
8810                 p_sidv_tbl         => l_sidv_tbl);
8811 
8812              If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
8813                  raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8814              Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
8815                  raise OKL_API.G_EXCEPTION_ERROR;
8816              End If;
8817 
8818              l_sidv_tbl.DELETE;
8819 
8820          End If;
8821          --Bug# 3143522 End
8822 
8823            END LOOP;
8824 
8825           -- delete shadows
8826           OKL_KLE_PVT.delete_row(
8827               p_api_version                => l_api_version,
8828               p_init_msg_list        => p_init_msg_list,
8829               x_return_status        => x_return_status,
8830               x_msg_count               => x_msg_count,
8831               x_msg_data                => x_msg_data,
8832               p_klev_tbl                => l_klev_tbl_in);
8833 
8834           If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
8835                   raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8836           Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
8837                   raise OKL_API.G_EXCEPTION_ERROR;
8838           End If;
8839 
8840     Elsif l_deletion_type = 'N' Then-- not allowed will not come here as this situation will raise error
8841           Null;
8842     End If;
8843 
8844    /*
8845    -- vthiruva, 08/19/2004
8846    -- START, Code change to enable Business Event
8847    */
8848     -- raise business event for delete of asset line
8849     IF(l_lty_code = 'FREE_FORM1')THEN
8850       -- raise business event only if the context contract is a lease contract
8851       l_raise_business_event := OKL_LLA_UTIL_PVT.is_lease_contract(l_dnz_chr_id);
8852       IF(l_raise_business_event = OKL_API.G_TRUE)THEN
8853         -- raise the business event for create asset, if line style code is FREE_FORM1
8854         wf_event.AddParameterToList(G_WF_ITM_CONTRACT_ID,l_dnz_chr_id,l_parameter_list);
8855         wf_event.AddParameterToList(G_WF_ITM_ASSET_ID,p_line_id,l_parameter_list);
8856         l_business_event_name := G_WF_EVT_ASSET_REMOVED;
8857       END IF;
8858     END IF;
8859 
8860     IF(l_raise_business_event = OKL_API.G_TRUE AND l_business_event_name IS NOT NULL)THEN
8861       raise_business_event(p_api_version    => p_api_version,
8862                           p_init_msg_list  => p_init_msg_list,
8863                           x_return_status  => x_return_status,
8864                           x_msg_count      => x_msg_count,
8865                           x_msg_data       => x_msg_data,
8866                           p_event_name     => l_business_event_name,
8867                           p_parameter_list => l_parameter_list);
8868       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8869          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8870       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8871          RAISE OKL_API.G_EXCEPTION_ERROR;
8872       END IF;
8873     END IF;
8874    /*
8875    -- vthiruva, 08/19/2004
8876    -- END, Code change to enable Business Event
8877    */
8878 
8879     OKL_API.END_ACTIVITY(       x_msg_count        => x_msg_count,
8880                                 x_msg_data        => x_msg_data);
8881 
8882   EXCEPTION
8883     when OKL_API.G_EXCEPTION_ERROR then
8884       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8885                         p_api_name  => l_api_name,
8886                         p_pkg_name  => g_pkg_name,
8887                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
8888                         x_msg_count => x_msg_count,
8889                         x_msg_data  => x_msg_data,
8890                         p_api_type  => g_api_type);
8891 
8892     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
8893       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8894                         p_api_name  => l_api_name,
8895                         p_pkg_name  => g_pkg_name,
8896                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
8897                         x_msg_count => x_msg_count,
8898                         x_msg_data  => x_msg_data,
8899                         p_api_type  => g_api_type);
8900 
8901     when OTHERS then
8902       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8903                         p_api_name  => l_api_name,
8904                         p_pkg_name  => g_pkg_name,
8905                         p_exc_name  => 'OTHERS',
8906                         x_msg_count => x_msg_count,
8907                         x_msg_data  => x_msg_data,
8908                         p_api_type  => g_api_type);
8909       x_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
8910 
8911   END delete_contract_line;
8912 
8913 -- Start of comments
8914 --
8915 -- Procedure Name  : delete_contract_line
8916 -- Description     : deletes contract line for shadowed contract
8917 -- Business Rules  : deletes sublines based on parameter p_delete_cascade_yn
8918 -- Parameters      :
8919 -- Version         : 1.0
8920 -- End of comments
8921   PROCEDURE delete_contract_line(
8922     p_api_version                  IN NUMBER,
8923     p_init_msg_list                IN VARCHAR2,
8924     x_return_status                OUT NOCOPY VARCHAR2,
8925     x_msg_count                    OUT NOCOPY NUMBER,
8926     x_msg_data                     OUT NOCOPY VARCHAR2,
8927     p_clev_rec                     IN  okl_okc_migration_pvt.clev_rec_type,
8928     p_klev_rec                     IN  klev_rec_type,
8929     p_delete_cascade_yn           IN  VARCHAR2) IS
8930 
8931     l_clev_rec okl_okc_migration_pvt.clev_rec_type;
8932     l_klev_rec klev_rec_type;
8933 
8934     l_clev_rec_out okl_okc_migration_pvt.clev_rec_type;
8935     l_klev_rec_out klev_rec_type;
8936 
8937     l_api_name                      CONSTANT VARCHAR2(30) := 'DELETE_CONTRACT_LINE';
8938     l_api_version                       CONSTANT NUMBER          := 1.0;
8939     l_return_status                 VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
8940   BEGIN
8941 
8942     -- call START_ACTIVITY to create savepoint, check compatibility
8943     -- and initialize message list
8944     l_return_status := OKL_API.START_ACTIVITY(
8945                         p_api_name      => l_api_name,
8946                         p_pkg_name      => g_pkg_name,
8947                         p_init_msg_list => p_init_msg_list,
8948                         l_api_version   => l_api_version,
8949                         p_api_version   => p_api_version,
8950                         p_api_type      => g_api_type,
8951                         x_return_status => x_return_status);
8952 
8953     -- check if activity started successfully
8954     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8955        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8956     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
8957        raise OKL_API.G_EXCEPTION_ERROR;
8958     End If;
8959 
8960     l_klev_rec := p_klev_rec;
8961     l_clev_rec := p_clev_rec;
8962 
8963     If p_delete_cascade_yn = 'Y' Then
8964 
8965          delete_contract_line(p_api_version    => p_api_version,
8966                               p_init_msg_list  => p_init_msg_list,
8967                               x_return_status  => x_return_status,
8968                               x_msg_count      => x_msg_count,
8969                               x_msg_data       => x_msg_data,
8970                               p_line_id        => l_klev_rec.id);
8971 
8972          If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8973              raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8974          Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
8975              raise OKL_API.G_EXCEPTION_ERROR;
8976          End If;
8977 
8978     ElsIf p_delete_cascade_yn = 'N' Then
8979           delete_contract_line(p_api_version     => p_api_version,
8980                                p_init_msg_list   => p_init_msg_list,
8981                                x_return_status   => x_return_status,
8982                                x_msg_count       => x_msg_count,
8983                                x_msg_data        => x_msg_data,
8984                                p_clev_rec        => l_clev_rec,
8985                                p_klev_rec        => p_klev_rec);
8986 
8987          If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8988              raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8989          Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
8990              raise OKL_API.G_EXCEPTION_ERROR;
8991          End If;
8992     End If;
8993 
8994     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
8995                                  x_msg_data                => x_msg_data);
8996   EXCEPTION
8997     when OKL_API.G_EXCEPTION_ERROR then
8998       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8999                         p_api_name  => l_api_name,
9000                         p_pkg_name  => g_pkg_name,
9001                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
9002                         x_msg_count => x_msg_count,
9003                         x_msg_data  => x_msg_data,
9004                         p_api_type  => g_api_type);
9005 
9006     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
9007       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9008                         p_api_name  => l_api_name,
9009                         p_pkg_name  => g_pkg_name,
9010                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
9011                         x_msg_count => x_msg_count,
9012                         x_msg_data  => x_msg_data,
9013                         p_api_type  => g_api_type);
9014 
9015     when OTHERS then
9016       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9017                         p_api_name  => l_api_name,
9018                         p_pkg_name  => g_pkg_name,
9019                         p_exc_name  => 'OTHERS',
9020                         x_msg_count => x_msg_count,
9021                         x_msg_data  => x_msg_data,
9022                         p_api_type  => g_api_type);
9023   END delete_contract_line;
9024 
9025 -- Start of comments
9026 --
9027 -- Procedure Name  : delete_contract_line
9028 -- Description     : deletes contract line for shadowed contract
9029 -- Business Rules  : deletes sublines based on parameter p_delete_cascade_yn
9030 -- Parameters      :
9031 -- Version         : 1.0
9032 -- End of comments
9033 
9034   PROCEDURE delete_contract_line(
9035     p_api_version                  IN NUMBER,
9036     p_init_msg_list                IN VARCHAR2,
9037     x_return_status                OUT NOCOPY VARCHAR2,
9038     x_msg_count                    OUT NOCOPY NUMBER,
9039     x_msg_data                     OUT NOCOPY VARCHAR2,
9040     p_clev_tbl                     IN  okl_okc_migration_pvt.clev_tbl_type,
9041     p_klev_tbl                     IN  klev_tbl_type,
9042     p_delete_cascade_yn           IN  varchar2) IS
9043 
9044     l_api_name          CONSTANT VARCHAR2(30) := 'DELETE_CONTRACT_LINE';
9045     l_api_version               CONSTANT NUMBER          := 1.0;
9046     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
9047     l_overall_status    VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
9048     i                           NUMBER;
9049     l_klev_tbl                  klev_tbl_type := p_klev_tbl;
9050   BEGIN
9051     -- call START_ACTIVITY to create savepoint, check compatibility
9052     -- and initialize message list
9053     l_return_status := OKL_API.START_ACTIVITY(
9054                         p_api_name      => l_api_name,
9055                         p_pkg_name      => g_pkg_name,
9056                         p_init_msg_list => p_init_msg_list,
9057                         l_api_version   => l_api_version,
9058                         p_api_version   => p_api_version,
9059                         p_api_type      => g_api_type,
9060                         x_return_status => x_return_status);
9061 
9062     -- check if activity started successfully
9063     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
9064        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9065     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
9066        raise OKL_API.G_EXCEPTION_ERROR;
9067     End If;
9068 
9069     If (p_clev_tbl.COUNT > 0) Then
9070            i := p_clev_tbl.FIRST;
9071            LOOP
9072                 -- call procedure in complex API for a record
9073                 delete_contract_line(
9074                         p_api_version                 => p_api_version,
9075                         p_init_msg_list                 => p_init_msg_list,
9076                         x_return_status          => x_return_status,
9077                         x_msg_count              => x_msg_count,
9078                         x_msg_data               => x_msg_data,
9079                         p_clev_rec                     => p_clev_tbl(i),
9080                 p_klev_rec                     => l_klev_tbl(i),
9081             p_delete_cascade_yn => p_delete_cascade_yn);
9082 
9083                 If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
9084                    If l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR Then
9085                          l_overall_status := x_return_status;
9086                    End If;
9087                 End If;
9088 
9089         EXIT WHEN (i = p_clev_tbl.LAST);
9090                 i := p_clev_tbl.NEXT(i);
9091            END LOOP;
9092 
9093            -- return overall status
9094            x_return_status := l_overall_status;
9095     End If;
9096 
9097     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
9098           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9099     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
9100           raise OKL_API.G_EXCEPTION_ERROR;
9101     End If;
9102 
9103     OKL_API.END_ACTIVITY(       x_msg_count        => x_msg_count,
9104                                 x_msg_data        => x_msg_data);
9105   EXCEPTION
9106     when OKL_API.G_EXCEPTION_ERROR then
9107       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9108                         p_api_name  => l_api_name,
9109                         p_pkg_name  => g_pkg_name,
9110                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
9111                         x_msg_count => x_msg_count,
9112                         x_msg_data  => x_msg_data,
9113                         p_api_type  => g_api_type);
9114 
9115     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
9116       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9117                         p_api_name  => l_api_name,
9118                         p_pkg_name  => g_pkg_name,
9119                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
9120                         x_msg_count => x_msg_count,
9121                         x_msg_data  => x_msg_data,
9122                         p_api_type  => g_api_type);
9123 
9124     when OTHERS then
9125       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9126                         p_api_name  => l_api_name,
9127                         p_pkg_name  => g_pkg_name,
9128                         p_exc_name  => 'OTHERS',
9129                         x_msg_count => x_msg_count,
9130                         x_msg_data  => x_msg_data,
9131                         p_api_type  => g_api_type);
9132 
9133   END delete_contract_line;
9134 
9135 -- Start of comments
9136 --
9137 -- Procedure Name  : lock_contract_line
9138 -- Description     : locks contract line for shadowed contract
9139 -- Business Rules  :
9140 -- Parameters      :
9141 -- Version         : 1.0
9142 -- End of comments
9143   PROCEDURE lock_contract_line(
9144     p_api_version                  IN NUMBER,
9145     p_init_msg_list                IN VARCHAR2,
9146     x_return_status                OUT NOCOPY VARCHAR2,
9147     x_msg_count                    OUT NOCOPY NUMBER,
9148     x_msg_data                     OUT NOCOPY VARCHAR2,
9149     p_clev_rec                     IN  okl_okc_migration_pvt.clev_rec_type,
9150     p_klev_rec                     IN  klev_rec_type) IS
9151 
9152     l_clev_rec okl_okc_migration_pvt.clev_rec_type;
9153     l_klev_rec klev_rec_type;
9154 
9155     l_api_name          CONSTANT VARCHAR2(30) := 'LOCK_CONTRACT_LINE';
9156     l_api_version               CONSTANT NUMBER          := 1.0;
9157     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
9158   BEGIN
9159 
9160     -- call START_ACTIVITY to create savepoint, check compatibility
9161     -- and initialize message list
9162     l_return_status := OKL_API.START_ACTIVITY(
9163                         p_api_name      => l_api_name,
9164                         p_pkg_name      => g_pkg_name,
9165                         p_init_msg_list => p_init_msg_list,
9166                         l_api_version   => l_api_version,
9167                         p_api_version   => p_api_version,
9168                         p_api_type      => g_api_type,
9169                         x_return_status => x_return_status);
9170 
9171     -- check if activity started successfully
9172     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
9173        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9174     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
9175        raise OKL_API.G_EXCEPTION_ERROR;
9176     End If;
9177 
9178     l_klev_rec := p_klev_rec;
9179     l_clev_rec := p_clev_rec;
9180 
9181     --
9182     -- call procedure in complex API
9183     --
9184     okl_okc_migration_pvt.lock_contract_line(
9185          p_api_version        => p_api_version,
9186          p_init_msg_list        => p_init_msg_list,
9187          x_return_status         => x_return_status,
9188          x_msg_count             => x_msg_count,
9189          x_msg_data              => x_msg_data,
9190          p_clev_rec                => l_clev_rec);
9191 
9192     -- check return status
9193     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
9194           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9195     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
9196           raise OKL_API.G_EXCEPTION_ERROR;
9197     End If;
9198 
9199     -- get id from OKC record
9200     l_klev_rec.ID := l_clev_rec.ID;
9201 
9202     -- call procedure in complex API
9203         OKL_KLE_PVT.Lock_Row(
9204               p_api_version        => p_api_version,
9205               p_init_msg_list        => p_init_msg_list,
9206             x_return_status     => x_return_status,
9207             x_msg_count         => x_msg_count,
9208             x_msg_data          => x_msg_data,
9209             p_klev_rec          => l_klev_rec);
9210 
9211     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
9212           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9213     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
9214           raise OKL_API.G_EXCEPTION_ERROR;
9215     End If;
9216 
9217     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
9218                                  x_msg_data                => x_msg_data);
9219   EXCEPTION
9220     when OKL_API.G_EXCEPTION_ERROR then
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_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 OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
9230       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9231                         p_api_name  => l_api_name,
9232                         p_pkg_name  => g_pkg_name,
9233                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
9234                         x_msg_count => x_msg_count,
9235                         x_msg_data  => x_msg_data,
9236                         p_api_type  => g_api_type);
9237 
9238     when OTHERS then
9239       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9240                         p_api_name  => l_api_name,
9241                         p_pkg_name  => g_pkg_name,
9242                         p_exc_name  => 'OTHERS',
9243                         x_msg_count => x_msg_count,
9244                         x_msg_data  => x_msg_data,
9245                         p_api_type  => g_api_type);
9246   END lock_contract_line;
9247 
9248 
9249 -- Start of comments
9250 --
9251 -- Procedure Name  : lock_contract_line
9252 -- Description     : locks contract line for shadowed contract
9253 -- Business Rules  :
9254 -- Parameters      :
9255 -- Version         : 1.0
9256 -- End of comments
9257   PROCEDURE lock_contract_line(
9258     p_api_version                  IN NUMBER,
9259     p_init_msg_list                IN VARCHAR2,
9260     x_return_status                OUT NOCOPY VARCHAR2,
9261     x_msg_count                    OUT NOCOPY NUMBER,
9262     x_msg_data                     OUT NOCOPY VARCHAR2,
9263     p_clev_tbl                     IN  okl_okc_migration_pvt.clev_tbl_type,
9264     p_klev_tbl                     IN  klev_tbl_type) IS
9265 
9266     l_api_name          CONSTANT VARCHAR2(30) := 'lock_CONTRACT_LINE';
9267     l_api_version               CONSTANT NUMBER          := 1.0;
9268     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
9269     l_overall_status    VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
9270     i                           NUMBER;
9271     l_klev_tbl                  klev_tbl_type := p_klev_tbl;
9272   BEGIN
9273     -- call START_ACTIVITY to create savepoint, check compatibility
9274     -- and initialize message list
9275     l_return_status := OKL_API.START_ACTIVITY(
9276                         p_api_name      => l_api_name,
9277                         p_pkg_name      => g_pkg_name,
9278                         p_init_msg_list => p_init_msg_list,
9279                         l_api_version   => l_api_version,
9280                         p_api_version   => p_api_version,
9281                         p_api_type      => g_api_type,
9282                         x_return_status => x_return_status);
9283 
9284     -- check if activity started successfully
9285     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
9286        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9287     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
9288        raise OKL_API.G_EXCEPTION_ERROR;
9289     End If;
9290 
9291     If (p_clev_tbl.COUNT > 0) Then
9292            i := p_clev_tbl.FIRST;
9293            LOOP
9294                 -- call procedure in complex API for a record
9295                 lock_contract_line(
9296                         p_api_version                => p_api_version,
9297                         p_init_msg_list                => p_init_msg_list,
9298                         x_return_status         => x_return_status,
9299                         x_msg_count             => x_msg_count,
9300                         x_msg_data              => x_msg_data,
9301                         p_clev_rec                => p_clev_tbl(i),
9302                 p_klev_rec                => l_klev_tbl(i));
9303 
9304                 If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
9305                    If l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR Then
9306                          l_overall_status := x_return_status;
9307                    End If;
9308                 End If;
9309 
9310         EXIT WHEN (i = p_clev_tbl.LAST);
9311                 i := p_clev_tbl.NEXT(i);
9312            END LOOP;
9313 
9314            -- return overall status
9315            x_return_status := l_overall_status;
9316     End If;
9317 
9318     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
9319           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9320     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
9321           raise OKL_API.G_EXCEPTION_ERROR;
9322     End If;
9323 
9324     OKL_API.END_ACTIVITY(       x_msg_count        => x_msg_count,
9325                                 x_msg_data        => x_msg_data);
9326   EXCEPTION
9327     when OKL_API.G_EXCEPTION_ERROR then
9328       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9329                         p_api_name  => l_api_name,
9330                         p_pkg_name  => g_pkg_name,
9331                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
9332                         x_msg_count => x_msg_count,
9333                         x_msg_data  => x_msg_data,
9334                         p_api_type  => g_api_type);
9335 
9336     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
9337       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9338                         p_api_name  => l_api_name,
9339                         p_pkg_name  => g_pkg_name,
9340                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
9341                         x_msg_count => x_msg_count,
9342                         x_msg_data  => x_msg_data,
9343                         p_api_type  => g_api_type);
9344 
9345     when OTHERS then
9346       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9347                         p_api_name  => l_api_name,
9348                         p_pkg_name  => g_pkg_name,
9349                         p_exc_name  => 'OTHERS',
9350                         x_msg_count => x_msg_count,
9351                         x_msg_data  => x_msg_data,
9352                         p_api_type  => g_api_type);
9353 
9354   END lock_contract_line;
9355 
9356 
9357 -- Start of comments
9358 --
9359 -- Procedure Name  : validate_contract_line
9360 -- Description     : validates contract line for shadowed contract
9361 -- Business Rules  :
9362 -- Parameters      :
9363 -- Version         : 1.0
9364 -- End of comments
9365   PROCEDURE validate_contract_line(
9366     p_api_version                  IN NUMBER,
9367     p_init_msg_list                IN VARCHAR2,
9368     x_return_status                OUT NOCOPY VARCHAR2,
9369     x_msg_count                    OUT NOCOPY NUMBER,
9370     x_msg_data                     OUT NOCOPY VARCHAR2,
9371     p_clev_rec                     IN  okl_okc_migration_pvt.clev_rec_type,
9372     p_klev_rec                     IN  klev_rec_type) IS
9373 
9374     l_clev_rec okl_okc_migration_pvt.clev_rec_type;
9375     l_klev_rec klev_rec_type;
9376 
9377     l_api_name          CONSTANT VARCHAR2(30) := 'VALIDATE_CONTRACT_LINE';
9378     l_api_version               CONSTANT NUMBER          := 1.0;
9379     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
9380   BEGIN
9381 
9382     -- call START_ACTIVITY to create savepoint, check compatibility
9383     -- and initialize message list
9384     l_return_status := OKL_API.START_ACTIVITY(
9385                         p_api_name      => l_api_name,
9386                         p_pkg_name      => g_pkg_name,
9387                         p_init_msg_list => p_init_msg_list,
9388                         l_api_version   => l_api_version,
9389                         p_api_version   => p_api_version,
9390                         p_api_type      => g_api_type,
9391                         x_return_status => x_return_status);
9392 
9393     -- check if activity started successfully
9394     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
9395        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9396     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
9397        raise OKL_API.G_EXCEPTION_ERROR;
9398     End If;
9399 
9400     l_klev_rec := p_klev_rec;
9401     l_clev_rec := p_clev_rec;
9402 
9403     --
9404     -- call procedure in complex API
9405     --
9406     okl_okc_migration_pvt.validate_contract_line(
9407          p_api_version        => p_api_version,
9408          p_init_msg_list        => p_init_msg_list,
9409          x_return_status         => x_return_status,
9410          x_msg_count             => x_msg_count,
9411          x_msg_data              => x_msg_data,
9412          p_clev_rec                => l_clev_rec);
9413 
9414     -- check return status
9415     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
9416           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9417     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
9418           raise OKL_API.G_EXCEPTION_ERROR;
9419     End If;
9420 
9421     -- get id from OKC record
9422     l_klev_rec.ID := l_clev_rec.ID;
9423 
9424     -- call procedure in complex API
9425         OKL_KLE_PVT.validate_Row(
9426               p_api_version        => p_api_version,
9427               p_init_msg_list        => p_init_msg_list,
9428             x_return_status     => x_return_status,
9429             x_msg_count         => x_msg_count,
9430             x_msg_data          => x_msg_data,
9431             p_klev_rec          => l_klev_rec);
9432 
9433     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
9434           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9435     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
9436           raise OKL_API.G_EXCEPTION_ERROR;
9437     End If;
9438 
9439     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
9440                                  x_msg_data                => x_msg_data);
9441   EXCEPTION
9442     when OKL_API.G_EXCEPTION_ERROR then
9443       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9444                         p_api_name  => l_api_name,
9445                         p_pkg_name  => g_pkg_name,
9446                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
9447                         x_msg_count => x_msg_count,
9448                         x_msg_data  => x_msg_data,
9449                         p_api_type  => g_api_type);
9450 
9451     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
9452       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9453                         p_api_name  => l_api_name,
9454                         p_pkg_name  => g_pkg_name,
9455                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
9456                         x_msg_count => x_msg_count,
9457                         x_msg_data  => x_msg_data,
9458                         p_api_type  => g_api_type);
9459 
9460     when OTHERS then
9461       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9462                         p_api_name  => l_api_name,
9463                         p_pkg_name  => g_pkg_name,
9464                         p_exc_name  => 'OTHERS',
9465                         x_msg_count => x_msg_count,
9466                         x_msg_data  => x_msg_data,
9467                         p_api_type  => g_api_type);
9468   END validate_contract_line;
9469 
9470 
9471 -- Start of comments
9472 --
9473 -- Procedure Name  : validate_contract_line
9474 -- Description     : validates contract line for shadowed contract
9475 -- Business Rules  :
9476 -- Parameters      :
9477 -- Version         : 1.0
9478 -- End of comments
9479   PROCEDURE validate_contract_line(
9480     p_api_version                  IN NUMBER,
9481     p_init_msg_list                IN VARCHAR2,
9482     x_return_status                OUT NOCOPY VARCHAR2,
9483     x_msg_count                    OUT NOCOPY NUMBER,
9484     x_msg_data                     OUT NOCOPY VARCHAR2,
9485     p_clev_tbl                     IN  okl_okc_migration_pvt.clev_tbl_type,
9486     p_klev_tbl                     IN  klev_tbl_type) IS
9487 
9488     l_api_name          CONSTANT VARCHAR2(30) := 'validate_CONTRACT_LINE';
9489     l_api_version               CONSTANT NUMBER          := 1.0;
9490     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
9491     l_overall_status    VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
9492     i                           NUMBER;
9493     l_klev_tbl                  klev_tbl_type := p_klev_tbl;
9494   BEGIN
9495     -- call START_ACTIVITY to create savepoint, check compatibility
9496     -- and initialize message list
9497     l_return_status := OKL_API.START_ACTIVITY(
9498                         p_api_name      => l_api_name,
9499                         p_pkg_name      => g_pkg_name,
9500                         p_init_msg_list => p_init_msg_list,
9501                         l_api_version   => l_api_version,
9502                         p_api_version   => p_api_version,
9503                         p_api_type      => g_api_type,
9504                         x_return_status => x_return_status);
9505 
9506     -- check if activity started successfully
9507     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
9508        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9509     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
9510        raise OKL_API.G_EXCEPTION_ERROR;
9511     End If;
9512 
9513     If (p_clev_tbl.COUNT > 0) Then
9514            i := p_clev_tbl.FIRST;
9515            LOOP
9516                 -- call procedure in complex API for a record
9517                 validate_contract_line(
9518                         p_api_version                => p_api_version,
9519                         p_init_msg_list                => p_init_msg_list,
9520                         x_return_status         => x_return_status,
9521                         x_msg_count             => x_msg_count,
9522                         x_msg_data              => x_msg_data,
9523                         p_clev_rec                => p_clev_tbl(i),
9524                 p_klev_rec                => l_klev_tbl(i));
9525 
9526                 If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
9527                    If l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR Then
9528                          l_overall_status := x_return_status;
9529                    End If;
9530                 End If;
9531 
9532         EXIT WHEN (i = p_clev_tbl.LAST);
9533                 i := p_clev_tbl.NEXT(i);
9534            END LOOP;
9535 
9536            -- return overall status
9537            x_return_status := l_overall_status;
9538     End If;
9539 
9540     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
9541           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9542     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
9543           raise OKL_API.G_EXCEPTION_ERROR;
9544     End If;
9545 
9546     OKL_API.END_ACTIVITY(       x_msg_count        => x_msg_count,
9547                                 x_msg_data        => x_msg_data);
9548   EXCEPTION
9549     when OKL_API.G_EXCEPTION_ERROR then
9550       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9551                         p_api_name  => l_api_name,
9552                         p_pkg_name  => g_pkg_name,
9553                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
9554                         x_msg_count => x_msg_count,
9555                         x_msg_data  => x_msg_data,
9556                         p_api_type  => g_api_type);
9557 
9558     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
9559       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9560                         p_api_name  => l_api_name,
9561                         p_pkg_name  => g_pkg_name,
9562                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
9563                         x_msg_count => x_msg_count,
9564                         x_msg_data  => x_msg_data,
9565                         p_api_type  => g_api_type);
9566 
9567     when OTHERS then
9568       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9569                         p_api_name  => l_api_name,
9570                         p_pkg_name  => g_pkg_name,
9571                         p_exc_name  => 'OTHERS',
9572                         x_msg_count => x_msg_count,
9573                         x_msg_data  => x_msg_data,
9574                         p_api_type  => g_api_type);
9575 
9576   END validate_contract_line;
9577 --------------------------------------------------------------------------------
9578 --governances related procedures
9579 --------------------------------------------------------------------------------
9580  PROCEDURE create_governance(
9581     p_api_version                  IN NUMBER,
9582     p_init_msg_list                IN VARCHAR2,
9583     x_return_status                OUT NOCOPY VARCHAR2,
9584     x_msg_count                    OUT NOCOPY NUMBER,
9585     x_msg_data                     OUT NOCOPY VARCHAR2,
9586     p_gvev_rec                     IN  okl_okc_migration_pvt.gvev_rec_type,
9587     x_gvev_rec                     OUT NOCOPY okl_okc_migration_pvt.gvev_rec_type) IS
9588 
9589     l_gvev_rec okl_okc_migration_pvt.gvev_rec_type;
9590 
9591     l_api_name          CONSTANT VARCHAR2(30) := 'CREATE_GOVERNANCE';
9592     l_api_version               CONSTANT NUMBER          := 1.0;
9593     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
9594   BEGIN
9595 
9596     -- call START_ACTIVITY to create savepoint, check compatibility
9597     -- and initialize message list
9598 
9599         --dbms_output.put_line('Start it');
9600 
9601     l_return_status := OKL_API.START_ACTIVITY(
9602                         p_api_name      => l_api_name,
9603                         p_pkg_name      => g_pkg_name,
9604                         p_init_msg_list => p_init_msg_list,
9605                         l_api_version   => l_api_version,
9606                         p_api_version   => p_api_version,
9607                         p_api_type      => g_api_type,
9608                         x_return_status => x_return_status);
9609 
9610     -- check if activity started successfully
9611     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
9612        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9613     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
9614        raise OKL_API.G_EXCEPTION_ERROR;
9615     End If;
9616 
9617     l_gvev_rec := p_gvev_rec;
9618     --
9619     -- set okc context before API call
9620     -- msamoyle: check whether we need to call this method here or in PUB or in processing
9621         --dbms_output.put_line('Set org context');
9622 
9623 
9624     --OKL_CONTEXT.SET_OKC_ORG_CONTEXT(l_chrv_rec.authoring_org_id,l_chrv_rec.inv_organization_id);
9625 
9626         --dbms_output.put_line('Create governance');
9627     --
9628     -- call procedure in complex API
9629     --
9630     --OKC_CONTRACT_PUB.create_contract_header(
9631     okl_okc_migration_pvt.create_governance(
9632          p_api_version            => p_api_version,
9633          p_init_msg_list        => p_init_msg_list,
9634          x_return_status         => x_return_status,
9635          x_msg_count             => x_msg_count,
9636          x_msg_data              => x_msg_data,
9637          p_gvev_rec                    => l_gvev_rec,
9638          x_gvev_rec                    => x_gvev_rec);
9639 
9640     -- check return status
9641     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
9642           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9643     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
9644           raise OKL_API.G_EXCEPTION_ERROR;
9645     End If;
9646 
9647     If (x_gvev_rec.dnz_chr_id is not null) AND (x_gvev_rec.dnz_chr_id <> OKL_API.G_MISS_NUM) Then
9648           --call API to cascade 'INCOMPLETE' status for lease contracts
9649           okl_contract_status_pub.cascade_lease_status_edit
9650                  (p_api_version     => p_api_version,
9651                   p_init_msg_list   => p_init_msg_list,
9652                   x_return_status   => x_return_status,
9653                   x_msg_count       => x_msg_count,
9654                   x_msg_data        => x_msg_data,
9655                   p_chr_id          => x_gvev_rec.dnz_chr_id);
9656 
9657           If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
9658                   raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9659           Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
9660                   raise OKL_API.G_EXCEPTION_ERROR;
9661           End If;
9662     End If;
9663 
9664     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
9665                                  x_msg_data                => x_msg_data);
9666   EXCEPTION
9667     when OKL_API.G_EXCEPTION_ERROR then
9668       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9669                         p_api_name  => l_api_name,
9670                         p_pkg_name  => g_pkg_name,
9671                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
9672                         x_msg_count => x_msg_count,
9673                         x_msg_data  => x_msg_data,
9674                         p_api_type  => g_api_type);
9675 
9676     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
9677       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9678                         p_api_name  => l_api_name,
9679                         p_pkg_name  => g_pkg_name,
9680                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
9681                         x_msg_count => x_msg_count,
9682                         x_msg_data  => x_msg_data,
9683                         p_api_type  => g_api_type);
9684 
9685     when OTHERS then
9686       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9687                         p_api_name  => l_api_name,
9688                         p_pkg_name  => g_pkg_name,
9689                         p_exc_name  => 'OTHERS',
9690                         x_msg_count => x_msg_count,
9691                         x_msg_data  => x_msg_data,
9692                         p_api_type  => g_api_type);
9693   END create_governance;
9694 
9695 
9696 -- Start of comments
9697 --
9698 -- Procedure Name  : create_contract_header
9699 -- Description     : creates contract header for shadowed contract
9700 -- Business Rules  :
9701 -- Parameters      :
9702 -- Version         : 1.0
9703 -- End of comments
9704   PROCEDURE create_governance(
9705     p_api_version                  IN NUMBER,
9706     p_init_msg_list                IN VARCHAR2,
9707     x_return_status                OUT NOCOPY VARCHAR2,
9708     x_msg_count                    OUT NOCOPY NUMBER,
9709     x_msg_data                     OUT NOCOPY VARCHAR2,
9710     p_gvev_tbl                     IN  okl_okc_migration_pvt.gvev_tbl_type,
9711     x_gvev_tbl                     OUT NOCOPY okl_okc_migration_pvt.gvev_tbl_type) IS
9712 
9713     l_api_name              CONSTANT VARCHAR2(30) := 'CREATE_GOVERNANCE';
9714     l_api_version               CONSTANT NUMBER          := 1.0;
9715     l_return_status         VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
9716     l_overall_status    VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
9717     i                               NUMBER;
9718     l_gvev_tbl                  okl_okc_migration_pvt.gvev_tbl_type := p_gvev_tbl;
9719   BEGIN
9720     -- call START_ACTIVITY to create savepoint, check compatibility
9721     -- and initialize message list
9722     l_return_status := OKL_API.START_ACTIVITY(
9723                         p_api_name      => l_api_name,
9724                         p_pkg_name      => g_pkg_name,
9725                         p_init_msg_list => p_init_msg_list,
9726                         l_api_version   => l_api_version,
9727                         p_api_version   => p_api_version,
9728                         p_api_type      => g_api_type,
9729                         x_return_status => x_return_status);
9730 
9731     -- check if activity started successfully
9732     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
9733        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9734     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
9735        raise OKL_API.G_EXCEPTION_ERROR;
9736 
9737     End If;
9738 
9739     If (p_gvev_tbl.COUNT > 0) Then
9740            i := p_gvev_tbl.FIRST;
9741            LOOP
9742                 -- call procedure in complex API for a record
9743                 create_governance(
9744                         p_api_version                => p_api_version,
9745                         p_init_msg_list                => p_init_msg_list,
9746                         x_return_status         => x_return_status,
9747                         x_msg_count             => x_msg_count,
9748                         x_msg_data              => x_msg_data,
9749                         p_gvev_rec                    => p_gvev_tbl(i),
9750                 x_gvev_rec                   =>  x_gvev_tbl(i));
9751 
9752                 If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
9753                    If l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR Then
9754                          l_overall_status := x_return_status;
9755                    End If;
9756                 End If;
9757 
9758         EXIT WHEN (i = p_gvev_tbl.LAST);
9759                 i := p_gvev_tbl.NEXT(i);
9760            END LOOP;
9761 
9762            -- return overall status
9763            x_return_status := l_overall_status;
9764     End If;
9765 
9766     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
9767           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9768     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
9769           raise OKL_API.G_EXCEPTION_ERROR;
9770     End If;
9771 
9772     OKL_API.END_ACTIVITY(       x_msg_count        => x_msg_count,
9773                                 x_msg_data        => x_msg_data);
9774   EXCEPTION
9775     when OKL_API.G_EXCEPTION_ERROR then
9776       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9777                         p_api_name  => l_api_name,
9778                         p_pkg_name  => g_pkg_name,
9779                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
9780                         x_msg_count => x_msg_count,
9781                         x_msg_data  => x_msg_data,
9782                         p_api_type  => g_api_type);
9783 
9784     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
9785       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9786                         p_api_name  => l_api_name,
9787                         p_pkg_name  => g_pkg_name,
9788                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
9789                         x_msg_count => x_msg_count,
9790                         x_msg_data  => x_msg_data,
9791                         p_api_type  => g_api_type);
9792 
9793     when OTHERS then
9794       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9795                         p_api_name  => l_api_name,
9796                         p_pkg_name  => g_pkg_name,
9797                         p_exc_name  => 'OTHERS',
9798                         x_msg_count => x_msg_count,
9799                         x_msg_data  => x_msg_data,
9800                         p_api_type  => g_api_type);
9801 
9802   END create_governance;
9803 
9804 -- Start of comments
9805 --
9806 -- Procedure Name  : update_governance
9807 -- Description     : updates governance for shadowed contract
9808 -- Business Rules  :
9809 -- Parameters      :
9810 -- Version         : 1.0
9811 -- End of comments
9812  PROCEDURE update_governance(
9813     p_api_version                  IN NUMBER,
9814     p_init_msg_list                IN VARCHAR2,
9815     x_return_status                OUT NOCOPY VARCHAR2,
9816     x_msg_count                    OUT NOCOPY NUMBER,
9817     x_msg_data                     OUT NOCOPY VARCHAR2,
9818     p_gvev_rec                     IN  okl_okc_migration_pvt.gvev_rec_type,
9819     x_gvev_rec                     OUT NOCOPY okl_okc_migration_pvt.gvev_rec_type) IS
9820 
9821     l_gvev_rec okl_okc_migration_pvt.gvev_rec_type;
9822 
9823     l_api_name          CONSTANT VARCHAR2(30) := 'UPDATE_GOVERNANCE';
9824     l_api_version               CONSTANT NUMBER          := 1.0;
9825     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
9826 
9827   BEGIN
9828 
9829     -- call START_ACTIVITY to create savepoint, check compatibility
9830     -- and initialize message list
9831     l_return_status := OKL_API.START_ACTIVITY(
9832                         p_api_name      => l_api_name,
9833                         p_pkg_name      => g_pkg_name,
9834                         p_init_msg_list => p_init_msg_list,
9835                         l_api_version   => l_api_version,
9836                         p_api_version   => p_api_version,
9837                         p_api_type      => g_api_type,
9838                         x_return_status => x_return_status);
9839 
9840     -- check if activity started successfully
9841     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
9842        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9843     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
9844        raise OKL_API.G_EXCEPTION_ERROR;
9845     End If;
9846 
9847     l_gvev_rec := p_gvev_rec;
9848 
9849     --
9850     -- set okc context before API call
9851     -- msamoyle: check whether we need to call this method here or in PUB or in processing
9852 
9853     --OKL_CONTEXT.SET_OKC_ORG_CONTEXT(l_chrv_rec.authoring_org_id,l_chrv_rec.inv_organization_id);
9854 
9855     --
9856     -- call procedure in complex API
9857     --
9858 --    OKC_CONTRACT_PUB.update_contract_header(
9859      okl_okc_migration_pvt.update_governance(
9860          p_api_version            => p_api_version,
9861          p_init_msg_list        => p_init_msg_list,
9862          x_return_status         => x_return_status,
9863          x_msg_count             => x_msg_count,
9864          x_msg_data              => x_msg_data,
9865      p_gvev_rec             => l_gvev_rec,
9866          x_gvev_rec                    => x_gvev_rec);
9867 
9868     -- check return status
9869     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
9870           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9871     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
9872           raise OKL_API.G_EXCEPTION_ERROR;
9873     End If;
9874 
9875     If (x_gvev_rec.dnz_chr_id is not null) AND (x_gvev_rec.dnz_chr_id <> OKL_API.G_MISS_NUM) Then
9876        --call API to cascade 'INCOMPLETE' status for lease contracts
9877           okl_contract_status_pub.cascade_lease_status_edit
9878                  (p_api_version     => p_api_version,
9879                   p_init_msg_list   => p_init_msg_list,
9880                   x_return_status   => x_return_status,
9881                   x_msg_count       => x_msg_count,
9882                   x_msg_data        => x_msg_data,
9883                   p_chr_id          => x_gvev_rec.dnz_chr_id);
9884 
9885           If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
9886                   raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9887           Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
9888                   raise OKL_API.G_EXCEPTION_ERROR;
9889           End If;
9890     End If;
9891 
9892     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
9893                                  x_msg_data                => x_msg_data);
9894   EXCEPTION
9895     when OKL_API.G_EXCEPTION_ERROR then
9896       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9897                         p_api_name  => l_api_name,
9898                         p_pkg_name  => g_pkg_name,
9899                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
9900                         x_msg_count => x_msg_count,
9901                         x_msg_data  => x_msg_data,
9902                         p_api_type  => g_api_type);
9903 
9904     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
9905       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9906                         p_api_name  => l_api_name,
9907                         p_pkg_name  => g_pkg_name,
9908                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
9909                         x_msg_count => x_msg_count,
9910                         x_msg_data  => x_msg_data,
9911                         p_api_type  => g_api_type);
9912 
9913 
9914 
9915     when OTHERS then
9916       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9917                         p_api_name  => l_api_name,
9918                         p_pkg_name  => g_pkg_name,
9919                         p_exc_name  => 'OTHERS',
9920                         x_msg_count => x_msg_count,
9921                         x_msg_data  => x_msg_data,
9922                         p_api_type  => g_api_type);
9923 
9924 
9925   END update_governance;
9926 
9927 
9928 -- Start of comments
9929 --
9930 -- Procedure Name  : update_governance
9931 -- Description     : update governance for table type records
9932 -- Business Rules  :
9933 -- Parameters      :
9934 -- Version         : 1.0
9935 -- End of comments
9936 PROCEDURE update_governance(
9937     p_api_version                  IN NUMBER,
9938     p_init_msg_list                IN VARCHAR2,
9939     x_return_status                OUT NOCOPY VARCHAR2,
9940     x_msg_count                    OUT NOCOPY NUMBER,
9941     x_msg_data                     OUT NOCOPY VARCHAR2,
9942     p_gvev_tbl                     IN  okl_okc_migration_pvt.gvev_tbl_type,
9943     x_gvev_tbl                     OUT NOCOPY okl_okc_migration_pvt.gvev_tbl_type) IS
9944 
9945     l_api_name          CONSTANT VARCHAR2(30) := 'UPDATE_GOVERNANCE';
9946     l_api_version               CONSTANT NUMBER          := 1.0;
9947     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
9948     l_overall_status    VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
9949     i                           NUMBER;
9950     l_gvev_tbl                  okl_okc_migration_pvt.gvev_tbl_type := p_gvev_tbl;
9951   BEGIN
9952     -- call START_ACTIVITY to create savepoint, check compatibility
9953     -- and initialize message list
9954     l_return_status := OKL_API.START_ACTIVITY(
9955                         p_api_name      => l_api_name,
9956                         p_pkg_name      => g_pkg_name,
9957                         p_init_msg_list => p_init_msg_list,
9958                         l_api_version   => l_api_version,
9959                         p_api_version   => p_api_version,
9960                         p_api_type      => g_api_type,
9961                         x_return_status => x_return_status);
9962 
9963     -- check if activity started successfully
9964     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
9965        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9966     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
9967        raise OKL_API.G_EXCEPTION_ERROR;
9968 
9969     End If;
9970 
9971     If (p_gvev_tbl.COUNT > 0) Then
9972            i := p_gvev_tbl.FIRST;
9973            LOOP
9974                 -- call procedure in complex API for a record
9975                 update_governance(
9976                         p_api_version                => p_api_version,
9977                         p_init_msg_list                => p_init_msg_list,
9978                         x_return_status         => x_return_status,
9979                         x_msg_count             => x_msg_count,
9980                         x_msg_data              => x_msg_data,
9981                         p_gvev_rec                    => p_gvev_tbl(i),
9982                         x_gvev_rec                    => x_gvev_tbl(i));
9983 
9984                 If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
9985                    If l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR Then
9986                          l_overall_status := x_return_status;
9987                    End If;
9988                 End If;
9989 
9990         EXIT WHEN (i = p_gvev_tbl.LAST);
9991                 i := p_gvev_tbl.NEXT(i);
9992            END LOOP;
9993 
9994            -- return overall status
9995            x_return_status := l_overall_status;
9996     End If;
9997 
9998     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
9999           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10000     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
10001           raise OKL_API.G_EXCEPTION_ERROR;
10002     End If;
10003 
10004     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
10005                                  x_msg_data                => x_msg_data);
10006   EXCEPTION
10007     when OKL_API.G_EXCEPTION_ERROR then
10008       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10009                         p_api_name  => l_api_name,
10010                         p_pkg_name  => g_pkg_name,
10011                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
10012                         x_msg_count => x_msg_count,
10013                         x_msg_data  => x_msg_data,
10014                         p_api_type  => g_api_type);
10015 
10016     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
10017       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10018                         p_api_name  => l_api_name,
10019                         p_pkg_name  => g_pkg_name,
10020                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
10021                         x_msg_count => x_msg_count,
10022                         x_msg_data  => x_msg_data,
10023                         p_api_type  => g_api_type);
10024 
10025     when OTHERS then
10026       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10027                         p_api_name  => l_api_name,
10028                         p_pkg_name  => g_pkg_name,
10029                         p_exc_name  => 'OTHERS',
10030                         x_msg_count => x_msg_count,
10031                         x_msg_data  => x_msg_data,
10032                         p_api_type  => g_api_type);
10033 
10034   END update_governance;
10035 
10036 -- Start of comments
10037 --
10038 -- Procedure Name  : delete_governance
10039 -- Description     : deletes governance for shadowed contract
10040 -- Business Rules  :
10041 -- Parameters      :
10042 -- Version         : 1.0
10043 -- End of comments
10044  PROCEDURE delete_governance(
10045     p_api_version                  IN NUMBER,
10046     p_init_msg_list                IN VARCHAR2,
10047     x_return_status                OUT NOCOPY VARCHAR2,
10048     x_msg_count                    OUT NOCOPY NUMBER,
10049     x_msg_data                     OUT NOCOPY VARCHAR2,
10050     p_gvev_rec                     IN  okl_okc_migration_pvt.gvev_rec_type) IS
10051 
10052     l_gvev_rec      okl_okc_migration_pvt.gvev_rec_type;
10053 
10054     l_api_name          CONSTANT VARCHAR2(30) := 'DELETE_GOVERNANCE';
10055     l_api_version               CONSTANT NUMBER          := 1.0;
10056     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
10057 
10058     --cursor to find out chr id required to flip status at edit point
10059     CURSOR chr_id_crs (p_gve_id IN NUMBER) is
10060     SELECT DNZ_CHR_ID
10061     FROM   OKC_GOVERNANCES
10062     WHERE  ID = P_GVE_ID;
10063 
10064     l_dnz_chr_id   OKC_GOVERNANCES.dnz_chr_id%TYPE;
10065   BEGIN
10066 
10067     -- call START_ACTIVITY to create savepoint, check compatibility
10068     -- and initialize message list
10069     l_return_status := OKL_API.START_ACTIVITY(
10070                         p_api_name      => l_api_name,
10071                         p_pkg_name      => g_pkg_name,
10072                         p_init_msg_list => p_init_msg_list,
10073                         l_api_version   => l_api_version,
10074                         p_api_version   => p_api_version,
10075                         p_api_type      => g_api_type,
10076                         x_return_status => x_return_status);
10077 
10078     -- check if activity started successfully
10079     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
10080        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10081     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
10082        raise OKL_API.G_EXCEPTION_ERROR;
10083     End If;
10084 
10085     l_gvev_rec := p_gvev_rec;
10086 
10087     --
10088     -- set okc context before API call
10089     -- msamoyle: check whether we need to call this method here or in PUB or in processing
10090 
10091     --OKL_CONTEXT.SET_OKC_ORG_CONTEXT(l_chrv_rec.authoring_org_id,l_chrv_rec.inv_organization_id);
10092    If (l_gvev_rec.dnz_chr_id is null) OR (l_gvev_rec.dnz_chr_id = OKL_API.G_MISS_NUM) Then
10093       Open chr_id_crs(p_gve_id => l_gvev_rec.id);
10094           FETCH chr_id_crs into l_dnz_chr_id;
10095           If chr_id_crs%NOTFOUND THEN
10096               NULL;
10097           End If;
10098       Close chr_id_crs;
10099    Else
10100        l_dnz_chr_id := l_gvev_rec.dnz_chr_id;
10101    End If;
10102 
10103    If (l_dnz_chr_id is not null) And (l_dnz_chr_id <> OKL_API.G_MISS_NUM) Then
10104     --call API to cascade 'INCOMPLETE' status for lease contracts
10105     okl_contract_status_pub.cascade_lease_status_edit
10106                  (p_api_version     => p_api_version,
10107                   p_init_msg_list   => p_init_msg_list,
10108                   x_return_status   => x_return_status,
10109                   x_msg_count       => x_msg_count,
10110                   x_msg_data        => x_msg_data,
10111                   p_chr_id          => l_dnz_chr_id);
10112 
10113      If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
10114               raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10115      Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
10116               raise OKL_API.G_EXCEPTION_ERROR;
10117      End If;
10118     End If;
10119     --
10120     -- call procedure in complex API
10121     --
10122     okl_okc_migration_pvt.delete_governance(
10123          p_api_version        => p_api_version,
10124          p_init_msg_list        => p_init_msg_list,
10125          x_return_status         => x_return_status,
10126          x_msg_count             => x_msg_count,
10127          x_msg_data              => x_msg_data,
10128          p_gvev_rec                    => l_gvev_rec);
10129 
10130     -- check return status
10131     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
10132           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10133     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
10134           raise OKL_API.G_EXCEPTION_ERROR;
10135     End If;
10136 
10137 
10138     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
10139                                  x_msg_data                => x_msg_data);
10140   EXCEPTION
10141     when OKL_API.G_EXCEPTION_ERROR then
10142       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10143                         p_api_name  => l_api_name,
10144                         p_pkg_name  => g_pkg_name,
10145                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
10146                         x_msg_count => x_msg_count,
10147                         x_msg_data  => x_msg_data,
10148                         p_api_type  => g_api_type);
10149 
10150     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
10151       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10152                         p_api_name  => l_api_name,
10153                         p_pkg_name  => g_pkg_name,
10154                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
10155                         x_msg_count => x_msg_count,
10156                         x_msg_data  => x_msg_data,
10157                         p_api_type  => g_api_type);
10158 
10159     when OTHERS then
10160       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10161                         p_api_name  => l_api_name,
10162                         p_pkg_name  => g_pkg_name,
10163                         p_exc_name  => 'OTHERS',
10164                         x_msg_count => x_msg_count,
10165                         x_msg_data  => x_msg_data,
10166                         p_api_type  => g_api_type);
10167   END delete_governance;
10168 
10169 
10170 -- Start of comments
10171 --
10172 -- Procedure Name  : delete_governance
10173 -- Description     : deletes governance for shadowed contract
10174 -- Business Rules  :
10175 -- Parameters      :
10176 -- Version         : 1.0
10177 -- End of comments
10178   PROCEDURE delete_governance(
10179     p_api_version                  IN NUMBER,
10180     p_init_msg_list                IN VARCHAR2,
10181     x_return_status                OUT NOCOPY VARCHAR2,
10182     x_msg_count                    OUT NOCOPY NUMBER,
10183     x_msg_data                     OUT NOCOPY VARCHAR2,
10184     p_gvev_tbl                     IN  okl_okc_migration_pvt.gvev_tbl_type) IS
10185 
10186     l_api_name          CONSTANT VARCHAR2(30) := 'DELETE_GOVERNANCE';
10187     l_api_version               CONSTANT NUMBER          := 1.0;
10188     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
10189     l_overall_status    VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
10190     i                           NUMBER;
10191     l_gvev_tbl                  okl_okc_migration_pvt.gvev_tbl_type := p_gvev_tbl;
10192   BEGIN
10193     -- call START_ACTIVITY to create savepoint, check compatibility
10194     -- and initialize message list
10195     l_return_status := OKL_API.START_ACTIVITY(
10196                         p_api_name      => l_api_name,
10197                         p_pkg_name      => g_pkg_name,
10198                         p_init_msg_list => p_init_msg_list,
10199                         l_api_version   => l_api_version,
10200                         p_api_version   => p_api_version,
10201                         p_api_type      => g_api_type,
10202                         x_return_status => x_return_status);
10203 
10204     -- check if activity started successfully
10205     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
10206        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10207     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
10208        raise OKL_API.G_EXCEPTION_ERROR;
10209 
10210     End If;
10211 
10212     If (p_gvev_tbl.COUNT > 0) Then
10213            i := p_gvev_tbl.FIRST;
10214            LOOP
10215                 -- call procedure in complex API for a record
10216                 delete_governance(
10217                         p_api_version                => p_api_version,
10218                         p_init_msg_list                => p_init_msg_list,
10219                         x_return_status         => x_return_status,
10220                         x_msg_count             => x_msg_count,
10221                         x_msg_data              => x_msg_data,
10222                         p_gvev_rec                => p_gvev_tbl(i));
10223 
10224                 If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
10225                    If l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR Then
10226                          l_overall_status := x_return_status;
10227                    End If;
10228                 End If;
10229 
10230         EXIT WHEN (i = p_gvev_tbl.LAST);
10231                 i := p_gvev_tbl.NEXT(i);
10232            END LOOP;
10233 
10234            -- return overall status
10235            x_return_status := l_overall_status;
10236     End If;
10237 
10238     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
10239           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10240     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
10241           raise OKL_API.G_EXCEPTION_ERROR;
10242     End If;
10243 
10244     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
10245                                  x_msg_data                => x_msg_data);
10246   EXCEPTION
10247     when OKL_API.G_EXCEPTION_ERROR then
10248       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10249                         p_api_name  => l_api_name,
10250                         p_pkg_name  => g_pkg_name,
10251                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
10252                         x_msg_count => x_msg_count,
10253                         x_msg_data  => x_msg_data,
10254                         p_api_type  => g_api_type);
10255 
10256     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
10257       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10258                         p_api_name  => l_api_name,
10259                         p_pkg_name  => g_pkg_name,
10260                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
10261                         x_msg_count => x_msg_count,
10262                         x_msg_data  => x_msg_data,
10263                         p_api_type  => g_api_type);
10264 
10265     when OTHERS then
10266       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10267                         p_api_name  => l_api_name,
10268                         p_pkg_name  => g_pkg_name,
10269                         p_exc_name  => 'OTHERS',
10270                         x_msg_count => x_msg_count,
10271                         x_msg_data  => x_msg_data,
10272                         p_api_type  => g_api_type);
10273 
10274   END delete_governance;
10275 
10276 -- Start of comments
10277 --
10278 -- Procedure Name  : lock_governance
10279 -- Description     : locks governance for shadowed contract
10280 -- Business Rules  :
10281 -- Parameters      :
10282 -- Version         : 1.0
10283 -- End of comments
10284  PROCEDURE lock_governance(
10285     p_api_version                  IN NUMBER,
10286     p_init_msg_list                IN VARCHAR2,
10287     x_return_status                OUT NOCOPY VARCHAR2,
10288     x_msg_count                    OUT NOCOPY NUMBER,
10289     x_msg_data                     OUT NOCOPY VARCHAR2,
10290     p_gvev_rec                     IN okl_okc_migration_pvt.gvev_rec_type) IS
10291 
10292     l_gvev_rec okl_okc_migration_pvt.gvev_rec_type;
10293 
10294     l_api_name          CONSTANT VARCHAR2(30) := 'LOCK_GOVERNANCE';
10295     l_api_version               CONSTANT NUMBER          := 1.0;
10296     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
10297   BEGIN
10298 
10299     -- call START_ACTIVITY to create savepoint, check compatibility
10300     -- and initialize message list
10301     l_return_status := OKL_API.START_ACTIVITY(
10302                         p_api_name      => l_api_name,
10303                         p_pkg_name      => g_pkg_name,
10304                         p_init_msg_list => p_init_msg_list,
10305                         l_api_version   => l_api_version,
10306                         p_api_version   => p_api_version,
10307                         p_api_type      => g_api_type,
10308                         x_return_status => x_return_status);
10309 
10310     -- check if activity started successfully
10311     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
10312        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10313     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
10314        raise OKL_API.G_EXCEPTION_ERROR;
10315     End If;
10316 
10317     l_gvev_rec := p_gvev_rec;
10318 
10319     --
10320     -- set okc context before API call
10321     -- msamoyle: check whether we need to call this method here or in PUB or in processing
10322 
10323     --OKL_CONTEXT.SET_OKC_ORG_CONTEXT(l_chrv_rec.authoring_org_id,l_chrv_rec.inv_organization_id);
10324 
10325 
10326     --
10327     -- call procedure in complex API
10328     --
10329     okl_okc_migration_pvt.lock_governance(
10330          p_api_version            => p_api_version,
10331          p_init_msg_list        => p_init_msg_list,
10332          x_return_status         => x_return_status,
10333          x_msg_count             => x_msg_count,
10334          x_msg_data              => x_msg_data,
10335          p_gvev_rec                    => l_gvev_rec);
10336 
10337     -- check return status
10338     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
10339           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10340     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
10341           raise OKL_API.G_EXCEPTION_ERROR;
10342     End If;
10343 
10344     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
10345                                  x_msg_data                => x_msg_data);
10346   EXCEPTION
10347     when OKL_API.G_EXCEPTION_ERROR then
10348       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10349                         p_api_name  => l_api_name,
10350                         p_pkg_name  => g_pkg_name,
10351                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
10352                         x_msg_count => x_msg_count,
10353                         x_msg_data  => x_msg_data,
10354                         p_api_type  => g_api_type);
10355 
10356     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
10357       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10358                         p_api_name  => l_api_name,
10359                         p_pkg_name  => g_pkg_name,
10360                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
10361                         x_msg_count => x_msg_count,
10362                         x_msg_data  => x_msg_data,
10363                         p_api_type  => g_api_type);
10364 
10365     when OTHERS then
10366       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10367                         p_api_name  => l_api_name,
10368                         p_pkg_name  => g_pkg_name,
10369                         p_exc_name  => 'OTHERS',
10370                         x_msg_count => x_msg_count,
10371                         x_msg_data  => x_msg_data,
10372                         p_api_type  => g_api_type);
10373   END lock_governance;
10374 
10375 
10376 -- Start of comments
10377 --
10378 -- Procedure Name  : lock_governance
10379 -- Description     : locks governance for shadowed contract
10380 -- Business Rules  :
10381 -- Parameters      :
10382 -- Version         : 1.0
10383 -- End of comments
10384    PROCEDURE lock_governance(
10385     p_api_version                  IN NUMBER,
10386     p_init_msg_list                IN VARCHAR2,
10387     x_return_status                OUT NOCOPY VARCHAR2,
10388     x_msg_count                    OUT NOCOPY NUMBER,
10389     x_msg_data                     OUT NOCOPY VARCHAR2,
10390     p_gvev_tbl                     IN okl_okc_migration_pvt.gvev_tbl_type) IS
10391 
10392     l_api_name          CONSTANT VARCHAR2(30) := 'LOCK_GOVERNANCE';
10393     l_api_version               CONSTANT NUMBER          := 1.0;
10394     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
10395     l_overall_status    VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
10396     i                           NUMBER;
10397     l_gvev_tbl                  okl_okc_migration_pvt.gvev_tbl_type := p_gvev_tbl;
10398   BEGIN
10399     -- call START_ACTIVITY to create savepoint, check compatibility
10400     -- and initialize message list
10401     l_return_status := OKL_API.START_ACTIVITY(
10402                         p_api_name      => l_api_name,
10403                         p_pkg_name      => g_pkg_name,
10404                         p_init_msg_list => p_init_msg_list,
10405                         l_api_version   => l_api_version,
10406                         p_api_version   => p_api_version,
10407                         p_api_type      => g_api_type,
10408                         x_return_status => x_return_status);
10409 
10410     -- check if activity started successfully
10411     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
10412        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10413     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
10414        raise OKL_API.G_EXCEPTION_ERROR;
10415 
10416     End If;
10417 
10418     If (p_gvev_tbl.COUNT > 0) Then
10419            i := p_gvev_tbl.FIRST;
10420            LOOP
10421                 -- call procedure in complex API for a record
10422                 lock_governance(
10423                         p_api_version                => p_api_version,
10424                         p_init_msg_list                => p_init_msg_list,
10425                         x_return_status         => x_return_status,
10426                         x_msg_count             => x_msg_count,
10427                         x_msg_data              => x_msg_data,
10428                         p_gvev_rec                => p_gvev_tbl(i));
10429 
10430                 If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
10431                    If l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR Then
10432                          l_overall_status := x_return_status;
10433                    End If;
10434                 End If;
10435 
10436         EXIT WHEN (i = p_gvev_tbl.LAST);
10437                 i := p_gvev_tbl.NEXT(i);
10438            END LOOP;
10439 
10440            -- return overall status
10441            x_return_status := l_overall_status;
10442     End If;
10443 
10444     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
10445           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10446     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
10447           raise OKL_API.G_EXCEPTION_ERROR;
10448     End If;
10449 
10450     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
10451                                  x_msg_data                => x_msg_data);
10452   EXCEPTION
10453     when OKL_API.G_EXCEPTION_ERROR then
10454       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10455                         p_api_name  => l_api_name,
10456                         p_pkg_name  => g_pkg_name,
10457                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
10458                         x_msg_count => x_msg_count,
10459                         x_msg_data  => x_msg_data,
10460                         p_api_type  => g_api_type);
10461 
10462     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
10463       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10464                         p_api_name  => l_api_name,
10465                         p_pkg_name  => g_pkg_name,
10466                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
10467                         x_msg_count => x_msg_count,
10468                         x_msg_data  => x_msg_data,
10469                         p_api_type  => g_api_type);
10470 
10471     when OTHERS then
10472       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10473                         p_api_name  => l_api_name,
10474                         p_pkg_name  => g_pkg_name,
10475                         p_exc_name  => 'OTHERS',
10476                         x_msg_count => x_msg_count,
10477                         x_msg_data  => x_msg_data,
10478                         p_api_type  => g_api_type);
10479 
10480   END lock_governance;
10481 
10482 -- -----------------------------------------------------------------------------
10483 -- Start of comments
10484 --
10485 -- Procedure Name  : validate_governance
10486 -- Description     : validates governance for shadowed contract
10487 -- Business Rules  :
10488 -- Parameters      :
10489 -- Version         : 1.0
10490 -- End of comments
10491  PROCEDURE validate_governance(
10492     p_api_version                  IN NUMBER,
10493     p_init_msg_list                IN VARCHAR2,
10494     x_return_status                OUT NOCOPY VARCHAR2,
10495     x_msg_count                    OUT NOCOPY NUMBER,
10496     x_msg_data                     OUT NOCOPY VARCHAR2,
10497     p_gvev_rec                     IN okl_okc_migration_pvt.gvev_rec_type) IS
10498 
10499     l_gvev_rec okl_okc_migration_pvt.gvev_rec_type;
10500 
10501 
10502     l_api_name          CONSTANT VARCHAR2(30) := 'VALIDATE_GOVERNANCE';
10503     l_api_version               CONSTANT NUMBER          := 1.0;
10504     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
10505   BEGIN
10506 
10507         --dbms_output.put_line('Start validation');
10508     -- call START_ACTIVITY to create savepoint, check compatibility
10509     -- and initialize message list
10510     l_return_status := OKL_API.START_ACTIVITY(
10511                         p_api_name      => l_api_name,
10512                         p_pkg_name      => g_pkg_name,
10513                         p_init_msg_list => p_init_msg_list,
10514                         l_api_version   => l_api_version,
10515                         p_api_version   => p_api_version,
10516                         p_api_type      => g_api_type,
10517                         x_return_status => x_return_status);
10518 
10519     -- check if activity started successfully
10520     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
10521        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10522     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
10523        raise OKL_API.G_EXCEPTION_ERROR;
10524     End If;
10525 
10526         --dbms_output.put_line('Started activity');
10527 
10528     l_gvev_rec := p_gvev_rec;
10529 
10530     --
10531     -- set okc context before API call
10532     -- msamoyle: check whether we need to call this method here or in PUB or in processing
10533 
10534     --OKL_CONTEXT.SET_OKC_ORG_CONTEXT(l_chrv_rec.authoring_org_id,l_chrv_rec.inv_organization_id);
10535         --dbms_output.put_line('Set up context');
10536 
10537     --
10538     -- call procedure in complex API
10539     --
10540     okl_okc_migration_pvt.validate_governance(
10541          p_api_version        => p_api_version,
10542          p_init_msg_list        => p_init_msg_list,
10543          x_return_status         => x_return_status,
10544          x_msg_count             => x_msg_count,
10545          x_msg_data              => x_msg_data,
10546          p_gvev_rec                => l_gvev_rec);
10547 
10548     -- check return status
10549     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
10550           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10551     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
10552           raise OKL_API.G_EXCEPTION_ERROR;
10553     End If;
10554         --dbms_output.put_line('Got standard validation');
10555 
10556     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
10557                                  x_msg_data                => x_msg_data);
10558         --dbms_output.put_line('Done');
10559   EXCEPTION
10560     when OKL_API.G_EXCEPTION_ERROR then
10561       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10562                         p_api_name  => l_api_name,
10563                         p_pkg_name  => g_pkg_name,
10564                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
10565                         x_msg_count => x_msg_count,
10566                         x_msg_data  => x_msg_data,
10567                         p_api_type  => g_api_type);
10568 
10569     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
10570       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10571                         p_api_name  => l_api_name,
10572                         p_pkg_name  => g_pkg_name,
10573                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
10574                         x_msg_count => x_msg_count,
10575                         x_msg_data  => x_msg_data,
10576                         p_api_type  => g_api_type);
10577 
10578     when OTHERS then
10579       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10580                         p_api_name  => l_api_name,
10581                         p_pkg_name  => g_pkg_name,
10582                         p_exc_name  => 'OTHERS',
10583                         x_msg_count => x_msg_count,
10584                         x_msg_data  => x_msg_data,
10585                         p_api_type  => g_api_type);
10586   END validate_governance;
10587 
10588 
10589 -- Start of comments
10590 --
10591 -- Procedure Name  : validate_governance
10592 -- Description     : validates governance for shadowed contract
10593 -- Business Rules  :
10594 -- Parameters      :
10595 -- Version         : 1.0
10596 -- End of comments
10597 PROCEDURE validate_governance(
10598     p_api_version                  IN NUMBER,
10599     p_init_msg_list                IN VARCHAR2,
10600     x_return_status                OUT NOCOPY VARCHAR2,
10601     x_msg_count                    OUT NOCOPY NUMBER,
10602     x_msg_data                     OUT NOCOPY VARCHAR2,
10603     p_gvev_tbl                     IN  okl_okc_migration_pvt.gvev_tbl_type) IS
10604 
10605     l_api_name          CONSTANT VARCHAR2(30) := 'validate_CONTRACT_HEADER';
10606     l_api_version               CONSTANT NUMBER          := 1.0;
10607     l_return_status     VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
10608     l_overall_status    VARCHAR2(1)                  := OKL_API.G_RET_STS_SUCCESS;
10609     i                           NUMBER;
10610     l_gvev_tbl                  okl_okc_migration_pvt.gvev_tbl_type := p_gvev_tbl;
10611   BEGIN
10612     -- call START_ACTIVITY to create savepoint, check compatibility
10613     -- and initialize message list
10614     l_return_status := OKL_API.START_ACTIVITY(
10615                         p_api_name      => l_api_name,
10616                         p_pkg_name      => g_pkg_name,
10617                         p_init_msg_list => p_init_msg_list,
10618                         l_api_version   => l_api_version,
10619                         p_api_version   => p_api_version,
10620                         p_api_type      => g_api_type,
10621                         x_return_status => x_return_status);
10622 
10623     -- check if activity started successfully
10624     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
10625        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10626     Elsif (l_return_status = OKL_API.G_RET_STS_ERROR) then
10627        raise OKL_API.G_EXCEPTION_ERROR;
10628 
10629     End If;
10630 
10631     If (p_gvev_tbl.COUNT > 0) Then
10632            i := p_gvev_tbl.FIRST;
10633            LOOP
10634                 -- call procedure in complex API for a record
10635                 validate_governance(
10636                         p_api_version                => p_api_version,
10637                         p_init_msg_list                => p_init_msg_list,
10638                         x_return_status         => x_return_status,
10639                         x_msg_count             => x_msg_count,
10640                         x_msg_data              => x_msg_data,
10641                         p_gvev_rec                    => p_gvev_tbl(i));
10642 
10643                 If x_return_status <> OKL_API.G_RET_STS_SUCCESS Then
10644                    If l_overall_status <> OKL_API.G_RET_STS_UNEXP_ERROR Then
10645                          l_overall_status := x_return_status;
10646                    End If;
10647                 End If;
10648 
10649         EXIT WHEN (i = p_gvev_tbl.LAST);
10650                 i := p_gvev_tbl.NEXT(i);
10651            END LOOP;
10652 
10653            -- return overall status
10654            x_return_status := l_overall_status;
10655     End If;
10656 
10657     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
10658           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10659     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
10660           raise OKL_API.G_EXCEPTION_ERROR;
10661     End If;
10662 
10663     OKL_API.END_ACTIVITY(x_msg_count    => x_msg_count,
10664                                  x_msg_data                => x_msg_data);
10665   EXCEPTION
10666     when OKL_API.G_EXCEPTION_ERROR then
10667       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10668                         p_api_name  => l_api_name,
10669                         p_pkg_name  => g_pkg_name,
10670                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
10671                         x_msg_count => x_msg_count,
10672                         x_msg_data  => x_msg_data,
10673                         p_api_type  => g_api_type);
10674 
10675     when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
10676       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10677                         p_api_name  => l_api_name,
10678                         p_pkg_name  => g_pkg_name,
10679                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
10680                         x_msg_count => x_msg_count,
10681                         x_msg_data  => x_msg_data,
10682                         p_api_type  => g_api_type);
10683 
10684     when OTHERS then
10685       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
10686                         p_api_name  => l_api_name,
10687                         p_pkg_name  => g_pkg_name,
10688                         p_exc_name  => 'OTHERS',
10689                         x_msg_count => x_msg_count,
10690                         x_msg_data  => x_msg_data,
10691                         p_api_type  => g_api_type);
10692 
10693   END validate_governance;
10694 --------------------------------------------------------------------------------
10695 --APi to get contract header information for OKL
10696 --Bug 2471750 : If cust account is not found for subcalss quote  error will not
10697 -- be raised
10698 --bug# 2471750 : Even if cust account soes not exist for QUOTE - party name is
10699 -- to be fetched for the header jsp. for this purpose get_private_label loacal
10700 -- function made generic for all the parties and renamed GET_PARTY. Now is it
10701 -- used to fetch 'LESSEE' name as well as 'PRIVATE_LABEL'
10702 --------------------------------------------------------------------------------
10703   Procedure get_contract_header_info(
10704     p_api_version                  IN  NUMBER,
10705     p_init_msg_list                IN  VARCHAR2,
10706     x_return_status                OUT NOCOPY VARCHAR2,
10707     x_msg_count                    OUT NOCOPY NUMBER,
10708     x_msg_data                     OUT NOCOPY VARCHAR2,
10709     p_chr_id                       IN  NUMBER,
10710     p_chr_id_old                   IN  NUMBER,
10711     p_orgId                        IN  NUMBER,
10712     p_custId                       IN  NUMBER,
10713     p_invOrgId                     IN  NUMBER,
10714     p_oldOKL_STATUS                IN  VARCHAR2,
10715     p_oldOKC_STATUS                IN  VARCHAR2,
10716     x_hdr_tbl                      OUT NOCOPY hdr_tbl_type) IS
10717 
10718     l_api_name          CONSTANT VARCHAR2(30) := 'GET_CONTRACT_HEADER_INFO';
10719     l_api_version       CONSTANT NUMBER       := 1;
10720     l_return_status     VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
10721 
10722     Cursor status_csr( chrId NUMBER ) IS
10723     select a.ste_code,
10724            a.code,
10725            cst.meaning,
10726            b.scs_code,
10727            b.currency_code,
10728            --Bug# 2857899
10729            nvl(b.template_yn,'N') template_yn
10730     from okc_statuses_b a,
10731          okc_k_headers_b b,
10732          okl_k_headers c,
10733          OKC_STATUSES_TL cst
10734     where b.id = c.id
10735        and b.id = chrId
10736        and a.CODE = b.STS_CODE
10737        and cst.code = a.code
10738        and cst.LANGUAGE = userenv('LANG');
10739 
10740 
10741    status_rec       status_csr%ROWTYPE;
10742    l_scs_code       okc_k_headers_b.scs_code%TYPE;
10743    l_currency_code  okc_k_headers_b.currency_code%TYPE;
10744    --bug# 2857899
10745    l_template_yn    okc_k_headers_b.template_yn%TYPE;
10746 
10747    Cursor chr_csr ( chrId NUMBER ) IS
10748    select khr.SHORT_DESCRIPTION,
10749           khr.CONTRACT_NUMBER,
10750           khr.PROGRAM_NAME,
10751           khr.PRODUCT_NAME,
10752           khr.PDT_ID,
10753           khr.ID,
10754           khr.AUTHORING_ORG_ID,
10755           khr.PRODUCT_DESCRIPTION,
10756           khr.INV_ORG_ID,
10757           khr.START_DATE,
10758           khr.END_DATE,
10759           cst.MEANING,
10760 	  --Added by dpsingh for LE Project
10761 	  khr.LEGAL_ENTITY_ID
10762    from OKL_LA_HEADERS_UV khr,
10763         OKC_STATUSES_TL cst
10764    where khr.ID = chrId
10765        and cst.CODE = khr.STS_CODE
10766        and cst.LANGUAGE = userenv('LANG');
10767 
10768    chr_rec chr_csr%ROWTYPE;
10769 
10770 
10771    -------------------------------------------------------
10772    --Bug# 3124577 : 11.5.10 Rule Migration
10773    -- new cust csr will fetch customet account from OKC_K_HEADERS_B
10774    --------------------------------------------------------
10775    Cursor cust_csr ( chrId IN NUMBER) IS
10776    SELECT CHRB.CURRENCY_CODE,
10777           CHRB.AUTHORING_ORG_ID,
10778           CHRB.INV_ORGANIZATION_ID,
10779           CHRB.BUY_OR_SELL,
10780           CHRB.CUST_ACCT_ID,
10781           CUS.NAME,
10782           CUS.DESCRIPTION
10783    FROM   OKC_K_HEADERS_B         CHRB,
10784           OKX_CUSTOMER_ACCOUNTS_V CUS
10785    WHERE CUS.ID1    = CHRB.cust_acct_id
10786    AND   CHRB.ID    = chrId;
10787 
10788 
10789    cust_rec cust_csr%ROWTYPE;
10790    x_value           NUMBER;
10791    l_synd            VARCHAR2(256);
10792    l_priv            VARCHAR2(256);
10793    l_lessee          VARCHAR2(360);
10794 
10795    -------------------------------------------------------
10796    --Bug# 4748777 : 11.5.10 Change from Program short
10797    -- description to program number in the common header
10798    --------------------------------------------------------
10799    l_prog_num    OKC_K_HEADERS_B.CONTRACT_NUMBER%type := null;
10800    Cursor prog_num_csr ( p_chr_id IN NUMBER) IS
10801    select prog.contract_number
10802    from OKL_K_HEADERS KHR,
10803         OKC_K_HEADERS_B PROG
10804    where PROG.ID = KHR.KHR_ID
10805    and  khr.id = p_chr_id;
10806 
10807    -------------------------------------------------------
10808    --Bug# 3455354 : 11.5.10 CHANGE SYNDICATION FLAG ON CONTRACT HEADER
10809    -- get investor flag for common header
10810    --------------------------------------------------------
10811    l_investor_flag okl_k_headers.SECURITIZED_CODE%type := null;
10812    Cursor investor_csr ( p_chr_id IN NUMBER) IS
10813    select SECURITIZED_CODE
10814    from okl_k_headers khr
10815    where khr.id = p_chr_id;
10816 
10817   ---------------------------------------------------------------------------
10818   -- FUNCTION get_syndicate_flag
10819   ---------------------------------------------------------------------------
10820   FUNCTION get_syndicate_flag(
10821      p_contract_id      IN NUMBER,
10822      x_syndicate_flag   OUT NOCOPY VARCHAR2)
10823   RETURN VARCHAR2
10824   IS
10825     -- A complex query to find out if a contract has syndication
10826     CURSOR syndicate_flag_csr(p_contract_id NUMBER) IS
10827       SELECT 'Y'  FROM okc_k_headers_b chr
10828       WHERE id = p_contract_id
10829       AND EXISTS
10830           (
10831            SELECT 'x' FROM okc_k_items cim
10832            WHERE  cim.object1_id1 = to_char(chr.id)
10833            AND    EXISTS
10834                   (
10835                    SELECT 'x' FROM okc_k_lines_b cle, okc_line_styles_b lse
10836                    WHERE  cle.lse_id = lse.id
10837                    AND    lse.lty_code = 'SHARED'
10838                    AND    cle.id = cim.cle_id
10839                   )
10840            AND    EXISTS
10841                   (
10842                    SELECT 'x' FROM okc_k_headers_b chr2
10843                    WHERE  chr2.id = cim.dnz_chr_id
10844                    AND    chr2.scs_code = 'SYNDICATION'
10845                    AND    chr2.sts_code not in ('TERMINATED','ABANDONED')
10846                   )
10847           )
10848       AND chr.scs_code in ('LEASE','LOAN');
10849 
10850     l_syndicate_flag    VARCHAR2(1) := 'N';
10851     l_api_version       NUMBER;
10852     l_return_status     VARCHAR2(1) := Okl_API.G_RET_STS_SUCCESS;
10853     l_msg_count         NUMBER;
10854     l_msg_data          VARCHAR2(2000);
10855 
10856   BEGIN
10857 
10858     OPEN  syndicate_flag_csr(p_contract_id);
10859     FETCH syndicate_flag_csr INTO l_syndicate_flag;
10860     CLOSE syndicate_flag_csr;
10861 
10862     x_syndicate_flag := l_syndicate_flag;
10863 
10864     RETURN l_return_status;
10865     EXCEPTION
10866     WHEN OTHERS THEN
10867       OKL_API.SET_MESSAGE( p_app_name     => G_APP_NAME
10868                           ,p_msg_name     => G_UNEXPECTED_ERROR
10869                           ,p_token1       => G_SQLCODE_TOKEN
10870                           ,p_token1_value => SQLCODE
10871                           ,p_token2       => G_SQLERRM_TOKEN
10872                           ,p_token2_value => SQLERRM);
10873       l_return_status := OKL_API.G_RET_STS_UNEXP_ERROR;
10874       RETURN(l_return_status);
10875 
10876   END get_syndicate_flag;
10877 
10878   ---------------------------------------------------------------------------
10879   -- FUNCTION get party
10880   ---------------------------------------------------------------------------
10881   FUNCTION get_party(
10882      p_contract_id              IN  NUMBER,
10883      p_rle_code         IN  VARCHAR2,
10884      x_party_name       OUT NOCOPY VARCHAR2)
10885   RETURN VARCHAR2
10886   IS
10887     l_api_version           NUMBER := 1.0;
10888     l_init_msg_list         VARCHAR2(1) DEFAULT OKL_API.G_FALSE;
10889     l_return_status         VARCHAR2(1) := Okl_Api.G_RET_STS_SUCCESS;
10890     l_msg_count             NUMBER;
10891     l_msg_data              VARCHAR2(2000);
10892     l_party_tab             OKL_JTOT_EXTRACT.party_tab_type;
10893   BEGIN
10894 
10895     -- Procedure to call to get Private Label ID, nothing but
10896     -- a Role
10897     OKL_JTOT_EXTRACT.Get_Party (
10898           l_api_version,
10899           l_init_msg_list,
10900           l_return_status,
10901           l_msg_count,
10902           l_msg_data,
10903           p_contract_id,
10904           null,
10905           --'PRIVATE_LABEL',
10906           p_rle_code,
10907           'S',
10908           l_party_tab
10909           );
10910 
10911     IF (l_return_status = okl_api.G_RET_STS_UNEXP_ERROR) THEN
10912       RAISE okl_api.G_EXCEPTION_UNEXPECTED_ERROR;
10913     ELSIF (l_return_status = okl_api.G_RET_STS_ERROR) THEN
10914       RAISE okl_api.G_EXCEPTION_ERROR;
10915     END IF;
10916 
10917     IF l_party_tab.FIRST IS NOT NULL
10918     THEN --fetch from table only if some data is retrieved
10919       FOR i in 1..l_party_tab.LAST
10920       LOOP
10921         --x_private_label := l_party_tab(i).id1;
10922         --x_private_label := l_party_tab(i).name;
10923         x_party_name := l_party_tab(i).name;
10924       END LOOP;
10925     ELSE
10926       x_party_name := NULL;
10927     END IF;
10928 
10929     RETURN l_return_status;
10930     EXCEPTION
10931         when OKL_API.G_EXCEPTION_ERROR then
10932                 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
10933                         p_api_name  => l_api_name,
10934                         p_pkg_name  => g_pkg_name,
10935                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
10936                         x_msg_count => x_msg_count,
10937                         x_msg_data  => x_msg_data,
10938                         p_api_type  => g_api_type);
10939 
10940         when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
10941                 l_return_status := OKL_API.HANDLE_EXCEPTIONS(
10942                         p_api_name  => l_api_name,
10943                         p_pkg_name  => g_pkg_name,
10944                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
10945                         x_msg_count => x_msg_count,
10946                         x_msg_data  => x_msg_data,
10947                         p_api_type  => g_api_type);
10948 
10949         when OTHERS then
10950         l_return_status := OKL_API.HANDLE_EXCEPTIONS(
10951                         p_api_name  => l_api_name,
10952                         p_pkg_name  => g_pkg_name,
10953                         p_exc_name  => 'OTHERS',
10954                         x_msg_count => x_msg_count,
10955                         x_msg_data  => x_msg_data,
10956                         p_api_type  => g_api_type);
10957 
10958 
10959   END get_party;
10960 
10961 
10962 
10963   BEGIN
10964 
10965     OPEN  status_csr( p_chr_id );
10966     FETCH status_csr INTO status_rec;
10967     if (status_csr%NOTFOUND ) Then
10968         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10969     End If;
10970     CLOSE status_csr;
10971 
10972     l_scs_code      := status_rec.scs_code;
10973     l_currency_code := status_rec.currency_code;
10974     --Bug Fix# 2857899
10975     l_template_yn   := status_rec.template_yn;
10976 
10977     If ( ( nvl(p_chr_id,0) <>  0 )
10978              AND ((nvl(p_chr_id_old,0) = 0)
10979                   OR  (nvl(p_orgId,0) =  0)
10980                   OR  (nvl(p_custId,0) = 0)
10981                   OR  (nvl(p_invOrgId,0) = 0)
10982                   OR  ( status_rec.ste_code <> p_oldOKC_STATUS)
10983                   OR  ( status_rec.code <> p_oldOKL_STATUS )
10984                   OR  ( p_chr_id <> p_chr_id_old) )) Then
10985 
10986         OPEN  chr_csr( p_chr_id );
10987         FETCH chr_csr INTO chr_rec;
10988         if (chr_csr%NOTFOUND ) Then
10989             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
10990         End If;
10991         CLOSE chr_csr;
10992 
10993         OPEN  prog_num_csr( p_chr_id );
10994         FETCH prog_num_csr INTO l_prog_num;
10995         CLOSE prog_num_csr;
10996 
10997         x_hdr_tbl(1) := chr_rec.short_description;
10998 
10999         x_hdr_tbl(2) := chr_rec.product_description;
11000         x_hdr_tbl(3) := chr_rec.start_date;
11001         x_hdr_tbl(4) := chr_rec.end_date;
11002         x_hdr_tbl(5) := chr_rec.meaning;
11003         x_hdr_tbl(6) := chr_rec.contract_number;
11004         x_hdr_tbl(7) := l_prog_num;
11005 --        x_hdr_tbl(7) := chr_rec.program_name;
11006         x_hdr_tbl(8) := chr_rec.product_name;
11007         x_hdr_tbl(9) := chr_rec.inv_org_id;
11008         x_hdr_tbl(10) := chr_rec.pdt_id;
11009         x_hdr_tbl(11) := chr_rec.id;
11010 
11011 
11012 
11013         ---------------------------------------------
11014         --Bug# 3124577: 11.5.10 : Rule migration
11015         --------------------------------------------
11016         OPEN cust_csr(p_chr_id);
11017         FETCH cust_csr into cust_rec;
11018         if (cust_csr%NOTFOUND ) Then
11019             --for bug# 2471750 :special treatment for QUOTE
11020             If l_scs_code <> 'QUOTE' Then
11021                 --Bug# 2857899
11022                 If l_template_yn <> 'Y' Then
11023                    RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11024                 Elsif l_template_yn = 'Y' Then
11025                     x_hdr_tbl(12) := Null;
11026                     x_hdr_tbl(13) := Null;
11027                     x_hdr_tbl(14) := Null;
11028 
11029                     x_hdr_tbl(15) := l_currency_code;
11030 
11031                     l_return_status := get_party(p_chr_id,'LESSEE', l_lessee);
11032                     IF (l_return_status = OKL_API.G_RET_STS_SUCCESS) Then
11033                         x_hdr_tbl(16) := l_lessee;
11034                     ELSE
11035                         x_hdr_tbl(16) := '';
11036                     END IF;
11037 
11038                     x_hdr_tbl(17) := '';
11039                 End If;
11040             Elsif l_scs_code = 'QUOTE' Then
11041                x_hdr_tbl(12) := Null;
11042                x_hdr_tbl(13) := Null;
11043                x_hdr_tbl(14) := Null;
11044 
11045                x_hdr_tbl(15) := l_currency_code;
11046 
11047                l_return_status := get_party(p_chr_id,'LESSEE', l_lessee);
11048                IF (l_return_status = OKL_API.G_RET_STS_SUCCESS) Then
11049                    x_hdr_tbl(16) := l_lessee;
11050                ELSE
11051                    x_hdr_tbl(16) := '';
11052                END IF;
11053 
11054                x_hdr_tbl(17) := '';
11055             End If;
11056         Else
11057             x_hdr_tbl(12) := cust_rec.cust_acct_id;
11058             x_hdr_tbl(13) := 'OKX_CUSTACCT';
11059             x_hdr_tbl(14) := '#';
11060 
11061 
11062             x_hdr_tbl(15) := cust_rec.currency_code;
11063             x_hdr_tbl(16) := cust_rec.name;
11064             x_hdr_tbl(17) := cust_rec.description;
11065 
11066         End If;
11067         CLOSE cust_csr;
11068         --CLOSE rule_csr;
11069 
11070 --commented for bug# 2471750
11071 --        x_hdr_tbl(12) := rule_rec.object1_id1;
11072 --        x_hdr_tbl(13) := rule_rec.jtot_object1_code;
11073 --        x_hdr_tbl(14) := rule_rec.object2_id2;
11074 
11075 
11076 --        OPEN  cust_csr( rule_rec.jtot_object1_code,
11077 --                        p_chr_id,
11078 --                        rule_rec.object1_id1 );
11079 --        FETCH cust_csr INTO cust_rec;
11080 --        if (cust_csr%NOTFOUND ) Then
11081 --            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11082 --        End If;
11083 --        CLOSE cust_csr;
11084 
11085 --        x_hdr_tbl(15) := cust_rec.currency_code;
11086 --        x_hdr_tbl(16) := cust_rec.name;
11087 --        x_hdr_tbl(17) := cust_rec.description;
11088 --commented for bug# 2471750
11089 
11090         If (( status_rec.ste_code = 'ENTERED' ) OR ( status_rec.ste_code= 'SIGNED' )) Then
11091             x_hdr_tbl(18) := 'Y';
11092         Else
11093             x_hdr_tbl(18) := 'N';
11094         End If;
11095 
11096         --l_return_status := okl_contract_info_pvt.get_syndicate_flag(p_chr_id, l_synd);
11097 
11098         -- Bug# 3455354
11099         l_investor_flag := null;
11100         OPEN  investor_csr( p_chr_id );
11101         FETCH investor_csr INTO l_investor_flag;
11102         CLOSE investor_csr;
11103 
11104         IF (l_investor_flag is not null and l_investor_flag = 'Y') Then
11105             x_hdr_tbl(19) := l_investor_flag;
11106         ELSE
11107             x_hdr_tbl(19) := 'N';
11108         END IF;
11109 
11110         --l_return_status := okl_contract_info_pvt.get_private_label(p_chr_id, l_priv);
11111         --l_return_status := get_private_label(p_chr_id, l_priv);
11112         l_return_status := get_party(p_chr_id,'PRIVATE_LABEL', l_priv);
11113         IF (l_return_status = OKL_API.G_RET_STS_SUCCESS) Then
11114             x_hdr_tbl(20) := l_priv;
11115         ELSE
11116             x_hdr_tbl(20) := '';
11117         END IF;
11118 
11119         x_hdr_tbl(21) := status_rec.ste_code;
11120         x_hdr_tbl(22) := status_rec.code;
11121 
11122         x_hdr_tbl(23) := chr_rec.authoring_org_id;
11123        --Added by dpsingh for LE Project
11124 	x_hdr_tbl(24) := chr_rec.legal_entity_id;
11125     Else
11126        x_hdr_tbl(1) := 'GET_FROM_REQUEST';
11127     End if;
11128 
11129     l_return_status := OKL_API.G_RET_STS_SUCCESS;
11130 
11131     Exception
11132         when OKL_API.G_EXCEPTION_ERROR then
11133                 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
11134                         p_api_name  => l_api_name,
11135                         p_pkg_name  => g_pkg_name,
11136                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
11137                         x_msg_count => x_msg_count,
11138                         x_msg_data  => x_msg_data,
11139                         p_api_type  => g_api_type);
11140 
11141         when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
11142                 x_return_status := OKL_API.HANDLE_EXCEPTIONS(
11143                         p_api_name  => l_api_name,
11144                         p_pkg_name  => g_pkg_name,
11145                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
11146                         x_msg_count => x_msg_count,
11147                         x_msg_data  => x_msg_data,
11148                         p_api_type  => g_api_type);
11149 
11150         when OTHERS then
11151         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
11152                         p_api_name  => l_api_name,
11153                         p_pkg_name  => g_pkg_name,
11154                         p_exc_name  => 'OTHERS',
11155                         x_msg_count => x_msg_count,
11156                         x_msg_data  => x_msg_data,
11157                         p_api_type  => g_api_type);
11158 
11159 
11160   END get_contract_header_info;
11161 END OKL_CONTRACT_PVT;