DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_CONTRACT_PVT

Source


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