DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_CONTRACT_TOP_LINE_PVT

Source


1 package body okl_contract_top_line_pvt as
2  /* $Header: OKLRKTLB.pls 120.10 2008/02/12 08:39:21 rajnisku noship $ */
3 
4 -- Start of comments
5 --
6 -- Procedure Name  : create_contract_line
7 -- Description     : creates contract line for shadowed contract
8 -- Business Rules  :
9 -- Parameters      :
10 -- Version         : 1.0
11 -- End of comments
12 
13   G_API_TYPE		      CONSTANT VARCHAR2(4)   := '_PVT';
14   G_INVALID_NO_OF_PAYMENTS    CONSTANT VARCHAR2(200) := 'OKL_INVALID_NO_OF_PAYMNTS';
15   G_FT_FINANCED		      CONSTANT VARCHAR2(200) := 'FINANCED';
16   G_FT_ABSORBED		      CONSTANT VARCHAR2(200) := 'ABSORBED';
17 
18   FUNCTION GET_AK_PROMPT(p_ak_region	IN VARCHAR2, p_ak_attribute	IN VARCHAR2)
19   RETURN VARCHAR2 IS
20 
21   	CURSOR ak_prompt_csr(p_ak_region VARCHAR2, p_ak_attribute VARCHAR2) IS
22 	SELECT a.attribute_label_long
23 	FROM ak_region_items ri, AK_REGIONS r, AK_ATTRIBUTES_vL a
24 	WHERE ri.region_code = r.region_code
25 	AND ri.attribute_code = a.attribute_code
26 	AND ri.region_code  =  p_ak_region
27 	AND ri.attribute_code = p_ak_attribute;
28 
29   	l_ak_prompt AK_ATTRIBUTES_VL.attribute_label_long%TYPE;
30   BEGIN
31   	OPEN ak_prompt_csr(p_ak_region, p_ak_attribute);
32   	FETCH ak_prompt_csr INTO l_ak_prompt;
33   	CLOSE ak_prompt_csr;
34   	return(l_ak_prompt);
35   END;
36 
37 -- Start of comments
38 --
39 -- Procedure Name  : create_contract_link_serv
40 -- Description     : link service contract to lease
41 -- Business Rules  :
42 -- Parameters      :
43 -- Version         : 1.0
44 -- End of comments
45 
46   PROCEDURE create_contract_link_serv (
47             p_api_version    		IN  NUMBER,
48             p_init_msg_list  		IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
49             x_return_status  		OUT NOCOPY VARCHAR2,
50             x_msg_count      		OUT NOCOPY NUMBER,
51             x_msg_data       		OUT NOCOPY VARCHAR2,
52             p_chr_id			IN  NUMBER,
53 	    p_contract_number           IN  VARCHAR2,
54 	    p_item_name                 IN  VARCHAR2,
55 	    p_supplier_name             IN  VARCHAR2,
56 	    x_cle_id			OUT NOCOPY NUMBER ) IS
57 
58     CURSOR l_serv_contract_csr IS
59     select id
60     from okc_k_headers_b k
61     where contract_number = p_contract_number
62     and scs_code = 'SERVICE';
63 
64     CURSOR l_rel_vers_csr IS
65     Select id
66     from   okc_class_operations
67     where  cls_code = 'SERVICE'
68     and    opn_code = 'CHECK_RULE';
69 
70     CURSOR l_serv_contract9_csr IS
71     select id
72     from okc_k_headers_b k
73     where contract_number = p_contract_number
74     and scs_code = 'SERVICE';
75 
76     CURSOR l_serv_line_csr IS
77     select to_number(cle_id)
78     from okl_la_link_service_uv
79     where contract_number = p_contract_number
80     and item_name = p_item_name;
81 
82     CURSOR l_supp_name_csr IS
83     select id1
84     from okx_vendors_v
85     where name = p_supplier_name;
86 
87     CURSOR l_k_sts_csr IS
88     select k.sts_code, sts.ste_code
89     from OKC_K_HEADERS_B K,
90      OKC_STATUSES_B STS
91     where STS.CODE = K.STS_CODE
92     and K.ID = p_chr_id;
93 
94     Cursor l_strmtyp_id_csr  IS
95     SELECT  sty_id
96     FROM okl_strm_tmpt_full_uv
97     WHERE STY_PURPOSE = 'SERVICE_PAYMENT'
98     and exists (SELECT 1
99                 FROM OKC_K_HEADERS_B chr,
100                      OKL_K_HEADERS khr
101 		WHERE chr.id = khr.id
102 		AND khr.pdt_id = okl_strm_tmpt_full_uv.PDT_ID
103 		AND trunc(chr.start_date) BETWEEN trunc(okl_strm_tmpt_full_uv.START_DATE) AND nvl(trunc(okl_strm_tmpt_full_uv.END_DATE),chr.start_date+1)
104 		AND chr.id = p_chr_id)
105     and sty_name = p_item_name;
106 
107     l_chr_id    okc_k_headers_b.id%type := null;
108     l_s_chr_id  okc_k_headers_b.id%type := null;
109     l_s_cle_id  okc_k_lines_b.id%type := null;
110     l_supp_id   okx_vendors_v.id1%type := null;
111     x_okl_cle_id    okc_k_lines_b.id%type := null;
112     l_rel_vers_id number := null;
113     l_strmtyp_id okl_strm_tmpt_full_uv.sty_id%type := null;
114     l_sts_code OKC_K_HEADERS_B.sts_code%type:= null;
115     l_ste_code OKC_STATUSES_B.STE_CODE%type:= null;
116 
117     l_api_name		CONSTANT VARCHAR2(30) := 'create_contract_link_serv';
118     l_api_version	CONSTANT NUMBER	  := 1.0;
119     l_return_status	VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
120     l_ak_prompt  AK_ATTRIBUTES_VL.attribute_label_long%type;
121 
122     l_auth number := null;
123     l_inv number := null;
124 
125   BEGIN
126 
127 
128   l_chr_id := p_chr_id;
129 
130   If okl_context.get_okc_org_id  is null then
131       okl_context.set_okc_org_context(p_chr_id => l_chr_id );
132   End If;
133 
134   -- call START_ACTIVITY to create savepoint, check compatibility
135   -- and initialize message list
136    l_return_status := OKC_API.START_ACTIVITY(
137 			p_api_name      => l_api_name,
138 			p_pkg_name      => g_pkg_name,
139 			p_init_msg_list => p_init_msg_list,
140 			l_api_version   => l_api_version,
141 			p_api_version   => p_api_version,
142 			p_api_type      => g_api_type,
143 			x_return_status => x_return_status);
144 
145    -- check if activity started successfully
146    If (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
147      raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
148    Elsif (l_return_status = OKC_API.G_RET_STS_ERROR) then
149        raise OKC_API.G_EXCEPTION_ERROR;
150    End If;
151 
152    If(p_contract_number is null) Then
153       x_return_status := OKC_API.g_ret_sts_error;
154       l_ak_prompt := GET_AK_PROMPT('OKL_LA_DEAL_CREAT', 'OKL_CONTRACT_NUMBER');
155       OKC_API.SET_MESSAGE(      p_app_name => g_app_name
156   				, p_msg_name => 'OKL_REQUIRED_VALUE'
157   				, p_token1 => 'COL_NAME'
158   				, p_token1_value => l_ak_prompt
159 --  				, p_token1_value => 'a'||l_chr_id
160   			   );
161       raise OKC_API.G_EXCEPTION_ERROR;
162    End If;
163 
164    l_rel_vers_id := null;
165    open  l_rel_vers_csr;
166    fetch l_rel_vers_csr into l_rel_vers_id;
167    close l_rel_vers_csr;
168 
169   If(l_rel_vers_id is null) Then
170 
171    open  l_serv_contract9_csr;
172    fetch l_serv_contract9_csr into l_s_chr_id;
173    close l_serv_contract9_csr;
174 
175   Else
176 
177    open  l_serv_contract_csr;
178    fetch l_serv_contract_csr into l_s_chr_id;
179    close l_serv_contract_csr;
180 
181   End If;
182 
183    If l_s_chr_id is null Then
184       x_return_status := OKC_API.g_ret_sts_error;
185       l_ak_prompt := GET_AK_PROMPT('OKL_LA_DEAL_CREAT', 'OKL_CONTRACT_NUMBER');
186       OKC_API.SET_MESSAGE(      p_app_name => g_app_name
187   				, p_msg_name => 'OKL_LLA_INVALID_LOV_VALUE'
188   				, p_token1 => 'COL_NAME'
189   				, p_token1_value => l_ak_prompt
190   			   );
191       raise OKC_API.G_EXCEPTION_ERROR;
192    End If;
193 
194    If(p_item_name is null) Then
195       x_return_status := OKC_API.g_ret_sts_error;
196       l_ak_prompt := GET_AK_PROMPT('OKL_LA_SERVICE_LINE', 'OKL_LA_SERVICE');
197       OKC_API.SET_MESSAGE(      p_app_name => g_app_name
198   				, p_msg_name => 'OKL_REQUIRED_VALUE'
199   				, p_token1 => 'COL_NAME'
200   				, p_token1_value => l_ak_prompt
201   			   );
202       raise OKC_API.G_EXCEPTION_ERROR;
203    End If;
204 
205   -- If(NOT(p_item_name is not null and p_item_name = 'RELINK_SERV_INTGR')) Then
206 
207    l_strmtyp_id := null;
208    open  l_strmtyp_id_csr;
209    fetch l_strmtyp_id_csr into l_strmtyp_id;
210    close l_strmtyp_id_csr;
211 
212    If(l_strmtyp_id is null) Then
213       x_return_status := OKC_API.g_ret_sts_error;
214       l_ak_prompt := GET_AK_PROMPT('OKL_LA_SERVICE_LINE', 'OKL_PAYMENT_TYPE');
215       If(l_ak_prompt is null) Then
216        l_ak_prompt := 'Payment Type';
217       End If;
218       OKC_API.SET_MESSAGE(      p_app_name => g_app_name
219   				, p_msg_name => 'OKL_LLA_INVALID_LOV_VALUE'
220   				, p_token1 => 'COL_NAME'
221   				, p_token1_value => l_ak_prompt
222   			   );
223       raise OKC_API.G_EXCEPTION_ERROR;
224    End If;
225 
226   -- End If;
227 
228    If(p_supplier_name is null) Then
229       x_return_status := OKC_API.g_ret_sts_error;
230       l_ak_prompt := GET_AK_PROMPT('OKL_LA_SERVICE_LINE', 'OKL_LA_SERVICE_SUPPLIER');
231       OKC_API.SET_MESSAGE(      p_app_name => g_app_name
232   				, p_msg_name => 'OKL_REQUIRED_VALUE'
233   				, p_token1 => 'COL_NAME'
234   				, p_token1_value => l_ak_prompt
235   			   );
236       raise OKC_API.G_EXCEPTION_ERROR;
237    End If;
238 
239    open  l_supp_name_csr;
240    fetch l_supp_name_csr into l_supp_id;
241    close l_supp_name_csr;
242 
243    If(l_supp_id is null) Then
244       x_return_status := OKC_API.g_ret_sts_error;
245       l_ak_prompt := GET_AK_PROMPT('OKL_LA_SERVICE_LINE', 'OKL_LA_SERVICE_SUPPLIER');
246       OKC_API.SET_MESSAGE(      p_app_name => g_app_name
247   				, p_msg_name => 'OKL_LLA_INVALID_LOV_VALUE'
248   				, p_token1 => 'COL_NAME'
249   				, p_token1_value => l_ak_prompt
250   			   );
251       raise OKC_API.G_EXCEPTION_ERROR;
252    End If;
253 
254    l_sts_code := null;
255    l_ste_code := null;
256    open  l_k_sts_csr;
257    fetch l_k_sts_csr into l_sts_code, l_ste_code;
258    close l_k_sts_csr;
259 
260    --If(p_item_name is not null and p_item_name = 'RELINK_SERV_INTGR') Then
261    If(NOT( l_ste_code is not null AND (l_ste_code = 'ENTERED' OR l_ste_code = 'SIGNED'))) Then
262 
263       OKL_SERVICE_INTEGRATION_PVT.relink_service_contract(
264           p_api_version         => p_api_version,
265           p_init_msg_list       => p_init_msg_list,
266           x_return_status       => x_return_status,
267           x_msg_count           => x_msg_count,
268           x_msg_data            => x_msg_data,
269           p_okl_chr_id          => l_chr_id,
270           p_oks_chr_id          => l_s_chr_id, -- Service Contract Header ID
271           p_supplier_id         => l_supp_id,
272           p_sty_id              => l_strmtyp_id, -- payment type
273           x_okl_service_line_id => x_okl_cle_id   -- Returns Contract Service TOP Line ID
274          );
275 
276    If (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
277            raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
278    Elsif (x_return_status = OKC_API.G_RET_STS_ERROR) then
279            raise OKC_API.G_EXCEPTION_ERROR;
280    End If;
281 
282    Else
283 
284        OKL_SERVICE_INTEGRATION_PVT.create_service_from_oks(
285           p_api_version         => p_api_version,
286           p_init_msg_list       => p_init_msg_list,
287           x_return_status       => x_return_status,
288           x_msg_count           => x_msg_count,
289           x_msg_data            => x_msg_data,
290           p_okl_chr_id          => l_chr_id,
291           p_oks_chr_id          => l_s_chr_id, -- Service Contract Header ID
292           p_supplier_id         => l_supp_id, -- supplier id
293           p_sty_id              => l_strmtyp_id, -- payment type
294           x_okl_service_line_id => x_okl_cle_id   -- Returns Contract Service TOP Line ID
295        );
296 
297       If (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
298             raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
299       Elsif (x_return_status = OKC_API.G_RET_STS_ERROR) then
300             raise OKC_API.G_EXCEPTION_ERROR;
301       End If;
302 
303   End If;
304 
305   x_cle_id := x_okl_cle_id;
306 
307   OKC_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
308 
309   EXCEPTION
310     when OKC_API.G_EXCEPTION_ERROR then
311       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
312 			p_api_name  => l_api_name,
313 			p_pkg_name  => g_pkg_name,
314 			p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
315 			x_msg_count => x_msg_count,
316 			x_msg_data  => x_msg_data,
317 			p_api_type  => g_api_type);
318 
319     when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
320       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
321 			p_api_name  => l_api_name,
322 			p_pkg_name  => g_pkg_name,
323 			p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
324 			x_msg_count => x_msg_count,
325 			x_msg_data  => x_msg_data,
326 			p_api_type  => g_api_type);
327 
328     when OTHERS then
329       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
330 			p_api_name  => l_api_name,
331 			p_pkg_name  => g_pkg_name,
332 			p_exc_name  => 'OTHERS',
333 			x_msg_count => x_msg_count,
334 			x_msg_data  => x_msg_data,
335 			p_api_type  => g_api_type);
336   END create_contract_link_serv;
337 
338 -- Start of comments
339 --
340 -- Procedure Name  : create_contract_link_serv
341 -- Description     : link service contract to lease
342 -- Business Rules  :
343 -- Parameters      :
344 -- Version         : 1.0
345 -- End of comments
346 
347   PROCEDURE update_contract_link_serv (
348             p_api_version    		IN  NUMBER,
349             p_init_msg_list  		IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
350             x_return_status  		OUT NOCOPY VARCHAR2,
351             x_msg_count      		OUT NOCOPY NUMBER,
352             x_msg_data       		OUT NOCOPY VARCHAR2,
353             p_chr_id			IN  NUMBER,
354             p_cle_id			IN  NUMBER,
355 	    p_contract_number           IN  VARCHAR2,
356 	    p_item_name                 IN  VARCHAR2,
357 	    p_supplier_name             IN  VARCHAR2,
358 	    x_cle_id			OUT NOCOPY NUMBER ) IS
359 
360     CURSOR l_serv_contract_csr IS
361     select id
362     from okc_k_headers_b k
363     where contract_number = p_contract_number
364     and scs_code = 'SERVICE';
365 
366     CURSOR l_rel_vers_csr IS
367     Select id
368     from   okc_class_operations
369     where  cls_code = 'SERVICE'
370     and    opn_code = 'CHECK_RULE';
371 
372     CURSOR l_serv_contract9_csr IS
373     select id
374     from okc_k_headers_b k
375     where contract_number = p_contract_number
376     and scs_code = 'SERVICE';
377 
378     CURSOR l_serv_line_csr IS
379     select to_number(cle_id)
380     from okl_la_link_service_uv
381     where contract_number = p_contract_number
382     and item_name = p_item_name;
383 
384     CURSOR l_supp_name_csr IS
385     select id1
386     from okx_vendors_v
387     where name = p_supplier_name;
388 
389     l_chr_id    okc_k_headers_b.id%type := null;
390     l_s_chr_id  okc_k_headers_b.id%type := null;
391     l_s_cle_id  okc_k_lines_b.id%type := null;
392     l_supp_id   okx_vendors_v.id1%type := null;
393     x_okl_cle_id    okc_k_lines_b.id%type := null;
394     l_rel_vers_id number := null;
395 
396     lp_clev_rec OKL_SERVICE_INTEGRATION_PUB.clev_rec_type;
397     lp_klev_rec OKL_SERVICE_INTEGRATION_PUB.klev_rec_type;
398 
399 
400     l_api_name		CONSTANT VARCHAR2(30) := 'update_contract_link_serv';
401     l_api_version	CONSTANT NUMBER	  := 1.0;
402     l_return_status	VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
403     l_ak_prompt  AK_ATTRIBUTES_VL.attribute_label_long%type;
404 
405   BEGIN
406 
407   l_chr_id := p_chr_id;
408   If okl_context.get_okc_org_id  is null then
409       okl_context.set_okc_org_context(p_chr_id => l_chr_id );
410   End If;
411 
412   -- call START_ACTIVITY to create savepoint, check compatibility
413   -- and initialize message list
414    l_return_status := OKC_API.START_ACTIVITY(
415 			p_api_name      => l_api_name,
416 			p_pkg_name      => g_pkg_name,
417 			p_init_msg_list => p_init_msg_list,
418 			l_api_version   => l_api_version,
419 			p_api_version   => p_api_version,
420 			p_api_type      => g_api_type,
421 			x_return_status => x_return_status);
422 
423    -- check if activity started successfully
424    If (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
425      raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
426    Elsif (l_return_status = OKC_API.G_RET_STS_ERROR) then
427        raise OKC_API.G_EXCEPTION_ERROR;
428    End If;
429 
430    If(p_contract_number is null) Then
431       x_return_status := OKC_API.g_ret_sts_error;
432       l_ak_prompt := GET_AK_PROMPT('OKL_LA_DEAL_CREAT', 'OKL_CONTRACT_NUMBER');
433       OKC_API.SET_MESSAGE(      p_app_name => g_app_name
434   				, p_msg_name => 'OKL_REQUIRED_VALUE'
435   				, p_token1 => 'COL_NAME'
436   				, p_token1_value => l_ak_prompt
437   			   );
438       raise OKC_API.G_EXCEPTION_ERROR;
439    End If;
440 
441    l_rel_vers_id := null;
442    open  l_rel_vers_csr;
443    fetch l_rel_vers_csr into l_rel_vers_id;
444    close l_rel_vers_csr;
445 
446   If(l_rel_vers_id is null) Then
447 
448    open  l_serv_contract9_csr;
449    fetch l_serv_contract9_csr into l_s_chr_id;
450    close l_serv_contract9_csr;
451 
452   Else
453 
454    open  l_serv_contract_csr;
455    fetch l_serv_contract_csr into l_s_chr_id;
456    close l_serv_contract_csr;
457 
458   End If;
459 
460    If l_s_chr_id is null Then
461       x_return_status := OKC_API.g_ret_sts_error;
462       l_ak_prompt := GET_AK_PROMPT('OKL_LA_DEAL_CREAT', 'OKL_CONTRACT_NUMBER');
463       OKC_API.SET_MESSAGE(      p_app_name => g_app_name
464   				, p_msg_name => 'OKL_LLA_INVALID_LOV_VALUE'
465   				, p_token1 => 'COL_NAME'
466   				, p_token1_value => l_ak_prompt
467   			   );
468       raise OKC_API.G_EXCEPTION_ERROR;
469    End If;
470 
471 /*
472    If(p_item_name is null) Then
473       x_return_status := OKC_API.g_ret_sts_error;
474       l_ak_prompt := GET_AK_PROMPT('OKL_LA_SERVICE_LINE', 'OKL_LA_SERVICE');
475       OKC_API.SET_MESSAGE(      p_app_name => g_app_name
476   				, p_msg_name => 'OKL_REQUIRED_VALUE'
477   				, p_token1 => 'COL_NAME'
478   				, p_token1_value => l_ak_prompt
479   			   );
480       raise OKC_API.G_EXCEPTION_ERROR;
481    End If;
482 
483 
484    open  l_serv_line_csr;
485    fetch l_serv_line_csr into l_s_cle_id;
486    close l_serv_line_csr;
487 
488    If l_s_cle_id is null Then
489       x_return_status := OKC_API.g_ret_sts_error;
490       l_ak_prompt := GET_AK_PROMPT('OKL_LA_SERVICE_LINE', 'OKL_LA_SERVICE');
491       OKC_API.SET_MESSAGE(      p_app_name => g_app_name
492   				, p_msg_name => 'OKL_LLA_INVALID_LOV_VALUE'
493   				, p_token1 => 'COL_NAME'
494   				, p_token1_value => l_ak_prompt
495   			   );
496       raise OKC_API.G_EXCEPTION_ERROR;
497    End If;
498 */
499 
500    If(p_supplier_name is null) Then
501       x_return_status := OKC_API.g_ret_sts_error;
502       l_ak_prompt := GET_AK_PROMPT('OKL_LA_SERVICE_LINE', 'OKL_LA_SERVICE_SUPPLIER');
503       OKC_API.SET_MESSAGE(      p_app_name => g_app_name
504   				, p_msg_name => 'OKL_REQUIRED_VALUE'
505   				, p_token1 => 'COL_NAME'
506   				, p_token1_value => l_ak_prompt
507   			   );
508       raise OKC_API.G_EXCEPTION_ERROR;
509    End If;
510 
511    open  l_supp_name_csr;
512    fetch l_supp_name_csr into l_supp_id;
513    close l_supp_name_csr;
514 
515    If(l_supp_id is null) Then
516       x_return_status := OKC_API.g_ret_sts_error;
517       l_ak_prompt := GET_AK_PROMPT('OKL_LA_SERVICE_LINE', 'OKL_LA_SERVICE_SUPPLIER');
518       OKC_API.SET_MESSAGE(      p_app_name => g_app_name
519   				, p_msg_name => 'OKL_LLA_INVALID_LOV_VALUE'
520   				, p_token1 => 'COL_NAME'
521   				, p_token1_value => l_ak_prompt
522   			   );
523       raise OKC_API.G_EXCEPTION_ERROR;
524    End If;
525 
526    lp_clev_rec.dnz_chr_id := l_chr_id;
527    lp_clev_rec.id := p_cle_id;
528    lp_klev_rec.id := p_cle_id;
529 
530 
531    OKL_SERVICE_INTEGRATION_PUB.update_service_line(
532           p_api_version         => p_api_version,
533           p_init_msg_list       => p_init_msg_list,
534           x_return_status       => x_return_status,
535           x_msg_count           => x_msg_count,
536           x_msg_data            => x_msg_data,
537           p_okl_chr_id          => l_chr_id,
538           p_oks_chr_id          => l_s_chr_id, -- Service Contract Header ID
539           p_oks_service_line_id => l_s_cle_id, -- Service Contract Service Top Line ID
540           p_supplier_id         => l_supp_id,
541           p_clev_rec            => lp_clev_rec,
542           p_klev_rec            => lp_klev_rec,
543           x_okl_service_line_id => x_okl_cle_id   -- Returns Contract Service TOP Line ID
544       );
545 
546    If (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
547            raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
548    Elsif (x_return_status = OKC_API.G_RET_STS_ERROR) then
549            raise OKC_API.G_EXCEPTION_ERROR;
550    End If;
551 
552   x_cle_id := x_okl_cle_id;
553 
554   OKC_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data => x_msg_data);
555 
556   EXCEPTION
557     when OKC_API.G_EXCEPTION_ERROR then
558       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
559 			p_api_name  => l_api_name,
560 			p_pkg_name  => g_pkg_name,
561 			p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
562 			x_msg_count => x_msg_count,
563 			x_msg_data  => x_msg_data,
564 			p_api_type  => g_api_type);
565 
566     when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
567       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
568 			p_api_name  => l_api_name,
569 			p_pkg_name  => g_pkg_name,
570 			p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
571 			x_msg_count => x_msg_count,
572 			x_msg_data  => x_msg_data,
573 			p_api_type  => g_api_type);
574 
575     when OTHERS then
576       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
577 			p_api_name  => l_api_name,
578 			p_pkg_name  => g_pkg_name,
579 			p_exc_name  => 'OTHERS',
580 			x_msg_count => x_msg_count,
581 			x_msg_data  => x_msg_data,
582 			p_api_type  => g_api_type);
583   END update_contract_link_serv;
584 
585 
586   PROCEDURE create_contract_top_line(
587     p_api_version                  IN NUMBER,
588     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
589     x_return_status                OUT NOCOPY VARCHAR2,
590     x_msg_count                    OUT NOCOPY NUMBER,
591     x_msg_data                     OUT NOCOPY VARCHAR2,
592     p_clev_rec                     IN  clev_rec_type,
593     p_klev_rec                     IN  klev_rec_type,
594     p_cimv_rec                     IN  cimv_rec_type,
595     p_cplv_rec                     IN  cplv_rec_type,
596     x_clev_rec                     OUT NOCOPY clev_rec_type,
597     x_klev_rec                     OUT NOCOPY klev_rec_type,
598     x_cimv_rec                     OUT NOCOPY cimv_rec_type,
599     x_cplv_rec                     OUT NOCOPY cplv_rec_type) IS
600 
601     l_clev_rec clev_rec_type := p_clev_rec;
602     l_klev_rec klev_rec_type := p_klev_rec;
603     l_cimv_rec cimv_rec_type := p_cimv_rec;
604     l_cplv_rec cplv_rec_type := p_cplv_rec;
605 
606     l_chr_id  l_clev_rec.dnz_chr_id%type;
607 
608     l_api_name		CONSTANT VARCHAR2(30) := 'create_contract_top_line';
609     l_api_version	CONSTANT NUMBER	  := 1.0;
610     l_return_status	VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
611 
612     CURSOR get_k_dates_csr(l_id NUMBER) IS
613     select chr.start_date, chr.end_date
614     from okc_k_headers_b chr
615     where chr.id = l_id;
616 
617     l_start_date okc_k_headers_b.start_date%type := null;
618     l_end_date okc_k_headers_b.end_date%type := null;
619 
620     l_cap_yn OKL_STRMTYP_SOURCE_V.CAPITALIZE_YN%type := null;
621     l_lty_code OKC_LINE_STYLES_V.LTY_CODE%type := null;
622 
623     CURSOR get_capitalize_yn_csr(cap_yn VARCHAR2) IS
624       SELECT CAPITALIZE_YN
625       FROM OKL_STRMTYP_SOURCE_V  OKL_STRMTYP
626       WHERE OKL_STRMTYP.NAME = cap_yn
627       AND  OKL_STRMTYP.STATUS = 'A';
628 
629     CURSOR get_lty_code_csr(lse_id NUMBER) IS
630       select lty_code
631       from okc_line_styles_v
632       where id = lse_id;
633 
634 
635   BEGIN
636 
637 	l_chr_id := l_clev_rec.dnz_chr_id;
638     	If okl_context.get_okc_org_id  is null then
639       		okl_context.set_okc_org_context(p_chr_id => l_chr_id );
640     	End If;
641 
642     -- call START_ACTIVITY to create savepoint, check compatibility
643     -- and initialize message list
644     x_return_status := OKC_API.START_ACTIVITY(
645 			p_api_name      => l_api_name,
646 			p_pkg_name      => g_pkg_name,
647 			p_init_msg_list => p_init_msg_list,
648 			l_api_version   => l_api_version,
649 			p_api_version   => p_api_version,
650 			p_api_type      => g_api_type,
651 			x_return_status => x_return_status);
652 
653     -- check if activity started successfully
654     If (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
655        raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
656     Elsif (x_return_status = OKC_API.G_RET_STS_ERROR) then
657        raise OKC_API.G_EXCEPTION_ERROR;
658     End If;
659 
660     l_clev_rec.name := l_clev_rec.item_description;
661 
662     open get_lty_code_csr(l_clev_rec.lse_id);
663     fetch get_lty_code_csr into l_lty_code;
664     close get_lty_code_csr;
665 
666     If (l_lty_code is not null and l_lty_code = 'FEE') Then
667 
668      open get_capitalize_yn_csr(l_clev_rec.item_description);
669      fetch get_capitalize_yn_csr into l_cap_yn;
670      close get_capitalize_yn_csr;
671      If (l_cap_yn is not null and l_cap_yn = 'Y') Then
672           l_klev_rec.capital_amount := p_klev_rec.amount;
673      Else
674      	l_klev_rec.capital_amount := null;
675      End If;
676 
677     End If;
678 
679 
680     If ( (l_clev_rec.start_date is null or l_clev_rec.start_date = OKC_API.G_MISS_DATE)
681         or (l_clev_rec.end_date is null or l_clev_rec.end_date = OKC_API.G_MISS_DATE) )then
682 
683         open get_k_dates_csr(l_clev_rec.dnz_chr_id);
684         fetch get_k_dates_csr into l_start_date, l_end_date;
685         close get_k_dates_csr;
686 
687         If ( l_clev_rec.start_date is null or l_clev_rec.start_date = OKC_API.G_MISS_DATE) then
688          l_clev_rec.start_date := l_start_date;
689         End If;
690 
691         If ( l_clev_rec.end_date is null or l_clev_rec.end_date = OKC_API.G_MISS_DATE) then
692          l_clev_rec.end_date := l_end_date;
693         End If;
694 
695     End If;
696 
697     --Bug# 4558486
698     -- To validate DFF data for Service Line
699     l_klev_rec.validate_dff_yn := 'Y';
700 
701     okl_contract_pvt.create_contract_line(
702       p_api_version   => p_api_version,
703       p_init_msg_list => p_init_msg_list,
704       x_return_status => x_return_status,
705       x_msg_count     => x_msg_count,
706       x_msg_data      => x_msg_data,
707       p_clev_rec      => l_clev_rec,
708       p_klev_rec      => l_klev_rec,
709       x_clev_rec      => x_clev_rec,
710       x_klev_rec      => x_klev_rec);
711 
712      IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
713        raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
714      ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
715        raise OKC_API.G_EXCEPTION_ERROR;
716      END IF;
717 
718    l_cimv_rec.cle_id :=  x_clev_rec.id;
719 
720     okl_okc_migration_pvt.create_contract_item(
721 	 p_api_version	=> p_api_version,
722 	 p_init_msg_list	=> p_init_msg_list,
723 	 x_return_status 	=> x_return_status,
724 	 x_msg_count     	=> x_msg_count,
725 	 x_msg_data      	=> x_msg_data,
726 	 p_cimv_rec		=> l_cimv_rec,
727 	 x_cimv_rec		=> x_cimv_rec);
728 
729     -- check return status
730     If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
731 	  raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
732     Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
733 	  raise OKC_API.G_EXCEPTION_ERROR;
734     End If;
735 
736 
737    l_cplv_rec.cle_id :=  x_clev_rec.id;
738 
739 --Murthy commented out supplier is not created at line creation.
740 /*   if ( l_cplv_rec.object1_id1 is not null and l_cplv_rec.object1_id2 is not null) then
741 
742     okl_okc_migration_pvt.create_k_party_role(
743 	 p_api_version	=> p_api_version,
744 	 p_init_msg_list	=> p_init_msg_list,
745 	 x_return_status 	=> x_return_status,
746 	 x_msg_count     	=> x_msg_count,
747 	 x_msg_data      	=> x_msg_data,
748 	 p_cplv_rec		=> l_cplv_rec,
749 	 x_cplv_rec		=> x_cplv_rec);
750 
751     -- check return status
752     If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
753 	  raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
754     Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
755 	  raise OKC_API.G_EXCEPTION_ERROR;
756     End If;
757 
758    end if;*/
759 
760   OKC_API.END_ACTIVITY(x_msg_count	=> x_msg_count, x_msg_data	=> x_msg_data);
761   EXCEPTION
762     when OKC_API.G_EXCEPTION_ERROR then
763       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
764 			p_api_name  => l_api_name,
765 			p_pkg_name  => g_pkg_name,
766 			p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
767 			x_msg_count => x_msg_count,
768 			x_msg_data  => x_msg_data,
769 			p_api_type  => g_api_type);
770 
771     when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
772       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
773 			p_api_name  => l_api_name,
774 			p_pkg_name  => g_pkg_name,
775 			p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
776 			x_msg_count => x_msg_count,
777 			x_msg_data  => x_msg_data,
778 			p_api_type  => g_api_type);
779 
780     when OTHERS then
781       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
782 			p_api_name  => l_api_name,
783 			p_pkg_name  => g_pkg_name,
784 			p_exc_name  => 'OTHERS',
785 			x_msg_count => x_msg_count,
786 			x_msg_data  => x_msg_data,
787 			p_api_type  => g_api_type);
788   END create_contract_top_line;
789 
790 -- Start of comments
791 --
792 -- Procedure Name  : create_contract_top_line
793 -- Description     : creates contract line for shadowed contract
794 -- Business Rules  :
795 -- Parameters      :
796 -- Version         : 1.0
797 -- End of comments
798   PROCEDURE create_contract_top_line(
799     p_api_version                  IN NUMBER,
800     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
801     x_return_status                OUT NOCOPY VARCHAR2,
802     x_msg_count                    OUT NOCOPY NUMBER,
803     x_msg_data                     OUT NOCOPY VARCHAR2,
804     p_clev_tbl                     IN  clev_tbl_type,
805     p_klev_tbl                     IN  klev_tbl_type,
806     p_cimv_tbl                     IN  cimv_tbl_type,
807     p_cplv_tbl                     IN  cplv_tbl_type,
808     x_clev_tbl                     OUT NOCOPY clev_tbl_type,
809     x_klev_tbl                     OUT NOCOPY klev_tbl_type,
810     x_cimv_tbl                     OUT NOCOPY cimv_tbl_type,
811     x_cplv_tbl                     OUT NOCOPY cplv_tbl_type) IS
812 
813     l_api_name		CONSTANT VARCHAR2(30) := 'CREATE_contract_top_line';
814     l_api_version	CONSTANT NUMBER	  := 1.0;
815     l_return_status	VARCHAR2(1)		  := OKC_API.G_RET_STS_SUCCESS;
816     l_overall_status 	VARCHAR2(1)		  := OKC_API.G_RET_STS_SUCCESS;
817     i			NUMBER;
818     l_klev_tbl   	klev_tbl_type := p_klev_tbl;
819     l_cimv_tbl   	cimv_tbl_type := p_cimv_tbl;
820     l_cplv_tbl   	cplv_tbl_type := p_cplv_tbl;
821   BEGIN
822 
823 /*
824     -- call START_ACTIVITY to create savepoint, check compatibility
825     -- and initialize message list
826     l_return_status := OKC_API.START_ACTIVITY(
827 			p_api_name      => l_api_name,
828 			p_pkg_name      => g_pkg_name,
829 			p_init_msg_list => p_init_msg_list,
830 			l_api_version   => l_api_version,
831 			p_api_version   => p_api_version,
832 			p_api_type      => g_api_type,
833 			x_return_status => x_return_status);
834 
835     -- check if activity started successfully
836     If (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
837        raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
838     Elsif (l_return_status = OKC_API.G_RET_STS_ERROR) then
839        raise OKC_API.G_EXCEPTION_ERROR;
840     End If;
841 */
842 
843     If (p_clev_tbl.COUNT > 0) Then
844 	   i := p_clev_tbl.FIRST;
845 	   LOOP
846 		-- call procedure in complex API for a record
847 		create_contract_top_line(
848 			p_api_version		=> p_api_version,
849 			p_init_msg_list		=> p_init_msg_list,
850 			x_return_status 	=> x_return_status,
851 			x_msg_count     	=> x_msg_count,
852 			x_msg_data      	=> x_msg_data,
853 			p_clev_rec		=> p_clev_tbl(i),
854       			p_klev_rec		=> l_klev_tbl(i),
855       			p_cimv_rec		=> l_cimv_tbl(i),
856       			p_cplv_rec		=> l_cplv_tbl(i),
857 			x_clev_rec		=> x_clev_tbl(i),
858       			x_klev_rec		=> x_klev_tbl(i),
859       			x_cimv_rec		=> x_cimv_tbl(i),
860       			x_cplv_rec		=> x_cplv_tbl(i));
861 
862 	    If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
863 		  raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
864 	    Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
865 		  raise OKC_API.G_EXCEPTION_ERROR;
866 	    End If;
867 
868         EXIT WHEN (i = p_clev_tbl.LAST);
869 		i := p_clev_tbl.NEXT(i);
870 	   END LOOP;
871 
872     End If;
873 
874     If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
875 	  raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
876     Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
877 	  raise OKC_API.G_EXCEPTION_ERROR;
878     End If;
879 /*
880     OKC_API.END_ACTIVITY(	x_msg_count	=> x_msg_count,
881 				x_msg_data	=> x_msg_data);
882 */
883   EXCEPTION
884     when OKC_API.G_EXCEPTION_ERROR then
885       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
886 			p_api_name  => l_api_name,
887 			p_pkg_name  => g_pkg_name,
888 			p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
889 			x_msg_count => x_msg_count,
890 			x_msg_data  => x_msg_data,
891 			p_api_type  => g_api_type);
892 
893     when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
894       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
895 			p_api_name  => l_api_name,
896 			p_pkg_name  => g_pkg_name,
897 			p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
898 			x_msg_count => x_msg_count,
899 			x_msg_data  => x_msg_data,
900 			p_api_type  => g_api_type);
901 
902     when OTHERS then
903       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
904 			p_api_name  => l_api_name,
905 			p_pkg_name  => g_pkg_name,
906 			p_exc_name  => 'OTHERS',
907 			x_msg_count => x_msg_count,
908 			x_msg_data  => x_msg_data,
909 			p_api_type  => g_api_type);
910 
911   END create_contract_top_line;
912 
913 
914 -- Start of comments
915 --
916 -- Procedure Name  : update_contract_top_line
917 -- Description     : updates contract line for shadowed contract
918 -- Business Rules  :
919 -- Parameters      :
920 -- Version         : 1.0
921 -- End of comments
922   PROCEDURE update_contract_top_line(
923     p_api_version                  IN NUMBER,
924     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
925     x_return_status                OUT NOCOPY VARCHAR2,
926     x_msg_count                    OUT NOCOPY NUMBER,
927     x_msg_data                     OUT NOCOPY VARCHAR2,
928     p_clev_rec                     IN  clev_rec_type,
929     p_klev_rec                     IN  klev_rec_type,
930     p_cimv_rec                     IN  cimv_rec_type,
931     p_cplv_rec                     IN  cplv_rec_type,
932     x_clev_rec                     OUT NOCOPY clev_rec_type,
933     x_klev_rec                     OUT NOCOPY klev_rec_type,
934     x_cimv_rec                     OUT NOCOPY cimv_rec_type,
935     x_cplv_rec                     OUT NOCOPY cplv_rec_type) IS
936 
937     l_clev_rec clev_rec_type := p_clev_rec;
938     l_klev_rec klev_rec_type := p_klev_rec;
939     l_cimv_rec cimv_rec_type := p_cimv_rec;
940     l_cplv_rec cplv_rec_type := p_cplv_rec;
941 
942     l_chr_id  l_clev_rec.dnz_chr_id%type;
943 
944     l_api_name		CONSTANT VARCHAR2(30) := 'UPDATE_contract_top_line';
945     l_api_version		CONSTANT NUMBER	  := 1.0;
946     l_return_status	VARCHAR2(1)		  := OKC_API.G_RET_STS_SUCCESS;
947 
948     CURSOR get_k_dates_csr(l_id number) IS
949     select chr.start_date, chr.end_date
950     from okc_k_headers_b chr
951     where chr.id = l_id;
952 
953     l_start_date okc_k_headers_b.start_date%type := null;
954     l_end_date okc_k_headers_b.end_date%type := null;
955 
956     l_cap_yn OKL_STRMTYP_SOURCE_V.CAPITALIZE_YN%type := null;
957     l_lty_code OKC_LINE_STYLES_V.LTY_CODE%type := null;
958 
959     CURSOR get_capitalize_yn_csr(cap_yn VARCHAR2) IS
960       SELECT CAPITALIZE_YN
961       FROM OKL_STRMTYP_SOURCE_V  OKL_STRMTYP
962       WHERE OKL_STRMTYP.NAME = cap_yn
963       AND  OKL_STRMTYP.STATUS = 'A';
964 
965     CURSOR get_lty_code_csr(lse_id NUMBER) IS
966       select lty_code
967       from okc_line_styles_v
968       where id = lse_id;
969 
970     -- Bug# 6438785
971     CURSOR c_orig_cle_csr(p_cle_id IN NUMBER) IS
972     SELECT cle.start_date
973     FROM   okc_k_lines_b cle
974     WHERE  cle.id = p_cle_id;
975 
976     l_orig_cle_rec c_orig_cle_csr%ROWTYPE;
977 
978   BEGIN
979 
980 	l_chr_id := l_clev_rec.dnz_chr_id;
981     	If okl_context.get_okc_org_id  is null then
982       		okl_context.set_okc_org_context(p_chr_id => l_chr_id );
983     	End If;
984 
985     -- call START_ACTIVITY to create savepoint, check compatibility
986     -- and initialize message list
987     x_return_status := OKC_API.START_ACTIVITY(
988 			p_api_name      => l_api_name,
989 			p_pkg_name      => g_pkg_name,
990 			p_init_msg_list => p_init_msg_list,
991 			l_api_version   => l_api_version,
992 			p_api_version   => p_api_version,
993 			p_api_type      => g_api_type,
994 			x_return_status => x_return_status);
995 
996     -- check if activity started successfully
997     If (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
998        raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
999     Elsif (x_return_status = OKC_API.G_RET_STS_ERROR) then
1000        raise OKC_API.G_EXCEPTION_ERROR;
1001     End If;
1002 
1003     l_clev_rec.name := l_clev_rec.item_description;
1004 
1005     open get_lty_code_csr(l_clev_rec.lse_id);
1006     fetch get_lty_code_csr into l_lty_code;
1007     close get_lty_code_csr;
1008 
1009     If (l_lty_code is not null and l_lty_code = 'FEE') Then
1010 
1011      open get_capitalize_yn_csr(l_clev_rec.item_description);
1012      fetch get_capitalize_yn_csr into l_cap_yn;
1013      close get_capitalize_yn_csr;
1014      If (l_cap_yn is not null and l_cap_yn = 'Y') Then
1015           l_klev_rec.capital_amount := p_klev_rec.amount;
1016      Else
1017      	l_klev_rec.capital_amount := null;
1018      End If;
1019 
1020     End If;
1021 
1022 
1023     If ( (l_clev_rec.start_date is null or l_clev_rec.start_date = OKC_API.G_MISS_DATE )
1024         or (l_clev_rec.end_date is null or l_clev_rec.end_date = OKC_API.G_MISS_DATE) )then
1025 
1026         open get_k_dates_csr(l_clev_rec.dnz_chr_id);
1027         fetch get_k_dates_csr into l_start_date, l_end_date;
1028         close get_k_dates_csr;
1029 
1030         If ( l_clev_rec.start_date is null or l_clev_rec.start_date = OKC_API.G_MISS_DATE) then
1031          l_clev_rec.start_date := l_start_date;
1032         End If;
1033 
1034         If ( l_clev_rec.end_date is null or l_clev_rec.end_date = OKC_API.G_MISS_DATE) then
1035          l_clev_rec.end_date := l_end_date;
1036         End If;
1037 
1038     End If;
1039 
1040     --Bug# 4558486
1041     -- To validate DFF data for Service Line
1042     l_klev_rec.validate_dff_yn := 'Y';
1043 
1044     -- Bug# 6438785
1045     -- Fetch original service line start date for checking
1046     -- whether start date has been changed
1047     OPEN c_orig_cle_csr(p_cle_id => l_clev_rec.id);
1048     FETCH c_orig_cle_csr INTO l_orig_cle_rec;
1049     CLOSE c_orig_cle_csr;
1050 
1051     okl_contract_pvt.update_contract_line(
1052       p_api_version   => p_api_version,
1053       p_init_msg_list => p_init_msg_list,
1054       x_return_status => x_return_status,
1055       x_msg_count     => x_msg_count,
1056       x_msg_data      => x_msg_data,
1057       p_clev_rec      => l_clev_rec,
1058       p_klev_rec      => l_klev_rec,
1059       x_clev_rec      => x_clev_rec,
1060       x_klev_rec      => x_klev_rec
1061       );
1062 
1063      IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1064        raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1065      ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
1066        raise OKC_API.G_EXCEPTION_ERROR;
1067      END IF;
1068 
1069     --
1070     -- call procedure in complex API
1071     --
1072     okl_okc_migration_pvt.update_contract_item(
1073 	 p_api_version		=> p_api_version,
1074 	 p_init_msg_list	=> p_init_msg_list,
1075 	 x_return_status 	=> x_return_status,
1076 	 x_msg_count     	=> x_msg_count,
1077 	 x_msg_data      	=> x_msg_data,
1078 	 p_cimv_rec		=> l_cimv_rec,
1079 	 x_cimv_rec		=> x_cimv_rec);
1080 
1081     -- check return status
1082     If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
1083 	  raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1084     Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
1085 	  raise OKC_API.G_EXCEPTION_ERROR;
1086     End If;
1087 
1088     -- Bug# 6438785
1089     -- When the service line start date is changed, update the
1090     -- start dates for all service and sub-line payments based on
1091     -- the new line start date
1092     IF (x_clev_rec.start_date <> l_orig_cle_rec.start_date) THEN
1093 
1094       OKL_LA_PAYMENTS_PVT.update_pymt_start_date
1095         (p_api_version    => p_api_version,
1096          p_init_msg_list  => p_init_msg_list,
1097          x_return_status  => x_return_status,
1098          x_msg_count      => x_msg_count,
1099          x_msg_data       => x_msg_data,
1100          p_chr_id         => x_clev_rec.dnz_chr_id,
1101          p_cle_id         => x_clev_rec.id);
1102 
1103       If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
1104         raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1105       Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
1106         raise OKL_API.G_EXCEPTION_ERROR;
1107       End If;
1108 
1109     END IF;
1110     -- Bug# 6438785
1111 
1112 --Murthy commented out supplier information is not created at line creation time.
1113 /*    if ( l_cplv_rec.object1_id1 is not null and l_cplv_rec.object1_id2 is not null) then
1114 
1115     if ( l_cplv_rec.id is null ) then
1116 
1117      okl_okc_migration_pvt.create_k_party_role(
1118 	 p_api_version	=> p_api_version,
1119 	 p_init_msg_list	=> p_init_msg_list,
1120 	 x_return_status 	=> x_return_status,
1121 	 x_msg_count     	=> x_msg_count,
1122 	 x_msg_data      	=> x_msg_data,
1123 	 p_cplv_rec		=> l_cplv_rec,
1124 	 x_cplv_rec		=> x_cplv_rec);
1125 
1126         -- check return status
1127     If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
1128 	  raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1129     Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
1130 	  raise OKC_API.G_EXCEPTION_ERROR;
1131     End If;
1132 
1133     else
1134 
1135     okl_okc_migration_pvt.update_k_party_role(
1136 	 p_api_version		=> p_api_version,
1137 	 p_init_msg_list	=> p_init_msg_list,
1138 	 x_return_status 	=> x_return_status,
1139 	 x_msg_count     	=> x_msg_count,
1140 	 x_msg_data      	=> x_msg_data,
1141 	 p_cplv_rec		=> l_cplv_rec,
1142 	 x_cplv_rec		=> x_cplv_rec);
1143 
1144         -- check return status
1145     If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
1146 	  raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1147     Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
1148 	  raise OKC_API.G_EXCEPTION_ERROR;
1149     End If;
1150 
1151  end if;
1152 
1153  Elsif ( l_cplv_rec.id is not null ) then
1154 
1155  -- delete party
1156   okl_okc_migration_pvt.delete_k_party_role(
1157 	 p_api_version		=> p_api_version,
1158 	 p_init_msg_list	=> p_init_msg_list,
1159 	 x_return_status 	=> x_return_status,
1160 	 x_msg_count     	=> x_msg_count,
1161 	 x_msg_data      	=> x_msg_data,
1162 	 p_cplv_rec		=> l_cplv_rec);
1163 
1164     -- check return status
1165     If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
1166 	  raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1167     Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
1168 	  raise OKC_API.G_EXCEPTION_ERROR;
1169     End If;
1170  end if;*/
1171 
1172     OKC_API.END_ACTIVITY(x_msg_count	=> x_msg_count,
1173 			x_msg_data	=> x_msg_data);
1174 
1175   EXCEPTION
1176     when OKC_API.G_EXCEPTION_ERROR then
1177       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
1178 			p_api_name  => l_api_name,
1179 			p_pkg_name  => g_pkg_name,
1180 			p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
1181 			x_msg_count => x_msg_count,
1182 			x_msg_data  => x_msg_data,
1183 			p_api_type  => g_api_type);
1184 
1185     when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
1186       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
1187 			p_api_name  => l_api_name,
1188 			p_pkg_name  => g_pkg_name,
1189 			p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
1190 			x_msg_count => x_msg_count,
1191 			x_msg_data  => x_msg_data,
1192 			p_api_type  => g_api_type);
1193 
1194     when OTHERS then
1195       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
1196 			p_api_name  => l_api_name,
1197 			p_pkg_name  => g_pkg_name,
1198 			p_exc_name  => 'OTHERS',
1199 			x_msg_count => x_msg_count,
1200 			x_msg_data  => x_msg_data,
1201 			p_api_type  => g_api_type);
1202   END update_contract_top_line;
1203 
1204 
1205 -- Start of comments
1206 --
1207 -- Procedure Name  : update_contract_top_line
1208 -- Description     : updates contract line for shadowed contract
1209 -- Business Rules  :
1210 -- Parameters      :
1211 -- Version         : 1.0
1212 -- End of comments
1213   PROCEDURE update_contract_top_line(
1214     p_api_version                  IN NUMBER,
1215     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
1216     x_return_status                OUT NOCOPY VARCHAR2,
1217     x_msg_count                    OUT NOCOPY NUMBER,
1218     x_msg_data                     OUT NOCOPY VARCHAR2,
1219     p_clev_tbl                     IN  clev_tbl_type,
1220     p_klev_tbl                     IN  klev_tbl_type,
1221     p_cimv_tbl                     IN  cimv_tbl_type,
1222     p_cplv_tbl                     IN  cplv_tbl_type,
1223     x_clev_tbl                     OUT NOCOPY clev_tbl_type,
1224     x_klev_tbl                     OUT NOCOPY klev_tbl_type,
1225     x_cimv_tbl                     OUT NOCOPY cimv_tbl_type,
1226     x_cplv_tbl                     OUT NOCOPY cplv_tbl_type) IS
1227 
1228     l_api_name		CONSTANT VARCHAR2(30) := 'UPDATE_contract_top_line';
1229     l_api_version	CONSTANT NUMBER	:= 1.0;
1230     l_return_status	VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1231     l_overall_status 	VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1232     i			NUMBER;
1233     l_klev_tbl   	klev_tbl_type := p_klev_tbl;
1234     l_cimv_tbl   	cimv_tbl_type := p_cimv_tbl;
1235     l_cplv_tbl   	cplv_tbl_type := p_cplv_tbl;
1236   BEGIN
1237 /*
1238     -- call START_ACTIVITY to create savepoint, check compatibility
1239     -- and initialize message list
1240     l_return_status := OKC_API.START_ACTIVITY(
1241 			p_api_name      => l_api_name,
1242 			p_pkg_name      => g_pkg_name,
1243 			p_init_msg_list => p_init_msg_list,
1244 			l_api_version   => l_api_version,
1245 			p_api_version   => p_api_version,
1246 			p_api_type      => g_api_type,
1247 			x_return_status => x_return_status);
1248 
1249     -- check if activity started successfully
1250     If (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
1251        raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1252     Elsif (l_return_status = OKC_API.G_RET_STS_ERROR) then
1253        raise OKC_API.G_EXCEPTION_ERROR;
1254     End If;
1255 */
1256 
1257     If (p_clev_tbl.COUNT > 0) Then
1258 	   i := p_clev_tbl.FIRST;
1259 	   LOOP
1260 		-- call procedure in complex API for a record
1261 		update_contract_top_line(
1262 			p_api_version		=> p_api_version,
1263 			p_init_msg_list		=> p_init_msg_list,
1264 			x_return_status 	=> x_return_status,
1265 			x_msg_count     	=> x_msg_count,
1266 			x_msg_data      	=> x_msg_data,
1267 			p_clev_rec		=> p_clev_tbl(i),
1268       			p_klev_rec		=> l_klev_tbl(i),
1269       			p_cimv_rec		=> l_cimv_tbl(i),
1270       			p_cplv_rec		=> l_cplv_tbl(i),
1271 			x_clev_rec		=> x_clev_tbl(i),
1272       			x_klev_rec		=> x_klev_tbl(i),
1273       			x_cimv_rec		=> x_cimv_tbl(i),
1274       			x_cplv_rec		=> x_cplv_tbl(i));
1275 
1276 		    If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
1277 			  raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1278 		    Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
1279 			  raise OKC_API.G_EXCEPTION_ERROR;
1280 		    End If;
1281 
1282         EXIT WHEN (i = p_clev_tbl.LAST);
1283 		i := p_clev_tbl.NEXT(i);
1284 	   END LOOP;
1285 
1286     End If;
1287 
1288     If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
1289 	  raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1290     Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
1291 	  raise OKC_API.G_EXCEPTION_ERROR;
1292     End If;
1293 /*
1294     OKC_API.END_ACTIVITY(	x_msg_count	=> x_msg_count,
1295 				x_msg_data	=> x_msg_data);
1296 */
1297   EXCEPTION
1298     when OKC_API.G_EXCEPTION_ERROR then
1299       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
1300 			p_api_name  => l_api_name,
1301 			p_pkg_name  => g_pkg_name,
1302 			p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
1303 			x_msg_count => x_msg_count,
1304 			x_msg_data  => x_msg_data,
1305 			p_api_type  => g_api_type);
1306 
1307     when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
1308       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
1309 			p_api_name  => l_api_name,
1310 			p_pkg_name  => g_pkg_name,
1311 			p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
1312 			x_msg_count => x_msg_count,
1313 			x_msg_data  => x_msg_data,
1314 			p_api_type  => g_api_type);
1315 
1316     when OTHERS then
1317       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
1318 			p_api_name  => l_api_name,
1319 			p_pkg_name  => g_pkg_name,
1320 			p_exc_name  => 'OTHERS',
1321 			x_msg_count => x_msg_count,
1322 			x_msg_data  => x_msg_data,
1323 			p_api_type  => g_api_type);
1324 
1325   END update_contract_top_line;
1326 
1327 
1328     PROCEDURE delete_contract_line(
1329             p_api_version    IN  NUMBER,
1330             p_init_msg_list  IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
1331             x_return_status  OUT NOCOPY VARCHAR2,
1332             x_msg_count      OUT NOCOPY NUMBER,
1333             x_msg_data       OUT NOCOPY VARCHAR2,
1334             p_chr_id         IN  number,
1335             p_cle_id         IN  number) IS
1336 
1337     lp_clev_rec OKL_SERVICE_INTEGRATION_PUB.clev_rec_type;
1338     lp_klev_rec OKL_SERVICE_INTEGRATION_PUB.klev_rec_type;
1339 
1340     l_api_name		CONSTANT VARCHAR2(30)     := 'delete_contract_line';
1341     l_api_version	CONSTANT NUMBER	  	  := 1.0;
1342     l_return_status	VARCHAR2(1)		  := OKC_API.G_RET_STS_SUCCESS;
1343 
1344     l_chr_id number := null;
1345 
1346   BEGIN
1347 
1348   l_chr_id := p_chr_id;
1349   If okl_context.get_okc_org_id  is null then
1350 	okl_context.set_okc_org_context(p_chr_id => l_chr_id );
1351   End If;
1352 
1353     -- call START_ACTIVITY to create savepoint, check compatibility
1354     -- and initialize message list
1355     l_return_status := OKC_API.START_ACTIVITY(
1356 			p_api_name      => l_api_name,
1357 			p_pkg_name      => g_pkg_name,
1358 			p_init_msg_list => p_init_msg_list,
1359 			l_api_version   => l_api_version,
1360 			p_api_version   => p_api_version,
1361 			p_api_type      => g_api_type,
1362 			x_return_status => x_return_status);
1363 
1364     -- check if activity started successfully
1365     If (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
1366        raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1367     Elsif (l_return_status = OKC_API.G_RET_STS_ERROR) then
1368        raise OKC_API.G_EXCEPTION_ERROR;
1369     End If;
1370 
1371     lp_clev_rec.dnz_chr_id := l_chr_id;
1372     lp_clev_rec.id := p_cle_id;
1373     lp_klev_rec.id := p_cle_id;
1374 
1375     OKL_SERVICE_INTEGRATION_PUB.delete_service_line(
1376       				p_api_version   => p_api_version,
1377       				p_init_msg_list => p_init_msg_list,
1378       				x_return_status => x_return_status,
1379       				x_msg_count     => x_msg_count,
1380       				x_msg_data      => x_msg_data,
1381                                 p_clev_rec      => lp_clev_rec,
1382                                 p_klev_rec      => lp_klev_rec
1383                                );
1384 
1385      IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1386        raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1387      ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
1388        raise OKC_API.G_EXCEPTION_ERROR;
1389      END IF;
1390 
1391     OKC_API.END_ACTIVITY(x_msg_count	=> x_msg_count, x_msg_data	=> x_msg_data);
1392 
1393   EXCEPTION
1394     when OKC_API.G_EXCEPTION_ERROR then
1395       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
1396 			p_api_name  => l_api_name,
1397 			p_pkg_name  => g_pkg_name,
1398 			p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
1399 			x_msg_count => x_msg_count,
1400 			x_msg_data  => x_msg_data,
1401 			p_api_type  => g_api_type);
1402 
1403     when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
1404       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
1405 			p_api_name  => l_api_name,
1406 			p_pkg_name  => g_pkg_name,
1407 			p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
1408 			x_msg_count => x_msg_count,
1409 			x_msg_data  => x_msg_data,
1410 			p_api_type  => g_api_type);
1411 
1412     when OTHERS then
1413       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
1414 			p_api_name  => l_api_name,
1415 			p_pkg_name  => g_pkg_name,
1416 			p_exc_name  => 'OTHERS',
1417 			x_msg_count => x_msg_count,
1418 			x_msg_data  => x_msg_data,
1419 			p_api_type  => g_api_type);
1420   END delete_contract_line;
1421 
1422 
1423 PROCEDURE delete_contract_top_line(
1424     p_api_version                  IN NUMBER,
1425     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
1426     x_return_status                OUT NOCOPY VARCHAR2,
1427     x_msg_count                    OUT NOCOPY NUMBER,
1428     x_msg_data                     OUT NOCOPY VARCHAR2,
1429     p_clev_rec                     IN  clev_rec_type,
1430     p_klev_rec                     IN  klev_rec_type,
1431     p_cimv_rec                     IN  cimv_rec_type,
1432     p_cplv_rec                     IN  cplv_rec_type) IS
1433 
1434     l_clev_rec clev_rec_type := p_clev_rec;
1435     l_klev_rec klev_rec_type := p_klev_rec;
1436     l_cimv_rec cimv_rec_type := p_cimv_rec;
1437     l_cplv_rec cplv_rec_type := p_cplv_rec;
1438 
1439     l_api_name		CONSTANT VARCHAR2(30)     := 'DELETE_contract_top_line';
1440     l_api_version	CONSTANT NUMBER	  	  := 1.0;
1441     l_return_status	VARCHAR2(1)		  := OKC_API.G_RET_STS_SUCCESS;
1442 
1443     --Bug# 4558486
1444     l_kplv_rec okl_k_party_roles_pvt.kplv_rec_type;
1445 
1446   BEGIN
1447 
1448     -- call START_ACTIVITY to create savepoint, check compatibility
1449     -- and initialize message list
1450     l_return_status := OKC_API.START_ACTIVITY(
1451 			p_api_name      => l_api_name,
1452 			p_pkg_name      => g_pkg_name,
1453 			p_init_msg_list => p_init_msg_list,
1454 			l_api_version   => l_api_version,
1455 			p_api_version   => p_api_version,
1456 			p_api_type      => g_api_type,
1457 			x_return_status => x_return_status);
1458 
1459     -- check if activity started successfully
1460     If (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
1461        raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1462     Elsif (l_return_status = OKC_API.G_RET_STS_ERROR) then
1463        raise OKC_API.G_EXCEPTION_ERROR;
1464     End If;
1465 
1466     okl_contract_pvt.delete_contract_line(
1467       p_api_version   => p_api_version,
1468       p_init_msg_list => p_init_msg_list,
1469       x_return_status => x_return_status,
1470       x_msg_count     => x_msg_count,
1471       x_msg_data      => x_msg_data,
1472       p_clev_rec      => l_clev_rec,
1473       p_klev_rec      => l_klev_rec
1474       );
1475 
1476      IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
1477        raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1478      ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) THEN
1479        raise OKC_API.G_EXCEPTION_ERROR;
1480      END IF;
1481 
1482     --
1483     -- call procedure in complex API
1484     --
1485     okl_okc_migration_pvt.delete_contract_item(
1486 	 p_api_version		=> p_api_version,
1487 	 p_init_msg_list	=> p_init_msg_list,
1488 	 x_return_status 	=> x_return_status,
1489 	 x_msg_count     	=> x_msg_count,
1490 	 x_msg_data      	=> x_msg_data,
1491 	 p_cimv_rec		=> l_cimv_rec);
1492 
1493     -- check return status
1494     If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
1495 	  raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1496     Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
1497 	  raise OKC_API.G_EXCEPTION_ERROR;
1498     End If;
1499 
1500    --Bug# 4558486: Changed call to okl_k_party_roles_pvt api
1501    --              to delete records in tables
1502    --              okc_k_party_roles_b and okl_k_party_roles
1503    /*
1504    okl_okc_migration_pvt.delete_k_party_role(
1505 	 p_api_version		=> p_api_version,
1506 	 p_init_msg_list	=> p_init_msg_list,
1507 	 x_return_status 	=> x_return_status,
1508 	 x_msg_count     	=> x_msg_count,
1509 	 x_msg_data      	=> x_msg_data,
1510 	 p_cplv_rec		=> l_cplv_rec);
1511    */
1512 
1513    l_kplv_rec.id := p_cplv_rec.id;
1514    okl_k_party_roles_pvt.delete_k_party_role(
1515 	 p_api_version		=> p_api_version,
1516 	 p_init_msg_list	=> p_init_msg_list,
1517 	 x_return_status 	=> x_return_status,
1518 	 x_msg_count     	=> x_msg_count,
1519 	 x_msg_data      	=> x_msg_data,
1520 	 p_cplv_rec		=> l_cplv_rec,
1521        p_kplv_rec		=> l_kplv_rec);
1522 
1523     -- check return status
1524     If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
1525 	  raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1526     Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
1527 	  raise OKC_API.G_EXCEPTION_ERROR;
1528     End If;
1529 
1530     OKC_API.END_ACTIVITY(x_msg_count	=> x_msg_count,
1531 			x_msg_data	=> x_msg_data);
1532   EXCEPTION
1533     when OKC_API.G_EXCEPTION_ERROR then
1534       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
1535 			p_api_name  => l_api_name,
1536 			p_pkg_name  => g_pkg_name,
1537 			p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
1538 			x_msg_count => x_msg_count,
1539 			x_msg_data  => x_msg_data,
1540 			p_api_type  => g_api_type);
1541 
1542     when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
1543       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
1544 			p_api_name  => l_api_name,
1545 			p_pkg_name  => g_pkg_name,
1546 			p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
1547 			x_msg_count => x_msg_count,
1548 			x_msg_data  => x_msg_data,
1549 			p_api_type  => g_api_type);
1550 
1551     when OTHERS then
1552       x_return_status := OKC_API.HANDLE_EXCEPTIONS(
1553 			p_api_name  => l_api_name,
1554 			p_pkg_name  => g_pkg_name,
1555 			p_exc_name  => 'OTHERS',
1556 			x_msg_count => x_msg_count,
1557 			x_msg_data  => x_msg_data,
1558 			p_api_type  => g_api_type);
1559   END delete_contract_top_line;
1560 
1561   -- Start of comments
1562   --
1563   -- Procedure Name  : delete_contract_top_line
1564   -- Description     : deletes contract line for shadowed contract
1565   -- Business Rules  : line can be deleted only if there is no sublines attached
1566   -- Parameters      :
1567   -- Version         : 1.0
1568   -- End of comments
1569     PROCEDURE delete_contract_top_line(
1570       p_api_version                  IN NUMBER,
1571       p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
1572       x_return_status                OUT NOCOPY VARCHAR2,
1573       x_msg_count                    OUT NOCOPY NUMBER,
1574       x_msg_data                     OUT NOCOPY VARCHAR2,
1575       p_clev_tbl                     IN  clev_tbl_type,
1576       p_klev_tbl                     IN  klev_tbl_type,
1577       p_cimv_tbl                     IN  cimv_tbl_type,
1578       p_cplv_tbl                     IN  cplv_tbl_type
1579       ) IS
1580 
1581       l_api_name		CONSTANT VARCHAR2(30) := 'DELETE_contract_top_line';
1582       l_api_version		CONSTANT NUMBER	:= 1.0;
1583       l_return_status		VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1584       l_overall_status 		VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1585       i				NUMBER;
1586       l_klev_tbl   		klev_tbl_type := p_klev_tbl;
1587       l_cimv_tbl   		cimv_tbl_type := p_cimv_tbl;
1588       l_cplv_tbl   		cplv_tbl_type := p_cplv_tbl;
1589     BEGIN
1590   /*
1591       -- call START_ACTIVITY to create savepoint, check compatibility
1592       -- and initialize message list
1593       l_return_status := OKC_API.START_ACTIVITY(
1594   			p_api_name      => l_api_name,
1595   			p_pkg_name      => g_pkg_name,
1596   			p_init_msg_list => p_init_msg_list,
1597   			l_api_version   => l_api_version,
1598   			p_api_version   => p_api_version,
1599   			p_api_type      => g_api_type,
1600   			x_return_status => x_return_status);
1601 
1602       -- check if activity started successfully
1603       If (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
1604          raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1605       Elsif (l_return_status = OKC_API.G_RET_STS_ERROR) then
1606          raise OKC_API.G_EXCEPTION_ERROR;
1607       End If;
1608   */
1609       If (p_clev_tbl.COUNT > 0) Then
1610   	   i := p_clev_tbl.FIRST;
1611   	   LOOP
1612   		-- call procedure in complex API for a record
1613   		delete_contract_top_line(
1614   			p_api_version		=> p_api_version,
1615   			p_init_msg_list		=> p_init_msg_list,
1616   			x_return_status 	=> x_return_status,
1617   			x_msg_count     	=> x_msg_count,
1618   			x_msg_data      	=> x_msg_data,
1619   			p_clev_rec		=> p_clev_tbl(i),
1620         		p_klev_rec		=> l_klev_tbl(i),
1621         		p_cimv_rec		=> l_cimv_tbl(i),
1622         		p_cplv_rec		=> l_cplv_tbl(i)
1623         		);
1624 
1625       If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
1626   	  raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1627       Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
1628   	  raise OKC_API.G_EXCEPTION_ERROR;
1629       End If;
1630 
1631           EXIT WHEN (i = p_clev_tbl.LAST);
1632   		i := p_clev_tbl.NEXT(i);
1633   	   END LOOP;
1634 
1635       End If;
1636 
1637       If x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR Then
1638   	  raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1639       Elsif x_return_status = OKC_API.G_RET_STS_ERROR Then
1640   	  raise OKC_API.G_EXCEPTION_ERROR;
1641       End If;
1642   /*
1643       OKC_API.END_ACTIVITY(	x_msg_count	=> x_msg_count,
1644   				x_msg_data	=> x_msg_data);
1645   */
1646     EXCEPTION
1647       when OKC_API.G_EXCEPTION_ERROR then
1648         x_return_status := OKC_API.HANDLE_EXCEPTIONS(
1649   			p_api_name  => l_api_name,
1650   			p_pkg_name  => g_pkg_name,
1651   			p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
1652   			x_msg_count => x_msg_count,
1653   			x_msg_data  => x_msg_data,
1654   			p_api_type  => g_api_type);
1655 
1656       when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
1657         x_return_status := OKC_API.HANDLE_EXCEPTIONS(
1658   			p_api_name  => l_api_name,
1659   			p_pkg_name  => g_pkg_name,
1660   			p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
1661   			x_msg_count => x_msg_count,
1662   			x_msg_data  => x_msg_data,
1663   			p_api_type  => g_api_type);
1664 
1665       when OTHERS then
1666         x_return_status := OKC_API.HANDLE_EXCEPTIONS(
1667   			p_api_name  => l_api_name,
1668   			p_pkg_name  => g_pkg_name,
1669   			p_exc_name  => 'OTHERS',
1670   			x_msg_count => x_msg_count,
1671   			x_msg_data  => x_msg_data,
1672   			p_api_type  => g_api_type);
1673 
1674     END delete_contract_top_line;
1675   -- Start of comments
1676   --
1677   -- Procedure Name  : validate_fee_expense_rule
1678   -- Description     : validates expense rules at FEE line
1679   -- Business Rules  :
1680   -- Parameters      :
1681   -- Version         : 1.0
1682   -- End of comments
1683 
1684   PROCEDURE validate_fee_expense_rule(
1685                                       p_api_version         IN  NUMBER,
1686                                       p_init_msg_list       IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
1687                                       x_return_status       OUT NOCOPY VARCHAR2,
1688                                       x_msg_count           OUT NOCOPY NUMBER,
1689                                       x_msg_data            OUT NOCOPY VARCHAR2,
1690                                       p_chr_id              IN  OKC_K_HEADERS_V.ID%TYPE,
1691                                       p_line_id             IN  OKC_K_LINES_V.ID%TYPE,
1692                                       p_no_of_period        IN  NUMBER,
1693                                       p_frequency           IN  VARCHAR2,
1694                                       p_amount_per_period   IN  NUMBER
1695                                      ) IS
1696 
1697   l_api_name    VARCHAR2(35)    := 'validate_fee_expense_rule';
1698   l_proc_name   VARCHAR2(35)    := 'VALIDATE_FEE_EXPENSE_RULE';
1699   l_api_version NUMBER          := 1.0;
1700 
1701   l_id1  VARCHAR2(30);
1702   scscode OKC_K_HEADERS_B.SCS_CODE%TYPE ;
1703 
1704   CURSOR contract_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE,
1705                        p_line_id OKC_K_LINES_V.ID%TYPE) IS
1706   SELECT line.start_date,
1707          line.end_date,
1708          line.amount,
1709          line.capital_amount,
1710          style.lty_code,
1711          line.initial_direct_cost,
1712          line.fee_type
1713   FROM   okc_k_headers_b head,
1714          okl_k_lines_full_v line,
1715          okc_line_styles_b style
1716   WHERE  head.id     = line.dnz_chr_id
1717   AND    line.lse_id = style.id
1718   AND    head.id     = p_chr_id
1719   AND    line.id     = p_line_id;
1720   CURSOR scscode_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE ) IS
1721   SELECT head.scs_code
1722   FROM   okc_k_headers_b head
1723   WHERE  head.id     = p_chr_id ;
1724 
1725   CURSOR strm_cap_csr (p_chr_id  OKC_K_HEADERS_B.ID%TYPE,
1726                        p_line_id OKC_K_LINES_B.ID%TYPE) IS
1727   SELECT stream.capitalize_yn
1728   FROM   okl_k_lines_full_v line,
1729          okc_k_items_v      item,
1730          okl_strmtyp_source_v stream
1731   WHERE  line.id              = p_line_id
1732   AND    line.dnz_chr_id      = p_chr_id
1733   AND    line.id              = item.cle_id
1734   AND    item.object1_id1     = stream.id1;
1735 
1736   CURSOR freq_csr (p_frequency VARCHAR2) IS
1737   SELECT id1
1738   FROM   okl_time_units_v
1739   WHERE  name = p_frequency
1740   AND    status = 'A'
1741   AND    TRUNC(SYSDATE) BETWEEN NVL(TRUNC(start_date_active), TRUNC(SYSDATE)) AND
1742                                 NVL(TRUNC(end_date_active), TRUNC(SYSDATE));
1743 
1744   l_start_date        OKC_K_lineS_B.START_DATE%TYPE;
1745   l_end_date          OKC_K_lineS_B.END_DATE%TYPE;
1746   l_amount            NUMBER;
1747   l_capital_amount    NUMBER;
1748   l_line_type         OKC_LINE_STYLES_B.LTY_CODE%TYPE;
1749   l_fee_type          OKL_K_LINES.FEE_TYPE%TYPE := null;
1750   l_cap_yn            VARCHAR2(3);
1751   l_mult_factor       NUMBER;
1752   l_line_amount       NUMBER;
1753   l_initial_direct_cost okl_k_lines.initial_direct_cost%type := null;
1754   l_ak_prompt  AK_ATTRIBUTES_VL.attribute_label_long%type;
1755 
1756   l_clev_rec clev_rec_type ;
1757   l_klev_rec klev_rec_type ;
1758   x_clev_rec clev_rec_type ;
1759   x_klev_rec klev_rec_type ;
1760 
1761   BEGIN
1762 
1763      x_return_status := OKL_API.G_RET_STS_SUCCESS;
1764 
1765      -- call START_ACTIVITY to create savepoint, check compatibility
1766      -- and initialize message list
1767      x_return_status := OKL_API.START_ACTIVITY(
1768                                                p_api_name      => l_api_name,
1769                                                p_pkg_name      => G_PKG_NAME,
1770                                                p_init_msg_list => p_init_msg_list,
1771                                                l_api_version   => l_api_version,
1772                                                p_api_version   => p_api_version,
1773                                                p_api_type      => G_API_TYPE,
1774                                                x_return_status => x_return_status);
1775 
1776      -- check if activity started successfully
1777      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
1778        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1779      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
1780        raise OKL_API.G_EXCEPTION_ERROR;
1781      END IF;
1782 
1783     If(p_chr_id is null or p_chr_id = OKL_API.G_MISS_NUM) Then
1784        x_return_status := OKL_API.g_ret_sts_error;
1785        OKL_API.SET_MESSAGE(      p_app_name => g_app_name
1786     				, p_msg_name => 'OKL_INVALID_VALUE'
1787     				, p_token1 => 'COL_NAME'
1788     				, p_token1_value => 'CHR_ID'
1789     			   );
1790        raise OKL_API.G_EXCEPTION_ERROR;
1791     End If;
1792 
1793 
1794     If(p_line_id is null or p_line_id = OKL_API.G_MISS_NUM) Then
1795        x_return_status := OKL_API.g_ret_sts_error;
1796        OKL_API.SET_MESSAGE(      p_app_name => g_app_name
1797     				, p_msg_name => 'OKL_INVALID_VALUE'
1798     				, p_token1 => 'COL_NAME'
1799     				, p_token1_value => 'CLE_ID'
1800     			   );
1801        raise OKL_API.G_EXCEPTION_ERROR;
1802     End If;
1803 
1804     OPEN contract_csr (p_chr_id,
1805                         p_line_id);
1806      FETCH contract_csr INTO l_start_date,
1807                              l_end_date,
1808                              l_amount,
1809                              l_capital_amount,
1810                              l_line_type,
1811                              l_initial_direct_cost,
1812                              l_fee_type;
1813      CLOSE contract_csr;
1814          OPEN scscode_csr (p_chr_id);
1815      FETCH scscode_csr INTO scscode;
1816      CLOSE scscode_csr ;
1817      if(scscode='INVESTOR' and p_amount_per_period < 0) then
1818 
1819        x_return_status := OKL_API.g_ret_sts_error;
1820        OKL_API.SET_MESSAGE(      p_app_name => g_app_name
1821     				, p_msg_name => 'OKL_PRDAMNT_CHCK'
1822     			   );
1823     raise OKL_API.G_EXCEPTION_ERROR;
1824     End If;
1825 
1826    IF (l_line_type = 'FEE') THEN
1827 
1828     If(p_no_of_period is null or p_no_of_period = OKL_API.G_MISS_NUM) Then
1829        l_ak_prompt := GET_AK_PROMPT('OKL_LA_SERVICE_LINE', 'OKL_NO_OF_PERIOD');
1830        x_return_status := OKL_API.g_ret_sts_error;
1831        OKL_API.SET_MESSAGE(      p_app_name => g_app_name
1832     				, p_msg_name => 'OKL_REQUIRED_VALUE'
1833     				, p_token1 => 'COL_NAME'
1834     				, p_token1_value => l_ak_prompt
1835     			   );
1836        raise OKL_API.G_EXCEPTION_ERROR;
1837     End If;
1838 
1839     If(p_amount_per_period is null or p_amount_per_period = OKL_API.G_MISS_NUM) Then
1840        l_ak_prompt := GET_AK_PROMPT('OKL_LA_SERVICE_LINE', 'OKL_AMT_PER_PERIOD');
1841        x_return_status := OKL_API.g_ret_sts_error;
1842        OKL_API.SET_MESSAGE(      p_app_name => g_app_name
1843     				, p_msg_name => 'OKL_REQUIRED_VALUE'
1844     				, p_token1 => 'COL_NAME'
1845     				, p_token1_value => l_ak_prompt
1846     			   );
1847        raise OKL_API.G_EXCEPTION_ERROR;
1848     End If;
1849 
1850     If(p_frequency is null or p_frequency = OKL_API.G_MISS_CHAR) Then
1851        l_ak_prompt := GET_AK_PROMPT('OKL_LA_SERVICE_LINE', 'OKL_FREEQUENCY');
1852        x_return_status := OKL_API.g_ret_sts_error;
1853        OKL_API.SET_MESSAGE(      p_app_name => g_app_name
1854     				, p_msg_name => 'OKL_REQUIRED_VALUE'
1855     				, p_token1 => 'COL_NAME'
1856     				, p_token1_value => l_ak_prompt
1857     			   );
1858        raise OKL_API.G_EXCEPTION_ERROR;
1859     End If;
1860 
1861    End If;
1862 
1863      -- Fee Expense rules are only valid for FEE and SERVICE line type
1864      IF (l_line_type IN ('FEE', 'SOLD_SERVICE')) THEN
1865 
1866         --Bug# 4959361
1867         OKL_LLA_UTIL_PVT.check_line_update_allowed
1868           (p_api_version     => p_api_version,
1869            p_init_msg_list   => p_init_msg_list,
1870            x_return_status   => x_return_status,
1871            x_msg_count       => x_msg_count,
1872            x_msg_data        => x_msg_data,
1873            p_cle_id          => p_line_id);
1874 
1875         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1876           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1877         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1878           RAISE OKL_API.G_EXCEPTION_ERROR;
1879         END IF;
1880         --Bug# 4959361
1881 
1882         l_id1 := '?';
1883         IF (p_frequency IS NOT NULL) THEN
1884 
1885            OPEN freq_csr (p_frequency);
1886            FETCH freq_csr INTO l_id1;
1887            CLOSE freq_csr;
1888 
1889            IF (l_id1 = '?') THEN
1890               okl_api.set_message(
1891                                   G_APP_NAME,
1892                                   G_INVALID_VALUE,
1893                                   'COL_NAME',
1894                                   'FREQUENCY'
1895                                  );
1896 
1897               x_return_status := OKL_API.G_RET_STS_ERROR;
1898            END IF;
1899 
1900            IF (p_no_of_period IS NULL) THEN
1901               okl_api.set_message(
1902                                   G_APP_NAME,
1903                                   G_INCOMPLETE_RULE,
1904                                   'COL_NAME',
1905                                   'NO_OF_PERIOD'
1906                                  );
1907 
1908               x_return_status := OKL_API.G_RET_STS_ERROR;
1909            ELSE
1910               IF (p_amount_per_period IS NULL) THEN
1911                  okl_api.set_message(
1912                                      G_APP_NAME,
1913                                      G_INCOMPLETE_RULE,
1914                                      'COL_NAME',
1915                                      'AMOUNT_PER_PERIOD'
1916                                     );
1917 
1918                  x_return_status := OKL_API.G_RET_STS_ERROR;
1919               END IF;
1920            END IF;
1921         ELSE
1922               okl_api.set_message(
1923                                   G_APP_NAME,
1924                                   G_INCOMPLETE_RULE,
1925                                   'COL_NAME',
1926                                   'FREQUENCY'
1927                                  );
1928 
1929               x_return_status := OKL_API.G_RET_STS_ERROR;
1930         END IF;
1931 
1932      ELSIF (p_no_of_period IS NOT NULL
1933             OR
1934             p_frequency IS NOT NULL
1935             OR
1936             p_amount_per_period IS NOT NULL
1937            ) THEN
1938            okl_api.set_message(
1939                                G_APP_NAME,
1940                                G_INVALID_LINE_RULE,
1941                                'VALUE',
1942                                'FEE_NO_OF_PERIOD, FREQUENCY OR AMOUNT_PER_PERIOD',
1943                                'LINE_TYPE',
1944                                l_line_type,
1945                                'ACT_LINE_TYPE',
1946                                'FEE or SERVICE'
1947                               );
1948 
1949            x_return_status := OKL_API.G_RET_STS_ERROR;
1950 
1951      END IF;
1952 
1953      -- cross validation
1954 
1955      IF (x_return_status = OKL_API.G_RET_STS_SUCCESS) THEN
1956 
1957         OPEN strm_cap_csr (p_chr_id,
1958                            p_line_id);
1959         FETCH strm_cap_csr INTO l_cap_yn;
1960         CLOSE strm_cap_csr;
1961 
1962         IF (l_cap_yn = 'Y') THEN
1963             l_line_amount := l_capital_amount;
1964         ELSE
1965             l_line_amount := l_amount;
1966         END IF;
1967 
1968         IF (l_id1 = 'M') THEN
1969            l_mult_factor := 1;
1970         ELSIF (l_id1 = 'Q') THEN
1971            l_mult_factor := 3;
1972         ELSIF (l_id1 = 'S') THEN
1973            l_mult_factor := 6;
1974         ELSIF (l_id1 = 'A') THEN
1975            l_mult_factor := 12;
1976         ELSE
1977            okl_api.set_message(
1978                                G_APP_NAME,
1979                                G_UOM_SETUP_ERROR,
1980                                'COL_VALUE',
1981                                l_id1
1982                               );
1983            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1984         END IF;
1985 
1986         IF (l_end_date < (ADD_MONTHS(l_start_date, p_no_of_period * l_mult_factor)-1)) THEN
1987            okl_api.set_message(
1988                                G_APP_NAME,
1989                                G_INVALID_PERIOD,
1990                                'START_DATE',
1991                                l_start_date,
1992                                'END_DATE',
1993                                l_end_date
1994                               );
1995            RAISE OKL_API.G_EXCEPTION_ERROR;
1996         END IF;
1997 
1998     If(l_fee_type is not null and (l_fee_type = G_FT_ABSORBED or l_fee_type = G_FT_FINANCED) and p_no_of_period <> 1) Then
1999            okl_api.set_message(
2000                                G_APP_NAME,
2001                                G_INVALID_NO_OF_PAYMENTS
2002                               );
2003            RAISE OKL_API.G_EXCEPTION_ERROR;
2004     End If;
2005 
2006 -- this validation is commented for summing recurring exp amt to service/fee line
2007       /*
2008         IF (l_line_amount <> (p_amount_per_period * p_no_of_period)) THEN
2009            okl_api.set_message(
2010                                G_APP_NAME,
2011                                G_INVALID_EXP_AMOUNT
2012                               );
2013            RAISE OKL_API.G_EXCEPTION_ERROR;
2014         END IF;
2015       */
2016 -- update line amount with recurring exp amount
2017 
2018        IF (l_line_type IN ('FEE', 'SOLD_SERVICE')) THEN
2019 
2020             l_clev_rec.id := p_line_id;
2021             l_klev_rec.id := p_line_id;
2022             l_clev_rec.dnz_chr_id := p_chr_id;
2023             l_clev_rec.chr_id := p_chr_id;
2024 
2025             l_line_amount := p_amount_per_period * p_no_of_period;
2026             l_klev_rec.amount := l_line_amount;
2027             IF (l_cap_yn = 'Y') THEN
2028              l_klev_rec.capital_amount := l_line_amount;
2029             END IF;
2030 
2031             IF (l_line_type = 'FEE' and l_initial_direct_cost is not null and l_initial_direct_cost > l_klev_rec.amount) THEN
2032                   x_return_status := OKL_API.g_ret_sts_error;
2033 	          OKL_API.SET_MESSAGE(    p_app_name => g_app_name
2034 	      				, p_msg_name => 'OKL_LLA_IDC_FEE'
2035 	      			   );
2036 	          raise OKL_API.G_EXCEPTION_ERROR;
2037 	    END IF;
2038 
2039 	    okl_contract_pvt.update_contract_line(
2040 	      p_api_version   => p_api_version,
2041 	      p_init_msg_list => p_init_msg_list,
2042 	      x_return_status => x_return_status,
2043 	      x_msg_count     => x_msg_count,
2044 	      x_msg_data      => x_msg_data,
2045 	      p_clev_rec      => l_clev_rec,
2046 	      p_klev_rec      => l_klev_rec,
2047 	      x_clev_rec      => x_clev_rec,
2048 	      x_klev_rec      => x_klev_rec
2049 	      );
2050 
2051 	     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2052 	       raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2053 	     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2054 	       raise OKL_API.G_EXCEPTION_ERROR;
2055 	     END IF;
2056 
2057        END IF;
2058 
2059      END IF;
2060 
2061      x_return_status := OKL_API.G_RET_STS_SUCCESS;
2062 
2063 
2064      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
2065                           x_msg_data    => x_msg_data);
2066 
2067   EXCEPTION
2068 
2069       when OKL_API.G_EXCEPTION_ERROR then
2070          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2071                         p_api_name  => l_api_name,
2072                         p_pkg_name  => G_PKG_NAME,
2073                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
2074                         x_msg_count => x_msg_count,
2075                         x_msg_data  => x_msg_data,
2076                         p_api_type  => G_API_TYPE);
2077 
2078       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
2079          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2080                         p_api_name  => l_api_name,
2081                         p_pkg_name  => G_PKG_NAME,
2082                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
2083                         x_msg_count => x_msg_count,
2084                         x_msg_data  => x_msg_data,
2085                         p_api_type  => G_API_TYPE);
2086 
2087       when OTHERS then
2088          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2089                         p_api_name  => l_api_name,
2090                         p_pkg_name  => G_PKG_NAME,
2091                         p_exc_name  => 'OTHERS',
2092                         x_msg_count => x_msg_count,
2093                         x_msg_data  => x_msg_data,
2094                         p_api_type  => G_API_TYPE);
2095 
2096   END validate_fee_expense_rule;
2097 
2098 
2099   -- Start of comments
2100   --
2101   -- Procedure Name  : validate_passthru_rule
2102   -- Description     : validates Passthru rules at SERVICE and FEE line
2103   -- Business Rules  :
2104   -- Parameters      :
2105   -- Version         : 1.0
2106   -- End of comments
2107  PROCEDURE validate_passthru_rule(
2108                                   p_api_version         IN  NUMBER,
2109                                   p_init_msg_list       IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
2110                                   x_return_status       OUT NOCOPY VARCHAR2,
2111                                   x_msg_count           OUT NOCOPY NUMBER,
2112                                   x_msg_data            OUT NOCOPY VARCHAR2,
2113                                   p_line_id             IN  OKC_K_LINES_V.ID%TYPE,
2114                                   p_vendor_id           IN  NUMBER,
2115                                   p_payment_term        IN  VARCHAR2,
2116                                   p_payment_term_id     IN  NUMBER,
2117                                   p_pay_to_site         IN  VARCHAR2,
2118                                   p_pay_to_site_id      IN  NUMBER,
2119                                   p_payment_method_code IN  VARCHAR2,
2120                                   x_payment_term_id1    OUT NOCOPY VARCHAR2,
2121                                   x_pay_site_id1        OUT NOCOPY VARCHAR2,
2122                                   x_payment_method_id1  OUT NOCOPY VARCHAR2
2123                                  ) IS
2124 
2125   G_PKG_NAME    CONSTANT VARCHAR2(200) := 'OKL_CONTRACT_TOP_LINE_PVT';
2126   G_APP_NAME    CONSTANT VARCHAR2(3)   :=  OKL_API.G_APP_NAME;
2127   G_API_TYPE    CONSTANT VARCHAR2(4)   := '_PVT';
2128 
2129   G_INVALID_VALUE     CONSTANT VARCHAR2(200) := 'OKL_INVALID_VALUE';
2130   G_INVALID_LINE_RULE CONSTANT VARCHAR2(200) := 'OKL_LLA_INVALID_LINE_RULE';
2131 
2132 
2133   l_api_name    VARCHAR2(35)    := 'validate_passthru_rule';
2134   l_proc_name   VARCHAR2(35)    := 'VALIDATE_PASSTHRU_RULE';
2135   l_api_version NUMBER          := 1.0;
2136 
2137   CURSOR line_style_csr (p_line_id OKC_K_LINES_V.ID%TYPE) IS
2138   SELECT style.lty_code
2139   FROM   okc_k_lines_b line,
2140          okc_line_styles_b style
2141   WHERE  line.lse_id = style.id
2142   AND    line.id     = p_line_id;
2143 
2144   CURSOR pay_term_csr (p_id   NUMBER,
2145                        p_name VARCHAR2) IS
2146   SELECT id1
2147   FROM   okx_payables_terms_v
2148   WHERE  (name   = p_name
2149           AND
2150           p_name IS NOT NULL)
2151   OR     (id1 = p_id
2152           AND
2153           p_id IS NOT NULL)
2154   AND    status = 'A'
2155   AND    TRUNC(SYSDATE) BETWEEN NVL(TRUNC(start_date_active), TRUNC(SYSDATE)) AND
2156                                 NVL(TRUNC(end_date_active), TRUNC(SYSDATE));
2157 
2158   CURSOR pay_site_csr (p_id        NUMBER,
2159                        p_name      VARCHAR2,
2160                        p_vendor_id NUMBER) IS
2161 
2162   SELECT id1
2163   FROM   okx_vendor_sites_v
2164   WHERE  (name   = p_name
2165           AND
2166           p_name IS NOT NULL)
2167   OR     (id1 = p_id
2168           AND
2169           p_id IS NOT NULL)
2170   AND    status         = 'A'
2171   AND    vendor_id      = p_vendor_id
2172   AND    TRUNC(SYSDATE) >= NVL(TRUNC(start_date_active), TRUNC(SYSDATE));
2173 
2174   CURSOR pay_method_csr (p_code VARCHAR2) IS
2175   SELECT lookup_code
2176   FROM   fnd_lookup_values
2177   WHERE  lookup_type           = 'PAYMENT METHOD'
2178   AND    nvl(enabled_flag,'N') = 'Y'
2179   AND    lookup_code           = p_code
2180   AND    trunc(nvl(start_date_active,sysdate)) <= trunc(sysdate)
2181   AND    trunc(nvl(end_date_active,sysdate+1)) > trunc(sysdate);
2182 
2183   l_id1       VARCHAR2(30);
2184   l_line_type OKC_LINE_STYLES_B.LTY_CODE%TYPE;
2185 
2186   BEGIN
2187 
2188      x_return_status := OKL_API.G_RET_STS_SUCCESS;
2189 
2190      -- call START_ACTIVITY to create savepoint, check compatibility
2191      -- and initialize message list
2192      x_return_status := OKL_API.START_ACTIVITY(
2193                                                p_api_name      => l_api_name,
2194                                                p_pkg_name      => G_PKG_NAME,
2195                                                p_init_msg_list => p_init_msg_list,
2196                                                l_api_version   => l_api_version,
2197                                                p_api_version   => p_api_version,
2198                                                p_api_type      => G_API_TYPE,
2199                                                x_return_status => x_return_status);
2200 
2201      -- check if activity started successfully
2202      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
2203        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2204      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
2205        raise OKL_API.G_EXCEPTION_ERROR;
2206      END IF;
2207 
2208 
2209      OPEN line_style_csr (p_line_id);
2210      FETCH line_style_csr INTO l_line_type;
2211      CLOSE line_style_csr;
2212 
2213 
2214      -- Passthru rules are only for SERVICE and FEE line
2215      IF (l_line_type IN ('SOLD_SERVICE', 'FEE')) THEN
2216 
2217         l_id1 := '?';
2218         IF (p_payment_term IS NOT NULL) THEN
2219 
2220            OPEN pay_term_csr (p_payment_term_id,
2221                               p_payment_term);
2222            FETCH pay_term_csr INTO l_id1;
2223            CLOSE pay_term_csr;
2224 
2225            IF (l_id1 = '?') THEN
2226               okl_api.set_message(
2227                                   G_APP_NAME,
2228                                   G_INVALID_VALUE,
2229                                   'COL_NAME',
2230                                   'PAYMENT_TERM'
2231                                  );
2232 
2233               x_return_status := OKL_API.G_RET_STS_ERROR;
2234            ELSE
2235               x_payment_term_id1 := l_id1;
2236            END IF;
2237 
2238         END IF;
2239 
2240         l_id1 := '?';
2241         IF (p_pay_to_site IS NOT NULL
2242             OR
2243             p_pay_to_site_id IS NOT NULL) THEN
2244 
2245            OPEN pay_site_csr (p_pay_to_site_id,
2246                               p_pay_to_site,
2247                               p_vendor_id);
2248            FETCH pay_site_csr INTO l_id1;
2249            CLOSE pay_site_csr;
2250 
2251            IF (l_id1 = '?') THEN
2252               okl_api.set_message(
2253                                   G_APP_NAME,
2254                                   G_INVALID_VALUE,
2255                                   'COL_NAME',
2256                                   'PAY_TO_SITE'
2257                                  );
2258 
2259               x_return_status := OKL_API.G_RET_STS_ERROR;
2260            ELSE
2261               x_pay_site_id1 := l_id1;
2262            END IF;
2263 
2264         END IF;
2265 
2266         l_id1 := '?';
2267         IF (p_payment_method_code IS NOT NULL) THEN
2268 
2269            OPEN pay_method_csr (p_payment_method_code);
2270            FETCH pay_method_csr INTO l_id1;
2271            CLOSE pay_method_csr;
2272 
2273            IF (l_id1 = '?') THEN
2274               okl_api.set_message(
2275                                   G_APP_NAME,
2276                                   G_INVALID_VALUE,
2277                                   'COL_NAME',
2278                                   'PAYMENT_METHOD_CODE'
2279                                  );
2280 
2281               x_return_status := OKL_API.G_RET_STS_ERROR;
2282            ELSE
2283               x_payment_method_id1 := l_id1;
2284            END IF;
2285         END IF;
2286 
2287      ELSIF (p_payment_term IS NOT NULL
2288             OR
2289             p_payment_term_id IS NOT NULL
2290             OR
2291             p_pay_to_site IS NOT NULL
2292             OR
2293             p_pay_to_site_id IS NOT NULL
2294             OR
2295             p_payment_method_code IS NOT NULL
2296            ) THEN
2297            okl_api.set_message(
2298                                G_APP_NAME,
2299                                G_INVALID_LINE_RULE,
2300                                'VALUE',
2301                                'PAYMENT_TERM, PAY_TO_SITE, PAYMENT_METHOD',
2302                                'LINE_TYPE',
2303                                l_line_type,
2304                                'ACT_LINE_TYPE',
2305                                'SERVICE or FEE'
2306                               );
2307 
2308            x_return_status := OKL_API.G_RET_STS_ERROR;
2309 
2310      END IF;
2311 
2312      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
2313                           x_msg_data    => x_msg_data);
2314 
2315 
2316      RETURN;
2317 
2318   EXCEPTION
2319       when OKL_API.G_EXCEPTION_ERROR then
2320          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2321                         p_api_name  => l_api_name,
2322                         p_pkg_name  => G_PKG_NAME,
2323                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
2324                         x_msg_count => x_msg_count,
2325                         x_msg_data  => x_msg_data,
2326                         p_api_type  => G_API_TYPE);
2327 
2328       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
2329          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2330                         p_api_name  => l_api_name,
2331                         p_pkg_name  => G_PKG_NAME,
2332                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
2333                         x_msg_count => x_msg_count,
2334                         x_msg_data  => x_msg_data,
2335                         p_api_type  => G_API_TYPE);
2336 
2337       when OTHERS then
2338          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2339                         p_api_name  => l_api_name,
2340                         p_pkg_name  => G_PKG_NAME,
2341                         p_exc_name  => 'OTHERS',
2342                         x_msg_count => x_msg_count,
2343                         x_msg_data  => x_msg_data,
2344                         p_api_type  => G_API_TYPE);
2345 
2346   END validate_passthru_rule;
2347 END OKL_CONTRACT_TOP_LINE_PVT;